<<run UIBar.unstow()>>\
<<PlayBGM "menu">>\
\
<<SimplePic "title.png">>\
\
<<set $GameState to "menu">>\
\
<!-- prevent reload errors: needs a better solution -->\
<<set _throwaway to setup.InitForestCaves()>>\
<<set _throwaway to setup.InitDesertCaves()>>\
\
<hr>
<<set $ReturnFromMenu to passage()>>\
@@color:Gold;An Humble Pilgrimage to the Shrine of the Goddess of Primal Darkness@@
<<if $WORLD.GameVersion is "PLAYTEST">>\
<hr>\
Running <<link "version update" "Update">><</link>> is recommended for every new playtest iteration
<<elseif $WORLD.GameVersion is "24.3.18">>\
<<else>>\
<hr>
@@color:Red;Incompatible version@@:
Running <<link "version update" "Update">><</link>> is recommended
<<endif>>\
<hr>\
@@color:Gold;Character Roster@@\
<table><tr><td>\
<table><tr>\
<td>\
<<PreambleShowCharacterInterface 0>>\
</td>\
<td>\
<<PreambleShowCharacterInterface 1>>\
</td>\
<td>\
<<PreambleShowCharacterInterface 2>>\
</td>\
</tr>\
</table>\
</td>\
<td>\
<span id="CharInfo"></span>
</td>\
</tr>\
</table>\
<hr>\
@@color:Gold;World status@@
<<set $AD to setup.AD()>>\
<<if $AD.includes("file") or $AD.includes("rcdra")>>\
<<Bullet>>Highest tower level: <<if $WORLD.HTZE is 0>>Never visited<<else>><<print $WORLD.HTZE>><<endif>>
<<Bullet>>Highest forest level: <<if $WORLD.HFZE is 0>>Never visited<<else>><<print $WORLD.HFZE>><<endif>>
<<Bullet>>Highest desert level: <<if $WORLD.HDZE is 0>>Never visited<<else>><<print $WORLD.HDZE>><<endif>>
<<Bullet>>Tutorial progress: <<ShowTutorialProgress>>
<<Bullet>>Blacksmith metallurgy: <<ShowBlacksmithProgress>>
<<Bullet>>Selene progress: <<ShowSeleneProgress>>
<<Bullet>>Daphne progress: <<ShowDaphneProgress>>\
<<else>>\
@@color:Yellow;You appear to be playing Tower of Triumph on an unaffiliated website.@@
The development home and current version of Tower of Triumph may be found at <a href="https://arcdragon.com" rel="noopener noreferrer">arcdragon.com</a>.
<<endif>>\
<<unset $AD>>\
<hr>\
@@color:Gold;Controls@@
<<button "Media location">><</button>>: \
<<textbox "$ImgPath" $ImgPath>>
<<button "[Silent mode]">><<ToggleSilent>><</button>>: \
<span id="SpanToggleSilent">@@color:LightGreen;Music is ON@@</span>
\
<<link "Force generation of new Tower, Forest, and desert" "Preamble">>
<<ResetTower>>
<<set _throwaway to setup.InitForestCaves()>>\
<<set _throwaway to setup.InitDesertCaves()>>\
<<for _R to 0; _R < 3; _R++>>\
<<if $PC[_R][$PCstate] is "dead">>\
<<set $PC[_R][$PCstate] to "lost">>\
<<endif>>\
<</for>>\
<</link>> - Reset location maps, but you'll keep characters and story/quest progress
<<link "Reset world data" "Preamble">>
<<ResetWorld>>
<</link>> - This will reset all story quests and game progress, but you'll keep your characters
<<link "Clear the graveyard" "Preamble">>
<<ResetGraveyard>>
<</link>> - Erase the history of your ancestors, but retain reincarnation bonuses and achievements
<<link "Force version update check" "Update">><</link>> - If you have savefile problems this might fix them. Backup your save first.
<hr>\
@@color:Gold;Clean start@@
<<link "Unconditional full reset">>
<<AutoSaveLoad "wipe">>
<<script>>Engine.restart()<</script>>\
<</link>> - This will reset the world, remove all achievements, and delete your characters. //Cannot be undone//
<<set $DebugMode to false>>
<<if $DebugMode is true>>\
<hr>
<<link "Enable Debug Mode">>
<<set $DebugMode to true>>
<</link>>
<<endif>>\
\
\
\
\
\
<!-- web load hack meh -->\
<<set _tempname to "S64Map-E">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-ES">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-ESW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-EW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-N">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NE">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NES">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NESW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NEW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NS">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NSW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-S">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-SW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-W">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StairsUpLeft">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StairsUpRight">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StairsDown">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorCobble">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorWhite">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorBrick">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Grass1">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Grass2">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Grass3">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-TreeTrunk">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree1">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree2">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree3">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree4">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree5">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
<<script>>
/* Load Google Analytics library asynchronously */
var script = document.createElement('script');
script.async = true;
script.src = 'https://www.googletagmanager.com/gtag/js?id=G-2D28GQ85TE';
document.head.appendChild(script);
/* Configure Google Analytics after the library is loaded */
script.onload = function () {
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-2D28GQ85TE');
};
<</script>>
<<set $ImgPath to "./media/">>
<<set $AvatarPath to "./media/avatars/">>/
<<set _musicpath to "./media/">>
<<set $D to setup.AD()>>\
<<if $D.includes("C:/Users/lordb")>>\
<<set $ImgPath to "C:/Users/lordb/Desktop/twine/TransformationDungeon/media/">>
<<set _musicpath to "C:/Users/lordb/Desktop/twine/TransformationDungeon/media/">>
<<set $AvatarPath to "C:/Users/lordb/Desktop/twine/TransformationDungeon/media/avatars/">>
<<endif>>\
<<unset $D>>\
<<set _FavIcon to $ImgPath + "RinaAvatar.png">>
<link rel="shortcut icon" href="C:/Users/lordb/Desktop/twine/TransformationDungeon/media/RinaAvatar.png">
<<set $NoDoubleKeypress to 0>>
<<set $DialogOpen to false>>
<<set $PC to []>>
<<set $PC[0] to []>>
<<set $PC[1] to []>>
<<set $PC[2] to []>>
<<set $CC to 0>>
<<set $PCstate to 0>>
<<set $PCname to 1>>
<<set $PCsex to 2>>
<<set $PCgen to 3>>
<<set $PCcoins to 4>>
<<set $PChpcur to 5>>
<<set $PChpmax to 6>>
<<set $PCstr to 7>>
<<set $PCdex to 8>>
<<set $PCcon to 9>>
<<set $PCint to 10>>
<<set $PCwil to 11>>
<<set $PCx to 12>>
<<set $PCy to 13>>
<<set $PCz to 14>>
<<set $PCxp to 15>>
<<set $PClevel to 16>>
<<set $PCclass to 17>>
<<set $PCptrAVAILABLE to 18>>
<<set $PCinven to 19>>
<<set $PCmorph to 20>>
<<set $PCbp to 21>>
<<set $PCac to 22>>
<<set $PCabsorb to 23>>
<<set $PCtohit to 24>>
<<set $PCperks to 25>>
<<set $PChornycur to 26>>
<<set $PChornymax to 27>>
<<set $PChunger to 28>>
<<set $PCsexACTS to 29>>
<<set $PCmisc to 30>>
<<set $PCspellbook to 31>>
<<set $PClocation to 32>>
<<set $PCavatar to 33>>
<<set $PCunspentPoints to 34>>
<<set $PCpregnant to 35>>
<<set $PCfx to 36>>
<<set $PCfy to 37>>
<<set $PCfz to 38>>
<<set $PCmanacur to 39>>
<<set $PCmanamax to 40>>
<<set $PChtze to 41>>
<<set $PChfze to 42>>
<<set $PCkills to 43>>
<<set $PCchurchstate to 44>>
<<set $PCancestor to 45>>
<<set $PCancestraldeath to 46>>
<<set $PCretirementcap to 47>>
<<set $PCicon to 48>>
<<set $PCSeleneChat to 49>>
<<set $PCmorphQTY to 50>>
<<set $PCmorphBONI to 51>>
<<set $PCGerardChat to 52>>
<<set $PCeffects to 53>>
<<set $PCSmithDemonChat to 54>>
<<set $PCSkittersChat to 55>>
<<set $PCBoltmanChat to 56>>
<<set $PCDaphneChat to 57>>
<<set $PCdx to 58>>\
<<set $PCdy to 59>>\
<<set $PCdz to 60>>\
<<set $PChdze to 61>>
<<set $PCFlirtFromEquip to 62>>
<<set $PCparty to 63>>
<<set $PCAzaxChat to 64>>\
<<set $BPhead to 100>>
<<set $BPneck to 101>>
<<set $BPback to 102>>
<<set $BPchest to 103>>
<<set $BPwield to 104>>
<<set $BPhands to 105>>
<<set $BPring to 106>>
<<set $BPwaist to 107>>
<<set $BPlegs to 108>>
<<set $BPfeet to 109>>
<<set $BPtail to 110>>
<<set $BPhorns to 111>>
<<set $BPwings to 112>>
<<set $BPpenis to 113>>
<<set $BPboobs to 114>>
<<set $BPpussy to 115>>
<<set $BPtentacle to 116>>
<<set $BPstinger to 117>>
<<set $BPpincer to 118>>
<<set $PC[0][$PCstate] to "none">>\
<<set $PC[1][$PCstate] to "none">>
<<set $PC[2][$PCstate] to "none">>
<<InitPC 0>>
<<set $ItemPoke to {}>>
<<set $MiscPoke to 0>>
<<set $RETIREES to []>>
<<for _i to 0; _i < 10; _i++>>
<<set $RETIREES[_i] to { name: "none", gen: 0, level: 0, class: "none", gold: 0, maxforest: 0, maxtower: 0, year: 0, day: 0, won: 0, death: "" }>>
<</for>>\
<<ResetWorld>>
<<set $GameState to "menu">>
<<set $RoomPTR to "none">>
<<set $AllowNav to true>>
<<set $ReturnFromMenu to "Preamble">>
<<set $DisableMenu to false>>
<<set $ForestMap to []>>\
<<set $DesertMap to []>>\
<<set $Dungeon to []>>
<<set _HighestAchievementPTR to 78>>\
<<set $Achievements to []>>\
<<for _ACH to 0; _ACH <= _HighestAchievementPTR; _ACH++>>\
<<set $Achievements[_ACH] to 0>>\
<</for>>\
-----------------
<<set $GameLog to "">>
<<set $ComLog to []>>
<<for _i to 0; _i < 16; _i++>>
<<set $ComLog[_i] to "">>
<</for>>\
-----------------
<<set $ForceMon to ["random","random", 0]>>
<<set $Mon to {}>>
<<set $RCHelper to "">>
<<set $LogKills to 0>>
<<set $poisoned to 0>>
<<if recall('EXISTS') is true>>\
<<AutoSaveLoad "get">>
<<else>>\
<!-- first play, nothing to get -->
<<endif>>\
*************
*** Music ***
*************
<<set $SoundVolLoadOrderHack to 0>>
<<set _a to _musicpath + "menu.mp3">>
<<set _b to _musicpath + "town.mp3">>
<<set _c to _musicpath + "explore.mp3">>
<<set _d to _musicpath + "combat.mp3">>
<<set _e to _musicpath + "boss.mp3">>
<<set _f to _musicpath + "desert.mp3">>
<<cacheaudio "menu_bgm" _a>>
<<cacheaudio "town_bgm" _b>>
<<cacheaudio "explore_bgm" _c>>
<<cacheaudio "combat_bgm" _d>>
<<cacheaudio "boss_bgm" _e>>
<<cacheaudio "desert_bgm" _f>>
<<createaudiogroup ":ui">>
<<track "menu_bgm">>
<<track "town_bgm">>
<<track "explore_bgm">>
<<track "combat_bgm">>
<<track "boss_bgm">>
<<track "desert_bgm">>
<</createaudiogroup>>
*****************
*** End Music ***
*****************<<set _throwaway to setup.HideElement("menu-item-saves")>>\
<<set _throwaway to setup.HideElement("menu-item-settings")>>\
\
<<if $GameState is "menu">>\
<!-- MENU STATE -->\
@@color:Gold;Tower of Triumph@@
Version <<print $WORLD.GameVersion>>
\
\
<!-- used by character generation -->\
<span id="CapAvatar">\
<<if passage() is "CharGen">>\
<<set _CGPlaceAv to $AvatarPath + $PC[$CC][$PCavatar][0] + $PC[$CC][$PCavatar][1] +".jpg">>\
<img id="CaptionPortraitIMG" @src="_CGPlaceAv" style="width:200px">\
<<endif>>\
</span>\
\
\
\
<hr>\
<a href="https://subscribestar.adult/arcdragon" target="_blank" rel="noopener noreferrer">SubscribeStar</a>
<a href="https://arcdragon.com" target="_blank" rel="noopener noreferrer">arcdragon.com</a>
<a href="https://arcdragon.com/forum" target="_blank" rel="noopener noreferrer">Discussion Forums</a>
<a href="https://arcdragon.com/toweroftriumph/versions/" target="_blank" rel="noopener noreferrer">Download prior versions</a>
<a href="https://arcdragon.com/forum/viewtopic.php?t=4546" target="_blank" rel="noopener noreferrer">Discussion for this update</a>
@@color:Yellow;Join us on @@ <a href="https://discord.gg/AvbCAFKfzY" target="_blank" rel="noopener noreferrer">Discord</a>
<hr>\
<<link "Change Log">>
<<script>>
Dialog.setup("Change Log");
Dialog.wiki(Story.get("ChangeLog").processText());
Dialog.open();
<</script>>
<</link>>
<hr>\
<<link "Save to Disk">>\
<<set _throwaway to setup.ExportSave()>>
<</link>>
<<link "Load From Disk">>
<<script>>
jQuery(document.createElement('input'))
.prop('type', 'file')
.on('change', Save.import)
.trigger('click');
<</script>>
<</link>>
<hr>\
\
<<elseif ($GameState is "dungeon") or ($GameState is "forest") or ($GameState is "desert") or ($GameState is "combat") or ($GameState is "main")>>\
@@color:Gold;Tower of Triumph@@
<<set _throwaway to setup.ShowElement("menu-item-restart")>>\
<!-- ADVENTURE STATE -->\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<if $PC[$CC][$PCavatar][0] is "external">>\
<<set _p to $PC[$CC][$PCavatar][1]>>\
<<else>>\
<<set _p to $AvatarPath + $PC[$CC][$PCavatar][0] + $PC[$CC][$PCavatar][1] +".jpg">>\
<<endif>>\
<span id="CapAvatar"><img id="CaptionPortraitIMG" @src="_p" style="width:200px"></span>
@@color:Green;<<print $PC[$CC][$PCname]>>@@
<span id="CapSexMorph"><<ShowSexMorph>></span>\
<hr>\
\
\
\
@@color:LightGreen;Health@@: <span id ="caphealth"><<print $PC[$CC][$PChpcur]>>/<<print $PC[$CC][$PChpmax]>></span>
<div id="hpbarbkg" class="hzbarbkg"><div id="hpbar" class="hzbar"></div></div>\
<<script>>$(document).one(':passagerender', function (ev) {
Health2(100, 100, "hpbar", true, ev.content);});<</script>>\
<<run Health2($PC[$CC][$PChpcur], $PC[$CC][$PChpmax], "hpbar", true)>>\
\
@@color:LightGreen;Mana@@: <span id ="capmana"><<print $PC[$CC][$PCmanacur]>>/<<print $PC[$CC][$PCmanamax]>></span>
<div id="manabarbkg" class="hzbarbkg"><div id="manabar" class="hzbar"></div></div>\
<<script>>$(document).one(':passagerender', function (ev) {
Health2(100, 100, "manabar", true, ev.content);});<</script>>\
<<run Health2($PC[$CC][$PCmanacur], $PC[$CC][$PCmanamax], "manabar", true)>>\
\
@@color:LightGreen;Arousal@@: <span id ="caphorny"><<print $PC[$CC][$PChornycur]>>/<<print $PC[$CC][$PChornymax]>></span>
<div id="hornybarbkg" class="hzbarbkg"><div id="hornybar" class="hzbar"></div></div>\
<<script>>$(document).one(':passagerender', function (ev) {
Health2(100, 100, "hornybar", true, ev.content);});<</script>>\
<<run Health2($PC[$CC][$PChornycur], $PC[$CC][$PChornymax], "hornybar", true)>>\
\
<span id="capstaminatext"><<if $PC[$CC][$PChunger] < 2>>@@color:Red;EXHAUSTED
<<elseif $PC[$CC][$PChunger] < 100>>@@color:Yellow;Tired
<<else>>@@color:LightGreen;Stamina@@
<<endif>></span>\
<div id="hungerbarbkg" class="hzbarbkg"><div id="hungerbar" class="hzbar"></div></div>\
<<script>>$(document).one(':passagerender', function (ev) {
Health2(100, 100, "hungerbar", true, ev.content);});<</script>>\
<<run Health2($PC[$CC][$PChunger], 500, "hungerbar", true)>>\
\
<span id="capparty"><<PrintParty>></span>\
\
@@color:LightGreen;Coins@@: <span id="capcoins"><<print $PC[$CC][$PCcoins]>></span>
<span id="capinvwarning"></span>
<span id="time"><<ShowTime>></span>
<span id="capdebuginfo"></span>\
<<link "Stats">>
<<script>>
Dialog.setup("Character statistics");
Dialog.wiki(Story.get("ViewStats").processText());
Dialog.open();
<</script>>
<</link>>
<<link "Inventory">>
<<script>>
Dialog.setup("Inventory");
Dialog.wiki(Story.get("Inventory").processText());
Dialog.open();
<</script>>
<</link>>
<<link "Examine self">>
<<script>>
Dialog.setup("Body");
Dialog.wiki(Story.get("Body").processText());
Dialog.open();
<</script>>
<</link>>
<<link "Spellbook">>
<<script>>
Dialog.setup("Spellbook");
Dialog.wiki(Story.get("Spellbook").processText());
Dialog.open();
<</script>>
<</link>>
<<else>>\
caption state???
<<endif>>\
\
<!-- ALWAYS SHOW -->\
<<link "Unlockables">>
<<script>>
Dialog.setup("Unlockables");
Dialog.wiki(Story.get("Unlocks").processText());
Dialog.open();
<</script>>
<</link>>
<<link "Help">>
<<script>>
Dialog.setup("Help");
Dialog.wiki(Story.get("Help").processText());
Dialog.open();
<</script>>
<</link>>
<<if $WORLD.GameVersion is "PLAYTEST">>\
<<link "PLAYTEST info">>
<<set $DisableMenu to true>>\
<<script>>
Dialog.setup("Playtest info");
Dialog.wiki(Story.get("Playtest").processText());
Dialog.open();
<</script>>
<</link>>\
<hr>\
<<endif>>\
\
<span id="capeffects"></span>\
<<set _Pass to passage()>>\
<<if ($GameState is "combat")>>\
Cannot save during combat
<hr>\
<<elseif (_Pass is "Intro") or (_Pass is "Preamble") or (_Pass is "CharGen")>>\
<<else>>\
<<link "Save and exit to menu" "Preamble">><<AutoSaveLoad "set">><</link>>
<hr>\
<<endif>>\
<<if $WORLD.MusicEnabled is true>>\
Volume: <<volume>>\
<<endif>>\
\
<<if $DebugMode is true>>\
<!-- DEBUG ONLY -->\
<hr>\
<<link "View Error Log">>
<<script>>
Dialog.setup("Error log");
Dialog.wiki(Story.get("ViewLog").processText());
Dialog.open();
<</script>>
<</link>>
<<link "Toggle Debug">>
<<if $DebugMode is false>>
<<set $DebugMode to true>>
<<else>>
<<set $DebugMode to false>>
<<endif>>\
<<replace "#capdebugmode">>$DebugMode<</replace>>
<</link>>
<span id="capdebugmode"></span>
<<link "Map Dungeon">>
<<for _ii to 0; _ii < $WORLD.DunDimX; _ii++>>\
<<for _jj to 0; _jj < $WORLD.DunDimY; _jj++>>\
<<set $Dungeon[$PC[$CC][$PCz]][_ii][_jj][15] to 1>>\
<</for>>\
<</for>>\
<<set _throwaway to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<</link>>
<<link "Gain Levels">>
<<set $PC[$CC][$PClevel] to 6>>
<<set $PC[$CC][$PCxp] to 6000>>
<</link>>
<<link "Gain 10 XP">>
<<set $PC[$CC][$PCxp] to $PC[$CC][$PCxp] +10>>
<</link>>
<<link "Wizard">>\
<<set $PC[$CC][$PCstr] to 16>>
<<set $PC[$CC][$PCcon] to 100>>
<<set $PC[$CC][$PCcoins] to 100000>>
<<set $PC[$CC][$PChpcur] to 500>>
<<set $PC[$CC][$PChpmax] to 500>>
<<set $PC[$CC][$PCmanacur] to 1000>>
<<set $PC[$CC][$PCmanamax] to 1000>>
<<set $PC[$CC][$PChunger] to 500>>
<<ShowHealth>>
<</link>>
<<link "Learn all spells">>
<<set $PC[$CC][$PCspellbook].any to true>>\
<<set $PC[$CC][$PCspellbook].firebolt to 1>>\
<<set $PC[$CC][$PCspellbook].armor to 1>>\
<<set $PC[$CC][$PCspellbook].heal to 1>>\
<<set $PC[$CC][$PCspellbook].poison to 1>>\
<<set $PC[$CC][$PCspellbook].up to 1>>\
<<set $PC[$CC][$PCspellbook].down to 1>>\
<<set $PC[$CC][$PCspellbook].portal to 1>>\
<<set $PC[$CC][$PCspellbook].light to 1>>\
<<set $PC[$CC][$PCspellbook].map to 1>>\
<<set $PC[$CC][$PCspellbook].soultrap to 1>>\
<<set $PC[$CC][$PCspellbook].dart to 1>>\
<<set $PC[$CC][$PCspellbook].q to "firebolt">>\
<<set $PC[$CC][$PCspellbook].w to "heal">>\
<<set$PC[$CC][$PCspellbook].e to "poison">>\
<</link>>
<<link "Restock stores">>
<<Restock "all">>\
<</link>>
<<link "Transform">>\
<<set $PC[$CC][$PCbp][10].morph to "horse">>\
<<set $PC[$CC][$PCbp][10].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][10].attackdesc to "kick">>\
<<set $PC[$CC][$PCbp][10].mindam to 1>>\
<<set $PC[$CC][$PCbp][10].maxdam to 6>>\
<<set $PC[$CC][$PCbp][4].morph to "cat">>\
<<set $PC[$CC][$PCbp][4].attacktype to "cut">>\
<<set $PC[$CC][$PCbp][4].attackdesc to "claw">>\
<<set $PC[$CC][$PCbp][4].mindam to 1>>\
<<set $PC[$CC][$PCbp][4].maxdam to 6>>\
<<set $PC[$CC][$PCbp][0].morph to "spider">>\
<<set $PC[$CC][$PCbp][0].attacktype to "poison bite">>\
<<set $PC[$CC][$PCbp][0].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][0].mindam to 1>>\
<<set $PC[$CC][$PCbp][0].maxdam to 1>>\
<</link>>
<<link "AddBodyPart">>\
<<set _foo to setup.AddBodyPart($CC, $BPchest)>>
<</link>>
<<link "Advance pregnancy">>\
<<set $PC[$CC][$PCpregnant][2] to 0>>\
<<set $PC[$CC][$PCpregnant][3] to 0>>\
<</link>>
<<link "Tails">>\
<<set _Anatomy to []>>\
<<set _Anatomy[0] to { type: $BPtail, morph: "cat" }>>\
<<set _Anatomy[1] to { type: $BPtail, morph: "cat" }>>\
<<DoTransform _Anatomy>>
<</link>>
<<link "Gain Axe n Pick">>
<<set _ads to setup.GiveItem($CC, [220,107,0,0,0])>><!-- hatchet -->
<<set _ads to setup.GiveItem($CC, [115,160,3,0,0])>><!-- lockpicks -->
<</link>>
<<endif>>
<<if $GameState neq "menu">>\
<<link "I'm stuck!">>
<<set $DisableMenu to true>>\
<<set $Glinda to 0>>
<<script>>
Dialog.setup("Rescue");
Dialog.wiki(Story.get("Rescue").processText());
Dialog.open();
<</script>>
<</link>>\
<<StandardKeyboardShortcuts>>\
<<endif>>\
<span id="CapDebugInfo"></span>\
\
\
\
<<set _IPpic to $ImgPath + "IconPalette.png">>\
<img id="CapIconTilemap" height="1" style="visibility: hidden;" img @src="_IPpic"/>\<<InitPC $CC>>\
<<set _availperks to 1>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCretirementcap]>>\
<<if setup.AchievementHandler("Jack of All Stats", "HAS?", -1)>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] + 1>>\
<<endif>>\
<<set _MaxSpread to 8>>\
<<if setup.AchievementHandler("Guildmaster", "HAS?", -1)>>\
<<set _MaxSpread to _MaxSpread +1>>\
<<endif>>\
<<if setup.AchievementHandler("Gamemaster", "HAS?", -1)>>\
<<set _MaxSpread to _MaxSpread +1>>\
<<endif>>\
<<if setup.AchievementHandler("Potionmaster", "HAS?", -1)>>\
<<set _MaxSpread to _MaxSpread +1>>\
<<endif>>\
<<if setup.AchievementHandler("Metal master", "HAS?", -1)>>\
<<set _MaxSpread to _MaxSpread +1>>\
<<endif>>\
\
<<set $PC[$CC][$PCsex] to either("male","female")>>\
<<set $PC[$CC][$PCsex] to "female">>\
<<set $PC[$CC][$PCname] to setup.GenName($PC[$CC][$PCsex])>>\
\
<<set $PC[$CC][$PCicon] to []>>\
<<set $PC[$CC][$PCicon][0] to [0,0]>>\
<<set $PC[$CC][$PCicon][1] to [0,0]>>\
<<set $PC[$CC][$PCicon][2] to [0,0]>>\
<<set $PC[$CC][$PCicon][3] to [0,0]>>\
<<set $PC[$CC][$PCicon][4] to "">>\
<<set _CGav to random(100, 111)>>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set $PC[$CC][$PCavatar] to ["HumanM", _CGav]>>\
<<else>>\
<<set $PC[$CC][$PCavatar] to ["HumanF", _CGav]>>\
<<endif>>\
<<AssignIconByAvatar $PC[$CC][$PCavatar][0] $PC[$CC][$PCavatar][1]>>\
\
<<set _statnames to ["Strength","Dexterity","Toughness","Intellect","Willpower"]>>\
@@color:LightGreen;Name:@@ <<textbox "$PC[$CC][$PCname]" $PC[$CC][$PCname]>> <<button "[Random]">>\
<<set $PC[$CC][$PCname] to setup.GenName($PC[$CC][$PCsex])>>\
<<set _throwaway to setup.updatenametextbox()>>\
<</button>> | \
\
<<set _AllowHerm to false>>\
<<if setup.AchievementHandler("Playing both sides", "HAS?", -1) > 0>>\
<<set _AllowHerm to true>>\
<<endif>>\
\
@@color:LightGreen;Sex:@@ <span id ="sex"><<print $PC[$CC][$PCsex].toUpperFirst()>></span> \
<<button "[Male]">>\
<<replace "#sex">>Male<</replace>>\
<<set $PC[$CC][$PCsex] to "male">>\
<</button>> \
<<button "[Female]">>\
<<replace "#sex">>Female<</replace>>\
<<set $PC[$CC][$PCsex] to "female">>\
<</button>> \
<<if _AllowHerm is true>>\
<<button "[Hermaphrodite]">>\
<<replace "#sex">>Hermaphrodite<</replace>>\
<<set $PC[$CC][$PCsex] to "hermaphrodite">>\
<</button>>\
<<endif>> | @@color:LightGreen;Generation:@@ <<print $PC[$CC][$PCgen]>>\
\
<hr>\
@@color:Yellow;Avatars@@
<<set _CGPlaceAv to $AvatarPath + $PC[$CC][$PCavatar][0] + $PC[$CC][$PCavatar][1] +".jpg">>\
<<replace "#CapAvatar">><img @src="_CGPlaceAv" style="width:200px"><</replace>>\
<table>\
<tr>\
<td>\
<<button "Random">>
<<set _AIBCa to "HumanF">>\
<<set _AIBCb to random(100, 111)>>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set _AIBCa to "HumanM">>\
<<endif>>\
<<AssignIconByAvatar _AIBCa _AIBCb "draw">>\
<</button>>
<<button "Customize">>
<<script>>
Dialog.setup("Avatar designer");
Dialog.wiki(Story.get("Designer").processText());
Dialog.open();
<</script>>
<</button>>
</td>\
<td> </td>
<td>\
<span id="CGenIcon">\
<canvas id="CharGenIconCanvas" width="64" height="64" style="border:0px solid #d3d3d3;">
Your browser does not support the HTML canvas tag.
</canvas>
</span>
</td>\
</tr>\
</table>\
<hr>\
\
@@color:Yellow;Attribute points available@@: <span id="avail"><<print $PC[$CC][$PCunspentPoints]>></span>, @@color:Yellow;Maximum spread:@@ _MaxSpread
<<if $PC[$CC][$PCgen] is 1>>(Tip: You can subtract points to spend them elsewhere!)<br><<endif>>\
<<for _i to 7; _i < 12; _i++>>\
<<capture _i>>\
<<button "[-]">>\
<<set _StatBlock to [$PC[$CC][$PCstr], $PC[$CC][$PCdex], $PC[$CC][$PCcon], $PC[$CC][$PCint], $PC[$CC][$PCwil]]>>\
<<set _lowest to setup.LowestIn(_StatBlock)>>\
<<set _highest to setup.HighestIn(_StatBlock)>>\
<<set _MinAllow to _highest - _MaxSpread>>\
<<set _MaxAllow to _lowest + _MaxSpread>>\
<<if _MinAllow < 1>>\
<<set _MinAllow to 1>>\
<<endif>>\
\
<<set _bar to "#" + "stat_" + _i>>\
<<if ($PC[$CC][_i] > _MinAllow)>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] + 1>>\
<<set $PC[$CC][_i] to $PC[$CC][_i] - 1>>\
<<endif>>\
<<replace "#avail">>\
<<print $PC[$CC][$PCunspentPoints]>>\
<</replace>>\
<<replace _bar>>\
<<print $PC[$CC][_i]>>\
<</replace>>\
<<set _descstat to "#descstat" + _i>>\
<<replace _descstat>>\
<<DescribeStat _i>>\
<</replace>>\
<</button>> \
<<button "[+]">>\
<<set _StatBlock to [$PC[$CC][$PCstr], $PC[$CC][$PCdex], $PC[$CC][$PCcon], $PC[$CC][$PCint], $PC[$CC][$PCwil]]>>\
<<set _lowest to setup.LowestIn(_StatBlock)>>\
<<set _highest to setup.HighestIn(_StatBlock)>>\
<<set _MinAllow to _highest - _MaxSpread>>\
<<set _MaxAllow to _lowest + _MaxSpread>>\
\
<<set _bar to "#" + "stat_" + _i>>\
<<if ($PC[$CC][$PCunspentPoints] > 0) and ($PC[$CC][_i] < _MaxAllow)>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][_i] to $PC[$CC][_i] + 1>>\
<<endif>>\
<<replace "#avail">>\
<<print $PC[$CC][$PCunspentPoints]>>\
<</replace>>\
<<replace _bar>>\
<<print $PC[$CC][_i]>>\
<</replace>>\
<<set _descstat to "#descstat" + _i>>\
<<replace _descstat>>\
<<DescribeStat _i>>\
<</replace>>\
<</button>> \
<<set _foo to "stat_" + _i>>\
<span @id =_foo><<print $PC[$CC][_i]>></span> | \
<<print _statnames[_i -7]>> \
<<set _descstat to "descstat" + _i>>\
(<span @id="_descstat"><<DescribeStat _i>></span>)\
<</capture>>\
<br>\
<</for>>\
<hr>
<<set $PC[$CC][$PCclass] to 0>>\
\
<<set _classes to []>>\
<<set _classes[0] to {allow: true, name: "Peasant",show: "An unremarkable nobody from the lower class, with no particular skills or abilities. Starts with a pitchfork and ambition.",hint: "",spoil: "You start as this"}>>\
<<set _classes[1] to {allow: false, name: "Lumberjack",show: "Good with an axe, which conveniently they start with.",hint: "",spoil: "Complete a construction project"}>>\
<<set _classes[2] to {allow: false, name: "Prostitute",show: "Good at seduction. Starts with stripper gear.",hint: "",spoil: "Win 5 victories by flirting"}>>\
<<set _classes[3] to {allow: false, name: "Warrior",show: "To-hit bonuses with weapons. Starts with a weapon, armor, and shield.",hint: "",spoil: "Hit for 20+ damage with a weapon"}>>\
<<set _classes[4] to {allow: false, name: "Scholar",show: "Levels quickly.",hint: "",spoil: "Learn any spell"}>>\
<<set _classes[5] to {allow: false, name: "Priest",show: "Extra healing. Holy symbols are twice as effective. Starts with a holy symbol and Heal.",hint: "",spoil: "Accumulate 100 total spell healing"}>>\
<<set _classes[6] to {allow: false, name: "Rogue",show: "Talented against locks and traps, and can evade special attacks.",hint: "",spoil: "Succesfully avoid 3 traps in one life."}>>\
<<set _classes[7] to {allow: false, name: "Mage",show: "Lots of mana. Starts with magic dart.",hint: "",spoil: "Know every spell at once"}>>\
<<set _classes[8] to {allow: false, name: "Barbarian",show: "Bonuses to unarmed combat, plus damage absorbtion.",hint: "",spoil: "Defeat a tower monster while naked"}>>\
<<set _classes[9] to {allow: false, name: "Monk",show: "Dodges attacks when unarmored.",hint: "",spoil: "Defeat a tower monster with empty hands"}>>\
<<set _classes[10] to {allow: false, name: "Ninja",show: "Chance to critical strike with weapons. Starts with ninja uniform and sword.",hint: "",spoil: "One-shot a tower monster with a physical attack before it can act"}>>\
<<set _classes[11] to {allow: false, name: "Paladin",show: "Immune to transformation. Starts with heal, light, holy symbol, weapon, armor, and shield. ",hint: "",spoil: "Reach level 7 while still a virgin, having previously reached level 7 as both warrior and priest."}>>\
<<set _classes[12] to {allow: false, name: "Guardian",show: "Very durable. Starts with heavy armor",hint: "",spoil: "Reach 200 maximum health"}>>\
\
<!-- assemble list of all? perks -->\
<<set _CharGenPerkList to []>>\
<<set _AllowThatPerk to []>>\
<<set _AllowThatPerk[0] to true>>\
<<set _PerksSelectedDuringGen to []>>\
<<set _CharGenPerkList[0] to
{
name: "Starter",
does: "Start with some slightly better gear",
type: "perk",
show: "y",
hint: "You start with this",
clue: "You start with this",
spoil: "You start with this",
id: 0
}>>\
<<set _ArrayPos to 1>>\
\
<<set _MOO to setup.AchievementHandler(-1, "FETCH ALL DATA", -1)>>\
<<for _i to 0; _i < _MOO.length; _i++>>\
<<if _MOO[_i].type is "class">>\
<<for _j to 1; _j < _classes.length; _j++>>\
<<if _classes[_j].name is _MOO[_i].name>>\
<<if $Achievements[_i] > 0>>\
<<set _classes[_j].allow to true>>\
<<endif>>\
<<endif>>\
<</for>>\
<<elseif _MOO[_i].type is "perkpoints">>\
<<if $Achievements[_i] > 0>>\
<<set _availperks to _availperks +1>>\
<<endif>>\
<<elseif _MOO[_i].type is "perk">>\
<<set _CharGenPerkList[_ArrayPos] to _MOO[_i]>>\
<<if $Achievements[_i] is 1>>\
<<set _AllowThatPerk[_ArrayPos] to true>>\
<<else>>\
<<set _AllowThatPerk[_ArrayPos] to false>>\
<<endif>>\
<<set _PerksSelectedDuringGen[_ArrayPos] to false>>\
<<set _ArrayPos to _ArrayPos +1>>\
<<endif>>\
<</for>>\
\
<<button "[Class info]">>\
<<script>>
Dialog.setup("Class info");
Dialog.wiki('<<ShowHelpClasses>>');
Dialog.open();
<</script>>
<</button>> @@color:Gold;Character class@@: <span id="charclass">None</span>
<span id="classdesc">You are an unremarkable nobody from the lower class, with no particular learned skills or abilities.</span>
<<for _i to 0; _i < _classes.length; _i++>>\
<<if _classes[_i].allow is true>>\
<<capture _i>>\
<<set _btext to "[" + _classes[_i].name + "]">>\
<<set _spanid to "class" + _i>>\
<span @id="_spanid">\
<<button _btext>>
<<set _UnmarkThisButton to "class" + $PC[$CC][$PCclass]>>
<<set _asd to setup.ChangeButtonClass(_UnmarkThisButton,"blueb")>>
<<set $PC[$CC][$PCclass] to _i>>\
<<set _BlueThisButton to "class" + $PC[$CC][$PCclass]>>
<<set _asd to setup.ChangeButtonClass(_BlueThisButton,"highlightb")>>
<<replace "#charclass">><<print _classes[_i].name>><</replace>>\
<<replace "#classdesc">><<print _classes[_i].show>><</replace>>\
<<replace "#hint">>@@color:LightGreen;Unlocked by:@@ <<print _classes[_i].spoil>><</replace>>\
<</button>> \
</span>\
<</capture>>\
<<else>>\
<<if (_classes[_i].name is "Paladin") or (_classes[_i].name is "Ninja")>>\
<<else>>\
<<capture _i>>\
<<set _btext to "[" + _classes[_i].name + "]">>\
<<set _spanid to "class" + _i>>\
<span class="grayb" @id="_bspanid">\
<<button "_btext">>
<<replace "#hint">>@@color:LightGreen;To unlock:@@ <<print _classes[_i].spoil>><</replace>>\
<</button>> \
</span>\
<</capture>>\
<<endif>>\
<<endif>>\
<</for>>
<span id ="hint"><br></span>\
\
<hr>\
\
@@color:Yellow;Perks@@: <span id="availperks">_availperks</span>
<span id="perkdesc"><br></span>\
<!-- display perk list from above-->\
<<for _i to 0; _i < _CharGenPerkList.length; _i++>>\
<<if (_AllowThatPerk[_i] is true) and (_CharGenPerkList[_i].show is "y")>>\
<<capture _i>>\
\
<<if _CharGenPerkList[_i].name is "Explorer">>\
<<set _CharGenPerkList[_i].does to "Start with the light spell, if you're a class capable of casting it">>\
<<endif>>\
\
<<set _btext to "[" + _CharGenPerkList[_i].name + "]">>\
<<set _spanid to "perk" + _i>>\
<span @id="_spanid">\
<<button _btext>>
<<set _bID to "perk" + _i>>\
<<if _PerksSelectedDuringGen[_i] is true>>
<<set _PerksSelectedDuringGen[_i] to false>>\
<<set _availperks to _availperks +1>>\
<<replace "#perkdesc">><br><</replace>>\
<<replace "#perkhint">><br><</replace>>\
<<set _asd to setup.ChangeButtonClass(_bID, "blueb")>>\
<<elseif _availperks < 1>>
<<replace "#perkhint">>You don't have any perk points left<</replace>>\
<<else>>
<<set _PerksSelectedDuringGen[_i] to true>>\
<<set _availperks to _availperks -1>>
<<replace "#perkdesc">><<print _CharGenPerkList[_i].does>><br><</replace>>\
<<replace "#perkhint">>@@color:LightGreen;Unlocked by:@@ <<print _CharGenPerkList[_i].spoil>><</replace>>\
<<set _asd to setup.ChangeButtonClass(_bID, "highlightb")>>
<<endif>>
<<replace "#availperks">>_availperks<</replace>>\
<</button>> \
</span>\
<</capture>>\
<<else>>\
<<if _CharGenPerkList[_i].show is "y">>\
<<capture _i>>\
<span class="grayb">\
<<set _btext to "[" + _CharGenPerkList[_i].name + "]">>\
<<button _btext>>
<<replace "#perkhint">>@@color:LightGreen;Unlocked by:@@ <<print _CharGenPerkList[_i].spoil>><</replace>>\
<</button>> \
</span>\
<</capture>>\
<<endif>>\
<<endif>>\
<</for>>\
<br>\
<span id="perkhint"><br></span>\
<hr>\
<span id="KeypOne">\
<<link "1) Save and continue" "Preamble">>
<<set $PC[$CC][$PCperks] to []>>
<<set _PutItWhere to 0>>\
<<for _i to 0; _i < _PerksSelectedDuringGen.length; _i++>>
<<if _PerksSelectedDuringGen[_i] is true>>
<<set $PC[$CC][$PCperks][_PutItWhere] to _CharGenPerkList[_i].name>>
<<set _PutItWhere to _PutItWhere +1>>
<<endif>>\
<</for>>
<!-- sexes -->
<<set _Boobs to $PC[$CC][$PCstr]+$PC[$CC][$PCcon]>>
<<set _BaseSexOrgan to Math.trunc(_Boobs / 5)>>\
<<if $PC[$CC][$PCsex] is "male">>
<<set _nextbp to setup.getnextbodypart()>>\
<<set $PC[_initwho][$PCbp][_nextbp] to
{ type: $BPpenis, equip: [0,0,0,0,0], equippable: false, morph: "human", mascfem: 0, hair: "", size: _BaseSexOrgan, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<elseif $PC[$CC][$PCsex] is "female">>
<<set _nextbp to setup.getnextbodypart()>>\
<<set $PC[_initwho][$PCbp][_nextbp] to
{ type: $BPboobs, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: _Boobs, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][_nextbp+1] to
{ type: $BPpussy, equip: [0,0,0,0,0], equippable: false, morph: "human", mascfem: 0, hair: "", size: _BaseSexOrgan, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<else>>\
<<set _nextbp to setup.getnextbodypart()>>\
<<set $PC[_initwho][$PCbp][_nextbp] to
{ type: $BPpenis, equip: [0,0,0,0,0], equippable: false, morph: "human", mascfem: 0, hair: "", size: _BaseSexOrgan, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][_nextbp+1] to
{ type: $BPboobs, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: _Boobs, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][_nextbp+2] to
{ type: $BPpussy, equip: [0,0,0,0,0], equippable: false, morph: "human", mascfem: 0, hair: "", size: _BaseSexOrgan, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<endif>>
<<set $PC[$CC][$PCunspentPoints] to 0>>
<<if setup.PlayerHasPerk("Genetic Lottery") is true>>\
<<set $PC[$CC][$PCunspentPoints] to 2>>
<<endif>>\
<!-- perms -->\
<<if setup.AchievementHandler("Starve to death", "HAS?", -1) > 0>>>\
<<set _ads to setup.GiveItem($CC, [141,0,1,0,0])>><!-- cheese -->
<<endif>>\
<!-- perks -->
<<if setup.PlayerHasPerk("Starter") is true>>
<!-- starter perk -->
<<set _ads to setup.GiveItem($CC, [134,0,1,0,0])>><!-- apple -->
<<set _ads to setup.GiveItem($CC, [231,160,0,0,0])>><!-- spear -->
<<set _ads to setup.GiveItem($CC, [240,160,0,0,0])>><!-- small shield -->
<<endif>>\
<!-- note interaction with mage class -->
<<if setup.PlayerHasPerk("Black Mage") is true>>\
<<set $PC[$CC][$PCspellbook].firebolt to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "mage">>
<<set $PC[$CC][$PCspellbook].w to "firebolt">>
<<else>>\
<<set $PC[$CC][$PCspellbook].q to "firebolt">>
<<endif>>\
<<endif>>\
<!-- classes -->
<<set _job to setup.PtrToClass($PC[$CC][$PCclass])>>
<<if _job is "peasant">>\
<<set _ads to setup.GiveItem($CC, [250,160,0,0,0])>><!-- pitchfork -->
<<if $PC[$CC][$PCsex] is "male">>
<<set _ads to setup.GiveItem($CC, [300,160,0,0,0])>><!-- shirt -->
<<set _ads to setup.GiveItem($CC, [303,160,0,0,0])>><!-- pants -->
<<set _ads to setup.GiveItem($CC, [305,160,0,0,0])>><!-- shoes -->
<<elseif $PC[$CC][$PCsex] is "female">>
<<set _ads to setup.GiveItem($CC, [301,160,0,0,0])>><!-- blouse -->
<<set _ads to setup.GiveItem($CC, [304,160,0,0,0])>><!-- skirt -->
<<set _ads to setup.GiveItem($CC, [306,160,0,0,0])>><!-- boots -->
<<else>>\
<<set _ads to setup.GiveItem($CC, [300,160,0,0,0])>><!-- shirt -->
<<set _ads to setup.GiveItem($CC, [304,160,0,0,0])>><!-- skirt -->
<<set _ads to setup.GiveItem($CC, [305,160,0,0,0])>><!-- shoes -->
<<endif>>\
<<elseif _job is "lumberjack">>\
<<set _ads to setup.GiveItem($CC, [220,160,0,0,0])>><!-- hatchet -->
<<if $PC[$CC][$PCsex] is "male">>
<<set _ads to setup.GiveItem($CC, [300,160,0,0,0])>><!-- shirt -->
<<set _ads to setup.GiveItem($CC, [303,160,0,0,0])>><!-- pants -->
<<set _ads to setup.GiveItem($CC, [305,160,0,0,0])>><!-- shoes -->
<<elseif $PC[$CC][$PCsex] is "female">>
<<set _ads to setup.GiveItem($CC, [301,160,0,0,0])>><!-- blouse -->
<<set _ads to setup.GiveItem($CC, [304,160,0,0,0])>><!-- skirt -->
<<set _ads to setup.GiveItem($CC, [306,160,0,0,0])>><!-- boots -->
<<else>>\
<<set _ads to setup.GiveItem($CC, [300,160,0,0,0])>><!-- shirt -->
<<set _ads to setup.GiveItem($CC, [304,160,0,0,0])>><!-- skirt -->
<<set _ads to setup.GiveItem($CC, [305,160,0,0,0])>><!-- shoes -->
<<endif>>\
<<elseif _job is "prostitute">>\
<<if $PC[$CC][$PCsex] is "male">>
<<set _ads to setup.GiveItem($CC, [314,160,0,0,0])>><!-- g-string -->
<<set _ads to setup.GiveItem($CC, [125,160,1,0,0])>><!-- penis growth -->
<<elseif $PC[$CC][$PCsex] is "female">>
<<set _ads to setup.GiveItem($CC, [314,160,0,0,0])>><!-- g-string -->
<<set _ads to setup.GiveItem($CC, [315,160,0,0,0])>><!-- nipple stickers -->
<<set _ads to setup.GiveItem($CC, [316,160,0,0,0])>><!-- high heels -->
<<set _ads to setup.GiveItem($CC, [127,160,1,0,0])>><!-- breast growth -->
<<else>>\
<<set _ads to setup.GiveItem($CC, [314,160,0,0,0])>><!-- g-string -->
<<set _ads to setup.GiveItem($CC, [315,160,0,0,0])>><!-- nipple stickers -->
<<set _ads to setup.GiveItem($CC, [316,160,0,0,0])>><!-- high heels -->
<<set _ads to setup.GiveItem($CC, [125,160,1,0,0])>><!-- penis growth -->
<<set _ads to setup.GiveItem($CC, [127,160,1,0,0])>><!-- breast growth -->
<<endif>>\
<<elseif _job is "warrior">>\
<<set _ads to setup.GiveItem($CC, [212,160,0,0,0])>><!-- claymore -->
<<set _ads to setup.GiveItem($CC, [241,160,0,0,0])>><!-- medium shield -->
<<set _ads to setup.GiveItem($CC, [352,160,0,0,0])>><!-- hauberk -->
<<elseif _job is "scholar">>\
<<set _ads to setup.GiveItem($CC, [300,160,0,0,0])>><!-- shirt -->
<<set _ads to setup.GiveItem($CC, [303,160,0,0,0])>><!-- pants -->
<<set _ads to setup.GiveItem($CC, [305,160,0,0,0])>><!-- shoes -->
<<elseif _job is "priest">>\
<<set _ads to setup.GiveItem($CC, [104,160,0,0,0])>><!-- holy symbol -->
<<set _ads to setup.GiveItem($CC, [317,160,0,0,0])>><!-- priest robes -->
<<set $PC[$CC][$PCspellbook].heal to 1>>
<<set $PC[$CC][$PCspellbook].q to "heal">>
<<set $PC[$CC][$PCspellbook].any to true>>
<<elseif _job is "rogue">>\
<<set _ads to setup.GiveItem($CC, [300,160,0,0,0])>><!-- shirt -->
<<set _ads to setup.GiveItem($CC, [303,160,0,0,0])>><!-- pants -->
<<set _ads to setup.GiveItem($CC, [305,160,0,0,0])>><!-- shoes -->
<<set _ads to setup.GiveItem($CC, [115,160,3,0,0])>><!-- lockpicks -->
<<elseif _job is "mage">>\
<<set $PC[$CC][$PCspellbook].dart to 1>>
<<set $PC[$CC][$PCspellbook].q to "dart">>
<<set $PC[$CC][$PCspellbook].any to true>>
<<elseif _job is "barbarian">>\
<<set _foo to setup.GiveItem($CC, [102,0,3,101,0])>>
<<set _foo to setup.GiveItem($CC, [102,0,3,102,0])>>
<<set _foo to setup.GiveItem($CC, [102,0,3,103,0])>>
<<elseif _job is "monk">>\
<<set $PC[$CC][$PCcoins] to 0>>
<<elseif _job is "ninja">>\
<<set _ads to setup.GiveItem($CC, [252,160,0,0,0])>><!-- katana -->
<<set _ads to setup.GiveItem($CC, [319,160,0,0,0])>><!-- ninja uniform -->
<<set _ads to setup.GiveItem($CC, [320,160,0,0,0])>><!-- ninja cowl -->
<<set _ads to setup.GiveItem($CC, [321,160,0,0,0])>><!-- ninja pants -->
<<set _ads to setup.GiveItem($CC, [322,160,0,0,0])>><!-- black belt -->
<<set _ads to setup.GiveItem($CC, [323,160,0,0,0])>><!-- tabi -->
<<elseif _job is "paladin">>\
<<set $PC[$CC][$PCwil] to $PC[$CC][$PCwil] +2>>
<<set _ads to setup.GiveItem($CC, [104,160,0,0,0])>><!-- holy symbol -->
<<set _ads to setup.GiveItem($CC, [202,160,0,0,0])>><!-- warhammer -->
<<set _ads to setup.GiveItem($CC, [211,160,0,0,0])>><!-- tower shield -->
<<set _ads to setup.GiveItem($CC, [352,160,0,0,0])>><!-- hauberk -->
<<set $PC[$CC][$PCspellbook].heal to 1>>
<<set $PC[$CC][$PCspellbook].light to 1>>
<<set $PC[$CC][$PCspellbook].q to "heal">>
<<set $PC[$CC][$PCspellbook].any to true>>
<<elseif _job is "guardian">>\
<<set _ads to setup.GiveItem($CC, [242,160,0,0,0])>><!-- tower shield -->
<<set _ads to setup.GiveItem($CC, [352,160,0,0,0])>><!-- hauberk -->
<<set _ads to setup.GiveItem($CC, [311,160,0,0,0])>><!-- heavy helm -->
<<set _ads to setup.GiveItem($CC, [353,160,0,0,0])>><!-- leggings -->
<<set $PC[$CC][$PCspellbook].any to true>>
<<set $PC[$CC][$PCspellbook].armor to 1>>
<<set $PC[$CC][$PCspellbook].q to "armor">>
<<endif>>\
<<if setup.PlayerHasPerk("Explorer") is true>>
<<if setup.CanClassLearnSpell(_job, "light") is true>>
<<set $PC[$CC][$PCspellbook].light to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<endif>>\
<<endif>>\
<<set $PC[$CC][$PCstate] to "alive">>
<<Recalc>>
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpmax]>>
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanamax]>>
<<set $PC[$CC][$PChornymax] to $PC[$CC][$PCwil] * 10>>\
<<set _th to $PC[$CC][$PCdex] - 10>>\
<<set $PC[$CC][$PCtohit] to _th * 5>>
<<set _ScholarHack to setup.AchievementHandler("Best Scholar", "HAS?", -1)>>\
<<if _ScholarHack > 9>>\
<<set $PC[$CC][$PClevel] to 2>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] +1>>\
<<Recalc>>\
<<endif>>\
<<UpdateACandFlirts>>\
<<GetPlayerAbsorption>>\
<<AutoSaveLoad "set">>
<</link>>\
</span>
<span id="debug"></span>\
<<timed 500ms>>\
<<script>>
if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "CharGenIconCanvas") == 0) {
};
<</script>>\
<</timed>>\
<<set _throwaway to setup.FavIcon($ImgPath)>>\
<<script>>State.expired.splice(0, State.expired.length);<</script>>\
\
<<set $WORLD.CharLocs to []>>\
<<PlaceCharForMultiChar 0>>\
<<PlaceCharForMultiChar 1>>\
<<PlaceCharForMultiChar 2>>\
\
<<PlayBGM "menu">>\
<<run UIBar.stow()>>\
<<set $ReturnFromMenu to passage()>>\
<<if $WORLD.GameVersion is "PLAYTEST">>\
<center>\
<<set _pic to $ImgPath + "23-12-01.jpg">>\
<img @src="_pic"/>
@@color:Gold;An Humble Pilgrimage to the Shrine of the Goddess of Primal Darkness@@
<hr>\
@@color:Orange;WARNING: Your save file is from a playtest@@:
You can proceed, but it is strongly recommended that you restore from the backup you made before the playtest.
<span id="KeypOne">\
<<link "1) Continue" "Preamble">>
<<set $WORLD.MobileMode to 0>>
<</link>>\
</span>
<span id="KeypOne">\
<<link "Play in Mobile Compatibilty mode (experimental)" "Preamble">>
<<set $WORLD.MobileMode to 1>>
<</link>>\
</span>
Please post feedback and bug reports for this version <a href="https://arcdragon.com/forum/viewtopic.php?t=4546" target="_blank" rel="noopener noreferrer">here</a>.
</center>\
<<elseif $WORLD.GameVersion is "24.3.18">>\
<center>\
<<set _pic to $ImgPath + "24-2-18.jpg">>\
<img @src="_pic"/>
@@color:Gold;An Humble Pilgrimage to the Shrine of the Goddess of Primal Darkness@@
<hr>\
<span id="KeypOne">\
<<link "1) Continue" "Preamble">>
<<set $WORLD.MobileMode to 0>>
<</link>>\
</span>
<span id="KeypOne">\
<<link "Play in Mobile Compatibilty mode (experimental)" "Preamble">>
<<set $WORLD.MobileMode to 1>>
<</link>>\
</span>
Please post feedback and bug reports for this version <a href="https://arcdragon.com/forum/viewtopic.php?t=4546" target="_blank" rel="noopener noreferrer">here</a>.
</center>\
<hr>\
\
@@color:Gold;Legends@@ claim that in times long forgotten, when the Goddess of Primal Darkness gave birth to world, the Tower of Triumph was left as the point of contact forever linking the mortal world with that of the divine.
@@color:Gold;Few@@ who enter ever return, but those who do are always changed by their experience. Some become rich beyond all measure, others become learned and filled with great power, while still others escape as twisted wretches with their mind barely intact. But all agree that it is a place wherein great change, whether for good or bad, is possible. It is a place where the hopeful can meet with their dreams, the heroic can prove their worthiness, and the desperate can meet with salvation, or death.
@@color:Gold;You@@ have journeyed far from your home to at last reach the fabled village of Crescentheart. Its dilapidated shanties and empty shops fall far short of the grand stories that brought you here. But seeing it now with your own eyes you cannot deny the majesty of the Tower itself: A behemoth of umblemished stone clawing upwards into the sky as far as your eyes can see. And at its apex lay your final destination: the Shrine of the Goddess, the source of all wishes, the fountain of immortality...even to path to godhood. And yet also, the bringer of death and tragedy to all who fail to master its beautiful and treacherous mysteries.
<<else>>\
<center>\
<<set _pic to $ImgPath + "24-2-18.jpg">>\
<img @src="_pic"/>
<hr>
@@color:Gold;Welcome to the March 18, 2024 update for Tower of Triumph!@@
This is primarily a bugfix update, containing 29 bug fixes, with a scattering of rule and UI changes. As always, a full change log is available on the menu.
Thank you for playing Tower of Triumph!
<hr>\
<<link "[Update your save for the new version]" "Update">><</link>>
Click here to <<link "Backup your save file">><<set _throwaway to setup.ExportSave()>><</link>>\
<hr>
Support further development on <a href="https://subscribestar.adult/arcdragon" target="_blank" rel="noopener noreferrer">SubscribeStar</a>!
Join us on <a href="https://discord.gg/AvbCAFKfzY" target="_blank" rel="noopener noreferrer">Discord</a>
<a href="https://arcdragon.com/forum/viewtopic.php?t=4546" target="_blank" rel="noopener noreferrer">Discussion and bug reports for this update</a>
</center>\
<<endif>>\<<AddToLog "Arriving in DunGen">>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
\
<<if $WORLD.dungenned[_pz] > 0>>\
@@color:Red;Error: Request to generate a level that already exists@@
Proceeding anyway...
<<set _foo to "Requesting regen of zlevel: " + _pz>>\
<<AddToLog _foo>>\
<<endif>>\
\
<<set $WORLD.dungenned[$PC[$CC][$PCz]] to 1>>\
\
<<set $Dungeon[_pz] to []>>\
<<set _WhyIsThisNeeded to setup.Snake()>>\
<<set $Dungeon[_pz] to clone(_WhyIsThisNeeded)>>\
\
<<set _MessageQty to Math.trunc(($WORLD.DunDimX * $WORLD.DunDimY) / 15)>>\
<<set _dgcount to 0>>\
<<for _i to 0; _i < _MessageQty; _i++>>\
<<set _MessX to random(0, ($WORLD.DunDimX -1))>>\
<<set _MessY to random(0, ($WORLD.DunDimY -1))>>\
<<if $Dungeon[_pz][_MessX][_MessY][8] is 0>>\
<<set $Dungeon[_pz][_MessX][_MessY][8] to random(1,48)>>\
<<endif>>\
<</for>>\
\
<<set _throwaway to setup.PlaceLostTowerCorpses(_pz)>>\
\
<<set $WORLD.dungenned[_pz +1] to 0>>\
<<widget "SimplePic">>\
<<set _pic to $ImgPath + _args[0]>>\
<div id="right-img"><img @src="_pic"/></div>\
<</widget>>\
<<widget "CenterPic">>\
<<set _pic to $ImgPath + _args[0]>>\
<img @src="_pic"/>\
<</widget>>\
<<widget "RightPic">>\
<<if $WORLD.MobileMode is 1>>\
<<else>>\
<<set _RightPic to $ImgPath + _args[0]>>\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
<<endif>>\
<</widget>>\
<<widget "ToggleSilent">>\
<<if $WORLD.MusicEnabled is true>>\
<<set $WORLD.MusicEnabled to false>>\
<<masteraudio stop>>\
<<replace "#SpanToggleSilent">>\
@@color:Red;Music is OFF@@\
<</replace>>\
<<else>>\
<<set $WORLD.MusicEnabled to true>>\
<<PlayBGM "menu">>\
<<replace "#SpanToggleSilent">>\
@@color:LightGreen;Music is ON@@\
<</replace>>\
<<endif>>\
<</widget>>\
<<widget "FullyHeal">>\
<!-- debuffs? -->\
<<if setup.GetEffect("plague curse") > 0>>\
<<else>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpmax]>>\
<<endif>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanamax]>>\
<<set $PC[$CC][$PChornycur] to 0>>\
<<set $PC[$CC][$PChunger] to 500>>\
<<for _FHP to 0; _FHP < $PC[$CC][$PCparty].length; _FHP++>>\
<!-- implement: undead shouldn't heal from rest -->\
<<set $PC[$CC][$PCparty][_FHP].hpcur to $PC[$CC][$PCparty][_FHP].hpmax>>\
<<if $PC[$CC][$PCparty][_FHP].stance is "Down">>\
<<set $PC[$CC][$PCparty][_FHP].stance to "Hide">>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "GainGold">>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + $args[0]>>\
<<ShowCoins>>\
<<if $PC[$CC][$PCcoins] > 999>>\
<<AwardAchievement "Rich">>\
<<endif>>\
<</widget>>\
<<widget "Bullet">>\
• \
<</widget>>\
<<widget "FormatPosNeg">>\
<<if _args[0] < 0>>@@color:Red;<<print _args[0]>><<if _args[1]>>_args[1]<<endif>>@@\
<<elseif $PC[$CC][$PCac][0] > 0>>@@color:LightGreen;+<<print _args[0]>><<if _args[1]>><<print _args[1]>><<endif>>@@\
<<else>><<print _args[0]>>\
<<endif>>\
<</widget>>\
<<widget "ShowBlacksmithProgress">>\
<<if $WORLD.smith is 0>>Not visited\
<<else>>\
<<if $WORLD.smithLevel is 0>>Brass\
<<elseif $WORLD.smithLevel is 1>>Iron\
<<elseif $WORLD.smithLevel is 2>>Steel\
<<elseif $WORLD.smithLevel is 3>>Mithril\
<<elseif $WORLD.smithLevel is 4>>Scalar\
<<else>> @@color:Red;Error: unrecognized state: ($WORLD.smithLevel)@@\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "ShowSeleneProgress">>\
<<set _SSPmin to 0>>\
<!-- set _SSPmax to $WORLD.SeleneQuests.length -->\
<<set _SSPmax to 7>>\
<<for _i to 0; _i < _SSPmax; _i++>>\
<<if $WORLD.SeleneQuests[_i] is 3>>\
<<set _SSPmin to _SSPmin +1>>\
<<endif>>\
<</for>>\
<<if _SSPmin is 0>>\
None\
<<elseif _SSPmin is _SSPmax>>\
Tier 1 complete!\
<<else>>\
<<set _SSP to Math.trunc(_SSPmin / _SSPmax * 100)>>\
Tier 1: <<print _SSP>>%\
<<endif>>\
<</widget>>\
<<widget "ShowDaphneProgress">>\
<<set _SSPmin to 0>>\
<<set _SSPmax to $WORLD.DaphneQuests.length>>\
<<for _i to 0; _i < 6; _i++>>\
<<if $WORLD.DaphneQuests[_i] is 3>>\
<<set _SSPmin to _SSPmin +1>>\
<<endif>>\
<</for>>\
<<if _SSPmin is 0>>\
None\
<<elseif _SSPmin is _SSPmax>>\
Complete!
<<else>>\
<<set _SSP to Math.trunc(_SSPmin / _SSPmax * 100)>>\
Tier 1: <<print _SSP>>%\
<<endif>>\
<</widget>>\
<<widget "ShowTutorialProgress">>\
<<set _STPmin to 0>>\
<<set _STPmax to $WORLD.quests.length>>\
<<for _i to 0; _i < $WORLD.quests.length; _i++>>\
<<if $WORLD.quests[_i].state is "complete">>\
<<set _STPmin to _STPmin +1>>\
<<endif>>\
<</for>>\
<<if _STPmin is 0>>\
None \
<<elseif _STPmin is _STPmax>>\
100%\
<<else>>\
<<set _STP to Math.trunc(_STPmin / _STPmax * 100)>>\
<<print _STP>>%\
<<endif>>\
<</widget>>\
<<widget "ResetTower">>\
<<for _RT to 0; _RT < 3; _RT++>>\
<<set $PC[_RT][$PChfze] to 0>>\
<<set $PC[_RT][$PChtze] to 0>>\
<<set $PC[_RT][$PChdze] to 0>>\
<<if ($PC[_RT][$PClocation] is "tower")>>\
<<if $PC[_RT][$PCstate] is "alive">>\
<<set $PC[_RT][$PClocation] to "town">>\
<<set $WORLD.CharLocs[_RT][0] to "town">>\
<<elseif $PC[_RT][$PCstate] is "dead">>\
<<set $PC[_RT][$PCstate] to "lost">>\
<<set $WORLD.CharLocs[_RT][0] to "lost">>\
<<endif>>\
<<endif>>\
<</for>>\
<<set $WORLD.HFZE to 0>>\
<<set $WORLD.HTZE to 0>>\
<<set $WORLD.HDZE to 0>>\
<<set $WORLD.DunDims to []>>\
<<set $WORLD.DunDimX = 14>>\
<<set $WORLD.DunDimY = 14>>\
<<set $WORLD.TowerOrigin to [0,7]>>\
<<set $WORLD.PortalTarget to [-1, -1, -1]>>\
<<set $WORLD.Circle to 0>>\
<<set $Dungeon to []>>\
<<set $WORLD.dungenned to [0,0]>>\
<<set $WORLD.dungeonthemes to []>>\
<<set $WORLD.dungeonthemes[0] to ["Brick","Random"]>>\
<<set $WORLD.dungeonthemes[1] to ["Brick","Random"]>>\
<</widget>>\
<<widget "ResetGraveyard">>\
<<set $RETIREES to []>>
<<for _i to 0; _i < 10; _i++>>
<<set $RETIREES[_i] to { name: "none", gen: 0, level: 0, class: "none", gold: 0, maxforest: 0, maxtower: 0, year: 0, day: 0, won: 0, death: "" }>>
<</for>>\
<<run memorize('RETIREES', $RETIREES)>>\
<</widget>>\
<<widget "AddToLog">>\
<<set $GameLog to $GameLog + $args[0]>>\
<</widget>>\
<<widget "PlaceCharForMultiChar">>\
<<set _PlaceWho to _args[0]>>\
<<set $WORLD.CharLocs[_PlaceWho] to []>>\
<<set $WORLD.CharLocs[_PlaceWho][0] to $PC[_PlaceWho][$PClocation]>>\
<<if $WORLD.CharLocs[_PlaceWho][0] is "forest">>\
<<set $WORLD.CharLocs[_PlaceWho][1] to $PC[_PlaceWho][$PCfx]>>\
<<set $WORLD.CharLocs[_PlaceWho][2] to $PC[_PlaceWho][$PCfy]>>\
<<set $WORLD.CharLocs[_PlaceWho][3] to $PC[_PlaceWho][$PCfz]>>\
<<set $WORLD.CharLocs[_PlaceWho][4] to $PC[_PlaceWho][$PCicon]>>\
<<elseif $WORLD.CharLocs[_PlaceWho][0] is "desert">>\
<<set $WORLD.CharLocs[_PlaceWho][1] to $PC[_PlaceWho][$PCdx]>>\
<<set $WORLD.CharLocs[_PlaceWho][2] to $PC[_PlaceWho][$PCdy]>>\
<<set $WORLD.CharLocs[_PlaceWho][3] to $PC[_PlaceWho][$PCdz]>>\
<<set $WORLD.CharLocs[_PlaceWho][4] to $PC[_PlaceWho][$PCicon]>>\
<<elseif $WORLD.CharLocs[_PlaceWho][0] is "tower">>\
<<set $WORLD.CharLocs[_PlaceWho][1] to $PC[_PlaceWho][$PCx]>>\
<<set $WORLD.CharLocs[_PlaceWho][2] to $PC[_PlaceWho][$PCy]>>\
<<set $WORLD.CharLocs[_PlaceWho][3] to $PC[_PlaceWho][$PCz]>>\
<<set $WORLD.CharLocs[_PlaceWho][4] to $PC[_PlaceWho][$PCicon]>>\
<<elseif $WORLD.CharLocs[_PlaceWho][0] is "town">>\
<<set $WORLD.CharLocs[_PlaceWho][1] to -1>>\
<<set $WORLD.CharLocs[_PlaceWho][2] to -1>>\
<<set $WORLD.CharLocs[_PlaceWho][3] to -1>>\
<<set $WORLD.CharLocs[_PlaceWho][4] to $PC[_PlaceWho][$PCicon]>>\
<<else>>\
<<set $WORLD.CharLocs[_PlaceWho][0] to "lost">>\
<<set $WORLD.CharLocs[_PlaceWho][1] to -1>>\
<<set $WORLD.CharLocs[_PlaceWho][2] to -1>>\
<<set $WORLD.CharLocs[_PlaceWho][3] to -1>>\
<<set $WORLD.CharLocs[_PlaceWho][4] to 1>>\
<<endif>>\
<</widget>>\
<<widget "AutoSaveLoad">>\
<<if $args[0] is "get">>\
<<set $PC to recall('PC')>>\
<<set $WORLD to recall('WORLD')>>\
<<set $STORE to recall('STORE')>>\
<<set $RETIREES to recall('RETIREES')>>\
<<set $Dungeon to recall('Dungeon')>>\
<<set $Achievements to recall('Achievements')>>\
<<elseif $args[0] is "set">>\
<<PlaceCharForMultiChar 0>>\
<<PlaceCharForMultiChar 1>>\
<<PlaceCharForMultiChar 2>>\
\
<<run memorize('PC', $PC)>>\
<<run memorize('WORLD', $WORLD)>>\
<<run memorize('STORE', $STORE)>>\
<<run memorize('RETIREES', $RETIREES)>>\
<<run memorize('Dungeon', $Dungeon)>>\
<<run memorize('Achievements', $Achievements)>>\
<<run memorize('EXISTS', true)>>\
<<elseif $args[0] is "wipe">>\
<<run forget('PC')>>\
<<run forget('WORLD')>>\
<<run forget('STORE')>>\
<<run forget('RETIREES')>>\
<<run forget('Dungeon')>>\
<<run forget('Achievements')>>\
<<run forget('EXISTS')>>\
<<else>>\
<<AddToLog "@@color:red;ERROR in AutoSaveLoad: are we getting or setting?@@">>\
<<endif>>\
<</widget>>\
<<widget "MaleVirginity">>\
<<set _AchCheck to false>>\
<<if $PC[$CC][$PCsexACTS].malevirgin[1] is true>>\
<br>@@color:Pink;You have given your virginity to <<print $args[0]>>!@@
<<set $PC[$CC][$PCsexACTS].malevirgin to []>>\
<<set $PC[$CC][$PCsexACTS].malevirgin[0] to $Mon.morph>>\
<<set $PC[$CC][$PCsexACTS].malevirgin[1] to $args[0]>>\
<<set _AchCheck to true>>\
<<endif>>\
<<if (_AchCheck is true) and ($PC[$CC][$PCsexACTS].vaginalreceived > 0)>>\
<<AwardAchievement "Playing both sides">>\
<<endif>>\
<</widget>>\
<<widget "FemaleVirginity">>\
<<set _AchCheck to false>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
@@color:Pink;You have given up your virginity to <<print $args[0]>>!@@
<<set $PC[$CC][$PCsexACTS].femalevirgin to []>>\
<<set $PC[$CC][$PCsexACTS].femalevirgin[0] to $Mon.morph>>\
<<set $PC[$CC][$PCsexACTS].femalevirgin[1] to $args[0]>>\
<<set _AchCheck to true>>\
<<endif>>\
<<if (_AchCheck is true) and ($PC[$CC][$PCsexACTS].vaginalgiven > 0)>>\
<<AwardAchievement "Playing both sides">>\
<<endif>>\
<<TryPregnancy>>\
<</widget>>\
<<widget "TryPregnancy">>\
<<if $Mon.SpecialPregnancy is true>>\
<<set $PC[$CC][$PCpregnant] to [0, "", -1, -1, -1, -1]>>\
<<endif>>\
<<if $PC[$CC][$PCpregnant][0] > 0>>\
<<elseif setup.PlayerHasPerk("Barren") is true>>\
<<elseif setup.GetEffect("arren") > 0>>\
<<else>>\
<<set _Pchance to $Mon.fertility>>\
<<set _Pterm to $Mon.pterm>>\
<<if setup.PlayerHasPerk("Fertile") is true>>\
<<set _Pchance to 60>>\
<<endif>>\
<<if setup.PlayerHasPerk("Breeder") is true>>\
<<set _Pterm to Math.trunc(_Pterm)>>\
<<endif>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[0] is $Mon.morph>>\
<<set _Pchance to _Pchance + 40>>\
<<endif>>\
<<set $Conception to setup.TryPregnancy($CC, $Mon.morph, _Pchance, _Pterm)>>\
<<endif>>\
<</widget>>\
<<widget "BirthCheck">>\
<<if $DebugMode is true>>\
Debug, pregnancy status: <<print $PC[$CC][$PCpregnant]>>
Debug, active effects: <<print $PC[$CC][$PCeffects].length>>
Debug, effect array: <<print $PC[$CC][$PCeffects]>>
<<endif>>\
<<if $PC[$CC][$PCpregnant][0] > 0>>\
<<set _TotalDaysA to ($PC[$CC][$PCpregnant][2] * 365) + $PC[$CC][$PCpregnant][3]>>\
<<set _TotalDaysB to ($WORLD.year * 365) + $WORLD.day>>\
<!-- if _TotalDaysB gte _TotalDaysA -->\
<<if setup.DaysUntilBirth($CC) < 1>>\
<<script>>
Dialog.setup("Giving birth");
Dialog.wiki(Story.get("Birth").processText());
Dialog.open();
<</script>>
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "InitPC">>\
<<set _initwho to $args[0]>>\
\
<!-- reincarnation handled here -->\
<<if $PC[_initwho][$PCstate] is "none">>\
<<set $PC[_initwho][$PCgen] to 1>>\
<<set $PC[_initwho][$PCancestor] to "">>\
<<set $PC[_initwho][$PCname] to setup.GenName($PC[_initwho][$PCsex])>>\
<<set $PC[_initwho][$PCsex] to "male">>\
<<set $PC[_initwho][$ancestraldeath] to "">>\
<<set $PC[$CC][$PCretirementcap] to 1>>\
<<elseif $PC[_initwho][$PCstate] is "retired">>\
<<set $PC[_initwho][$PCgen] to $PC[_initwho][$PCgen] +1>>\
<<set $PC[_initwho][$PCancestor] to $PC[_initwho][$PCname]>>\
<<set $PC[_initwho][$ancestraldeath] to "retirement">>\
<<elseif ($PC[_initwho][$PCstate] is "dead") or ($PC[_initwho][$PCstate] is "lost")>>\
<<set $PC[_initwho][$PCgen] to $PC[_initwho][$PCgen] +1>>\
<<set $PC[_initwho][$PCancestor] to $PC[_initwho][$PCname]>>\
<<else>>\
<<script>>UI.alert("InitPC was requested for a character who is neither dead, lost retired, nor in the 'none' state. Something is probably very wrong.")<</script>>\
<<endif>>\
\
<<set $PC[_initwho][$PCstate] to "none">>\
<!-- name -->\
<!-- sex -->\
<!-- gen handled above -->\
<<set $PC[_initwho][$PCcoins] to 20>>\
<<set $PC[_initwho][$PChpcur] to 10>>\
<<set $PC[_initwho][$PChpmax] to 10>>\
<<set $PC[_initwho][$PCstr] to 12>>\
<<set $PC[_initwho][$PCdex] to 12>>\
<<set $PC[_initwho][$PCcon] to 10>>\
<<set $PC[_initwho][$PCint] to 8>>\
<<set $PC[_initwho][$PCwil] to 8>>\
<<set $PC[_initwho][$PCx] to 0>>\
<<set $PC[_initwho][$PCy] to 0>>\
<<set $PC[_initwho][$PCz] to -1>>\
<<set $PC[_initwho][$PCxp] to 0>>\
<<set $PC[_initwho][$PClevel] to 1>>\
<<set $PC[_initwho][$PCclass] to "peasant">>\
<<set $PC[_initwho][$PCinven] to []>>\
<<set $PC[_initwho][$PCinven][0] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][1] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][2] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][3] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][4] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][5] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][6] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][7] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][8] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCinven][9] to [0,0,0,0,0]>>\
<<set $PC[_initwho][$PCmorph] to "human">>\
<<set $PC[_initwho][$PCbp] to []>>\
<<set $PC[_initwho][$PCac] to 0>>\
<<set $PC[_initwho][$PCabsorb] to 0>>\
<<set $PC[_initwho][$PCperks] to []>>\
<<set $PC[$CC][$PCtohit] to $PC[_initwho][$PCdex] - 10>>\
<<set _hcolor to either("red","brown","blonde","black")>>\
<<set _hair to random(0, 3)>>\
<<set _style to either("straight", "curly")>>\
<<set $PC[_initwho][$PCbp][0] to
{ type: $BPhead, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: _hcolor, size: _hair, style: _style, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][1] to
{ type: $BPneck, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][2] to
{ type: $BPback, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][3] to
{ type: $BPchest, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][4] to
{ type: $BPwield, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "punch", attacktype: "blunt", mindam: 1, maxdam: 2}>>\
<<set $PC[_initwho][$PCbp][5] to
{ type: $BPwield, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "punch", attacktype: "blunt", mindam: 1, maxdam: 2}>>\
<<set $PC[_initwho][$PCbp][6] to
{ type: $BPhands, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][7] to
{ type: $BPring, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][8] to
{ type: $BPring, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][9] to
{ type: $BPwaist, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][10] to
{ type: $BPlegs, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PCbp][11] to
{ type: $BPfeet, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0}>>\
<<set $PC[_initwho][$PChornycur] to 0>>\
<<set $PC[_initwho][$PChornymax] to 80>>\
<<set $PC[_initwho][$PChunger] to 500>>\
<<set $PC[_initwho][$PCsexACTS] to { malevirgin: ["", true], femalevirgin: ["", true], bjgiven: 0, bjreceived: 0, pussylickgiven: 0, pussylickreceived: 0, vaginalgiven: 0, vaginalreceived: 0, analgiven: 0, analreceived: 0, semengiven: 0, semenreceived: 0, milked: 0, scissored: 0, birthed: 0, fathered: 0}>>\
<<set $PC[_initwho][$PCmisc] to { battles: 0, battleslost: 0, battleswon: 0, battlesfled: 0, traptrigger: 0, trapavoid: 0, gold: 0, chests: 0, deaths: 0, flirtvictory: 0, repeatquests: 0}>>\
<<set $PC[_initwho][$PCspellbook] to { any: false, firebolt: 0, heal: 0, armor: 0, poison: 0, up: 0, down: 0, portal: 0, light: 0, map: 0, passwall: 0, soultrap: 0, dart: 0, q: "", w: "", e: "", totalheal: 0 }>>\
<<set $PC[_initwho][$PClocation] to "town">>\
<<set $PC[_initwho][$PCunspentPoints] to 0>>\
<<set $PC[_initwho][$PCpregnant] to [0, "", -1, -1, -1, -1]>>\
<<set $PC[_initwho][$PChtze] to 0>>\
<<set $PC[_initwho][$PChfze] to 0>>\
<<set $PC[_initwho][$PChdze] to 0>>\
<<set $PC[_initwho][$PCkills] to [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCchurchstate] to 0>>\
\
<<set $PC[_initwho][$PCavatar] to ["Human", 100]>>\
<<set $PC[_initwho][$PCicon] to [0,0,0,0,""]>>\
<!-- ancestor handled above -->\
<<set $PC[_initwho][$PCSeleneChat] to [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCGerardChat] to [0,0,0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCSmithDemonChat] to [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCeffects] to []>>\
<<set $PC[_initwho][$PCSkittersChat] to [0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCBoltmanChat] to [0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCDaphneChat] to [0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCAzaxChat] to [0,0,0,0,0,0,0,0,0,0,0,0]>>\
<<set $PC[_initwho][$PCparty] to []>>\
\
<<UpdateMorphs>>\
<</widget>>\
<<widget "AdvanceTime">>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] - _args[0]>>\
<<if $PC[$CC][$PChunger] < 1>>\
<<set $PC[$CC][$PChunger] to 0>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] -1>>\
<<ShowHealth>>\
<<else>>\
<<ShowHunger>>\
<<endif>>\
<<set $WORLD.minute to $WORLD.minute + _args[0]>>\
<<for _AdvT to 0; _AdvT < 24; _AdvT++>>\
<<if $WORLD.minute > 59>>\
<<set $WORLD.minute to $WORLD.minute - 60>>\
<<set $WORLD.hour to $WORLD.hour +1>>\
<<else>>\
<<set _AdvT to 99>>\
<<endif>>\
<</for>>\
<<if $WORLD.hour > 23>>\
<<set $WORLD.hour to $WORLD.hour - 24>>\
<<set $WORLD.day to $WORLD.day +1>>\
<<endif>>\
<<if $WORLD.day > 365>>\
<<set $WORLD.day to $WORLD.day - 365>>\
<<set $WORLD.year to $WORLD.year +1>>\
<<set $WORLD.restock to 0>>\
<<endif>>\
<<if $WORLD.restock < $WORLD.day>>\
<<Restock "all">>\
<<endif>>\
<<DecrementEffects _args[0]>>\
<<set _PlagueCurse to setup.GetEffect("plague curse")>>\
<<if _PlagueCurse > 0>>\
<<set _PlagueCurse to (_PlagueCurse * -1)>>\
<<ChangeStat $PChpcur _PlagueCurse>>\
<<endif>>\
<</widget>>\
<<widget "ShowTime">>\
<<set _m to $WORLD.minute>>\
<<set _h to $WORLD.hour>>\
<<set _d to $WORLD.day>>\
<<set _y to $WORLD.year>>\
<<set _ampm to "am">>\
<<if _h is 24>>
<<set _h to 12>>\
<<elseif _h > 11>>\
<<set _ampm to "pm">>\
<<set _h to _h - 12>>\
<<endif>>\
<<if _h is 0>>\
<<set _h to 12>>\
<<endif>>\
<<if _m < 10>>\
<<set _m to "0" + _m>>\
<<endif>>\
<<if _y > 1>>\
Year: <<print _y>>, Day: <<print _d>>, <<print _h>>:<<print _m>> _ampm\
<<elseif _d > 1>>\
Day: <<print _d>>, <<print _h>>:<<print _m>> _ampm\
<<else>>\
_h:_m _ampm\
<<endif>>\
<</widget>>\
<<widget "ShowHunger">>\
<<replace "#capstaminatext">>\
<<if $PC[$CC][$PChunger] < 2>>@@color:Red;EXHAUSTED
<<elseif $PC[$CC][$PChunger] < 100>>@@color:Yellow;Tired
<<else>>@@color:LightGreen;Stamina@@
<<endif>>\
<</replace>>\
<<run Health2($PC[$CC][$PChunger], 500, "hungerbar", true)>>\
<</widget>>\
<<widget "DescribeStat">>\
<<set _ds to $PC[$CC][$args[0]] -10>>\
<<if $args[0] is $PCstr>>\
<<if _ds > 0>>\
+<<print _ds>> melee damage/carry limit\
<<elseif _ds < 0>>\
_ds melee damage\
<<else>>\
base damage\
<<endif>>\
<<elseif $args[0] is $PCdex>>\
<<if _ds > 0>>\
+<<print _ds * 5>>% defense, +<<print _ds * 5>>% to hit, +<<print $PC[$CC][$args[0]]>>% flee\
<<elseif _ds < 0>>\
<<print _ds * 5>>% defense, <<print _ds * 5>>% to hit, +<<print $PC[$CC][$args[0]]>>% flee\
<<else>>\
+<<print $PC[$CC][$args[0]]>>% flee\
<<endif>>\
<<elseif $args[0] is $PCcon>>\
<<print $PC[$CC][$args[0]]>> hp per level \
<<elseif $args[0] is $PCint>>\
<<print $PC[$CC][$args[0]]>> max mana\
<<elseif $args[0] is $PCwil>>\
+<<print $PC[$CC][$args[0]]>> flirt resist, <<print $PC[$CC][$args[0]] * 10>> max arousal, <<print Math.trunc($PC[$CC][$args[0]] / 5)>> max party size\
<<else>>\
@@color:Red;Error in DescribeStat: <<print $args[0]>>@@\
<<endif>>\
<</widget>>\
<<widget "ChangeStat">>\
<<set _cs to $args[0]>>\
<<set _csamt to $args[1]>>\
<<if setup.IsNan(_cs) is true>>\
@@color:Yellow;Error:@@ ChangeStat received a request to change stat (_cs) by (_csamt), but _csamt is not a number
The passage that made the request appears to be: <<print passage()>>
<<else>>
<<set $PC[$CC][_cs] to $PC[$CC][_cs] + _csamt>>\
<<if $PC[$CC][_cs] < 0>>\
<<set $PC[$CC][_cs] to 0>>\
<<elseif $PC[$CC][$PChpcur] > $PC[$CC][$PChpmax]>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpmax]>>\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "ShowHealth">>\
<<replace "#caphealth">>\
<<if $PC[$CC][$PChpcur] < $PC[$CC][$PChpmax]>>\
@@color:Yellow;\
<<print Health: $PC[$CC][$PChpcur]>> / <<print $PC[$CC][$PChpmax]>>@@\
<<else>>\
@@color:LightGreen;\
<<print Health: $PC[$CC][$PChpcur]>> / <<print $PC[$CC][$PChpmax]>>@@\
<<endif>>\
<</replace>>\
<<run Health2($PC[$CC][$PChpcur], $PC[$CC][$PChpmax], "hpbar", true)>>\
<</widget>>\
<<widget "ShowMana">>\
<<replace "#capmana">>\
<<if $PC[$CC][$PCmanacur] < $PC[$CC][$PCmanamax]>>\
@@color:Yellow;\
<<print Mana: $PC[$CC][$PCmanacur]>> / <<print $PC[$CC][$PCmanamax]>>@@\
<<else>>\
@@color:LightGreen;\
<<print Mana: $PC[$CC][$PCmanacur]>> / <<print $PC[$CC][$PCmanamax]>>@@\
<<endif>>\
<</replace>>\
<<run Health2($PC[$CC][$PCmanacur], $PC[$CC][$PCmanamax], "manabar", true)>>\
<</widget>>\
<<widget "ShowHorny">>\
<<replace "#caphorny">>\
<<if $PC[$CC][$PChornycur] < $PC[$CC][$PChornymax]>>\
@@color:Yellow;\
<<print Arousal: $PC[$CC][$PChornycur]>> / <<print $PC[$CC][$PChornymax]>>@@\
<<else>>\
@@color:LightGreen;\
<<print Arousal: $PC[$CC][$PChornycur]>> / <<print $PC[$CC][$PChornymax]>>@@\
<<endif>>\
<</replace>>\
<<run Health2($PC[$CC][$PChornycur], $PC[$CC][$PChornymax], "hornybar", true)>>\
<</widget>>\
<<widget "ShowCoins">>\
<<replace "#capcoins">>\
@@color:LightGreen;<<print $PC[$CC][$PCcoins]>>\
<</replace>>\
<</widget>>\
<<widget "ShowCapInv">>\
<<replace "#capinvwarning">><</replace>>\
<</widget>>\
\
\
<<widget "UpdateMorphs">>\
<<set _head to setup.getbpqty($CC, $BPhead)>>\
<<set _neck to setup.getbpqty($CC, $BPneck)>>\
<<set _chest to setup.getbpqty($CC, $BPback)>>\
<<set _back to setup.getbpqty($CC, $BPchest)>>\
<<set _arms to setup.getbpqty($CC, $BPwield)>>\
<<set _hands to setup.getbpqty($CC, $BPhands)>>\
<<set _fingers to setup.getbpqty($CC, $BPring)>>\
<<set _waist to setup.getbpqty($CC, $BPwaist)>>\
<<set _legs to setup.getbpqty($CC, $BPlegs)>>\
<<set _feet to setup.getbpqty($CC, $BPfeet)>>\
<<set _tail to setup.getbpqty($CC, $BPtail)>>\
<<set _horns to setup.getbpqty($CC, $BPhorn)>>\
<<set _wings to setup.getbpqty($CC, $BPwings)>>\
<<set _penis to setup.getbpqty($CC, $BPpenis)>>\
<<set _breast to setup.getbpqty($CC, $BPboobs)>>\
<<set _pussy to setup.getbpqty($CC, $BPpussy)>>\
\
<<set _bunny to setup.getparttypeqty($CC, "bunny")>>\
<<set _cat to setup.getparttypeqty($CC, "cat")>>\
<<set _fox to setup.getparttypeqty($CC, "fox")>>\
<<set _wolf to setup.getparttypeqty($CC, "wolf")>>\
<<set _horse to setup.getparttypeqty($CC, "horse")>>\
<<set _human to setup.getparttypeqty($CC, "human")>>\
<<set _goblin to setup.getparttypeqty($CC, "goblin")>>\
<<set _slime to setup.getparttypeqty($CC, "slime")>>\
<<set _spider to setup.getparttypeqty($CC, "spider")>>\
<<set _imp to setup.getparttypeqty($CC, "imp")>>\
<<set _hellhound to setup.getparttypeqty($CC, "hellhound")>>\
<<set _cow to setup.getparttypeqty($CC, "cow")>>\
<<set _drider to setup.getparttypeqty($CC, "drider")>>\
<<set _tentacle to setup.getparttypeqty($CC, "tentacle")>>\
<<set _demon to setup.getparttypeqty($CC, "demon")>>\
<<set _insect to setup.getparttypeqty($CC, "insect")>>\
<<set _snake to setup.getparttypeqty($CC, "snake")>>\
<<set _troll to setup.getparttypeqty($CC, "troll")>>\
<<set _dinosaur to setup.getparttypeqty($CC, "dinosaur")>>\
<<set _ratkin to setup.getparttypeqty($CC, "ratkin")>>\
\
<<set $PC[$CC][$PCmorphQTY] to {human: -1, bunny: -1, cat: -1, fox: -1, wolf: -1, horse: -1, goblin: -1, slime: -1, spider: -1, imp: -1, hellhound: -1, cow: -1, tentacle: -1, demon: -1, insect: -1, snake: -1, dinosaur: -1, ratkin: -1, troll: -1}>>\
<<set $PC[$CC][$PCmorphQTY].human to _human>>\
<<set $PC[$CC][$PCmorphQTY].bunny to _bunny>>\
<<set $PC[$CC][$PCmorphQTY].cat to _cat>>\
<<set $PC[$CC][$PCmorphQTY].fox to _fox>>\
<<set $PC[$CC][$PCmorphQTY].wolf to _wolf>>\
<<set $PC[$CC][$PCmorphQTY].horse to _horse>>\
<<set $PC[$CC][$PCmorphQTY].goblin to _goblin>>\
<<set $PC[$CC][$PCmorphQTY].slime to _slime>>\
<<set $PC[$CC][$PCmorphQTY].spider to _spider>>\
<<set $PC[$CC][$PCmorphQTY].imp to _imp>>\
<<set $PC[$CC][$PCmorphQTY].hellhound to _hellhound>>\
<<set $PC[$CC][$PCmorphQTY].cow to _cow>>\
<<set $PC[$CC][$PCmorphQTY].tentacle to _tentacle>>\
<<set $PC[$CC][$PCmorphQTY].demon to _demon>>\
<<set $PC[$CC][$PCmorphQTY].insect to _insect>>\
<<set $PC[$CC][$PCmorphQTY].snake to _snake>>\
<<set $PC[$CC][$PCmorphQTY].ratkin to _ratkin>>\
<<set $PC[$CC][$PCmorphQTY].dinosaur to _dinosaur>>\
<<set $PC[$CC][$PCmorphQTY].troll to _troll>>\
\
<<set $PC[$CC][$PCmorphBONI] to {ac: 0, hp: 0, th: 0, bodyth: 0, bodydam: 0, flirtth: 0, flirtdam: 0, lessdamage: 0, fireresist: 0}>>\
<<set $PC[$CC][$PCmorphBONI].ac to ($PC[$CC][$PCmorphQTY].insect * 2)>>\
<<set $PC[$CC][$PCmorphBONI].th to ($PC[$CC][$PCmorphQTY].spider * 2)>>\
<<set $PC[$CC][$PCmorphBONI].hp to $PC[$CC][$PCmorphQTY].wolf + ($PC[$CC][$PCmorphQTY].horse * 2) + ($PC[$CC][$PCmorphQTY].cow * 2) + ($PC[$CC][$PCmorphQTY].dinosaur * 3)>>\
<<set $PC[$CC][$PCmorphBONI].bodyth to $PC[$CC][$PCmorphQTY].fox>>\
<<set $PC[$CC][$PCmorphBONI].bodydam to $PC[$CC][$PCmorphQTY].cat>>\
<<set $PC[$CC][$PCmorphBONI].flirtth to $PC[$CC][$PCmorphQTY].bunny>>\
<<set $PC[$CC][$PCmorphBONI].flirtdam to $PC[$CC][$PCmorphQTY].goblin>>\
<<set $PC[$CC][$PCmorphBONI].lessdamage to $PC[$CC][$PCmorphQTY].slime>>\
<<set $PC[$CC][$PCmorphBONI].fireresist to $PC[$CC][$PCmorphQTY].hellhound + $PC[$CC][$PCmorphQTY].demon>>\
<<set $PC[$CC][$PCmorphBONI].disengage to $PC[$CC][$PCmorphQTY].snake * 3>>\
\
\
<<set _morph to "misshapen monstrosity">>\
<<set _foundation to false>>\
<<if (_head is 1) and (_neck is 1) and (_chest is 1) and (_waist is 1) and (_legs is 1) and (_arms > 1)>>\
<<set _foundation to true>>\
<<set _morph to "humanoid">>\
<<endif>>\
\
\
<!-- EXACTLY HUMAN -->\
<<if (_foundation is true) and (_horns is 0) and (_tail is 0) and (_feet is 1) and (_hands is 1) and (_arms is 2)>>\
<<set _morph to "human">>\
<<if (_wings > 0) and (_demon is 0)>>\
<<set _morph to "angel-morph">>\
<<endif>>\
<<endif>>\
<!-- ANIMAL MORPHS -->\
<<if _foundation is true>>\
<<if _bunny > (_cat + _fox + _wolf + _horse + _ratkin + _insect)>>\
<<set _morph to "bunny-morph">>\
<<elseif _cat > (_bunny + _fox + _wolf + _horse + _ratkin + _insect)>>\
<<set _morph to "cat-morph">>\
<<elseif _fox > (_bunny + _cat + _wolf + _horse + _ratkin + _insect)>>\
<<set _morph to "fox-morph">>\
<<elseif _wolf > (_bunny + _cat + _fox + _horse + _ratkin + _insect)>>\
<<set _morph to "wolf-morph">>\
<<elseif _horse > (_bunny + _cat + _fox + _wolf + _ratkin + _insect)>>\
<<set _morph to "horse-morph">>\
<<elseif _ratkin > (_bunny + _cat + _fox + _wolf + _horse + _insect)>>\
<<set _morph to "rat-morph">>\
<<elseif _insect > (_bunny + _cat + _fox + _wolf + _horse + _ratkin)>>\
<<set _morph to "insect-morph">>\
<<elseif _dinosaur > (_bunny + _cat + _fox + _wolf + _horse + _ratkin + _insect)>>\
<<set _morph to "dinosaur-morph">>\
<<elseif (_bunny + _cat + _fox + _wolf + _horse + _ratkin + _cow) > 0>>\
<<set _morph to "animal-morph">>\
<<endif>>\
<<endif>>\
<!-- MINOTAUR -->\
<<if (_foundation is true) and _cow > (_bunny + _cat + _fox + _wolf + _horse + _ratkin + _insect)>>\
<<set _morph to "minotaur">>\
<<endif>>\
<!-- HORSE and CENTAUR-->\
<<if _horse > 3>>\
<<if (_head is 1) and (_neck is 1) and (_chest is 1) and (_waist is 1)>>\
<<if (_legs is 2) and (_insect is 0) and (_spider is 0)>>\
<<if _arms > 0>>\
<<set _morph to "centaur">>\
<<else>>\
<<set _morph to "horse">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
\
<!-- DOGS-->\
<<if (_legs > 1) and (_legs < 4) and (_arms + _hands + _fingers < 3) and (_wolf + _hellhound > _insect)>>\
<<if _wolf > 2>>\
<<set _morph to "wolf">>\
<<elseif _hellhound > 2>>\
<<set _morph to "hellhound">>\
<<endif>>\
<<endif>>\
\
<!-- DEMON types -->\
<<if (_foundation is true) and (_demon > 3)>>\
<<if (_breast > 0) and (_pussy > 0) and (_penis is 0)>>\
<<set _morph to "succubus">>\
<<elseif (_penis > 0) and (_pussy is 0) and (_breast is 0)>>\
<<set _morph to "incubus">>\
<<elseif (_penis > 0) and (_breast > 0) and (_pussy > 0)>>\
<<set _morph to "omnibus">>\
<<else>>\
<<set _morph to "demon-morph">>\
<<endif>>\
<<endif>>\
\
<!-- SNAKE and NAGA -->\
<<if (_snake > 2) and (_legs is 0) and (_feet is 0) and (_tail > 0)>>\
<<if (_arms is 0)>>\
<<set _morph to "snake-morph">>\
<<else>>\
<<set _morph to "naga">>\
<<endif>>\
<<endif>>\
<!-- INSECT-->\
<<if _insect > (_human + _bunny + _cat + _fox + _wolf + _horse + _ratkin)>>\
<<if (_legs is 3)>>\
<<set _morph to "insect">>\
<<elseif _legs is 4>>\
<<set _morph to "scorpion">>\
<<endif>>\
<<endif>>\
<!-- GOBLIN -->\
<<if (_foundation is true) and (_goblin > _human)>>\
<<set _morph to "goblin">>\
<<endif>>\
<!-- SLIME -->\
<<if (_slime > _human) and (_slime > _bunny + _cow + _cat + _fox + _wolf + _horse + _ratkin + _insect)>>\
<<if (_foundation is true) >>\
<<set _morph to "slime-morph">>\
<<else>>\
<<set _morph to "slime">>\
<<endif>>\
<<endif>>\
<!-- SPIDER -->\
<<if (_spider > 2) and (_legs > 3)>>\
<<set _morph to "spider-morph">>\
<<if (_head is 0) and (_arms is 0)>>\
<<set _morph to "spider">>\
<<endif>>\
<<endif>>\
\
\
<!-- SEX -->\
<<set _sex to "hermaphrodite">>\
<<if (_penis > 0) and (_breast > 0) and (_pussy is 0)>>\
<<set _sex to "dick-girl">>\
<<elseif (_penis is 0) and (_pussy > 0)>>\
<<set _sex to "female">>\
<<elseif (_penis > 0) and (_pussy is 0)>>\
<<set _sex to "male">>\
<<elseif (_penis + _breast + _pussy) is 0>>\
<<set _sex to "sexless">>\
<<endif>>\
\
<<set $PC[$CC][$PCmorph] to _morph>>\
<<set $PC[$CC][$PCsex] to _sex>>\
\
<<if setup.TypeOf($GameState) is "string">>\
<<if $GameState neq "menu">>\
<<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "ShowSexMorph">>\
<<if $PC[$CC][$PCsex] is "male">>\
@@color:DeepSkyBlue;Male <<print $PC[$CC][$PCmorph]>>@@
<<elseif $PC[$CC][$PCsex] is "female">>\
@@color:Pink;Female <<print $PC[$CC][$PCmorph]>>@@
<<else>>\
@@color:DarkOrchid;<<print $PC[$CC][$PCsex].toUpperFirst()>> <<print $PC[$CC][$PCmorph]>>@@
<<endif>>\
<</widget>>\
<<widget "Recalc">>\
<<UpdateMorphs>>\
<<set $PC[$CC][$PChpmax] to ($PC[$CC][$PClevel] * $PC[$CC][$PCcon]) + $PC[$CC][$PCmorphBONI].hp>>\
<<set $PC[$CC][$PCtohit] to 5 *($PC[$CC][$PCdex] - 10)>>\
<<set _ClassName to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<if _ClassName is "peasant">>\
<<set $PC[$CC][$PChpmax] to $PC[$CC][$PChpmax] + $PC[$CC][$PClevel] >>\
<<endif>>\
<<set _BestPeasant to setup.AchievementHandler("Best Peasant", "HAS?", -1)>>\
<<if _BestPeasant > 0>>\
<<set $PC[$CC][$PChpmax] to $PC[$CC][$PChpmax] + _BestPeasant>>\
<<endif>>\
<<set _BestGuardian to setup.AchievementHandler("Best Guardian", "HAS?", -1)>>\
<<if _BestGuardian > 0>>\
<<set $PC[$CC][$PChpmax] to $PC[$CC][$PChpmax] + (_BestGuardian * 2)>>\
<<endif>>\
\
<<set $PC[$CC][$PCmanamax] to $PC[$CC][$PCint]>>\
<<set _BestMage to setup.AchievementHandler("Best Mage", "HAS?", -1)>>\
<<if _BestMage > 0>>\
<<set $PC[$CC][$PCmanamax] to $PC[$CC][$PCmanamax] + _BestMage>>\
<<endif>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "mage">>\
<<set $PC[$CC][$PCmanamax] to $PC[$CC][$PCmanamax] + $PC[$CC][$PClevel]>>\
<<endif>>\
\
<<set _EnchantBonuses to setup.GetEnchantBonuses($CC)>>\
<<if _EnchantBonuses.Health > 0>>\
<<set $PC[$CC][$PChpmax] to $PC[$CC][$PChpmax] + _EnchantBonuses.Health>>\
<<endif>>\
<<if _EnchantBonuses.ManaBonus > 0>>\
<<set $PC[$CC][$PCmanamax] to $PC[$CC][$PCmanamax] + _EnchantBonuses.ManaBonus>>\
<<endif>>\
\
<<if $PC[$CC][$PChpmax] > 199>>\
<<AwardAchievement "Guardian">>\
<<endif>>\
<</widget>>\
<<widget "AwardPartyXP">>\
<<set _PartyWho to _args[0]>>\
<<set _GainXP to _args[1]>>\
<<if _GainXP > 0>>\
<<if $PC[$CC][$PCparty].length >= _PartyWho>>\
<<set $PC[$CC][$PCparty][_PartyWho].xp to $PC[$CC][$PCparty][_PartyWho].xp + _GainXP>>\
@@color:LightGreen;<<print $PC[$CC][$PCparty][_PartyWho].name>> receives <<print _GainXP>> xp@@\
<<set _xpneed to setup.XpNeeded($PC[$CC][$PCparty][_PartyWho].level)>>\
<<if $PC[$CC][$PCparty][_PartyWho].xp >= _xpneed>>, and has @@color:LightGreen;gained a level!@@\
<<set $PC[$CC][$PCparty][_PartyWho].level to $PC[$CC][$PCparty][_PartyWho].level +1>>\
<<set $PC[$CC][$PCparty][_PartyWho].xp to $PC[$CC][$PCparty][_PartyWho].xp - _xpneed>>\
<<set $PC[$CC][$PCparty][_PartyWho].hpcur to $PC[$CC][$PCparty][_PartyWho].hpcur +1>>\
<<set $PC[$CC][$PCparty][_PartyWho].hpmax to $PC[$CC][$PCparty][_PartyWho].hpmax +1>>\
<<else>><br><<endif>>\
<<if $PC[$CC][$PCparty][_PartyWho].level > 6>>\
<<AwardAchievement "Iron Army">>\
<<endif>>\
<<else>>\
@@color:Red;Error: attempting to award xp to party member _PartyWho but there isn't one@@
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "AwardXP">>\
<<set _xpneed to setup.XpNeeded($PC[$CC][$PClevel])>>\
<<set _AXPgain to $args[0]>>\
<<set _AXPsource to $args[1]>>\
\
<<set _ReportPartyGains to []>>\
<!-- implement: delete this? We have a dedicated partyxp widget now -->\
<<if (_AXPsource is "combat") and (_AXPgain > 99999)>>\
<<set _DrainedXPMulti to 10>>\
<<set _MemberGainXP to Math.trunc(_AXPgain / 5)>>\
<<set _PartyQTY to $PC[$CC][$PCparty].length>>\
<<for _PartyLoops to 0; _PartyLoops < _PartyQTY; _PartyLoops++>>\
<<if $PC[$CC][$PCparty][_PartyLoops].state is "Alive">>\
<<set _DrainedXPMulti to _DrainedXPMulti -1>>\
<<set $PC[$CC][$PCparty][_PartyLoops].xp to $PC[$CC][$PCparty][_PartyLoops].state + _MemberGainXP>>\
<<set _ReportPartyGains[_ReportPartyGains.length -1] to _PartyLoops>>\
<<endif>>\
<</for>>\
<<set _AXPgain to Math.trunc(_AXPgain * (_DrainedXPMulti / 10))>>\
<<endif>>\
\
<<set $PC[$CC][$PCxp] to $PC[$CC][$PCxp] + _AXPgain>>\
<<if (_AXPsource is "combat") and (setup.PlayerHasPerk("Power Leveler") is true)>>\
<<set $PC[$CC][$PCxp] to $PC[$CC][$PCxp] + 1>>\
@@color:LightGreen;You have gained <<print _AXPgain>>@@ @@color:MediumSlateBlue;(+1)@@ @@color:LightGreen;experience. @@\
<<else>>\
@@color:LightGreen;You have gained <<print _AXPgain>> experience. @@\
<<endif>>\
<<if _ReportPartyGains.length > 0>>\
<br>\
<<for _PartyLoops to 0; _PartyLoops < _ReportPartyGains.length; _PartyLoops++>>\
<<set _pPTR to _ReportPartyGains[_PartyLoops]>>\
<<if $PC[$CC][$PCparty][_pPTR].state is "Alive">>\
@@color:LightGreen;<<print $PC[$CC][$PCparty][_PartyLoops].name>> has gained <<print _MemberGainXP>> experience \@@
<<set _PMXPneeded to ((2 ** $PC[$CC][$PCparty][_PartyLoops].level) * 10) -10>>\
<<if $PC[$CC][$PCparty][_pPTR].xp > _PMXPneeded>>\
<<set $PC[$CC][$PCparty][_pPTR].level to $PC[$CC][$PCparty][_pPTR].level +1>>\
and is now level <<print $PC[$CC][$PCparty][_pPTR].level>>\
<<set $PC[$CC][$PCparty][_pPTR].hpcur to $PC[$CC][$PCparty][_pPTR].hpcur + $PC[$CC][$PCparty][_pPTR].level>>\
<<set $PC[$CC][$PCparty][_pPTR].hpmax to $PC[$CC][$PCparty][_pPTR].hpmax + $PC[$CC][$PCparty][_pPTR].level>>\
<<else>><br>\
<<endif>>\
<<else>>\
@@color:Yellow;Error in AwardXP: non-living party member gained xp
<<endif>>\
<</for>>\
<<endif>>\
\
<<set _Leveled to false>>\
<<set _StatGains to 0>>\
<<for _AX to 0; _AX < 3; _AX++>>\
<<if $PC[$CC][$PCxp] >= _xpneed>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] +1>>\
<<set $PC[$CC][$PClevel] to $PC[$CC][$PClevel] +1>>\
<<set $PC[$CC][$PCxp] to $PC[$CC][$PCxp] - _xpneed>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] + $PC[$CC][$PCcon]>>\
<<set _xpneed to setup.XpNeeded($PC[$CC][$PClevel])>>\
<<set _Leveled to true>>\
<<set _StatGains to _StatGains +1>>\
<<endif>>\
<</for>>\
\
<<if _Leveled is true>>\
<<Recalc>>\
@@color:LightGreen;You are now level $PC[$CC][$PClevel]!@@
Maximum health is now $PC[$CC][$PChpmax], and you have gained +<<print _StatGains>> stat point<<if _StatGains > 1>>s<<endif>>.
<<if $PC[$CC][$PClevel] > 6>>\
<<set _ClassName to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<set _AchName to "fail">>\
<<if _ClassName is "peasant">>\
<<set _AchName to "Peasant Proficiency">>\
<<elseif _ClassName is "lumberjack">>\
<<set _AchName to "Lumberjacked up!">>\
<<elseif _ClassName is "prostitute">>\
<<set _AchName to "World's Oldest Professon">>\
<<elseif _ClassName is "warrior">>\
<<set _AchName to "Swords and spears">>\
<<elseif _ClassName is "scholar">>\
<<set _AchName to "Scholarly pursuits">>\
<<elseif _ClassName is "priest">>\
<<set _AchName to "Parson">>\
<<elseif _ClassName is "rogue">>\
<<set _AchName to "Sneaky McSneakerson">>\
<<elseif _ClassName is "mage">>\
<<set _AchName to "Magiferous Magery">>\
<<elseif _ClassName is "barbarian">>\
<<set _AchName to "Driven Before You">>\
<<elseif _ClassName is "monk">>\
<<set _AchName to "Peace in the Calm of the Horny">>\
<<elseif _ClassName is "ninja">>\
<<set _AchName to "Stabby Stealther">>\
<<elseif _ClassName is "paladin">>\
<<set _AchName to "Pally Power!">>\
<<elseif _ClassName is "guardian">>\
<<set _AchName to "Panzerheitschaftlichkeit">>\
<<endif>>\
\
<<if _AchName is "fail">>\
@@color:Red;Error in AwardXP achievement check: unrecognized class ID: " + _ClassName@@
<<else>>\
<<AwardAchievement _AchName>>\
<<endif>>\
<<elseif $PC[$CC][$PClevel] > 9>>\
<<AwardAchievement "Power Leveler">>\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "UpdateACandFlirts">>\
<<set _LightFromEquip to 0>>\
<<set _AcFromDex to ($PC[$CC][$PCdex] - 10) * 5>>\
<<set _AcFromEquip to 0>>\
<<set _AcFromMagic to setup.GetEffect("armor")>>\
<<set _BestMonk to setup.AchievementHandler("Best Monk", "HAS?", -1)>>\
<<if _BestMonk > 0>>\
<<set _AcFromBestMonk to _BestMonk * 5>>\
<<else>>\
<<set _AcFromBestMonk to 0>>\
<<endif>>\
<<set _BestGuardian to setup.AchievementHandler("Best Guardian", "HAS?", -1)>>\
<<if _BestGuardian > 0>>\
<<set _AcFromBestGuardian to _BestGuardian * 2>>\
<<else>>\
<<set _AcFromBestGuardian to 0>>\
<<endif>>\
<<set _AcFromPotions to 0>>\
<<if setup.GetEffect("stoneskin") > 0>>\
<<set _AcFromPotions to $PC[$CC][$PClevel] * 5>>\
<<endif>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _AcFromPotions to _AcFromPotions -50>>\
<<endif>>\
\
<<set _EnchantBonuses to setup.GetEnchantBonuses($CC)>>\
<<set _AcFromEnchants to _EnchantBonuses.Defense>>\
\
<<set _FlirtFromEquip to 0>>\
\
<<set _MonkArmor to 0>>\
<<set _IsMonk to false>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "monk">>\
<<set _IsMonk to true>>\
<<endif>>\
\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.equippable is true>>\
<<if $PC[$CC][$PCbp][_i].equip[0] neq 0>>\
<<DescribeItem $PC[$CC][$PCbp][_i].equip>>\
<<set _AcFromEquip to _AcFromEquip + $ItemPoke.armor>>\
<<set _FlirtFromEquip to _FlirtFromEquip + $ItemPoke.flirt>>\
<<if $ItemPoke.tooleffect is 23>>\
<<set _LightFromEquip to _LightFromEquip +1>>\
<<endif>>\
<<elseif _IsMonk is true>>\
<<set _MonkArmor to _MonkArmor + $PC[$CC][$PClevel]>>\
<<endif>>\
<<endif>>\
<</for>>\
<<set $PC[$CC][$PCac] to [_AcFromDex, _AcFromEquip, $PC[$CC][$PCmorphBONI].ac, _AcFromMagic, _AcFromBestMonk, _AcFromPotions, _AcFromEnchants, _MonkArmor, _AcFromBestGuardian]>>\
<<set $PC[$CC][$PCFlirtFromEquip] to _FlirtFromEquip>>\
<<PurgeOneEffect "antern">>\
<<if _LightFromEquip > 0>>\
<<ApplyEffect "Lantern" _LightFromEquip>>\
<<endif>>\
<</widget>>\
<<widget "GetPlayerAbsorption">>\
<<set _AbsVal to 0>>\
<<set _AbsText to "">>\
<<set _AbsCount to 0>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "barbarian">>\
<<set _AbsVal to _AbsVal +1>>\
<<set _AbsText to "Barbarian: (+1)<br>">>\
<<set _AbsCount to _AbsCount +1>>\
<<endif>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "guardian">>\
<<set _AbsVal to _AbsVal + $PC[$CC][$PClevel]>>\
<<set _AbsText to "Guardian: (+" + $PC[$CC][$PClevel] + ")<br>">>\
<<set _AbsCount to _AbsCount +1>>\
<<endif>>\
<<if setup.PlayerHasPerk("Pacifist") is true>>\
<<set _AbsVal to _AbsVal +1>>\
<<set _AbsText to _AbsText + "Perk: Pacifist: (+1)<br>">>\
<<set _AbsCount to _AbsCount +1>>\
<<endif>>\
<<if setup.PlayerHasPerk("Durable") is true>>\
<<set _AbsVal to _AbsVal +1>>\
<<set _AbsText to _AbsText + "Perk: Durable (+1)<br>">>\
<<set _AbsCount to _AbsCount +1>>\
<<endif>>\
<<set $PC[$CC][$PCabsorb] to _AbsVal>>\
<<if _AbsCount > 1>>\
<<set _AbsText to "" + _AbsVal + "<br>" + _AbsText>>\
<<endif>>\
<<if _args[0] is "show">>\
<<if _AbsCount > 0>>\
<<print _AbsText>>\
<<else>>\
None
<<endif>>\
<<endif>>\
<<set $PC[$CC][$PCabsorb] to _AbsVal>>\
<</widget>>\
<<widget "PreambleAvatarClick">>\
<<set _Who to $args[0]>>\
<<replace "#CharInfo">>\
<<if $PC[_Who][$PCstate] is "alive">>\
@@color:Yellow;<<print $PC[_Who][$PCname]>>@@ (Alive)
Level <<print $PC[_Who][$PClevel]>> <<print setup.PtrToClass($PC[_Who][$PCclass])>>, <<print $PC[_Who][$PCxp]>>/<<print setup.XpNeeded($PC[_Who][$PClevel])>> xp
Generation: <<print $PC[_Who][$PCgen]>>, reincarnation bonus: <<print $PC[_Who][$PCretirementcap]>>
<<if $PC[_who][$PClocation] is "town">>\
Location: The Town of Crescentheart
<<elseif $PC[_who][$PClocation] is "tower">>\
Location: Tower of Triumph, level <<print $PC[_who][$PCz]>>
<<elseif $PC[_who][$PClocation] is "forest">>\
Location: Enchanted Forest, level <<print $PC[_who][$PCfz]>>
<<elseif $PC[_who][$PClocation] is "desert">>\
Location: Southern desert, level <<print $PC[_who][$PCdz]>>
<<else>>\
@@error: unrecognized location: $PC[_who][$PClocation]@@
<<endif>>\
<<elseif $PC[_Who][$PCstate] is "dead">>\
@@color:Yellow;<<print $PC[_Who][$PCname]>>@@ @@color:Red;(Dead)@@
Level <<print $PC[_Who][$PClevel]>> <<print setup.PtrToClass($PC[_Who][$PCclass])>>, <<print $PC[_Who][$PCxp]>>/<<print setup.XpNeeded($PC[_Who][$PClevel])>> xp
Generation: <<print $PC[_Who][$PCgen]>>, reincarnation bonus: <<print $PC[_Who][$PCretirementcap]>>
<<if $PC[_who][$PClocation] is "town">>\
Location: Church of Immaculate Rebirth, Crescentheart
<<elseif $PC[_who][$PClocation] is "tower">>\
Location: Tower of Triumph, level <<print $PC[_who][$PCz]>>
<<elseif $PC[_who][$PClocation] is "forest">>\
Location: Enchanted Forest, level <<print $PC[_who][$PCfz]>>
<<elseif $PC[_who][$PClocation] is "desert">>\
Location: Southern desert, level <<print $PC[_who][$PCdz]>>
<<else>>\
@@error: unrecognized location: $PC[_who][$PClocation]@@
<<endif>>\
<<elseif $PC[_Who][$PCstate] is "retired">>\
@@color:Yellow;Ready to reincarnate!@@
Generation: <<print $PC[_Who][$PCgen] +1>>, reincarnation bonus: <<print $PC[_Who][$PCretirementcap]>>
<<elseif $PC[_Who][$PCstate] is "lost">>\
@@color:Yellow;<<print $PC[_Who][$PCname]>>@@ (Lost)
Level <<print $PC[_Who][$PClevel]>> <<print setup.PtrToClass($PC[_Who][$PCclass])>>, <<print $PC[_Who][$PCxp]>>/<<print setup.XpNeeded($PC[_Who][$PClevel])>> xp
Generation: <<print $PC[_Who][$PCgen]>>, reincarnation bonus: <<print $PC[_Who][$PCretirementcap]>>
<<if $PC[_who][$PClocation] is "town">>\
Last known location: Church of Immaculate Rebirth, Crescentheart
<<elseif $PC[_who][$PClocation] is "tower">>\
Last known location: Tower of Triumph, level <<print $PC[_who][$PCz]>>
<<elseif $PC[_who][$PClocation] is "forest">>\
Last known location: Enchanted Forest, level <<print $PC[_who][$PCfz]>>
<<elseif $PC[_who][$PClocation] is "desert">>\
Last known location: Southern desert, level <<print $PC[_who][$PCdz]>>
<<else>>\
Last known location @@error: unrecognized location: $PC[_who][$PClocation]@@
<<endif>>\
<<elseif $PC[_Who][$PCstate] is "in transit">>\
@@color:Yellow;<<print $PC[_Who][$PCname]>>@@ (In transit)
<<set _PickupPTR to $PC[_Who][$PCz]>>\
This character's body was picked up by <<print $PC[_PickupPTR][$PCname]>>, and is currently in transit.
<<else>>\
<<if _Who is 0>>\
@@color:Yellow;Character slot is available!@@
<<elseif _Who is 1>>\
<<if setup.AchievementHandler("I feel your loss", "HAS?", -1) > 0>>\
@@color:Yellow;Character slot is available!@@
<<else>>\
@@color:Yellow;Character slot is locked@@
(Try progressing through the tutorial quests at the guild to unlock it)
<<endif>>\
<<elseif _Who is 2>>\
<<if setup.AchievementHandler("Three's Company", "HAS?", -1) > 0>>\
@@color:Yellow;Character slot is available!@@
<<else>>\
@@color:Yellow;Character slot is locked@@
(Try progressing through the tutorial quests at the guild to unlock it)
<<endif>>\
<<else>>\
@@color:Interface error: PreambleAvatarClick request for: (_Who))
<<endif>>\
<<endif>>\
<</replace>>\
<</widget>>\
<<widget "PreambleShowCharacterInterface">>\
<<set _who to $args[0]>>\
<<set _action to "default">>\
<<if $PC[_who][$PCstate] is "alive">>\
<<if $PC[_who][$PCavatar][0] is "external">>\
<<set _p to $PC[_who][$PCavatar][1]>>\
<<else>>\
<<set _p to $AvatarPath + $PC[_who][$PCavatar][0] + $PC[_who][$PCavatar][1] +".jpg">>\
<<endif>>\
<<if $PC[_who][$PClocation] is "tower">>\
<<set _LinkText to "Play!">>\
<<set _action to "Dungeon64">>\
<<elseif $PC[_who][$PClocation] is "town">>\
<<set _LinkText to "Play!">>\
<<set _action to "TownSquare">>\
<<elseif $PC[_who][$PClocation] is "forest">>\
<<set _LinkText to "Play!">>\
<<set _action to "Forest">>\
<<elseif $PC[_who][$PClocation] is "desert">>\
<<set _LinkText to "Play!">>\
<<set _action to "Desert">>\
<<endif>>\
<<elseif $PC[_who][$PCstate] is "dead">>\
<<set _p to $ImgPath + "boxdead.jpg">>\
<<set _LinkText to "Reincarnate!">>\
<<set _action to "CharGen">>\
<<elseif $PC[_who][$PCstate] is "lost">>\
<<set _p to $ImgPath + "boxdead.jpg">>\
<<set _LinkText to "Reincarnate!">>\
<<set _action to "CharGen">>\
<<elseif $PC[_who][$PCstate] is "in transit">>\
<<set _p to $ImgPath + "boxavail.jpg">>\
<<set _LinkText to "Body in transit">>\
<<set _action to "none">>\
<<elseif $PC[_who][$PCstate] is "retired">>\
<<set _p to $ImgPath + "boxavail.jpg">>\
<<set _LinkText to "Reincarnate!">>\
<<set _action to "CharGen">>\
<<elseif $PC[_who][$PCstate] is "none">>\
<<if _who is 0>>\
<<set _p to $ImgPath + "boxavail.jpg">>\
<<set _LinkText to "Create">>\
<<set _action to "CharGen">>\
<<elseif _who is 1>>\
<<if setup.AchievementHandler("I feel your loss", "HAS?", -1) > 0>>\
<<set _p to $ImgPath + "boxavail.jpg">>\
<<set _LinkText to "Create">>\
<<set _action to "CharGen">>\
<<else>>\
<<set _p to $ImgPath + "boxlocked.jpg">>\
<<set _LinkText to "(Slot locked)">>\
<<set _action to "none">>\
<<endif>>\
<<elseif _who is 2>>\
<<if setup.AchievementHandler("Three's Company", "HAS?", -1) > 0>>\
<<set _p to $ImgPath + "boxavail.jpg">>\
<<set _LinkText to "Create">>\
<<set _action to "CharGen">>\
<<else>>\
<<set _p to $ImgPath + "boxlocked.jpg">>\
<<set _LinkText to "(Slot locked)">>\
<<set _action to "none">>\
<<endif>>\
<<else>>\
@@color:Error in interface: who is: _who@@
<<endif>>\
<<endif>>\
\
<<capture _who>>\
<span class="PreambleImgWrapper">\
<span id="ReplaceThis">\
<<link [img[_p]]>>
<<PreambleAvatarClick _who>>
<</link>>\
</span>\
</span>\
<</capture>>\
<<if _action is "none">>\
<<print _LinkText>>\
<<else>>\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree"]>>\
<<set _KeyChars to ["1","2","3"]>>\
<span @id="_SpanTexts[_who]">\
<<set _LinkText to _KeyChars[_who] + ") " + _LinkText>>\
<<capture _who>>\
<<link _LinkText _action>>
<<set $CC to _who>>
<</link>>
<</capture>>\
</span>\
<<endif>>\
<</widget>>\
<<widget "KickFromTower">>\
<<set $PC[$CC][$PClocation] to "town">>\
<<set $PC[$CC][$PCz] to 0>>\
<<set $PC[$CC][$PCx] to $WORLD.TowerOrigin[0]>>\
<<set $PC[$CC][$Pyx] to $WORLD.TowerOrigin[1]>>\
<</widget>>\
<<widget "AssignHumanoidAnatomyToMon">>\
<<set _Atype to $args[0]>>\
<<set _Asex to $args[1]>>\
<<set _Abonus to $args[2]>>\
<<set $Mon.anatomy to []>>\
<<if _Asex is "male">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: _Atype }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: _Atype }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: _Atype }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: _Atype }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: _Atype }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: _Atype }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: _Atype }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: _Atype }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: _Atype }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: _Atype }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: _Atype }>>\
<<set $Mon.anatomy[11] to { type: $BPfeet, morph: _Atype }>>\
<<set $Mon.anatomy[12] to { type: $BPpenis, morph: _Atype }>>\
<<elseif _Asex is "female">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: _Atype }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: _Atype }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: _Atype }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: _Atype }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: _Atype }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: _Atype }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: _Atype }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: _Atype }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: _Atype }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: _Atype }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: _Atype }>>\
<<set $Mon.anatomy[11] to { type: $BPfeet, morph: _Atype }>>\
<<set $Mon.anatomy[12] to { type: $BPboobs, morph: _Atype }>>\
<<set $Mon.anatomy[13] to { type: $BPpussy, morph: _Atype }>>\
<<elseif _Asex is "herm">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: _Atype }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: _Atype }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: _Atype }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: _Atype }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: _Atype }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: _Atype }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: _Atype }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: _Atype }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: _Atype }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: _Atype }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: _Atype }>>\
<<set $Mon.anatomy[11] to { type: $BPfeet, morph: _Atype }>>\
<<set $Mon.anatomy[12] to { type: $BPpenis, morph: _Atype }>>\
<<set $Mon.anatomy[13] to { type: $BPboobs, morph: _Atype }>>\
<<set $Mon.anatomy[14] to { type: $BPpussy, morph: _Atype }>>\
<<else>>\
@@color:Red;Error in AssignHumanoidAnatomyToMon: (_Atype, _Asex)
<<endif>>\
<<if _Abonus is "tail">>\
<<set $Mon.anatomy[$Mon.anatomy.length] to { type: $BPtail, morph: _Atype }>>\
<<endif>>\
<</widget>>\
<<widget "AddToGraveyard">>\
<<for _i to 9; _i > 0; _i-->>
<<set $RETIREES[_i] to $RETIREES[_i -1]>>\
<</for>>\
<<set $RETIREES[0] to {
name: $PC[$CC][$PCname],
gen: $PC[$CC][$PCgen],
level: $PC[$CC][$PClevel],
class: setup.PtrToClass($PC[$CC][$PCclass]),
gold: $PC[$CC][$PCcoin],
maxforest: $PC[$CC][$PChfze],
maxtower: $PC[$CC][$PChtze],
maxdesert: $PC[$CC][$PChdze],
year: $WORLD.year,
day: $WORLD.day,
won: $PC[$CC][$PCmisc].battleswon,
death: "retired"
}>>\
<</widget>>\
<<widget "PlayBGM">>\
<<if $WORLD.MusicEnabled is false>>\
<<masteraudio stop>>\
<<else>>\
<<if $args[0] is $WORLD.music>>\
<<else>>\
<<set $WORLD.music to $args[0]>>\
<<if $args[0] is "menu">>\
<<masteraudio stop>>\
<<audio "menu_bgm" volume 0.4 play loop>>\
<<elseif $args[0] is "town">>\
<<masteraudio stop>>\
<<audio "town_bgm" volume 0.4 play loop>>\
<<elseif $args[0] is "explore">>\
<<masteraudio stop>>\
<<audio "explore_bgm" volume 0.4 play loop>>\
<<elseif $args[0] is "combat">>\
<<masteraudio stop>>\
<<audio "combat_bgm" volume 0.4 play loop>>\
<<elseif $args[0] is "boss">>\
<<masteraudio stop>>\
<<audio "boss_bgm" volume 0.4 play loop>>\
<<elseif $args[0] is "desert">>\
<<masteraudio stop>>\
<<audio "desert_bgm" volume 0.4 play loop>>\
<<else>>\
<<masteraudio stop>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "SpellbookQWE">>\
<<set _Spell = $args[0]>>\
<<set _QWE to $args[1]>>\
<<set _CssStuff to "grayb">>\
<<set _ButtonText to "[" + _QWE + "]">>\
<<set _SpanID to _QWE + _Spell>>\
<<if $PC[$CC][$PCspellbook][_QWE] is _Spell>>\
<<set _CssStuff to "blueb">>\
<<endif>>\
<span @class="_CssStuff" @id="_SpanID">\
<<capture _Spell, _QWE>>\
<<button _ButtonText>>\
<<set _SpellSpans to ["firebolt","heal","armor","poison","soultrap","dart","portal"]>>\
<<for _SBI to 0; _SBI < _SpellSpans.length; _SBI++>>\
<<set _SpellKey to _SpellSpans[_SBI]>>\
<<if $PC[$CC][$PCspellbook][_SpellKey] > 0>>
<<set _GrayThisButton to _QWE + _SpellSpans[_SBI]>>\
<<set _asd to setup.ChangeButtonClass(_GrayThisButton,"grayb")>>
<<endif>>
<</for>>\
<<if $PC[$CC][$PCspellbook][_QWE] is _Spell>>\
<<set $PC[$CC][$PCspellbook][_QWE] to "">>\
<<else>>\
<<set _BlueThisButton to _QWE + _Spell>>\
<<set _asd to setup.ChangeButtonClass(_BlueThisButton,"blueb")>>
<<set $PC[$CC][$PCspellbook][_QWE] to _Spell>>\
<<endif>>\
<</button>>\
<</capture>>\
</span>\
<</widget>>\
<<widget "ClearTemporaryEffects">>\
<<for _CBE to $PC[$CC][$PCeffects].length -1; _CBE > -1; _CBE-->>\
<<if $PC[$CC][$PCeffects][_CBE][0].includes("ebbed")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("oison")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("rmor")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("raying")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("soul")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("toneskin")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("esist")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes("rage")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes(" walk")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<elseif $PC[$CC][$PCeffects][_CBE][0].includes(" breath")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "DecrementEffects">>\
<<for _DE to $PC[$CC][$PCeffects].length -1; _DE > -1; _DE-->>\
<<if $PC[$CC][$PCeffects][_DE][0].includes("ight")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes("roused")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes("ttract")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes("ertile")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes("arren")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes("rage")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes(" walk")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<elseif $PC[$CC][$PCeffects][_DE][0].includes(" breath")>>\
<<set $PC[$CC][$PCeffects][_DE][1] to $PC[$CC][$PCeffects][_DE][1] - _args[0]>>\
<<endif>>\
<<if $PC[$CC][$PCeffects][_DE][1] < 1>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_DE)>>\
<<endif>>\
<</for>>\
<<ShowActiveEffects>>\
<</widget>>\
<<widget "PurgeOneEffect">>\
<<set _PurgeThis to _args[0]>>\
<<for _POE to $PC[$CC][$PCeffects].length -1; _POE > -1; _POE-->>\
<<if $PC[$CC][$PCeffects][_POE][0].includes(_PurgeThis)>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_POE)>>\
<<endif>>\
<</for>>\
<<ShowActiveEffects>>\
<</widget>>\
<<widget "ShowActiveEffects">>\
<<if $PC[$CC][$PCeffects].length > 0>>\
<<replace "#capeffects">>\
@@color:Gold;Active effects@@
<<for _SAE to 0; _SAE < $PC[$CC][$PCeffects].length; _SAE++>>\
<<print $PC[$CC][$PCeffects][_SAE][0]>>: <<print $PC[$CC][$PCeffects][_SAE][1]>>
<</for>>\
<hr>\
<</replace>>\
<<else>>\
<<replace "#capeffects">><</replace>>\
<<endif>>\
<</widget>>\
<<widget "ApplyEffect">>\
<<set _AEwhich to $args[0]>>\
<<set _AEweight to $args[1]>>\
<<set _AEtarget to -1>>\
<<set _AElength to $PC[$CC][$PCeffects].length>>\
<<for _AEi to 0; _AEi < _AElength; _AEi++>>\
<<if $PC[$CC][$PCeffects][_AEi][0] is _AEwhich>>\
<<set _AEtarget to _AEi>>\
<<set _AEi to 999>>\
<<endif>>\
<</for>>\
<<if _AEtarget > -1>>\
<<set $PC[$CC][$PCeffects][_AEtarget][1] to $PC[$CC][$PCeffects][_AEtarget][1] + _AEweight>>\
<<else>>\
<<set $PC[$CC][$PCeffects][_AElength] to [_AEwhich, _AEweight]>>\
<<endif>>\
<</widget>>\
<<widget "SpellAchieveCheck">>\
<<AwardAchievement "Scholar">>\
<<set _SAC to 0>>\
<<set _MageReady to true>>\
<<set _SpellList to ["firebolt","armor","poison","heal","up","down","portal","map","light","soultrap"]>>\
<!-- cure? -->\
<!-- passwall? -->
<<set _SACfails to 0>>\
<<for _SACi to 0; _SACi < _SpellList.length; _SACi++>>\
<<set _key to _SpellList[_SACi]>>\
<<if $PC[$CC][$PCspellbook][_key] is 0>>\
<<set _MageReady to false>>\
<<set _SACfails to _SACfails +1>>\
<<endif>>\
<</for>>\
<<if _MageReady is true>>\
<<AwardAchievement "Mage">>\
<<endif>>\
<</widget>>\
<<widget "ResetWorld">>\
<<set $WORLD to {}>>
<<set $WORLD.GameVersion to "24.3.18">>
<<set $WORLD.VersionCounter to 2>>
<<set $WORLD.MusicEnabled to true>>
<<set $WORLD.intro to 0>>
<<set $WORLD.selene to 0>>
<<set $WORLD.SeleneQuests to [0,0,0,0,0,0,0,0,0,0]>>\
<<set $WORLD.DaphneQuests to [0,0,0,0,0,0,0,0,0,0]>>\
<<set $WORLD.BoltmanQuests to [0,0,0,0,0]>>\
<<set $WORLD.smith to 0>>
<<set $WORLD.smithLevel to 0>>
<<set $WORLD.SmithQuests to [either(0,1),0]>>
<<set $WORLD.market to 0>>
<<set $WORLD.gstore to 0>>
<<set $WORLD.pawn to 0>>
<<set $WORLD.house to {state: 0, piggybank: -1, bed: 0, storage: 0}>>\
<<set $WORLD.guild to 0>>
<<set $WORLD.tsquare to 0>>
<<set $WORLD.bridge to 0>>
<<set $WORLD.MobileMode to 0>>
<<set $WORLD.orphanage to 0>>
<<set $WORLD.orphans to []>>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $WORLD.quests to []>>
<<set $WORLD.quests[0] to { state: "avail" }>>
<<set $WORLD.quests[1] to { state: "avail", target: "bunny-morph", startat: 0 }>>
<<set $WORLD.quests[2] to { state: "avail", target: "bunny-morph", progress: 0 }>>
<<set $WORLD.quests[3] to { state: "inactive" }>>
<<set $WORLD.quests[4] to { state: "inactive" }>>
<<set $WORLD.quests[5] to { state: "inactive", reward: 50, gen: 1 }>>
<<set $WORLD.quests[6] to { state: "inactive" }>>
<<set $WORLD.quests[7] to { state: "inactive", harmony: -1 }>>
<<set $WORLD.RepeatableQuests to []>>
<<set $WORLD.RepeatableQuests[0] to { state: "avail", target: "", startat: 0, need: 0, lastupdate: 0 }>>
<<set $WORLD.RepeatableQuests[1] to { state: "avail", target: "", startat: 0, need: 0, lastupdate: 0 }>>
<<set $WORLD.RepeatableQuests[2] to { state: "avail", target: "", need: 0, lastupdate: 0, xpreward: 0, goldreward: 0 }>>
<<set $WORLD.RepeatableQuests[3] to { state: "avail", target: "", need: 0, lastupdate: 0 }>>
<<set $WORLD.MainQuest to []>>
<<set $WORLD.MainQuest[0] to { state: "inactive" }>>
<<set $WORLD.MainQuest[1] to { state: "inactive" }>>
<<set $WORLD.MainQuest[2] to { state: "inactive" }>>
<<set $WORLD.MainQuest[3] to { state: "inactive" }>>
<<set $WORLD.MainQuest[4] to { state: "inactive" }>>
<<set $WORLD.MainQuest[5] to { state: "inactive" }>>
<<set $WORLD.MainQuest[6] to { state: "inactive" }>>
<<set $WORLD.MainQuest[7] to { state: "inactive" }>>
<<set $WORLD.datapasser to 0>>
<<set $WORLD.charslots to 1>>
<<set $WORLD.turnssincecombat to 0>>
<<set $WORLD.Bodyview to 0>>
<<set $WORLD.minute to 0>>
<<set $WORLD.hour to 8>>
<<set $WORLD.day to 1>>
<<set $WORLD.year to 1>>
<<set $WORLD.dundim to 6>>
<<set $WORLD.DunDims to []>>
<<set $WORLD.DunDimX = 14>>
<<set $WORLD.DunDimY = 14>>
<<set $WORLD.dungenned to [0,0]>>
<<set $WORLD.dungeonthemes to []>>
<<set $WORLD.dungeonthemes[0] to ["Brick","Random"]>>
<<set $WORLD.dungeonthemes[1] to ["Brick","Random"]>>
<<set $WORLD.Circle to 0>>\
<<set $WORLD.restock to 0>>
<<set _a to either("The Barfing ", "The Irresponsible ", "The Lethargic ", "The Irreverent ", "The Peppy ")>>
<<set _b to either("Yak ","Pangolin ","Shrew ","Wombat ","Porpoise ")>>
<<set _c to either("Tavern","Inn","Inn and Tavern")>>
<<set $WORLD.tavernname to _a + _b + _c>>
<<set $WORLD.tavern to 0>>
<<set $WORLD.diedby to "">>
<<set $WORLD.dialogue to 0>>
<<set $WORLD.HTZE to 0>>\
<<set $WORLD.HFZE to 0>>\
<<set $WORLD.HDZE to 0>>\
<<set $WORLD.Piggybank to 0>>
<<set $WORLD.LegacyVault to 0>>
<<set $WORLD.VaultGold to 0>>
<<set $WORLD.ForestTheme to 1>>
<<set $WORLD.ForestDims to []>>
<<set $WORLD.ForestDims[0] to 14>>
<<set $WORLD.ForestDims[1] to 7>>
<<set $WORLD.TreeCutter to false>>
<<set $WORLD.LightRadius to 1>>
<<set $WORLD.TowerOrigin to [0,7]>>
<<set $WORLD.PortalTarget to [-1, -1, -1]>>
<<set $WORLD.DesertDims to []>>
<<set $WORLD.DesertDims[0] to 14>>
<<set $WORLD.DesertDims[1] to 14>>
<<set $WORLD.CharLocs to []>>
<<for _i to 0; _i < 3; _i++>>
<<PlaceCharForMultiChar _i>>
<</for>>
<<set $STORE to []>>
<<set $Selene to 0>>
<<set $Smith to 1>>
<<set $GStore to 2>>
<<set $Tavern to 3>>
<<set $Pawn to 4>>
<<set $House to 5>>
<<set $LumberMill to 6>>
<<set $Daphne to 7>>
<<set $LegacyVault to 8>>
<<set $SmithArmor to 9>>
<<set $STORE[$Selene] to []>>
<<set $STORE[$Smith] to []>>
<<set $STORE[$GStore] to []>>
<<set $STORE[$Tavern] to []>>
<<set $STORE[$Pawn] to []>>
<<set $STORE[$House] to []>>
<<set $STORE[$LumberMill] to []>>
<<set $STORE[$Daphne] to []>>
<<set $STORE[$LegacyVault] to []>>
<<set $STORE[$SmithArmor] to []>>
<<for _i to 0; _i < 10; _i++>>
<<set $STORE[$Selene][_i] to [0,0,0,0,0]>>\
<<set $STORE[$Smith][_i] to [0,0,0,0,0]>>\
<<set $STORE[$GStore][_i] to [0,0,0,0,0]>>\
<<set $STORE[$Tavern][_i] to [0,0,0,0,0]>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0,0]>>\
<<set $STORE[$LumberMill][_i] to [0,0,0,0,0]>>\
<<set $STORE[$Daphne][_i] to [0,0,0,0,0]>>\
<!-- no legacy vault here -->\
<<set $STORE[$SmithArmor][_i] to [0,0,0,0,0]>>\
<</for>>
<<for _i to 0; _i < 20; _i++>>
<<set $STORE[$House][_i] to [0,0,0,0,0]>>\
<</for>>\
<<Restock "all">>
<</widget>>
<<widget "StandardKeyboardShortcuts">>\
<span id="KeypZ">\
<<link "">>\
<<script>>
Dialog.setup("Character statistics");
Dialog.wiki(Story.get("ViewStats").processText());
Dialog.open();
<</script>>
<</link>>\
</span>\
<span id="KeypI">\
<<link "">>\
<<script>>
Dialog.setup("Inventory");
Dialog.wiki(Story.get("Inventory").processText());
Dialog.open();
<</script>>\
<</link>>\
</span>\
<span id="KeypX">\
<<link "">>\
<<script>>
Dialog.setup("Body");
Dialog.wiki(Story.get("Body").processText());
Dialog.open();
<</script>>\
<</link>>\
</span>\
<span id="KeypB">\
<<link "">>\
<<script>>
Dialog.setup("Spellbook");
Dialog.wiki(Story.get("Spellbook").processText());
Dialog.open();
<</script>>
<</link>>\
</span>\
<span id="KeypU">\
<<link "">>\
<<script>>
Dialog.setup("Unlocks");
Dialog.wiki(Story.get("Unlocks").processText());
Dialog.open();
<</script>>
<</link>>\
</span>\
<</widget>>\
<<widget "PrintParty">>\
<<set _PPcur to $PC[$CC][$PCparty].length>>\
<<if _PPcur > 0>>\
<<set _PPmax to setup.GetPartyLimit($CC)>>\
<<set _CurPassage to passage()>>\
@@color:Yellow;Party (<<print _PPcur>>/<<print _PPmax>>)@@
<<for _SPi to 0; _SPi < _PPcur; _SPi++>>\
<<set _Name to $PC[$CC][$PCparty][_SPi].name>>\
<<set _Stance to "[" + $PC[$CC][$PCparty][_SPi].stance + "]">>\
<<set _Hp to $PC[$CC][$PCparty][_SPi].hpcur + "/" + $PC[$CC][$PCparty][_SPi].hpmax>>\
\
<<set _SpanID to "ToggleStance" + _SPi>>\
<<set _CssStuff to "blueb">>\
<<capture _SPi>>\
<<if _CurPassage is "Orphanage">>\
<<set _CssStuff to "redb">>\
<<endif>>\
<span @class="_CssStuff" @id="_SpanID">\
<<if _CurPassage is "Orphanage">>\
<<button "[Drop]">>\
<<set _NextSlot to $WORLD.orphans.length>>\
<<set $WORLD.orphans[_NextSlot] to $PC[$CC][$PCparty][_SPi]>>\
<<set $WORLD.orphans[_NextSlot].hpmax to 1 + $WORLD.orphans[_NextSlot].level>>
<<set $WORLD.orphans[_NextSlot].hpcur to $WORLD.orphans[_NextSlot].hpmax>>
<<if $WORLD.orphans[_NextSlot].stance is "Down">>\
<<set $WORLD.orphans[_NextSlot].stance to "Hide">>\
<<endif>>\
<<set _throwaway to $PC[$CC][$PCparty].deleteAt(_SPi)>>\
<<replace "#OrphanagePortal">><<ShowOrphans>><</replace>>\
<<ShowParty>>\
<</button>>\
<<else>>\
<<button _Stance>>\
<<if $PC[$CC][$PCparty][_SPi].stance is "Att">>\
<<set $PC[$CC][$PCparty][_SPi].stance to "Prot">>\
<<elseif $PC[$CC][$PCparty][_SPi].stance is "Prot">>\
<<set $PC[$CC][$PCparty][_SPi].stance to "Hide">>\
<<elseif $PC[$CC][$PCparty][_SPi].stance is "Down">>\
<<else>>\
<<set $PC[$CC][$PCparty][_SPi].stance to "Att">>\
<<endif>>\
<<ShowParty>>\
<</button>>\
<<endif>>\
</span> \
<</capture>>\
<<print _Name>>, hp: <<print _Hp>>
<</for>>\
<<endif>>\
<</widget>>\
<<widget "ShowParty">>\
<<replace "#capparty">><<PrintParty>><</replace>>\
<</widget>>
<<widget "ShowOrphans">>\
<<set _SPlen to $WORLD.orphans.length>>\
<<if _SPlen > 0>>\
<<set _MaxParty to setup.GetPartyLimit($CC)>>\
<<set _CurParty to $PC[$CC][$PCparty].length>>\
<<if $TEMPBUTTON is "delete">>\
<<set _CssStuff to "redb">>\
<<set _Join to "[Expel]">>\
<<else>>\
<<set _CssStuff to "blueb">>\
<<set _Join to "[Join]">>\
<<if _CurParty gte _MaxParty>>\
<<set _CssStuff to "grayb">>\
<<set _Join to "[Full]">>\
<<endif>>\
<<endif>>\
@@color:Yellow;Orphans@@
<<for _SPi to 0; _SPi < _SPlen; _SPi++>>\
<<set _SpanID to "Join" + _SPi>>\
<<capture _SPi>>\
<span @class="_CssStuff" @id="_SpanID">\
<<button _Join>>\
<<if $TEMPBUTTON is "delete">>\
<<set _throwaway to $WORLD.orphans.deleteAt(_SPi)>>\
<<replace "#OrphanagePortal">><<ShowOrphans>><</replace>>\
<<ShowParty>>\
<<else>>\
<<set _CurParty to $PC[$CC][$PCparty].length>>\
<<set _MaxParty to setup.GetPartyLimit($CC)>>\
<<if _CurParty < _MaxParty>>\
<<AwardAchievement "Leader">>\
<<AwardAchievement "Leader-II">>\
<<AwardAchievement "Leader-III">>\
<<set _NextSlot to $PC[$CC][$PCparty].length>>\
<<set $PC[$CC][$PCparty][_NextSlot] to $WORLD.orphans[_SPi]>>\
<<set $PC[$CC][$PCparty][_NextSlot].hpmax to 1 + $PC[$CC][$PCparty][_NextSlot].level>>
<<if setup.PlayerHasPerk("Iron Army") is true>>\
<<set $PC[$CC][$PCparty][_NextSlot].hpmax to $PC[$CC][$PCparty][_NextSlot].hpmax +2>>
<<endif>>\
<<set $PC[$CC][$PCparty][_NextSlot].hpcur to $PC[$CC][$PCparty][_NextSlot].hpmax>>
<<set _throwaway to $WORLD.orphans.deleteAt(_SPi)>>\
<<replace "#OrphanagePortal">><<ShowOrphans>><</replace>>\
<<ShowParty>>\
<<endif>>\
<<endif>>\
<</button>> \
</span>\
<<set _Name to $WORLD.orphans[_SPi].name>>\
<<set _Stance to "[" + $WORLD.orphans[_SPi].stance + "]">>\
<<set _Hp to $WORLD.orphans[_SPi].hpcur + "/" + $WORLD.orphans[_SPi].hpmax>>\
<<set _Parentage to $WORLD.orphans[_SPi].parent>>\
<<if _Parentage is "">>\
<<set _Parentage to "unknown parentage">>\
<<endif>>\
<<set _SpawnOf to $WORLD.orphans[_SPi].morph + " son of " + _Parentage>>\
<<if $WORLD.orphans[_SPi].sex is "female">>\
<<set _SpawnOf to $WORLD.orphans[_SPi].morph + " daughter of " + _Parentage>>\
<<endif>>\
<<textbox "$WORLD.orphans[_SPi].name" $WORLD.orphans[_SPi].name>>, <<print _SpawnOf>>
Level: <<print $WORLD.orphans[_SPi].level>>, XP: <<print $WORLD.orphans[_SPi].xp>>, Hp: <<print _Hp>>
<</capture>>\
<</for>>\
<hr>
<span id="OrphanageText"></span>
<<else>>\
The orphanage is empty
<<endif>>\
<</widget>>\
<<widget "DescribeHairHack">>\
<<replace "#DescGoeshere">><<DescribeHair _args[0] _args[1] _args[2]>><</replace>>\
<</widget>>\
<<widget "DescribeHair">>\
<<set _DHlength to _args[0]>>\
<<set _DHstyle to _args[1]>>\
<<set _DHcolor to _args[2]>>\
\
<<if _DHstyle is "straight">>\
<<if _DHlength is 0>>very short _DHcolor hair\
<<elseif _DHlength is 1>>short _DHcolor hair\
<<elseif _DHlength is 2>>_DHcolor hair reaching halfway down your back\
<<elseif _DHlength is 3>>long _DHcolor hair reaching nearly to your waist\
<<else>>an elegant wave of long, voluminous _DHcolor reaching nearly to the ground\
<<endif>>\
<<elseif _DHstyle is "curly">>\
<<if _DHlength is 0>>very short curly _DHcolor hair\
<<elseif _DHlength is 1>>short curly _DHcolor hair\
<<elseif _DHlength is 2>>curly _DHcolor hair\
<<elseif _DHlength is 3>>long curly _DHcolor hair reaching nearly to your waist\
<<else>>a mountain of curly _DHcolor hair flowing in cascades behind you\
<<endif>>\
<<elseif _DHstyle is "braided">>\
<<if _DHlength is 0>>short _DHcolor hair with an inch-long braid\
<<elseif _DHlength is 1>>short _DHcolor braided hair\
<<elseif _DHlength is 2>>braided _DHcolor hair\
<<elseif _DHlength is 3>>a thick _DHcolor braid nearly to your waist\
<<else>>a thick pair of braids sprouting from either side of your head, reaching nearly to the ground\
<<endif>>\
<<elseif _DHstyle is "frizzy">>\
<<if _DHlength is 0>>very short frizzy _DHcolor hair\
<<elseif _DHlength is 1>>short frizzy _DHcolor hair\
<<elseif _DHlength is 2>>shoulder-length plumes of frizzy _DHcolor hair\
<<elseif _DHlength is 3>>a big poofball of frizzy _DHcolor hair\
<<else>>a giant frizzy poofball of _DHcolor hair that nearly triples the size of your head\
<<endif>>\
<<elseif _DHstyle is "mohawk">>\
<<if _DHlength is 0>>a short strip of _DHcolor down the middle of your head\
<<elseif _DHlength is 1>>a short _DHcolor mohawk\
<<elseif _DHlength is 2>>an impressive _DHcolor mohawk\
<<elseif _DHlength is 3>>a _DHcolor mohawk that adds a good foot to your total height\
<<else>>a staggeringly long spiky _DHcolor mohawk that adds several feet to your total height\
<<endif>>\
<<elseif _DHstyle is "pigtails">>\
<<if _DHlength is 0>>itty-bitty _DHcolor pigtails\
<<elseif _DHlength is 1>>short _DHcolor pigtails\
<<elseif _DHlength is 2>>_DHcolor pigtails gracefully brushing your shoulders\
<<elseif _DHlength is 3>>long _DHcolor pigtails bouncing gloriously behind you\
<<else>>magnificent _DHcolor double-bun pigtails that nearly reach the ground\
<<endif>>\
<<elseif _DHstyle is "ponytail">>\
<<if _DHlength is 0>>an itty-bitty _DHcolor ponytail\
<<elseif _DHlength is 1>>a short _DHcolor ponytail\
<<elseif _DHlength is 2>>a _DHcolor ponytail\
<<elseif _DHlength is 3>>a thick _DHcolor ponytail bouncing gracefully behind you\
<<else>>a huge _DHcolor ponytail sprouting from your head that nearly reaches the ground\
<<endif>>\
<<else>>\
Error: unrecognized hair style
<<endif>>\
<</widget>>\
<<widget "DescribeTail">>\
<<set _Taillength to _args[0]>>\
<<set _Tailstyle to _args[1]>>\
<<set _Tailcolor to _args[2]>>\
\
<<if _Tailstyle is "plain">>\
<<if _Taillength is 0>>very short _Tailcolor hair\
<<elseif _Taillength is 1>>short _Tailcolor hair\
<<elseif _Taillength is 2>>_Tailcolor hair reaching halfway down your back\
<<elseif _Taillength is 3>>long _Tailcolor hair \
<<else>>long _Tailcolor hair trailling on the ground behind you\
<<endif>>\
<<elseif _Tailstyle is "braided">>\
<<if _Taillength is 0>>very short braided _Tailcolor hair\
<<elseif _Taillength is 1>>short braided _Tailcolor hair\
<<elseif _Taillength is 2>>braided _Tailcolor hair\
<<elseif _Taillength is 3>>long braided _Tailcolor hair\
<<else>>long braided hair trailing behind you in thick waves of _Tailcolor\
<<endif>>\
<<elseif _Tailstyle is "ribbons">>\
<<if _Taillength is 0>>short _Tailcolor hair with cute little ribbons in it\
<<elseif _Taillength is 1>>short _Tailcolor with small ribbons\
<<elseif _Taillength is 2>>_Tailcolor hair with a bright pink ribbon\
<<elseif _Taillength is 3>>long _Tailcolor hair with a big poofy ribbon\
<<else>>long hair sporting a dozen ribbons woven into its length\
<<endif>>\
<<elseif _Tailstyle is "poofy">>\
<<if _Taillength is 0>>an itty-bitty _Tailcolor poofball at the end\
<<elseif _Taillength is 1>>a small _Tailcolor poofball at the end\
<<elseif _Taillength is 2>>a _Tailcolor poofball at the end\
<<elseif _Taillength is 3>>a thick _Tailcolor poofball at the end that bounced with your every step\
<<else>>a giant _Tailcolor poofball at the end that silhouettes your frame wherever you go\
<<endif>>\
<<elseif _Tailstyle is "elegant">>\
<<if _Taillength is 0>>small, but elegant _Tailcolor hair\
<<elseif _Taillength is 1>>small poofy _Tailcolor hair\
<<elseif _Taillength is 2>>an elegant plume of _Tailcolor hair that bounces behind you\
<<elseif _Taillength is 3>>a splendid cascade of lovely _Tailcolor hair trailing behind you\
<<else>>glorious cascades of thick _Tailcolor hair that charm all who behold their magnificence\
<<endif>>\
<<elseif _Tailstyle is "none">>\
<<elseif _Tailstyle is "flowers">>\
unimplemented tail type
<<elseif _Tailstyle is "regal">>\
unimplemented tail type
<<elseif _Tailstyle is "radiant">>\
unimplemented tail type
<<elseif _Tailstyle is "thick">>\
unimplemented tail type
<<else>>\
Error: unercognized tail style: _Tailstyle
<<endif>>\
<</widget>>\
<<widget "ProstXP">>
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "prostitute">>\
<<if setup.TypeOf($Mon.level) is "number">>\
<<AwardXP $Mon.level "sex">>\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "UnnaturalPregnancy">>\
<!-- barren achievement being called manually -->\
<<set _UPwho to _args[0]>>\
<<set _UPmorph to _args[1]>>\
<<set _UPdaystobirth to _args[2]>>\
<<set _UPbirthyear to $WORLD.year>>\
<<set _UPbirthday to $WORLD.day + _UPdaystobirth>>\
<<if _UPbirthday > 365>>\
<<set _UPbirthyear to _UPbirthyear + 1>>\
<<set _UPbirthday to _UPbirthday -365 1>>\
<<endif>>\
<<set $PC[_UPwho][$PCpregnant] to [1, _UPmorph, _UPbirthyear, _UPbirthday, $WORLD.year, $WORLD.day]>>\
<</widget>>\
<<widget "AllowedSpellsTempArray">>\
<<set _Class to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<if _Class is "peasant">>\
<<set _AllowedSpells to ["dart","light"]>>\
<<elseif _Class is "lumberjack">>\
<<set _AllowedSpells to ["dart","armor","light","up","down","map"]>>\
<<elseif _Class is "prostitute">>\
<<set _AllowedSpells to ["dart","armor","poison","up","down","soultrap"]>>\
<<elseif _Class is "warrior">>\
<<set _AllowedSpells to ["dart","armor","poison","firebolt","heal"]>>\
<<elseif _Class is "scholar">>\
<<set _AllowedSpells to ["dart","armor","poison","firebolt","heal","light","up","down","map","portal","soultrap"]>>\
<<elseif _Class is "priest">>\
<<set _AllowedSpells to ["dart","armor","heal","light","up","down","map","portal","soultrap"]>>\
<<elseif _Class is "rogue">>\
<<set _AllowedSpells to ["dart","poison","up","down","map","soultrap"]>>\
<<elseif _Class is "mage">>\
<<set _AllowedSpells to ["dart","armor","poison","firebolt","light","up","down","map","portal","soultrap"]>>\
<<elseif _Class is "barbarian">>\
<<set _AllowedSpells to ["dart","poison","light","up","down","soultrap"]>>\
<<elseif _Class is "monk">>\
<<set _AllowedSpells to ["dart","armor","firebolt","heal","light","up","down","portal"]>>\
<<elseif _Class is "guardian">>\
<<set _AllowedSpells to ["armor","heal","light"]>>\
<<elseif _Class is "ninja">>\
<<set _AllowedSpells to [""]>>\
<<elseif _Class is "paladin">>\
<<set _AllowedSpells to [""]>>\
<<elseif _Class is "druid">>\
<<set _AllowedSpells to [""]>>\
<<elseif _Class is "necromancer">>\
<<set _AllowedSpells to [""]>>\
<<else>>\
@@color:Red;Error: unrecognized class: <<print $PC[$CC][$PCclass]>>@@
<<endif>>\
<</widget>>\<<set _MOO to setup.AchievementHandler(-1, "FETCH ALL DATA", -1)>>\
\
<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>
<<button "[Perms]">>
<<replace "#AchievementPortal">><<ShowAchPerms>><</replace>>\
<</button>> | \
<<button "[New character unlocks]">>
<<replace "#AchievementPortal">><<ShowAchChargen>><</replace>>\
<</button>> | \
<<button "[Perks]">>
<<replace "#AchievementPortal">><<ShowAchPerks>><</replace>>\
<</button>> | \
<<button "[Perk points]">>
<<replace "#AchievementPortal">><<ShowAchPerkPoints>><</replace>>\
<</button>> | \
<<button "[Highest level as class]">>
<<replace "#AchievementPortal">><<ShowAchHighestLevels>><</replace>>\
<</button>>
<hr>\
<span id="AchievementPortal"><<ShowAchPerms>></span>
<span id="debuginfo">\
<<if $DebugMode>>\
Achievements array:
<<print $Achievements>>
<<print _MOO.length>>
<<print $Achievements.length>>
<<for _i to 0; _i < _MOO.length; _i++>>\
_i) <<print _MOO[_i].name>><br>
<</for>>\
<<endif>>\
</span>\<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>\
<br>\
<<button "[Player]">>
<<replace "#StatsPortal">><<ShowStatsMain>><</replace>>\
<</button>> | \
<<button "[Party]">>
<<replace "#StatsPortal">><<ShowStatsParty>><</replace>>\
<</button>>\
\
<hr>\
<span id="StatsPortal"><<ShowStatsMain>></span>\
<<if $PC[$CC][$PCz] < 0>>\
<<set $PC[$CC][$PCz] to 0>>\
<<endif>>\
\
<<if $WORLD.dungenned[$PC[$CC][$PCz]] < 1>>\
<<include "DunGen">>\
<<endif>>\
\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "dungeon">>\
<<set $WORLD.dialogue to 0>>
<<set $Dungeon[_px][_py][15] to 1>>\
\
@@color:LightGreen;Tower of Triumph, Shrine of the Goddess @@ \
<<if _pz is 0>>\
Ground floor\
<<else>>\
Level _pz\
<<endif>>\
<hr>\
@@color:LightGreen;Map@@
<canvas id="myCanvas" width="226" height="226" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML canvas tag.
</canvas>
<hr>\
<span id ="roomdesc"></span>\
<span id ="eventtext"></span>
<hr>\
<span id="navcontrols">\
@@color:LightGreen;Navigation@@
<<ShowNavControls>>\
</span>
\
<<set _tempname to "Map-Blank">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-E">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-ES">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-ESW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-EW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-N">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NE">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NES">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NESW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NEW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NS">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NSW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-NW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-S">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-SW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "Map-W">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "UpStairsTop">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "UpStairsBottom">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "DownStairs">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="30" style="visibility: hidden;" img @src="_pic"/>\
<span id="debug"></span>\
<<timed 200ms>>\
<<MoveRefresh>>\
<<set _throwaway to setup.DrawMap(_px, _py)>>\
<</timed>>\
<!-- magic fountain -->\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<RightPic "eventfountain.jpg">>\
\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
<<set $Dungeon[_pz][_px][_py][12] to random(1,3)>>\
<<endif>>\
<<if $Dungeon[_pz][_px][_py][12] is 1>>\
<!-- heal -->\
@@color:LightGreen;Bubbling fountain@@
The centerpiece of this room is a large bubbling fountain of what looks like pure water. Of course, looks can be deceiving.
<span id="KeypOne">\
<<link "1) Drink from the fountain">>
<<set $Dungeon[_pz][_px][_py][12] to 201>>\
<<replace "#eventtext">>\
@@color:LightGreen;Fountain of healing@@
<<if $PC[$CC][$PChpcur] < $PC[$CC][$PChpmax]>>\
You drink deeply from the fountain, feeling refreshed as the water restores your body and heals all injuries.
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpmax]>>\
<<ShowHealth>>\
<br>\
@@color:LightGreen;Health restored to full!@@
<br>\
As you breath a refreshing sigh, the water of the fountain slows to a trickle, and then stops. It seems that the fountain's magic is now depleted.
<<else>>\
You drink from the fountain. The water is clean and refreshing, but you don't feel any differently.
<<endif>>\
<</replace>>\
<</link>>\
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 2>>\
<!-- gender bender -->\
@@color:LightGreen;Bubbling fountain@@
The centerpiece of this room is a large bubbling fountain of what looks like pure water. Of course, looks can be deceiving.
<span id="KeypOne">\
<<link "1) Drink from the fountain">>
<<set $Dungeon[_pz][_px][_py][12] is 202>>\
<<set _Target to []>>\
<<if $PC[$CC][$PCsex] is "male">>
<<set _Target[0] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[1] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[2] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[3] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[4] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[5] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[6] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[7] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[8] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[9] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[10] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[11] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[12] to { type: $BPpussy, morph: either("cow","slime","snake") }>>\
<<set _Target[13] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[14] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<set _Target[15] to { type: $BPboobs, morph: either("cow","slime","snake") }>>\
<<elseif $PC[$CC][$PCsex] is "female">>
<<set _Target[0] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[1] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[2] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[3] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[4] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[5] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[6] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[7] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[8] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[9] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[10] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[11] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[12] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[13] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[14] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<set _Target[15] to { type: $BPpenis, morph: either("cow","horse","tentacle","spider") }>>\
<<else>>\
<<set _Target[0] to { type: $BPpussy, morph: either("spider","slime","tentacle") }>>\
<<set _Target[1] to { type: $BPboobs, morph: either("cow","horse") }>>\
<<set _Target[2] to { type: $BPpenis, morph: either("cow","slime","tentacle") }>>\
<<set _Target[3] to { type: $BPpussy, morph: either("spider","slime","tentacle") }>>\
<<set _Target[4] to { type: $BPboobs, morph: either("cow","horse") }>>\
<<set _Target[5] to { type: $BPpenis, morph: either("cow","slime","tentacle") }>>\
<<set _Target[6] to { type: $BPpussy, morph: either("spider","slime","tentacle") }>>\
<<set _Target[7] to { type: $BPboobs, morph: either("cow","horse") }>>\
<<set _Target[8] to { type: $BPpenis, morph: either("cow","slime","tentacle") }>>\
<<set _Target[9] to { type: $BPpussy, morph: either("spider","slime","tentacle") }>>\
<<set _Target[10] to { type: $BPboobs, morph: either("cow","horse") }>>\
<<set _Target[11] to { type: $BPpenis, morph: either("cow","slime","tentacle") }>>\
<<set _Target[12] to { type: $BPpussy, morph: either("spider","slime","tentacle") }>>\
<<set _Target[13] to { type: $BPboobs, morph: either("cow","horse") }>>\
<<set _Target[14] to { type: $BPpenis, morph: either("cow","slime","tentacle") }>>\
<<set _Target[15] to { type: $BPpenis, morph: either("cow","slime","tentacle") }>>\
<<endif>>\
<<replace "#eventtext">>\
@@color:LightGreen;Fountain of gender-bending@@
You drink from the fountain and immediately transform: <<DoTransform _Target "fountain">>\
<</replace>>\
<</link>>\
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 3>>\
<!-- gain stat -->\
@@color:LightGreen;Bubbling fountain@@
The centerpiece of this room is a large bubbling fountain of what looks like pure water. Of course, looks can be deceiving.
<<set _Cap to 53 + $PC[_Who][$PCretirementcap] + $PC[_Who][$PCgen]>>\
<<if setup.PlayerHasPerk("Genetic Lottery") is true>>\
<<set _Cap to _SoftCap +2>>\
<<endif>>\
<<if setup.AchievementHandler("Jack of All Stats", "HAS?", -1)>>\
<<set _Cap to _SoftCap +1>>\
<<endif>>\
<<set _PCtotal to $PC[$CC][$PCstr] + $PC[$CC][$PCdex] + $PC[$CC][$PCcon] + $PC[$CC][$PCint] + $PC[$CC][$PCwil]>>\
<span id="KeypOne">\
<<link "1) Drink from the fountain">>
<<set $Dungeon[_pz][_px][_py][12] to 203>>\
<<if _Cap > _PCTotal>>\
<<replace "#eventtext">>\
@@color:LightGreen;Fountain of Excessive Fountain-Grinding@@:
You drink from the fountain and are immediately filled with a sense of vague foreboding. Looking over yourself you wonder if perhaps you should stop while you're ahead.\
<</replace>>\
<<else>>\
<<set _Target to either($PCstr, $PCdex, $PCcon, $PCint, $PCwil)>>\
<<set $PC[$CC][_Target] to $PC[$CC][_Target] +1>>\
<<replace "#eventtext">>\
<<if _Target is $PCstr>>\
@@color:LightGreen;Fountain of Strength@@: +1 strength
You drink from the fountain and are immediately filled with a sense of strength. Looking yourself over you have become visibly more muscled. \
<<elseif _Target is $PCdex>>\
@@color:LightGreen;Fountain of Dexterity@@: +1 dexterity
You drink from the fountain and immediately feel more fleet of foot and coordinated. \
<<elseif _Target is $PCcon>>\
@@color:LightGreen;Fountain of Toughness@@: +1 toughness
You drink from the fountain and feel like you could take on the world. Looking yourself over, you seem to be a bit thicker than before.\
<<elseif _Target is $PCint>>\
@@color:LightGreen;Fountain of Intellect@@: +1 intellect
Visions of equations and spiraling galaxies fill your mind. You have become more intelligent.\
<<else>>\
@@color:LightGreen;Fountain of Willpower@@: +1 willpower
@@color:Red;"Come, join the dark side!"@@ you hear a voice beckon in your mind. You tell it no.
The experience has improved your strength of will. You are now better able to resist the influence of others.\
<<endif>>\
<</replace>>\
<<endif>>\
<</link>>\
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 201>>\
@@color:LightGreen;Dried up fountain@@
The healing waters have gone dry.\
<<elseif $Dungeon[_pz][_px][_py][12] is 202>>\
@@color:LightGreen;Dried up fountain@@
The gender-bending waters have gone dry.\
<<elseif $Dungeon[_pz][_px][_py][12] is 203>>\
@@color:LightGreen;Dried up fountain@@
The powerful water has gone dry.\
<<else>>\
@@color:Red;Error in Event100: unrecognized state: <<print $Dungeon[_pz][_px][_py][12]>>@@
<<endif>>\
<</replace>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<RightPic "eventpuddle.jpg">>\
\
<<replace "#eventtext">>\
@@color:LightGreen;Strange puddle@@
<<if $Dungeon[_pz][_px][_py][12] is 0>><!-- start state-->\
The tile floor here is heavily eroded and gives way to a puddle of murky green liquid near the center of the room.
<hr>\
<span id="KeypOne">\
<<link "1) Inspect the puddle" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 1>>\
<</link>>\
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 1>><!-- inspect-->\
<<set $Dungeon[_pz][_px][_py][12] to 99>>
<<set _result to random(1,4)>>\
<<if _result is 1>>\
You fish around through the puddle, half expecting it to turn into a slime monster or something. Fortunately luck is with you and instead you simply find some money somebody dropped.
<<set _c to 20 + random(0,10)>>\
@@color:Yellow;You find _c gold coins!@@
<<GainGold _c>>\
<<elseif _result is 2>>\
You reach into the puddle and immediately jump back in pain. Apparently it's not water. It's @@color:Green;acid@@.
<<set _evdam to random(5,10)>>\
@@color:Yellow;You take _evdam points of damage!@@
<<ChangeStat $PChpcur _evdam>>\
<<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set $AllowNav to false>>\
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Touched an acid puddle">>
<</link>>\
</span>\
<<else>>\
<<endif>>\
<<elseif _result is 3>>\
You reach into the puddle, hoping it isn't harboring some sort of slime monster.
<<set $ForceMon to ["slime", setup.GetStandardSex()]>>\
<<GetMon $ForceMon>>\
@@color:Red;You are attacked by a slime!@@
<span id="KeypOne">\
<<link "1) Fight" "Combat">>
<</link>>\
</span>\
<<elseif _result is 4>>\
<<set $Dungeon[_pz][_px][_py][12] to 98>>\
You reach into the puddle, hoping it isn't harboring some sort of slime monster. On the bright side, it isn't. On the not-so-bright side, there doesn't seem to be much of anything in there except murky water, plus whatever is in it that's making it green. \
<<set _BottleSlot to setup.HasBottle()>>\
<<if _BottleSlot > -1>>\
<<set _PutItHere to setup.getnextinvslot($CC)>>\
<<if (_PutItHere < 0) and ($PC[$CC][$PCinven][_BottleSlot][2] > 1)>>\
You're pretty sure you could scoop it up and put it in a bottle, but you should probably clear some inventory space first.
<<else>>\
If you'd like, you could probably scoop up a sample of the liquid in an empty bottle.
@@color:Gold;Options@@
<span id="KeypT">\
<<link "t) take some liquid">>
<<set $Dungeon[_pz][_px][_py][12] to 99>>
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _BottleSlot)>>\
<<set _Liquid to [136,0,1,0,0]>>
<<set _foo to setup.GiveItem($CC, _Liquid)>>\
<<replace "#eventtext">>You scoop up the liquid into a bottle.<</replace>>\
<</link>>\
</span>\
<<endif>>\
<<else>>\
Unfortunately you don't have anything suitabe for carrying liquid.
<<endif>>\
<<else>>\
Error in event 101: random out of bounds
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 98>><!-- perma murky water -->\
The pool of murky water you found earlier is still here. Still murky and still green. \
<<set _BottleSlot to setup.HasBottle()>>\
<<if _BottleSlot > -1>>\
<<set _PutItHere to setup.getnextinvslot($CC)>>\
<<if (_PutItHere < 0) and ($PC[$CC][$PCinven][_BottleSlot][2] > 1)>>\
You're pretty sure you could scoop it up and put it in a bottle, but you should probably clear some inventory space first.
<<else>>\
If you'd like, you could probably scoop up a sample of the liquid in an empty bottle.
@@color:Gold;Options@@
<span id="KeypT">\
<<link "t) take some water">>
<<set $Dungeon[_pz][_px][_py][12] to 99>>
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _BottleSlot)>>\
<<set _Liquid to [136,0,1,0,0]>>
<<set _foo to setup.GiveItem($CC, _Liquid)>>\
<<replace "#eventtext">>You scoop up the liquid into a bottle.<</replace>>\
<</link>>\
</span>\
<<endif>>\
<<else>>\
Unfortunately you don't have anything suitabe for carrying liquid.
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 99>><!-- used-->\
The tile floor here is heavily eroded, with a few moist traces of liquid.
<<else>>\
@@color:Red;Error in Event101: state <<print $Dungeon[_pz][_px][_py][12]>> is not recognized@@
<<endif>>\
<</replace>>\<!--
Found this in an obsolete widget, hopefully still correct:
x,y defintions
0,1,2,3 = n,e,s,w exit id
4,5,6,7 = exit special attributes
8,9,10= room descriptions/traits
11,12= encounter id, state
13,14= loot id, state (13 used only by chests, which doesn't use 14?)
15=visited
-->\
<<widget "ShowNavControls">>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _PlagueCurse to setup.GetEffect("plague curse")>>\
<<if _PlagueCurse > 0>>\
<<set $WORLD.diedby to "Plague Curse">>\
@@color:Purple;You have died from the plague curse!@@
Congrats an beating Neris, but unfortunately that curse doesn't just go away.\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) continue" "Death">>
<<AutoSaveLoad "set">>
<</link>>
</span>\
<<elseif $PC[$CC][$PChunger] < 1>>\
<<set $WORLD.diedby to "Starved to death">>\
@@color:Red;You have starved to death!@@
It's unfortunate, but you do need to eat. If food is too expensive, you could try carrying around a butcher knife to carve up some of those monsters you keep fighting. Of course, that probably has side effects.\
<<AwardAchievement "Starve to death">>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) continue" "Death">>
<<AutoSaveLoad "set">>
<</link>>
</span>\
<<else>>\
<!-- note: trap deaths will fall through to here-->\
<<endif>>\
<<elseif $AllowNav is true>>\
@@color:LightGreen;Navigation@@
<<set _n to $Dungeon[_pz][_px][_py][0]>>\
<<set _e to $Dungeon[_pz][_px][_py][1]>>\
<<set _s to $Dungeon[_pz][_px][_py][2]>>\
<<set _w to $Dungeon[_pz][_px][_py][3]>>\
\
<<if _n > 0 or ($DebugMode is true)>>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) North">>
<<AdvanceTime 1>>
<<PressurePlateStepOffCheck>>
<<set _py to _py -1>>
<<set $PC[$CC][$PCy] to _py>>\
<<set $Dungeon[_pz][_px][_py][15] to 1>>\
<<set _CanBeExplorer to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<<MoveRefresh>>
<</link>>\
</span></span>
<<else>>\
North - blocked
<<endif>>\
<<if _e > 0 or ($DebugMode is true)>>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) East">>
<<AdvanceTime 1>>
<<PressurePlateStepOffCheck>>
<<set _px to _px + 1>>
<<set $PC[$CC][$PCx] to _px>>\
<<set $Dungeon[_pz][_px][_py][15] to 1>>\
<<set _CanBeExplorer to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<<MoveRefresh>>
<</link>>\
</span></span>
<<else>>\
East - blocked
<<endif>>\
<<if _s > 0 or ($DebugMode is true)>>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) South">>\
<<AdvanceTime 1>>\
<<PressurePlateStepOffCheck>>
<<set _py to _py + 1>>\
<<set $PC[$CC][$PCy] to _py>>\
<<set $Dungeon[_pz][_px][_py][15] to 1>>\
<<set _CanBeExplorer to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<<MoveRefresh>>\
<</link>>\
</span></span>
<<else>>\
South - blocked
<<endif>>\
<<if _w > 0 or ($DebugMode is true)>>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) West">>
<<AdvanceTime 1>>
<<PressurePlateStepOffCheck>>
<<set _px to _px - 1>>
<<set $PC[$CC][$PCx] to _px>>\
<<set $Dungeon[_pz][_px][_py][15] to 1>>\
<<set _CanBeExplorer to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<<MoveRefresh>>
<</link>>\
</span></span>
<<else>>\
West - blocked
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "MoveRefresh">>\
<<set $WORLD.turnssincecombat to $WORLD.turnssincecombat +1>>\
<<replace "#time">>\
<<ShowTime>>\
<</replace>>\
<<ShowHunger>>\
<<ShowHealth>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<set _market to "">>\
<<set _marker to "" + $Dungeon[_pz][_px][_py][11]>>\
\
<<if $DebugMode is true>>\
<<replace "#capdebuginfo">>\
@@color:Gold;Debug info@@
x,y,z: <<print $PC[$CC][$PCx]>>, <<print $PC[$CC][$PCy]>>, <<print $PC[$CC][$PCz]>>
0: <<print $Dungeon[_pz][_px][_py][0]>>
1: <<print $Dungeon[_pz][_px][_py][1]>>
2: <<print $Dungeon[_pz][_px][_py][2]>>
3: <<print $Dungeon[_pz][_px][_py][3]>>
4: <<print $Dungeon[_pz][_px][_py][4]>>
5: <<print $Dungeon[_pz][_px][_py][5]>>
6: <<print $Dungeon[_pz][_px][_py][6]>>
7: <<print $Dungeon[_pz][_px][_py][7]>>
8: <<print $Dungeon[_pz][_px][_py][8]>>
11: <<print $Dungeon[_pz][_px][_py][11]>>
12: <<print $Dungeon[_pz][_px][_py][12]>>
13: <<print $Dungeon[_pz][_px][_py][13]>>
marker: <<print _marker>>
Theme: <<print $WORLD.dungeonthemes[_pz]>>
Since Last combat: <<print $WORLD.turnssincecombat>>
<</replace>>\
<<endif>>\
\
<<if _marker.includes("StairsUp")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<RightPic "towerstairs.jpg">>\
<<include "StairsUp">>\
<<elseif _marker.includes("StairsDown")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<RightPic "towerstairs.jpg">>\
<<include "StairsDown">>\
<<elseif _marker.includes("Trap")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<RightPic "towercorridor.png">>\
<<include "Trap">>\
<<elseif _marker is "Landing">>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<replace "#right-img">><</replace>>\
<<include "Landing">>\
<<elseif _marker.includes("Monster")>>\
<<set $AllowNav to false>>\
<<replace "#roomdesc">><</replace>>\
<<replace "#eventtext">>\
<<set $ForceMon to [$Dungeon[_pz][_px][_py][12], "random"]>>\
<<GetMon $ForceMon>>\
<<set $NoInventoryHack to 1>>\
@@color:Gold;Monster encounter: encamped <<print $Dungeon[_pz][_px][_py][12]>>!@@
<span id="KeypOne">\
<<link "1) Fight" "Combat">>
<<unset NoInventoryHack>>
<<set $DisableMenu to true>>\
<</link>>\
</span>\
<<set _DisengageChance to setup.DisengageChance()>>\
<<if _DisengageChance > 0>>\
<br><<if random(1, 100) < _DisengageChance>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Dungeon64">>
<<unset NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<else>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Combat">>
<<unset NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
<hr>\
@@color:Gold;Debug info@@
(Fixed encounter)
Turns since last combat: <<print $WORLD.turnssincecombat>>
Forcing monster type: $ForceMon
<<endif>>\
<</replace>>\
<<elseif _marker.includes("Zehtalia")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<RightPic "Zehtalia.png">>\
<<include "Zehtalia">>\
<<elseif _marker.includes("Neris")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<RightPic "Neris.jpg">>\
<<include "Neris">>\
<<elseif _marker is "Magic Circle">>\
<<if $WORLD.datapasser is "Don't auto-teleport back">>\
<<set $AllowNav to true>>\
<<set $WORLD.datapasser to "">>\
<<else>>\
<<set $NoSuffixBecauseCircle to true>>\
<<include "MagicCircle">>\
<<endif>>\
<<elseif _marker.includes("PlayerCorpse")>>\
<<include "PlayerCorpse">>\
<<elseif _marker.includes("StatueDemon")>>\
<<set $AllowNav to true>>\
<!-- Zehtalia room hack: where is this globally reset and why isn't it working here? Problem probably will occur elsewhere. -->\
<<replace "#eventtext">><</replace>>\
\
<<replace "#roomdesc">>@@color:LightGreen;Statue of a demon@@<br>The statue of a demon. At its base is a plaque bearing words in a language you don't recognize.<</replace>>\
<<elseif _marker.includes("StatueKnight")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">>@@color:LightGreen;Statue of an angel@@<br>A statue of an armored knight.<</replace>>\
<<elseif _marker.includes("StatueAngel")>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">>@@color:LightGreen;Statue of a knight@@<br>A beautiful statue of a stone angel. The angel is weeping.<</replace>>\
<<elseif _marker.includes("Fountain")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Fountain">>\
<<elseif _marker.includes("Puddle")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Puddle">>\
<<elseif _marker.includes("Bedroom")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Bedroom">>\
<<elseif _marker.includes("Chest")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Chest">>\
<<elseif _marker.includes("Barrel")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Barrel">>\
<<elseif _marker.includes("Bookcase")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Bookcase">>\
<<elseif _marker.includes("Statue")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Statue">>\
<<elseif _marker.includes("Lever")>>\
<<replace "#roomdesc">><</replace>>\
<<include "Lever">>\
<<elseif _marker.includes("Plate")>>\
<<replace "#roomdesc">><</replace>>\
<<include "PressurePlate">>\
<<elseif _marker is "0">>\
<<RightPic "towercorridor.png">>\
<<set _ModdedTurnsSinceCombat to $WORLD.turnssincecombat - $PC[$CC][$PCmorphQTY].ratkin>>\
<<if _ModdedTurnsSinceCombat > 20>>\
<<if random(20,50) < _ModdedTurnsSinceCombat>>\
<<set $AllowNav to false>>\
<<replace "#roomdesc">><</replace>>\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][8] is 100>>\
<<set _LocalMonLevel to _pz +1>>\
<<set $ForceMon to ["random", "random", _LocalMonLevel]>>\
<<GetMon $ForceMon>>\
@@color:Gold;Monster encounter: random <<print $Mon.name>>!@@
@@color:Red;The blood on the floor here has attracted a powerful monster!@@
<<elseif $Dungeon[_pz][_px][_py][8] is 104>>\
<<set _LocalMonLevel to _pz +1>>\
<<set $ForceMon to ["random", "random", _LocalMonLevel]>>\
<<GetMon $ForceMon>>\
@@color:Gold;Monster encounter: random <<print $Mon.name>>!@@
@@color:Red;The sexual fluids on the floor here have attracted a powerful monster!@@
<<elseif $Dungeon[_pz][_px][_py][8] is 106>>\
<<set _LocalMonLevel to _pz +2>>\
<<set $ForceMon to ["random", "random", _LocalMonLevel]>>\
<<GetMon $ForceMon>>\
@@color:Gold;Monster encounter: random <<print $Mon.name>>!@@
@@color:Red;The blood and sexual fluids on the floor here have attracted a very powerful monster!@@
<<else>>\
<<set $ForceMon to ["random", "random"]>>\
<<GetMon $ForceMon>>\
@@color:Gold;Monster encounter: random <<print $Mon.name>>!@@
<<endif>>\
<<set $NoInventoryHack to 1>>\
<span id="KeypOne">\
<<link "1) Fight" "Combat">>
<<unset NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<</link>>\
</span>\
<<if _DisengageChance > 0>>\
<br><<set _DisengageChance to setup.DisengageChance()>>\
<<if random() < _DisengageChance>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Dungeon64">>
<<unset NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<else>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Combat">>
<<unset NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
<hr>\
@@color:Gold;Debug info@@
(Random encounter)
Turns since last combat: <<print $WORLD.turnssincecombat>>
'Force' data being set: $ForceMon
<<endif>>\
<</replace>>\
<<else>>\
<<set $AllowNav to true>>\
<<replace "#eventtext">><</replace>>\
<<ShowRoomDesc>>\
<<endif>>\
<<else>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<RightPic "towercorridor.png">>\
<<replace "#eventtext">><</replace>>\
<<ShowRoomDesc>>\
<<endif>>\
<<else>>\
<<replace "#eventtext">>@@color:Yellow;Error in MoveRefresh: I don't know what this dungeon tile is (_px, _py, _pz): _marker@@
Dungeon array for this xyz is: <<print $Dungeon[_pz][_px][_py]>>
<</replace>>\
<<endif>>\
<<if $NoSuffixBecauseCircle>>\
<<unset $NoSuffixBecauseCircle>>\
<<else>>\
<<replace "#navcontrols">><<ShowNavControls>><</replace>>\
<<endif>>\
<</widget>>\
<<widget "ShowRoomDesc">>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _srm to $Dungeon[_pz][_px][_py][8]>>\
<<set _srmtxt to "">>\
<<if _srm is 0>>\
<<elseif _srm is 1>>\
<<set _srmtxt to "The floor here is covered in rat droppings. But strangely, you don't see any rats.">>\
<<elseif _srm is 2>>\
<<set _srmtxt to "A small trickle of water flows from the ceiling here.">>\
<<elseif _srm is 3>>\
<<set _srmtxt to "Several of the floor tiles here are broken, as if shattered by a tremendous force.">>\
<<elseif _srm is 4>>\
<<set _srmtxt to "Dusty cobwebs adorn the walls here.">>\
<<elseif _srm is 5>>\
<<set _srmtxt to "The air here is clear, and there is a slight breeze.">>\
<<elseif _srm is 6>>\
<<set _srmtxt to "The air here is foggy and cold.">>\
<<elseif _srm is 7>>\
<<set _srmtxt to "A few scattered bones litter the floor here.">>\
<<elseif _srm is 8>>\
<<set _srmtxt to "The air here is slightly smoky, lit by a small basin of hot coals burning in one corner, illuminating everything in a spookly red light.">>\
<<elseif _srm is 9>>\
<<set _srmtxt to "This corridor is lit by a small torch hanging from a wall sconce, casting irregular shadows across all it sees.">>\
<<elseif _srm is 10>>\
<<set _srmtxt to "The floor here is slightly angled towards the center, leading to a foot-deep crater of shattered stone.">>\
<<elseif _srm is 11>>\
<<set _srmtxt to "A few rats scurry about the edges of this chamber.">>\
<<elseif _srm is 12>>\
<<set _srmtxt to "The air here is dry and stagnant.">>\
<<elseif _srm is 13>>\
<<set _srmtxt to "This corridor smells slightly of decay, and you think you see some old, blackened blood splatters on one of the walls.">>\
<<elseif _srm is 14>>\
<<set _srmtxt to "An old tapestry adorns the eastern wall here. It is heavily frayed, but appears to depict a man on horseback riding into a forest.">>\
<<elseif _srm is 15>>\
<<set _srmtxt to "An empty wall sconce sits on the far wall, its shallow candle wick long since depleted.">>\
<<elseif _srm is 16>>\
<<set _srmtxt to "There is a tile mosiac stretching in a simple pattern across half the floor here, and a few spare tiles rest near a wall. It seems whatever renovation was intended here, it was never finished.">>\
<<elseif _srm is 17>>\
<<set _srmtxt to "There is a small, abandoned firepit here.">>\
<<elseif _srm is 18>>\
<<set _srmtxt to "A small, rocky outcrop pokes through the floor here.">>\
<<elseif _srm is 19>>\
<<set _srmtxt to "The wall in one corner of this room lays shattered as if from a tremendous blow, with jagged chunks of rock left spread from the impact.">>\
<<elseif _srm is 20>>\
<<set _srmtxt to "This room is full of spiderwebs, with a few black spiders nearly as big as your hand scattered across.">>\
<<elseif _srm is 21>>\
<<set _srmtxt to "A glowing green moss adorns the walls here, lighting the room reasonably well but also giving the air an unhealthy moistness.">>\
<<elseif _srm is 22>>\
<<set _srmtxt to "This corridor is brightly lit by a single lantern hanging from the ceiling. While its oil is low, the fact that it is burning at all suggests that someone must have passed through here.">>\
<<elseif _srm is 23>>\
<<set _srmtxt to "This corridor is in better condition than most, with a few brightly-lit wall sconces illuminating a floral pattern engraved directly into the stone floor. The craftsmanship is quite good, and leaves you wondering about its engraver.">>\
<<elseif _srm is 24>>\
<<set _srmtxt to "The floor here is covered in a fine black dust, and the room is filled with an overpowering scent of rotting vegetation.">>\
<<elseif _srm is 25>>\
<<set _srmtxt to "Half of what appears to have once been an astrological chart adorns the northern wall, with tattered strips of cloth and leather dangling from its torn edges.">>\
<<elseif _srm is 26>>\
<<set _srmtxt to "This room glows with an ambient light from an unidentifiable source.">>\
<<elseif _srm is 27>>\
<<set _srmtxt to "A few bats hang from the ceiling here.">>\
<<elseif _srm is 28>>\
<<set _srmtxt to "Hanging from the center of this room is what appears to be the shattered remains of what was once a large glass chandelier, with a few of its fallen pieces strewn across the room.">>\
<<elseif _srm is 29>>\
<<set _srmtxt to "The floor here is obscured by several inches of rolling mist.">>\
<<elseif _srm is 30>>\
<<set _srmtxt to "The air here is dusty and hot, making it uncomfortable to breathe.">>\
<<elseif _srm is 31>>\
<<set _srmtxt to "This room smells faintly of lavender.">>\
<<elseif _srm is 32>>\
<<set _srmtxt to "Water trickles from the ceiling here, collecting on the damp ground.">>\
<<elseif _srm is 33>>\
<<set _srmtxt to "This room is filled with the overpowering smell of chlorine.">>\
<<elseif _srm is 33>>\
<<set _srmtxt to "The faint remains of some sort of magical circle drawn in chalk are apparent, with what appear to be little melted bits of wax at regular intervals.">>\
<<elseif _srm is 34>>\
<<set _srmtxt to "You're not completely certain, but if you're very quiet, you can faintly hear what sounds like a cow mooing in the distance.">>\
<<elseif _srm is 35>>\
<<set _srmtxt to "Bits of dust descend from a small hole in the ceiling here.">>\
<<elseif _srm is 36>>\
<<set _srmtxt to "You can hear the sound of something very large moving around on the floor above you.">>\
<<elseif _srm is 37>>\
<<set _srmtxt to "The air is noticeably cold here.">>\
<<elseif _srm is 38>>\
<<set _srmtxt to "The air is noticeable warm here">>\
<<elseif _srm is 39>>\
<<set _srmtxt to "A scattering of ash covers the floor here, as if a large bonfire was allowed to burn down to nothing.">>\
<<elseif _srm is 40>>\
<<set _srmtxt to "A set of chains are attached to the walls here, with broken manacles dangling from them.">>\
<<elseif _srm is 41>>\
<<set _srmtxt to "This room smells faintly of wine.">>\
<<elseif _srm is 42>>\
<<set _srmtxt to "A large boulder lies at the center of this room. It is several feet wider than the corridors, so it's unclear how it came to be here.">>\
<<elseif _srm is 43>>\
<<set _srmtxt to "This room smells strongly of horse urine.">>\
<<elseif _srm is 44>>\
<<set _srmtxt to "Small spiders adorn the walls and ceiling here. It makes your skin crawl just to be here.">>\
<<elseif _srm is 45>>\
<<set _srmtxt to "The walls here are coated with a layer of foul-smelling black moss. You probably shouldn't linger.">>\
<<elseif _srm is 46>>\
<<set _srmtxt to "This room has a small pile of debris in one corner, with little bits of splintered wood and stone messily strewn about.">>\
<<elseif _srm is 47>>\
<<set _srmtxt to "The smell of rotting wood fills your nostrils, and you see the splintered remains of what might once have been some sort of furniture.">>\
<<elseif _srm is 48>>\
<<set _srmtxt to "The stone walls here have been heavily sanded down to a fine smoothness.">>\
<<elseif _srm is 100>>\
<<set _srmtxt to "There are a few fresh splatters of blood here, as if a battle happened recently.">>\
<<elseif _srm is 101>>\
<<set _srmtxt to "There is a small hole bored into a wall here, just large enough for a crossbow bolt to pass through.">>\
<<elseif _srm is 102>>\
<<set _srmtxt to "There is a small bit of cut string anchored to the walls the door here, possibly once connected to a trap of some kind.">>\
<<elseif _srm is 103>>\
<<set _srmtxt to "There is an open pit trap here, which you carefully avoid.">>\
<<elseif _srm is 104>>\
<<set _srmtxt to "There are a few splatters of fluid on the floor here.">>\
<<elseif _srm is 105>>\
<<set _srmtxt to "There's a small pile of dust here that smells faintly of ozone.">>\
<<elseif _srm is 106>>\
<<set _srmtxt to "A puddle of blood and assorted fluids has collected on the floor here.">>\
<<endif>>\
<<replace "#roomdesc">><<print _srmtxt>><<if _CanBeExplorer is true>><<AwardAchievement "Explorer">><<endif>><</replace>>\
<</widget>>\
<<widget "ProcessLever">>\
<<set _LeverActions to _args[0]>>\
<<for _PL to 0; _PL < _LeverActions.length; _PL++>>\
<<set _DunXtoChange to _LeverActions[_PL][0]>>\
<<set _DunYtoChange to _LeverActions[_PL][1]>>\
<<set _ArrayPosToChange to _LeverActions[_PL][2]>>\
<<set _NewValue to _LeverActions[_PL][3]>>\
<<set $Dungeon[_pz][_DunXtoChange][_DunYtoChange][_ArrayPosToChange] to clone(_NewValue)>>\
<</for>>\
<</widget>>\
<<widget "ShowLever">>\
<<set _WhichLever to _args[0]>>\
<<if _args[0] is "LeverLeftUp">>\
<<set _CurrentState to "'up'">>\
<<set _ChangeTo to "LeverLeftDown">>\
<<set _WhichTwelveArrayToProcess to 1>>\
<<RightPic "eventleverup.png">>\
<<elseif _args[0] is "LeverLeftDown">>\
<<set _CurrentState to "'down'">>\
<<set _ChangeTo to "LeverLeftUp">>\
<<set _WhichTwelveArrayToProcess to 0>>\
<<RightPic "eventleverdown.png">>\
<<elseif _args[0] is "LeverRightUp">>\
<<set _CurrentState to "'up'">>\
<<set _ChangeTo to "LeverRightDown">>\
<<set _WhichTwelveArrayToProcess to 1>>\
<<RightPic "eventleverup.png">>\
<<elseif _args[0] is "LeverRightDown">>\
<<set _CurrentState to "'down'">>\
<<set _ChangeTo to "LeverRightUp">>\
<<set _WhichTwelveArrayToProcess to 0>>\
<<RightPic "eventleverdown.png">>\
<<else>>
<<endif>>\
@@color:LightGreen;Lever@@
There is a lever here. It is currently in the <<print _CurrentState>> position.
<span id="KeypOne">\
<<link "1) Pull the lever">>
<<set $Dungeon[_pz][_px][_py][11] to _ChangeTo>>\
<<set _LeverAction to $Dungeon[_pz][_px][_py][12][_WhichTwelveArrayToProcess]>>\
<<ProcessLever _LeverAction>>\
<<replace "#eventtext">>\
<<ShowLever _ChangeTo>>\
<</replace>>\
<<set _throwaway to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<</link>>\
</span>\
<</widget>>\
<<widget "TogglePressurePlate">>\
<<set _PlateActions to _args[0]>>\
<<for _PL to 0; _PL < _PlateActions.length; _PL++>>\
<<set _DunXtoChange to _PlateActions[_PL][0]>>\
<<set _DunYtoChange to _PlateActions[_PL][1]>>\
<<set _ArrayPosToChange to _PlateActions[_PL][2]>>\
<<set _NewValue to 0>>\
<<if $Dungeon[_pz][_DunXtoChange][_DunYtoChange][_ArrayPosToChange] is 0>>\
<<set _NewValue to 1>>\
<<endif>>\
<<set $Dungeon[_pz][_DunXtoChange][_DunYtoChange][_ArrayPosToChange] to clone(_NewValue)>>\
<</for>>\
\
<<set _throwaway to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
\
@@color:LightGreen;Pressure plate@@
You hear the sound of stone sliding on stone.
<</widget>>\
<<widget "PressurePlateStepOffCheck">>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _StandingOn to $Dungeon[_pz][_px][_py]>>\
<<if _StandingOn[11] is "PressurePlate">>\
<<set _CharsOnFirst to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if $PC[_AllPCS][$PClocation] is "tower">>\
<<if $PC[_AllPCS][$PCz] is _pz>>\
<<if $PC[_AllPCS][$PCx] is _px>>\
<<if $PC[_AllPCS][$PCy] is _py>>\
<<set _CharsOnFirst to _CharsOnFirst +1>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _CharsOnFirst < 2>>\
<<TogglePressurePlate _StandingOn[12]>>\
<<endif>>\
<<endif>>\
<</widget>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $RoomPTR to passage()>>\
<<set $AllowNav to true>>\
\
<<RightPic "eventbed.jpg">>\
\
<<replace "#eventtext">>\
@@color:LightGreen;Shattered bedroom@@
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
You're in the remains of what appears to have once been an elegant bedroom, but that has fallen into extreme disrepair. Yet while the stone walls of this room are shattered and full of holes, the linens on the bed look clean and inviting, and the pillow appears to have been recently fluffed.
<hr>\
<span id="KeypOne">\
<<link "1) Take a nap" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 1>>
<</link>>\
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 1>><!-- sleep request-->\
<<if _pz > random(1,10)>>\
<<set _whichmon to either("goblin","slime","hellhound","spider")>>\
<<if _whichmon is "goblin">>\
<<if $PC[$CC][$PCsex] is "male">>\
You curl up under the covers to take a refreshing nap, but your sleep is disturbed by an unpleasant dream about being constipated. It's the scent that really gets to you though. You've never smelled something so intensely in a dream before. That's when you wake up to see your legs spread wide and a goblin already balls deep inside your ass with a long line of drool dripping from his tongue to your stomach.
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<else>>\
You curl up under the covers to take a refreshing nap, but your sleep is disturbed by a a dream that is somehow both erotic...and yet also strangely uncomfortable. It's the sounds that really gets to you though. It sounds like...someone cheering? It That's when you wake up to your ankles wrapped around a goblin's neck as he thrusts his cock balls deep inside you.
<<FemaleVirginity _whichmon>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<endif>>\
<<elseif _whichmon is "hellhound">>\
<<if $PC[$CC][$PCsex] is "male">>\
You curl up under the covers to take a refreshing nap, quickly falling into a peculiar dream about sinking into lava. You're completely submerged up to the waist, and trails of smoke and heat roll across your face. And yet somehow despite the heat, the smoky bits seems strangely wet. Bursting suddenly to full awareness, you find yourself with a fiery red hellhound between your legs eagerly licking your cock.
<<else>>\
You curl up under the covers to take a refreshing nap, quickly falling into a peculiar dream about sinking into lava. You're completely submerged up to the waist, and trails of smoke and heat roll across your face. And yet somehow despite the heat, the smoky bits seem strangely wet. Bursting suddenly to full awareness, you find yourself with a fiery red hellhound between your legs. His forepaws are wrapped aroudn your and he's thrusting his cock in search of a hole, while happily licking your face.
Seeing that you're now awake, the hellhound tightens his grip on your hips even as his tongue lols out the side of his mouth and his head arches upwards in pleasure.
<<endif>>\
<<elseif _whichmon is "slime">>\
<<if $PC[$CC][$PCsex] is "male">>\
Resting down into the covers for a nice nap, you find your sleep disturbed by a strange dream. You're riding a boat in choppy waters, and every time you roll over a wave, the boat violently splashes into the water. There's so much water that your clothes are drenched and you're finding it difficult to breath. Thats when you open your eyes to find a slime monster with a tentacle down yous throat and thrusting in and out of your ass hole.
<<else>>\
Resting down into the covers for a nice nap, you find your sleep disturbed by a strange dream. You're riding a sailboat in choppy waters, and every time you roll over a wave, the boat violently splashes into the water. Over and over this happens, until finally you wake up to discover that a slime has slipped beneath the covers and is fucking both your ass and pussy together.
<<FemaleVirginity _whichmon>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<endif>>\
<<elseif _whichmon is "spider">>\
You quickly fall alseep into a dream about being wrapped so tightly in blankets that you can barely breath. Shifting uncomfortably, you open your eyes to the sight of a giant spider above you, in the process of wrapping your torso in webbing while an grotesque barbed cock dangles beneath it.
<<elseif _whichmon is "minotaur">>\
@@color:Yellow;No longer used@@
Curling up under the covers to take a refreshing nap, it's not long before you're awaked by the sensation of the bedsheets being yanked off the bed. Jolting upright, the first thing you see is a massive horse cock whacking you across the face and knocking you back down. Moments later a meaty minotaur hand engulfs your face and forces you the back of your head down onto a pillow, and you feel that same impossibly large horse cock now roughly probing its way up your thighs.
Drowsy and dazed, you offer up barely any struggle as the minotaur tosses one of your ankles up over his shoulders and begins probing his cock into your pelvis, trying to squeeze it inside. You almost want to try to rationally explain to him that it can't possibly fit, and yet to your growing dread his pre-cum moistens your pussy folds and slowly begins to make headway.
<<FemaleVirginity _whichmon>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
Unable to see, but feeling every inch of his two foot long member now sliding its length up and down your pussy, you can't help but wonder at the mechanics involved if a creature this large somehow makes you pregnant.
<<else>>\
bed event, implement whatever monster this is: _whichmon
<<endif>>\
\
<<set $AllowNav to false>>\
\
<!-- both options need it: whether for combat or for pregnancy -->\
<<set $ForceMon[0] to _whichmon>>
<<set $ForceMon[1] to "male">>
<<GetMon $ForceMon>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Struggle" "Combat">>
<<set $Dungeon[_pz][_px][_py][12] to 9999>>\
<</link>>\
</span>\
<<if $PC[$CC][$PCsex] neq "male">>\
<span id="KeypTwo">\
<<link "2) Ride it out" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 3>>
<<set $WORLD.datapasser to _whichmon>>
<</link>>\
</span>\
<<endif>>\
<<else>>\
You curl up under the covers and take a refreshing nap, disturbed only slighly by an erotic dream you only dimly recall.
@@color:LightGreen;Health restored!@@
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpmax]>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanamax]>>\
<<ShowHealth>><<ShowMana>>\
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 2>><!-- old error condition-->\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
@@color:Red;Warning!@@ You appear to have an //old// error condition left over from prior versions of the game. If you haven't reset the tower since 2023, then it's not a big deal. Your bed state has now been reset to an unvisited state. Walk off and come back, and everything should be back to normal. If you've reset the tower //after// the February 2024 update, something is very wrong and you should report this as a bug.
<<elseif $Dungeon[_pz][_px][_py][12] is 3>><!-- ride it out-->\
<<set _whichmon to $WORLD.datapasser>>\
<<set $PC[$CC][$PChornycur] to 0>>\
<<set $Dungeon[_pz][_px][_py][12] to 9999>>\
<<if _whichmon is "goblin">>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + _pz>>\
Deciding not to struggle, you relax your anus as the goblin continues to pounds his way at your insides. You're disappointed when he quickly ejaculates mere seconds later, then collapses in an exhausted heap on top of you. His cock is still plugged up tightly inside you however, it takes a couple minutes of awkward manouvering to squeeze him out and off of you.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived +1>>\
Relaxing and pushing your hips up against the goblin, you're disappointed when he quickly ejaculates then collapses in a sleeping heap on top of you. His cock is still inside you however, and despite your growing concern over its presence holding a pool of warm, virile semen inside you, it neverthless takes you a couple minutes to manouver his bulk off of you.
You do the best you can to clean the mess now dripping down your thighs, but if his seed was going to take, surely it's already done so.
<<endif>>\
<<elseif _whichmon is "hellhound">>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + 1>>\
Not one to turn down a blowjob, you pat the hound on the head and offer murmurings of support then close your eyes and relax as its slippery dog-tongue quickly laps its way up and down your cock. He brings you to a swift climax, then licks your clean and runs off down a corridor, his tail wagging.
<<else>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + _pz>>\
Rotating your hips upwards to better receive him, the hellhound accepts your cooperation as his cue to breed you. Pressing his thick neck own against yours, you feel the large bulb at the base of his cock struggling to fit inside you. Spreading your legs sligthly to give him better access, there's a tiny bit of pain as he squeezes it intde you, and then to your shock it very obviously grows somehow //larger// in order to solidly lock you in coitus. Looking down at you with a grin and knowing that you cannot possibly escape without tearing out your insides, the hellhound gleefully fucks you on the single inch or two of play he has, his knot bouncing incessenetly at the inside of your vagina every time he pulls back.
<<FemaleVirginity _whichmon>>\
You instantly climax, but he doesn't let up. Now licking your face and neck with a trail of slobber, you feel a growing heat deep inside you as of his enormous cock tickles maddeningly at your cervix. When at last his climax cums it's like a gallon of lava gushing across your insides with a tingly sensation that spreads throughout your entire body. Finally he collapses on top of you, but still knotted tightly together you can do nothing but carry his bulk for another 20 minutes while he cheerfully licks your face and the inside of your mouth.
At some point you pass out, and when you awaken, you are alone in the bed with a pool of reddish semen dripping out from between your legs.
<<endif>>\
<<elseif _whichmon is "slime">>\
<<if $PC[$CC][$PCsex] is "male">>\
imeplement male
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven +1>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + (_pz * 2)>>\
<<else>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + (_pz * 2)>>\
Having had worse dreams you try to go back to sleep, but the slime continues unabated. Eventually it ejaculates in both your holes, then slips away. Your thighs and the bedsheets are now messily drenched in slime goo.
<<endif>>\
<<elseif _whichmon is "spider">>\
<<if $PC[$CC][$PCsex] is "male">>\
imeplement male
<<else>>\
<<FemaleVirginity _whichmon>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
Hardly able to move already, you're unsurprised when the _whichmon secretes webbing on your ankles. You //are// surprised that it does this with your legs wrapped around its body to anchor you in place around it. Now webbed securely in place, there's little you can do but take his cock as he slips it slowly inside you and immediately begins a long, slow ejaculation. There is no thrusting, no heavy breathing or cries of pleasure, only calm silence with intent to ''breed'' you.
The flow of semen is slow and steady, a constant trickle drawn out over minutes as you feel a warm pool of it growing inside you. At first there is no pleasure, but the before long the calm, calculating nature of the act intended only to breed you overwhelms you and you can't help but climax. The _whichmon looks at you with amusement, then secretes a fluid to dissolve the webbing from your ankles which fall unceremoniously to the bed between his legs. At last slipping his cock out, he then applies a fliud to your pussy which quickly hardens, locking his semen inside you for a short but crucial time until it dissolves. And then he leaves, as silently as he came.
<<endif>>\
<<elseif _whichmon is "minotaur">>\
@@color:Yellow;No longer used@@
<<if $PC[$CC][$PCsex] is "male">>\
<<else>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + _pz>>\
Feeling it would be hopeless to try to resist such a massive beast, you relax and try to be as compliant as possible. It makes no difference though, as the minotaur simply continues plowing away with a massively flared horse cock between your increasingly bruised thighs. Struggling to breath around his hand on your face, you're surprised when he cums almost immediately, your stomach bulging with the massive spray of semen now painted across your insides.
Then without so much as a grunt, he gets up off you and walks away, leaving you bewildered and shocked at the backwards stream of his semen sprayed across the sheets fully two feet away from your battered pussy.
<<endif>>\
<<else>>\
implement whichever sex event this is: _whichmon
<<endif>>\
On the bright side, your arousal has been thoroughly sated.
<<elseif $Dungeon[_pz][_px][_py][12] is 9999>><!-- struggled-->\
The bed here is messy and unkept, not having been made since your last sketchy attempt at sleep. You're reluctant to sleep here again given how the last attempt ended with a monster between your legs, but surely it wouldn't happen again, would it?
<span id="KeypOne">\
<<link "1) Risk it" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 1>>
<</link>>\
</span>\
<<else>>\
Error in event 102: unrecognized state: $Dungeon[_pz][_px][_py][12]
<<endif>>\
<</replace>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
<<set _AllowGenericLinks to false>>\
\
<<RightPic "eventchest.jpg">>\
\
<!-- general values -->\
<<set _LockDiff to _pz + 15>>\
<<set _SmashPower to $PC[$CC][$PCstr]>>\
<<set _PickPower to $PC[$CC][$PCdex]>>\
<<set _SmashPowerWithHammer to _SmashPower>>\
<<set _PickPowerWithPick to _PickPower>>\
<<set _HasHammer to false>>\
<<if setup.HasHammer() > -1>>\
<<set _HasHammer to true>>\
<<set _SmashPowerWithHammer to _SmashPower +3>>\
<<endif>>\
<<set _PickPTR to setup.HasPick()>>\
<<if _PickPTR > -1>>\
<<set _PickPowerWithPick to _PickPower +3>>\
<<endif>>\
<<set _IsRogue to false>>\
<<set _RogueAUTO to false>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "rogue">>
<<set _IsRogue to true>>\
<<if $PC[$CC][$PClevel] > 6>>\
<<set _RogueAUTO to true>>\
<<endif>>\
<<endif>>\
\
<!-- version update fixer -->\
<<if $Dungeon[_pz][_px][_py][12] is 2>>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<endif>>\
\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
@@color:LightGreen;Treasure chest!@@
Prominently placed in the center of this room is a large wooden chest. Surely that's not suspicious at all, right? Still, what valuable and useful goodies might be inside?\
<<set _AllowGenericLinks to true>>\
<<elseif $Dungeon[_pz][_px][_py][12] < 5>>\
<<set _GiveLoot to false>>\
<<set _DoTrap to false>>\
\
<<if $Dungeon[_pz][_px][_py][12] is 1>>\
<!-- strength only -->\
@@color:Yellow;Target difficulty:@@ <<print _LockDiff>>
@@color:LightGreen;Strength:@@ <<print $PC[$CC][$PCstr]>>
<<if _HasHammer is true>>\
@@color:LightGreen;Hammer:@@ +3
<<else>>\
@@color:Red;No hammer!@@
<<endif>>\
<<if _RogueAUTO is true>>\
@@color:Aqua;Rogue level 7 bonus:@@ Auto success!
As a skilled rogue, you effortlessly pick the lock and dismarm the trap.
<<set _GiveLoot to true>>\
<<set _DoTrap to false>>\
<<else>>\
<<if $PC[$CC][$PCstr] gte _LockDiff>>\
<<set _GiveLoot to true>>\
<<set _DoTrap to true>>\
@@color:LightGreen;Success!@@
You jam your fingers into the slit between the base and lid of the chest and pry them apart with such force that the lock is ripped out from its mounting in the wood. \
<<elseif _SmashPowerWithHammer gte _LockDiff>>\
<<set _GiveLoot to true>>\
<<set _DoTrap to true>>\
@@color:LightGreen;Success!@@
It takes a couple swings with your hammer, but you eventually manage to smash the lock and open the chest. \
<<elseif $DebugMode is true>>\
<<set _GiveLoot to true>>\
<<set _DoTrap to true>>\
@@color:Orange;Debug Mode Auto Success@@
You wave your hands and the chest opens
<<else>>\
<<set _AllowGenericLinks to true>>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
@@color:Yellow;Failed to open the chest!@@
<<if _HasHammer is true>>\
You spend several minutes smacking the lock with your hammer, but you're just not strong enough to break it. \
<<else>>\
You jam your fingers into the slit between the base and lid of the chest, but you're not strong enough to pry it open. \
<<endif>>\
<<endif>>\
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 3>>\
<!-- pick -->\
@@color:Yellow;Target difficulty:@@ _LockDiff
<<if _RogueAUTO is true>>\
@@color:Aqua;Rogue level 7 bonus:@@ Auto success!
As a skilled rogue, you effortlessly pick the lock and disarm the trap.
<<set _GiveLoot to true>>\
<<set _DoTrap to false>>\
<<else>>\
@@color:LightGreen;Dexterity:@@ $PC[$CC][$PCdex]
<<if _IsRogue is true>>\
@@color:LightGreen;Rogue level bonus:@@ +<<print $PC[$CC][$PClevel]>>
<<else>>\
@@color:Red;Not a rogue@@
<<endif>>\
<<if _PickPTR > -1>>\
@@color:LightGreen;Using lockpicks:@@ +3>>
<<else>>\
@@color:Red;No lockpicks@@
<<endif>>\
<<if _PickPower gte _LockDiff >>\
@@color:Aqua;Success!@@
You make quick work of the lock \
<<set _GiveLoot to true>>\
<<set _DoTrap to true>>\
<<elseif _PickPowerWithPick gte _LockDiff >>\
@@color:LightGreen;Success!@@
It takes several minutes, but eventually you manage to pick the lock \
<<set _GiveLoot to true>>\
<<set _DoTrap to true>>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
@@color:Red;Failure!@@
You spend several minutes fiddling with the lock, but fail to open it. \
<<set _GiveLoot to false>>\
<<set _DoTrap to false>>\
<<endif>>\
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 4>>\
The chest is sitting open, and thankfully the treasure is still inside. \
<<set _GiveLoot to true>>\
<<set _DoTrap to false>>\
<<endif>>\
\
<<if _DoTrap is true>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "rogue">>\
The chest is trapped, but as a rogue you manage to disarm it without difficulty. \
<<else>>\
<<set _WhichTrap to random(1,3)>>\
<<if _WhichTrap is 1>>\
You're feeling pretty good about yourself when the trap mechanism suddenly sprays your face with acid. \
<<set _InCaseofDeath to "an acid-trapped chest">>\
<<set _Damage to random(_pz, _pz * 5)>>\
<<set _Damage to _Damage * -1>>\
<<ChangeStat $PChpcur _Damage>>\
<<ShowHealth>>\
<<elseif _WhichTrap is 2>>\
That's when a burst of magic discharges from the trap mechanic, and draining your mana reserves. \
<<set _Damage to random(_pz, _pz * 5)>>\
<<set _Damage to _Damage * -1>>\
<<ChangeStat $PCmanacur _Damage>>\
<<ShowMana>>\
<<else>>\
<<set _Target to []>>\
<<set _Morphs to ["human", "human", "goblin", "slime","rat-morph","spider"]>>\
<<if _pz > 15>>\
<<set _Morphs to ["human", "human", "demon", "tentacle","drider","hydra","snake"]>>\
<<elseif _pz > 10>>\
<<set _Morphs to ["human", "human", "minotaur", "naga", "rat-morph", "hellhound", "troll", "drider"]>>\
<<elseif _pz > 5>>\
<<set _Morphs to ["human", "human", "goblin", "slime", "spider","rat-morph", "minotaur", "naga"]>>\
<<endif>>\
<<set _Target to []>>\
<<for _Poss to 0; _Poss < $PC[$CC][$PCbp].length; _Poss++>>\
<<set _foo to $PC[$CC][$PCbp][_Poss].type>>\
<<set _bar to either(_Morphs)>>\
<<set _Target[_Poss] to { type: _foo, morph: _bar }>>\
<</for>>\
Unfortunately, right as you're about to check out the loot a small needle you missed injects you with a strange transformative liquid.
@@color:Yellow;* <<DoTransform _Target "chest">>!@@
@@color:Yellow;* <<DoTransform _Target "chest">>!@@
@@color:Yellow;* <<DoTransform _Target "chest">>!@@
<<endif>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _GiveLoot to false>>\
<<set $AllowMove to false>>\
<br><br>\
@@color:Red;You have died!@@
<<set $WORLD.diedby to _InCaseOfDeath>>\
<span id="KeypSpace">\
<<link "space) Continue" "Death">>
<<set $Dungeon[_pz][_px][_py][12] to 4>>
<</link>>
</span>\
<<else>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<if _GiveLoot is true>>\
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
<br>\
@@color:LightGreen;Chest opened!@@
<<set $PC[$CC][$PCmisc].chests to $PC[$CC][$PCmisc].chests +1>>\
<<if $PC[$CC][$PCmisc].chests > 3>>\
<<AwardAchievement "Archeologist">>\
<<endif>>\
<<set _evgold to random(99, _pz * 100)>>\
<<set _AllowLoot to false>>\
<<set _Loot to $Dungeon[_pz][_px][_py][13]>>\
<<if random(1,3) is 1>>\
<<set _AllowLoot to true>>\
<<elseif setup.PlayerHasPerk("Archeologist") is true>>\
<<set _AllowLoot to true>>\
<<elseif $DebugMode is true>>\
<<set _AllowLoot to true>>\
@@color:Orange;Debug: forcing chest loot@@
<<endif>>\
\
<<if _Loot.length is 4>>\
@@color:Orange;Warning: chest somehow generated with old, pre-23Nov style loot format. Fixing.@@
<<set _Loot to setup.GenLoot("chest", "none", _pz, "tower")>>\
<<elseif _Loot.length is 5>>\
<<else>>\
@@color:Orange;Warning: chest generated with invalid loot: (<<print _Loot>>) Fixing.@@
<<set _Loot to setup.GenLoot("chest", "none", _pz, "tower")>>\
<<endif>>\
\
<<if _AllowLoot is true>>\
<<DescribeItem _Loot>>\
Inside you find _evgold gold and a <<print $ItemPoke.fullname>>!\
<<GainGold _evgold>>\
<<set _foo to setup.GiveItem($CC, _Loot)>>\
<<else>>\
Inside the chest you find _evgold gold!\
<<GainGold _evgold>>\
<<endif>>\
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 99>>\
There is an empty chest here.\
<<else>>\
@@color:Red;Error in room: unrecognized state@@\
<<endif>>\
\
<<if _AllowGenericLinks is true>>\
<br>\
<<if _HasHammer is true>>\
<span id="KeypOne">\
<<link "1) Smash the lock with your hammer" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 1>>
<</link>>
</span>\
<<else>>\
<span id="KeypOne">\
<<link "1) Try to force it open" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 1>>
<</link>>
</span>\
<<endif>>\
<<if (_IsRogue is true) or (_PickPTR > -1)>>\
<span id="KeypTwo">\
<<link "2) Pick the lock" $RoomPTR>>\
<<set $Dungeon[_pz][_px][_py][12] to 3>>
<</link>>\
</span>\
<<else>>\
2) Cannot pick the lock\
<<endif>>\
<<endif>>\
<</replace>>\<!-- food barrel -->\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<RightPic "eventbarrel.jpg">>\
\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
<<set $Dungeon[_pz][_px][_py][12] to random(1,3)>>\
<<endif>>\
<<if $Dungeon[_pz][_px][_py][12] < 10>>\
@@color:LightGreen;Wooden barrel@@
This room appears to be be an old, mostly abandoned pantry. However, one prominent barrel is sealed, and looks like it might contains some goodies.
<span id="KeypOne">\
<<link "1) Open it">>
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
<<replace "#eventtext">>\
@@color:LightGreen;Raiding the pantryg@@
<<if $Dungeon[_pz][_px][_py][12] is 1>>\
<<set _Item to [102, 199, random(2,4), 0, 0]>>\
<<set _foo to setup.GiveItem($CC, _Item)>>\
You find a couple chunks of unidentifiable meat. No idea what they're from, but at least they smell ok.
<<elseif $Dungeon[_pz][_px][_py][12] is 2>>\
<<set _Item to [109, 400, 1, 0, 0]>>\
<<set _foo to setup.GiveItem($CC, _Item)>>\
You find an unlabeled bottle containing some sort of greenish-blue liquid. No idea what it is.
<<else>>\
<<set _Item to [107,0,1,0,0]>>\
<<set _foo to setup.GiveItem($CC, _Item)>>\
You find a roll of cheese wrapped in wax. It seems to be seemed well enough, so it's probably safe to eat.
<<endif>>\
<</replace>>\
<</link>>\
</span>\
<<else>>\
@@color:LightGreen;Wooden barrel@@
There is an old, empty barrel here.
<<endif>>\
<</replace>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
<<set _PickFrom to ["bunnyF","bunnyM","catF","catM","foxF","foxM","wolfM"]>>\
<<set _Picked to _PickFrom[random(0, PickFrom.length])>>\
<<if _Picked is "bunnyF">>\
<<set _next to { which: "bunny", sex: "boy", answer: 0, img: "bunnyF.jpg" }>>\
<<elseif _Picked is "bunnyM">>\
<<set _next to { which: "bunny", sex: "boy", answer: 0, img: "bunnyM.jpg" }>>\
<<elseif _Picked is "catF">>\
<<set _next to { which: "cat", sex: "boy", answer: 0, img: "catF.jpg" }>>\
<<elseif _Picked is "catM">>\
<<set _next to { which: "cat", sex: "boy", answer: 0, img: "catM.jpg" }>>\
<<elseif _Picked is "foxF">>\
<<set _next to { which: "fox", sex: "boy", answer: 0, img: "foxF.jpg" }>>\
<<elseif _Picked is "foxM">>\
<<set _next to { which: "fox", sex: "boy", answer: 0, img: "foxM.jpg" }>>\
<<else>>\
<<set _next to { which: "wolf", sex: "man", answer: 0, img: "wolfM.jpg" }>>\
<<endif>>\
@@color:LightGreen;Friendly <<print _next.which>>-<<print _next.sex>>!@@
<<set $AllowNav to false>>\
\
<<SimplePic _next.img>>\
\
<hr>
<<set _npc to _next.which + "-" + _next.sex>>\
<<if _next.sex is "girl">>\
As you enter this room you're surprised to see a half-naked _npc on her knees, desperately clutching at her bare breasts. When she sees you, her eyes light up in hope.
"Please help me!" she cries, clearly in pain. "I triggered a breast-growth trap and I desperately need to be milked! Would you suck my <<print either("boobs","tits")>> dry?
Do you help?
<span id="KeypOne">\
<<link "1) Decline to help" $RoomPTR>>
<<set _next.answer to "decline">>\
<<set $Dungeon[_pz][_px][_py][12] to _next>>\
<</link>>\
</span>
<span id="KeypTwo">\
<<link "2) Yes, suck her dry" $RoomPTR>>
<<set _next.answer to "sucktits">>\
<<set $Dungeon[_pz][_px][_py][12] to _next>>\
<</link>>\
</span>
<span id="KeypThree">\
<<link "3) Milk her with your hands only" $RoomPTR>>
<<set _next.answer to "milkhands">>\
<<set $Dungeon[_pz][_px][_py][12] to _next>>\
<</link>>\
</span>\
<<else>>
As you enter the room, you're surprised to see a _npc with his pants down, <<print either("jacking off","masturbating") freely.
"Oh, thank <<print either("goodness","the divines","goddess")>> someone is here!" he exclaims in relief. "I just beat a <<print either("lusty","horny")>> succubus, but she left me <<print either("horny as hell","like this","with an erection so huge I can barely walk")>>. I need to <<print either("get my rocks off","deal with this","get a handle on this")>> fast or else the next monster I encounter is going to have its way with me. Please, won't you help me?"
Do you help him?
<span id="KeypOne">\
<<link "1) Decline to help" $RoomPTR>>
<<set _next.answer to "decline">>\
<<set $Dungeon[_pz][_px][_py][12] to _next>>\
<</link>>\
</span>
<span id="KeypTwo">\
<<link "2) Yes, suck his cock and swallow his load" $RoomPTR>>
<<set _next.answer to "suckcock">>\
<<set $Dungeon[_pz][_px][_py][12] to _next>>\
<</link>>\
</span>
<span id="KeypThree">\
<<link "3) Suck his dick, but don't swallow" $RoomPTR>>
<<set _next.answer to "sucknoswallow">>\
<<set $Dungeon[_pz][_px][_py][12] to _next>>\
<</link>>\
</span>\
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12].hasOwnProperty("answer") is true>>\
<<set _next to $Dungeon[_pz][_px][_py][12]>>\
<<set _npc to _next.which + _next.sex>>\
debug: npc is _npc
<<else>>\
@@color:Red;Something went wrong in Event105, clearing event@@
<<set $AllowNav to true>>\
<<set $Dungeon[_pz][_px][_py][11] to 0>>
<<set $Dungeon[_pz][_px][_py][12] to 0>>
<<endif>>\
<</replace>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $RoomPTR to passage()>>\
\
<<set _sb to $PC[$CC][$PCspellbook]>>\
<<set _combat to _sb.firebolt + _sb.armor + _sb.poison + _sb.heal + _sb.dart>>\
<<set _transport to _sb.up + _sb.down + _sb.portal>>\
<<set _utility to _sb.map + _sb.light + _sb.passwall>>\
\
<<if _combat is 0>>\
<<set _book to either("firebolt","poison","armor","heal", "soul trap", "dart")>>\
<<elseif _utility is 0>>\
<<set _book to either("light","map")>>\
<<elseif _transport is 0>>
<<set _book to either("up","down","portal")>>\
<<else>>\
<<set _book to either("firebolt","poison","armor","heal","light","map","up","down","portal","dart")>>\
<<endif>>\
\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
@@color:Gold;Abandoned bookcase@@
<hr>
You find a small bookshelf with a small book in it
<span id="KeypOne">\
<<link "1) Take it" $RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 2>>
<</link>>\
</span>
<<elseif $Dungeon[_pz][_px][_py][12] is 1>>\
@@color:LightGreen;Abandoned bookcase@@
This bookcase state is no longer used
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
<<print setup.LearnSpell(_book)>>\
<<SpellAchieveCheck>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 2>>\
@@color:LightGreen;Abandoned bookcase@@
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
<<set _BookD to setup.SpellbookLookup(_book)>>\
<<set _foo to setup.GiveItem($CC, [111, 0, 0, _BookD, 0])>>\
You pick up a spellbook of _book.
<<elseif $Dungeon[_pz][_px][_py][12] is 99>>\
@@color:LightGreen;Abandoned bookcase@@
There is an empty bookcase here.
<<else>>\
@@Error in event 106: unrecognized state: <<print $Dungeon[_pz][_px][_py][12]>>
<<endif>>\
<</replace>>\
<<replace "#eventtext">>\
@@color:Gold;Implement Event 107@@
Cage
<hr>
<</replace>>\<!-- statue -->\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<RightPic "eventstatue.jpg">>\
\
<<replace "#eventtext">>\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
@@color:LightGreen;Statue of an Angel@@
A white marble statue of an angel fills the center of this room. She wears a long skirt and dense robe, and carries a small rectangular piece of paper with something written on it.
<span id="KeypOne">\
<<link "1) Read the paper">>
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
<<replace "#eventtext">>\
<<set _WhichCharm to random(1,3)>>\
<<if _WhichCharm is 1>>\
@@color:LightGreen;Received Blessing of Fire@@
The charm burns to white ash when read, but fills your body with warmth. You will take less damage from fire during your next encounter.
<<ApplyEffect "resist fire" 1>>\
<<ShowActiveEffects>>\
<<elseif _WhichCharm is 1>>\
@@color:LightGreen;Received Blessing of Magic@@
The charm burns to white ash when read, but fills your body with a sense of power. You will take less damage from magic during your next encounter.
<<ApplyEffect "resist magic" 1>>\
<<ShowActiveEffects>>\
<<else>>\
@@color:LightGreen;Received Blessing of Stone@@
The charm burns to white ash when read, but fills you with a sense of being grounded. You will be harder to hit with melee attacks during your next encounter.
<<ApplyEffect "stoneskin" 1>>\
<<ShowActiveEffects>>\
<<endif>>\
<</replace>>\
<</link>>\
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 99>>\
@@color:LightGreen;Statue of a Shrine Maiden@@
A white marble statue of an angel fills the center of this room. She wears a long skirt and dense robe, but the paper charm she once carried has been burned to ashes.
<<else>>\
@@color:Red;Error in Event108: unrecognized state: <<print $Dungeon[_pz][_px][_py][12]>>@@
<<endif>>\
<</replace>>\@@color:Gold;Implement Event 109@@
<hr>
Throne<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
@@color:Gold;Implement Event 110@@
<hr>
@@color:LightGreen;Salon@@
<<if $Dungeon[_pz][_px][_py][12] is 0>>
initial event state
<<elseif $Dungeon[_pz][_px][_py][12] is 1>>
<<else>>\
@@color:Red;Error in room: unrecognized state@@
<<endif>>\
<hr>\
<span id="KeypOne">\
<<link "1) Do stuff" $RoomPTR>>
<</link>>\
</span>\
<</replace>>\
<<replace "#eventtext">>\
@@color:Gold;Implement Event 111@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 112@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 113@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 114@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 115@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 116@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 117@@
<hr>
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Implement Event 118@@
<hr>
<</replace>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $RoomPTR to passage()>>\
<<set _ExitLinks to "none">>
\
<<if $WORLD.SmithQuests[0] is 0>>\
<<set _RightPic to "auction.png">>\
<<set _SuccessPic to "MONhumanM1.jpg">>\
<<set _EventSex to "male">>\
<<set _AdvenHeShe to "he">>\
<<set _AdvenHimHer to "him">>\
<<set _AdvenHisHer to "his">>\
<<set _AdvenGuyGirl to "guy">>\
<<elseif $WORLD.SmithQuests[0] is 1>>\
<<set _RightPic to "auction.png">>\
<<set _SuccessPic to "MONhumanF4.jpg">>\
<<set _EventSex to "female">>\
<<set _AdvenHeShe to "she">>\
<<set _AdvenHimHer to "her">>\
<<set _AdvenHisHer to "her">>\
<<set _AdvenGuyGirl to "girl">>\
<<endif>>\
\
<<set _BeerItemPTR to -1>>\
<<set _BeerQTY to 0>>\
<<for _B to 0; _B < $PC[$CC][$PCinven].length; _B++>>\
<<if ($PC[$CC][$PCinven][_B][0] is 109) and ($PC[$CC][$PCinven][_B][3] is 402)>>\
<<set _BeerItemPTR to _B>>\
<<set _BeerQTY to $PC[$CC][$PCinven][_BeerItemPTR][2]>>\
<<endif>>\
<</for>>\
\
<<if $WORLD.CombatInterrupt is "defeated smith omnibus">>\
<<set _ExitLinks to none">>\
<!-- no: handled below for replace matching: set $WORLD.CombatInterrupt to "" -->
<<set $WORLD.datapasser to "">>\
<<set $WORLD.SmithQuests[1] to "success">>
<<endif>>\
\
<<if $DebugMode is true>>\
<<replace "#capdebuginfo">>SmithQuest is: <<print $WORLD.SmithQuests[1]>><</replace>>\
<<endif>>\
<<if $WORLD.SmithQuests[1] is 0>>\
<<set $WORLD.datapasser to "">>\
<<RightPic _RightPic>>\
<<replace "#eventtext">>\
@@color:LightGreen;Encounter@@
You find a demon with huge tits and a cock guarding an adventurer in a cage. Seeing you, she glances over at you.
@@color:Red;Demon@@: "<<print either("Hey, sexy. You here to buy, or you just here to stare at the merchandise?","Hey, I've got one genuine human adventurer for sale over here. Slightly used though.")>>"
\
<span id="KeypT">\
<<link "t) Talk" "EventSmith">>
<<AdvanceTime 5>>
<<set $WORLD.datapasser to 0>>
<<set $WORLD.SmithQuests[1] to "demontalk">>
<</link>>\
</span>
<span id="KeypF">\
<<link "f) Fight" "Combat">>
<<set $DisableMenu to true>>\
<<set $WORLD.CombatInterrupt to "smith quest omnibus", 1>>\
<<set $WORLD.SmithQuests[1] to 98>>
<<set $ForceMon to ["Charyss","herm"]>>
<<GetMon $ForceMon>>\
<<AdvanceTime 5>>
<</link>>\
</span>\
<</replace>>\
<<elseif $WORLD.SmithQuests[1] is "demontalk">>\
@@color:LightGreen;Chatting with a demon in the forest@@
<hr>\
<<SimplePic "auction.png">>\
<<set _ExitLinks to "questions">>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
<<if _CurrentQuestion is 0>>\
<<if $Charyss is 1>>\
<<unset $Charyss>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello again, Charyss."
@@color:Red;Charyss@@: "Oh, you remembered my name? I'm flattered."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hi, I'm $PC[$CC][$PCname]."
@@color:Red;Demon@@: "What, are we on a first name basis already? Usually I fuck first, but if this is how you humans do things, then whatever I guess. I'm Charyss."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Are you a demon?"
@@color:Red;Charyss@@: "Well duh, what gave it away?" she laughs. "Was it my outrageously good looks? My lovely hair? The way the sun glints off my cock, maybe? Oh, I don't know...how about the horns and and tail and bright red skin? Yes, I'm an omnibus. What's it to you?"
<<endif>>\
<!-- Unlocks -->\
<<if $PC[$CC][$PCSmithDemonChat][1] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][1] to 1>><!-- What are you doing out here in the forest? -->\
<<endif>>\
<<if $PC[$CC][$PCSmithDemonChat][2] is 0>>
<<set $PC[$CC][$PCSmithDemonChat][2] to 1>><!-- Why are you trying to sell an adventurer? -->\
<<endif>>\
<<if $PC[$CC][$PCSmithDemonChat][3] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][3] to 1>><!-- What's an omnibus? -->\
<<endif>>\
<<if $PC[$CC][$PCGerardChat][4] is 2>>\
<<set $PC[$CC][$PCSmithDemonChat][6] to 1>><!-- Zehtalia, from Gerard (implement should only offer question if she's still alive) -->\
<<endif>>\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCSmithDemonChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What are you doing out here in the forest?"
@@color:Red;Charyss@@: "I'm hosting a lemonade stand and soliciting donations for blind, orphaned girl scouts," she rolls her eyes. "No seriously, I'm trying to sell a sex slave. What does it look like I'm doing?"
@@color:LightGreen;Adventurer@@: "Please help me!" the adventurer begs.
@@color:Red;Charyss@@: "Oh shut up, you. You're going to be a sex slave and you're going to like it. Remember when I jammed my cock down your throat and face-fucked you until you passed out? It'll probably be like that every day. If only all humans could be so lucky."
@@color:LightGreen;Adventurer@@: *whimpers*
<!-- Unlocks -->\
<<set $PC[$CC][$PCSmithDemonChat][5] to 1>><!-- Slavery is wrong! -->\
<<if $PC[$CC][$PCSmithDemonChat][10] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][10] to 1>><!-- How much? -->\
<<endif>>\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCSmithDemonChat][2] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why exactly are you trying to sell an adventurer?"
@@color:Red;Charyss@@: "I need beer money," she shrugs.
@@color:LightGreen;Adventurer@@: "Please just kill me."
<<if _BeerQTY > 0>>\
<<set $PC[$CC][$PCSmithDemonChat][4] to 1>><!-- I have some beer -->\
<<endif>>\
<<elseif _CurrentQuestion is 3>>\
<<set $PC[$CC][$PCSmithDemonChat][3] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's an omnibus?"
@@color:Red;Charyss@@: "You ever heard of a succubus?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Of course. That's a kind of female sex demon."
@@color:Red;Charyss@@: "You ever heard of an incubus?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's a male sex demon?"
@@color:Red;Charyss@@: "Yep. Now, you ever heard of an omnivore?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's something that eats both plants and meat, right?"
@@color:Red;Charyss@@: "Exactly. 'Omni' is from the Latin, 'omnis,' meaning 'all' or 'everything.' For example, to be omnipotent means to be all powerful. To be omniscient means to know everything. But omnivore doesn't usually mean 'eat everything' like you might think. For example, bears are omnivourous but they don't eat pussy. Instead it means, like you said, they eat both plants and meat. Actually, succubus and incubus relate to the Latin, succubare and incubare, meaning to lie underneath, and to lie upon. As in, to have sex with. Me, an omnibus, see my gorgeous tits? See my glistening cock? And if I bend over you'd see that I have a pussy hidden underneath it. I have the parts to sex up just about anybody in any way I want to. Not literally everything, of course. I don't typically fuck rocks just like an omnivore doesn't eat them. But I'll fuck most things that breath, anyway. So, omni-bus from omni-bare, meaning one who lies with anything."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Huh. Thanks for the...surprisingly thorough explanation."
<<elseif _CurrentQuestion is 4>>\
<<set _ExitLinks to "none">>\
<<set $PC[$CC][$PCSmithDemonChat][4] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I have some beer here," you pull out a bottle. "I'll trade it to you for that _AdvenGuyGirl in the cage."
The demoness immediately starts drooling at the sight of it and walking towards you with outstretched hands like a zombie. Before she takes it, however, she stops and frowns as if realizing something.
@@color:Red;Charyss@@: "That's a really bad deal," she whines, clearly conflicted, then throws up her hands in frustration. "Arrghh!! I've never been good at this whole delayed gratification thing. I want beer. You have beer. That seems like an easy win. But if I can sell this nitwit for 300 gold, I could buy a //lot// of beer."
You glance around at the forest.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And how many offers had you had so far?"
@@color:Red;Charyss@@: "Alright, alright," she grumbles. "But the only reason I'm not just killing you and taking it is...uhh, hmm. Actually, now that I think about it...why aren't I doing that?"
<hr>\
@@color:Gold;Options@@
<span id="KeypOne"><<link "1) Appeal to her better nature" "EventSmith">>
<<set $WORLD.datapasser to 100>>
<<set $WORLD.SmithQuests[1] to "demontalk">>
<</link>></span>
<span id="KeypTwo"><<link "2) Try to outsmart her" "EventSmith">>
<<set $WORLD.datapasser to 101>>
<<set $WORLD.SmithQuests[1] to "demontalk">>
<</link>></span>
<span id="KeypThree"><<link "3) Try to intimidate her" "EventSmith">>
<<set $WORLD.datapasser to 102>>
<<set $WORLD.SmithQuests[1] to "demontalk">>
<</link>></span>
<<if _BeerQTY > 1>>\
<span id="KeypFour"><<link "4) Offer her ALL your beer" "EventSmith">>
<<set $WORLD.datapasser to 103>>
<<set $WORLD.SmithQuests[1] to "demontalk">>
<</link>></span>
<<endif>>\
<<elseif _CurrentQuestion is 5>>\
<<set $PC[$CC][$PCSmithDemonChat][5] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Slavery is wrong!"
<<if random(1,2) is 1>>\
@@color:Red;Charyss@@: "...yeah?" she looks at you confused. "So is rape and murder. And those are at least four of my top five favorite things."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Only four? Whats the fifth one?"
She frowns for a moment and starts counting on her fingers.
@@color:Red;Charyss@@: "No, my bad," she admits. "It's all five."
<<else>>\
@@color:Red;Charyss@@: "HELLOOOO!!!!" she waves a hand in front of your face. "Demon, remember? I'm //supposed// to be bad."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Well, yeah," you mumble. "But you still shouldn't."
@@color:Red;Charyss@@: "Oh, spare me," she rolls her eyes. "Next you'll be telling me I should kill my puppies before I eat them," she makes air quotes with her fingers... "for 'humane' reasons. Like, seriously, do you have any idea how much their kicking and screeaming on the way down adds to the exprience? I don't even chew. You seriously think I care about a little human trafficking?"
The adventurer buries <<print _AdvenHisHer>> face in <<print _AdvenHisHer>> hands.
<<endif>>\
<<elseif _CurrentQuestion is 6>>\
<<set $PC[$CC][$PCSmithDemonChat][6] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you know the Demon Queen of Spiders?"
@@color:Red;Charyss@@: "Spiders don't have a demon queen," she frowns for a moment, before the corners of her mouth turn up in amusement. "Wait, you're not talking about Zehtalia, are you? Flat-chested, 8 legs, like to hang out in the tower?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Not sure about the flat-chested part, but I think so, yes?"
@@color:Red;Charyss@@: "Zehtalia isn't queen of anything, let alone spiders," she laughs. "That whole 'queen of spiders' thing was a joke after she got so drunk she lost a fight to a drider and gained a bunch of legs. Wow, is she really calling herself that now? That'a hilarious. I can't wait to get back to hell to tell everyone."
<<elseif _CurrentQuestion is 7>>\
<<set _ExitLinks to "questions">>\
<<set $PC[$CC][$PCSmithDemonChat][7] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can you tell me about the tower"
@@color:Red;Charyss@@: "The Tower of Triumph?" she blinks. "What makes you think I can tell you anything about it? "
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You seem like you're in the know."
@@color:Red;Charyss@@: "Huh. Alirght, well, back in the day the good ol' days before this whole mortal realm nonsense started, everything existed as unmanifest poential. Then one day, and I used the term 'day' loosely since there weren't any planets or stars at the time. And I use the term 'time'loosely because, well...you get it. Anyway, one day Tenebrarius bumped into a...uhh, hmm. And she...uhh, puked? Made love to? Discharged? It's actually kind of hard to explain this to a mortal. You don't have any basis of comparison."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Who's Tenebrarius?"
@@color:Red;Charyss@@: "I think you people call her the Goddess of Primal Darkness. It's...not a terrible translation of her name, but it kind of misses the point. When it's dark, you can't see. But this isn't about not being able to see. It's about ''what'' you can't see."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What is it we can't see?"
@@color:Red;Charyss@@: "Everything. Atleast, before she puked. After she did, you still couldn't see most things. But you could see some things. And there was a ''you'' to see stuff."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sounds like you're talking about the creation of the world."
@@color:Red;Charyss@@: "Ehh, kind of."
<!-- Unlocks -->\
<<elseif _CurrentQuestion is 8>>\
<<set $PC[$CC][$PCSmithDemonChat][8] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What does any of that have to do with the tower?"
@@color:Red;Charyss@@: "Oh, right. The tower is the...channel? That she puked/gave birth through. Birth canal? Yeah, that's a good way of putting it. Sort of. Anyway, because of that, the tower happens to be an easy away to reach...well, anything that doesn't exist, I guess. For example, I don't have a beer in my hand rigth now. if I climbed the tower, I could, uhh...bring back 'me with a beer in my hand' to the world, and ''POOF!'' I'd have a beer in my hand."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mean it grants wishes?"
@@color:Red;Charyss@@: "Ehh, no not exactly. But sort of, yeah. I mean, granting wishes is a thing that it can do, yeah. But anything you wouldn't wish for is possible too, so long as it doesn't already materially exist."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How do you make sure to get a wish you want granted instead of a wish you don't want granted?"
@@color:Red;Charyss@@: "Beats me. I'm just a demon in desperate need of a beer."
@@color:LightGreen;Adventurer@@: "If you let me go I'll buy you all the beer in town!"
@@color:Red;Charyss@@: "Quiet!" she kicks the cage.
<<elseif _CurrentQuestion is 9>>\
<<set $PC[$CC][$PCSmithDemonChat][9] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's hell like?"
@@color:Red;Charyss@@: "Which part?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hell has different parts?"
@@color:Red;Charyss@@: "Oh right," she rolls her eyes. "All of hell is just fire and lava and tortued souls gnashing their teeth. Seriously, what's with you people?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sorry for assuming."
@@color:Red;Charyss@@: "Seriously, it's only like 98% of it's like that. The rest of it's actually pretty nice. A little overpopulated though. You have no idea what it's like to listen to some dead guy constantly whining about 'torture' this and 'eternal damnation' that. So everybody wants a place in the city where none of that happens, which drives rent through the ceiling."
<<elseif _CurrentQuestion is 10>>\
<<set $PC[$CC][$PCSmithDemonChat][10] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So, how much?"
<<set _PCaddress to "good girl">>\
<<if $PC[$CC][$PCsex] is "male">><<set _PCaddress to "proper cumslut">><<endif>>\
@@color:Red;Charyss@@: "How much for what? You mean <<print either("how much to let you suck my dick? That's free. Although if you want to pay me for it, I'll allow it.","how much to let you fondle my tits? Ehh, tell you want...you suck my duck and swallow like a " + _PCaddress + " and I'll toss in some titty fondling for free.","how much for your soul? Doesn't look like it's worth much to me, but I'm feeling generous so if you you suck my dick I'll take it off your hands so you don't have to deal with it anymore.")>>"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, I meant for that adventurer you're selling. How much?"
@@color:Red;Charyss@@: "You mean you actually want to buy <<print _AdvenHimHer>>? Wow, ok. That's great! But, uhhh...hmm. Ok look, I'm gonna be honest here. I hadn't actually thought that far ahead. Wasn't really expecting to find a buyer out here in the middle of the forest."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Really? Then why are you even here? This isn't all just some tease to get <<print _AdvenHisHer>> hopes up so you can stomp on them, is it?"
@@color:LightGreen;Adventurer@@: "Oh, please no."
@@color:Red;Charyss@@: "Look, of course I want to sell <<print _AdvenHimHer>>. And it'd be super convient for me to pawn <<print _AdvenHimHer>> off onto you so I don't have to haul <<print _AdvenHimHer>> all the way down to the slave markets down south. But demons aren't exactly known for long-term planning, alright? So I just haven't come up with a specific number I'm happy with yet. So how about make me an offer, and if I like what I hear maybe two of the three of us can walk away happy."
<!-- Unlocks -->\
<<set $PC[$CC][$PCSmithDemonChat][11] to 1>><!-- Slave markets? -->\
<<if $PC[$CC][$PCSmithDemonChat][12] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][12] to 1>><!-- make an offer -->\
<<endif>>\
<<elseif _CurrentQuestion is 11>>\
<<set $PC[$CC][$PCSmithDemonChat][11] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's this about a slave market?"
@@color:Red;Charyss@@: "Yeah, Talven down south has a whole big setup for it. Gladiator pit and everything. Too hot for wheat to grow down there, so no beer, but they make a pretty decent drink out of the cactus. They don't take too kindly to demons though. Or much of anything that isn't completely human, really."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How do you manage it?"
@@color:Red;Charyss@@: "Uhh..." she thinks. "Hmm. Now that you mention it, yeah that could be a problem. All the more reason for you to buy cock gobbler here and save me the trouble, right?"
<!-- unlocks -->\
<<if $PC[$CC][$PCSmithDemonChat][12] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][12] to 1>><!-- make an offer -->\
<<endif>>\
<<elseif _CurrentQuestion is 12>>\
<<set _ExitLinks to "questions">>\
<<set $PC[$CC][$PCSmithDemonChat][12] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. I'd like to buy your adventurer."
@@color:Red;Charyss@@: "Woo!" she cheers. "How much?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Well, how much do you want?"
@@color:Red;Charyss@@: "Are you serious?" her eyes boggle. "I want infinity gold plus a blowjob! Also I want to be ruler of hell and for all humans to worship me. Also I want a pony. With a big dick. No, wait...two dicks! Definitely a pony with two dicks. And they should each be like three feet long, with a double pair of basketball-sized testicles all mounted rotary-cannon style so they can rapid-fire ejaculate half a dozen gallons of tasty horse spunk one after another all in one go. Wow, that would be awesome. Payable immediately, and cock muncher here's all yours."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Let me rephrase the question: how many gold coins can I give you that would be enough for you to give me that adventurer right now?"
@@color:Red;Charyss@@: "Oh," she seems disappointed. "Gotta admit, anything you could realistically pay would be a huge letdown after asking me what I want. I don't know, how about make me an offer and if I don't like it, I'll bite your dick off. Or I guess if you don't have enough money you could come back later. I'm not in a big hurry to go anywhere when I have dick munch here to keep my balls dry."
@@color:LightGreen;Adventurer@@: *whimpers*
<!-- unlocks -->\
<<set $PC[$CC][$PCSmithDemonChat][13] to 1>><!-- Offer 100 gold -->\
<<set $PC[$CC][$PCSmithDemonChat][14] to 1>><!-- Offer 300 gold -->\
<<set $PC[$CC][$PCSmithDemonChat][15] to 1>><!-- Offer 500 gold -->\
<<elseif _CurrentQuestion is 13>>\
<<set $PC[$CC][$PCSmithDemonChat][13] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Would you take 100 gold?"
She frowns and kicks the cage.
<<set _PCheshe to "She">>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set _PCheshe to "He">>\
<<endif>>\
@@color:Red;Charyss@@: "Do you hear that, slave?" she shouts. "<<print _PCheshe>> says you're only worth 100 gold! Why did I even waste my time with you!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "It's not a bad deal," you point out. "Beer is only what, 8-10 gold or so? That's ten or twelve beers worth."
@@color:Red;Charyss@@: "Math isn't something I've great at," she admits. "But even if you're right, that's still a lot less than I was hoping for."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Well, you asked me to make an offer, so made an offer. If you're going to insist on more, you should have just said so up front. You might have got what you asked for."
@@color:Red;Charyss@@: "Maybe," she shrugs. "But I was kinda hoping you'd assume I'd carry through on that dick biting threat if you only offered 100, and that you'd offer me something crazy like 500 instead."
<<if $PC[$CC][$PCcoins] < 500>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I don't even have that much. Will you take the 100?"
@@color:Red;Charyss@@: "Nahh, I'm not in a hurry. If you're poor, I'll just wait for a better buyer."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I didn't though. So have we got a deal?"
@@color:Red;Charyss@@: "Nahh, if that's all <<print _AdvenHeShe>>'s worth to you, I'll wait for a better buyer."
<<endif>>\
<<elseif _CurrentQuestion is 14>>\
<<if $PC[$CC][$PCcoins] < 300>>\
<<set _ExitLinks to "force combat">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How does 300 gold sound?"
@@color:Red;Charyss@@: "Ehh," she shrugs. "It's not a bad offer, but it's less than I was hoping for."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh good," you mumble, digging through your coinpurse. "Looks like I don't even have that much anyway."
@@color:Red;Charyss@@: "...then why did you..." she trails off in annoyance. "You know what? I think I'm going to kill you now."
<<else>>\
<<set _ExitLinks to "blind repeat">>\
<<set $WORLD.SmithQuests[1] to "success">>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 300>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How does 300 gold sound?"
She thinks it over, then nods.
@@color:Red;Charyss@@: "Yeah, I guess that's a fair price for used goods."
You hand over the gold. The omnibus lifts the cage off the groudn and casually tosses it aside. You frown and turn to the adventurer.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wait, if it was that easy to get out, why didn't you just run?
@@color:Red;Charyss@@: "It's more fun if they try to escape. That way I get to punish them."
The adventurer rubs _AdvenHisHer ass and looks away in shame.
@@color:Red;Charyss@@: "Anyway, enjoy your new master, slave," she then turns to you. "And maybe I'll see you around again sometime."
<<endif>>\
<<elseif _CurrentQuestion is 15>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How about 500 gold?" you offer.
<<if $PC[$CC][$PCcoins] < 500>>\
<<set _ExitLinks to "force combat">>\
@@color:Red;Charyss@@: "500?" she grins. "You've got a deal!"
You reach into your coin purse, but quickly realize you don't have that much.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wait, sorry. Turns out I don't have 500."
@@color:Red;Charyss@@: "Then why in the blazes did you offer that much?" she seems annoyed. "Now I'll have to kill you. Not that I have anything wrong with killing people. I rather enjoy it, actually. But I'm really in more of a 'get drunk then kill some innocent bystanders and rifle through their pockets' mood than a 'kill somebody then rifle through a corpses pockets to see if there's enough money to get drunk on' mood. Sometimes the order you do these things in makes all the difference."
<<if $PC[$CC][$PCcoins] > 99>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wait!" you hand her your coinpurse. "I do have <<print $PC[$CC][$PCcoins]>>! Would you take that instead?"
@@color:Red;Charyss@@: "Absolutely I'll take that," she cracks her knuckles. "Just give me a minute to kill you first before I rifle through your pockets for it."
<<else>>\
<!-- no action required? -->\
<<endif>>\
<<else>>\
<<set _ExitLinks to "blind repeat">>\
<<set $WORLD.SmithQuests[1] to "success">>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 500>>\
@@color:Red;Charyss@@: "Woo, score!" she cheers. "Do you hear that, slave? You've got a new master!"
You count out the coins and hand them over to the omnibus, who lifts the cage off the ground and tosses it aside. Apparently it was simply resting on the ground. You're a bit perplexed at that, but the omnibus is already rushing off in the wrong direction if she wants to go back to town, and you decide to simply let her go rather than ask questions.
<<endif>>\
<<elseif _CurrentQuestion is 100>>\
<<set $WORLD.SmithQuests[1] to 98>>\
<<set _ExitLinks to "force combat">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I have faith in you," you smile convincingly. "You're a better person than that."
She blinks a couple times.
@@color:Red;Charyss@@: "Wait, you're serious?" she starts laughing. "Oh my devil, that's hilarious! I think I'm going to eat you now. And then wash you down with your own beer."
<<elseif _CurrentQuestion is 101>>\
<<set $WORLD.SmithQuests[1] to 98>>\
<<if $PC[$CC][$PCint] < 15>>\
<<set _ExitLinks to "force combat">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Because I'm a tactical genius," you tap your head. "And there's no way you could outsmart me."
@@color:Red;Charyss@@: "Hmm, now that you point it out," stares at your head where you've tapped it, "that beer would taste a lot better if I drink it out of your skull."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You're not getting my skull without a fight."
@@color:Red;Charyss@@: "Your terms are acceptable."
<<else>>\
<<set _ExitLinks to "questions">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Look, you want beer, right?"
@@color:Red;Charyss@@: "Yes?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And if you sell that adventurer, how much beer could you buy?"
@@color:Red;Charyss@@: "Uhh," she starts counting on her fingers. "A lot?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. Now suppose you fight me, and you win. How much beer will you get to drink?"
@@color:Red;Charyss@@: "So long as I sell this sex slave, I'll still get to drink all the same beer as if I don't fight you," she points out. "But I'll get to drink all that beer later, //and// I'll get to drink that beer you're holding while I'm waiting for a buyer to show up. A lot of beer plus one, is more than just a lot of beer."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sure," you nod amicably. "But it's not a sure thing. Suppose I beat you in the fight, and take that adventurer with me. Then you won't get any beer at all. True, we dont'know who would win the fight. You might win and get this one extra beer. But you might lose, and miss out completely on that 'lot of beer' you'll have the moment you sell that adventurer. Why take the chance of losing everything to at best maybe gain only a single beer? It's a bad gamble."
@@color:Red;Charyss@@: "Hmm," she frowns. "Point taken. So...wanna buy <<print _AdvenHimHer>>?"
<<if $PC[$CC][$PCSmithDemonChat][10] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][10] to 1>><!-- How much? -->\
<<endif>>\
<<endif>>\
<<elseif _CurrentQuestion is 102>>\
<<set $WORLD.SmithQuests[1] to 98>>\
<<if $PC[$CC][$PCstr] < 15>>\
<<set _ExitLinks to "force combat">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Because I'm incredibly strong," you flex your biceps at her. "And there's no way you could overpower me."
The omnibus looks at your flex, and her cock visibly hardens.
@@color:Red;Charyss@@: "Let's test that, shall we?" she strokes herself off. "Winner gets to fuck the loser. The best part of this is that it doesn't matter whether I win or you lose. Either way, I win."
<<else>>\
<<set _ExitLinks to "questions">>\
You glance over the omnibus with an air of casual indifference.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Go and and try if you want," you dismiss. "But I don't think you can beat me."
@@color:Red;Charyss@@: "I think you're bluffing," she frowns uncertainly. "But I also think a singlebeer isn't worth taking the chance."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Smart choice."
@@color:Red;Charyss@@: "Of course," she continues. "You could make this all of this a whole lot simpler for everybody if you'd buy this cock-gobbler off me yourself."
<<if $PC[$CC][$PCSmithDemonChat][10] is 0>>\
<<set $PC[$CC][$PCSmithDemonChat][10] to 1>><!-- How much? -->\
<<endif>>\
<<endif>>\
<<elseif _CurrentQuestion is 103>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What if instead of one beer," you start pulling out more bottles. "What if I offered you _BeerQTY beers?"
<<set $PC[$CC][$PCinven][_BeerItemPTR] to [0,0,0,0,0]>>\
<<if _BeerQTY > random(1,9)>>\
<<set _ExitLinks to "blind repeat">>\
<<set $WORLD.SmithQuests[1] to "success">>\
@@color:Red;Charyss@@: "Where in the nine hells did you get that much beer?" she marvels at your offering.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you really care?"
@@color:Red;Charyss@@: "You know what?" she blinks. "You're absolutely right. I don't. Gimmme!"
You start handling bottles over to her, which she immediately starts guzzling.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So...about that adventurer."
@@color:Red;Charyss@@: "Hmm? Oh, yeah...here you go. No refunds."
With one hand she casually lifts the cage off the ground and tosses it aside. Apparently it wasn't anchored to anything.
<<else>>\
<<set $WORLD.SmithQuests[1] to 98>>\
@@color:Red;Charyss@@: "I'm not saying it's a bad deal," she frowns, clearly conflicted. Then she chugs a beer, and instantly cheers up. "But is that really the best you can do? I think you can do better."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "This would be a lot simpler if you'd simply tell me what you want so I could get it for you."
@@color:Red;Charyss@@: "We already tried that, but I still don't see a rotary cannon dick pony anywhere."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Point taken."
@@color:Red;Charyss@@: "I like what you're doing with this bringing me beer thing though," she opens another bottle. "How about you keep doing it, and I'll let you have the adventurer."
You can't but notice that she intends to keep everything you've offered up so far.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How much is enough? I don't want to just keep giving you beer over and over and never get what I want out of it."
@@color:Red;Charyss@@: "Wait, you'd do that?" she looks at you incredulously, then turns suspicious. "Ordinarily I'd take that deal in a heartbeat, but it sounds a little too good to be true. So how about this: bring me //ten// more, and you can have cock gobbler here. Probably."
<<endif>>\
<<endif>>\
\
\
<<elseif $WORLD.SmithQuests[1] is "success">>\
<<if $WORLD.CombatInterrupt is "defeated smith omnibus">>\
<<replace "#eventtext">>\
<<set _ExitLinks to "none">>
<<include "SmithSuccess">>\
<</replace>>\
<<set $WORLD.CombatInterrupt to "">>\
<<else>>\
<<set _ExitLinks to "none">>
<<include "SmithSuccess">>\
<<endif>>\
<<elseif $WORLD.SmithQuests[1] is 98>>\
<<set $WORLD.datapasser to "">>\
<<set _ExitLinks to "none">>
<<RightPic _RightPic>>\
<<replace "#eventtext">>\
@@color:LightGreen;Chatting with a demon in the forest@@
<hr>\
@@color:Red;Charyss@@: <<print either("Hello again.","Hey.")>> <<print ("What bring you here again?","Couldn't stay away, hmm?","You just here to check out the merchandise, or are you buying?","Wanna buy an adventurer?")>>
<hr>\
@@color:Gold;Options@@
<span id="KeypT">\
<<link "t) Talk" "EventSmith">>
<<AdvanceTime 5>>
<<set $WORLD.datapasser to 0>>
<<set $WORLD.SmithQuests[1] to "demontalk">>
<<set $Charyss to 1>>
<</link>>\
</span>
<span id="KeypF">\
<<link "f) Fight" "Combat">>
<<set $DisableMenu to true>>\
<<set $WORLD.CombatInterrupt to "smith quest omnibus", 1>>\
<<set $WORLD.SmithQuests[1] to 98>>
<<set $ForceMon to ["Charyss","herm"]>>
<<GetMon $ForceMon>>\
<<AdvanceTime 5>>
<</link>>\
</span>\
<</replace>>\
<<elseif $WORLD.SmithQuests[1] is 99>>\
<<replace "#eventtext">>\
The cage is now empty.
<</replace>>\
<<else>>\
<<if $DebugMode is true>>\
@@color:Yellow;Warning@@ Smith event state is <<print $WORLD.SmithQuests[1]>>. If that's one of the of 'who has it' outcomes, that's probably ok. This check mostly exists to prevent unwanted dead ends.
<<endif>>\
<<endif>>\
\
<<if _ExitLinks is "force combat">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypF">\
<<link "f) Fight" "Combat">>
<<set $DisableMenu to true>>\
<<set $WORLD.CombatInterrupt to "smith quest omnibus", 1>>\
<<set $ForceMon to ["Charyss","herm"]>>
<<GetMon $ForceMon>>\
<<set $WORLD.SmithQuests[1] to 98>>
<<AdvanceTime 5>>
<</link>>\
</span>\
<<elseif _ExitLinks is "none">>\
<<elseif _ExitLinks is "blind repeat">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) continue" "EventSmith">>
<</link>>\
</span>\
<<elseif _ExitLinks is "return to forest, clear event">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "Forest">>
<<set $WORLD.smith to 4>>
<<AdvanceTime 5>>
<</link>>\
</span>\
<<elseif _ExitLinks is "questions">>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<!-- this is here to handle varying beer durign repeat visits -->\
<<if ($PC[$CC][$PCSmithDemonChat][12] is 2) and (_BeerQTY > 0)>>\
<<set $PC[$CC][$PCSmithDemonChat][4] to 1>><!-- Offer beer -->\
<<endif>>\
\
<<for _i to 0; _i < $PC[$CC][$PCSmithDemonChat].length; _i++>>\
<<if $PC[$CC][$PCSmithDemonChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "start">>\
<<set _QuestionPool[1] to "What are you doing out here in the forest?">>\
<<set _QuestionPool[2] to "Why are you trying to sell an adventurer?">>\
<<set _QuestionPool[3] to "What's an omnibus?">>\
<<set _QuestionPool[4] to "Offer her some beer">>\
<<set _QuestionPool[5] to "Slavery is wrong!">>\
<<set _QuestionPool[6] to "Do you know the Demon Queen of Spiders?">>\
<<set _QuestionPool[7] to "Ask about the tower">>\
<<set _QuestionPool[8] to "What does any of that have to do with the tower?">>\
<<set _QuestionPool[9] to "Ask about hell">>\
<<set _QuestionPool[10] to "So, how much?">>\
<<set _QuestionPool[11] to "What's this about a slave market?">>\
<<set _QuestionPool[12] to "I'm ready to buy the adventurer">>\
<<set _QuestionPool[13] to "Offer 100 gold for the adventurer">>\
<<set _QuestionPool[14] to "Offer 300 gold for the adventurer">>\
<<set _QuestionPool[15] to "Offer 500 gold for the adventurer">>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Leave" "Forest">>
<<set $WORLD.SmithQuests[1] to 98>>\
<<AdvanceTime 5>>
<</link>>
</span>\
<span id="KeypF">\
<<link "f) Fight!" "Combat">>
<<set $DisableMenu to true>>\
<<set $WORLD.CombatInterrupt to "smith quest omnibus", 1>>\
<<set $ForceMon to ["Charyss","herm"]>>
<<GetMon $ForceMon>>\
<<set $WORLD.SmithQuests[1] to 98>>
<<AdvanceTime 5>>
<</link>>
</span>\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix","KeypSeven","KeypEight"]>>\
<<set _KeyChars to ["1) ","2) ","3) ","4) ","5) ","6) ","7) ","8) "]>>\
\
<hr>\
<<if _AskTheseQuestions.length > 0>>\
@@color:Gold;Conversation@@
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "EventSmith">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<endif>>\
<<else>>\
@@color:Red;Error:@@ unrecognized exitlinks request: _ExitLinks
<span id="KeypSpace">\
<<link "space) Continue" "Forest">>
<<set $WORLD.SmithQuests[1] to 98>>\
<<AdvanceTime 5>>
<</link>>\
</span>\
<<endif>>\
<<if $DebugMode is true>>\
Debug: <<print $PC[$CC][$PCSmithDemonChat]>>
<<for _i to 0; _i < $PC[$CC][$PCSmithDemonChat].length; _i++>>\
<<print _i>>) <<print $PC[$CC][$PCSmithDemonChat][_i]>><br>\
<</for>>
<<endif>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _trapmaster to setup.PlayerHasPerk("Trapmaster")>>\
<<set _trapdiff to _pz>>\
<<set _RoomPTR to passage()>>\
<<set _ExitLink to "continue">>\
<<set $AllowNav to false>>\
\
<!-- assign new trap if none present -->\
<<if $Dungeon[_pz][_px][_py][12] is 0>>\
<<if _pz is 1>>\
<<set $Dungeon[_pz][_px][_py][12] to random(1,2)>>\
<<elseif $Dungeon[_pz-1][_px][_py][11] is 0>>\
<<set $Dungeon[_pz][_px][_py][12] to random(1,3)>>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][12] to random(1,2)>>\
<<endif>>
<<endif>>\
\
<<set _whichtrap to $Dungeon[_pz][_px][_py][12]>>\
\
<<set _AvoidChance to ($PC[$CC][$PCdex] - 13) - _pz>>\
<<set _RogueMod to 0>>
<<set _RogueAUTO to false>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "rogue">>\
<<set _RogueMod to 3>>\
<<set _AvoidChance to _AvoidChance + $PC[$CC][$PClevel]>>\
<<if $PC[$CC][$PClevel] > 6>>\
<<set _RogueAUTO to true>>\
<<endif>>\
<<endif>>\
<<set _PZafterRogue to _pz - _RogueMod>>\
\
<<replace "#eventtext">>\
<<if _whichtrap is "pitfall landing">>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
<<set $Dungeon[_pz][_px][_py][12] to 105>>\
<!-- duplicate rogue assignment was here? -->
<<set _TminDam to 5 * (1 + _pz - _RogueMod)>>\
<<set _TmaxDam to 10 * (1 + _pz - _RogueMod)>>\
<<set _TrapDamage to random(_TminDam, _TmaxDam)>>\
<<if _RogueAUTO is true>>\
@@color:Aqua;Rogue auto success!@@
You deftly hit the ground in a roll and take no damage.
<<else>>\
@@color:Red;Hard landing@@
You land on the floor below, taking @@color:Yellow;<<print _TrapDamage>> damage@@. \
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set $AllowNav to false>>\
Unfortunately, that's more health than you have. You die.
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Falling into a pit trap">>
<</link>>\
</span>\
<<endif>>\
<<endif>>\
<<elseif _whichtrap is 1>>\
<<set $AllowNav to false>>\
<<set $Dungeon[_pz][_px][_py][12] to 101>>\
<<if _RogueAUTO is true>>\
@@color:Aqua;Rogue level 7 bonus:@@ Auto success!
As a skilled rogue, you scoff at the obvious pressure plate in the floor and effortlessly disarm it.
<<TrapAchieveTester "avoid">>\
<<elseif _AvoidChance > 0>>\
@@color:LightGreen;Trap disarmed!@@
While walking through this room, notice a suspicious pressure plate. Standing a safe distance away, you toss a loose rock onto it which causes a crossbow bolt to fire harmlessly against a wall.
<<TrapAchieveTester "avoid">>\
<<elseif (_RogueMod is 3) and (_pz < 4)>>\
@@color:Yellow;Trap activated!@@
You carelessly step on a trigger plate which fires a crossbow bolt at your head. However, as a rogue you're experienced with these matters, and instantly duck underneath it.
<<TrapAchieveTester "trigger">>\
<<else>>\
@@color:Red;Trap activated!@@
While walking through this room, you step on a pressure plate that triggers a bolt to fly at you from a hidden crossbow.
<<set _TrapDamage to random(_PZafterRogue, _PZafterRogue * 5)>>\
<<if _trapmaster is true>>\
<<set _Trapdamage to Math.trunc(_TrapDamage / 2)>>\
<<if _Trapdamage < 1>>\
<<set _TrapDamage to 1>>\
<<endif>>\
Your @@color:LightGreen;Trapmaster perk@@ reduces the damage to only @@color:Red;<<print _TrapDamage>>@@.
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<TrapAchieveTester "trigger">>\
<<else>>\
@@color:Red;You are struck for _TrapDamage damage!@@
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<TrapAchieveTester "trigger">>\
<<endif>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _ExitLink to "none">>\
Unfortunately, that's more health than you have. You die.
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Crossbow bolt trap">>
<</link>>\
</span>\
<<endif>>\
<<endif>>\
<<elseif _whichtrap is 2>>\
<<if _RogueAUTO is true>>\
<<set $Dungeon[_pz][_px][_py][12] to 120>>\
@@color:Aqua;Rogue level 7 bonus:@@ Auto success!
As a skilled rogue, you roll your eyes an at obvious tripwire and effortlessly step over it.
<<TrapAchieveTester "avoid">>\
<<elseif _AvoidChance > 0>>\
<<set $Dungeon[_pz][_px][_py][12] to 120>>\
@@color:LightGreen;Trap avoided!@@
You notice a small tripwire at the entrance to this room. Carefully stepping over it, you make a point to avoid it in the future.
<<TrapAchieveTester "avoid">>\
<<elseif (_RogueMod is 3) and (_pz < 4)>>\
<<set $Dungeon[_pz][_px][_py][12] to 121>>\
@@color:Yellow;Tripwire trap activated!@@
You fail to notice a tripwire and carelessly trip over it. Your rogue instincts kick in however, and you deftly roll out of the fall, avoiding a large rock falling from the ceiling in the process.
<<TrapAchieveTester "trigger">>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][12] to 121>>\
@@color:Yellow;Tripwire trap activated!@@
<<if random(1,2) is 1>>\
You trip over a razor-thin wire which shreds into you and causes you to trip and fall on your face \
<<else>>\
You trip over a wire which triggers a large rock to fall from a recess onto your head. \
<<endif>>\
<<set _TrapDamage to random(_PZafterRogue, _PZafterRogue * 5)>>\
<<if _trapmaster is true>>\
<<set _Trapdamage to Math.trunc(_TrapDamage / 2)>>\
<<if _Trapdamage < 1>>\
<<set _TrapDamage to 1>>\
<<endif>>\
Your @@color:LightGreen;Trapmaster perk@@ reduces the damage to only @@color:Red;<<print _TrapDamage>>@@.
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<TrapAchieveTester "trigger">>\
<<else>>\
@@color:Red;You are struck for _TrapDamage damage!@@
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<TrapAchieveTester "trigger">>\
<<endif>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _ExitLink to "none">>\
Unfortunately, that's more health than you have. You die.
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Crossbow bolt trap">>
<</link>>\
</span>\
<<endif>>\
<<endif>>\
<<elseif _whichtrap is 3>>\
<<if _RogueAUTO is true>>\
@@color:Aqua;Rogue level 7 bonus:@@ Auto success!
As a skilled rogue, your gaze is immediately drawn to a weakened section of the floor.
<<TrapAchieveTester "avoid">>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Tiptoe around it" _RoomPTR>>
<<set $Dungeon[_pz][_px][_py][8] to 103>>\
<<set $Dungeon[_pz][_px][_py][11] to 0>>\
<</link>>
</span>\
<<set _ExitLink to "none">>\
<span id="KeypTwo">\
<<link "2) Stomp up and down on it" _RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 104>>\
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<if $Dungeon[_pz][_px][_py][11] is 0>>\
<<set $Dungeon[_pz][_px][_py][11] to "Trap">>\
<<set $Dungeon[_pz][_px][_py][12] to "pitfall landing">>\
<<else>>\
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>\
<<set $Dungeon[_pz][_px][_py][12] to 999>>\
<<endif>>\
<</link>>\
</span>\
<<elseif _AvoidChance > 0>>\
@@color:LightGreen;Trap avoided!@@
You notice the peculiar discoloration of a section of tiles that you suspect indicates they were added later. Looking more closely you notice that the entire floor dips towards the middle of the discoloration, as if nothing solid supports it from beneath.
<<TrapAchieveTester "avoid">>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Tiptoe around it" _RoomPTR>>
<<set $Dungeon[_pz][_px][_py][8] to 103>>\
<<set $Dungeon[_pz][_px][_py][11] to 0>>\
<</link>>
</span>\
<<set _ExitLink to "none">>\
<span id="KeypTwo">\
<<link "2) Stomp up and down on it" _RoomPTR>>
<<set $Dungeon[_pz][_px][_py][12] to 104>>\
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<if $Dungeon[_pz][_px][_py][11] is 0>>\
<<set $Dungeon[_pz][_px][_py][11] to "Trap">>\
<<set $Dungeon[_pz][_px][_py][12] to "pitfall landing">>\
<<else>>\
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>\
<<set $Dungeon[_pz][_px][_py][12] to 999>>\
<<endif>>\
<</link>>\
</span>\
<<elseif (_RogueMod is 3) and (_pz < 4)>>\
<<set $Dungeon[_pz][_px][_py][12] to 104>>\
@@color:Yellow;Trap activated!@@
You carelessly step on a weak section of the floor which collapses from under your feet. Your rogue skills are sharp, however, and you instantly twist around to grab a still-intact section fo floor behind you and crawl back up.
<<TrapAchieveTester "trigger">>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][12] to 104>>\
@@color:Red;Trap activated!@@
You carelessly step on a weak section of the floor which collapses from under your feet, sending you tumbling to the floor below.
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<if $Dungeon[_pz][_px][_py][11] is 0>>\
<<set $Dungeon[_pz][_px][_py][11] to "Trap">>\
<<set $Dungeon[_pz][_px][_py][12] to "pitfall landing">>\
<<else>>\
<<set _ExitLink to "continue">>\
@@color:Red;Error in pit trap@@: landing site cannot be cleared, it is a: <<print $Dungeon[_pz][_px][_py][11]>>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>\
<<set $Dungeon[_pz][_px][_py][12] to 999>>\
<<endif>>\
<<set _TrapDamage to random(_PZafterRogue, _PZafterRogue * 5)>>\
<<if _trapmaster is true>>\
<<set _Trapdamage to Math.trunc(_TrapDamage / 2)>>\
<<if _Trapdamage < 1>>\
<<set _TrapDamage to 1>>\
<<endif>>\
Your @@color:LightGreen;Trapmaster perk@@ reduces the damage to only @@color:Red;<<print _TrapDamage>>@@.
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<TrapAchieveTester "trigger">>\
<<else>>\
@@color:Red;You are struck for _TrapDamage damage!@@
<<set _TrapDamage to (_TrapDamage * -1)>>\
<<ChangeStat $PChpcur _TrapDamage>>\
<<ShowHealth>>\
<<TrapAchieveTester "trigger">>\
<<endif>>\
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _ExitLink to "none">>\
Unfortunately, that's more health than you have. You die.
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Falling into a pit trap">>
<</link>>\
</span>\
<<endif>>\
<<endif>>\
<<elseif _whichtrap is 101>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
There is a a depressed pressure plate from a crossbow trap here.\
<<elseif _whichtrap is 103>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
You tiptoe carefully around a weak section of floor.\
<<elseif _whichtrap is 104>>\
<<set _ExitLink to "none">>\
<<set $AllowNav to true>>\
@@color:Gold;Collapsed floor@@
<<set _Rope to setup.HasRope()>>\
<<if _Rope > -1>>\
A huge section of the floor has collapsed here, revealing a way down to the floor below. You have some rope with you. There's a solid-looking chunk of the floor you could probably tie it to if you wanted to get down safely.
<<else>>\
A huge section of the floor has collapsed here, revealing a way down to the floor below. Perhaps if you had some rope you could tie it to something make make a safe way down.
<<endif>>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Jump down like an idiot" _RoomPTR>>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>\
<</link>>
</span>\
<<if _Rope > -1>>\
<span id="KeypTwo">\
<<link "2) Secure a way down" _RoomPTR>>
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _Rope)>>
<<set $Dungeon[_pz][_px][_py][12] to 106>>\
<<set $Dungeon[_pz -1][_px][_py][12] to 107>>\
<</link>>\
</span>\
<<endif>>\
<<elseif _whichtrap is 105>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
@@color:Gold;Collapsed ceiling@@
The floor here is littered with rock debris and dust, and there is a clear hole in the ceiling leading to the floor above you.\
<<elseif _whichtrap is 106>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
@@color:Gold;A safe way down@@
A large section of the floor has collapsed here, but there is a secure rope leading to the next floor down.
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Climb down" _RoomPTR>>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>\
<</link>>\
</span>\
<<elseif _whichtrap is 107>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
@@color:Gold;A safe way up@@
A large section of the ceiling has collapsed here, but there is a secure rope leading to the next floor up.
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Climb up" _RoomPTR>>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>\
<</link>>\
</span>\
<<elseif _whichtrap is 120>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
There is a tripwire here which you carefully avoid.\
<<elseif _whichtrap is 121>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
There is a tripwire trap here already torn from previous activation.\
<<elseif _whichtrap is 999>>\
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
@@color:Red;(Bugged pit trap has been removed)@@\
<<else>>\
Implement trap id: _whichtrap\
<<endif>>\
\
<<if _ExitLink is "continue">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) continue" _RoomPTR>>
<</link>>\
</span>\
<<endif>>\
<</replace>>\<<replace "#eventtext">>\
<<if $PC[$CC][$PCz] > 99>>\
@@color:Gold;Stairs Up@@
This is it! The final level!
<hr>\
<span id="KeypOne">\
<<link "1) Climb to the roof" "Ascend">>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>
<</link>>\
</span>\
<<elseif $PC[$CC][$PClocation] is "forest">>\
<!-- handled by forest widget -->\
<<else>>\
@@color:Gold;Stairs Up@@
A set of stairs lead up towards harder opponents, but also towards the prize at the top.
<hr>\
<span id="KeypOne">\
<<link "1) Go up the stairs" "Dungeon64">>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>
<</link>>\
</span>\
<<endif>>\
<</replace>>\<<replace "#eventtext">>\
@@color:Gold;Stairs Down@@
<<if $PC[$CC][$PCz] > 1>>\
A set of stairs lead downward towards easier opponents, and eventually, back to town.\
<hr>\
<span id="KeypOne">\
<<link "1) Go down the stairs" "Dungeon64">>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>
<</link>>\
</span>\
<<elseif $PC[$CC][$PClocation] is "forest">>\
<!-- handled by forest widget -->\
<<elseif $PC[$CC][$PCz] is 1>>\
The exit stairs are here, leading back to town.
<hr>\
<span id="KeypOne">\
<<link "1) Leave the dungeon" "TownSquare">>
<<set $PC[$CC][$PCz] to 0>>
<<set $PC[$CC][$PClocation] to "town">>
<</link>>\
</span>\
<<else>>\
@@color:Red;Error in stairs down: pcz is <<print $PC[$CC][$PCz]>>
<<endif>>\
<</replace>>\<span id="KeypESC">\
<<link "esc) close window">>
<<unset $InvenMode>>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>> \
<<button "Toggle View">>\
<<if $WORLD.InventoryMode is 1>>
<<set $WORLD.InventoryMode to 0>>
<<else>>
<<set $WORLD.InventoryMode to 1>>
<<endif>>\
<<script>>
Dialog.setup("Inventory");
Dialog.wiki(Story.get("Inventory").processText());
Dialog.open();
<</script>>
<</button>>\
</span>\
<hr>\
<<if $WORLD.InventoryMode is 1>>\
<table><tr style="vertical-align: top;"><td>\
<span id="EquipmentGoesHere">\
<<ShowEquipment>>\
</span>\
\
<span id="inverr"><br></span>\
</td><td>\
<<set $InvenMode to "use">>\
<span id="InventoryGoesHere">\
<<ShowInventory>>\
</span>\
\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;debug@@
<<button "[add stackable item]" "Inventory">>
<<set _foo to setup.GiveItem($CC, [109,0,1,301,0])>>
<</button>>
<<button "[add non-stackable item]" "Inventory">>
<<set _foo to setup.GiveItem($CC, [300,0,0,301,0])>>
<</button>>\
<<endif>>\
</td></tr></table>\
<<else>>\
<span id="EquipmentGoesHere">\
<<ShowEquipment>>\
</span>\
\
<hr>\
<span id="inverr"><br></span>\
<hr>\
\
<<set $InvenMode to "use">>\
<span id="InventoryGoesHere">\
<<ShowInventory>>\
</span>\
\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;debug@@
<<button "[add stackable item]" "Inventory">>
<<set _foo to setup.GiveItem($CC, [109,0,1,301,0])>>
<</button>>
<<button "[add non-stackable item]" "Inventory">>
<<set _foo to setup.GiveItem($CC, [300,0,0,301,0])>>
<</button>>\
<<endif>>\
<<endif>>\<<set $DisableMenu to true>>\
<<set $GameState to "combat">>\
<<unset $NoInventoryHack>>\
<<set $WORLD.turnssincecombat to 0>>\
<<set $WORLD.dialogue to 0>>\
<<set $PC[$CC][$PCmisc].battles to $PC[$CC][$PCmisc].battles +1>>\
<<if $RCHelper is "inventory">>\
<!-- combat already started don't initialize -->\
<<else>>\
<<endif>>\
\
<<if $Mon.boss > 0>>\
<<PlayBGM "boss">>\
<<else>>\
<<PlayBGM "combat">>\
<<endif>>\
\
<<ShowActiveEffects>>\
\
<<if $DebugMode is true>>\
@@color:Red;Debug, forcemon: $ForceMon>>\
<<endif>>\
<<set _monimg to $ImgPath + $Mon.pic>>\
\
<<UpdateACandFlirts>>\
<<GetPlayerAbsorption>>\
\
<div class="columnmain">\
<span id="portal">\
<<if $Mon.ImageVer is 0>>\
<!-- old style -->\
<table>\
<tr><td><img id ="mon-avatar" @src="_monimg"></td></tr>\
<tr><td>@@color:Red;Level <<print $Mon.level>> <<print $Mon.name>>@@<br><br>$Mon.desc</td></tr>\
</table>\
<span id ="monhealth"><div id="monhpbarbkg" class="hzbarbkg"><div id="monhpnbar" class="hzbar"></div></div></span>\
<span id ="monflirt"><div id="monflirtbarbkg" class="hzbarbkg"><div id="monflirtnbar" class="hzbar"></div></div></span>\
<<else>>\
<!-- new style -->\
<table>\
<tr><td><div class="monavatar-group"><img id ="mon-avatar" @src="_monimg"></div></td>\
</tr>\
<tr>\
<td>@@color:Red;Level <<print $Mon.level>> <<print $Mon.name>>@@<br><br>$Mon.desc</td>
</tr>\
<tr><td>\
<span id ="monhealth"><div id="monhpbarbkg" class="hzbarbkg"><div id="monhpnbar" class="hzbar"></div></div></span>\
<span id ="monflirt"><div id="monflirtbarbkg" class="hzbarbkg"><div id="monflirtnbar" class="hzbar"></div></div></span>
</td></tr>\
</table>\
<<endif>>\
\
<<timed 200ms>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<run Health2($Mon.teased, 100, "monflirtnbar", true)>>\
<</timed>>\
<<if $RCHelper is "inventory" or $RCHelper is "spellbook">>\
<<set $RCHelper to "">>\
<<set _foo to $PassData[0]>>\
<<set $ComLog[0] to $ComLog[1]>>\
<<set $ComLog[1] to $ComLog[2]>>\
<<set $ComLog[2] to $ComLog[3]>>\
<<set $ComLog[3] to $ComLog[4]>>\
<<set $ComLog[4] to $ComLog[5]>>\
<<set $ComLog[5] to _foo>>\
<<else>>\
<<for _i to 0; _i < 16; _i++>>\
<<set $ComLog[_i] to "">>\
<</for>>\
<<endif>>\
<hr>\
<<if $PC[$CC][$PChpcur] < 1>>\
@@color:Yellow;You have been defeated!@@
<span id="KeypSpace">\
<<link "(press space to continue)" "DefeatSex">>
<</link>>\
</span>
<<else>>\
<<GetAttackArray>>\
<span id ="combatcontrols">\
<<set _spanarray to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix","KeypSeven","KeypEight","KepyNine"]>>\
<table width=100%><tr style="vertical-align: top;"><td>\
@@color:Gold;Melee Actions@@<br>\
<<for _LoopUniqueNameadhsgjdhas to 0; _LoopUniqueNameadhsgjdhas < $AttackArray.length; _LoopUniqueNameadhsgjdhas++>>\
<<capture _LoopUniqueNameadhsgjdhas>>\
<<set _nzero to _LoopUniqueNameadhsgjdhas +1>>\
<<set _linktext to "" + _nzero + ") " + $AttackArray[_LoopUniqueNameadhsgjdhas][2]>>\
<span @id="_spanarray[_LoopUniqueNameadhsgjdhas]">\
<<link _linktext>>\
<<set _asdf to "Keypress sending: " + $AttackArray[_LoopUniqueNameadhsgjdhas] + "<br>">><<AddToLog _asdf>>
<<CombatAttack $AttackArray[_LoopUniqueNameadhsgjdhas]>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<MonsterTurn false>>\
<</link>> <<CombatUIStatsHack $AttackArray[_LoopUniqueNameadhsgjdhas]>>
</span>\
<</capture>>\
<</for>>\
<<if $DebugMode is true>>\
<span id="KeypC">\
<<link "c) Debug insta-kill">>\
<<AddToLog "Keypress sending: 'debug kill' command<br>">>\
<<set _DKC to ["debug kill", -1, "nodesc"]>>\
<<CombatAttack _DKC>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<MonsterTurn false>>\
<</link>>
</span>\
<<endif>>\
</td><td style="vertical-align: top;">\
<<if $PC[$CC][$PCspellbook].any is true>>@@color:Gold;Spells@@<br><<endif>>\
<span id = "SpellActions">\
<<if $PC[$CC][$PCspellbook].q is "">><<else>>\
<<set _qCommand to "q) " + $PC[$CC][$PCspellbook].q>>\
<span id="KeypQ">\
<<link _qCommand>>
<<set _cf to [$PC[$CC][$PCspellbook].q,-1,"nodesc"]>>
<<set _asdf to "Keypress sending: " + _cf + "<br>">><<AddToLog _asdf>>
<<CombatAttack _cf>>
<<if $WORLD.datapasser is "portaled out of combat">>\
<<set $WORLD.datapasser to "">>\
<<else>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<if $DeathBySpellFeedback > 0>>\
<<DeathByFeedback>>\
<<else>>\
<<MonsterTurn false>>\
<<endif>>\
<<endif>>\
<</link>>
</span>\
<<endif>>\
<<if $PC[$CC][$PCspellbook].w is "">><<else>>\
<<set _wCommand to "w) " + $PC[$CC][$PCspellbook].w>>\
<span id="KeypNorth">\
<<link _wCommand>>
<<set _cf to [$PC[$CC][$PCspellbook].w,-1,"nodesc"]>>
<<CombatAttack _cf>>
<<if $WORLD.datapasser is "portaled out of combat">>\
<<set $WORLD.datapasser to "">>\
<<else>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<if $DeathBySpellFeedback > 0>>\
<<DeathByFeedback>>\
<<else>>\
<<MonsterTurn false>>\
<<endif>>\
<<endif>>\
<</link>>
</span>\
<<endif>>\
<<if $PC[$CC][$PCspellbook].e is "">><<else>>\
<<set _eCommand to "e) " + $PC[$CC][$PCspellbook].e>>\
<span id="KeypE">\
<<link _eCommand>>
<<set _cf to [$PC[$CC][$PCspellbook].e,-1,"nodesc"]>>
<<CombatAttack _cf>>
<<if $WORLD.datapasser is "portaled out of combat">>\
<<set $WORLD.datapasser to "">>\
<<else>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<if $DeathBySpellFeedback > 0>>\
<<DeathByFeedback>>\
<<else>>\
<<MonsterTurn false>>\
<<endif>>\
<<endif>>\
<</link>>
</span>\
<<endif>>\
</span>\
</td></tr></table>\
<hr>\
<span id="KeypF">\
<<link "f) Flirt">>
<<set _cf to ["flirt",-1,"nodesc"]>>
<<CombatAttack _cf>>
<<run Health2($Mon.teased, 100, "monflirtnbar", true)>>
<<MonsterTurn false>>\
<</link>> \
</span> <<set _throwaway to ["flirt","flirt","flirt"]>><<CombatUIStatsHack _throwaway>>
<<if Math.trunc($PC[$CC][$PChunger]) < 50>>\
r) too tired to run
<<else>>\
<span id ="RemoveRun"><span id="KeypR">\
<<link "r) Run">>
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] - 50>>\
<<if $PC[$CC][$PChunger] < 50>>\
<<replace "#RemoveRun">>r) too tired to run<</replace>>\
<<endif>>\
<<set _cr to ["run",-1,"nodesc"]>>
<<CombatAttack _cr>>
<</link>> \
</span>(-50 stamina)</span>
<<endif>>\
<span id="KeypV">\
<<link "v) Visualize defeat">>
<<set _cr to ["fantasize",-1,"nodesc"]>>
<<CombatAttack _cr>>
<<MonsterTurn false>>
<</link>> \
</span>\
</span>
<<endif>>\
</span>\
</div>\
\
\
\
<!-- ----------------------------------------------- -->\
<div class="columnevents">\
@@color:Gold;Combat log@@
<hr>
<span id ="combatlog15">$ComLog[15]</span>
<span id ="combatlog14">$ComLog[14]</span>
<span id ="combatlog13">$ComLog[13]</span>
<span id ="combatlog12">$ComLog[12]</span>
<span id ="combatlog11">$ComLog[11]</span>
<span id ="combatlog10">$ComLog[10]</span>
<span id ="combatlog9">$ComLog[9]</span>
<span id ="combatlog8">$ComLog[8]</span>
<span id ="combatlog7">$ComLog[7]</span>
<span id ="combatlog6">$ComLog[6]</span>
<span id ="combatlog5">$ComLog[5]</span>
<span id ="combatlog4">$ComLog[4]</span>
<span id ="combatlog3">$ComLog[3]</span>
<span id ="combatlog2">$ComLog[2]</span>
<span id ="combatlog1">$ComLog[1]</span>
<span id ="combatlog0">$ComLog[0]</span>
</div>\
<<widget "RiposteCheck">>\
<<if (setup.PtrToClass($PC[$CC][$PCclass]) is "warrior") and ($PC[$CC][$PClevel] > 6)>>\
<<set _TotalHack to $PC[$CC][$PClevel]>>\
<<set $Mon.hpcur to $Mon.hpcur - _TotalHack>>\
<<set _CombatMessage to "@@color:Aqua;(Riposte)@@ You tap " + _TheMon + " for " + _TotalHack + " damage">>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<</widget>>\
<<widget "PCWeaponAttack">>\
\
<<set _Riposte to _args[0]>>\
<<set _CombatMessage to "">>\
<<if _Riposte is "Riposte">>\
<<set _CombatMessage to "@@color:Aqua;(Riposte)@@ ">>\
<<endif>>\
\
<<set _endcombat to "skip player">>\
<<set _bp to $PC[$CC][$PCbp][_slot]>>\
<<set _item to _bp.equip>>\
<<DescribeItem _item>>\
<<set _weapname to $ItemPoke.name>>\
\
<<set _ToHit to random(1, 100) - $Mon.armor + $Mon.held + $PC[$CC][$PCtohit] + $PC[$CC][$PCmorphBONI].th + (_BestWarrior * 5) + _EnchantBonuses.Accuracy>>\
<<if _Encumbered < 0>>\
<<set _ToHit to _ToHit - _Encumbered>>\
<<endif>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _ToHit to _ToHit + 50>>\
<<endif>>\
<<if _CurrentClass is "warrior">>\
<<set _ToHit to _ToHit + ($PC[$CC][$PClevel] * 10)>>\
<<endif>>\
\
<<set _attacktype to $ItemPoke.attacktype>>\
<<set _AttackVerb to "swing">>\
<<if _attacktype is "blunt">>\
<<elseif _attacktype is "cut">>\
<<elseif _attacktype is "cleave">>\
<<set _ToHit to _ToHit + (_BestLumberjack * 5)>>\
<<elseif _attacktype is "pierce">>\
<<set _AttackVerb to either("stab","poke")>>\
<<endif>>\
\
<<if _attacktype is "shine">>\
<<set _CombatMessage to "You shine a light at " + _TheMon + ", but it has no effect">>\
<<elseif _ToHit < 1>>\
<<set _CombatMessage to _CombatMessage + "You " + _AttackVerb + " at " + _TheMon + " but miss">>\
<<else>>\
<<set _mindam to $ItemPoke.mindam>>\
<<set _maxdam to $ItemPoke.maxdam>>\
<<if (_attacktype is "cleave") and _CurrentClass is "lumberjack">>\
<<set _mindam to _mindam + $PC[$CC][$PClevel]>>\
<<set _maxdam to _maxdam + $PC[$CC][$PClevel]>>\
<<endif>>\
<<set _Damage to random(_mindam, _maxdam) + _strmod + _BestPaladin>>\
<<set _DamageReduce to 0>>\
<<for _MR to 0; _MR < $Mon.resists.length; _MR++>>\
<<if $Mon.resists[_MR][0] is _attacktype>>\
<<set _DamageReduce to Math.trunc((_DamageReduce + _Damage * $Mon.resists[_MR][1]) / 100)>>\
<<endif>>\
<</for>>\
<<if _Damage < 1>>\
<<set _absorbmessage to _hitmessage + " but " + _heshe + " absorbs the blow for no effect">>\
<<set _CombatMessage to _CombatMessage + _absorbmessage>>\
<<else>>\
<<if _DamageReduce > 0>>\
<<set _CombatMessage to _CombatMessage + "You " + _AttackVerb + " your " + _weapname + " at " + _TheMon + " for " + _Damage + "@@color:Yellow;(-" + _DamageReduce + ")@@ damage">>\
<<set _Damage to _Damage - _DamageReduce>>\
<<else>>\
<<set _CombatMessage to _CombatMessage + "You " + _AttackVerb + " your " + _weapname + " at " + _TheMon + " for " + _Damage + " damage">>\
<<endif>>\
<<set $Mon.hpcur to $Mon.hpcur - _Damage>>\
<<if _Damage > 19>>\
<<AwardAchievement "Warrior">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<</widget>>\
<<widget "CombatAttack">>\
<<set $Mon.CombatRound to $Mon.CombatRound +1>>\
<<set _AllowPartyActions to true>>\
<<set _ArrayReceived to $args[0]>>\
<<set _a to "CombatAttack received: " + _ArrayReceived + "<br>">><<AddToLog _a>>\
\
<<set _attacktype to _ArrayReceived[0]>>\
<<set _slot to _ArrayReceived[1]>>\
<<set _strmod to $PC[$CC][$PCstr] -10>>\
<<set _mindam to 1>>\
<<set _maxdam to 2>>\
<<set _Encumbered to setup.EncumberedPenalty()>>\
<<if setup.TypeOf(_Encumbered) is "number">>\
<<else>>\
<<script>>alert("Error: encumbered is not a number);<</script>>\
<<set _Encumbered to 0>>\
<<endif>>\
<<set _th to $PC[$CC][$PCtohit]>>\
<<set _missmessage to "default miss">>\
<<set _hitmessage to "default attack">>\
<<set _absorbmessage to "default absorb">>\
<<set _endcombat to "normal">>\
<<set _heshe to "he">>\
<<if $Mon.sex is "female">>\
<<set _heshe to "she">>\
<<elseif $Mon.sex is "herm">>\
<<set _heshe to "it">>\
<<endif>>\
\
<<set _EnchantBonuses to setup.GetEnchantBonuses($CC)>>\
\
<<set _TheMon to "the " + $Mon.name + " ">>\
<<if $Mon.unique is true>>\
<<set _TheMon to $Mon.name>>\
<<else>>\
<<set _TheMon to "the " + $Mon.name>>\
<<endif>>\
\
<<set _GlobalSpellBonus to setup.AchievementHandler("Best Archmage", "HAS?", -1)>>\
<<set _BestLumberjack to setup.AchievementHandler("Best Lumberjack", "HAS?", -1)>>\
<<set _BestWarrior to setup.AchievementHandler("Best Warrior", "HAS?", -1)>>\
<<set _BestBarbarian to setup.AchievementHandler("Best Barbarian", "HAS?", -1)>>\
<<set _BestPaladin to setup.AchievementHandler("Best Paladin", "HAS?", -1)>>\
<<set _BestPriest to setup.AchievementHandler("Best Priest", "HAS?", -1)>>\
<<set _BestNinja to setup.AchievementHandler("Best Ninja", "HAS?", -1)>>\
<<if _GlobalSpellBonus > 0>><<else>><<set _GlobalSpellBonus to 0>><<endif>>\
<<if _BestLumberjack > 0>><<else>><<set _BestLumberjack to 0>><<endif>>\
<<if _BestWarrior > 0>><<else>><<set _BestWarrior to 0>><<endif>>\
<<if _BestBarbarian > 0>><<else>><<set _BestBarbarian to 0>><<endif>>\
<<if _BestPaladin > 0>><<else>><<set _BestPaladin to 0>><<endif>>\
<<if _BestPriest > 0>><<else>><<set _BestPriest to 0>><<endif>>\
<<if _BestNinja > 0>><<else>><<set _BestNinja to 0>><<endif>>\
<<set _CurrentClass to setup.PtrToClass($PC[$CC][$PCclass])>>\
\
<<if _attacktype is "body">>\
<<set _endcombat to "skip player">>\
<<set _bp to $PC[$CC][$PCbp][_slot]>>\
<<set _ToHit to random(1, 100) - $Mon.armor + $PC[$CC][$PCtohit]>>\
<<set _ToHit to _ToHit + $Mon.held + _EnchantBonuses.Accuracy + $PC[$CC][$PCmorphBONI].bodyth + (_BestBarbarian * 5) - _Encumbered>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _ToHit to _ToHit + 50>>\
<<endif>>\
<<set _AttackDesc to _bp.attackdesc>>\
<<if _ToHit > 0>>\
<<set _MinDam to _bp.mindam>>\
<<set _MaxDam to _bp.maxdam>>\
<<set _Damage to random(_MinDam, _MaxDam) + _strmod + $PC[$CC][$PCmorphBONI].bodydam>>\
<<if _CurrentClass is "barbarian">>\
<<set _Damage to _Damage + $PC[$CC][$PClevel]>>\
<<endif>>\
<<set _DamageReduce to 0>>\
<<set _AttackType to _bp.attacktype>>\
<<for _MR to 0; _MR < $Mon.resists.length; _MR++>>\
<<if $Mon.resists[_MR][0] is _AttackType>>\
<<set _DamageReduce to Math.trunc((_DamageReduce + _Damage * $Mon.resists[_MR][1]) / 100)>>\
<<endif>>\
<</for>>\
<<if _AttackType is "poison bite">>\
<<set _Damage to random(_MinDam, _MaxDam)>>\
<<set _CombatMessage to "You @@color:ForestGreen;" + _AttackDesc + " " + _TheMon + "@@">>\
<<set $Mon.poisoned to $Mon.poisoned + _Damage>>\
<<CombatLog _CombatMessage>>\
<<elseif _AttackType is "immobilize">>\
<<set _MaxHold to 3 * (_MaxDam + $PC[$CC][$PCstr])>>\
<<set _AppliedHold to random(_MinDam, _MaxDam) + $PC[$CC][$PCstr])>>\
<<if $Mon.held gte _MaxHold>>\
<<set _CombatMessage to "You're already holding onto " + _TheMon + " as tightly as you can">>\
<<elseif $Mon.held is 0>>\
<<set $Mon.held to $Mon.held + _Damage>>\
<<set _CombatMessage to "You @@color:ForestGreen;grab onto@@ " + _TheMon + " with your pincers, reducing defense by " + _AppliedHold>>\
<<else>>\
<<set $Mon.held to $Mon.held + _Damage>>\
<<if $Mon.held gte _MaxHold>>\
<<set _Mon.held to _MaxHold>>\
<<set _CombatMessage to "You now @@color:ForestGreen;have a solid on " + _TheMon + ", reducing defense by a total of " + _Mon.held>>\
<<else>>\
<<set _CombatMessage to "You @@color:ForestGreen;squeeze " + _TheMon + " tighter, reducing defense by an additional " + _AppliedHold>>\
<<endif>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _Damage < 1>>\
<<set _AbsorbMessage to "You " + _AttackDesc + " " + _TheMon + " but " + _heshe + " aborbs the blow to no effect">>\
<<set _CombatMessage to _absorbmessage>>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<if _DamageReduce > 0>>\
<<set _CombatMessage to "You " + _AttackDesc + " " + _TheMon + " for " + _Damage + "@@color:Yellow;(-" + _DamageReduce + ")@@ damage">>\
<<set _Damage to _Damage - _DamageReduce>>\
<<else>>\
<<set _CombatMessage to "You " + _AttackDesc + " " + _TheMon + " for " + _Damage + " damage">>\
<<endif>>\
<<set $Mon.hpcur to $Mon.hpcur - _Damage>>\
<<CombatLog _CombatMessage>>\
\
<<if (_CurrentClass is "barbarian") and ($PC[$CC][$PClevel] > 6)>>\
<<set _BleedMessage to "@@color:Red;the attack draws blood@@">>\
<<CombatLog _BleedMessage>>\
<<set $Mon.bleeding to $Mon.bleeding + 1>>\
<<endif>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to "You try to " + _AttackDesc + " " + _TheMon + " but miss">>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<elseif _attacktype is "weapon">>\
<<PCWeaponAttack "No Riposte">>\
<<elseif _attacktype is "bash">>\
<<set _endcombat to "skip player">>\
<<if $Mon.stunned < 0>>\
<<set _CombatMessage to _TheMon.toUpperFirst() + " @@color:Yellow;anticipates the blow and dodges@@">>\
<<else>>\
<<set _StunChance to random(-2, 2) + $PC[$CC][$PCstr] - _Encumbered>>\
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _StunChance to _StunChance - ($PC[$CC][$PCz] * 3)>>\
<<else>>\
<<set _StunChance to _StunChance - $PC[$CC][$PCfz]>>\
<<endif>>\
<<if _StunChance gte 0>>\
<<if $Mon.name.includes("slime")>>\
<<set _CombatMessage to "You swing your shield but @@color:Yellow;the slime absorbs the blow@@">>\
<<elseif $Mon.name.includes("tentacle")>>\
<<set _CombatMessage to "You swing your shield but @@color:Yellow;the creature casually deflects it with a tentacle@@">>\
<<elseif $Mon.name.includes("Zehtalia")>>\
<<if $Mon.Powerup is 1>>\
<<set _CombatMessage to "You smash Zehtalia with your shield and @@color:Aqua;she stops screaming@@">>\
<<else>>\
<<set _CombatMessage to "You @@color:Aqua;smash Zehtalia with your shield@@">>\
<<endif>>\
<<set $Mon.Powerup to 0>>\
<<set $Mon.stunned to 1>>\
<<else>>\
<<set $Mon.Powerup to 0>>\
<<set $Mon.stunned to 1>>\
<<set _CombatMessage to "You @@color:Aqua;bash " + _TheMon + " with your shield@@, knocking " + $Mon.himher + " off balance">>\
<<endif>>\
<<else>>\
<<set _CombatMessage to "You swing your shield but @@color:Yellow;don't connect with enough force@@">>\
<<endif>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _attacktype is "symbol">>\
<<set _endcombat to "skip player">>\
<<if $Mon.SymbolEffect is "none">>\
<<set _PickOne to either(" doesn't respond."," ignores this.", " doesn't seem affected at all.")>>\
<<set _CombatMessage to "You brandish your holy symbol and pray. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 1>>\
<<if _CurrentClass is "priest">>\
<<set _CombatMessage to "You pray to the goddess. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 2>>\
<<endif>>\
<<set _throwaway to setup.ApplyEffect("praying", _PrayEffect)>>\
<<elseif $Mon.SymbolEffect is "blink">>\
<<set _PickOne to either(" looks hopeful."," prays with you that she be destroyed.")>>\
<<set _CombatMessage to "You brandish your holy symbol and pray. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 1>>\
<<if _CurrentClass is "priest">>\
<<set _CombatMessage to "You pray to the goddess. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 2>>\
<<endif>>\
<<set _throwaway to setup.ApplyEffect("praying", _PrayEffect)>>\
<<elseif $Mon.SymbolEffect is "damage">>\
<<set _PickOne to either(" snarls in anger."," jumps back as if stung")>>\
<<set _CombatMessage to "You brandish your holy symbol and pray. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 1>>\
<<if _CurrentClass is "priest">>\
<<set _CombatMessage to "You pray to the goddess. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 2>>\
<<endif>>\
<<set _throwaway to setup.ApplyEffect("praying", _PrayEffect)>>\
<<set _TD to setup.GetEffect("praying")>>\
<<if _TD > 0>>\
<<set $Mon.hpcur to $Mon.hpcur - _TD>>\
<<endif>>\
<<else>>\
<<set _PickOne to either(" looks a little annoyed."," rolls " + $Mon.hisher + " eyes at you."," looks insulted.")>>\
<<set _CombatMessage to "You brandish your holy symbol and pray. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 1>>\
<<if _CurrentClass is "priest">>\
<<set _CombatMessage to "You pray to the goddess. " + _TheMon.toUpperFirst() + _PickOne>>\
<<set _PrayEffect to 2>>\
<<endif>>\
<<set _throwaway to setup.ApplyEffect("praying", _PrayEffect)>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _attacktype is "portal">>\
<<set _ManaCost to 5 + $Mon.level>>\
<<if $PC[$CC][$PCmanacur] < _ManaCost>>\
<<set _CombatMessage to "You try to portal out, but @@color:Yellow;you're out of mana@@">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _endcombat to "skip player">>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanacur] - _ManaCost>>\
<<set $PC[$CC][$PCz] to 0>>\
<<set $PC[$CC][$PClocation] to "town">>\
<<set $WORLD.datapasser to "portaled out of combat">>\
<<script>>Dialog.close();Engine.play("TownSquare");<</script>>
<<endif>>\
<<elseif _attacktype is "dart">>\
<<set _endcombat to "skip player">>\
<<if $PC[$CC][$PCmanacur] > 0>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanacur] -1>>\
<<set _DartHitChance to 5 * ($PC[$CC][$PCint] + $PC[$CC][$PClevel] - $Mon.level)>>\
<<if random(1,100) > _DartHitChance>>\
<<set _CombatMessage to "You hurl a magic dart at " + _TheMon + " @@color:Yellow;but miss@@">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set $Mon.HitBySpells to $Mon.HitBySpells +1>>\
<<set _Damage to random(1, $PC[$CC][$PCint]) + $PC[$CC][$PClevel]>>\
<<set _CombatMessage to "You hurl a magic dart at " + _TheMon + " for @@color:Yellow;" + _Damage + " damage@@">>\
<<set $Mon.hpcur to $Mon.hpcur - _Damage>>\
<<CombatLog _CombatMessage>>\
\
<<endif>>\
<<ShowMana>>\
<<else>>\
<<set _CombatMessage to "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<elseif _attacktype is "firebolt">>\
<<set _endcombat to "skip player">>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;YOU ARE ENRAGED@@">>\
<<CombatLog _CombatMessage>>\
<<elseif $PC[$CC][$PCmanacur] > 0>>\
<<set $Mon.HitBySpells to $Mon.HitBySpells +1>>\
<<set _BaseDam to random(1,10) + _GlobalSpellBonus>>\
<<set _Damage to 0>>\
<<for _FBD to 0; _FBD < $PC[$CC][$PClevel]; _FBD++>>\
<<set _Damage to _Damage + random(1,10)>>
<</for>>\
<<set _Damage to _Damage + $PC[$CC][$PCint]>>\
<<set _DamageToPlayer to 0>>\
<<set _DamageToTarget to 0>>\
\
<<set _TempMessage to "You fling a firebolt at " + $Mon.name>>\
<<if setup.PlayerHasPerk("Black Mage") is true>>\
<<set _BMB to 1 + (($PC[$CC][$PChpmax] - $PC[$CC][$PChpcur]) / $PC[$CC][$PChpmax])>>\
<<set _Damage to Math.trunc(_Damage * _BMB)>>\
<<if _BMB > 1>>\
<<set _TempMessage to "You fling a @@color:Red;Black Mage@@ firebolt at " + $Mon.name>>\
<<endif>>\
<<endif>>\
<<set _ManaCost to 1 + Math.trunc(_Damage / 40)>>\
<<if _ManaCost > $PC[$CC][$PCmanacur]>>\
<<set _FeedbackRatio to (_ManaCost - $PC[$CC][$PCmanacur]) / _ManaCost>>
<<set _DamageToPlayer to Math.trunc(_Damage * _FeedbackRatio)>>\
<<set _DamageToTarget to _Damage - _DamageToPlayer>>\
<<set _CombatMessage to _TempMessage + " and @@color:Yellow;experience spell feedback from overexertion@@">>\
<<CombatLog _CombatMessage>>\
<<set _DamageToPlayer to _DamageToPlayer * -1>>\
<<ChangeStat $PChpcur _DamageToPlayer>>\
<<ShowHealth>>\
<<if $PC[$CC][$PChpcur] <1>>\
<<set $DeathBySpellFeedback to 1>>\
<<endif>>\
<<else>>\
<<set _DamageToPlayer to 0>>\
<<set _DamageToTarget to _Damage>>\
<<endif>>\
\
<!-- effect on target -->\
<<if $Mon.fireheal is true>>\
<<set $Mon.hpcur to $Mon.hpcur + _DamageToTarget>>\
<<if $Mon.hpcur gte $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _CombatMessage to "Your firebolt @@color:Red;heals " + _TheMon + " to full health!@@">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _CombatMessage to "Your firebolt @@color:Red;heals " + _TheMon + "@@ for " + _DamageToTarget + " damage!">>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<else>>\
<<set _DamageReduce to 0>>\
<<for _MR to 0; _MR < $Mon.resists.length; _MR++>>\
<<if $Mon.resists[_MR][0] is "fire">>\
<<set _DamageReduce to Math.trunc((_DamageReduce + _DamageToTarget * $Mon.resists[_MR][1]) / 100)>>\
<<endif>>\
<</for>>\
<<if _DamageToPlayer neq 0>>\
<!-- handled above -->\
<<elseif _DamageReduce > 0>>\
<<set _CombatMessage to "You " + _AttackDesc + " " + _TheMon + " for " + _DamageToTarget + "@@color:Yellow;(-" + _DamageReduce + ")@@ damage">>\
<<set _DamageToTarget to _DamageToTarget - _DamageReduce>>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _CombatMessage to _TempMessage + " for " + _DamageToTarget + " damage">>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<set $Mon.hpcur to $Mon.hpcur - _DamageToTarget>>\
<<endif>>\
<<set _ManaCost to _ManaCost * -1>>\
<<ChangeStat $PCmanacur _ManaCost>>\
<<ShowMana>>\
<<else>>\
<<set _CombatMessage to "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<elseif _attacktype is "heal">>\
<<set _endcombat to "skip player">>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;YOU ARE ENRAGED@@">>\
<<CombatLog _CombatMessage>>\
<<elseif $PC[$CC][$PCmanacur] > 1>>\
<<set _PriestCureSuffix to "">>\
<<set _HealEffect to $PC[$CC][$PClevel] + _BestPriest>>\
<<set _TotalHeal to 0>>\
<<if _GlobalSpellBonus > 0>>\
<<set _HealEffect to _HealEffect + _GlobalSpellBonus>>\
<<endif>>\
<<if setup.PlayerHasPerk("White Mage") is true>>\
<<set _HealEffect to _HealEffect + $PC[$CC][$PClevel]>>\
<<endif>>\
<<if (_CurrentClass is "priest")>>\
<<set _HealEffect to _HealEffect + $PC[$CC][$PClevel]>>\
<<if setup.GetEffect("poison") > 0>>\
<<set _PriestCureSuffix to " and @@color:Aqua;you have been cured of poison!@@">>\
<<PurgeOneEffect "oison">>\
<<ShowActiveEffects>>\
<<endif>>\
<<PurgeOneEffect "leed">>\
<<endif>>\
<<if ($PC[$CC][$PChpcur] + _HealEffect) gte $PC[$CC][$PChpmax]>>\
<<set _m to "You @@color:LightGreen;heal yourself to full@@" + _PriestCureSuffix>>\
<<set _TotalHeal to $PC[$CC][$PChpmax] - $PC[$CC][$PChpcur]>>\
<<else>>\
<<set _m to "You @@color:LightGreen;heal yourself@@ for " + _HealEffect + _PriestCureSuffix>>\
<<set _TotalHeal to _HealEffect>>\
<<endif>>\
<<ChangeStat $PChpcur _HealEffect>>\
<<ShowHealth>>\
<<ChangeStat $PCmanacur -2>>\
<<ShowMana>>\
<<CombatLog _m>>\
\
<<if (_CurrentClass is "priest") and ($PC[$CC][$PClevel] > 6)>>\
<<set _PartyQTY to $PC[$CC][$PCparty].length>>\
<<if _PartyQTY > 0>>\
<<for _PartyI to 0; _PartyI < _PartyQTY; _PartyI++>>\
<<set _LocalHealEffect to 0>>\
<<if $PC[$CC][$PCparty][_PartyI].hpcur < $PC[$CC][$PCparty][_PartyI].hpmax>>\
<<if ($PC[$CC][$PCparty][_PartyI].hpcur + _HealEffect) gte $PC[$CC][$PCparty][_PartyI].hpmax>>\
<<set $PC[$CC][$PCparty][_PartyI].hpcur to $PC[$CC][$PCparty][_PartyI].hpmax>>\
<<set _LocalHealEffect to $PC[$CC][$PCparty][_PartyI].hpmax 0 $PC[$CC][$PCparty][_PartyI].hpcur>>\
<<set _m to $PC[$CC][$PCparty][_PartyI].name is " is @@color:LightGreen;healed@@ for " + _LocalHealEffect>>\
<<CombatLog _m>>\
<<else>>\
<<set $PC[$CC][$PCparty][_PartyI].hpcur to $PC[$CC][$PCparty][_PartyI].hpcur + _HealFor>>\
<<set _LocalHealEffect to _HealFor>>\
<<set _m to $PC[$CC][$PCparty][_PartyI].name is " is @@color:LightGreen;healed@@ for " + _LocalHealEffect>>\
<<CombatLog _m>>\
<<endif>>\
<<endif>>\
<<set _TotalHeal to _TotalHeal + _LocalHealEffect>>\
<<if $PC[$CC][$PCparty][_PartyMemberToAttack].stance is "Down">>\
<<set $PC[$CC][$PCparty][_PartyMemberToAttack].stance to "Hide">>\
<<endif>>\
<</for>>\
<<ShowParty>>\
<<endif>>\
<<endif>>\
\
<<set $PC[$CC][$PCspellbook].totalheal to $PC[$CC][$PCspellbook].totalheal + _TotalHeal>>\
<<if $PC[$CC][$PCspellbook].totalheal > 99>>\
<<AwardAchievement "Priest">>\
<<set _ExtraMessage to "@@color:Gold;You have unlocked the priest class!@@">>\
<<CombatLog _ExtraMessage>>\
<<endif>>\
<<else>>\
<<CombatLog "You try to heal yourself, but @@color:Yellow;you're out of mana@@">>\
<<endif>>\
<<elseif _attacktype is "armor">>\
<<set _endcombat to "skip player">>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;YOU ARE ENRAGED@@">>\
<<CombatLog _CombatMessage>>\
<<elseif $PC[$CC][$PCmanacur] > 1>>\
<<ChangeStat $PCmanacur -1>>\
<<ShowMana>>\
<<if setup.GetEffect("armor") > 0>>\
<<CombatLog "You cast armor, but that spell is already active">>\
<<else>>\
<<set _Armor to ($PC[$CC][$PClevel] * 10) + _GlobalSpellBonus + $PC[$CC][$PCspellbook].armor>>\
<<set _throwaway to setup.ApplyEffect("armor", _Armor)>>\
<!-- implement update active effects on caption -->\
<<set _m to "You gain @@color:Purple;" + _Armor + " armor@@ for the rest of this battle">>\
<<CombatLog _m>>\
<<endif>>\
<<else>>\
<<set _th to -99>>\
<<CombatLog "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<endif>>\
<<elseif _attacktype is "poison">>\
<<set _endcombat to "skip player">>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;YOU ARE ENRAGED@@">>\
<<CombatLog _CombatMessage>>\
<<elseif $PC[$CC][$PCmanacur] > 1>>\
<<set $Mon.HitBySpells to $Mon.HitBySpells +1>>\
<<set _th to 1000>>\
<<set _td to 1 + _GlobalSpellBonus>>\
<<set $Mon.poisoned to $Mon.poisoned + _td>>\
<<set _m to "You @@color:ForestGreen;poison the " + $Mon.name + "@@">>\
<<CombatLog _m>>\
<<ChangeStat $PCmanacur -1>>\
<<ShowMana>>\
<<else>>\
<<set _m to "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<CombatLog _m>>\
<<endif>>\
<<elseif _attacktype is "soultrap">>\
<<set _endcombat to "skip player">>\
<<set _TargetMana to 18 + (2 * $Mon.level)>>\
<<if _TargetMana < 1>>\
<<set _TargetMana to 1>>\
<<endif>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;YOU ARE ENRAGED@@">>\
<<CombatLog _CombatMessage>>\
<<elseif $PC[$CC][$PCmanacur] < _TargetMana>>\
<<set _m to "You cast soul trap, but <<print _TheMon>> is too powerful for you. @@color:Yellow;You're drained of all mana!@@">>\
<<CombatLog _m>>\
<<set _TargetMana to _TargetMana * -1>>\
<<ChangeStat $PCmanacur _TargetMana>>\
<<ShowMana>>\
<<else>>\
<<set $Mon.HitBySpells to $Mon.HitBySpells +1>>\
<<set _throwaway to setup.ApplyEffect("soul trap", 1)>>\
<<set _TargetMana to _TargetMana * -1>>\
<<ChangeStat $PCmanacur _TargetMana>>\
<<ShowMana>>\
<<set _m to "You cast @@color:Purple;soul trap@@">>\
<<CombatLog _m>>\
<<endif>>\
<<elseif _attacktype is "run">>\
<<set _endcombat to "skip player">>\
<<set _AllowPartyActions to false>>\
<<set _Webbed to setup.GetEffect("webbed")>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;YOU CANNOT RUN WHILE ENRAGED!@@">>\
<<CombatLog _CombatMessage>>\
<<elseif _Webbed > 0>>\
<<CombatLog "The @@color:Yellow;webbing prevents you from running!@@">>\
<<MonsterTurn false>>
<<elseif ($PC[$CC][$PClocation] is "tower") and ($Dungeon[_pz][_px][_py][11] is 0)>>\
<<set _fleemess to "You try to " + either("run","flee","run away") + " but the " + $Mon.name + either(" is tenacious!"," is determined to continue the fight!"," blocks your escape!")>>\
<<CombatLog _fleemess>>\
<<MonsterTurn false>>
<<else>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _RunChance to 100>>\
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _RunChance to 55 - (_pz * 5)>>\
<<elseif $PC[$CC][$PClocation] is "forest">>\
<<set _RunChance to 105 - ($PC[$CC][$PCfz] * 5)>>\
<<set _MonsterPursuit to 0>>\
<<elseif $PC[$CC][$PClocation] is "desert">>\
<<set _RunChance to 80 - ($PC[$CC][$PCdz] * 5)>>\
<<else>>\
<!-- where are we? -->\
<<endif>>\
\
<<set _RunChance to _RunChance + $PC[$CC][$PCdex]>>\
<<if setup.PlayerHasPerk("Runner") is true>>\
<<set _RunChance to _RunChance + $PC[$CC][$PCdex]>>\
<<endif>>\
\
<<set _RunChance to _RunChance - _Encumbered>>\
\
<<if _CurrentClass is "ninja">>\
<<set _RunChance to _RunChance + 25>>\
<<endif>>\
<<if _BestNinja > 0>>\
<<set _RunChance to _RunChance + (_BestNinja * 2)>>\
<<endif>>\
\
<<set _RunChance to _RunChance * ($PC[$CC][$PChpcur] / $PC[$CC][$PChpmax])>>\
\
<<set _MonsterPursuit to 100 + $Mon.chase + $Mon.teased>>\
<<set _MonsterPursuit to _MonsterPursuit * ($Mon.hpcur / $Mon.hpmax)>>\
<<if $Mon.poisonheal is true>>\
<<set _MonsterPursuit to _MonsterPursuit + ($Mon.poisoned * 10)>>\
<<else>>\
<<set _MonsterPursuit to _MonsterPursuit - ($Mon.poisoned * 10)>>\
<<endif>>\
<<set _MonsterEvenChases to true>>\
<<if random(0,100) > _MonsterPursuit>>\
<<set _MonsterEvenChases to false>>\
<<endif>>\
\
<<set _HornyOverride to 100 * $PC[$CC][$PChornycur] / $PC[$CC][$PChornymax]>>\
<<set _HornyOverride to _HornyOverride + $Mon.teased>>\
\
<<set _FleeRoll to random(0,100)>>\
\
<<if _MonsterEvenChases is false>>\
<<set _endcombat to "yes">>\
<<if _CurrentClass is "ninja">>\
<<set _fleemess to "You @@color:Green;fade into the shadows@@">>\
<<else>>\
<<set _fleemess to "You turn and " + either("run", "flee") + ". The " + $Mon.name + " doesn't give chase.">>\
<<endif>>\
<<CombatLog _fleemess>>\
<<elseif _FleeRoll < _RunChance>>\
<<if random(0, 100) < _HornyOverride>>\
<<if _CurrentClass is "ninja">>\
<<set _fleemess to "You @@color:Green;fade into the shadows@@, but " + _TheMon + " manages to sniff you out">>\
<<else>>\
<<set _fleemess to "You turn and " + either("run", "flee") + ", but " + _TheMon + " manages to sniff you out">>\
<<endif>>\
<<CombatLog _fleemess>>\
<<MonsterTurn false>>
<<else>>\
<<if _CurrentClass is "ninja">>\
<<set _fleemess to "You @@color:Green;fade into the shadows@@">>\
<<else>>\
<<set _fleemess to "You turn and " + either("run", "flee") + ". The " + $Mon.name + " doesn't give chase.">>\
<<endif>>\
<<CombatLog _fleemess>>\
<<set _endcombat to "yes">>\
<<endif>>\
<<else>>\
<<set _fleemess to either("You fail to escape","You can't seem to break away")>>\
<<CombatLog _fleemess>>\
<<endif>>\
<<endif>>\
<<elseif _attacktype is "flirt">>\
<<set _endcombat to "skip player">>\
\
<<if $PC[$CC][$PCsex] is "male">>\
<<set _frand to random(1,4)>>\
<<if _frand is 1>><<set _hitmessage to "You wink suggestively at " + _TheMon>>\
<<elseif _frand is 2>><<set _hitmessage to "You strike a pose and curl your biceps">>\
<<elseif _frand is 3>><<set _hitmessage to "You point between your legs and whistle at " + _TheMon>>\
<<else>><<set _hitmessage to "You flash a winning smile at " + _TheMon>>\
<<endif>>\
<<set _frand to random(1,3)>>\
<<if _frand is 1>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " just rolls " + $Mon.hisher + " eyes at you">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is visibly aroused.">>\
<<elseif _frand is 2>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " doesn't seem interested.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is definitely interested.">>\
<<else>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " is unimpressed.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.hisher.toUpperFirst() + " cheeks flush red.">>\
<<endif>>\
<<set _absorbmessage to _missmessage>>\
<<elseif $PC[$CC][$PCsex] is "female">>\
<<set _frand to random(1,4)>>\
<<if _frand is 1>><<set _hitmessage to "You lick your lips at the " + $Mon.name>>\
<<elseif _frand is 2>><<set _hitmessage to "You look away and pretend to accidentally jiggle your boobs">>\
<<elseif _frand is 3>><<set _hitmessage to "You blow a kiss to the " + $Mon.name>>\
<<else>><<set _hitmessage to "You squeeze your legs together and sigh longingly at the " + $Mon.name>>\
<<endif>>\
<<set _frand to random(1,3)>>\
<<if _frand is 1>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " just rolls " + $Mon.hisher + " eyes at you">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is visibly aroused.">>\
<<elseif _frand is 2>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " doesn't seem interested.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is definitely interested.">>\
<<else>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " is unimpressed.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.hisher.toUpperFirst() + " cheeks flush red.">>\
<<endif>>\
<<set _absorbmessage to _missmessage>>\
<<else>>\
<<set _frand to random(1,8)>>\
<<if _frand is 1>><<set _hitmessage to "You wink suggestively at " + _TheMon>>\
<<elseif _frand is 2>><<set _hitmessage to "You strike a pose and curl your biceps">>\
<<elseif _frand is 3>><<set _hitmessage to "You point between your legs and whistle at " + _TheMon>>\
<<elseif _frand is 4>><<set _hitmessage to "You give a winning smile to " + _TheMon>>\
<<elseif _frand is 5>><<set _hitmessage to "You lick your lips at " + _TheMon>>\
<<elseif _frand is 6>><<set _hitmessage to "You look away and pretend to accidentally jiggle your boobs">>\
<<elseif _frand is 7>><<set _hitmessage to "You blow a kiss to " + _TheMon>>\
<<else>><<set _hitmessage to "You squeeze your legs together and sigh longingly at " + _TheMon>>\
<<endif>>\
<<set _frand to random(1,3)>>\
<<if _frand is 1>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " just rolls " + $Mon.hisher + " eyes at you">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is visibly aroused.">>\
<<elseif _frand is 2>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " doesn't seem interested.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is definitely interested.">>\
<<else>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " is unimpressed.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.hisher.toUpperFirst() + " cheeks flush red.">>\
<<endif>>\
<<endif>>\
\
\
<<set _FlirtCombatData to setup.GetFlirtDataAgainstMon()>>\
<<set _Physiology to _FlirtCombatData[0]>>\
<<set _ProstituteClassBonus to _FlirtCombatData[1]>>\
<<set _EquipBonus to _FlirtCombatData[2]>>\
<<set _MorphToHitBonus to _FlirtCombatData[3]>>\
<<set _MorphDamBonus to _FlirtCombatData[4]>>\
<<set _Praying to _FlirtCombatData[5]>>\
<<set _BestProstitute to _FlirtCombatData[6]>>\
\
<<set _TotalToHit to _Physiology + _EquipBonus + _MorphToHitBonus - _Praying>>\
\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;" + either("'WANNA DO IT?!?!'","'I'M GONNA HATE FUCK YOU!'","WANNA SMASH?!?") + "@@ you shriek through your anger. It's not very sexy.">>\
<<elseif _TotalToHit + random(1,10) > $Mon.Willpower>>
<<set _TD to random(1, Math.trunc(_Physiology)) + _ProstituteClassBonus + _MorphDamBonus>>\
<<if _TD > 0>>\
<<set $Mon.HitByFlirt to $Mon.HitByFlirt +1>>\
<<set _CombatMessage to _hitmessage>>\
<<set $Mon.teased to $Mon.teased + _TD>>\
<<else>>\
<<set _CombatMessage to _TheMon + " is annoyed by your mixed signals">>\
<<endif>>\
<<else>>\
<<if setup.GetEffect("praying") > 0>>\
<<set _CombatMessage to _TheMon + " is annoyed by your mixed signals">>\
<<else>>\
<<set _CombatMessage to _missmessage>>\
<<endif>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _attacktype is "fantasize">>\
<<set _endcombat to "skip player">>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CombatMessage to "@@color:Red;You fantasize about " + either("HATE FUCKING ","SMASHING ") + _TheMon + "@@. It fails to turn you on.">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _CombatMessage to "You fantasize about " + _TheMon + " having " + $Mon.hisher + " way with you. @@color:Pink;You are very aroused@@">>\
<<ChangeStat $PChornycur 20>>\
<<ShowHorny>>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<elseif _attacktype is "INVENTORY">>\
<<CombatLog _ArrayReceived[2]>>\
<<set _endcombat to "skip player">>\
<<elseif _attacktype is "debug kill">>\
<<set _endcombat to "skip player">>\
<<set _AllowPartyActions to false>>\
<<set $Mon.hpcur to 0>>\
<<set _CombatMessage to "You zap " + _TheMon>>\
<<CombatLog _CombatMessage>>\
<<else>>\
<!-- defaults -->\
<<set _MaybeError to "CombatLog defaulted: " + _args[0] + ", " + _args[1] + ", " + _args[2]>>\
<<CombatLog _MaybeError>>\
<<endif>>\
\
<<if _endcombat is "yes">>\
<<replace "#monhealth">><</replace>>\
<<replace "#monflirt">><</replace>>\
<<replace "#combatcontrols">>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Continue" $ReturnFromMenu>>
<<ClearTemporaryEffects>>\
<</link>>\
</span>
<</replace>>\
<<elseif _endcombat is "skip player">>\
<<elseif _endcombat is "normal">>\
<<if _th < 1>>\
<<set _m to _missmessage>>\
<<else>>\
<<if _td < 1>>\
<<set _m to _absorbmessage>>\
<<else>>\
<!-- account for resistences? -->\
<<set _m to _hitmessage + " for " + _td + " damage">>\
<<set $Mon.hpcur to $Mon.hpcur - _td>>\
<<endif>>\
<<endif>>\
<<CombatLog _m>>\
<<else>>
<<CombatLog "@@color:Red;Error in combat: do we resolve or no?@@">>\
<<endif>>\
<<if $WORLD.datapasser is "portaled out of combat">>\
<<else>>\
<<if $Mon.poisoned > 0>>\
<<if $Mon.poisonheal is true>>\
<<set $Mon.hpcur to $Mon.hpcur + $Mon.poisoned>>\
<<if $Mon.hpcur gte $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _m to _TheMon + " is @@color:Yellow;healed to full by the poison!@@">>\
<<CombatLog _m>>\
<<else>>\
<<set _m to _TheMon + " is @@color:Yellow;healed for " + $Mon.poisoned + " by the poison!@@">>\
<<CombatLog _m>>\
<<endif>>\
<<else>>\
<<set $Mon.hpcur to $Mon.hpcur - $Mon.poisoned>>\
<<set _m to _TheMon + " takes " + $Mon.poisoned + " @@color:LawnGreen;damage from poison@@">>\
<<CombatLog _m>>\
<<endif>>\
<<endif>>\
<<if $Mon.bleeding > 0>>\
<<set $Mon.hpcur to $Mon.hpcur - $Mon.bleeding>>\
<<set _m to _TheMon + " @@color:Red;bleeds for " + $Mon.bleeding + " damage@@">>\
<<CombatLog _m>>\
<<endif>>\
<<ShowActiveEffects>>\
<<if _AllowPartyActions is true>>\
<<if $PC[$CC][$PCparty].length > 0>>\
<<for _PartyI to 0; _PartyI < _PartyQTY; _PartyI++>>\
<<if $PC[$CC][$PCparty][_PartyI].stance is "Att">>\
<!-- implement Mon.resists against physical? -->\
<<set (_ToHit to 30 + $PC[$CC][$PCparty][_PartyI].level * 10) - ($Mon.level * 5)>>\
<<if random(0,100) < _ToHit>>\
<<set _ToDam to random(0, $PC[$CC][$PCparty][_PartyI].level)>>\
<<if _ToDam > 0>>\
<<set $Mon.hpcur to $Mon.hpcur - _ToDam>>\
<<set _CombatMess to $PC[$CC][$PCparty][_PartyI].name + " hits " + _TheMon + " for " + _ToDam + " damage">>\
<<else>>\
<<set _CombatMess to $PC[$CC][$PCparty][_PartyI].name + " bounces uselessly off of " + _TheMon>>\
<<endif>>\
<<else>>\
<<set _CombatMess to $PC[$CC][$PCparty][_PartyI].name + either(" glares menacingly at "," flails uselessly at "," cries at ", " blows a raspberry at ") + _TheMon>>\
<<endif>>\
<<CombatLog _CombatMess>>\
<<endif>>\
<</for>>\
<<endif>>\
<<endif>>\
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<endif>>\
<</widget>>\
\
<<widget "CombatLog">>\
<<set $ComLog[0] to $ComLog[1]>>\
<<set $ComLog[1] to $ComLog[2]>>\
<<set $ComLog[2] to $ComLog[3]>>\
<<set $ComLog[3] to $ComLog[4]>>\
<<set $ComLog[4] to $ComLog[5]>>\
<<set $ComLog[5] to $ComLog[6]>>\
<<set $ComLog[6] to $ComLog[7]>>\
<<set $ComLog[7] to $ComLog[8]>>\
<<set $ComLog[8] to $ComLog[9]>>\
<<set $ComLog[9] to $ComLog[10]>>\
<<set $ComLog[10] to $ComLog[11]>>\
<<set $ComLog[11] to $ComLog[12]>>\
<<set $ComLog[12] to $ComLog[13]>>\
<<set $ComLog[13] to $ComLog[14]>>\
<<set $ComLog[14] to $ComLog[15]>>\
<<set $ComLog[15] to $args[0]>>\
<!-- <<set _floof to setup.advanceLog()>> -->\
<<for _i to 0; _i < 16; _i++>>
<<set _foo to "#combatlog" + _i>>
<<replace _foo>>\
<<print $ComLog[_i]>>\
<</replace>>\
<</for>>\
<</widget>>\
<<widget "MonsterAttack">>\
<<CombatLog "monster attack goes here">>\
<</widget>>\
\
<<widget "MonsterTurn">>\
<<set _TheMon to "The " + $Mon.name + " ">>\
<<if $Mon.unique is true>>\
<<set _TheMon to $Mon.name + " ">>\
<<endif>>\
\
<<if ($Mon.hpcur < 1) or ($Mon.teased > 99)>>\
\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<set _MonKillPTR to setup.MonNameToKillPTR($Mon.morph)>>\
<<set $PC[$CC][$PCkills][_MonKillPTR] to $PC[$CC][$PCkills][_MonKillPTR] +1>>\
\
<<set _SoulTrapActivated to false>>\
<<set _ST to setup.GetEffect("soul")>>\
<<ClearTemporaryEffects>>\
\
<<replace "#monhealth">><</replace>>\
<<replace "#monflirt">><</replace>>\
<<replace "#combatcontrols">>\
<!-- Soul Trap handler -->\
<<if _ST > 0>>\
<<if ($PC[$CC][$PClocation] is "tower")>>\
<<set _SoulTrapMessage to "@@color:LightGreen;You are victorious@@ but your @@color:Yellow;soul trap fails because you have no gem equipped@@">>\
<<set _GemPTR to -1>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _EquipPTR to 0; _EquipPTR < _bpqty; _EquipPTR++>>\
<<set _bp to $PC[$CC][$PCbp][_EquipPTR]>>\
<<if _bp.equippable is true>>\
<<if (_bp.equip[0] > 549) and (_bp.equip[0] < 560)>>\
<!-- is a gem -->\
<<if (_bp.equip[3] > 0) and (_bp.equip[3] < 21)>>\
<<set _SoulTrapMessage to "@@color:LightGreen;You are victorious@@ but @@color:Yellow;your equipped gem already contains a soul@@">>\
<<else>>\
<<if $Mon.boss > 0>>\
<<set _SoulTrapMessage to "@@color:LightGreen;You are victorious@@ but @@color:Yellow;boss monsters cannot be soul trapped@@">>\
<<elseif $Mon.unique > 0>>\
<<set _SoulTrapMessage to "@@color:LightGreen;You are victorious@@ but @@color:Yellow;unique monsters cannot be soul trapped@@">>\
<<else>>\
<<set _SoulTrapMessage to "@@color:Gold;" + _TheMon + " screams as " + $Mon.hisher + " soul is absorbed into your gemstone!@@">>\
<<set _GemPTR to _EquipPTR>>\
<<set _bp.equip[2] to 0>><!-- no longer stackable -->\
<<set _bp.equip[3] to $Mon.level>>\
<<set _SoulTrapActivated to true>>\
<<set _EquipPTR to 9999>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _GemPTR > -1>>\
<<set _bp.equip[3] to $Mon.level>>\
<<endif>>\
<<else>>\
<<set _SoulTrapMessage to "@@color:LightGreen;You are victorious@@ but your @@color:Yellow;soul trap fails because monsters here aren't powerful enough@@">>\
<<endif>>\
<<endif>>\
\
\
<<if ($Mon.teased > 99)>>\
<<if _SoulTrapActivated is true>>\
@@color:Yellow;Soul trap failed!@@ <<print _TheMon>> collapses in sexual frustration!
<<else>>\
@@color:LightGreen;<<print _TheMon>> collapses in sexual frustration!@@
<<set $PC[$CC][$PCmisc].flirtvictory to $PC[$CC][$PCmisc].flirtvictory +1>>\
<<if ($PC[$CC][$PCmisc].flirtvictory > 4)>>\
<<AwardAchievement "Prostitute">>\
<<endif>>\
<<endif>>\
<<else>>\
<<if _SoulTrapActivated>>\
@@color:LightGreen;<<print _SoulTrapMessage>>@@
<<else>>\
<<if _ST > 0>>\
<<print _SoulTrapMessage>>
<<else>>\
@@color:LightGreen;You are victorious!@@
<<endif>>\
<<endif>>\
<<endif>>\
\
<!-- check for class unlocks -->\
<<if ($PC[$CC][$PClocation] is "tower") and ($Mon.HitBySpells is 0) and ($Mon.HitByFlirt is 0) and ($DebugMode neq true)>>\
<<set _GetMonk to true>>\
<<set _GetBarbarian to true>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.equippable is true>>\
<<if _bp.type is $BPwield>>\
<<if $PC[$CC][$PCbp][_i].equip[0] > 0>>\
<<set _GetMonk to false>>\
<<endif>>\
<<else>>\
<<if $PC[$CC][$PCbp][_i].equip[0] > 0>>\
<<set _GetBarbarian to false>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _GetMonk is true>>\
<<AwardAchievement "Monk">>\
<<endif>>\
<<if _GetBarbarian is true>>\
<<AwardAchievement "Barbarian">>\
<<endif>>\
<<if $Mon.CombatRound is 1>>\
<<AwardAchievement "Ninja">>\
<<endif>>\
<<endif>>\
\
<<set $PC[$CC][$PCmisc].battleswon to $PC[$CC][$PCmisc].battleswon +1>>\
\
<<set $LogKills to $LogKills +1>>\
<<if $Mon.xp > 0>>\
<<set _BaseXPGained to $Mon.xp>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "scholar">>\
<<set _PlayerXPGained to _BaseXPGained + $PC[$CC][$PClevel]>>\
<<AwardXP _PlayerXPGained "combat">>
<<for _PXP to 0; _PXP < $PC[$CC][$PCparty].length; _PXP++>>\
<<if $PC[$CC][$PCparty][_PXP].stance neq "Down">>\
<<AwardPartyXP _PXP _BaseXPGained>>\
<<endif>>\
<</for>>\
<<else>>\
<<set _LivePartyMembers to []>>\
<<set _PartyQTY to 0>>\
<<for _Loop to 0; _Loop < $PC[$CC][$PCparty].length; _Loop++>>\
<<if $PC[$CC][$PCparty][_Loop].stance neq "Down">>\
<<set _LivePartyMembers[_LivePartyMembers.length] to [_Loop, 0]>>\
<<set _PartyQTY to _PartyQTY +1>>\
<<endif>>\
<</for>>\
<<if _PartyQTY > 0>>\
<<set _PlayerShare to Math.trunc(_BaseXPGained / 2)>>\
<<set _PartyShare to _BaseXPGained / 2>>\
<<if _PlayerShare neq _PartyShare>>\
<<set _PlayerShare to _PlayerShare +1>>\
<<set _PartyShare to Math.trunc(_PartyShare)>>\
<<endif>>\
<<for _Loop to 0; _Loop < _PartyShare; _Loop++>>\
<<set _WhoGetsIt to random(0, _LivePartyMembers.length -1)>>\
<<set _LivePartyMembers[_WhoGetsIt][1] to _LivePartyMembers[_WhoGetsIt][1] +1>>\
<</for>>\
<<AwardXP _PlayerShare "combat">>
<<for _Loop to 0; _Loop < _LivePartyMembers.length; _Loop++>>\
<<if _LivePartyMembers[_Loop][1] > 0>>\
<<AwardPartyXP _LivePartyMembers[_Loop][0] _LivePartyMembers[_Loop][1]>>\
<<endif>>\
<</for>>\
<<else>>\
<<AwardXP _BaseXPGained "combat">>
<<endif>>\
<<endif>>\
<<endif>>\
<<if $Mon.gold > 0>>\
<<set _GreedyBonusNum to 0>>\
<<set _GreedyBonusText to "">>\
<<set _RogueBonusText to "">>\
<<set _TotalGold to $Mon.gold>>\
<<set _BestRogue to setup.AchievementHandler("Best Rogue", "HAS?", -1)>>\
<<if _BestRogue > 0>>\
<<set _TotalGold to _TotalGold + _BestRogue>>\
<<set _RogueBonusText to "@@color:MediumSlateBlue;(+" + _BestRogue + ")@@">>\
<<endif>>\
<<if setup.PlayerHasPerk("Greedy") is true>>\
<<set _GreedyBonusNum to Math.trunc(_TotalGold / 10)>>\
<<set _TotalGold to _TotalGold + _GreedyBonusNum>>\
<<set _GreedyBonusText to "@@color:Peru;(+" + _GreedyBonusNum + ")@@">>\
<<endif>>\
You find <<print $Mon.gold>><<print _RogueBonusText>><<print _GreedyBonusText>> coins on the $Mon.name
<<set $PC[$CC][$PCmisc].gold to $PC[$CC][$PCmisc].gold + _TotalGold>>\
<<GainGold _TotalGold>>\
<<endif>>\
\
<<if (setup.PtrToClass($PC[$CC][$PCclass]) is "mage") and ($PC[$CC][$PClevel] > 6)>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanacur] + $Mon.level>>\
<<if $PC[$CC][$PCmanacur] > $PC[$CC][$PCmanamax]>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanamax]>>\
@@color:Aqua;Your mana is restored to full@@
<<else>>\
You siphon @@color:Aqua;<<print $Mon.level>> mana@@ from your opponent
<<endif>>\
<<endif>>\
\
<<set _AllowRape to true>>\
<<set _AllowDrop to true>>\
<<set _AllowButcher to true>>\
<<set _AllowBottle to true>>\
<<set _AllowBlood to true>>\
<<set _AllowSoulTrapDust to false>>\
<<if $WORLD.CombatInterrupt is "smith quest omnibus">>\
<<set $WORLD.CombatInterrupt to "defeated smith omnibus">>\
<<set _AllowRape to false>>\
<<set _AllowDrop to false>>\
<<set _AllowButcher to false>>\
<<set _AllowBottle to false>>\
<<elseif $WORLD.CombatInterrupt is "Zehtalia">>\
<<set $WORLD.CombatInterrupt to "defeated Zehtalia">>\
<<set _AllowRape to false>>\
<<set _AllowButcher to false>>\
<<set _AllowBottle to false>>\
<<set _AllowBlood to false>>\
<<elseif $WORLD.CombatInterrupt is "Neris">>\
<<set $WORLD.CombatInterrupt to "defeated Neris">>\
<<set _AllowRape to false>>\
<<set _AllowButcher to false>>\
<<set _AllowBottle to false>>\
<<set _AllowBlood to false>>\
<<elseif $WORLD.CombatInterrupt is "cave">>\
<<set $WORLD.CombatInterrupt to "defeated cave">>\
<<else>>\
<<set $WORLD.CombatInterrupt to "">>\
<<endif>>\
<<if _SoulTrapActivated is true>>\
<<set _AllowRape to false>>\
<<set _AllowButcher to false>>\
<<set _AllowBottle to false>>\
<!-- leave allowblood as is -->\
<<set _AllowSoulTrapDust to true>>\
<<endif>>\
\
<<if _AllowDrop is true>>\
<<if _pz > 0>>\
<<set _LootChance to random(1,5)>>\
<<if $Dungeon[_pz][_px][_py][11] neq 0>>\
<<set _LootChance to 1>>\
<<endif>>\
<<set _Loot to $Mon.loot>>\
<<if (_Loot[0] is 0) and (_LootChance is 1)>>\
<<set _Loot to setup.GenLoot($Mon.name, $Mon.sex, _pz, $PC[$CC][$PClocation])>>\
<<endif>>\
<<if _Loot[0] is 0>>\
<<else>>\
<<DescribeItem _Loot>>\
<<set _name to $ItemPoke.fullname>>\
<<if _name is "none">>\
<<if $DebugMode is true>>\
@@color:Yellow;Debug: Fixed-placement tower $Mon.name generated no item: (_Loot)@@
<<endif>>\
<<else>>\
You find a <<print _name>> and take it with you.
<<set _throwaway to setup.GiveItem($CC, _Loot)>>\
<<endif>>\
<<endif>>\
<<endif>>\
<hr>\
<<endif>>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<</link>>
</span>\
<<if _AllowRape is true>>\
<<include "Victory">>\
<<endif>>\
<<if _AllowButcher is true>>\
<<if setup.HasButcherTool() > -1>>\
<hr>\
<<set _foo to "s) Slaughter/butcher the " + $Mon.name + " for meat">>\
<span id="KeypSouth">\
<<link _foo $ReturnFromMenu>>
<<set _foo to setup.GiveItem($CC, [102, 0, 1, $Mon.MeatSemenMilk[0], 0])>>
<</link>>
</span>\
<<else>>\
<br>\
<<endif>>\
<<endif>>\
<<if _AllowBottle is true>>\
<<set _BottleSlot to setup.HasBottle()>>\
<<if _BottleSlot > -1>>\
<<if (setup.getnextinvslot($CC) > -1) or ($PC[$CC][$PCinven][_BottleSlot][2] is 1)>>\
<!-- implement case for no room, but already have stackable type -->\
<<set _Fluids to []>>\
<<if $Mon.MeatSemenMilk[1] > -1>>\
<<set _Fluids[_Fluids.length] to $Mon.MeatSemenMilk[1]>>\
<<endif>>\
<<if $Mon.MeatSemenMilk[2] > -1>>\
<<set _Fluids[_Fluids.length] to $Mon.MeatSemenMilk[2]>>\
<<endif>>\
<<if _Fluids.length > 0>>\
<span id="KeypF">\
<<link "f) Collect fluids" $ReturnFromMenu>>
<<set _foo to setup.RemoveOneItemFromInv($CC, _BottleSlot)>>
<<set _PickOne to random(0, (_Fluids.length -1))>>
<<set _Fluid to _Fluids[_PickOne]>>
<<set _foo to setup.GiveItem($CC, [109, 0, 1, _Fluid, 0])>>
<</link>>
</span>\
<<else>>\
f) This monster has no harvestable fluids.
<<endif>>\
<<else>>\
No room in inventory for additional fluids
<<endif>>\
<<endif>>\
<<endif>>\
<</replace>>\
<!-- TOWER ONLY: remove monster and place blood or sexual fluids -->\
<<if _AllowBlood is true>>\
<<if _pz > 0>>\
<<if ($Dungeon[_pz][_px][_py][11] is 0) or $Dungeon[_pz][_px][_py][11] is "Monster">>\
<<if _AllowSoultrapDust is true>>\
<<elseif ($Mon.teased > 99)>>\
<<if $Dungeon[_pz][_px][_py][8] is 106>>\
<<elseif $Dungeon[_pz][_px][_py][8] is 100>>\
<<set $Dungeon[_pz][_px][_py][8] to 106>>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][8] to 104>>\
<<endif>>\
<<else>>\
<<if $Dungeon[_pz][_px][_py][8] is 106>>\
<<elseif $Dungeon[_pz][_px][_py][8] is 104>>\
<<set $Dungeon[_pz][_px][_py][8] to 106>>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][8] to 100>>\
<<endif>>\
<<endif>>\
<<set $Dungeon[_pz][_px][_py][11] to 0>>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<else>>\
<!-- REMOVE SUBSEQUENT STUN IMMUNITY -->\
<<if $Mon.stunned is -1>>\
<<set $Mon.stunned to 0>>\
<<endif>>\
<!-- APPLY REGENERATION -->\
<<if ($Mon.regen > 0) and $Mon.hpcur < $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpcur + $Mon.regen>>\
<<if $Mon.hpcur gte $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _RegenMessage to _TheMon + " @@color:Yellow;regenerates to full@@">>\
<<CombatLog _RegenMessage>>\
<<else>>\
<<set _RegenMessage to _TheMon + " @@color:Yellow;regenerates@@">>\
<<CombatLog _RegenMessage>>\
<<endif>>\
<<endif>>\
<!-- PROCESS POISON -->>\
<<set _PlayerPoisoned to setup.GetEffect("poison")>>\
<<if _PlayerPoisoned > 0>>\
<<set _PoisonMessage to "You take @@color:Green;" + _PlayerPoisoned + " damage from poison!@@">>\
<<CombatLog _PoisonMessage>>\
<<set _PlayerPoisoned to (_PlayerPoisoned * -1)>>\
<<ChangeStat $PChpcur _PlayerPoisoned>>\
<<endif>>\
<!-- PROCESS PLAGUE CURSE -->>\
<<set _PlagueCurse to setup.GetEffect("plague curse")>>\
<<if _PlagueCurse > 0>>\
<<set _CurseMessage to "You take @@color:Purple;" + _PlagueCurse + " damage from the plague curse!@@">>\
<<CombatLog _CurseMessage>>\
<<set _PlagueCurse to (_PlagueCurse * -1)>>\
<<ChangeStat $PChpcur _PlagueCurse>>\
<<endif>>\
<!-- CHOOSE AN ATTACK TYPE -->\
<<if $Mon.att.length > 0>>\
<<else>>\
<<AddToLog "Error in MonsterTurn: no valid attacks in array">>\
<<endif>>\
<<set _WhichAttack to random(0, $Mon.att.length -1)>>\
<<if (_MonAttackType is "heal") and ($Mon.hpcur gte $Mon.hpmax)>>\
<<set _WhichAttack to 0>>\
<<endif>>\
<<if ($Mon.teased > random(1,100)) and (_MonAttackType is "flirt")>>\
<<set _WhichAttack to 0>>\
<<set _changeattack to _TheMon + " seems agitated">>\
<<CombatLog _changeattack>>\
<<endif>>\
<<set _MonAttackType to $Mon.att[_WhichAttack][0]>>\
<!-- ************************************************************* -->\
\
<!-- CALC PLAYER NET ARMOR FOR PHYSICAL ATTACKS ONLY -->\
<<set _PlayerTotalAC to 0>>\
<<for _AcCycle to 0; _AcCycle < $PC[$CC][$PCac].length; _AcCycle++>>\
<<set _PlayerTotalAC to _PlayerTotalAC + $PC[$CC][$PCac][_AcCycle]>>\
<</for>>\
<<set _Webbed to setup.GetEffect("webbed")>>\
<<if _Webbed > 0>>\
<<set _PlayerTotalAC to _PlayerTotalAC - _Webbed>>\
<<endif>>\
<<set _Encumbered to setup.EncumberedPenalty()>>\
<<if _Encumbered < 0>>\
<<set _PlayerTotalAC to _PlayerTotalAC + _Encumbered>>\
<<endif>>\
<!-- ************************************************************* -->\
\
<!-- CALC PLAYER ABSORPTION AFTER ARMOR PENETRATION -->
<<set _NetAbsorb to $PC[$CC][$PCabsorb] - $Mon.arpen>>\
<<if _NetAbsorb < 0>>\
<<set _NetAbsorb to 0>>\
<<endif>>\
<!-- ************************************************************* -->\
\
<!-- PREP PARTY -->
<<set _PartyMemberToAttack to 999>>\
<<set _PartyQTY to $PC[$CC][$PCparty].length>>\
<<if _PartyQTY > 0>>\
<<set _PartyTargetList to []>>\
<<for _PartyI to 0; _PartyI < _PartyQTY; _PartyI++>>\
<<set _Stance to $PC[$CC][$PCparty][_PartyI].stance>>\
<<if _Stance is "Att">>\
<<set _PartyTargetList[_PartyI] to 10>>\
<<elseif _Stance is "Prot">>\
<<set _PartyTargetList[_PartyI] to 50>>\
<<elseif _Stance is "Hide">>\
<<set _PartyTargetList[_PartyI] to 1>>\
<<else>>\
<<set _PartyTargetList[_PartyI] to 0>>\
<<endif>>\
<</for>>\
<!-- PC -->\
<<set _PartyTargetList[_PartyTargetList.length] to 50>>\
<<set _PickTarget to setup.WeightedRandom(_PartyTargetList)>>\
<<set _PartyMemberToAttack to _PickTarget>>\
<<endif>>\
<!-- ************************************************************* -->\
\
<!-- character class uniques -->\
<<set _CurrentClass to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<set _PowerMoveEvasion to false>>\
<<if _CurrentClass is "rogue">>\
<<if $PC[$CC][$PClevel] * 8 > random(1,100)>>\
<<set _PowerMoveEvasion to true>>\
<<endif>>\
<<endif>>\
<<set _MonkDodge to false>>\
<<if (_CurrentClass is "monk") and ($PC[$CC][$PClevel] > 6)>>\
<<if $PC[$CC][$PClevel] gte random(1,100)>>\
<<set _MonkDodge to true>>\
<<endif>>\
<<endif>>\
\
<!-- AI -->\
<<if $Mon.AI is "Zehtalia">>\
<<if (_MonAttackType is "POISON") and ($PC[$CC][$PCcon] > 14)>>\
<<if random(1,2) is 1>>\
<<set _WhichAttack to 0>>\
<<set _MonAttackType to "physical">>\
<<endif>>\
<<elseif (_MonAttackType is "WEB") and ($PC[$CC][$PCdex] > 14)>>\
<<if random(1,2) is 1>>\
<<set _WhichAttack to 0>>\
<<set _MonAttackType to "physical">>\
<<endif>>\
<<endif>>\
<<if $Mon.Powerup > 0>>\
<<set _MonAttackType to "ZEHTALIA">>\
<<elseif setup.GetEffect("poisoned") is 0 and ($PC[$CC][$PClevel] + $PC[$CC][$PCcon] < 21)>>\
<<set _WhichAttack to 2>>\
<<set _MonAttackType to "POISON">>\
<<elseif random(1,3) is 1>>\
<<set _MonAttackType to "ZEHTALIA">>\
<<endif>>\
<<elseif $Mon.AI is "Neris">>\
<<set _MonAttackType to "NERIS">>\
<<elseif $Mon.AI is "horse">>\
<<if $Mon.Powerup > 0>>\
<<set _MonAttackType to "HORSE">>\
<<elseif random(1,3) is 1>>\
<<set _MonAttackType to "HORSE">>\
<<endif>>\
<<elseif $Mon.AI is "scorpion">>\
<<if $Mon.Powerup > 0>>\
<<set _MonAttackType to "SCORPION">>\
<<elseif random(1,3) is 1>>\
<<set _MonAttackType to "SCORPION">>\
<<endif>>\
<<endif>>\
\
<!-- PERFORM MONSTER ATTACK -->\
<<if $Mon.stunned > 0>>\
<<set $Mon.stunned to -1>>\
<<set _CombatMessage to "@@color:Aqua;" + _TheMon + either("is too dazed to attack","is reeling"," takes a moment to catch " + $Mon.hisher + " breath")>>\
<<CombatLog _CombatMessage>>\
<<elseif $Mon.teased > random(1,100) + $Mon.Willpower>>\
<<set _CombatMessage to "@@color:Aqua;" + _TheMon + " is too flustered to attack you@@">>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "physical">>\
<<set _ToHit to random(1, 100) + $Mon.att[_WhichAttack][3] - _PlayerTotalAC>>\
<<if _PartyMemberToAttack < _PartyQTY>>\
<!-- party takes attack -->\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<set $PC[$CC][$PCparty][_PartyMemberToAttack].hpcur to $PC[$CC][$PCparty][_PartyMemberToAttack].hpcur - _Damage>>\
<<if $PC[$CC][$PCparty][_PartyMemberToAttack].hpcur < 1>>\
<<set $PC[$CC][$PCparty][_PartyMemberToAttack].hpcur to 0>>\
<<set $PC[$CC][$PCparty][_PartyMemberToAttack].stance to "Down">>\
<<set _CombatMessage to _TheMon + "hits " + $PC[$CC][$PCparty][_PartyMemberToAttack].name + " for " + _Damage + " damage. @@color:Red;" + $PC[$CC][$PCparty][_PartyMemberToAttack].name + " collapses!@@">>\
<<else>>\
<<set _CombatMessage to _TheMon + " hits " + $PC[$CC][$PCparty][_PartyMemberToAttack].name + " for " + _Damage + " damage">>\
<<endif>>\
<<ShowParty>>\
<<elseif _ToHit > 0>>\
<<if _MonkDodge is true>>\
<<set _CombatMessage to _TheMon + " but you @@color:Aqua;monk-dodge the attack!@@">>\
<<else>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<if _Damage > 0>>\
<<if _NetAbsorb > 0>>\
<<if _NetAbsorb > _Damage>><<set _NetAbsorb to _Damage>><<endif>>\\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + "@@@@color:MediumSlateBlue;(-" + _NetAbsorb +")@@ @@color:Red;damage@@">>\
<<set _Damage to _Damage - _NetAbsorb>>\
<<else>>\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<endif>>\
\
<<set _sMod to "">>\
<<if $PC[$CC][$PCmorphBONI].lessdamage > 0>>\
<<set _SlimeMod to $PC[$CC][$PCmorphBONI].lessdamage * 2>>\
<<set _SlimeMod to Math.trunc((_Damage * _SlimeMod) /100)>>
<<if _SlimeMod > 0>>\
<<set _sMod to "@@color:Aqua;(-" + _SlimeMod + ")@@">>\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + "@@" + _sMod + " damage">>\
<<set _Damage to _Damage - _SlimeMod>>\
<<endif>>\
<<endif>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][6]>>\
<<endif>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<RiposteCheck>>\
<<elseif _MonAttackType is "magic">>\
<<set _ToHit to random(1, 100) + $Mon.att[_WhichAttack][3] - $PC[$CC][$PCwil]>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<set _ResMag to setup.GetEffect("resist magic")>>\
<<if _ResMag > 0>>\
<<if _Damage > _ResMag>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + "@@ @@color:LightGreen;(- " + _ResMag + ")@@ damage">>\
<<set _Damage to _Damage - _ResMag>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + ", but you @@color:Aqua;fully resist@@ the spell!">>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "fire breath">>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<set _ResFire to setup.GetEffect("resist fire") + $PC[$CC][$PCmorphBONI].fireresist>>\
<<if _ResFire > 0>>\
<<if _Damage > _ResFire>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + "@@ @@color:LightGreen;(- " + _ResFire + ")@@ damage">>\
<<set _Damage to _Damage - _ResFire>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + ", but you @@color:Aqua;fully resist@@ the effect!">>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "flirt">>\
<!-- to hit here should be increased by player sexy clothing -->\
<<set _r to random(1,10)>>\
<<set _ToHit to _r + $Mon.att[_WhichAttack][3] + Math.trunc($Mon.teased /10) + $Mon.level - $PC[$CC][$PClevel] - $PC[$CC][$PCwil]>>\
<<set _Praying to setup.GetEffect("praying")>>\
<<if _Praying > 0>>\
<<set _ToHit to _ToHit - _Praying>>\
<<endif>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "prostitute">>\
<<set _ToHit to _ToHit + 5>>\
<<endif>>\
<<set _BestProstitute to setup.AchievementHandler("Best Prostitute", "HAS?", -1)>>\
<<if _BestProstitute > 0>>\
<<set _ToHit to _ToHit - _BestProstitute>>\
<<endif>>\
<<if ($PC[$CC][$PCsexACTS].femalevirgin[1] is true) and ($PC[$CC][$PCsexACTS].malevirgin[1] is true)>>\
<<set _ToHit to _ToHit - 2>>\
<<endif>>\
<<if $PC[$CC][$PCsexACTS].malevirgin[0] is $Mon.morph>>\
<<set _ToHit to _ToHit + 2>>\
<<endif>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[0] is $Mon.morph>>\
<<set _ToHit to _ToHit + 2>>\
<<endif>>\
<<if _ToHit > 0>>\
<<set _MinDam to $Mon.att[_WhichAttack][1] - $PC[$CC][$PCwil]>>\
<<set _MaxDam to $Mon.att[_WhichAttack][2] - $PC[$CC][$PCwil]>>\
<<if _MinDam < 1>>\
<<set _MinDam to 1>>\
<<endif>>\
<<if _MaxDam < 1>>\
<<set _MaxDam to 1>>\
<<endif>>\
<<set _Damage to random(_MinDam, _MaxDam)>>\
<<if _Praying > 0>>\
<<set _Damage to _Damage - _Praying>>\
<<endif>>\
<<if _Damage < 1>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][6]>>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + ", @@color:Pink;+" + _Damage + " arousal@@">>\
<<ChangeStat $PChornycur _Damage>>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<elseif _MonAttackType is "ZEHTALIA">>\
<<if $Dungeon[_pz][_px][_py][12] is "hard mode Zehtalia">>\
<<set _Zshout to "Zehtalia screams, @@color:Yellow;" + either("DIE, HERETIC!","YOUR LIES WILL BE SILENCED!") + "@@">>\
<<set _Zmulti to 3>>\
<<set _ZmissRNG to 1>>\
<<else>>\
<<set _Zshout to "Zehtalia screams, @@color:Yellow;" + either("ANNIHILATION COMES!","DOOM UPON YOU!","TASTE MY WRATH, PUNY MORTAL!","I AM THE GOD OF HELLFIRE!") + "@@">>\
<<set _Zmulti to 2>>\
<<set _ZmissRNG to 2>>\
<<endif>>\
<<if $Mon.Powerup is 0>>\
<<CombatLog _Zshout>>\
<<set $Mon.Powerup to 1>>\
<<else>>\
<<set $Mon.Powerup to 0>>\
<<if _PowerMoveEvasion is true>>\
<<set _CombatMessage to "Zehtalia @@color:Red;reaches for you@@ but you @@color:Aqua;rogue-dodge the move!@@">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _Damage to +_Zmulti * random($Mon.att[0][1], $Mon.att[0][2])>>\
<<set _CombatMessage to "Zehtalia @@color:Red;slams you into the floor for " + _Damage + " damage!@@">>\
<<CombatLog _CombatMessage>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<if random(1, _ZmissRNG) is 1>>\
<<set _Damage to 2 * random($Mon.att[0][1], $Mon.att[0][2])>>\
<<set _CombatMessage to "You are too stunned to avoid her @@color:Red;followup blow for " + _Damage + " more!@@">>\
<<CombatLog _CombatMessage>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<if _Zmulti is 1>>\
<<set _throwaway to setup.ApplyEffect("poisoned", 1)>>\
<<set _throwaway to setup.ApplyEffect("webbed", 1)>>\
<<set _CombatMessage to _TheMon + " @@color:Yellow;poisons and webs you@@ while you're down!">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<elseif _MonAttackType is "NERIS">>\
<<set _NerisPick to random(1,7)>>\
<<if _NerisPick is 1>>\
<<set _NerisSpeech to "Neris begs, 'please kill me.'">>\
<<elseif _NerisPick is 2>>\
<<set _NerisSpeech to "Neris merely watches.">>\
<<elseif _NerisPick is 3>>\
<<set _NerisSpeech to "Neris has resigned herself to her fate.">>\
<<elseif _NerisPick is 4>>\
<<set _NerisSpeech to "'There isn't much time,' Neris urges. 'Please hurry.'">>\
<<elseif _NerisPick is 5>>\
<<set _NerisSpeech to "Neris watches sadly as the black smoke emitting from your body grows.">>\
<<elseif _NerisPick is 6>>\
<<set _NerisSpeech to "'It's too late for me,' Neris reassures you. 'Do what you must.'">>\
<<else>>\
<<set _NerisSpeech to "Neris gazes at you with hope in her eyes.">>\
<<endif>>\
<<CombatLog _NerisSpeech>>\
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<elseif _MonAttackType is "HORSE">>\
<<if $Mon.Powerup is 0>>\
<<set _CombatMessage to "The horse @@color:Yellow;winds up for a powerful kick@@">>\
<<CombatLog _CombatMessage>>\
<<set $Mon.Powerup to 1>>\
<<else>>\
<<set $Mon.Powerup to 0>>\
<<if _PowerMoveEvasion is true>>\
<<set _CombatMessage to "The horse @@color:Red;kicks at you@@ but you @@color:Aqua;rogue-dodge the move!@@">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _Damage to 2 * random($Mon.att[0][1], $Mon.att[0][2])>>\
<<set _CombatMessage to "The horse @@color:Red;smacks you with a powerful kick for _Damage damage!@@">>\
<<CombatLog _CombatMessage>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<endif>>\
<<endif>>\
<<elseif _MonAttackType is "SCORPION">>\
<<if $Mon.Powerup is 0>>\
<<set _CombatMessage to "The scorpion @@color:Yellow;primes its tail for a powerful strike@@">>\
<<CombatLog _CombatMessage>>\
<<set $Mon.Powerup to 1>>\
<<else>>\
<<set $Mon.Powerup to 0>>\
<<if _PowerMoveEvasion is true>>\
<<set _CombatMessage to "The scorpion @@color:Red;launches its stinger at you@@ but you @@color:Aqua;rogue-dodge the move!@@">>\
<<CombatLog _CombatMessage>>\
<<else>>\
<<set _Damage to 2 * random($Mon.att[0][1], $Mon.att[0][2])>>\
<<set _CombatMessage to "The scorpion @@color:Red;impales you with its tail for _Damage damage@@ plus @@color:Green;poison!@@">>\
<<CombatLog _CombatMessage>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<set _throwaway to setup.ApplyEffect("poisoned", 1)>>\
<<endif>>\
<<endif>>\
<<elseif _MonAttackType is "WEB">>\
<<set _ToHit to random(1, 20) + $Mon.level + $Mon.att[_WhichAttack][3] - $PC[$CC][$PClevel] - $PC[$CC][$PCdex]>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<!-- no absorption for web -->\
<<set _throwaway to setup.ApplyEffect("webbed", _Damage)>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4]>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "POISON">>\
<<set _ToHit to random(1, 20) + $Mon.level + $Mon.att[_WhichAttack][3] - $PC[$CC][$PClevel] - $PC[$CC][$PCcon]>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<!-- no absorption for poison -->\
<<set _throwaway to setup.ApplyEffect("poisoned", _Damage)>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4]>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "flurry">>\
<<for _flurry to 0; _flurry < $Mon.flurryQTY; _flurry++>>\
<<set _ToHit to random(1, 100) + $Mon.att[_WhichAttack][3] - _PlayerTotalAC>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<if _Damage > 0>>\
<<if _NetAbsorb > _Damage>><<set _NetAbsorb to _Damage>><<endif>>\\
<<if _NetAbsorb > 0>>\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + "@@@@color:MediumSlateBlue;(-" + _NetAbsorb +")@@ @@color:Red;damage@@">>\
<<set _Damage to _Damage - _NetAbsorb>>\
<<else>>\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<endif>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][6]>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<RiposteCheck>>\
<</for>>\
<<elseif _MonAttackType is "REMOVEARMOR">>\
<<CombatLog "@@color:Yellow;Debug: implement armor debuff@@">>\
<<elseif _MonAttackType is "debuffTH">>\
<<CombatLog "@@color:Yellow;Debug: to-hit debuff@@">>\
<<elseif _MonAttackType is "fertility">>\
<<CombatLog "@@color:Yellow;Debug: implement fertility attacks@@">>\
<<elseif _MonAttackType is "heal">>\
<<set _Heal to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<set $Mon.hpcur to $Mon.hpcur + _Heal>>\
<<if $Mon.hpcur > $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _CombatMessage to _TheMon + " " + "@@color:Yellow;" + $Mon.att[_WhichAttack][4] + " to full health!@@">>\
<<else>>\
<<set _foo to _TheMon + " " + "@@color:Yellow;" + $Mon.att[_WhichAttack][4] + " for " + _Heal + " health@@">>\
<<endif>>\
<<else>>\
<<AddToLog "Error in combat widget: unrecognized attack type">>\
<<endif>>\
\
<<ShowHealth>>\
<<ShowHorny>>\
\
<<set _GoldLossMessage to "">>\
<<set _GoldLost to 0>>\
<<if $Mon.TakesGold is true>>\
<<if setup.PlayerHasPerk("Rich") is true>>\
<<set _GoldLost to Math.trunc($PC[$CC][$PCcoins] / 4)>>\
<<if _GoldLost is 1>>\
<<set _GoldLossMessage to _TheMon + " takes your last piece of gold.">>\
<<elseif _GoldLost is 0>>\
<<else>>\
<<set _GoldLossMessage to _TheMon + " takes " + _GoldLost + " of your gold.">>\
<<endif>>\
<<else>>\
<<set _GoldLost to Math.trunc($PC[$CC][$PCcoins] /2)>>\
<<if _GoldLost is 1>>\
<<set _GoldLossMessage to _TheMon + " takes your last piece of gold.">>\
<<elseif _GoldLost is 0>>\
<<else>>\
<<set _GoldLossMessage to _TheMon + " takes " + _GoldLost + " of your gold.">>\
<<endif>>\
<<endif>>\
<<endif>>\
\
<<if $PC[$CC][$PChornycur] gte $PC[$CC][$PChornymax]>>\
<<CombatLog "You have been defeated!">>\
<<replace "#combatcontrols">>\
@@color:Red;You submit to the <<print $Mon.name>> in a fit of lust!@@
<<if _GoldLost > 0>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _GoldLost>>\
<<print _GoldLossMessage>>
<<endif>>\
<hr>\
<span id="KeypSpace">\
<<link "space) Continue" "DefeatSex">>
<<ClearTemporaryEffects>>\
<</link>>\
</span>\
<</replace>>\
<<elseif $PC[$CC][$PChpcur] < 1>>\
<<set $PC[$CC][$PCmisc].battleslost to $PC[$CC][$PCmisc].battleslost +1>>\
<<CombatLog "You have been defeated!">>\
<<replace "#combatcontrols">>\
@@color:Red;You have been defeated!@@
<<if _GoldLost > 0>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _GoldLost>>\
<<print _GoldLossMessage>>
<<endif>>\
<hr>\
<span id="KeypSpace">\
<<link "space) Continue" "DefeatSex">>
<<ClearTemporaryEffects>>\
<</link>>\
</span>\
<</replace>>\
<<endif>>\
\
<<if $PC[$CC][$PCcoins] < 0>>\
<<CombatLog "Error: monster took more gold than the player had. Attempting to fix.">>\
<<set $PC[$CC][$PCcoins] to 0>>\
<<endif>>\
<<ShowActiveEffects>>\
<<endif>>\
<</widget>>\
<<widget CombatUIStatsHack>>\
<<set _CUI to $args[0]>>\
<<set _CUItype to _CUI[0]>>\
<<set _CUIptr to _CUI[1]>>\
<<set _CUIunused to _CUI[2]>>\
<<set _EnchantBonuses to setup.GetEnchantBonuses($CC)>>\
<<if _CUItype is "body">>\
<<set _bp to $PC[$CC][$PCbp][_CUIptr]>>\
<<set _CUIAttackType to $PC[$CC][$PCbp][_CUIptr].attacktype>>\
<<set _CUIMinDam to _bp.mindam + ($PC[$CC][$PCstr] -10) + $PC[$CC][$PCmorphBONI].bodydam>>\
<<set _CUIMaxDam to _bp.maxdam + ($PC[$CC][$PCstr] -10) + $PC[$CC][$PCmorphBONI].bodydam>>\
<<if _CurrentClass is "barbarian">>\
<<set _CUIMinDam to _CUIMinDam + $PC[$CC][$PClevel]>>\
<<set _CUIMaxDam to _CUIMaxDam + $PC[$CC][$PClevel]>>\
<<endif>>\
<<set _CUIToHit to 100 + _EnchantBonuses.Accuracy + $PC[$CC][$PCtohit] + $PC[$CC][$PCmorphBONI].bodyth + (setup.AchievementHandler("Best Barbarian", "HAS?", -1) * 5) - $Mon.armor + $Mon.held>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CUIToHit to _CUIToHit + 50>>\
<<endif>>\
<<if _CUIToHit < 1>>\
<<set _CUIToHit to 0>>\
<<elseif _CUIToHit > 99>>\
<<set _CUIToHit to 100>>\
<<endif>>\
<<if _CUIAttackType is "poison bite">>\
<<set _CUIoutput to "(" + _CUIToHit + "% hit chance, poison)">>\
<<elseif _CUIAttackType is "immobilize">>\
<<set _CUIMaxHold to 3 * (_CUIMaxDam + $PC[$CC][$PCstr])>>\
<<set _CUIa to _MinDam + $PC[$CC][$PCstr]>>\
<<set _CUIa to _MaxDam + $PC[$CC][$PCstr]>>\
<<set _CUIHold to "" + _CUIa + "-" + _CUIb + "defense/attack, " + _CUIMaxHold + " max)">>\
<<else>>\
<<set _CUIoutput to "(" + _CUIToHit + "% hit chance)">>\
<<endif>>\
<<print _CUIoutput>>\
<<elseif _CUItype is "weapon">>\
<<DescribeItem $PC[$CC][$PCbp][_CUIptr].equip>>\
<<set _CUIAttackType to $ItemPoke.attacktype>>\
<<set _CUIMinDam to $ItemPoke.mindam + ($PC[$CC][$PCstr] -10)>>\
<<set _CUIMaxDam to $ItemPoke.maxdam + ($PC[$CC][$PCstr] -10)>>\
<<set _CUIToHit to 100 + _EnchantBonuses.Accuracy + $PC[$CC][$PCtohit] + $PC[$CC][$PCmorphBONI].th + (setup.AchievementHandler("Best Warrior", "HAS?", -1) * 5) - $Mon.armor + $Mon.held>>\
<<set _CurrentClass to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<if _CurrentClass is "warrior">>\
<<set _CUIToHit to _CUIToHit + ($PC[$CC][$PClevel] * 10)>>\
<<endif>>\
<<if _CUIAttackType is "cleave">>\
<<set _BestLumberjack to 5 * setup.AchievementHandler("Best Lumberjack", "HAS?", -1)>>\
<<if _BestLumberjack > 0>>\
<<set _CUIToHit to _CUIToHit + _BestLumberjack>>\
<<endif>>\
<<if _CurrentClass is "lumberjack">>\
<<set _CUIMinDam to _CUIMinDam + $PC[$CC][$PClevel]>>\
<<set _CUIMaxDam to _CUIMaxDam + $PC[$CC][$PClevel]>>\
<<endif>>\
<<endif>>\
<<if setup.GetEffect("rage") > 0>>\
<<set _CUIToHit to _CUIToHit + 50>>\
<<endif>>\
<<if _CUIToHit < 1>>\
<<set _CUIToHit to 0>>\
<<elseif _CUIToHit > 100>>\
<<set _CUIToHit to 100>>\
<<endif>>\
<<set _CUIoutput to "(" + _CUIToHit + "% hit chance, " + _CUIMinDam + "-" + _CUIMaxDam + " " + _CUIAttackType + " damage)">>\
<<if _CUIAttackType is "shine">>\
<<print "(no effect)">>\
<<else>>\
<<print _CUIoutput>>\
<<endif>>\
<<elseif _CUItype is "flirt">>\
<<set _FlirtCombatData to setup.GetFlirtDataAgainstMon()>>\
<<set _Physiology to _FlirtCombatData[0]>>\
<<set _ProstituteClassBonus to _FlirtCombatData[1]>>\
<<set _EquipBonus to _FlirtCombatData[2]>>\
<<set _MorphToHitBonus to _FlirtCombatData[3]>>\
<<set _MorphDamBonus to _FlirtCombatData[4]>>\
<<set _Praying to _FlirtCombatData[5]>>\
<<set _BestProstitute to _FlirtCombatData[6]>>\
\
<<set _FlirtMinDam to Math.trunc(1 + _ProstituteClassBonus + _MorphDamBonus)>>\
<<set _FlirtMaxDam to Math.trunc(_Physiology + _ProstituteClassBonus + _MorphDamBonus)>>\
<<set _FlirtToHit to 1 + Math.trunc(10 * (10 + _Physiology + _EquipBonus + _MorphToHitBonus - _Praying - $Mon.Willpower))>>\
<<if ($DebugMode is true)>>
<hr>
debug:
flirt combat data: _FlirtCombatData
To hit:
10 * (10 + _Physiology (phsy) + _EquipBonus (equip) + _MorphToHitBonus (morphtohit) - _Praying (praying) - $Mon.Willpower (monster willpower))
Computed tohit: _FlirtToHit
Combat damage: _FlirtMinDam to _FlirtMaxDam
<hr>
<<endif>>\
<<if _FlirtToHit > 100>>\
<<set _FlirtToHit to 100>>\
<<elseif _FlirtToHit < 1>>\
<<set _FlirtToHit to 0>>\
<<endif>>\
<<if _FlirtMaxDam < _FlirtMinDam>>\
<<set _FlirtMaxDam to _FlirtMinDam>>\
<<endif>>\
\
<<set _CUIoutput to "(" + _FlirtToHit + "% hit chance, " + _FlirtMinDam + "-" + _FlirtMaxDam + " lust damage)">>\
<<print _CUIoutput>>\
<<elseif _CUItype is "symbol">>\
(pray)\
<<elseif _CUItype is "bash">>\
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _CUIStunBase to $PC[$CC][$PCstr] - ($PC[$CC][$PCz] * 3) +2>>\
<<else>>\
<<set _CUIStunBase to $PC[$CC][$PCstr] - $PC[$CC][$PCfz] +2>>\
<<endif>>\
<<set _CUIStunChance to _CUIStunBase * 20>>\
<<if _CUIStunChance > 99>>\
<<set _CUIStunChance to 100>>\
<<elseif _CUIStunChance < 1>>\
<<set _CUIStunChance to 0>>\
<<endif>>\
(<<print _CUIStunChance>>% to stun)\
<<else>>\
Error in CombatUIStatsHack: <<print _CUI>>\
<<endif>>\
<</widget>>\
<<widget "DeathByFeedback">>\
<<unset $DeathBySpellFeedback>>
<<set $PC[$CC][$PCmisc].battleslost to $PC[$CC][$PCmisc].battleslost +1>>\
<<CombatLog "You have knocked youself out!">>\
<<replace "#combatcontrols">>\
@@color:Red;You have been defeated!@@
The feedback from the spell instantly knocks you out. What happens after that, you never find out.
<<if $Mon.TakesGold is true>>\
<<if setup.PlayerHasPerk("Rich") is true>>\
<<set _GoldLost to Math.trunc($PC[$CC][$PCcoins] / 4)>>\
<<else>>\
<<set _GoldLost to Math.trunc($PC[$CC][$PCcoins] /2)>>\
<<endif>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _GoldLost>>\
<<if $PC[$CC][$PCcoins] < 0>>\
Debug: monster took more gold than the player had. Attempting to fix.
<<set $PC[$CC][$PCcoins] to 0>>\
<<endif>>\
<<endif>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "Church">>
<<set $WORLD.datapasser to ["sex","wolf"]>>
<<AdvanceTime 480>>
<<ClearTemporaryEffects>>\
<</link>>\
</span>
<</replace>>\
<</widget>>\
<<widget "GetAttackArray">>\
<<AddToLog "@@color:LightGreen;GetAttackArray has been called!@@<br>">>\
<<set $AttackArray to []>>\
<<set _arcount to 0>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is $BPwield) and ($PC[$CC][$PCbp][_i].equip[0] > 0)>>\
<<DescribeItem $PC[$CC][$PCbp][_i].equip>>\
<<if $ItemPoke.tooleffect is 18>>\
<!-- gemstone -->\
<<elseif $ItemPoke.tooleffect is 8>>\
<<set _fulldesc to "brandish " + $ItemPoke.name>>\
<<set $AttackArray[_arcount] to ["symbol", _i, _fulldesc]>>\
<<AddToLog $AttackArray[_arcount]>>\
<<set _arcount to _arcount +1>>\
<<elseif $ItemPoke.tooleffect is 17>>\
<<set _fulldesc to "bash with " + $ItemPoke.name>>\
<<set $AttackArray[_arcount] to ["bash", _i, _fulldesc]>>\
<<AddToLog $AttackArray[_arcount]>>\
<<set _arcount to _arcount +1>>\
<<else>>\
<<set _fulldesc to $ItemPoke.name + " attack">>\
<<set $AttackArray[_arcount] to ["weapon", _i, _fulldesc]>>\
<<AddToLog $AttackArray[_arcount]>>\
<<set _arcount to _arcount +1>>\
<<endif>>\
<<elseif $PC[$CC][$PCbp][_i].attackdesc neq "">>\
<<set _fulldesc to $PC[$CC][$PCbp][_i].attackdesc>>\
<<set $AttackArray[_arcount] to ["body", _i, _fulldesc]>>\
<<AddToLog $AttackArray[_arcount]>>\
<<set _arcount to _arcount +1>>\
<<endif>>\
<</for>>\
\
<<if $AttackArray.length < 1>>\
@@color:Red;No valid body parts or weapons to attack with@@ Did you fill all your slots with gemstones, or were you very unlucky with transformations?
<<endif>>\
\
<<unset $ItemPoke>>\
<</widget>>\
<<timed 200ms>>\
<<audio "menu_bgm" stop>>\
<</timed>>\
<<PlayBGM "town">>\
\
<<set _throwaway to setup.InitForestCaves()>>\
\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
\
<<set $PC[$CC][$PCz] to 0>>\
<<set $PC[$CC][$PClocation] to "town">>\
\
<<MapCrescentheartNorth>>\
<hr>\
\
<<if $WORLD.datapasser is "Gravestone">>
@@color:Gold;Gravestones@@
<hr>\
<<if $RETIREES[0].name is "none">>\
Several blank gravestones are planted in orderly rows here, prepped and ready to record the names and deeds of the realm's retired heroes.
<<else>>\
Several gravestones are placed in front of the church here in town. Glancing among them you recognized the names of famous heroes now long gone.
<hr>\
<<for _i to 0; _i < $RETIREES.length; _i++>>
<<if $RETIREES[_i].name neq "none">>\
_i) <<print $RETIREES[_i].name>>, retired at level $RETIREES[_i].level after having made it to tower level $RETIREES[_i].maxtower
<<endif>>\
<</for>>\
<<endif>>\
<hr>\
<<link "Retire this character">>
<<InitPC $CC>>
<<AutoSaveLoad "set">>
<<script>>Engine.restart()<</script>>
<</link>> - This is PERMANENT
<hr>\
<<elseif $WORLD.datapasser is "MagicCircle">>
@@color:Aqua;Magic circle@@
A runic circle is engraved directly into the stone here. The runes appear dull, however, and whatever magic powers the circle appears to be inactive.
<!--
@@color:Gold;Magic Circle@@
<hr>\
@@color:Gold;Scene Navigation@@
<span id="KeypOne">\
<<link "1) Town square" "TownSquare">>
<</link>>\
</span>
-->\
<<elseif $WORLD.datapasser is "Guild">>
guild not used?
<<elseif $WORLD.tsquare is 0>>\
<<set $WORLD.tsquare to 1>>\
After a long and grueling journey, at long last you've finally reached the town of Crescentheart.
Though now that you're here, it's clear that the tales you've heard of its magnificence were exaggerated, to put it mildly. While still a town of decent size, the worn cobbelstone roads and buildings in disrepair tell the tale of a town several years past its prime. But none of it detracts from the majestic Tower of Triumph jutting out from one end of town and reaching up as far as the clouds in the sky.
The street is dotted with adventurers, and they seem to outnumber residents. Looking closer, you see more than a few sporting tails, animal ears, and assorted other mismatched body parts. Clearly tower-climbers, and from their numbers you suspect that the city's merchants survive on their business alone.
If you want, you can begin your journey into the tower immediately. But it might be wise to at least look around town first.
@@color:Yellow;Tip: You have some starter gear to equip! Try clicking 'inventory' on the sidebar, or pressing i on your keyboard!@@
<<else>>\
While but a small village, Crescentheart's town square is well-built with a central fountain and cobblestone roads. All is dwarfed by the immense Tower reaching majestically up into the sky.
<<endif>>\
<hr>
\
<<set $WORLD.datapasser to 0>>\
\
<<if $PC[$CC][$PChpcur] < 1>>\
<<if $PC[$CC][$PChunger] < 1>>\
<<set $WORLD.diedby to "Starved to death">>\
@@color:Red;You have starved to death!@@
It's unfortunate, but you do need to eat. If food is too expensive, you could try carrying around a butcher knife to carve up some of those monsters you keep fighting. Of course, that probably has side effects.\
<<AwardAchievement "Starve to death">>\
<<else>>\
<<set $WORLD.diedby to "Ran out of health in town...somehow">>\
@@color:Red;You have died!@@
@@color:Yellow;Debug: how did this happen?@@
<<endif>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "Death">>
<</link>>\
</span>
<<else>>\
<<if $WORLD.MobileMode is 1>>
@@color:Gold;Mobile mode (EXPERIMENTAL)@@
<<button "[South, to Crescentheart South]" "TownSouth">>
<<AdvanceTime 10>>
<</button>>
<<button "[West, into the Enchanted Forest]" "Forest">>
<<set $PC[$CC][$PCfz] to 1>>
<<set $PC[$CC][$PCfx] to $WORLD.ForestDims[0]>>
<<set $PC[$CC][$PCfy] to Math.trunc($WORLD.ForestDims[1] / 2)>>
<<set $WORLD.datapasser to "reset forest">>
<<AdvanceTime 30>>
<</button>>
<<button "[West, into the Enchanted Forest]" "Forest">>
<<set $PC[$CC][$PCfz] to 1>>
<<set $PC[$CC][$PCfx] to $WORLD.ForestDims[0]>>
<<set $PC[$CC][$PCfy] to Math.trunc($WORLD.ForestDims[1] / 2)>>
<<set $WORLD.datapasser to "reset forest">>
<<AdvanceTime 30>>
<</button>>
<<if $WORLD.MainQuest[0].state is "inactive">>\
<<else>>\
<<button "East, into the Tower of Triumph" "Dungeon64">>
<<AdvanceTime 10>>
<<set $PC[$CC][$PCz] to 1>>
<<set $PC[$CC][$PCx] to $WORLD.TowerOrigin[0]>>
<<set $PC[$CC][$PCy] to $WORLD.TowerOrigin[1]>>
<</button>>\
<<endif>>\
<<else>>\
@@color:Gold;Zone Navigation@@ - click on the map to visit locations
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) South, to Crescentheart South" "TownSouth">>
<<AdvanceTime 10>>
<</link>>\
</span></span>
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) West, into the Enchanted Forest" "Forest">>
<<set $PC[$CC][$PCfz] to 1>>
<<set $PC[$CC][$PCfx] to $WORLD.ForestDims[0]>>
<<set $PC[$CC][$PCfy] to Math.trunc($WORLD.ForestDims[1] / 2)>>
<<set $WORLD.datapasser to "reset forest">>
<<AdvanceTime 30>>
<</link>>\
</span></span>
<<if $WORLD.MainQuest[0].state is "inactive">>\
d) The Tower is locked
<<else>>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) East, into the Tower of Triumph" "Dungeon64">>
<<AdvanceTime 10>>
<<set $PC[$CC][$PCz] to 1>>
<<set $PC[$CC][$PCx] to $WORLD.TowerOrigin[0]>>
<<set $PC[$CC][$PCy] to $WORLD.TowerOrigin[1]>>
<</link>>\
</span></span>
<<endif>>\
<hr>
@@color:Gold;Options@@
<<link "Save and exit to character menu" "Preamble">>
<<AutoSaveLoad "set">>
<</link>>\
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
<hr>\
@@color:Gold;Debug options@@
[[TransformTest]]
<<link "Rebuild orphanage">>\
<<set $WORLD.orphanage to 2>>\
<</link>>
<<link "Locate artifacts">>
<<set _Ipsimus to setup.FindUnique(700)>>
<<set _Custodia to setup.FindUnique(701)>>
<<replace "#foo">>
<<print _Ipsimus>>
<<print _Custodia>>
<</replace>>
<</link>>
<<link "Gain Consumables">>
<<set _throwaway to setup.GiveItem($CC, [109, 0, 99, 312, 0])>>
<<set _throwaway to setup.GiveItem($CC, [109, 0, 99, 219, 0])>>
<<set _throwaway to setup.GiveItem($CC, [102, 0, 99, 125, 0])>>
<<set _throwaway to setup.GiveItem($CC, [102, 0, 99, 126, 0])>>
<<set _throwaway to setup.GiveItem($CC, [109, 0, 99, 224, 0])>>
<<set _throwaway to setup.GiveItem($CC, [109, 0, 99, 202, 0])>>
<<set _throwaway to setup.GiveItem($CC, [130, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [131, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [136, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [125, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [126, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [127, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [128, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [139, 0, 99, 0, 0])>>
<<set _throwaway to setup.GiveItem($CC, [140, 0, 99, 0, 0])>>
<</link>>
<<link "Acquire materials for Vault test">>
<<set _throwaway to setup.GiveItem($CC, [550, 0, 0, 5, 0])>>
<<set _throwaway to setup.GiveItem($CC, [122, 0, 30, 0, 0])>>
<</link>>
<<link "Legacy Vault Fill test">>\
<<FillLegacyVault>>
<</link>>\
<span id="here"></span>\
<<endif>>
<<BirthCheck>>\<<set $NoDoubleKeypress to 1>>\
\
<<timed 500ms>>\
<<audio "menu_bgm" stop>>\
<</timed>>\
<<PlayBGM "explore">>\
\
<<ClearTemporaryEffects>>\
\
<<set $PC[$CC][$PClocation] to "forest">>\
\
<<set _px to $PC[$CC][$PCfx]>>\
<<set _py to $PC[$CC][$PCfy]>>\
<<set _pz to $PC[$CC][$PCfz]>>\
\
<<if _pz > $PC[$CC][$PChfze]>>\
<<set $PC[$CC][$PChfze] to _pz>>\
<<endif>>\
<<if _pz > $WORLD.HFZE>>\
<<set $WORLD.HFZE to _pz>>\
<<endif>>\
\
<<if ($WORLD.datapasser is "reset forest") or ($ForestMap.length is 0)>>\
<<AddToLog "Arriving in Forest">>\
<<set $ForestMap to []>>\
<<set $ForestMap to setup.ForestSnake()>>\
<<set $WORLD.ForestTheme to either(1,2,3)>>\
<!-- Don't stand on trees -->\
<<set $ForestMap[_px][_py] to 0>>\
<<set $ForestMap[_px][_py+1] to 0>>\
<<set $ForestMap[_px][_py-1] to 0>>\
<<set $GameLog to $GameLog + "New forest level<br>">>\
<<set $GameLog to $GameLog + $ForestMap + "<br><br>">>\
<<else>>\
<<endif>>\
<<set $WORLD.datapasser to 0>>\
\
<!-- Material level of our best axe? -->\
<<set $WORLD.TreeCutter to setup.AxeLevel()>>\
\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "forest">>\
<<set $WORLD.dialogue to 0>>\
\
<<set _ForestLevel to $PC[$CC][$PCfz]>>\
<<if _ForestLevel is 0>>\
@@color:Red;Error:Forest should never be level zero@@\
<<elseif _ForestLevel is 1>>\
@@color:Gold;Enchanted Forest, level 1 (near town)@@\
<<else>>\
@@color:Gold;Enchanted Forest, level _ForestLevel@@\
<<endif>>\
<hr>\
<span id="right-img"></span>\
<canvas id="myCanvas" width="960" height="450" style="border:0px solid #f47373;">
Your browser does not support the HTML canvas tag.
</canvas>
<hr>\
<span id ="roomdesc"></span>\
<span id ="eventtext"></span>
<hr>\
<span id="navcontrols"><<ShowForestNavControls>></span>
<span id="debug"></span>\
\
<<set _tempname to "S64Forest-Grass1">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Grass2">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Grass3">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower1">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower2">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower3">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower4">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower5">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower6">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower7">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Flower8">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-TreeTrunk">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree1">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree2">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree3">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree4">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Forest-Tree5">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Cage">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Sign">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Grave">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Cave">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Rocks">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<timed 300ms>>\
<<ForestMoveRefresh>>\
<<set _throwaway to setup.DrawForestMap64(_px, _py, _pz, 64)>>\
<<set $NoDoubleKeypress to 0>>\
<</timed>>\
\
<<BirthCheck>>\
\
<<if $DebugMode is true>>\
<<link "Brightness circle test">>\
<<script>>
/* Create composite image canvas */
const canvas = document.createElement('canvas');
const ctx2 = canvas.getContext('2d');
ctx2.drawImage(composite_image,0,0);
/ Create new brightness filtered canvas */
const filter_canvas = document.createElement('canvas');
const filter_ctx = filter_canvas.getContext('2d');
filter_canvas.width = composite_image.width;
filter_canvas.height = composite_image.height;
filter_ctx.drawImage(composite_image, 0, 0);
/* Create circular path */
const center = {x: composite_image.width/2, y: composite_image.height/2};
const radius = 50; /* Change the radius of the circle to apply filter to different area */
const path = ctx.arc(center.x, center.y, radius, 0, 2 * Math.PI, false);
/* Clip image inside the circle */
ctx2.beginPath();
ctx2.clip();
ctx2.drawImage(filter_canvas, 0, 0);
ctx2.closePath();
/* Draw brightness filtered image on original canvas */
ctx2.drawImage(myCanvas, 0, 0);
<</script>>\
<</link>>\
<<endif>>\<<set _ChatAvailable to false>>\
<<for _i to 0; _i < $PC[$CC][$PCGerardChat].length; _i++>>\
<<if $PC[$CC][$PCGerardChat][_i] is 1>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<</for>>\
<<if $PC[$CC][$PCGerardChat][0] is 0>>\
<<set _ChatAvailable to true>>\
<<endif>>\
\
<<if $GerardTalk is "yes">>\
<<SimplePic "gerard.jpg">>\
@@color:LightGreen;General Store@@
<hr>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
\
<<if _CurrentQuestion is 0>>\
<<if $PC[$CC][$PCGerardChat][0] is 0>>\
<<set $PC[$CC][$PCGerardChat][0] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello," you greet the proprieter. "I'm $PC[$CC][$PCname]."
@@color:Aqua;Shopkeeper@@: "Gerard," the man replies. "Are you here to climb the tower?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Was it really that obvious?"
@@color:Aqua;Gerard@@: "It's pretty much the only reason people come this far north. Well, let me be the first to welcome you to Crescentheart. I run the general store here, so please come to me for any of your provisioning needs."
<!-- Unlocks -->\
<<set $PC[$CC][$PCGerardChat][1] to 1>><!-- Ask why people don't come here -->\
<<set $PC[$CC][$PCGerardChat][2] to 1>><!-- Ask about his store -->\
<<else>>\
@@color:Aqua;Gerard@@: "Hello, <<print $PC[$CC][$PCname]>>. What can I do for you?"
<<endif>>\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCGerardChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why don't people come here often?"
@@color:Aqua;Gerard@@: "Well, it's not that they don't," he explains, looking you over. "But the Goddess's Tower of Triumph is the primary draw, and it's not exactly a family-friendly tourist attraction. It's mostly adventurers. \
<<if $PC[$CC][$PCgen] > 2>>You look like you know what you're doing though, so you don't need a retired adventurer like me to tell you how it is."
<<else>>You look pretty new to to all this, so take it from a former adventurer: if you don't want to end up all messed up with tentacles for hands and <<if $PC[$CC][$PCsex] is "male">>a slime hole<<else>>a rabbit dick<<endif>> between your legs, go back to wherever you came from."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is it really that bad? Most everyone I've met so far seems pretty normal to me."
@@color:Aqua;Gerard@@: "Looks can be deceiving. Let me just say there's a reason I'm covering up everything from the neck down, and leave it at that."
<<endif>>\
<!-- unlocks -->\
<<set $PC[$CC][$PCGerardChat][3] to 1>><!-- You're an adventurer? -->\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCGerardChat][2] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I notice the shelves are mostly bare," you comment, glancing around his store. "Is this really all you sell?"
@@color:Aqua;Gerard@@: "Everyone's running a little low on account of the war," he explains. "I'm trying to expand my inventory, but it's all I can do right now to stock what you see. I'm sure the other shopkeepers will have a similar story to tell. If it weren't for Tanya's ranch, I imagine we'd all be misshapen monstrosities from eating magic-tainted forest monster meat by now."
<!-- unlocks -->\
<<set $PC[$CC][$PCGerardChat][9] to 1>><!-- who's Tanya? -->\
<<if$PC[$CC][$PCGerardChat][7] is 0>><!-- war -->\
<<set $PC[$CC][$PCGerardChat][7] to 1>>\
<<endif>>\
<<elseif _CurrentQuestion is 3>>\
<<set $PC[$CC][$PCGerardChat][3] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So, you're an adventurer?"
@@color:Aqua;Gerard@@: "Used to be," he nods. "Most of Crescentheart's pemanent residents are retired adventurers. Rina, Skitters...everyone except the psycho bitch, I suppose. Personally I came ten years ago with some friends, all of us chasing a dream to climb the tower and ascend to godhood. Until Darkoth got taken by the demons, and Neris...well, I never found out for sure what happened to her. Anyway, I saw the writing on the wall after that and retired."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And you started a store?"
@@color:Aqua;Gerard@@: "It's not a bad life," he shrugs. "Not as exciting as fighting monsters, maybe. And the pay isn't as good. But I don't have to worry about being eaten alive or raped in holes I don't even have, so there are positives."
<!-- unlocks -->\
<<set $PC[$CC][$PCGerardChat][4] to 1>><!-- How far did you get? -->\
<<set $PC[$CC][$PCGerardChat][5] to 1>><!-- Any tips? -->\
<<set $PC[$CC][$PCGerardChat][6] to 1>><!-- Psycho Bitch? -->\
<<elseif _CurrentQuestion is 4>>\
<<set $PC[$CC][$PCGerardChat][4] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How far did you get?" you ask. "In the tower?"
Gerard's eyes lose focus and he stares off into space.
@@color:Aqua;Gerard@@: "I'm not sure what level it was, but there's...a room. I mean, every floor has room of course, that's just how it's laid out. But this was something crazy. Huge room with a red checkerboard-patterned floor. And right in the middle of it there was this crazy spider monster. Upper half was human, and she had this viscious black flail that looked like it must have weighed a hundred pounds. Introduced herself and gave a big long, droning speech every time I saw her. Zetahlia. Said she was the Demon Queen of the Spiders."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sounds like some kind of boss monster."
@@color:Aqua;Gerard@@: "Probably. Anyway, Got as far as that room a couple times, but never past it."
He nervously covers his stomach, then continues.
@@color:Aqua;Gerard@@: "Let me tell you, if you ever see that thing...either kill it fast or get out of there. Don't dawdle. Believe me, you don't want to know what it does if it catches you."
<!-- unlocks -->\
<<set $PC[$CC][$PCGerardChat][8] to 1>><!-- How is the tower laid out? -->\
<<elseif _CurrentQuestion is 5>>\
<<set $PC[$CC][$PCGerardChat][5] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you have any adventuring tips for me?"
@@color:Aqua;Gerard@@: "Sure, lots of things," he shrugs. "Heal often. I recommend you get a shield right away, but understand your equipment and when to use it. Shields are cheap for how well they protect you, but they're worthless against casters so sometimes it might not be a terrible idea to carry two weapons instead. Some monsters are more or less resistant to cutting or blunt weapons, so it can be nice to have the option. Just keep in mind that while you can drink potions and use certain small items during combat, you can't change weapons or equipment until a battle is over. Also, learn some magic when you get the chance. And above all, don't be greedy. If you're hurting, it's always ok to come back to town to rest. Transformations aren't all bad. Sometimes they'll make your stonger, but then other times you might lose the hand you're carrying a weapon in, and you don't want that to happen when you're two floors up and at half health. Also, I recommend you start out in the forest if you haven't already. Newbies usually like to go straight to the tower, and trust me, that's a mistake."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why? What's so bad about the tower?"
@@color:Aqua;Gerard@@: "Tougher monsters that hit harder. Traps. And it's a maze, so if something goes wrong and you want to leave in a hurry, sometimes you can't. Plus, more stuff in there will actually kill you, whereas forest monsters mostly just like to molest you. Plus, the forest is easy to traverse. Get an axe and you can mostly chop your way straight through."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How strong should I be before I attempt the tower?"
@@color:Aqua;Gerard@@: "Up to you," he shrugs. "Some people like to step just inside and hang out near the stairs resetting the tower over and over, hoping for a lucky treasure chest. That can happen. But you're just as likely to get an unlucky crossbow bolt in your head. I recommend you talk to Rina at the guild if you haven't already. She runs a program for new adventurers to help them get started."
<!-- unlocks -->\
<<set $PC[$CC][$PCGerardChat][10] to 1>><!-- What monsters resist what attacks? -->\
<<set $PC[$CC][$PCGerardChat][11] to 1>><!-- ask about shields -->\
<<elseif _CurrentQuestion is 6>>\
<<set $PC[$CC][$PCGerardChat][6] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Who's this psycho bitch you mentioned?"
<<if $PC[$CC][$PCselene] > 0>>\
@@color:Aqua;Gerard@@: "Selinda the Witch. Steer clear of her. "
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mean Selene?"
@@color:Aqua;Gerard@@: "Sure, if that's what she's calling herself these days," he shakes his head. "Can't blame her for trying to distance herself from her past.
<<else>>\
@@color:Aqua;Gerard@@: "Selinda the Witch," he nearly growls as he says the name. "Nasty temper, and has a penchant for turning people into lizards. She'll try to pull you in with a pretty picture of how her magic can help you, but my advice is to steer clear."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Help with magic sounds good though," you admit.
@@color:Aqua;Gerard@@: "I don't exactly think she's the type to take on an apprentice. But if you want to learn magic all you need to do is find a spellbook and give it a read. I used to sell them myself, but I ran out of stock months ago when the war shut down the caravans. It takes a special ink to capture a spell on paper, and verbana root is hard to get around these parts. I don't know any alchemist who can make spell ink without it, so they're in short supply."
<<endif>>\
<<if$PC[$CC][$PCGerardChat][7] is 0>><!-- war -->\
<<set $PC[$CC][$PCGerardChat][7] to 1>>\
<<endif>>\
<<elseif _CurrentQuestion is 7>>\
<<set $PC[$CC][$PCGerardChat][7] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's this about a war?"
@@color:Aqua;Gerard@@: "Sythians from the mainland decided to seize control of the mountain pass down south. I doubt they really care about Crescentheart much, but whatever the reason they're there, that path is how most of the trade caravans get here and I'm sure a few wagons full of trade goods make easy plunder for an army."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "If they're not coming here, what do you think they're really after?"
@@color:Aqua;Gerard@@: "I couldn't say," he shrugs. "It's probably just a simple landgrab or something. Or maybe one of their local allies struck gold in the mountains and they just want to guard the claim. Who knows? I wouldn't worry about it too much though. Once you're through the mountain pass, it's still 50 miles of worthless desert and empty salt beaches to get here. I doubt they'll come this far.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any dungeons or anything down there worth checking out??"
@@color:Aqua;Gerard@@: "Probably, if you can make it through the sweltering heat and scorpions. But I haven't passed that way since I first came to Crescentheart ten years ago, so anything I could tell you would be dated. Anyway, it's kind of hard to even get there with the current state of affairs, so I wouldn't worry about it until you're a lot stronger."
<<elseif _CurrentQuestion is 8>>\
<<set $PC[$CC][$PCGerardChat][8] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mentioned dungeon rooms. What can you tell me about the tower layout?"
@@color:Aqua;Gerard@@: "Honestly you probably don't need to worry about this for a while," he shrugs. "There's a big jump in difficulty between the forest and the tower, so you should probably stick to the forest until you have at least a few fights under your belt."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok, that's fine. I'd still like to know."
@@color:Aqua;Gerard@@: "Well, the layout of the tower is flexible. It's not the same every time. The forest is just so big that it's hard to find any place you've been before, but the tower? It's the same as long as you want it to be, but regenerates itself whenenever you want. Supposedly it has something to do with the magic of the Goddess responding to the desires of her guests, but I couldn't tell you how it works. Anyway, every floor generates with a special room in it. Sometimes there's a treasure chest, or a trap, or a monster...could be anything."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do the rooms reset when the tower changes?"
@@color:Aqua;Gerard@@: "Yep, sure do," he nods. "That's why they haven't all already been emptied by other adventurers. You'll run into other people from time to time in there, by the way. So keep your guard up. There's an unspoken rule not to fight in town, but once you're in the tower, anything goes."
<<elseif _CurrentQuestion is 9>>\
<<set $PC[$CC][$PCGerardChat][9] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Who's Tanya?"
@@color:Aqua;Gerard@@: "Bartender at the tavern near the forest-end of town. Cute catgirl, you can't miss her."
<<elseif _CurrentQuestion is 10>>\
<<set $PC[$CC][$PCGerardChat][10] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mentioned that some monsters resist certain types of weapons. Anything more you can tell me? For example, why would something take less damage from swords?"
@@color:Aqua;Gerard@@: "It's hard to cut through armor. Most of the insects in the southern desert have exoskeletons for example. Also, minotaurs have pretty thick skin, so a surface cut might not reach anything important. But armor doesn't matter much if you simply bludgeon something hard enough. Meanwhile, stabbing weapons like spears and tridents are good at poking holes in the armor to reach vital organs, so they do pretty well too."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok, that makes sense. What about blunt weapons? Are they bad against anything?"
@@color:Aqua;Gerard@@: "Squishy monsters that are hard to crush. Hitting a slime or tentacle monster with a club is like trying to smack water. It just bounces them around. You have to break their skin to hurt them, but their skin isn't very tough, so cutting and stabbing weapons both work pretty well."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What about axes? They cut, but they're also big and heavy enough that it has to hurt to be hit by one even if it doesn't break the skin."
@@color:Aqua;Gerard@@: "Absolutely," he nods. "But because they're so big and heavy, that means that they tend to be slow and easier to dodge than a smaller, faster weapon. So anything that's very quick will tend to avoid the worst of the attack and at best you'll nick them in passing when they dodge."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So sounds like stabbing weapons are best?"
@@color:Aqua;Gerard@@: "No, stabbing weapons are good against armor and they're good against squishies. And they're fast, so fast opponents don't have any advantage against them. But they're bad at hitting small targets. You can kill a fly with a flyswatter, but have you ever tried stabbing one with a pencil? It doesn't have to be very fast if it only has to move a tiny bit to avoid an attack. Even half an inch off, and you simply miss."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I see your point. So, blunt weapons are bad against squishies, swords are bad against thick skin and armor, axes are bad against anything that moves quickly, and stabbing weapons are bad against things that are small?"
@@color:Aqua;Gerard@@: "Yep, you've got it. But don't stress over it too much. This will all be super important once you start adventuring in the tower or deeper into the forest. But nothing very dangerous lives close to town, so it's not anything you need to worry about right away."
<<elseif _CurrentQuestion is 11>>\
<<set $PC[$CC][$PCGerardChat][11] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Would you tell me a little bit more about shields?"
@@color:Aqua;Gerard@@: "Putting a huge chunk of wood or metal between you and an opponent makes for pretty good defense. Even just holding one will make you harder to hit, plus you can smack opponents with them to stun them briefly."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How does that work? Can I continually keep shield-bashing over and over to keep an opponent stun-locked forever?"
@@color:Aqua;Gerard@@: "No, it doesn't work that way," he explains. "//Shield bashing is an interrupt//. Only use it when your opponent is doing a powerup move. You'll see them scream, or wind up an attack...something that telegraphs that the //next// attack is going to hurt a lot. If you randomly shield-bash opponents who are only engaged in normal, fast melee attacks, it's not going to help you."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You said that shields are worthless against casters though."
@@color:Aqua;Gerard@@: "Amor doesn't protect you from spells. And most spells are fast. It doesn't take multiple rounds to cast firebolt, for example. So it can't be interrupted. You can only interrupt things that require prep time. Don't waste your time trying to shield-bash some random bunny-girl giving you flirty looks."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. Anything else?"
@@color:Aqua;Gerard@@: "You should also know that it doesn't always work. You have to be strong enough to hit hard enough to stun in the first place. Also, you can't shield bash multipe times in a row. Every time you stun an opponent, they'll be on guard for it. So even at absolute best you can only stun every //other// turn. If you do it twice in a row, you're basically just giving your opponent a free attack on you. So don't do that."
<<elseif _CurrentQuestion is 11>>\
<<set $PC[$CC][$PCGerardChat][11] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you know anything about the void rift in that building on the south side of town?"
@@color:Aqua;Gerard@@: "Across from Daphne's Jewelry? Yes, that's what's left of the Legacy Vault. Some sort of duel broke out recently, and one of the combatants managed to tear through its enclosure. The Vault box itself is bigger on the inside than the outside, and the rift you saw is what you get when extradimensional translation boundaries don't line up properly.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mean like if you put a portal inside a portal?
@@color:Aqua;Gerard@@: "More like if you burned a bag of holding, but the magic kept working without the bag to keep it anchored in reference space."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is it dangerous?"
@@color:Aqua;Gerard@@: "Oh, absolutely. It would rip you to pieces too small to see if you touched it."
<<else>>\
Error: unrecognized question: _CurrentQuestion
<<endif>>\
<hr>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<!-- unlocked by external events -->\
<<if ($PC[$CC][$PCGerardChat][11] is 0) and ($PC[$CC][$PChtze] > 4)>>\
<<set $PC[$CC][$PCGerardChat][11] to 1>>\
<<endif>>\
<<if ($PC[$CC][$PCGerardChat][12] is 0) and ($PC[$CC][$PCkills][setup.MonNameToKillPTR("Zehtalia")] > 0)>>
<<set $PC[$CC][$PCGerardChat][12] to 1>>\
<<endif>>\
\
<<for _i to 0; _i < $PC[$CC][$PCGerardChat].length; _i++>>\
<<if $PC[$CC][$PCGerardChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "Introduce yourself">>\
<<set _QuestionPool[1] to "Ask why people don't come here">>\
<<set _QuestionPool[2] to "Ask about his store">>\
<<set _QuestionPool[3] to "Ask about him personally">>\
<<set _QuestionPool[4] to "How far did you get through the tower?">>\
<<set _QuestionPool[5] to "Do you have any adventuring tips?">>\
<<set _QuestionPool[6] to "Who's this psycho bitch you mentioned?">>\
<<set _QuestionPool[7] to "Ask about the war">>\
<<set _QuestionPool[8] to "Ask about dungeon rooms">>\
<<set _QuestionPool[9] to "Who's Tanya?">>\
<<set _QuestionPool[10] to "What kind of monsters resist what attacks?">>\
<<set _QuestionPool[11] to "Would you tell me more about shields?">>\
<<set _QuestionPool[12] to "Do you know anything about the void rift on the south side of town?">>\
\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm done talking for now" "StoreGeneral">>
<<set $WORLD.gstore to 2>>\
<<AdvanceTime 5>>
<<unset $GerardTalk>>\
<</link>>\
</span>
\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix"]>>\
<<set _KeyChars to ["1","2","3","4","5","6"]>>\
\
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + ") " + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "StoreGeneral">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<else>>\
<<SimplePic "gerard.jpg">>\
@@color:LightGreen;General Store@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<if _ChatAvailable is false>>\
c) No chats available
<<elseif $PC[$CC][$PCGerardChat][1] is 2>>\
<span id="KeypC">\
<<link "c) Chat with Gerard" "StoreGeneral">>
<<set $GerardTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<else>>\
<span id="KeypC">\
<<link "c) Chat with the shopkeeper" "StoreGeneral">>
<<set $GerardTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<endif>>\
<hr>\
<<Store $GStore>>
<<endif>>\
<<SimplePic "blacksmith.jpg">>\
\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
\
<<set _ShowStore to true>>\
<<if setup.TypeOf($SmithTemp) is "string">><<else>>\
<<set $SmithTemp to "armor">>\
<<endif>>\
\
<<set _PCaddress to "lass">>\
<<if $PC[$CC][$PCsex] is "male">><<set _PCaddress to "lad">><<endif>>\
\
@@color:Gold;Smithy@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<<unset $SmithTemp>>
<</link>>\
</span>
<hr>\
<<if $WORLD.smith is 0>>\
Looking around the shop, you're unimpressed with the quality of gear on offer.
<span id="KeypC">\
<<link "c) Chat with the blacksmith" "StoreSmith">>
<<set $WORLD.smith to 1>>\
<</link>>\
</span>
<<elseif $WORLD.smith is 1>>\
<<set _ShowStore to false>>\
<<set $WORLD.smith to 2>>\
@@color:Aqua;Finley@@: "Can I help ye?" the blacksmith inquires.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hi, yes...I can't help but notice that you have only copper and bronze goods on sale. Where's the iron? Where's the mithril?"
@@color:Aqua;Finley@@: "Wot's it to ye?" he frowns at your clothes. "Ye dun' look like ye can afford any better."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Well, maybe not yet," you dither. "But I'm here to climb the tower, so hopefully my fortune will improve soon. But somehow I don't think I'll get very far if this is the best gear on sale. Isn't this town famous for adventuring? Surely I'm not the only customer who's asked."
@@color:Aqua;Finley@@: "Aye, 'tis true," he sighs. "Sadly, a quarrelsome adventurin' type stole me mithril smithin' hammer. All I hae ta work with noo is this namby pamby apprentice hammer wot's barely 'nuff fer shapin' copper an' bronze.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Anything I can do to help?
@@color:Aqua;Finley@@: "Sure, bring me mah hammer an' I'll git richt back tae work. Course, ore merchants stooped comin' fur o' tha war doon sooth. So dun expect na mithril god slayin' swords the day ye come back. But iron? Aye, I kin do that with wot I got."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any idea where I can find the adventurer who stole your hammer?"
<<if $WORLD.SmithQuests[0] is 0>>\
@@color:Aqua;Finley@@: "I cannae say fer sure, but he wos a swordsman bah the look o' him. Adventurin' type. Carryin' a bigol' axe, so prolly headin' deep inna' tha forest would be mah guiss."
<<else>>\
<<set $WORLD.smith to 3>>\
@@color:Aqua;Finley@@: "I cannae say fer sure, but she was a mighty braw keekin' mage lassie. And she warn't no fledglin' charmer neither. Carryin' a bigol' axe, so prolly headin' deep inna' tha forest would be mah guiss."
<<endif>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) continue" "StoreSmith">>
<</link>>\
</span>\
<<elseif $WORLD.smith is 2>>\
Looking around the shop, the quality of gear on offer seems fairly low.
<span id="KeypC">\
<<link "c) Chat with the blacksmith" "StoreSmith">>
<<set $WORLD.smith to 3>>\
<</link>>\
</span>\
<<elseif $WORLD.smith is 3>>\
<<set _NPC to ["lad","lassie"]>>\
@@color:Aqua;Finley@@: "Any progress on findin' that adventurin' <<print _NPC[$WORLD.SmithQuests[0]]>> an' bringin' me mah hammer?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Not yet."
@@color:Aqua;Finley@@: "Oh, aye? Well, then, be sure tah check oot me wares. Wot ye see is wot ye got."
<<elseif $WORLD.smith is 4>>\
<<set $WORLD.smith to 5>>\
<<set $WORLD.smithLevel to 1>>\
<<Restock "smith">>\
\
<!-- does player have hammer? where? -->\
<<set _hammer to -1>>\
<<for _H to 0; _H < $PC[$CC][$PCinven].length; _H++>>\
<<set _CheckMe to $PC[$CC][$PCinven][_H]>>\
<<if (_CheckMe[0] is 101) and (_CheckMe[1] is 105)>>\
<<set _hammer to _H>>\
<<endif>>\
<</for>>\
<<if _hammer > -1>>\
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _hammer)>>\
<<endif>>\
\
<<if $WORLD.SmithQuests[1] is "smith has it">>\
@@color:Aqua;Finley@@: "Oi, <<print _PCaddress>>. That boggin' thief cam back beggign 'n' crawling tae return mah nicked hammer. Ye did a guid proper bit o' wirk fur me. Thankee kindly."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wow, really? Kind of wasn't expecting that, but that's good news."
@@color:Aqua;Finley@@: "Ayt, 'tis. Be gue fer mah wallet, tae."
<<elseif $WORLD.SmithQuests[1] is "player has it">>\
@@color:Aqua;Finley@@: "Oi, <<print _PCaddress>>. Ony luck takin' back mah hammer?"
<<if _hammer < 0>>\
You're about to say yes when you realize you don't have the hammer on you.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sorry, not yet. I'll let you know."
@@color:Aqua;Finley@@: "A'richt. Tak' yer time. Bit ah cannae upgrade mah stock wi'oot it."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes, here it is," you hand it over.
@@color:Aqua;Finley@@: "Aye, that's guid. Ah'l git tae wirk richt awa' makin' soem freish stock fur ye."
<<endif>>
<<elseif $WORLD.SmithQuests[1] is "player doesn't know smith has it">>\
@@color:Aqua;Finley@@: "Oi, <<print _PCaddress>>. Welcome to me stahr. Ye'r in luck. A've juist hud a stroke o' guid fortuin, 'n ahll be stocking eyeurn goods likelie fer noo awn."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Glad to hear it. Out of curiosity, what happened?"
@@color:Aqua;Finley@@: "Ah hud a bawherr bit o' misfortune wi' some missin' eequipment, buit tis bin returned noo sae ah kin git back tae wirk aw' proper lik'."
<<else>>\
Error: smithquesst1 is <<print $WORLD.SmithQuests[1]>>. Attempting to fix by bumping quest progression to next known state. Enjoy your eyeurn gear.
<<endif>>\
<<elseif $WORLD.smith is 5>>\
<!-- primed for the next forest quest: hunt ore? -->\
The shop is presently stocking iron quality items.
<span id="KeypC">\
<<link "c) Chat with the blacksmith" "StoreSmith">>
<<set $WORLD.smith to 6>>\
<</link>>\
</span>\
<<elseif $WORLD.smith is 6>>\
<<set $WORLD.smith to 5>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'm liking the iron gear, but is this the best you can make?"
@@color:Aqua;Finley@@: "Na, iron is wee mair than bairn claes" he chuckles. "Hae ye ever heard o' steel?
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I have. What do you need to be able to make it?"
@@color:Aqua;Finley@@: "Ah hae a' th' iron a'm needin' tae mak' it," he scractes his beard. "Bit whit ah pure need is some sort o' flux fer purificatin' it."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any idea Where can I find flux?"
<<if $WORLD.bridge > 0>>\
@@color:Aqua;Finley@@: "If it wur me a'd huv a go exploring th' southern desert. Shouldn't be tae solid tae fin' if ye dinnae mynd a bawherr o' solid labor wi' a pick."
<<else>>\
@@color:Aqua;Finley@@: "Hell if ah noo," he shrugs. "Ah used tae pay adventurers tae bring it back fae th' southern desert. Bit wi' th' bridge smashed, a dinnae."
<<endif>>\
<<elseif $WORLD.smith is 7>>\
<<set $WORLD.smithLevel to 2>>\
<<set $WORLD.smith to 8>>\
<<Restock "smith">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Finley. I found a whole bunch of this white powdery rock in a desert cave out south. Can you use it?"
@@color:Aqua;Finley@@: "Aye, <<print _PCaddress>>," he smiles, rubbing the powder between his fingers and sniffing it. "This glorious bit o' rock stoor 'ere is dolomite, an it's exactly whit a'm needin'. Ahl git tae upgrading mah goods tae steel richt awa'."
<<elseif $WORLD.smith is 8>>\
<!-- primed for the next forest quest: ??? -->\
The shop is presently stocking steel quality items.
c) No chats available
<<else>>\
@@color:Aqua;Finley@@: "Can I help ye?" the blacksmith inquires.
<<endif>>\
<<if _ShowStore is true>>\
<hr>\
<span id="SmithButtons"><<ShowSmithButtons>></span>
\
<span id="SmithStores">\
<<if $SmithTemp is "weapons">>\
<<Store $Smith>>\
<<elseif $SmithTemp is "armor">>\
<<Store $SmithArmor>>\
<<else>>\
Error in SmithTemp: $SmithTemp
<<endif>>\
</span>\
<span id="storereport">\
</span>\
<<endif>>\
<<SimplePic "witch.jpg">>\
@@color:LightGreen;Witch's Den@@
<<if ($WORLD.selene is 0) or ($WORLD.selene is 2)>>\
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>\
<<AdvanceTime 5>>
<<set $WORLD.selene to 0>>
<</link>>
</span>\
<<endif>>\
<hr>\
<<set _ExitLinks to "base">>\
<<set _Witch to "The Witch">>\
<<if $PC[$CC][$PCSeleneChat][1] is 2>>\
<<set _Witch to "Selene">>\
<<endif>>\
<<if $WORLD.LegacyVault is 1>>\
<<if $PC[$CC][$PCSeleneChat][12] is 0>>\
<<set $PC[$CC][$PCSeleneChat][12] to 1>>\
<<endif>>\
<<endif>>\
\
\
<<set _ChatAvailable to false>>\
<<for _i to 0; _i < $PC[$CC][$PCSeleneChat].length; _i++>>\
<<if $PC[$CC][$PCSeleneChat][_i] is 1>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<</for>>\
<<if $PC[$CC][$PCSeleneChat][0] is 0>>\
<<set _ChatAvailable to true>>\
<<endif>>\
\
<<if $WORLD.selene is 0>>\
<<set _ExitLinks to "store">>\
<<if $PC[$CC][$PCSeleneChat][1] is 2>>\
<<if random(1,2) is 1>>\
Entering the hovel, you find Selene stirring her cauldron and chanting. Not wanting to interrupt, you wait patiently as she fetches a vial from a shelf and empties it into the cauldron. Instantly the brew bursts in flame, and she scoops up a metal bowl full and takes a sip.
<<if random(1,2) is 1>>\
"Hmm," she tosses it aside with disdain. "Needs more <<print either("salt","pepper","onion","garlic")>>."
<<else>>\
"Welcome <<print $PC[$CC][$PCname]>>," she turns to you at last. "What brings you to the Wayward Witch?"
<<endif>>\
<<else>>\
"Welcome <<print $PC[$CC][$PCname]>>," Selene greets you. "What brings you to the Wayward Witch?"
<<endif>>\
<<else>>\
Entering the hovel, you find a witch stirring a large iron cauldron and chanting . Not wanting to interrupt her casting, you wait patiently as she fetches a vial from a shelf and empties it into the cauldron. Instantly the brew bursts in flame, and she scoops up a metal bowl full and takes a sip.
<<if random(1,2) is 1>>\
"Hmm," she tosses it aside disdaindally. "Needs more <<print either("salt","pepper","onion","garlic")>>."
<<else>>\
"Welcome adventurer," she turns to you at last. "What brings you to the Wayward Witch?"
<<endif>>\
<<endif>>\
\
<<if _ChatAvailable is false>>\
c) No chats available
<<else>>\
<span id="KeypC">\
<<link "c) chat" "StoreSelene">>\
<<set $WORLD.selene to 1>>\
<<set $WORLD.datapasser to 0>>\
<</link>>
</span>\
<<endif>>\
\
<<set _ReagentCheck to false>>\
<<for _i to 0; _i < $WORLD.SeleneQuests.length; _i++>>\
<<if $WORLD.SeleneQuests[_i] is 2>>\
<<set _ReagentCheck to true>>\
<<endif>>\
<</for>>\
<<if _ReagentCheck is true>>\
<span id="KeypH">\
<<link "h) Turn in alchemical herbs" "StoreSelene">>
<<set $WORLD.selene to 3>>\
<<set $WORLD.datapasser to 0>>\
<</link>>
</span>\
<<endif>>\
<<elseif $WORLD.selene is 1>>\
<<set _ExitLinks to "questions">>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
<<if _CurrentQuestion is 0>>\
<<if $PC[$CC][$PCSeleneChat][1] is 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Selene."
@@color:Red;<<print _Witch>>@@: "<<print either("Ahh","Hello","Hey")>>, <<print $PC[$CC][$PCname]>>. <<print either("What can I do for you?","How's my favorite customer today?","Still with us, I see.")>>"
<<else>>\
<<set $PC[$CC][$PCSeleneChat][0] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello. I'm here to explore the tower. My name is <<print $PC[$CC][$PCname]>>."
@@color:Red;<<print _Witch>>@@: "A pleasure to make your acquaintence," she nods. "Tower-climbers are most welcome here. Or at least their gold is. Though I'm sorry to say my shop is in a sorry state just now."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "This is a store? What do you sell besides empty bottles?"
@@color:Red;<<print _Witch>>@@: "Potions, mostly, but my stock is pretty low right now. The southern caravan is blocked by that pesky war down south, so I haven't been getting my usual shipments lately."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Can't you source herbs locally?"
@@color:Red;<<print _Witch>>@@: "Probably, but I'm not an adventurer," she shrugs. "I did try hiring one through the guild, but he never came back so I assume he either died horribly or lost too many battles. If he's still alive, he's probably a half <<print either("bunny","fox","goblin")>>, half <<print either("cat","goo-girl","tentacle-monster")>> hybrid with <<print either("twelve vaginas","watermelon-sized tits","an overbite")>> <<print either("locked in a cage","getting gang-banged by goblins","getting gang-banged by hellhounds","begging for the sweet release of death","giving blowjobs to monsters just to have something to eat")>> by now."
<<endif>>\
\
<!-- Unlocks -->\
<<if $PC[$CC][$PCSeleneChat][1] is 0>>\
<<set $PC[$CC][$PCSeleneChat][1] to 1>><!-- ask her about herself -->\
<<endif>>\
<<if $PC[$CC][$PCSeleneChat][2] is 0>>\
<<set $PC[$CC][$PCSeleneChat][2] to 1>><!-- ask about the tower -->\
<<endif>>\
<<if $PC[$CC][$PCSeleneChat][3] is 0>>\
<<set $PC[$CC][$PCSeleneChat][3] to 1>><!-- ask about (spelbooks?) and potions -->\
<<endif>>\
<<if $PC[$CC][$PCSeleneChat][10] is 0>>\
<<set $PC[$CC][$PCSeleneChat][10] to 1>><!-- ask about monsters -->\
<<endif>>\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCSeleneChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's your name?"
@@color:Red;Selene@@: "I'm Selene," she curtsies. "Though I'm mostly known as the Wayward Witch by the town's residents. Or 'that nut in in a hut' by a few with an unusually long memory. You'd think that name would have died out after they burned my hut down. That's why I'm living in this shack in the wall right now."
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Selene? That's a nice name."
@@color:Red;Selene@@: "Thanks. A nice name plus 5 gold will buy five gold worth of squirrel nutsucks in these parts."
<<endif>>\
<!-- unlocks -->\
<<set $PC[$CC][$PCSeleneChat][4] to 1>><!-- Why did they burn down your hut? -->\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCSeleneChat][2] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can you tell me about the tower?"
@@color:Red;Selene@@: "Ahh, the tower," she smirks. "Or, the //Tower of Triumph, Corporeal Vestment of the Goddess of Primal Darkness// if you want to be formal about it. But just between you and I, I prefer to think of it as 'the nasty deathtrap that brings customers and fools to my shop.'"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You've never ventured inside?"
@@color:Red;Selene@@: "Can't you tell?" she gestures up and down her body with a flourish. "Do you see any missing limbs? Lizard tails? Bat wings? You think I'm hiding a 12 inch cock under this dress? No, I'm one of the few residents of Crescentheart who are still 100% pure human with all the original parts, and no hidden extras. And I'd prefer to keep it that way, thank you."
<!-- Unlocks -->\
<<set $PC[$CC][$PCSeleneChat][11] to 1>><!-- how does transformation happen also unlocked by 11 -->\
<<elseif _CurrentQuestion is 3>>\
<<set $PC[$CC][$PCSeleneChat][3] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mentioned potions. What can you tell me about those?"
@@color:Red;Selene@@: "Ahh, the wonders of alchemy. Best shortcut to magic there is. Sure, it's nice to to be able to toss out spells yourself, but potions don't run out of mana. On the other hand, you're probably better off casting an explosive fire spell than drinking a fire potion. Ideally of course, anyone planning to survive as an adventurer will keep both options available, but not everyone can be a mage, whereas anyone can carry a few potions around. I've never seen anyone transformed so badly they no longer had a mouth to drink with."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How smart do you have to be to learn magic?"
@@color:Red;Selene@@: "Well, technically any idiot can learn, but you'll need at least a certain amount of intellect to be any good at it."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How can I learn?"
@@color:Red;Selene@@: "Once in a while you might find an old spellbook in the tower, but the easiest way is to visit the College of Magic out in the desert down south. You'll have to pass some trials, but it's well worth the trip if you're strong enough to not die horribly along the way."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What about potions? Can you sell me those?"
@@color:Red;Selene@@: "I'd love to," she frowns. "But unfortunately I'm out of materials at the moment. I don't suppose you'd be willing to do a witch a favor and go hunting up some alchemical reagents?"
<!-- Unlocks -->\
<<set $PC[$CC][$PCSeleneChat][6] to 1>><!-- Offer to help with ingredients -->\
<<elseif _CurrentQuestion is 4>>\
<<set $PC[$CC][$PCSeleneChat][4] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why did they burn down your hut?"
@@color:Red;Selene@@: "I never got a very good explanation for that," she shrugs. "Probably just superstitious yokels afraid of me for being a witch. Though it probably didn't help matters any that I turned that one excessively handsy-guy into a salamander. Or I suppose it might have something to do with that thousand gold I borrowed from the orphanage."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I don't recall seeing an orphanage in town."
@@color:Red;Selene@@: "Unfortunately it burned down later that night. Breaks my heart, all those poor orphans. May their souls rest in peace knowing that the money in their food and clothing fund was put to good use."
<!-- Unlocks -->\
<<set $PC[$CC][$PCSeleneChat][5] to 1>><!-- Did you seriously burn down an orphange? -->\
<<elseif _CurrentQuestion is 5>>\
<<set $PC[$CC][$PCSeleneChat][5] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Did you seriously burn down an orphanage?"
@@color:Red;Selene@@: "No, of course not," she seems annoyed by the question. "It was a complete coincidence, and nobody survived to identify me, so don't listen to anyone who says otherwise."
<<elseif _CurrentQuestion is 6>>\
<<set $PC[$CC][$PCSeleneChat][6] to 2>>\
<<for _SQ to 0; _SQ < $WORLD.SeleneQuests.length; _SQ++>>\
<<if $WORLD.SeleneQuests[_SQ] is 0>>\
<<set $WORLD.SeleneQuests[_SQ] to 1>>\
<<endif>>\
<</for>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes, I'd love to help you procure some reagents"
@@color:Red;Selene@@: "Really?" she seems surprised, but quickly recovers. "Great! I'd been getting herbs from the southern caravan, but with that gone our only option is to find local sources. Unfortunately I can't even tell you what's out there, let alone what I'd be able to make from it. I suggest you start by exploring the forest to the west of town, and bringing me any sort of flower or plant you can. I'll figure out the rest from there."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You're an alchemist but you don't even know what the local plants do?"
@@color:Red;Selene@@: "I'm a //witch//," she corrects you. "And a beautiful one at that. A beautiful witch who is not an adventurer and who wants very much to not get gang-raped by forest monsters and start growing dog ears and rabbit penises out of my face. That forest is dangerous, and if you even manage to come back at all, odds are good you'll come back a horrible mutant. But that's a risk I'm willing to take."
<<elseif _CurrentQuestion is 7>>\
<<set $PC[$CC][$PCSeleneChat][7] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can you tell me about the magic of the tower?"
@@color:Red;Selene@@: "I only know the mythology behind it. When the Goddess of Primal Darkness made contact with the lower realms. From out her infinite depths, possibilities that had been unmanifest became realized, and our entire world was born. The tower is suppose to be the point of contact through which that change was inducted."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is any of that true?"
@@color:Red;Selene@@: "Who knows? If it happened at all, it was thousands of years before I was born. The transformation magic is obviously real so there's probably something to it, but a thousand years is a long time for important details to get changed around through repeated tellings. Anyway, the top of the tower is supposed to house a shrine that's the closest you can get to the Goddess without dying, and right on the edge is where the greatest potential for transformation is supposed to be. Rather than just picking up body parts, supposedly you can ascend to a higher state of being entirely."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mean, become a god?"
@@color:Red;Selene@@: "So they say," she nods, then shrugs. "But if anyone knows the truth, they haven't come back to tell their good friend Selene about it."
<<elseif _CurrentQuestion is 8>>\
<<set $PC[$CC][$PCSeleneChat][8] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: ""
@@color:Red;Selene@@: ""
<<elseif _CurrentQuestion is 9>>\
<<set $PC[$CC][$PCSeleneChat][9] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: ""
@@color:Red;Selene@@: ""
<<elseif _CurrentQuestion is 10>>\
<<set $PC[$CC][$PCSeleneChat][10] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can you tell me about the monsters of the land?"
@@color:Red;Selene@@: "Which, the tower monsters or the forest monsters?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Both?"
@@color:Red;Selene@@: "Different breeds entirely," she shrugs. "Forest 'monsters' are mostly people who've been transformed into half-human/half-animal hybrids by local magic. Bunny-girls, centaurs, fox and wolf men and the like. Sometimes you'll find fairly normal animals that are the base forms from which these transformations happen. Ordinary horses and wolves for example. The magic emanating from the tower affects them as much as anybody. But they can't climb the tower to seek it out so they try to ascend in the next best way: though sexual exchange with higher forms, like humans. You get animal parts and they get...something, probably. At least that's my theory."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And what about tower monsters?"
@@color:Red;Selene@@: "They're actual monsters. Far more dangerous."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Like what?"
@@color:Red;Selene@@: "Goblins, slimes, tentacle monsters, minotaurs, you name it. The higher levels house actual demons. Or so I've been told. You wouldn't catch me setting foot in there, so I can only repeat what my customers tell me. I suppose maybe it's actually a huge garden party in there with free beer and biscuits, and everyone's been lying to me this whole time. But I doubt it."
<!-- Unlocks -->\
<<set $PC[$CC][$PCSeleneChat][7] to 1>><!-- ascension magic of the tower -->\
<<set $PC[$CC][$PCSeleneChat][11] to 1>><!-- how does transformation happen also unlocked by 2 -->\
<<elseif _CurrentQuestion is 11>>\
<<set $PC[$CC][$PCSeleneChat][11] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How does transformation work? What causes it?"
@@color:Red;Selene@@: "Why so interested?" she frowns at you. "You're not planning on doing it yourself, are you?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...I just want to know more about how it all works. I'm planning on climbing the tower, so the more information I have the better my chances of survival."
@@color:Red;Selene@@: "Right," she seems unconvinced but continues anyway. "Mostly it's caused by sex and food. But not just any sex. You can sex up any monster you like without transforming, but if you're raped by one, they have a good chance of making you a little bit like they are."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So let's say I fight the exact same monster twice and win once and lose once. If it rapes me I'll be transformed, but if I rape it back I get off totally scot free?"
@@color:Red;Selene@@: "Yes," she nods. "Don't ask me why. Nobody knows. And it doesn't matter what sex is doing the raping, so it's not about simple fluid exchange. Maybe there's some royal court wizard out there who could explain the magic better, but I'm just a hedge witch."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And food?"
@@color:Red;Selene@@: "If you eat or drink a part of a monster...meat, semen or breast milk typically, that will transform you instantly in some way, no sex required."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So blowjobs are dangerous?"
@@color:Red;Selene@@: "No, not like that," she shakes her head. "Fluids consumed during sex are safe provided you won the battle that led up to the encounter. But meat or fluids taken and consumed later will cause transformation. I sell bottles to collect fluids if you're interested. Or you can probably find a butcher knife from somebody else if that's more to your taste. Meat has the advantage that it also reduces hunger. I don't recommend transforming if you can avoid it, but it probably beats starving to death."
<<elseif _CurrentQuestion is 12>>\
<<set $PC[$CC][$PCSeleneChat][12] to 2>>\
<<set $PC[$CC][$PCSeleneChat][14] to 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Selene. Do you know anything about the void rift on the south end of town?"
@@color:Red;Selene@@: "You mean The Legacy Vault? Sure, it's a standard extradimensional storage rift like you'd see in any major city. Pretty rare to have one out in the sticks like this, but the Tower attracts a lot of high-powered wizards, and a few of them got bored and cobbled it together a few years ago."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What does it do?"
@@color:Red;Selene@@: "It keys a pocket dimension to your ancestral line and lets anyone directly related to you access it. Mostly adventurers use it to transfer equipment to their descendants. A few of my customers swear by it, but I'm not a homeless adventurer getting raped to death by <<print either("trolls","hellhounds","tower monsters")>> every few days, so I haven't much use for it myself."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any idea how to fix it?"
@@color:Red;Selene@@: "I hadn't realized it was broken," she raises an eyebrow. "But it probably just ruptured a leak on the inside that needs to be plugged. Shouldn't be difficult, but dimensional work takes a lot of energy because you're on the wrong side of the cube/tesseract law. Find somebody to handle the repair and I can be the battery for a small sum of 5000 gold. Or find an idiot with a huge mana pool and I'll do the repair, either way. But yeah, 5000 gold for my help."
<<if $WORLD.house.piggybank + $PC[$CC][$PCcoins] < 1000>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Really? 5000? That's a crazy bunch of money."
@@color:Red;Selene@@: "Maybe don't worry about it for now and try again later. It's possible you're simply too early game for this."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Are you sure this is something you can help with? You didn't even know it was broken."
@@color:Red;Selene@@: "I'm a witch, not a gossip," she huffs. "Just because I'm out of the loop on current events doesn't make my magic any less powerful. I won't be able to do it all on my own, but I'm pretty sure you won't be able to do it without me unless you're friends with an archmage."
<<endif>>
<<elseif _CurrentQuestion is 13>>\
<<set $PC[$CC][$PCSeleneChat][13] to 2>>\
<<if $WORLD.orphanage is 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Selene. Do you know anything about that burned-down building on the south end of town?"
@@color:Red;Selene@@: "No, not a thing," she smiles. But the smile doesn't reach her eyes. "Whatever would you be asking me for?"
<<if $PC[$CC][$PCSeleneChat][5] is 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Didn't you mention something about an orphanage burning down?"
@@color:Red;Selene@@: "Oh, right!" she laughs nervously. "That. Wooden building?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes."
@@color:Red;Selene@@: "Sign out front that says it's an orphanage?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes."
@@color:Red;Selene@@: "Sorry, doesn't ring a bell," she shrugs, then goes back to stirring her cauldron.
<<elseif $PC[$CC][$PCSeleneChat][5] is 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I was just wondering if maybe that was the orphanage that you didn't burn down."
@@color:Red;Selene@@: "Oh, that!" she laughs nervously. "I suppose it's possible. I don't frequent that part of town very often."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I just thought you might know something about it."
@@color:Red;Selene@@: "Nope, not a thing," she takes a thoughtful sip from her cauldron, then goes back to stirring.
<<endif>>\
<<elseif ($WORLD.orphanage is 1) or ($WORLD.orphanage is 2)>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Selene. I've rebuilt the orphanage on the south end of town."
@@color:Red;Selene@@: "What?" she frowns. "What would you go and do a thing like that for?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So the towns' orphans will have somewhere to go?"
@@color:Red;Selene@@: "Whatever," she rolls her eyes and goes back to sitting her cauldron. "But if it accidentally burns down one day, just remember that it wasn't my fault."
<<else>>\
Error: unrecognized orphanage state: ($WORLD.orphanage)
<<endif>>\
<<elseif _CurrentQuestion is 14>>\
<<if $WORLD.LegacyVault > 1>>\
(Minor) error: Selene dialogue option 14 should have been removed by Legacy Vault construction. Fixing.
<<set $PC[$CC][$PCSeleneChat][14] to 2>>\
<<else>>\
<<if $PC[$CC][$PCcoins] > 4999>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 5000>>\
<<set $PC[$CC][$PCSeleneChat][14] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'd like to take you up on your offer to help repair the Legacy Vault. Here's 5000 gold."
@@color:Red;Selene@@: "Oh, you're actually paying? <<print either("Ok, Great!","Woo! Score!")>> Head over when you're ready, and I'll be there."
<<else>>\
<<set _r to random(1,4)>>\
<<if _r is 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "5000 gold is a lot of money."
@@color:Red;Selene@@: "I know, right?" she smiles dreamily. "When are you handing it over?"
<<elseif _r is 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is there any way I could talk you down from 5000 gold?"
@@color:Red;Selene@@: "Absolutely," she nods agreably. "Offer me a bribe."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...uhh, ok. What if I offered you say, 1000 gold?"
@@color:Red;Selene@@: "I will happily take that bribe, and lower my price for helping you to 4000 gold."
<<elseif _r is 3>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Isn't 5000 gold a lot of money for this?"
@@color:Red;Selene@@: "I supose that depends on whether you have somebody else who'll do it for less."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'd really like your help with the vault. But I don't have 5000 gold."
@@color:Red;Selene@@: "I'd really like 5000 gold. But I don't care whether the vault gets repaired."
<<endif>>\
<<endif>>\
<<endif>>\
<<elseif _CurrentQuestion is 15>>\
Selene dialogue 15
<<endif>>\
<<elseif $WORLD.selene is 2>>\
<<set _ExitLinks to "store">>\
@@color:Red;Selene@@: "Anything else I can do for you?"
<<if _ChatAvailable is false>>\
c) No chats available
<<else>>\
<span id="KeypC">\
<<link "c) chat with Selene" "StoreSelene">>\
<<set $WORLD.selene to 1>>\
<<set $WORLD.datapasser to 0>>\
<</link>>
</span>\
<<endif>>\
<<elseif $WORLD.selene is 3>>\
<<set $WORLD.selene to 2>>\
<<set _ExitLinks to "continue">>\
<<set _WhichHerb to "error">>\
<<for _i to ($WORLD.SeleneQuests.length -1); _i > -1; _i-->>\
<<if $WORLD.SeleneQuests[_i] is 2>>\
<<set _WhichHerb to _i>>\
<<endif>>\
<</for>>\
\
<<set $WORLD.SeleneQuests[_WhichHerb] to 3>>\
<<Restock "selene">>\
\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey Selene. I have some kind of forest plant for you."
<<if _WhichHerb is 0>>\
@@color:Red;Selene@@: "Daisies?" she looks over the white flowers. "These are pretty common in a lot of places. Nothing special, but I should be able to make various hair dyes out of them. It's an easy recipe, so I'll start stocking them right away."
<<elseif _WhichHerb is 1>>\
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Red;Selene@@: "I think that's Skretch Grass" she frowns. "Not very much I can do with that besides, well...there is //one// thing I can make, but you probably wouldn't be interested."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's that?"
@@color:Red;Selene@@: "A fertility-enhancing drink to help girls get pregnant. It won't do anything for a man though. Probably. I think. To be fair I've never known anyone to test it, but I don't recommend it."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Isn't there anything else you can do with it? Seems like a waste."
@@color:Red;Selene@@: "Could probably make something that would reverse the effect and turn it into a contraceptive."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I already can't become pregnant on account of not being a woman."
@@color:Red;Selene@@: "Right. Well, what about an aphrodisiac? Monsters can pick up on the scent of a girl in heat. I bet I could make an ointment that would reproduce that scent."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So they'll try to rape me?"
@@color:Red;Selene@@: "Well, get out there and bring me something else if you don't like it."
<<else>>\
@@color:Red;Selene@@: "I think that's Skretch Grass," she blinks. "I can make a couple things out of it, but it's most well-known as the base ingredient for fertility agents."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What would those do?"
@@color:Red;Selene@@: "Make it easy for you to become pregnant."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh."
@@color:Red;Selene@@: "I'll go ahead and start stocking Fertili-tea just in case you want to get knocked up by a boar or something."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I, uhh...really don't think i'd be interested in that."
@@color:Red;Selene@@: "You wouldn't?" she tilts her head. "Well, that's no problem. It also makes a pretty decent aphrodisiac. So if any lonely boars come by, I'll be able to sell them ointment that will dirve you so mad with lust that you'll be spreading your legs begging them to breed you full of little boar babies."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wait, what? Who's side are you even on?"
@@color:Red;Selene@@: "Mine!" she smiles. "This will make me a lot of money. Thanks."
<<endif>>\
<<elseif _WhichHerb is 2>><!-- sunflowers -->\
@@color:Red;Selene@@: "Sunflowers?" she quirks up one eyebrow. "In this town, why am I not surprised?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What do you mean?"
@@color:Red;Selene@@: "I can use sunflowers to make a bunch of things, but most of them are body cosmetics. Penis growth, breast reduction, that sort of thing."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's nice and all, but how will that help me climb the tower?"
@@color:Red;Selene@@: "It probably won't," she admits. "Although you might find it useful if you're planning to tease rather than beat monsters into submission I suppose."
<<elseif _WhichHerb is 3>>\
@@color:Red;Selene@@: "Red roses?" she frowns. "That's going to be difficult."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's the matter? Are they not useful?"
@@color:Red;Selene@@: "No, they're certainly useful. Rose petals area crucial ingredient in various types of resistence potions. They don't last very long, but they reduce the amount of damage you take from various effects. Fire and magic primarily."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That sounds great. What's the catch?"
@@color:Red;Selene@@: "The other ingredients are expensive and a little hard to come by. I'll start brewing them, but I probably won't be able to make very many of them. You should probably plan to use them sparingly."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Shouldn't be a problem. Fire and magic attacks don't seem to be very common."
<<elseif _WhichHerb is 4>>\
@@color:Red;Selene@@: "Goose berries?" she smiles as you hand them over.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You seem excited. What can you do with these?"
@@color:Red;Selene@@: "Absolutely!" she smiles then pops one into her mouth. "They make fantastic smoothies."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I was thinking more in terms of potions."
@@color:Red;Selene@@: "Oh," she seems disappointed. "Well, they do make a pretty good antivenom I suppose."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That sounds like a real winner."
@@color:Red;Selene@@: "Yes, but they taste a lot better raw than they do in potions," she sneaks a few more into her mouth before firing up her cauldron.
<<elseif _WhichHerb is 5>><!-- brown mushrooms -->\
@@color:Red;Selene@@: "Oh, are those hazorgoth brown mushrooms?" she seems very interested. "These are excellent. I can make a pretty adequate healing potion out of these."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Only adequate?"
@@color:Red;Selene@@: "Would you prefer inadequate? I could dilute them down if you'd like."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, no...adequate is ok I guess."
@@color:Red;Selene@@: "Great! I'll get started right away."
<<elseif _WhichHerb is 6>>\
@@color:Red;Selene@@: "Azalea?" she looks thoughtful. "Those are easy to work with, but they're sort of a mixed bag."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What do they make?"
@@color:Red;Selene@@: "Rage potions. They'll send you into a berserker fury that massively increases your ability to hit an opponent with physical attacks. But when you're that focused on mangling an opponent, it tends to be harder to defend yourself."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Extra attack for less dodge? That seems like a reasonable compromise."
@@color:Red;Selene@@: "Also, you'll be reduced to a raving, mindless beast. So it will be hard to do much besides hit your opponent until it wears off. "
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hmm. Ok."
<<elseif _WhichHerb is 7>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Selene. I found a pretty blue flower."
@@color:Red;Selene@@: "Caerulus blossom?," she smiles. "How wonderful! Where ever did you find this?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Out in the forest, like all the others. What can you make with it?"
@@color:Red;Selene@@: "Nothing important," she pockets the flower, her eyes shifting around nervously. "Oh, also water walking potions."
<<elseif _WhichHerb is 8>>\
@@color:Red;Selene@@: "Unnamed flower 9 has not been implemented!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh, that's a little sad. "
<<elseif _WhichHerb is 9>>\
@@color:Red;Selene@@: "Unnamed flower 10 has not been implemented!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh, that's a little sad. "
<<else>>\
@@color:Red;Error: herb is _WhichHerb
<<endif>>\
<<AwardAchievement "Herbalist">>\
\
<<set _AchieveCheck to true>>\
<<for _i to 0; _i < 7; _i++>>\
<<if $WORLD.SeleneQuests[_i] < 3>>\
<<set _AchieveCheck to false>>\
<<endif>>\
<</for>>\
<<if _AchieveCheck is true>>\
<<AwardAchievement "Potionmaster">>\
<<endif>>\
<<endif>>\
<hr>\
\
\
\
<<if _ExitLinks is "base">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm just here to shop, thanks" "StoreSelene">>
<<set $WORLD.selene to 2>>\
<<AdvanceTime 5>>
<</link>>\
</span>
<<elseif _ExitLinks is "continue">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "StoreSelene">>
<<set $WORLD.selene to 2>>\
<<AdvanceTime 5>>
<</link>>\
</span>
<<set _ReagentCheck to false>>\
<<for _i to 0; _i < $WORLD.SeleneQuests.length; _i++>>\
<<if $WORLD.SeleneQuests[_i] is 2>>\
<<set _ReagentCheck to true>>\
<<endif>>\
<</for>>\
<<if _ReagentCheck is true>>\
<span id="KeypH">\
<<link "h) Turn in alchemical herbs" "StoreSelene">>
<<set $WORLD.selene to 3>>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<endif>>\
<<elseif _ExitLinks is "questions">>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<!-- reagent hack -->
<<if $PC[$CC][$PCSeleneChat][3] is 2>>\
<<set _SSPmax to 7>>\
<<set _KnownCount to 0>>\
<<for _i to 0; _i < _SSPmax; _i++>>\
<<if $WORLD.SeleneQuests[_i] is 3>>\
<<set _KnownCount to _KnownCount +1>>\
<<endif>>\
<</for>>\
<<if _SSPmax neq _KnownCount>>\
<<set $PC[$CC][$PCSeleneChat][6] to 1>>\
<<endif>>\
<<endif>>\
\
<<for _i to 0; _i < $PC[$CC][$PCSeleneChat].length; _i++>>\
<<if $PC[$CC][$PCSeleneChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "Introduce yourself">>\
<<set _QuestionPool[1] to "Ask her about herself">>\
<<set _QuestionPool[2] to "Ask about the tower">>\
<<set _QuestionPool[3] to "Ask about her wares">>\
<<set _QuestionPool[4] to "Ask about her hut being burned down">>\
<<set _QuestionPool[5] to "Ask if she burned down the orphanage">>\
<<set _QuestionPool[6] to "Accept her offer to help procure reagents">>\
<<set _QuestionPool[7] to "Ask about the ascension magic of the tower">>\
<<set _QuestionPool[8] to "question 8">>\
<<set _QuestionPool[9] to "question 9">>\
<<set _QuestionPool[10] to "Ask about monsters">>\
<<set _QuestionPool[11] to "Ask about transformation">>\
<<set _QuestionPool[12] to "Do you know anything about the void rift on the south end of town?">>\
<<set _QuestionPool[13] to "Ask about the orphanage">>\
<<set _QuestionPool[14] to "Try to negotiate a lower price for help with the Legacy Vault">>\
<<if $PC[$CC][$PCcoins] > 4999>>\
<<set _QuestionPool[14] to "Pay 5000 gold for Selene's help with the Legacy Vault">>\
<<endif>>\
\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm done asking questions for now" "StoreSelene">>
<<set $WORLD.selene to 2>>
<</link>>\
</span>
\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix"]>>\
<<set _KeyChars to ["1","2","3","4","5","6"]>>\
\
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + ") " + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "StoreSelene">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<elseif _ExitLinks is "store">>\
<<Store $Selene>>
<<if $DebugMode is true>>\
debug:
<<for _i to 0; _i < $STORE[_s].length; _i++>>\
_i) <<print $STORE[$Selene][_i]>>
<</for>>\
<<endif>>\
<<endif>>\
\
<<if $DebugMode is true>>\
<hr>\
debug
1: SeleneChat is: <<print $PC[$CC][$PCSeleneChat]>>
2: AsktheseQs is: <<print _AskTheseQuestions>>
3: SeleneQuests : <<print $WORLD.SeleneQuests>>
<hr>\
<<endif>>\
<<set _ChatAvailable to false>>\
<<for _i to 0; _i < $PC[$CC][$PCSkittersChat].length; _i++>>\
<<if $PC[$CC][$PCSkittersChat][_i] is 1>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<</for>>\
<<if $PC[$CC][$PCSkittersChat][0] is 0>>\
<<set _ChatAvailable to true>>\
<<endif>>\
\
<<if $SkittersTalk is "yes">>\
<<SimplePic "skitters.png">>\
@@color:LightGreen;Ye Olde Pawnshoppe@@
<hr>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
\
<<if _CurrentQuestion is 0>>\
<<if $PC[$CC][$PCSkittersChat][0] is 0>>\
<<set $PC[$CC][$PCSkittersChat][0] to 2>>\
The shopkeeper here is an overweight man with tentacles for hands and a strangely serpentine neck. Seeing you approach to talk, he glances around nervously.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hi," you greet the proprieter. "I'm $PC[$CC][$PCname]."
@@color:LightGreen;Shopkeeper@@: "Skitters," he replies with a clearly inhuman voice. "Can I get you anything?"
<!-- Unlocks -->\
<<if $PC[$CC][$PCSkittersChat][1] is 0>>\
<<set $PC[$CC][$PCSkittersChat][1] to 1>><!-- Ask about his shop-->\
<<endif>>\
<<if $PC[$CC][$PCSkittersChat][2] is 0>>\
<<set $PC[$CC][$PCSkittersChat][2] to 1>><!-- Ask about his hands -->\
<<endif>>\
<<else>>\
@@color:LightGreen;Skitters@@: "Hello, <<print $PC[$CC][$PCname]>>. What can I do for you?"
<<endif>>\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCSkittersChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Could you tell me about your shop? Looks like you don't have anything for sale."
@@color:LightGreen;Skitters@@: "Only customers I get are adventurers looking to sell tower loot," he explains. "But words gets around pretty fast when I get my hands...er, well...tentacles...on anything good, and stock doesn't usually last long. The junk I mostly give to Gerard to smelt down for raw materials."
<!-- unlocks -->\
<<if $PC[$CC][$PCSkittersChat][3] is 0>>\
<<set $PC[$CC][$PCSkittersChat][3] to 1>><!-- Ask about tower loot -->\
<<endif>>\
<<if $PC[$CC][$PCSkittersChat][4] is 0>>\
<<set $PC[$CC][$PCSkittersChat][4] to 1>><!-- Ask about Gerard -->\
<<endif>>\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCSkittersChat][2] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So uhh, what happened to your hands?"
He sighs and shrugs, staring at them with clear discomfort.
@@color:LightGreen;Skitters@@: "It's not that uncommon, really. Like lots of folks in town, I used to be an adventurer. Had a wish, so I tried to reach the Goddess' Shrine up top to get it granted. Instead I ended up with these. Trust me, it's not as bad as it could have been. It took some getting used to, but at least I still //have// hands. It could have been a fish or something that got me instead of tentacle monster."
<<if $PC[$CC][$PCSkittersChat][5] is 0>>\
<<set $PC[$CC][$PCSkittersChat][5] to 1>><!-- Ask about the shrine-->\
<<endif>>\
<<if $PC[$CC][$PCSkittersChat][6] is 0>>\
<<set $PC[$CC][$PCSkittersChat][6] to 1>><!-- Ask about monsters-->\
<<endif>>\
<<elseif _CurrentQuestion is 3>>\
<<set $PC[$CC][$PCSkittersChat][3] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What exactly qualifies as 'quality' loot?"
@@color:LightGreen;Skitters@@: "Better materials mostly. There's genuine magic gear in there, but nobody's made it high enough to bring any of that back in months. Best you'll probably see right now is ordinary steel and mithril, and even that's been rare lately. I suspect most everything people sell me is gear Gerard made himself at some point, then some poor fool died wearing it and a monster ended up with it."
<!-- unlocks -->\
<<if $PC[$CC][$PCSkittersChat][8] is 0>>\
<<set $PC[$CC][$PCSkittersChat][8] to 1>>
<<endif>>\
<<elseif _CurrentQuestion is 4>>\
<<set $PC[$CC][$PCSkittersChat][4] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Gerard?"
@@color:LightGreen;Skitters@@: "Yeah, he's the blacksmith here in town. We used to be adventuring buddies back in the day. Us and Neris. Those two knew each other since forever, and they brought me onboard after they lost some other guy in some big battle. Made a pretty good team, the three of us. For a while anyway. They lasted a lot longer than I did. I wonder what happened to Neris, sometimes. Gerard doesn't like to talk about it. Anyway, yeah...people sell me stuff and if it's too banged up I send it his way."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What does he do with it?"
@@color:LightGreen;Skitters@@: "Melts it down and forges new gear with it, mostly. There's been a supply shortage around here lately, and we've been having to make do. It's probably a big part of why most adventurers seem to be struggling on the lower floors right now. Deck yourself out in decent armor and a basic gobbo can't even scratch you. But copper and and brass are pretty soft, and that's the best most people can get their hands on right now."
<<elseif _CurrentQuestion is 5>>\
<<set $PC[$CC][$PCSkittersChat][5] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So the Shrine of the Goddess, it grants wishes?"
@@color:LightGreen;Skitters@@: "That's what the legend says," he shrugs. "At least some versions of it. The original story was written in Sythian, I think, and translations vary. It grants a wish, it turns you into your ideal version of your self, it turns you into a god...something like that. I wasn't too worried about the particulars. Sure, I had I wish a wanted granted, but if I'd ended up ascending to godhood instead, I doubt I'd have complained very much."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "But how do you know it's even something good up there at all? It's a shrine to a goddess of //darkness//, right? That doesn't sound very good to me."
@@color:LightGreen;Skitters@@: "Don't ask me," he shrugs. "I'm just a failed adventure turned failing shopkeeper. But I figure where there's smoke, there's fire, and an awful lot of people seem pretty convinced there's something amazing in there past all the monsters."
<<if $PC[$CC][$PCSkittersChat][7] is 0>>\
<<set $PC[$CC][$PCSkittersChat][7] to 1>>\
<<endif>>\
<<elseif _CurrentQuestion is 6>>\
<<set $PC[$CC][$PCSkittersChat][6] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So tentacle monsters? And fish? What else is in the tower?"
@@color:LightGreen;Skitters@@: "No, fishes aren't in the tower. No water in there. At least, not as far as I ever made it. But the tower's magic extends far enough to hit the salt beaches down south. Every now and then somebody gets the bright idea to go for a swim, and it tends not to end well."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And the tower?
@@color:LightGreen;Skitters@@: "The lower levels are mostly goblins and slimes. Nothing too bad. If a goblin gets you, it might turn you green but at least you'll keep all your same parts more or less. And slime transformations, yeah they look pretty weird, but they're sort of a special case and it's not as bad as you might think. Slimes in their natural state are just blobs to begin with, but they can change their shape so they generally take on human form to have an easier time seducing aventurers."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why?"
@@color:LightGreen;Skitters@@: "They eat our sexual fluids for food," he explains. "They'd actually be pretty harmless if it weren't for the tower. Down south you'll even find them working in brothels. Doesn't make sense for them to hurt anybody when we're their source of food. It'd be like killing a dairy cow. Anyway, the tower magic, crazy as it is, is smart. It picks up on whatever form a slime takes on and you end up with that instead of just becoming a blob, so you keep your arms and legs. Usually."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And tentacle monsters?"
@@color:LightGreen;Skitters@@: "Most of the time you have to go fairly high up to find those," he glances at his hands. "But every now and then something nasty gets bored and visits the lower floors. Me, I was injured after a battle with a minotaur, you'll find those just a couple floors up, and on my way back down I stumbled on a room with a nice, clean bed. Decided to take a nap to heal up, and woke up to a tentacle monster in bed with me. Didn't have the strength to fight it off and it, well...let's just say that's how I got my hands."
<<elseif _CurrentQuestion is 7>>\
<<set $PC[$CC][$PCSkittersChat][7] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What was your wish?"
@@color:LightGreen;Skitters@@: "There was a girl down south," he explains sadly. "We were engaged. Her family liked me, but, well..."
He hides his hands in his pockets and sighs.
@@color:LightGreen;Skitters@@: "It doesn't matter anymore."
<<elseif _CurrentQuestion is 8>>\
<<set $PC[$CC][$PCSkittersChat][8] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why don't people make it as high up anymore? Is the tower more dangerous than it used to be?"
@@color:LightGreen;Skitters@@: "I'm probably not the best person ask," he admits. "I'm a bit out of the loop, but a few of my customers have mentioned some sort of crazy boss monster from a higher floor that took residence closer to the ground real recently"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So everybody's bottlenecked? If somebody could beat it, then everybody would be able to climb higher again?"
@@color:LightGreen;Skitters@@: "Sure, that'll probably happen sooner or later. The tower changes itself up from time to time. Just the nature of its magic. This isn't the first time something's happened that's kept people stuck on the lower floors. Probably won't be the last time either."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What was it last time? Another boss monster?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, the last bottleneck was when some sort of crazy chimeric monstrosity from the higher floors went on a lower level rampage. Contaminated all the easy monsters everybody had a handle on with high-powered magic. So for a while even ordinary goblins were running around breathing fire and shooting webs out their ass and things. Took a long time to clean up after that incident."
<<elseif _CurrentQuestion is 9>>\
<<set $PC[$CC][$PCSkittersChat][9] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you know anything about that unconateidn void rift on the south end of town?"
@@color:LightGreen;Skitters@@: "There's a void rift in town? Where?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "In the building across the way from Daphne's Jewelry. There's a tree with a clock in it out front."
@@color:LightGreen;Skitters@@: "Wait, you mean the Legacy Vault? Did it break?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Maybe? All it is right now is a giant ball of magic shooting out bolts of lightning. What's suppsed to be there?"
@@color:LightGreen;Skitters@@: "Oh yeah, that's definitely not right," he frowns. "The Legacy Vault is is an extradimensional storage chamber made for passing on heirlooms. I think the story was that some tower-climbing Archmage built it a few generations ag, but it had already been here for ages when I first came to town so who knwos if he's still alive. If it's broken, there are going to be a lot of very upset adventurers.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any idea how to fix it?"
@@color:LightGreen;Skitters@@: "Sorry, no. That's way above my paygrade. if you know any high-class wizards, I'd start with them.
<<else>>\
Error: unrecognized question: _CurrentQuestion
<<endif>>\
<hr>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<!-- unlocked by external events -->\
<<if ($PC[$CC][$PCSkittersChat][11] is 0) and ($PC[$CC][$PChtze] > 4)>>\
<<set $PC[$CC][$PCSkittersChat][11] to 1>>\
<<endif>>\
\
<<for _i to 0; _i < $PC[$CC][$PCSkittersChat].length; _i++>>\
<<if $PC[$CC][$PCSkittersChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "Introduce yourself">>\
<<set _QuestionPool[1] to "Ask about the shop">>\
<<set _QuestionPool[2] to "Ask about his hands">>\
<<set _QuestionPool[3] to "Ask about quality loot">>\
<<set _QuestionPool[4] to "Ask about Gerard">>\
<<set _QuestionPool[5] to "Ask about the shrine">>\
<<set _QuestionPool[6] to "Ask about monsters">>\
<<set _QuestionPool[7] to "What was your wish?">>\
<<set _QuestionPool[8] to "Why don't adventurers climb as high anymore?">>\
<<set _QuestionPool[9] to "Do you know anything about that unconateidn void rift on the south end of town?">>\
<<set _QuestionPool[10] to "">>\
\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm done talking for now" "StorePawn">>
<<set $WORLD.gstore to 2>>\
<<AdvanceTime 5>>
<<unset $SkittersTalk>>\
<</link>>\
</span>
\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix"]>>\
<<set _KeyChars to ["1","2","3","4","5","6"]>>\
\
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + ") " + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "StorePawn">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<else>>\
<<SimplePic "skitters.png">>\
@@color:LightGreen;Ye Olde Pawnshoppe@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<if _ChatAvailable is false>>\
c) No chats available
<<elseif $PC[$CC][$PCSkittersChat][1] is 2>>\
<span id="KeypC">\
<<link "c) Chat with Skitters" "StorePawn">>
<<set $SkittersTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<else>>\
<span id="KeypC">\
<<link "c) Chat with the shopkeeper" "StorePawn">>
<<set $SkittersTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<endif>>\
<hr>\
<<Pawn>>
<<endif>>\
<<if $DebugMode is true>>\
<hr>\
Skitters: <<print $PC[$CC][$PCSkittersChat]>>
<<endif>>\@@color:Gold;Magic Circle@@
<hr>\
@@color:Gold;Navigation@@
<span id="KeypOne">\
<<link "1) Town square" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<hr>
<<set _mon to $Mon.name>>\
<<set _wonby to "fight">>\
<<set _msex to $Mon.sex>>\
<<set _heshe to "she">>\
<<set _hisher to "her">>\
<<set _himher to "her">>\
<<set _mhasdick to false>>\
<<set _mhasboobs to false>>\
<<set _mhaspussy to false>>\
<<if _msex is "male">>
<<set _msex to "m">>\
<<set _heshe to "he">>\
<<set _hisher to "his">>\
<<set _himher to "him">>\
<<set _mhasdick to true>>\
<<elseif _msex is "herm">>\
<<set _msex to "h">>\
<<set _mhasdick to true>>\
<<set _mhasboobs to true>>\
<<set _mhaspussy to true>>\
<<elseif _msex is "female">>\
<<set _msex to "f">>\
<<set _mhasboobs to true>>\
<<set _mhaspussy to true>>\
<<endif>>\
<<set _psex to $PC[$CC][$PCsex]>>\
<<set _phasdick to true>>\
<<set _phasboobs to false>>\
<<set _phaspussy to false>>\
<!-- implement: this should grab from body parts -->\
<<if _psex is "male">>\
<<set _psex to "m">>\
<<elseif _psex is "female">>\
<<set _phasdick to false>>\
<<set _phasboobs to true>>\
<<set _phaspussy to true>>\
<<set _psex to "f">>\
<<elseif _psex is "hermaphrodite">>\
<<set _phasdick to true>>\
<<set _phasboobs to true>>\
<<set _phaspussy to true>>\
<<set _psex to "h">>\
<<endif>>\
\
<<if _mon is "bunny">>\
<<include "VictoryBunny">>\
<<elseif _mon is "cat">>\
<<include "VictoryCat">>\
<<elseif _mon is "wolf">>\
<<include "VictoryWolf">>\
<<elseif _mon is "centaur">>\
<<include "VictoryCentaur">>\
<<elseif _mon is "goblin">>\
<<include "VictoryGoblin">>\
<<elseif _mon is "slime">>\
<<include "VictorySlime">>\
<<elseif _mon is "naga">>\
<<include "VictoryNaga">>\
<<elseif _mon is "spider">>\
<<include "VictorySpider">>\
<<elseif _mon is "">>\
<<include "Victory">>\
<<elseif _mon is "">>\
<<include "Victory">>\
<<elseif _mon is "">>\
<<include "Victory">>\
<<elseif _mon is "">>\
<<include "Victory">>\
<<elseif _mon is "">>\
<<include "Victory">>\
<<else>>\
Implement victory sex for _msex _mon
<<endif>>\
\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;Debug immortality@@
<span id="KeypZ">\
<<link "z) Ressurect here" $ReturnFromMenu>>
<<FullyHeal>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<<set $WORLD.dialogue to 0>><<if $Mon.name.includes("Zehtalia")>>\
<<include "DefeatBoss">>\
<<elseif $Mon.name.includes("Neris")>>\
<<include "DefeatBoss">>\
<<else>>\
@@color:Gold;You have lost to a <<print $Mon.name>>!@@
<<set $WORLD.dialogue to 0>>\
<hr>
<<set _mon to $Mon.morph>>\
<<set _wonby to "fight">>\
<<set _msex to $Mon.sex>>\
<<set _heshe to "she">>\
<<set _hisher to "her">>\
<<set _himher to "her">>\
<<set _mhasdick to false>>\
<<set _mhasboobs to false>>\
<<set _mhaspussy to false>>\
<<if _msex is "male">>\
<<set _msex to "m">>\
<<set _heshe to "he">>\
<<set _hisher to "his">>\
<<set _himher to "him">>\
<<set _hasdick to true>>\
<<elseif _msex is "herm">>\
<<set _msex to "h">>\
<<set _mhasdick to true>>\
<<set _mhasboobs to true>>\
<<set _mhaspussy to true>>\
<<elseif _msex is "female">>\
<<set _msex to "f">>\
<<set _hasboobs to true>>\
<<set _haspussy to true>>\
<<endif>>\
<<set _psex to $PC[$CC][$PCsex]>>\
<<set _phasdick to true>>\
<<set _phasboobs to false>>\
<<set _phaspussy to false>>\
<!-- implement: this should grab from body parts -->\
<<if _psex is "male">>\
<<set _psex to "m">>\
<<elseif _psex is "female">>\
<<set _phasdick to false>>\
<<set _phasboobs to true>>\
<<set _phaspussy to true>>\
<<set _psex to "f">>\
<<elseif _psex is "hermaphrodite">>\
<<set _phasdick to true>>\
<<set _phasboobs to true>>\
<<set _phaspussy to true>>\
<<set _psex to "h">>\
<<endif>>\
\
<<if _mon is "bunny-morph">>\
<<include "DefeatBunny">>\
<<elseif _mon is "cat-morph">>\
<<include "DefeatCat">>\
<<elseif _mon is "wolf-morph">>\
<<include "DefeatWolf">>\
<<elseif _mon is "wolf">>\
<<include "DefeatWolfquad">>\
<<elseif _mon is "fox-morph">>\
<<include "DefeatFox">>\
<<elseif _mon is "horse">>\
<<include "DefeatHorse">>\
<<elseif _mon is "snake">>\
<<include "DefeatSnake">>\
<<elseif _mon is "centaur">>\
<<include "DefeatCentaur">>\
<<elseif _mon is "human">>\
<<include "DefeatHuman">>\
<<elseif _mon is "goblin">>\
<<include "DefeatGoblin">>\
<<elseif _mon is "slime">>\
<<include "DefeatSlime">>\
<<elseif _mon is "naga">>\
<<include "DefeatNaga">>\
<<elseif _mon is "spider">>\
<<include "DefeatSpider">>\
<<elseif _mon is "imp">>\
<<include "DefeatImp">>\
<<elseif _mon is "hellhound">>\
<<include "DefeatHellhound">>\
<<elseif _mon is "cow" or _mon is "minotaur">>\
<<include "DefeatMinotaur">>\
<<elseif _mon is "drider">>\
<<include "DefeatDrider">>\
<<elseif _mon is "tentacle">>\
<<include "DefeatTentacle">>\
<<elseif _mon is "demon">>\
<<include "DefeatDemon">>\
<<elseif _mon is "Charyss">>\
<<include "DefeatDemon">>\
<<elseif _mon is "ant">>\
<<include "DefeatAnt">>\
<<elseif _mon is "scorpion">>\
<<include "DefeatScorpion">>\
<<elseif _mon is "harpy">>\
<<include "DefeatHarpy">>\
<<elseif (_mon is "rat-morph") or (_mon is "ratkin")>>\
<<include "DefeatRatkin">>\
<<elseif _mon is "hydra">>\
<<include "DefeatHydra">>\
<<elseif _mon is "troll">>\
<<include "DefeatTroll">>\
<<else>>\
Implement defeat sex for _msex _mon
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;Debug options@@
<span id="KeypD">\
<<link "d) Stay here after combat" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<<widget "GainPerksFromAchievements">>\
<<for _i to 0; _i < _achieves.length; _i++>>\
<<if $Achievements[_i] is true>>\
<<if _achieves[_i].type is "perkpoints">>\
<<set _availperks to _availperks +1>>\
<<elseif _achieves[_i].type is "perm">>\
<<GainPerk _achieves.name>>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "GainPerk">>\
<<set $PC[$CC][$PCperks][$PC[$CC][$PCperks].length] to $args[0]>>\
<</widget>>\
<<widget "HasAchievement">>\
<<set _ha to $args[0]>>\
<<GrabData "achievements">>\
<<set $MiscPoke to false>>\
<<for _i to 0; _i < _achieves.length; _i++>>\
<<if _achieves[_i].name is _ha>>\
<<if $Achievements[_achieves.id] > 0>>\
<<set $MiscPoke to $Achievements[_achieves.id]>>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "TrapAchieveTester">>\
<<if $args[0] is "avoid">>\
<<set $PC[$CC][$PCmisc].trapavoid to $PC[$CC][$PCmisc].trapavoid +1>>\
<<if $PC[$CC][$PCmisc].trapavoid > 2>>\
<<AwardAchievement "Rogue">>\
<<endif>>\
<<elseif $args[0] is "trigger">>\
<<set $PC[$CC][$PCmisc].traptrigger to $PC[$CC][$PCmisc].traptrigger +1>>\
<<AwardAchievement "Trapmaster">>\
<<else>>\
@@color:Red;Error in TrapAchieveTester: <<print $args[0]>>\
<<endif>>\
<</widget>>\
<<widget "AwardAchievement">>\
<<set _awa to setup.AchievementHandler($args[0], "FETCH", -1)>>\
<<set _aID to _awa[0]>>\
<<if _aID > -1>>\
<<set _PChas to $Achievements[_aID]>>\
<<if _PChas is 0>>\
<<set $Achievements[_aID] to 1>>\
<br>@@color:Gold;Achievement earned!@@: $args[0]
<<if _awa[1].type is "perk">>(Perk) <<endif>><<print _awa[1].does>>
<<else>>\
<!-- player already has -->\
<<endif>>\
<<else>>\
@@color:Red;Error in AwardAchievement: $args[0] not found@@
<<endif>>\
<</widget>>\
<<widget "AwardIntegerAchievement">>\
<<set _awa to $args[0]>>\
<<set _NewMaxValue to $args[1]>>\
<<GrabData "achievements">>\
<<set _foo to -1>>\
<<for _i to 0; _i < _achieves.length; _i++>>\
<<if _achieves[_i].name is _awa>>\
<<set _foo to _achieves.id>>\
<<endif>>\
<</for>>\
<<if _foo < 0>>\
@@color:Red;Error in AwardAchievement: id:<<print _awa>> not found!!
<<else>>\
<<if $Achievements[_foo] is 0>>\
<<set $Achievements[_foo] to 1>>\
<br><br>@@color:Gold;Achievement earned!@@: _awa is level _NewMaxValue
<<print _achieves[_foo].desc>>\
<br><br>\
<<elseif _NewMaxValue > $Achievements[_foo]>>\
<<set $Achievements[_foo] to _NewMaxValue>>\
<br><br>@@color:Gold;Achievement upgraded!@@: _awa is now level _NewMaxValue
<<print _achieves[_foo].desc>>\
<br><br>\
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "GrabData">>\
<<silently>>\
<!-- NOTE: setup . PtrToClass is hard-coded -->\
<<if $args[0] is "class">>
<<set _classes to []>>\
<<set _classes[0] to
{
name: "Lumberjack",
show: "Cut trees at one extra axe level",
hint: "Help the town to grow",
hide: "Progress through the town builder quests",
aptr: 0
}>>\
<<set _classes[1] to
{
name: "Prostitute",
show: "+5% to flirt actions, both giving and receiving",
hint: "Prove yourself as a seductress",
hide: "Win 10 victories by flirting",
aptr: 1
}>>\
<<set _classes[2] to
{
name: "Warrior",
show: "+1 to melee damage",
hint: "Try out different weapons",
hide: "Win a battle with each major weapon type",
aptr: 2
}>>\
<<set _classes[3] to
{
name: "Scholar",
show: "+1 to intellect",
hint: "Read a book",
hide: "Learn any spell",
aptr: 3
}>>\
<<set _classes[4] to
{
name: "Priest",
show: "Starts with a holy symbol. +1 to willpower.",
hint: "Cleanse the land of the impure",
hide: "Defeat and kill a demon",
aptr: 4
}>>\
<<set _classes[5] to
{
name: "Rogue",
show: "Reduce base difficulty of all traps by 3 dungeon levels",
hint: "Demonstrate a talent for avoiding traps",
hide: "Succesfully avoid 3 traps in one life.",
aptr: 5
}>>\
<<set _classes[6] to
{
name: "Mage",
show: "Start with a spell unlocked. +1 intellect.",
hint: "Learn all the magic",
hide: "Know every spell at once",
aptr: 6
}>>\
<<set _classes[7] to
{
name: "Barbarian",
show: "+1 damage absoprtion",
hint: "Fight while deep and naked. Win.",
hide: "Defeat a monster on level 3 while naked",
aptr: 7
}>>\
<<set _classes[8] to
{
name: "Monk",
show: "+1 to all base stats",
hint: "Compasionately master the art of the fist",
hide: "Defeat a monster on level 3, while unarmed, having never raped or killed any opponent.",
aptr: 8
}>>\
<<set _classes[9] to
{
name: "Ninja",
show: "Starts with a sword. +5% to critical strike chance.",
hint: "Only the deadliest of rogues will learn this",
hide: "As a rogue, one-shot a monster before it can attack.",
aptr: 9
}>>\
<<set _classes[10] to
{
name: "Paladin",
show: "Starts with holy symbol and sword. +1 willpower. Immune to transformation",
hint: "Only the purest of heart will achieve this. 777.",
hide: "Reach level 7 while still a virgin, having previously reached level 7 as both warrior and priest.",
aptr: 10
}>>\
<<set _classes[11] to
{
name: "Guardian",
show: "Very durable",
hint: "Become very tough",
hide: "Reach 200 maximum health",
aptr: 11
}>>\
<<elseif $args[0] is "achievements">>
<<set _achieves to []>>
<<set _acount to 0>>
<<set _achieves[_acount] to
{
name: "Genetic Lottery",
desc: "Descibe genetic lottery",
type: "perk",
gain: "Gain +2 stat points. Applied after character creation.",
hint: "Highly focused attributes might help",
clue: "Raise any one stat to 20 or more",
id: 0
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Rich",
desc: "Describe rich",
type: "perk",
gain: "Start with an extra 100 gold",
hint: "You don't need to carry it with you",
clue: "Have 1000 gold",
id: 1
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Greedy",
desc: "Describe greedy",
type: "perk",
gain: "Gain +10% to all gold drops",
hint: "Like rich, but more",
clue: "Deposit 10,000 gold into the bank. Oh, and unlock the bank.",
id: 2
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Starve to death",
desc: "Exactly what it says on the tin",
type: "perm",
gain: "Start every new game with some food",
hint: "Self explanatory",
clue: "Starve to death",
id: 3
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Guildmaster",
desc: "Describe guildmaster",
type: "perm",
gain: "+1 to max stat spread on character creation",
hint: "Rina might be able to help with this",
clue: "Complete all tutorial quests",
id: 4
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Gamemaster",
desc: "Describe gamemaster",
type: "perm",
gain: "+1 to max stat spread on character creation",
hint: "Rina might be able to help with this with this too",
clue: "Complete all guild quests",
id: 5
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Potionmaster",
desc: "Describe potionmaster",
type: "perm",
gain: "+1 to max stat spread on character creation",
hint: "Selene might be able to help with this",
clue: "Complete all of Selene's quests",
id: 6
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Metal master",
desc: "Describe metal master",
type: "perm",
gain: "+1 to max stat spread on character creation",
hint: "The blacksmith might be able to help with this",
clue: "Complete every blacksmithing quest",
id: 7
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Monster tourism",
desc: "Defeat every monster type at least once",
type: "perk",
gain: "Implement: What does this do?",
hint: "How many monsters are there?",
clue: "Defeat every monster type at least once",
id: 8
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Playing both sides",
desc: "Describe this acheivement",
type: "sex",
gain: "Unlocks the hermaphrodite starting sex",
hint: "Play both sides to learn the middle",
clue: "Have a sexual encounter as both sexes on the same character",
id: 9
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Archeologist",
desc: "Describe archeologist",
type: "perk",
gain: "Gain an extra guaranteed treasure event every level",
hint: "Find more treasure",
clue: "Succesfully complete 2 treasure events in a single lifetime",
id: 10
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Trapmaster",
desc: "Descibe trapmaster",
type: "perk",
gain: "Gain a second 10% chance to avoid any triggered trap",
hint: "Trigger a trap",
clue: "Trigger a trap",
id: 11
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Explorer",
desc: "Increased map view radius",
type: "perk",
gain: "Increased map view radius",
hint: "Leave no stone unturned",
clue: "Explore every zone of 3 dungeon levels",
id: 12
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Pacifist",
desc: "Describe",
type: "perk",
gain: "Gain +1 damage absorbtion, but -1 to melee damage",
hint: "How far can you get without hurting anything?",
clue: "Clear the level 5 dungeon event having never killed any opponent",
id: 13
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Durable",
desc: "Makes you harder to kill",
type: "perk",
gain: "Take -1 damage from all physical attacks",
hint: "Fatal attraction",
clue: "Die during a sexual encounter",
id: 14
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Fertile",
desc: "Describe fertile",
type: "perk",
gain: "Increased pregnancy chance",
hint: "I'm sure lots of monsters would love to help you earn this achievement",
clue: "Give birth",
id: 15
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Barren",
desc: "Describe barren",
type: "perk",
gain: "You will be incapable of becoming pregnant.",
hint: "Change your mind",
clue: "Terminate a pregnancy",
id: 16
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Breeder",
desc: "Describe breeder",
type: "perk",
gain: "Cuts all pregnancy times in half",
hint: "Where once may fail, many succeeds!",
clue: "Give birth 3 times in a single game",
id: 17
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Reserved 1",
desc: "Dungeon perk 1",
type: "perk",
gain: "Reserved",
hint: "25%",
clue: "Clear the level 5 dungeon event",
id: 18
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Reserved 2",
desc: "Dungeon perk 2",
type: "perk",
gain: "Reserved",
hint: "50%",
clue: "Clear the level 10 dungeon event",
id: 19
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Reserved 3",
desc: "Dungeon perk 3",
type: "perk",
gain: "Reserved",
hint: "75%",
clue: "Clear the level 15 dungeon event",
id: 20
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Reserved 4",
desc: "Dungeon perk 4",
type: "perk",
gain: "Reserved",
hint: "100%",
clue: "Clear the level 20 dungeon event",
id: 21
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Power Leveler",
desc: "Describe power leveler",
type: "perm",
gain: "+1 experience earned every battle",
hint: "Reach level 10 in any class",
clue: "Reach level 10 in any class",
id: 22
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Jack of All Stats",
desc: "Describe jack of all stats",
type: "perm",
gain: "+1 stat point to all new characters",
hint: "And pretty much a master of them too",
clue: "Reach 12 in every primary stat",
id: 23
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "I feel your loss",
desc: "Describe I feel your loess",
type: "perm",
gain: "Unlock the second character slot",
hint: "Lose something important",
clue: "Have a character of at least level 3, die",
id: 24
}>>\
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Three's Company",
desc: "Describe three's company",
type: "perm",
gain: "Unlock the third character slot",
hint: "What would be even worse that dying?",
clue: "Delete a character of at least level 7",
id: 25
}>>\
***********************************
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Lumberjack",
desc: "Starts with a hatchet. Gains extra wood when harvesting.",
type: "class",
gain: "Unlocks the lumberjack starting profession",
hint: "Help the town to grow",
clue: "Progress through the town builder quests",
id: 26
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Prostitute",
desc: "+5% to flirt actions, both giving and receiving",
type: "class",
gain: "Unlocks the prostitute starting profession",
hint: "Do unto others, and be done unto. Emphasis on doing.",
clue: "Both raped and be raped after combat in a single run",
id: 27
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Warrior",
desc: "+1 to melee damage",
type: "class",
gain: "Unlocks the warrior starting profession",
hint: "Try out different weapons",
clue: "Win a battle with each major weapon type",
id: 28
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Scholar",
desc: "+1 to intellect",
type: "class",
gain: "Unlocks the scholar starting profession",
hint: "Read a book",
clue: "Learn any spell",
id: 29
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Priest",
desc: "Starts with the heal spell unlocked. +1 to willpower.",
type: "class",
gain: "Unlocks the priest starting profession",
hint: "Cleanse the land of the impure",
clue: "Defeat and kill a demon",
id: 30
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Rogue",
desc: "Start with rope and lockpicks. +1 dexterity.",
type: "class",
gain: "Unlocks the rogue starting profession",
hint: "Don't fall for traps",
clue: "Succesfully avoid 3 traps in one life.",
id: 31
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Mage",
desc: "Start with the fireball spell unlocked. +1 intellect.",
type: "class",
gain: "Unlocks the mage starting profession",
hint: "Become a competant scholar",
clue: "Know every spell at once",
id: 32
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Barbarian",
desc: "Every empty equippable armot slot gives +5 armor",
type: "class",
gain: "Unlocks the barbarian starting profession",
hint: "Fight while deep and naked. Win.",
clue: "Defeat a monster on level 3 while naked",
id: 33
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Monk",
desc: "+1 to all base stats, but start out poor an",
type: "class",
gain: "Unlocks the monk starting profession",
hint: "Compasionately master the art of the fist",
clue: "Defeat a monster of at least level 3, unarmed, having neve raped or killed an opponent.",
id: 34
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Ninja",
desc: "Starts with a sword. +5% to critical strike chance.",
type: "class",
gain: "Unlocks the ninja starting profession",
hint: "Only the swiftest of rogues will learn this",
clue: "As a rogue, one-shot a tower monster before it can attack.",
id: 35
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Paladin",
desc: "Starts with holy symbol and sword. +1 willpower. Immune to transformation",
type: "class",
gain: "Unlocks the paladin starting profession",
hint: "Only the purest of heart will achieve this: 777",
clue: "Reach level 7 while still a virgin, having previously reached level 7 as both warrior and priest.",
id: 36
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Guardian",
desc: "Very durable",
type: "class",
gain: "Unlocks the guardian starting profession",
hint: "Become very tough",
clue: "Reach 200 maximum health",
id: 37
}>>
***********************************
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Peasant Proficiency",
desc: "Reach level 7 as a peasant",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a peasant",
clue: "Reach level 7 as a peasant",
id: 38
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Lumberjacked up!",
desc: "Reach level 7 as a lumberjack",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a lumberjack",
clue: "Reach level 7 as a lumberjack",
id: 39
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "World's Oldest Professon",
desc: "describe",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a prostitute",
clue: "Reach level 7 as a prostitute",
id: 40
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Swords and spears",
desc: "Reach level 7 as a warrior",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a warrior",
clue: "Reach level 7 as a warrior",
id: 41
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Scholarly pursuits",
desc: "Reach level 7 as a scholar",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a scholar",
clue: "Reach level 7 as a scholar",
id: 42
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Parson",
desc: "Reach level 7 as a priest",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a priest",
clue: "Reach level 7 as a priest",
id: 43
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Sneaky McSneakerson",
desc: "Reach level 7 as a rogue",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a rogue",
clue: "Reach level 7 as a rogue",
id: 44
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Magiferous Magery",
desc: "Reach level 7 as a mage",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a mage",
clue: "Reach level 7 as a mage",
id: 45
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Driven Before You",
desc: "Reach level 7 as a barbarian",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a barbarian",
clue: "Reach level 7 as a barbarian",
id: 46
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Peace in the calm of the horny",
desc: "Reach level 7 as a monk",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a monk",
clue: "Reach level 7 as a monk",
id: 47
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Stabby Stealther",
desc: "Reach level 7 as a ninja",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a ninja",
clue: "Reach level 7 as a ninja",
id: 48
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Pally Power!",
desc: "Reach level 7 as a paladin",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a paladin",
clue: "Reach level 7 as a paladin",
id: 49
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Tanky Tank",
desc: "Reach level 7 as an guardian",
type: "perkpoints",
gain: "+1 perk on character creation",
hint: "Reach level 7 as a guardian",
clue: "Reach level 7 as a guardian",
id: 50
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Peasant",
desc: "Gain +1hp per highest retired peasant level, for all characters, always",
type: "highest",
gain: "Gain +1hp per highest retired peasant level, for all characters, always",
hint: "Gain +1hp per highest retired peasant level, for all characters, always",
clue: "Always available",
id: 51
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Lumberjack",
desc: "Gain +1% to hit bonus with axes per highest retired lumberjack level, for all characters, always",
type: "highest",
gain: "Gain +1% to hit bonus with axes per highest retired lumberjack level, for all characters, always",
hint: "Gain +1% to hit bonus with axes per highest retired lumberjack level, for all characters, always",
clue: "Retire as a lumberjack",
id: 52
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Prostitute",
desc: "Gain +1 flirt resistance per highest retired prostitute level, for all characters, always",
type: "highest",
gain: "Gain +1 flirt resistance per highest retired prostitute level, for all characters, always",
hint: "Gain +1 flirt resistance per highest retired prostitute level, for all characters, always",
clue: "Retire as a prostitute",
id: 53
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Warrior",
desc: "Gain +1 melee damage with weapons per highest retired level, for all characters, always",
type: "highest",
gain: "Gain +1 melee damage with weapons per highest retired level, for all characters, always",
hint: "Gain +1 melee damage with weapons per highest retired level, for all characters, always",
clue: "Retire as a warrior",
id: 54
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Scholar",
desc: "-1 to xp requirement per level, per highest retired scholar level, for all characters, always",
type: "highest",
gain: "-1 to xp requirement per level, per highest retired scholar level, for all characters, always",
hint: "-1 to xp requirement per level, per highest retired scholar level, for all characters, always",
clue: "Retire as a scholar",
id: 55
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Priest",
desc: "Gain +1 healing spell effect per highest retired level, for all characters, always",
type: "highest",
gain: "Gain +1 healing spell effect per highest retired level, for all characters, always",
hint: "Gain +1 healing spell effect per highest retired level, for all characters, always",
clue: "Retire as a priest",
id: 56
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Rogue",
desc: "Gain +1 gold per combat victory per highest retired rogue level, for all characters, always",
type: "highest",
gain: "Gain +1 gold per combat victory per highest retired rogue level, for all characters, always",
hint: "Gain +1 gold per combat victory per highest retired rogue level, for all characters, always",
clue: "Retire as a rogue",
id: 57
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Mage",
desc: "Gain +1 fireball damage per highest retired mage level, for all characters, always",
type: "highest",
gain: "Gain +1 fireball damage per highest retired mage level, for all characters, always",
hint: "Gain +1 fireball damage per highest retired mage level, for all characters, always",
clue: "Retire as a mage",
id: 58
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Barbarian",
desc: "Gain +1 to hit with beast morph type attacks per highest retired barbarian level, for all characters, always",
type: "highest",
gain: "Gain +1 to hit with beast morph type attacks per highest retired barbarian level, for all characters, always",
hint: "Gain +1 to hit with beast morph type attacks per highest retired barbarian level, for all characters, always",
clue: "Retire as a barbarian",
id: 59
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Monk",
desc: "Gain +1 melee defense per highest retired monk level, for all characters, always",
type: "highest",
gain: "Gain +1 melee defense per highest retired monk level, for all characters, always",
hint: "Gain +1 melee defense per highest retired monk level, for all characters, always",
clue: "Retire as a monk",
id: 60
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Ninja",
desc: "Gain +1% chance to escape combat per highest retired ninja level, for all characters, always",
type: "highest",
gain: "Gain +1% chance to escape combat per highest retired ninja level, for all characters, always",
hint: "Gain +1% chance to escape combat per highest retired ninja level, for all characters, always",
clue: "Retire as a ninja",
id: 61
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Paladin",
desc: "Gain +1 melee damage against demons per highest retired paladin level, for all characters, always",
type: "highest",
gain: "Gain +1 melee damage against demons per highest retired paladin level, for all characters, always",
hint: "Gain +1 melee damage against demons per highest retired paladin level, for all characters, always",
clue: "Retire as a paladin",
id: 62
}>>
<<set _acount to _acount +1>>
<<set _achieves[_acount] to
{
name: "Best Guardian",
desc: "Gain +2 health and defense per highest retired guadian level, for all characters, always",
type: "highest",
gain: "Gain +2 health and defense per highest retired guadian level, for all characters, always",
hint: "Gain +2 health and defense per highest retired guadian level, for all characters, always",
clue: "Retire as a guardian",
id: 63
}>>
<<else>>\
@@color:Red;Error in DataWidgets: unrecognized data request
<<endif>>\
<</silently>>\
<</widget>>\<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>
</span>\
<<if $DebugMode is true>>\
<span id="KeypT">\
<<link "t) Toggle view">>
<<if $WORLD.Bodyview is 0>>\
<<set $WORLD.Bodyview to 1>>\
<<else>>\
<<set $WORLD.Bodyview to 0>>
<<endif>>\
<<replace "#BodyPortal">><<ShowPageBody>><</replace>>\
<</link>>\
</span>
<<endif>>\
<span id="KeypR">\
<<link "r) Re-sort body parts">>
<<SortBodyParts>>\
<<replace "#BodyPortal">><<ShowPageBody>><</replace>>\
<</link>>\
</span>
<hr>\
<span id="BodyPortal"><<ShowPageBody>></span>\<<SimplePic "tavernkitty.jpg">>\
<<set _AllowStore to true>>\
<<set _Tanya to "Tanya">>\
<<if $WORLD.tavern is 0>>\
<<set _Tanya to "the tavern kitty">>\
<<endif>>\
\
@@color:LightGreen;<<print $WORLD.tavernname>>@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
\
<<set _Voucher to setup.HasItemA(114)>>\
<<if _Voucher > -1>>\
<span id="KeypOne">\
<<link "1) Rent a room for the night" "Tavern">>
<<set $WORLD.datapasser to "slept">>
<</link>> - (free voucher)
</span>\
<<elseif $PC[$CC][$PCcoins] > 4>>\
<span id="KeypOne">\
<<link "1) Rent a room for the night" "Tavern">>
<<set $WORLD.datapasser to "slept">>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 5>>\
<</link>> - 5 coins
</span>\
<<else>>\
1) Cannot afford a room - 5 coins
<<endif>>\
<<if $WORLD.tavern < 2>>\
<span id="KeypC">\
<<link "c) Chat" "Tavern">>\
<<set $WORLD.datapasser to "chat">>
<</link>>\
</span>\
<<else>>\
c) no chats available
<<endif>>\
<hr>\
<<if $WORLD.datapasser is "slept">>\
<<set $WORLD.datapasser to "">>\
<<set $WORLD.minute to 0>>\
<<if $WORLD.hour < 6>>\
<<set _TimeToAdvance to 6 - $WORLD.hour>>\
<<elseif $WORLD.hour is 6>>\
<<set _TimeToAdvance to 24>>\
<<else>>\
<<set _TimeToAdvance to 30 - $WORLD.hour>>\
<<endif>>\
<<set _TimeToAdvance to _TimeToAdvance * 60>>\
<<AdvanceTime _TimeToAdvance>>\
<<FullyHeal>>\
<<if setup.GetEffect("plague curse") > 0>>\
@@color:Orange;Sleep has not cured you of the plague curse.@@
<<else>>\
<<set _Voucher to setup.HasItemA(114)>>\
<<if _Voucher > -1>>\
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _Voucher)>>\
@@color:Orange;<<print _Tanya.toUpperFirst()>>@@: "I hadn't realized Rina was still passing out these vouchers. Hope you're ready to pay next time."
<<else>>\
@@color:Orange;<<print _Tanya.toUpperFirst()>>@@: "<<print either("Good morning","Looks like it's another day","Glad you could join us")>>. Here's some <<print either("oatmeal","dried mush","leftovers from last night","fruit","bread and cheese","jerky cutlets")>> on the house."
<<endif>>\
<<endif>>\
<<elseif $WORLD.datapasser is "chat">>\
<<set $WORLD.datapasser to "">>\
<<AdvanceTime 5>>\
<<if $WORLD.tavern is 0>>\
<<set $WORLD.tavern to 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello," you greet _Tanya. "I'm $PC[$CC][$PCname]. Are you a cat girl?"
@@color:Orange;Tavern kitty@@: "Yes," she rolls her eyes. "Souvinir from my tower-climbing days. The name's Tanya. And before you ask, no I didn't get very far in the tower, only barely to the second floor before I gave up. That place is a deathtrap. And before you ask, no I don't like belly rubs. At least not from strangers. Now, are you here to order something or just to gawk at my <<print either("ears","tail")>>?"
<<elseif $WORLD.tavern is 1>>\
<<set $WORLD.tavern to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sorry, I didn't realize it was a sensitive topic."
@@color:Orange;Tanya@@: "No, it's fine," she sighs. "I guess I just miss people staring at my tits but the cat parts keep hardly anyone from even noticing them anymore. Are you here to climb the tower?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "<<print either("That's the plan.","Yes.","Was it that obvious?")>>"
@@color:Orange;Tanya@@: "Pretty much the only reason any comes here," she nods. "Well, be careful in there or else you could end up a lot worse than I did. Anyway, I'm going to get back to work. If you haven't already, I suggest checking in with Rina at the guild call near the middle of town. Good luck."
<<elseif $WORLD.tavern is 2>>\
<<set $WORLD.tavern to 3>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So do you have any advice for me?"
<<if $PC[$CC][$PCsex] is "female">>\
@@color:Orange;Tanya@@: "Just the usual," she shrugs. "Try not to get raped, don't drink anything you don't know what it is, and especially don't do both of those at the same time."
<<else>>\
@@color:Orange;Tanya@@: "Don't get killed?" she shrugs. "Or do, if you want. I'm not your mother."
<<endif>>\
<<else>>\
(Dev note: end of generic Tanya dialogue. Implement more)
<<endif>>\
<<else>>\
<<if $WORLD.tavern is 0>>\
The busiest part of town, the <<print $WORLD.tavernname>> is the first harbor of welcome for new arrivals. It is the place to greet, and say farewell to those who would seek to climb The Tower.
"Stop letting the cold in!" a shrill, feminine voice scowls at you.
Stepping inside and allowing the door to close behind you, you behold the voice's owner: a short cat-girl with prominent ears, and a tail visibly peeking out from under her dress.
<<else>>\
<<if $WORLD.hour < 6>>\
The tavern is quiet, with only the lone _Tanya behind the bar,silently clearning with a tired look on her face. Does she ever sleep?
<<elseif $WORLD.hour < 10>>\
The tavern is quite busy, with _Tanya and a few other wenches serving breakfast to a room full of adventurers and travellers.
<<elseif $WORLD.hour < 14>>\
It's currently lunchtime at the tavern.
<<elseif $WORLD.hour < 18>>\
Early evening in the tavern seems to be a fairly quiet. Only a couple patrons sit at its many tables, and _Tanya appears to be napping behind the bar.
<<elseif $WORLD.hour < 22>>\
Nearly every seat is full, and the serving staff are clearly struggling to keep beer mugs and plates full. Adventurers regale tales of their exploits and a lone bard sings songs from one corner.
<<else>>\
The tavern is fairly quiet now, the evening rush having passed.
<<endif>>\
<<endif>>\
<<endif>>\
<hr>\
<<if _AllowStore is true>>\
<<Store $Tavern>>
<<endif>>\
<!-- text notes
"Let me guess," she drawls. "Your next question is going to be how big my tits are?"
"Uh, no?" you hesitate.
"Oh, skipping right to, 'how can I best seduce you?" she smirks. "Real classy of you."
"Hey, Tanya," you greet the tavern kitty. "Anything new?"
"The usual influx of suicidal adventurers here to climb the tower," she shrugs. "So nothing new, I guess."
-->\
<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>
<<button "[Controls]">>
<<replace "#HelpPortal">><<ShowHelpControls>><</replace>>\
<</button>> | \
<<button "[New player tips]">>
<<replace "#HelpPortal">><<ShowHelpTips>><</replace>>\
<</button>> | \
<<button "[Class info]">>
<<replace "#HelpPortal">><<ShowHelpClasses>><</replace>>\
<</button>> | \
<<button "[Transformation]">>
<<replace "#HelpPortal">><<ShowHelpTransformation>><</replace>>\
<</button>> | \
<<button "[FAQ]">>
<<replace "#HelpPortal">><<ShowHelpFAQ>><</replace>>\
<</button>>
<hr>\
<span id="HelpPortal"><<ShowHelpControls>></span><<widget "DescribeItem">>\
<<silently>>\
<<set _di to _args[0]>>\
<<set _iname to "error?">>\
<<set _equippable to false>>\
<<set _mindam to 0>>\
<<set _maxdam to 0>>\
<<set _attacktype to "">>\
<<set _armor to 0>>\
<<set _quantity to 0>>\
<<set _tooleffect to 0>>\
<<set _material to "">>\
<<set _hands to 0>>\
<<set _slot to -1>>\
<<set _flirt to 0>>\
<<set _restrict to "none">>
<<set _stackable to false>>
<<set _price to 0>>
<<set _foodval to 0>>
<<set _bang to false>>
<<set _forcename to "">>
<<set _morph to "none">>
<<set _sex to "none">>
<<set _unique to false>>
<<set _EnchantSuffix to "">>\
<<set _GuardianShieldMulti to 1>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "guardian">>\
<<if $PC[$CC][$PClevel] > 6>>\
<<set _GuardianShieldMulti to 2>>\
<<endif>>\
<<endif>>\
<!-- slots
1 head/heml
2 neck/amulet
3 chest
4 cloak
5 arms/equipped
6 pairs of gloves
7 sets of fingers
8 waist
9 pairs of legs
10 pairs of feet
-->
\
<!-- tool effects
1=rope
2=cut meat/string
3=cut wood
4=lockpick
5=bash lock
6=genric use (hair dye, ?)
7=available
8=holy symbol
9=liquid container
10=normal eat
11=normal drink
12=spellbook
13=cosmetic read text
14=voucher
15=potion
16=scissors
17=shieldblock
18=soultrap gemstone
19=magic jewelry
20=Transformative eat
21=Transformative drink
22=mining tool
23=light
24=reagent
-->\
<<if _di[0] is 0>>\
<<set _iname to "none">>\
<<elseif _di[0] is 100>>\
<<set _iname to "coil~ of rope">>\
<<set _tooleffect to 1>>\
<<set _stackable to true>>
<<set _price to 10>>
<<elseif _di[0] is 101>>\
<<set _iname to "small hammer">>\
<<set _tooleffect to 5>>\
<<set _price to 10>>
<<elseif _di[0] is 102>>\
<<set _iname to "chunk~ of ! meat">>\
<<set _bang to true>>\
<<set _tooleffect to 20>>\
<<set _stackable to true>>
<<set _price to 1>>
<<set _foodval to 250>>\
<<elseif _di[0] is 103>>\
<<set _iname to "dildo~">>\
<<set _tooleffect to 6>>\
<<set _price to 20>>
<<elseif _di[0] is 104>>\
<<set _iname to "holy symbol">>\
<<set _slot to $BPwield>>\
<<set _tooleffect to 8>>\
<<set _stackable to true>>
<<set _price to 50>>
<<elseif _di[0] is 105>>\
<<set _iname to "wooden log~">>\
<<set _stackable to true>>
<<set _price to 3>>
<<elseif _di[0] is 106>>\
<<set _iname to "apple~">>\
<<set _stackable to true>>\
<<set _price to 5>>\
<<set _tooleffect to 10>>\
<<set _foodval to 150>>\
<<elseif _di[0] is 107>>\
<<set _iname to "roll~ of cheese">>\
<<set _stackable to true>>\
<<set _tooleffect to 10>>\
<<set _price to 25>>\
<<set _foodval to 400>>\
<<elseif _di[0] is 108>>\
<<set _iname to "empty bottle~">>\
<<set _price to 5>>\
<<set _tooleffect to 9>>\
<<set _stackable to true>>
<<elseif _di[0] is 109>>\
<<set _iname to "bottle~ of !">>\
<<set _bang to true>>
<<set _foodval to 50>>\
<<set _price to 10>>\
<<set _tooleffect to 21>>\
<<set _stackable to true>>
<<elseif _di[0] is 110>>\
<<set _iname to "bread roll~">>\
<<set _foodval to 150>>\
<<set _tooleffect to 10>>\
<<set _price to 10>>\
<<set _stackable to true>>\
<<elseif _di[0] is 111>>\
<<set _iname to "spellbook !">>\
<<set _bang to true>>\
<<set _tooleffect to 12>>\
<<set _price to 100>>\
<<elseif _di[0] is 112>>\
<<set _iname to "book">>\
<<set _tooleffect to 13>>\
<<set _price to 50>>\
<<elseif _di[0] is 113>>\
<<set _iname to "butcher's knife">>\
<<set _tooleffect to 2>>\
<<set _price to 5>>
<<elseif _di[0] is 114>>\
<<set _iname to "voucher for one night's stay at the " + $WORLD.tavernname>>\
<<set _tooleffect to 14>>\
<<set _price to 5>>
<<elseif _di[0] is 115>>\
<<set _iname to "lockpick~">>\
<<set _tooleffect to 4>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 117>>\
<<set _iname to "bottle~ of ! hair dye">>\
<<set _tooleffect to 6>>\
<<set _stackable to true>>
<<set _bang to true>>
<<set _price to 50>>
<<elseif _di[0] is 118>>\
<<set _iname to "healing potion~">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 100>>
<<elseif _di[0] is 119>>\
<<set _iname to "potion~ of fire resistence">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 100>>
<<elseif _di[0] is 120>>\
<<set _iname to "hardwood log~">>\
<<set _stackable to true>>
<<set _price to 5>>
<<elseif _di[0] is 121>>\
<<set _iname to "steelwood log~">>\
<<set _stackable to true>>
<<set _price to 7>>
<<elseif _di[0] is 122>>\
<<set _iname to "faerie wood log~">>\
<<set _stackable to true>>
<<set _price to 9>>
<<elseif _di[0] is 123>>\
<<set _iname to "vial~ of antivenom">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 124>>\
<<set _iname to "potion~ of magic resistence">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 200>>
<<elseif _di[0] is 125>>\
<<set _iname to "vial~ of penis growth formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 126>>\
<<set _iname to "vial~ of penis reduction formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 127>>\
<<set _iname to "vial~ of breast growth formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 128>>\
<<set _iname to "vial~ of breast reduction formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 129>>\
<<set _iname to "vial~ of aphrodisiac">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 10>>\
<<elseif _di[0] is 130>>\
<<set _iname to "vial~ of fertili-tea">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 40>>\
<<elseif _di[0] is 131>>\
<<set _iname to "vial~ of contraceptive">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 40>>\
<<elseif _di[0] is 132>>\
<<set _iname to "scissors">>\
<<set _tooleffect to 16>>\
<<set _price to 10>>
<<elseif _di[0] is 133>>\
<<set _iname to "bottle~ of hair growth formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 50>>
<<elseif _di[0] is 134>>\
<<set _iname to "starter apple~">>\
<<set _stackable to true>>\
<<set _price to 0>>\
<<set _tooleffect to 10>>\
<<set _foodval to 100>>\
<<elseif _di[0] is 135>>\
<<set _iname to "fleshlight~">>\
<<set _tooleffect to 6>>\
<<set _stackable to true>>
<<set _price to 40>>
<<elseif _di[0] is 136>>\
<<set _iname to "bottle~ of acid">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 10>>
<<elseif _di[0] is 137>>\
<<set _iname to "potion~ of stoneskin">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 200>>
<<elseif _di[0] is 138>>\
<<set _iname to "cactus log~">>\
<<set _stackable to true>>
<<set _price to 7>>
<<elseif _di[0] is 139>>\
<<set _iname to "vial~ of pussy growth formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 140>>\
<<set _iname to "vial~ of pussy reduction formula">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 20>>
<<elseif _di[0] is 141>>\
<<set _iname to "starter roll~ of cheese">>\
<<set _stackable to true>>\
<<set _bang to true>>\
<<set _tooleffect to 10>>\
<<set _price to 0>>\
<<set _foodval to 250>>\
<<elseif _di[0] is 142>>\
<<set _iname to "lantern">>\
<<set _price to 100>>\
<<set _tooleffect to 23>>\
<<set _attacktype to "shine">>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 143>>\
<<set _iname to "rage potion~ ">>\
<<set _tooleffect to 15>>\
<<set _stackable to true>>
<<set _price to 200>>
<<elseif _di[0] is 144>>\
<<set _iname to "water walking potion~ ">>\
<<set _tooleffect to 16>>\
<<set _stackable to true>>
<<set _price to 200>>
<<elseif _di[0] is 145>>\
<<set _iname to "water breathing potion~ ">>\
<<set _tooleffect to 17>>\
<<set _stackable to true>>
<<set _price to 200>>
\
\
<!-- blunt weapons -->\
<<elseif _di[0] is 200>>\
<<set _iname to "club">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "blunt">>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 201>>\
<<set _iname to "mace">>\
<<set _mindam to 1>>\
<<set _maxdam to 7>>\
<<set _attacktype to "blunt">>
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 202>>\
<<set _iname to "war hammer">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "blunt">>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
\
<!-- cutting weapons -->\
<<elseif _di[0] is 210>>\
<<set _iname to "sabre">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "cut">>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 211>>\
<<set _iname to "falchion">>\
<<set _mindam to 1>>\
<<set _maxdam to 7>>\
<<set _attacktype to "cut">>
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 212>>\
<<set _iname to "claymore">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "cut">>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
\
<!-- cleave weapons -->
<<elseif _di[0] is 220>>\
<<set _iname to "hatchet">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "cleave">>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 221>>\
<<set _iname to "war axe">>\
<<set _mindam to 1>>\
<<set _maxdam to 7>>\
<<set _attacktype to "cleave">>\
<<set _price to 75>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 222>>\
<<set _iname to "halberd">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "cleave">>\
<<set _price to 125>>\
<<set _slot to $BPwield>>\
\
<!-- piercing weapons -->\
<<elseif _di[0] is 230>>\
<<set _iname to "dagger">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "pierce">>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 231>>\
<<set _iname to "spear">>\
<<set _mindam to 1>>\
<<set _maxdam to 7>>\
<<set _attacktype to "pierce">>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 232>>\
<<set _iname to "trident">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "pierce">>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
\
<!-- shields
<<elseif _di[0] is 240>>\
<<set _iname to "small shield">>\
<<set _armor to 6 * _GuardianShieldMulti>>\
<<set _attacktype to "block">>\
<<set _price to 60>>\
<<set _tooleffect to 17>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 241>>\
<<set _iname to "medium shield">>\
<<set _armor to 12 * _GuardianShieldMulti>>\
<<set _attacktype to "block">>\
<<set _price to 180>>\
<<set _tooleffect to 17>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 242>>\
<<set _iname to "tower shield">>\
<<set _armor to 24 * _GuardianShieldMulti>>\
<<set _attacktype to "block">>\
<<set _price to 480>>\
<<set _tooleffect to 17>>\
<<set _slot to $BPwield>>\
\
<!-- special drop non-unique weapons -->
<<elseif _di[0] is 250>>\
<!-- peasant start -->\
<<set _iname to "pitchfork">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "pierce">>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 251>>\
<!-- pre 23-7-01 Zehtalia -->\
<<set _iname to "flail">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "blunt">>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 252>>\
<!-- ninja start -->\
<<set _iname to "katana">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "cut">>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 253>>\
<<set _iname to "mining pick">>\
<<set _tooleffect to 22>>\
<<set _mindam to 1>>\
<<set _maxdam to 7>>\
<<set _attacktype to "pierce">>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
\
\
<<elseif _di[0] is 300>>\
<<set _iname to "plain shirt">>\
<<set _armor to 1>>\
<<set _slot to $BPchest>>\
<<set _price to 5>>
<<elseif _di[0] is 301>>\
<<set _iname to "blouse">>\
<<set _armor to 1>>\
<<set _slot to $BPchest>>\
<<set _price to 7>>
<<elseif _di[0] is 302>>\
<<set _iname to "belt">>\
<<set _armor to 1>>\
<<set _slot to $BPwaist>>\
<<set _price to 5>>
<<elseif _di[0] is 303>>\
<<set _iname to "pants">>\
<<set _armor to 1>>\
<<set _slot to $BPlegs>>\
<<set _price to 10>>
<<elseif _di[0] is 304>>\
<<set _iname to "skirt">>\
<<set _armor to 1>>\
<<set _slot to $BPlegs>>\
<<set _price to 12>>
<<elseif _di[0] is 305>>\
<<set _iname to "shoes">>\
<<set _armor to 2>>\
<<set _slot to $BPfeet>>\
<<set _restrict to "horse">>\
<<set _price to 3>>
<<elseif _di[0] is 306>>\
<<set _iname to "boots">>\
<<set _armor to 5>>\
<<set _slot to $BPfeet>>\
<<set _restrict to "horse">>\
<<set _price to 25>>
<<elseif _di[0] is 307>>\
<<set _iname to "girdle">>\
<<set _armor to 5>>\
<<set _slot to $BPwaist>>\
<<set _price to 50>>
<<elseif _di[0] is 308>>\
<<set _iname to "tiara">>\
<<set _armor to 2>>\
<<set _slot to $BPhead>>\
<<set _price to 10>>
<<elseif _di[0] is 309>>\
<<set _iname to "light helm">>\
<<set _armor to 4>>\
<<set _slot to $BPhead>>\
<<set _price to 20>>
<<elseif _di[0] is 310>>\
<<set _iname to "medium helmet">>\
<<set _armor to 8>>\
<<set _slot to $BPhead>>\
<<set _price to 80>>
<<elseif _di[0] is 311>>\
<<set _iname to "heavy helmet">>\
<<set _armor to 20>>\
<<set _slot to $BPhead>>\
<<set _price to 300>>
<<elseif _di[0] is 312>>\
<<set _iname to "cape">>\
<<set _armor to 2>>\
<<set _slot to $BPback>>\
<<set _price to 10>>
<<elseif _di[0] is 313>>\
<<set _iname to "cloak">>\
<<set _armor to 4>>\
<<set _slot to $BPback>>\
<<set _price to 20>>
<<elseif _di[0] is 314>>\
<<set _iname to "g-string">>\
<<set _armor to 1>>\
<<set _flirt to 1>>\
<<set _slot to $BPlegs>>\
<<set _price to 0>>
<<elseif _di[0] is 315>>\
<<set _iname to "nipple stickers">>\
<<set _armor to 1>>\
<<set _flirt to 1>>\
<<set _slot to $BPboobs>>\
<<set _price to 0>>
<<elseif _di[0] is 316>>\
<<set _iname to "high heels">>\
<<set _armor to 1>>\
<<set _flirt to 1>>\
<<set _slot to $BPfeet>>\
<<set _price to 0>>
<<elseif _di[0] is 317>>\
<<set _iname to "priest robes">>\
<<set _armor to 6>>\
<<set _slot to $BPchest>>\
<<set _price to 0>>
<<elseif _di[0] is 318>>\
<<set _iname to "(deprecated) archmage robes">>\
<<set _armor to 30>>\
<<set _slot to $BPchest>>\
<<set _price to 0>>
<<elseif _di[0] is 319>>\
<<set _iname to "ninja uniform">>\
<<set _armor to 6>>\
<<set _run to 1>>\
<<set _slot to $BPchest>>\
<<set _price to 40>>
<<elseif _di[0] is 320>>\
<<set _iname to "ninja cowl">>\
<<set _armor to 6>>\
<<set _run to 1>>\
<<set _slot to $BPhead>>\
<<set _price to 40>>
<<elseif _di[0] is 321>>\
<<set _iname to "ninja pants">>\
<<set _armor to 6>>\
<<set _run to 1>>\
<<set _slot to $BPlegs>>\
<<set _price to 40>>
<<elseif _di[0] is 322>>\
<<set _iname to "black belt">>\
<<set _armor to 6>>\
<<set _run to 1>>\
<<set _slot to $BPwaist>>\
<<set _price to 40>>
<<elseif _di[0] is 323>>\
<<set _iname to "tabi boots">>\
<<set _armor to 6>>\
<<set _run to 1>>\
<<set _slot to $BPfeet>>\
<<set _price to 40>>
<<elseif _di[0] is 350>>\
<<set _iname to "chainmail shirt">>\
<<set _armor to 10>>\
<<set _slot to $BPchest>>\
<<set _price to 50>>
<<elseif _di[0] is 351>>\
<<set _iname to "chainmail chemise">>\
<<set _armor to 15>>\
<<set _slot to $BPchest>>\
<<set _price to 150>>
<<elseif _di[0] is 352>>\
<<set _iname to "chainmail hauberk">>\
<<set _armor to 20>>\
<<set _slot to $BPchest>>\
<<set _price to 400>>
<<elseif _di[0] is 353>>\
<<set _iname to "chainmail leggings">>\
<<set _armor to 15>>\
<<set _slot to $BPlegs>>\
<<set _price to 225>>
<<elseif _di[0] is 354>>\
<<set _iname to "chainmail coif">>\
<<set _armor to 10>>\
<<set _slot to $BPhead>>\
<<set _price to 50>>
<<elseif _di[0] is 355>>\
<<set _iname to "chainmail gloves">>\
<<set _armor to 4>>\
<<set _slot to $BPhands>>\
<<set _price to 20>>
<<elseif _di[0] is 356>>\
<<set _iname to "chainmail bra">>\
<<set _armor to 2>>\
<<set _slot to $BPboobs>>\
<<set _price to 50>>
<<elseif _di[0] is 357>>\
<<set _iname to "chainmail skirt">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _price to 100>>
<<elseif _di[0] is 358>>\
<<set _iname to "chainmail miniskirt">>\
<<set _armor to 5>>\
<<set _slot to $BPlegs>>\
<<set _price to 25>>
<<elseif _di[0] is 359>>\
<<set _iname to "chainmail gorget">>\
<<set _armor to 5>>\
<<set _slot to $BPneck>>\
<<set _price to 50>>
<<elseif _di[0] is 360>>\
<<set _iname to "chainmail tail armor">>\
<<set _armor to 5>>\
<<set _slot to $BPtail>>\
<<set _price to 100>>
<<elseif _di[0] is 361>>\
<<set _iname to "chainmail wing armor">>\
<<set _armor to 10>>\
<<set _slot to $BPwings>>\
<<set _price to 200>>
<<elseif _di[0] is 362>>\
<<set _iname to "chainmail gauntlets">>\
<<set _armor to 8>>\
<<set _slot to $BPhands>>\
<<set _price to 80>>
<<elseif _di[0] is 363>>\
<<set _iname to "chainmail collar">>\
<<set _armor to 2>>\
<<set _slot to $BPneck>>\
<<set _price to 10>>
<<elseif _di[0] is 500>>\
<<set _iname to "ring">>\
<<set _slot to $BPring>>\
<<set _tooleffect to 19>>\
<<set _price to 200>>
<<elseif _di[0] is 501>>\
<<set _iname to "amulet">>\
<<set _slot to $BPneck>>\
<<set _tooleffect to 19>>\
<<set _price to 200>>
<<elseif _di[0] is 550>>\
<<set _iname to "quartz crystal~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 100>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 551>>\
<<set _iname to "garnet~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 200>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 552>>\
<<set _iname to "citrine~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 300>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 553>>\
<<set _iname to "moonstone~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 400>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 554>>\
<<set _iname to "bit~ of amethyst">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 500>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 555>>\
<<set _iname to "aquamarine~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 600>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 556>>\
<<set _iname to "star opal~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 700>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 557>>\
<<set _iname to "emerald~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 800>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 558>>\
<<set _iname to "sapphire~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 900>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 559>>\
<<set _iname to "diamond~">>\
<<set _stackable to true>>
<<set _tooleffect to 18>>\
<<set _price to 1000>>
<<set _slot to $BPwield>>\
<<elseif _di[0] is 600>>\
<<set _iname to "daisies">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 4>>
<<elseif _di[0] is 601>>\
<<set _iname to "skretch weed~">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 8>>
<<elseif _di[0] is 602>>\
<<set _iname to "sunflower~">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 12>>
<<elseif _di[0] is 603>>\
<<set _iname to "rose~">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 16>>
<<elseif _di[0] is 604>>\
<<set _iname to "goose berries">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 18>>
<<elseif _di[0] is 605>>\
<<set _iname to "brown mushroom~">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 22>>
<<elseif _di[0] is 606>>\
<<set _iname to "azalea~">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 26>>
<<elseif _di[0] is 607>>\
<<set _iname to "caerulus blossom~">>\
<<set _stackable to true>>
<<set _tooleffect to 24>>\
<<set _price to 28>>
<<elseif _di[0] is 700>>\
<!-- Zehtalia -->\
<<set _unique to true>>\
<<set _iname to "the flail, @@color:LightBlue;'Ipsimus'@@">>\
<<set _mindam to 12>>\
<<set _maxdam to 24>>\
<<set _attacktype to "blunt">>\
<<set _price to 0>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 701>>\
<!-- Zehtalia -->\
<<set _unique to true>>\
<<set _iname to "the falchion, @@color:LightBlue;'Custodia'@@">>\
<<set _mindam to 8>>\
<<set _maxdam to 18>>\
<<set _attacktype to "cut">>\
<<set _price to 0>>\
<<set _armor to 10>>\
<<set _slot to $BPwield>>\
\
<<elseif _di[0] is 999>>\
<<set _iname to "a corpse">>\
<<set _CorpsePTR to _di[1]>>\
<<set _forcename to "the corpse of " + $PC[_CorpsePTR][$PCname]>>\
<<endif>>\
\
<<if _di[1] is 100>>\
<<elseif _di[1] is 101>>\
<<set _material to "wooden">>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam -1>>\
<<set _maxdam to _maxdam -1>>\
<<if _mindam < 1>><<set _mindam to 1>><<endif>>\
<<if _maxdam < 1>><<set _maxdam to 1>><<endif>>\
<<elseif _armor > 0>>\
<<set _armor to _armor - 5>>\
<<if _armor < 1>><<set _armor to 1>><<endif>>\
<<endif>>\
<<elseif _di[1] is 102>>\
<<set _material to "copper">>\
<<set _price to Math.trunc(_price * .8)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam -1>>\
<<set _maxdam to _maxdam -1>>\
<<if _mindam < 1>><<set _mindam to 1>><<endif>>\
<<if _maxdam < 1>><<set _maxdam to 1>><<endif>>\
<<elseif _armor > 0>>\
<<set _armor to _armor - 2>>\
<<if _armor < 1>><<set _armor to 1>><<endif>>\
<<endif>>\
<<elseif _di[1] is 103>>\
<<set _material to "brass">>\
<<elseif _di[1] is 104>>\
<<set _material to "iron">>\
<<set _price to (_price + 50) * 2>>\
<<if _maxdam > 0>>\
<<set _mindam to Math.trunc((_mindam +1) * 1.4)>>\
<<set _maxdam to Math.trunc((_maxdam +1) * 1.4)>>\
<<elseif _armor > 0>>\
<<set _armor to Math.trunc((_armor +1) * 1.4)>>\
<<endif>>\
<<elseif _di[1] is 105>>\
<<set _material to "steel">>\
<<set _price to (_price + 100) * 3>>\
<<if _maxdam > 0>>\
<<set _mindam to Math.trunc((_mindam +2) * 1.8)>>\
<<set _maxdam to Math.trunc((_maxdam +2) * 1.8)>>\
<<elseif _armor > 0>>\
<<set _armor to Math.trunc((_armor +2) * 1.8)>>\
<<endif>>\
<<elseif _di[1] is 106>>\
<<set _price to (_price + 800) * 6>>\
<<set _material to "mithril">>\
<<if _maxdam > 0>>\
<<set _mindam to Math.trunc((_mindam +3) * 2.2)>>\
<<set _maxdam to Math.trunc((_maxdam +3) * 2.2)>>\
<<elseif _armor > 0>>\
<<set _armor to Math.trunc((_armor +3) * 2.2)>>\
<<endif>>\
<<elseif _di[1] is 107>>\
<<set _price to (_price + 1600) * 20>>\
<<set _material to "scalar">>\
<<if _maxdam > 0>>\
<<set _mindam to Math.trunc((_mindam +4) * 2.6)>>\
<<set _maxdam to Math.trunc((_maxdam +4) * 2.6)>>\
<<elseif _armor > 0>>\
<<set _armor to Math.trunc((_armor +4) * 2.6)>>\
<<endif>>\
<<elseif _di[1] is 108>>\
<<set _material to "silver">>\
<<set _price to _price + 200>>\
<<elseif _di[1] is 109>>\
<<set _material to "gold">>\
<<set _price to _price + 300>>\
<<elseif _di[1] is 150>>\
<<set _material to "cloth">>\
<<elseif _di[1] is 151>>\
<<set _material to "leather">>\
<<set _flirt to 1>>\
<<elseif _di[1] is 152>>\
<<set _material to "silk">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 160>>\
<<set _material to "starter">>\
<<set _price to 0>>\
<<if _maxdam > 0>>\
<<set _mindam to Math.trunc(_mindam / 2)>>\
<<set _maxdam to Math.trunc(_maxdam / 2)>>\
<<if _mindam < 1>><<set _mindam to 1>><<endif>>\
<<if _maxdam < 1>><<set _maxdam to 1>><<endif>>\
<<elseif _armor > 0>>\
<<set _armor to Math.trunc(_armor / 2)>>\
<<if _armor < 1>><<set _armor to 1>><<endif>>\
<<endif>>\
<<elseif _di[1] is 550>><!-- quartz -->\
<<set _OLD to _iname + "@@color:Red;(Legacy item)@@ @@color:LightGreen;of health@@ (+" + _di[3] * 5 + ")">>\
<<set _iname to _iname + "@@color:Red;(Legacy item - deprecated)@@">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 551>><!-- garnet -->\
<<set _OLD to _iname + "@@color:Red;(Legacy item)@@ @@color:LightGreen;of defense@@ (+" + _di[3] * 4 + ")">>\
<<set _iname to _iname + "@@color:Red;(Legacy item - deprecated)@@">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 552>><!-- citrine -->\
<<set _OLD to _iname + "@@color:Red;(Legacy item)@@ @@color:LightGreen;of accuracy@@ (+" + _di[3] * 3 + ")">>\
<<set _iname to _iname + "@@color:Red;(Legacy item - deprecated)@@">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 553>><!-- moonstone -->\
<<set _OLD to _iname + "@@color:Red;(Legacy item)@@ @@color:LightGreen;of mana@@ (+" + _di[3] + ")">>\
<<set _iname to _iname + "@@color:Red;(Legacy item - deprecated)@@">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 554>><!-- amethyst -->\
<<set _rep to "of NOT IMPLEMENTED">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 555>><-- aquamarine -->\
<<set _rep to "of NOT IMPLEMENTED">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 556>><!-- star opal -->\
<<set _rep to "of NOT IMPLEMENTED">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 557>><!-- emerald -->\
<<set _rep to "of NOT IMPLEMENTED">>\
<<set _price to _price * 4>>\
<<elseif _di[1] is 558>><!-- sapphire -->\
<<set _rep to "of NOT IMPLEMENTED">>\
<<set _price to _price * 3>>\
<<elseif _di[1] is 559>><!-- diamond -->\
<<set _rep to "of NOT IMPLEMENTED">>\
<<set _price to _price * 3>>\
<<endif>>\
\
<<if _price < 0>>\
<<set _price to 0>>\
<<endif>>\
\
<<if _mindam < 0>>\
<<set _mindam to 0>>\
<<endif>>\
<<if _maxdam < 0>>\
<<set _maxdam to 0>>\
<<endif>>\
<<if _armor < 0>>\
<<set _armor to 0>>\
<<endif>>\
\
\
\
<<set _fullname to _iname>>\
\
\
\
<<if (_tooleffect is 18) and (_di[3] > 0)>>\
<!-- no number for full soul gems -->\
<<set _fullname to setup.GenericReplace(_fullname, "~", "")>>\
<<set _price to _price + _price + (_di[3] * 100)>>
<<set _stackable to false>>\
<<elseif (_tooleffect is 19)>>\
<!-- enchanted item -->\
<<elseif _stackable is true>>\
<<set _quantity to _di[2]>>
<<set _fullname to setup.pluralize(_fullname, _quantity)>>\
<<endif>>\
<<if _material neq "">>\
<<set _fullname to _material + " " + _iname>>\
<<endif>>\
\
\
<<if _di[4] is 550>><!-- quartz -->\
<<set _fullname to _fullname + " @@color:LightGreen;of health@@ (+" + _di[3] + ")">>\
<<set _price to _price + (_di[3] * 100)>>\
<<elseif _di[4] is 551>><!-- garnet -->\
<<set _fullname to _fullname + " @@color:LightGreen;of defense@@ (+" + _di[3] + ")">>\
<<set _price to _price + (_di[3] * 100)>>\
<<elseif _di[4] is 552>><!-- citrine -->\
<<set _fullname to _fullname + " @@color:LightGreen;of accuracy@@ (+" + _di[3] + ")">>\
<<set _price to _price + (_di[3] * 100)>>\
<<elseif _di[4] is 553>><!-- moonstone -->\
<<set _fullname to _fullname + " @@color:LightGreen;of mana@@ (+" + _di[3] + ")">>\
<<set _price to _price + (_di[3] * 100)>>\
<<elseif _di[4] is 700>>\
<<set _EnchantSuffix to " @@color:LightGreen;of immutability@@">>\
<<set _price to _price + 500>>\
<<endif>>\
\
\
<<if _bang is true>>\
<<set _rep to "error">>\
<<if (_di[3] > 0) and (_di[3] < 21)>>\
<!-- levels for gems and jewelry -->\
<<set _stackable to false>>\
<<set _rep to "">>\
<<elseif _di[3] is 100>>\
<<set _rep to "bunny-morph">>\
<<set _morph to "bunny-morph">>\
<<set _sex to "none">>\
<<set _price to 2>>\
<<elseif _di[3] is 101>>\
<<set _rep to "cat-morph">>\
<<set _morph to "cat-morph">>\
<<set _sex to "none">>\
<<set _price to 2>>\
<<elseif _di[3] is 102>>\
<<set _rep to "fox-morph">>\
<<set _morph to "fox-morph">>\
<<set _sex to "none">>\
<<set _price to 2>>\
<<elseif _di[3] is 103>>\
<<set _rep to "wolf-morph">>\
<<set _morph to "wolf-morph">>\
<<set _sex to "none">>\
<<set _price to 2>>\
<<elseif _di[3] is 104>>\
<<set _rep to "horse">>\
<<set _morph to "horse">>\
<<set _sex to "none">>\
<<set _price to 5>>\
<<elseif _di[3] is 105>>\
<<set _rep to "centaur">>\
<<set _morph to "centaur">>\
<<set _sex to "none">>\
<<set _price to 5>>\
<<elseif _di[3] is 106>>\
<<set _rep to "human">>\
<<set _morph to "human">>\
<<set _sex to "none">>\
<<set _price to 10>>\
<<elseif _di[3] is 107>>\
<<set _rep to "goblin">>\
<<set _morph to "goblin">>\
<<set _sex to "none">>\
<<set _price to 10>>\
<<elseif _di[3] is 108>>\
<<set _rep to "slime">>\
<<set _morph to "slime">>\
<<set _sex to "none">>\
<<set _price to 10>>\
<<elseif _di[3] is 109>>\
<<set _rep to "spider">>\
<<set _morph to "spider">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 110>>\
<<set _rep to "imp">>\
<<set _morph to "imp">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 111>>\
<<set _rep to "hellhound">>\
<<set _morph to "hellhound">>\
<<set _sex to "none">>\
<<set _price to 40>>\
<<elseif _di[3] is 112>>\
<<set _rep to "cow">>\
<<set _morph to "cow">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 113>>\
<<set _rep to "drider">>\
<<set _morph to "drider">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 114>>\
<<set _rep to "tentacle">>\
<<set _morph to "tentacle">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 115>>\
<<set _rep to "demon">>\
<<set _morph to "demon">>\
<<set _sex to "none">>\
<<set _price to 50>>\
<<elseif _di[3] is 116>>\
<<set _rep to "snake">>\
<<set _morph to "snake">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 117>>\
<<set _rep to "wolf">>\
<<set _morph to "wolf">>\
<<set _sex to "none">>\
<<set _price to 5>>\
<<elseif _di[3] is 118>>\
<<set _rep to "ant">>\
<<set _morph to "ant">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 119>>\
<<set _rep to "scorpion">>\
<<set _morph to "scorpion">>\
<<set _sex to "none">>\
<<set _price to 20>>\
<<elseif _di[3] is 120>>\
<<set _rep to "harpy">>\
<<set _morph to "harpy">>\
<<set _sex to "none">>\
<<set _price to 30>>\
<<elseif _di[3] is 121>>\
<<set _rep to "hydra">>\
<<set _morph to "hydra">>\
<<set _sex to "none">>\
<<set _price to 50>>\
<<elseif _di[3] is 122>>\
<<set _rep to "rat">>\
<<set _morph to "rat">>\
<<set _sex to "none">>\
<<set _price to 30>>\
<<elseif _di[3] is 123>>\
<<set _rep to "troll">>\
<<set _morph to "troll">>\
<<set _sex to "none">>\
<<set _price to 30>>\
<<elseif _di[3] is 124>>\
<<set _rep to "naga">>\
<<set _morph to "naga">>\
<<set _sex to "none">>\
<<set _price to 50>>\
<<elseif _di[3] is 125>>\
<<set _rep to "minotaur">>\
<<set _morph to "minotaur">>\
<<set _sex to "none">>\
<<set _price to 50>>\
<<elseif _di[3] is 126>>\
<<set _rep to "rat-morph">>\
<<set _morph to "rat-morph">>\
<<set _sex to "none">>\
<<set _price to 30>>\
<<elseif _di[3] is 199>>\
<<set _rep to "unidentifiable">>\
<<set _price to 5>>\
<<elseif _di[3] is 200>>\
<<set _rep to "bunny-morph semen">>\
<<set _morph to "bunny-morph">>\
<<set _sex to "male">>\
<<set _price to 10>>\
<<elseif _di[3] is 201>>\
<<set _rep to "cat-morph semen">>\
<<set _morph to "cat-morph">>\
<<set _sex to "male">>\
<<set _price to 20>>\
<<elseif _di[3] is 202>>\
<<set _rep to "fox-morph semen">>\
<<set _morph to "fox-morph">>\
<<set _sex to "male">>\
<<set _price to 20>>\
<<elseif _di[3] is 203>>\
<<set _rep to "wolf-morph semen">>\
<<set _morph to "wolf-morph">>\
<<set _sex to "male">>\
<<set _price to 20>>\
<<elseif _di[3] is 204>>\
<<set _rep to "horse semen">>\
<<set _morph to "horse">>\
<<set _sex to "male">>\
<<set _price to 40>>\
<<elseif _di[3] is 205>>\
<<set _rep to "centaur semen">>\
<<set _morph to "centaur">>\
<<set _sex to "male">>\
<<set _price to 50>>\
<<elseif _di[3] is 206>>\
<<set _rep to "human semen">>\
<<set _morph to "human">>\
<<set _sex to "male">>\
<<set _price to 60>>\
<<elseif _di[3] is 207>>\
<<set _rep to "goblin semen">>\
<<set _morph to "goblin">>\
<<set _sex to "male">>\
<<set _price to 60>>\
<<elseif _di[3] is 208>>\
<<set _rep to "ERROR SLIME NOT USED">>\
<<elseif _di[3] is 209>>\
<<set _rep to "spider semen">>\
<<set _morph to "spider">>\
<<set _sex to "male">>\
<<set _price to 80>>\
<<elseif _di[3] is 210>>\
<<set _rep to "imp semen">>\
<<set _morph to "imp">>\
<<set _sex to "male">>\
<<set _price to 80>>\
<<elseif _di[3] is 211>>\
<<set _rep to "hellhound semen">>\
<<set _morph to "hellhound">>\
<<set _sex to "male">>\
<<set _price to 100>>\
<<elseif _di[3] is 212>>\
<<set _rep to "cow semen">>\
<<set _morph to "cow">>\
<<set _sex to "male">>\
<<set _price to 80>>\
<<elseif _di[3] is 213>>\
<<set _rep to "drider semen">>\
<<set _morph to "drider">>\
<<set _sex to "male">>\
<<set _price to 100>>\
<<elseif _di[3] is 214>>\
<<set _rep to "tentacle semen">>\
<<set _morph to "tentacle">>\
<<set _sex to "male">>\
<<set _price to 100>>\
<<elseif _di[3] is 215>>\
<!-- demon -->\
<<set _rep to "incubus semen">>\
<<set _morph to "demon">>\
<<set _sex to "male">>\
<<set _price to 200>>\
<<elseif _di[3] is 216>>\
<<set _rep to "snake semen">>\
<<set _morph to "snake">>\
<<set _sex to "male">>\
<<set _price to 75>>\
<<elseif _di[3] is 217>>\
<<set _rep to "wolf semen">>\
<<set _morph to "wolf">>\
<<set _sex to "male">>\
<<set _price to 40>>\
<<elseif _di[3] is 218>>\
<<set _rep to "ant semen">>\
<<set _morph to "ant">>\
<<set _sex to "male">>\
<<set _price to 40>>\
<<elseif _di[3] is 219>>\
<<set _rep to "scorpion semen">>\
<<set _morph to "scorpion">>\
<<set _sex to "male">>\
<<set _price to 40>>\
<<elseif _di[3] is 220>>\
<<set _rep to "harpy semen">>\
<<set _morph to "harpy">>\
<<set _sex to "male">>\
<<set _price to 60>>\
<<elseif _di[3] is 221>>\
<<set _rep to "hydra semen">>\
<<set _morph to "hydra">>\
<<set _sex to "male">>\
<<set _price to 50>>\
<<elseif _di[3] is 222>>\
<<set _rep to "rat semen">>\
<<set _morph to "rat">>\
<<set _sex to "male">>\
<<set _price to 30>>\
<<elseif _di[3] is 223>>\
<<set _rep to "troll semen">>\
<<set _morph to "troll">>\
<<set _sex to "male">>\
<<set _price to 30>>\
<<elseif _di[3] is 224>>\
<<set _rep to "naga semen">>\
<<set _morph to "naga">>\
<<set _sex to "male">>\
<<set _price to 50>>\
<<elseif _di[3] is 225>>\
<<set _rep to "minotaur semen">>\
<<set _morph to "minotaur">>\
<<set _sex to "male">>\
<<set _price to 50>>\
<<elseif _di[3] is 226>>\
<<set _rep to "rat-morph semen">>\
<<set _morph to "rat-morph">>\
<<set _sex to "male">>\
<<set _price to 30>>\
<<elseif _di[3] is 299>>\
<<set _rep to "unidentified semen">>\
<<set _morph to "random">>\
<<set _sex to "male">>\
<<elseif _di[3] is 300>>\
<<set _rep to "bunny-morph milk">>\
<<set _morph to "bunny-morph">>\
<<set _sex to "female">>\
<<set _price to 20>>\
<<elseif _di[3] is 301>>\
<<set _rep to "cat-morph milk">>\
<<set _morph to "cat-morph">>\
<<set _sex to "female">>\
<<set _price to 20>>\
<<elseif _di[3] is 302>>\
<<set _rep to "fox-morph milk">>\
<<set _morph to "fox-morph">>\
<<set _sex to "female">>\
<<set _price to 20>>\
<<elseif _di[3] is 303>>\
<<set _rep to "wolf-morph milk">>\
<<set _morph to "wolf-morph">>\
<<set _sex to "female">>\
<<set _price to 20>>\
<<elseif _di[3] is 304>>\
<<set _rep to "horse milk">>\
<<set _morph to "horse">>\
<<set _sex to "female">>\
<<set _price to 40>>\
<<elseif _di[3] is 305>>\
<<set _rep to "centaur milk">>\
<<set _morph to "centaur">>\
<<set _sex to "female">>\
<<set _price to 40>>\
<<elseif _di[3] is 306>>\
<<set _rep to "human breast milk">>\
<<set _morph to "human">>\
<<set _sex to "female">>\
<<set _price to 60>>\
<<elseif _di[3] is 307>>\
<<set _rep to "goblin milk">>\
<<set _morph to "goblin">>\
<<set _sex to "female">>\
<<set _price to 60>>\
<<elseif _di[3] is 308>>\
<<set _rep to "error slimes don't have milk">>\
<<elseif _di[3] is 309>>\
<<set _rep to "spider milk">>\
<<set _morph to "spider">>\
<<set _sex to "female">>\
<<set _price to 60>>\
<<elseif _di[3] is 310>>\
<<set _rep to "imp milk">>\
<<set _morph to "imp">>\
<<set _sex to "female">>\
<<set _price to 50>>\
<<elseif _di[3] is 311>>\
<<set _rep to "hellhound milk">>\
<<set _morph to "hellhound">>\
<<set _sex to "female">>\
<<set _price to 100>>\
<<elseif _di[3] is 312>>\
<<set _rep to "cow milk">>\
<<set _morph to "cow">>\
<<set _sex to "female">>\
<<set _price to 80>>\
<<elseif _di[3] is 313>>\
<<set _rep to "drider milk">>\
<<set _morph to "drider">>\
<<set _sex to "female">>\
<<set _price to 100>>\
<<elseif _di[3] is 314>>\
<<set _rep to "error tentacles don't have milk">>\
<<elseif _di[3] is 315>>\
<<set _rep to "succubus milk">>\
<<set _morph to "demon">>\
<<set _sex to "female">>\
<<set _price to 200>>\
<<elseif _di[3] is 316>>\
<<set _rep to "naga milk">>\
<<set _morph to "human">>\
<<set _sex to "female">>\
<<set _price to 40>>\
<<elseif _di[3] is 317>>\
<!-- wolves are currently only male? -->\
<<set _rep to "wolf milk">>\
<<set _morph to "wolf">>\
<<set _sex to "female">>\
<<set _price to 50>>\
<<elseif _di[3] is 318>>\
<<set _rep to "ant milk">>\
<<set _morph to "ant">>\
<<set _sex to "female">>\
<<set _price to 40>>\
<<elseif _di[3] is 319>>\
<<set _rep to "scorpion milk">>\
<<set _morph to "scorpion">>\
<<set _sex to "female">>\
<<set _price to 60>>\
<<elseif _di[3] is 320>>\
<<set _rep to "harpy milk">>\
<<set _morph to "harpy">>\
<<set _sex to "female">>\
<<set _price to 80>>\
<<elseif _di[3] is 321>>\
<<set _rep to "hydra milk">>\
<<set _morph to "hydra">>\
<<set _sex to "female">>\
<<set _price to 50>>\
<<elseif _di[3] is 322>>\
<<set _rep to "rat milk">>\
<<set _morph to "rat">>\
<<set _sex to "female">>\
<<set _price to 30>>\
<<elseif _di[3] is 323>>\
<<set _rep to "troll milk">>\
<<set _morph to "troll">>\
<<set _sex to "female">>\
<<set _price to 30>>\
<<elseif _di[3] is 324>>\
<<set _rep to "naga milk">>\
<<set _morph to "naga">>\
<<set _sex to "female">>\
<<set _price to 50>>\
<<elseif _di[3] is 325>>\
<<set _rep to "minotaur milk">>\
<<set _morph to "minotaur">>\
<<set _sex to "female">>\
<<set _price to 50>>\
<<elseif _di[3] is 326>>\
<<set _rep to "rat-morph milk">>\
<<set _morph to "rat-morph">>\
<<set _sex to "female">>\
<<set _price to 30>>\
<<elseif _di[3] is 399>>\
<<set _rep to "unidentifiable milk">>\
<<set _price to 75>>\
<<elseif _di[3] is 400>>\
<<set _rep to "slime goo">>\
<<set _morph to "slime">>\
<<set _sex to "herm">>\
<<elseif _di[3] is 401>>\
<<set _rep to "water">>\
<<set _price to 5>>\
<<set _tooleffect to 11>>\
<<elseif _di[3] is 402>>\
<<set _rep to "beer">>\
<<set _price to 7>>\
<<set _tooleffect to 11>>\
<<elseif _di[3] is 403>>\
<<set _rep to "wine">>\
<<set _price to 9>>\
<<set _tooleffect to 11>>\
<<elseif _di[3] is 500>>
<<set _rep to " of firebolt">>
<<set _price to 400>>\
<<elseif _di[3] is 501>>
<<set _rep to " of heal">>
<<set _price to 400>>\
<<elseif _di[3] is 502>>
<<set _rep to " of armor">>
<<set _price to 400>>\
<<elseif _di[3] is 503>>
<<set _rep to " of poison">>
<<set _price to 400>>\
<<elseif _di[3] is 504>>
<<set _rep to " of up">>
<<set _price to 400>>\
<<elseif _di[3] is 505>>
<<set _rep to " of down">>
<<set _price to 1000>>\
<<elseif _di[3] is 506>>
<<set _rep to " of portal">>
<<set _price to 400>>\
<<elseif _di[3] is 507>>
<<set _rep to " of light">>
<<set _price to 400>>\
<<elseif _di[3] is 508>>
<<set _rep to " of map">>
<<set _price to 400>>\
<<elseif _di[3] is 509>>
<<set _rep to " of passwall">>
<<set _price to 400>>\
<<elseif _di[3] is 510>>
<<set _rep to " of soul trap">>
<<set _price to 400>>\
<<elseif _di[3] is 511>>
<<set _rep to " of dart">>
<<set _price to 400>>\
\
<<elseif _di[3] is 600>>\
<<set _rep to "black">>\
<<set _price to 100>>\
<<elseif _di[3] is 601>>\
<<set _rep to "white">>\
<<set _price to 100>>\
<<elseif _di[3] is 602>>\
<<set _rep to "brunette">>\
<<set _price to 100>>\
<<elseif _di[3] is 603>>\
<<set _rep to "red">>\
<<set _price to 100>>\
<<elseif _di[3] is 604>>\
<<set _rep to "blonde">>\
<<set _price to 100>>\
<<elseif _di[3] is 605>>\
<<set _rep to "platinum blonde">>\
<<set _price to 100>>\
<<elseif _di[3] is 606>>\
<<set _rep to "brown">>\
<<set _price to 100>>\
<<elseif _di[3] is 607>>\
<<set _rep to "blue">>\
<<set _price to 100>>\
<<elseif _di[3] is 608>>\
<<set _rep to "pink">>\
<<set _price to 100>>\
<<elseif _di[3] is 609>>\
<<set _rep to "orange">>\
<<set _price to 100>>\
<<elseif _di[3] is 610>>\
<<set _rep to "green">>\
<<set _price to 100>>\
<<elseif _di[3] is 611>>\
<<set _rep to "purple">>\
<<set _price to 100>>\
<<endif>>\
<<set _foo to "di3 is: " + _di[3] + ", rep is: " + _rep + "<br>">>\
<<AddToLog _foo>>\
<<set _puppies to setup.Bang(_fullname, _rep)>>\
<<set _fullname to _puppies>>\
<<else>>
<<if _di[3] is 550>>\
<<set _forcename to "A Treatise on Ponerology">>\
<<set _price to 100>>\
<<elseif _di[3] is 551>>\
<<set _forcename to "Etymology of the Echidna">>\
<<set _price to 100>>\
<<endif>>
<<endif>>
\
<!-- soul gems -->\
<<if (_tooleffect is 18) and (_di[3] > 0)>>\
<<set _forcename to setup.Bang(_fullname, "") + " (Level " + _di[3] + " soul)">>\
<<endif>>\
\
<<if _forcename neq "">>\
<<set _fullname to _forcename>>\
<<endif>>\
<<if _EnchantSuffix is "">>\
<<else>>\
<<set _fullname to _fullname + _EnchantSuffix>>\
<<endif>>\
<<if _maxdam > 0>>\
<<set _fullname to _fullname + " (" + _attacktype + ": " + _mindam + "-" + _maxdam + ")">>\
<<endif>>\
<<if _armor > 0>>\
<<set _fullname to _fullname + " [armor: " + _armor + "]">>\
<<endif>>\
<<if _flirt > 0>>\
<<set _fullname to _fullname + " {sexy: " + _flirt + "}">>\
<<endif>>\
<<if 1 is 0 >>\
<<set _asd to setup.bpptrtoname(_slot, "formal")>>\
<<set _fullname to _fullname + " (Equip to: " + _asd +")">>\
<<endif>>\
\
<<set $ItemPoke to
{ name: _iname, fullname: _fullname, mindam: _mindam, maxdam: _maxdam, attacktype: _attacktype, handsreq: _hands, armor:_armor, tooleffect: _tooleffect, qty: _quantity, slot: _slot, flirt: _flirt, restrict: _restrict, foodval: _foodval, price: _price, stackable: _stackable, morph: _morph, sex: _sex, usedata: _rep, unique: _unique}>>\
<</silently>>\
<</widget>>\
<<widget "Restock">>\
<<set _which to $args[0]>>\
<<if _which is "all">>\
<<set $WORLD.restock to $WORLD.day>>\
<<endif>>\
<<if (_which is "tavern") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>><<set $STORE[$Tavern][_i] to [0,0,0,0,0]>><</for>>\
<!-- always 2 bottles of plain drinks -->\
<<set _pool to setup.getfrom(2, [401, 402, 403])>>\
<<set _era to random(2,6)>>\
<<set _erb to random(2,6)>>\
<<set $STORE[$Tavern][0] to [109, 0, _era, parseInt(_pool[0]), 0]>>\
<<set $STORE[$Tavern][1] to [109, 0, _erb, parseInt(_pool[1]), 0]>>\
<!-- 2 of boring food -->\
<<set _pool to setup.getfrom(2, [106, 107, 110])>>\
<<set _era to random(3,6)>>\
<<set _erb to random(3,6)>>\
<<set $STORE[$Tavern][2] to [parseInt(_pool[0]), 0, _era, 0, 0]>>\
<<set $STORE[$Tavern][3] to [parseInt(_pool[1]), 0, _erb, 0, 0]>>\
<!-- 2 sketchy meat -->\
<<set _era to random(1,3)>>\
<<set _erb to random(1,3)>>\
<<set _pool to setup.getfrom(2, [100, 101, 102])>>\
<<set $STORE[$Tavern][4] to [102, 0, _era, parseInt(_pool[0]), 0]>>\
<<set $STORE[$Tavern][5] to [102, 0, _erb, parseInt(_pool[1]), 0]>>\
<!-- 2 sketchy milk -->\
<<set _era to random(1,3)>>\
<<set _erb to random(1,3)>>\
<<set _pool to setup.getfrom(2, [300, 301, 302, 303, 312])>>\
<<set $STORE[$Tavern][6] to [109, 0, _era, parseInt(_pool[0]), 0]>>\
<<set $STORE[$Tavern][7] to [109, 0, _erb, parseInt(_pool[1]), 0]>>\
<<endif>>\
<<if (_which is "selene") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>><<set $STORE[$Selene][_i] to [0,0,0,0,0]>><</for>>\
<<set _Bqty to random(2, 4)>>\
<<set $STORE[$Selene][0] to [108, 0, _Bqty, 0]>>\
\
<<set _SpellbookChance to 0>>\
<<for _Sctr to 0; _Sctr < 6; _Sctr++>>\
<<if $WORLD.SeleneQuests[_Sctr] is 3>>\
<<set _SpellbookChance to _SpellbookChance +1>>\
<<endif>>\
<</for>>\
<<set _SpellbookChance to 0>>\
<<if _SpellbookChance > random(0,10)>>\
<<set _PickABook to either(500,501,502,503,504,505,506,507,508,511)>>\
<<set _GS to [111, 0, 0, _PickABook]>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
\
<<if $WORLD.SeleneQuests[9] is 3>>\
<<endif>>\
<<if $WORLD.SeleneQuests[8] is 3>>\
<<endif>>\
<<if $WORLD.SeleneQuests[7] is 3>>\
<!-- water walking potion -->\
<<set _GS to [144, 0, random(1,2), 0]>>\
<<AddToStore $Selene _GS>>\
<!-- water walking potion -->\
<<set _GS to [145, 0, random(1,2), 0]>>\
<<endif>>\
<<if $WORLD.SeleneQuests[6] is 3>>\
<!-- rage potion -->\
<<set _GS to [143, 0, random(1,2), 0]>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
<<if $WORLD.SeleneQuests[5] is 3>>\
<!-- healing potions -->\
<<set _GS to [118, 0, random(1,3), 0]>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
<<if $WORLD.SeleneQuests[4] is 3>>\
<!-- antivenom -->\
<<set _GS to [123, 0, random(2,4), 0]>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
<<if $WORLD.SeleneQuests[3] is 3>>\
<!-- fire, magic, stoneskin resist -->\
<<set _r to random(1,3)>>\
<<if _r is 1>>\
<<set _GS to [137, 0, 1, 0]>>\
<<elseif _r is 2>>\
<<set _GS to [119, 0, 1, 0]>>\
<<else>>\
<<set _GS to [124, 0, 1, 0]>>\
<<endif>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
<<if $WORLD.SeleneQuests[2] is 3>>\
<!-- penis/breast growth/reduction formula -->\
<<if random(1,2) is 1>>\
<<set _GS to [125, 0, random(1,3), 0]>>\
<<else>>\
<<set _GS to [126, 0, random(1,3), 0]>>\
<<endif>>\
<<AddToStore $Selene _GS>>\
<<if random(1,2) is 1>>\
<<set _GS to [127, 0, random(1,3), 0]>>\
<<else>>\
<<set _GS to [128, 0, random(1,3), 0]>>\
<<endif>>\
<<AddToStore $Selene _GS>>\
<<if random(1,2) is 1>>\
<<set _GS to [139, 0, random(1,3), 0]>>\
<<else>>\
<<set _GS to [140, 0, random(1,3), 0]>>\
<<endif>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
<<if $WORLD.SeleneQuests[1] is 3>>\
<!-- 404: aphrodisiac, 405: fertilitea, 406: contraceptive -->\
<<set _pool to setup.getfrom(random(1,2), [129,130,131])>>\
<<set _pool to setup.getfrom(random(1,2), [129])>>\
<<for _i to 0; _i < _pool.length; _i++>>\
<<set _GS to [parseInt(_pool[_i]), 0, random(1,2), 0]>>\
<<AddToStore $Selene _GS>>\
<</for>>\
<<endif>>\
<<if $WORLD.SeleneQuests[0] is 3>>\
<!-- hair dye -->\
<<set _pool to setup.getfrom(random(1,3), [600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611])>>\
<<for _i to 0; _i < _pool.length; _i++>>\
<<set _GS to [117, 0, 1, parseInt(_pool[_i])]>>\
<<AddToStore $Selene _GS>>\
<</for>>\
<<if random(1,10) < 8>>\
<!-- hair growth formula -->\
<<set _GS to [133, 0, random(2,4), 0]>>\
<<AddToStore $Selene _GS>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<if (_which is "smith") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>>\
<<set $STORE[$Smith][_i] to [0,0,0,0,0]>>\
<<set $STORE[$SmithArmor][_i] to [0,0,0,0,0]>>\
<</for>>\
<<if $WORLD.smithLevel is 0>>\
<!-- copper brass -->\
<<set _WeaponPool to [200, 201, 210, 211, 220, 221, 230, 231]>>\
<<set _ArmorPool to [302,306, 307, 308, 309, 310, 350, 351, 353, 354, 355, 356, 357, 358, 359, 360, 361, 363]>>\
<<set _ShieldPool to [240, 240, 241]>>\
<<set _ArmsMatPool to [102,103]>>\
<<set _ShieldMatPool to [101,101,102,103]>>\
<<elseif $WORLD.smithLevel is 1>>\
<!-- brass iron -->\
<<set _WeaponPool to [200, 201, 202, 210, 211, 212, 220, 221, 222, 230, 231, 232]>>\
<<set _ArmorPool to [302, 305, 306, 307, 308, 309, 310, 311, 350, 351, 352, 353, 354, 355, 357, 358, 359, 360, 361, 362, 363]>>\
<<set _ShieldPool to [240, 241, 242]>>\
<<set _ArmsMatPool to [103,104, 104]>>\
<<set _ShieldMatPool to [103,104]>>\
<<elseif $WORLD.smithLevel is 2>>\
<!-- iron steel -->\
<<set _WeaponPool to [200, 201, 202, 210, 211, 212, 220, 221, 222, 230, 231, 232]>>\
<<set _ArmorPool to [305, 306, 307, 310, 311, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362]>>\
<<set _ShieldPool to [240, 241, 242]>>\
<<set _ArmsMatPool to [104,105]>>\
<<set _ShieldMatPool to [104,105]>>\
<<elseif $WORLD.smithLevel is 3>>\
<!-- steel mithril -->\
<<set _WeaponPool to [200, 201, 202, 210, 211, 212, 220, 221, 222, 230, 231, 232]>>\
<<set _ArmorPool to [306, 307, 310, 311, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362]>>\
<<set _ShieldPool to [240, 241, 242]>>\
<<set _ArmsMatPool to [105,106]>>\
<<set _ShieldMatPool to [101,102]>>\
<<elseif $WORLD.smithLevel is 4>>\
<!-- mithril scalar -->\
<<set _WeaponPool to [200, 201, 202, 210, 211, 212, 220, 221, 222, 230, 231, 232]>>\
<<set _ArmorPool to [306, 307, 310, 311, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362]>>\
<<set _ShieldPool to [240, 241, 242]>>\
<<set _ArmsMatPool to [106,107]>>\
<<set _ShieldMatPool to [101,102]>>\
<<else>>\
<!-- should never happen? -->\
<<set _WeaponPool to [200]>>\
<<set _ArmorPool to [200]>>\
<<set _ShieldPool to [200]>>\
<<set _ArmsMatPool to [150]>>\
<<set _ShieldMatPool to [150]>>\
<<endif>>\
\
<!-- weapons -->\
<<set _qty to random(6, 10)>>\
<<for _i to 0; _i < _qty; _i++>>\
<<set _GS to [either(_WeaponPool), either(_ArmsMatPool), 0 ,0]>>\
<<AddToStore $Smith _GS>>\
<</for>>\
<!-- shield -->\
<<set _qty to random(1, 2)>>\
<<for _i to 0; _i < _qty; _i++>>\
<<set _GS to [either(_ShieldPool), either(_ShieldMatPool), 0,0]>>\
<<AddToStore $SmithArmor _GS>>\
<</for>>\
\
<!-- armor -->\
<<set _qty to random(6, 8)>>\
<<for _i to 0; _i < _qty; _i++>>\
<<set _GS to [either(_ArmorPool), either(_ArmsMatPool), 0 ,0]>>\
<<AddToStore $SmithArmor _GS>>\
<</for>>\
<<endif>>\
<<if (_which is "gstore") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>><<set $STORE[$GStore][_i] to [0,0,0,0,0]>><</for>>\
<<set $STORE[$GStore][0] to [113,0,0,0]>>\
<<set _GS to [100,0,random(2,4),0]>><<AddToStore $GStore _GS>>\
<<set _GS to [101,0,0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [103,0,0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [142,0,0,0]>><<if random(1,4) < 4>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [104,either(103,104),0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [253,either(103,104),0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [105,0,random(8,15),0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [106,0,random(1,4),0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [107,0,random(1,3),0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [108,0,random(1,3),0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [115,0,random(1,3),0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [220,102,0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<if $WORLD.smithLevel is 1>>\
<<set _GS to [220,103,0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<endif>>\
<<set _GS to [312,random(150,152),0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [313,random(150,152),0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<set _GS to [132,0,0,0]>><<if random(1,2) is 1>><<AddToStore $GStore _GS>><<endif>>\
<<endif>>\
<<if (_which is "pawn") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>>\
<<if $STORE[$Pawn][_i] neq [0,0,0,0,0]>>\
<<if random(1,2) is 1>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0,0]>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<<if (_which is "lumbermill") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>><<set $STORE[$LumberMill][_i] to [0,0,0,0,0]>><</for>>\
<<set $STORE[$LumberMill][0] to [105,0,100,0]>>\
<<set $STORE[$LumberMill][1] to [120,0,100,0]>>\
<<set $STORE[$LumberMill][2] to [121,0,100,0]>>\
<<set $STORE[$LumberMill][3] to [122,0,100,0]>>\
<<set $STORE[$LumberMill][4] to [138,0,100,0]>>\
<<set _GS to [101,0,0,0]>><<AddToStore $GStore _GS>>\
<<set _GS to [220, either(102,103), 0, 0]>><<AddToStore $LumberMill _GS>>\
<<if $WORLD.smithLevel is 1>>\
<<if random(1,2) is 1>>\
<<set _GS to [220,104,0,0]>><<if random(1,2) is 1>><<AddToStore $LumberMill _GS>><<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<if (_which is "daphne") or (_which is "all")>>\
<<for _i to 0; _i < 10; _i++>><<set $STORE[$Daphne][_i] to [0,0,0,0,0]>><</for>>\
<<set _GS to [550, 0, random(4,6), 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<set _GS to [551, 0, random(3,5), 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<set _GS to [552, 0, random(2,4), 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<set _DUnlocks to 0>>\
<<for _i to ($WORLD.DaphneQuests.length -1); _i > -1; _i-->>\
<<if $WORLD.DaphneQuests[_i] is 2>>\
<<set _DUnlocks to _DUnlocks +1>>\
<<endif>>\
<</for>>\
<<if _DUnlocks > 1>>\
<<set _GS to [553, 0, random(2,3), 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<endif>>\
<<if _DUnlocks > 200>>\
<<set _GS to [554, 0, random(1,2), 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<endif>>\
<<if _DUnlocks > 300>>\
<<set _GS to [555, 0, 1, 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<endif>>\
<<if _DUnlocks > 400>>\
<<set _GS to [556, 0, 1, 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<endif>>\
<<if _DUnlocks > 500>>\
<<set _GS to [557, 0, 1, 0, 0]>>\
<<AddToStore $Daphne _GS>>\
<<endif>>\
<<endif>>\<</widget>>\
<<widget "Store">>\
<<set _s to $args[0]>>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[_s].length; _i++>>\
<<set _item to $STORE[_s][_i]>>\
<<if _item[0] > 0>>\
<<capture _i, _s>>\
<<button "[Buy]">>
<<set _buttonitem to $STORE[_s][_i]>>\
<<DescribeItem _buttonitem>>\
<<set _p to $ItemPoke.price>>\
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
<<set _st to $ItemPoke.stackable>>\
<<set _foo to "Item: " + _buttonitem + "stackable: " + _st>>\
<<AddToLog _foo>>\
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[_s][_i][0]>>
<<set _ByValHack[1] to $STORE[_s][_i][1]>>
<<set _ByValHack[2] to 0>>
<<if $STORE[_s][_i][2] > 0>>
<<set _ByValHack[2] to 1>>
<<endif>>
<<set _ByValHack[3] to $STORE[_s][_i][3]>>
<<set _ByValHack[4] to $STORE[_s][_i][4]>>
\
<<set _throwaway to setup.GiveItem($CC, _ByValHack)>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $STORE[_s][_i][2] > 1>>\
<<set $STORE[_s][_i][2] to $STORE[_s][_i][2] -1>>
<<else>>\
<<set $STORE[_s][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<</button>> \
<</capture>>\
<<set _item to $STORE[_s][_i]>>\
<<DescribeItem _item>>\
<<set _p to $ItemPoke.price>>\
<<set _st to $ItemPoke.stackable>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<<print $ItemPoke.fullname>>, cost: <<print $ItemPoke.price>> \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<endif>>\
<</for>>\
<hr>\
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span>
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<if _desc neq "none">>\
<<print _desc>>
<<endif>>\
<</capture>>\
<</for>>\
<hr>\
<span id="storereport"></span>\
<</widget>>\
<<widget "Pawn">>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[$Pawn].length; _i++>>\
<<set _item to $STORE[$Pawn][_i]>>\
<<if _item[0] > 0>>\
<<if $DebugMode>>(_item): <<endif>>\
<<DescribeItem _item>>\
<<set _st to $ItemPoke.stackable>>\
<<set _p to $ItemPoke.price>>\
<<capture _i, _p, _st>>\
<<Bullet>> <<button "[Buyback]">>
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
\
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[$Pawn][_i][0]>>
<<set _ByValHack[1] to $STORE[$Pawn][_i][1]>>
<<set _ByValHack[2] to 0>>
<<if $STORE[$Pawn][_i][2] > 0>>\
<<set _ByValHack[2] to 1>>
<<endif>>\
<<set _ByValHack[3] to $STORE[$Pawn][_i][3]>>
<<set _ByValHack[4] to $STORE[$Pawn][_i][4]>>
\
<<set _try to setup.GiveItem($CC, _ByValHack)>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $STORE[$Pawn][_i][2] > 1>>\
<<set $STORE[$Pawn][_i][2] to $STORE[$Pawn][_i][2] -1>>
<<else>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<</button>> \
<</capture>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$Pawn][_i]>>\
<<print $ItemPoke.fullname>>, cost: _p \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<else>>\
<<Bullet>> <br>\
<<endif>>\
<</for>>\
<span id="storereport"></span>\
\
<<unset _item>>\
\
<hr>\
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span>
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<!-- half price for gems -->\
<<if (_item[0] > 549) and (_item[0] < 560)>>\
<<set _p to _p / 2>>\
<<endif>>\
<<set _p to Math.trunc(_p)>>\
<<capture _i, _p>>\
<<set _st to $ItemPoke.stackable>>\
<<if $ItemPoke.unique is true>>\
<span class="grayb"><<button "[Unique]">><</button>> <<print $ItemPoke.fullname>></span>
<<elseif _desc neq "none">>\
<<if $DebugMode>>(_item): <<endif>>\
<<set _buttontext to "[Pawn for " + _p + " gold]">>\
<<button "_buttontext">>
<!-- Sugarcube does not clone values until passage refresh -->\
<<set _AAAA to $PC[$CC][$PCinven][_i][0]>>
<<set _BBBB to $PC[$CC][$PCinven][_i][1]>>
<<set _CCCC to 0>>
<<if $PC[$CC][$PCinven][_i][2] > 0>>\
<<set _CCCC to 1>>\
<<endif>>\
<<set _DDDD to $PC[$CC][$PCinven][_i][3]>>
<<set _EEEE to $PC[$CC][$PCinven][_i][4]>>
<<set _ByValHack to [_AAAA, _BBBB, _CCCC, _DDDD, _EEEE]>>
<<DescribeItem _ByValHack>>
<<set _st to $ItemPoke.stackable>>\
<<set _WhereItGoes to setup.additemtostore($Pawn, _ByValHack)>>
<<if _WhereItGoes > -1>>\
<<set _desc to $ItemPoke.fullname>>\
<<replace "#storereport">><<GainGold _p>><</replace>>\
<!-- if has qty, subtract one, otherwise remove -->\
<<if $PC[$CC][$PCinven][_i][2] > 1>>\
<<set $PC[$CC][$PCinven][_i][2] to $PC[$CC][$PCinven][_i][2] -1>>
<<else>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<<else>>\
<<replace "#storereport">>No room<</replace>>
<<endif>>\
<</button>> _desc \
<<if _item[2] > 1>>\
<<button "[Sell all]">>
<<set _SellMe to clone($PC[$CC][$PCinven][_i])>>\
<<set _WhereItGoes to setup.additemtostore($Pawn, _SellMe)>>
<<if _WhereItGoes > -1>>\
<<set _AllP to _p * $PC[$CC][$PCinven][_i][2]>>
<<GainGold _AllP>>
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<set _asd to Engine.play(passage(), true)>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<<else>>\
<<replace "#storereport">>No room<</replace>>
<<endif>>\
<</button>>
<<else>>\
<br>\
<<endif>>\
<<endif>>\
<</capture>>\
<</for>>\
<</widget>>\
<<widget "LumberMill">>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[$LumberMill].length; _i++>>\
<<set _item to $STORE[$LumberMill][_i]>>\
<<if _item[0] > 0>>\
<<if $DebugMode>>(_item): <<endif>>\
<<DescribeItem _item>>\
<<set _p to $ItemPoke.price * 2>>\
<<set _st to $ItemPoke.stackable>>\
<<set _BuyQty to 1>>\
<<if $STORE[$LumberMill][_i][2] > 0>>\
<<set _BuyQty to 10>>\
<<if $STORE[$LumberMill][_i][2] < 9>>\
<<set _BuyQty to $STORE[$LumberMill][_i][2]>>\
<<endif>>\
<<endif>>\
<<set _p to _p * _BuyQty>>\
<<capture _i, _p, _st, _BuyQty>>\
<<if _BuyQty > 1>>\
<<set _buttontext to "[Buy " + _BuyQty + " for " + _p + " gold]">>\
<<else>>\
<<set _buttontext to "[Buy for " + _p + " gold]">>\
<<endif>>\
<<set _AllowPurchase to true>>\
<<if ($STORE[$LumberMill][_i][0] is 105) and $WORLD.BoltmanQuests[0] is 0>>\
<<set _AllowPurchase to false>>\
<<elseif ($STORE[$LumberMill][_i][0] is 120) and $WORLD.BoltmanQuests[1] is 0>>\
<<set _AllowPurchase to false>>\
<<elseif ($STORE[$LumberMill][_i][0] is 121) and $WORLD.BoltmanQuests[2] is 0>>\
<<set _AllowPurchase to false>>\
<<elseif ($STORE[$LumberMill][_i][0] is 122) and $WORLD.BoltmanQuests[3] is 0>>\
<<set _AllowPurchase to false>>\
<<elseif ($STORE[$LumberMill][_i][0] is 138) and $WORLD.BoltmanQuests[4] is 0>>\
<<set _AllowPurchase to false>>\
<<endif>>\
<<if _AllowPurchase is false>>\
<span class="grayb"><<button "[Can't buy]">><</button>></span> \
<<else>>\
<<button "_buttontext">>
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
\
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[$LumberMill][_i][0]>>
<<set _ByValHack[1] to $STORE[$LumberMill][_i][1]>>
<<set _ByValHack[2] to _BuyQty>>
<<set _ByValHack[3] to $STORE[$LumberMill][_i][3]>>
<<set _ByValHack[4] to $STORE[$LumberMill][_i][4]>>
\
<<set _throwaway to setup.GiveItem($CC, _ByValHack)>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<<if $STORE[$LumberMill][_i][2] > _BuyQty>>\
<<set $STORE[$LumberMill][_i][2] to $STORE[$LumberMill][_i][2] - _BuyQty>>
<<else>>\
<<set $STORE[$LumberMill][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<</button>> \
<<endif>>\
<</capture>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$LumberMill][_i]>>\
<<print $ItemPoke.fullname>>, cost: _p \
<<if $ItemPoke.stackable is true>> for <<print _BuyQty>><<endif>>\
<br>\
<<endif>>\
<</for>>\
<hr>
<span id="storereport"></span>
<hr>\
\
<<unset _item>>\
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span>
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<<set _p to Math.trunc(_p)>>\
<<set _st to $ItemPoke.stackable>>\
<<set _w to $PC[$CC][$PCinven][_i][0]>>\
<<if (_w is 105) or (_w is 120) or (_w is 121) or (_w is 122) or (_w is 138)>>\
<<if $DebugMode>>(_item): <<endif>>\
<<set _StackPrice to _p * $PC[$CC][$PCinven][_i][2]>>\
<<set _buttontext to "[Sell all for " + _StackPrice + " gold]">>\
<<button "_buttontext">>
<!-- Sugarcube does not clone values until passage refresh -->\
<<set _SellThis to clone($PC[$CC][$PCinven][_i])>>\
<<DescribeItem _SellThis>>
<<set _st to $ItemPoke.stackable>>\
<<set _throwaway to setup.additemtostore($LumberMill, _SellThis)>>
<<if $PC[$CC][$PCinven][_i][0] is 105>><<set $WORLD.BoltmanQuests[0] to 1>><<endif>>\
<<if $PC[$CC][$PCinven][_i][0] is 120>><<set $WORLD.BoltmanQuests[1] to 1>><<endif>>\
<<if $PC[$CC][$PCinven][_i][0] is 121>><<set $WORLD.BoltmanQuests[2] to 1>><<endif>>\
<<if $PC[$CC][$PCinven][_i][0] is 122>><<set $WORLD.BoltmanQuests[3] to 1>><<endif>>\
<<if $PC[$CC][$PCinven][_i][0] is 138>><<set $WORLD.BoltmanQuests[4] to 1>><<endif>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<<set _p to Math.trunc(_p)>>\
<<set _StackPrice to _p * _SellThis[2]>>\
<<replace "#storereport">><<GainGold _StackPrice>><</replace>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<set _asd to Engine.play(passage(), true)>>
<</button>> _desc
<<else>>\
<<if $PC[$CC][$PCinven][_i][0] > 0>>\
<<set _DescribeThis to clone($PC[$CC][$PCinven][_i])>>\
<<DescribeItem _DescribeThis>>\
<span class="grayb"><<button "[No sell]">><</button>></span> <<print $ItemPoke.fullname>>
<<endif>>\
<<endif>>\
<</capture>>\
<</for>>\
<</widget>>\
<<widget "House">>\
<!-- FIX THIS -->\
<<if $STORE[$House].length < $WORLD.house.storage>>\
<<for _i to 0; _i < $WORLD.house.storage; _i++>>\
<<if setup.TypeOf($STORE[$House][_i]) is "undefined">>\
<<set $STORE[$House][_i] to [0,0,0,0,0]>>\
<<endif>>\
<</for>>\
<<endif>>\
\
@@color:Gold;In storage@@
<span id="StoreInv"><<HouseShowStoreInv>></span>\
<hr>\
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span>
<span id="PlayerInv"><<HouseShowPlayerInv>></span>\
<</widget>>\
<<widget "HouseShowStoreInv">>\
<<for _i to 0; _i < $STORE[$House].length; _i++>>\
<<if _i gte $WORLD.house.storage>>\
<<if $STORE[$House][_i][0] > 0>>\
[Locked] (Upgrade storage to access this item)
<<endif>>\
<<else>>\
<<set _item to $STORE[$House][_i]>>\
<<if _item[0] > 0>>\
<<if $DebugMode>>(_item): <<endif>>\
<<DescribeItem _item>>\
<<set _st to $ItemPoke.stackable>>\
<<capture _i, _st>>\
<<Bullet>> <<button "[Take]">>
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[$House][_i][0]>>
<<set _ByValHack[1] to $STORE[$House][_i][1]>>
<<set _ByValHack[2] to $STORE[$House][_i][2]>>
<<if _ByValHack[2] > 1>>\
<<set _ByValHack[2] to 1>>\
<<endif>>\
<<set _ByValHack[3] to $STORE[$House][_i][3]>>
<<set _ByValHack[4] to $STORE[$House][_i][4]>>
\
<<set _ItemDroppedToHere to setup.GiveItem($CC, _ByValHack)>>
<<if _ItemDroppedToHere > -1>>\
<!-- if has qty, subtract one, otherwise remove -->\
<<if $STORE[$House][_i][2] > 1>>\
<<set $STORE[$House][_i][2] to $STORE[$House][_i][2] -1>>
<<else>>\
<<set $STORE[$House][_i] to [0,0,0,0,0]>>
<<endif>>\
<<replace "#StoreInv">><<HouseShowStoreInv>><</replace>>\
<<replace "#PlayerInv">><<HouseShowPlayerInv>><</replace>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<<endif>>\
<</button>> \
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$House][_i]>>\
<<print $ItemPoke.fullname>> \
<<if _item[2] > 1>>\
<<button "[Take all]">>
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[$House][_i][0]>>
<<set _ByValHack[1] to $STORE[$House][_i][1]>>
<<set _ByValHack[2] to $STORE[$House][_i][2]>>
<<set _ByValHack[3] to $STORE[$House][_i][3]>>
<<set _ByValHack[4] to $STORE[$House][_i][4]>>
\
<<set _ItemDroppedToHere to setup.GiveItem($CC, _ByValHack)>>
<<set $STORE[$House][_i] to [0,0,0,0,0]>>
<<replace "#StoreInv">><<HouseShowStoreInv>><</replace>>\
<<replace "#PlayerInv">><<HouseShowPlayerInv>><</replace>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<</button>>
<<else>>\
<br>\
<<endif>>\
<</capture>>\
<<else>>\
<<Bullet>> <br>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "HouseShowPlayerInv">>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _st to $ItemPoke.stackable>>\
<<if _desc neq "none">>\
<<if $DebugMode>>(_item): <<endif>>\
<<button "[Drop]">>
<<set _ItemToSell to clone($PC[$CC][$PCinven][_i])>>\
<<if _ItemToSell[2] > 1>>\
<<set _ItemToSell[2] to 1>>\
<<endif>>\
<<DescribeItem _ItemToSell>>
<<set _st to $ItemPoke.stackable>>\
<<set _ItemDroppedToHere to setup.additemtostore($House, _ItemToSell)>>
<<if _ItemDroppedToHere > -1>>\
<<set _desc to $ItemPoke.fullname>>\
<!-- if has qty, subtract one, otherwise remove -->\
<<if $PC[$CC][$PCinven][_i][2] > 1>>\
<<set $PC[$CC][$PCinven][_i][2] to $PC[$CC][$PCinven][_i][2] -1>>
<<else>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<endif>>\
<<replace "#StoreInv">><<HouseShowStoreInv>><</replace>>\
<<replace "#PlayerInv">><<HouseShowPlayerInv>><</replace>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<<else>>\
<<replace "#storereport">>No room<</replace>>
<<endif>>\
<</button>> _desc \
<<if _item[2] > 1>>\
<<button "[Drop all]">>
<<set _ItemToSell to clone($PC[$CC][$PCinven][_i])>>\
<<DescribeItem _ItemToSell>>
<<set _st to $ItemPoke.stackable>>\
<<set _ItemDroppedToHere to setup.additemtostore($House, _ItemToSell)>>
<<if _ItemDroppedToHere > -1>>\
<<set _desc to $ItemPoke.fullname>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<replace "#StoreInv">><<HouseShowStoreInv>><</replace>>\
<<replace "#PlayerInv">><<HouseShowPlayerInv>><</replace>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<<else>>\
<<replace "#storereport">>No room<</replace>>
<<endif>>\
<</button>>\
<<endif>>\
<br>\
<<endif>>\
<</capture>>\
<</for>>\
<</widget>>\
<<widget "AddToStore">>\
<<set _WhichStore to $args[0]>>\
<<set _WhichItem to $args[1]>>\
<<set _IsDone to false>>\
<<for _ATS to 0; _ATS < 10; _ATS++>>\
<<if $STORE[_WhichStore][_ATS][0] is 0>>\
<<set $STORE[_WhichStore][_ATS] to _WhichItem>>\
<<set _IsDone to true>>\
<<endif>>\
<<if _IsDone is true>><<set _ATS to 99>><<endif>>\
<</for>>\
<</widget>>\<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>\
<hr>\
<<print $GameLog>><<AddToLog "Arriving in DunGen">>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
\
<<if $WORLD.dungenned[_pz] > 0>>\
@@color:Red;Error: Request to generate a level that already exists@@
Proceeding anyway...
<<set _foo to "Requesting regen of zlevel: " + _pz>>\
<<AddToLog _foo>>\
<<endif>>\
\
<<set $WORLD.dungenned[$PC[$CC][$PCz]] to 1>>\
\
<<set $Dungeon[_pz] to []>>\
<!-- assemble rooms here -->\
<<set _WhyIsThisNeeded to setup.Snake()>>\
<<set $Dungeon[_pz] to clone(_WhyIsThisNeeded)>>\
\
<<set _MessageQty to Math.trunc(($WORLD.DunDimX * $WORLD.DunDimY) / 15)>>\
<<set _dgcount to 0>>\
<<for _i to 0; _i < _MessageQty; _i++>>\
<<set _MessX to random(0, ($WORLD.DunDimX -1))>>\
<<set _MessY to random(0, ($WORLD.DunDimY -1))>>\
<<if $Dungeon[_pz][_MessX][_MessY][8] is 0>>\
<<set $Dungeon[_pz][_MessX][_MessY][8] to random(1,48)>>\
<<endif>>\
<</for>>\
\
\
<!-- traps after stairs were overwriting stairs despite the specific -->\
<!-- loopcheck for zeros to place on. Possibly a clone or timing issue? -->\
<<timed 200ms>>\
<<set _throwaway to setup.PlaceDunEvents(_pz)>>\
<</timed>>\
\
<--
<!-- stairs placement is here because snake has three possible exits -->\
<<if _pz is 1>>\
<<elseif _pz is 4>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<!-- keep stairs from leading to Zehtalia's room -->\
<<set _StairsX to either(0, $WORLD.DunDimX -1)>>\
<<set _StairsY to either(0, $WORLD.DunDimY -1)>>\
<<set $Dungeon[_pz][_StairsX][_StairsY][11] to "StairsUp">>\
<<set $Dungeon[_pz][_StairsX][_StairsY][12] to 0>>\
<<elseif _pz is 5>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<elseif _pz is 6>>\
<!-- level to teach player about levers -->\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<!-- put stairs on left or right sides away from center-top room-->\
<<if random(1,2) is 1>>\
<<set _stairsx to random(0,3)>>\
<<set _stairsy to random(0,6)>>\
<<else>>\
<<set _stairsx to random(11,13)>>\
<<set _stairsy to random(0,6)>>\
<<endif>>\
<<set $Dungeon[_pz][_stairsx][_stairsy][11] to "StairsUp">>\
<<set $Dungeon[_pz][_stairsx][_stairsy][12] to 0>>\
<<elseif _pz is 9>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<!-- keep stairs from leading to Neris' room -->\
<<set _StairsX to either(0, $WORLD.DunDimX -1)>>\
<<set _StairsY to either(0, $WORLD.DunDimY -1)>>\
<<set $Dungeon[_pz][_StairsX][_StairsY][11] to "StairsUp">>\
<<set $Dungeon[_pz][_StairsX][_StairsY][12] to 0>>\
<<elseif _pz is 10>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<else>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<set _stairsx to _px - random(2,11)>>\
<<set _stairsy to _py - random(2,4)>>\
<<if _stairsx < 0>>\
<<set _stairsx to _stairsx + ($WORLD.DunDimX -1)>>\
<<elseif _stairsx > $WORLD.DunDimX -1>>\
<<set _stairsx to _stairsx - ($WORLD.DunDimX -1)>>\
<<endif>>\
<<if _stairsy < 0>>\
<<set _stairsy to _stairsy + ($WORLD.DunDimY -1)>>\
<<elseif _stairsy > $WORLD.DunDimY -1>>\
<<set _stairsy to _stairsy - ($WORLD.DunDimY -1)>>\
<<endif>>\
<<set $Dungeon[_pz][_stairsx][_stairsy][11] to "StairsUp">>\
<<set $Dungeon[_pz][_stairsx][_stairsy][12] to 0>>\
<<endif>>\
-->\
<<set $WORLD.dungenned[_pz +1] to 0>>\
<<set $PC[$CC][$PCstate] to "dead">>\
<<set $PC[$CC][$PCmisc].deaths to $PC[$CC][$PCmisc].deaths +1>>\
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<if $Dungeon[_pz][_px][_py][11] is 0>>\
<<set $Dungeon[_pz][_px][_py][11] to "PlayerCorpse">>\
<<set $Dungeon[_pz][_px][_py][12] to $CC>>\
<<elseif $Dungeon[_pz][_px][_py][11] is "Monster">>\
<<set $Dungeon[_pz][_px][_py][11] to "PlayerCorpse">>\
<<set $Dungeon[_pz][_px][_py][12] to $CC>>\
<<else>>\
<<set $PC[$CC][$PCstate] to "lost">>\
<<endif>>\
<<elseif $PC[$CC][$PClocation] is "forest">>\
<<set _pfx to $PC[$CC][$PCfx]>>\
<<set _pfy to $PC[$CC][$PCfy]>>\
<<set _pfz to $PC[$CC][$PCfz]>>\
<<set $PC[$CC][$PCdeathHACK] to ["forest",_pfx,_pfy,_pfz]>>\
<<elseif $PC[$CC][$PClocation] is "desert">>\
<<set _pdx to $PC[$CC][$PCdx]>>\
<<set _pdy to $PC[$CC][$PCdy]>>\
<<set _pdz to $PC[$CC][$PCdz]>>\
<<set $PC[$CC][$PCdeathHACK] to ["desert",_pdx,_pdy,_pdz]>>\
<<else>>\
<!-- starved to death in town -->\
<<endif>>\
\
@@color:Gold; Death@@
<<SimplePic "boxdead.jpg">>\
<hr>
Your cause of death was: <<print $WORLD.diedby>>
<<set $PC[$CC][$ancestraldeath] to $WORLD.diedby>>\
But while this is the end of <<if $PC[$CC][$PCsex] is "male">>@@color:Aqua;<<else>>@@color:Pink;<<print $PC[$CC][$PCname]>>@@<<endif>>'s life for now, you can always continue with a new one.
<<if (setup.AchievementHandler("I feel your loss", "HAS?", -1) > 0) or (setup.AchievementHandler("Three's Company", "HAS?", -1) > 0)>>\
And who knows? Maybe you can even //recover// this character with another character?
<<endif>>\
<<if $PC[$CC][$PClevel] > 2>>\
\
<<AwardAchievement "Three's Company">>\
<<endif>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Continue" "Preamble">>
<<AutoSaveLoad "set">>
<<set $CC to -1>>\
<</link>>\
</span>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
@@color:LightGreen;Ancestral corpse@@
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<RightPic "playercorpse.jpg">>\
<<if $Dungeon[_pz][_px][_py][12] is $CC>>\
You find the corpse of one of your ancestors here. It has long since been looted of all its equipment, and is far too rotten and skeletal to do anything with.
<<elseif ($Dungeon[_pz][_px][_py][12] > -1) and ($Dungeon[_pz][_px][_py][12] < 3)>>\
<<set _CorpsePTR to $Dungeon[_pz][_px][_py][12]>>\
<<set _HimHer to "him">>\
<<if $PC[_CorpsePTR][$PCsex] is "male">>\
<<set _HimHer to "her">>\
<<endif>>\
You find <<print $PC[_CorpsePTR][$PCname]>>'s corpse here. The body hasn't decayed much, and it might still be possible to bring _HimHer back to life.
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Take the body with you">>
<<set $Dungeon[_pz][_px][_py][11] to 0>>
<<set $Dungeon[_pz][_px][_py][12] to 0>>
<<set _Corpse to [999, _CorpsePTR, 0, 0, 0]>>
<<set $PC[_CorpsePTR][$PCstate] to "in transit">>
<<set $PC[_CorpsePTR][$PClocation] to "in transit">>
<<set $PC[_CorpsePTR][$PCz] to $CC>>
<<set _foo to setup.GiveItem($CC, _Corpse)>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>You pick up the body<</replace>>\
<</link>>\
</span>\
<<else>>\
There is a rotten corpse here.
@@color:Yellow;Debug note@@: Something went wrong. This appears to be a chartacer corpse, but the ID ($Dungeon[_pz][_px][_py][12]) is unrecognized.
If you're a player seeing this, whichever character you're trying to ressurect can't be recovered for some reason. You may as well reincarnate a new character in that slot.
<<endif>>\
<<elseif $PC[$CC][$PClocation] is "forest">>\
<<set _px to $PC[$CC][$PCfx]>>\
<<set _py to $PC[$CC][$PCfy]>>\
<<set _pz to $PC[$CC][$PCfz]>>\
<<RightPic "corpseforest.png">>\
<!-- maybe forest should become like the tower -->\
<<set _CorpsePTR to -1>>\
<<for _DeathLoop to 0; _DeathLoop < 3; _DeathLoop++>>\
<<if ($PC[_DeathLoop][$PCstate] is "dead") or ($PC[_DeathLoop][$PCstate] is "lost")>>\
<<if ($PC[_DeathLoop][$PClocation] is "forest") and ($PC[_DeathLoop][$PCfz] is _pz)>>\
<<set _CorpsePTR to _DeathLoop>>\
<<if $PC[_DeathLoop][$PCsex] is "male">>\
<<set _HimHer to "him">>\
<<else>>\
<<set _HimHer to "her">>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _CorpsePTR < 0>>\
@@color:Red;Error in Player Corpse@@ in forest, a corpse was placed here, but I couldn't find a dead or lost player on this map
<<elseif _CorpsePTR is $CC>>\
@@color:Red;Error in Player Corpse@@ in forest, a corpse was found...for the active player who found it? What?
<<else>>\
You find <<print $PC[_CorpsePTR][$PCname]>>'s corpse here. The body hasn't decayed much, and it might still be possible to bring _HimHer back to life.
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Take the body with you">>
<<set _Corpse to [999, _CorpsePTR, 0, 0, 0]>>
<<set $ForestMap[_px][_py] to 0>>
<<set $PC[_CorpsePTR][$PCstate] to "in transit">>
<<set $PC[_CorpsePTR][$PClocation] to "in transit">>
<<set $PC[_CorpsePTR][$PCz] to $CC>>
<<set _foo to setup.GiveItem($CC, _Corpse)>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>You pick up the body<</replace>>\
<</link>>\
</span>\
<<endif>>\
<<elseif $PC[$CC][$PClocation] is "desert">>\
<<set _px to $PC[$CC][$PCdx]>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
<<RightPic "corpseforest.png">>\
<!-- maybe desert should become like the tower -->\
<<set _CorpsePTR to -1>>\
<<for _DeathLoop to 0; _DeathLoop < 3; _DeathLoop++>>\
<<if ($PC[_DeathLoop][$PCstate] is "dead") or ($PC[_DeathLoop][$PCstate] is "lost")>>\
<<if ($PC[_DeathLoop][$PClocation] is "desert") and ($PC[_DeathLoop][$PCdz] is _pz)>>\
<<set _CorpsePTR to _DeathLoop>>\
<<if $PC[_DeathLoop][$PCsex] is "male">>\
<<set _HimHer to "him">>\
<<else>>\
<<set _HimHer to "her">>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _CorpsePTR < 0>>\
@@color:Red;Error in Player Corpse@@ in desert, a corpse was placed here, but I couldn't find a dead or lost player on this map
<<elseif _CorpsePTR is $CC>>\
@@color:Red;Error in Player Corpse@@ in desert, a corpse was found...for the active player who found it? What?
<<else>>\
You find <<print $PC[_CorpsePTR][$PCname]>>'s corpse here. The body hasn't decayed much, and it might still be possible to bring _HimHer back to life.
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Take the body with you">>
<<set _Corpse to [999, _CorpsePTR, 0, 0, 0]>>
<<set $DesertMap[_px][_py] to 0>>
<<set $PC[_CorpsePTR][$PCstate] to "in transit">>
<<set $PC[_CorpsePTR][$PClocation] to "in transit">>
<<set $PC[_CorpsePTR][$PCz] to $CC>>
<<set _foo to setup.GiveItem($CC, _Corpse)>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>You pick up the body<</replace>>\
<</link>>\
</span>\
<<endif>>\
<<else>>\
@@color:Red;Error: PlayerCorpse has been found, but we're not in the tower, forest, or desert?@@
<<endif>>\
<</replace>>\<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "goblin pussylick">>\
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
The goblin collapses to the ground in a fit of masturbation, staring at you lustfully as she plunges her fingers into her dripping pussy. Thinking she can put those fingers to better use, you beckon her over and begin to disrobe. \
<<if _pcpenis is true>>\
She immediately leaps for your cock, but you grab her by the shoulders and redirect her to your pussy. She seems disappointed at first, but quickly accepts her place and climbs between your legs as you lay on your back on the ground. Within moments she's eagerly lapping at your clitoris with her tongue while gently probing your insides with one finger.
<<else>>\
The moment you pull your pants down, she clambers underneath you and plunges her tongue directly up into your pussy as deeply as she can reach. You nearly stumble at the sensation, but delicately slide your fingers through her hair, panting as she goes to work on you. She's very good at this, and you let her continue her ministrations for a couple minutes before you tire of standing, grab her head and pull it with you as you roll down onto your back. It's awkward at first, but it's all good once you're relaxed on your back with her head between your thighs.
<<endif>>\
Stretching your arms over your head, you give into the sensation as $Mon.himher longer-than-human tongue probes inside you while her upper lip gently kneads your clitoris. It's a clever double action, and you suspect that goblin lips are more prehensile than human. That doesn't stop her from using her tongue though, oh no, and you gasp as she slides out, then up and around and back down through your clit in one smooth motion, before then sliding a finger insde and going to work full-time on your outsides with her tongue.
Letting the master practice her craft, you find your hips moving up and down against her of their own volition, then gasp when she suddenly slides a dildo deep inside you on your juices while $Mon.himher arms wrap themselves around your hips to hold you firmly in place. Giving in to the pleasure, you feel the dildo rapidly pulse inside you as its rubbery upper edge glides across your clit, allowing $Mon.himher time to spare to look up into your eyes with a goofy grin.
You climax like that, with her smiling up between your legs into your eyes, clearly pleased to have serviced you. Bringing you down gracefully, $Mon.heshe goes back to gentle licking while nuzzling her nose against your stomach, then finally withdrawing the dildo and sliding it up between your breasts to see.
It's bright purple, and shaped like a goblin dick.
<<if random(1,3) is 1>>\
"I imagined I was <<print either("a huge wolf fucking you","my pet dire wolf")>>," she grins at you. "<<print either("You were all bent over with your face mashed into the ground while I pounded you senseless.","All knotted up inside you while you begged for more like a whore.","You screamed and cried and tried to get away while I pumped you full of wolf puppies.")>> Best fantasy ever!"
<<else>>\
"I imagined it was all <<print either("four","five","nine")>> of my brothers taking their turns on you," she explains happily. "<<print either("Cumming over and over and knocking you up all full of goblin babies.","You cried and begged for more like a whore. It was awesome!","Two at a time in your ass while the rest took turns in your pussy and you sucked off everybody who didn't fit. Best fantasy ever!")>>"
<<endif>>\
Turning away to hide your renewed arousal, you allow her that small victory before putting on your clothes and getting back on you way.
<<elseif $WORLD.datapasser is "goblin cowgirl">>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
The goblin collapses to the ground in a fit of masturbation, staring at you lustfully as $Mon.heshe begins furiously stroking $Mon.hisher cock.
"No, stop touching yourself," you frown at $Mon.himher. "That cock belongs to me now."
A look of surprised delight grows on $Mon.hisher face as understanding dawns on $Mon.himher. You push Mon.himher onto the ground and on $Mon.hisher back, and stand with your legs straddled over $Mon.himher hips, watching in amusement as $Mon.heshe strains to reach $Mon.hisher cock up to you with your foot on $Mon.hisher stomach.
"Alright, time to see what you can do what that," you chuckle, as you slowly...far too slow $Mon.hisher tastes...lower yourself onto $Mon.hisher cock. <<FemaleVirginity "goblin">> \
<<if $Mon.sex is "male">>\
Taking advantage of the opportunity, he immediately thrusts his hips upward with enough force that your downward descent is turned into an upward bounce, then grabs your hips to pull you back down.
<<if $PC[$CC][$PCstr] > 14>>\
"No," you growl through your growing lust. "I'm the one in control here."
Standing back up and planting a foot firmly on $Mon.hisher chest, you watch with interest as he groans in agony, before finally relenting and laying prone. You slowly lower yourself again, locking eyes with $Mon.himher as your pussy lips just barely begun to nudge up against $Mon.hisher cock. <<print $Mon.heshe.toUpperFirst()>> squints and clenches $Mon.hisher teeth, breathing heavily but still not moving. Satisfied with $Mon.hisher submission, you get to pleasuring yourself. Taking a deep breath, your eyes begin to glaze over as you lower yourself just half an inch onto $Mon.hisher cock. Nearly tasting $Mon.hisher pre-cum begin to libricate you, you slide up and down a couple times before lowering yourself another inch, two inches, three inches around $Mon.hisher member.
You take your good sweet time, with half a dozen pulses up and down for every inch of his length you take inside you. By the time your pelvis touches his, you feel a pulse, then a small geyser of cum burst up into your cervix. You slap the goblin in the face for his premature ejculation without so much as sparing him a glace, then get to work grinding up and down on his still-erect cock, clenching your insides around it and feeling the heavily-bulbed tip pressing up near your womb. The thought of a goblin making you pregnant both irritates and fascinates you, and it's with some annoyance that it's at that exact moment that you both climax.
Too horny to care, you revel in the sensation of his generous rush of semen filling you, staying corked up inside of you by his cock. After another dozen or so times impaling yourself on his cock you stand up, letting the semen slide down your thighs in long slimy trails.
<<else>>\
<<if random(1,2) is 1>>\
You open your mouth to object, but your words are cut off by the sensation of him roughly impaling you down onto his cock a second time. Grabbing his hands you try to pull them off, but he's a lot stronger than you are and you can't pry his fingers from your waist. Realizing he's successfully turned the tables on you and can now have his way with you, you let out a cry, uselessly punching and clawing at his chest while he slams you onto his cock over and over.
He takes his good time to cum, and when he does he pulls you down hard on top of him, his balls spasming lewdly between your ass cheeks as he sprays you full of his seed.
<<else>>\
You're surprised by his aggressiveness, but decide to let him have his fun. You're getting what you want either way. Feeling his hands tighten on your waist, you're surprised at the strength of his grip as he pushes you up, then yanks you back down to impale you on his cock.
"Oh, that's good," you moan softly.
Relaxing back and letting him do all the work of lifting you up and dropping you back down on his thick meaty cock, you have 3 or 4 climaxes before he finally grunts and sprays a burst of milky goblin seed inside you. At last finished, he slowly brings you down on his rod to come to rest on his pelvis, his cock slowly growing soft after several more minutes inside you.
<<endif>>\
<<endif>>\
<<else>>\
<<print $Mon.heshe.toUpperFirst()>> makes some almost-but-not-quite female noises as you sit back up off of $Mon.hisher cock and slowly let yourself down onto it again. <<print $Mon.hisher.toUpperFirst()>> cock <<print either("pentrates you deeply", "is thick enough that you have to gently slide it in", "is curved in a way that naturally glides across your clit with every thrust")>> and the sensation <<print either("leaves your mouth hanging open in pleasure","makes your pussy clench and spasm uncontrollably as you find yourself bouncing up and down in time with her thrusts","leaves you gasping for breath as she slides her hands up your waist and begins thrusting up into you")>>.
Looking down at $Mon.himher grinning up at you, your reach down and take $Mon.hisher tits in your hands. <<print $Mon.hisher.toUpperFirst()>> nipples harden at your touch, and $Mon.heshe picks up the pace, thrusting hard enough that your ass barely has time to come back down between thrusts. Relaxing into the motion, you cum before $Mon.heshe does, but are well onto your way to your second climax before $Mon.heshe finally cums inside you.
<<endif>>\
<<elseif $WORLD.datapasser is "goblin vaginal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven +1>>\
Collapsing to her knees, the goblin eyes your crotch sadly and begins crying. Almost feeling bad for what's about to happen, you remove your pants and push her onto her back.
"Wait, what?" she looks up at you in shock. "You mean you're going to fuck me even though I lost? Woo! Score!"
In a flash, her tears are replaced with a nearly giddy grin as she tears off what little clothes she has and looks up at you pleadingly, desperately almost. Amused by her change in attitude, you happily oblige her by poking the tip of your dick into her already-dripping pussy, delighting in her gasps of pleasure as you take your time to slowly nudge it just a little further in with each thrust. \
<<if _pcboobs > 0>>\
Meanwhile, she reaches up and fondles your boobs, tracing little circles around your nipples and squeezing them generously. \
<<else>>\
Meanwhile, she takes the initiative with your hands and plants them firmly on her huge, ponderous breasts and sighs in relief. \
<<endif>>\
Between that and the constant massaging of your cock by her tightly muscled vaginal walls, it doesn't take long before you both climax together.
<<MaleVirginity "a goblin">> \
<<set _r to random(1,3)>>\
<<if _r is 1>>\
"That was the best!" she giggles as you both clean up. "Almost makes me ok with losing. But you'd better watch out, because next time I'm going to win and I won't be as gentle as you were."
<<elseif _r is 2>>\
"Wow," she sighs happily. "I don't know why you fought so hard to win if you you were just going to fuck me anyway. But happy ending for both of us? I'll take it!"
<<else>>\
"That was amazing," she exhales with a dreamly look in her eyes. "Maybe I should try losing fights more often."
<<endif>>\
<<elseif $WORLD.datapasser is "goblin assfuck">>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven +1>>\
The goblin collapses to the ground masturabting in a fit of lust, staring at you in apparant confusion as he begins furiously stroking his dick. Uninterested in this, you grab him roughly and flip him over onto his stomach. Too stunned to object, you spread his butt-cheeks and ram your dick up against his anus.
He's squirming and it's a little hard to get in, so you reach underneath to moisten up a hand in pre-cum still dripping from his rapidly shrinking penis, then lather up his asshole with it to give you easier entry. He begins to protest, but you ignore him and instead glide your dick up into his ass hole using his own lubrication. Once in, moving back and forth becomes easier, and he stops protestign beyond a whimper as you quickly increase your pace to a stready clip. Placing one hand on his back, you push down and lean forward to rotate his hips higher and his chest down to the ground in complete submission. That's when he completely gives up.
You, on the other hand, are just getting started.
"Oh yes," you moan. "Goblin ass is the best. So tight. This isn't your first time on the receiving end, is it?"
He doesn't answer and you don't care. Instead you grip his hips with both hands and starting pounding him for real. It doesn't take much more of this before you feel your climax coming, and you make sure to thrust all the way balls-deep into his ass hole to deliver your semen as far up into him as it can reach.
Briefly considering making him lick you clean, you instead settle for wiping your dick off on his clothes, before getting dressed again and leaving him lying there.
<<else>>\
Error in goblin event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<!--
obsoelte goblin
The goblin collapses to the ground in a fit of masturbation, staring at you lustfully as $Mon.heshe begins furiously stroking $Mon.hisher cock.
"No, stop touching yourself," you frown at $Mon.himher. "That cock belongs to me now."
A look of surprised delight grows on $Mon.hisher face as understanding dawns on $Mon.himher. You push Mon.himher onto the ground and on $Mon.hisher back, and straddle $Mon.himher. You watch with amusement as $Mon.heshe strains to reach $Mon.hisher cock up to you with your foot on $Mon.hisher stomach.
"Alright, time to see what you can do what that," you chuckle, as you slowly...far too slow $Mon.hisher tastes...lower yourself onto $Mon.hisher cock. <<FemaleVirginity "goblin">> \
<<if $Mon.sex is "male">>\
Taking advantage of the opportunity, he immediately thrusts his hips upward with enough force that your downward descent is turned into an upward bounce, then grabs your hips to pull you back down.
<<if $PC[$CC][$PCstr] + $PC[$CC][$PCstr] > 22>>\
"No," you growl through your growing lust. "I'm the one in control here."
Standing back up and planting a foot firmly on $Mon.hisher chest, you watch with interest as he groans in agony, before finally relenting and laying prone. You slowly lower yourself again, locking eyes with $Mon.himher as your pussy lips just barely begun to nudge up against $Mon.hisher cock. <<print $Mon.heshe.toUpperFirst()>> squints and clenches $Mon.hisher teeth, breathing heavily but still not moving. Satisfied with $Mon.hisher submission, you get to pleasuring yourself. Taking a deep breath, your eyes begin to glaze over as you lower yourself just half an inch onto $Mon.hisher cock. Nearly tasting $Mon.hisher pre-cum begin to libricate you, you slide up and down a couple times before lowering yourself another inch, two inches, three inches around $Mon.hisher member.
You take your good sweet time, with half a dozen pulses up and down for every inch of his length you take inside you. By the time your pelvis touches his, you feel a pulse, then a small geyser of cum burst up into your cervix. You slap the goblin in the face for his premature ejculation without so much as sparing him a glace, then get to work grinding up and down on his still-erect cock, clenching your insides around it and feeling the heavily-bulbed tip pressing up near your womb. The thought of a goblin making you pregnant both irritates and fascinates you, and it's with some annoyance that it's at that exact moment that you both climax.
Too horny to care, you revel in the sensation of his generous rush of semen filling you, staying corked up inside of you by his cock. After another dozen or so times impaling yourself on his cock you stand up, letting the semen slide down your thighs in long slimy trails.
<<else>>\
<<if random(1,2) is 1>>\
You open your mouth to object, but your words are cut off by the sensation of him roughly impaling you down onto his cock a second time. Grabbing his hands you try to pull them off, but they're nearly as big as your head a his hands are nearly as big as your head and despite your strength you can't quite pry his fingers off. Realizing he's successfully turned the tables on you and can now have his way with you, you let out a cry, uselessly punching and prying at his fingers while he slams you onto his cock over and over.
<<else>>\
You're surprised by his aggressiveness, but decide to let him have his fun. You're getting what you want either way. Feeling his hands tighten on your waist, you're surprised at the strength of his grip as he pushes you up, then yanks you back down to impale you on his cock.
"Oh, that's good," you moan softly.
Relaxing back and letting him do all the work of lifting you up and dropping you back down on his thick meaty cock, you have 3 or 4 climaxes before he finally grunts and sprays a burst of milky goblin seed inside you. At last finished, he slowly brings you down on his rod to come to rest on his pelvis, his cock slowly growing soft after several more minutes inside you.
<<endif>>\
<<endif>>\
<<else>>\
<<print $Mon.heshe.toUpperFirst()>> makes some almost-but-not-quite female noises as you sit back up off of $Mon.hisher cock and slowly let yourself down onto it again. <<print $Mon.hisher.toUpperFirst()>> cock <<print either("is strangely thin for how long it is", "doesn't penetrate you as deeply as you'd prefer","is curved in a way that you can feel as it works in and out of you")>> and the sensation is a little disppoianting. Trying to make up for it by clenching your pussy more tightly around it, $Mon.heshe squeels and ejaculates immediately. You manage to get another few thrusts back up and down on it before it grows too soft to continue.
Standing to leave the now-sleeping goblin with a look of contentment on $Mon.hisher face, you shrug and continue on your way.
<<endif>>\
-->\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<endif>>\
<<if _pcpenis > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginal + 1>>\
<<endif>>\
\
<!-- part 1 -->\
<<set _r to random(1,3)>>\
<<if _r is 1>>\
No longer concerned with pretense, the slime quickly returns to its natural amoeboid state and oozes over to your fallen form. Engulfing your entire body up the the neck, \
<<if _pcpussy > 0>>\
it immediately plunges into all of your holes \
<<elseif _pcpenis > 0>>\
it immediately tugs on your cock while plunging into your asshole \
<<else>>\
it immediately plunges into your asshole \
<<endif>>\
<<if _pcboobs > 0>>\
and <<print either("and begins fondling your tits.","and starts suctioning milk from your chest.","while encircling and teasing your nipples.")>>\
<<else>>.
<<endif>>\
<<elseif _r is 2>>\
Collapsing to your knees, you watch helplessly as the slime extends tendrils from its midsection, then wraps itself around your ankles and pulls them apart. Dragging you effortlessly to where it waits with several very phallic appendages already twitching and dripping in anticipation.
<<elseif _r is 3>>\
<<print either("The slime","Your conqueror")>> <<print either ("considers you for a moment","seems to consider how to proceed","stares emotionlessly at you","boggles in excitement","briefly reconfigures its form")>> before <<print either("ambling","sloshing itself","rolling itself","walking")>> over on <<print either("gelatinous legs","humanoid appendages","gelantinous appendages")>> it doesn't need. \
<<print either("Reaching out to tentatively explore its way up your thighs","Quickly engulfing you from feet to mid-thigh","Encircling your ankles and yanking them apart")>>, it <<print either("then gradually works its way across most of your body up to the neck.","then takes its time the rest of the way up, filling every nook and crevice of your body within its reach along the way.","immediately glides a single tendril in wavy little ripples up your thighs, then shifts the majority of its bulk to a large glob wrapped securely around your waist.")>> \
<<print either("Whatever desire it has for foreplay now satisfied","Apparently pleased with the grip it now has on you","Indifferent to your struggles")>>, \
<<if _pcpussy > 0>>\
it immediately plunges itself into every one of your orifices.
<<elseif _pcpenis > 0>>\
it immediately tugs on your cock while plunging into your asshole.
<<else>>\
but finding little else to work with, it pulls open your asshole and you watch your lower abdomen grow as it begins shifting much of its bulk into your intestinal tract.
<<endif>>\
<<endif>>\
<<if _pcpussy > 0>>\
<<if $PC[$CC][$PCpregnant][0] > 0>>\
@@color:Orange;You feel a tremendous sense of loss@@, as your unborn baby is consumed by the slime in your womb, and replaced by one of its own.
<<AwardAchievement "Barren">>\
<<endif>>\
<<FemaleVirginity "a slime creature">>\
<<UnnaturalPregnancy $CC "slime" 3>>\
<<endif>>\
<!-- part 2 -->\
<<if _pcpussy > 0>>\
<<if _pcpenis > 0>>\
<<print either("With tendrils in both your pussy and around your cock, there's a subtle rippling motion to its efforts, as if it's not only gliding across the length of your shaft but also vibrating every bit of its body where it touches you both inside and out.","Roughly pistoning your puussy with one tendril, yet another emits from its mass to encirle and rub at your penis in a complementary motion with such delicacy that it's as if an entirely different creature were at work on each of your organs.","Discontent with merely your pussy however, the slime extends out another few tendrils to grasp your cock, each gliding up and down its length in time with the bulk of its body already enthusiastically fucking you.")>>
<<else>>\
<<print either("Working both your pussy and ass as if it can't tell the difference, the slime fucks both holes with a reckless abandon that renders you instantly receptive and willing.","Realizing that the fluids it wants depend on your pleasure, the slime spares no effort to tickle and tittle and explore your clit while simultaneously massaging the entirety of your insides in places a cock could never reach.")>> <<print either("The creature's endurance shocks you, never needing to rest of breath in its quest to carry you to the highest height of pleasure.","And yet somehow it brings you to even higher pleasure by fitting impossibly more of its body inside you, gyrating and wiggling against every bit of your insides.","With the ability to shape its body however it pleases, the slime works you both inside and out, from clitoris to nearly your cervix, while still giving sensual attention up your thighs and chest.")>>
<<endif>>\
<<elseif _pcpenis > 0>>\
<<print either("Clearly knowing what it's after, the slime briefly tickles your balls then starts suctioning your cock like a giant vaccuum cleaner, audibly sucking and slurping you to full mast.")>> <<print either("It seems to be in no rush, wetly working your shaft with a patience clearly born of experience, delicately massaging your balls and teasing your nipples ","Gasping in sudden pleasure as it fucks itself on and off your cock, you can't help but marvel at the unique nature of the experience. With no bones to limit its movements, the slime contorts and engulfs and ripples across every sensual bit of your entire body, licking and sucking on your cock all the while.","Roughly jostling you by the hips, the slime then stretches out your arms and legs out to their limit as if to let you know who's in charge as it suctions itself onto your cock and gets to work.","Not quite a tongue, not quite a pussy, the slime tickles and licks and fucks your cock in ways no mere biped ever could.","As if made of water, the slime ripples and bubbles its way across your cock in a way that is both sexual and sexual, sparing no effort to touch every bit of you while massaging your balls with a gentle insistence that reeks of desire.")>>
<<MaleVirginity "a slime creature">>\
<<else>>\
<<print either("The slime wastes no time absorbing all the food you've eaten recently into its body.","With an efficiency that is less than erotic, it quickly cleans out your stomach of its contents like a giant vaccum cleaning suctioning out your insides.")>> <<print either("Thankfully, it only seems interested in the contents of your body, not your body itself.","You find yourself immensely grateful for the creature's relative gentleness. That is to say, at least it's not suctioning out your internal organs while it feeds.","It does give a polite nod to trying to keep you aroused by vibrating the tendril in your ass, but you wonder if maybe it pays more complete attention to its victims that have fluid-producing sexual organs for it to enjoy.")>>
<<endif>>\
<!-- part 3 -->\
<<if _pcpenis + _pcpussy > 0>>\
<<print either("Needing no climax itself, the slime quickly brings you to one of your own, greedily slurping down your fluids with an eagerness born of hunger.","Before long you find yourself on the edge of orgasm, which the slime eagerly nurtures by picking up its pace and wiggling itself indiscriminately over every inch of exposed flesh it can find. Keeping this up through the entirety of your climax, you soon find yourself completely spent.","Taking care to stimulate not only your sex but also the rest of you, the slime darts this way and that, brushing across your lips and massaging your belly with abandon. The sensations overwhelm you and when your climax comes, the slime is ready and waiting. Slurping down your fluids, it continues to tickle and vibrate its way to one of the longest orgasms you've ever experienced.")>> <<print either("And then it slinks off without warning, crawling and oozing its way out of sight.","Despite having what it wanted from you, the slime seems in no hurry to leave. Hesitantly you reach out to try and give it an affectionate pat. Comically, it reciprocates by patting you on an elbow as if it has no genuine understanding of the anatomy it has so recently enjoyed. But this does not last long, and it soon leaves you in search of other prey.","What follows is complete silence. Having what it came for, the slime slowly extracts itself from your body without fuss, then oozes its way out of sight, presumably in search of its next victim.")>>
<<else>>\
<<print either("Then suddenly, as soon as it began, it's over. Having what it wanted from you, the slime extracts itself from your insides and slinks off into the darkness.","It takes a few minutes for the slime to finish cleaning you out, but once it has it then slowly retreats its way out from your intestines and out your anus, only to then unceremoniously slink off into the shadows in search of yet more delicious prey. ","Wanting to leave not one drop of food left over, the slime finishes by climbing its way completely up through your digestive tract and then up your throat and out your mouth. Yet there is no unpleasant flavor, no excrement, no bile, as if every bit of you has been scrubbed clean on its way up and out. Once the last of its bulk has cleared your lips you find yourself feeling strangely clean, and perhaps a bit lighter as you watch the slime roll off into the tower's depths in search of its next victim.")>>
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","slime"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<PlayBGM "town">>\
\
<<set $WORLD.CombatInterrupt to "">>\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
<<set _ExitLinks to "base">>\
\
<<if ($WORLD.datapasser[0] is "ressurection")>>\
<<set $WORLD.datapasser[0] to "">>\
<<set _ExitLinks to "none">>\
@@color:LightGreen;Ressurection at the Church of Immaculate Rebirth@@
<hr>\
<<SimplePic "ressurection.jpg">>\
After carrying the body to a suitble alcove and draping a clean white sheet over it, Harmony kneels and recites a brief prayer.
@@color:Pink;Harmony@@: "Oh, great Goddess! I, your humble servant beseech you to return this poor lost soul to us. From darkness we came, and to darkness we return. But by your grace, in this space between what once was and what ultimately is to become, here do we live our lives."
As she prays, a beautific light descends from above and engulfs the body on the altar. Once it becomes so bright you can barely see, Harmony stands with her arms raised and shouts.
@@color:Pink;Harmony@@: "By the grace of the Goddess, return to us!"
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "Preamble">>\
<<AutoSaveLoad "set">>
<</link>>
</span>\
<<elseif ($WORLD.datapasser[0] is "defeat") or ($WORLD.datapasser[0] is "sex")>>\
@@color:LightGreen;The Church@@
<hr>\
<<SimplePic "church.jpg">>\
<<KickFromTower>>\
<<AdvanceTime 720>>\
<<FullyHeal>>\
<<set _ExitLinks to "wake up">>\
You wake up to a wooden ceiling and the scent of burning candles. Sitting up, you feel a brief stab of pain in your overworked genitals, but it passes, Looking around, it seems some good samaritan has transported you from where you fell, to the safety of a recovery bed in the church. You look for your anonymous benefactor to thank them, but find no one.
<hr>\
@@color:Red;Your body feels different.@@
<<if $DebugMode is true>>\
<hr>\
@@color:Gold;Debug: DoTransfrom request@@
<<for _DT to 0; _DT < $Mon.anatomy.length; _DT++>>\
_DT - <<print $Mon.anatomy[_DT].type>>, <<print $Mon.anatomy[_DT].morph>>
<</for>>\
<hr>\
<<endif>>\
<<DoTransform $Mon.anatomy "sex">>\
<<set $WORLD.datapasser to 0>>\
<<if (setup.PtrToClass($PC[$CC][$PCclass]) is "prostitute") and ($PC[$CC][$PClevel] > 6)>>\
On the bright side, as an veteran prositute, you did learn something from the experience.
<<AwardXP $Mon.level "sex xp">>\
<<endif>>\
\
<<if setup.TypeOf($Conception) is "string">>\
<<if $Conception is "success">>\
@@color:Pink;<<print either("You feel strangely euphoric for some reason.","For some reason you feel strangely ok with this.","Thinking back on your encounter makes you feel especially sexy for some reason.")>>
<<if $DebugMode is true>>\
Debug, conception: <<print $Conception>>, pregnancy: <<print $PC[$CC][$PCpregnant]>>
<<endif>>\
<<endif>>\
<<unset $Conception>>\
<<endif>>\
<<elseif ($WORLD.datapasser[0] is "knockout")>>\
@@color:LightGreen;The Church@@
<hr>\
<<SimplePic "church.jpg">>\
<<KickFromTower>>\
<<AdvanceTime 720>>\
<<FullyHeal>>\
<<set _ExitLinks to "wake up">>\
You wake up to a wooden ceiling and the scent of burning candles. Sitting up, you immediately feel dizzy and your vision spins. Feeling the back of your head you find a large welt and a bandage. But checking bewteen your legs it seems your more sensitive parts are untouched, and your body doesn't feel any different.
<<set $WORLD.datapasser[0] to "">>\
<<elseif $WORLD.datapasser is "retire">>\
<<SimplePic "harmony.jpg">>\
@@color:LightGreen;The Church of Immaculate Rebirth@@
<hr>\
<<set _ExitLinks to "retire">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "The burdens of the adventuring life weigh heavily on me. I think I'd like to retire."
<<set _plevel to $PC[$CC][$PClevel]>>\
<<set _ClassName to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<set _AchName to "Best " + _ClassName.toUpperFirst()>>\
<<set _AchData to setup.AchievementHandler(_AchName, "FETCH", -1)>>\
<<set _BestLevelDifference to $PC[$CC][$PClevel] - setup.AchievementHandler(_AchName, "HAS?", -1)>>\
<<if $PC[$CC][$PClevel] is 1>>\
<<if $PC[$CC][$PCgen] is 1>>
<<if _BestLevelDifference > 0>>\
@@color:Pink;Harmony@@: "You're still level 1. Am I to assume that you're asking out of simple curiosity? While it's true that you would gain 'Best <<print _ClassName>>' achievement credit for retiring at level 1, you would also gain an extra stat point if you would simply gain a single level. Do you really truly wish to retire so soon?"
<<else>>
@@color:Pink;Harmony@@: "You're still level 1. You would gain nothing from retirement otherwise except the chance at a new life no more powerful than this one. Given that you are a new soul with no experience of prior incarnations, am I to assume that you're asking out of simple curiosity? You don't truly wish to retire now, do you?"
<<endif>>\
<<else>>\
<<if _BestLevelDifference > 0>>\
@@color:Pink;Harmony@@: "I'm curious, are you asking to retire now to powergame the +1 point you'd gain from the 'Best _ClassName' achievement, or was this a simple click of curiosity?"
<<else>>\
@@color:Pink;Harmony@@: "You're still level 1. You would gain nothing from retirement except the chance at a new life no more powerful than this one. Are you certain this is what you want?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "It's a secret."
@@color:Pink;Harmony@@: "I see. Very well. I won't stop you if that's what you want to do."
<<endif>>\
<<endif>>\
<<elseif $PC[$CC][$PClevel] lte $PC[$CC][$PCretirementcap]>>\
<<if _BestLevelDifference > 0>>\
@@color:Pink;Harmony@@: "You're currently level <<print $PC[$CC][$PClevel]>>. Your highest previous retirement was at level $PC[$CC][$PCretirementcap], which means that you'll gain no reincarnation power if you retire now. However, it appears that you will gain _BestLevelDifference levels to your 'Best _ClassName' achievement cap, which might be worthwhile."
<<else>>\
@@color:Pink;Harmony@@: "You're currently level <<print $PC[$CC][$PClevel]>>. Your highest previous retirement was at level $PC[$CC][$PCretirementcap]. If you retire now, your soul will gain no power, your 'Best _ClassName' achievement level will not improve, and your next incarnation will be no stronger at birth you yourself were. Are you sure you want to retire now?"
<<endif>>\
<<else>>\
@@color:Pink;Harmony@@: "You're currently level $PC[$CC][$PClevel]. <<if $PC[$CC][$PCgen] > 1>>Your highest previous retirement was at level $PC[$CC][$PCretirementcap]. <<endif>>If you retire now, your next incarnation will have <<print $PC[$CC][$PClevel] - $PC[$CC][$PCretirementcap]>> more points to spend than you yourself did. <<if _BestLevelDifference > 0>>Additionally, you'll gain _BestLevelDifference levels to your 'Best _ClassName' achievement level. Is that acceptable?<<endif>>"
<<endif>>\
<<if setup.PlayerHasPerk("Vault") is true>>\
<<set _VaultQTY to $STORE[$LegacyVault].length>>\
<<if (_VaultQTY > 0) or ($WORLD.VaultGold > 0)>>\
@@color:Orange;The Legacy vault has <<print $WORLD.VaultGold>> gold and <<print _VaultQTY>> items that will be permanently lost if you retire now@@
<<else>>\
@@color:LightGreen;The Legacy Vault is ready to receive your equipment.@@
<<endif>>\
<<endif>>\
<<elseif $PC[$CC][$PCchurchstate] is 0>>\
<<SimplePic "harmony.jpg">>\
<<set $WORLD.datapasser to [-1,0,0,0,0,0,0]>>\
<<set $PC[$CC][$PCchurchstate] to 1>>\
<<set _ExitLinks to "base">>\
@@color:LightGreen;The Church of Immaculate Rebirth@@
<hr>\
The church is mostly empty but for a few clergy. Shadows flicker from candles staggered around the room and you hear the dulcet tones of organ music.
Before long, you're approached by a priestess with pink hair.
@@color:Pink;Harmony@@: "Hello. May I help you?"
<<elseif $PC[$CC][$PCchurchstate] is 1>>\
<<SimplePic "harmony.jpg">>\
@@color:LightGreen;The Church of Immaculate Rebirth@@
<hr>\
<<if $WORLD.datapasser[0] is 1>>\
<<if $PC[$CC][$PCgen] > 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello. I'm here to explore the tower. My name is-"
@@color:Pink;Harmony@@: "<<print $PC[$CC][$PCname]>>. @@color:Yellow;//''Yes, I know who you are.''//@@"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What? How?"
@@color:Pink;Harmony@@: "We at the Church of Immaculate Rebirth are unbound by time. We watch over the souls of the living, the dying, and the soon to live again. \
<<if $PC[$CC][$PCname] is $PC[$CC][$PCancestor]>>I know you because you are the descendant of your own namesake, who was the prior generation of your soul, generation <<print $PC[$CC][$PCgen] -1>>. And you, of generation <<print $PC[$CC][$PCgen]>>, are here to continue your soul's legacy.
<<else>>I know you are because you are the descendant of $PC[$CC][$PCancestor], who was the prior generation of your soul, generation <<print $PC[$CC][$PCgen] -1>>. And you, of generation <<print $PC[$CC][$PCgen]>>, are here to continue your soul's legacy."
<<endif>>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello. I'm here to explore the tower. My name is <<print $PC[$CC][$PCname]>>."
@@color:Pink;Harmony@@: "<<print $PC[$CC][$PCname]>>? It's a pleasure to meet you. It's not often that I meet genuinely new people. Welcome to Crescentheart."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thank you. I'd think you'd see new faces here all the time, what with the tower and all."
@@color:Pink;Harmony@@: "Yes, new faces are quite regular. But new souls? Those are rare. How may I help you?"
<<endif>>\
<<elseif $WORLD.datapasser[0] is 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Would you tell me about the church?"
@@color:Pink;Harmony@@: "The Church of Immaculate Rebirth is the physical manifestation of the Goddess of Primal Darkness's desire to share Her love with humanity. We who take this calling are here to serve humanity as best we may by acting as a proxy between those who suffer here in the material world, and the infinite possibilty offered by the Goddess.
<<elseif $WORLD.datapasser[0] is 3>>\
<<set $WORLD.datapasser[3] to 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What services does the church provide?"
@@color:Pink;Harmony@@: "Our primary service is to educate and assist those among the living with reincarnative processes. When you at last tire of the adventuring life and wish to return to the eternal beyond from which you come, come here and our order will be ready to assist you. Additionally, though it is not a task we relish, we also occasionally ferry the souls of the dead back to this land of the living."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You can bring back the dead?"
@@color:Pink;Harmony@@: "No, you misunderstand," she bows her head humbly. "Me, alone? I can do nothing. It is only through the grace of Goddess that such things are possible, and I am but Her humble servant. But yes, with that made clear, bringing back the dead is indeed within the purview of our order."
<<elseif $WORLD.datapasser[0] is 4>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Would you tell me about yourself?"
@@color:Pink;Harmony@@: "Me? I myself am of little consequence. Merely an humble servant of the Goddess. Please, pay me no mind."
<<elseif $WORLD.datapasser[0] is 5>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's the deal with the gravestones out front?"
@@color:Pink;Harmony@@: "They commemorate the lives and deaths of our dear ancestors."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What do you mean?"
@@color:Pink;Harmony@@: "The adventuring life is a dangerous one. It is often the fate of adventureres to die horrible, tragic deaths in the field. To be consumed in fire, to starve to death at the bottom of an empty pit, to be beaten to a bloody mess of pulp during a boss encounter, etc. But it need not be so. Those who retire from the adventuring life while still alive, when at last they die of natural causes, are laid to rest in our graveyard so that future generations may be inspired by the memory of their survival. Perhaps even you may join our honored dead someday. In the meantime, feel free to walk among them and bask kindly in their memories."
<<elseif $WORLD.datapasser[0] is 6>>\
<<set $WORLD.datapasser[6] to 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Would you tell me about the goddess?"
@@color:Pink;Harmony@@: "Of course!" she lights up. "The Goddess of Primal Darkness is the unmanifest infinity from which all of creation comes! She is our loving Mother, and we are all Her children."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So then, she's not evil?"
@@color:Pink;Harmony@@: "Oh, goodness no!" she seems horrified. "What parent hates their child? No, from nothing were we born, in love. And when we die, to that love shall we return."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why all the transformation magic then?
@@color:Pink;Harmony@@: "It is difficult for one of this limited finity to understand the unbound creation," she explains patiently. "But you are an immortal soul, and once you return to the undifferentiated and unmanifest, this time you spent here will be but a drop amidst the oceans of eternity. Faced with eternity, what will it matter if you spent a single lifetime as a human or a mudcrab or a rock or a cathedral?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "But why does her magic change people? If I don't want to be a mudcrab, why would she turn me into one?"
@@color:Pink;Harmony@@: "The Goddess grants all requests," she says very seriously. "Some are careless with their wishes. And in Her love, She gives us what we ask for, hoping that within the span of eternity we may perhaps learn wisdom."
<<else>>\
Error in churchs, datapasser is: <<print $WORLD.datapasser>>
<<endif>>\
<<elseif $PC[$CC][$PCchurchstate] is 2>>\
\
<!-- COLLECT DATA -------------------------------------- -->\
<<set _DeadQTY to 0>>\
<<set _LostQTY to 0>>\
<<set _CarryQTY to 0>>\
<<set _InTownQTY to 0>>\
<<set _RESSTHISPERSON to -1>>\
<<set _TownOrCarry to "">>\
<<for _R to 0; _R < 3; _R++>>\
<<if $PC[_R][$PCLocation] is "tower">>\
<<endif>>\
<<if $PC[_R][$PCstate] is "dead">>\
<<set _DeadQTY to _DeadQTY +1>>\
<<elseif $PC[_R][$PCstate] is "lost">>\
<<set _DeadQTY to _DeadQTY +1>>\
<<endif>>\
<<if ($PC[_R][$PCstate] is "dead") or ($PC[_R][$PCstate] is "lost")>>\
<<if $PC[_R][$PClocation] is "town">>\
<<set _InTownQTY to _InTownQTY +1>>\
<<set _RESSTHISPERSON to _R>>
<<set _TownOrCarry to "town">>\
<<endif>>\
<<endif>>\
<</for>>\
\
<<set _InvenSpotHoldingCorpse to -1>>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<if $PC[$CC][$PCinven][_i][0] is 999>>\
<<set _CarryQTY to _CarryQTY +1>>\
<<set _InvenSpotHoldingCorpse to _i>>\
<<set _TownOrCarry to "carry">>\
<<set _RESSTHISPERSON to $PC[$CC][$PCinven][_i][1]>>\
<<endif>>\
<</for>>\
\
<<SimplePic "harmony.jpg">>\
@@color:LightGreen;The Church of Immaculate Rebirth@@
<<set _ExitLinks to "none">>\
<hr>\
<<if _RESSTHISPERSON > -1>>\
<!-- we have someone we can ress right now -------------------------- -->\
<<if _TownOrCarry is "carry">>\
<<set _ExitLinks to "none">>\
You carry <<print $PC[_RESSTHISPERSON][$PCname]>>'s lifeless body into the church and set it down gently on the floor.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Harmony! Help!"
@@color:Pink;Harmony@@: "Hello, <<print $PC[$CC][$PCname]>>. Is this a friend of yours?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Not exactly a friend, but certainly it's someone important to me. Is there anything you can do?"
@@color:Pink;Harmony@@: "Perhaps. The body appears to be reasonably well intact. And that you've carried it here is proof enough of the sort of emotional connection needed to guide the soul back from the realm of the Goddess. Yes, I believe I can help. Would you like for me to ressurect them now?"
<<elseif _TownOrCarry is "town">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello, Harmony. Do you have any information for me?"
@@color:Pink;Harmony@@: "Hello, <<print $PC[$CC][$PCname]>>. Yes, a member of my order recently found a poor soul laying dead in the streets of town here."
Curious, you ask Harmony to take you to the body.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wait. That's <<print $PC[_RESSTHISPERSON][$PCname]>>!"
@@color:Pink;Harmony@@: "Oh, you know them? In that case, if you'd like I can use your connection with the deceased as a conduit through which to ferry their soul back to the land of the living. Shall I ressurect <<print $PC[_RESSTHISPERSON][$PCname]>>?"
<<endif>>\
\
<<if _RESSTHISPERSON > -1>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) No, not right now" "TownSquare">>
<<set $WORLD.datapasser to "">>\
<</link>>\
</span>
<<set _LinkText to "1) Yes, please ressurect " + $PC[_RESSTHISPERSON][$PCname]>>\
<span id="KeypOne">\
<<link _LinkText "Church">>\
<<set $WORLD.datapasser to ["ressurection"]>>\
<<if $WORLD.quests[7].state is "active">>\
<<set $WORLD.quests[7].harmony to _RESSTHISPERSON>>\
<<endif>>\
<<set $PC[$CC][$PCinven][_InvenSpotHoldingCorpse] to [0,0,0,0,0]>>\
<<set $PC[_RESSTHISPERSON][$PCstate] to "alive">>\
<<set $PC[_RESSTHISPERSON][$PClocation] to "town">>\
<<set $PC[_RESSTHISPERSON][$PCz] to 0>>\
<<set $PC[_RESSTHISPERSON][$PCfz] to 0>>\
<<set $PC[_RESSTHISPERSON][$PChpcur] to $PC[_RESSTHISPERSON][$PChpmax]>>\
<<set $PC[_RESSTHISPERSON][$PCeffects] to []>>\
<<set $PC[_RESSTHISPERSON][$PCcoins] to 0>>\
<<set $PC[_RESSTHISPERSON][$PChunger] to 500>>\
<</link>>
</span>
<<else>>\
@@color:Red;Error in church:@@ Harmony thinks somebody's availabel for ress right here and now, but RESSTHISPERSON is still -1?
<<endif>>\
<<elseif (_DeadQTY + _LostQTY) > 0>>\
<<set _ExitLinks to "else">>\
<!-- nobody available to ress now, but we have dead peopel elsewhere so harmony give us information please -------------------------- -->\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello, Harmony. Do you have any information for me?"
@@color:Pink;Harmony@@: "Yes, I have the following information:"
@@color:Gold;Ressurection candidates@@
<<for _R to 0; _R < 3; _R++>>\
<<if $PC[_R][$PCstate] is "dead">>\
* <<print $PC[_R][$PCname]>> is @@color:Red;dead@@, and was last seen \
<<if $PC[_R][$PClocation] is "tower">>\
on level <<print $PC[_R][$PCz]>> of the Tower of Triumph
<<elseif $PC[_R][$PClocation] is "forest">>\
on level <<print $PC[_R][$PCfz]>> of the Enchanted Forest
<<elseif $PC[_R][$PClocation] is "desert">>\
in level <<print $PC[_R][$PCdz]>> of the Southern Desert
<<else>>\
(error: location reported as: $PC[_R][$PCLocation])
<<endif>>\
<<elseif $PC[_R][$PCstate] is "lost">>\
* <<print $PC[_R][$PCname]>> is @@color:Red;lost@@, and was last seen \
<<if $PC[_R][$PClocation] is "tower">>\
on level <<print $PC[_R][$PCz]>> of the Tower of Triumph
<<elseif $PC[_R][$PClocation] is "forest">>\
on level <<print $PC[_R][$PCz]>> of the Enchanted Forest
<<elseif $PC[_R][$PClocation] is "desert">>\
in level <<print $PC[_R][$PCdz]>> of the Southern Desert
<<else>>\
(error: location reported as: $PC[_R][$PCLocation])
<<endif>>\
<<endif>>\
<</for>>\
<<if _DeadQTY > 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is there any way for the dead to be brought back to life?"
@@color:Pink;Harmony@@: "Yes. The soul is eternal. However, those who have reunited with the Goddess share only a tenuous connection to the mortal realm. Ressurection requires a both a body for them to return to, and an emotional connection with the living to motivate the soul to return."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So if I recover a body and bring it here, can you bring them back to life?"
@@color:Pink;Harmony@@: "Goddess willing, yes."
<<endif>>\
<<if _LostQTY > 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What does it mean if a person is 'lost' rather than dead? Can they still be brought back?"
@@color:Pink;Harmony@@: "Yes, those who are lost may still be recovered. But it might prove more difficult, as their body has been moved since they died. To ressurect them it is still a simple matter of returning their body and energizing their return with an emotional connection to someone still living, such as yourself. But finding their body might prove more difficult than simply returning to the spot where they died."
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What if I can't find their body at the location listed?"
@@color:Pink;Harmony@@: "It's possible their body might have been moved. That can happen sometimes. The game uses a finite amount of space to track events at locations, and dead characters receive lower priority than, for example, stairs. You wouldn't want to recover a body but be stuck and unable to leave because the stairs didn't appear. If a corpse ends up on a stairs tile or similar, you might need to regenerate the tower, which will re-randomize placements and give you another chance to find the body."
<<else>>\
<!-- nobody dead at all, so give generic closer -------------------------- -->\
<<set _ExitLinks to "default leave/retire">>\
@@color:Pink;Harmony@@: "Hello, <<print $PC[$CC][$PCname]>>. Know that you are always welcome here."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: <<print either("Thanks. Just checking to see if anything's new.","Do you have any new information for me?","Hey, Harmony. Anything new going on?","So...anything important going on that I should know about?")>>
@@color:Pink;Harmony@@: "<<print either("All is as ever shall it be.","All is well here. Peace be unto you.","Nothing that I'm aware of, at present.","You may rest confidant in the knowledge that all is as it should be.","There are no accidents, " + $PC[$CC][$PCname] + ". If you have reason to need to be here, the path will be made clear to you.")>>"
<<endif>>\
<<endif>>\
\
\
\
<hr>
<<if _ExitLinks is "base">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I don't need any questions answered, thanks." "TownSquare">>
<<set $PC[$CC][$PCchurchstate] to 2>>\
<</link>>\
</span>
<span id="KeypR">\
<<link "r) Retire this character" "Church">>
<<set $WORLD.datapasser to "retire">>\
<</link>>\
</span>
<hr>\
@@color:Gold;Chat@@
<<if $WORLD.datapasser[1] is 0>>\
<span id="KeypOne">\
<<link "1) Introduce yourself" "Church">>
<<set $WORLD.datapasser[0] to 1>>\
<<set $WORLD.datapasser[1] to 1>>\
<</link>>\
</span>
<<else>>\
1) Already introduced yourself
<<endif>>\
\
<<if $WORLD.datapasser[2] is 0>>\
<span id="KeypTwo">\
<<link "2) Ask about the church" "Church">>
<<set $WORLD.datapasser[0] to 2>>\
<<set $WORLD.datapasser[2] to 1>>\
<</link>>\
</span>
<<else>>\
2) Already asked about the church
<<endif>>\
\
<<if $WORLD.datapasser[3] is 0>>\
<span id="KeypThree">\
<<link "3) Ask which church services are available" "Church">>
<<set $WORLD.datapasser[0] to 3>>\
<<set $WORLD.datapasser[3] to 1>>\
<</link>>\
</span>
<<else>>\
3) Already asked about church services
<<endif>>\
\
<<if $WORLD.datapasser[4] is 0>>\
<span id="KeypFour">\
<<link "4) Ask her about herself" "Church">>
<<set $WORLD.datapasser[0] to 4>>\
<<set $WORLD.datapasser[4] to 1>>\
<</link>>\
</span>
<<else>>\
4) Already asked about Harmony
<<endif>>\
\
<<if $WORLD.datapasser[5] is 0>>\
<span id="KeypFive">\
<<link "5) What can you tell me about the gravestones out front?" "Church">>
<<set $WORLD.datapasser[0] to 5>>\
<<set $WORLD.datapasser[5] to 1>>\
<</link>>\
</span>
<<else>>\
5) Already asked about the gravestones
<<endif>>\
<<if $WORLD.datapasser[6] is 0>>\
<span id="KeypSix">\
<<link "6) Would you tell me about the goddess?" "Church">>
<<set $WORLD.datapasser[0] to 6>>\
<<set $WORLD.datapasser[6] to 1>>\
<</link>>\
</span>
<<else>>\
6) Already asked about the goddess
<<endif>>\
<<elseif _ExitLinks is "retire">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<span id="KeypR">\
<<link "r) Yes, retire this character" "Preamble">>
<<if setup.PlayerHasPerk("Vault") is true>>
<<FillLegacyVault>>
<<endif>>
<<if $PC[$CC][$PCparty].length > 0>>\
<<for _PR to $PC[$CC][$PCparty].length -1; _PR > -1; _PR-->>\
<<set _NextSlot to $WORLD.orphans.length>>\
<<set $WORLD.orphans[_NextSlot] to $PC[$CC][$PCparty][_PR]>>\
<<set $WORLD.orphans[_NextSlot].hpmax to 1 + $WORLD.orphans[_NextSlot].level>>
<<set $WORLD.orphans[_NextSlot].hpcur to $WORLD.orphans[_NextSlot].hpmax>>
<<if $WORLD.orphans[_NextSlot].stance is "Down">>\
<<set $WORLD.orphans[_NextSlot].stance to "Hide">>\
<<endif>>\
<<set _throwaway to $PC[$CC][$PCparty].deleteAt(_PR)>>\
<</for>>\
<<endif>>\
<<set $PC[$CC][$PCstate] to "retired">>
<<if $PC[$CC][$PClevel] > 2>>
<<AwardAchievement "I feel your loss">>
<<endif>>\
<<if $PC[$CC][$PClevel] > $PC[$CC][$PCretirementcap]>>
<<set $PC[$CC][$PCretirementcap] to $PC[$CC][$PClevel]>>
<<endif>>
<<set _throwaway to setup.AchievementHandler(_AchName, "UPGRADE", $PC[$CC][$PClevel])>>\
<<AddToGraveyard $CC>>
<<set $GameState to "menu">>
<<AutoSaveLoad "set">>
<</link>>\
</span>
<<elseif _ExitLinks is "wake up">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<if $PC[$CC][$PCchurchstate] > 0>>\
<span id="KeypOne">\
<<link "1) Look for Harmony" "Church">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<endif>>\
<<elseif _ExitLinks is "none">>\
<<else>>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<span id="KeypR">\
<<link "r) Retire this character" "Church">>
<<set $WORLD.datapasser to "retire">>\
<</link>>\
</span>
<<endif>>\<<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
$PC[$CC][$PCsexACTS].bjgiven
$PC[$CC][$PCsexACTS].bjreceived
$PC[$CC][$PCsexACTS].pussylickreceived
$PC[$CC][$PCsexACTS].vaginalreceived
$PC[$CC][$PCsexACTS].analreceived
$PC[$CC][$PCsexACTS].semengiven
$PC[$CC][$PCsexACTS].semenreceived
$PC[$CC][$PCsexACTS].milked
<<SimplePic $Mon.pic>>\
<<if (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
<<FemaleVirginity "centaur">>
<<endif>>\
\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived + 1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<elseif (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven + 1>>\
<<endif>>
\
<<ProstXP>>\
\
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","centaur"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "minotaur blowjob">>\
Breathing heavily from her exertions, the minotaur is soaking wet with the perspiration and blood of your recent battle. That...and also the trails of girlcum streaming freely down her thighs. Presumably minotaurs like strong partners, and you have proven yourself that. Gesturing her over, you find that she's already licking her lips at your crotch by the time she arrives.
Grabing the bull by the horns...literally, you move her head onto your crotch, watchign as her tongue eagerly leads the way.When she does reach it, its broad slipperiness licing at your tip sends a big pulse of blood through that causes your dick to twitch so hard that she has to chase it, as if bobbing for apples. But with the foreplay done, she licks her tongue from the underside of your dick all the way to the top in a giant funnel, then suctionsther rest of her mouth around it while you gasp.
Needing no further assitance from you, you nevertheless keep a hold of her horns to remind her who's in charge. A charge she's all too willing to embrace as she licks and sucks on you with what soon turns from mere eagerness to sheer reckless abandon. Her size lends a gratuitous quality to her blowjob, and with so much tongue available you takes you to heights youv'e never imagined.
When at last you're ready to cum, you tap her horns, prompting her to instantly slurp your dick the the back of her throat so deep that her nostrils are kissing your belly, and the large deposit of cum you make goes easily down her eager throat.
At last finished, you give her some affectionate head pats and ear scratches before continuing on your way, taking with some amusement the last look of her big happy cow tail wagging like a puppy.
<<elseif $WORLD.datapasser is "minotaur boob fondle">>\
<<if $Mon.penis is true>>\
<<if random(1,2) is 1>>\
Your eyes are drawn to the minotaur's breasts. Massive orbs that seems almost too large for her already-large body. Reaching a tentative hand out towards them, you trace your fingers over their smooth skin before gently cupping one in each of his hands and giving it an appreciating squeeze.
<<else>>\
"Well I'll be danged, sugar!" she cheers. "Ya' sure whooped me! Now how's about come over here and claim yer prize!"
Needing no further encouragement, you make a line for her chest and cup her enormous breasts together, one in each hand.
<<endif>>\
<<if _pcpenis > 0>>\
"Not that I mind the foreplay, but aintcha itchin' to see what I got under the hood?"
She gestures behind her, but the big-as-an-arm cock betwen her legs dissaudes you from investigating to see what else she may have down there. Shaking your head, you instead focus in on her chest. \
<<else>>\
"Not that I mind the foreplay, but aintcha itchin' for this baby to take ya for a spin?"
She gestures to enormous cock, already dripping, but you shake your head and focus in on her chest. \
<<endif>>\
Each breast is easily the size of your head, and your cup runs over kneading and handling them. Her nipples harden as you gently pinch them between your fingers, all half an inch thick of them, elliciting sighs of contentment from their owner. \
<<if random(1,2) is 1>>\
You're taken out of your reverie, however, by the sound of her jacking her thick cock off beneath you.
<<else>>\
That's when you efel her arm-sized cock bouncing up and down against your thigh beneath you.
<<endif>>\
"Don't mind me," she pants. "You just keep on doin' whatcha doing, sugar."
While not quite what you had in mind, her breasts are so tantalizing that you simply position yourself out of thw path of her cock and resume yoru breast and nipple play. When you suddenly gasps and sprays a <<print either("five","six","seven")>> footy long jet of semen, you're glad you weren't standing in its path.
Deciding that's as good a time to stop as any, you give her titties one last squeeze, then continue on your adventure.
<<else>>\
Curious as much as aroused, you approach the fallen minotauress. Though defeated in body, her eyes retain their fire, and you give her an encouraging nod as you lean down to kiss the soft fur of her neck. Surprise ripples across her face, and she relaxes slightly as you continue your kisses down her chest and work your way across her left breast to begin gently licking her nipple. The flesh here is exposed, free of the fur that covers the rest of her body, and the minotaur exhales contentedly as you tenderly kiss and lick at it.
Reaching down with both hands, you find that her breasts are suprisingly solidd and firm, perhaps painfully so. Smililng at the opoptunity granted, you gently squeeze, ellicting a gasp of pleasure from her as a squirt of milk drips freely down her chest and into her fur. Sitibng down in front of her you then squeeze both berasts in alternating fashion, licking her chest clean as the spurts and sprays as you do.
She sighs in relief, clearly grateful to have the painful sensation of being overfull lifted from her.
Milking her freely now, you savor every drop in delight as your titty squeezes shift from gentle to insistent, then back again to sensual kneading. Before long she falls asleep in your arms, and it is with great reluctance that you eventually set her down as softly as you can against a wall so that you may resume your adventure.
<<endif>>
<<else>>\
Error in fox sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $Mon.sex is "male">>\
<<if _pcpenis > 0>>\
"You have a nice cock," the bunny boy whispers in your ear as he pulls your clothing off your exhausted body. "Too bad for you I'm not into that."
"What are you into?" you ask, but the bunny answers with action, not words, as he positions himself behind you and hops up onto your hips, then presses with his forehead between your shoulder blades to force your head to the ground.
"Uhh," you stammer. "I'm not into that."
"Don't care," he smiles. "I'm into you-" he says right as his slender, cum-moistened cock slips effortly between your ass cheeks into your anus.
It's uncomfortable, but only mildly so. His penis is no thicker than your middle finger, and arousd as he is, he seems in no particular ush. At least, at first. You feel the slick sensation of a small spurt of his semen fuill your insides, and with that extra bit of wetness he quickly picks up his pace leading into a second climax.
"There," he smiles as he slips back out of you. "You didn't cum at all, but I came twice, so on average that's one for each of us, right?"
<<else>>\
Reeling the final blow, you collapse to your knees...exactly head level with the bunny man's cock.
"Mmm, good idea," he murmurs. "But I have something better in mind."
Unable to resist, you watch helplessly as he hops his way around you then playfully hops up onto your back, gently nudging your head to the forest floor with his chin.
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
"This is your first time, isn't it?" he whispers into your ear as he positions. "Don't worry, I'll be gentle."
The bunny boy presses his weight down on your back, forcing youe hips to meet his slender cock. You try to ecape but are distracted by a moist sensation slipping past your thighs and nudging it s way between your pussy lips. You freeze in shock at exactly the wrong moment, making it easy for him to slide through your hymen and break it.
<<FemaleVirginity "an effeminate bunny-boy">>
<<endif>>\
The bunny boy presses his weight down on your back, forcing your hips to meet his slender cock. You resign yourself to being plaything for now and relax down into the soft grass as he picks up his pace. Pleased at your subimssion, he tells you that you're a good girl and gradually picks up his pace. Just as you're starting to enjoy the sensation of his slick cock sliding in and out of you, he slides himself up to the hilt inside you and cums.
"Ooohhh," he moans. "Such a good girl."
Giving you a few affectionate pats on the head, he then slips out and hops away, leaving you aroused and wishing he'd stayed just a bit longer.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
"Oh, ho ho!" the bunny-boy chuckles as his feels between your legs. "So your're one of //those// now, are you? Hmm, well...no matter."
Placing the tip of his thankfully slender cock as your anus, he grips your asscheeks and slides it in. The sensation is...unremarkable. He is very easy to take.
"The hare finishes the race first!" he shouts, picking up the pace of his humping, then quickly cumming inside you, mere seconds after starting.
Almost disappointing by the anti-climax of his climax, you stand to clean up the bunny semen dripping down your thighs while he happily hops away.
"Hope to see you again real soon!" he call out to you and waves, before disappearing into the distance.
<<endif>>\
<<endif>>\
\
<<elseif _pcpenis > 0>>\
\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived + 1>>\
\
"Ooohhhh!," the bunny visibly drools as she approaches you. "I just love cock!"
In a flash, your feel your pants around your ankles and the bunny girl's lips sliding across your dick as her tongues wriggles eagerly underneath. It moments the tip of your cock is tickling its way down her throat as she delicately kisses your belly. Mumbling unintelligibly, she grips both your butt-cheeks in her hands and begins ramming her face back and forth onto your cock.
Hardly able to stand from the pleasure, your steady yourself on her head and begin to delicately stroke her long fluffy ears, eliciting additional murmurs of pleasure. She doesn't slow, however, and you last barely two minutes before her furious thrusting on your cock brings you to climax. When you do she jams her head forward to get your cock as far deep into her as possible, then masssages your tip with her throat to swallow every drop.
You collapse to the ground, the last thing you hear before losing consciousness is the bunny girl berating herself for losing control.
"Next time I catch you," she promises out loud, "I'm going to ride you good and proper."
<<elseif $Mon.penis > 0>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven + 1>>\
"Oh! I love it when I win!" the bunny cheers, happily hopping over and bopping you on the head to knock to your knees. "But I like it when I lose too, so I'm sure you'll love this!"
Sliding one hand around the back of your head, she grabs her dick in the other and eagerly stuffs it in your mouth, your jaws forced wide by its sheer girth.
"So this is my dick, and you're going to suck it!" she explains, humping your face now with both hands pulling you back and forth in time with her thrusts.
Overpowered and struggling to breath, you can do little but take her cock as it plunges in and out of your throat, forcing your chest down and your head to tilt upwards from the sheer magnitude of it.
"So, do you cum here often?" the bunny chats idly around her now panting exhales. "Because wow...you're pretty good at this, and I...oh, I'm gonna cum!"
With the meaty bulb of of dick bouncing around near the base of your throat, she sprays a thick gush of bunny cum so deep inside you that you don't even need to swallow. You feel it coating your inside though, and your chest feels sticky clear to your stomach. \
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Relaxing at last, you're surprised when the bunny-girl quickly pulls out and turns you around.
"Wow, that was great!" she smiles happily, lifting your hips and pushing your head to the ground. "Let me return the favor!"
You open your mouth to object when her monster cock pushes apart your pussy lips and slides its entire two foot length all the way inside you in a single motion.
"Have my babies!" she cries, leaning into you and thrusting so hard your face is mashed to the forest floor as she instantly cum a second time, a great gloppy gallon of semen filling you so completely that your stomach expands and thick trails of it roll down your thighs as she frantically pounds you.
<<FemaleVirginity "a well-hung bunny dick-girl">>\
"Ahhh, you're gonna make me cum again!" she shouts, her third ejaculation now spraying out from your overflowing pussy with such weight and force that you hear it splatter on the ground behind you. By now you're twitching uncontrollably in reponse toher thrusts, which still somehow don't let up right away and only after another few minutes of pounding at you does she finally let up.
"Mmm, yeah," she slides in and out a few more times for good measure as you lose consciousness. "I bet that took. Us bunny-girls are pretty fertile. If not, come visit me again, cutie. I'll pump you full of babies all day long."\
<<else>>\
She doesn't let up right away however, taking her time to enjoy you for another few minutes before gently patting you on the head with a smile and hopping off into the woods.
<<endif>>\
<<else>>\
\
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven + 1>>\
\
"Aww, you're a girl too!" the bunny pouts as she sighs and begins removing your clothes with a smile. "Oh well. Let's make the best of this, shall we?"
<<if _pcboobs > 0>>\
<<set $PC[$CC][$PCsexACTS].milked to $PC[$CC][$PCsexACTS].milked + $Mon.level>>\
Too weak to resist, you submit to her ministrations as she pulls off your top, then perks up in delight at the sight of your breasts. You find your eyes closing and your mouth opening of its own accors as she leans in to lick your nipples while her fingers delicately slides up between your thighs and down your pants. Your feel your legs part of their own volition as she slides her middle finger back and forth over your clit, and then you find yourself moaning as she begins sucking lightly on your pert nipples. Wanting more, she kneads your breasts one after the other and continues sucking until you begin to feel them becoming noticeably lighter.
"Mmm," she licks traces of white liquid from her lips. "This is delicious, but I won our little battle, and to the victor goes the spoils, right?
<<endif>>\
If the joyful look on her face failed to make her meaning clear, her hand pushing delicately on the top of your head leaves no room for doubt. Allowing her to maneuver you between her legs, she holds you in place as you obediently lick her clit and slide your tongue in and out between her pussy folds.
Overpowered by her delicate scent, you relax and fall into a comfortable rythem, eliciting gasps and moans as you deftly reach up with one hand to caress her breasts while licking her to orgasm.
"Mmm," she sighs. "Not as good as cock, but I'll take it. Now be a dear and lick me clean, would you?"
You clean her up and then watch with some disappointment as she hops off into the forest.
\
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","bunny"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<!-- extra?
this was writtenwhile looking at BunnyM, not catH
Collapsing off your feet, the cat pounces only to land on you the moment you impact with the ground, knocking the wind out of your lungs.
"You're in heat!" he cheers, frantically tearing at your clothing while his relatively modest cock stands so erect that it's pointed nearly 30 degrees upward.
Collapsing off your feet, the cat pounces only to land on you the moment you impact with the ground, knocking the wind out of your lungs.
"Got you!" he cheers, tearing off your clothes and rubbing his relatively tiny cock between your thighs. Too far gone to protest, you end up on your hands and...face, really, rather than hands and knees, with the kitty-boy indelicate thrusting his cock in the general vicinity of your ass. It's not quite long enough to make it in-
"Uhhnfff!!!"
Or maybe it is. With the bristly spines of hair coating his cat-dick, the sensation is altogether unpleasant, but his speedy climax lubricates your insides well enough that he at least doesn't draw blood.
"Meow," he states simply, as if suddenly disinterested. Then wanders off, leaving you in a pool of kitty spunk.
-->\
<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if ($Mon.penis is true) and (_pcpenis is 0)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
The suave fox man wastes no time as his eyes scan over your body. Taking note of your every curve and crease, he slowly approaches you from behind. With his tail eagerly swishing back and forth, he gently bends over you to cup your left breast from above, then leans down to whsiper softly in your ear.
"I've been waiting for this moment my dear, now it's time to surrender."
On your hands and knees, you feel naked and vulnerable beneath him. But you feel him gaze above you with a mixture of desire and curiosity that makes your heart race.
"I've been waiting for you. And we're about to embark on a journey together - one filled with passion and intimacy unlike any other.
The fox man thrusts his body deep inside of you, savoriing every inch as he moves back and forth between your legs with a rhythm that is both primal and sensual. Immediately you're overtaken with the sense that his cock is an extension of your own self inside you as the two of you become one and move together in perfect harmony. He whispers sweetly into your ear how good it feels to be inside such a beautiful woman as yourself.
You close your eyes and let go, surrendering completely to his touch while he continues to thrust deeper within you with each passing moment until you both come together in a wave of ecstasy that leaves you breathless and satiated beyond compare.
<<FemaleVirginity "fox-morph">>
\
<<elseif ($Mon.penis is false) and (_pcpenis > 0)>>
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginal + 1>>\
The fox girl leans over your fallen form, her lips brushing against your ear as she whispers seductively into it.
"The hard part is over, dear," she purs. "Now for the fun part."
Sitting down crouched on top of you, she places one hands on your stomach for support as she delicately strokes your cock into becoming fully erect with the other. The then nestles the tip beweten her pussy lips and rotates her hips to gracefully slides it deep inside her. Her tail swishes lightly across the ground behind you in excitement as she tightly grips onto your cock with her pussy, then pushes her hips up away from yours to rightly grind yoru cock inside her as she comes away, then relaxes it open against to easily slide back down onto your cock.
<<MaleVirginity "a sexy fox-girl">>\
Feeling the tightness on the outward stroke leaves you with the intense feeling of her desire to have you inside her, well supported by the adorable way her tail continues to wag behind her.
"Oh, fuck yes," she moans, her tits bouncing freely as her up and down humping picks up to a nearly frantic pace.
Not content with only your lower half, however, she bends forward to kiss you softly while your perfectly-aligned hips continue to dance together. No longer needing them to suppro her weight, her hands now slide up and donw your chest and sides while her tongue intertwines with your own and her soft vaginal lips clamp and relaxe, clamp and relaxe themselves around your cock.
A heat grows within you, and you close your eyes readying to climax. But the girl grabs your face in her hands and holds your eyes open, kissing you deeply and forcing your eyes to hold her gaze as you let loose with an uncontrolled gush of semen inside her.
Now spent, her face grows into a grin, but still she does not let up, forcing you into close eye contact while her climax comes a few seconds after yours.
"Mmmm," she exhales, licking her long tongue and and down your neck. And only after several more minutes in her warm, furry embrace does she at least give you one playful nip on the neck with her teethd before dashing off into the woods, alone.
<<elseif ($Mon.penis is true) and (_pcpenis > 0)>>
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
Pleased with his victory over you, the fox-man reaches down to grab your legs, pulling them apart and rubbing his engorged cock on your thighs. At first the eager look in his eyes leads you to think ther'll be no restraint or mercy with what's to come, but to your surprise, rather than immediately taking you he instead reaches down with his other hand and begins to stroke your cock.
"There's enough pleasure to be had by both of us," he grins.
Kneeling between your legs, his gentle stroking never lets up as he deftly switches hands to rub your pre-cum onto his own cock, which he then gently slides an inch into your ass hole, now lubriated by your own cum. Matching pace with both hand and cock, he expertly pumps his member in and out of you with an insistence that nearly overwhelming you. You're nearly about to cum, but sensing this he slows down slightly whiel squeezing at the base of your cock as if to hold your ejaculation in a little longer. Knowing that you can't contain yourself for long, he dexterously curls his head down to engulf your cock with his long tongue.
"I'm cumming!" you shout uncontrollably, cumming across his tongue and upper mouth while as simulateously spurts his seed deep up into your abdomen.
Panting, you both stay together like that for several minutes to bask in the afterglow of shared orgasms before he finally gives you a flirty gaze, then dashes off into the woods.
<<elseif ($Mon.penis is false) and (_pcpenis is 0)>>
<<set $PC[$CC][$PCsexACTS].scissored to $PC[$CC][$PCsexACTS].scissored + 1>>\
The fox girl, her fur now matted and tangled from battle, falls panting on top of you. Your breasts touch for but a moment as she lifts herself up over your form.
"This will be fun," she licks her lips.
Unceremoniously grabbing your neck to hold you in place with one hand, she reaches between your legs with the other and slides a single clawed finger between your pussy lips. Paralyzed in fear, you find relief when she merely pulls it back out and licks it under your gaze. Seeing that she has no intention of hurting you, you find yourself somewhat more cooperative as she rolls you over onto your side and climbs with her own legs spread, between yours.
"Pull me in closer, dear" she whispers huskily.
Grabbing under her knee, you pull her up until the delicate flesh of your pussy lips meets the smooth moistness of her own.
"Ohhh..." you can't help but moan, as she begins steadily grinding her pelvis back and forth onto yours, your vaginal lips softly kissing hers with every twist and turn. Meanwhile the sound of her own noises fill your ears, almost cute in their softness, but a clear match for her similarly soft fur as it dances up and down your thighs.
Your hip movemnts quickly fall into synch, and your mouth widens into a desperate "Oh!" as you climax together with her.
An uncetrain time later you wake up with the fox-girl nestled into your neck, delicately trailling her fingers up and down your chest.
"I didn't want to leave while you were asleep," she whispers, licking your neck with her long tongue before squeezing you tightly into a hug, then standing up to leave, turning once to give you a final smile before dashing off into the woods.
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","fox"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
$PC[$CC][$PCsexACTS].bjgiven
$PC[$CC][$PCsexACTS].bjreceived
$PC[$CC][$PCsexACTS].pussylickreceived
$PC[$CC][$PCsexACTS].vaginalreceived
$PC[$CC][$PCsexACTS].analreceived
$PC[$CC][$PCsexACTS].semengiven
$PC[$CC][$PCsexACTS].semenreceived
$PC[$CC][$PCsexACTS].milked
<<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
$PC[$CC][$PCsexACTS].bjgiven
$PC[$CC][$PCsexACTS].bjreceived
$PC[$CC][$PCsexACTS].pussylickreceived
$PC[$CC][$PCsexACTS].vaginalreceived
$PC[$CC][$PCsexACTS].analreceived
$PC[$CC][$PCsexACTS].semengiven
$PC[$CC][$PCsexACTS].semenreceived
$PC[$CC][$PCsexACTS].milked
<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if ($Mon.penis is true) and (_pcpussy > 0)>>\
<<set $PC[$CC][$PCsexACTS].pussylickrecieved to $PC[$CC][$PCsexACTS].pussylickrecieved + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
Licking his lips, the wolf presses his jaws between your thighs and tears your pants off. Within seconds, the longue that was licking his lips mere moments ago is suddenly laying siege to your pussy with its furious slathering, up and down your clitoris and back and forth between your pussy folds. Too shocked to breathe, your body quickly yields, and you soon find yourself writhing submissively in unexpected pleasure as the wolf scoops you up from behind the knees and sets you down on your back in the grass.
You're already nearly to climax by the time the wolf climbs between your knees and pushes them apart, his <<print either("six","seven","eight")>>-inch cock bright red and pulsing. Grabbing you roughly by the breasts, he positions the tip of his cock barely half an inch inside you and leans his grinning head down, mere inches from yours, them waits. Desperately aroused, you feel your hips moving eagerly upward of their own accord. Not in any rush, the wolf merely licks your face and slides his cock barely an inch inside you then begins humping in out of, while penetrating no deeper. Writhing your hips upward you manage to gain another inch of that exquisite cock insde you before he takes pity on and you begins to slide himself more fully inside. Over the next few minutes he slowly presses deeper with every thrust, deeper, //deeper//, until at last you're finally taking full, glorious length of his cock inside you while his balls bounce roughly against your ass.
<<FemaleVirginity "wolf-man">>\
"You...are...awesome," he pants in rhythm with your own breathing. "Have my babies."
A blast of semen fills you while you gasp and shudder, barely able to contain yourself at the sensation as he holds your hips tightly and throws his head back to howl in extasy.
Then, gor a few minutes he simply holds you, and only much much reluctance does he pull his still-erect cock out of you, gives you one last lick on the face, then dashes off into the trees.
\
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven + 1>>\
Collapsing to your nees you find yourself staring at a bright red, <<print either("six","seven","eight")>>-inch long wolf cock.
"You don't smell like a bitch in heat," he comments, planting one hand on the top of your head and shoving his dick in your mouth. "Oh, well. You can still get me off."
Struggling and failing to talk around the thick cock bulging against the back of your throat, you give up trying to explain that you're not a wolf bitch at all and instead focus on simply getting enough oxygen to breath as he adds his other hand to the top of your head and begins face-fucking you for real.
"Oh, yeah," he pants. "You suck dick like a pro."
With his next thrust he jams his cock several inches down your throat while his balls bounce and twitch on your chin, releasing a load of semen that bypasses your mouth and tongue completely. Unable to do anything else, you frantically swallow as he throws his head back and howls above you.
When he finally lets you go, you gasp and struggle for air, collapsing face-first to the ground in a heap.
By the time you manage to get your breathing under control and look up, the wolf is already gone.
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","wolf"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
<<if $PC[$CC][$PCcoins] < 1>>\
<<set _heshe to "he">>\
<<if $Mon.sex is "female">>\
<<set _heshe to "she">>\
<<endif>>\
"Well, I was going to rob you," the adventurer frowns at you in disappoinment. "But it doesn't look like you have any money."
<<set _PickItem to []>>\
<<set _ArrayPos to 0>>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<if $PC[$CC][$PCinven][_i][0] neq 0>>\
<<set _PickItem[_ArrayPos] to _i>>\
<<set _ArrayPos to _ArrayPos + 1>>\
<<endif>>\
<</for>>\
<<if _PickItem.length > 0>>\
<<set _ItemPTR to _PickItem[random(0, (_PickItem.length -1))]>>\
<<set _ItemToSteal to $PC[$CC][$PCinven][_ItemPTR]>>\
<<DescribeItem _ItemToSteal>>\
<<set $PC[$CC][$PCinven][_ItemPTR] to [0,0,0,0,0]>>\
"Guess I'll take your <<print $ItemPoke.fullname>> instead," _heshe mumbles, then wanders off, leaving your satchel a little lighter.
<<else>>\
"Yeah, no," you agree. "Sorry but not sorry about that."
"Doesn't look like you have much to steal either," _heshe looks through at your empty satchel.
"<<print either("I travel light","This isn't the first time I've lost a fight","I find it's safer that way")>>, you explain.
"<<print either("Not even a packed lunch?","What do you eat?","Right, but your bag is totally empty!")>>" _heshe seems perplexed, but you just shrug.
"Here," _heshe sighs, handing you an apple. "Take this. I'd feel bad if I left you like this then tripped over your emaciated corpse on the way back."
<<set _ads to setup.GiveItem($CC, [106,0,1,0,0])>>\
You take the apple and put it in your bag. Then look up just in time to see the man's weapon coming down on your head.
<<endif>>\
<<else>>\
<<set _which to random(1,2)>>\
<<if _which is 1>>\
<<set $PC[$CC][$PCcoins] to 0>>\
"Alright, give me your gold," the adventurer sighs. "All of it."
"Wait, aren't you going to rape me?" you ask. "None of the other monsters took my money."
<<if $Mon.sex is "male">>\
"I'm not a monster," he bristles.
"Then why attack me?"
"Nobody knows for sure what's at the top of the tower," he explains. "But personally I'm betting all the rumors about ascending to godhood are nonsense and it's a great big ol' pile of gold. I plan to be the one to take it, and that means taking out the competition. I'm not going to kill you because I'm not evil, but this should be enough of a setback for you to help keep me in the lead. Now get back to town and heal up before something less nice than me finds you."
With that, he adds your coin purse to his and knocks you unconscious.
<<else>>\
"Do I look like a monster to you?" she raises one eyebrow at you. You briefly consider telling her she does, but think better of it and instead simply hand over your gold.
"I was hoping you'd have more," she sighs in disappointment, adding your money to her coinpurse.
"I'd have more if you let me keep it," you point out.
"Yes, but that's not going to happen," she glares at you. "We fought and I won. Be glad I'm leaving you alive."
With that she tosses your empty coinpurse back at you and clubs you on the back of the head.
<<endif>>\
<<elseif _which is 2>>\
As you collapse you look up at your opponent and briefly consider the novelty of being raped by a human in this place. Thinking it might not be so bad, you start taking off your clothes in anticipation of the inevitable.
<<if $Mon.sex is "male">>\
<<if $PC[$CC][$PCsex] is "male">>\
"What are you doing?" he asks
"Taking off my clothes?" you ask, confused. "Aren't you going to rape me?"
"Ewww!" he holds up his hands and takes a step back. "Why would you even think that?"
"Because you won the fight?" you explain. "That's how it works in here."
"Wait, what? I'm suppose to rape everone I beat? Since when?"
"Well, it's not that you're supposed to," you shrug. "So much as that...you can? I guess? It seems to be the common practice, anyway."
"Huh. I had no idea. Thanks for the tip. But I'm seriously not into guys. Like...eww."
Disguested with you, the adventurer clubs you over the head with his weapon. And not the fun one.
<<else>>\
"What are you doing?" he asks
"Taking off my clothes?" you ask, confused. "Aren't you going to rape me?"
"Rape you?" his mouth drops in shock, clearly aghast. "What kind of man do you take me for?"
"The kind who adventures in dangerous towers looking for sweet, nubile girls like me, then beats them up and ravages them for hours to satisfy your manly lust."
"I would never!" he shouts, backing away from you with his hands up.
"Why not?" you ask, trailing a finger between your naked breasts and taking a step towards him. "To the victor go the spoils. You won our fight. So...''spoil'' me."
"Get back, you <<print either("foul harlot","vile tempress","depraved slut","sinful cur")>>!" he shouts, then clubs you hard on the head with the blunt end of his weapon.
<<endif>>\
<<else>>\
<<if $PC[$CC][$PCsex] is "male">>\
"What are you doing?" she asks.
"Taking off my clothes?" you ask, confused. "Aren't you going to rape me?"
"...what?" she tilts her head in confusion. "What makes you think I'd even want to?"
"Isn't that why you're here?" you ask. "Fight monsters, rape them when you win, get raped when you lose? It's win/win for everybody."
"Eww?" she takes a step back, clearly disgusted. "Is that what YOU are doing here?
"...uhh, maybe?"
"Here I am fighting all sorts of monsters," she shakes her head. "And all along the real monster was us."
With that she gives you one last glare before clubbing on on the back of the head and knocking you out.
<<else>>\
<<set $PC[$CC][$PCcoins] to 0>>\
"What are you doing?" she asks. "I don't want those."
"Well, since you won I assume you're going to r-"
"No, I wouldn't be caught dead dressed like that," she shakes her head. "You have terrible fashion sense, and you should be ashamed of yourself."
"Umm," you fumble for a proper response. "So...what happens now?"
"I guess I take your money and leave?" she asks. "That's usually what I do when I beat up monsters in here.
"That's it?" you ask, handing over your money. "Nothing else?"
"Well, now that you mention it, a lot of the goblins I've beat up seem to masturbate in frustration after I beat them, but I've never understood why and I don't usually stick around to watch. I guess you could do that if you really want to."
"No, that's ok," you shrug, putting your clothes back on.
"See you around," she smiles, then knocks you unconscious with her weapon.
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Wake up hours later" "Church">>
<<set $WORLD.datapasser to ["knockout","human"]>>
<</link>>\
</span>
<<SimplePic "stylist.jpg">>\
\
@@color:Gold;Salon@@
<hr>
@@color:LightGreen;Hair Stylist@@: "Hello! What can I do for you?"
<hr>\
@@color:Gold;Navigation@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSouth">>
<<AdvanceTime 5>>
<</link>>\
</span>
<hr>\
<span id="SalonPortal">
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _HeadCoutn to 0>>\
<<set _TailCount to 0>>\
\
<<for _SP to 0; _SP < _bpqty; _SP++>>\
<<if $PC[$CC][$PCbp][_SP].type is $BPhead>>\
<<set _HeadCount to _HeadCount +1>>\
<<elseif $PC[$CC][$PCbp][_SP].type is $BPtail>>\
<<set _TailCount to _TailCount +1>>\
<<endif>>\
<</for>>\
<<if $PC[$CC][$PCcoins] > 999>>\
<span class="blueb">\
<<button "[1000 gold]">>
<<if $PC[$CC][$PCcoins] > 999>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 1000>>\
<<ShowCoins>>
<<script>>
Dialog.setup("Avatar designer");
Dialog.wiki(Story.get("Designer").processText());
Dialog.open();
<</script>>
<<endif>>\
<</button>>\
</span> - Avatar designer
<<else>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - Can't afford avatar redesign
</span>\
<<endif>>\
\
<<if _HeadCount is 0>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - You have no head, so there is nothing to groom
</span>\
<<elseif _HeadCount > 1>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - Hair restyling not implemented for multiple heads
</span>\
<<else>>\
<<if $PC[$CC][$PCcoins] > 999>>\
<span class="blueb">\
<<button "[1000 gold]">>
<<if $PC[$CC][$PCcoins] > 999>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 1000>>\
<<replace "#SalonPortal">><<HairRestyle>><</replace>>\
<<ShowCoins>>
<<endif>>\
<</button>>\
</span> - (Old) Hair restyling
<<else>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - Can't afford restyling
</span>\
<<endif>>\
<<endif>>\
\
<<if _TailCount is 0>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - You have no tail, so there is nothing to groom
</span>\
<<elseif _TailCount > 1>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - Hair restyling not implemented for multiple tails
</span>\
<<else>>\
<<if $PC[$CC][$PCcoins] > 999>>\
<span class="blueb">\
<<button "[1000 gold]">>
<<if $PC[$CC][$PCcoins] > 999>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 1000>>\
<<replace "#SalonPortal">><<TailRestyle>><</replace>>\
<<ShowCoins>>
<<endif>>\
<</button>>\
</span> - Full tail restyling
<<else>>\
<span class="grayb">\
<<button "[1000 gold]">><</button>> - Can't afford restyling
</span>\
<<endif>>\
<<endif>>\
</span>\
<<timed 200ms>>\
<<audio "menu_bgm" stop>>\
<</timed>>\
<<PlayBGM "explore">>\
\
<<ClearTemporaryEffects>>\
\
<<set _DefaultPic to $ImgPath + "towerstairs.png">>\
<<if $WORLD.MobileMode is 1>>\
<span id="right-img"></span>\
<<else>>\
<span id="right-img"><img @src="_DefaultPic"/></span>\
<<endif>>\
\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<if $WORLD.dungenned[$PC[$CC][$PCz]] < 1>>\
<<include "DunGen">>\
<<elseif $Dungeon.length < _pz>>\
<<include "DunGen">>\
<<endif>>\
\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set $PC[$CC][$PClocation] to "tower">>\
\
<<if _pz > $PC[$CC][$PChtze]>>\
<<set $PC[$CC][$PChtze] to _pz>>\
<<endif>>\
<<if _pz > $WORLD.HTZE>>\
<<set $WORLD.HTZE to _pz>>\
<<endif>>\
\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "dungeon">>\
<<set $WORLD.dialogue to 0>>\
<<set $Dungeon[_pz][_px][_py][15] to 1>>\
\
@@color:LightGreen;Tower of Triumph, @@ \
<<if _pz is 0>>\
Ground floor\
<<else>>\
Level _pz\
<<endif>>\
<hr>\
<canvas id="myCanvas" width="900" height="450" style="border:0px solid #d3d3d3;">
Your browser does not support the HTML canvas tag.
</canvas>
<hr>\
<span id ="roomdesc"></span>\
<span id ="eventtext"></span>
<hr>\
<span id="navcontrols">\
@@color:LightGreen;Navigation@@
<<ShowNavControls>>\
</span>\
\
<<set _tempname to "S64Map-Blank">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-E">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-ES">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-ESW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-EW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-N">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NE">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NES">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NESW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NEW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NS">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NSW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-NW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-S">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-SW">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Map-W">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StairsUpLeft">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StairsUpRight">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StairsDown">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorCobble">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorWhite">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorBrick">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorRedTile">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorWhiteTile">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FloorRedCarpet">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StatueAngel">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StatueKnight">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64StatueDemon">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Throne">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Cage">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Chest">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64ChestEmpty">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Barrel">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64BarrelEmpty">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Bookshelf">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64BookshelfEmpty">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Puddle">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Bed">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Fountain">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64FountainEmpty">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Circle">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Hole">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Grave">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64LeverLeftUp">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64LeverRightUp">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64LeverLeftDown">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64PressurePlate">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64LeverRightDown">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Blank">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<span id="debug"></span>\
<<timed 200ms>>\
<<MoveRefresh>>\
<<set _throwaway to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<</timed>>\
\
<<BirthCheck>>\Double-click this passage to edit it.<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>\
<hr>\
<<set _sb to $PC[$CC][$PCspellbook]>>\
<<set _combat to _sb.firebolt + _sb.armor + _sb.heal + _sb.poison + _sb.soultrap + _sb.dart>>\
<<set _transport to _sb.up + _sb.down + _sb.portal>>\
<<set _utility to _sb.light + _sb.map + _sb.passwall>>\
<<set _both to _sb.heal>>\
<<set _Bonus to setup.AchievementHandler("Best Archmage", "HAS?", -1)>>\
<<if _Bonus < 0>>\
<<set _Bonus to 0>>\
<<endif>>\
<<set _BestPriestBonus to setup.AchievementHandler("Best Priest", "HAS?", -1)>>\
<<if _BestPriestBonus > 0>>\
<<else>>\
<<set _BestPriestBonus to 0>>\
<<endif>>\
<<set _Lev to $PC[$CC][$PClevel]>>\
<<set _Int to $PC[$CC][$PCint]>>\
\
<<if _combat + _transport + _utility is 0>>\
@@color:Gold;You don't know any spells@@
<<else>>\
<!-- implement bonus damage from enchantments-->\
<<if setup.GetEffect("rage") > 0>>\
@@color:Red;YOU ARE ENRAGED!@@
<<else>>\
@@color:Gold;Spell bonuses@@: <<if _Bonus + _BestPriestBonus is 0>>None<<endif>>
<<if _Bonus > 0>>Best Archmage global bonus: <<print _Bonus>><br><<endif>>\
<<if _BestPriestBonus > 0>>Best Priest heal bonus: <<print _BestPriestBonus>><br><<endif>>\
<<endif>>\
<<endif>>\
\
<hr>
<<if _combat > 0>>\
@@color:Gold;Combat spells@@
<<if $PC[$CC][$PCspellbook].dart > 0>>\
<<set _MinDam to 1 + _Bonus + _Lev>>\
<<set _MaxDam to _Int + _Bonus + _Lev>>\
@@color:LightGreen;Dart@@ <<SpellbookQWE "dart" "q">><<SpellbookQWE "dart" "w">><<SpellbookQWE "dart" "e">>
<<set _DartHit to $PC[$CC][$PCint] * 5>>\
<<if _DartHit > 100>>\
<<set _DartHit to 100>>\
<<endif>>\
<<if passage() is "Combat">>\
<<set _DartCombatHit to 5 * ($PC[$CC][$PCint] + $PC[$CC][$PClevel] - $Mon.level)>>\
<<if _DartCombatHit > 100>>\
<<set _DartCombatHit to 100>>\
<<endif>>\
Hit chance: @@color:Yellow;<<print _DartCombatHit>>% against level <<print $Mon.level>> <<print $Mon.name>>@@
<<else>>\
Hit chance: <<print _DartHit>>%
<<endif>>\
Formula: 5% per intellect, +- 5% per level difference of target
Damage: <<print _MinDam>>-<<print _MaxDam>>
Formula: 1 to intellect, plus level
Mana cost: 1
<<endif>>\
<<if $PC[$CC][$PCspellbook].firebolt > 0>>\
<<set _MinDam to (1 * _Lev) + _Int>>\
<<set _MaxDam to (10 * _Lev) + _Int>>\
@@color:LightGreen;Firebolt@@ <<SpellbookQWE "firebolt" "q">><<SpellbookQWE "firebolt" "w">><<SpellbookQWE "firebolt" "e">>
Damage: <<print _MinDam>>-<<print _MaxDam>>
Formula: 1 to 10 per level, plus intellect
(Never misses, ignores armor)
Mana cost: 1 + (1 per 40 damage)
<<if setup.PlayerHasPerk("Black Mage") is true>>\
<<set _BMB to (($PC[$CC][$PChpmax] - $PC[$CC][$PChpcur]) / $PC[$CC][$PChpmax])>>\
<<if _BMB is 0>>\
@@color:Gray;Black Mage: inactive@@
<<else>>\
@@color:Red;Black Mage:@@ +<<print Math.trunc(_BMB * 100)>>% spell damage
<<endif>>\
<<endif>>\
<<endif>>\
<<if $PC[$CC][$PCspellbook].heal > 0>>\
@@color:LightGreen;Heal@@ <<SpellbookQWE "heal" "q">><<SpellbookQWE "heal" "w">><<SpellbookQWE "heal" "e">> \
\
<<set _HealFor to _Lev + _BestPriestBonus + _Bonus>>\
<<set _TotalHeal to 0>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "priest">>\
<<set _HealFor to _HealFor + _Lev>>\
<<endif>>\
<<if setup.PlayerHasPerk("White Mage") is true>>\
<<set _HealFor to _HealFor + _Lev>>\
<<endif>>\
\
<<if $PC[$CC][$PCmanacur] < 2>>\
[Not enough mana]
<<else>>\
<<link "[Cast]">>\
<<if $PC[$CC][$PCmanacur] < 2>>\
<<else>>\
<<ChangeStat $PCmanacur -2>>
<<if _HealFor > ($PC[$CC][$PChpmax] - $PC[$CC][$PChpcur])>>\
<<set _HealFor to ($PC[$CC][$PChpmax] - $PC[$CC][$PChpcur])>>\
<<endif>>\
<<set $PC[$CC][$PCspellbook].totalheal to $PC[$CC][$PCspellbook].totalheal + _HealFor>>\
<<if $PC[$CC][$PCspellbook].totalheal > 99>>\
<<AwardAchievement "Priest">>\
<<endif>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "priest">>\
<<PurgeOneEffect "oison">>\
<<PurgeOneEffect "leed">>\
<<if _Lev > 6>>
<<set _PartyQTY to $PC[$CC][$PCparty].length>>\
<<if _PartyQTY > 0>>\
<<for _PartyI to 0; _PartyI < _PartyQTY; _PartyI++>>\
<<set $PC[$CC][$PCparty][_PartyI].hpcur to $PC[$CC][$PCparty][_PartyI].hpcur + _HealFor>>\
<<if $PC[$CC][$PCparty][_PartyI].hpcur > $PC[$CC][$PCparty][_PartyI].hpmax>>\
<<set $PC[$CC][$PCparty][_PartyI].hpcur to $PC[$CC][$PCparty][_PartyI].hpmax>>\
<<endif>>\
<<if $PC[$CC][$PCparty][_PartyMemberToAttack].stance is "Down">>\
<<set $PC[$CC][$PCparty][_PartyMemberToAttack].stance to "Hide">>\
<<endif>>\
<</for>>\
<<ShowParty>>\
<<endif>>\
<<endif>>\
<<ShowActiveEffects>>\
<<endif>>\
<<ChangeStat $PChpcur _HealFor>>
<<ShowHealth>><<ShowMana>>
<<endif>>\
<</link>>
<<endif>>\
Heals for: <<print _HealFor>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "priest">>\
<<if _Lev > 6>>, cures poison and heals party members
<<else>>, and cures poison
<<endif>>\
<<endif>>\
<<if setup.PtrToClass($PC[$CC][$PCclass]) is "priest">>\
Formula: Level + Priest Level<<if _BestPriestBonus > 0>> + Highest Priest<<endif>>\
<<if setup.PlayerHasPerk("White Mage") is true>> @@color:White;+ Level (White Mage)@@
<<else>><br>\
<<endif>>\
<<else>>\
Formula: Level <<if _BestPriestBonus > 0>> + Highest Priest<<endif>>\
<<if setup.PlayerHasPerk("White Mage") is true>> @@color:White;+ Level (White Mage)@@
<<else>><br>\
<<endif>>\
<<endif>>\
Mana cost: 2
<<endif>>\
<<if $PC[$CC][$PCspellbook].armor > 0>>\
@@color:LightGreen;Armor@@ <<SpellbookQWE "armor" "q">><<SpellbookQWE "armor" "w">><<SpellbookQWE "armor" "e">>
Bonus armor: <<print (_Lev * 10) + _Bonus>>
Formula: (Level * 10)
Gain temporary armor for the remainder of the current battle
Mana cost: 1
<<endif>>\
<<if $PC[$CC][$PCspellbook].poison > 0>>\
@@color:LightGreen;Poison@@ <<SpellbookQWE "poison" "q">><<SpellbookQWE "poison" "w">><<SpellbookQWE "poison" "e">>
Damage: <<print 1 + _Bonus>>
Formula: +1 poison per cast
Causes stacking recurring damage
Mana cost: 1
<<endif>>\
<<if $PC[$CC][$PCspellbook].soultrap > 0>>\
@@color:LightGreen;Soul trap@@ <<SpellbookQWE "soultrap" "q">><<SpellbookQWE "soultrap" "w">><<SpellbookQWE "soultrap" "e">>
Captures tower monster's soul to equipped gemstone if victorious
<<if passage() is "Combat">>\
<<if $PC[$CC][$PClocation] neq "tower">>\
Tower only
<<elseif $Mon.unique is true>>\
Cannot soultrap unique targets
<<else>>\
<<set _STC to 18 + (2 * $Mon.level)>>\
<<if _STC < 1>>\
<<set _STC to 1>>\
<<endif>>\
Target: @@color:Yellow;<<print $Mon.name>>@@ Mana cost: @@color:Yellow;<<print _STC>>@@
<<endif>>\
<<else>>\
Mana cost: (Varies by target)
<<endif>>\
Formula: 18 + (2 * Monster Level)
<<endif>>\
<hr>\
<<endif>>\
<<if _transport > 0>>\
@@color:Gold;Transportation spells@@
<<if $PC[$CC][$PCspellbook].up > 0>> \
@@color:LightGreen;Up@@ \
<<if $PC[$CC][$PCmanacur] < 4>>\
(Not enough mana)
<<elseif $PC[$CC][$PClocation] neq "tower">>\
[Tower only]
<<elseif $PC[$CC][$PCz] > 19>>\
[On max floor already]
<<elseif $WORLD.dungenned[$PC[$CC][$PCz] +1] is 0>>\
[At highest character zone]
<<elseif $PC[$CC][$PChtze] lte $PC[$CC][$PCz]>>\
[At highest zone]
<<elseif $PC[$CC][$PCz] is 9>>\
[@@color:Yellow;Dev note:@@ Teleport to level 10 temporarily restricted]
<<else>>\
<<link "[Cast]">>\
<<ChangeStat $PCmanacur -4>>
<<ShowMana>>
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] +1>>
<<script>>Dialog.close();Engine.play("Dungeon64");<</script>>
<</link>>
<<endif>>\
Teleport to one higher level in the tower.
Only allows you to return to levels you've previously visited
Mana cost: 4
<<endif>>\
<<if $PC[$CC][$PCspellbook].down > 0>>\
@@color:LightGreen;Down@@ \
<<if $PC[$CC][$PCmanacur] < 2>>\
[Not enough mana]
<<elseif $PC[$CC][$PClocation] neq "tower">>\
[Tower only]
<<elseif $PC[$CC][$PCz] is 10>>\
[@@color:Yellow;Dev note:@@ Teleport from level 10 temporarily restricted]
<<else>>\
<<link "[Cast]">>\
<<ChangeStat $PCmanacur -2>>
<<ShowMana>>
<<if $PC[$CC][$PCz] is 1>>
<<set $PC[$CC][$PCz] to 0>>
<<set $PC[$CC][$PClocation] to "town">>
<<script>>Dialog.close();Engine.play("TownSquare");<</script>>
<<else>>\
<<set $PC[$CC][$PCz] to $PC[$CC][$PCz] -1>>
<<script>>Dialog.close();Engine.play("Dungeon64");<</script>>
<<endif>>\
<</link>>
<<endif>>\
Teleports you one level lower
Mana cost: 2
<<endif>>\
<<if $PC[$CC][$PCspellbook].portal > 0>>\
@@color:LightGreen;Portal@@ <<SpellbookQWE "portal" "q">><<SpellbookQWE "portal" "w">><<SpellbookQWE "portal" "e">>\
<<if $PC[$CC][$PClocation] is "town">>\
[Already in town]
Instantly returns you to town. Can be cast in combat.
Mana cost: 5 + current tower level
<<elseif $PC[$CC][$PCz] is 10>>\
[@@color:Yellow;Dev note:@@ Portal from level 10 temporarily restricted]
Instantly returns you to town. Can be cast in combat.
Mana cost: 5 + current tower level
<<else>>\
<<set _PortalCost to 5 + $PC[$CC][$PCz]>>\
<<if $PC[$CC][$PClocation] is "forest">>\
<<set _PortalCost to 5 + $PC[$CC][$PCfz]>>\
<<elseif $PC[$CC][$PClocation] is "desert">>\
<<set _PortalCost to 5 + $PC[$CC][$PCdz]>>\
<<endif>>\
<<if $PC[$CC][$PCmanacur] < _PortalCost>>\
[Not enough mana]
<<else>>\
<<link "[Cast]">>\
<<set $PC[$CC][$PCz] to 0>>
<<set $PC[$CC][$PClocation] to "town">>
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanacur] - _PortalCost>>
<<ShowMana>>
<<script>>Dialog.close();Engine.play("TownSquare");<</script>>
<</link>>
<<endif>>\
Instantly returns you to town. Can be cast in combat.
Mana cost: _PortalCost
Formula: 5 + current zone level
<<endif>>\
<<endif>>\
<hr>\
<<endif>>\
<<if _utility > 0>>\
@@color:Gold;Utility spells@@
<<if $PC[$CC][$PCspellbook].light > 0>> \
@@color:LightGreen;Light@@ <<if $PC[$CC][$PCmanacur] < 1>>\
[Not enough mana]
<<else>>\
<<link "[Cast]">>\
<<if $PC[$CC][$PCmanacur] > 0>>
<<set _LightDur to (_Lev + _Bonus) * 60>>\
<<ApplyEffect "Light" _LightDur>>\
<<ChangeStat $PCmanacur -1>>
<<ShowMana>>
<<ShowActiveEffects>>
<<endif>>
<</link>>
<<endif>>\
Increases mapping radius by 1
Lasts character level hours
Subsequent casts increase total time
Mana cost: 1
<<endif>>\
<<if $PC[$CC][$PCspellbook].map > 0>>\
@@color:LightGreen;Map@@ <<if $PC[$CC][$PClocation] neq "tower">>\
[Cannot cast in <<print $PC[$CC][$PClocation]>>]
<<elseif $PC[$CC][$PCmanacur] < 5>>\
[Not enough mana]
<<else>>\
<<link "[Cast]">>\
<<ChangeStat $PCmanacur -5>>
<<ShowMana>>
<<for _ii to 0; _ii < $Dungeon[$PC[$CC][$PCz]].length ; _ii++>>\
<<for _jj to 0; _jj < $Dungeon[$PC[$CC][$PCz]][0].length ; _jj++>>\
<<set $Dungeon[$PC[$CC][$PCz]][_ii][_jj][15] to 1>>\
<</for>>\
<</for>>\
<<set _CanBeExplorer to setup.DrawMap64(_px, _py, _pz, 64, $PC[$CC][$PClocation])>>\
<</link>>
<<endif>>\
Entirely maps out the current tower level
Mana cost: 5
<<endif>>\
<<if $PC[$CC][$PCspellbook].passwall > 0>>\
@@color:LightGreen;Passwall@@ <<if $PC[$CC][$PClocation] neq "tower">>\
[Cannot cast in <<print $PC[$CC][$PClocation]>>]
<<elseif passage() is "Combat">>\
[Can't cast in combat]
<<elseif $AllowNav is false>>\
[Can't cast to escape events]
<<elseif $PC[$CC][$PCmanacur] < 5>>\
[Not enough mana]
<<else>>\
<<link "[Cast]">>\
<<ChangeStat $PCmanacur -5>>
<<ShowMana>>
<<set $PasswallHack to true>>\
<</link>>
<<endif>>\
Entirely maps out the current tower level
Mana cost: 5
<<endif>>\
<<endif>>\
/* avatar image*/
#avatar-img {
z-index: 50;
margin: 0;
padding: 0;
width: 150px;
height: 150px;
}
#avatar-img:hover {
box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
}
/* end avatar image*/
.image-link-wrapper a img { width: 150px; }
.image-link-wrapper: a img hover {
box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
}<<widget "MapCrescentheartNorth">>\
<div id="NavMap">\
<<script>>
setup.MapClick = function (a) {
if (a == "") {
} else if ( a == "Tower") {
if (State.variables.WORLD.MainQuest[0].state == "inactive") {
} else {
var CC = State.variables.CC;
var z = State.variables.PCz;
var x = State.variables.PCx;
var y = State.variables.PCy;
State.variables.PC[CC][z] = 1;
State.variables.PC[CC][x] = State.variables.WORLD.TowerOrigin[0];
State.variables.PC[CC][y] = State.variables.WORLD.TowerOrigin[1];
Engine.play("Dungeon64");
};
} else if ( a == "Pawn") {
Engine.play("StorePawn");
} else if ( a == "Selene") {
Engine.play("StoreSelene");
} else if ( a == "Forest") {
var CC = State.variables.CC;
var z = State.variables.PCfz;
var x = State.variables.PCfx;
var y = State.variables.PCfy;
State.variables.PC[CC][z] = 1;
State.variables.PC[CC][x] = State.variables.WORLD.ForestDims[0];
State.variables.PC[CC][y] = Math.trunc(State.variables.WORLD.ForestDims[1] /2);
State.variables.WORLD.datapasser = "reset forest";
Engine.play("Forest");
} else if ( a == "Gravestone") {
Engine.play("Graveyard");
} else if ( a == "MagicCircle") {
State.variables.WORLD.datapasser = "MagicCircle";
var c = State.variables.WORLD.Circle;
if (c == 5 || c == 10) {
var CC = State.variables.CC;
var z = State.variables.PCz;
var x = State.variables.PCx;
var y = State.variables.PCy;
State.variables.PC[CC][z] = State.variables.WORLD.PortalTarget[0];
State.variables.PC[CC][x] = State.variables.WORLD.PortalTarget[1];
State.variables.PC[CC][y] = State.variables.WORLD.PortalTarget[2];
State.variables.WORLD.datapasser = "Don't auto-teleport back";
Engine.play("Dungeon64");
} else {
Engine.play("TownSquare");
};
} else {
Engine.play(a);
};
};
setup.MapMouse = function(a) {
var b = "Error in Map js: " + a;
if (a == "Forest") {
b = "@@color:LightGreen;The enchanted forest@@: A relatively safe place for new adventurers to explore";
} else if (a == "Tavern") {
b = "@@color:LightGreen;" + State.variables.WORLD.tavernname + "@@: A place to relax, chat, and drink";
} else if (a == "Pawn") {
b = "@@color:LightGreen;Pawnshop@@: A place to sell treasure and trash alike";
} else if (a == "PlayerHouse") {
if (State.variables.WORLD.house.state > 0) {
b = "@@color:LightGreen;Your house@@: Home sweet home";
} else {
b = "@@color:LightGreen;Abandoned building@@: Looks like it's in bad shape";
};
} else if (a == "GeneralStore") {
b = "@@color:LightGreen;General store@@: A place to buy assorted goods";
} else if (a == "Guild") {
b = "@@color:LightGreen;Adventure's Guild@@: For quests";
} else if (a == "MagicCircle") {
b = "@@color:LightGreen;Magic Circle@@: An large magic circle composed of runes carved directly into the stone";
var c = State.variables.WORLD.Circle;
if (c == 5) {
b = b + ". @@color:Red;(Zehtalia's chamber, level 5)@@";
} else if (c == 10) {
b = b + ". @@color:Red;(Neris' chamber, level 10)@@";
};
} else if (a == "Blacksmith") {
b = "@@color:LightGreen;Blacksmith@@: A place to buy arms and armor";
} else if (a == "Church") {
b = "@@color:LightGreen;Church of the Immaculate Rebirth@@: For all your spiritual needs";
} else if (a == "Gravestone") {
b = "@@color:LightGreen;Graveyard@@: A small collection of gravestones outside the church";
} else if (a == "Selene") {
b = "@@color:LightGreen;Witch's Den@@: A literal hole in the wall where the Wayward Witch, Selene resides";
} else if (a == "Tower") {
if (State.variables.WORLD.MainQuest[0].state == "inactive") {
b = "@@color:LightGreen;Tower of Triumph, Shrine of the Goddess@@: (Locked)";
} else {
b = "@@color:LightGreen;Tower of Triumph, Shrine of the Goddess@@: A dangerous place, but this is your ultimate goal!";
};
};
document.getElementById("TextArea").innerHTML = "";
$('#TextArea').wiki(b);
};
<</script>>\
\
<<nobr>>\
<<if $WORLD.MobileMode is 1>>
<<set _foo to $ImgPath + "CityNorthMOBILE.png">>
<img @src="_foo" usemap="#image-map">
<map name="image-map">
<area onmouseover="SugarCube.setup.MapMouse('Forest')" onclick="SugarCube.setup.MapClick('Forest')" coords="89,320,90,291,63,285,66,218,1,217,4,320" shape="poly">
<area onmouseover="SugarCube.setup.MapMouse('Tavern')" onclick="SugarCube.setup.MapClick('Tavern')" coords="77,225,57,167" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Pawn')" onclick="SugarCube.setup.MapClick('StorePawn')" coords="104,196,125,256" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('PlayerHouse')" onclick="SugarCube.setup.MapClick('House')" coords="172,73,191,126" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('GeneralStore')" onclick="SugarCube.setup.MapClick('StoreGeneral')" coords="288,166,307,224" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Guild')" onclick="SugarCube.setup.MapClick('Guild')" coords="363,71,383,128" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('MagicCircle')" onclick="SugarCube.setup.MapClick('MagicCircle')" coords="374,254,33" shape="circle">
<area onmouseover="SugarCube.setup.MapMouse('Blacksmith')" onclick="SugarCube.setup.MapClick('StoreSmith')" coords="441,164,459,220" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Church')" onclick="SugarCube.setup.MapClick('Church')" coords="577,198,594,253" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Gravestone')" onclick="SugarCube.setup.MapClick('Gravestone')" coords="559,256,573,284" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Gravestone')" onclick="SugarCube.setup.MapClick('Gravestone')" coords="597,256,610,284" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Selene')" onclick="SugarCube.setup.MapClick('Selene')" coords="633,42,652,97" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Tower')" onclick="SugarCube.setup.MapClick('Tower')" coords="690,227,729,287" shape="rect">
</map>
<<else>>\
<<set _foo to $ImgPath + "CityNorth.png">>
<img @src="_foo" usemap="#image-map">
<map name="image-map">
<area onmouseover="SugarCube.setup.MapMouse('Forest')" onclick="SugarCube.setup.MapClick('Forest')" coords="89,320,90,291,63,285,66,218,1,217,4,320" shape="poly">
<area onmouseover="SugarCube.setup.MapMouse('Tavern')" onclick="SugarCube.setup.MapClick('Tavern')" coords="129,225,96,167" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Pawn')" onclick="SugarCube.setup.MapClick('StorePawn')" coords="174,196,209,256" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('PlayerHouse')" onclick="SugarCube.setup.MapClick('House')" coords="288,73,319,126" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('GeneralStore')" onclick="SugarCube.setup.MapClick('StoreGeneral')" coords="480,166,513,224" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Guild')" onclick="SugarCube.setup.MapClick('Guild')" coords="606,71,639,128" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('MagicCircle')" onclick="SugarCube.setup.MapClick('MagicCircle')" coords="624,254,33" shape="circle">
<area onmouseover="SugarCube.setup.MapMouse('Blacksmith')" onclick="SugarCube.setup.MapClick('StoreSmith')" coords="736,164,765,220" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Church')" onclick="SugarCube.setup.MapClick('Church')" coords="962,198,991,253" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Gravestone')" onclick="SugarCube.setup.MapClick('Gravestone')" coords="932,256,955,284" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Gravestone')" onclick="SugarCube.setup.MapClick('Gravestone')" coords="996,256,1018,284" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Selene')" onclick="SugarCube.setup.MapClick('Selene')" coords="1055,42,1088,97" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Tower')" onclick="SugarCube.setup.MapClick('Tower')" coords="1151,227,1215,287" shape="rect">
</map>
<<endif>>
<</nobr>>
<span id="TextArea">\
@@color:LightGreen;Click on the map to navigate@@
</span>\
</div>\
<</widget>>\
<<widget "MapCrescentheartSouth">>\
<div id="NavMap">\
<<script>>
setup.MapClick = function (a) {
if (a == "LegacyVault") {
Engine.play("LegacyVault");
} else if ( a == "Daphne") {
Engine.play("StoreDaphne");
} else if ( a == "Lumber") {
Engine.play("StoreLumber");
} else if ( a == "Salon") {
Engine.play("Salon");
} else if ( a == "Orphanage") {
Engine.play("Orphanage");
} else if ( a == "Bridge") {
if (State.variables.WORLD.bridge > 0 || setup.GetEffect(" walk") > 0) {
var CC = State.variables.CC;
var z = State.variables.PCdz;
var x = State.variables.PCdx;
var y = State.variables.PCdy;
State.variables.PC[CC][z] = 1;
State.variables.PC[CC][x] = Math.trunc(State.variables.WORLD.DesertDims[0] /2);
State.variables.PC[CC][y] = 0;
State.variables.WORLD.datapasser = "reset desert";
Engine.play("Desert");
} else {
Engine.play("Bridge");
};
} else {
Engine.play(a);
};
};
setup.MapMouse = function(a) {
var b = "Error in Map js: " + a;
if (a == "LegacyVault") {
if (State.variables.WORLD.LegacyVault == 0) {
b = "@@color:LightGreen;Peculiar building@@: it's unclear what purpose this building serves, but the magic oozing from it makes your teeth rattle";
} else if (State.variables.WORLD.LegacyVault == 1) {
b = "@@color:LightGreen;Damaged Legacy Vault@@: the magic oozing from this building makes your teeth rattle";
} else {
b = "@@color:LightGreen;Legacy Vault@@: for passing equipment between generations";
};
} else if (a == "Daphne") {
b = "@@color:LightGreen;Daphne's Finest Jewelry@@: For all your fabulous magical needs";
} else if (a == "Lumber") {
b = "@@color:LightGreen;Lumbermill@@: A place to buy and sell wood";
} else if (a == "Salon") {
b = "@@color:LightGreen;The salon@@: Look magnifique!";
} else if (a == "Orphanage") {
if (State.variables.WORLD.orphanage == 0) {
b = "@@color:LightGreen;An empty burned-down building@@: the charred doll head half-buried in the corner is a little unnerving";
} else if (State.variables.WORLD.orphanage == 1) {
b = "@@color:LightGreen;Restored orphanage@@: the orphanage is empty but ready to receive children";
} else {
b = "@@color:LightGreen;Orphanage@@: a thriving orphanage";
};
} else if (a == "Bridge") {
if (State.variables.WORLD.bridge > 0) {
b = "@@color:LightGreen;Bridge@@: Bridge to the southern desert";
} else if (setup.GetEffect(" walk") > 0) {
b = "@@color:LightGreen;Damaged bridge@@: the bridge is out, but you can walk across the water";
} else {
b = "@@color:LightGreen;Damaged bridge@@: the bridge is out";
};
};
document.getElementById("TextArea").innerHTML = "";
$('#TextArea').wiki(b);
};
<</script>>\
\
<!-- mobile ? -->\
<<set _foo to $ImgPath + "CitySouthNone.png">>\
<<if ($WORLD.bridge > 0) and ($WORLD.orphanage is 0)>>\
<<set _foo to $ImgPath + "CitySouthBridgeOnly.png">>\
<<elseif ($WORLD.bridge is 0) and ($WORLD.orphanage > 1)>>\
<<set _foo to $ImgPath + "CitySouthOrphOnly.png">>\
<<elseif ($WORLD.bridge > 0) and ($WORLD.orphanage > 1)>>\
<<set _foo to $ImgPath + "CitySouthBridgeOrph.png">>\
<<endif>>\
<img @src="_foo" usemap="#image-map">\
<<nobr>>\
<map name="image-map">
<area onmouseover="SugarCube.setup.MapMouse('LegacyVault')" onclick="SugarCube.setup.MapClick('LegacyVault')" coords="127,160,95,100" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Daphne')" onclick="SugarCube.setup.MapClick('Daphne')" coords="417,127,447,191" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Lumber')" onclick="SugarCube.setup.MapClick('Lumber')" coords="575,102,609,161" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Salon')" onclick="SugarCube.setup.MapClick('Salon')" coords="720,127,755,192" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Orphanage')" onclick="SugarCube.setup.MapClick('Orphanage')" coords="990,126,1152,190" shape="rect">
<area onmouseover="SugarCube.setup.MapMouse('Bridge')" onclick="SugarCube.setup.MapClick('Bridge')" coords="580,205,638,309" shape="rect">
</map>
<</nobr>>
<span id="TextArea">\
@@color:LightGreen;Click on the map to navigate@@
</span>\
</div>\
<</widget>>\
<<if setup.TypeOf($GuildTemp) is "string">>\
<<else>>\
<<set $GuildTemp to "tutorial">>\
<<endif>>\
\
<!-- early unlock tutorial quest 6 is there's already a dead character -->\
<<if $WORLD.quests[6].state is "inactive">>\
<<for _DeathLoop to 0; _DeathLoop < 3; _DeathLoop++>>\
<<if ($PC[_DeathLoop][$PCstate] is "dead") or ($PC[_DeathLoop][$PCstate] is "lost")>>\
<<set $WORLD.quests[6].state to "avail">>\
<<endif>>\
<</for>>\
<<endif>>\
\
<<set _AllowQuestLinks to true>>\
\
<<if $WORLD.datapasser[0] is "Rina">>\
@@color:Gold;Rina, the adventurer's guild desk clerk@@\
<<SimplePic "rina.jpg">>\
<hr>\
<<if $WORLD.guild is 0>>\
@@color:Pink;Rina@@: "Welcome to Crescentheart. I'm Rina, the guild clerk. Are you here to climb the tower?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes, if possible."
@@color:Pink;Rina@@: "It's very possible! But if you don't want to die right away, you should probably spend some time learning the ropes and familiarizing yourself with the town. Maybe buy some equipment if you can afford it.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is there anything in particular you recommend?"
@@color:Pink;Rina@@: "stuff"
<hr>\
<<else>>\
Rina intro complete
<<endif>>\
\
<<elseif $WORLD.datapasser[0] is "confirmed outro">>\
<<CenterPic "guild.jpg">>
@@color:Pink;Rina@@: <<print either("Ok, I've assigned that quest to you. Good luck!","Ok, looking forward to your triumphant return!","Sounds good. Try not to get killed too gruesomely.","Oh, good. Nobody else wanted to do that one. I think the quest was starting to feel lonely.")>>\
\
<<elseif $WORLD.datapasser[0] is "reject">>\
<<CenterPic "guild.jpg">>
@@color:Pink;Rina@@: <<print either("That's ok. It will still be here later if you change your mind.","...aww, I feel so rejected. Haha, just kissing. I mean kidding. I mean...uhh, look, just be careful you don't get murdered in your sleep, is all I'm saying.","No problem. Is there anything else I can do for you?","You say that now, but you'll be back later.")>>
\
<<elseif $WORLD.datapasser[0] is "quest query">>\
@@color:Gold;Rina, the adventurer's guild desk clerk@@\
<<SimplePic "rina.jpg">>\
<hr>\
<!-- ******************************************************** -->\
<<if $WORLD.datapasser[1] is "q">><!-- Unlock the tower -->\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hi! Why is the tower locked?"
@@color:Pink;Rina@@: "Too many fresh new adventurers were going straight inside the moment they arrived in town, and were getting one-shotted. Inevitably they came here to complain, so the guild figured it would better for everyone involved if we locked it up and required people to get a key, rather than let newbies go barging in at level one based on some marketing boilerplate they saw in a travel brochure somewhere."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That seems sensible," you nod. "May I have a key?"
<<if ($PC[$CC][$PClevel] < 3) and ($PC[$CC][$PCgen] is 1)>>\
<<set _AllowQuestLinks to false>>\
Rina eyes you suspiciously.
@@color:Pink;Rina@@: "You appear to be a fresh, brand new character," she hands you a form. "I'm afraid I'm going to have to ask you to fill out a disclaimer."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Let's see...paragraph one, I promise not to complain to the dev about the game being too hard if I go charging into the tower before completing the tutorial. Paragraph two, I understand that I arrived in town naked and that I should probably equip my gear rather than go charging into the tower then complaining to the dev about how hard the game is when I can't be bothered to look at my inventory screen. Paragraph three..."
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<<unset $GuildTemp>>
<</link>>
</span>\
<span id="KeypY">\
<<link "y) Yes, sign the disclaimer and unlock the tower" "Guild">>
<<set $WORLD.MainQuest[0].state to "complete">>\
<<set $WORLD.datapasser to "">>
<</link>>
</span>\
<span id="KeypN">\
<<link "n) No, not yet" "Guild">>
<<set $WORLD.datapasser to "">>
<</link>>
</span>\
<<else>>\
<<set $WORLD.MainQuest[0].state to "complete">>\
<<set $WORLD.datapasser to "">>\
@@color:Pink;Rina@@: "Yep, here you go."
@@color:Yellow;The Tower is now unlocked@@
<<endif>>\
<<elseif $WORLD.datapasser[1] is 0>><!-- Meet the town -->\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello. I'm new in town. My name's <<print $PC[$CC][$PCname]>> and I'm here to climb the tower."
@@color:Pink;Rina@@: "Hello, <<print $PC[$CC][$PCname]>>! My name's Rina. I'm the guild clerk here in Crescentheart. All the quests here are completely optional, but if you're ever unsure of what to do next, we here at the guild would love to help you!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I appreciate that. Would you tell me about this 'meet the town' quest I see on the quest board?"
@@color:Pink;Rina@@: "Oh, the intro quest? Yes, that's a very good place for a new adventurer to start. Visit the blacksmith, the general store, and the pawnshop, then come back and we'll reward you with a voucher for a complimentary stay at the $WORLD.tavernname. If you're feeling brave you might also go talk to that nut in the hut, but I don't recommend it unless you want to be turned into a lizard or something."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Just talk to people? That doesn't sound very important. Certainly not very adventuresome."
@@color:Pink;Rina@@: "Well, keep in mind that funding for quests isn't provided by the guild. Quests are posted by people in town, who pay us to act as a middle man to find an adventurer to complete them."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Who posted this quest? Why are they paying you to have me visit some stores?"
@@color:Pink;Rina@@: "The merchant's guild. Every adventurer passes through here sooner or later, and this is basically a way for them to advertise cheaply. You get a tutorial quest, the stores get a potential customer, and I get a commission. Everybody wins!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Huh. That makes a surprising amount of sense. This quest still doesn't sound very important though. Can I skip it?"
@@color:Pink;Rina@@: "Sure, if you'd like. It's not a pre-requisite for anything. But having a single incomplete quest in the log would nag at you eventually, wouldn't it?"
<!-- ******************************************************** -->\
<<elseif $WORLD.datapasser[1] is 1>><!-- Forest combat -->\
<<set _Qs to []>>\
<<set _Qs[0] to ["cat-morph","cat-morphs"]>>\
<<set _Qs[1] to ["bunny-morph","bunny-morphs"]>>\
<<set _Qs[2] to ["fox-morph","fox-morphs"]>>\
<<set _Qs[3] to ["wolf-morph","wolf-men"]>>\
<<set _Qrnd to random(0,3)>>\
<<set $WORLD.quests[1].target to _Qs[_Qrnd][0]>>\
<<set $WORLD.quests[1].startat to $PC[$CC][$PCkills][setup.MonNameToKillPTR($WORLD.quests[1].target)]>>\
<!-- Above always sets, if player declines quest, it will be overwritten next time. Easier than checking. -->\
@@color:Pink;Rina@@: "For this quest, please defeat three <<print _Qs[_Qrnd][1]>>. You'll find them in the forest west of town. The reward for the quest is 20 gold."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why <<print _Qs[_Qrnd][1]>>? Isn't it traditional for this sort of a 'first kill quest' to target slimes?"
@@color:Pink;Rina@@: "Ordinarily yes, but slimes are actually fairly dangerous Tower monsters in this game. This is a beginner quest, so I'm sending you after relatively harmless forest creatures instead."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh, that's convenient."
@@color:Pink;Rina@@: "I know, right? I'm awesome like that."
<!-- ******************************************************** -->\
<<elseif $WORLD.datapasser[1] is 2>><!-- Meat -->\
<<if $PC[$CC][$PCsex] is "male">>\
<<set $WORLD.quests[2].target to "wolf-morph">>\
<<else>>\
<<set $WORLD.quests[2].target to "bunny-morph">>\
<<endif>>\
@@color:Pink;Rina@@: "For this quest I'll need you to defeat some <<print $WORLD.quests[2].target>>s, carve up their corpses and bring back the meat."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's a bit gruesome. Aren't animal morphs like that largely human? Is somebody seriously going to eat that?"
@@color:Pink;Rina@@: "Oh, all the time. Though in this case it's really just a proof-of-kill trophy and I'll probably end up tossing it."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's the point then?
<<if _QuestTarget is "bunny-morph">>\
@@color:Pink;Rina@@: "The Quest sponser is a noble who's angry that they have bigger boobs than she does."
<<else>>\
@@color:Pink;Rina@@: "The quest sponser is a noble who's angry that they have bigger dicks than he does."
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Right. Ok, so how do I do this?"
@@color:Pink;Rina@@: "Buy a butcher's knife from the general store, then go fight some <<print $WORLD.quests[2].target>>s in the forest. If you defeat a monster with the knife in your inventory, you'll have an option to cut some meat from it. Do that, and bring back 3 pieces of <<print $WORLD.quests[2].target>> meat. Of course, you might want to collect more than 3 if you're planning to eat any for yourself."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why would I do that?"
(Rina waggles her eyebrows and grins at you, but says nothing.)
<!-- ******************************************************** -->\
<<elseif $WORLD.datapasser[1] is 3>><!-- This is a sex game -->\
<<if $PC[$CC][$PCmorph] is "human">>\
@@color:Pink;Rina@@: "For this next quest I'm going to need you to lose a battle."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What? Why?"
@@color:Pink;Rina@@: "So that you can be raped by a monster."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "WHAT?!?! Why in the world should I do that??!"
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Pink;Rina@@: "Look, you don't have to do it if you don't want to, but sex is actually kind of an important mechanic in this game. Plus it's going to happen sooner or later, so you may as well rip the band-aid off quickly, right?"
<<else>>\
@@color:Pink;Rina@@: "Look, you don't have to do it if you don't want to, but sex is actually kind of an important mechanic in this game. Plus it's going to happen sooner or later, so you may as well have a monster rip your panties off...I mean, you may well rip the band-aid off quickly, right?"
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why? What's so different about losing a battle and being fucked by a monster, and winning a battle and fucking a monster?"
@@color:Pink;Rina@@: "Transformations only happen if you lose, not when you win."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...oh, that's useful to know. Ok. But now that I know I guess I don't have to actually go through all that, right?"
@@color:Pink;Rina@@: "I suppose. But, if you complete the quest, I'll give you 30 shiny gold coins for it! You want the shinies, don't you?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What if my fetish is role-playing a pristine virgin in a sex game?"
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Pink;Rina@@: "You do you, I guess. But there's actually a mechanic later in the game that let's you have your cock and beat it too, if you'll forgive the analogy. But point being, take the quest or leave it, but I recommend you learn the mechanics."
<<else>>\
@@color:Pink;Rina@@: "You do you, I guess. But there's actually a mechanic later in the game that let's you have some cock and eat it too, if you'll forgive the analogy. Or the oralogy, I suppose. But point being, take the quest or leave it, but I recommend you learn the mechanic."
<<endif>>\
<<else>>\
Rina looks over you carefully.
@@color:Pink;Rina@@: "Hmm, well this quest is about learning how transformation works. But as a <<print $PC[$CC][$PCmorph]>> it looks like you've already done that."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Lose a battle, get raped, wake up in the church with different parts, right?"
@@color:Pink;Rina@@: "Pretty much, yeah."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok, I guess I can skip that quest then."
@@color:Pink;Rina@@: "WAIT, NO!" she shouts in a panic, then nervously looks around and beckons you closer to her desk with a whisper. "You should do it anyway. I get commission for every...I mean, you, yeah...//you// get money for turning in these tutorial quests. What does it really matter if you've already completed it before you pick it up?
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That makes sense. What do you suggest?"
@@color:Pink;Rina@@: "Accept the quest like normal, then immediately turn around and turn it it. I get my commission, you get a quest reward, everybody wins!"
<<endif>>\
<!-- ******************************************************** -->\
<<elseif $WORLD.datapasser[1] is 4>><!-- cut trees -->\
<<set _AxeLevel to setup.AxeLevel()>>\
<<if _AxeLevel > 0>>\
@@color:Pink;Rina@@: "For this next quest, I'd like you to bring me 10 wooden logs."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's it? Just 10 wood?"
@@color:Pink;Rina@@: "Yep! You've already figured out woodcutting, so this should be easy peasy!"
<<else>>\
@@color:Pink;Rina@@: "For this next quest, I'd like you to bring me 10 wooden logs."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How do I do that? The trees just block me when I try to walk into them."
@@color:Pink;Rina@@: "You'll need an axe. You can buy them from Finley the blacksmith."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How much is that going to cost me?"
@@color:Pink;Rina@@: "I don't know," she shrugs. " 50 gold maybe?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And how much is the quest reward?"
@@color:Pink;Rina@@: "Because I like you so much, and I don't say that about just anybody...I'll award you with 40 shiny gold coins!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What? Why? That's less than the cost of an axe? I'd //lose// money if I do your quest!"
<<if (setup.getnextinvslot($CC) < 0)>>\
@@color:Pink;Rina@@: "Oh fine," she huffs. "I have an old copper axe here under my desk. I keep it around to shut up people who complain about my quests, but I suppose if you accept the quest I won't need it after all. Looks like your inventory is full though, so I recommend you get that sorted out before you accept the quest. It can be a huge pain to deal with contingencies like that."
<<else>>\
@@color:Pink;Rina@@: "Oh, fine," she huffs. "I have an old copper axe here under my desk. I keep it around to shut up people who complain about my quests, but I suppose if you accept the quest I won't need it anymore."
<<endif>>\
<<endif>>\
<!-- ******************************************************** -->\
<<elseif $WORLD.datapasser[1] is 5>><!-- Rebirth -->\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So what do I have to do for this next quest?"
@@color:Pink;Rina@@: "Give up the adventuring life and retire into obscurity."
<<if $PC[$CC][$PCgen] > 1>>\
<<set $WORLD.quests[5].reward to 100>>\
<<set $WORLD.quests[5].gen to $PC[$CC][$PCgen]>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I've already done that."
@@color:Pink;Rina@@: "I know you don't want to, but it's actually an important...wait, you've done it already?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yep. Harmony, Church of Immaculate Rebirth, I know all about that. I'm a generation <<print $PC[$CC][$PCgen]>> adventurer."
@@color:Pink;Rina@@: "Well, damn. There's goes my commission," she sighs, before her grins turns Chesire. "Hey...nobody has to //know// you've done it already."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I think I see where this is going. You want me to do the quest so we can split the quest reward evenly?"
@@color:Pink;Rina@@: "Did you say evenly?" she looks at you like you're crazy. "You don't seriously expect me to give you half of 200 gold just to...I mean, give you half of 100 gold just to-"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, Rina. The reward is 200, I get half. That means you pay me 100 gold to do this."
@@color:Pink;Rina@@: "But you don't even have to do anything for this quest!" she whines. "Just go retire and drink martinis on the beach. //I desperately want to drink martinis on the beach!//"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And will it be easier for you to do that with the 100 gold if you give me half, or with nothing at all if I refuse the quest?"
@@color:Pink;Rina@@: "Gahh! You're so difficult!" she shakes in anger, then drops her head onto her desk. "Ok, fine. Go retire, make a new character, when your descendant comes back I'll give them 100 gold, and then I'll sell my kidneys on the black market to make up the difference. Deal?"
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You've not serious."
@@color:Pink;Rina@@: "Oh, but I am! Don't get me wrong, adventurers never want to do this and I totally get why you wouldn't want to throw away all the good progress you've made. But it's actually a super important mechanic to know about. There's basically no way you're going to be able to beat the tower without using the rebirth system."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. No promises, but what would I have to do?"
@@color:Pink;Rina@@: "You've seen that church on the east end of town by the tower? Go there and talk to Harmony if you haven't already. She'll talk you through it. Once you've retired, live a long and unfulfilling life in a retirement home, and then someday your descendant will be born and they can come talk to me to finish the quest!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. Let's say I do this. What's the reward?"
@@color:Pink;Rina@@: "First off, your descendant will start with more stat points, so they'll be stronger, smarter, whatever you want. And if you've unlocked any new perks or character features, you can select those instead of that lousy 'starter' perk. And you'll complete an achievement that will unlock a second character slot. So much win! But, and this is the //most important thing//...I'll get paid a two hundred gold commision for...uhh, I mean I'll get paid 51 gold, and because I'm so charitable and honest, I'll give you 50 of it."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Rina?" you deadpan. "You're awful."
@@color:Pink;Rina@@: "Yes, but you love me anyway," she beams. "So, have we got a deal?"
<<endif>>\
<!-- ******************************************************** -->\
<<elseif $WORLD.datapasser[1] is 6>><!-- Death -->\
@@color:Pink;Rina@@: "Woo! Congrats! You're almost to the end of the tutorial quests!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh, thank goodness. So what do I have to do next?"
<<set _TargetChar to "no">>\
<<for _DeathLoop to 0; _DeathLoop < 3; _DeathLoop++>>\
<<if ($PC[_DeathLoop][$PCstate] is "dead") or ($PC[_DeathLoop][$PCstate] is "lost")>>\
<<set _TargetChar to _DeathLoop>>\
<<if $PC[_DeathLoop][$PCsex] is "male">>\
<<set _TargetHeShe to "he">>\
<<else>>\
<<set _TargetHeShe to "she">>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _TargetChar is "no">>\
@@color:Pink;Rina@@: "Die."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Rina, you are seriously the worst quest giver in any game, ever."
<!-- with implemented pregnancy quest: Aww, don't be a baby. You already have one of those. -->\
<<if setup.AchievementHandler("Three's Company", "HAS?", -1)>>\
@@color:Pink;Rina@@: "Aww, don't be a baby. Death is an important part of life. Besides, looks like you've already unlocked the third character slot, so you'd already done the whole death thing. This quest should be a breeze for you."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. So what do I need to do? Go jump off a cliff?"
@@color:Pink;Rina@@: "Technically, you don't need to die personally. All you really need is to have a dead or lost character in any slot, and then come talk to me on any living character. Doesn't matter when the dead dude dies. I just need to see a somebody marked as 'dead' or 'lost' on the character menu. Retirement won't work."
<<else>>\
@@color:Pink;Rina@@: "Aww, don't be a baby. Death is an important part of life. Though to be clear, it's not strictly neccesary for you to die personally. All you really need is to have a dead or lost character in any character slot when you come back to talk to me. It doesn't matter who or which one. Though if you're going to have a character die anyway, you might as well make sure the character to die is at least level 3. That will award you the 'Three's Company' achievement and unlock your third character slot."
<<endif>>\
<<else>>\
Rina looks through her papers.
@@color:Pink;Rina@@: "Looks like you don't have to do anything. You know <<print $PC[_TargetChar][$PCname]>> over in character slot <<print _TargetChar +1>>?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...yes?"
@@color:Pink;Rina@@: "Well, the whole point of the Unto Eternity quest is to have a character die so you can go rescue them in the next quest. And as it turns out, <<print _TargetHeShe>>'s already <<print $PC[_TargetChar][$PCstate]>>."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So what do I do, just skip this quest?"
@@color:Pink;Rina@@: "Oh, heavens no!" she looks aghast. "Accept the quest, and turn it in so I can get my commission! I only get paid for completed quests, not quests that didn't have to be completed."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thanks for always looking out for me," you snark.
@@color:Pink;Rina@@: "Happy to help!" she smiles, then corrects herself. "Me, that is. Happy to help me."
<<endif>>\
<<elseif $WORLD.datapasser[1] is 7>><!-- Rescue -->\
@@color:Pink;Rina@@: "Hey, <<print $PC[$CC][$PCname]>>! Are you ready for the final tutorial quest?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Absolutely!"
@@color:Pink;Rina@@: "Great!" Rina beams. "So, as you may recall, the previous quest was to die. This quest, as you may have anticipated, is to go rescue the dead character."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And how do I do that?"
@@color:Pink;Rina@@: "By going to their last known location to find them, then hauling their body back to Harmony at the Church of Immaculate Rebirth."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Huh. Sounds simple enough."
@@color:Pink;Rina@@: "It can be, but be aware that sometimes bodies get moved around a little bit. You can see on the main menu where a dead or lost character is, but sometimes it could take some searching. You can also talk to Harmony for that same information."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What exactly is the difference between dead and lost?"
@@color:Pink;Rina@@: "Think of it like an estimate of how difficult it will be to find them. A dead character is usually probably pretty close to where you last saw them. A lost character is known to have been moved, and might take some extra searching. In rare cases they might not even spawn at their listed location at all and you might have to regenerate it and look a couple times."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What causes that?"
@@color:Pink;Rina@@: "Usually it's caused by a tower regeneration. If you regenerate the tower when a character is still inside, the level they're on technically doesn't even exist until you go there. So the game can't even know where they are for sure. Usually all you have to do is simply go there and it's fine, but if the level generator puts them inside a stairwell or a teleporter or something, you might need to regenerate the tower again to be able to find the body.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. Anything else I need to know?"
@@color:Pink;Rina@@: "Nope! Get out there and save your dead buddy. Good luck!"
<<elseif $WORLD.datapasser[1] is 8>><!-- What now? -->\
<<if $WORLD.Circle > 0>>\
@@color:Pink;Rina@@: "Woo! I heard you defeated Zetalia! Awesome!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I know, right? So whaty should I do now?"
@@color:Pink;Rina@@: "Well, that's the end of content for this initial release of the game. Game development takes a lot of time, especially as a solo developer, and if you'd like to encourage further updates you might consider heading over to <a href="https://subscribestar.adult/arcdragon" target="_blank" rel="noopener noreferrer">SubscribeStar</a> and supprting ArcDragon directly."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Et tu, Rina?"
@@color:Pink;Rina@@: "Hey, don't look at me. I've made it very clear what my priortiies are. I don't care whether you suppotr the dev at all, but think of all the new quests he'll haev for me in future updates? And not just tutorial quests, but _main_ quests.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How high do you think the commissions on those quests will be?"
Rina's eyes sparkle and she starts to drool on her desk.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Rina? Are you there?"
@@color:Pink;Rina@@: "What!?!?" she startles, then blinks a couple times. "Sorry, just got caught up in a funlittle fanatasy involving me at my own little private cabin on the beach."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Never give up on those dreams, Rina."
@@color:Pink;Rina@@: "Thanks <<print $PC[$CC][$PCname]>>," she smiles. "I'll be sure not to!"
<<else>>\
@@color:Pink;Rina@@: "Hey, <<print $PC[$CC][$PCname]>>! You've finished the tutorial and I don't have any more quests for you right now."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh, really? What should I do next?"
@@color:Pink;Rina@@: "That's totally up to you, but I have a rumor that might help. You've met Gerard, right? The proprieter of the general goods store? Back whenhe was an adventurer he told me a story about some sort of specialroom on the fifth floor of the tower with a monster in it. 'Queen of the Spiders' he called her. Just a hunch, but I've a sneaking suspicion that that's probably some sort of boss monster."
<<endif>>\
\
\
\
<!-- REPEATABLE QUESTS START HERE -->\
<<elseif $WORLD.datapasser[1] is 10>>\
<!-- Overland Hunt-->\
<<if setup.CurrentDayCount() > $WORLD.RepeatableQuests[0].lastupdate>>\
<<set _TargetType to either("cat-morph","bunny-morph","fox-morph","wolf-morph","wolf","horse","snake","ant","scorpion")>>\
<<set _Plural to setup.GetPluralOf(_TargetType)>>\
<<set _TargetQTY to random(3,6)>>\
<<set $WORLD.RepeatableQuests[0].need to _TargetQTY>>\
<<set $WORLD.RepeatableQuests[0].target to _TargetType>>\
<<set $WORLD.RepeatableQuests[0].lastupdate to setup.CurrentDayCount()>>\
<<else>>\
<<set _TargetQTY to $WORLD.RepeatableQuests[0].need>>\
<<set _TargetType to $WORLD.RepeatableQuests[0].target>>\
<<set _Plural to setup.GetPluralOf(_TargetType)>>\
<<endif>>\
<<set $WORLD.RepeatableQuests[0].startat to $PC[$CC][$PCkills][setup.MonNameToKillPTR($WORLD.RepeatableQuests[0].target)]>>\
\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. <<print either("Could I take that repeatable hunting quest you have posted?","I see a low level hunting quest on the board. Is that still available?")>>"
@@color:Pink;Rina@@: "<<print either("Absolutely!","Yep, that's still up for grabs if you want it.","Yeah, haven't had any takers so far.")>> <<print either("Quest is to kill","Target is","The guild is looking for somebody to kill ")>> <<print _TargetQTY>> <<print _Plural>>. <<print either("Feeling up to it?","How does that sound?","Does that sound good to you?","You interested?")>>"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "<<print either("What's the pay?","How much does it pay?","How much are you paying?","What's the reward?","How's the reward?")>>"
@@color:Pink;Rina@@: "Standard kill contract reward of 10 gold and 5xp per kill, so <<print 10 * _TargetQTY>> gold and <<print 5 * _TargetQTY>> xp total, on top of whatever you get for the kills themselves."
<<elseif $WORLD.datapasser[1] is 11>>\
<!-- Tower Hunt-->\
<<if setup.CurrentDayCount() > $WORLD.RepeatableQuests[1].lastupdate>>\
<<set _TargetType to either("goblin","slime","spider","naga","minotaur","hellhound","rat-morph","drider","hydra","demon","tentacle")>>\
<<set _Plural to setup.GetPluralOf(_TargetType)>>\
<<set _TargetQTY to random(3,6)>>\
<<set $WORLD.RepeatableQuests[1].need to _TargetQTY>>\
<<set $WORLD.RepeatableQuests[1].target to _TargetType>>\
<<set $WORLD.RepeatableQuests[1].lastupdate to setup.CurrentDayCount()>>\
<<else>>\
<<set _TargetQTY to $WORLD.RepeatableQuests[1].need>>\
<<set _TargetType to $WORLD.RepeatableQuests[1].target>>\
<<set _Plural to setup.GetPluralOf(_TargetType)>>\
<<endif>>\
<<set $WORLD.RepeatableQuests[1].startat to $PC[$CC][$PCkills][setup.MonNameToKillPTR($WORLD.RepeatableQuests[1].target)]>>\
\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. <<print either("Do you have anything good for me today?","Do you have any high level hunting quests for me?")>>"
@@color:Pink;Rina@@: "<<print either("I do actually, yes.","I sure do.","If you feel like hunting in the tower, yes.")>> <<print either("Quest is to kill","The quest target is","The guild is looking for somebody to kill ")>> <<print _TargetQTY>> <<print _Plural>>. <<print either("Feeling up to it?","How does that sound?","Does that sound good to you?","You interested?")>>"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "<<print either("What's the pay?","How much does it pay?","How much are you paying?","What's the reward?","How's the reward?")>>"
@@color:Pink;Rina@@: "Standard kill contract reward of 20 gold and 10xp per kill, so <<print 20 * _TargetQTY>> gold and <<print 10 * _TargetQTY>> xp total, on top of whatever you get for the kills themselves."
<<elseif $WORLD.datapasser[1] is 12>>\
<!-- Monster Parts Hunt -->\
<!-- implement: resolve ratkin/rat-morph name mismatch in monster defs vs item defs -->\
<<set _MSM to []>>\
<<if setup.CurrentDayCount() > $WORLD.RepeatableQuests[2].lastupdate>>\
<<if random(1,2) is 1>>\
<<set _MSM[0] to [102, 107,"goblin", 100, 50]>>\
<<set _MSM[1] to [109, 400,"slime", 100, 50]>>\
<<set _MSM[2] to [102, 109,"spider", 150, 50]>>\
<<set _MSM[3] to [102, 111,"hellhound", 200, 200]>>\
<<set _MSM[4] to [102, 113,"drider", 200, 200]>>\
<<set _MSM[5] to [102, 114,"tentacle", 200, 250]>>\
<<set _MSM[6] to [102, 121,"hydra", 150, 75]>>\
<<set _MSM[7] to [102, 123,"troll", 150, 75]>>\
<<set _MSM[8] to [102, 124,"naga", 125, 75]>>\
<<set _MSM[9] to [102, 125,"minotaur", 125, 75]>>\
<<else>>\
<<set _MSM[0] to [109, either(207,307),"goblin", 100, 50]>>\
<<set _MSM[1] to [109, 400,"slime", 100, 50]>>\
<<set _MSM[2] to [109, 209,"spider", 150, 50]>>\
<<set _MSM[3] to [109, 211,"hellhound", 200, 200]>>\
<<set _MSM[4] to [109, either(213,313),"drider", 200, 200]>>\
<<set _MSM[5] to [109, 214,"tentacle", 200, 250]>>\
<<set _MSM[6] to [109, either(221,321),"hydra", 150, 75]>>\
<<set _MSM[7] to [109, either(223,323),"troll", 150, 75]>>\
<<set _MSM[8] to [109, either(224,324),"naga", 125, 75]>>\
<<set _MSM[9] to [109, either(225,325),"minotaur", 125, 75]>>\
<<endif>>\
<<set _r to random(0, _MSM.length -1)>>\
<<set _TargetData to _MSM[_r]>>\
<<set _A to _TargetData[0]>>\
<<set _B to 0>>\
<<set _C to random(2,4)>>\
<<set _D to _TargetData[1]>>\
<<set _TargetItem to [_A, _B, _C, _D]>>\
<<set $WORLD.RepeatableQuests[2].target to _TargetItem>>\
<<set _GPReward to _TargetData[3] * _C>>\
<<set _XPReward to _TargetData[4]>>\
<<set $WORLD.RepeatableQuests[2].goldreward to _GPReward>>\
<<set $WORLD.RepeatableQuests[2].xpreward to _XPReward>>\
<<set $WORLD.RepeatableQuests[2].lastupdate to setup.CurrentDayCount()>>\
<<else>>\
<<set _TargetItem to $WORLD.RepeatableQuests[2].target>>\
<<set _GPReward to $WORLD.RepeatableQuests[2].goldreward>>\
<<set _XPReward to $WORLD.RepeatableQuests[2].xpreward>>\
<<endif>>\
\
<<DescribeItem _TargetItem>>\
<<set _HeShe to either("He","She")>>\
<<set _HimHer to "him">>\
<<if _HeShe is "She">>\
<<set _HimHer to "her">>\
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I see quest on the board to fetch some monster parts? What's that about?"
@@color:Pink;Rina@@: "<<print either("Some lazy adventurer","A sleazy noble","Somebody who's paying enough to remain anonymous")>> wants to buy a transformation without needing to risk being raped and murdered for it. <<print _HeShe>>'s commissioned us to find someone to bring back <<print $ItemPoke.fullname>> for <<print _HimHer>>."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wow, ok. How much does the job pay?"
@@color:Pink;Rina@@: "<<print _GPReward>> gold and <<print _XPReward>> experience on top of whatever you earn for the kills."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's not very much. If I pay that much, will you hire some other adventurer to bring back whatever parts I want?"
@@color:Pink;Rina@@: "Nope."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...aww."
<<elseif $WORLD.datapasser[1] is 13>>\
<!-- Random Lumber -->\
<<if setup.CurrentDayCount() > $WORLD.RepeatableQuests[3].lastupdate>>\
<<set _Target to either(105,120,121,122,138)>>\
<<set _TargetQTY to random(3,10) * 10>>\
<<set $WORLD.RepeatableQuests[3].need to _TargetQTY>>\
<<set $WORLD.RepeatableQuests[3].target to _Target>>\
<<set $WORLD.RepeatableQuests[3].lastupdate to setup.CurrentDayCount()>>\
<<set $WORLD.RepeatableQuests[3].goldreward to _GPReward>>\
<<set $WORLD.RepeatableQuests[3].xpreward to _XPReward>>\
<<else>>\
<<set _TargetQTY to $WORLD.RepeatableQuests[3].need>>\
<<set _Target to $WORLD.RepeatableQuests[3].target>>\
<<endif>>\
\
<<set _TargetName to "wooden logs">>\
<<set _TargetValue to 2>>\
<<if _Target is 120>>\
<<set _TargetName to "hardwood logs">>\
<<set _TargetValue to 3>>\
<<elseif _Target is 121>>\
<<set _TargetName to "steelwood">>\
<<set _TargetValue to 4>>\
<<elseif _Target is 122>>\
<<set _TargetName to "faerie wood">>\
<<set _TargetValue to 5>>\
<<elseif _Target is 138>>\
<<set _TargetName to "cactus">>\
<<set _TargetValue to 4>>\
<<endif>>\
\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. <<print either("What's todays resource collection target?","Would you tell me about the resource collection quest?")>>?
@@color:Pink;Rina@@: "<<print either("I have an order to fill for","There's a breach in the walls around the city that need to be repaired. The guild is looking to acquire")>> <<print _TargetQTY>> <<print _TargetName>>.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "<<print either("What's the pay?","How much does it pay?","How much are you paying?","What's the reward?","How's the reward?")>>"
@@color:Pink;Rina@@: <<print either("Since it's such a specific request, the pay is","The guild is offering 1 gold per log more than Boltman, but we'll only take wood of the specified type and quantity. That works out to")>> <<print _TargetValue * _TargetQTY>> gold. <<print either("You interested?","You in?","Can you handle that?")>>
\
\
\
<<elseif $WORLD.datapasser[1] is 99>>\
This dialogue is not used, right?
Approaching the desk, you see that Rina is crying.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. Are you alright?"
@@color:Pink;Rina@@: "No, I'm not alright!" she bawls. "I don't have any more quests to give you! How will I ever be able to afford that gold-plated yacht I've always wanted??!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes, I see how difficult things must be for you," you deadpan.
@@color:Pink;Rina@@: "Of course," she wipes up her tears. "There is one //tiny little thing// you might be able to do."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's that?" you ask suspiciously.
@@color:Pink;Rina@@: "You could reset quests. On the initial game menu, under the 'controls' section there's an option to 'Reset World Data.' Click that, and then you could do these quests and collect all the rewards all over again!"
<<if $WORLD.house.state > 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Reset //world// data? Doesn't that reset all world quests? So I'd lose my house? And everything in it?"
@@color:Pink;Rina@@: "Yeah that's true," she nods. "But, I mean...it's an option."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Reset //world// data? Wouldn't that reset a bunch of other things too besides just these quests?"
@@color:Pink;Rina@@: "...it's possible," she grudgingly admits. "But, I mean...you could if you want to."
<<endif>>\
<<endif>>\
\
<<if $WORLD.datapasser[1] < 9>>\
<hr>\
<<set _WhyIsThisNeeded to $WORLD.datapasser[1]>>\
\
<span id="KeypY">\
<<link "y) Accept this quest" "Guild">>
<<AdvanceTime 5>>
<<set $WORLD.quests[_WhyIsThisNeeded].state to "active">>
<<set $WORLD.datapasser[0] to "confirmed outro">>
<<if _WhyIsThisNeeded is 4>>\
<<set _ads to setup.GiveItem($CC, [220,102,0,0,0])>><!-- hatchet -->
<<endif>>\
<</link>>
</span>\
<span id="KeypN">\
<<link "n) Reject this quest" "Guild">>
<<AdvanceTime 5>>
<<set $WORLD.datapasser[0] to ["reject"]>>
<</link>>
</span>\
<<elseif $WORLD.datapasser[1] < 20>>\
<hr>\
<<set _WhyIsThisNeeded to $WORLD.datapasser[1]>>\
\
<span id="KeypY">\
<<link "y) Accept this quest" "Guild">>
<<AdvanceTime 5>>
<<set $WORLD.RepeatableQuests[_WhyIsThisNeeded -10].state to "active">>
<<set $WORLD.datapasser[0] to "confirmed outro">>
<</link>>
</span>\
<span id="KeypN">\
<<link "n) Reject this quest" "Guild">>
<<AdvanceTime 5>>
<<set $WORLD.datapasser[0] to ["reject"]>>
<</link>>
</span>\
<<endif>>\
\
<<elseif $WORLD.datapasser[0] is "quest turnin">>\
@@color:Gold;Rina, the adventurer's guild desk clerk@@\
<hr>\
<<SimplePic "rina.jpg">>\
\
<<set _FocusedQuest to $WORLD.datapasser[1]>>\
\
<<set _RepeatQuestBonus to 0>>\
<<if setup.AchievementHandler("Grinder", "HAS?", -1) > 0>>\
<<set _RepeatQuestBonus to 10>>\
<<endif>>\
\
<!-- ******************************************************** -->\
<<if _FocusedQuest is 0>>\
<<set _OneQty to 0>>\
<<if $WORLD.smith > 0>><<set _OneQty to _OneQty +1>><<endif>>\
<<if $WORLD.gstore > 0>><<set _OneQty to _OneQty +1>><<endif>>\
<<if $PC[$CC][$PCSkittersChat][0] > 0>><<set _OneQty to _OneQty +1>><<endif>>\
<<if _OneQty is 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So what do I need to do for this 'meet the town' quest again?"
@@color:Pink;Rina@@: "Just visit some stores and talk to the people running them."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I have to specifically talk to people? I can't just walk in and leave?"
@@color:Pink;Rina@@: "Yeah, you have to talk to the shopkeepers. The tracker for the quest checks their dialogue state, so I have no way to prove that you actually visited them if you don't talk to them."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What if I asked them to sign a note? What if I brought one of them back to tell you personally? What if I actually, you know, //bought// something from them and showed it to you?"
@@color:Pink;Rina@@: "Nope!" she covers her eyes and starts chanting. "La! La! La! Can't see a thing!"
<<elseif _OneQty > 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So I visited the stores you asked me to."
@@color:Pink;Rina@@: "Awesome! I get a whole gold coin in commission for that you know."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What about me? Aren't I supposed to get a reward too?"
<<if (setup.getnextinvslot($CC) < 0)>>\
@@color:Pink;Rina@@: "Yep, but your inventory is full. Go get that sorted out and then come back."
<<else>>\
@@color:Pink;Rina@@: "Oh, yeah. Here's your voucher. $WORLD.tavernname is on the left side of town by the sign leading to the enchanted forest. I recommend stopping by when you need healing or food."
<<set _throwaway to setup.GiveItem($CC, [114,0,0,0,0])>>\
<<set $WORLD.quests[0].state to "complete">>\
<<endif>>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. Could you remind me which stores I need to visit?"
<<set _Texts to ["zero", "one","two"]>>\
@@color:Pink;Rina@@: "The general goods store, the pawnshop and the blacksmith. Looks like you've only visited <<print _Texts[_OneQty]>> of them so far. Go on, just click on any random couple doors in town and you'll find them eventually."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How do you even know where I've been when you've been sitting here in the guild hall this entire time?"
@@color:Pink;Rina@@: "I checked the save game data."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...that's a little on the nose, don't you think?"
<<set _PickADick to "error: PC is male but penis not found">>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<if $PC[$CC][$PCsex] is "male">>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.type is $BPpenis>>\
<<set _PickADick to _bp>>\
<<endif>>\
<</for>>\
@@color:Pink;Rina@@: "Nah, I know everything about you. Your penis is <<print _PickADick.size / 10>> inches long!\
<<if $PC[$CC][$PCsexACTS].malevirgin[1] is true>> No wonder you're a virgin!"<<else>><<endif>>
<<elseif $PC[$CC][$PCsex] is "female">>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
<<set _PickBoobs to "error: PC is female but boobs not found">>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.type is $BPboobs>>\
<<set _PickBoobs to _bp>>\
<<endif>>\
<</for>>\
<<set _BoobSize to Math.trunc(_PickBoobs.size /10)>>\
@@color:Pink;Rina@@: "Nah, I know everything about you. For example, your boobs are _BoobSize cubic centimeters, and you're still a virgin."
<<else>>\
@@color:Pink;Rina@@: "Nah, I know everything about you! Remember how you lost your viriginity to a <<print $PC[$CC][$PCsexACTS].femalevirgin>>? I know all about that!"
<<endif>>\
<<else>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
@@color:Pink;Rina@@: "Nah, I know everything about you. Like how many sexual organs you have."
<<else>>\
@@color:Pink;Rina@@: "Nah, I know everything about you! Remember how you lost your viriginity to a <<print $PC[$CC][$PCsexACTS].femalevirgin>>? Of course, I'm only talking about your vaginal vriginity here, given that you're a hermaphrodite. I know all about that!"
<<endif>>\
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...I think I'll be going now."
<<endif>>\
\
<!-- ******************************************************** -->\
<<elseif _FocusedQuest is 1>>\
<<set _QTarget to $WORLD.quests[_FocusedQuest].target>>\
<<set _KillPTR to setup.MonNameToKillPTR(_QTarget)>>\
<<if $PC[$CC][$PCkills][_KillPTR] < $WORLD.quests[_FocusedQuest].startat>>\
<!-- hack for if player retires with quest active -->\
<<set $WORLD.quests[_FocusedQuest].startat to 0>>\
<<endif>>\
<<set _KillsSinceQuest to $PC[$CC][$PCkills][_KillPTR] - $WORLD.quests[_FocusedQuest].startat>>\
<<if _KillsSinceQuest is 0>>\
@@color:Pink;Rina@@: "Doesn't look like you've killed any <<print _QTarget>>s yet."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yeah, I'm working on it. Where did you say I could find those again?"
@@color:Pink;Rina@@: "In the enchanted forest west of town."
<<elseif _KillsSinceQuest > 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I think I'm done with that kill quest."
@@color:Pink;Rina@@: "You sure are. Congrats! What was the reward for that again? It was the satisfaction of a job well done, right?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, you said it was 20 gold."
@@color:Pink;Rina@@: "2 gold and a head pat?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, twenty gold. Two-zero."
@@color:Pink;Rina@@: "How about 5 gold, plus I'll let you feel me up? Fondling a 2d anime girl on your screen has to be worth at least 15 gold, right?"
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you really want me to answer that?"
@@color:Pink;Rina@@: "Oh, alright. Here's your 20 gold you gold-pinching miser. Just remember you turned me down if the dev ever gets around to making a sex scene for me."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No offense, but I think my boobs are bigger than yours anyway."
@@color:Pink;Rina@@: "I know. What do you think I need the money for? Boobs jobs aren't cheap. Alright, you cheapskate. Here's your 20 gold ripped straight out of my chest surgery fund."
<<endif>>\
<<set $WORLD.quests[_FocusedQuest].state to "complete">>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + 20>>\
<<AwardXP 10 "quest">>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I've killed _KillsSinceQuest <<print _QTarget>>s."
@@color:Pink;Rina@@: "Good job. That still leaves <<print 3 - _KillsSinceQuest>> to go."
<<endif>>\
\
<!-- ******************************************************** -->\
<<elseif _FocusedQuest is 2>>\
<<if $WORLD.quests[_FocusedQuest].target is "cat">>\
<<set _QTname to "cats">>\
<<set _MSource to 101>>\
<<elseif $WORLD.quests[_FocusedQuest].target is "bunny-morph">>\
<<set _QTname to "bunnies">>\
<<set _MSource to 100>>\
<<elseif $WORLD.quests[_FocusedQuest].target is "fox-morph">>\
<<set _QTname to "foxes">>\
<<set _MSource to 102>>\
<<elseif $WORLD.quests[_FocusedQuest].target is "wolf-morph">>\
<<set _QTname to "wolf-morphs">>\
<<set _MSource to 103>>\
<<else>>\
<<set _QTname to "@@color:Red;Error: unrecognized quest target@@">>\
<<endif>>\
<<set _FetchTarget to setup.HasQuestMonsterParts(102, _MSource)>>\
<<if _FetchTarget > -1>>\
<<set _MeatHas to $PC[$CC][$PCinven][_FetchTarget][2]>>\
<<if _MeatHas > 2>>\
<<set $PC[$CC][$PCinven][_FetchTarget][2] to $PC[$CC][$PCinven][_FetchTarget][2] - 3>>\
<<if $PC[$CC][$PCinven][_FetchTarget][2] is 0>>\
<<set $PC[$CC][$PCinven][_FetchTarget] to [0,0,0,0,0]>>\
<<endif>>\
<<set $WORLD.quests[_FocusedQuest].state to "complete">>\
@@color:LightGreen;(You hand 3 chunks of <<print $WORLD.quests[_FocusedQuest].target>> meat to Rina)@@
@@color:Pink;Rina@@: "Woo! Thick chunky slabs of raw meat. Just how I like it!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Uhh, you're welcome?"
@@color:Pink;Rina@@: "So, anything else I can do you for?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "A quest reward would be nice."
@@color:Pink;Rina@@: "The journey was the reward? The true reward was the friends you made along the way? Ask and ye shall...oh, wait. That one doesn't work. Ok, yeah I guess. Here you go: 30 coins and 20 xp. Don't spend it all in one place. Except the xp."
<<AwardXP 20 "quest">>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + 30>>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. How much of that <<print $WORLD.quests[_FocusedQuest].target>> meat was I suppose to bring back again?"
@@color:Pink;Rina@@: "Three."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I have _MeatHas so far."
@@color:Pink;Rina@@: "I didn't get this front desk job with the guild because I'm a math genius. But I'm at least moderately certain that _MeatHas is not 3."
<<endif>>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. What was I supposed to do for that meat quest again?"
@@color:Pink;Rina@@: "It's a generic fetch quest. Go kill some _QTname and bring back meat from 3 of them."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How many battles do you think I'll have to fight to do this? There's a lot of stuff in the forest besides _QTname."
@@color:Pink;Rina@@: "Well, look on the bright side: at least this quest doesn't have a low drop rate. So long as you have a butcher's knife to carve them up with, you can get meat from every single one."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thank goodness for that."
@@color:Pink;Rina@@: "How about you thank //me// instead? I'm the outrageously pretty, smart, funny and humble girl who selflessly gave you the quest."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Oh. Right. Thank you."
<<endif>>\
<!-- ******************************************************** -->\
<<elseif _FocusedQuest is 3>>\
<<if $PC[$CC][$PCmorph] is "human">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. Could you explain to me again how losing a battle is supposed to transform me?"
@@color:Pink;Rina@@: "It's not just losing a fight. Sex has to be involved. Most monsters will fuck anything they can, but every now and then something might not be interested. You have to be raped for a transformation to happen."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And that will make me more like whatever the sex is with? So if I want to be more fox-like, lose a battle to a fox? If I want to be more wolf-like, lose a battle to a wolf?"
@@color:Pink;Rina@@: "That's the idea, yes.
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What about sex organs? You say that transformation makes you like the thing you're having sex with. Does that mean if I get beat up by a bunny girl I'll grow boobs?"
@@color:Pink;Rina@@: "No, sex organs move towards the match for your partner. Sex with a female with make you more masculine. Sex with a male will make you more feminine. And sex with a hermaphrodite...well, that can give either result. So in your example of sex with a bunny girl, that might transform your human cock into a bunny cock, or it might get longer...but you'd never grow boobs from it."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What about sex organs? You say that transformation makes you like the thing you're having sex with. Does that mean if I'm raped by a wolf man I might grow a penis?"
@@color:Pink;Rina@@: "No, sex organs move towards the match for your partner. Sex with a male with make you more female. Sex with a female will make you more male. And sex with a hermaphrodite...well, that can give either result. So in your example of sex with a wolf man, that might make your human boobs turn into wolf boobs for example, or it might make them larger. But it would never make you more masculine."
<<endif>>\
<<else>>\
@@color:Pink;Rina@@: "Hello <<print $PC[$CC][$PCmorph]>>, looking good! Here's your reward."
<<GainGold 30>>\
<<AwardXP 20 "quest">>\
<<set $WORLD.quests[_FocusedQuest].state to "complete">>\
<br>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thanks, I think. Is there any way to turn back?"
@@color:Pink;Rina@@: "Sort of. Transformations are permament until changed. So you can't ever 'turn back' but you can possibly become human by receiving human transformations. Human adventurers don't usually rape each other though, so no easy way back by losing battles on purpose. But food and drink still works, so if you can figure out a way to get some breast milk or semen from a tower adventurer, that should do the trick. Also, it's harder to control but some monsters have composite forms. For example, a centaur is a human upper half on a horse body. So if you had a fox head for instance, a centaur could possibly make it human again. But it would be luck of the draw that you'd get that instead of horse legs, for example."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Aside from the sex stuff, is there any actual benefit to this? Why wouldn't I just try to stay human?"
@@color:Pink;Rina@@: "Well, that depends. Not everything has the same kind of body parts. For example, snakes and horses don't have hands. If you want to hold a sword, turning into one of those is probably a bad idea. But on the other hand, snakes have poisonous bites and horses can kick. So with the right transformations you might not need to carry a sword at all. But then it would probably be inconvenient to have an awesome pair of magic gloves that you can't wear because you lost your arms and hands to a snake transformation.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Couldn't I do all of those things together though? Have a snake head and horse legs with human hands, for three different types of attack?"
@@color:Pink;Rina@@: "Absolutely. Although controlling the transformations to get exactly the combination you want might be a little difficult. Things can only make you more like what they are, and it's not up to you which part gets transformed or how."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What about the forest monsters? They're...kind of not really monsters. Does it even matter if I have bunny hands and wolf legs if they work exactly like human arms and legs?"
@@color:Pink;Rina@@: "They don't, though. Transformations always make you more like the monster in question, and every monster part you have will always affect you in some way. For example, bunny-morphs are very good at flirting and wolf-morphs have a higher than usual health pool. So if you want those bonuses, get those parts. Check out 'examine self' on the side bar and look under 'morphology' to see exactly what your body parts are doing for you. The 'x' hoteky will also bring it up without needing to use your mouse."
<<endif>>
<<elseif _FocusedQuest is 4>>\
<<set _WoodPTR to setup.HasItemA(105)>>\
<<set _WoodQty to 0>>\
<<if _WoodPTR > -1>>\
<<set _WoodQty to $PC[$CC][$PCinven][_WoodPTR][2]>>\
<<endif>>\
<<if _WoodQty > 9>>\
<<set $WORLD.quests[_FocusedQuest].state to "complete">>\
<<if $PC[$CC][$PCinven][_WoodPTR][2] > 10>>\
<<set $PC[$CC][$PCinven][_WoodPTR][2] to $PC[$CC][$PCinven][_WoodPTR][2] -10>>\
<<else>>\
<<set $PC[$CC][$PCinven][_WoodPTR] to [0,0,0,0,0]>>\
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina," you wipe the sweat off your forehead. "I'm all done cutting wood."
@@color:Pink;Rina@@: "Woo! Awesome! I totally needed those for my side-business...umm, building shelters for impoverished orphans. Anyway, hand over the 40 gold I deserve for letting you do the quest and we'll call it a day."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What? No, I did the quest. You're supposed to pay //me// 40 gold."
@@color:Pink;Rina@@: "Are you sure? Because I've been a guild quest desk clerk for a long time, and I'm pretty sure I know how these things work. I give you quests, you do quests and give me...oh, fine. Here's your 40 gold. And you can have some xp too I guess."
<<GainGold 40>>\
<<AwardXP 20 "quest">>\
<<elseif _WoodQty > 0>>\
@@color:Pink;Rina@@: "Hey, $PC[$CC][$PCname]. How's that tree-cutting coming along?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I only have _WoodQty logs, so not done yet. Just wanted to check in and see your lovely face."
@@color:Pink;Rina@@: "Daww...you're so sweet."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What do I have to do for this quest again?"
@@color:Pink;Rina@@: "Bring me back 10 wooden logs so i can carve a bunch of dil - I mean, so I can begin reconstruction of that orphanage we used to have that burned down."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any special trick to cutting down trees?"
@@color:Pink;Rina@@: "Nope, just have an axe with you and go walk into them. A copper axe can only cut low quality trees, but I only need low quality wood, so that's fine. If you want better wood you'll need a better axe or to get better at lumberjacking, but I'm only taking low quality wood here, so don't even worry about that right now."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Should I be selling wood? The forest seems to have endless trees. What's to stop me from simply grinding trees for all the gold I want?"
@@color:Pink;Rina@@: "Well, I mean...you //can// do that. But I recommend you think of it as a worst case backup option for people who haven't figured out the game very well. There are better options than grinding like that, and it shouldn't ever be neccesary. But if you get stuck somehow, the option is there."
<<endif>>\
<<elseif _FocusedQuest is 5>>\
<<if $PC[$CC][$PCgen] > $WORLD.quests[5].gen>>\
<<set $WORLD.quests[_FocusedQuest].state to "complete">>\
@@color:Pink;Rina@@: "Hello. Can I help you?"
<<if $WORLD.quests[5].reward > 50>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes, I'm the descendant of $PC[$CC][$PCancestor] and I'm here to collect the 100 gold reward for completing the retirement quest."
@@color:Pink;Rina@@: "Oh, I remember <<print $PC[$CC][$PCancestor]>>," she frowns. "Never seen anyone besides myself fight that hard over a lousy 50 extra gold."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I think it was the principal of the thing."
@@color:Pink;Rina@@: "I suppose. Anyway, here you go."
<<GainGold 100>>\
<<AwardXP 30 "quest">>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes, I'm the descendant of $PC[$CC][$PCancestor] and I'm here to collect the reward for completing the retirement quest."
@@color:Pink;Rina@@: "Oh, splendid," she nods. "Here's your 50 gold. Also, please accept this bonus 40 xp. If you didn't grind too much past level 3 before retiring, that should put you pretty close to where you were. By the way, only two quests left in the tutorial after this one."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Great, thank you."
<<GainGold 50>>\
<<AwardXP 40 "quest">>\
<<endif>>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So how do I retire again?"
@@color:Pink;Rina@@: "Go talk to Harmony at the Church of immaculate Rebirth. She can answer your questions better than I can."
<<endif>>\
<<elseif _FocusedQuest is 6>>\
<<set _TargetChar to "no">>\
<<for _DeathLoop to 0; _DeathLoop < 3; _DeathLoop++>>\
<<if ($PC[_DeathLoop][$PCstate] is "dead") or ($PC[_DeathLoop][$PCstate] is "lost")>>\
<<set _TargetChar to _DeathLoop>>\
<<if $PC[_DeathLoop][$PCsex] is "male">>\
<<set _TargetHeShe to "he">>\
<<else>>\
<<set _TargetHeShe to "she">>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _TargetChar is "no">>\
@@color:Pink;Rina@@: "Hey!" Rina looks you over. "You look alive."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So Rina, how exactly do I die? Losing to monsters just means I wake up back at the church. Nothing I do seems to hurt me very much."
@@color:Pink;Rina@@: "Wow, talk about first world problems. The simplest method is to starve to death. Just run around in circles without eating and that will do it eventually. Or if you'd like you could venture into the tower and look for traps. I suppose I should also mention that equipment stays on dead characters, so it might not be a mistake to stash all your gear and gold somewhere and die naked. It's possible to recover bodies and that's exactly what the next quest will have you do, but if you're not able to do that you can lose all your equipment when you die."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Wow, harsh."
@@color:Pink;Rina@@: "Yep, that's why this stuff is in the tutorial."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Still, shouldn't you have mentioned that before I took the quest?"
@@color:Pink;Rina@@: "Wow, look at the time! I'm due for a lunch break, gotta go, bye!"
<<else>>\
<<set $WORLD.quests[6].state to "complete">>\
@@color:Pink;Rina@@: "Hey!" Rina shuffles through her papers. "<<print $PC[_TargetChar][$PCname]>> over in character slot <<print _TargetChar +1>> is <<print $PC[_TargetChar][$PCstate]>>!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yep. The deed has been done."
@@color:Pink;Rina@@: "Great, here's some gold for the party you're going to throw instead of a funeral!"
<<GainGold 100>>\
<<AwardXP 40 "quest">>
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thanks. Anything else?"
<<if ($WORLD.quests[7].state is "inactive")>>\
@@color:Pink;Rina@@: "Yes, the Rescue quest should now be unlocked. I recommend that you do it right away. Definitely at least check it out before you have <<print $PC[_TargetChar][$PCname]>> reincarnate."
<<else>>\
@@color:Pink;Rina@@: "Well, ordinarily I'd recommend you go to the Rescue quest, but looks like you've already done it out of order somehow. So, looks like you're on your own.
<<endif>>\
<<endif>>\
<<elseif _FocusedQuest is 7>>\
<<set _WhoRessed to $WORLD.quests[7].harmony>>\
<<if _WhoRessed > -1>>\
<<set $WORLD.quests[_FocusedQuest].state to "complete">>\
<<set _HimHer to "her">>\
<<if $PC[_WhoRessed][$PCsex] is "male">>\
<<set _HimHer to "him">>\
<<endif>>\
<<if $CC is _WhoRessed>>\
@@color:Pink;Rina@@: "<<print $PC[$CC][$PCname]>>! You're looking well. Not very dead, I see. Congratulations!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thank you. It's nice to be back. So, any quest reward?"
@@color:Pink;Rina@@: "Well, ordinarily I'd prefer to give the reward to the person who completed the quest rather than the person it was done for, but I get my commission either way, so sure! Here you go!"
<<else>>\
@@color:Pink;Rina@@: "<<print $PC[$CC][$PCname]>>! I see that you've rescued <<print $PC[_WhoRessed][$PCname]>> and had _HimHer ressurected. Congratulations!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thank you. It's super awesome that death isn't permanent. So, any quest reward?"
@@color:Pink;Rina@@: "Hmm. You've been good to me. Doing all these quests and whatnot. I suppose I can give you something."
<<endif>>\
<<GainGold 100>>\
<<AwardXP 50 "quest">>\
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. Would you run me through how to complete this Rescue quest again?"
@@color:Pink;Rina@@: "First, you need a dead or lost character to rescue. At the moment you lack that. Living characters don't require rescue, and 'retired' characters are already in the graveyard and can't be recovered."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok."
@@color:Pink;Rina@@: "With that out of the way, go find them with a still-living character. You can see where they were 'last seen' on the main menu."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok."
@@color:Pink;Rina@@: "Once located, pick them up, take them to Harmony at the church of Immuculate Rebirth to be ressurected, at which point they become alive and playable again."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Nice. Ok."
@@color:Pink;Rina@@: "And then finally, come back to me and turn in the quest."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Great, thanks."
<<endif>>\
<<elseif _FocusedQuest is 8>>\
Not used
\
\
\
<!-- REPEATABLE QUESTS START HERE -->\
<<elseif _FocusedQuest is 10>>\
<!-- Overland hunt -->\
<<set _QTarget to $WORLD.RepeatableQuests[0].target>>\
<<set _Plural to setup.GetPluralOf(_QTarget)>>\
<<set _KillPTR to setup.MonNameToKillPTR(_QTarget)>>\
<<if $PC[$CC][$PCkills][_KillPTR] < $WORLD.RepeatableQuests[0].startat>>\
<!-- hack for if player retires with quest active -->\
<<set $WORLD.RepeatableQuests[0].startat to 0>>\
<<endif>>\
<<set _KillsNeeded to $WORLD.RepeatableQuests[0].need>>\
<<set _KillsSinceQuest to $PC[$CC][$PCkills][_KillPTR] - $WORLD.RepeatableQuests[0].startat>>\
<<if _KillsSinceQuest is 0>>\
@@color:Pink;Rina@@: "Doesn't look like you've killed any <<print _Plural>> yet."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yeah, I'm working on it."
<<elseif _KillsSinceQuest >= _KillsNeeded>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I think I'm done with that kill quest."
@@color:Pink;Rina@@: "Yep, looks like it. Here's you go!"
<<set $WORLD.RepeatableQuests[0].state to "complete">>\
<<set $WORLD.RepeatableQuests[0].lastupdate to setup.CurrentDayCount()>>\
<<set _GoldReward to _KillsNeeded * 10>>\
<<set _XPReward to _KillsNeeded * 5>>\
<<set _XPReward to _XPReward + _RepeatQuestBonus>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + _GoldReward>>\
<<AwardXP _XPReward "quest">>
<<set $PC[$CC][$PCmisc].repeatquests to $PC[$CC][$PCmisc].repeatquests + 1>>\
@@color:Gold;You have received <<print _GoldReward>> gold@@
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I've killed _KillsSinceQuest <<print _Plural>>."
@@color:Pink;Rina@@: "Good job. That still leaves <<print _KillsNeeded - _KillsSinceQuest>> to go."
<<endif>>\
<<elseif _FocusedQuest is 11>>\
<!-- Tower hunt -->\
<<set _QTarget to $WORLD.RepeatableQuests[1].target>>\
<<set _Plural to setup.GetPluralOf(_QTarget)>>\
<<set _KillPTR to setup.MonNameToKillPTR(_QTarget)>>\
<<if $PC[$CC][$PCkills][_KillPTR] < $WORLD.RepeatableQuests[1].startat>>\
<!-- hack for if player retires with quest active -->\
<<set $WORLD.RepeatableQuests[1].startat to 0>>\
<<endif>>\
<<set _KillsNeeded to $WORLD.RepeatableQuests[1].need>>\
<<set _KillsSinceQuest to $PC[$CC][$PCkills][_KillPTR] - $WORLD.RepeatableQuests[1].startat>>\
<<if _KillsSinceQuest is 0>>\
@@color:Pink;Rina@@: "Doesn't look like you've killed any <<print _Plural>> yet."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yeah, I'm working on it."
<<elseif _KillsSinceQuest >= _KillsNeeded>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I think I'm done with that kill quest."
@@color:Pink;Rina@@: "Yep, looks like it. Here's you go!"
<<set $WORLD.RepeatableQuests[1].state to "complete">>\
<<set $WORLD.RepeatableQuests[1].lastupdate to setup.CurrentDayCount()>>\
<<set _GoldReward to _KillsNeeded * 20>>\
<<set _XPReward to _KillsNeeded * 10>>\
<<set _XPReward to _XPReward + _RepeatQuestBonus>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + _GoldReward>>\
<<AwardXP _XPReward "quest">>\
<<set $PC[$CC][$PCmisc].repeatquests to $PC[$CC][$PCmisc].repeatquests + 1>>\
@@color:Gold;You have received <<print _GoldReward>> gold@@
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I've killed _KillsSinceQuest <<print _Plural>>."
@@color:Pink;Rina@@: "Good job. That still leaves <<print _KillsNeeded - _KillsSinceQuest>> to go."
<<endif>>\
<<elseif _FocusedQuest is 12>>\
<!-- Monster Parts -->\
<<set _TargetABCD to $WORLD.RepeatableQuests[2].target>>\
<<set _TargetA to _TargetABCD[0]>>\
<<set _TargetB to _TargetABCD[3]>>\
<<set _DesiredQTY to _TargetABCD[2]>>\
<<set _PlayerTargetPTR to setup.HasQuestMonsterParts(_TargetA, _TargetB)>>\
<<set _PlayerTargetQTY to 0>>\
<<if _PlayerTargetPTR > -1>>\
<<set _PlayerTargetQTY to $PC[$CC][$PCinven][_PlayerTargetPTR][2]>>\
<<endif>>\
<<if _PlayerTargetPTR > -1>>\
<<set _PlayerTargetQTY to $PC[$CC][$PCinven][_PlayerTargetPTR][2]>>\
<<endif>>\
<<DescribeItem _TargetABCD>>\
\
<<if _PlayerTargetQTY is 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. What was that monster parts quest for again?"
@@color:Pink;Rina@@: "We're looking to acquire <<print $ItemPoke.fullname>>."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thanks. I'm on it."
<<elseif _PlayerTargetQTY >= _DesiredQTY>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I have <<print $ItemPoke.fullname>> for you."
@@color:Pink;Rina@@: "Well, it's not for ''me''. I'm just the middleman here. But thanks, I'll pass this on to the buyer. Anything else I can do for you?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Could I have my reward?"
@@color:Pink;Rina@@: "...reward?" she blinks at you in confusion.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "For turning in the quest. You're supposed to pay me, remember?"
@@color:Pink;Rina@@: "Oh, that!" she laughs nervously, looks around desperately for an exit, fails to find one, and sighs. "Oh, alright. Here you go."
\
<<set $PC[$CC][$PCinven][_PlayerTargetPTR][2] to $PC[$CC][$PCinven][_PlayerTargetPTR][2] - _DesiredQTY>>\
<<if $PC[$CC][$PCinven][_PlayerTargetPTR][2] < 1>>\
<<set $PC[$CC][$PCinven][_PlayerTargetPTR] to [0,0,0,0,0]>>\
<<endif>>\
<<set $WORLD.RepeatableQuests[2].state to "complete">>\
<<set $WORLD.RepeatableQuests[2].lastupdate to setup.CurrentDayCount()>>\
<<set _XPReward to $WORLD.RepeatableQuests[2].xpreward>>\
<<set _XPReward to _XPReward + _RepeatQuestBonus>>\
<<set _GoldReward to $WORLD.RepeatableQuests[2].goldreward>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + _GoldReward>>\
<<AwardXP _XPReward "quest">>
<<set $PC[$CC][$PCmisc].repeatquests to $PC[$CC][$PCmisc].repeatquests + 1>>\
@@color:Gold;You have received <<print _GoldReward>> gold@@
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina."
@@color:Pink;Rina@@: "Hey, <<print $PC[$CC][$PCname]>>. How's that hunt for <<print $ItemPoke.fullname>> coming along?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I have _PlayerTargetQTY so far."
@@color:Pink;Rina@@: "Well, hurry up! the sooner you turn this in, the sooner I can collect my commission for all your hard work."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'm glad you have your priorties in order."
@@color:Pink;Rina@@: "Thanks! Me too!"
<<endif>>\
<<elseif _FocusedQuest is 13>>\
<!-- Resource Collections -->\
<<set _DesiredQTY to $WORLD.RepeatableQuests[3].need>>\
<<set _TargetA to $WORLD.RepeatableQuests[3].target>>\
<<set _TargetName to "wooden logs">>\
<<set _TargetValue to 2>>\
<<set _XPReward to 10>>\
<<if _TargetA is 120>>\
<<set _TargetName to "hardwood logs">>\
<<set _TargetValue to 3>>\
<<set _XPReward to 20>>\
<<elseif _TargetA is 121>>\
<<set _TargetName to "steelwood">>\
<<set _TargetValue to 4>>\
<<set _XPReward to 30>>\
<<elseif _TargetA is 122>>\
<<set _TargetName to "faerie wood">>\
<<set _TargetValue to 5>>\
<<set _XPReward to 40>>\
<<elseif _TargetA is 138>>\
<<set _TargetName to "cactus">>\
<<set _TargetValue to 4>>\
<<set _XPReward to 30>>\
<<endif>>\
\
<<set _PlayerWoodPTR to setup.HasItemA(_TargetA)>>\
<<set _PlayerWoodQTY to 0>>\
<<if _PlayerWoodPTR > -1>>\
<<set _PlayerWoodQTY to $PC[$CC][$PCinven][_PlayerWoodPTR][2]>>\
<<endif>>\
\
<<if _PlayerWoodQTY is 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. How much of what type of wood did you need again?"
@@color:Pink;Rina@@: "We're looking to acquire _DesiredQTY <<print _TargetName>>."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Thanks. I'm on it."
<<elseif _PlayerWoodQTY gte _DesiredQTY>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. Here's that _DesiredQTY <<print _TargetName>> you wanted."
@@color:Pink;Rina@@: "<<print either("Well, it was the guild that wanted it, not me. But thanks anyway. Here's your reward.","Thanks. Here's your reward.","Funny thing, I actually woke up this morning hoping I'd get a huge delivery of wood. This isn't quite what I had in mind, but I guess it will do.")>>\
\
<<set $PC[$CC][$PCinven][_PlayerWoodPTR][2] to $PC[$CC][$PCinven][_PlayerWoodPTR][2] - _DesiredQTY>>\
<<if $PC[$CC][$PCinven][_PlayerWoodPTR][2] < 1>>\
<<set $PC[$CC][$PCinven][_PlayerWoodPTR] to [0,0,0,0,0]>>\
<<endif>>\
<<set $WORLD.RepeatableQuests[3].state to "complete">>\
<<set $WORLD.RepeatableQuests[3].lastupdate to setup.CurrentDayCount()>>\
<<set _TotalGold to _TargetValue * _DesiredQTY>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + _TotalGold>>\
<<set $PC[$CC][$PCmisc].repeatquests to $PC[$CC][$PCmisc].repeatquests + 1>>\
<<set _XPReward to _XPReward + _RepeatQuestBonus>>\
<<AwardXP _XPReward "quest">>
@@color:Gold;You have received <<print _TotalGold>> gold@@
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I have <<print _PlayerWoodQTY>> <<print _TargetName>>. Can you accept a partial turn in?"
@@color:Pink;Rina@@: "Unfortunately no, I'm only authorized to accept receipt of the full quantity of <<print _DesiredQTY>>."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Alright. So I guess I need <<print _DesiredQTY - _PlayerWoodQTY>> more."
@@color:Pink;Rina@@: "<<print either("I'm feeling too lazy to double check your math, but that sounds about right, yeah.","Something like that.","What, you think I got this job because I'm crazy good at math? Just go bring me the total amount, whatever that works out to.")>>"
<<endif>>\
\
\
\
<<else>>\
Unrecognized quest: $WORLD.datapasser[1]
<<endif>>\
\
<<set _Guildmaster to true>>\
<<for _i to 0; _i < $WORLD.quests.length; _i++>>\
<<if $WORLD.quests[_i].state is "complete">><<else>>\
<<set _Guildmaster to false>>\
<<endif>>\
<</for>>\
<<if _Guildmaster is true>>\
<<AwardAchievement "Guildmaster">>\
<<endif>>\
<<if $PC[$CC][$PCmisc].repeatquests > 19>>\
<<AwardAchievement "Grinder">>\
<<endif>>\
<!-- ************ allow abandon quest ********* -->\
<<if _FocusedQuest > 9>>\
<<if $WORLD.RepeatableQuests[_FocusedQuest -10].state is "active">>\
<hr>
<span id="KeypWest">\
<<link "a) Abandon this quest" "Guild">>
<<set $WORLD.datapasser to ["abandon quest", _FocusedQuest]>>\
<</link>>\
</span>\
<<endif>>\
<<endif>>\
\
<<elseif $WORLD.datapasser[0] is "abandon quest">>\
<<set _FocusedQuest to $WORLD.datapasser[1] - 10>>\
<<set $WORLD.RepeatableQuests[_FocusedQuest].state to "complete">>\
<<set $WORLD.RepeatableQuests[_FocusedQuest].lastupdate to setup.CurrentDayCount()>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. I think I'd like to abandon this quest."
@@color:Pink;Rina@@: "What?" she sits up and blinks at you. "Why? Do you have any idea how much money I'll lose in commissions if you do that?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sorry, but it's just too difficult. Give it to somebody else and maybe I'll try again later."
@@color:Pink;Rina@@: "Unreliable aventurers," she slumps down in her chair, counting down on her fingers and sighing.
<<elseif $WORLD.datapasser[0] is "confirmed outro">>\
\
<<else>>\
<<CenterPic "guild.jpg">>
<<if $PC[$CC][$PCsex] is "male">>\
<<set _RinaTalk to random(1,20)>>\
<<if _RinaTalk is 1>>\
@@color:Pink;Rina@@: "What can I do for you? Please don't say blowjob. That joke gets old fast."
<<elseif _RinaTalk < 9>>\
@@color:Pink;Rina@@: "How can I help you?"
<<else>>\
@@color:Pink;Rina@@: "What can I do for you?"
<<endif>>\
<<else>>\
<<set _RinaTalk to random(1,2)>>\
<<if _RinaTalk is 1>>\
@@color:Pink;Rina@@: "Hello, Miss! What can I do for you?"
<<else>>\
@@color:Pink;Rina@@: "Hello. How can I help you?"
<<endif>>\
<<endif>>\
<<endif>>\
\
\
\
<<if _AllowQuestLinks is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>
</span>\
<<if $WORLD.MainQuest[0].state is "inactive">>\
<span id="KeypT">\
<<link "t) Unlock the Tower" "Guild">>
<<set $WORLD.datapasser to ["quest query", "q"]>>\
<</link>>\
</span>\
<<endif>>\
\
\
<!-- process unlocks after completions -->\
<<if ($WORLD.church is 1) and ($WORLD.quests[3].state is "inactive")>>\
<<if $PC[$CC][$PChtze] > 2>>\
<<set $WORLD.quests[3].state to "avail">>\
<<endif>>\
<<endif>>\
<<if ($WORLD.quests[3].state is "inactive")>>\
<<if ($WORLD.quests[2].state is "complete")>>\
<<set $WORLD.quests[3].state to "avail">>\
<<endif>>\
<<endif>>\
<<if ($WORLD.quests[4].state is "inactive")>>\
<<if ($WORLD.quests[1].state is "complete")>>\
<<set $WORLD.quests[4].state to "avail">>\
<<endif>>\
<<endif>>\
<<if ($WORLD.quests[5].state is "inactive") and ($PC[$CC][$PClevel] > 2)>>\
<<set $WORLD.quests[5].state to "avail">>\
<<endif>>\
<<if ($WORLD.quests[6].state is "inactive") and ($WORLD.quests[5].state is "complete")>>\
<<set $WORLD.quests[6].state to "avail">>\
<<endif>>\
<<if ($WORLD.quests[7].state is "inactive") and ($WORLD.quests[6].state is "complete")>>\
<<set $WORLD.quests[7].state to "avail">>\
<<endif>>\
\
<hr>\
<span id="GuildButtons"><<ShowGuildButtons>></span>
\
<span id="GuildQuests">\
<<if $GuildTemp is "tutorial">>\
<<ShowGuildTutorialQuests>>\
<<elseif $GuildTemp is "repeatable">>\
<<ShowGuildRepeatableQuests>>\
<<else>>\
Error in GuildTemp: $GuildTemp
<<endif>>\
</span>\
<<endif>>\
<<widget "ShowForestNavControls">>\
<<set _px to $PC[$CC][$PCfx]>>\
<<set _py to $PC[$CC][$PCfy]>>\
<<set _pz to $PC[$CC][$PCfz]>>\
\
<<if $PC[$CC][$PChpcur] < 1>>\
<<if $PC[$CC][$PChunger] < 1>>\
<<set $WORLD.diedby to "Starved to death">>\
@@color:Red;You have starved to death!@@
It's unfortunate, but you do need to eat. If food is too expensive, you could try carrying around a butcher knife to carve up some of those monsters you keep fighting. Of course, that probably has side effects.\
<<AwardAchievement "Starve to death">>\
<<else>>\
<<set $WORLD.diedby to "Ran out of health while travelling">>\
@@color:Red;You have died!@@
@@color:Yellow;Debug: how did this happen?@@
<<endif>>\
<span id="KeypSpace">\
<<link "space) Continue" "Death">>
<</link>>\
</span>
<<elseif $AllowNav is true>>\
<!-- avoid array out of bounds -->\
<<set _n to 0>>\
<<set _e to 0>>\
<<set _s to 0>>\
<<set _w to 0>>\
<<set _AllowMoveEast to false>>\
<<set _AllowMoveWest to false>>\
<<if _px is 0>>\
<<set _e to $ForestMap[_px +1][_py]>>\
<<set _AllowMoveWest to true>>\
<<elseif _px >= $WORLD.ForestDims[0]>>\
<<set _w to $ForestMap[_px -1][_py]>>\
<<set _AllowMoveEast to true>>\
<<else>>\
<<set _e to $ForestMap[_px +1][_py]>>\
<<set _w to $ForestMap[_px -1][_py]>>\
<<endif>>\
<<if _py is 0>>\
<<set _s to $ForestMap[_px][_py +1]>>\
<<set _n to 9999>>\
<<elseif _py >= $WORLD.ForestDims[1] -1>>\
<<set _n to $ForestMap[_px][_py -1]>>\
<<set _s to 9999>>\
<<else>>\
<<set _n to $ForestMap[_px][_py -1]>>\
<<set _s to $ForestMap[_px][_py +1]>>\
<<endif>>\
\
<!-- ROCKS AND TREE CUTTING -->\
<<if (_n > 299) and (_n < 400)>>\
<<set _n to "blocked">>\
<<elseif (_n > 99) and (_n < 110)>>\
<<if parseInt(_n) > parseInt($WORLD.TreeCutter)>>\
<<set _n to "need a stronger axe">>\
<<else>>\
<<set _n to "cut">>\
<<endif>>\
<<endif>>\
<<if (_e > 299) and (_e < 400)>>\
<<set _e to "blocked">>\
<<elseif (_e > 99) and (_e < 110)>>\
<<if _e > $WORLD.TreeCutter>>\
<<set _e to "need a stronger axe">>\
<<else>>\
<<set _e to "cut">>\
<<endif>>\
<<endif>>\
<<if (_s > 299) and (_s < 400)>>\
<<set _s to "blocked">>\
<<elseif (_s > 99) and (_s < 110)>>\
<<if _s > $WORLD.TreeCutter>>\
<<set _s to "need a stronger axe">>\
<<else>>\
<<set _s to "cut">>\
<<endif>>\
<<endif>>\
<<if (_w > 299) and (_w < 400)>>\
<<set _w to "blocked">>\
<<elseif (_w > 99) and (_w < 110)>>\
<<if _w > $WORLD.TreeCutter>>\
<<set _w to "need a stronger axe">>\
<<else>>\
<<set _w to "cut">>\
<<endif>>\
<<endif>>\
<!-- END TREE CUTTING -->\
\
@@color:LightGreen;Navigation@@
<<if _n is 9999>>\
North - edge of map
<<elseif _n is "cut">>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) Chop down tree">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 10>>
<<set _py to _py -1>>
<<set $PC[$CC][$PCfy] to _py>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _n is "need a stronger axe">>\
North - need a stronger axe
<<elseif _n is "blocked">>\
North - blocked
<<else>>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) North">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<set _py to _py -1>>
<<set $PC[$CC][$PCfy] to _py>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<endif>>\
<<if _AllowMoveEast is true>>\
<<if _pz < 2>>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) Return to town" "TownSquare">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<endif>>\
<</link>>\
</span></span>
<<else>>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) Head back towards town" "Forest">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<set $WORLD.datapasser to "reset forest">>
<<set $PC[$CC][$PCfx] to 0>>
<<set $PC[$CC][$PCfz] to $PC[$CC][$PCfz] -1>>
<<endif>>\
<</link>>\
</span>
<<endif>>\
<<elseif _e is "cut">>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) Chop down tree">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 10>>
<<set _px to _px + 1>>
<<set $PC[$CC][$PCfx] to _px>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _e is "need a stronger axe">>\
East - need a stronger axe
<<elseif _e is "blocked">>\
East - blocked
<<else>>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) East">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<set _px to _px + 1>>
<<set $PC[$CC][$PCfx] to _px>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<endif>>\
<<if _s is 9999>>\
South - edge of map
<<elseif _s is "cut">>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) Chop down tree">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 10>>
<<set _py to _py + 1>>
<<set $PC[$CC][$PCfy] to _py>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _s is "need a stronger axe">>\
South - need a stronger axe
<<elseif _s is "blocked">>\
South - blocked
<<else>>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) South">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<set _py to _py + 1>>
<<set $PC[$CC][$PCfy] to _py>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<endif>>\
<<if _AllowMoveWest is true>>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "d) Head deeper into the forest">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<set $WORLD.datapasser to "reset forest">>
<<set $PC[$CC][$PCfx] to $WORLD.ForestDims[0]>>
<<set $PC[$CC][$PCfz] to $PC[$CC][$PCfz] +1>>
<<script>>Engine.play("Forest");<</script>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _w is "cut">>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) Chop down tree">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 10>>
<<set _px to _px - 1>>
<<set $PC[$CC][$PCfx] to _px>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _w is "need a stronger axe">>\
West - need a stronger axe
<<elseif _w is "blocked">>\
West - blocked
<<else>>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) West">>
<<if $NoDoubleKeypress is 0>>\
<<set $NoDoubleKeypress to 1>>
<<AdvanceTime 1>>
<<set _px to _px - 1>>
<<set $PC[$CC][$PCfx] to _px>>\
<<ForestMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "ForestMoveRefresh">>\
<<set _px to $PC[$CC][$PCfx]>>\
<<set _py to $PC[$CC][$PCfy]>>\
<<set _pz to $PC[$CC][$PCfz]>>\
<<if (_px > -1) and (_py > -1) and (_px < 15) and (_py < 7)>>\
<<replace "#right-img">><</replace>>\
\
\
\
<!-- did we chop down a tree? -->\
<<set _CosmeticText to "">>\
<<set _WoodType to $ForestMap[_px][_py]>>\
<<set _AAA to -1>>\
<<if _WoodType is 104>>\
<<set _WoodType to "the faerie wood">>\
<<set _AAA to 122>>\
<<elseif _WoodType is 103>>\
<<set _WoodType to "some steelwood">>\
<<set _AAA to 121>>\
<<elseif _WoodType is 102>>\
<<set _WoodType to "some hardwood">>\
<<set _AAA to 120>>\
<<elseif (_WoodType is 101) or (_WoodType is 100)>>\
<<set _WoodType to "the wood">>\
<<set _AAA to 105>>\
<<else>>\
<!-- not a tree -->\
<<endif>>\
<<if _AAA > -1>>\
<<set $ForestMap[_px][_py] to 99>>\
<<set _WoodQTY to 1>>\
<<if (setup.PtrToClass($PC[$CC][$PCclass]) is "lumberjack") and ($PC[$CC][$PClevel] > 6)>>\
<<set _WoodQTY to 2>>\
<<endif>>\
<<set _foo to setup.GiveItem($CC, [_AAA, 0, _WoodQTY,0,0])>>\
<<set _CosmeticText to "@@color:LightGreen;You cut down the tree and add " + _WoodType + " to your inventory@@">>\
<<endif>>\
\
<<set _throwaway to setup.DrawForestMap64(_px, _py, _pz, 64)>>\
<<if _throwaway is 1>>\
<<else>>\
<<script>>alert("Error: DrawForestMap64 failed to complete");<</script>>\
<<endif>>\
\
<<set $WORLD.turnssincecombat to $WORLD.turnssincecombat +1>>\
<<replace "#time">><<ShowTime>><</replace>>\
<<ShowHunger>>\
\
<<if $DebugMode is true>>\
<<replace "#debug">>\
@@color:Gold;Debug info@@
fx,fy,fz: <<print $PC[$CC][$PCfx]>>, <<print $PC[$CC][$PCfy]>>, <<print $PC[$CC][$PCfz]>>
Tile: <<print $ForestMap[_px][_py]>>
Theme: <<print $WORLD.ForestTheme>>
Since Last combat: <<print $WORLD.turnssincecombat>>
Treecutter: <<print $WORLD.TreeCutter>>
<</replace>>\
<<endif>>\
\
<<set _ForestEventNow to $ForestMap[_px][_py]>>\
\
\
<<set _HerbTextOutputHack to 0>>\
\
<<if _ForestEventNow is 110>>\
<<include "EventSmith">>\
<<elseif _ForestEventNow is 111>>\
<<set _CosmeticText to "@@color:Yellow;Dev note@@: This is the last zone with meaningful forest content. You can delve deeper, but there are no further events in later zones.">>\
<<elseif _ForestEventNow is 112>>\
<<include "PlayerCorpse">>\
<<elseif _ForestEventNow is 113>>\
<<include "ForestCave">>\
<<elseif _ForestEventNow is 300>>\
<<set _CosmeticText to "Boulders should block movement">>\
<<elseif (_ForestEventNow > 0) and (_ForestEventNow < 10)>>\
<<set _Flowers to _ForestEventNow -1>>\
<<set _FlowerItem to [_ForestEventNow + 599, 0, 1, 0, 0]>>\
<<replace "#roomdesc">><</replace>>\
<<set _HerbNames to ["daisies","skretch weed","sunflower","roses","goose berries","brown mushrooms","azaleas","caerulus blossom","unnamed flower 9","unnamed flower 10"]>>\
<<if $WORLD.SeleneQuests[_Flowers] is 1>>\
<<set $WORLD.SeleneQuests[_Flowers] to 2>>\
<<set $ForestMap[_px][_py] to 0>>\
<<set _throwaway to setup.GiveItem($CC, _FlowerItem)>>
<<set _CosmeticText to "@@color:LightGreen;New herb found!@@" + "<br>You pick up a sample of @@color:Aqua;" + _HerbNames[_Flowers] + "@@ for Selene. " + either("Hopefully it will be useful.","Wonder what she'll be able to make from it?","Hopefully this makes something good.")>>\
<<elseif $WORLD.SeleneQuests[_Flowers] > 1>>\
<<set $ForestMap[_px][_py] to 0>>\
<<set _throwaway to setup.GiveItem($CC, _FlowerItem)>>\
<<if setup.PlayerHasPerk("Herbalist") is true>>\
<<set _HerbTextOutputHack to 1 + (Math.trunc(_Flowers / 2))>>\
<<set _HerbTextOutputHack to 1 + _Flowers>>\
<<set _CosmeticText to "You pick some @@color:Aqua;" + _HerbNames[_Flowers] + "<br>">>\
<<else>>\
<<set _CosmeticText to "You pick some @@color:Aqua;" + _HerbNames[_Flowers]>>\
<<endif>>\
<<else>>\
<<set _CosmeticText to "Some " + _HerbNames[_Flowers]>>\
<<endif>>\
<<elseif (_ForestEventNow is 0) or (_ForestEventNow is 99)>>\
<<set _ModdedTurnsSinceCombat to $WORLD.turnssincecombat - $PC[$CC][$PCmorphQTY].ratkin>>\
<<if _ModdedTurnsSinceCombat > 20>>\
<<if random(20,50) < _ModdedTurnsSinceCombat>>\
<<set $AllowNav to false>>\
<<replace "#roomdesc">><</replace>>\
<<replace "#eventtext">>\
<<if ($WORLD.hour > 20) or ($WORLD.hour < 6)>>
<<set $ForceMon to ["random", "random", (_pz +1)]>>\
<<GetMon $ForceMon>>\
@@color:Orange;Night time encounter: random <<print $Mon.name>>!@@
<<else>>\
<<set $ForceMon to ["random", "random"]>>\
<<GetMon $ForceMon>>\
@@color:Gold;Monster encounter: random <<print $Mon.name>>!@@
<<endif>>\
<<set $NoInventoryHack to 1>>\
<span id="KeypOne">\
<<link "1) Fight" "Combat">>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<<unset $NoInventoryHack>>
<</link>>\
</span>\
<<set _DisengageChance to setup.DisengageChance()>>\
<<if _DisengageChance > 0>>\
<br><<if random(1, 100) < _DisengageChance>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Forest">>
<<unset $NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<else>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Combat">>
<<unset $NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<endif>>\
<<endif>>\
<<if $DebugMode>>\
<hr>\
@@color:Gold;Debug info@@
(Random encounter)
Turns since last combat: <<print $WORLD.turnssincecombat>>
'Force' data being set: $ForceMon
<<endif>>\
<</replace>>\
<<else>>\
<<set $AllowNav to true>>\
<<replace "#eventtext">><</replace>>\
<<endif>>\
<<else>>\
<<set $AllowNav to true>>\
<<replace "#roomdesc">><</replace>>\
<<replace "#eventtext">><</replace>>\
<<endif>>\
<<else>>\
<<replace "#eventtext">>\
@@color:Yellow;Error in ForestMoveRefresh: _ForestEventNow@@
<</replace>>\
<<endif>>\
<<replace "#roomdesc">><<print _CosmeticText>><<if _HerbTextOutputHack > 0>><<AwardXP _HerbTextOutputHack "herb">><<endif>><</replace>>\
<<replace "#navcontrols">><<ShowForestNavControls>><</replace>>\
<<else>>\
<<set _px to $PC[$CC][$PCfx] to 0>>\
<<set _py to $PC[$CC][$PCfy] to 0>>\
<<replace "#roomdesc">>@@color:Red;Out of bounds error in forest: resetting position@@<</replace>>\
<<endif>>\
<<set $NoDoubleKeypress to 0>>
<</widget>>\
<<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
$PC[$CC][$PCsexACTS].bjgiven
$PC[$CC][$PCsexACTS].bjreceived
$PC[$CC][$PCsexACTS].pussylickreceived
$PC[$CC][$PCsexACTS].vaginalreceived
$PC[$CC][$PCsexACTS].analreceived
$PC[$CC][$PCsexACTS].semengiven
$PC[$CC][$PCsexACTS].semenreceived
$PC[$CC][$PCsexACTS].milked
<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if ($Mon.penis is true)>>\
<<if $Mon.sex is "male">>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Collapsing off your feet, the cat-man darts in and catches you before you hit the ground.
"You must remain unblemished, my sweet," he whispers into your ear, then trails his tongue down your neck. It would almost be erotic if not for the cat-sandpapery feel of his tongue scraping its way <<if _pcboobs > 0>>between your breasts<<else>>down your chest<<endif>>. You're about to speak up about it when he zeros in on your nipples. The sensation of cat-tongue on your delicate flesh is...unique.
It's a bit of a relief when he stops, but rather than let you go he presses youface down into the ground and yowls loudly into the air. It's catlike, in a way. As for the thick, meary dick you feel pressing between your thighs, that's more like an elephant trying to fit into a prom dress. You want desperately to look between your legs to see just how biugit is, but the cat-man dwarfs you in size and with his enormous weight bearing down on you from above, it's all you can do it breath.
He lets up slightly when his cock finds it mark at your pussy, but he can't quite fit it in. Rather than thrusting withhis hips, instead he grips you by the waist and starts bodily moving you up and down to impale your pussy with his rod. Pre-cum begins to flow, and after several more attempts he finally manages to fit it inside you.
<<FemaleVirginity "a big, hunky cat-man">>\
"Meow," he whispers huskily, moving you as effortlessly as a ragdoll while picking up the pace.
Struggling to keep up, you find yourself alternating between tensing up to maintain some semblance of control and trying to relax to make his cock easier to take. It's several minutes of perpetually feeling like you're on the verge of falling before he wraps both arms around your stomach and with a tremendous shove, plants you down on his cock while he paints your insides with cum.
"Meow," he whisper again into your ear, more throatily this time while you squirm awkwardly but can't extricate yourself from either his grip around you or from his cock inside you. Eventually you give and relax, letting yourself simply be held by him. Letting your eyes close and feel his breathing through his manly chest.
Eventually his cock begins to recede, and it slowly slides out of you like a rope unwinding.
And then he wanders off.
"Meow."
<<else>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
The cat-man watches calmly as you collapse to the groudn at his feet. Struggling to stand, you can offer no resistance as he comes over and sniffs at your rear end.
"Meow?" he asks, clearly uncertain at not finding what he was looking for.
After a tense moment he shrugs, then casually picks you up with one arm and sets you on your knees in front of him. In front of...oh.
His cock is nearly as long as your arm, and you don't even want to think about how thick it is.
"Meow," he states calmly, gazing into your eyes with a look that brooks no question of what he has in mind. Almost but not qutie ready to accept the inevitable, you open your mouth just a bit, then stop at the sheer impossibility of the task before you. Taking a deep breath you at least //try// to fit his cock into your mouth, but it only gets as far as the tip brushing across your teeth. At first you're concerned over his possible reaction to that, but as your tongue rests along the underside of the giant at your gates, you notice that his entire cock is covered by bristly hairs that give it a sandpapery feel.
Unable to go any further on your own, the cat-man grips you by the head and //thrusts// his cock past your teeth with pressure so tight that you worry for your jaw. And then it gets stuck.
Apparently the cat-bristles on his cock go only one way, and his dick is now stuck in your mouth and doesn't want to come out. Breathing through your nose in a panic, you end up losing control completely as he grips both hands on the back of your head like a barbell he's lifting, and thrusts his cock in and out of your mouth on only the wiggle-room allows by the looseness of his flesh.
Minutes pass as he humps the tip of his cock against the back of your throat, allowing you only brief, occasional moments to breath. Fortunately he climaxes on an exhale, and after you swallow what must be a half a cup of his seed there's still enough left to lubricate his cock well enough to pull it out.
"Meow," he whispers as if to say 'that was adequate,' then turns away from you to lick himself clean.
<<endif>>\
<<else>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
"//Meow!//" the futa-cat licks her lips eagerly as she looks over your fallen form.
With her cock fully erect, she roughly pushes you onto your back, then climbs between your legs and on top of you.
"I want to look you in the eyes when I fuck you" she purrs, her eyes half a foot from your own as she reaches down with one hand to grab her own cock and stick it ungently at your entrance. You can barely more than struggle as she slowly slides her futa-cock half an inch inside you.
"Mmm, yes," she purrs. "Savor every inch."
Closing your eyes but still feeling her hot breath on your face, your focus drawn completely to her rock-hard cock gently but insistently probing another half inch inside you, then drawing back. Making you wait. Resting just the tip of her cock maddeningly between your labial lips. Not thrusting. Just sitting there. It's a little annoying. Seriously, what's taking so long? You open your eyes back up to see what...oh.
"Yes, " she grins. "Let me see it in you eyes."
Thrusting back inside of you, perhaps an inch and a half this time, you can't help but feel a nagging, yearning, need growing within you. Can't help but try to push your hips back up against her to feel her glorious cock you up inside. But once again she draws back, making you wait. Looking up into her eyes, nearly pleading for her to take you, she gives you just an inch. Then pulls back. Then an inch and a half. Then two. Then without warning she ejaculates, the majority of her penis having never made it inside you.
<<FemaleVirginity "a futa catgirl control freak">>\
"Meow," she purrs with a look of extreme satisfaction as she gets up and walks away, leaving you frustrated and wanting.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven + 1>>\
"//Meow!//" the futa-cat licks her lips eagerly as she looks over your fallen form.
You struggle to stand back on your feet, but she playfully knocks you onto your back and then sits crouched on her feet with an anticipatory look on her face as if she's waiting for you to try to stand again.
"I'll stay down," you sigh.
"Aww," she pouts, then grabs her cock in one hand and points it at you. "I guess I'll just have to have my fun a different way.
Concerned with where this is going, you open your mouth to object and she takes advantage of that leap onto your chest and shove her cock in your mouth.
"Nyaa!" she giggles. "So eager!"
You try to turn your head, but injured as you are with her entire weight on your chest there's no escaping. Reluctantly and not really knowing what you're doing, you start to suck her dick hoping if you get her off she'll at least let you live.
"More tongue, nyan!" she come up on her knees and starts to pump in and out while you gasp for air between thrusts. "Make me cum!"
Now thrusting her cock halfway down your throat, it doesn't take much from you before she cums, bypassing your mouth entirely and planting her spunk deep inside you.
"Nyyaaaaannn!!!!!" she climaxes, then grins at you with half-lidded eyes. "You're really bad at this, you know?"
You try to mumble a reply around her still-erect cock, but nothing intelligible come out. Rather than pulling out, instead she massages her fingers through your hair and waits for her erection to recede. It's still a good six inches long even flaccid, and when she does finally pull out she does it slowly so the taste and aroma cat semen fills your nose and tongue.
"Goodbye, come again!" she giggles, then wipes her cock off on your chest and dashes off into the woods.
<<endif>>\
<<endif>>\
<<elseif $Mon.pussy is true>>\
<<if _pcpenis > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven + 1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
You collapse to the ground at the feet of the cat-girl. Struggling but failling to stand, you hesitantly look up
"What?" she asks, standing there looking at you.
"So what happens now?" you ask, while she just tilts her head and keeps looking at you. "Are we going to, uhh...you know?"
"Baka," she rolls her eyes. "It's not like I like you like that."
"Hmm, ok," you shrug, climbing back to your feet at last. "In that case I'll just-"
"Who said you could leave?!?!" she snarls, pouncing onto your chest and knocking you onto your back. "If you think you're going anywhere, then I'm going to put that measly little dick of yours to good use right now!"
Too startled to object, you hold up your hands trying to defend yourself as she tears off your clothing and jams herself dry onto your dick. You're not even hard, and she's clearly not lubrciated enough to be very into it either, but that doesn't stop her as she glares into your eyes and repeatedly thrusts herself onto your cock. Before long you find yourself turned on and erect, and with a small cry release a spurt of semen into her in climax.
<<MaleVirginity "a tsundere cat-girl">>\
"Hmph," she mocks you with her eyes. "Serves you right."
She then immediately turns her backs to you and begins licking herself clean.
<<else>>\
Falling to your knees, you look up at the cat-girl standing before you. Unsure of her intent, you steel your resolve as she walks over to you and...pats you between the legs?
"You're not a boy," she points out, still patting between your legs with a frown.
"Umm, yes?" you agree. "I could still lick your pussy if you'd like. You did win the fight."
"Not interested," she shrugs, then turns and walks away.
Feeling slightly insulted, you struggle to return to your feet, but instead simply pass out.
<<endif>>\
<<else>>\
@@color:Red;error in cat defeat: ($Mon.penis, _pcpenis)@@
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","cat"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<widget "DescribeItem">>\
<<silently>>\
<<set _di to $args[0]>>\
\
<<set _iname to "error?">>\
<<set _equippable to false>>\
<<set _mindam to 0>>\
<<set _maxdam to 0>>\
<<set _attacktype to "">>\
<<set _armor to 0>>\
<<set _quantity to 0>>\
<<set _tooleffect to 0>>\
<<set _material to "">>\
<<set _hands to 0>>\
<<set _slot to -1>>\
<<set _flirt to 0>>\
<<set _restrict to "none">>
<<set _stackable to false>>
<<set _price to 0>>
<<set _foodval to 0>>
<<set _bang to false>>
<<set _forcename to "">>
<!-- slots
1 head/heml
2 neck/amulet
3 chest
4 cloak
5 arms/equipped
6 pairs of gloves
7 sets of fingers
8 waist
9 pairs of legs
10 pairs of feet
-->
\
<!-- tool effects
1=rope
2=cut meat/string
3=cut wood
4=lockpick
5=bash lock
6=available
7=dildo
8= holy symbol
9=liquid container
10=eat
11=drink
12=spellbook
13=cosmetic read text
-->\
<<if _di[0] is 0>>\
<<set _iname to "none">>\
<<elseif _di[0] is 100>>\
<<set _iname to "coil~ of rope">>\
<<set _tooleffect to 1>>\
<<set _stackable to true>>
<<set _price to 10>>
<<elseif _di[0] is 101>>\
<<set _iname to "small hammer">>\
<<set _tooleffect to 5>>\
<<set _price to 10>>
<<elseif _di[0] is 102>>\
<<set _iname to "chunk~ of ! meat">>\
<<set _bang to true>>
<<set _tooleffect to 10>>\
<<set _stackable to true>>
<<set _price to 1>>
<<set _foodval to 300>>\
<<elseif _di[0] is 103>>\
<<set _iname to "dildo">>\
<<set _tooleffect to 7>>\
<<set _price to 20>>
<<elseif _di[0] is 104>>\
<<set _iname to "holy symbol">>\
<<set _tooleffect to 8>>\
<<elseif _di[0] is 105>>\
<<set _iname to "wooden log~">>\
<<set _stackable to true>>
<<set _price to 5>>
<<elseif _di[0] is 106>>\
<<set _iname to "apple~">>\
<<set _stackable to true>>\
<<set _price to 5>>\
<<set _tooleffect to 10>>\
<<set _foodval to 100>>\
<<elseif _di[0] is 107>>\
<<set _iname to "roll~ of cheese">>\
<<set _stackable to true>>\
<<set _tooleffect to 10>>\
<<set _price to 25>>\
<<set _foodval to 250>>\
<<elseif _di[0] is 108>>\
<<set _iname to "empty bottle~">>\
<<set _price to 5>>\
<<set _tooleffect to 1>>\
<<set _stackable to true>>
<<elseif _di[0] is 109>>\
<<set _iname to "bottle~ of !">>\
<<set _bang to true>>
<<set _foodval to 1>>\
<<set _price to 10>>\
<<set _tooleffect to 11>>\
<<set _stackable to true>>
<<elseif _di[0] is 110>>\
<<set _iname to "bread roll~">>\
<<set _foodval to 150>>\
<<set _tooleffect to 10>>\
<<set _price to 10>>\
<<set _stackable to true>>\
<<elseif _di[0] is 111>>\
<<set _iname to "spellbook">>\
<<set _tooleffect to 12>>\
<<set _price to 100>>\
<<elseif _di[0] is 112>>\
<<set _iname to "book">>\
<<set _tooleffect to 13>>\
<<set _price to 50>>\
<<elseif _di[0] is 113>>\
<<set _iname to "butcher's knife">>\
<<set _tooleffect to 2>>\
<<set _price to 5>>
\
\
<<elseif _di[0] is 200>>\
<<set _iname to "dagger">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _tooleffect to 1>>\
<<set _attacktype to "stab">>\
<<set _hands to 1>>\
<<set _tooleffect to 2>>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 201>>\
<<set _iname to "club">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "blunt">>
<<set _hands to 1>>\
<<set _price to 30>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 202>>\
<<set _iname to "hatchet">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _tooleffect to 3>>\
<<set _attacktype to "cleave">>\
<<set _hands to 1>>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 203>>\
<<set _iname to "pitchfork">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "stab">>\
<<set _hands to 2>>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 204>>\
<<set _iname to "staff">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "blunt">>
<<set _hands to 2>>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 205>>\
<<set _iname to "sword">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "slash">>\
<<set _hands to 1>>\
<<set _price to 125>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 206>>\
<<set _iname to "mace">>\
<<set _mindam to 1>>\
<<set _maxdam to 8>>\
<<set _tooleffect to 5>>\
<<set _attacktype to "blunt">>\
<<set _hands to 1>>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 207>>\
<<set _iname to "axe">>\
<<set _mindam to 4>>\
<<set _maxdam to 8>>\
<<set _tooleffect to 3>>\
<<set _attacktype to "cleave">>\
<<set _price to 25>>\
<<set _hands to 2>>\
<<set _price to 125>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 208>>\
<<set _iname to "small shield">>\
<<set _armor to 10>>\
<<set _attacktype to "block">>\
<<set _hands to 1>>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 209>>\
<<set _iname to "cooking knife">>\
<<set _mindam to 1>>\
<<set _maxdam to 2>>\
<<set _tooleffect to 1>>\
<<set _attacktype to "stab">>\
<<set _hands to 1>>\
<<set _price to 10>>\
<<set _tooleffect to 2>>\
<<set _slot to $BPwield>>\
\
\
<<elseif _di[0] is 300>>\
<<set _iname to "plain shirt">>\
<<set _armor to 1>>\
<<set _slot to $BPchest>>\
<<set _flirt to 5>>\
<<set _price to 5>>
<<elseif _di[0] is 301>>\
<<set _iname to "blouse">>\
<<set _armor to 1>>\
<<set _slot to $BPchest>>\
<<set _flirt to 5>>\
<<set _price to 7>>
<<elseif _di[0] is 302>>\
<<set _iname to "belt">>\
<<set _armor to 1>>\
<<set _slot to $BPwaist>>\
<<set _flirt to 1>>\
<<set _price to 4>>
<<elseif _di[0] is 303>>\
<<set _iname to "pants">>\
<<set _armor to 1>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 1>>\
<<set _price to 10>>
<<elseif _di[0] is 304>>\
<<set _iname to "skirt">>\
<<set _armor to 1>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 1>>\
<<set _price to 12>>
<<elseif _di[0] is 305>>\
<<set _iname to "shoes">>\
<<set _armor to 1>>\
<<set _slot to $BPfeet>>\
<<set _restrict to "horse">>\
<<set _price to 3>>
<<elseif _di[0] is 306>>\
<<set _iname to "boots">>\
<<set _armor to 2>>\
<<set _slot to $BPfeet>>\
<<set _restrict to "horse">>\
<<set _price to 12>>
<<set _price to 12>>
<<elseif _di[0] is 350>>\
<<set _iname to "chainmail shirt">>\
<<set _armor to 10>>\
<<set _slot to $BPchest>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 351>>\
<<set _iname to "chainmail chemise">>\
<<set _armor to 15>>\
<<set _slot to $BPchest>>\
<<set _flirt to 1>>\
<<set _price to 150>>
<<set _price to 150>>
<<elseif _di[0] is 352>>\
<<set _iname to "chainmail hauberk">>\
<<set _armor to 20>>\
<<set _slot to $BPchest>>\
<<set _price to 200>>
<<set _price to 200>>
<<elseif _di[0] is 353>>\
<<set _iname to "chainmail leggings">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 354>>\
<<set _iname to "chainmail coif">>\
<<set _armor to 10>>\
<<set _slot to $BPhead>>\
<<set _price to 50>>
<<set _price to 50>>
<<elseif _di[0] is 355>>\
<<set _iname to "chainmail gloves">>\
<<set _armor to 5>>\
<<set _slot to $BPhands>>\
<<set _price to 70>>
<<set _price to 70>>
<<elseif _di[0] is 356>>\
<<set _iname to "chainmail bra">>\
<<set _armor to 2>>\
<<set _slot to $BPboobs>>\
<<set _flirt to 5>>\
<<set _price to 50>>
<<set _price to 50>>
<<elseif _di[0] is 357>>\
<<set _iname to "chainmail skirt">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 1>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 358>>\
<<set _iname to "chainmail miniskirt">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 2>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 359>>\
<<set _iname to "chainmail gorget">>\
<<set _armor to 2>>\
<<set _slot to $BPneck>>\
<<set _price to 40>>
<<set _price to 40>>
<<elseif _di[0] is 360>>\
<<set _iname to "chainmail tail armor">>\
<<set _armor to 5>>\
<<set _slot to $BPtail>>\
<<set _price to 50>>
<<set _price to 50>>
<<elseif _di[0] is 361>>\
<<set _iname to "chainmail wing armor">>\
<<set _armor to 10>>\
<<set _slot to $BPwings>>\
<<set _price to 200>>
<<set _price to 200>>
<<endif>>\
\
<<if _di[1] is 100>>\
<<elseif _di[1] is 101>>\
<<set _material to "wooden">>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam -1>>\
<<set _maxdam to _maxdam -1>>\
<<elseif _armor > 0>>\
<<set _armor to _armor - 5>>\
<<endif>>\
<<elseif _di[1] is 102>>\
<<set _material to "copper">>\
<<set _price to Math.trunc(_price * .8)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam -1>>\
<<set _maxdam to _maxdam -1>>\
<<elseif _armor > 0>>\
<<set _armor to _armor - 2>>\
<<endif>>\
<<elseif _di[1] is 103>>\
<<set _material to "brass">>\
<<elseif _di[1] is 104>>\
<<set _material to "iron">>\
<<set _price to Math.trunc(_price * 1.2)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam +1>>\
<<set _maxdam to _maxdam +1>>\
<<elseif _armor > 0>>\
<<set _armor to _armor + 2>>\
<<endif>>\
<<elseif _di[1] is 105>>\
<<set _material to "steel">>\
<<set _price to Math.trunc(_price * 1.5)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam +2>>\
<<set _maxdam to _maxdam +5>>\
<<elseif _armor > 0>>\
<<set _armor to _armor + 5>>\
<<endif>>\
<<elseif _di[1] is 106>>\
<<set _price to Math.trunc(_price * 2)>>\
<<set _material to "mithril">>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam +5>>\
<<set _maxdam to _maxdam +10>>\
<<elseif _armor > 0>>\
<<set _armor to _armor + 10>>\
<<endif>>\
<<elseif _di[1] is 150>>\
<<set _material to "cloth">>\
<<elseif _di[1] is 151>>\
<<set _material to "leather">>\
<<set _flirt to _flirt +1>>\
<<elseif _di[1] is 152>>\
<<set _material to "silk">>\
<<set _price to _price * 3>>\
<<endif>>\
\
<<if _price < 0>>\
<<set _price to 0>>\
<<endif>>\
\
<<if _mindam < 0>>\
<<set _mindam to 0>>\
<<endif>>\
<<if _maxdam < 0>>\
<<set _maxdam to 0>>\
<<endif>>\
<<if _armor < 0>>\
<<set _armor to 0>>\
<<endif>>\
\
\
\
<<set _fullname to _iname>>\
\
\
\
<<if _stackable is true>>\
<<set _quantity to _di[2]>>
<<set _fullname to setup.pluralize(_fullname, _quantity)>>\
<<else>>\
<!-- can we make enchantments out of negative numbers? -->
<<endif>>\
<<if _bang is true>>\
<<set _rep to "error">>\
<<if _di[3] is 100>>\
<<set _rep to "human">>\
<<elseif _di[3] is 101>>\
<<set _rep to "dog">>\
<<elseif _di[3] is 102>>\
<<set _rep to "cat">>\
<<elseif _di[3] is 103>>\
<<set _rep to "wolf">>\
<<elseif _di[3] is 104>>\
<<set _rep to "spider">>\
<<elseif _di[3] is 105>>\
<<set _rep to "horse">>\
<<elseif _di[3] is 106>>\
<<set _rep to "goblin">>\
<<elseif _di[3] is 107>>\
<<set _rep to "demon">>\
<<elseif _di[3] is 108>>\
<<set _rep to "succubus">>\
<<elseif _di[3] is 109>>\
<<set _rep to "incubus">>\
<<elseif _di[3] is 110>>\
<<set _rep to "fox">>\
<<elseif _di[3] is 111>>\
<<set _rep to "rabbit">>\
<<elseif _di[3] is 112>>\
<<set _rep to "cow">>\
<<elseif _di[3] is 113>>\
<<set _rep to "minotaur">>\
<<elseif _di[3] is 114>>\
<<set _rep to "imp">>\
<<elseif _di[3] is 115>>\
<<set _rep to "hellhound">>\
<<elseif _di[3] is 116>>\
<<set _rep to "unidentifiable">>\
<<elseif _di[3] is 200>>\
<<set _rep to "human semen">>\
<<elseif _di[3] is 201>>\
<<set _rep to "dog semen">>\
<<elseif _di[3] is 202>>\
<<set _rep to "cat semen">>\
<<elseif _di[3] is 203>>\
<<set _rep to "wolf semen">>\
<<elseif _di[3] is 204>>\
<<set _rep to "spider semen">>\
<<elseif _di[3] is 205>>\
<<set _rep to "horse semen">>\
<<elseif _di[3] is 206>>\
<<set _rep to "goblin semen">>\
<<elseif _di[3] is 207>>\
<<set _rep to "demon semen">>\
<<elseif _di[3] is 208>>\
<<set _rep to "this should never appear">>\
<<elseif _di[3] is 209>>\
<<set _rep to "incubus semen">>\
<<elseif _di[3] is 210>>\
<<set _rep to "fox semen">>\
<<elseif _di[3] is 211>>\
<<set _rep to "rabbit semen">>\
<<elseif _di[3] is 212>>\
<<set _rep to "this should never appear">>\
<<elseif _di[3] is 213>>\
<<set _rep to "minotaur semen">>\
<<elseif _di[3] is 214>>\
<<set _rep to "imp semen">>\
<<elseif _di[3] is 215>>\
<<set _rep to "hellhound semen">>\
<<elseif _di[3] is 216>>\
<<set _rep to "unidentified semen">>\
<<elseif _di[3] is 300>>\
<<set _rep to "human breast milk">>\
<<elseif _di[3] is 301>>\
<<set _rep to "dog milk">>\
<<elseif _di[3] is 302>>\
<<set _rep to "cat milk">>\
<<elseif _di[3] is 303>>\
<<set _rep to "wolf milk">>\
<<elseif _di[3] is 304>>\
<<set _rep to "spider's don't have milk do they?">>\
<<elseif _di[3] is 305>>\
<<set _rep to "horse milk">>\
<<elseif _di[3] is 306>>\
<<set _rep to "goblin breast milk">>\
<<elseif _di[3] is 307>>\
<<set _rep to "should never appear">>\
<<elseif _di[3] is 308>>\
<<set _rep to "succubus breast milk">>\
<<elseif _di[3] is 309>>\
<<set _rep to "should never appear">>\
<<elseif _di[3] is 310>>\
<<set _rep to "fox milk">>\
<<elseif _di[3] is 311>>\
<<set _rep to "rabbit milk">>\
<<elseif _di[3] is 312>>\
<<set _rep to "cow milk">>\
<<elseif _di[3] is 313>>\
<<set _rep to "minotaur milk">>\
<<elseif _di[3] is 314>>\
<<set _rep to "should never appear">>\
<<elseif _di[3] is 315>>\
<<set _rep to "hellhound milk">>\
<<elseif _di[3] is 316>>\
<<set _rep to "unidentifiable milk">>\
<<elseif _di[3] is 400>>\
<<set _rep to "slime goo">>\
<<elseif _di[3] is 401>>\
<<set _rep to "water">>\
<<set _price to 5>>\
<<elseif _di[3] is 402>>\
<<set _rep to "beer">>\
<<set _price to 7>>\
<<elseif _di[3] is 403>>\
<<set _rep to "wine">>\
<<set _price to 9>>\
<<elseif _di[3] is 404>>\
<<set _rep to "aphrodisiac">>\
<<set _price to 100>>\
<<endif>>\
<<set _foo to "di3 is: " + _di[3] + ", rep is: " + _rep>>
<<AddToLog _foo>>
<<set _puppies to setup.Bang(_fullname, _rep)>>
<<set _fullname to _puppies>>
<<else>>
<<if _di[3] is 500>>
<<set _forcename to "spellbook of up">>
<<elseif _di[3] is 501>>
<<set _forcename to "spellbook of down">>
<<elseif _di[3] is 502>>
<<set _forcename to "spellbook of portal">>
<<elseif _di[3] is 503>>
<<set _forcename to "spellbook of map">>
<<elseif _di[3] is 504>>
<<set _forcename to "spellbook of firebolt">>
<<elseif _di[3] is 505>>
<<set _forcename to "spellbook of poison">>
<<elseif _di[3] is 506>>
<<set _forcename to "spellbook of armor">>
<<elseif _di[3] is 507>>
<<set _forcename to "spellbook of heal">>
\
\
<<elseif _di[3] is 550>>
<<set _forcename to "A Treatise on Ponerology">>
<<elseif _di[3] is 551>>
<<set _forcename to "Etymology of the Echidna">>
<<endif>>
<<endif>>
\
<<if _material neq "">>\
<<set _fullname to _material + " " + _iname>>\
<<endif>>\
<<if _forcename neq "">>\
<<set _fullname to _forcename>>\
<<endif>>\
<<if _maxdam > 0>>\
<<set _fullname to _fullname + " (damage: " + _mindam + "-" + _maxdam + ")">>\
<<endif>>\
<<if _armor > 0>>\
<<set _fullname to _fullname + " [armor: " + _armor + "]">>\
<<endif>>\
<<if _flirt > 0>>\
<<set _fullname to _fullname + " {sexy: " + _flirt + "}">>\
<<endif>>\
<<if 1 is 0 >>\
<<set _asd to setup.bpptrtoname(_slot, "formal")>>\
<<set _fullname to _fullname + " (Equip to: " + _asd +")">>\
<<endif>>\
\
<<set $ItemPoke to
{ name: _iname, fullname: _fullname, mindam: _mindam, maxdam: _maxdam, attacktype: _attacktype, handsreq: _hands, armor:_armor, tooleffect: _tooleffect, qty: _quantity, slot: _slot, flirt: _flirt, restrict: _restrict, foodval: _foodval, price: _price, stackable: _stackable }>>\
<</silently>>\
<</widget>>\
<<widget "EasyRestock">>
<<set $WORLD.restock to $WORLD.day>>\
\
<<!-- clear all? Do we want that? -->\
<<for _i to 0; _i < 10; _i++>>\
<<set $STORE[$Tavern][_i] to [0,0,0,0]>>\
<<set $STORE[$Selene][_i] to [0,0,0,0]>>\
<<set $STORE[$Smith][_i] to [0,0,0,0]>>\
<<set $STORE[$GStore][_i] to [0,0,0,0]>>\
<<set $STORE[$Tavern][_i] to [0,0,0,0]>>\
<</for>>\
<!-- pawn store loses half of items -->\
<<for _i to 0; _i < 10; _i++>>\
<<if $STORE[$Pawn][_i] neq [0,0,0,0]>>\
<<if random(1,2) is 1>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0]>>\
<<endif>>\
<<endif>>\
<</for>>\
\
<!-- Tanya's tavern -->\
<!-- always 2 bottles of plain drinks -->\
<<set _pool to setup.getfrom(2, [401, 402, 403])>>\
<<set _era to random(2,6)>>\
<<set _erb to random(2,6)>>\
<<set $STORE[$Tavern][0] to [109, 0, _era, parseInt(_pool[0])]>>\
<<set $STORE[$Tavern][1] to [109, 0, _erb, parseInt(_pool[1])]>>\
<!-- 2 of boring food -->\
<<set _pool to setup.getfrom(2, [106, 107, 110])>>\
<<set _era to random(2,6)>>\
<<set _erb to random(2,6)>>\
<<set $STORE[$Tavern][2] to [parseInt(_pool[0]), 0, _era, 0]>>\
<<set $STORE[$Tavern][3] to [parseInt(_pool[1]), 0, _erb, 0]>>\
<!-- 2 sketchy meat -->\
<<set _era to random(1,3)>>\
<<set _erb to random(1,3)>>\
<<set _pool to setup.getfrom(2, [101, 102, 103, 110, 111, 112])>>\
<<set $STORE[$Tavern][4] to [102, 0, _era, parseInt(_pool[0])]>>\
<<set $STORE[$Tavern][5] to [102, 0, _erb, parseInt(_pool[1])]>>\
<!-- 2 sketchy milk -->\
<<set _era to random(1,3)>>\
<<set _erb to random(1,3)>>\
<<set _pool to setup.getfrom(2, [301, 302, 303, 310, 311])>>\
<<set $STORE[$Tavern][6] to [109, 0, _era, parseInt(_pool[0])]>>\
<<set $STORE[$Tavern][7] to [109, 0, _erb, parseInt(_pool[1])]>>\
\
<!-- Selene's -->\
<<set _era to random(2-8)>>\
<<set $STORE[$Selene][0] to [108,0,_era,0]>>\
\
<!-- Smith -->\
<<set $STORE[$Smith][0] to [202,0,0,0]>>\
<<set $STORE[$Smith][1] to [either(200, 209),0,0,0]>>\
<<set $STORE[$Smith][2] to [either(201, 203, 204, 205),0,0,0]>>\
<<set $STORE[$Smith][3] to [random(350, 361),0,0,0]>>\
<<set $STORE[$Smith][4] to [random(350, 361),0,0,0]>>\
<<set $STORE[$Smith][5] to [random(350, 361),0,0,0]>>\
<<set $STORE[$Smith][6] to [random(350, 361),0,0,0]>>\
<<if random(1, 2) is 1>>\
<<set $STORE[$Smith][7] to [0,0,0,0]>>\
<<endif>>\
<<for _i to 1; _i < 7; _i++>>\
<<set $STORE[$Smith][_i][1] to either(102, 102, 103, 103, 104, 105)>>\
<</for>>\
\
<!-- General store -->
<<set $STORE[$GStore][0] to [113,0,0,0]>>
<<if random(1,2) is 1>><<set $STORE[$GStore][1] to [100,0,random(2,4),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][2] to [101,0,0,0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][3] to [103,0,0,0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][4] to [104,0,0,0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][5] to [105,0,random(2,5),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][6] to [106,0,random(1,4),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][7] to [107,0,random(1,3),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][8] to [108,0,random(1,3),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][9] to [109,0,random(1,3),404]>><<endif>>\
<</widget>>\
<<widget "Store">>\
<<set _s to $args[0]>>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[_s].length; _i++>>\
<<set _item to $STORE[_s][_i]>>\
<<if _item[0] > 0>>\
<<capture _i, _s>>\
<<button "[Buy]">>
<<set _buttonitem to $STORE[_s][_i]>>\
<<DescribeItem _buttonitem>>\
<<set _p to $ItemPoke.price>>\
<<set _st to $ItemPoke.stackable>>\
<<set _foo to "Item: " + _buttonitem + "stackable: " + _st>>\
<<AddToLog _foo>>\
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
<<set _try to setup.additemtoinv($CC, _buttonitem, _st)>>
<<if _try < 0>>
<<replace "#storereport">>No room in inventory<</replace>>\
<<else>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<<if $STORE[_s][_i][2] > 1>>\
<<set $STORE[_s][_i][2] to $STORE[_s][_i][2] -1>>
<<else>>
<<set $STORE[_s][_i] to [0,0,0,0]>>
<<endif>>
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<endif>>
<</button>> \
<</capture>>\
<<set _item to $STORE[_s][_i]>>\
<<DescribeItem _item>>\
<<set _p to $ItemPoke.price>>\
<<set _st to $ItemPoke.stackable>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<<print $ItemPoke.fullname>>, cost: <<print $ItemPoke.price>> \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<endif>>\
<</for>>\
<hr>\
@@color:Gold;Inventory@@
<<for _i to 0; _i < $PC[$CC][$PCmaxinven]; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<if _desc neq "none">>\
<<print _desc>>
<<endif>>\
<</capture>>\
<</for>>\
<hr>\
<span id="storereport"></span>\
<</widget>>\
<<widget "Pawn">>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[$Pawn].length; _i++>>\
<<set _AAAA to $STORE[$Pawn][_i][0]>>
<<set _BBBB to $STORE[$Pawn][_i][1]>>
<<set _CCCC to 1>>
<<set _DDDD to $STORE[$Pawn][_i][3]>>
<<set _ItemByValHack to [_AAAA, _BBBB, _CCCC, _DDDD]>>
<<if _ItemByValHack[0] > 0>>\
<<DescribeItem _ByValHack>>\
<<set _p to $ItemPoke.price * 2>>\
<<set _st to $ItemPoke.stackable>>\
<<capture _i, _p, _st>>\
<<button "[Buyback]">>
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
<<set _try to setup.additemtoinv($CC, _ItemByValHack, _st)>>
<<if _try < 0>>
<<replace "#storereport">>No room in inventory<</replace>>\
<<else>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $STORE[$Pawn][_i][2] > 1>>\
<<set $STORE[$Pawn][_i][2] to $STORE[$Pawn][_i][2] -1>>
<<else>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<endif>>
<</button>> \
<</capture>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$Pawn][_i]>>\
<<print $ItemPoke.fullname>>, cost: _p \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<endif>>\
<</for>>\
<hr>\
@@color:Gold;Inventory@@
<<for _i to 0; _i < $PC[$CC][$PCmaxinven]; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<<set _p to Math.trunc(_p)>>\
<<set _st to $ItemPoke.stackable>>\
<<if _desc neq "none">>\
<<set _buttontext to "[Pawn for " + _p + " gold]">>\
<<button "_buttontext">>
<!-- Sugarcube does not clone values until passage refresh -->\
<<set _AAAA to $PC[$CC][$PCinven][_i][0]>>
<<set _BBBB to $PC[$CC][$PCinven][_i][1]>>
<<set _CCCC to 1>>
<<set _DDDD to $PC[$CC][$PCinven][_i][3]>>
<<set _ByValHack to [_AAAA, _BBBB, _CCCC, _DDDD]>>
<<DescribeItem _ByValHack>>
<<set _st to $ItemPoke.stackable>>\
<<set _try to setup.additemtostore($Pawn, _ByValHack, _st)>>
<<if _try < 0>>
<<replace "#storereport">>Store has no more room<</replace>>\
<<else>>
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<<set _p to Math.trunc(_p)>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $PC[$CC][$PCinven][_i][2] > 1>>\
<<set $PC[$CC][$PCinven][_i][2] to $PC[$CC][$PCinven][_i][2] -1>>
<<else>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<</button>> _desc
<<endif>>\
<</capture>>\
<</for>>\
<</widget>>\<<SimplePic $Mon.pic>>\
<<if (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
<<FemaleVirginity "an imp">>
<<endif>>\
\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived + 1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>\
<<elseif (_mhasdick is false) and (_phasdick is false)>>\
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven + 1>>\
<<endif>>\
\
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","imp"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
from bedroom event no longer used:
<<elseif _whichmon.includes("imp")>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + _pz>>\
Strangely ok with this turn of events, you spread your knees and slide your ankles in close to your butt. Needing no further encouragement, the small creature tightens his grip on your boobs and continues furiously pumping his nearly foot-long rod in and out of you as your pussy involuntarily clenches around it, removing any last bit of wiggle room from an already tight fit.
He cums immediately, and you not long after, and yet his pace only hastens.
"Yes!" he screams, climaxing a second time mere seconds after the first, prompting spasms up and down your torso as you ride the impossibly large cock of this tiny creature.
Eventually he slows, but his grip on your tits remains until the very last moment his sticky member plops out of you with a sticky flow. Gazing at it in awe, he then sits on your ncek and forces his cock down your throat, commanding you to lick it clean. Unable to do anything but obey, you swallow every bit of his and your mixed fluids from it then lick its tip in a daze. At last satisfied, he gives your left boob one last squeeze then hops down from the bed and leaves you alone in the bed, now a sticky mess from his semen pouring out of you.
<<elseif _whichmon.includes("imp")>>\
Curling up under the covers to take a refreshing nap, you quickly drift off to sleep. Before long a strange dream overtakes you, in which the bedsheets are pulled slowly off of you, their gentle texture sliding erotically across your nipples and then left bare. Moment later, a small red creature but no more than two feet tall climbs up onto the bed and between your legs. Pushing your knees apart to make room, he plants his hands on each side of your hips and leers at you. Growing dimly alarmed, you open your eyes to see an imp with a grotesquely large cock positioning himself between your thighs. Seeing you awake, he grins, then ''thrusts'' his entire length halway up your torso, carried easily through your unprepared vaginal walls on a prependerous of his fluids.
<<FemaleVirginity _whichmon>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
Too shocked to imediately fight him off, you gasp as he grabs your bouncing tits like handles and begins furiously humping a cock as big as your forearm in and out of you.
<<SimplePic $Mon.pic>>\
<<set _WhichCloser to "pass out">>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if ($Mon.penis is true) and (_pcpussy > 0)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
\
As you collapse, you can't help but notice that the goblin is visibly hard before you even hit the ground. It's no surprise when he rushes over and unceremoniously knocks you to the ground on your hands and knees.
Steeling yourself for the inevitable, you wince as he tears off your pants and roughly plunges his cock into your pussy dry.
<<FemaleVirginity "huge goblin">>
Fortunately, you suppose, he immediately begins cumming a steady drip of pre-cum to lubricate your insides. You're not thrilled about taking goblin cum, but at least it stops the pain. The goblin, meanwhile, brings his weight down on your shoulders and mashes your face to the ground, then picks up his pace. Unintelligeble grunts and sloshing noises fill your ears as he plunders your pleasure hole with reckless abandon.
"Unf, unf, so, good," he pants, obvlious and indifferent to your lack of cooperation.
To his credit, his endurance is spectacular. As first you feel yourself in danger of becoming bored from how long he's taking, but as his relentless assault continues for long minute after minute, as the flow of pre-cum flows to the point of streaming long lines like drool down your thighs, you notice with some distaste that your body is beginning to respond to him.
"Oh yeah, fuck me back you slut," he mumbles when he notices your hips unconsiously swaying back onto his cock. As yet more minutes go by of slowly increasing intensity, you come up on your hands to push back onto his cock even harder, and he releases his grip on your head to latch onto your hips to better hold you in place while he orgasms.
"Ooohhhhhuuhnnfff!" he grunts, while you clamp your mouth shut to try to hide the sound of your own, admittedly smaller climax.
"Congrats on the goblin sex," he looks at you with amusement. "Hope I gave you something to remember me by."
\
<<elseif ($Mon.penis is false) and (_pcpenis > 0)>>\
<<set $WORLD.datapasser to ["knockout","goblin"]>>
"What a wimp!" the goblin shouts at you angrily. "What do you even think I'm here for? You were supposed to beat me up and have your way with me!"
"Sorry?" you apologize, nursing your wounds.
"I had it all planned out!" she rants on. "There I'd be, <<print either("innocently minding my own business in the woods","strolling through the forest like the sweet young virgin I obviously am","on my way to my grandmother's house like a good little goblin girl")>> when suddenly an adventurer with <<print either("a cute butt","pecs as big as my head","biceps big enough to eat on","")>> and <<print either("hung like a horse","a cock big enough to fuck me on one end and come out my nostrils on the other","twelve tentacle dicks")>> would come along and knock me off me feet!"
"Don't you mean sweep you off your feet?" you ask, but she's too busy fingering herself to notice.
"I'd just happen to land my on hands and knees, all sweet and innocent-like, and then suddenly out of nowhere he'd pounce on top of me, yeah...and start <<print either("railing me like a bridge builder","pounding me like a stray dog","humping me like a camel","boning me like a skeleton")>>, oh, mmmm."
You're about to point out her pun maybe doesn't work as well as she thinks it does, but by now she's on her back and her eyes are closed with both hands between her legs.
You pass out before she finishes.
<<elseif ($Mon.penis is true) and (_pcpenis > 0)>>\
<<if $WORLD.datapasser is "g1">>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Reluctantly, you sit up onto your knees with a sigh and open your mouth.
"Oh good," he grins at you. "I like it when submissive prey wants my cock like a good little slut."
To your dismay, rather than take charge he simply stands there and waits for you to take initiative. Daring to look up into his eyes, he simply stares back in amusement. Swallowing nervously, you reach up for his cock and reluctantly take it into your mouth.
"Obviously you're enjoying this," he quips. "If you're taking your time to make it all nice and slow like this."
Annoyed by the comment, you quickly glomp your mouth onto his cock to prove that you're not taking your time.
"Oh, so eager," he plants one hand gently on the top of your head. "Can't hardly hold yourself back from my manliness."
Realize you can't win, eventually you give up and start sucking his cock. The taste is...not as unpleasant as you feared, but as his balls begin bouncing on your chin you start to dread the flavor you know is coming.
"Oh, yeah," he moans. "Suck my cock you little slut. Suck it good."
Already in too deep to back away, you follow his instructions and begin lightly sucking on his cock as you slide it in and out over your lips anda cross your tongue. Then absentmindedly begin fondling his balls while you do.
"Oh, fuck me," he moans. "What are you, a professional?"
It doesn't take long before he clutches your head in both hands and rams himself deep into your throat and holds you there, unable to escape while he blows a load of semen inside you. All you can do is swallow to keep from drowning.
"Wow," he pants. "You're pretty good at that. Hope I see you again sometime."
Then he wanders off.
<<elseif $WORLD.datapasser is "g2">>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
Hoping that this is the lesser of two evils, you wordlessly turn your back to him and spread your buttcheeks.
"Ooohhhh, so eager!" he mocks you. "Well, if you want it that bad, I won't disappoint you."
Closing your eyes for the inevitable, you're surprised when he spits on his hand and greases up his cock before planting its tip gently at your asshole.
"Gotta take good care of my bitch," he explains, easing his cock into you one inch at a time, slowly gaining ground with each thrust. "And you seem like a good bitch."
Unsure what to say, you stay silent as he grabs you by the hips and picks up his pace to begin fucking you for real.
"So tight," he moans. "Definitely a good bitch."
It's not great for you, but neither is it particularly arduous and he ass-fucks you for the next ten minutes, occasionally speeding up, sometimes slowing down. Sometimes trailing a single finder up and down your spine while he whispers what a good bitch you are. At last though, you feel a twitch deep inside your bowels and he cries out in a long, enduring orgasm as he sprays your intestines with his semen.
"Oh yeah" he pants. "You're a keeper."
For ione dreadful moemnt, you think he intyends to take you back to his lair. But no, he simply stays there, balls deep inside you, breathing quickly at first, then slowly regainign control. Eventually he slips out, pats you nicely on the back, and wanders off, leaving you alone in a pool of his fluids.
<<elseif $WORLD.datapasser is "g3">>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
You lash out with a foot, but it hits him in the thigh, barely doing any damage.
"That was a mistake," he explains, then thrusts his cock so deep into your ass that you cry out in agony. "But if you want it the hard way, I've got that hard-on to give it to you."
He comes down on your head hard, smashing you face-first down into the stone floor. You struggle in vain but can do little as he bears his full weight on the small of your back to pivot your hips upward while he pounds your ass relentlyless with his eager cock. With his knees on the ground lodged between yours and the fingers of both hands tearing into your torso to hold you in plsace, you can do little but flail helpless and cry out in pain.
"You wanted to do this the hard way," he grunts. "So you got it the hard way."
Your entire body tenses up and fights to find a way out, but there's nothing you can do but take his cock. Your whole focus is drawn to that, his cock, plundering your intestines, twicthing and spasming inside you, only now beginning to glide freely on the mix of pre-cum and blood no doubt painting your insides. Not content to let you relax into the decreasing pain, however, he ejaculates immediately.
"Ahhh! Yes!" he screams, his head thrown back, far above yours, as his sperm mixes with your blood and begins to absorb into your intestines.
By now youv'e stopped struggling, but he either doesn't notice or doesn't care. Instead he continues thrusting, though already spent, as if he enjoys the simpy act of dominating you. And all yuou can do is wait. He's already finished, physically, but the mental domination continues for some time as he continues to assfuck you with his slowly shrinking member until at last it comes out with a pop.
You lay there, too exhausted to object, as he wipes his dick on your thighs then wanders off.
<<else>>\
Unable to continue fighting, the goblin walks unceremoniously over to you and punches you in the stomach. You double over while he grabs you by the hips and spins you around face away from him. Seeing where this is going, you struggle to keep your clothes on but he's too strong and you're too injured to resist.
"There are two ways we can do this," he explains. "I'm going to assfuck you. That's settled. The only choice you get is whether you suck my dick first to make it go in easy, or whether you take it dry and bleed a little.
\
<<set _WhichCloser to "none">>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Suck his dick" "DefeatGoblin">>
<<set $WORLD.datapasser to "g1">>
<</link>>\
</span>
<span id="KeypTwo">\
<<link "2) Spread your cheeks" "DefeatGoblin">>
<<set $WORLD.datapasser to "g2">>
<</link>>\
</span>
<span id="KeypThree">\
<<link "3) Kick him" "DefeatGoblin">>
<<set $WORLD.datapasser to "g3">>
<</link>>\
</span>
<<endif>>\
<<elseif ($Mon.penis is false) and (_pcpenis is 0)>>\
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven + 1>>\
"Alright slut," the goblin growls at you. "I won the fight, so that means you have to do what I say!"
You're not sure that's really how it works, but doing what she wants is probably better than her murdering you, so you decide to play along as she pushes you onto your back and drops her panties to the floor then stands with her feet on either side of your head.
"Now, lick me like the slut you are!"
Sitting down suddenly, she lands with her pussy lips on your face. You don't lick so much as gasp and desperately struggle to breath, but from the goblin's moans apparently she can't tell the difference. Every now and then you manage to push her up enough to get a breath full of air, but for the most part you avoid asphyxiation only by tilting your head to the side and breathing out the corner of your mouth. It doesn't take long before her thighs clench around you and her pussy squirts flavorful juices up and down your face.
"That was adequate," the goblin declares, putting her panties back on. "Now get out of here before my <<print either("twleve","two dozen","four","nineteen","fourteen")>> brothers <<print either("show up","and their dog show up","get back from level 10","get bored of raping chickens")>> and decide they all want a turn on you too!"
<<else>>\
Debug: Goblin defeat: no possible sex event for this combination of body parts.
<<endif>>\
\
<<ProstXP>>\
\
<<if _WhichCloser is "pass out">>\
<<set $WORLD.datapasser to ["sex","goblin"]>>
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<AdvanceTime 480>>
<</link>>\
</span>
<<elseif _WhichCloser is "none">>\
<<else>>\
@@color:Red;Unrecognized closer in goblin sex: _WhichCloser
<<endif>>\<<SimplePic $Mon.pic>>\
<<if (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
<<FemaleVirginity "tentacle monster">>
<<endif>>\
\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived + 1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<elseif (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven + 1>>\
<<endif>>
\
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","tentacle monster"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
from old bedroom event, no longer used
<<elseif _whichmon.includes("tentacle")>>\
Mere moments after curling up under the covers to take a refreshing nap, you begin to feel movement at the foot of the bed. Sitting up, you see nothing at first, but then notice the delicate movement of the bedsheets as something in sliding around inside them. With images of snakes in your head, you leap to your feet and toss the sheets away only to feel something grab you by both ankles and sweep you off your feet. Bouncing harmlessly on your back, you gasp as your lower half is then engulfed in a writhing mass of tentacles.
The creature ignores your efforts as you struggle to punch and kick, feeling an uncertain number of tentacle probing experimentally at your pussy folds, then suddenly thrusting deeply inside you on the sticky mass of fluids that completely cover its exterior.
<<FemaleVirginity _whichmon>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
Gasping at the sensation, you feel your desire to resist waning as half a dozen tentacles begin to fight each other to take their turn inside both of your now-dripping holes.
<<elseif _whichmon.includes("tentacle")>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven +1>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + _pz>>\
As if you had much choice, you close your eyes and relax into the writhing mass of tentacles. as if sensing your cooperation, a few of the tentacles holding yor wrists and ankles take the opportunity to slip and slide their way across your toso, wriggling against every part of you as they do. Meanwhile, the pair of tentacles at your vagina are joined by several more. Unsure how many slippery cocks and now taking their turns thrusting inside you, you gasp in pleasure only to have yet another tentacle slide quickly past your lips and deeply down your throat.
You can't help but try to bite down on it, but its blubbery mass is so moistened that it makes no difference as it slides effortlessly across your teeth, down the entire lengvth of your throat and begins ejulacating into your stomach. Its brother at your pussy do the same, each one thrusting in turn inside you and spraying for but an instant before another takes its place and does the same. Minutes pass, but there is no relenting as an endless stream of lusty tentacles each take their turn on all three of your orifices.
Whether from pleasure or lack of oxygen you cannot say, but you pass out long before the creature has had it sfill of you. When you awake, the bed sheets are a stikcy mess of the creature's semen, and it takes you nearly half an hour to wipe your body at least passably dry.
<<SimplePic $Mon.pic>>\
<<set _SkipExitLink to false>>\
<<if $Mon.name.includes("Charyss")>>\
<<set _SkipExitLink to true>>\
You fall to the ground hard. Charyss looks you over with mild disdain.
@@color:Red;Charyss@@: "Meh," she shrugs. "Probably not even worth raping you. Adventurer like you would probably just use that as an excuse to attack me over and over to get valuable magic demon body morph transformations. Stupid goddess rules. Seriously, all I wanted was some beer. But at least I have this sexy piece of ass in a cage to vent my sexual frustrations out on."
@@color:LightGreen;Adventurer@@: *cries*
<<set _beer to -1>>\
<<for _B to 0; _B < $PC[$CC][$PCinven].length; _B++>>\
<<set _CheckMe to $PC[$CC][$PCinven][_B]>>\
<<if (_CheckMe[0] is 109) and (_CheckMe[3] is 402)>>\
<<set _beer to _B>>\
<<endif>>\
<</for>>\
<<if _beer > -1>>\
@@color:Red;Charyss@@: "I'm totally taking your beer though."
<<set $PC[$CC][$PCinven][_beer] to [0,0,0,0,0]>>\
<<endif>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) pass out" "Church">>
<<set $WORLD.datapasser to ["knockout", "Charyss"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
\
<<elseif $Mon.name.includes("succubus")>>\
<<set _r to random(1,3)>>\
<<if _r is 1>>\
"Yay!" the succubus giggles. "Now for the ''best'' part of fighting!"
"What's that?" you ask, collapsing to your knees, your head still reeling from the battle.
"Makeup sex!"
As you contemplate those words, the succubus \
<<elseif _r is 2>>\
As you collapse, the succubus glides over and deftly catch you in her arms, your head landing between her generous breasts with enough force that your head recoils slightly from the bounce.
"Oh my!" she giggles. "I had no idea you liked me like that!"
Unable to resist their firm, fleshy goodness, you find yourself gently kneading her boobs in your hands as the succubus gently trails a finger up your stomach and chest with one hand while the other \
<<else>>\
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven +1>>\
The succubus laughs as you collapse to your knees.
"You know," she looks over you eagerly, "it's usually me who's down there. But I can work with this."
Stepping boldly forward, she plants her crotch directly in your face and commands you to lick. The scent of her freely-flowing pussy juices hit your nostrils and you can't help but obey. The thick folds of her labia engulf your tongue and she gently runs her fingers through your hair as her hips between to sway gently back and forth as if face-fucking you with a penis she <<if _phasdick is false>>thankfully <<endif>> doesn't have.
After a few minutes of this, she \
<<endif>>\
\
<<if (_phasdick is true)>>grabs handful of your hair and pulls down to force your eyes up to meet hers.
"Now for the fun part."
Unable to resist and scarcely wanting to, the succubus pushes you gracefully down onto your back and climbs on top of you. Your erection is already painfully hard, and it's with trenemsoud relief to you both that she sets herself down on it, then sighs happily as it glides inside her until your hips meet.
<<else>>roughly grabs the back of your hair and pulls you to the ground by it.
"Now for the
<<endif>>\
<<set _r to random(1,3)>>\
\
<<if _r is 1>>\
<<elseif _r is 2>>\
<<else>>\
<<endif>>\
<<elseif $Mon.name.includes("incubus")>>
implement incubus
<<elseif $Mon.name.includes("omnibus")>>
implement omnibus
<<else>>\
@@color:Red;Error in DefeatDemon:@@ $Mon.name
<<endif>>\
\
<<if _SkipExitLink is false>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex", $Mon.name]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<set _AllowNormalExit to true>>\
<<if ($Mon.penis is true) and (setup.GetVaginalDepth($CC) > 11)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
"Finally a slut who can take me!" the minotaur shouts as he thrusts his massive cock into your slippery hole. It's a struggle, but your pussy in built to take it, and by carefully relaxing your mucles it doesn't even hurt all that much. The sensation of //not// struggling against him makes you feel incredibly submissive, and the minotaur chuckles in glee when you climax before he does.
"You like that, don't you?" he laughs, patting you on the head almost affectionately as he picks up his pace then cums inside you. "Come back any time you want some more!"
<<elseif $Mon.pussy is true>>\
<<if ($Mon.penis is true)>>\
"Adventurer pussy is best pussy!" the minotauress cheers, stroking herself with onehand while she flips you over onto your stomach with the other.
<<if _pcpussy is 0>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
"Can't we talk about this?" you whine.
"Sure thing pardner," she nods agreably. "But how bout you do the talkin' and I'll do the fuckin'?"
Before you can think of a suitable reply, a cock as big as your arm pushes your ass cheeks apart and begins forcing itself inside you.
"That's..." you strain, "...too...big!"
"Thankee kindly for the compliment, darlin'," she chuckles. "But ya better pucker up cuz' Imma split you open wide now, ya hear?"
You try to scream from the pain, but with her monster cock now plunging away halfway up into your lungs after having torn clean through your intestines, it's a little difficult to have air to scream with.
You don't last much longer after that.
<<set _AllowNormalExit to false>>\
@@color:Red;You have died!@@
<<set $WORLD.diedby to "Your internal organs were shredded to goo by a giant cow cock">>\
\
<<AwardAchievement "Durable">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) After life review" "Death">>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
"Can't we talk about this?" you whine, your vagina treacherously dripping in anticipation of receiving that humongous bull cock of hers.
"Sure, talk all you want!" she laughs agreeably, then stabs her two-foot-long dick into you, tearing your pussy wide.
<<FemaleVirginity "a minotauress with a dick as big as your arm">>\
You struggle futilely to espcae while watching your torso bulge from her enormous cock and feeling internal organs tear. Unfortunately you're far too weakened from battle and she has entirely too good of a grip on you. On the bright side, at least you live long enough to feel her climax...somewhere inside your lungs from the feel of it.
<<set _AllowNormalExit to false>>\
@@color:Red;You have died!@@
<<set $WORLD.diedby to "Your internal organs were ripped apart by a big fat cow cock">>\
\
<<AwardAchievement "Durable">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) After life review" "Death">>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<<else>>\
Watching cautiously as you collapse to your knees, the cow-girl seems uncertain what to do with you. Glancing down at her own body then setting her sword down, she approaches then sits on her knees in front of you. Peering deeply into your eyes and is looking for something, she then takes your hands into hers and places them firmly on her breasts, then squeezes.
"You want me to milk you?" you ask uncertainly.
Her transformation having so deeply affected her vocal chords that she cannot reply with words, she simply nods. Grasping tentatively at her breasts you begin to understand the nature of her request. Her breasts are painfully firm and full of milk. Giving first her left breast a gentle squeeze and then the right, she sighs in relief as tiny squirts of cow milk spray from her nipples onto you. Relieved that your defeat will come with so little cost, you get to work kneading her breasts and giving the poor cow-girl much needed relifed of her own.
Her tension now fading, she turns her back to you and sits fully in your lap to give you a graceful and easy under-handed access to her breasts. She soon drifts off to sleep under your tender ministrations, but as the pool of her milk grows on the ground, you feel it a bit wasteful and wonder what it must taste like.
Curling around her torso and taking one of her nipples between your lips, you squeeze with both hands to squirt a generous bit of milk. The falvor is...similar to cow milk, but there's an distinct undertone of another flavor that you can't identify. Now suckling on her freely, the sound of her sleepy moans fill your ears and you swish her delicious fluids around on your tongue then swallow.
As the liquid hits your stomach, however, you begin to feel a bit dizzy. The last thing you see is the eyes of the minotauress gazing with concern at you...and then everything goes dark.
<<endif>>\
<<elseif ($Mon.penis is true)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<if _pcpussy is 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
<<endif>>\
\
<<if _pcpussy > 0>>\
The minotaur smashes you face-first into the floor and lifts yor hips up to his enormous cock. It feels . It takes some thrusting and grunting before he manages to tear your entirely-too-small pussy wide enough to accomodate him. Meanwhile, all you can do is scream and horror as you feel it ripping apart your insides, lubricated by your own blood as much as by his pre-cum.
<<else>>\
The minotaur wastes no time bending you over and planting his giant, erect cock at your asshole. It takes some thrusting and grunting before he manages to fit it inside though. Meanwhile, all you can do is scream and horror as you feel it tearing through your insides, lubricated by your own blood as much as by his pre-cum.
<<endif>>\
Before long, the pain subsides and your vision soon goes dark. The last thing you remember is his screams of ectasy as he ejaculates into your torso, somewhere near your left lung, you think.
<<set _AllowNormalExit to false>>\
@@color:Red;You have died!@@
<<set $WORLD.diedby to "Your internal organs were ripped apart by a big fat cow cock">>\
\
<<AwardAchievement "Durable">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) After life review" "Death">>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<else>>\
Error in defeat by minotaur: no recognized parts
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","minotaur"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<<endif>>\
<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
The hellhound is on you before you even hit the ground, biting and snarling, tearing at your clothes and nipping at your flesh. You try to hold up your arms to protect your vitals, but it quickly becomes clear that the creature has no interest in killing you. He very much wants you alive.
Tearing effortlessly through your clothes, the creature forces its head between your legs and jams its tongue so far up your pussy that all you can do is convulse in shock. Lapping at a hundred miles an hour, you're quickly reduced to pliable jello, shuddering helplessly before his ministrations. This is not for your pleasure, however, and he stops after mere seconds, then steps forward to plant his forepaws at your sides and looks intently down into your eyes.
<<if random(1,2) is 1>>\
Held securely by his gaze, you feel your knees spreading submissively of their own accord as a four-inch wide cock plants itself at your entrance and begins to press forward. \
<<else>>\
What captures your attention, however, is the four inch wide horse cock now pressed against your pelvis, insistely \
<<endif>>\
Your doubts of his ability to penetrate you with such a massive tool are quickly set aside as he somehow manages to force its entire width inside you, carried on the union of his fiery fluids sizzling against the lubrication of your own meager girl-cum.
<<FemaleVirginity "hellhound">>\
With his forepaws now wrapped solidly around your hips and his head pressed down against your chest to hold you securely down on the floor, he begins sliding his cock inside you, its tip somehow reaching nearly to your neck. He cums immediately and you taste its musky aroma at the base of your throat. Your eyes roll up into your head and you gasp, his tongue darting across your lips and tasting your sweetness as his massive cock picks up its pace from being merely a train fucking you to more like a rocket. A red rocket, two feet long and cumming non-stop inside you so intensely that his flames belch forth from your pussy.
Blinded by the smoke, but still able to hear, your skull is pierced by a howling wolf orgasm that that echoes inside your head as if even your skull cannot keep him out of your mind.
You lose consciousness, your last memory being the sight of his eyes glowing red in the smoke, followed by the sensation of his cock hardening inside you for a second round.\
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
The hellhound is on you before you even hit the ground, biting and snarling, tearing at your clothes and nipping at your flesh. You try to hold up your arms to protect your vitals, but it quickly becomes clear that the creature very much wants you alive. Pushing you onto your back and forcing itself between your legs, he plants a paw squarely on your chest and presses you to the ground, leaning in and staring down his long nose at you.
<<set _LocOfNewPart to setup.AddBodyPart($CC, $BPpussy)>>\
\
<<if _pcpenis > 0>>\
For the briefest moment, he simply stares into your eyes. Then you feel it: a four-inch wide horse's cock pressing up against your pelvis just between your balls and your asshole. To your surpise, rather than plundering your anus, he simply presses at you. And then you feel it: his cock is somehow //making headway inside you//.
Your're overtaken by a tremendous heat, sweating and shuddering yet unable to break the hold his gaze has on you as his cock relentless burrows through your pelvis, crafting and forging your insides to accomodate him.
<<else>>\
For the briefest moment, he simply stares into your eyes. Then you feel it: a four-inch wide horse's cock pressing up against your upper pelvis. To your surpise, rather than plundering your anus, he simply presses at you. And then you feel it: his cock is somehow //making headway inside you//.
<<endif>>\
@@color:Yellow;You have gained a pussy@@
No longer able to deny him, the hellhound immediately spurts a jet of fiery pre-cum inside you and thrusts his monster horsecock inand out of you so fast your head spins. Your eyes roll back into your head and you can see nothing, the sensation of his cock sliding in and out of you unopposed at a blistering speed while droplets of his slobber drip onto your face and into your gaping mouth, their heat sizzling against your tender flesh.
When he cums, it's accompanied by an orgasmic wolf howl that echoes both throughout the stone hallways and inside your skull.
<<FemaleVirginity "hellhound">>\
How many times he does this, twice, three times, a dozen? You never find out, as you lose consciousness after the first.
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out with him still fucking you" "Church">>
<<set $WORLD.datapasser to ["sex","hellhound"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
<<if (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
<<FemaleVirginity "a drider">>
<<endif>>\
\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived + 1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>\
<<elseif (_mhasdick is false) and (_phasdick is false)>>\
<<set $PC[$CC][$PCsexACTS].pussylickgiven to $PC[$CC][$PCsexACTS].pussylickgiven + 1>>\
<<endif>>\
\
<<ProstXP>>\
\
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","drider"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "bunny boob fondle">>\
The bunny-girl gazes on with amusement as you approach her with outstretched hands, your eyes completely focused on her chest to the exclusion of all else. Clearly unbothered by the attention, she angles her chest upwards so that each breast is already in line with you hands by the time you reach her. Gleefully kneading her breasts, she sighs contentedly and makes happy little noises as you milk squirts of her breast milk onto your chest, where it drips in tiny rivulets down your torso.
<<if _pcpenis > 0>>\
Your hands now well-lubricated, you squeeze her boobs and rub them together. While you do this, she climbs into your lap and wraps her legs around you. With her boobs now at head height, you lean our face between then while she laughs and squeezes them together into both sides of your head. Your cock is rock hard by this point, and the position of her pelvis combined with the content smile of her face tells you that she knows. But for now you're content to enjoy her thick, perky boobs.
Leaning into each other with a hug and a sigh, you remain like that for several minutes before you finally get up to resume your journey.
<<elseif $Mon.penis > 0>>\
Your hands now well-lubricated, you gleefully squeeze her boobs and rub them together to the accompaniment of a rythmic shlicking noise. Unsure where it's coming from, you push her boobs apart only to realize that she's stroking her enormous cock in both hands. You're about to object when she suddenly grabs hard onto your shoulder and tilts her cock upwards to spray a thick jet of sticky bunny cum all over your face and chest.
Peering around a long trail of cum now dangling between your eyes, you <<print either("blush awkwardly","frown in annoyance","blink uncertaintly")>> as she giggles and laughs, then leans forward to lick her own cum from your face.
"Mmm, that was good," she whispers softly into your ear with a slight nibble. "I hope you beat me again sometime."
<<else>>\
Smiling into her eyes then glancing down, a knowing look fills her eyes as you lean downward take one of her nipples into your mouth. Sucking gently and continuing to knead both breasts from below, a warm stream of delicious bunny milk fills your mouth. Feeling her fingers now delicately running through your hair, you close your eyes and sip on her warmly flowing stream in contentment.
<<AdvanceTime 30>>\
A short time later, you wake up, having barely noticed that you'd fallen asleep. The bunny girl is still holding you in her arms, gazing down at you with nearly motherly love. You remain like that for several more minutes before eventually resuming your journey.
<<endif>>\
<<elseif $WORLD.datapasser is "bunny boobplay">>\
<!-- this is a rare and missed oppotunity for the milking stat to be relevant. Implement? -->\
<<if $Mon.sex is "female">>\
As the bunny-girl falls to her knees with an exagerated and obviously fake cry, you find yourself staring at her chest and then glancing down at your own. Noticing this, she waggles her eyebrows and folds down her one-piece to reveal her bare breasts. Smilling at the sight, you remove your shirt and sit down in front of her.
Reaching out to her, you cup her enormous bunny boobs in your hands and pull them up so that your nipples touch. Gasping at the sensation, you draw sweet little circles around her nipples with your own, then nudge closer so that one of your boobs fits snugly between hers.
Feeling her breath on your face, you look up to see her cheeks flushed bright red. Her nipples harden against your bare skin as she reaches up to begin kneading your breasts while you rub them against her. Hey eyes go half-lidded and her breath hastens, and you both lean forward into a hug, wiggling up and down and back and forth so that your breasts fondle each other with every inch of contact.
Eventually she sighs and nestles her head into your neck. You stay like that for several minutes,sharing a warm hug while your breasts move up and down with your every shared breath. Then with one last surprisingly chaste peck on her cheek, you stand and turn to leave while she waves goodbye.
<<else>>\
"Oh noes!" the bunny-girl falls her to knees with an exagerated cry, then glances up at you hopefully.
You find yourself staring at her enormous, exposed breasts, then glancing down at your own. Grinning at you, she cups her left breast in one hand and moves it up towards you as if in offering. Liking what's on display, you remove your own shirt and sit down on your knees in front of her. Reaching forwad to grab her boobs, she coots closer her in to make it easy. Close enough that your nipples touch, you grab one of hers and one of your own in each hand and bgin gleefully rubbing them back and forth on each other.
She traces one finger delicately under your arm and up your neck to begin rubbing her fingers through your hair and massaging the scalp on the back of your head while she rubs her moistened boobs against your own. There's an unexpected sound, however, and you glance down to see her stroking her enormous cock betwen your splayed legs. You freeze in surprise, and right at that moment she sprays a gush of semen onto your boobs and down your stomach. Before you can object she scoops it up with both hands and vigrorously rubs it into your boobs, then hugs tightly against you and rubs your boobs together.
"It's like a bubble bath!" she giggles, prompting you to laugh at her silliness before you at last join in with the mutual tit-rubbing carried on her generous handful of jizz.
Eventually you stop and clean yourself up, pausing only a moment to glance at the bunny girl now sleeping on her back in the grass.
<<endif>>\
<<elseif $WORLD.datapasser is "bunny vaginal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven + 1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
"Oh no, I has been defeated!" the bunny rests the back of her hand on her forehead and collapses to her knees. "How cruel is fate to leave me to be ravished by my conqueror!"
<<if random(1,2) is 1>>\
She looks over at you hopefully.
<<else>>\
"I am going be ravished right?" she looks at you sternly. "Right?"
<<endif>>\
Chuckling, you walk over and begin reaching for your pants.
<<set _r to random(1,3)>>\
<<if _r is 1>>\
"Yay!" she cheers, hopping overexcitedly swaying back and forth as you drop your pants to reveal your cock.
<<elseif _r is 2>>\
You don't quite make it though, because she gets there before you do. Tearing off your clothes, she hops up onto you like the bunny she is with lovely legs already wrapped around your torso and pumping on you before you can even fall to the ground.
<<else>>\
"Yay!" she cheers, rolling over onto her hands and knees and wiggling her butt as you. Happy to oblige, you grab her by the hips and slide your cock a couple inches into her dripping pussy.
"Mmm, yes..." she cooes as you start slowly pumping your way in and out of her. "Adventurer dick is the best!"
You briefly wonder what's so different about adventurers, but the sensation of the bunny-girl pushing back onto you and eagerly clenching her pussy around your cock quickly drowns out all other thoughts. She's so into it that you hardly have to move at all as she pumps your cock, sliding easily onto you and then squeezing when she reluctantly pulls away. Her clenching is so tight that you find yourself being pulled a bit towards her even time she pulls away. Not only is it sexy and erotic, it's strangely gratifying how it makes you feel like she desperately wants you inside of her.
<<endif>>\
<<set _r to random(1,4)>>\
<<if _r is 1>>\
Fully getting into the moment, the two of you pick up your collectvie pace until it is a hurried, frantic affair.\ \
<<elseif _r is 2>>\
"Yes! Yes! Yes!" she chants, whooping and hollering as you frantically pump a long staggered ejaculation into her. \
<<elseif _r is 3>>\
"I'm CUMMING!!!!" she suddenly shrieks, prompting you to cum in time with her frantic hip bouncing. "Mmm, mmmmm...yes." \
<<else>>\
You are AWESOME!" she screams, pawing at your back trying to pull you even deeper inside her as you cum. \
<<endif>>\
<<MaleVirginity "a sexy bunny girl">>\
The pleasure is intense, and for several minutes you keep your still-erect cock inside of her, jumping at the occasional little pulse as your breathing falls in time with hers. The two of you stay locked together for several minutes before reluctantly you at least slide yoruself out, give her an affectionate scratch behind the ears and continue on your journey.
<<elseif $WORLD.datapasser is "bunny ass rape">>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<if $Mon.pussy is true>>\
"I'm going to fuck you so hard," you growl as you approach the fallen bunny-girl.
"Oh no, I'm going to be ravished!" she gets onto her hands and knees enthusiastically and wags her hips at you. " How terrible!"
Planting your hands on her waggling hips, you plant your engorged cock at her anus.
"Oh," she seems a little less enthusistic. "Wouldn't have been my first choice, but I suppose something's better than nothing."
Without much concern for her approval, you thrust several inches into her ass then slide back a bit before pushing yourself in to the hilt. She takes it like a champ, apparently even squeezing her ass cheeks together to grip your cock more tightly. Then as you thrust in and out she matches her squeezes to your rhythm.
"Fuck, that's hot," you pant, digging your fingers into her butt cheeks as you pant in pleasure.
"I know," she giggles right as you climax inside of her.
<<else>>\
"I'm going to fuck you so hard," you growl as you approach the fallen bunny-boy.
"Oooohh!" he swoons. "Do you promise?"
By the time you get your pants off, he's already on his back, fingering his asshole.
"Get on your back," you command. "I don't want to look at yoru face while I do this."
"Oh, but I'm so boo-tee-full!" he giggles, but neverthless turns himself over present his ass to you. Needing no fyurther encouragement you plow down hard into him, his ass accepting your cock pretty easily. Whether from his preparation or because he takes a lot of cock, you don't bother to ask. Aside from the annoying moans and constant giggles, he makes a pretty good bottom, and when you're ready to cum you mash his face into the ground and burrow your cock all the way to the hilt to spray your cum as far up his rectum as it will go.
"Thank you!" he sighs. "I'm so glad you could enjoy me!"
You wipe your dick off on his leggings, then continue on your journey, feeling much refreshed.
<<endif>>\
<<elseif $WORLD.datapasser is "bunny suck her dick">>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven + 1>>\
"Oh noes!" the defeated bunny-girl dramatically collapses on her back with her arms and legs above her and bent at the knees and elbows. The position leaves her masive dickgirl cock still-erect and pointed straight upwards. It's such a monstrosity that you find your gaze drawn to it.
<<set _r to random(1,3)>>\
<<if _r is 1>>\
"Like what you see?" she giggles.
"Maybe," you hesitate, yet drawn to it like a moth to flame. "You wouldn't mind if I took a closer look, would you?"
"Look all you want!" she smilles happily. "Touch all you want, too! You can even //taste// all you want!"
Feeling reassured, you delicately lean over and give the tip of her cock a lick. It instantly spurts out a large dollop of pre-cum.
"See?" she laughs. "It likes you!"
Chuckling at her joke you lean in again and continue licking. Even though you were the victor and the bunny-girl your helpless prey, something about servicing her cock just feels right. Opening wide, you have to stretch to the limit just to take the bulb of your cock into your mouth as a second dollup of bunny cum spurts across the back of your mouth. Undeterred, you lick the underside of her shaft as you move your head back and forth to imaple the back of your throat with its masive bulk.
"Oh, yeah," she pants. "Suck that cock like you like it."
Reaizing that you //do// like it, the grin you feel forming on your lips makes it harder to perform as you alternately suck and blow in time with your head motion with increasing speed until at last she throws head back and screams in climax.
The gush of cum is so intense that it takes you several swallows to get it all down, and youe throat all the way down to your stomach feels sticky with her semen.
"That was so hot," so grins at you through half-lidded eyes for just a moment before collapsing onto her back, asleep, her cock in your throat dragging you down to the ground with her. It takes a moment, but eventually you extract your face from her meaty thickness and tidy yourself up to resume your journey.
<<elseif _r is 2>>\
"You want some?" she perks up. "Because if you're into bunny dick, I could totally hook you up. Let's just say, I know a girl."
"You mean you?"
"Yep!" She giggles happily, then looks at you conspiratority. "You know...since you defeated me in combat, then surely this big juicy cock is ''yours'' for the taking. If you ''want'' it, there's nothing poor little defenseless me could do to stop you from taking a little taste."
At first you feel a little conflicted. But the more you think about it, the more you realize that you do want it. You've never seen a cock quite that big on a girl quite this hot, and you're going to take advantage of the opportunity, you decide. Reaching down to cup her balls and tracing a pair of fingers up its length, your breathing hastens as you lean down to lick the tip of her shaft.
Her cock is too big to take fully into your mouth, and you settle for licking her glans while stroking her shaft with both hands. Alternating between cute little pants and moans, she leans back and fondles her tits in one hand while sliding a finger up and down her stomach with the other.
"Mmmm, yeah," she breaths throatily. "You're good at this."
Encouraging by her words, you find yourself being gently stroked by her feet lazily reaching around behind you then wrapping around in an almost-hug. When she slides an ankle across the back of your neck and nudges you forward, you take the hint and push foward down onto her cock, the bulb of her penis reaching down your throat, visibly distending your neck when she suddenly twicthes, then screams in pleasure as a blast of semen sprays deep inside of you.
Right as you're about to withdraw, a //second// blast of her cum fills you once again, sticky and hot inside you as she finally passes out from exhaustion on the ground beneath you.
<<else>>\
"Wink wink," she waggles her eyebrows at you. "Nudge nudge. Want to suck some bunny cock?"
You do, but leaning in for a closer look, you're not entirely sure you can. Settling in between her knees, you take her big bunny dick between your hands...//both// hands, and try to take full measure of its girth. It's easily a good three inches thick. As you contemplate the logistics of this, a generous bit of pre-cum splooges out across its tip, and you decide that now's the time. Opening your mouth as wide as it will go, you hesitantly start to lean in.
And that's when she decides to very helpfully grab you by the back of the head and impales you throat-deep onto her cock.
"Ooohhh, yeah..." she sighs in delight while you struggle to breath. "Best icebreaker ever. Sorry if I came on too strong, But if you think //that's// coming on too strong, just wait until I actually cum."
Sliding your throat off her cock, you accept her...questionable apology, and then put it back in your mouth to continue sucking on its sheer magnitude. True to form, the bunny girl cums quickly. You clean her up as best as you can before she gives you a friendly nuzzle and hops off into the forest.
<<endif>>\
<<elseif $WORLD.datapasser is "bunny handjob">>\
The bunny-boy lands on his back with his arms and legs above him. The position maybe reveals why he walks around on hands and knees: his dick is only about three inches long.
"Don't look at me!" he shouts, clearly distraught by your gaze.
Feeling pity, you sit next to him and take his penis in the fingers of one hand and begin stroking it.
"Is this ok?" you bat your eyelashes at him. At his nod, you lick your hand a couple times for lubrication and resume your tender ministrations. His breathing instantly turns so heavy that you're unsure whether he's really into this, or whether he's too nervous to really enjoy himself and simply pretending for your benefit.
"It's a nice cock," you assure him kindly, and that's the exact moment that he explodes.
"I"M CUMMING!!!" he shouts, far more loudly than the teaspoon of semen now spread halfway across your palm would justify. But he seems happy, and after giving you a quick hug, he bumps noses with you then hops off into the forest.
<<else>>\
Error in bunny sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<!-- cat -->
<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "cat boobplay">>\
<<set $PC[$CC][$PCsexACTS].milked to $PC[$CC][$PCsexACTS].milked + $Mon.level>>\
"HISSSS!!!" the cat-girl collapses to all fours and scowls at you.
Sitting down on the ground, you pat your lap a few times and then look away, feigning disinterest. \
<<set _r to random(1,3)>>\
<<if _r is 1>>\
It takes a few minutes, but eventually she comes around and lays on her back in your lap, looking at you curiously and batting at your face.
<<elseif _r is 2>>\
She glares at you suspiciously, but instead of looking back at her you start cleaning under your nails. Tired of being ignored, she leans in to nudge the top of her head against your chin. You scratch behind her ears and again invite her into your lap. This time she crawls on top fo you and curls over onto her back to look up at you.
<<else>>\
"HISSS!!!" she hisses. Then crawls into your lap anyway.
<<endif>>\
"<<print either("Nyan-nyan","Mwwrow","Meow","Nyaa")>>," she purrs at you, pushing her face into your head to demand more head scratches, which you happily provide. As she relaxes into the affection you start giving her belly rubs with the other hand, which she ignores.
<<if _pcboobs > 0>>\
<<set _r to random(1,2)>>\
<<if _r is 1>>\
<<set $PC[$CC][$PCsexACTS].milked to $PC[$CC][$PCsexACTS].milked + $Mon.level>>\
That's when you slide your hand from her belly up to her breasts and start playing with them. She ignores you and instead reaches out with her tongue and starts licking your nipples. Distracted by the sensation, you stop playing with her boobs for a moment which prompts her to growl at you. Chuckling, you take a cat breast in each hand and gently knead them while her ministrations at your own begins to draw milk, which she eagerly laps up.
<<else>>\
"HISSS!!!" she hisses suddenly, batting and clawing at your bangs, then just as suddenly getting bored and turning herself around in a circle on your lap. Amused by her antics but still focused on the supple curves of her body, you begin tracing delicate circles around one of her nipples, prompting her to roll over onto her back in your lap yet again, whacking you in the face with a knee in the process.
"Mrroww?" she looks at you quizzically, as if demanding to know why you've stopped playing with her. After a moment to settle your head, you resume kneading her breasts while she purrs happily at you.
<<endif>>\
You savor the sensation, encouraging her with happy little head pats with one hand while you continue to gently fondle her chest with the other. She doesn't seem to mind, and the two of you continue to lay together in the grass for some time before eventually you get up and resume your adventure feeling a little happier than before.
<<else>>\
<<set _r to random(1,3)>>\
<<if _r is 1>>\
That's when you slide your hand from her belly up to her breasts and start playing with them. Which she also ignores.
<<elseif _r is 2>>\
Figuring this is your opportunity, you stop petting her to cup both of her breasts in your hands. She immediately bites one of your hands and pulls it away. You take the hint and go back to scratching behind her ears with that hand while you continue to feel up her chest with the other. She seems ok with that.
<<else>>\
"HISSS!!!" she hisses. Then crawls into your lap anyway. Left uncertain by the mixed messaging, you hesitantly cup underneath her breasts and lift them appraisingly in boths hands. When her head tilts curiously at you, you assure her that she's a good kitty and her nipples noticeably harden from the comment. Rolling them between your finger and alternately hefting and squeezing her tits in your hands, you begin to lose yourself in the sensations.
<<endif>>\
<<if random(1,2) is 1>>\
Once you've had your fill, you give her a pat and the head and tell her she's a good kitty.
<<else>>\
Once you've had your fill, you reach out with one hand to give her a pat and the head, which she immediately swipes at with her claws. Having had enough of that, you turn and walk away while she meows at you to come back.
<<endif>>\
<<endif>>\
<<elseif $WORLD.datapasser is "cat vaginal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven +1>>\
"HISSSS!!!" the cat-girl collapses to all fours and scowls at you.
Approaching carefully, you reach out with an upward-facing palm to let her sniff you. Suspicious, she frowns at your hand, then leans in as if to sniff it, then immediately bites you.
"Ouch!" you yank your hand away. "Bad kitty! Bad!"
<<if $Mon.sex is "female">>\
Cringing at the reprimand, she demurely undoes the velcro on the bottom half of her catsuit, then turns away from you and kneels down with her ass in the air. When you don't mount her right away, she starts waving her ass back and forth and insistently meows at you. Confused but aroused, you drop your pants and move in behind her.
"HISSS!!!" she snarls once again, frantically reaching around with one hand to hit you while still suggestively waving her ass in the air.
"So that's how it is?" you frown. "Ok, fine. We'll do it your way."
"Bad kitty!" you slap her ass and thrust your cock into her already-dripping pussy while you force her head to the ground.
"Mrrrowwlll!" she howls as she pushes her hips back in time with your thrusts. "FSSSS!!!"
<<MaleVirginity "a tsundere cat-girl">>\
It's an interesting interplay, with you fucking her even harder while she continues to snarl and hiss, fighting and trying to scratch you with every opportunity. Tiring of this, you plant your hand between her shoulder blades and push down to the ground hard enough that her boobs splay out to eth side.
"Mroooowrrl..." she moans, softer and softer. "...mrooww."
By the time you finish, she's purring happily and ready to comes to sit in your lap for head scratches. The nice kind, not the bleeding kind.
<<else>>\
Rather than relent at the reprimand, instant she glares at you defiantly with her arms crossed. An act made somewhat difficult by the enormity of her breasts. Deciding it's time to take charge, you roughly swat her on top of her head.
"Bad kitty! Bad! Down, kitty! Down!"
She continues to stand, but you can't help but notice her trying but failling to suprress the edges of her mouth turning upwards. Realizing she likes it rough, you swat her again and bear your weight down on your to force her to ground, her giving just enough resistance to make it seem plausible while she claws at your chest with paws that very obviously have retracted claws.
"Mrrowwllll," she wails, her ass wiggling in anticipation as she pushes her hips back against your pelvis. Not one to disappoint, you stick the tip of your cock just half an inch or so inside of her then pause to watch her frustrated gyrations before at least gracing her dripping pussy with your manhood. Never once does she relent on pretending to try to get away however, clawing at thr groudn as if to crawl away even as she pushes her hips back onto you in time with your thrusts. In fact, even now her pussy is clamped so tightly aroundyour cock that it's almost difficult even to pull back out of her between thrusst, and it doesn't take long before you cum inside her with a vibrant moan of delight.
Purring now, the cat-girl at last seems content to dispense with the charade, and lays there quietly still wrappined aroudn your cock. When you try to pull out, she immediately clenches and meows as if she doesn't want you to leave. But alas, good kitty, you tell her, it's time for you to go. With a pout, she lets go of your dick and sticks one leg in the air to reach down and lick your semen out from her own pussy. 'Pretty flexible cat-girl,' you think to yourself, before picking up your things and continuing your journey.
<<endif>>\
<<elseif $WORLD.datapasser is "cat fucks you">>\
<<if $Mon.sex is "male">>\
Feeling frisky, you get down on your hands and knees and turn around to wave your ass at him. He begins licking his arm and rubbing it across his face to clean himself, but you catch him sneaking glanced out of the corners of his eyes.
"Come on, are we doing this or what?" you slap your ass, but he continues to preen despite his obviously growing cock.
"Alright then, I guess you're not interested."
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
The moment you start to stand, he immediately rushes over to mount you, planting your face into the ground with all his weight and then positioning just the tip of his cock at your pussylips.
"Meow," he whispers into your ear, then delicately plants the first inch of his cock inside you.
"Oohhhhkay..." you exhale, easing into the pleasure. "Letting you do ALL!! ...oh, the work...was definitely the rightr choice. Oh, mmmm."
<<FemaleVirginity "a muscular cat-man bodybuilder">>\
The cat-man's cock is as thick as his mucles, and he fucks you nonstop and tirelessly through <<print either("two","three","four")>> of your orgasms before he finally cums himself. By that time you're feeling pretty pleased with yourself. As for him, he immediately pulls out and sits down to preen himself without a care, scarcely noticing when you eventually get up to leave.
<<else>>\
The moment you start to stand, he immediately rushes over to mount you, planting your face into the ground with all his weight and then positioning just the tip of his cock as your anus.
"Do it," you tell him, which he obliges by grabbing onto your hips hard and slowly but unstoppably pushing his thick meaty cock a good 8 inches up into your intestines. It's slow at first, but once his pre-cum starts to slicken your insides things get a bit easier after that. His cock is still just a little too big for you though, and for the next several minutes you have to intentionally relax just to stay on the positive side of pleasure vs pain.
Evantually he graps your hips more tightly and thrusts one last tiem, painting your sides with his manly cat-seed before immediately withdrawing and turning his back to you to preen. Taking your time to recover, by the time you're ready to leave he's now napping quietly in the grass without a care in the world.
<<endif>>\
<<else>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
The defeated cat looks at you with clear lust and frustration in her eyes. Deciding it's time for you to get some you set yourself down on your hands and knees and wave your ass in her direction.
"Poor little kitty," you tease. "Does the pussycat want some pussy?"
Her eyes briefly bulge, and you see a whole range of emotions flash across her face. Eventually she settles on 'petty annoyance' and turns her back on you in huff.
"You're playing hard to get for such a fierce warrior kitty who couldn't even beat a lowly adventurer. But, oh no!" you feign. "I'm so hurt from our battle, I've fallen and I can't get up!"
At this, the cat at least peers around to look at you, and upon seeing you shaking like you're hurt, her ass wiggles in excitement and she instantly pounces on you.
"Oh no!" you play along. "The kitty has captured her prey!"
Her erection bobs up so fast you briefly wonder if you've made a mistake, but in the next second she's balls-deep inside you and thrusting like a frieght train and all your objections instantly melt away.
"Oh no!" you continue to feed her fantasy, "I'm all helpless and can't possibly escape such a powerful hunter!"
<<FemaleVirginity "a tsundere cat-girl">>\
You //feel// her cock harden and twitch inside you, and she gasps for but a second before you feel a firehouse of semen blasting and filling you completely with her seed. You weren't quite finished yourself, but feeling her gasp and pants and shudder on top of you brings its own kind of pleasure. It takes her several minutes to recover, and after sliding out she gives you an uncertain look before licking you affectionately on the neck then quickly dashing off into the woods before anyone can see.
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
The defeated cat-girl falls backwards onto her butt and furiously glares at you. Seeing her gradually waning but still pretty beefy cock between her legs, you decide to play with her a bit, getting down on your hands and knees and waving your ass in her face.
"Poor little pussycat," you tease. "Did the pussy-kitty want something she can't have?"
Her anger flares, and she instantly pounces on you and starts madly thrusting her cock between your thighs. Laughing at this, you continue to mock her.
"Oh no!" you tease. "Can't even get it up for somebody giving you a pity fuck? Defeinitely a //pussy// cat!"
Seconds later she's balls-deep in in your ass and thrusting like a madcat, and yet for all its bulk you can't help but notice that her cock isn't fully erect.
"Getting bored here," you pretend to yawn. "Wake me up when you're ready."
Frantic now and struggling, she somehow manages to cum but she's in tears at this point and she obviously didn't enjoy it. Collapsing backwards, she and her half-erect cock slip effortlessly away into a crying heap. Feeling some geunie pity for her, you comfort her and give her head pats and tell her she's a good kitty, but she clearly doesn't believe you.
Suprisingly, you feel pretty good yourself despite not climaxing at all. Almost as if the way you emasculated her somehow gave over all her energy to you. Feeling pretty good about yoruself, you give her a courtesy pat on the head then continue on your way.
<<endif>>\
<<endif>>\
<<elseif $WORLD.datapasser is "cat handjob">>\
The cat-morph collapses on $Mon.hisher back, panting and sweating from the exertion of battle, clearly trying but failling to keep $Mon.hisher cool. Feeling empowered, you stride boly over until you're standing straddled over $Mon.himher. You can't help but notice that the position nicely aligns $Mon.hisher cock between your legs.
Liking what you see, but not quite feeling up to going all the way right now, you step off to the side and sit down next to <<print $Mon.hisher>>.
Curious now, the cat watches as you casually take $Mon.hisher pleasantly thick cock in both hands and start stroking. Leaning in close to take in the scent, your nipples harden and your grin goes wide.
"You've been a bad kitty cat," you tease, sliding your hands freely up and down on $Mon.hisher generous pre-cum.
Leaning down to take just a small lick, you can't help but notice the thick, reddish-purple veins flowing abundantly across $Mon.hisher length. You also note the suddenly rapid twitching, and lean back to avoid a streak of cat-cum that instead lands across $Mon.hisher chest.
"Have you been properly punished now?" you snicker. "You'll be a good kitty now, right? No more attacking innocent adventurers?"
"Meow," $Mon.heshe deadpans noncommittally, then immediately tilts $Mon.hisher head dowards to start licking <<print $Mon.hisher>>self clean.
<<else>>\
Error in cat sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "fox blowjob">>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven +1>>\
<<if $Mon.sex is "herm">>\
"I have been defeated!" the fox-man lets out an exaggeratedly feminine cry, falls to the ground then looks up at you expectantly. "Oh, woe is me! I can only imagine what sort of degenerate acts I will doubtlessly be forced to endure!"
Shrugging, you point at your crotch and tell him to get to work. He chitters in excitement and wraps a circle around your cock with a suprisingly long, pink tongue. With a big silly grin on his face, he then inhales to slurp your cock balls-deep against his chin. Resting your hands on top of his head, you let him set the pace as he enthusiastically sucks on your cock, masterfully teasing its underside with his tongue while rubbing its top against the ridges on the roof of his mouth.
"You've...had..." you gasp," a lot of PRAC...tice...with this. Oh, fuck me you're good."
Within 30 seconds you're howling in exctasy while he drinks your semen. When you're finished, he looks up at you with his tail wagging for more, but you send him on his way and get back to adventuring.
<<elseif $Mon.sex is "male">>\
Unable to stay standing, the fox-man collapses to the ground. Grabbing him under the jaw, you squeeze to force his mouth open and examine his teeth. They're sharper than you'd prefer, but nothing ventured nothing gained, right? Jamming your cock down his throat, the sensation of him gagging around your member fills you with unexpected lust. Figuring that if you push on his throat hard enough he won't be able to bite, you wrap your hands around the back of his head and ram yourself balls-deep into him, the tip of your cock bending just a bit to match the curve of his esophagus
You //feel// teeth, but he either can't or doesn't feel inclined to bite, so you try to pick up your pace but find the sandpapery-feel of his tongue a bit off-putting. You probably could cum this way if you tried hard enough, but eventually you settle for pulling out and masturbating your dick between your hand and his face, then finish with a spurt of semen which he reflexively licks out of the fur of his muzzle.
<<else>>\
Collapsed on the ground, the fox-girl looks up at you. "So what happens now?" she asks.
"Now," you point betwen her legs, "you're going to suck my dick."
"Oh?" she tilts her head in surprise then reaches for your cock. "If that's all you wanted you hardly needed to fight me for it."
Reaching out with her tongue she delicately licks your tip. It's cat-like, with rough little hairs across its entire length, each gripping and tickling your member as she works it. Maddeningly at first, she does nothing across the length of your shaft and instead focuses entirely on just your tip. Licking just the front of your glans, the top, the sides...produces a uniquely erotic experience, and you find yourself grrabbing onto her head just to maintain balance. You're about to say something when she opens her mouth fully and rubs the top of your dick against the ridged roof or her mouith her tongue continues to work the bottom.
The occasionally sensation of her sharp, pointed teeth lightly tugging at your skin informs you of the reason for her particular technique.
Physiology prevents her from ever taking your cock inside, but her persistence over <<print either("several","several long","nearly ten")>> minutes at least gives you an enduring orgasm that lasts longer than expected, followed by a dozen little spasms of pleasure while she licks you fully clean.
Looking up to you at last, you can help but laugh at the cute little tail wag she gives before you part company and resume your adventure.
<<endif>>\
<<elseif $WORLD.datapasser is "fox forced anal">>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + 1>>\
<<if $Mon.sex is "herm">>\
"I have been defeated!" the fox-man lets out a very feminine cry, falls to the ground then looks up at you demurely. "Please be gentle."
"No promises," you shrug, flipping him over onto his stomach and pulling his ankles apart. He protests slightly, but goes silent the moment he feels the tip of your penis against his anus.
"...ok," he faintly moans, then gasps when you thrust suddenly inside. From that point he becomes completely cooperative and pushes back against you with your every thrust. He does make a kind of annoying chittering noise, but you figure that's just 'what the fox says' and continue humping away at him. After a couple minutes he starts to alternate between squeezing and pushing his rectum against you, and that pushes you over the edge into climax.
Glancing at the brownish goo of your semen mixed with his stool, you wipe your dick off on his fur and then resume your adventure.
<<elseif $Mon.sex is "male">>\
Weak on his knees, the fox collapses to the ground, unable to continue the fight. Unimpressed with the weird green color of his cock, you whip out yours and wave it in front of his face a few times.
"Umm," he stutters. "I don't do...uhh, blowjobs."
"Ok, that's fine," you nod, flipping him over onto his stomach and picking him by the hips.
"Wait!" he objects. "Blowjobs are good! I give great blowjobs! Please!"
"Too late," you shrug, plunging your cock balls deep into his asshole while he struggles to escape. "But I liked how you said please. Maybe you can lick me clean after I'm finished."
He goes very quiet after that, leaving you to plunge the chocolatey depths of his hershey highway uninterrupted. When you're ready to cum you push his head to the ground and lean hard into his hips to let me know it's coming. Then you keep fucking his asshole for another couple minutres just to keep him in suspense before you do finally release your load.
Cleaning yourself up after you finish, you notice him walking strangely as he leaves.
<<else>>\
"I thought I could beat you," the fox-girl pouts briefly, then looks up at you with a glimmer of hope. "But perhaps I can still beat you off?"
"I have something better in mind," you grin. "Turn around and get on your hands and knees."
She blinks a few times, then wordlessly complies. You grab her well-muscled ass cheeks with both hands and begin roughly kneading them, your erection steadily growing and sliding its way up her thighs as it seeks its target. Sliding a finger delicately across her pussy lips, she then suddenly gasps when you thrust into the //other// hole.
"That's not my pussy!" she cries out in shock. "That's my ass hole!"
"I know!" you shout back, pressing her head to the ground and burrowing in and out of her with reckless abandon. Her sweet virgin ass is so tight it almost hurts, but as you start to cum the lubrication kicks in and you settle in for a nice long ride. Unfortunately the sensation is so ovewhelming you last barely a few minutes before you cry out in extasy and paint her intestines with a gallon of your sperm.
By this time she's stopped objecting, and is waiting patiently for you to finish. Unwilling to hurry for her benefit, you take your time and keep thrusting until your dick begins to go soft, at last coming out of her with a 'plop' sound.
"Such a waste of good cock," she sighs, then stands and walks sadly away.
<<endif>>\
<<elseif $WORLD.datapasser is "fox vaginal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
Collapsing to her knees, the fox-girl looks up at you in concern. Not wanting to disappoint her, you push her onto her back and climb between her legs.
"Oh thank goodness," she sighs in relief. "I thought you were going to eat me."
"No, figured I'd skip the foreplay," you joke, prompting a few giggles from her as she wraps her legs around you and hooks her ankles together behind your back.
Leaning in to smell her neck, you nuzzle under her ear with your nose then bite her gently as you slide your engorged cock into her eager pussy.
<<MaleVirginity $Mon.virgin>>\
Thrusting gently into her warm recesses, she gazes lustfully into your eyes and plays with your hair as you pick up the pace. Kneading her furry boobs in one hand while you caress her face with the other, meanwhile her claws lightly trace across your back as if trying to gently pull you even more deeply inside her. Happy to oblige, you slow your pace, but push harder and deeper with each thrust, eliciting moans of pleasure quickly followed by her first climax as her mouth goes wide and her pussy clenches around your cock as if trying to squeeze your climax out of you and into her.
But you're not finished just yet. You grab her left ankle and pull its knee to her shoulder, scissoring her legs around your torso then thrusting so hard inside her that her eyes visibly bulge. Completely in your control, she's reduced to little more than lustful whimpering while you pound hard, then finally burst a frothy blast of seed with so much force that some richochets and spills out onto the ground beneath her.
Panting together, she nods off to sleep with her arms still around you.
<<elseif $WORLD.datapasser is "fox pussylick">>\
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<if $Mon.sex is "female">>\
"Your fur is very pretty," you smile admiringly at the defeated fox-girl.
"I groom myself often," she nods.
"Mmm," your eyes go half-lidded. "I'd like you to groom me."
"But you have no fur," she frowns. "Unless you wish me to lick your head?
Sitting on the ground on your butt, you spread your knees high and wide, beckoning her over between your legs.
"Oh, is this your first time with a fox-girl?" she giggles. "Very well. But remember you asked for this."
<<else>>\
With the fox struggling to stay on his feet, you nonchalantly walk over and knock him to the ground with a light tap. He stays down, but when you lays out in front of him with your legs spread, he raises an eyebrow in confusion.
"I beat you," you grin smugly. "So you're going to lick me until I spray girlcum in your face."
"Are you serious?" he laughs. "Ok, well...you asked for it!"
<<endif>>\
The fox is on you before you can stop to ask what $Mon.heshe means. You find out the moment $Mon.hisher roughly bristled tongue makes contact with your clitoris. After some adjustment the sensation is not totally unpleasant, but neither is it the sexy experience you had in mind. Running $Mon.hisher tongue up and down your labia, over your clit, occasionally inserting a clawed finger inside of you...$Mon.heshe's clearly putting a good effort in, but the longer $Mon.heshe goes, the more painful it becomes.
<!-- what about damage reduction from achievements? -->\
<<ChangeStat $PChpcur -1>>\
@@color:Yellow;You take 1 point of damage!@@
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _AllowNormalExit to false>>\
@@color:Red;You have died!@@
<<set $WORLD.diedby to "Cunnilingus with a fox-morph. Their tongues are bristled.">>\
\
<<AwardAchievement "Durable">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) After life review" "Death">>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<else>>\
<<set _CapHack to $Mon.heshe>>\
<<set _CapHack to _CapHack.toUpperFirst()>>\
Eventually the pain becomes too great and you ask $Mon.himher to stop. <<print _CapHack>> shrugs and darts off into the distance, leaving you to resume your journey alone, and with a slightly awkward walk.
<<endif>>\
<<elseif $WORLD.datapasser is "fox cowgirl">>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
\
The fox-man stumbles and falls to the ground. Not wasting any time, he struggles not at all and seems pretty pleased with himself as you step in and push him on his back. Grabbing his already-erect cock in one hand, you place its tip gently at your pussy lips and begin rubbing it up and down the length of your slit. Savoring the sensation with every thrust, you slide up and down on his cock just a few inches at a time at first, then a few more inches, then a more few more...gently reveling in every inch of his shaft as you slowly guide more and more of it inside you. With the lubricating help of his pre-cum, you eventually work its entire length inside you to the point that the fur on his balls is tickling at your ass checks.
<<FemaleVirginity $Mon.virgin>>\
<<if _pcpenis > 0>>\
Looking down, you see his mouth open with his tongue hanging out. Feeling deeply lustful and a bit mischievous, you take aim with your cock and begin stroking yourself off as you continue sliding gracefully up and down on his cock. \
<<if random(1,2) is 1>>\
You climax before he does, spraying a jet of semen across his face and mouth mere seconds before he paints your insides with his.
<<else>>\
He climaxes before you do, the tell-tale twitch of his cock inside you prompting a waterhose gush of fox semen up inside you a mere second before you spray your own load of semen across his face. It takes him a moment to realize what it is, and you continue stroking yourself off in the meantime while your pussy clenches gleefully around his cock.
<<endif>>\
<<elseif _pcboobs > 0>>\
With your eyes now closed, you gasp at the unexpected sensation of his hands gently sliding up your torso and cupping your breasts. Liking this, you find yourself thrusting harder up and down on his cock while he squeezes your tits and his fingers dance over your nipples. It doesn't take long before his hands slide back down to firmly grip your hips and he starts thrusting up to meet your downward bounce on his cock.
<<if random(1,2) is 1>>\
Content to relax and enjoy yourself, you let him set the pace as he fucks up into you. Reaching down with your fingers to run them gently through his fur, you lean forward to pull your hips away from him to make him thrust delightfully harder to fully reach you. The forceful energy of it brings you to climax first, and you settle back to enjoy his determined thrusting for a good minute longer before he finally ejaculates inside you, only to collapse in exhausttion immediately afterwards.
His semen tickles its way down your thighs as you slowly pull yourself off of him, then get dressed to walk away as he slips into blissful unconsciousness.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived - $Mon.level>>\
Annoyed by his assertiveness, you slam your hips down hard to meet his, feeling every tingle and pulse of his cock inside you as he desperately squirms trying to generate some friction. He's barely on the edge of climax and so are you, but you make him wait to come down before you resume thrusting yourself up and down on his cock. Too slow for his tastes, but enough that you bring yourself to climax before he can, then get up and walk away, leaving him to frustratedly masturbate himself the rest of the way.
<<endif>>\
<<else>>\
@@color:Yellow;Debug: No penis, no boobs found in fox sex event@@
<<endif>>\
<<else>>\
Error in fox sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "wolf pussylick">>\
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
Walking over to the defeated wolf, you drop your pants and give him a serious look. The uncertain look in his eyes tells you that he's confused more than scared, but the wagging of his tail and the hint of red tipped dick poking out of his sheath tells you that he's not wholly uninterested in what's on display.
"Lick me," you command.
His eyes light up and he happily sniffs his way between your legs and begins licking up and down between your labial lips. Planting your hands on his head and watching in amusement as his tail continues to wag behind him, you don't object very much when he slides his arms between your knees to squeeze your butt, then pushes your knees apart with his elbows and places you gently to the ground.
More comfortable now, the wolf continue to lavish your pussy with his long, slippery tongue, the tip of his nose cold and occasionally brushing against your stomache as you climax. After a few minutes of bliss, he begins climbing up your torso to mount you missionary style, but you bop him on the nose and tell him to get back to licking. Whining but obediant, he resumes his licking and brings you to a second climax before you decide you've had enough and release him.
Glancing at his thick, red cock as you put your clothes back on, you briefly consider letting him fuck you, but by this time he's already furiously masturbating on the ground and you find yourself too amused at his antics to interrupt. Instead you simply enjoy the show, chuckling to yourself as his ejaculation sprays up his chest and nearly to his chin, making a mess of his fur in the process.\
<<elseif $WORLD.datapasser is "wolf take cock">>\
Enamoured with that bright red cock of his and curious what it might do to you, you walk up to wolf-morph and bend over, legs locked, with your head below your waist. Turning around with a smile, you jiggle your ass at him and wink.
<<if (_pcpussy > 0)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
The wolf grabs you by both ass cheeks and squeezes, a trail of horny drool dribbling onto your back as his perky cock slides up between your thighs. Squeezing your legs together and looking between them, you watch as his thick meat slides gracelessly between your thighs once or twice before he pulls back and manages to line up the tip between your pussy lips. Its end is thin and pointy, pushing your lips apart effortlessly then rapidly swelling into a thick cock nearly three inches across, then shrinking back down to a more human size near his balls. The extra thickness inside you creates extra friction as he draw backs, and the sensation makes it feel like your pussy is reluctant to let him go.
<<FemaleVirginity "an thick-dicked wolf-morph">>\
Happy to accomodate that reluctance, the wolf eagerly slides his full length back into you while you squeeze down on it to feel every inch now gliding freely in and out of you with every thrust. Feeling weak at the knees, you collapse, only to feel the wolf effortlessly carry your weight gently to the ground, then press down on the back of your neck and start plowing into you at such a steep angle that it almost feels like his cock is pounding into you straight down from above.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
Happy to take charge, the wolf grabs your hips in his furry hands, then slides them tightly around your waist and squeezes as if to make sure you can't get away. Pushing your head down a little further, you revel in the feel of being dominated as the pointy tip of his cock pierce your anus already dribbling with a long line of pre-cum that trails down your thigh before he's even halfway inside you. Then with a cock as thick as your forearm he begins to thrust for real, gradually picking up the pace and gliding effortlessly on occaionslly spurts of pre-cum that make you so weak in the knees that eventually you collapse to the forest floor beneath him, pulling him down with you so that his full weight lands squarely on your hips.
<<endif>>\
Fully squished between his weight on top of you and the ground below, you relax as he grunts his way in and out of you, opposed only by your occasional involuntary clenching around his meaty cock. You cum when he does, your nipples hard and brushing against the forest floor while he squeezes your waist and pulls it back onto his cock so tightly that you feel the twitches of his balls as they release his load inside you.
Not in any hurry to leave, he pushes your face into the ground and rests his knees between yours, holding both his cock and sperm inside you until after several minutes his cock eventually begins to recede. Still taking his sweet time, he evntually pulls out of you with a plop, then dashes off into the forest alone.\
<<elseif $WORLD.datapasser is "wolf anal">>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
Dropping your pants and walking over to the defeated wolf, his eyes bulge at your cock as he futilely tries crawling backwards away from you.
"Wait!" he objects. "I thought you were a girl!
"Wow, really?" you feign surprise. "I thought the same about you!"
Scrambling away as you advance on him, the wolf instinctively gets down on all fours to run, giving you easy access to his tail. Grabbing onto it and haulling him back, you pull his hips up and press his head to the ground, positioning the tip of your cock at his asshole then begin rubbing it up and down.
"I'm not into men!" he insists.
"That's ok," you assure him with a gentle pat on the head. "I'll be into you instead."
Plunging balls deep into the wolf on your first thrust, he cries out in pain and fury as you hold him in place and ride his asshole. He continues to struggle, but weakened as he is from the fight it's easy for you to hold him in place, your cock gliding effortlessly in and out of his tight ass. Eventually his struggles cease and you curiously reach underneath him to find his own cock surprisingly erect for someone who fought so hard to avoid this. You briefly consider stroking him off when you cum, but shrug off the thought and instead grip his hips with your hands and bring your entire body weight down to bear, mashing his face and chest into the ground as you do.
"Huuurrrrrunnngh!!!" you cry out, painting the wolf's intestines with your semen while he squirms underneath you.
By this time the wolf is reaching for his own dick, but you pull out and drop him to the ground before he can. Then, wiping your dick on his fur, you thank him for being such a good fuck and continue on your way.\
<<else>>\
Error in wolf sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
<<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
<hr>
\
<<ProstXP>>\
\
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
$PC[$CC][$PCsexACTS].bjgiven
$PC[$CC][$PCsexACTS].bjreceived
$PC[$CC][$PCsexACTS].pussylickreceived
$PC[$CC][$PCsexACTS].vaginalreceived
$PC[$CC][$PCsexACTS].analreceived
$PC[$CC][$PCsexACTS].semengiven
$PC[$CC][$PCsexACTS].semenreceived
$PC[$CC][$PCsexACTS].milked
<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated human <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "human blowjob">>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + 1>>\
<<set _r to random(1,4)>>\
<<if _r is 1>>Knocked briefly off her feet, the girl sits up just in time to see you drop your pants, revealing your cock at full mast and ready to go. \
<<elseif _r is 2>>Stumbling and collapsing to her knes, the girl soon finds herself nose to nose with your fully erect cock. \
<<elseif _r is 3>>Collapsing with a dainty squeek,
<<else>>You drop your pants and walk over to where the girl sits, still dazed and hurt from the battle.
<<endif>>\
<<set _r to random(1,3)>>\
<<if _r is 1>>For a moment she looks up at you in anger, but then a look of realization slowly washes over her.
<<elseif _r is 2>>From the battle-worn look of her gear, you'd guess she's been adventuring for a long time. Surely it can't be much of a surprise to her what happens she she loses a battle.
<<else>>She's clearly annoyed by this, but after looking at your cock for only a few seconds instantly deflates with a look of resignation plastered all over her face.
<<endif>>\
<<set _r to random(1,2)>>\
<<if _r is 1>>\
"Could be worse," she admits finally with a sigh.
"How so?"
<<if $PC[$CC][$PCmorph] is "human">>\
At least you're human," she looks at you. "Some of the things in here...aren't. And sometimes monster cocks are disturbingly bulbous and-"
"Yeah, <<print either("that's about the last thing I want to hear right now","not interested","I think I'll pass on that story")>>," you shudder, almost losing your erection when she saves the day by parting her lips and gracefully sliding your cock across her tongue.
"Much better," you sigh, looking down to meet her gaze looking up at you. She seems to be getting into it, and you think you detect a hint of a smile in her eyes as she starts inhaling and exhaling on your cock to pick up the pace. Surprised by her growign enthusaism, you let her set the pace and settle in for a lengthy
"Mouth's getting tired," she admits at last. Deciding you're content with her performance, you grab her hair and start humping her face while she puts in a good effort with her lips and tongue to cover as much of your cock as possible at it thrusts in and out of her. It only takes a few minutes after that.
<<if random(1,2) is 1>>\
Deciding to to cum inside, you grip the back of her head to let her know she's going to swallow. She doesn't resist, and it only takes her a couple swallows to get it all down.
"Good girl," you pat her on the head, then turn to leave.
<<else>>\
On a whim you pull out at the last minute and cum all over her face and chest.
"Not on the dress!" she shouts in annoyance.
"Too late," you shrug. "Swallow more next time."
<<endif>>\
<<else>>\
"At least you're not human," she shrugs. "Why do you think I come here in the first place?
With that she takes your cock into her mouth with a delighted cooing sound and goes to work sucking and slurping it down. Gasping at her eagerness, you nearly stumble forward from the industria-strength suctioning she gives you, all while masterfully fondling your balls in one hand and reaching around to squeeze your ass cheeks with the other.
"Oh fuck," you pant, steadying yourself with your hands on the top of head. It doesn't take her long to being you to climax.
"Oh yeah," she grins, licking your semen from her lips. "I've still got it."
<<endif>>\
<<else>>\
"I don't suppose you'd be willing to let me go because I'm human?"
"<<print either("Nope","Not a chance","I don't think so")>>," you say, grabbing her head and impaling it onto your cock.
"Oh yeah," you pant, face-fucking her with gusto. "Healers give the best head.
"Mmmmrrmmhh!!" she tries to speak around your cock slamming itself across her tongue.
Annoyed, you take your cock out and look at her pointedly.
"I said-"
And then you mash her face balls-deep back onto your cock, just in time to spray a geyser down her throat. Too busy swallowing to keep from drowning, she stops trying to speak. Deciding you prefer it that way, you keep your cock in her mouth until your erection starts to fade, then quickly slip out and walk away.
<<endif>>\
<<elseif $WORLD.datapasser is "human male anal">>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
"As the victor of this battle, I am entitled to my reward!" you shout at the fallen man. "And what better way is there than this?"
He looks up at you fearfully, unsure whether what's to come will bring painful submission or blissful release. You reach for his hips and pull him forward onto his knees as your other hand reaches down to grab hold of his cock. You feel it harden in anticipation, ready for you to take control. Pressing $Mon.himher head down towards the ground, you hear $Mon.hisher gasp as your dick probes into $Mon.hisher ass while you simultaneously stroke $Mon.himher off. Thrusting now into $Mon.hisher tight asshole, you can feel $Mon.himher relax into submission, give <<print $Mon.himher>>self over to you completely.
It doesn't take long before $Mon.hisher uncontrolled moans push you over the edge, and the two of you climax together, leaving $Mon.himher in a veritable pool of your mixed fluids.
<<elseif $WORLD.datapasser is "human vaginal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
"You're mine," you tell $Mon.himher simply, standing over $Mon.himher as $Mon.heshe helplessly tries to crawl away from you on all fours.
You grab $Mon.himher by an ankle and yank hard, dragging $Mon.himher several feet against the ground until she stops resisting. <<print $Mon.hisher.toUpperFirst()>> shuddering makes it plain that $Mon.heshe knows what's about to happen, but is powerless to stop it.
You lean downwards onto $Mon.hisher back until $Mon.hisher head hits the ground, then carelessly toss aside the flowery length of $Mon.hisher dress to reveal a body now exposed for your pleasure alone. You slide your hands underneath to grab $Mon.hisher breasts, pinching nipples between thumbs and fingers while simultanously pushing $Mon.hisher legs apart with your knees to reveal what you're really after. By now the girl is moaning in anticipation, and the moment your cock reaches $Mon.hisher sex you thrust into $Mon.himher with all the force within you, feeling $Mon.hisher delicate pussy walls tightly clench around you like a vice grip while the rest of $Mon.himher writhes beneath you as if begging for more of what only moments ago was the unwanted invasion of a conqueror.
<<print $Mon.heshe.toUpperFirst()>> cums before you do, and when you at last do fill $Mon.himher to the brim with your seed, $Mon.heshe cums again, then passes out.
<<elseif $WORLD.datapasser is "human motorboat">>\
You are the victor, and you feel yourself growing aroused as your opponent lies helplessly beneath you on the battlefield. <<print $Mon.himher.toUpperFirst()>> breasts are magnificently large. So big that they almost seem to be a part of $Mon.himher torso rather than just another appendage. You reach down and fondle them, marveling at their size, your hands gliding over their soft skin with ease.
Your lips reach hers with a passionate kiss while you cup and squeeze her breasts with an insistence that grows stronger by the second. Wrapping one arm aroud her back, she leans her head back as you squish at first your nose, and then your cheeks between her gigantic, ponderous mounds of bouncy and bountiful pleasure and joy. It takes a surprisingly long time before your nose at last reaches $Mon.himher chest, which you gleefully flick with your tongue while you shake and wiggle your head back and forth, kneading and pressing $Mon.hisher breasts into your face with both hands.
Satisfied with that, you pull back only to see a silent longing in $Mon.hisher eyes, a longing fated to remain unsatisfied as you give $Mon.himher one last lustful look, then turn to continue on your journey.
<<elseif $WORLD.datapasser is "human suck his dick">>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Surrounded by all manner of inhuman creatures, something about the //human// in front of you fills you with a very homey sense of belonging.
"I'm going to suck your dick," your eyes go half-lidded as you kneel before $Mon.himher and look up hungrily into $Mon.hisher eyes.
"...oh...kay?" $Mon.heshe raises on eyebrow, and then both as you take $Mon.hisher cock between your lips and eagerly slurp it down to the base of your throat.
<<print $Mon.hisher.toUpperFirst()>> cock goes instantly rock-hard, and $Mon.himher nearly falls over, but you quickly push $Mon.himher back upright, unbothered and undeterrend. The taste is exactly what you want. The flavor of clean, pure //human// cock fills your mouth as you slide it up and down your tongue with eager abandon, soon followed by the delicious hint of musky cum now dribbling from its perky tip as the adventurer plants both hands on the top of your head just to stay on both feet.
"...I...uhh...oh wow, fuck me..." $Mon.heshe pants above, your eyes meeting for a fleeting moment as you gaze up to smile gratefully at <<print $Mon.himher>> before going back to work on the glorious human meat in your mouth.
<<set _r to random(1,3)>>\
<<if _r is 1>>\
Thankfully, $Mon.heshe lasts quite a bit longer than you expect, leaving you with a warm glow in your face and head when he finally cums. being human, the volume isn't nearly as much as that of some of the inhuman monsters in these parts, but none can leave you with the sense of belongind as one of your own.
<<else>>\
<<print $Mon.heshe.toUpperFirst()>> doesn't last long, but the moment his sperm blasts across your lips, you don't care, greedily swallowing every last drop and still slurping for more as $Mon.hisher cock slowly begins to recede.
<<endif>>\
Dizzy and unable to stand, the adventurer at last collapses forward on top of you, $Mon.hisher delicious sweat gracing your face as he slides across it in a heap on the ground.
<<else>>\
Error in human sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<!-- slime -->\
<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "slime custom hole">>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven +1>>\
Knowing that slimes are amoeboid blobs that only assume human form to trick humans, you grab the slime by a random section of what only looks like a torso, pull it out like a big stream of stretchy taffy and jam it onto you dick. The slime, equally happy to dispense with the pretense, happily dissolves the entierty of its humanoid form and gathers itself as a giant, bulbous blob around your pelvis.
Content to let it do the work, you lay back as the creatures goes to work on your cock in a way that feels kind of like a back-and-forth stream of very gloopy liquid flowing on and off of you. It's sort of like fucking a bowl of jello, but a bit more like being sucked off by a pool full of jello. Jello that doesn't crumble into distinct gelantinous chunks, but instead slides over your member with smooth determination and precision.
Not in any hurry, you relax into the jello-like blowjob for several delightful minutes until you come to a leisurely climax. And it is a blowjob, you decide, given that the slime is planning to eat your semen.
<<if _pcboobs > 0>>\
<<set $PC[$CC][$PCsexACTS].milked to $PC[$CC][$PCsexACTS].milked + $Mon.level>>\
Not content with just that, however, the slime slides a pair of tendrils up your chest and begins kneading your breasts with its soft jello-likeness. It feels sort of like the inside of a pair of breasts massaging your own, and the extra sensation brings you to shoot your load into its body even as it begins sucking the milk from your chest. You give into the sensation and doze off into a pleasant post-coital nap while the slime drinks you dry.
You wake up some time later feeling very satisfied, but the slime is gone.
<<else>>\
When at last you climax, you watch with mild interest as a streak of white fluid remains visible through the translucency of the slime's body, spreading out and slowly disspiating inside it. Not content with what it's been given, the slime continues to suck on your spent cock with a rhythmic slurping that keeps you on the edge for several more minutes before you finally come back down.
<<endif>>\
<<elseif $WORLD.datapasser is "slime vaginal/anal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + 1>>\
Caring not one tiny bit for the peculiarities of slime anatomy, you walk over to the fallen slime with your cock out. Grabbing it by the hips and pushing its head to the ground, you then plunge your cock into one of its wet holes, you don't pay much attention to which. The sensation around your cock is cool and moist, and a wet //shlop shlop shlop// echoes against the stone walls around you with every thrust. The slime seems unbothered by this, and in fact acts with complete cooperation. You are feeding it, after all.
Glancing down, you notice that in fact the slime only has a single hole between its legs, but as you gaze at the point of penetration, the slime seems to sense your attention and a second hole forms before your eyes as if to invite you. Shrugging, you pull out from the first hole and thrust into the other. You think this is supposed to be an ass hole, truth be told, you can't tell the difference. Curious now, you alternate between holes with each thrust and image it's two different girls you're fucking. You cum immediately.
After pulling out, you can see your long strand of semen through the slime's translucent skin, which then diffuses outwards and dissolves into nothingness. Looking down at your dick, you notice that it's completely clean and dry, every last drop of liquid absorbed into the slime's digestive track. Glad that slime's don't eat flesh, you wave goodbye as it slinks off into the distance.
<<elseif $WORLD.datapasser is "slime female variety pack">>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + ($Mon.level * 3)>>\
Given slime phsyiology, you're not entirely sure how to approach this. In their nature state slimes are just amoeba-like blobs that feed on sexual fluids, and they form humanoid-looking bodies purely to that end. There isn't really such a thing as a male or female slime, or masculine or feminine slime body parts. Any slime can shape itself however it wants.
Throwing caution to the wind, you disrobe completely and lay down near it. \
<<if $Mon.penis is true>>\
The slime immediately responds by growing out its dick like a growing tentacle thet reaches between your legs. But when it gets there, the tip of its dick is no longer mushrom, shaped, but instead it's become a tongue, which licks you with its slippery surface. Relaxing into the pleasantnes of the situation, you're surprised when you feel a sharp bit of pain high up on your inner thigh mere inches from your pussy. Looking down you see that a second tentacle has sprouted from the first and it's visibly injecting you with something.
An aphrodisiac, you realize, as the pleasure from the slime-tongue at your pussy increases ten-fold and you instantly climax and gush girlcum for the slime to absorb.
<<else>>\
The slime immediately responds by extended its tongue like a several footlong tentacle and slides so effortlessly into your pussy that it's like water pouring into a hole. Grabbing at the tentacle between your legs, you feel the fluids rushing through it, growing to try to fill your entire vaginal cavity through the inch-thick bit in your hand. Your efforts to pull it out utterly fail, and a sharp sensation deep inside you followed by an overwhleming sense of comfort and pleasure tells you that the slime has injected an aphrodisiac through the fleshy wall of your vagina perhaps an inch away from your cervix.
<<endif>>\
<<if $PC[$CC][$PCpregnant][0] > 0>>\
@@color:Orange;You feel a tremendous sense of loss@@, as your unborn baby is consumed by the slime in your womb, and replaced by one of its own
<<AwardAchievement "Barren">>\
<<endif>>\
<<FemaleVirginity $Mon.virgin>>\
\
<<UnnaturalPregnancy $CC "slime" 3>>\
Not caring anymore that the slime is feeding on you, you give yourself to the pleasure as several more slime-tentacles sprout from its body to explore your own. With one now pouring itself in and out of your pussy, another in your ass, \
<<if _pcboobs > 0>>\
<<set $PC[$CC][$PCsexACTS].milked to $PC[$CC][$PCsexACTS].milked + $Mon.level>>\
and a third now encircling your breasts to pump and suction milk from your nipples. \
<<else>>\
and a third freely roaming across your chest and torso. \
<<endif>>\
With an alternating piston-like action of thrusts in your ass and pussy, at all times there's both something entering into you as well as sliding out. When you cry out in extasy, a //fourth// tentacle emerges and quickly slides down your throat. Absentmindledly you bite down on it, but it effortlessly flows around and between your teeth to siphon food from your stomach.
But it's not all take, as occasional pulses of rigidity and fluid make it clear that the slime is also ejaculating its seed into all three of your orifices, prompting yet more climaxes from you as shudder again and again in extasy until at last, you fall unconscious from the pleasure.
<<if _pcboobs > 0>>\
When you awake, the slime is gone, but your belly is visibly distended and your nipples feel strangely sensitive.
<<else>>\
When you awake, the slime is gone, but your belly is visibly distended.
<<endif>>\
<<else>>\
Error in slime sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<widget "Consume">>\
<<if $DebugMode is true>>\
Before:
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
_i) <<print setup.Stringify($PC[$CC][$PCbp][_i])>><br>\
<</for>>\
<hr>\
<<endif>>\
\
<<set _EatTarget to $args[0]>>\
<<set _DoTF to true>>\
\
<<if _EatTarget > -1>>\
\
<!-- get list of body parts player has -->\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _PCparts to []>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _PCparts[_i] to $PC[$CC][$PCbp][_i].type>>\
<</for>>\
\
<!-- get list of possible transform body parts from monster type -->\
<<DescribeItem $PC[$CC][$PCinven][_EatTarget]>>\
<<set _SkipSex to false>>\
<<if $ItemPoke.fullname.includes("demon")>>\
<<set _Morph to "demon">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("tentacle")>>\
<<set _Morph to "tentacle">>\
<<set _TFList to [$BPtentacle, $BPtentacle, $BPtentacle, $BPtentacle, $BPpenis, $BPpenis, $BPpenis, $BPpenis]>>\
<<set _SkipSex to true>>\
<<elseif $ItemPoke.fullname.includes("centaur")>>\
<<set _Morph to "centaur">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPlegs, $BPfeet, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("hellhound")>>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPlegs, $BPlegs, $BPtail]>>\
<<set _Morph to "hellhound">>\
<<elseif $ItemPoke.fullname.includes("drider")>>\
<<set _Morph to "drider">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPlegs, $BPlegs, $BPlegsl]>>\
<<elseif $ItemPoke.fullname.includes("spider")>>\
<<set _Morph to "spider">>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<set _Morph to "slime">>\
<<set _TFList to [$BPchest]>>\
<<elseif $ItemPoke.fullname.includes("horse")>>\
<<set _Morph to "horse">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPlegs, $BPlegs, $BPfeet, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("wolf")>>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPtail]>>\
<<set _Morph to "wolf">>\
<<elseif $ItemPoke.fullname.includes("goblin")>>\
<<set _Morph to "goblin">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("succubus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPboobs]>>\
<<elseif $ItemPoke.fullname.includes("incubus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPpenis]>>\
<<elseif $ItemPoke.fullname.includes("omnibus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPpenis, $BPboobs]>>\
<<elseif $ItemPoke.fullname.includes("cow")>>\
<<set _Morph to "cow">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("minotaur")>>\
<<set _Morph to "cow">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("imp")>>\
<<set _Morph to "imp">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("human")>>\
<<set _Morph to "human">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("bunny")>>\
<<set _Morph to "bunny">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("fox")>>\
<<set _Morph to "fox">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("cat")>>\
<<set _Morph to "cat">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.foodval > 0>>\
<<set _DoTF to false>>\
<<set $TFFoodOutput to "You feel less hungry">>\
<<set $WORLD.datapasser to "consume item">>\
<<else>>\
<<set _DoTF to false>>\
<<set $TFFoodOutput to "Error: unrecognized consumable.">>\
<<endif>>\
\
<<set _EatMe to $ItemPoke.foodval>>\
<<if _EatMe > 0>>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] - _EatMe>>\
<<if $PC[$CC][$PChunger] < 0>>\
<<set $PC[$CC][$PChunger] to 0>>\
<<endif>>\
<<endif>>\
<<ShowHunger>>\
\
<<if _DoTF is true>>\
<<set $TFFoodOutput to "Food based transformations temporarily disabled">>\
<<endif>>\
<!-- if _DoTF is true -->\
<<if 1 is 0>>\
<!-- generate an array to mark whether body parts in each list have been processed yet -->\
<<set _PlayerHas to []>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<set _PlayerHas[_i] to []>>\
<<set _PlayerHas[_i][0] to _PCparts[_i]>>\
<<set _PlayerHas[_i][1] to -1>>\
<</for>>\
<<set _MonsterHas to []>>\
<<for _i to 0; _i < _TFList.length; _i++>>\
<<set _MonsterHas[_i] to []>>\
<<set _MonsterHas[_i][0] to _TFList[_i]>>\
<<set _MonsterHas[_i][1] to -1>>\
<</for>>\
\
<<set _a to _PlayerHas>>\
<<set _b to _MonsterHas>>\
<<set _c to []>>\
\
<<for _i to 0; _i < _a.length; _i++>>\
<<if setup.FindInANotB(_a[_i][0], _b) is "yes">>\
<<set _a[_i][1] to "used">>\
<<set _NextC to _c.length>>\
<<set _c[_NextC] to []>>\
<<set _c[_NextC][0] to _a[_i][0]>>\
<<set _c[_NextC][1] to "remove">>\
<<endif>>\
<</for>>\
<<for _i to 0; _i < _a.length; _i++>>\
<<if _a[_i][1] is "used">>\
<<else>>\
<<set _Both to setup.FindInBoth(_a[_i][0], _b)>>\
<<if _Both > -1>>\
<<set _a[_i][1] to "used">>\
<<set _b[_Both][1] to "used">>\
<<set _NextC to _c.length>>\
<<set _c[_NextC] to []>>\
<<set _c[_NextC][0] to _a[_i][0]>>\
<<set _c[_NextC][1] to "convert">>\
<<endif>>\
<<endif>>\
<</for>>\
<<for _i to 0; _i < _b.length; _i++>>\
<<if _b[_i][1] is "used">>\
<<else>>\
<<set _NextC to _c.length>>\
<<set _c[_NextC] to []>>\
<<set _c[_NextC][0] to _b[_i][0]>>\
<<set _c[_NextC][1] to "add">>\
<<endif>>\
<</for>>\
\
<!-- add name data -->\
<<for _i to 0; _i < _c.length; _i++>>\
<<set _c[_i][2] to setup.bpptrtoname(_c[_i][0], "formal")>>\
<</for>>\
\
<<if $DebugMode is true>>\
@@color:Gold;Possible transformations:@@
<<for _i to 0; _i < _c.length; _i++>>\
_i) <<print _c[_i]>>
<</for>>\
<<endif>>\
\
<!-- correct for consume type -->\
<<set $SkipSex to false>>\
<<if $SkipSex is false>>\
<<if $ItemPoke.fullname.includes("meat")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if (_c[_i][2] is "Breasts")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif (_c[_i][2] is "Pussy")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif (_c[_i][2] is "Penis")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<elseif $ItemPoke.fullname.includes("milk")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if _c[_i][2] is "Penis">>\
<<set _c[_i][1] to "(Override) remove">>\
<<elseif _c[_i][2] is "Breasts">>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif _c[_i][2] is "Pussy">>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<elseif $ItemPoke.fullname.includes("semen")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if _c[_i][2] is "Breasts">>\
<<set _c[_i][1] to "(Override) remove">>\
<<elseif _c[_i][2] is "Pussy">>\
<<set _c[_i][1] to "(Override) remove">>\
<<elseif _c[_i][2] is "Penis">>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if (_c[_i][1] is "remove")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<else>>\
<<set $TFFoodOutput to "@@color:Red;Error: This isn't meat, milk, or semen. What is this?@@">>\
<<endif>>\
<<endif>>\
\
\
<<if _c.length > 0>>\
<<set _PickATF to random(0, _c.length)>>\
<<set _SelectedTF to _c[_PickATF]>>\
<<set _TheBP to _SelectedTF[0]>>\
<<set _TheAction to _SelectedTF[1]>>\
<<set _TheEnglish to _SelectedTF[2]>>\
<<if $DebugMode is true>>\
@@color:Gold;Transformation output:@@
<hr>\
@@color:Yellow;Debug section 1:@@
Pick: _PickATF
c zero: _c[0]
c: _c
selectedtf: _SelectedTF
thebp: _TheBP
theaction: _TheAction
theenglish: _TheEnglish
<hr>\
@@color:Yellow;Debug section 2:@@
<<endif>>\
<<if _TheAction.includes("remove")>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, _TheBP)>>
<<if $DebugMode is true>>\
bpremoved: _BPRemoved
keys of: <<print Object.keys(_BPRemoved)>>\
<<endif>>\
<<set _MorphHack to setup.bpptrtoname(_TheBP, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _BPRemoved.morph)>>\
<<set $TFFoodOutput to "You have lost your " + _MorphHack>>\
<<elseif _TheAction.includes("convert")>>\
<<set _GetBP to setup.FetchBodyPart($CC, _TheBP)>>\
<<if $DebugMode is true>>\
GetBP: _GetBP
TheBP: _TheBP
<<endif>>\
<<set _HackA to setup.TFTextHack($PC[$CC][$PCbp][_GetBP].morph, _TheBP)>>\
<<set _HackB to setup.TFTextHack(_Morph, _TheBP)>>\
<<if $PC[$CC][$PCbp][_GetBP].morph is _Morph>>\
You feel more <<print _Morph>>-like, but observe no outward effects.
<<else>>\
<<set $TFFoodOutput to "Your " + _HackA[0] + _HackB[1]>>\
<<set $PC[$CC][$PCbp][_GetBP].morph to _Morph>>\
<<TFAdderHelper _GetBP>>\
<<endif>>\
<<elseif _TheAction.includes("add")>>\
<<set _BPAdded to setup.AddBodyPart($CC, _TheBP)>>\
<<if $DebugMode is true>>\
bpadded: <<print setup.Stringify(_BPAdded)>>
keys of: <<print Object.keys(_BPAdded)>>
<<endif>>\
<<set $PC[$CC][$PCbp][_BPAdded].morph to _Morph>>\
<<set _MorphHack to setup.bpptrtoname(_TheBP, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _Morph)>>\
<<set $TFFoodOutput to "You have gained a " + _MorphHack>>\
<<TFAdderHelper _BPAdded>>\
<<else>>\
<br>\
Error in selected TF: _SelectedTF
1: _SelectedTF[0], _TheBP
2: _SelectedTF[1], _TheAction
3: _SelectedTF[2], _TheEnglish
<<endif>>\
<<else>>\
<<set $TFFoodOutput to "Debug: No possible transformations in c">>\
<<endif>>\
<<endif>>\
<<else>>\
<<set $TFFoodOutput to "@@color:Red;Error in Consume: I don't know what inv item" + _EatTarget_ + " points to@@">>\
<<endif>>\
\
<<UpdateMorphs>>\
\
<<if $DebugMode is true>>\
<hr>\
After:
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
_i) <<print setup.Stringify($PC[$CC][$PCbp][_i])>><br>\
<</for>>\
<hr>\
<<endif>>\
<</widget>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
<<set _horseparts to setup.getparttypeqty($CC, "horse")>>\
\
<<set _AllowNormalExit to true>>\
\
<<if ($Mon.penis is true)>>\
<<if (_horseparts > 0) and (_pcpussy > 0)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven + 1>>\
<<set _HorseCockSize to either("ten","twelve","fourteen","sixteen","eighteen","twenty","twenty-two","twenty-four","twenty-six","twenty-eight","THIRTY")>>\
The horse seems unusually riled up, and with his nostrils flaring, he charges up and knocks you to the ground.
"What's up with you?" you grumble, annoyed, while struggling up to your hands and knees. "I get it. You beat me, I suck your dick, I...WHAT?!?!!"
Your grumbling is interruped by a _HorseCockSize pound horse cock burying itself balls deep into you and clear up to your cervix.
<<FemaleVirginity $Mon.virgin>>\
"Woooo!!!" the horse whinnies, pumping into you like a mad...horse. "//Finally// a mare in heat!"
"I'm not a mare!" you shout, your voice shaking from the hard fucking he's giving you. "I'm certainly not in heat!"
"You sure smell like it to me!" he moans, the pent-up release of his bestial lust shaking you to your core. "Now, gimme some foals!"
<<if $PC[$CC][$PChpcur] < 1>>\
<<set _AllowNormalExit to false>>\
Your response is somewhat muted by his cock piercing through your lungs and coming our your throat, a musky taste filling your mouth as a gallon a sticky horse semen blasts across your tongue and out your mouth on the grass in front of you.
<<AwardAchievement "Durable">>\
@@color:Red;You have died!@@
<<if setup.TypeOf($Conception) is "string">>\
<<if $Conception is "success">>\
@@color:Pink;And yet for some reason the last thought that passes through your mind is gratitude that your womb is warm and safe. Weird, huh?@@
<<if $DebugMode is true>>\
Debug, conception: <<print $Conception>>, pregnancy: <<print $PC[$CC][$PCpregnant]>>
<<endif>>\
<<endif>>\
<<unset $Conception>>\
<<endif>>\
<<set $WORLD.diedby to "You were raped to death by a " + _HorseCockSize + " pound horse cock">>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) After life review" "Death">>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<else>>\
Before you can object further, a forehoof slams down on the back of your head and the last thing you feel before passing out is a torrential flood of horse spunk splattering your insides and rocketing several feet backwards out your pussy.
<<endif>>\
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven + 1>>\
<<if _pcpenis > 0>>\
Collapsing to your knees in defeat, the horse boldly trots over to you with a snort and stands over you so that your face is just barely level with his massive cock. When you raise your hands to object, the horse rolls his eyes and leans down to nose you over onto your belly.
"Wait, wait, wait!" you shout, thinking that sucking on a two-foot-long horse's cock is probably preferable to having your insides torn to pieces by that same cock.
<<else>>\
Collapsing to your knees in defeat, the horse boldly trots over to you with a snort and stands over you so that your face is just barely level with his massive cock. You understand imediately what he intends, but the sheer size of it is daunting. You cannot possibly fit something that massive in your mouth.
<<endif>>\
Snorting impatientaly, he thrusts forward and stabs you in the face with it, knocking you backwards onto your hands. Curling his neck around, he gazes at you with one eye with a look that says if you don't suck him off, he's going to mount you like he would a mare. Terrified at what that would do to you, you swallow nervously and hesitantly reach out to take his dick in both hands as if holding a firehose. Licking its tip while the rippling muscles roll in your hands, you open your mouth as wide as it will go and manage to get it at most 2-3 inches insides you.
"It's just too big," you swallow nervously, licking your tongue across the tip while sliding your hands on and down its tremendous length.
Thankfully the stallion seems content with this, and you you muster up as much enthusiasm as you can while doing your best to give him an experience the mares in his life cannot. It takes only a few short minutes before it twitches, and your entire face and chest are blasted with a gallon of horse semen.
Pausing only to briefly lick the top of your head in appreciation, the horse then gallops off, leaving you in a pool of his sticky spunk.
<<endif>>\
<<elseif $Mon.pussy is true>>
The mare gives you what are very obviously bedroom eyes as you fall to your knees in defeat. Leaning down, she affectionately nibbles and licks at the top of your head. Thinking this might not be so bad, you reach up to give her affactionate pats on the side of her neck. That's when she pushes down on you with her muzzle, forcing you to the ground and planting her ass on your face.
She's not rough about it, not exactly. But when a 2000 pound horse decides to sit on you, it's not exactly gentle either.
Her already-flowing pussy juices make it clear what she intends, and you do your best to accomodate. Licking up and down her several inch long slit, you find her taste sweet and pleasant, making the experience much easier for both of you. Before long you have her nickering and whinnying in delight as you do your best to service her. It's a bit of a streth, but with a little effort you do manage to reach your tongue to her clitoris at the far bottom end of her length, and by focusing on it it you're able to bring her to a deligthful climax.
After she lets you up, she nuzzles you affectionately and you watch as she trots away. Then you collapse from exhaustion.
<<else>>\
defeat by horse: Unrecognized sex part combination
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","horse"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<<endif>>\
<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<set _Horse to "mare">>\
<<if $Mon.sex is "male">>\
<<set _Horse to "stallion">>\
<<endif>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "horse sex">>\
<<if $Mon.pussy is true>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven + 1>>\
Wasting no time, you quickly approach the defeated mare with your cock quickly hardending. At first she seems too exhaused to struggle, but as you roughly squeeze her heaily muscled flanks, her soft whinny of pleasure clues you in that perhaps she's not too exhausted to resist, but simply doesn't want to.
Caressing your hands over every inch of her posterir within your reach, you eagerly place for cock at her moist entrance. Before you can even push inside, her marehood //winks// at you, impatiently suctioning your cock into its eager depths. Gasping at the sensation, you barely need move at all as her powerfully muscled vagina massages your cock in and out.
Marvelling at her...or perhaps, marevelling? ...at her dextrous orifice, you breath deeply in and out while moaning in perfect rythem with her throaty panting. Your movements together with hers are so fluid, so purposeful, that you feel as if the two of you had been practicing together for years. She climaxes first, and she turns her head around to look you straight in the eye when you climax toomere seconds later.
Both pleased by what you have shared, you stay inside her for a few minute longer, gently stroking and patting her fur while she affectionately nibbles and licks at your hair.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven + 1>>\
Watching as the stallion collapses to the ground, you quickly approach with a rapdily hardening cock. Taking in the way the sweat in his coat glistens beautifully in the sunlight, you give him an affectionate pat on the flank as you climb around behind him. Laying on his side like he is, you grab his upward-facing flank and place your proud cock at his generous ass hole. Large as it is, you slide effortlessly inside and begin plunging away at him.
The stallion contorts his head around to watch, and when he raises an eyebrow at yoy in askance, you simply wave and smile. Snorting, he lays his head back down and lets you finish undisturbed.
<<endif>>\
<<elseif $WORLD.datapasser is "horse licks you">>\
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<if $Mon.sex is "male">>\
Watching the stallion collapse to $Mon.hisher belly, you find yourself taken with his hard muscles and musky scent. Laying down in front of him, you spread your legs and gesture between them.
<<else>>\
Watching the mare collapse to her belly, you take in her smooth curves and luscious coat with your eyes. Laying down in front of her, you spread your legs and gesture between them.
<<endif>>\
Perhaps curious about your scent, $Mon.heshe leans foward and takes a sniff. Apparently liking what $Mon.heshe smells, $Mon.heshe reaches out with $Mon.hisher tongue and slathers you from thigh to thigh with a single lick. As large as a hand, $Mon.hisher tongue isn't exactly a subtle tool, but what it lacks in precision it makes up for with a muscled tenacity that quickly has you gripping the grass with clenched fists. <<print $Mon.heshe.toUpperFirst()>> quickly brings you to climax, which simply motivates $Mon.himher to eagerly lap up the delicious juices now flowing freely from you.
Your eyes roll back up your head with pleasure, and the relentless _Horse manages to bring you <<print either("two","three","four")>> more orgasms before at last you both come to rest.
<<elseif $WORLD.datapasser is "horse boobplay">>\
The defeated mare collapses at first to her foreknees, and then keels over onto her side. Curious more than aything, you approach and delicately run your fingers up and down her belly. Audibly pantting, she hardly reacts but to continue breathing as you slowly but deliberately slide your hands further towards her hind quarter.
When you reach her mare tits, her breathing slows, and she turns her massive head all the way round to look at what you're doing.
Undeterred, you take a horse boob in each hand and begin decliately squeezing, alternating with one hand then the other. She snorts at this, but when your fingers reach her nipples and begin dancing in deliate little circles aroudn them, her snorts turn to gasps. Sitting down on your knees for better access, it occurs to you that her pussy is...well, it's fully a foot away and around the corner so to speak, but your sheer faschination with crotch-boobs keeps you occupied with what you have.
Eventually, your curiosity staisfied, you give the perplexed mare an affectionate pat on the head and continue on your way.
<<else>>\
Error in horse sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $Mon.penis is true>>\
<<print either("The spider pins you down with surprising strength. Struggle proves futile as it entangles you in thick strands of web. You kick and bucked underneath it but can't break free from its grasp", "Screaming as it reaches out for you, you soon find youself held to the ground while it crawls on top of you.", "A sense of dread overcomes you as the creature quickly anchors your ankles to the floor with it sticky web and bends you forward to crawl on top of you.", "You can do little but whimper as the spider crawls over you,not even bothering to scure your helpless to the floor with its web.", "With no further hesitation, the spider crawls towards you, its long legs slithering along the ground ominously. As its furry body engulfs yous, you feel its hot breath wash over your face, followed by a chilling hiss that sends shivers down your spine.","The spider's approach is silent but for the sound of its eight legs scrambling against the floor as it advances on you. Moving closer, it lifts itself up on its hind legs to tower over you, looming menacingly. Its eyes are an almost otherworldly shade of green, glowing brightly in the dim light. Extending a long, slender leg towards your face, its tip ending in a sharp point that could easily pierce through flesh and bone, it pauses, then leaps.")>>
<<print either("You scream but it doesn’t help at all. In fact, the terror drowns out all else and you barely notice when your lungs run out of air and you find yourself taking in a huge breath, the scent of spider filling your nostrils as", "Fighting to avoid panic, you struggle to remain calm and collected, feigning courage even while your heart races inside your chest. It makes little difference, however, as", "Just when you think things couldn’t possibly get more terrifying, something strange happens – instead of feeling revulsion or horrified at the sight of such a monstrous creature, you start to feel...aroused? As if sending the sudden change come over you, ",
"Your breath hitches, but not out of fear alone. Rather, fear combined with anticipation swirls within your stomach. Your skin begins to tingle all over in response to this alien being invading your personal space, brushing against your legs as")>> \
<<print either("a","its")>> <<print either("jet black","thick, barbed,")>> <<print either("cock","penis","dick","member")>>\
<<print either(" already oozing with spunk"," dripping in thick, gloopy spider cum"," coated in a thick layer of what you can only assume is pre-cum"," glistening with its already-dripping seed"," dripping out a grotesque pool of spider cum onto the floor",", droplets of oily fluids dripping freely from its length")>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<print either("slides inside you unopposed","plants itself between your legs and glides effortlessly inside on the copious fluids belching from its length","roughly forces its way inside to breed you")>>. <<print either("Silently and without warning, a gush of sticky fluids instantly fill your womb.","There is no pleasure in its eyes, no lust, only the sheer bestial need to //breed// you.")>>
<<FemaleVirginity $Mon.virgin>>\
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<print either("a hot, sharp pain pierces through you as the monster violates you with its terrible appendage half a foot deep into your rectum.","with a violent jerk, the creature yanks your torso up and impales your ass hole upon its swollen member.","the creature pauses for a moment, giving you an opportunity to look into its eyes for the first time. They are big, black, and glittering – reflecting the light from above in a way that makes them seem almost hypnotic: your last thought before it engulfs you in its many legs and forces itself into your ass, carried slowly on its cold, sticky fluids")>> \
<<endif>>\
<<print either("Finally satisfied with its position inside you, the beast starts rocking its hips back and forth, grinding against your center with precision and purpose.","You try futilely to escape, kicking off the ground briefly, but find yourself stuck in place. The more you struggle, the more tightly bound you find yourself by its web, holding you tightly as the creature slowly thrusts in and of you, its cold sticky fluids slowly filling you","Carried freely inside you on the fluids erupting from it, it fucks you without pleasure, without desire to dominate, only a cold, animalistic need to breed.")>> \
<<print either("Feeling yourself losing consiousness, the last think you see its its cold, beady eyes staring emotionlessly into yours as it fucks you.","And then, without warning a blast of gooey gel fills your inside, and the creature suddenly loses interest. Having done what it wanted to you, it silently slips out from between your legs and skitters off into the distance.","Your only consolation as conscoiusness slips from you as that if its trying to breed you, it probably at least won't carry off to its lair to dissolve your organs into goo for its consumption.")>>\
\
<<else>>\
<<print either("Approaching you slowly and in eerily complete silence","Pouncing on you the instant you fall")>>, the <<print either("spider","creature")>> <<print either("quickly secures your hands and feet to the floor","grabs you with its front two legs and positions you on you all four then splurts out globs of web to hold you firmly in place.","sprays you with a thick coat of sticky web so you can't escape.")>> <<print either("Helpless","Unable to move","Struggling futilely")>>, you <<print either("can do nothing but wait","flail around uselessly","fight to keep from panicking","can do little but watch")>> <<print either("while","as")>> \
\
a <<print either("jet black","thick, barbed","gnarled","blood red","thick veiny","pulsating")>> <<print either("appendage","ovipositor")>> <<print either("dripping with slime","covered in ooze","")>> \
<<print either("slowly grows","extends","slides out","becomes visible")>> from <<print either("underneath","its underside","its belly","its lower abdomen")>> \
<<if _pcpussy > 0>>\
<<print either("and presses against the warm fleshy folds between your legs.","and begins probing between your legs","grossly seeking entrance between your legs.")>>\
<<else>>\
<<print either("and presses up against your asshole.","then plants it firmly between your ass cheeks.")>>\
<<endif>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<print either("Time loses all meaning as you wait for the creature to finish. There is no thrusting, no breathing, merely its flesh inside you as a round object slides through its ovipositor inside you ","Forcing its way deeply inside you, you feel the creature's ovipostitor penetrate your womb and implant you with a large, rounded object. An egg, surely.","Having no need of your reproductive organs and only your warmth and moisture, the creature slowly presses itself deep with you and implants you with a thick rubbery egg, the senstation of it persisting even as the fleshy ovipositor withdraws.")>> \
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<print either("Grasping you by the hips and positioning its huge bulk above you","Climbing on top to mount you","Pulling your hips up to meet it")>> <<print either("the spider","the creature","it")>> \
<<endif>>\
\
<<if _pcpussy > 0>>\
<<if $PC[$CC][$PCpregnant][0] > 0>>\
@@color:Orange;You feel a tremendous sense of loss@@, as your unborn baby is dissolved by the spider's fluids to make room for its egg
<<AwardAchievement "Barren">>\
<<endif>>\
<<FemaleVirginity "a spider">>\
<<endif>>\
<<UnnaturalPregnancy $CC "spider" 3>>\
<<print either("Feeling yourself losing consiousness, the last think you see its its cold, beady eyes staring emotionlessly into yours as withdraws its length from between your legs, the sensation of its egg still grossly inside you.","And then, without warning it suddenly loses interest. Having done what it wanted, it silently slips out from between your legs and skitters off into the distance.","Your only consolation as consoiusness slips from you as that if the creature has deposited its young inside you, it probably at least won't carry off to its lair to dissolve your organs into goo for its consumption.")>>\
<<endif>>\
\
<<ProstXP>>\
<hr>\
<span id="KeypSpace">\
<<link "space) Pass out in horror" "Church">>
<<set $WORLD.datapasser to ["sex","spider"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<<if (_mhasdick is false) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].pussylickreceived to $PC[$CC][$PCsexACTS].pussylickreceived +1>>\
<<elseif (_mhasdick is true) and (_phasdick is false)>>
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + random(2,6)>>\
<<elseif (_mhasdick is false) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven +1>>\
<<elseif (_mhasdick is true) and (_phasdick is true)>>
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven +1>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
$PC[$CC][$PCsexACTS].bjgiven
$PC[$CC][$PCsexACTS].bjreceived
$PC[$CC][$PCsexACTS].pussylickreceived
$PC[$CC][$PCsexACTS].vaginalreceived
$PC[$CC][$PCsexACTS].analreceived
$PC[$CC][$PCsexACTS].semengiven
$PC[$CC][$PCsexACTS].semenreceived
$PC[$CC][$PCsexACTS].milked
<<widget "DescribeItem">>\
<<silently>>\
<<set _di to $args[0]>>\
\
<<set _iname to "error?">>\
<<set _equippable to false>>\
<<set _mindam to 0>>\
<<set _maxdam to 0>>\
<<set _attacktype to "">>\
<<set _armor to 0>>\
<<set _quantity to 0>>\
<<set _tooleffect to 0>>\
<<set _material to "">>\
<<set _hands to 0>>\
<<set _slot to -1>>\
<<set _flirt to 0>>\
<<set _restrict to "none">>
<<set _stackable to false>>
<<set _price to 0>>
<<set _foodval to 0>>
<<set _bang to false>>
<<set _forcename to "">>
<!-- slots
1 head/heml
2 neck/amulet
3 chest
4 cloak
5 arms/equipped
6 pairs of gloves
7 sets of fingers
8 waist
9 pairs of legs
10 pairs of feet
-->
\
<!-- tool effects
1=rope
2=cut meat/string
3=cut wood
4=lockpick
5=bash lock
6=available
7=dildo
8= holy symbol
9=liquid container
10=eat
11=drink
12=spellbook
13=cosmetic read text
-->\
<<if _di[0] is 0>>\
<<set _iname to "none">>\
<<elseif _di[0] is 100>>\
<<set _iname to "coil~ of rope">>\
<<set _tooleffect to 1>>\
<<set _stackable to true>>
<<set _price to 10>>
<<elseif _di[0] is 101>>\
<<set _iname to "small hammer">>\
<<set _tooleffect to 5>>\
<<set _price to 10>>
<<elseif _di[0] is 102>>\
<<set _iname to "chunk~ of ! meat">>\
<<set _bang to true>>
<<set _tooleffect to 10>>\
<<set _stackable to true>>
<<set _price to 1>>
<<set _foodval to 300>>\
<<elseif _di[0] is 103>>\
<<set _iname to "dildo">>\
<<set _tooleffect to 7>>\
<<set _price to 20>>
<<elseif _di[0] is 104>>\
<<set _iname to "holy symbol">>\
<<set _tooleffect to 8>>\
<<elseif _di[0] is 105>>\
<<set _iname to "wooden log~">>\
<<set _stackable to true>>
<<set _price to 5>>
<<elseif _di[0] is 106>>\
<<set _iname to "apple~">>\
<<set _stackable to true>>\
<<set _price to 5>>\
<<set _tooleffect to 10>>\
<<set _foodval to 100>>\
<<elseif _di[0] is 107>>\
<<set _iname to "roll~ of cheese">>\
<<set _stackable to true>>\
<<set _tooleffect to 10>>\
<<set _price to 25>>\
<<set _foodval to 250>>\
<<elseif _di[0] is 108>>\
<<set _iname to "empty bottle~">>\
<<set _price to 5>>\
<<set _tooleffect to 1>>\
<<set _stackable to true>>
<<elseif _di[0] is 109>>\
<<set _iname to "bottle~ of !">>\
<<set _bang to true>>
<<set _foodval to 1>>\
<<set _price to 10>>\
<<set _tooleffect to 11>>\
<<set _stackable to true>>
<<elseif _di[0] is 110>>\
<<set _iname to "bread roll~">>\
<<set _foodval to 150>>\
<<set _tooleffect to 10>>\
<<set _price to 10>>\
<<set _stackable to true>>\
<<elseif _di[0] is 111>>\
<<set _iname to "spellbook">>\
<<set _tooleffect to 12>>\
<<set _price to 100>>\
<<elseif _di[0] is 112>>\
<<set _iname to "book">>\
<<set _tooleffect to 13>>\
<<set _price to 50>>\
<<elseif _di[0] is 113>>\
<<set _iname to "butcher's knife">>\
<<set _tooleffect to 2>>\
<<set _price to 5>>
\
\
<<elseif _di[0] is 200>>\
<<set _iname to "dagger">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _tooleffect to 1>>\
<<set _attacktype to "stab">>\
<<set _hands to 1>>\
<<set _tooleffect to 2>>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 201>>\
<<set _iname to "club">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "blunt">>
<<set _hands to 1>>\
<<set _price to 30>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 202>>\
<<set _iname to "hatchet">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _tooleffect to 3>>\
<<set _attacktype to "cleave">>\
<<set _hands to 1>>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 203>>\
<<set _iname to "pitchfork">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "stab">>\
<<set _hands to 2>>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 204>>\
<<set _iname to "staff">>\
<<set _mindam to 1>>\
<<set _maxdam to 4>>\
<<set _attacktype to "blunt">>
<<set _hands to 2>>\
<<set _price to 25>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 205>>\
<<set _iname to "sword">>\
<<set _mindam to 2>>\
<<set _maxdam to 10>>\
<<set _attacktype to "slash">>\
<<set _hands to 1>>\
<<set _price to 125>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 206>>\
<<set _iname to "mace">>\
<<set _mindam to 1>>\
<<set _maxdam to 8>>\
<<set _tooleffect to 5>>\
<<set _attacktype to "blunt">>\
<<set _hands to 1>>\
<<set _price to 100>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 207>>\
<<set _iname to "axe">>\
<<set _mindam to 4>>\
<<set _maxdam to 8>>\
<<set _tooleffect to 3>>\
<<set _attacktype to "cleave">>\
<<set _price to 25>>\
<<set _hands to 2>>\
<<set _price to 125>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 208>>\
<<set _iname to "small shield">>\
<<set _armor to 10>>\
<<set _attacktype to "block">>\
<<set _hands to 1>>\
<<set _price to 50>>\
<<set _slot to $BPwield>>\
<<elseif _di[0] is 209>>\
<<set _iname to "cooking knife">>\
<<set _mindam to 1>>\
<<set _maxdam to 2>>\
<<set _tooleffect to 1>>\
<<set _attacktype to "stab">>\
<<set _hands to 1>>\
<<set _price to 10>>\
<<set _tooleffect to 2>>\
<<set _slot to $BPwield>>\
\
\
<<elseif _di[0] is 300>>\
<<set _iname to "plain shirt">>\
<<set _armor to 1>>\
<<set _slot to $BPchest>>\
<<set _flirt to 5>>\
<<set _price to 5>>
<<elseif _di[0] is 301>>\
<<set _iname to "blouse">>\
<<set _armor to 1>>\
<<set _slot to $BPchest>>\
<<set _flirt to 5>>\
<<set _price to 7>>
<<elseif _di[0] is 302>>\
<<set _iname to "belt">>\
<<set _armor to 1>>\
<<set _slot to $BPwaist>>\
<<set _flirt to 1>>\
<<set _price to 4>>
<<elseif _di[0] is 303>>\
<<set _iname to "pants">>\
<<set _armor to 1>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 1>>\
<<set _price to 10>>
<<elseif _di[0] is 304>>\
<<set _iname to "skirt">>\
<<set _armor to 1>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 1>>\
<<set _price to 12>>
<<elseif _di[0] is 305>>\
<<set _iname to "shoes">>\
<<set _armor to 1>>\
<<set _slot to $BPfeet>>\
<<set _restrict to "horse">>\
<<set _price to 3>>
<<elseif _di[0] is 306>>\
<<set _iname to "boots">>\
<<set _armor to 2>>\
<<set _slot to $BPfeet>>\
<<set _restrict to "horse">>\
<<set _price to 12>>
<<set _price to 12>>
<<elseif _di[0] is 350>>\
<<set _iname to "chainmail shirt">>\
<<set _armor to 10>>\
<<set _slot to $BPchest>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 351>>\
<<set _iname to "chainmail chemise">>\
<<set _armor to 15>>\
<<set _slot to $BPchest>>\
<<set _flirt to 1>>\
<<set _price to 150>>
<<set _price to 150>>
<<elseif _di[0] is 352>>\
<<set _iname to "chainmail hauberk">>\
<<set _armor to 20>>\
<<set _slot to $BPchest>>\
<<set _price to 200>>
<<set _price to 200>>
<<elseif _di[0] is 353>>\
<<set _iname to "chainmail leggings">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 354>>\
<<set _iname to "chainmail coif">>\
<<set _armor to 10>>\
<<set _slot to $BPhead>>\
<<set _price to 50>>
<<set _price to 50>>
<<elseif _di[0] is 355>>\
<<set _iname to "chainmail gloves">>\
<<set _armor to 5>>\
<<set _slot to $BPhands>>\
<<set _price to 70>>
<<set _price to 70>>
<<elseif _di[0] is 356>>\
<<set _iname to "chainmail bra">>\
<<set _armor to 2>>\
<<set _slot to $BPboobs>>\
<<set _flirt to 5>>\
<<set _price to 50>>
<<set _price to 50>>
<<elseif _di[0] is 357>>\
<<set _iname to "chainmail skirt">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 1>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 358>>\
<<set _iname to "chainmail miniskirt">>\
<<set _armor to 10>>\
<<set _slot to $BPlegs>>\
<<set _flirt to 2>>\
<<set _price to 100>>
<<set _price to 100>>
<<elseif _di[0] is 359>>\
<<set _iname to "chainmail gorget">>\
<<set _armor to 2>>\
<<set _slot to $BPneck>>\
<<set _price to 40>>
<<set _price to 40>>
<<elseif _di[0] is 360>>\
<<set _iname to "chainmail tail armor">>\
<<set _armor to 5>>\
<<set _slot to $BPtail>>\
<<set _price to 50>>
<<set _price to 50>>
<<elseif _di[0] is 361>>\
<<set _iname to "chainmail wing armor">>\
<<set _armor to 10>>\
<<set _slot to $BPwings>>\
<<set _price to 200>>
<<set _price to 200>>
<<endif>>\
\
<<if _di[1] is 100>>\
<<elseif _di[1] is 101>>\
<<set _material to "wooden">>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam -1>>\
<<set _maxdam to _maxdam -1>>\
<<elseif _armor > 0>>\
<<set _armor to _armor - 5>>\
<<endif>>\
<<elseif _di[1] is 102>>\
<<set _material to "copper">>\
<<set _price to Math.trunc(_price * .8)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam -1>>\
<<set _maxdam to _maxdam -1>>\
<<elseif _armor > 0>>\
<<set _armor to _armor - 2>>\
<<endif>>\
<<elseif _di[1] is 103>>\
<<set _material to "brass">>\
<<elseif _di[1] is 104>>\
<<set _material to "iron">>\
<<set _price to Math.trunc(_price * 1.2)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam +1>>\
<<set _maxdam to _maxdam +1>>\
<<elseif _armor > 0>>\
<<set _armor to _armor + 2>>\
<<endif>>\
<<elseif _di[1] is 105>>\
<<set _material to "steel">>\
<<set _price to Math.trunc(_price * 1.5)>>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam +2>>\
<<set _maxdam to _maxdam +5>>\
<<elseif _armor > 0>>\
<<set _armor to _armor + 5>>\
<<endif>>\
<<elseif _di[1] is 106>>\
<<set _price to Math.trunc(_price * 2)>>\
<<set _material to "mithril">>\
<<if _maxdam > 0>>\
<<set _mindam to _mindam +5>>\
<<set _maxdam to _maxdam +10>>\
<<elseif _armor > 0>>\
<<set _armor to _armor + 10>>\
<<endif>>\
<<elseif _di[1] is 150>>\
<<set _material to "cloth">>\
<<elseif _di[1] is 151>>\
<<set _material to "leather">>\
<<set _flirt to _flirt +1>>\
<<elseif _di[1] is 152>>\
<<set _material to "silk">>\
<<set _price to _price * 3>>\
<<endif>>\
\
<<if _price < 0>>\
<<set _price to 0>>\
<<endif>>\
\
<<if _mindam < 0>>\
<<set _mindam to 0>>\
<<endif>>\
<<if _maxdam < 0>>\
<<set _maxdam to 0>>\
<<endif>>\
<<if _armor < 0>>\
<<set _armor to 0>>\
<<endif>>\
\
\
\
<<set _fullname to _iname>>\
\
\
\
<<if _stackable is true>>\
<<set _quantity to _di[2]>>
<<set _fullname to setup.pluralize(_fullname, _quantity)>>\
<<else>>\
<!-- can we make enchantments out of negative numbers? -->
<<endif>>\
<<if _bang is true>>\
<<set _rep to "error">>\
<<if _di[3] is 100>>\
<<set _rep to "human">>\
<<elseif _di[3] is 101>>\
<<set _rep to "dog">>\
<<elseif _di[3] is 102>>\
<<set _rep to "cat">>\
<<elseif _di[3] is 103>>\
<<set _rep to "wolf">>\
<<elseif _di[3] is 104>>\
<<set _rep to "spider">>\
<<elseif _di[3] is 105>>\
<<set _rep to "horse">>\
<<elseif _di[3] is 106>>\
<<set _rep to "goblin">>\
<<elseif _di[3] is 107>>\
<<set _rep to "demon">>\
<<elseif _di[3] is 108>>\
<<set _rep to "succubus">>\
<<elseif _di[3] is 109>>\
<<set _rep to "incubus">>\
<<elseif _di[3] is 110>>\
<<set _rep to "fox">>\
<<elseif _di[3] is 111>>\
<<set _rep to "rabbit">>\
<<elseif _di[3] is 112>>\
<<set _rep to "cow">>\
<<elseif _di[3] is 113>>\
<<set _rep to "minotaur">>\
<<elseif _di[3] is 114>>\
<<set _rep to "imp">>\
<<elseif _di[3] is 115>>\
<<set _rep to "hellhound">>\
<<elseif _di[3] is 116>>\
<<set _rep to "unidentifiable">>\
<<elseif _di[3] is 200>>\
<<set _rep to "human semen">>\
<<elseif _di[3] is 201>>\
<<set _rep to "dog semen">>\
<<elseif _di[3] is 202>>\
<<set _rep to "cat semen">>\
<<elseif _di[3] is 203>>\
<<set _rep to "wolf semen">>\
<<elseif _di[3] is 204>>\
<<set _rep to "spider semen">>\
<<elseif _di[3] is 205>>\
<<set _rep to "horse semen">>\
<<elseif _di[3] is 206>>\
<<set _rep to "goblin semen">>\
<<elseif _di[3] is 207>>\
<<set _rep to "demon semen">>\
<<elseif _di[3] is 208>>\
<<set _rep to "this should never appear">>\
<<elseif _di[3] is 209>>\
<<set _rep to "incubus semen">>\
<<elseif _di[3] is 210>>\
<<set _rep to "fox semen">>\
<<elseif _di[3] is 211>>\
<<set _rep to "rabbit semen">>\
<<elseif _di[3] is 212>>\
<<set _rep to "this should never appear">>\
<<elseif _di[3] is 213>>\
<<set _rep to "minotaur semen">>\
<<elseif _di[3] is 214>>\
<<set _rep to "imp semen">>\
<<elseif _di[3] is 215>>\
<<set _rep to "hellhound semen">>\
<<elseif _di[3] is 216>>\
<<set _rep to "unidentified semen">>\
<<elseif _di[3] is 300>>\
<<set _rep to "human breast milk">>\
<<elseif _di[3] is 301>>\
<<set _rep to "dog milk">>\
<<elseif _di[3] is 302>>\
<<set _rep to "cat milk">>\
<<elseif _di[3] is 303>>\
<<set _rep to "wolf milk">>\
<<elseif _di[3] is 304>>\
<<set _rep to "spider's don't have milk do they?">>\
<<elseif _di[3] is 305>>\
<<set _rep to "horse milk">>\
<<elseif _di[3] is 306>>\
<<set _rep to "goblin breast milk">>\
<<elseif _di[3] is 307>>\
<<set _rep to "should never appear">>\
<<elseif _di[3] is 308>>\
<<set _rep to "succubus breast milk">>\
<<elseif _di[3] is 309>>\
<<set _rep to "should never appear">>\
<<elseif _di[3] is 310>>\
<<set _rep to "fox milk">>\
<<elseif _di[3] is 311>>\
<<set _rep to "rabbit milk">>\
<<elseif _di[3] is 312>>\
<<set _rep to "cow milk">>\
<<elseif _di[3] is 313>>\
<<set _rep to "minotaur milk">>\
<<elseif _di[3] is 314>>\
<<set _rep to "should never appear">>\
<<elseif _di[3] is 315>>\
<<set _rep to "hellhound milk">>\
<<elseif _di[3] is 316>>\
<<set _rep to "unidentifiable milk">>\
<<elseif _di[3] is 400>>\
<<set _rep to "slime goo">>\
<<elseif _di[3] is 401>>\
<<set _rep to "water">>\
<<set _price to 5>>\
<<elseif _di[3] is 402>>\
<<set _rep to "beer">>\
<<set _price to 7>>\
<<elseif _di[3] is 403>>\
<<set _rep to "wine">>\
<<set _price to 9>>\
<<elseif _di[3] is 404>>\
<<set _rep to "aphrodisiac">>\
<<set _price to 100>>\
<<endif>>\
<<set _foo to "di3 is: " + _di[3] + ", rep is: " + _rep>>
<<AddToLog _foo>>
<<set _puppies to setup.Bang(_fullname, _rep)>>
<<set _fullname to _puppies>>
<<else>>
<<if _di[3] is 500>>
<<set _forcename to "spellbook of up">>
<<elseif _di[3] is 501>>
<<set _forcename to "spellbook of down">>
<<elseif _di[3] is 502>>
<<set _forcename to "spellbook of portal">>
<<elseif _di[3] is 503>>
<<set _forcename to "spellbook of map">>
<<elseif _di[3] is 504>>
<<set _forcename to "spellbook of firebolt">>
<<elseif _di[3] is 505>>
<<set _forcename to "spellbook of poison">>
<<elseif _di[3] is 506>>
<<set _forcename to "spellbook of armor">>
<<elseif _di[3] is 507>>
<<set _forcename to "spellbook of heal">>
\
\
<<elseif _di[3] is 550>>
<<set _forcename to "A Treatise on Ponerology">>
<<elseif _di[3] is 551>>
<<set _forcename to "Etymology of the Echidna">>
<<endif>>
<<endif>>
\
<<if _material neq "">>\
<<set _fullname to _material + " " + _iname>>\
<<endif>>\
<<if _forcename neq "">>\
<<set _fullname to _forcename>>\
<<endif>>\
<<if _maxdam > 0>>\
<<set _fullname to _fullname + " (damage: " + _mindam + "-" + _maxdam + ")">>\
<<endif>>\
<<if _armor > 0>>\
<<set _fullname to _fullname + " [armor: " + _armor + "]">>\
<<endif>>\
<<if _flirt > 0>>\
<<set _fullname to _fullname + " {sexy: " + _flirt + "}">>\
<<endif>>\
<<if 1 is 0 >>\
<<set _asd to setup.bpptrtoname(_slot, "formal")>>\
<<set _fullname to _fullname + " (Equip to: " + _asd +")">>\
<<endif>>\
\
<<set $ItemPoke to
{ name: _iname, fullname: _fullname, mindam: _mindam, maxdam: _maxdam, attacktype: _attacktype, handsreq: _hands, armor:_armor, tooleffect: _tooleffect, qty: _quantity, slot: _slot, flirt: _flirt, restrict: _restrict, foodval: _foodval, price: _price, stackable: _stackable }>>\
<</silently>>\
<</widget>>\
<<widget "EasyRestock">>
<<set $WORLD.restock to $WORLD.day>>\
\
<<!-- clear all? Do we want that? -->\
<<for _i to 0; _i < 10; _i++>>\
<<set $STORE[$Tavern][_i] to [0,0,0,0]>>\
<<set $STORE[$Selene][_i] to [0,0,0,0]>>\
<<set $STORE[$Smith][_i] to [0,0,0,0]>>\
<<set $STORE[$GStore][_i] to [0,0,0,0]>>\
<<set $STORE[$Tavern][_i] to [0,0,0,0]>>\
<</for>>\
<!-- pawn store loses half of items -->\
<<for _i to 0; _i < 10; _i++>>\
<<if $STORE[$Pawn][_i] neq [0,0,0,0]>>\
<<if random(1,2) is 1>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0]>>\
<<endif>>\
<<endif>>\
<</for>>\
\
<!-- Tanya's tavern -->\
<!-- always 2 bottles of plain drinks -->\
<<set _pool to setup.getfrom(2, [401, 402, 403])>>\
<<set _era to random(2,6)>>\
<<set _erb to random(2,6)>>\
<<set $STORE[$Tavern][0] to [109, 0, _era, parseInt(_pool[0])]>>\
<<set $STORE[$Tavern][1] to [109, 0, _erb, parseInt(_pool[1])]>>\
<!-- 2 of boring food -->\
<<set _pool to setup.getfrom(2, [106, 107, 110])>>\
<<set _era to random(2,6)>>\
<<set _erb to random(2,6)>>\
<<set $STORE[$Tavern][2] to [parseInt(_pool[0]), 0, _era, 0]>>\
<<set $STORE[$Tavern][3] to [parseInt(_pool[1]), 0, _erb, 0]>>\
<!-- 2 sketchy meat -->\
<<set _era to random(1,3)>>\
<<set _erb to random(1,3)>>\
<<set _pool to setup.getfrom(2, [101, 102, 103, 110, 111, 112])>>\
<<set $STORE[$Tavern][4] to [102, 0, _era, parseInt(_pool[0])]>>\
<<set $STORE[$Tavern][5] to [102, 0, _erb, parseInt(_pool[1])]>>\
<!-- 2 sketchy milk -->\
<<set _era to random(1,3)>>\
<<set _erb to random(1,3)>>\
<<set _pool to setup.getfrom(2, [301, 302, 303, 310, 311])>>\
<<set $STORE[$Tavern][6] to [109, 0, _era, parseInt(_pool[0])]>>\
<<set $STORE[$Tavern][7] to [109, 0, _erb, parseInt(_pool[1])]>>\
\
<!-- Selene's -->\
<<set _era to random(2, 4)>>\
<<set $STORE[$Selene][0] to [108, 0, _era, 0]>>\
\
<!-- Smith -->\
<<set $STORE[$Smith][0] to [202,0,0,0]>>\
<<set $STORE[$Smith][1] to [either(200, 209),0,0,0]>>\
<<set $STORE[$Smith][2] to [either(201, 203, 204, 205),0,0,0]>>\
<<set $STORE[$Smith][3] to [random(350, 361),0,0,0]>>\
<<set $STORE[$Smith][4] to [random(350, 361),0,0,0]>>\
<<set $STORE[$Smith][5] to [random(350, 361),0,0,0]>>\
<<set $STORE[$Smith][6] to [random(350, 361),0,0,0]>>\
<<if random(1, 2) is 1>>\
<<set $STORE[$Smith][7] to [0,0,0,0]>>\
<<endif>>\
<<for _i to 1; _i < 7; _i++>>\
<<set $STORE[$Smith][_i][1] to either(102, 102, 103, 103, 104, 105)>>\
<</for>>\
\
<!-- General store -->
<<set $STORE[$GStore][0] to [113,0,0,0]>>
<<if random(1,2) is 1>><<set $STORE[$GStore][1] to [100,0,random(2,4),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][2] to [101,0,0,0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][3] to [103,0,0,0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][4] to [104,0,0,0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][5] to [105,0,random(2,5),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][6] to [106,0,random(1,4),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][7] to [107,0,random(1,3),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][8] to [108,0,random(1,3),0]>><<endif>>\
<<if random(1,2) is 1>><<set $STORE[$GStore][9] to [109,0,random(1,3),404]>><<endif>>\
<</widget>>\
<<widget "Store">>\
<<set _s to $args[0]>>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[_s].length; _i++>>\
<<set _item to $STORE[_s][_i]>>\
<<if _item[0] > 0>>\
<<capture _i, _s>>\
<<button "[Buy]">>
<<set _buttonitem to $STORE[_s][_i]>>\
<<DescribeItem _buttonitem>>\
<<set _p to $ItemPoke.price>>\
<<set _st to $ItemPoke.stackable>>\
<<set _foo to "Item: " + _buttonitem + "stackable: " + _st>>\
<<AddToLog _foo>>\
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
<<set _try to setup.additemtoinv($CC, _buttonitem, _st)>>
<<if _try < 0>>
<<replace "#storereport">>No room in inventory<</replace>>\
<<else>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<<if $STORE[_s][_i][2] > 1>>\
<<set $STORE[_s][_i][2] to $STORE[_s][_i][2] -1>>
<<else>>
<<set $STORE[_s][_i] to [0,0,0,0]>>
<<endif>>
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<endif>>
<</button>> \
<</capture>>\
<<set _item to $STORE[_s][_i]>>\
<<DescribeItem _item>>\
<<set _p to $ItemPoke.price>>\
<<set _st to $ItemPoke.stackable>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<<print $ItemPoke.fullname>>, cost: <<print $ItemPoke.price>> \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<endif>>\
<</for>>\
<hr>\
@@color:Gold;Inventory@@
<<for _i to 0; _i < $PC[$CC][$PCmaxinven]; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<if _desc neq "none">>\
<<print _desc>>
<<endif>>\
<</capture>>\
<</for>>\
<hr>\
<span id="storereport"></span>\
<</widget>>\
<<widget "Pawn">>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[$Pawn].length; _i++>>\
<<set _item to $STORE[$Pawn][_i]>>\
<<if _item[0] > 0>>\
<<if $DebugMode>>(_item): <<endif>>\
<<DescribeItem _item>>\
<<set _p to $ItemPoke.price * 2>>\
<<set _st to $ItemPoke.stackable>>\
<<capture _i, _p, _st>>\
<<button "[Buyback]">>
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
\
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[$Pawn][_i][0]>>
<<set _ByValHack[1] to $STORE[$Pawn][_i][1]>>
<<set _ByValHack[2] to 1>>
<<set _ByValHack[3] to $STORE[$Pawn][_i][3]>>
\
<<set _try to setup.additemtoinv($CC, _ByValHack, _st)>>
<<if _try < 0>>
<<replace "#storereport">>No room in inventory<</replace>>\
<<else>>
<<
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $STORE[$Pawn][_i][2] > 1>>\
<<set $STORE[$Pawn][_i][2] to $STORE[$Pawn][_i][2] -1>>
<<else>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<endif>>
<</button>> \
<</capture>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$Pawn][_i]>>\
<<print $ItemPoke.fullname>>, cost: _p \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<endif>>\
<</for>>\
\
<<unset _item>>\
\
<hr>\
@@color:Gold;Inventory@@
<<for _i to 0; _i < $PC[$CC][$PCmaxinven]; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<<set _p to Math.trunc(_p)>>\
<<set _st to $ItemPoke.stackable>>\
<<if _desc neq "none">>\
<<if $DebugMode>>(_item): <<endif>>\
<<set _buttontext to "[Pawn for " + _p + " gold]">>\
<<button "_buttontext">>
<!-- Sugarcube does not clone values until passage refresh -->\
<<set _AAAA to $PC[$CC][$PCinven][_i][0]>>
<<set _BBBB to $PC[$CC][$PCinven][_i][1]>>
<<set _CCCC to 1>>
<<set _DDDD to $PC[$CC][$PCinven][_i][3]>>
<<set _ByValHack to [_AAAA, _BBBB, _CCCC, _DDDD]>>
<<DescribeItem _ByValHack>>
<<set _st to $ItemPoke.stackable>>\
<<set _try to setup.additemtostore($Pawn, _ByValHack, _st)>>
<<if _try < 0>>
<<replace "#storereport">>Store has no more room<</replace>>\
<<else>>
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<<set _p to Math.trunc(_p)>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $PC[$CC][$PCinven][_i][2] > 1>>\
<<set $PC[$CC][$PCinven][_i][2] to $PC[$CC][$PCinven][_i][2] -1>>
<<else>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<</button>> _desc
<<endif>>\
<</capture>>\
<</for>>\
<</widget>>\<<set _EatTarget to $WORLD.datapasser>>\
<<if _EatTarget > -1>>\
<<DescribeItem $PC[$CC][$PCinven][_EatTarget]>>\
\
<<set _SkipSex to false>>\
\
<<if $ItemPoke.fullname.includes("demon")>>\
<<set _Morph to "demon">>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("tentacle")>>\
<<set _Morph to "tentacle">>\
<<set _TFList to [$BPtentacle, $BPtentacle, $BPtentacle, $BPtentacle, $BPpenis, $BPpenis, $BPpenis, $BPpenis]>>\
<<set _SkipSex to true>>\
<<elseif $ItemPoke.fullname.includes("centaur")>>\
<<set _Morph to "centaur">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPlegs, $BPfeet, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("hellhound")>>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPtail]>>\
<<set _Morph to "hellhound">>\
<<elseif $ItemPoke.fullname.includes("drider")>>\
<<set _Morph to "drider">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPlegs, $BPlegs, $BPlegsl]>>\
<<elseif $ItemPoke.fullname.includes("spider")>>\
<<set _Morph to "spider">>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<set _Morph to "slime">>\
<<set _TFList to [$BPchest]>>\
<<elseif $ItemPoke.fullname.includes("horse")>>\
<<set _Morph to "horse">>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPfeet, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("wolf")>>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPtail]>>\
<<set _Morph to "wolf">>\
<<elseif $ItemPoke.fullname.includes("goblin")>>\
<<set _Morph to "goblin">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("succubus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPboobs]>>\
<<elseif $ItemPoke.fullname.includes("incubus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPpenis]>>\
<<elseif $ItemPoke.fullname.includes("omnibus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPpenis, $BPboobs]>>\
<<elseif $ItemPoke.fullname.includes("cow")>>\
<<set _Morph to "cow">>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("minotaur")>>\
<<set _Morph to "cow">>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("imp")>>\
<<set _Morph to "imp">>\
<<set _TFList to [$BPhead, $BPhorns, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("human")>>\
<<set _Morph to "human">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("bunny")>>\
<<set _Morph to "bunny">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("fox")>>\
<<set _Morph to "fox">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("cat")>>\
<<set _Morph to "cat">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<else>>\
Don't recognize monster source
<<endif>>\
\
<<if $ItemPoke.fullname.includes("meat")>>\
<<set _Sex to "none">>\
<<set _TFList to setup.RemoveEveryOneOf($BPpenis, _TFList)>>\
<<set _TFList to setup.RemoveEveryOneOf($BPboobs, _TFList)>>\
<<set _TFList to setup.RemoveEveryOneOf($BPpussy, _TFList)>>\
<<endif>>\
\
<<if $SkipSex is false>>\
<<if $ItemPoke.fullname.includes("semen")>>\
<<set _Sex to "male">>\
<<elseif $ItemPoke.fullname.includes("milk")>>\
<<set _Sex to "female">>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<set _Sex to "slime">>\
<<else>>\
Item is unrecognized
<<endif>>\
<<endif>>\
\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _PCparts to []>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _PCparts[_i] to $PC[$CC][$PCbp][_i].type>>\
<</for>>\
\
<!-- wow -->
<<set _a to _PCparts>>\
<<set _b to _TFList>>\
\
<<for _i to 0; _i < _b.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _a.length; _j++>>\
<<if _FoundOne is false>>\
<<if _a[_j] is _b[_i]>>\
<<set _FoundOne to true>>\
<<set _a[_j] to "prune">>\
<<set _b[_i] to "prune">>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
\
<!-- round 2: remove eveything marked for purge -->
<<for _i to _a.length -1; _i > -1; _i-->>\
<<if (_a[_i] is "prune")>>\
<<set _meh to _a.splice(_i, 1)>>
<<endif>>\
<</for>>\
<<for _i to _b.length -1; _i > -1; _i-->>\
<<if (_b[_i] is "prune")>>\
<<set _meh to _b.splice(_i, 1)>>
<<endif>>\
<</for>>\
\
<!-- round 3: add negatives -->\
<<for _i to 0; _i < _a.length; _i++>>\
<<set _b[_b.length] to (_a[_i] * -1)>>\
<</for>>\
<!-- good to go! -->
\
<hr>
debug, final list:
<<for _i to 0; _i < _b.length; _i++>>\
<<if _b[_i] < 0>>\
<<set _MakeNegative to _b[_i] * -1>>\
(Lose: <<print setup.bpptrtoname(_MakeNegative, "formal")>>) \
<<else>>\
(Gain: <<print setup.bpptrtoname(_b[_i], "formal")>>) \
<<endif>>\
<</for>>\
<hr>
<<if _a.length < 1>>\
replace "#inverr">Debug: no new transforms from this item<</replace
<<else>>
<<set _SelectedTF to _b[random(0, _b.length)>>\
Selected result is: \
<<if _SelectedTF < 0>>\
<<set _MakeNegative to _b[_i] * -1>>\
(Lose: <<print setup.bpptrtoname(_MakeNegative, "formal")>>)
<<else>>\
(Gain: <<print setup.bpptrtoname(_SelectedResult, "formal")>>)
<<endif>>\
replace "#inverr">Selected transform is: <<print _a[_SelectedTF]>>/replace
<<print _a[_SelectedTF]>>
<<endif>>\
<<else>>\
@@color:Red;Error in Consume: I don't know what inv item (_EatTarget_) points to@@
<<endif>>\
<hr>\
<span id="KeypOne">\
<<link "space) continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>\
<</link>>\
</span>\ no replace for easy debug, change button link in inventory to go to here
<<set _EatTarget to $WORLD.datapasser>>\
<<set _DoTF to true>>\
\
<<if _EatTarget > -1>>\
\
<!-- get list of body parts player has -->\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _PCparts to []>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _PCparts[_i] to $PC[$CC][$PCbp][_i].type>>\
<</for>>\
\
<!-- get list of possible transform body parts from monster type -->\
<<DescribeItem $PC[$CC][$PCinven][_EatTarget]>>\
<<set _SkipSex to false>>\
<<if $ItemPoke.fullname.includes("demon")>>\
<<set _Morph to "demon">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("tentacle")>>\
<<set _Morph to "tentacle">>\
<<set _TFList to [$BPtentacle, $BPtentacle, $BPtentacle, $BPtentacle, $BPpenis, $BPpenis, $BPpenis, $BPpenis]>>\
<<set _SkipSex to true>>\
<<elseif $ItemPoke.fullname.includes("centaur")>>\
<<set _Morph to "centaur">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPlegs, $BPfeet, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("hellhound")>>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPtail]>>\
<<set _Morph to "hellhound">>\
<<elseif $ItemPoke.fullname.includes("drider")>>\
<<set _Morph to "drider">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPlegs, $BPlegs, $BPlegsl]>>\
<<elseif $ItemPoke.fullname.includes("spider")>>\
<<set _Morph to "spider">>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<set _Morph to "slime">>\
<<set _TFList to [$BPchest]>>\
<<elseif $ItemPoke.fullname.includes("horse")>>\
<<set _Morph to "horse">>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPfeet, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("wolf")>>\
<<set _TFList to [$BPhead, $BPneck, $BPchest, $BPlegs, $BPlegs, $BPtail]>>\
<<set _Morph to "wolf">>\
<<elseif $ItemPoke.fullname.includes("goblin")>>\
<<set _Morph to "goblin">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("succubus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPboobs]>>\
<<elseif $ItemPoke.fullname.includes("incubus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPpenis]>>\
<<elseif $ItemPoke.fullname.includes("omnibus")>>\
<<set _Morph to "demon">>\
<<set _SkipSex to true>>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet, $BPpenis, $BPboobs]>>\
<<elseif $ItemPoke.fullname.includes("cow")>>\
<<set _Morph to "cow">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("minotaur")>>\
<<set _Morph to "cow">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("imp")>>\
<<set _Morph to "imp">>\
<<set _TFList to [$BPhead, $BPhorn, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPtail, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("human")>>\
<<set _Morph to "human">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet]>>\
<<elseif $ItemPoke.fullname.includes("bunny")>>\
<<set _Morph to "bunny">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("fox")>>\
<<set _Morph to "fox">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.fullname.includes("cat")>>\
<<set _Morph to "cat">>\
<<set _TFList to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPwield, $BPhands, $BPring, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail]>>\
<<elseif $ItemPoke.foodval > 0>>\
<<set _DoTF to false>>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] - $ItemPoke.foodval>>\
<<if $PC[$CC][$PChunger] < 0>>\
<<set $PC[$CC][$PChunger] to 0>>\
<<endif>>\
<<else>>\
<<set _DoTF to false>>\
Error: unrecognized consumable.
<<endif>>\
\
\
<<if _DoTF is true>>\
<!-- generate an array to mark whether body parts in each list have been processed yet -->\
<<set _PlayerHas to []>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<set _PlayerHas[_i] to []>>\
<<set _PlayerHas[_i][0] to _PCparts[_i]>>\
<<set _PlayerHas[_i][1] to -1>>\
<</for>>\
<<set _MonsterHas to []>>\
<<for _i to 0; _i < _TFList.length; _i++>>\
<<set _MonsterHas[_i] to []>>\
<<set _MonsterHas[_i][0] to _TFList[_i]>>\
<<set _MonsterHas[_i][1] to -1>>\
<</for>>\
\
<<set _a to _PlayerHas>>\
<<set _b to _MonsterHas>>\
<<set _c to []>>\
\
<<for _i to 0; _i < _a.length; _i++>>\
<<if setup.FindInANotB(_a[_i][0], _b) is "yes">>\
<<set _a[_i][1] to "used">>\
<<set _NextC to _c.length>>\
<<set _c[_NextC] to []>>\
<<set _c[_NextC][0] to _a[_i][0]>>\
<<set _c[_NextC][1] to "remove">>\
<<endif>>\
<</for>>\
<<for _i to 0; _i < _a.length; _i++>>\
<<if _a[_i][1] is "used">>\
<<else>>\
<<set _Both to setup.FindInBoth(_a[_i][0], _b)>>\
<<if _Both > -1>>\
<<set _a[_i][1] to "used">>\
<<set _b[_Both][1] to "used">>\
<<set _NextC to _c.length>>\
<<set _c[_NextC] to []>>\
<<set _c[_NextC][0] to _a[_i][0]>>\
<<set _c[_NextC][1] to "convert">>\
<<endif>>\
<<endif>>\
<</for>>\
<<for _i to 0; _i < _b.length; _i++>>\
<<if _b[_i][1] is "used">>\
<<else>>\
<<set _NextC to _c.length>>\
<<set _c[_NextC] to []>>\
<<set _c[_NextC][0] to _b[_i][0]>>\
<<set _c[_NextC][1] to "add">>\
<<endif>>\
<</for>>\
\
<!-- add name data -->\
<<for _i to 0; _i < _c.length; _i++>>\
<<set _c[_i][2] to setup.bpptrtoname(_c[_i][0], "formal")>>\
<</for>>\
\
<<if $DebugMode is true>>\
@@color:Gold;Possible transformations:@@
<<for _i to 0; _i < _c.length; _i++>>\
_i) <<print _c[_i]>>
<</for>>\
<<endif>>\
\
<!-- correct for consume type -->\
<<if $SkipSex is false>>\
<<if $ItemPoke.fullname.includes("meat")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if (_c[_i][2] is "Breasts")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif (_c[i][2] is "Pussy")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif (_c[_i][2] is "Penis")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<elseif $ItemPoke.fullname.includes("milk")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if _c[_i][2] is "Penis">>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<elseif $ItemPoke.fullname.includes("semen")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if _c[_i][2] is "Breasts">>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif _c[i][2] is "Pussy">>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif _c[_i][2] is "Penis">>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<for _i to 0; _i < _c.length; _i++>>\
<<if (_c[_i][1] is "remove") and (_c[_i][2] is "Breasts")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif (_c[_i][1] is "remove") and (_c[i][2] is "Pussy")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<elseif (_c[_i][1] is "remove") and (_c[_i][2] is "Penis")>>\
<<set _c[_i][1] to "(Override) convert">>\
<<endif>>\
<</for>>\
<<else>>\
@@color:Red;Error: This isn't meat, milk, or semen. What is this?@@
<<endif>>\
<<endif>>\
\
Debug:
c: _c
selectedtf: _SelectedTF
\
<<if _c.length > 0>>\
<<set _SelectedTF to _c[random(0, _c.length)]>>\
<<set _TheBP to _SelectedTF[0]>>\
<<set _TheAction to _SelectedTF[1]>>\
<<set _TheEnglish to _SelectedTF[2]>>\
thebp: _TheBP
theaction: _TheAction
tehenglish: _TheEnglish
<<if _TheAction is "remove">>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, _TheBP)>>
You have gained <<print setup.bpptrtoname(_TheBP, "formal")>>
<<elseif _TheAction is "add">>\
<<set _BPAdded to setup.AddBodyPart($CC, _TheBP)>>\
<<set $PC[$CC][PCbp][_BPAdded].morph to _Morph>>\
You have lost <<print setup.bpptrtoname(_TheBP, "formal")>>
<<elseif _TheAction is "convert">>\
<<set _GetBP to setup.FetchBodyPart($CC, _TheBP)>>\
debug: _GetBP , _TheBP
Your <<print $PC[$CC][$PCbp][_GetBP].morph>> <<print setup.bpptrtoname(_TheBP, "formal")>> has become a _Morph <<print setup.bpptrtoname(_TheBP, "formal")>>!
<<set $PC[$CC][$PCbp][_GetBP].morph to _Morph>>\
<<else>>\
<br>\
Error in selected TF: _SelectedTF
1: _SelectedTF[0], _TheBP
2: _SelectedTF[1], _TheAction
3: _SelectedTF[2], _TheEnglish
<<endif>>\
<<endif>>\
<<endif>>\
<<else>>\
@@color:Red;Error in Consume: I don't know what inv item (_EatTarget_) points to@@
<<endif>>\
<hr>\
<span id="KeypOne">\
<<link "space) continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>\
<</link>>\
</span>\ <<set $WORLD.datapasser to "default Victory Sex">>\
\
<<set _wonby to "fight">>\
<<set _psex to $PC[$CC][$PCsex]>>\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<set _NextSpot to 0>>\
<<set _LinkArray to []>>\
<<set _NoSex to false>>\
\
<<if $Mon.morph is "bunny-morph">>\
<<set _TargetPassage to "VictoryBunny">>\
<<if $Mon.boobs is true>>\
<<set _temp to "Fondle " + $Mon.himher + " boobs">>\
<<set _LinkArray[_NextSpot] to [_temp, "bunny boob fondle"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcboobs > 0) and ($Mon.boobs is true)>>\
<<set _LinkArray[_NextSpot] to ["Two-way boob play", "bunny boobplay"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.pussy is true)>>\
<<set _temp to "Fuck " + $Mon.himher>>\
<<set _LinkArray[_NextSpot] to [_temp, "bunny vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0)>>\
<<set _temp to "Fuck " + $Mon.himher + " in the ass">>\
<<set _LinkArray[_NextSpot] to [_temp, "bunny ass rape"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.sex is "male") and (_pcpenis is 0)>>\
<<set _temp to "Give him a handjob">>\
<<set _LinkArray[_NextSpot] to [_temp, "bunny handjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if $Mon.sex is "herm">>\
<<set _LinkArray[_NextSpot] to ["Suck her dick", "bunny suck her dick"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "horse">>\
<<set _TargetPassage to "VictoryHorse">>\
<<if _pcpenis > 0>>\
<<set _temp to "Fuck " + $Mon.himher>>\
<<set _LinkArray[_NextSpot] to [_temp, "horse sex"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if _pcpussy > 0>>\
<<set _temp to "Have " + $Mon.himher + " lick you">>\
<<set _LinkArray[_NextSpot] to [_temp, "horse licks you"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if $Mon.boobs is true>>\
<<set _temp to "Fondle " + $Mon.himher + " boobs">>\
<<set _LinkArray[_NextSpot] to [_temp, "horse boobplay"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "fox-morph">>\
<<set _TargetPassage to "VictoryFox">>\
<<if _pcpenis > 0>>\
<<set _temp to "Have " + $Mon.himher + " suck you off">>\
<<set _LinkArray[_NextSpot] to [_temp, "fox blowjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<set _temp to "Anally rape " + $Mon.himher>>\
<<set _LinkArray[_NextSpot] to [_temp, "fox forced anal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.pussy is true)>>\
<<set _temp to "Fuck " + $Mon.himher>>\
<<set _LinkArray[_NextSpot] to [_temp, "fox vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<set _temp to "Have " + $Mon.himher + " eat you out">>\
<<set _LinkArray[_NextSpot] to [_temp, "fox pussylick"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpussy > 0) and ($Mon.penis is true)>>\
<<set _temp to "Ride " + $Mon.hisher + " cock cowgirl style">>\
<<set _LinkArray[_NextSpot] to [_temp, "fox cowgirl"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "cat-morph">>\
<<set _TargetPassage to "VictoryCat">>\
<<if $Mon.boobs is true >>\
<<set _temp to "Play with " + $Mon.himher + " boobs">>\
<<set _LinkArray[_NextSpot] to [_temp, "cat boobplay"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.pussy is true)>>\
<<set _LinkArray[_NextSpot] to ["Fuck the pussycat", "cat vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.penis is true)>>\
<<set _temp to "Let " + $Mon.himher + " fuck you">>\
<<set _LinkArray[_NextSpot] to [_temp, "cat fucks you"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.penis is true) and (_pcpenis is 0)>>\
<<set _temp to "Stroke " + $Mon.hisher + " cock">>\
<<set _LinkArray[_NextSpot] to [_temp, "cat handjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "wolf-morph">>\
<<set _TargetPassage to "VictoryWolf">>\
<<if ($Mon.penis is true) and (_pcpussy > 0)>>\
<<set _temp to "Have " + $Mon.himher + " lick your pussy">>\
<<set _LinkArray[_NextSpot] to [_temp, "wolf pussylick"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.penis is true)>>\
<<set _temp to "Bend over and shake your ass">>\
<<set _LinkArray[_NextSpot] to [_temp, "wolf take cock"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.penis is true) and (_pcpenis > 0)>>\
<<set _temp to "Fuck " + $Mon.hisher + " ass">>\
<<set _LinkArray[_NextSpot] to [_temp, "wolf anal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "wolf">>\
<<set _TargetPassage to "VictoryWolfquad">>\
<<set _temp to "Play with " + $Mon.hisher + " dick">>\
<<set _LinkArray[_NextSpot] to [_temp, "wolf handjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<if (_pcpenis > 999)>>\
<<set _temp to "Stick your dick in " + $Mon.hisher + " mouth">>\
<<set _LinkArray[_NextSpot] to [_temp, "wolf blowjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "goblin">>\
<<set _TargetPassage to "VictoryGoblin">>\
<<if (_pcpussy > 0) and ($Mon.pussy is true)>>\
<<set _temp to "Have " + $Mon.himher + " lick your pussy">>\
<<set _LinkArray[_NextSpot] to [_temp, "goblin pussylick"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpussy > 0) and ($Mon.penis is true)>>\
<<set _temp to "Ride " + $Mon.hisher + " cock cowgirl style">>\
<<set _LinkArray[_NextSpot] to [_temp, "goblin cowgirl"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.pussy is true)>>\
<<set _temp to "Fuck " + $Mon.hisher + " pussy">>\
<<set _LinkArray[_NextSpot] to [_temp, "goblin vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.penis is true)>>\
<<set _temp to "Fuck " + $Mon.himher + " in the ass">>\
<<set _LinkArray[_NextSpot] to [_temp, "goblin assfuck"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "slime">>\
<<set _TargetPassage to "VictorySlime">>\
<<if _pcpenis > 0>>\
<<set _LinkArray[_NextSpot] to ["Make your own hole and fuck it", "slime custom hole"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<set _LinkArray[_NextSpot] to ["Fuck the holes already present", "slime vaginal/anal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<set _LinkArray[_NextSpot] to ["Get naked and see where this goes", "slime female variety pack"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "human">>\
<<set _TargetPassage to "VictoryHuman">>\
<<if (_pcpenis > 0) and ($Mon.penis is false)>>\
<<set _temp to "Blowjob time">>\
<<set _LinkArray[_NextSpot] to [_temp, "human blowjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.pussy is true)>>\
<<set _temp to "Rape " + $Mon.himher>>\
<<set _LinkArray[_NextSpot] to [_temp, "human vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpenis > 0) and ($Mon.pussy is false)>>\
<<set _temp to "Rape him">>\
<<set _LinkArray[_NextSpot] to [_temp, "human male anal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.boobs is true)>>\
<<set _temp to "Motorboat " + $Mon.hisher + " boobs">>\
<<set _LinkArray[_NextSpot] to [_temp, "human motorboat"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.penis is true)>>\
<<set _temp to "Suck " + $Mon.hisher + " dick">>\
<<set _LinkArray[_NextSpot] to [_temp, "human suck his dick"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "naga">>\
<<set _TargetPassage to "VictoryNaga">>\
<<if _pcpenis > 0>>\
<<set _temp to "Snake-girl blowjob time">>\
<<set _LinkArray[_NextSpot] to [_temp, "naga blowjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.penis is true)>>\
<<set _temp to "Check out the double dicks">>\
<<set _LinkArray[_NextSpot] to [_temp, "naga double dicks"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.boobs is true)>>\
<<set _temp to "Fondle " + $Mon.hisher + " tits">>\
<<set _LinkArray[_NextSpot] to [_temp, "naga boob fondle"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "snake">>\
<<set _NoSex to true>>\
<<elseif $Mon.morph is "minotaur">>\
<<set _TargetPassage to "VictoryMinotaur">>\
<<if (_pcpenis > 0) and ($Mon.penis is false)>>\
<<set _temp to "Have " + $Mon.himher + " suck your dick">>\
<<set _LinkArray[_NextSpot] to [_temp, "minotaur blowjob"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if ($Mon.boobs is true)>>\
<<set _temp to "Fondle " + $Mon.hisher + " tits">>\
<<set _LinkArray[_NextSpot] to [_temp, "minotaur boob fondle"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<elseif $Mon.morph is "spider">>\
<<set _NoSex to true>>\
<<set _TargetPassage to "VictorySpider">>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "drider">>\
<<set _NoSex to true>>\
<<set _TargetPassage to "VictoryDrider">>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "ant">>\
<<set _TargetPassage to "VictoryAnt">>\
<<if _pcpenis > 0>>\
<<set _temp to "Fuck " + $Mon.hisher>>\
<<set _LinkArray[_NextSpot] to [_temp, "ant vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "scorpion">>\
<<set _NoSex to true>>\
<<set _TargetPassage to "VictoryScorpion">>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "harpy">>\
<<set _NoSex to true>>\
<<set _TargetPassage to "VictoryHarpy">>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif ($Mon.morph is "rat-morph") or ($Mon.morph is "ratkin")>>\
<<set _temp to "Play with " + $Mon.hisher + " ears">>\
<<set _LinkArray[_NextSpot] to [_temp, "ratkin ears"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<set _TargetPassage to "VictoryRatkin">>\
<<if _pcpenis > 0>>\
<<set _temp to "Fuck " + $Mon.hisher>>\
<<set _LinkArray[_NextSpot] to [_temp, "ratkin vaginal"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "hydra">>\
<<set _TargetPassage to "VictoryHydra">>\
<<if ($Mon.penis is true)>>\
<<set _temp to "Check out " + $Mon.hisher + " cock">>\
<<set _LinkArray[_NextSpot] to [_temp, "hydra cock"]>>\
<<set _NextSpot to _NextSpot +1>>\
<<endif>>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "troll">>\
<<set _NoSex to true>>\
<<set _TargetPassage to "VictoryTroll">>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
<<elseif $Mon.morph is "hellhound">>\
<<set _NoSex to true>>\
<<set _TargetPassage to "VictoryHellhound">>\
<<if _pcpenis > 0>>\
<<endif>>\
<<if (_pcpussy > 0)>>\
<<endif>>\
\
<<else>>\
@@color:Red;Error in Victory include: $Mon.morph is not recognized@@
<<endif>>\
\
\
\
<<if _NoSex is true>>\
<<else>>\
<<if _NextSpot is 0>>\
@@color:Yellow;Warning:@@ no possible sex positions for $Mon.morph when (player is $PC[$CC][$PCsex]) and (monster is $Mon.sex)
<<if $DebugMode is true>>\
MonPenis: $Mon.penis
MonPussy: $Mon.pussy
MonBoobs: $Mon.boobs
PCPenis: _pcpenis
PCPussy: _pcpussy
PCBoobs: _pcboobs
<<endif>>\
<<else>>\
<<for _Shuffle to 0; _Shuffle < _LinkArray.length; _Shuffle++>>\
<<set _r to random(0, _LinkArray.length -1)>>\
<<set _TempArray to _LinkArray[_Shuffle]>>\
<<set _LinkArray[_Shuffle] to _LinkArray[_r]>>\
<<set _LinkArray[_r] to _TempArray>>\
<</for>>\
\
<<if $PC[$CC][$PChunger] < 50>>\
Too tired for sex
<<else>>\
<<set _Keypresses to ["KeypQ","KeypNorth","KeypE","KeypR","KeypT","KeypY"]>>\
<<set _Letters to ["q) ", "w) ", "e) ", "r) ", "t) ", "y) "]>>\
<<for _ShowLinks to 0; _ShowLinks < _LinkArray.length; _ShowLinks++>>\
<<capture _ShowLinks>>\
<span @id="_Keypresses[_ShowLinks]">\
<<set _concat to _Letters[_ShowLinks] + _LinkArray[_ShowLinks][0]>>\
<<link _concat _TargetPassage>>
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] - 50>>
<<set $PC[$CC][$PChornycur] to 0>>
<<set $WORLD.datapasser to _LinkArray[_ShowLinks][1]>>
<<set $DisableMenu to false>>
<<if (setup.PtrToClass($PC[$CC][$PCclass]) is "prostitute") and ($PC[$CC][$PClevel] > 6)>>
<<AwardXP $Mon.level "sex xp">>\
<<endif>>\
<</link>> (-50 stamina)
</span>\
<</capture>>\
<</for>>\
<<endif>>\
<<endif>>\
<<endif>>\<<if (setup.IsNan($WORLD.house.piggybank) is true) and (setup.IsNan($WORLD.Piggybank)is false)>><<set $WORLD.house.piggybank to $WORLD.Piggybank>><<endif>>\
\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
\
<<set _ExitLinks to "AllowLeave">>\
\
<<set _Hammer to setup.HasItemA(101)>>\
<<set _PlainwoodPTR to setup.HasItemA(105)>>\
<<set _PlainwoodQty to 0>>\
<<if _PlainwoodPTR > -1>>\
<<set _PlainwoodQty to $PC[$CC][$PCinven][_PlainwoodPTR][2]>>\
<<endif>>\
<<set _HardwoodPTR to setup.HasItemA(120)>>\
<<set _HardwoodQty to 0>>\
<<if _HardwoodPTR > -1>>\
<<set _HardwoodQty to $PC[$CC][$PCinven][_HardwoodPTR][2]>>\
<<endif>>\
<<set _SteelwoodPTR to setup.HasItemA(121)>>\
<<set _SteelwoodQty to 0>>\
<<if _SteelwoodPTR > -1>>\
<<set _SteelwoodQty to $PC[$CC][$PCinven][_SteelwoodPTR][2]>>\
<<endif>>\
<<set _FaeriewoodPTR to setup.HasItemA(122)>>\
<<set _FaeriewoodQty to 0>>\
<<if _FaeriewoodPTR > -1>>\
<<set _FaeriewoodQty to $PC[$CC][$PCinven][_FaeriewoodPTR][2]>>\
<<endif>>\
\
<<if $WORLD.house.state is 0>>\
<<SimplePic "abandoned.jpg">>\
@@color:Gold;Abandoned wooden building@@
<hr>\
<<set _AllowUpdate to false>>\
This building is in bad shape, with light shining through an opening in the ceiling and holes in the walls large enough for a small dog to walk though. In fact, while you do a quick survey a rat nearly as large as your arm casually walks past you like it owns the place.
It's definitely a fixer-upper. But with a little care, you think you could make the place livable. It would certainly be nice to have a place to keep your things.
To perform the upgrade, you'll need:
<<set _AllowUpdate to true>>\
<<if _Hammer > -1>>\
@@color:LightGreen; * A hammer (have)@@
<<else>>\
<<set _AllowUpdate to false>>\
@@color:Red;* A hammer@@
<<endif>>\
<<if _PlainwoodQty > 99>>\
@@color:LightGreen; * 100 logs (have _PlainwoodQty)@@
<<elseif _PlainwoodQty > 0>>\
<<set _AllowUpdate to false>>\
@@color:Yellow; * 100 logs (have _PlainwoodQty)@@
<<else>>\
<<set _AllowUpdate to false>>\
@@color:LightRed; * 100 logs (have 0)@@
<<endif>>\
<<set _Hunger to Math.trunc($PC[$CC][$PChunger] / 5)>>\
<<if $PC[$CC][$PChunger] > 249>>\
@@color:LightGreen; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<elseif $PC[$CC][$PChunger] > 300>>\
@@color:Yellow; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<else>>\
<<set _AllowUpdate to false>>\
@@color:Red; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<endif>>\
<hr>\
<<set _ExitLinks to "none">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSquare">>
<<AdvanceTime 5>>
<</link>>
</span>\
<<if _AllowUpdate is true>>\
<span id="KeypOne">\
<<link "1) Build" "House">>
<<if $PC[$CC][$PCinven][_PlainwoodPTR][2] > 100>>\
<<set $PC[$CC][$PCinven][_PlainwoodPTR][2] to $PC[$CC][$PCinven][_PlainwoodPTR][2] -100>>
<<else>>
<<set $PC[$CC][$PCinven][_PlainwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<AdvanceTime 250>>
<<set $WORLD.house.state to 1>>
<<set $WORLD.house.storage to 5>>
<</link>>
</span>\
<<endif>>
<<elseif $WORLD.house.state is 1>>\
<<set _ExitLinks to "house">>\
<<SimplePic "house.jpg">>\
@@color:Gold;Your house@@, storage capacity: <<print $WORLD.house.storage>>\
<<if $WORLD.house.piggybank > -1>>\
, current piggybank: <span id="piggybank"><<print $WORLD.house.piggybank>></span> gold\
<<endif>>\
<br>\
<span id="KeypSpace">\
<<link "space) Leave" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
\
<<if $WORLD.house.piggybank < 0>>\
<<if _HardwoodQty > 9>>\
<span id="KeypOne">\
<<link "1) Build piggybank" "House">>
<<if $PC[$CC][$PCinven][_HardwoodPTR][2] > 10>>\
<<set $PC[$CC][$PCinven][_HardwoodPTR][2] to $PC[$CC][$PCinven][_HardwoodPTR][2] -10>>
<<else>>
<<set $PC[$CC][$PCinven][_HardwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<set $WORLD.house.piggybank to 0>>
<<AdvanceTime 60>>
<</link>> (costs 10 hardwood)\
</span>
<<else>>\
1) You could probably build a piggybank to store your gold with 10 hardwood
<<endif>>\
<<elseif $WORLD.house.piggybank > -1>>\
<span id="KeypEast">\
<<link "d) Drop all gold to piggybank">>
<<set $WORLD.house.piggybank to $WORLD.house.piggybank + $PC[$CC][$PCcoins]>>
<<set $PC[$CC][$PCcoins] to 0>>
<<if $WORLD.house.piggybank > 9999>>\
<<AwardAchievement "Greedy">>\
<<endif>>\
<<replace "#piggybank">><<print $WORLD.house.piggybank>><</replace>>
<<replace "#capcoins">><<print $PC[$CC][$PCcoins]>><</replace>>
<</link>>
</span>\
<span id="KeypG">\
<<link "g) Get gold from piggybank">>
<<if $WORLD.house.piggybank > 0>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + $WORLD.house.piggybank>>
<<set $WORLD.house.piggybank to 0>>
<<endif>>\
<<replace "#piggybank">><<print $WORLD.house.piggybank>><</replace>>
<<replace "#capcoins">><<print $PC[$CC][$PCcoins]>><</replace>>
<</link>>
</span>\
<<endif>>\
<<if $WORLD.house.bed is 1>>\
<span id="KeypSouth">\
<<link "s) Sleep" "House">>
<<AdvanceTime 480>>\
<<FullyHeal>>\
<</link>>\
</span>
<<else>>\
<<if _HardwoodQty > 29>>\
<span id="KeypTwo">\
<<link "2) Build bed" "House">>
<<if $PC[$CC][$PCinven][_HardwoodPTR][2] > 30>>\
<<set $PC[$CC][$PCinven][_HardwoodPTR][2] to $PC[$CC][$PCinven][_HardwoodPTR][2] -30>>
<<else>>
<<set $PC[$CC][$PCinven][_HardwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<set $WORLD.house.bed to 1>>
<<AdvanceTime 60>>
<</link>> (costs 30 hardwood)\
</span>
<<else>>\
2) You could probably build a bed to sleep on with 30 hardwood
<<endif>>\
<<endif>>\
<<if $WORLD.house.storage < 10>>\
<<if _HardwoodQty > 49>>\
<span id="KeypThree">\
<<link "3) Upgrade storage" "House">>
<<if $PC[$CC][$PCinven][_HardwoodPTR][2] > 50>>\
<<set $PC[$CC][$PCinven][_HardwoodPTR][2] to $PC[$CC][$PCinven][_HardwoodPTR][2] -50>>
<<else>>
<<set $PC[$CC][$PCinven][_HardwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<set $WORLD.house.storage to 10>>
<<AdvanceTime 60>>
<</link>> (costs 50 hardwood)\
</span>
<<else>>\
3) You could probably increase your storage space with 50 hardwood logs
<<endif>>\
<<elseif $WORLD.house.storage < 15>>\
<<if _SteelwoodQty > 49>>\
<span id="KeypThree">\
<<link "3) Upgrade storage" "House">>
<<if $PC[$CC][$PCinven][_SteelwoodPTR][2] > 50>>\
<<set $PC[$CC][$PCinven][_SteelwoodPTR][2] to $PC[$CC][$PCinven][_SteelwoodPTR][2] -50>>
<<else>>
<<set $PC[$CC][$PCinven][_SteelwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<set $WORLD.house.storage to 15>>
<<AdvanceTime 60>>
<</link>> (costs 50 steelwood)\
</span>
<<else>>\
3) You could probably increase your storage space with 50 steelwood logs
<<endif>>\
<<elseif $WORLD.house.storage < 20>>\
<<if _FaeriewoodQty > 49>>\
<span id="KeypThree">\
<<link "3) Upgrade storage" "House">>
<<if $PC[$CC][$PCinven][_FaeriewoodPTR][2] > 50>>\
<<set $PC[$CC][$PCinven][_FaeriewoodPTR][2] to $PC[$CC][$PCinven][_FaeriewoodPTR][2] -50>>
<<else>>
<<set $PC[$CC][$PCinven][_FaeriewoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<set $WORLD.house.storage to 20>>
<<AdvanceTime 60>>
<</link>> (costs 50 faerie wood)\
</span>
<<else>>\
3) You could probably increase your storage space with 50 faeire wood logs
<<endif>>\
<<endif>>\
<hr>\
<<AwardAchievement "Lumberjack">>\
<<else>>\
@@color:Red;Error@@: unrecognized house state. Attempting to fix.
<<set $WORLD.house to {state: 0, piggybank: -1, bed: 0, storage: 0}>>\
<<endif>>\
<<if _ExitLinks is "none">>\
<<elseif _ExitLinks is "house">>\
<<House>>
<span id="storereport"></span>\
<<else>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<endif>>\
<hr>
<<set _a to [1,1,2,3]>>
<<set _b to [1,2,2,3]>>
<<set _c to []>>
<<set _cptr to 0>>
\
Start states:
a: _a
b: _b
\
<<for _i to 0; _i < _b.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _a.length; _j++>>\
<<if _FoundOne is false>>\
<<if _a[_j] is _b[_i]>>\
<<set _FoundOne to true>>\
<<set _a[_j] to "prune">>\
<<set _b[_i] to "prune">>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
States after first round:
a: _a
b: _b
<<for _i to _a.length -1; _i > -1; _i-->>\
<<if (_a[_i] is "prune")>>\
<<set _meh to _a.splice(_i, 1)>>
<<endif>>\
<</for>>\
<<for _i to _b.length -1; _i > -1; _i-->>\
<<if (_b[_i] is "prune")>>\
<<set _meh to _b.splice(_i, 1)>>
<<endif>>\
<</for>>\
Purge round:
a: _a
b: _b
<<for _i to 0; _i < _b.length; _i++>>\
<<set _a[_a.length] to (_b[_i] * -1)>>\
<</for>>\
Final states, after third round:
a: _a
b: _b
c: _c
<hr>
<hr>
<hr>
<<set _a to [100, 101, 102, 103, 104, 104, 105, 106, 106, 107, 108, 109, 113]>>\
<<set _b to [100, 101, 103, 108, 108, 110]>>\
a is: _a
b is: _b
<<for _i to 0; _i < _b.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _a.length; _j++>>\
<<if _FoundOne is false>>\
<<if _a[_j] is _b[_i]>>\
<<set _FoundOne to true>>\
<<set _a[_j] to "prune">>\
<<set _b[_i] to "prune">>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
After round 1:
a is: _a
b is: _b
\
<!-- round 2: remove eveything marked for purge -->\
<<for _i to _a.length -1; _i > -1; _i-->>\
<<if (_a[_i] is "prune")>>\
<<set _meh to _a.splice(_i, 1)>>
<<endif>>\
<</for>>\
<<for _i to _b.length -1; _i > -1; _i-->>\
<<if (_b[_i] is "prune")>>\
<<set _meh to _b.splice(_i, 1)>>
<<endif>>\
<</for>>\
\
After round 2:
a is: _a
b is: _b
<!-- round 3: add negatives -->\
<<for _i to 0; _i < _a.length; _i++>>\
<<set _b[_b.length] to (_a[_i] * -1)>>\
<</for>>\
<!-- good to go! -->
\
<hr>
debug:
a: _a
b: _b
<hr>
<<if _nc is false>>\
You climix immediately at the thought, closing your eyes and bouncing up and down in short, quick strokes of your buttcheecks against his pelvis to feel his full girth as deeply inside of you as you can. Looking down and seeing him still in submission, you gracefully slide your fingers over your boobs, almost wishing that he was the one feeling you up. But no, it's better that he lie still.
Inhaling a deep breath, you stand to put your clothes back on, leaving him on the ground as you walk away.
<<endif>>\
She walked over towards the man's naked form that laid sprawled across a bed in their shared hotel room where they were both staying after having just finished up with an intense battle between them, which she was now going to win by using every single one of his body parts as if it had been her own.
She reached down and began stroking the man's erect penis through its thick veins that ran all over this male human form like a river flowing from head to toe; he could feel how wet she was getting with excitement just by being in such close proximity of his naked body, which made him want her even more than before.
She leaned down and began kissing the man's neck as if it were some kind of sweet treat that had been left out for them to enjoy together; he could feel how wet she was getting with excitement just by being in such close proximity of his naked body, which made him want her even more than before.
<!-- snippets
(reference:
Unable to continue, the fox-man collapses to the ground. Grabbing him under the jaw, you squeeze to force his mouth open and examine his teeth. They're sharper than you'd prefer, but nothing ventured nothing gained. Jamming your cock down his throat, the sensation of him gagging around your member fills you with unexpected lust. Figuring that if you push on his throat hard enough he won't be able to bite, you wrap your hands around the back of his head and begin ramming clear down to his esophagus.
It's all he can do just to keep breathing, and the peculiar mouth-opening-and-closing motion his struggles make remind you of the endless licking of a cat eating peanut butter. Laughing at the thought, you shout "peanut butter!" and climax all over his throat.
)
-->\
<!--
maybe-salvagable snippets from prior version
_______________________________________
The bunny girl looks at you with interest.
Collapsing to her knees, the bunny gives you a 'what now?' look. As if to answer, you walk over and stand over her with your legs slightly spread and reach down with both hands to cup her enormous breasts.
"Ooohh!!" she giggles. "I can work with that."
Gazing up into your eyes with a smile, she happily unbuckles your pants and inhales happily at the sight of your cock.
"Oh noes, I have been defeated!" the bunny collapses to her knees with an exagerated sigh. "Whatever shall happen to me now?"
Amused by her antics, your can't help but feel your gaze drawn to her enormous cock as she begins stroking it in your direction with her eyes half-lidded. You feel your pussy lips moisten just thinking about it, but it's as big as your forearm and
"You won the fight," she reminds you, tracing a finger between her breasts with one hand while she continues to stroke her dripping cock. "Aren't you going to cum claim your prize?"
-->\unallocated ideas:
Event 100 Fountain
Event 101 "Strange puddle"
money/acid/liquid?/slime?
Event 102 "Shattered bedroom"
take a nap: rest or monster rape
Event 103 "Treasure chest"
Event 104 food barrel
Event 105 masturbating npc
some sort of random sex event / walk in on somebody asking for sex help?
Event 106 "Abandoned Bookcase"
spellbook or learn spell
107 Prisoner cage
108 Statue
109 Throne
110 Glory hole
111 Kennel?
112
113
114
115
116
117
118
119 blacksmith
setup.ItemData = function(which) {
var item = {};
if (which[0] is 200) {
item = { Name: "dagger", MinDam: 1, MaxDam: 4, AttType: "pierce", Hands: 1, Price: 50, Slot: "$BPWield", ToolEffect: 2 }
} else if (which[0] is 201) {
item = { Name: "club", MinDam: 1, MaxDam: 4, AttType: "crush", Hands: 1, Price: 30, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 202) {
item = { Name: "hatchet", MinDam: 1, MaxDam: 4, AttType: "crush/slash", Hands: 1, Price: 50, Slot: "$BPWield", ToolEffect: 3 }
} else if (which[0] is 203) {
item = { Name: "pitchfork", MinDam: 1, MaxDam: 4, AttType: "pierce", Hands: 2, Price: 50, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 204) {
item = { Name: "staff", MinDam: 1, MaxDam: 4, AttType: "crush", Hands: 2, Price: 25, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 205) {
item = { Name: "sword", MinDam: 2, MaxDam: 10, AttType: "slash", Hands: 1, Price: 125, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 206) {
item = { Name: "mace", MinDam: 1, MaxDam: 8, AttType: "crush", Hands: 1, Price: 100, Slot: "$BPWield", ToolEffect: 5 }
} else if (which[0] is 207) {
item = { Name: "axe", MinDam: 4, MaxDam: 8, AttType: "crush/slash", Hands: 2, Price: 125, Slot: "$BPWield", ToolEffect: 3 }
} else if (which[0] is 208) {
item = { Name: "small shield", MinDam: 0, MaxDam: 0, Armor: 10, AttType: "block", Hands: 1, Price: 50, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 209) {
item = { Name: "cooking knife", MinDam: 1, MaxDam: 2, AttType: "pierce", Hands: 1, Price: 10, Slot: "$BPWield", ToolEffect: 2 }
} else if (which[0] is 210) {
item = { Name: "medium shield", MinDam: 1, MaxDam: 2, Armor: 20, AttType: "block", Hands: 1, Price: 150, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 211) {
item = { Name: "tower shield", MinDam: 0, MaxDam: 0, Armor: 30, AttType: "block", Hands: 1, Price: 300, Slot: "$BPWield", ToolEffect: 0 }
} else if (which[0] is 212) {
item = { Name: "war hammer", MinDam: 0, MaxDam: 0, AttType: "crush", Hands: 1, Price: 300, Slot: "$BPWield", ToolEffect: 0 }
};
return item;
};<<silently>>\
<<AddToLog "Arriving in DunGen">>\
<<set _pz to $PC[$CC][$PCz]>>\
<<if $WORLD.dungenned[_pz] > 0>>\
@@color:Red;Error: Request to generate a level that already exists@@
Proceeding anyway...
<<set _foo to "Requesting regen of zlevel: " + _pz>>\
<<AddToLog _foo>>\
<<endif>>\
\
<<set $WORLD.dungenned[$PC[$CC][$PCz]] to 1>>\
\
<<set $Dungeon[_pz] to []>>\
<<set $Dungeon[_pz] to setup.Snake()>>\
\
<!-- room description -->\
<<set _descriptions to []>>
<<for _i to 0; _i < 49; _i++>>\
<<set _descriptions[_i] to _i>>\
<</for>>\
<<for _i to 0; _i < 49; _i++>>\
<<set _dgr to random(0, _descriptions.length-1)>>\
<<set _shuffletemp to _descriptions[_i]>>\
<<set _descriptions[_i] to _descriptions[_dgr]>>\
<<set _descriptions[_dgr] to _shuffletemp>>\
<</for>>\
<<set _dgcount to 0>>\
<<for _i to 0; _i < $WORLD.dundim +1; _i++>>\
<<for _j to 0; _j < $WORLD.dundim +1; _j++>>\
<<set $Dungeon[_pz][_i][_j][8] to _descriptions[_dgcount]>>\
<<set _dgcount = _dgcount +1>>\
<</for>>\
<</for>>\
\
<<if _pz is 1>>\
<<set _stairsx to either(0, 6)>>\
<<set _stairsy to either(0, 6)>>\
<<set $WORLD.TowerOrigin to [_stairsx, _stairsy]>>\
<<set $Dungeon[_pz][_stairsx][_stairsy][11] to "StairsDown">>\
<<set $Dungeon[_pz][_stairsx][_stairsy][12] to 0>>\
<<set $PC[$CC][$PCx] to _stairsx>>\
<<set $PC[$CC][$PCy] to _stairsy>>\
<<set _stairsx to random(2,4)>>
<<set _stairsy to random(2,4)>>
<<set $Dungeon[_pz][_stairsx][_stairsy][11] to "StairsUp">>\
<<set $Dungeon[_pz][_stairsx][_stairsy][12] to 0>>\
<<else>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<!-- implement: stairs should be placed via longest snake path -->\
<<set $Dungeon[_pz][_px][_py][11] to "StairsDown">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<set _stairsx to _px - random(3,4)>>\
<<set _stairsy to _py - random(3,4)>>\
<<if _stairsx < 0>>\
<<set _stairsx to _stairsx + $WORLD.dundim>>\
<<elseif _stairsx > $WORLD.dundim -1>>\
<<set _stairsx to _stairsx - $WORLD.dundim>>\
<<endif>>
<<if _stairsy < 0>>\
<<set _stairsy to _stairsy + $WORLD.dundim>>\
<<elseif _stairsy > $WORLD.dundim -1>>\
<<set _stairsy to _stairsy - $WORLD.dundim>>\
<<endif>>
<<set $Dungeon[_pz][_stairsx][_stairsy][11] to "StairsUp">>\
<<set $Dungeon[_pz][_stairsx][_stairsy][12] to 0>>\
<<endif>>\
\
<<set _throwaway to setup.PlaceDunEvents(_pz)>>\
\
<<set _floor to either("Cobble","White","Brick")>>\
<<set _walls to 1>>\
<<set $WORLD.dungeonthemes[_pz] to [_floor, _walls]>>\
\
<<set $WORLD.dungenned[_pz +1] to 0>>\
<</silently>>\Config.history.maxStates = 2;
/* config.history.controls = false; */
config.saves.isAllowed = function () {
return tags().contains("savable");
};
$('#ui-bar-toggle').remove();
setup.XpNeeded = function(level) {
var n = (2^level) * 10;
return n;
};
/* Array/object functions: why are js array methods so obtuse? */
setup.Stringify = function(a) {
return JSON.stringify(a);
};
setup.RemoveEveryOneOf = function(This, FromThis) {
var i;
for (i = FromThis.length -1; i > -1; i--) {
if (FromThis[i] == This) {
FromThis.splice(i,1);
};
};
return FromThis;
};
setup.FindInANotB = function(a, b) {
var i;
for (i = 0; i < b.length; i++) {
if (b[i][1] == "used") {
} else {
if (b[i][0] == a) {
return -1;
};
};
};
return "yes";
};
setup.FindInBoth = function(a, b) {
var i;
for (i = 0; i < b.length; i++) {
if (b[i][1] == "used") {
} else {
if (b[i][0] == a) {
return i;
};
};
};
return -1;
};
/ * end array functions */
/* Quest functions */
setup.IsQuestFinished = function(which) {
/* This would be terribly complicated. try to not need it */
var tf = false;
if (which == 0) {
} else if (which == 1) {
var meep = 0;
if (State.variables.WORLD.selene > 0) {
meep = meep +1;
};
if (State.variables.WORLD.smith > 0) {
meep = meep +1;
};
if (State.variables.WORLD.gstore > 0) {
meep = meep +1;
};
if (State.variables.WORLD.pawn > 0) {
meep = meep +1;
};
if (meep > 2) {
tf = true;
};
} else if (which == 2) {
} else if (which == 3) {
} else if (which == 4) {
} else if (which == 5) {
} else if (which == 6) {
} else if (which == 7) {
} else if (which == 8) {
} else if (which == 9) {
} else if (which == 10) {
};
return tf;
};
setup.ShowQuestProgress = function(which) {
return "(Implement quest progress)";
};
/* End quest functions */
setup.PlayerHasPerk = function(Which) {
var perks = State.variables.PC[State.variables.CC][State.variables.PCperks];
var i = 0;
for (i = 0; i < perks.length; i++) {
if (perks[i] == Which) {
return true;
};
};
return false;
};
/ * kill count ptr back and forth */
setup.MonNameToKillPTR = function(mon) {
if (mon == "bunny") { return 0; }
else if (mon == "cat") { return 1;}
else if (mon == "fox") { return 2;}
else if (mon == "wolf") { return 3;}
else if (mon == "horse") { return 4;}
else if (mon == "centaur") { return 5;}
else if (mon == "human") { return 6;}
else if (mon == "goblin") { return 7;}
else if (mon == "slime") { return 8;}
else if (mon == "spider") { return 9;}
else if (mon == "imp") { return 10;}
else if (mon == "hellhound") { return 11;}
else if (mon == "cow") { return 12;}
else if (mon == "minotaur") { return 12;}
else if (mon == "drider") { return 13;}
else if (mon == "tentacle") { return 14;}
else if (mon == "demon") { return 15;}
else if (mon == "succubus") { return 15;}
else if (mon == "incubus") { return 15;}
else if (mon == "omnibus") { return 15;}
else {
return "-1";
};
};
setup.KillPTRToMonName = function(ptr) {
/* special cases can't go backwards with available data */
var mons = ["bunny","cat","fox","wolf","horse","centaur","human","goblin","slime","spider","imp","hellhound","minotaur","drider","tentacle","demon"];
return mons[ptr];
};
/* end kill count ptr back and forth */
setup.MapClick = function(a) {
if (a == "Slums") {
Engine.play("Slums");
} else if (a == "Garden") {
Engine.goToPassage("Garden");
};
};
setup.al = function(what) {
var foo = State.variables.GameLog + what + "<br>";
State.variables.GameLog = foo;
};
setup.AddBodyPart = function(who, bp) {
var n = setup.getnextbodypart();
var bpPTR = State.variables.PCbp;
var haircol = either("blonde","brown","red");
if (bp == State.variables.BPhead) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0], morph: "human", mascfem: 0, hair: haircol, length: 3, equippable: true};
} else if (bp == State.variables.BPwield) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0], morph: "human", mascfem: 0, equippable: true, attacktype: "punch", mindam: 1, maxdam: 2, attackdesc: ""};
} else {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0], morph: "human", mascfem: 0, equippable: true};
};
return n;
};
setup.RemoveBodyPart = function(who, type){
var bpPTR = State.variables.PCbp;
var i = 0;
var body = State.variables.PC[who][bpPTR];
for (i = body.length -1; i > -1; i--) {
if (body[i].type == type) {
alert(JSON.stringify(State.variables.PC[who][bpPTR][i]));
var meh = State.variables.PC[who][bpPTR].splice(i, 1);
alert(JSON.stringify(meh));
return meh[0];
};
};
};
setup.FetchBodyPart = function(who, type){
var bpPTR = State.variables.PCbp;
var i = 0;
var body = State.variables.PC[who][bpPTR];
for (i = body.length -1; i > -1; i--) {
if (body[i].type == type) {
return i;
};
};
};
setup.GetMorphFormatted = function(TheMorph) {
var r = "Error: unrecognized morph: " + TheMorph;
if (TheMorph == "bunny") {
r = "@@color:LightGreen;bunny@@";
} else if (TheMorph == "cat") {
r = "@@color:LightGreen;cat@@";
} else if (TheMorph == "fox") {
r = "@@color:LightGreen;fox@@";
} else if (TheMorph == "wolf") {
r = "@@color:LightGreen;wolf@@";
} else if (TheMorph == "horse") {
r = "@@color:LightGreen;horse@@";
} else if (TheMorph == "centaur") {
r = "@@color:LightGreen;centaur@@";
} else if (TheMorph == "human") {
r = "@@color:Aqua;human@@";
} else if (TheMorph == "goblin") {
r = "@@color:Yellow;goblin@@";
} else if (TheMorph == "slime") {
r = "@@color:Yellow;slime@@";
} else if (TheMorph == "spider") {
r = "@@color:Yellow;spider@@";
} else if (TheMorph == "imp") {
r = "@@color:Yellow;imp@@";
} else if (TheMorph == "hellhound") {
r = "@@color:Orange;hellhound@@";
} else if (TheMorph == "cow") {
r = "@@color:Orange;cow@@";
} else if (TheMorph == "minotaur") {
r = "@@color:Orange;minotaur@@";
} else if (TheMorph == "drider") {
r = "@@color:Orange;drider@@";
} else if (TheMorph == "tentacle") {
r = "@@color:Red;tentacle@@";
} else if (TheMorph == "demon") {
r = "@@color:Red;@@";
} else if (TheMorph == "succubus") {
r = "@@color:Red;demon@@";
} else if (TheMorph == "incubus") {
r = "@@color:Red;demon@@";
} else if (TheMorph == "omnibus") {
r = "@@color:Red;demon@@";
} else {
r = "format needed for this morph: " + TheMorph;
};
return r;
};
setup.GetStandardSex = function() {
var CC = State.variables.CC;
var sexptr = State.variables.PCsex;
var sex = State.variables.PC[CC][sexptr];
var monsex = "female";
if (sex == "female") {
if (random(1,10) < 8) {
monsex = "male";
};
} else if (sex == "male") {
if (random(1,10) < 4) {
monsex = "male";
};
} else {
if (random(1,10) < 6) {
monsex = "male";
};
};
if (random(1,10) < 3) {
monsex = "herm";
};
return monsex;
};
setup.HasQuestMonsterParts = function(PartType, MonsterSource) {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == PartType) {
if (Inven[i][3] == MonsterSource) {
return i;
}
};
};
return -1;
};
setup.HasRope = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 1) {
return i;
};
};
return -1;
};
setup.HasHammer = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 101) {
return i;
} else if (Inven[i][0] == 206) {
return i;
};
};
return -1;
};
setup.HasPick = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 115) {
return i;
};
};
return -1;
};
setup.HasAxe = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 202) {
return i;
} else if (Inven[i][0] == 207) {
return i;
};
};
return -1;
};
setup.HasBottle = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 180) {
return i;
};
};
return -1;
};
setup.HasButcherTool = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 113) {
return i;
} else if (Inven[i][0] == 200) {
return i;
} else if (Inven[i][0] == 209) {
return i;
};
};
return -1;
};
setup.additemtoinv = function(who, item, stackable) {
var PCinven = State.variables.PCinven;
var PCmaxinvenPTR = State.variables.PCmaxinven;
var actualloops = State.variables.PC[who][PCmaxinvenPTR];
var i = 0;
var holder = 0;
if (stackable == true) {
item[2] = 1;
for (i = 0; i < actualloops; i++) {
var a = item[0];
var b = parseInt(State.variables.PC[who][PCinven][i][0]);
var c = item[3];
var d = parseInt(State.variables.PC[who][PCinven][i][3]);
if (a == b) {
if (c == d) {
State.variables.PC[who][PCinven][i][2]++;
return [i, true];
};
};
};
};
for (let i = 0; i < actualloops; i++) {
if (State.variables.PC[who][PCinven][i][0] == 0) {
State.variables.PC[who][PCinven][i] = item;
return [i, false];
};
};
return [-1, false];
};
setup.additemtostore = function(which, item, stackable) {
var STORE = State.variables.STORE[which];
var actualloops = STORE.length;
var i = 0;
var holder = 0;
if (stackable == true) {
for (i = 0; i < actualloops; i++) {
var a = parseInt(item[0]);
var b = parseInt(STORE[i][0]);
var c = parseInt(item[3]);
var d = parseInt(STORE[i][3]);
if (a == b) {
if (c == d) {
State.variables.STORE[which][i][2] = State.variables.STORE[which][i][2] +1;
return [i, true];
};
};
};
};
for (let i = 0; i < actualloops; i++) {
if (State.variables.STORE[which][i][0] == 0) {
State.variables.STORE[which][i] = item;
return [i, false];
};
};
return [-1, false];
};
/* Custom functions */
setup.pluralize = function (itemdesc, qty) {
var foo;
if (qty > 1) {
foo = "" + qty + " " + itemdesc.replace("~", "s");
} else {
foo = qty + " " + itemdesc.replace("~", "");
};
return foo;
};
setup.Bang = function (fullname, rep) {
var foo = fullname.replace("!", rep);
return foo;
};
setup.getfrom = function(qty, pool) {
var i = 0;
var onlythese = [];
for (i = 0; i < qty; i++) {
onlythese[i] = pool.splice(random(0, (pool.length -1)),1);
};
return onlythese;
};
setup.stringhack = function (foo) {
var thisis = foo.toString();
var very = thisis;
var strange = very.substr(0,5);
return strange;
};
setup.updatenametextbox = function() {
var CC = State.variables.CC;
var nameptr = State.variables.PCname;
document.getElementById("textbox-pcccpcname").value = State.variables.PC[CC][nameptr];
};
setup.getnextbodypart = function() {
var CC = State.variables.CC;
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[CC][PCbp];
return bp.length;
};
setup.getbpqty = function(who, type) {
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[who][PCbp];
var count = 0;
for (let i = 0; i < bp.length; i++) {
if (bp[i].type == type) {
count = count +1;
}
};
return count;
};
setup.getparttypeqty = function(who, type) {
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[who][PCbp];
var count = 0;
for (let i = 0; i < bp.length; i++) {
if (bp[i].morph == type) {
count = count +1;
}
};
return count;
};
setup.getnextinvslot = function(who) {
var PCinven = State.variables.PCinven;
var PCmaxinven = State.variables.PCmaxinven;
for (let i = 0; i < PCmaxinven; i++) {
if (State.variables.PC[who][PCinven][i][0] == 0) {
return i;
}
};
return -1;
};
setup.getunequippedofslottype = function(who, slottype) {
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[who][PCbp];
for (let i = 0; i < bp.length; i++) {
if (bp[i].type == slottype) {
if (bp[i].equip[0] == 0) {
return i;
}
}
};
return -1;
};
setup.DoesPlayerHave = function(itemreq) {
var who = State.variables.CC;
var PCinven = State.variables.PCinven;
var PCmaxinven = State.variables.PCmaxinven;
var a = itemreq[0];
var b = itemreq[1];
var c = itemreq[2]
var d = itemreq[3]
var comp = [0,0,0,0];
var i = 0;
for (i = 0; i < PCmaxinven; i++) {
comp = State.variables.PC[who][PCinven][i];
if (a == "*" || comp[0] == itemreq[0]) {
if (b == "*" || comp[1] == itemreq[1]) {
if (c == "*" || comp[2] == itemreq[2]) {
if (d == "*" || comp[3] == itemreq[3]) {
return i;
};
};
};
};
};
return -1;
};
setup.addtoinven = function(item) {
var CC = State.variables.CC;
var PCinven = State.variables.PCinven;
var PCmaxinven = State.variables.PCmaxinven;
for (let i = 0; i < PCmaxinven; i++) {
if (State.variables.PC[CC][PCinven][i][0] == 0) {
State.variables.PC[CC][PCinven][i] = item;
return i;
}
};
return -1;
};
setup.RemoveOneItemFromInv = function(who, slot) {
var CurQty = State.variables.PC[who][State.variables.PCinven][slot][2];
if (CurQty < 2) {
State.variables.PC[who][State.variables.PCinven][slot] = [0,0,0,0];
} else {
State.variables.PC[who][State.variables.PCinven][slot] = CurQty -1;
};
return true;
};
setup.GenLoot = function(mon, sex) {
var loot = [100,0,0,0];
if (mon == "goblin") {
loot = [103,0,0,0];
} else if (mon == "slime girl") {
loot = [103,0,0,0];
};
return loot;
};
setup.HasTool = function(effect) {
return -1;
};
setup.ChangeButtonClass = function(what, towhat) {
document.getElementById(what).className = towhat;
};
setup.PtrToClass = function(charclass) {
var n = "error in setup.PtrToClass: " + charclass;
if (charclass == 0) {
n = "peasant";
} else if (charclass == 1) {
n = "lumberjack";
} else if (charclass == 2) {
n = "prostitute";
} else if (charclass == 3) {
n = "warrior";
} else if (charclass == 4) {
n = "scholar";
} else if (charclass == 5) {
n = "priest";
} else if (charclass == 6) {
n = "rogue";
} else if (charclass == 7) {
n = "mage";
} else if (charclass == 8) {
n = "barbarian";
} else if (charclass == 9) {
n = "monk";
} else if (charclass == 10) {
n = "ninja";
} else if (charclass == 11) {
n = "paladin";
};
return n;
};
setup.TFTextHack = function(morph, bp) {
var a = "error";
var b = "error";
if (bp == 100) {
a = morph + " head has become a ";
b = morph + " head";
} else if (bp == 101) {
a = morph + " neck has become a ";
b = morph + " neck";
} else if (bp == 102) {
a = morph + " back has become a ";
b = morph + " back";
} else if (bp == 103) {
a = morph + " chest has become a ";
b = morph + " chest";
} else if (bp == 104) {
a = morph + " arms have become ";
b = morph + " arms";
} else if (bp == 105) {
a = morph + " hands have become ";
b = morph + " hands";
} else if (bp == 106) {
a = morph + " fingers have become ";
b = morph + " fingers";
} else if (bp == 107) {
a = morph + " waist has become a ";
b = morph + " waist";
} else if (bp == 108) {
a = morph + " legs have become ";
b = morph + " legs";
} else if (bp == 109) {
a = morph + " feet have become ";
b = morph + " feet";
} else if (bp == 110) {
a = morph + " tail has become a ";
b = morph + " tail";
} else if (bp == 111) {
a = morph + "horns have become ";
b = morph + " horns";
} else if (bp == 112) {
a = morph + " wings have become ";
b = morph + " wings";
} else if (bp == 113) {
a = morph + " penis has become a ";
b = morph + " penis";
} else if (bp == 114) {
a = morph + " breasts have become ";
b = morph + " breasts";
} else if (bp == 115) {
a = morph + " pussy has become a ";
b = morph + " pussy";
} else if (bp == 116) {
a = "tentacles have ";
b = "grown larger";
} else if (bp == 117) {
a = morph + " stinger has become a ";
b = morph + " stinger";
};
return [a,b];
};
setup.bpptrtoname = function(bp, formal) {
var c = "error in setup.bpptrtoname: " + bp;
var f = "error in setup.bpptrtoname: " + bp;
var tf = "error in setup.bpptrtoname: " + bp;
if (bp == 100) {
f = "Head";
c = "head";
tf = "~ head";
} else if (bp == 101) {
f = "Neck";
c = "neck";
tf = "~ neck";
} else if (bp == 102) {
f = "Back";
c = "back";
tf = "~ back";
} else if (bp == 103) {
f = "Chest";
c = "chest";
tf = "~ chest";
} else if (bp == 104) {
f = "Wield";
c = "pair of arms";
tf = "pair of ~ arms";
} else if (bp == 105) {
f = "Hands";
c = "pair of hands";
tf = "pair of ~ hands";
} else if (bp == 106) {
f = "Ring";
c = "set of fingers";
tf = "~ fingers";
} else if (bp == 107) {
f = "Waist";
c = "waist";
tf = "~ waist";
} else if (bp == 108) {
f = "Legs";
c = "pair of legs";
tf = "pair of ~ legs";
} else if (bp == 109) {
f = "Feet";
c = "pair of feet";
tf = "pair of ~ feet";
} else if (bp == 110) {
f = "Tail";
c = "tail";
tf = "~ tail";
} else if (bp == 111) {
f = "Horns";
c = "horns";
tf = "~ horns";
} else if (bp == 112) {
f = "Wings";
c = "pair of wings";
tf = "pair of ~ wings";
} else if (bp == 113) {
f = "Penis";
c = "penis";
tf = "~ penis";
} else if (bp == 114) {
f = "Breasts";
c = "pair of breasts";
tf = "~ breasts";
} else if (bp == 115) {
f = "Pussy";
c = "pussy";
tf = "~ pussy";
} else if (bp == 116) {
f = "Tentacle";
c = "tentacle";
tf = "tentacle";
} else if (bp == 117) {
f = "Stinger";
c = "stinger";
tf = "~ stinger";
};
if (formal == "casual") {
return c;
} else if (formal == "tf") {
return tf;
} else {
return f;
}
};
setup.ChooseMon = function() {
var CC = State.variables.CC;
var PCz = State.variables.PCz;
var diff = State.variables.PC[CC][PCz];
var mon = "goblin";
if (diff == 1) {
mon = "goblin";
} else if (diff == 2) {
mon = "goblin";
} else if (diff == 3) {
mon = "goblin";
};
return mon;
};
setup.GetFlirtPower = function(morph) {
var frommorph = 0;
var frompenis = 0;
var fromboobs = 0;
var frompussy = 0;
var fromequip = State.variables.WORLD.FlirtFromEquip;
var p = 0;
var ispenis = State.variables.BPpenis;
var isboobs = State.variables.BPboobs;
var ispussy = State.variables.BPpussy;
var CC = State.variables.CC;
var PCbp = State.variables.PCbp;
var bod = State.variables.PC[CC][PCbp];
var bp;
var i = 0;
for (i = 0; i < bod.length; i++) {
bp = bod[i];
if (bp.morph == morph) {
frommorph = frommorph + 1;
};
if (bp.type == ispenis) {
frompenis = frompenis + bp.size;
} else if (bp.type == ispussy) {
p = 80 - bp.size;
if (p < 20) {
p = 20;
};
frompussy = frompussy + p;
} else if (bp.type == isboobs) {
fromboobs = fromboobs + bp.size;
};
};
frompenis = frompenis / 10;
frompussy = frompussy / 10;
fromboobs = fromboobs / 100;
return [frommorph, frompenis, fromboobs, frompussy, fromequip];
};
setup.DrawMap = function(px, py, tilesize) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var CC = State.variables.CC;
var pcz = State.variables.PCz;
var CurDunLev = State.variables[CC][pcz];
var Dungeon = State.variables.Dungeon[CurDunLev];
var DunDim = State.variables.WORLD.dundim;
for (let i = 0; i < DunDim +1; i++) {
for (let j = 0; j < DunDim +1; j++) {
var imgname = "Map-";
if (Dungeon[i][j][0] > 0) {
imgname = imgname + "N";
};
if (Dungeon[i][j][1] > 0) {
imgname = imgname + "E";
};
if (Dungeon[i][j][2] > 0) {
imgname = imgname + "S";
};
if (Dungeon[i][j][3] > 0) {
imgname = imgname + "W";
};
if (imgname == "Map-") {
imgname = "Map-Blank";
};
if (Dungeon[i][j][11] == "StairsUp") {
imgname = "UpStairsBottom";
} else if (Dungeon[i][j][11] == "StairsDown") {
imgname = "DownStairs";
};
if (Dungeon[i][j][15] == 0) {
imgname = "Map-Blank";
};
if (tilesize == 64) {
imgname = imgname + "64";
};
var img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
ctx.fillStyle = "#fef4f4";
var ppx = 11 + (px * tilesize);
var ppy = 11 + (py * tilesize);
ctx.fillRect(ppx, ppy, (tilesize / 4), 10);
};
setup.DrawForestMap64 = function(x, y, z, tilesize) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var Theme = State.variables.WORLD.ForestTheme;
var allowdraw = false;
var floor = "S64Forest-Grass" + Theme;
var Forest = State.variables.ForestMap;
var ForestDims = State.variables.WORLD.ForestDims;
for (let i = 0; i <= ForestDims[0]; i++) {
for (let j = 0; j < ForestDims[1]; j++) {
allowdraw = true;
/* Allow view by distance? */
var img = document.getElementById(floor);
ctx.drawImage(img, i * tilesize, j * tilesize);
/* Draw plants here */
if (Forest[i][j] == 0) {
imgname = "empty";
} else if (Forest[i][j] == 1) {
var imgname = "S64Forest-TallGrass";
} else if (Forest[i][j] == 2) {
var imgname = "S64Forest-RedFlower";
} else if (Forest[i][j] == 3) {
var imgname = "S64Forest-YellowFlower";
} else if (Forest[i][j] == 4) {
var imgname = "S64Forest-BlueFlower";
} else if (Forest[i][j] == 5) {
var imgname = "S64Forest-PurpleFlower";
} else if (Forest[i][j] == 99) {
var imgname = "S64Forest-TreeTrunk";
} else if (Forest[i][j] == 100) {
var imgname = "S64Forest-Tree1";
} else if (Forest[i][j] == 101) {
var imgname = "S64Forest-Tree2";
} else if (Forest[i][j] == 102) {
var imgname = "S64Forest-Tree3";
};
if (imgname == "empty") {
} else {
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
};
/* Minimap avatar */
img = document.getElementById("MiniAV");
ctx.drawImage(img, x * tilesize, y * tilesize);
};
setup.DrawMap64 = function(x, y, z, tilesize) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var WORLD = State.variables.WORLD;
var Theme = WORLD.dungeonthemes[z];
var allowdraw = false;
var foo = "pcx: " + x + ", pcy: " + y + ", pcz: " + z + ", Theme: " + Theme;
/* alert(foo); */
var floor = "S64FloorWhite";
floor = "S64Floor" + Theme[0];
var Dungeon = State.variables.Dungeon[z];
var DunDim = State.variables.WORLD.dundim;
for (let i = 0; i < DunDim +1; i++) {
for (let j = 0; j < DunDim +1; j++) {
allowdraw = false;
if (Dungeon[i][j][15] > 0) {
allowdraw = true;
};
var imgname = "S64Map-";
if (Dungeon[i][j][0] > 0) {
imgname = imgname + "N";
};
if (Dungeon[i][j][1] > 0) {
imgname = imgname + "E";
};
if (Dungeon[i][j][2] > 0) {
imgname = imgname + "S";
};
if (Dungeon[i][j][3] > 0) {
imgname = imgname + "W";
};
if (imgname == "Map-") {
allowdraw = false;
};
if (Dungeon[i][j][15] == 0) {
allowdraw = false;
};
if (allowdraw == true) {
var img = document.getElementById(floor);
ctx.drawImage(img, i * tilesize, j * tilesize);
if (imgname == "S64Map-NESW") {
} else {
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
if (Dungeon[i][j][11] == "StairsUp") {
if (Dungeon[i][j][3] > 0) {
imgname = "S64StairsUpRight";
img = document.getElementById(imgname);
} else {
imgname = "S64StairsUpLeft";
img = document.getElementById(imgname);
};
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (Dungeon[i][j][11] == "StairsDown") {
imgname = "S64StairsDown";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
};
};
/* Minimap avatar */
img = document.getElementById("MiniAV");
ctx.drawImage(img, x * tilesize, y * tilesize);
};
/* meters */
window.Health2 = function (CurHP, MaxHP, BarID, Horizontal, Container) {
if (Container == undefined) {
Container = document;
}
var HP = parseInt((CurHP / MaxHP) * 100);
if (HP < 0) HP = 0;
if (HP > 100) HP = 100;
var BarElement = $(Container).find("#" + BarID);
if (Horizontal) {
BarElement.css( { width : HP + "%" } );
} else {
BarElement.css( { height : HP + "%" } );
}
// Hue goes from -20 to 240 = red (hue = 0) -> green -> blue (hue = 240)
var col = "hsl(" + (Math.floor(HP * 2.6) - 20) + ", 100%, 50%)";
BarElement.css("background-color", col);
BarElement.attr("title", CurHP + "/" + MaxHP + " HP");
$(Container).find("#" + BarID + "bkg").attr("title", CurHP + "/" + MaxHP + " HP");
};
/* Keypress */
$(document).on("keyup", function(dir) {
if(dir.keyCode == 49){
$('#KeypOne a').trigger("click");
}
else if(dir.keyCode == 50){
$('#KeypTwo a').trigger("click");
}
else if(dir.keyCode == 51){
$('#KeypThree a').trigger("click");
}
else if(dir.keyCode == 52){
$('#KeypFour a').trigger("click");
}
else if(dir.keyCode == 53){
$('#KeypFive a').trigger("click");
}
else if(dir.keyCode == 54){
$('#KeypSix a').trigger("click");
}
else if(dir.keyCode == 55){
$('#KeypSeven a').trigger("click");
}
else if(dir.keyCode == 56){
$('#KeypEight a').trigger("click");
}
else if(dir.keyCode == 57){
$('#KeypNine a').trigger("click");
}
else if(dir.keyCode == 32){
$('#KeypSpace a').trigger("click");
}
else if(dir.keyCode == 87){
$('#KeypNorth a').trigger("click");
}
else if(dir.keyCode == 68){
$('#KeypEast a').trigger("click");
}
else if(dir.keyCode == 83){
$('#KeypSouth a').trigger("click");
}
else if(dir.keyCode == 65){
$('#KeypWest a').trigger("click");
}
else if(dir.keyCode == 67){
$('#KeypC a').trigger("click");
}
else if(dir.keyCode == 70){
$('#KeypF a').trigger("click");
}
else if(dir.keyCode == 82){
$('#KeypR a').trigger("click");
}
else if(dir.keyCode == 89){
$('#KeypY a').trigger("click");
}
else if(dir.keyCode == 78){
$('#KeypN a').trigger("click");
}
else if(dir.keyCode == 73){
$('#KeypI a').trigger("click");
}
else if(dir.keyCode == 81){
$('#KeypQ a').trigger("click");
}
else if(dir.keyCode == 69){
$('#KeypE a').trigger("click");
}
else if(dir.keyCode == 84){
$('#KeypT a').trigger("click");
}
});
setup.ForestSnake = function() {
var i = 0;
var j = 0;
var ForestDims = State.variables.WORLD.ForestDims;
var ForestDimX = ForestDims[0];
var ForestDimY = ForestDims[1];
var Forest = [];
for (i = 0; i <= ForestDimX; i++) {
Forest[i] = [];
for (j = 0; j < ForestDimY; j++) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,100,100,100,100,101,101,101,102);
if (random(1,33) == 1) {
Forest[i][j] = 1;
} else if (random(1,100) == 42) {
Forest[i][j] = either(2,3,4,5);
};
};
};
/* this breaks easy forest redimensioning */
var maskhackleft = either(2,4);
for (i = 0; i < 5; i++) {
Forest[i][maskhackleft] = 0;
};
var maskhackright = either(2,4);
for (i = 10; i < 15; i++) {
Forest[i][maskhackright] = 0;
};
if (maskhackleft == 2) {
if (maskhackright == 2) {
Forest[5][1] = 0;
Forest[5][0] = 0;
Forest[6][0] = 0;
Forest[7][0] = 0;
Forest[7][1] = 0;
Forest[8][1] = 0;
Forest[8][2] = 0;
Forest[9][2] = 0;
} else {
Forest[4][3] = 0;
Forest[4][4] = 0;
Forest[5][4] = 0;
Forest[5][5] = 0;
Forest[6][5] = 0;
Forest[6][6] = 0;
Forest[7][6] = 0;
Forest[8][6] = 0;
Forest[9][6] = 0;
Forest[9][5] = 0;
Forest[10][4] = 0;
};
} else {
if (maskhackright == 2) {
Forest[4][3] = 0;
Forest[5][3] = 0;
Forest[5][2] = 0;
Forest[6][2] = 0;
Forest[7][2] = 0;
Forest[8][2] = 0;
Forest[8][1] = 0;
Forest[9][1] = 0;
Forest[10][1] = 0;
Forest[11][1] = 0;
Forest[11][2] = 0;
Forest[11][3] = 0;
} else {
Forest[4][3] = 0;
Forest[5][3] = 0;
Forest[6][3] = 0;
Forest[7][3] = 0;
Forest[7][4] = 0;
Forest[7][5] = 0;
Forest[8][5] = 0;
Forest[9][5] = 0;
Forest[10][5] = 0;
};
};
return Forest;
};
setup.Snake = function() {
var CC = State.variables.CC;
var PCx = State.variables.PCx;
var PCy = State.variables.PCy;
var PCz = State.variables.PCz;
var DunDims = State.variables.WORLD.dundim;
DunDims = 7;
var Dungeon = [];
var Visited = [];
var i = 0;
var j = 0;
for (i = 0; i < DunDims; i++) {
Dungeon[i] = [];
Visited[i] = [];
for (j = 0; j < DunDims; j++) {
Dungeon[i][j] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
Visited[i][j] = false;
};
};
var StartX = State.variables.PC[CC][PCx];
var StartY = State.variables.PC[CC][PCy];
var zlevel = State.variables.PC[CC][PCz];
var SnakeX = 2;
var SnakeY = 2;
var whereto = 0;
var wherefrom = 0;
var pathstack = [];
var endofstack = 0;
var silly;
var modX = 0;
var modY = 0;
var plen = 0;
var dunpasser = [];
Visited[SnakeX][SnakeY] = true;
var bar = "Snake starts at: (" + SnakeX + ", " + SnakeY + ")";
setup.al(bar);
var VisitedCount = 0;
var TargetVisits = DunDims * DunDims;
/* for (i = 0; i < 50; i++) { */
while (true) {
dunpasser = Dungeon[SnakeX][SnakeY];
whereto = setup.DunGenDeadEnd(dunpasser, SnakeX, SnakeY, Visited);
if (whereto < 0) {
if (pathstack.length < 1) {
return Dungeon;
} else if (VisitedCount > TargetVisits -2) {
return Dungeon;
} else {
/* alert("We acknowlege no path was available"); */
var foo = "Before, the pathstack is " + pathstack;
/* alert(foo); */
setup.al(foo);
silly = pathstack.pop();
/* alert("We have popped the pathstack"); */
var foo = "After,the pathstack is " + pathstack;
/* alert(foo); */
/* setup.al(foo); */
endofstack = pathstack.length -1;
SnakeX = pathstack[endofstack][0];
SnakeY = pathstack[endofstack][1];
};
} else {
if (whereto == 0) {
/* alert("Snake went north"); */
/* setup.al("Snake went north"); */
modX = 0;
modY = -1;
wherefrom = 2;
} else if (whereto == 1) {
/* alert("Snake went east"); */
/* setup.al("Snake went east"); */
modX = 1;
modY = 0;
wherefrom = 3;
} else if (whereto == 2) {
/* alert("Snake went south"); */
/* setup.al("Snake went south"); */
modX = 0;
modY = 1;
wherefrom = 0;
} else if (whereto == 3) {
/* alert("Snake went west"); */
/* setup.al("Snake went west"); */
modX = -1;
modY = 0;
wherefrom = 1;
};
Dungeon[SnakeX][SnakeY][whereto] = 1;
plen = pathstack.length;
pathstack[plen] = [99, 99];
SnakeX = SnakeX + modX;
SnakeY = SnakeY + modY;
if (Visited[SnakeX][SnakeY] == true) {
alert("Snaked visited a place he's already been to");
};
Visited[SnakeX][SnakeY] = true;
VisitedCount = VisitedCount +1;
bar = "Snake now visiting: (" + SnakeX + ", " + SnakeY + ")";
/* setup.al(bar); */
var snakepos = "Snake now at X: " + SnakeX + ", Y: " + SnakeY;
pathstack[plen][0] = SnakeX;
pathstack[plen][1] = SnakeY;
if (SnakeX < 0) {
alert("SnakeX < 0");
} ;
if (SnakeY < 0) {
alert("SnakeY < 0");
} ;
Dungeon[SnakeX][SnakeY][wherefrom] = 1;
};
};
return Dungeon;
};
setup.DunGenDeadEnd = function(d, x, y, Visited) {
var n = [0, d[0]];
var e = [1, d[1]];
var s = [2, d[2]];
var w = [3, d[3]];
var pool = [n,e,s,w];
var silly;
var DunDims = 7;
var foo;
var i = 0;
if (y < 1) {
/* alert("Snake will crash if he goes north"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 0) {
silly = pool.splice(i, 1);
/* alert("And so north was removed"); */
};
};
};
if (x == DunDims -1) {
/* alert("Snake will crash if he goes east"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 1) {
silly = pool.splice(i, 1);
/* alert("And so east was removed"); */
};
};
};
if (y == DunDims -1) {
/* alert("Snake will crash if he goes south"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 2) {
silly = pool.splice(i, 1);
/* alert("And so south was removed"); */
};
};
};
if (x < 1) {
/* alert("Snake will crash if he goes west"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 3) {
silly = pool.splice(i, 1);
/* alert("And so west was removed"); */
};
};
};
if (y > 0) {
if (Visited[x][y -1] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 0) {
silly = pool.splice(i, 1);
/* alert("north was removed because it's been visited"); */
};
};
};
};
if (x < DunDims -1) {
if (Visited[x+1][y] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 1) {
silly = pool.splice(i, 1);
/* alert("east was removed because it's been visited"); */
};
};
};
};
if (y < DunDims -1) {
if (Visited[x][y +1] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 2) {
silly = pool.splice(i, 1);
/* alert("south was removed because it's been visited"); */
};
};
};
};
if (x > 0) {
if (Visited[x-1][y] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 3) {
silly = pool.splice(i, 1);
/* alert("west was removed because it's been visited"); */
};
};
};
};
foo = "pool size is: " + pool.length;
/* alert(foo); */
if (pool.length < 1) {
/* alert("No options in pool, so snake must backtrack"); */
setup.al("No options in pool, so snake must backtrack");
return -1;
};
var pickone = random(0, pool.length-1);
if (pool[pickone][0] == 0) {
foo = "Snake intends to go north";
} else if (pool[pickone][0] == 1) {
foo = "Snake intends to go east";
} else if (pool[pickone][0] == 2) {
foo = "Snake intends to go south";
} else if (pool[pickone][0] == 3) {
foo = "Snake intends to go west";
};
/* alert(foo); */
return pool[pickone][0];
};
setup.GetMonByDLEV = function(lev) {
var m = [];
var p = [];
if (lev < 1) {
m = ["bunny","cat","fox","wolf"];
p = [25,25,25,25];
} else if (lev == 1) {
m = ["human","goblin","slime"];
p = [20,50,30];
} else if (lev == 2) {
m = ["human","goblin","slime"];
p = [10,50,40];
} else if (lev == 3) {
m = ["human","goblin","slime","imp","demon"];
p = [10,30,40,10,5];
} else if (lev == 4) {
m = ["human","goblin","slime","imp","tentacle","demon"];
p = [10,10,50,20,5,5];
} else if (lev == 5) {
m = ["goblin","slime","imp","hound","tentacle","demon"];
p = [10,40,20,10,5,5];
} else if (lev == 6) {
m = ["slime","imp","hound","tentacle","demon"];
p = [40,20,20,10,10];
} else if (lev == 7) {
m = ["slime","hound","tentacle","demon"];
p = [10,50,10,10];
} else if (lev == 8) {
m = ["hound","drider","tentacle","demon"];
p = [40,40,10,10];
} else if (lev == 9) {
m = ["hound","drider","tentacle","demon"];
p = [30,40,15,15];
} else if (lev == 10) {
m = ["hound","drider","minotaur","tentacle","demon"];
p = [20,50,20,5,5];
} else if (lev == 11) {
m = ["drider","minotaur","tentacle","demon"];
p = [30,30,5,5];
} else if (lev == 12) {
m = ["drider","minotaur","tentacle","demon"];
p = [20,50,5,5];
} else if (lev == 13) {
m = ["minotaur","tentacle","demon"];
p = [30,5,5];
} else if (lev == 14) {
m = ["minotaur","tentacle","demon"];
p = [20,10,10];
} else if (lev == 15) {
m = ["imp","hound","tentacle","demon"];
p = [10,20,20,20];
} else if (lev == 16) {
m = ["imp","hound","tentacle","demon"];
p = [10,20,30,30];
} else if (lev == 17) {
m = ["imp","hound","demon"];
p = [10,20,40];
} else if (lev == 18) {
m = ["imp","hound","demon"];
p = [10,20,50];
} else if (lev == 19) {
m = ["hound","demon"];
p = [20,40];
} else if (lev == 20) {
m = ["demon"];
p = [30];
};
var total = 0
var i = 0;
for (i = 0; i < m.length; i++) {
total = total + m[i][1];
};
var which = setup.WeightedRandom(p);
return m[which];
};
setup.WeightedRandom = function(probarray) {
var i = 0;
var sum = 0;
var total = 0;
for (i in probarray) {
total = total + probarray[i];
};
var r = random(0, total);
for (i in probarray) {
sum += probarray[i];
if (r <= sum) return i;
};
}
setup.PlaceDunEvents = function(pz) {
var dx = 0;
var dy = 0;
var dundim = State.variables.WORLD.dundim;
var Dungeon = State.variables.Dungeon[pz];
var infloop = true;
var e = "";
/* Fixed floor events */
/* NOTE: Event 102 should only occur on floors 1-4, has hard-coded rand than assumes this */
if (pz == 1) {
var _e = "Event" + random(100,104);
} else if (pz == 2) {
var _e = "Event" + random(100,104);
} else if (pz == 3) {
var _e = "Event" + random(100,104);
} else if (pz == 4) {
/* blacksmith hammer */
e = "Event119";
var _e = "Event" + random(100,104);
} else if (pz == 5) {
/* Floor 5 event */
} else if (pz == 6) {
var _e = "Event" + random(100,104);
} else if (pz == 7) {
var _e = "Event" + random(100,104);
} else if (pz == 8) {
var _e = "Event" + random(100,104);
} else if (pz == 9) {
var _e = "Event" + random(100,104);
} else if (pz == 10) {
/* Floor 10 event */
var _e = "Event" + random(100,104);
} else if (pz == 11) {
var _e = "Event" + random(100,104);
} else if (pz == 12) {
var _e = "Event" + random(100,104);
} else if (pz == 13) {
var _e = "Event" + random(100,104);
} else if (pz == 14) {
var _e = "Event" + random(100,104);
} else if (pz == 15) {
/* Floor 15 event */
var _e = "Event" + random(100,104);
} else if (pz == 16) {
var _e = "Event" + random(100,104);
} else if (pz == 17) {
var _e = "Event" + random(100,104);
} else if (pz == 18) {
var _e = "Event" + random(100,104);
} else if (pz == 19) {
/* Floor 19 event */
var _e = "Event" + random(100,104);
} else if (pz == 20) {
/* Floor 20 event */
var _e = "Event" + random(100,104);
};
/* event */
infloop = true;
while (infloop == true) {
dx = random(0, dundim);
dy = random(0, dundim);
if (Dungeon[dx][dy][11] == 0) {
State.variables.Dungeon[pz][dx][dy][11] = _e;
State.variables.Dungeon[pz][dx][dy][12] = 0;
infloop = false;
};
};
/* monster */
infloop = true;
while (infloop == true) {
dx = random(0, dundim);
dy = random(0, dundim);
if (Dungeon[dx][dy][11] == 0); {
State.variables.Dungeon[pz][dx][dy][11] = "Monster";
State.variables.Dungeon[pz][dx][dy][12] = setup.GetMonByDLEV(pz);
infloop = false;
};
};
/* trap */
infloop = true;
while (infloop == true) {
dx = random(0, dundim);
dy = random(0, dundim);
if (Dungeon[dx][dy][11] == 0); {
State.variables.Dungeon[pz][dx][dy][11] = "Trap";
State.variables.Dungeon[pz][dx][dy][12] = 0;
infloop = false;
};
};
};
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree"]>>\
<<set _KeyChars to ["1","2","3"]>>\
<span @id="_SpanTexts[_who]">\
<<set _LinkText to _KeyChars[_who] + ") " + _LinkText>>\
<<capture _who>>\
<<link _LinkText _action>>
<<set $CC to _who>>
<</link>>
<</capture>>\
</span>\
<<widget "SetStandardMale">>\
<<set $Mon.penis to true>>\
<<set $Mon.pussy to false>>\
<<set $Mon.boobs to false>>\
<<set $Mon.heshe to "he">>\
<<set $Mon.himher to "him">>\
<<set $Mon.hisher to "his">>\
<</widget>>\
<<widget "SetStandardFemale">>\
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<</widget>>\
<<widget "SetStandardHermaphrodite">>\
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<</widget>>\
<<widget "GetMon">>\
<<silently>>\
<<set $Mon to {}>>
\
<<set _DunLev to $PC[$CC][$PCz]>>
<<if $PC[$CC][$PClocation] is "forest">>
<<set _DunLev to $PC[$CC][$PCfz]>>
<<elseif $PC[$CC][$PClocation] is "desert">>
<<set _DunLev to $PC[$CC][$PCdz]>>
<<else>>\
<<set _DunLev to $PC[$CC][$PCz]>>
<<endif>>\
\
<!-- sex selector -->
<<set $Mon.sex to "female">>
<<if $PC[$CC][$PCsex] is "female">>\
<<if random(1,10) < 8>>
<<set $Mon.sex to "male">>
<<endif>>\
<<endif>>
\
\
<!-- determine monster type -->\
<<set _whichmon to setup.GetMonByDLEV($PC[$CC][$PClocation], _DunLev)>>\
<<if $ForceMon[0] is "random">>
<<else>>
<<set _whichmon to $ForceMon[0]>>
<<endif>>
\
\
<!-- determine monster sex -->\
<<set _AllowLocalSexOverride to true>>\
<<if $ForceMon[1] is "transform male">>\
<<set $Mon.sex to "male">>\
<<set _AllowLocalSexOverride to false>>\
<<elseif $ForceMon[1] is "transform female">>\
<<set $Mon.sex to "female">>\
<<set _AllowLocalSexOverride to false>>\
<<elseif $ForceMon[1] is "transform herm">>\
<<set $Mon.sex to "herm">>\
<<set _AllowLocalSexOverride to false>>\
<<elseif $ForceMon[1] is "random">>
<<set $Mon.sex to setup.GetStandardSex()>>
<<else>>
<<set $Mon.sex to $ForceMon[1]>>
<<endif>>
<<if $ForceMon[2] > 0>>\
<<set _DunLev to $ForceMon[2]>>\
<<endif>>\
<!-- NOTE: some monsters ovveride specific parts and pronouns -->
<<if $Mon.sex is "male">>
<<SetStandardMale>>
<<elseif $Mon.sex is "female">>
<<SetStandardFemale>>
<<else>>\
<<SetStandardHermaphrodite>>
<<endif>>
<!-- end sex selector -->
\
\
\
<!-- override for testing -->
<<if (0 is 1)>>\
<<set _whichmon to "human">>\
<<set $Mon.sex to either("male","female")>>
<<endif>>\
\
<!-- Baseline values -->
<<set _WhichArea to $PC[$CC][$PClocation]>>\
<<if $ForceMon[0] is "Charyss">>\
<<set _WhichArea to "tower">>\
<<set _DunLev to 3>>\
<<endif>>\
<<if _WhichArea is "tower">>
<<set _BaseToHit to 75 + (_DunLev * 25)>>
<<set _BaseMaxDam to 8 + (_DunLev * 2)>>
<<set _BaseSpecialToHit to _DunLev * 2>>
<<set _BaseFlirtTH to 10 + _DunLev>>
<<set _BaseFlirtDam to 14 + _DunLev>>
<<set _BaseWillpower to 6 + (_DunLev * 5)>>
<<set _BaseArmor to 25 + (_DunLev * 25)>>
<<set _BaseHealth to 20 + (_DunLev * 50)>>
<<set $Mon.xp to _DunLev * 5>>
<<set _BaseGold to random((_DunLev * 5), (_DunLev * 25))>>
<<elseif _WhichArea is "desert">>
<<set _BaseToHit to 10 + (_DunLev * 40)>>
<<set _BaseMaxDam to 6 + (_DunLev * 3)>>
<<set _BaseSpecialToHit to _DunLev * 2>>
<<set _BaseFlirtTH to 8 + (_DunLev * 2)>>
<<set _BaseFlirtDam to 14 + _DunLev>>
<<set _BaseWillpower to 5 + (_DunLev * 3)>>
<<set _BaseArmor to 55 + (_DunLev * 35)>>
<<set _BaseHealth to 60 + (_DunLev * 60)>>
<<set $Mon.xp to _DunLev * 3>>
<<set _BaseGold to random((_DunLev * 3), (_DunLev * 15))>>
<<else>>\
<<set _BaseToHit to _DunLev * 10>>
<<set _BaseMaxDam to 4 + _DunLev>>
<<set _BaseSpecialToHit to _DunLev>>
<<set _BaseFlirtTH to _DunLev * 2>>
<<set _BaseFlirtDam to 10 + _DunLev>>
<<set _BaseWillpower to _DunLev +5>>
<<set _BaseArmor to 40 + (_DunLev * 10)>>
<<set _BaseHealth to 10 + (_DunLev * 10)>>
<<set $Mon.xp to _DunLev>>
<<set _BaseGold to random(_DunLev, (_DunLev * 7))>>
<!-- newbie proofing-->\
<<if _DunLev is 1>>\
<<set _BaseMaxDam to 4>>
<<set _BaseArmor to 30>>
<<set _BaseToHit to 0>>
<<endif>>\
<<endif>>\
<<set $ForceMon to ["random","random", 0]>>
<!-- BEGIN BOILERPLATE -->
<<set $Mon.level to _DunLev>>
<<set $Mon.boss to 0>>
<<set $Mon.unique to false>>\
<<set $Mon.HitBySpells to 0>>\
<<set $Mon.HitByFlirt to 0>>\
<!-- set $Mon.HitByWeapon to 0 -->\
<!-- set $Mon.HitByBody to 0 -->\
<<set $Mon.CombatRound to 0>>\
<<set $Mon.TakesGold to true>>\
<<set $Mon.SpecialPregnancy to false>>\
<<set $Mon.pterm to 30>>\
<<set $Mon.fertility to 30>>\
<<set $Mon.ImageVer to 0>>\
<!-- clear debuffs -->
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.bleeding to 0>>
<<set $Mon.stunned to 0>>
<<set $Mon.Powerup to 0>>
<<set $Mon.AI to 0>>
<<set $Mon.held to 0>>
<!--reset arrays -->
<<set $Mon.loot to [0,0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.anatomy to []>>
<<set $Mon.resists to []>>
<!-- only a few monsters have these different from baseline -->
<<set $Mon.arpen to 0>>
<<set $Mon.flurryQTY to 0>>
<<set $Mon.regen to 0>>
<!-- some monsters might adjust these from baseline -->
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.hpcur to _BaseHealth>>
<<set $Mon.hpmax to _BaseHealth>>
<<set $Mon.armor to _BaseArmor>>
<<set $Mon.SymbolEffect to "">>
<<set $Mon.magres to 0>>
<<set $Mon.fireheal to false>>
<<set $Mon.poisonheal to false>>
<!-- END BOILERPLATE -->
\
<<if _whichmon is "goblin">>\
<<set $Mon.name to "goblin">>
<<set $Mon.morph to "goblin">>
<<set $Mon.pterm to 20>>\
<<set $Mon.ImageVer to 1>>\
<<if $Mon.sex is "male">>
<<AssignHumanoidAnatomyToMon "goblin" "male" "notail">>\
<<SetStandardMale>>\
<<set $Mon.pic to either("MONgoblinM1.jpg","MONgoblinM2.jpg")>>
<<set $Mon.virgin to "a male goblin">>
<<set $Mon.desc to "A fairly typical male goblin. Short, horny, angry, and ready to rape and beat anyone into submission. Not neccesarily in that order.">>
<<set $Mon.MeatSemenMilk to [107,207,-1]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "takes a swing at you but misses", "hits you, but you shrug off the attack"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "punches you", "swings at you but misses", "strikes you, but the blow glances off you"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "grins and licks his lips at you eagerly", "leers at you", "grins at you, but you're not impressed"]>>\
<<elseif $Mon.sex is "female">>
<<AssignHumanoidAnatomyToMon "goblin" "female" "notail">>\
<<SetStandardFemale>>
<<set $Mon.virgin to "a female goblin">>
<<set $Mon.MeatSemenMilk to [107,-1,307]>>
<<set _mrand to random(1,4)>>\
<<if _mrand is 1>>\
<<set $Mon.pic to "MONgoblinF1.jpg">>
<<set $Mon.desc to "This goblin girl seems eager for a good hate-fucking.">>
<<set $Mon.att[0] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "sticks a finger in her pussy then licks it", "tries to call attention to her pussy but fails", "fondles herself to try to distract you, but you ignore it"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "pulls a breast to her lips and licks it", "reaches for her chest but slips", "fondles herself to try to distract you, but you ignore it"]>>\
<<elseif _mrand is 2>>\
<<set $Mon.pic to "MONgoblinF2.jpg">>
<<set $Mon.desc to "With smaller breasts and more calm than most, this goblin girl seems to be trying to win you over with her charm.">>
<<set $Mon.att[0] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "sticks a finger in her pussy then licks it", "tries to call attention to her pussy but fails", "fondles herself to try to distract you, but you ignore it"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "pulls a breast to her lips and licks its", "reaches for her chest but slips", "fondles herself to try to distract you, but you ignore it"]>>\
<<elseif _mrand is 3>>\
<<set $Mon.pic to "MONgoblinF3.jpg">>
<<set $Mon.desc to "Goblin girls are usually more interested in sex than fighting. This one looks like she's into both.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slashes you with her fingernails", "takes a swipe at you but misses", "stabs you with a fingernail, but it fails to penetrate"]>>\
<<else>>
<<set $Mon.pic to "MONgoblinF4.jpg">>
<<set $Mon.desc to "A sexy goblin girl with huge tits only barely contained by her black leather outfit.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "whacks you with one of her boobs", "swings her boobs at you but fails to connect", "whacks you with her boobs but it doesn't hurt much"]>>\
<<endif>>
<<else>>
<<set $Mon.pic to either("MONgoblinH1.jpg","MONgoblinH2.jpg")>>
<<SetStandardHermaphrodite>>
<<AssignHumanoidAnatomyToMon "goblin" "herm" "notail">>\
<<set $Mon.virgin to "a goblin hermaphrodite">>
<<set $Mon.desc to "A goblin dickgirl with all the parts needed for whatever sort of fun strikes her fancy.">>
<<set $Mon.MeatSemenMilk to [107,207,307]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "takes a swipe at you but misses", "hits you, but you shrug off the attack"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "stokes her cock and invites you to take over", "strokes himself, but fails to distract you", "strokes herself, but you ignore it"]>>\
<<endif>>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 25>>
<<set $Mon.gold to _BaseGold +5>>
<<if _DunLev > 4>>
<<set $Mon.att[2] to ["flirt", 2, _BaseFlirtDam, _BaseFlirtTH, "throws a vial full of sweet-smelling pink liquid on you", "throws a vial of pink liquid at you, but you dodge", "throws pink liquid on you, but you quickly brush it off"]>>\
<<endif>>
<<elseif _whichmon is "slime">>\
<<set $Mon.ImageVer to 1>>\
<<set $Mon.name to "slime">>
<<set $Mon.morph to "slime">>
<<set $Mon.SpecialPregnancy to true>>\
<<set $Mon.pterm to 7>>\
<<set $Mon.resists[0] to ["blunt",50]>>\
<<set $Mon.MeatSemenMilk to [400,400,400]>>
\
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "extends a tendril in your direction, but misses", "hits you with a tendril, but it squishes on impact"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "shifts its body around to be more to your liking", "tries to shift its body around", "shifts its body around, but the result is not an improvement"]>>\
<<set $Mon.att[2] to ["POISON", 1, 1, _BaseSpecialToHit, "stabs you with a tendril that spurts some fluid into you", "pokes at you ineffectually with a tendril", "poke you with a tendril, but you grab it before it can do anything"]>>\
\
<<if $Mon.sex is "male">>
<<if random(1,2) is 1>>\
<<set $Mon.pic to "MONslimeM1.jpg">>
<<set $Mon.virgin to "a slime man">>
<<AssignHumanoidAnatomyToMon "slime" "male" "notail">>\
<<set $Mon.desc to "A large, powerfully built man of slime. At least, he looks powerful. You're not entirely sure just how strong something made of slime can be, but he certainly looks the part. His cock is visibly dripping some sort of fluid, and you can't help but wonder whether that's actually semen, or whether it's simply his insides leaking out. Goo physiology is a little odd.">>
<<else>>\
<<set $Mon.pic to "MONslimeM2.jpg">>
<<set $Mon.virgin to "a slime monster">>
<<AssignHumanoidAnatomyToMon "slime" "male" "tail">>\
<<set $Mon.desc to "This bulbous slime monster oozes with malformed limbs that are hard to distinguish. It's cock is a good 8 inches wide and it oozes and drips into the puddle beneath its massive bulk.">>
<<endif>>\
<<elseif $Mon.sex is "female">>
<<set _mrand to random(1,4)>>\
<<if _mrand is 1>>\
<<set $Mon.pic to "MONslimeF1.jpg">>
<<set $Mon.virgin to "a slime girl">>
<<AssignHumanoidAnatomyToMon "slime" "female" "notail">>\
<<set $Mon.desc to "A poorly-formed slime with a face that's barely human and legs that merge into the puddle below it. The shapely breasts clearly indicate that it's female.">>
<<elseif _mrand is 2>>\
<<set $Mon.pic to "MONslimeF2.jpg">>
<<set $Mon.virgin to "a slime girl">>
<<AssignHumanoidAnatomyToMon "slime" "female" "notail">>\
<<set $Mon.desc to "A huge purple slime blocks the corridor. Sprouting up from its mass is a vaguelly human shape.">>
<<elseif _mrand is 3>>\
<<set $Mon.pic to "MONslimeF3.jpg">>
<<set $Mon.virgin to "a slime girl">>
<<AssignHumanoidAnatomyToMon "slime" "female" "tail">>\
<<set $Mon.desc to "An especially human-looking slime, clearly female, and sporting a thick tail behind it.">>
<<else>>\
<<set $Mon.pic to "MONslimeF4.jpg">>
<<set $Mon.virgin to "a slime girl">>
<<AssignHumanoidAnatomyToMon "slime" "female" "tail">>\
<<set $Mon.desc to "Rather than completely forming a humanoid body, this slime has created a feminine body almost as if an extensino of itself, while most of its bulk lies in the massive slime tail behind it.">>
<<endif>>\
<<else>>
<<set _mrand to random(1,3)>>\
<<if _mrand is 1>>\
<<set $Mon.pic to "MONslimeH1.jpg">>
<<set $Mon.virgin to "a slime">>
<<AssignHumanoidAnatomyToMon "slime" "herm" "notail">>\
<<set $Mon.desc to "A well-formed slime with legs that spill into a pool underneath. It is mostly feminine, except for the pointy dick writhing between its legs">>
<<elseif _mrand is 2>>\
<<set $Mon.pic to "MONslimeH2.jpg">>
<<set $Mon.virgin to "a slime">>
<<AssignHumanoidAnatomyToMon "slime" "herm" "tail">>\
<<set $Mon.desc to "A purple tail with clearly defined strands of hair and an almost human face. It's feet have been stylized with heels, and a huge tail writhes menacingly behind it.">>
\
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "whacks you with its tail", "swings its tail at you, but misses", "hits you with it tail, but it squishes on impact"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "jiggles its boobs at you", "jiggles its boobs", "jiggles its boobs, but you're not impressed"]>>\
<<else>>\
<<set $Mon.pic to "MONslimeH3.jpg">>
<<set $Mon.virgin to "a slime">>
<<AssignHumanoidAnatomyToMon "slime" "herm" "notail">>\
<<set $Mon.desc to "While fairly human-looking, this slime is crawling around on its belly with its legs splashing around behind it. It has an impressive pair of boobs, and a cock nearly six inches across.">>
<<endif>>\
<<endif>>
<<set $Mon.Willpower to _BaseWillpower +2>>
<<set $Mon.poisonheal to true>>
<<set $Mon.chase to 40>>
<!-- override values -->
<<set $Mon.arpen to 1>>
<<set $Mon.gold to 0>>
<<elseif _whichmon is "bunny-morph">>\
<<set $Mon.name to "bunny-morph">>
<<set $Mon.morph to "bunny-morph">>
<<set $Mon.pterm to 20>>\
<<if $Mon.sex is "male">>
<<AssignHumanoidAnatomyToMon "bunny" "male" "tail">>\
<<SetStandardMale>>
<<set $Mon.virgin to "a bunny boy">>
<<set $Mon.pic to "bunnyM.png">>
<<set $Mon.desc to "Hopping around on his hands and knees, you suspect this bunny boy's chosen form of locomotion doubles both for sexual purposes, as well as simply to help him stay in character.">>
<<set $Mon.MeatSemenMilk to [100,200,-1]>>
<<elseif $Mon.sex is "female">>
<<AssignHumanoidAnatomyToMon "bunny" "female" "tail">>\
<<SetStandardFemale>>
<<set $Mon.pic to "bunnyF.png">>
<<set $Mon.virgin to "a bunny girl">>
<<set $Mon.desc to "With tits nearly as big as her head, this bunny girl giggles happiliy as she comes at you with a look in her eyes that you're not entirely sure is lethal or lustful intent.">>
<<set $Mon.MeatSemenMilk to [100,-1,300]>>
<<else>>
<<AssignHumanoidAnatomyToMon "bunny" "herm" "tail">>\
<<SetStandardHermaphrodite>>
<<set $Mon.pic to "bunnyH.png">>
<<set $Mon.virgin to "a well-hung bunny dickgirl">>
<<set $Mon.fertility to 100>>\
<<set $Mon.desc to "With a cock even more masive than her humongous breasts, her eyes glisten as she eyes up and down your torso, eventually settling on a spot between your legs she finds especially interesting. 'Bend over for me, dear,' she whispers as she strokes her cock.">>
<<set $Mon.MeatSemenMilk to [100,200,300]>>
<<endif>>
<<set $Mon.Willpower to _BaseWillpower -2>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "cat-morph">>\
<<set $Mon.name to "cat-morph">>
<<set $Mon.morph to "cat-morph">>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<if $Mon.sex is "male">>
<<AssignHumanoidAnatomyToMon "cat" "male" "tail">>\
<<set $Mon.pic to "catM.png">>
<<set $Mon.virgin to "a manly cat man">>
<<set $Mon.desc to "A powerfully built muscle-man with cat ears and tail. The way he looks at you makes it clear that he's used to getting his way, and if you're not careful, his way is going to be with you. Though whether sexually, or simply dragging you to the gym with him is unclear.">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "points suggestively at his barbed cock", "points at his cock, but the barbs are far from a turn-on", "points at his cock, but the barbs are far from a turn-on"]>>\
<<set $Mon.MeatSemenMilk to [101,201,-1]>>
<<elseif $Mon.sex is "female">>
<<AssignHumanoidAnatomyToMon "cat" "female" "tail">>\
<<set $Mon.pic to "catF.png">>
<<set $Mon.virgin to "a buxom catgirl">>
<<set $Mon.desc to "A buxom catgirl wih huge breasts and child-bearing hips looks at you with an air of casual indifference that belies the insistence of her attacks. Still, she would almost be cute if she weren't trying to murder you. Or is she? From one moment to the next, it's hard to tell.">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "demurely insists that it's not like she likes you or anything", "insists that she doesn't like you, but her expression keeps it from sounding ironic", "insists that she doesn't like you, but you shrug it off"]>>\
<<set $Mon.MeatSemenMilk to [101,-1,301]>>
<<else>>
<<AssignHumanoidAnatomyToMon "cat" "herm" "tail">>\
<<set $Mon.pic to "catH.png">>
<<set $Mon.virgin to "a futa catgirl">>
<<set $Mon.desc to "A catgirl futa with plump breasts and an erect cock already dribbling with pre-cum. Seeing the light-teal of her pubic hair and mane, you can't help but notice that the carpet does match the drapes.">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "squeezes her boobs together and invites you to do the same", "squeezes a boob with one hand and strokes her cock with the other", "gropes herself, but is too distracted by her own body for it to really be called flirtatious"]>>\
<<set $Mon.MeatSemenMilk to [101,201,301]>>
<<endif>>
<<elseif _whichmon is "fox-morph">>\
<<set $Mon.name to "fox-morph">>
<<set $Mon.morph to "fox-morph">>
<<if $Mon.sex is "male">>
<<AssignHumanoidAnatomyToMon "fox" "male" "tail">>\
<<set $Mon.penis to true>>
<<set $Mon.boobs to false>>
<<set $Mon.pussy to false>>
<<set $Mon.pic to "foxM.png">>
<<set $Mon.virgin to "a fox-man">>
<<set $Mon.desc to "An anthropomorphic fox-man with a green dick. A dick that he's already stroking as he looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "strokes himself and invites you to take over", "strokes himself, but you ignore it", "strokes himself, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,-1]>>
<<elseif $Mon.sex is "female">>
<<AssignHumanoidAnatomyToMon "fox" "female" "tail">>\
<<set $Mon.penis to false>>
<<set $Mon.boobs to true>>
<<set $Mon.pussy to true>>
<<set $Mon.pic to "foxF.jpg">>
<<set $Mon.virgin to "a fox-girl">>
<<set $Mon.desc to "An attractive fox-girl covered in a thin layer of brown fur. Her tail twitches occasionally as she looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slashes at you with her claws", "slashes at you, but misses", "slashes you with her claws, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,-1,302]>>
<<else>>
<<AssignHumanoidAnatomyToMon "fox" "male" "tail">>\
<<set $Mon.penis to true>>
<<set $Mon.boobs to false>>
<<set $Mon.pussy to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "foxH.png">>
<<set $Mon.virgin to "an effeminate fox-boy">>
<<set $Mon.desc to "An effeminate fox-boy with a suspicious bulge in his panties. ">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "rubs his bulge and winks suggestively", "rubs his bulge and winks at you, but you ignore it", "rubs his bulge and winks at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,302]>>
<<endif>>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold>>
<<elseif _whichmon is "wolf-morph">>\
<<AssignHumanoidAnatomyToMon "wolf" "male" "tail">>\
<<set $Mon.name to "wolf-morph">>
<<set $Mon.morph to "wolf-morph">>
<<if _AllowLocalSexOverride is true>>
<<set $Mon.sex to "male">>
<<endif>>\
<<if $Mon.sex is "male">>\
<<AssignHumanoidAnatomyToMon "wolf" "male" "tail">>\
<<SetStandardMale>>
<<elseif $Mon.sex is "female">>
<<AssignHumanoidAnatomyToMon "wolf" "female" "tail">>\
<<SetStandardFemale>>
<<else>>
<<AssignHumanoidAnatomyToMon "wolf" "herm" "tail">>\
<<SetStandardHermaphrodite>>
<<endif>>\
<<set $Mon.pic to "wolfM.png">>
<<set $Mon.virgin to "a horny wolf-man">>
<<set $Mon.MeatSemenMilk to [103,203,-1]>>
<<set $Mon.desc to "A burly wolf-man with a thick, meaty cock he'd like to share with you.">>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "snaps at you with his jaws, but misses", "bites you, but fails to pierce your flesh"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "points suggestively at his erection", "pumps his cock a few times, but you ignore it", "pumps his cock a few times, but you ignore it"]>>\
<<elseif _whichmon is "wolf">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "wolf" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "wolf" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "wolf" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "wolf" }>>\
<<set $Mon.anatomy[4] to { type: $BPlegs, morph: "wolf" }>>\
<<set $Mon.anatomy[5] to { type: $BPlegs, morph: "wolf" }>>\
<<set $Mon.anatomy[6] to { type: $BPfeet, morph: "wolf" }>>\
<<set $Mon.anatomy[7] to { type: $BPfeet, morph: "wolf" }>>\
<<set $Mon.anatomy[8] to { type: $BPwaist, morph: "wolf" }>>\
<<set $Mon.anatomy[9] to { type: $BPtail, morph: "wolf" }>>\
<<set $Mon.TakesGold to false>>\
<<if _AllowLocalSexOverride is true>>
<<set $Mon.sex to "male">>
<<endif>>\
<<if $Mon.sex is "male">>\
<<set $Mon.anatomy[10] to { type: $BPpenis, morph: "wolf" }>>\
<<SetStandardMale>>
<<elseif $Mon.sex is "female">>
<<set $Mon.anatomy[10] to { type: $BPboobs, morph: "wolf" }>>\
<<set $Mon.anatomy[11] to { type: $BPpussy, morph: "wolf" }>>\
<<SetStandardFemale>>
<<else>>
<<set $Mon.anatomy[10] to { type: $BPpenis, morph: "wolf" }>>\
<<set $Mon.anatomy[11] to { type: $BPboobs, morph: "wolf" }>>\
<<set $Mon.anatomy[12] to { type: $BPpussy, morph: "wolf" }>>\
<<SetStandardHermaphrodite>>
<<endif>>\
<<set $Mon.name to "wolf">>
<<set $Mon.morph to "wolf">>
<<SetStandardMale>>
<<set $Mon.pic to "wolfquadM.jpg">>
<<set $Mon.virgin to either("a horny wolf","a wolf with a big dick")>>
<<set $Mon.MeatSemenMilk to [117,217,-1]>>
<<set $Mon.desc to "While presenting the form of an animal, this wolf eyes you with both lust and intelligence that lead you to wonder if it was once human.">>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 80>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam +1, _BaseToHit, "bites you", "snaps at you with his jaws, but misses", "bites you, but fails to pierce your flesh"]>>\
<<elseif _whichmon is "horse">>\
<<set $Mon.name to "horse">>
<<set $Mon.morph to "horse">>
<<set $Mon.pterm to 45>>\
<<set $Mon.AI to "horse">>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "horse" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "horse" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "horse" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "horse" }>>\
<<set $Mon.anatomy[4] to { type: $BPlegs, morph: "horse" }>>\
<<set $Mon.anatomy[5] to { type: $BPlegs, morph: "horse" }>>\
<<set $Mon.anatomy[6] to { type: $BPfeet, morph: "horse" }>>\
<<set $Mon.anatomy[7] to { type: $BPfeet, morph: "horse" }>>\
<<set $Mon.anatomy[8] to { type: $BPwaist, morph: "horse" }>>\
<<set $Mon.anatomy[9] to { type: $BPtail, morph: "horse" }>>\
<<set $Mon.TakesGold to false>>\
<<if $Mon.sex is "male">>
<<set $Mon.anatomy[10] to { type: $BPpenis, morph: "horse" }>>\
<<set $Mon.penis to true>>
<<set $Mon.boobs to false>>
<<set $Mon.pussy to false>>
<<set $Mon.pic to "horseM.png">>
<<set $Mon.virgin to either("a strapping","a horny") + either(" stallion"," horse")>>\
<<set $Mon.desc to "With a cock easily two feet long, erect, and dripping with fluids, you can only imagine what this horse intends to do to you. Except that you don't have to imagine, because his lust is abundantly clear in the look he's giving you.">>\
<<set $Mon.att[0] to ["physical", _DunLev, _BaseMaxDam, _BaseToHit +10, "lashes out with a speedy kick", "kicks, but misses you", "kicks you but his hooves slide easily off of you"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "bites at you", "bites you, but it barely pierces skin"]>>\
<<set $Mon.MeatSemenMilk to [104,204,-1]>>
<<else>>\
<<set $Mon.anatomy[10] to { type: $BPpussy, morph: "horse" }>>\
<<set $Mon.anatomy[11] to { type: $BPboobs, morph: "horse" }>>\
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.penis to false>>
<<set $Mon.boobs to true>>
<<set $Mon.pussy to true>>
<<set $Mon.pic to "horseF.png">>
<<set $Mon.virgin to either("a lovely","a graceful","a gentle") + " mare">>
<<set $Mon.desc to "While it may be tempting to think that this horse has her privates on display for your amusement, it could be a coincidence: You can't help but notice her powerful rear legs primed to strike.">>
<<set $Mon.att[0] to ["physical", _DunLev, _BaseMaxDam, _BaseToHit +10, "lashes out with a speedy kick", "kicks, but misses you", "kicks you but her hooves slide easily off of you"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "bites at you", "bites you, but it barely pierces skin"]>>\
<<set $Mon.MeatSemenMilk to [104,-1,304]>>
<<endif>>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 100>>
<<set $Mon.gold to 0>>
<<elseif _whichmon is "cow">>\
<<set $Mon.name to "cow">>
<<set $Mon.morph to "cow">>
<<set $Mon.pterm to 45>>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "cow" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "cow" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "cow" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "cow" }>>\
<<set $Mon.anatomy[4] to { type: $BPlegs, morph: "cow" }>>\
<<set $Mon.anatomy[5] to { type: $BPlegs, morph: "cow" }>>\
<<set $Mon.anatomy[6] to { type: $BPfeet, morph: "cow" }>>\
<<set $Mon.anatomy[7] to { type: $BPfeet, morph: "cow" }>>\
<<set $Mon.anatomy[8] to { type: $BPwaist, morph: "cow" }>>\
<<set $Mon.anatomy[9] to { type: $BPtail, morph: "cow" }>>\
<<set $Mon.TakesGold to false>>\
<<if $Mon.sex is "male">>
<<set $Mon.anatomy[10] to { type: $BPhorns, morph: "cow" }>>\
<<set $Mon.anatomy[11] to { type: $BPpenis, morph: "cow" }>>\
<<set $Mon.penis to true>>
<<set $Mon.boobs to false>>
<<set $Mon.pussy to false>>
<<set $Mon.pic to "cowM.png">>
<<set $Mon.virgin to either("a horny") + either(" steer","bull")>>\
<<set $Mon.desc to "Describe bull">>\
<<set $Mon.att[0] to ["physical", _DunLev, _BaseMaxDam, _BaseToHit -10, "clumsily butts you with his horns", "harmlessly waves his antlers at you", "barely scrapes you with his antlers"]>>\
<<set $Mon.MeatSemenMilk to [112,212,-1]>>
<<else>>\
<<set $Mon.anatomy[10] to { type: $BPpussy, morph: "cow" }>>\
<<set $Mon.anatomy[11] to { type: $BPboobs, morph: "cow" }>>\
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.penis to false>>
<<set $Mon.boobs to true>>
<<set $Mon.pussy to true>>
<<set $Mon.pic to "cowF.png">>
<<set $Mon.virgin to either("a cuddly","an affectionate","a gentle") + " cow">>
<<set $Mon.desc to "Describe cow">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH -2, "affectionately moos at you", "moos at you, but you ignore it", "moos at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [112,-1,312]>>
<<endif>>
<<set $Mon.Willpower to _BaseWillpower -2>>
<<set $Mon.chase to 0>>
<<set $Mon.gold to 0>>
<<elseif _whichmon is "snake">>\
<<set $Mon.name to "snake">>
<<set $Mon.morph to "snake">>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "snake" }>>\
<<set $Mon.anatomy[3] to { type: $BPtail, morph: "snake" }>>\
<<set $Mon.TakesGold to false>>\
<<set $Mon.hpcur to _DunLev>>
<<set $Mon.hpmax to _DunLev>>
<<set $Mon.armor to _BaseArmor + 50>>
<<set $Mon.resists[0] to ["pierce",50]>>\
<<if $Mon.sex is "male">>
<<set $Mon.anatomy[4] to { type: $BPpenis, morph: "snake" }>>\
<<set $Mon.penis to true>>\
<<set $Mon.boobs to false>>\
<<set $Mon.pussy to false>>\
<<set $Mon.pic to "snakeALL.jpg">>\
<<set $Mon.virgin to "a snake">>\
<<set $Mon.desc to "A small green snake hisses at you.">>\
<<set $Mon.att[0] to ["POISON", 1, 1, _BaseSpecialToHit, "bites you", "bites at you but misses", "bites you but fails to penetrate skin"]>>\
<<set $Mon.MeatSemenMilk to [116,216,-1]>>
<<else>>\
<<set $Mon.anatomy[4] to { type: $BPpussy, morph: "snake" }>>\
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.penis to false>>
<<set $Mon.boobs to false>>
<<set $Mon.pussy to true>>
<<set $Mon.pic to "snakeALL.jpg">>
<<set $Mon.virgin to "a snake">>
<<set $Mon.desc to "A small green snake hisses at you.">>
<<set $Mon.att[0] to ["POISON", 1, 1, _BaseSpecialToHit, "bites you", "bites at you but misses", "bites you but fails to penetrate skin"]>>\
<<set $Mon.MeatSemenMilk to [116,-1,-1]>>
<<endif>>
<<set $Mon.Willpower to _BaseWillpower +10>>
<<set $Mon.chase to 0>>
<<set $Mon.gold to 0>>
<<elseif _whichmon is "ant">>\
<<set $Mon.ImageVer to 1>>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "insect" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "insect" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "insect" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "insect" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "insect" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "insect" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "insect" }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: "insect" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "insect" }>>\
<<set $Mon.anatomy[9] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[11] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[12] to { type: $BPwaist, morph: "insect" }>>\
<<set $Mon.anatomy[13] to { type: $BPboobs, morph: "insect" }>>\
<<set $Mon.anatomy[14] to { type: $BPpussy, morph: "insect" }>>\
<<set $Mon.name to "ant">>
<<set $Mon.morph to "ant">>
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set _mrand to random(1,5)>>\
<<if _mrand is 1>>\
<<set $Mon.pic to "MONantF1.jpg">>
<<set $Mon.virgin to "a worker ant">>
<<set $Mon.desc to "A not so obviously female worker ant. Ants of this sort are mostly employed digging tunnels through the desert sands, and are rarely seen above ground.">>
<<set $Mon.armor to _BaseArmor + 20>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam -2, _BaseToHit + 50, "bites you", "waves her pincers at you ineffectively", "bites you, but fails to pierce your flesh"]>>\
<<set $Mon.att[1] to ["physical", 3, _BaseMaxDam +3, _BaseToHit, "stabs you with a pointy leg", "kicks at you, but misses", "stabs you with a leg but fails to penetrate"]>>\
<<else>>\
<<set $Mon.pic to "MONantF2.jpg">>
<<set $Mon.virgin to "a gatherer ant">>
<<set $Mon.desc to "An obviously female gatherer ant. Its largely human form helps it to gather fluids from the desert.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "waves her pincers at you ineffectively", "bites you, but fails to pierce your flesh"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "bites her lip and asks to drink your fluids", "mumbles incoherently", "asks to drink your fliuds. You tell her no."]>>\
<<endif>>\
<<set $Mon.MeatSemenMilk to [118,-1,-1]>>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 20>>
<<set $Mon.gold to 0>>
<<elseif _whichmon is "scorpion">>\
<<set $Mon.anatomy[0] to { type: $BPchest, morph: "insect" }>>\
<<set $Mon.anatomy[1] to { type: $BPback, morph: "insect" }>>\
<<set $Mon.anatomy[2] to { type: $BPpincer, morph: "insect" }>>\
<<set $Mon.anatomy[3] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[4] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[5] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[6] to { type: $BPlegs, morph: "insect" }>>\
<<set $Mon.anatomy[7] to { type: $BPwaist, morph: "insect" }>>\
<<set $Mon.anatomy[8] to { type: $BPtail, morph: "insect" }>>\
<<set $Mon.anatomy[9] to { type: $BPstinger, morph: "insect" }>>\
<<set $Mon.TakesGold to false>>\
<<set $Mon.AI to "scorpion">>
<<set $Mon.name to "scorpion">>
<<set $Mon.morph to "scorpion">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "scorpionM.png">>
<<set $Mon.MeatSemenMilk to [119,219,-1]>>
<<set $Mon.anatomy[10] to { type: $BPpenis, morph: "insect" }>>\
<<else>>\
<<set $Mon.pic to "scorpionM.png">>
<<set $Mon.MeatSemenMilk to [119,-1,-1]>>
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.anatomy[10] to { type: $BPpussy, morph: "insect" }>>\
<<endif>>\
<<SetStandardFemale>>
<<set $Mon.virgin to "a giant scorpion">>
<<set $Mon.desc to "A large, venomous arachnid with a hard, segmented carapace, eight legs, and a pair of pincers.">>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 20>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "waves her pincers at you ineffectively", "bites you, but fails to pierce your flesh"]>>\
<<elseif _whichmon is "harpy">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "harpy" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "harpy" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "harpy" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "harpy" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "harpy" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "harpy" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "harpy" }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: "harpy" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "harpy" }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: "harpy" }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: "harpy" }>>\
<<set $Mon.anatomy[11] to { type: $BPfeet, morph: "harpy" }>>\
<<set $Mon.anatomy[13] to { type: $BPtail, morph: "harpy" }>>\
<<set $Mon.anatomy[13] to { type: $BPwings, morph: "harpy" }>>\
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "harpy" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "harpy" }>>\
<<set $Mon.TakesGold to false>>\
<<set $Mon.name to "harpy">>
<<set $Mon.morph to "harpy">>
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.pic to "harpyF.jpg">>
<<set $Mon.virgin to "a harpy">>
<<set $Mon.MeatSemenMilk to [120,-1,320]>>
<<set $Mon.desc to "Mostly human from the waist and mostly eagle from the waist down, this harpy glares at you with cruel and malicious intent.">>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 20>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "claws you", "slashes at you with her claws, but misses", "slashes you, but her claws fail to penetrate skin"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "jiggles her boobs at you", "jiggles her boobs at you, but you ignore it", "jiggles her boobs at you, but you ignore it"]>>\
<<elseif _whichmon is "human">>\
<<set $Mon.name to "adventurer">>
<<set $Mon.morph to "human">>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.ImageVer to 1>>\
<<if $Mon.sex is "male">>
<<SetStandardMale>>
<<AssignHumanoidAnatomyToMon "human" "male" "notail">>\
<<set $Mon.pic to either("MONhumanM1.jpg","MONhumanM2.jpg","MONhumanM3.jpg")>>
<<set $Mon.virgin to "a human swordsman">>
<<set $Mon.desc to "An adventurer like yourself, climbing the tower in search of treasure and glory. This one appears to be a swordsman.">>
<<set $Mon.MeatSemenMilk to [106,206,-1]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "cuts you with his sword", "swings his sword at you, but misses", "barely nicks you with his sword"]>>\
<<elseif $Mon.sex is "female">>
<<SetStandardFemale>>
<<AssignHumanoidAnatomyToMon "human" "female" "notail">>
<<set $Mon.pic to "MONhumanF" + random(1,7) + ".jpg">>
<<set $Mon.magres to 1>>
<<set $Mon.virgin to "a human sorceress">>
<<set $Mon.desc to "An adventurer like yourself, climbing the tower in search of treasure and glory. This one appears to be a spellcaster.">>
<<set $Mon.MeatSemenMilk to [106,-1,306]>>
<<set $Mon.att[0] to ["magic", 1, _DunLev, _BaseToHit, "hurls a fireball at you", "hurls a fireball at you, but misses", "hurls a fireball at you, but it just grazes you"]>>\
<<set $Mon.att[1] to ["magic", 1, _DunLev, _BaseToHit, "hurls a bolt of lightning at you", "hurls lightning at you, but misses", "hurls lightning at you, but it just grazes you"]>>\
<<set $Mon.att[2] to ["magic", 1, _DunLev, _BaseToHit, "hurls a frost bolt at you", "hurls a frost bolt at you, but misses", "hurls a frost bolt at you, but it just grazes you"]>>\
<<set $Mon.att[3] to ["heal", 1, _DunLev, 100, "heals herself ", "Can't miss heals", "Can't absorb heals"]>>\
<<else>>
<<SetStandardHermaphrodite>>
<<AssignHumanoidAnatomyToMon "human" "herm" "notail">>\
<<set $Mon.virgin to either("a human dickgirl","a dickgirl adventurer")>>
<<set $Mon.pic to either("MONhumanH1.jpg","MONhumanH2.jpg")>>
<<set $Mon.desc to either("A beautiful human girl with a dick she'd like to share with you.","This adventurer wields powerful magic and a sword. Two swords, one of which happens to be made of meat.")>>
<<set $Mon.MeatSemenMilk to [106,206,306]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "cuts you with her sword", "swings her sword at you, but misses", "barely nicks you with her sword"]>>\
<<set $Mon.att[1] to ["magic", 1, _DunLev, _BaseToHit, "hurls a fireball at you", "hurls a fireball at you, but misses", "hurls a fireball at you, but it just grazes you"]>>\
<<endif>>
<<elseif _whichmon is "minotaur">>\
<<set $Mon.name to "minotaur">>
<<set $Mon.morph to "minotaur">>
<<set $Mon.pterm to 40>>\
<<set $Mon.resists[0] to ["cut",50]>>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "cow" }>>\
<<set $Mon.anatomy[1] to { type: $BPhorns, morph: "cow" }>>\
<<set $Mon.anatomy[2] to { type: $BPneck, morph: "human" }>>\
<<set $Mon.anatomy[3] to { type: $BPback, morph: "human" }>>\
<<set $Mon.anatomy[4] to { type: $BPchest, morph: "human" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[6] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[7] to { type: $BPhands, morph: "human" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[9] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[10] to { type: $BPwaist, morph: "cow" }>>\
<<set $Mon.anatomy[11] to { type: $BPtail, morph: "cow" }>>\
<<set $Mon.anatomy[12] to { type: $BPlegs, morph: "cow" }>>\
<<set $Mon.anatomy[13] to { type: $BPfeet, morph: "cow" }>>\
<<if $Mon.sex is "male">>
<<set $Mon.anatomy[14] to { type: $BPpenis, morph: "cow" }>>\
<<set $Mon.pic to either("MONminotaurM1.jpg", "MONminotaurM2.jpg")>>
<<set $Mon.virgin to "a minotaur">>
<<set $Mon.desc to "A mountain of muscle with a bull's head, tail and fur, this creature is technically mostly human. The nearly two foot long bull cock hanging between his legs notwithstanding.">>
<<set $Mon.MeatSemenMilk to [125,225,-1]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slams into you", "reaches for you, but misses", "grabs you, but you managee to break free"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "punches you", "swings at you, but misses", "punches you, but the hit grazes off"]>>\
<<if setup.getbpqty($CC, $BPpussy) > 0>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "strokes his cock and sprays you with pre-cum", "sprays a jet of semen at you, but misses", "sprays a jet of semen at you, but misses"]>>\
<<endif>>\
<<elseif $Mon.sex is "female">>
<<set $Mon.anatomy[14] to { type: $BPboobs, morph: "human" }>>\
<<set $Mon.anatomy[15] to { type: $BPpussy, morph: "cow" }>>\
<<set $Mon.MeatSemenMilk to [125,-1,325]>>
<<if random(1,2) is 1>>\
<<set $Mon.pic to either("MONminotaurF1.jpg", "MONminotaurF2.jpg")>>
<<set $Mon.virgin to "a female minotaur">>
<<set $Mon.desc to "A furry, half-human, half-cow, this minotaur's morphology is curiously mixed, with soft fur that extends well into her otherwise mostly-human parts.">>
<<else>>\
<<set $Mon.pic to "MONminotaurF3.jpg">>
<<set $Mon.virgin to "a cowgirl">>
<<set $Mon.desc to "A more human-like variety of minotaur, often referred to colloquially as a cowgirl.">>
<<endif>>\
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slams into you", "reaches for you, but misses", "grabs you, but you managee to break free"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "punches you", "swings at you, but misses", "punches you, but the hit grazes off"]>>\
<<if setup.getbpqty($CC, $BPpenis) > 0>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "squeezes a breast, spraying you with milk", "sprays breast milk at you but misses", "dribbles some milk on you to no effect"]>>\
<<endif>>\
<<else>>
<<set $Mon.anatomy[14] to { type: $BPpenis, morph: "cow" }>>\
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "human" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "cow" }>>\
<<set $Mon.MeatSemenMilk to [125,225,325]>>
<<set $Mon.virgin to "A huge herm minotaur">>
<<set _mrand to random(1,3)>>
<<if _mrand is 1>>\
<<set $Mon.pic to "MONminotaurH1.jpg">>
<<set $Mon.desc to "With legs spread wide open, this minotaur dickgirl tries but fails to give you bedroom eyes.">>
<<elseif _mrand is 2>>\
<<set $Mon.pic to "MONminotaurH2.jpg">>
<<set $Mon.desc to "With colossal breasts much larger than her head, it's a wonder this minotaur dickgirl can even stand without falling over. The tail probably helps.">>
<<else>>\
<<set $Mon.pic to "MONminotaurH3.jpg">>
<<set $Mon.desc to "The dick on the minotaur is easily two feet long, maybe more. the way she's leaning her chest back leads you to guess she's trying to lure you onto her cock.">>
<<endif>>\
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slams into you", "reaches for you, but misses", "grabs you, but you managee to break free"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "punches you", "swings at you, but misses", "punches you, but the hit grazes off"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "strokes her cock and sprays you with pre-cum", "sprays a jet of semen at you, but misses", "sprays a jet of semen at you, but misses"]>>\
<<set $Mon.att[3] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "squeezes a breast, spraying you with milk", "sprays breast milk at you but misses", "dribbles some milk on you to no effect"]>>\
<<endif>>
<<set $Mon.hpcur to $Mon.hpcur +10>>
<<set $Mon.hpmax to $Mon.hpcur +10>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold +25>>
<<elseif _whichmon is "spider">>\
<<set $Mon.anatomy[0] to { type: $BPback, morph: "spider" }>>\
<<set $Mon.anatomy[1] to { type: $BPchest, morph: "spider" }>>\
<<set $Mon.anatomy[2] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.anatomy[3] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.anatomy[4] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.anatomy[5] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.TakesGold to false>>\
<<set $Mon.name to "giant spider">>\
<<set $Mon.morph to "spider">>\
<<set $Mon.virgin to "a giant spider">>\
<<set $Mon.pterm to 14>>\
<<set $Mon.pic to "spider.png">>\
<<set $Mon.resists[0] to ["cleave",50]>>\
<<if $Mon.sex is "male">>\
<<set $Mon.desc to "A powerful pursuit predator, this massive spider is built to chase down fast opponents. As it darts around on eight legs all built for speed, you suspect you won't be escaping from this creature.">>\
<<set $Mon.MeatSemenMilk to [109,209,-1]>>\
<<set $Mon.anatomy[6] to { type: $BPpenis, morph: "spider" }>>\
<<set $Mon.att[0] to ["physical", 1, (_BaseMaxDam -1), (_BaseToHit +50), "rakes your flesh with a hairy leg", "tries to kick you but misses", "barely grazes you with a hairy leg"]>>\
<<set $Mon.att[1] to ["WEB", 1, _BaseMaxDam, _BaseSpecialToHit, "sprays sticky webbing on you", "sprays webbing at you but misses", "sprays some webbing on you, but you quickly brush it off."]>>\
<<elseif $Mon.sex is "female">>\
<<set $Mon.desc to "As giant spiders go, this one is relatuively smaller than average. that is to say, it stands at only about waist high rather than chest high. But with a body and legs that trail fullly eight feet behind it, it's still rather large. And as if that wasn't intimidating enough, the glowing green ichor dripping from its fangs probably makes up for what it lacks in size.">>\
<<set $Mon.MeatSemenMilk to [109,-1,-1]>>\
<<set $Mon.anatomy[6] to { type: $BPpussy, morph: "spider" }>>\
<<set $Mon.att[0] to ["physical", 1, (_BaseMaxDam -1), _BaseToHit, "rakes your flesh with a hairy leg", "tries to kick you but misses", "barely grazes you with a hairy leg"]>>\
<<set $Mon.att[1] to ["POISON", 1, 1, _BaseSpecialToHit, "bites you", "bites at you but misses", "bites you but fails to penetrate skin"]>>\
<<else>>\
<<set $Mon.sex to "heramphrodite">>\
<<set $Mon.desc to "A medium-sized giant spider. Its beady eyes reach roughly to your navel and it probably weighs a couple hundred pounds. And yet terrifying as it is, something about it puts you relatively at ease. Perhaps it's its scent? Maybe it's the little noises it makes as it skitters along the ground? Whatever it is, it kind of makes you want to go up and give it headpats.">>\
<<set $Mon.MeatSemenMilk to [109,209,-1]>>\
<<set $Mon.anatomy[6] to { type: $BPpenis, morph: "spider" }>>\
<<set $Mon.anatomy[7] to { type: $BPpussy, morph: "spider" }>>\
<<set $Mon.att[0] to ["physical", 1, (_BaseMaxDam -1), (_BaseToHit -20), "grazes your flesh with a hairy leg", "tries to kick you but misses", "barely grazes you with a hairy leg"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "sprays pheromones at you", "sprays pheromones at you, but you resist", "sprays pheromones at you, but you resist"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "makes cute chittering noises", "makes strange noises", "makes strange noises"]>>\
<<endif>>\
<<set $Mon.armor to _BaseArmor -10>>\
<<set $Mon.magres to _DunLev>> \
<<set $Mon.Willpower to _BaseWillpower>>\
<<set $Mon.chase to 999>>\
<<set $Mon.gold to Math.trunc(_BaseGold / 2)>>
<<elseif _whichmon is "naga">>\
<<set $Mon.name to "naga">>
<<set $Mon.morph to "naga">>
<<set $Mon.resists[0] to ["cleave",50]>>\
<<if (_AllowLocalSexOverride is true) and ($Mon.sex is "male")>>
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<endif>>\
<<if $Mon.sex is "female">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "bites at you but misses", "bites you but fails to penetrate skin"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "strikes you with her tail", "strikes at you with her tail, but misses", "delivers a glancing blow with her tail"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "gazes hypnotically at you", "gazes at you", "gazes at you to no effect"]>>\
<<set $Mon.pic to "nagaF.jpg">>
<<set $Mon.virgin to either("a horny naga","a powerful naga")>>
<<set $Mon.desc to "A huge snake from the waist down and marginally human from the waist up, this white and yellow naga bares a pair of heaving breasts as large as your head as if trying to distract you. You notice however, that her eyes don't seem to be tracking you and her forked tongue flicks in and out before every turn of her body. Perhap her eyesight is poor, but the heavily muscled twenty foot long tail coiled behind her makes the danger she poses very clear.">>
<<set $Mon.MeatSemenMilk to [124,-1,324]>>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "human" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "human" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "human" }>>\
<<set $Mon.anatomy[7] to { type: $BPtail, morph: "snake" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[9] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[10] to { type: $BPwaist, morph: "snake" }>>\
<<set $Mon.anatomy[11] to { type: $BPboobs, morph: "human" }>>\
<<set $Mon.anatomy[12] to { type: $BPpussy, morph: "snake" }>>\
<<elseif $Mon.sex is "male">>
<!-- transform tyype only: no male naga -->\
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.pic to "nagaH.jpg">>
<<set $Mon.virgin to "Error in naga: no male naga">>
<<set $Mon.desc to "Error in naga: no male naga">>
<<set $Mon.MeatSemenMilk to [124,224,-1]>>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "human" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "human" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[6] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[7] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[8] to { type: $BPhands, morph: "human" }>>\
<<set $Mon.anatomy[9] to { type: $BPhands, morph: "human" }>>\
<<set $Mon.anatomy[10] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[11] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[12] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[13] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[14] to { type: $BPwaist, morph: "snake" }>>\
<<set $Mon.anatomy[15] to { type: $BPtail, morph: "snake" }>>\
<<set $Mon.anatomy[16] to { type: $BPpenis, morph: "snake" }>>\
<<set $Mon.anatomy[17] to { type: $BPpenis, morph: "snake" }>>\
<<else>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "cups a breast in one hand, strokes a cock with enother, and beckons you with her other two", "fondles herself suggestively", "fondles herself suggestively"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "strokes both her cocks with four hands. It's hard not to notice.", "strokes both her cocks", "strokes both her cocks"]>>\
<<set $Mon.pic to "nagaH.jpg">>
<<set $Mon.virgin to "a naga with not one, but two dicks">>
<<set $Mon.desc to "With two giant breasts and two even gianter cocks, this naga eyes you with great interest. And great erections. You barely even notice that she has four arms.">>
<<set $Mon.MeatSemenMilk to [124,224,324]>>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "human" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "human" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[6] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[7] to { type: $BPwield, morph: "human" }>>\
<<set $Mon.anatomy[8] to { type: $BPhands, morph: "human" }>>\
<<set $Mon.anatomy[9] to { type: $BPhands, morph: "human" }>>\
<<set $Mon.anatomy[10] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[11] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[12] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[13] to { type: $BPring, morph: "human" }>>\
<<set $Mon.anatomy[14] to { type: $BPwaist, morph: "snake" }>>\
<<set $Mon.anatomy[15] to { type: $BPtail, morph: "snake" }>>\
<<set $Mon.anatomy[16] to { type: $BPboobs, morph: "human" }>>\
<<set $Mon.anatomy[17] to { type: $BPpussy, morph: "snake" }>>\
<<set $Mon.anatomy[18] to { type: $BPpenis, morph: "snake" }>>\
<<set $Mon.anatomy[19] to { type: $BPpenis, morph: "snake" }>>\
<<endif>>\
<<set $Mon.armor to _BaseArmor -10>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.Willpower to _BaseWillpower -2>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to Math.trunc(_BaseGold / 2)>>
<<elseif _whichmon is "hellhound">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "hellhound" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "hellhound" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "hellhound" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "hellhound" }>>\
<<set $Mon.anatomy[4] to { type: $BPwaist, morph: "hellhound" }>>\
<<set $Mon.anatomy[5] to { type: $BPlegs, morph: "hellhound" }>>\
<<set $Mon.anatomy[6] to { type: $BPlegs, morph: "hellhound" }>>\
<<set $Mon.anatomy[7] to { type: $BPtail, morph: "hellhound" }>>\
<<if _AllowLocalSexOverride is true>>
<<set $Mon.sex to "male">>
<<endif>>\
<<if $Mon.sex is "male">>\
<<set $Mon.anatomy[8] to { type: $BPpenis, morph: "hellhound" }>>\
<<SetStandardMale>>
<<elseif $Mon.sex is "female">>
<<set $Mon.anatomy[8] to { type: $BPboobs, morph: "hellhound" }>>\
<<set $Mon.anatomy[9] to { type: $BPpussy, morph: "hellhound" }>>\
<<SetStandardFemale>>
<<else>>
<<set $Mon.anatomy[8] to { type: $BPpenis, morph: "hellhound" }>>\
<<set $Mon.anatomy[9] to { type: $BPboobs, morph: "hellhound" }>>\
<<set $Mon.anatomy[10] to { type: $BPpussy, morph: "hellhound" }>>\
<<SetStandardHermaphrodite>>
<<endif>>\
<<set $Mon.TakesGold to false>>\
<<set $Mon.name to "hellhound">>
<<set $Mon.morph to "hellhound">>
<<set $Mon.pterm to 40>>\
<<set $Mon.resists[0] to ["pierce",50]>>\
<<set $Mon.fireheal to true>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.Willpower to _BaseWillpower +2>>
<<set $Mon.SymbolEffect to "damage">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "MONhellhoundM" + random(1,5) + ".jpg">>
<<set $Mon.virgin to "a horny hellhound">>
<<set $Mon.desc to "A demon with a large cock spurting flames for semen, mirrored with a fiery burning lust in his eyes.">>
<<set $Mon.MeatSemenMilk to [111,211,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "hellhoundF.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe female hellhound.">>
<<set $Mon.MeatSemenMilk to [111,-1,311]>>
<<set $Mon.anatomy[7] to { type: $BPboobs, morph: "hellhound" }>>\
<<set $Mon.anatomy[8] to { type: $BPpussy, morph: "hellhound" }>>\
<<else>>
<<set $Mon.heshe to "he">>\
<<set $Mon.himher to "him">>\
<<set $Mon.hisher to "his">>\
<<set $Mon.pic to "hellhoundH.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe h hellhound.">>
<<set $Mon.MeatSemenMilk to [111,211,311]>>
<<set $Mon.anatomy[8] to { type: $BPboobs, morph: "hellhound" }>>\
<<set $Mon.anatomy[9] to { type: $BPpussy, morph: "hellhound" }>>\
<<endif>>
<<set $Mon.chase to 100>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "snaps at you with its jaws but misses", "bites you but fails to penetrate skin"]>>\
<<set $Mon.att[1] to ["fire breath", 1, _BaseMaxDam, _BaseToHit, "breathes fire at you", "breathes fire at you somehow misses", "breathes fire at you but you cover yourself"]>>\
<<elseif _whichmon is "troll">>\
<<set $Mon.name to "troll">>
<<set $Mon.morph to "troll">>
<<if $Mon.sex is "female">>
<<AssignHumanoidAnatomyToMon "troll" "female" "notail">>\
<<set $Mon.MeatSemenMilk to [123,-1,-323]>>
<<if random(1,2) is 1>>\
<<set $Mon.pic to "MONtrollF1.jpg">>
<<set $Mon.desc to "Baring her fang and claws at you, this troll looks prepared for her next meal.">>
<<set $Mon.virgin to "a feral troll girl">>
<<else>>
<<set $Mon.pic to "MONtrollF2.jpg">>
<<set $Mon.desc to "Baring her fang and claws at you, this troll looks prepared for her next meal.">>
<<set $Mon.virgin to "a feral troll girl">>
<<endif>>
<<elseif $Mon.sex is "male">>
<<SetStandardMale>>
<<AssignHumanoidAnatomyToMon "troll" "male" "notail">>\
<<set $Mon.pic to "MONtrollM1.jpg">>
<<set $Mon.virgin to "A troll">>
<<set $Mon.desc to "Somewhat unusually, this troll appears to be wearing some bit of clothing aroung his hips. True to form however, his claws and fangs are bared and he's out for blood.">>
<<set $Mon.MeatSemenMilk to [123,223,-1]>>
<<else>>
<<SetStandardHermaphrodite>>
<<AssignHumanoidAnatomyToMon "troll" "herm" "notail">>\
<<set $Mon.pic to "MONtrollH1.jpg">>
<<set $Mon.virgin to "A thick-dicked troll girl">>
<<set $Mon.desc to "With a cock that would hang down to her knees if it weren't erect, this troll look sat you as if she's prepared to make her own hole if she can't find one.">>
<<set $Mon.MeatSemenMilk to [123,223,323]>>
<<endif>>
<<set $Mon.regen to _DunLev>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif (_whichmon is "rat-morph") or (_whichmon is "ratkin")>>\
<<set $Mon.ImageVer to 1>>\
\
<<set $Mon.name to "rat-morph">>
<<set $Mon.morph to "ratkin">>
<<set $Mon.pterm to 10>>\
<<if $Mon.sex is "herm">>\
<<set $Mon.sex to either("male","female")>>\
<<endif>>\
<<if $Mon.sex is "female">>
<<SetStandardFemale>>
<<AssignHumanoidAnatomyToMon "ratkin" "female" "tail">>\
<<set $Mon.pic to "MONratkinF.jpg">>
<<set $Mon.virgin to "A cute rat-girl">>
<<set $Mon.desc to "A rat-girl with cute mouse ears wearing an uncharacteristically anachronistic schoolgirl uniform.">>
<<set $Mon.MeatSemenMilk to [126,226,-1]>>
<<elseif $Mon.sex is "male">>
<<SetStandardMale>>
<<AssignHumanoidAnatomyToMon "ratkin" "herm" "tail">>\
<<set $Mon.pic to "MONratkinM.jpg">>
<<set $Mon.virgin to "A classy rat-man">>
<<set $Mon.desc to "A rat-man wearing an elegant, if somewhat archaic, suit.">>
<<set $Mon.MeatSemenMilk to [126,226,-1]>>
<<else>>
<<SetStandardMale>>
<<AssignHumanoidAnatomyToMon "ratkin" "herm" "tail">>\
<<set $Mon.pic to "MONratkinH.jpg">>
<<set $Mon.virgin to "A ratkin herm">>
<<set $Mon.desc to "A ratkin wearing a mixed set of male and female school uniform. From this angle it's difficult to see what's under the skirt.">>
<<set $Mon.MeatSemenMilk to [126,226,-1]>>
<<endif>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold + 5>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "hydra">>\
<<set _HeadCount to either(2, 3)>>\
<<if _HeadCount is 2>>\
<<set $Mon.flurryQTY to 2>>
<<set $Mon.name to "two-headed hydra">>
<<set $Mon.desc to "A huge reptile weighing easily several tons. While the number of heads a hydra has varies, this particular specimen has two. Fortunately, unlike dragons, hydras do not breath fire. Unfortunately, each of its heads is able to attack.">>
<<set $Mon.pic to "hydraTwo.png">>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[1] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[2] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[3] to { type: $BPneck, morph: "snake" }>>\
<<else>>\
<<set $Mon.flurryQTY to 3>>
<<set $Mon.name to "three-headed hydra">>
<<set $Mon.desc to "A huge reptile weighing easily several tons. While the number of heads a hydra has varies, this particular specimen has three. Fortunately, unless dragons, hydras do not breath fire. Unfortunately, each of its heads is able to attack.">>
<<set $Mon.pic to "hydraThree.png">>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[1] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[2] to { type: $BPhead, morph: "snake" }>>\
<<set $Mon.anatomy[3] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[4] to { type: $BPneck, morph: "snake" }>>\
<<set $Mon.anatomy[5] to { type: $BPneck, morph: "snake" }>>\
<<endif>>\
<<set _GetNextBP to $Mon.anatomy.length>>
<<set $Mon.anatomy[_GetNextBP] to { type: $BPback, morph: "snake" }>>\
<<set $Mon.anatomy[_GetNextBP +1] to { type: $BPchest, morph: "snake" }>>\
<<set $Mon.anatomy[_GetNextBP +2] to { type: $BPwaist, morph: "snake" }>>\
<<set $Mon.anatomy[_GetNextBP +3] to { type: $BPlegs, morph: "snake" }>>\
<<set $Mon.anatomy[_GetNextBP +4] to { type: $BPlegs, morph: "snake" }>>\
<<set $Mon.anatomy[_GetNextBP +5] to { type: $BPtail, morph: "snake" }>>\
\
<<set $Mon.morph to "hydra">>
<<set $Mon.pterm to 60>>\
<<set _GetNextBP to $Mon.anatomy.length>>
<<if $Mon.sex is "female">>
<<set $Mon.virgin to "A hydra">>
<<set $Mon.MeatSemenMilk to [121,221,-1]>>
<<set $Mon.anatomy[_GetNextBP] to { type: $BPboobs, morph: "snake" }>>\
<<set $Mon.anatomy[_GetNextBP +1] to { type: $BPpussy, morph: "snake" }>>\
<<else>>
<<set $Mon.sex to "male">>\
<<SetStandardMale>>
<<set $Mon.anatomy[_GetNextBP] to { type: $BPpenis, morph: "snake" }>>\
<<set $Mon.virgin to "A powerful hydra">>
<<set $Mon.MeatSemenMilk to [121,221,-1]>>
<<endif>>
<<set $Mon.regen to _DunLev>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to _BaseGold * 2>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "snaps at you, but misses", "bites you but fails to break skin"]>>\
<<set $Mon.att[1] to ["flurry", 1, _BaseMaxDam, _BaseToHit, "bites you", "snaps at you, but misses", "bites you but fails to break skin"]>>\
<<elseif _whichmon is "drider">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "spider" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "spider" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "spider" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "spider" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "spider" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "spider" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "spider" }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: "spider" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "spider" }>>\
<<set $Mon.anatomy[9] to { type: $BPback, morph: "spider" }>>\
<<set $Mon.anatomy[10] to { type: $BPchest, morph: "spider" }>>\
<<set $Mon.anatomy[11] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.anatomy[12] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.anatomy[13] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.anatomy[14] to { type: $BPlegs, morph: "spider" }>>\
<<set $Mon.name to "drider">>
<<set $Mon.morph to "drider">>
<<set $Mon.resists[0] to ["cleave",50]>>\
<<set $Mon.sex to "female">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "driderM.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.desc to "Describe male drider.">>
<<set $Mon.MeatSemenMilk to [113,213,-1]>>
<<set $Mon.anatomy[15] to { type: $BPpenis, morph: "spider" }>>\
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "driderF.jpg">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.desc to "Describe female drider.">>
<<set $Mon.MeatSemenMilk to [113,-1,313]>>
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "spider" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "spider" }>>\
<<else>>
<<set $Mon.pic to "driderH.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.MeatSemenMilk to [113,213,313]>>
<<set $Mon.anatomy[15] to { type: $BPpenis, morph: "spider" }>>\
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "spider" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "spider" }>>\
<<endif>>
<<set $Mon.Willpower to _BaseWillpower>>
<<set $Mon.chase to 1>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "demon">>\
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "demon" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "demon" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "demon" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "demon" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "demon" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "demon" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "demon" }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: "demon" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "demon" }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: "demon" }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: "demon" }>>\
<<set $Mon.anatomy[11] to { type: $BPhooves, morph: "demon" }>>\
<<set $Mon.anatomy[12] to { type: $BPhorns, morph: "demon" }>>\
<<set $Mon.anatomy[13] to { type: $BPtail, morph: "demon" }>>\
<<set $Mon.anatomy[14] to { type: $BPpenis, morph: "demon" }>>\
<<set $Mon.SymbolEffect to "damage">>
<<set $Mon.name to "demon">>
<<set $Mon.morph to "demon">>
<<set $Mon.resists[0] to ["cut",50]>>\
<<set $Mon.fireheal to true>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.Willpower to _BaseWillpower +5>>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "demonM.png">>
<<set $Mon.virgin to "an incubus">>
<<set $Mon.desc to "A muscular demon with a big, fat cock. His look brooks no nonsense.">>
<<set $Mon.MeatSemenMilk to [115,215,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "demonF.jpg">>
<<set $Mon.virgin to "a succubus">>
<<set $Mon.desc to "A gorgeous female demon with a devilish grin.">>
<<set $Mon.MeatSemenMilk to [115,-1,315]>>
<<set $Mon.anatomy[14] to { type: $BPboobs, morph: "demon" }>>\
<<set $Mon.anatomy[15] to { type: $BPpussy, morph: "demon" }>>\
<<else>>
<<set $Mon.pic to "demonH.jpg">>
<<set $Mon.virgin to "an omnibus">>
<<set $Mon.desc to "A demon with comically oversized breasts and a cock sized for a horse. She returns your gaze with interest.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "demon" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "demon" }>>\
<<endif>>
<<set $Mon.armor to _BaseArmor +10>>
<<set $Mon.chase to 1>>
<!- override values -->
<<set $Mon.arpen to 1>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["magic", 1, _BaseMaxDam, _BaseToHit, "hurls a lighting bolt at you", "throws a lightning bolt but somehow misses", "hurls a lightning bolt at you, but you resist"]>>\
<<set $Mon.att[1] to ["magic", 1, _BaseMaxDam, _BaseToHit, "hurls a firebolt at you", "throws a firebolt but somehow misses", "hurls a firebolt at you, but you resist"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "tentacle">>\
<<set $Mon.flurryQTY to random(2,5)>>\
<<set _Tqty to random(5,12)>>\
<<for _i to 0; _i < _Tqty; _i++>>
<<set $Mon.anatomy[_i] to { type: $BPtentacle, morph: "tentacle" }>>\
<</for>>\
<<set $Mon.TakesGold to false>>\
<<set $Mon.resists[0] to ["blunt",50]>>\
<<set $Mon.name to "tentacle">>
<<set $Mon.morph to "tentacle">>
<<set $Mon.pterm to 8>>\
<<set $Mon.sex to "male">>
<<SetStandardMale>>
<<set $Mon.heshe to "it">>
<<set $Mon.himher to "it">>
<<set $Mon.hisher to "its">>
<<set $Mon.pic to "tentacleA.png">>
<<set $Mon.virgin to "a tentacle monster">>
<<set $Mon.desc to "A swirling mass of pulsating tentacles trailing sticky globs of thick fluids that make its intentions towards you very clear.">>
<<set $Mon.MeatSemenMilk to [114,214,-1]>>
<<set $Mon.armor to _BaseArmor -10>>
<<set $Mon.Willpower to _BaseWillpower +5>>
<<set $Mon.chase to 100>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["flurry", 1, _BaseMaxDam, _BaseToHit, "hits you with a tentacle", "pokes at you with a tentacle", "brushes against you with a tentacle"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "coils a tentacle up and between your thighs", "reaches for your thighs but misses", "reaches a tentacle between your legs but you bat it away"]>>\
<<set $Mon.att[2] to ["REMOVEARMOR", 1, (1 + _DunLev), (50 + _DunLev), "grabs onto your clothes and dislodges them slightly", "tries to grab you, but you evade", "grabs your clothing with a tendril, but you hastily bat it aside "]>>\
<<elseif _whichmon is "Charyss">>\
<<set $Mon.unique to true>>\
<<set $Mon.boss to 2>>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "demon" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "demon" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "demon" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "demon" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "demon" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "demon" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "demon" }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: "demon" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "demon" }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: "demon" }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: "demon" }>>\
<<set $Mon.anatomy[11] to { type: $BPhooves, morph: "demon" }>>\
<<set $Mon.anatomy[12] to { type: $BPhorns, morph: "demon" }>>\
<<set $Mon.anatomy[13] to { type: $BPtail, morph: "demon" }>>\
<<set $Mon.anatomy[14] to { type: $BPpenis, morph: "demon" }>>\
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "demon" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "demon" }>>\
<<set $Mon.SymbolEffect to "damage">>
<<set $Mon.name to "Charyss">>
<<set $Mon.morph to "demon">>
<<set $Mon.resists[0] to ["cut",50]>>\
<<set $Mon.resists[1] to ["cleave",50]>>\
<<set $Mon.fireheal to true>>\
<<set $Mon.magres to _DunLev>>\
<<set $Mon.Willpower to _BaseWillpower +999>>
<<set $Mon.pic to "demonH.jpg">>
<<set $Mon.virgin to "Charyss">>
<<set $Mon.desc to "A demon with comically oversized breasts and a cock sized for a horse. She seemed only marginally interested in fighting you, and is mumbling under her breath about how all she wanted was a beer.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<set $Mon.armor to _BaseArmor +10>>
<<set $Mon.chase to -99>>
<<set $Mon.arpen to 1>>
<<set $Mon.gold to _BaseGold>>
<<set $Mon.att[0] to ["physical", 5, _BaseMaxDam +5, _BaseToHit, "smacks you with her tail", "swings her tail at you, but misses", "smacks you with her tail, but it only grazes you"]>>\
<<set $Mon.att[1] to ["magic", 5, _BaseMaxDam +5, _BaseToHit, "hurls a firebolt at you", "throws a firebolt but somehow misses", "hurls a firebolt at you, but you resist"]>>\
<<set $Mon.att[2] to ["POISON", 1, 1, _BaseSpecialToHit +5, "casts poison at you", "casts a spell at you, but you resist", "casts a spell at you, but you resist"]>>\
<<set $Mon.att[3] to ["flirt", 5, _BaseFlirtDam +5, _BaseFlirtTH, "blows you a kiss", "blows you a kiss, but you ignore it", "blows you a kiss, but you ignore it"]>>\
<<elseif _whichmon is "Zehtalia">>\
<<set $Mon.unique to true>>\
<<set $Mon.boss to 1>>
<<set $Mon.AI to "Zehtalia">>
<<set $Mon.resists[0] to ["cleave",50]>>\
<<set $Mon.SymbolEffect to "damage">>
<<set $Mon.name to "Zehtalia, the Spider Queen">>
<<set $Mon.morph to "Zehtalia">>
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.pic to "Zehtalia.png">>
<<set $Mon.virgin to "Zetahlia, the Spider Queen">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<set $Mon.hpcur to 200>>
<<set $Mon.hpmax to 200>>
<<set $Mon.armor to _BaseArmor>>
<<set $Mon.magres to 10>>
<<set $Mon.poisonheal to true>>
<<set $Mon.Willpower to _BaseWillpower +999>>
<<set $Mon.chase to 999>>
<<set $Mon.arpen to 5>>
<<set $Mon.gold to 200>>
<<set $Mon.TakesGold to false>>\
<<set $Mon.xp to 50>>
<<set $Mon.att[0] to ["physical", 5, 10, _BaseToHit, "rakes your flesh with her leg spines", "tries to kick you but misses", "barely grazes you with a hairy leg"]>>\
<<set $Mon.att[1] to ["WEB", 1, 4, 10, "sprays you with webbing that makes it harder to move", "sprays webbing at you, but you evade", "sprays webbing on you, but you quickly brush it off"]>>\
<<set $Mon.att[2] to ["POISON", 1, 1, 10, "sprays a cloud of poison around you", "sprays a cloud of poison, but you dodge", "sprays a cloud of poison around you, but you avoid the worst of it"]>>\
<!-- unique loot -->
<<set _Ipsimus to setup.FindUnique(700)>>
<<set _Custodia to setup.FindUnique(701)>>
<<if (_Ipsimus[0] is false) and (_Custodia[0] is false)>>
<<set $Mon.desc to "A cute anime waifu with glowing eyes from the waist up, and a horrible, hideous spider from the waist down. Swinging the massive flail @@color:LightBlue;'Ipsismus'@@ over her head in one hand and cradling the sword @@color:LightBlue;'Custodia'@@ in the other, she eyes you with dull interest.">>
<<set $Mon.att[3] to ["physical", 5, 10, _BaseToHit, "smashes you with @@color:LightBlue;'Ipsismus'@@", "swings at you, but misses", "smashes you with her flail, but it is a glancing blow"]>>\
<<set $Mon.att[4] to ["physical", 3, 8, _BaseToHit, "slashes you with @@color:LightBlue;'Custodia'@@", "swings at you, but misses", "slashes you with @@color:LightBlue;'Custodia'@@, but it is a glancing blow"]>>\
<<set $Mon.loot to [either(700,701),0,0,0,0]>>
<<elseif (_Ipsimus[0] is false) and (_Custodia[0] is true)>>
<<set $Mon.desc to "A cute anime waifu with glowing eyes from the waist up, and a horrible, hideous spider from the waist down. She is carrying the massive flail @@color:LightBlue;'Ipsismus'@@ in both hands, and glaring at you with hatred.">>
<<set $Mon.att[3] to ["physical", 5, 10, _BaseToHit, "smashes you with @@color:LightBlue;'Ipsismus'@@", "swings at you, but misses", "smashes you with her flail, but it is a glancing blow"]>>\
<<set $Mon.loot to [700,0,0,0,0]>>
<<elseif (_Ipsimus[0] is true) and (_Custodia[0] is false)>>
<<set $Mon.desc to "A cute anime waifu with glowing eyes from the waist up, and a horrible, hideous spider from the waist down. She is holding the sword @@color:LightBlue;'Custodia'@@ protectively with both hands, and glaring at you with hatred.">>
<<set $Mon.att[3] to ["physical", 3, 8, _BaseToHit, "smashes you with @@color:LightBlue;'Custodia'@@", "swings at you, but misses", "smashes you with her flail, but it is a glancing blow"]>>\
<<set $Mon.loot to [701,0,0,0,0]>>
<<else>>
<<set $Mon.desc to "Empty-handed, Zehtalis is frothing at the mouth in sheer fury.">>
<<set _Loot to setup.GenLoot("boss chest", "none", _pz, $PC[$CC][$PClocation])>>\
<<endif>>\
<<elseif _whichmon is "Neris">>\
<<set $Mon.unique to true>>\
<<set $Mon.boss to 3>>
<<set $Mon.anatomy[0] to { type: $BPhead, morph: "demon" }>>\
<<set $Mon.anatomy[1] to { type: $BPneck, morph: "demon" }>>\
<<set $Mon.anatomy[2] to { type: $BPback, morph: "demon" }>>\
<<set $Mon.anatomy[3] to { type: $BPchest, morph: "demon" }>>\
<<set $Mon.anatomy[4] to { type: $BPwield, morph: "demon" }>>\
<<set $Mon.anatomy[5] to { type: $BPwield, morph: "demon" }>>\
<<set $Mon.anatomy[6] to { type: $BPhands, morph: "demon" }>>\
<<set $Mon.anatomy[7] to { type: $BPring, morph: "demon" }>>\
<<set $Mon.anatomy[8] to { type: $BPring, morph: "demon" }>>\
<<set $Mon.anatomy[9] to { type: $BPwaist, morph: "demon" }>>\
<<set $Mon.anatomy[10] to { type: $BPlegs, morph: "demon" }>>\
<<set $Mon.anatomy[11] to { type: $BPhooves, morph: "demon" }>>\
<<set $Mon.anatomy[12] to { type: $BPhorns, morph: "demon" }>>\
<<set $Mon.anatomy[13] to { type: $BPtail, morph: "demon" }>>\
<<set $Mon.anatomy[14] to { type: $BPpenis, morph: "demon" }>>\
<<set $Mon.anatomy[15] to { type: $BPboobs, morph: "demon" }>>\
<<set $Mon.anatomy[16] to { type: $BPpussy, morph: "demon" }>>\
<<set $Mon.SymbolEffect to "damage">>
<<set $Mon.name to "Neris">>
<<set $Mon.AI to "Neris">>
<<set $Mon.morph to "Neris">>
<<set $Mon.SymbolEffect to "blink">>
<<set $Mon.resists[0] to ["cut",20]>>\
<<set $Mon.resists[1] to ["cleave",20]>>\
<<set $Mon.resists[2] to ["blunt",20]>>\
<<set $Mon.resists[3] to ["pierce",20]>>\
<<set $Mon.fireheal to true>>\
<<set $Mon.magres to _DunLev>>\
<<set $Mon.poisonheal to true>>
<<set $Mon.Willpower to _BaseWillpower +999>>
<<set $Mon.pic to "Neris.jpg">>
<<set $Mon.virgin to "Neris">>
<<set $Mon.desc to "A smallish girl with demon horns, and wings sprouting from her back. Her dress is tattered, and she wears manacles on her wrists and ankles, a few feet of shredded chains dangling from them. Despite the battle raging around her, she merely looks at you sadly.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<set $Mon.armor to 0>>
<<set $Mon.chase to -99>>
<<set $Mon.arpen to 1>>
<<set $Mon.gold to 1000>>
<<set $Mon.TakesGold to false>>\
<<set $Mon.att[0] to ["physical", 5, _BaseMaxDam +5, _BaseToHit, "smacks you with her tail", "swings her tail at you, but misses", "smacks you with her tail, but it only grazes you"]>>\
<<set $Mon.att[1] to ["magic", 5, _BaseMaxDam +5, _BaseToHit, "hurls a lightning bolt at you", "throws a bolt of lightning but somehow misses", "hurls lightning at you, but it grounds itself harmlessly"]>>\
<<else>>\
<<set _LogText to "Error in GetMon: unrecognized monster requested: ( + " _whichmon + ")">>\
<<AddToLog _LogText>>\
<<endif>>\
<</silently>>\
<</widget>>\
<<widget "GetMon">>\
<<silently>>\
<<set $poisoned to 0>>
\
<<set _DunLev to $PC[$CC][$PCz]>>
<<if $PC[$CC][$PClocation] is "forest">>
<<set _DunLev to $PC[$CC][$PCfz]>>
<<endif>>\
<<if _DunLev < 0>>
@@color:Red;Error in GetMon: DunLev is negative@@
<<set _DunLev to _DunLev * -1>>
<<endif>>
<<set _multi to 1>>
<<if _DunLev > 15>>\
<<set _multi to 4>>\
<<elseif _DunLev > 10>>\
<<set _multi to 3>>\
<<elseif _DunLev > 5>>\
<<set _multi to 2>>\
<<endif>>\
\
<<set $Mon to {}>>
<<set $Mon.sex to "female">>
<<if $PC[$CC][$PCsex] is "female">>\
<<if random(1,10) < 8>>
<<set $Mon.sex to "male">>
<<endif>>\
<<endif>>
<<set _whichmon to setup.GetMonByDLEV($PC[$CC][$PCz])>>\
\
<<if $ForceMon[0] is "random">>
<<else>>
<<set _whichmon to $ForceMon[0]>>
<<endif>>
<<if ($ForceMon[1] neq "random")>>
<<set $Mon.sex to $ForceMon[1]>>
<<else>>
<<set $Mon.sex to setup.GetStandardSex()>>
<<endif>>
\
<<if (0 is 1)>>\
<<set _whichmon to "fox">>\
<<endif>>\
\
<<set $Mon.level to _DunLev>>
\
<<if _whichmon is "goblin">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "goblin">>
<<set $Mon.morph to "goblin">>
<<set $Mon.att to []>>
<<if $Mon.sex is "male">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to false>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "goblinM.png">>
<<set $Mon.virgin to "a male goblin">>
<<set $Mon.desc to "A fairly typical male goblin. Short, horny, angry, ready to rape and beat anyone into submission. Not neccesarily in that order.">>
<<set $Mon.MeatSemenMilk to [107,207,-1]>>
<<set $Mon.att[0] to ["physical", 1, (1 + _multi), (5 + _DunLev), "hits you", "takes a swing at you but misses", "hits you, but you shrug off the attack"]>>\
<<set $Mon.att[1] to ["physical", 1, (1 + _multi), (5 + _DunLev), "whacks you with his club", "swings at you but misses", "whacks you with his club, but the blow glances off you"]>>\
<<set $Mon.att[2] to ["flirt", 1, (1 + _multi), 50 + (5 * _multi), "grins and licks his lips at you eagerly", "leers at you", "grins at you, but you're not impressed"]>>\
<<elseif $Mon.sex is "female">>
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "goblinF.png">>
<<set $Mon.virgin to "a female goblin">>
<<if $PC[$CC][$PCsex] is "female">>\
<<set $Mon.desc to "A short goblin with huge sexy tits. She's giving you a half-aroused, half-furious stare. You suspect she's envious of your height, but simultaneously turned on by it, and struggling to find a happy medium between angry and horny.">>
<<set $Mon.MeatSemenMilk to [107,-1,307]>>
<<else>>
<<set $Mon.desc to "A short goblin with huge sexy tits, if you're into that kind of thing. And from the look she's giving you, you suspect she'd love for you to be into it. Or her, for that matter.">>
<<endif>>
<<set $Mon.att[0] to ["physical", 1, (1 + _multi), (5 + _DunLev), "whacks you with one of her boobs", "swings her boobs at you but fails to connect", "whacks you with her boobs but it doesn't hurt much"]>>\
<<set $Mon.att[1] to ["flirt", 1, (1 + _multi), 50 + (5 * _multi), "sticks a finger in her pussy then licks it", "tries to call attention to her pussy but fails", "fondles herself to try to distract you, but you ignore it"]>>\
<<set $Mon.att[2] to ["flirt", 1, (1 + _multi), 50 + (5 * _multi), "pulls a breast to her lips and licks its", "reaches for her chest but slips", "fondles herself to try to distract you, but you ignore it"]>>\
<<else>>
<<set $Mon.pic to "goblinH.png">>
<<set $Mon.penis to true>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<if random(1,2) is 1>>\
<<set $Mon.virgin to "a goblin hermaphrodite">>
<<set $Mon.pussy to true>>
<<else>>\
<<set $Mon.virgin to "a goblin crossdresser">>
<<set $Mon.pussy to false>>
<<endif>>\
<<set $Mon.desc to "A somewhat sexually ambiguous goblin. He clearly has a dick, but he's unusually feminine for a male goblin, and you're not entirely sure whether that hole he's leering at you with is a pussy, or just his ass hole.">>
<<set $Mon.MeatSemenMilk to [107,207,307]>>
<<set $Mon.att[0] to ["physical", 1, (1 + _multi), (5 + _DunLev), "hits you", "takes a swipe at you but misses", "hits you, but you shrug off the attack"]>>\
<<set $Mon.att[1] to ["flirt", 1, (1 + _multi), 50 + (5 * _multi), "stokes himself and invites you to take over", "strokes himself, but fails to distract you", "strokes himself, but you ignore it"]>>\
<<endif>>
<<if _DunLev > 4>>
<<set $Mon.att[2] to ["flirt", 2, (1 + _multi), 50 + (5 * _multi), "throws a vial full of sweet-smelling pink liquid on you", "throws a vial of pink liquid at you, but you dodge", "throws pink liquid on you, but you quickly brush it off"]>>\
<<set $Mon.loot[1] to [109,0,1,404]>>\
<<endif>>
<<set $Mon.hpcur to 30 + (5 * _DunLev)>>
<<set $Mon.hpmax to 30 + (5 * _DunLev)>>
<<set $Mon.armor to 30 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 25>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(4,20) + _multi>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to either(true, false)>>
<<set $Mon.loot[1] to [103,0,0,0]>><!-- dildo -->\
<<elseif _whichmon is "slime">>\
<<set $Mon.name to "slime">>
<<set $Mon.morph to "slime">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "slimeM.png">>
<<set $Mon.virgin to "a slime man">>
<<set $Mon.desc to "A large, powerfully built man of slime. At least, he looks powerful. You're not entirely sure just how strong something made of slime can be, but he certainly looks the part. His cock is visibly dripping some sort of fluid, and you can't help but wonder whether that's actually semen, or whether it's simply his insides leaking out. Goo physiology is a little odd.">>
<<set $Mon.MeatSemenMilk to [400,400,400]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "slimeF.png">>
<<set $Mon.virgin to "a slime girl">>
<<set $Mon.desc to "A lithe and lovely slime girl. Ironically, being made of goo probably makes it easy for her to maintain her figure. If she gains weight, she can simply bulge it out into whatever direction she wants. From the size of her breasts, you imagine she must eat well.">>
<<set $Mon.MeatSemenMilk to [400,400,400]>>
<<else>>
<<set $Mon.MeatSemenMilk to [400,400,400]>>
<<set $Mon.virgin to "a slime">>
<<if random(1,1) is 1>>
<<set $Mon.pic to "slimeHa.png">>
<<set $Mon.desc to "A slime sporting a variety of parts that make its gender and species a bit ambiguious. The huge cock pointed at you is clear enough, but she's also sporting hips big enuogh to give birth to a basketball and some admittedly small, but unmistakable breasts. And also slime cat ears, a slime tail, and what looks like a slime dog's nose...because why not? After all, when you can shape your body into anything you want, why not flaunt it?">>
<<else>>
<<set $Mon.pic to "slimeHb.png">>
<<set $Mon.desc to "Implement slime Hb">>
<<endif>>
<<endif>>
<<set $Mon.hpcur to 10 + (5 * _DunLev)>>
<<set $Mon.hpmax to 10 + (5 * _DunLev)>>
<<set $Mon.armor to 70 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 10>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 1>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(4,20)>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, (2 +_multi), (50 + _DunLev), "hits you", "extends a tendril in your direction, but misses", "hits you with a tendril, but it squishes on impact"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), 50 + (5 * _multi), "shifts its body around to be more to your liking", "tries to shift its body around", "shifts its body around, but the result is not an improvement"]>>\
<<set $Mon.att[2] to ["debuffAC", 1, (1 + _DunLev), (50 + _DunLev), "grabs onto your clothes with a tendril and dislodges them slightly", "tries to grab you, but you evade", "grabs your clothing with a tendril, but you hastily bat it aside "]>>\
<<set $Mon.att[3] to ["debuffPOISON", 1, 1, 50 + (5 * _multi), "stabs you with a tendril that spurts some fluid into you", "pokes at you ineffectually with a tendril", "poke you with a tendril, but you grab it before it can do anything"]>>\
<<elseif _whichmon is "bunny">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "bunny">>
<<set $Mon.morph to "bunny">>
<<if $Mon.sex is "male">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to false>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.virgin to "a bunny boy">>
<<set $Mon.pic to "bunnyM.png">>
<<set $Mon.desc to "Hopping around on his hands and knees, you suspect this bunny boy's chosen form of locomotion doubles both for sexual purposes, as well as simply to help him stay in character.">>
<<set $Mon.MeatSemenMilk to [100,200,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "bunnyF.png">>
<<set $Mon.virgin to "a bunny girl">>
<<set $Mon.desc to "With tits nearly as big as her head, this bunny girl giggles happiliy as she comes at you with a look in her eyes that you're not entirely sure is lethal or lustful intent.">>
<<set $Mon.MeatSemenMilk to [100,-1,300]>>
<<else>>
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "bunnyH.png">>
<<set $Mon.virgin to "a futa bunny dickgirl">>
<<set $Mon.desc to "With a cock even more masive than her humongous breasts, her eyes glisten as she eyes up and down your torso, eventually settling on a spot between your legs she finds especially interesting. 'Bend over for me, dear,' she whispers as she strokes her cock.">>
<<set $Mon.MeatSemenMilk to [100,200,300]>>
<<endif>>
<<set $Mon.hpcur to 10 + (2 * _DunLev)>>
<<set $Mon.hpmax to 10 + (2 * _DunLev)>>
<<set $Mon.armor to 20 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.xp to _DunLev>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "cat">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "cat">>
<<set $Mon.morph to "cat">>
<<set $Mon.hpcur to 10 + (2 * _DunLev)>>
<<set $Mon.hpmax to 10 + (2 * _DunLev)>>
<<set $Mon.armor to 20 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.xp to _DunLev>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<if $Mon.sex is "male">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to false>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "catM.png">>
<<set $Mon.virgin to "a manly cat man">>
<<set $Mon.desc to "A powerfully built muscle-man with cat ears and tail. The way he looks at you makes it clear that he's used to getting his way, and if you're not careful, his way is going to be with you. Though whether sexually, or simply dragging you to the gym with him is unclear.">>
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "points suggestively at his barbed cock", "points at his cock, but the barbs are far from a turn-in", "points at his cock, but the barbs are far from a turn-in"]>>\
<<set $Mon.MeatSemenMilk to [101,201,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "catF.png">>
<<set $Mon.virgin to "a buxom catgirl">>
<<set $Mon.desc to "A buxom catgirl wih huge breasts and child-bearing hips looks at you with an air of casual indifference that belies the insistence of her attacks. Still, she would almost be cute if she weren't trying to murder you. Or is she? From one moment to the next, it's hard to tell.">>
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "demurely insists that it's not like she likes you or anything", "insists that she doesn't like you, but her expression keeps it from sounding ironic", "insists that she doesn't like you, but you shrug it off"]>>\
<<set $Mon.MeatSemenMilk to [101,-1,301]>>
<<else>>
<<set $Mon.pic to "catH.png">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "it">>
<<set $Mon.himher to "its">>
<<set $Mon.hisher to "its">>
<<set $Mon.virgin to "a futa catgirl">>
<<set $Mon.desc to "A catgirl futa with plump breasts and an erect cock already dribbling with pre-cum. Seeing the light-teal of her pubic hair and mane, you can't help but notice that the carpet does match the drapes.">>
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "squeezes her boobs together and invites you to do the same", "squeezes a boob with one hand and strokes her cock with the other", "gropes herself, but is too distracted by her own body for it to really be called flirtatious"]>>\
<<set $Mon.MeatSemenMilk to [101,201,301]>>
<<endif>>
<<elseif _whichmon is "fox">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "fox">>
<<set $Mon.morph to "fox">>
<<set $Mon.att to []>>
<<if $Mon.sex is "male">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to false>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "foxM.png">>
<<set $Mon.virgin to "a fox-man">>
<<set $Mon.desc to "An anthropomorphic fox-man with a green dick. A dick that he's already stroking as he looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "strokes himself and invites you to take over", "strokes himself, but you ignore it", "strokes himself, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "foxF.jpg">>
<<set $Mon.virgin to "a fox-girl">>
<<set $Mon.desc to "An attractive fox-girl covered in a thin layer of brown fur. Her tail twitches occasionally as she looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "slashes at you with her claws", "slashes at you, but misses", "slashes you with her claws, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,-1,302]>>
<<else>>
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "foxH.png">>
<<set $Mon.virgin to "an effeminate fox-boy">>
<<set $Mon.desc to "An effeminate fox-boy with a suspicious bulge in his panties. ">>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "rubs his bulge and winks suggestively", "rubs his bulge and winks at you, but you ignore it", "rubs his bulge and winks at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,302]>>
<<endif>>
<<set $Mon.hpcur to 10 + (2 * _DunLev)>>
<<set $Mon.hpmax to 10 + (2 * _DunLev)>>
<<set $Mon.armor to 20 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.xp to _DunLev>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<elseif _whichmon is "wolf">>\
<<set $Mon.name to "wolf">>
<<set $Mon.morph to "wolf">>
<<set $Mon.sex to "male">>
<<set $Mon.pic to "wolfM.png">>
<<set $Mon.virgin to "a burly wolf-man">>
<<set $Mon.MeatSemenMilk to [103,203,-1]>>
<<set $Mon.desc to "A burly wolf-man with a thick, meaty cock he'd like to share with you.">>
<<set $Mon.hpcur to 10 + (2 * _DunLev)>>
<<set $Mon.hpmax to 10 + (2 * _DunLev)>>
<<set $Mon.armor to 40 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to 0>>
<<set $Mon.xp to _DunLev>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "bites you", "snaps at you with his jaws, but misses", "bites you, but fails to pierce your flesh"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "points suggestively at his erection", "pumps his cock a few times, but you ignore it", "pumps his cock a few times, but you ignore it"]>>\
<<elseif _whichmon is "human">>\
<<set $Mon.name to "adventurer">>
<<set $Mon.morph to "human">>
<<set $Mon.hpcur to 10 + (5 * _DunLev)>>
<<set $Mon.hpmax to 10 + (5 * _DunLev)>>
<<set $Mon.armor to 20 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<if $Mon.sex is "male">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to false>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "humanM.png">>
<<set $Mon.virgin to "a human swordsman">>
<<set $Mon.desc to "An adventurer like yourself, climbing the tower in search of treasure and glory. This one appears to be a swordsman.">>
<<set $Mon.MeatSemenMilk to [106,206,-1]>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "cuts you with his sword", "swings his sword at you, but misses", "barely nicks you with his sword"]>>\
<<elseif $Mon.sex is "female">>
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "humanF.jpg">>
<<set $Mon.virgin to "a human sorceress">>
<<set $Mon.desc to "An adventurer like yourself, climbing the tower in search of treasure and glory. This one appears to be a spellcaster.">>
<<set $Mon.MeatSemenMilk to [106,-1,306]>>
<<set $Mon.att[0] to ["magic", 1, _DunLev, (50 + _DunLev), "hurls a fireball at you", "hurls a fireball at you, but misses", "hurls a fireball at you, but it just grazes you"]>>\
<<set $Mon.att[1] to ["magic", 1, _DunLev, (50 + _DunLev), "hurls a bolt of lightning at you", "hurls lightning at you, but misses", "hurls lightning at you, but it just grazes you"]>>\
<<set $Mon.att[2] to ["magic", 1, _DunLev, (50 + _DunLev), "hurls a frost bolt at you", "hurls a frost bolt at you, but misses", "hurls a frost bolt at you, but it just grazes you"]>>\
<<set $Mon.att[3] to ["heal", 1, _DunLev, 100, "heals herself ", "Can't miss heals", "Can't absorb heals"]>>\
<<else>>
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<if random(1,2) is 1>>\
<<set $Mon.virgin to "a hermaphrodite human adventurer">>
<<set $Mon.pussy to true>>
<<else>>\
<<set $Mon.virgin to "a crossdressing human adventurer">>
<<set $Mon.pussy to false>>
<<endif>>\
<<set $Mon.pic to "humanH.jpg">>
<<set $Mon.desc to "A somewhat sexually ambiguous human adventurer. Though small, those are clearly breasts. But the broad shoulders and visible adam's apple lead you to suspect that there's probably a bulge in those pants.">>
<<set $Mon.MeatSemenMilk to [106,206,306]>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "cuts you with his sword", "swings his sword at you, but misses", "barely nicks you with his sword"]>>\
<<endif>>
<<elseif _whichmon is "minotaur">>\
<<set $Mon.name to "minotaur">>
<<set $Mon.morph to "minotaur">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "minotaurM.png">>
<<set $Mon.virgin to "a minotaur">>
<<set $Mon.desc to "Describe male minotaur.">>
<<set $Mon.MeatSemenMilk to [112,212,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "minotaurF.png">>
<<set $Mon.virgin to "a female minotaur">>
<<set $Mon.desc to "Describe female minotaur.">>
<<set $Mon.MeatSemenMilk to [112,-1,312]>>
<<else>>
<<set $Mon.pic to "minotaurH.png">>
<<set $Mon.virgin to "a minotaur hermaphrodite">>
<<set $Mon.desc to "Describe h minotaur.">>
<<set $Mon.MeatSemenMilk to [112,212,312]>>
<<endif>>
<<set $Mon.hpcur to 10 + (10 * _DunLev)>>
<<set $Mon.hpmax to 10 + (10 * _DunLev)>>
<<set $Mon.armor to 50 + (5 * _DunLev)>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "imp">>\
<<set $Mon.name to "imp">>
<<set $Mon.morph to "imp">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "impM.png">>
<<set $Mon.virgin to "a small imp">>
<<set $Mon.desc to "Describe male imp.">>
<<set $Mon.MeatSemenMilk to [110,210,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "impF.png">>
<<set $Mon.virgin to "a small imp">>
<<set $Mon.desc to "Describe female imp.">>
<<set $Mon.MeatSemenMilk to [110,-3,310]>>
<<else>>
<<set $Mon.pic to "impH.png">>
<<set $Mon.virgin to "a small imp">>
<<set $Mon.desc to "Describe h imp.">>
<<set $Mon.MeatSemenMilk to [110,210,310]>>
<<endif>>
<<set $Mon.hpcur to 10 + (2 * _DunLev)>>
<<set $Mon.hpmax to 10 + (2 * _DunLev)>>
<<set $Mon.armor to 20 + (5 * _DunLev)>>
<<set $Mon.magres to (5 * _DunLev)>>
<<set $Mon.resistflirt to 0>>
<<set $Mon.chase to 40>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "hellhound">>\
<<set $Mon.name to "hellhound">>
<<set $Mon.morph to "hellhound">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "houndM.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe male hellhound.">>
<<set $Mon.MeatSemenMilk to [111,211,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "houndF.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe female hellhound.">>
<<set $Mon.MeatSemenMilk to [111,-1,311]>>
<<else>>
<<set $Mon.pic to "houndH.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe h hellhound.">>
<<set $Mon.MeatSemenMilk to [111,211,311]>>
<<endif>>
<<set $Mon.hpcur to 50 + (5 * _DunLev)>>
<<set $Mon.hpmax to 50 + (5 * _DunLev)>>
<<set $Mon.armor to 50 + (5 * _DunLev)>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.resistflirt to 100>>
<<set $Mon.chase to 100>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to 0>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "drider">>\
<<set $Mon.name to "drider">>
<<set $Mon.morph to "drider">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "driderM.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.desc to "Describe male drider.">>
<<set $Mon.MeatSemenMilk to [113,213,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "driderF.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.desc to "Describe female drider.">>
<<set $Mon.MeatSemenMilk to [113,-1,313]>>
<<else>>
<<set $Mon.pic to "driderH.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.MeatSemenMilk to [113,213,313]>>
<<endif>>
<<set $Mon.hpcur to 50 + (5 * _DunLev)>>
<<set $Mon.hpmax to 50 + (5 * _DunLev)>>
<<set $Mon.armor to 50 + (5 * _DunLev)>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.resistflirt to 50>>
<<set $Mon.chase to 1>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1, _DunLev)>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "demon">>\
<<set $Mon.name to "demon">>
<<set $Mon.morph to "demon">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "demonM.png">>
<<set $Mon.virgin to "an incubus">>
<<set $Mon.desc to "Describe male demon.">>
<<set $Mon.MeatSemenMilk to [115,215,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "demonF.png">>
<<set $Mon.virgin to "a succubus">>
<<set $Mon.desc to "Describe female demon.">>
<<set $Mon.MeatSemenMilk to [115,-1,315]>>
<<else>>
<<set $Mon.pic to "demonH.png">>
<<set $Mon.virgin to "an omnibus">>
<<set $Mon.desc to "Describe h demon.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<endif>>
<<set $Mon.hpcur to 50 + (5 * _DunLev)>>
<<set $Mon.hpmax to 50 + (5 * _DunLev)>>
<<set $Mon.armor to 50 + (5 * _DunLev)>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.resistflirt to 50>>
<<set $Mon.chase to 1>>
<<set $Mon.arpen to 1>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to random(1, _DunLev)>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "tentacle">>\
<<set $Mon.name to "tentacle">>
<<set $Mon.morph to "tentacle">>
<<set $Mon.sex to "male">>
<<set $Mon.pic to "tentacleM.png">>
<<set $Mon.virgin to "a tentacle monster">>
<<set $Mon.desc to "Describe tentacle monster.">>
<<set $Mon.MeatSemenMilk to [-1,-1,-1]>>
<<set $Mon.hpcur to 10 + _DunLev>>
<<set $Mon.hpmax to 10 + _DunLev>>
<<set $Mon.armor to 20 + _DunLev>>
<<set $Mon.magres to 0>>
<<set $Mon.resistflirt to 50>>
<<set $Mon.chase to 1>>
<<set $Mon.arpen to 0>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to 0>>
<<set $Mon.xp to _DunLev +2>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [114,214,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, _DunLev, (50 + _DunLev), "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, (5 +_multi), (50 + _DunLev), "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "Boss A">>\
<<set $Mon.name to "Zetahlia, the Spider Queen">>
<<set $Mon.morph to "drider">>
<<set $Mon.sex to "female">>
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "BossA.png">>
<<set $Mon.virgin to "Zetahlia, the Spider Queen">>
<<set $Mon.desc to "A cute anime waifu with glowing eyes from the waist up, and a horrible, hideous spider from the waist down. Swinging a massive flail in one hand and carrying a sword in the other, she eyes you with interest.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<set $Mon.hpcur to 100>>
<<set $Mon.hpmax to 100>>
<<set $Mon.armor to 100>>
<<set $Mon.magres to 10>>
<<set $Mon.resistflirt to 50>>
<<set $Mon.chase to 1>>
<<set $Mon.arpen to 5>>
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<<set $Mon.gold to 100>>
<<set $Mon.xp to 50>>
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<<set $Mon.att[0] to ["physical", 1, 10, 80, "stabs you you", "stabs at you, but misses", "stabs you, but somehow you deflect the hit"]>>\
<<set $Mon.att[1] to ["physical", 1, 10, 80, "smashes you with her flail", "swings at you, but misses", "smashes you with her flail, but it is a glancing blow"]>>\
<<set $Mon.att[2] to ["flirt", 5, 10, 80, "sprays pheromones at you", "sprays pheromones at you, but you resist", "sprays pheromones at you, but you resist"]>>\
<<set $Mon.att[3] to ["debuffAC", 1, 4, 50, "sprays you with webbing that makes it harder to move", "sprays webbing at you, but you evade", "sprays webbing on you, but you quickly brush it off"]>>\
<<set $Mon.att[4] to ["debuffPOISON", 1, 1, 50, "sprays a cloud of poison aroudn you", "sprays a cloud of poison, but you dodge", "sprays a cloud of poison around you, but you avoid the worst of it"]>>\
<<else>>\
<<AddToLog "Error in GetMon: unrecognized monster requested">>\
<<endif>>\
<</silently>>\
<</widget>>\
<<widget "SetStandardMale">>\
<<set $Mon.penis to true>>\
<<set $Mon.pussy to false>>\
<<set $Mon.boobs to false>>\
<<set $Mon.heshe to "he">>\
<<set $Mon.himher to "him">>\
<<set $Mon.hisher to "his">>\
<</widget>>\
<<widget "SetStandardFemale">>\
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<<set $Mon.pic to "goblinF.png">>
<</widget>>\
<<widget "SetStandardHermaphrodite">>\
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<</widget>>\
<<widget "GetMon">>\
\
<<set _DunLev to $PC[$CC][$PCz]>>
<<if $PC[$CC][$PClocation] is "forest">>
<<set _DunLev to $PC[$CC][$PCfz]>>
<<endif>>\
<<if _DunLev < 0>>
@@color:Red;Error in GetMon: _DunLev is negative@@
<<set _DunLev to _DunLev * -1>>
<<endif>>
\
<!-- sex selector -->
<<set $Mon to {}>>
<<set $Mon.sex to "female">>
<<if $PC[$CC][$PCsex] is "female">>\
<<if random(1,10) < 8>>
<<set $Mon.sex to "male">>
<<endif>>\
<<endif>>
<<set _whichmon to setup.GetMonByDLEV($PC[$CC][$PCz])>>\
\
<<if $ForceMon[0] is "random">>
<<else>>
<<set _whichmon to $ForceMon[0]>>
<<endif>>
<<if ($ForceMon[1] neq "random")>>
<<set $Mon.sex to $ForceMon[1]>>
<<else>>
<<set $Mon.sex to setup.GetStandardSex()>>
<<endif>>
<!-- NOTE: some monsters ovveride specific parts and pronouns -->
<<if $Mon.sex is "male">>
<<SetStandardMale>>
<<elseif $Mon.sex is "female">>
<<SetStandardFemale>>
<<else>>\
<<SetStandardHermaphrodite>>
<<endif>>
<!-- end sex selector -->
\
<!-- override for testing -->
<<if (1 is 1)>>\
<<set _whichmon to "fox">>\
<<endif>>\
\
<!-- Baseline values -->
<<if $PC[$CC][$PClocation] is "forest">>
<<set _BaseToHit to 1>>
<<set _BaseMaxDam to 1>>
<<set _BaseFlirtTH to 1>>
<<set _BaseFlirtDam to 1>>
<<set _BaseFlirtResist to 1>>
<<set _BaseArmor to 1>>
<<set _BaseHealth to 1>>
<<set $Mon.xp to 1>>
<<elseif $PC[$CC][$PClocation] is "tower">>
<<set _BaseToHit to 1>>
<<set _BaseMaxDam to 1>>
<<set _BaseFlirtTH to 1>>
<<set _BaseFlirtDam to 1>>
<<set _BaseFlirtResist to 1>>
<<set _BaseArmor to 1>>
<<set _BaseHealth to 1>>
<<set $Mon.xp to 1>>
<<else>>\
<!-- defaulting to forest -->\
<<set _BaseToHit to 1>>
<<set _BaseMaxDam to 1>>
<<set _BaseFlirtTH to 1>>
<<set _BaseFlirtDam to 1>>
<<set _BaseFlirtResist to 1>>
<<set _BaseArmor to 1>>
<<set _BaseHealth to 1>>
<<endif>>\
<!-- BEGIN BOILERPLATE -->
<<set $Mon.level to _DunLev>>
<!-- clear debuffs -->
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<!--reset arrays
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<!-- only a few monsters have these different from baseline -->
<<set $Mon.arpen to 0>>
<!-- some monsters might adjust these from baseline -->
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.hpcur to _BaseHealth>>
<<set $Mon.hpmax to _BaseHealth>>
<<set $Mon.armor to _BaseArmor>>
<<set $Mon.magres to 0>>
<!-- END BOILERPLATE -->
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "fox">>
<<set $Mon.morph to "fox">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "foxM.png">>
<<set $Mon.virgin to "a fox-man">>
<<set $Mon.desc to "An anthropomorphic fox-man with a green dick. A dick that he's already stroking as he looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "strokes himself and invites you to take over", "strokes himself, but you ignore it", "strokes himself, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "foxF.jpg">>
<<set $Mon.virgin to "a fox-girl">>
<<set $Mon.desc to "An attractive fox-girl covered in a thin layer of brown fur. Her tail twitches occasionally as she looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slashes at you with her claws", "slashes at you, but misses", "slashes you with her claws, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,-1,302]>>
<<else>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "foxH.png">>
<<set $Mon.virgin to "an effeminate fox-boy">>
<<set $Mon.desc to "An effeminate fox-boy with a suspicious bulge in his panties. ">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "rubs his bulge and winks suggestively", "rubs his bulge and winks at you, but you ignore it", "rubs his bulge and winks at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,302]>>
<<endif>>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<</widget>>\
<<widget "SetStandardMale">>\
<<set $Mon.penis to true>>\
<<set $Mon.pussy to false>>\
<<set $Mon.boobs to false>>\
<<set $Mon.heshe to "he">>\
<<set $Mon.himher to "him">>\
<<set $Mon.hisher to "his">>\
<</widget>>\
<<widget "SetStandardFemale">>\
<<set $Mon.penis to false>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<</widget>>\
<<widget "SetStandardHermaphrodite">>\
<<set $Mon.penis to true>>
<<set $Mon.pussy to true>>
<<set $Mon.boobs to true>>
<<set $Mon.heshe to "she">>
<<set $Mon.himher to "her">>
<<set $Mon.hisher to "her">>
<</widget>>\
<<widget "GetMon">>\
<<silently>>\
\
<<set _DunLev to $PC[$CC][$PCz]>>
<<if $PC[$CC][$PClocation] is "forest">>
<<set _DunLev to $PC[$CC][$PCfz]>>
<<endif>>\
<<if _DunLev < 0>>
@@color:Red;Error in GetMon: _DunLev is negative@@
<<set _DunLev to _DunLev * -1>>
<<endif>>
\
<!-- sex selector -->
<<set $Mon to {}>>
<<set $Mon.sex to "female">>
<<if $PC[$CC][$PCsex] is "female">>\
<<if random(1,10) < 8>>
<<set $Mon.sex to "male">>
<<endif>>\
<<endif>>
<<set _whichmon to setup.GetMonByDLEV($PC[$CC][$PCz])>>\
\
<<if $ForceMon[0] is "random">>
<<else>>
<<set _whichmon to $ForceMon[0]>>
<<endif>>
<<if ($ForceMon[1] neq "random")>>
<<set $Mon.sex to $ForceMon[1]>>
<<else>>
<<set $Mon.sex to setup.GetStandardSex()>>
<<endif>>
<!-- NOTE: some monsters ovveride specific parts and pronouns -->
<<if $Mon.sex is "male">>
<<SetStandardMale>>
<<elseif $Mon.sex is "female">>
<<SetStandardFemale>>
<<else>>\
<<SetStandardHermaphrodite>>
<<endif>>
<!-- end sex selector -->
\
<!-- override for testing -->
<<if (0 is 1)>>\
<<set _whichmon to "fox">>\
<<endif>>\
\
<!-- Baseline values -->
<<if $PC[$CC][$PClocation] is "forest">>
<<set _BaseToHit to _DunLev * 10>>
<<set _BaseMaxDam to 4 + _DunLev>>
<<set _BaseFlirtTH to _DunLev * 2>>
<<set _BaseFlirtDam to _DunLev>>
<<set _BaseFlirtResist to _DunLev +5>>
<<set _BaseArmor to 40 + (_DunLev * 10)>>
<<set _BaseHealth to 10 + (_DunLev * 10)>>
<<set $Mon.xp to _DunLev>>
<<elseif $PC[$CC][$PClocation] is "tower">>
<<set _BaseToHit to _DunLev * 50>>
<<set _BaseMaxDam to _DunLev 5 + ((_DunLev -1) * 5)>>
<<set _BaseFlirtTH to 6 + (_DunLev * 10)>>
<<set _BaseFlirtDam to 1 + (_DunLev * 5)>>
<<set _BaseFlirtResist to _DunLev +5>>
<<set _BaseArmor to (_DunLev * 50)>>
<<set _BaseHealth to 10 + (_DunLev * 10)>>
<<set $Mon.xp to _DunLev +2>>
<<else>>\
<!-- defaulting to forest -->\
<<set _BaseToHit to _DunLev * 10>>
<<set _BaseMaxDam to 4 + _DunLev>>
<<set _BaseFlirtTH to _DunLev * 2>>
<<set _BaseFlirtDam to _DunLev>>
<<set _BaseFlirtResist to _DunLev +5>>
<<set _BaseArmor to 40 + (_DunLev * 10)>>
<<set _BaseHealth to 10 + (_DunLev * 10)>>
<<endif>>\
<!-- BEGIN BOILERPLATE -->
<<set $Mon.level to _DunLev>>
<!-- clear debuffs -->
<<set $Mon.thbuff to 0>>
<<set $Mon.teased to 0>>
<<set $Mon.poisoned to 0>>
<!--reset arrays -->
<<set $Mon.loot to []>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [0,0,0,0]>>
<<set $Mon.att to []>>
<!-- only a few monsters have these different from baseline -->
<<set $Mon.arpen to 0>>
<!-- some monsters might adjust these from baseline -->
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.hpcur to _BaseHealth>>
<<set $Mon.hpmax to _BaseHealth>>
<<set $Mon.armor to _BaseArmor>>
<<set $Mon.magres to 0>>
<!-- END BOILERPLATE -->
\
<<if _whichmon is "goblin">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "goblin">>
<<set $Mon.morph to "goblin">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "goblinM.png">>
<<set $Mon.virgin to "a male goblin">>
<<set $Mon.desc to "A fairly typical male goblin. Short, horny, angry, ready to rape and beat anyone into submission. Not neccesarily in that order.">>
<<set $Mon.MeatSemenMilk to [107,207,-1]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "takes a swing at you but misses", "hits you, but you shrug off the attack"]>>\
<<set $Mon.att[1] to ["physical", 1, _BaseMaxDam, _BaseToHit, "whacks you with his club", "swings at you but misses", "whacks you with his club, but the blow glances off you"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "grins and licks his lips at you eagerly", "leers at you", "grins at you, but you're not impressed"]>>\
<<elseif $Mon.sex is "female">>
<<set $Mon.virgin to "a female goblin">>
<<if $PC[$CC][$PCsex] is "female">>\
<<set $Mon.desc to "A short goblin with huge sexy tits. She's giving you a half-aroused, half-furious stare. You suspect she's envious of your height, but simultaneously turned on by it, and struggling to find a happy medium between angry and horny.">>
<<set $Mon.MeatSemenMilk to [107,-1,307]>>
<<else>>
<<set $Mon.desc to "A short goblin with huge sexy tits, if you're into that kind of thing. And from the look she's giving you, you suspect she'd love for you to be into it. Or her, for that matter.">>
<<endif>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "whacks you with one of her boobs", "swings her boobs at you but fails to connect", "whacks you with her boobs but it doesn't hurt much"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "sticks a finger in her pussy then licks it", "tries to call attention to her pussy but fails", "fondles herself to try to distract you, but you ignore it"]>>\
<<set $Mon.att[2] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "pulls a breast to her lips and licks its", "reaches for her chest but slips", "fondles herself to try to distract you, but you ignore it"]>>\
<<else>>
<<set $Mon.pic to "goblinH.png">>
<<SetStandardMale>>
<<if random(1,2) is 1>>\
<<set $Mon.virgin to "a goblin hermaphrodite">>
<<set $Mon.pussy to true>>
<<else>>\
<<set $Mon.virgin to "a goblin crossdresser">>
<<set $Mon.pussy to false>>
<<endif>>\
<<set $Mon.desc to "A somewhat sexually ambiguous goblin. He clearly has a dick, but he's unusually feminine for a male goblin, and you're not entirely sure whether that hole he's leering at you with is a pussy, or just his ass hole.">>
<<set $Mon.MeatSemenMilk to [107,207,307]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "takes a swipe at you but misses", "hits you, but you shrug off the attack"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "stokes himself and invites you to take over", "strokes himself, but fails to distract you", "strokes himself, but you ignore it"]>>\
<<endif>>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 25>>
<<set $Mon.gold to random(4,20)>>
<<set $Mon.loot[0] to either(true, false)>>
<<set $Mon.loot[1] to [103,0,0,0]>><!-- dildo -->\
<<if _DunLev > 4>>
<<set $Mon.att[2] to ["flirt", 2, _BaseFlirtDam, _BaseFlirtTH, "throws a vial full of sweet-smelling pink liquid on you", "throws a vial of pink liquid at you, but you dodge", "throws pink liquid on you, but you quickly brush it off"]>>\
<<set $Mon.loot[1] to [109,0,1,404]>>\
<<endif>>
<<elseif _whichmon is "slime">>\
<<set $Mon.name to "slime">>
<<set $Mon.morph to "slime">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "slimeM.png">>
<<set $Mon.virgin to "a slime man">>
<<set $Mon.desc to "A large, powerfully built man of slime. At least, he looks powerful. You're not entirely sure just how strong something made of slime can be, but he certainly looks the part. His cock is visibly dripping some sort of fluid, and you can't help but wonder whether that's actually semen, or whether it's simply his insides leaking out. Goo physiology is a little odd.">>
<<set $Mon.MeatSemenMilk to [400,400,400]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "slimeF.png">>
<<set $Mon.virgin to "a slime girl">>
<<set $Mon.desc to "A lithe and lovely slime girl. Ironically, being made of goo probably makes it easy for her to maintain her figure. If she gains weight, she can simply bulge it out into whatever direction she wants. From the size of her breasts, you imagine she must eat well.">>
<<set $Mon.MeatSemenMilk to [400,400,400]>>
<<else>>
<<set $Mon.MeatSemenMilk to [400,400,400]>>
<<set $Mon.virgin to "a slime">>
<<if random(1,1) is 1>>
<<set $Mon.pic to "slimeHa.png">>
<<set $Mon.desc to "A slime sporting a variety of parts that make its gender and species a bit ambiguious. The huge cock pointed at you is clear enough, but she's also sporting hips big enuogh to give birth to a basketball and some admittedly small, but unmistakable breasts. And also slime cat ears, a slime tail, and what looks like a slime dog's nose...because why not? After all, when you can shape your body into anything you want, why not flaunt it?">>
<<else>>
<<set $Mon.pic to "slimeHb.png">>
<<set $Mon.desc to "Implement slime Hb">>
<<endif>>
<<endif>>
<<set $Mon.resistflirt to _BaseFlirtResist +2>>
<<set $Mon.chase to 40>>
<!-- override values -->
<<set $Mon.arpen to 1>>
<<set $Mon.gold to random(4,20)>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "extends a tendril in your direction, but misses", "hits you with a tendril, but it squishes on impact"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "shifts its body around to be more to your liking", "tries to shift its body around", "shifts its body around, but the result is not an improvement"]>>\
<<set $Mon.att[2] to ["debuffAC", 1, (1 + _DunLev), (50 + _DunLev), "grabs onto your clothes with a tendril and dislodges them slightly", "tries to grab you, but you evade", "grabs your clothing with a tendril, but you hastily bat it aside "]>>\
<<set $Mon.att[3] to ["debuffPOISON", 1, 1, 50 + _BaseToHit, "stabs you with a tendril that spurts some fluid into you", "pokes at you ineffectually with a tendril", "poke you with a tendril, but you grab it before it can do anything"]>>\
<<elseif _whichmon is "bunny">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "bunny">>
<<set $Mon.morph to "bunny">>
<<if $Mon.sex is "male">>
<<set $Mon.virgin to "a bunny boy">>
<<set $Mon.pic to "bunnyM.png">>
<<set $Mon.desc to "Hopping around on his hands and knees, you suspect this bunny boy's chosen form of locomotion doubles both for sexual purposes, as well as simply to help him stay in character.">>
<<set $Mon.MeatSemenMilk to [100,200,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "bunnyF.png">>
<<set $Mon.virgin to "a bunny girl">>
<<set $Mon.desc to "With tits nearly as big as her head, this bunny girl giggles happiliy as she comes at you with a look in her eyes that you're not entirely sure is lethal or lustful intent.">>
<<set $Mon.MeatSemenMilk to [100,-1,300]>>
<<else>>
<<set $Mon.pic to "bunnyH.png">>
<<set $Mon.virgin to "a futa bunny dickgirl">>
<<set $Mon.desc to "With a cock even more masive than her humongous breasts, her eyes glisten as she eyes up and down your torso, eventually settling on a spot between your legs she finds especially interesting. 'Bend over for me, dear,' she whispers as she strokes her cock.">>
<<set $Mon.MeatSemenMilk to [100,200,300]>>
<<endif>>
<<set $Mon.resistflirt to _BaseFlirtResist -2>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "cat">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "cat">>
<<set $Mon.morph to "cat">>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<if $Mon.sex is "male">>
<<set $Mon.pic to "catM.png">>
<<set $Mon.virgin to "a manly cat man">>
<<set $Mon.desc to "A powerfully built muscle-man with cat ears and tail. The way he looks at you makes it clear that he's used to getting his way, and if you're not careful, his way is going to be with you. Though whether sexually, or simply dragging you to the gym with him is unclear.">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "points suggestively at his barbed cock", "points at his cock, but the barbs are far from a turn-in", "points at his cock, but the barbs are far from a turn-in"]>>\
<<set $Mon.MeatSemenMilk to [101,201,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "catF.png">>
<<set $Mon.virgin to "a buxom catgirl">>
<<set $Mon.desc to "A buxom catgirl wih huge breasts and child-bearing hips looks at you with an air of casual indifference that belies the insistence of her attacks. Still, she would almost be cute if she weren't trying to murder you. Or is she? From one moment to the next, it's hard to tell.">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "demurely insists that it's not like she likes you or anything", "insists that she doesn't like you, but her expression keeps it from sounding ironic", "insists that she doesn't like you, but you shrug it off"]>>\
<<set $Mon.MeatSemenMilk to [101,-1,301]>>
<<else>>
<<set $Mon.pic to "catH.png">>
<<set $Mon.virgin to "a futa catgirl">>
<<set $Mon.desc to "A catgirl futa with plump breasts and an erect cock already dribbling with pre-cum. Seeing the light-teal of her pubic hair and mane, you can't help but notice that the carpet does match the drapes.">>
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "squeezes her boobs together and invites you to do the same", "squeezes a boob with one hand and strokes her cock with the other", "gropes herself, but is too distracted by her own body for it to really be called flirtatious"]>>\
<<set $Mon.MeatSemenMilk to [101,201,301]>>
<<endif>>
<<elseif _whichmon is "fox">>\
<<set $Mon.SexDialogueVersion to 2>>
<<set $Mon.name to "fox">>
<<set $Mon.morph to "fox">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "foxM.png">>
<<set $Mon.virgin to "a fox-man">>
<<set $Mon.desc to "An anthropomorphic fox-man with a green dick. A dick that he's already stroking as he looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "strokes himself and invites you to take over", "strokes himself, but you ignore it", "strokes himself, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "foxF.jpg">>
<<set $Mon.virgin to "a fox-girl">>
<<set $Mon.desc to "An attractive fox-girl covered in a thin layer of brown fur. Her tail twitches occasionally as she looks at you.">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "slashes at you with her claws", "slashes at you, but misses", "slashes you with her claws, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,-1,302]>>
<<else>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<set $Mon.pic to "foxH.png">>
<<set $Mon.virgin to "an effeminate fox-boy">>
<<set $Mon.desc to "An effeminate fox-boy with a suspicious bulge in his panties. ">>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "rubs his bulge and winks suggestively", "rubs his bulge and winks at you, but you ignore it", "rubs his bulge and winks at you, but you ignore it"]>>\
<<set $Mon.MeatSemenMilk to [102,202,302]>>
<<endif>>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<elseif _whichmon is "wolf">>\
<<set $Mon.name to "wolf">>
<<set $Mon.morph to "wolf">>
<<set $Mon.sex to "male">>
<<SetStandardMale>>
<!-- probably need to at least at wolf girls, yeah? -->
<<set $Mon.pic to "wolfM.png">>
<<set $Mon.virgin to "a burly wolf-man">>
<<set $Mon.MeatSemenMilk to [103,203,-1]>>
<<set $Mon.desc to "A burly wolf-man with a thick, meaty cock he'd like to share with you.">>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "bites you", "snaps at you with his jaws, but misses", "bites you, but fails to pierce your flesh"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "points suggestively at his erection", "pumps his cock a few times, but you ignore it", "pumps his cock a few times, but you ignore it"]>>\
<<elseif _whichmon is "human">>\
<<set $Mon.name to "adventurer">>
<<set $Mon.morph to "human">>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "humanM.png">>
<<set $Mon.virgin to "a human swordsman">>
<<set $Mon.desc to "An adventurer like yourself, climbing the tower in search of treasure and glory. This one appears to be a swordsman.">>
<<set $Mon.MeatSemenMilk to [106,206,-1]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "cuts you with his sword", "swings his sword at you, but misses", "barely nicks you with his sword"]>>\
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "humanF.jpg">>
<<set $Mon.magres to 1>>
<<set $Mon.virgin to "a human sorceress">>
<<set $Mon.desc to "An adventurer like yourself, climbing the tower in search of treasure and glory. This one appears to be a spellcaster.">>
<<set $Mon.MeatSemenMilk to [106,-1,306]>>
<<set $Mon.att[0] to ["magic", 1, _DunLev, _BaseToHit, "hurls a fireball at you", "hurls a fireball at you, but misses", "hurls a fireball at you, but it just grazes you"]>>\
<<set $Mon.att[1] to ["magic", 1, _DunLev, _BaseToHit, "hurls a bolt of lightning at you", "hurls lightning at you, but misses", "hurls lightning at you, but it just grazes you"]>>\
<<set $Mon.att[2] to ["magic", 1, _DunLev, _BaseToHit, "hurls a frost bolt at you", "hurls a frost bolt at you, but misses", "hurls a frost bolt at you, but it just grazes you"]>>\
<<set $Mon.att[3] to ["heal", 1, _DunLev, 100, "heals herself ", "Can't miss heals", "Can't absorb heals"]>>\
<<else>>
<<set $Mon.heshe to "he">>
<<set $Mon.himher to "him">>
<<set $Mon.hisher to "his">>
<<if random(1,2) is 1>>\
<<set $Mon.virgin to "a hermaphrodite human adventurer">>
<<set $Mon.pussy to true>>
<<else>>\
<<set $Mon.virgin to "a crossdressing human adventurer">>
<<set $Mon.pussy to false>>
<<endif>>\
<<set $Mon.pic to "humanH.jpg">>
<<set $Mon.desc to "A somewhat sexually ambiguous human adventurer. Though small, those are clearly breasts. But the broad shoulders and visible adam's apple lead you to suspect that there's probably a bulge in those pants.">>
<<set $Mon.MeatSemenMilk to [106,206,306]>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "cuts you with his sword", "swings his sword at you, but misses", "barely nicks you with his sword"]>>\
<<endif>>
<<elseif _whichmon is "minotaur">>\
<<set $Mon.name to "minotaur">>
<<set $Mon.morph to "minotaur">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "minotaurM.png">>
<<set $Mon.virgin to "a minotaur">>
<<set $Mon.desc to "Describe male minotaur.">>
<<set $Mon.MeatSemenMilk to [112,212,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "minotaurF.png">>
<<set $Mon.virgin to "a female minotaur">>
<<set $Mon.desc to "Describe female minotaur.">>
<<set $Mon.MeatSemenMilk to [112,-1,312]>>
<<else>>
<<set $Mon.pic to "minotaurH.png">>
<<set $Mon.virgin to "a minotaur hermaphrodite">>
<<set $Mon.desc to "Describe h minotaur.">>
<<set $Mon.MeatSemenMilk to [112,212,312]>>
<<endif>>
<<set $Mon.hpcur to $Mon.hpcur +10>>
<<set $Mon.hpmax to $Mon.hpcur +10>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "imp">>\
<<set $Mon.name to "imp">>
<<set $Mon.morph to "imp">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "impM.png">>
<<set $Mon.virgin to "a small imp">>
<<set $Mon.desc to "Describe male imp.">>
<<set $Mon.MeatSemenMilk to [110,210,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "impF.png">>
<<set $Mon.virgin to "a small imp">>
<<set $Mon.desc to "Describe female imp.">>
<<set $Mon.MeatSemenMilk to [110,-3,310]>>
<<else>>
<<set $Mon.pic to "impH.png">>
<<set $Mon.virgin to "a small imp">>
<<set $Mon.desc to "Describe h imp.">>
<<set $Mon.MeatSemenMilk to [110,210,310]>>
<<endif>>
<<set $Mon.armor to _BaseArmor -10>>
<<set $Mon.magres to _DunLev)>>
<<set $Mon.resistflirt to _BaseFlirtResist -2>>
<<set $Mon.chase to 40>>
<<set $Mon.gold to random(1,5) + _DunLev>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "hellhound">>\
<<set $Mon.name to "hellhound">>
<<set $Mon.morph to "hellhound">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "houndM.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe male hellhound.">>
<<set $Mon.MeatSemenMilk to [111,211,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "houndF.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe female hellhound.">>
<<set $Mon.MeatSemenMilk to [111,-1,311]>>
<<else>>
<<set $Mon.heshe to "he">>\
<<set $Mon.himher to "him">>\
<<set $Mon.hisher to "his">>\
<<set $Mon.pic to "houndH.png">>
<<set $Mon.virgin to "a hellhound">>
<<set $Mon.desc to "Describe h hellhound.">>
<<set $Mon.MeatSemenMilk to [111,211,311]>>
<<endif>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.resistflirt to _BaseFlirtResist +2>>
<<set $Mon.chase to 100>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "drider">>\
<<set $Mon.name to "drider">>
<<set $Mon.morph to "drider">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "driderM.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.desc to "Describe male drider.">>
<<set $Mon.MeatSemenMilk to [113,213,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "driderF.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.desc to "Describe female drider.">>
<<set $Mon.MeatSemenMilk to [113,-1,313]>>
<<else>>
<<set $Mon.pic to "driderH.png">>
<<set $Mon.virgin to "a drider">>
<<set $Mon.MeatSemenMilk to [113,213,313]>>
<<endif>>
<<set $Mon.resistflirt to _BaseFlirtResist>>
<<set $Mon.chase to 1>>
<<set $Mon.gold to random(1, _DunLev)>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "demon">>\
<<set $Mon.name to "demon">>
<<set $Mon.morph to "demon">>
<<if $Mon.sex is "male">>
<<set $Mon.pic to "demonM.png">>
<<set $Mon.virgin to "an incubus">>
<<set $Mon.desc to "Describe male demon.">>
<<set $Mon.MeatSemenMilk to [115,215,-1]>>
<<elseif $Mon.sex is "female">>
<<set $Mon.pic to "demonF.png">>
<<set $Mon.virgin to "a succubus">>
<<set $Mon.desc to "Describe female demon.">>
<<set $Mon.MeatSemenMilk to [115,-1,315]>>
<<else>>
<<set $Mon.pic to "demonH.png">>
<<set $Mon.virgin to "an omnibus">>
<<set $Mon.desc to "Describe h demon.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<endif>>
<<set $Mon.armor to _BaseArmor +10>>
<<set $Mon.magres to _DunLev>>
<<set $Mon.resistflirt to _BaseFlirtResist +5>>
<<set $Mon.chase to 1>>
<!- override values -->
<<set $Mon.arpen to 1>>
<<set $Mon.gold to random(1, _DunLev)>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "tentacle">>\
<<set $Mon.name to "tentacle">>
<<set $Mon.morph to "tentacle">>
<<set $Mon.sex to "male">>
<<set $Mon.penis to true>>
<<set $Mon.pussy to false>>
<<set $Mon.boobs to false>>
<<set $Mon.heshe to "it">>
<<set $Mon.himher to "it">>
<<set $Mon.hisher to "its">>
<<set $Mon.pic to "tentacleM.png">>
<<set $Mon.virgin to "a tentacle monster">>
<<set $Mon.desc to "Describe tentacle monster.">>
<<set $Mon.MeatSemenMilk to [-1,-1,-1]>>
<<set $Mon.armor to _BaseArmor -10>>
<<set $Mon.resistflirt to _BaseFlirtResist +5>>
<<set $Mon.chase to 1>>
<<set $Mon.gold to 0>>
<<set $Mon.att[0] to ["physical", 1, _BaseMaxDam, _BaseToHit, "hits you", "swats at you, but misses", "swats at you, but it ends up being more affectionate than painful"]>>\
<<set $Mon.att[1] to ["flirt", 1, _BaseFlirtDam, _BaseFlirtTH, "smiles at you and winks suggestively", "smiles at you, but you ignore it", "smiles at you, but you ignore it"]>>\
<<elseif _whichmon is "Boss A">>\
<<set $Mon.name to "Zetahlia, the Spider Queen">>
<<set $Mon.morph to "drider">>
<<set $Mon.sex to "female">>
<<SetStandardFemale>>
<<set $Mon.pic to "BossA.png">>
<<set $Mon.virgin to "Zetahlia, the Spider Queen">>
<<set $Mon.desc to "A cute anime waifu with glowing eyes from the waist up, and a horrible, hideous spider from the waist down. Swinging a massive flail in one hand and carrying a sword in the other, she eyes you with interest.">>
<<set $Mon.MeatSemenMilk to [115,215,315]>>
<<set $Mon.hpcur to 100>>
<<set $Mon.hpmax to 100>>
<<set $Mon.armor to _BaseArmor>>
<<set $Mon.magres to 10>>
<<set $Mon.resistflirt to (_BaseFlirtResist * 2)>>
<<set $Mon.chase to 1>>
<<set $Mon.arpen to 5>>
<<set $Mon.gold to 100>>
<<set $Mon.xp to 50>>
<<set $Mon.loot[0] to false>>
<<set $Mon.loot[1] to [206,105,0,0]>>
<<set $Mon.att[0] to ["physical", 5, 10, 80, "stabs you you", "stabs at you, but misses", "stabs you, but somehow you deflect the hit"]>>\
<<set $Mon.att[1] to ["physical", 5, 10, 80, "smashes you with her flail", "swings at you, but misses", "smashes you with her flail, but it is a glancing blow"]>>\
<<set $Mon.att[2] to ["flirt", 5, 10, 80, "sprays pheromones at you", "sprays pheromones at you, but you resist", "sprays pheromones at you, but you resist"]>>\
<<set $Mon.att[3] to ["debuffAC", 1, 4, 50, "sprays you with webbing that makes it harder to move", "sprays webbing at you, but you evade", "sprays webbing on you, but you quickly brush it off"]>>\
<<set $Mon.att[4] to ["debuffPOISON", 1, 1, 50, "sprays a cloud of poison around you", "sprays a cloud of poison, but you dodge", "sprays a cloud of poison around you, but you avoid the worst of it"]>>\
<<else>>\
<<AddToLog "Error in GetMon: unrecognized monster requested">>\
<<endif>>\
<</silently>>\
<</widget>>\
<<widget "DoTransform">>\
<<set _TFMethod to setup.Shuffle(["copy","delete","morph"])>>\
<<set _PCparts to $PC[$CC][$PCbp]>>\
\
<!-- for combat TF, invert sex parts because: -->\
<!-- sex with a male, makes you more female -->\
<!-- sex with a female, makse you more male -->\
<<set _CopyMorph to $args[0][0].morph>>\
<<if $Mon.sex is "male">>\
<<for _i to 0; _i < $args[0].length; _i++>>\
<<if $args[0][_i].type is $BPpenis>>\
<<set $args[0][_i].type to $BPpussy>>\
<<set _CopyMorph to $args[0][_i].morph>>\
<<endif>>\
<</for>>\
<<set $args[0][$args[0].length] to { type: $BPboobs, morph: _CopyMorph }>>\
<<elseif $Mon.sex is "female">>\
<<for _i to ($args[0].length -1); _i > -1; _i-->>\
<<if ($args[0][_i].type is $BPpussy)>>\
<<set $args[0][_i].type to $BPpenis>>\
<<set _CopyMorph to $args[0][_i].morph>>\
<<elseif ($args[0][_i].type is $BPboobs)>>\
<<set _throwaway to $args[0].deleteAt(_i)>>\
<<endif>>\
<</for>>\
<<else>>\
<!-- theoretically no action required? -->\
<<endif>>\
\
<<if $DebugMode is true>>\
debug source data 1:
<<set _DONORparts to clone($args[0])>>\
<<for _i to 0; _i < _DONORparts.length; _i++>>\
_i) a: <<print _DONORparts[_i].type>> b: <<print _DONORparts[_i].morph>>
<</for>>\
<hr>
<<endif>>\
\
<<for _TryAllThree to 0; _TryAllThree < 3; _TryAllThree++>>\
<<if _TFMethod[_TryAllThree] is "copy">>\
<<set _DONORparts to clone($args[0])>>\
<!-- generate list of parttype monster has that player lacks, morp will copy with it -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _DONORparts.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _PCparts.length; _j++>>\
<<if _DONORparts[_i].type is _PCparts[_j].type>>\
<<set _FoundOne to true>>\
<<endif>>\
<</for>>\
<<if _FoundOne is false>>\
<<set _TFArray[_counter] to ["gain a new", _DONORparts[_i].morph, _DONORparts[_i].type]>>\
<<set _counter to _counter +1>>\
<<endif>>\
<</for>>\
\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _Morph to _TFArray[_r][1]>>\
<<set _PartTypeToAdd to _TFArray[_r][2]>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, _PartTypeToAdd)>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].morph to _Morph>>\
<<set _MorphHack to setup.bpptrtoname(_PartTypeToAdd, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _Morph)>>\
@@color:Yellow;you have gained a _MorphHack@@\
<<TFAdderHelper _LocOfNewPart>>\
<<set _TryAllThree to 999>>\
<<else>>\
<<if $DebugMode is true>>Debug: tried to copy, but found no monster part type the player doesn't already have (not neccesarily an error)<<endif>>\
<<endif>>\
<<elseif _TFMethod[_TryAllThree] is "delete">>\
<<set _DONORparts to clone($args[0])>>\
<!-- generate list of part types player has that monster lacks, not caring about morphs -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _DONORparts.length; _j++>>\
<<if _PCparts[_i].type is _DONORparts[_j].type>>\
<<set _FoundOne to true>>\
<<endif>>\
<</for>>\
<<if _FoundOne is false>>\
<<set _TFArray[_counter] to _i>>\
<<set _counter to _counter +1>>\
<<endif>>\
<</for>>\
\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _PTR to _TFArray[_r]>>\
<<set _PartToRemove to $PC[$CC][$PCbp][_PTR].type>>\
<<set _PartMorph to $PC[$CC][$PCbp][_PTR].morph>>\
<<set _Try to 13289>>\
<<set _WhatItem to $PC[$CC][$PCbp][_PTR].equip>>\
<<if _WhatItem[0] > 0>>\
<<set _InvItem to "true">>\
<<set _WhatItem to $PC[$CC][$PCbp][_PTR].equip>>\
<<set _Try to setup.addtoinven(_WhatItem)>>\
<<endif>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, _PartToRemove)>>
<<set _MorphHack to setup.bpptrtoname(_PartToRemove, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _PartMorph)>>\
@@color:Yellow;you have lost your <<print _MorphHack>>@@\
<<if _Try is 13289>>\
<<elseif _Try is -1>>\
@@color:Yellow;DEBUG: there was an item in that slot and the player has no inventory space. Implement dropping@@
<<else>>\
The item on that body part has been returned to inventory.
<<endif>>\
<<set _TryAllThree to 999>>\
<<endif>>\
<<else>>\
<<set _DONORparts to clone($args[0])>>\
<!-- generate list of part types that both have, but with different morphs -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<for _j to (_DONORparts.length -1); _j > 0; _j-->>\
<<if _PCparts[_i].type is _DONORparts[_j].type>>\
<<if _PCparts[_i].morph is _DONORparts[_j].morph>>\
<<else>>\
<<set _FoundOne to true>>\
<<set _TFArray[_counter] to [_i, "becomes", _DONORparts[_j].morph]>>\
<<set _throwaway to _DONORparts.deleteAt(_j)>>\
<<set _counter to _counter +1>>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _PTR to _TFArray[_r][0]>>\
<<set _PartToMorph to setup.bpptrtoname(_PCparts[_PTR].type, "tf")>>\
<<set _OldMorph to _PCparts[_PTR].morph>>\
<<set _NewMorph to _TFArray[_r][2]>>\
@@color:Yellow;your <<print setup.TFTextOutputter(_PCparts[_PTR].type, _OldMorph, _NewMorph)>>@@\
<<set $PC[$CC][$PCbp][_PTR].morph to _NewMorph>>\
<<TFAdderHelper _PTR>>\
<!-- stop loop -->\
<<set _TryAllThree to 999>>\
<<else>>\
<<if $DebugMode is true>>Debug: tried to morph, but found no matching part type with a different morph (not neccesarily an error)<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<Recalc>>\
<<ShowHealth>>\
<</widget>>\
<<widget "TFAdderHelper">>\
<<set _WhichBodyPart to $args[0]>>\
<<set _Type to $PC[$CC][$PCbp][_WhichBodyPart].type>>\
<<set _Morph to $PC[$CC][$PCbp][_WhichBodyPart].morph>>\
<<set _Equip to $PC[$CC][$PCbp][_WhichBodyPart].equip>>\
<<set _MascFem to $PC[$CC][$PCbp][_WhichBodyPart].mascfem>>\
\
<<if _Type is $BPleg>>\
<<if _Morph is "horse">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "kick">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 8>>\
<<else>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 0>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 0>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPfeet>>\
<<if (_Morph is "horse") or (_Morph is "cow") or (_Morph is "spider") or (_Morph is "hellhound")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].equippable to false>>\
<<else>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].equippable to true>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPhead>>\
<<if _Morph is "horse">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 6>>\
<<elseif (_Type is $BPhead) and (_Morph is "spider")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "poison bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 1>>\
<<elseif (_Type is $BPhead) and (_Morph is "naga")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 6>>\
<<elseif (_Type is $BPhead) and (_Morph is "wolf")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Type is $BPhead) and (_Morph is "hellhound")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "magic">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "breath">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 2>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 8>>\
<<else>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 0>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 0>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPwield>>\
<<if _Morph is "fox">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "cut">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "claw">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Type is $BPwield) and (_Morph is "cat")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "cut">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "claw">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Type is $BPwield) and (_Morph is "human")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "punch">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Type is $BPwield) and (_Morph is "goblin")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "punch">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Type is $BPwield) and (_Morph is "minotaur")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "punch">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 2>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 7>>\
<<endif>>\
<<endif>>\
\
<</widget>>\ <<set _DONORparts to []>>
<<set _DONORparts[0] to { type: $BPhead, morph: "bunny" }>>\
<<set _DONORparts[1] to { type: $BPneck, morph: "bunny" }>>\
<<set _DONORparts[2] to { type: $BPback, morph: "bunny" }>>\
<<set _DONORparts[3] to { type: $BPchest, morph: "bunny" }>>\
<<set _DONORparts[4] to { type: $BPwield, morph: "bunny" }>>\
<<set _DONORparts[5] to { type: $BPwield, morph: "bunny" }>>\
<<set _DONORparts[6] to { type: $BPhands, morph: "bunny" }>>\
<<set _DONORparts[7] to { type: $BPring, morph: "bunny" }>>\
<<set _DONORparts[8] to { type: $BPring, morph: "bunny" }>>\
<<set _DONORparts[9] to { type: $BPwaist, morph: "bunny" }>>\
<<set _DONORparts[10] to{ type: $BPlegs, morph: "bunny" }>>\
<<set _DONORparts[11] to { type: $BPfeet, morph: "bunny" }>>\
<<set _DONORparts[12] to { type: $BPtail, morph: "bunny" }>>\
<<set _DONORparts[13] to { type: $BPwings, morph: "bunny" }>>\
<<set _TFMethod to setup.Shuffle(["copy","delete","morph"])>>\
<<set _PCparts to $PC[$CC][$PCbp]>>\
<<for _TryAllThree to 0; _TryAllThree < 3; _TryAllThree++>>\
<<if _TFMethod[_TryAllThree] is "copy">>\
<!-- generate list of parttype monster has that player lacks, morp will copy with it -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _DONORparts.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _PCparts.length; _j++>>\
<<if _DONORparts[_i].type is _PCparts[_j].type>>\
<<set _FoundOne to true>>\
<<endif>>\
<</for>>\
<<if _FoundOne is false>>\
<<set _TFArray[_counter] to ["gain a new", _DONORparts[_i].morph, _DONORparts[_i].type]>>\
<<set _counter to _counter +1>>\
<<endif>>\
<</for>>\
\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _Morph to _TFArray[_r][1]>>\
<<set _PartTypeToAdd to _TFArray[_r][2]>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, _PartTypeToAdd)>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].morph to _Morph>>\
<<set _MorphHack to setup.bpptrtoname(_PartTypeToAdd, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _Morph)>>\
@@color:Yellow;You have gained a _MorphHack@@
<<set _TryAllThree to 999>>\
<<else>>\
Debug: tried to copy, but found no monster part type the player doesn't already have (not neccesarily an error)
<<endif>>\
<<elseif _TFMethod[_TryAllThree] is "delete">>\
<!-- generate list of part types player has that monster lacks, not caring about morphs -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _DONORparts.length; _j++>>\
<<if _PCparts[_i].type is _DONORparts[_j].type>>\
<<set _FoundOne to true>>\
<<endif>>\
<</for>>\
<<if _FoundOne is false>>\
<<set _TFArray[_counter] to _i>>\
<<set _counter to _counter +1>>\
<<endif>>\
<</for>>\
\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _PTR to _TFArray[_r]>>\
<<set _PartToRemove to $PC[$CC][$PCbp][_PTR].type>>\
<<set _PartMorph to $PC[$CC][$PCbp][_PTR].morph>>\
<<set _Try to 13289>>\
<<set _WhatItem to $PC[$CC][$PCbp][_PTR].equip>>\
<<if _WhatItem[0] > 0>>\
<<set _InvItem to "true">>\
<<set _WhatItem to $PC[$CC][$PCbp][_PTR].equip>>\
<<set _Try to setup.addtoinven(_WhatItem)>>\
<<endif>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, _PartToRemove)>>
<<set _MorphHack to setup.bpptrtoname(_PartToRemove, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _PartMorph)>>\
@@color:Yellow;You have lost your <<print _MorphHack>>@@
<<if _Try is 13289>>\
<<elseif _Try is -1>>\
@@color:Yellow;DEBUG: there was an item in that slot and the player has no inventory space. Implement dropping@@
<<else>>\
The item on that body part has been returned to inventory.
<<endif>>\
<<set _TryAllThree to 999>>\
<<endif>>\
<<else>>\
<<set _DONORparts to []>>
<<set _DONORparts[0] to { type: $BPhead, morph: "bunny" }>>\
<<set _DONORparts[1] to { type: $BPneck, morph: "bunny" }>>\
<<set _DONORparts[2] to { type: $BPback, morph: "bunny" }>>\
<<set _DONORparts[3] to { type: $BPchest, morph: "bunny" }>>\
<<set _DONORparts[4] to { type: $BPwield, morph: "bunny" }>>\
<<set _DONORparts[5] to { type: $BPwield, morph: "bunny" }>>\
<<set _DONORparts[6] to { type: $BPhands, morph: "bunny" }>>\
<<set _DONORparts[7] to { type: $BPring, morph: "bunny" }>>\
<<set _DONORparts[8] to { type: $BPring, morph: "bunny" }>>\
<<set _DONORparts[9] to { type: $BPwaist, morph: "bunny" }>>\
<<set _DONORparts[10] to{ type: $BPlegs, morph: "bunny" }>>\
<<set _DONORparts[11] to { type: $BPfeet, morph: "bunny" }>>\
<!-- generate list of part types that both have, but with different morphs -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<for _j to (_DONORparts.length -1); _j > 0; _j-->>\
<<if _PCparts[_i].type is _DONORparts[_j].type>>\
<<if _PCparts[_i].morph is _DONORparts[_j].morph>>\
<<else>>\
<<set _FoundOne to true>>\
<<set _TFArray[_counter] to [_i, "becomes", _DONORparts[_j].morph]>>\
<<set _throwaway to _DONORparts.deleteAt(_j)>>\
<<set _counter to _counter +1>>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _PTR to _TFArray[_r][0]>>\
<<set _PartToMorph to setup.bpptrtoname(_PCparts[_PTR].type, "tf")>>\
<<set _OldMorph to _PCparts[_PTR].morph>>\
<<set _NewMorph to _TFArray[_r][2]>>\
<<print setup.TFTextOutputter(_PCparts[_PTR].type, _OldMorph, _NewMorph)>>!
<<set $PC[$CC][$PCbp][_PTR].morph to _NewMorph>>\
<!-- stop loop -->\
<<set _TryAllThree to 999>>\
<<else>>\
Debug: tried to morph, but found no matching part type with a different morph (not neccesarily an error)
<<endif>>\
<<endif>>\
<</for>>\
<<link "Town Square" "TownSquare">>
<</link>>
<<SimplePic "merchant.png">>\
<<set _AllowStore to true>>\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
<<set _Gerard to "gerard">>\
<<if $WORLD.gstore is 0>>\
<<set _Gerard to "shopkeeper">>
<<endif>>\
\
@@color:LightGreen;Pawnshop@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
\
<span id="KeypC">\
<<link "c) Chat" "StoreGeneral">>
<<set $WORLD.datapasser to "chat">>
<</link>>
</span>\
<hr>
<<if $WORLD.gstore is "chat">>\
<<set $WORLD.datapasser to "">>
<<AdvanceTime 5>>
<<if $WORLD.gstore is 0>>\
<<set $WORLD.gstore to 1>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello," you greet the proprieter. "I'm $PC[$CC][$PCname]."
@@color:Aqua;<<print _Gerard>>@@: "Gerard," the man replies. "Are you here to climb the tower?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "<<print either("Yes, was it that obvious?","That's the plan.","")>>"
@@color:Aqua;<<print _Gerard>>@@: "Pretty much the only reason peopel come this far north. Well, let me be the first to welcome you to Falconhearss. I run the general store here, so please come to me for any of your provisioning needs."
<<elseif $WORLD.gstore is 1>>\
<<set $WORLD.gstore to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I notice your stock seems kind of low"
@@color:Aqua;<<print _Gerard>>@@: "Everyone's little low right now on account of the war down south," he explains. "It was already bad before, but now? Caravans can't hardly get through the pass.
<<elseif $WORLD.gstore is 2>>\
<<set $WORLD.gstore to 3>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: ""
@@color:Aqua;<<print _Gerard>>@@: ""
<<else>>\
(Dev note: end of generic Gerard dialogue. Implement more)
<<endif>>
<<else>>\
"Hello," the shopkeeper greets you. "What can I get you?"
<<endif>>\
<hr>\
<<if _AllowStore is true>>\
<<Store $GStore>>
<<endif>>\
<<SimplePic "witch.jpg">>\
@@color:LightGreen;Store name@@
<<if ($WORLD.selene is 0) or ($WORLD.selene is 2)>>\
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<<set $WORLD.selene to 0>>
<</link>>\
</span>
<<endif>>\
<hr>\
<<set _ExitLinks to "base">>\
<<set _Witch to "The Witch">>\
<<if $PC[$CC][$PCSeleneChat][1] is 2>>\
<<set _Witch to "Selene">>\
<<endif>>\
\
<<if $WORLD.selene is 0>>\
<<set _ExitLinks to "store">>\
<<if $PC[$CC][$PCSeleneChat][1] is 2>>\
<<endif>>\
\
<<if $PC[$CC][$PCSeleneChat][1] is 2>>\
<<set _c to "c) chat with Selene">>\
<<else>>\
<<set _c to "c) Converse with the woman">>\
<<endif>>\
\
<span id="KeypC">\
<<link _c "StoreSelene">>
<<set $WORLD.selene to 1>>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<elseif $WORLD.selene is 1>>\
<<set _ExitLinks to "questions">>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
<<if _CurrentQuestion is 0>>\
<<set $PC[$CC][$PCSeleneChat][0] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello. I'm here to explore the tower. My name is <<print $PC[$CC][$PCname]>>."
@@color:Red;<<print _Witch>>@@: ""
<!-- Unlocks -->\
<<set $PC[$CC][$PCasd][1] to 1>><!-- -->\
<<set $PC[$CC][$PCasd][2] to 1>><!-- -->\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCSeleneChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's your name?"
@@color:Red;Selene@@: ""
<!-- unlocks -->\
<<set $PC[$CC][$PCSeleneChat][4] to 1>><!-- Why did they burn down your hut? -->\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCasd][13] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: ""
@@color:Red;Selene@@: ""
<<endif>>\
<<elseif $WORLD.selene is 2>>\
<<set _ExitLinks to "store">>\
@@color:Red;Selene@@: "Anything else I can do for you?"
<<elseif $WORLD.selene is 3>>\
<<set $WORLD.selene to 2>>\
<<set _ExitLinks to "continue">>\
Special case handler
<<else>>\
Unreocgnized state:
<<endif>>\
<hr>\
\
\
\
<<if _ExitLinks is "base">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm just here to shop, thanks" "StoreSelene">>
<<set $WORLD.selene to 2>>\
<<AdvanceTime 5>>
<</link>>\
</span>
<<elseif _ExitLinks is "continue">>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "StoreSelene">>
<<set $WORLD.selene to 2>>\
<<AdvanceTime 5>>
<</link>>\
</span>
<<elseif _ExitLinks is "questions">>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<<for _i to 0; _i < $PC[$CC][$PCSeleneChat].length; _i++>>\
<<if $PC[$CC][$PCSeleneChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "Introduce yourself">>\
<<set _QuestionPool[1] to "Ask about ">>\
<<set _QuestionPool[2] to "Ask about the tower">>\
\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm done asking questions for now" "StoreSelene">>
<<set $WORLD.selene to 2>>
<</link>>\
</span>
\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix"]>>\
<<set _KeyChars to ["1","2","3","4","5","6"]>>\
\
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + ") " + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "StoreSelene">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<elseif _ExitLinks is "store">>\
<<Store $Selene>>
<<if $DebugMode is true>>\
debug:
<<for _i to 0; _i < $STORE[_s].length; _i++>>\
_i) <<print $STORE[$Selene][_i]>>
<</for>>\
<<endif>>\
<<endif>>\
\
<<if $DebugMode is true>>\
<hr>\
debug
1: SeleneChat is: <<print $PC[$CC][$PCSeleneChat]>>
2: AsktheseQs is: <<print _AskTheseQuestions>>
<hr>\
<<endif>>\
@@color:Gold;Graveyard@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSquare">>
<<AdvanceTime 5>>
<</link>>\
</span>
<hr>\
<<SimplePic "graveyard.jpg">>\
<<if $RETIREES[0].name is "none">>\
The graveyard is empty.
<<else>>\
<<for _i to 0; _i < 10; _i++>>
<<if $RETIREES[_i].name is "none">>\
<<else>>\
@@color:LightGreen;$RETIREES[_i].name@@: level $RETIREES[_i].level $RETIREES[_i].class, retired on \
<<if $RETIREES[_i].year > 0>>year $RETIREES[_i].year, <<endif>>day $RETIREES[_i].day
\
<<if $RETIREES[_i].won > 0>> * Battles won: $RETIREES[_i].won<br><<endif>>\
<<if $RETIREES[_i].gold > 0>> * Retired with $RETIREES[_i].gold gold<br>\<<endif>>\
<<if $RETIREES[_i].maxforest > 0>> * Highest forest level: $RETIREES[_i].maxforest<br><<endif>>\
<<if setup.TypeOf($RETIREES[_i].maxdesert) is "number">>\
<<if $RETIREES[_i].maxdesert > 0>> * Highest desert level: $RETIREES[_i].maxdesert<br><<endif>>\
<<endif>>\
<<if $RETIREES[_i].maxtower > 0>> * Highest tower level: $RETIREES[_i].maxforest<br><<endif>>\
<<if $RETIREES[_i].death is "retired">>\
@@color:Yellow;Retired peacefully@@
<<else>>\
@@color:Red;Killed by $RETIREES[_i].death>>\
<<endif>>\
<hr>\
<<endif>>\
<</for>>
<<endif>>\
<<widget "DoTransform">>\
<<set _TFMethod to setup.Shuffle(["copy","delete","morph"])>>\
<<set _PCparts to $PC[$CC][$PCbp]>>\
\
<!-- for combat TF, invert sex parts because: -->\
<!-- sex with a male, makes you more female -->\
<!-- sex with a female, makse you more male -->\
<<set _Atype to $args[0][0].type>>\
1<<print $Mon.sex>>
2<<print $args[0].length>>
3<<print $args[0][0]>>
4<<print $args[0][1]>>
5<<print $args[0][2]>>
6<<print $args[0][3]>>
<<if $Mon.sex is "male">>\
here
<<for _i to 0; _i < $args[0].length; _i++>>\
<<if $args[0][_i].type is $BPpenis>>\
_i) <<print $args[0][_i].type>> , <<print $args[0][_i].morph>>
<<set $args[0][_i].type to $BPpussy>>\
<<set _Atype to $args[0][_i].type>>\
<<endif>>\
<</for>>\
<<set $args[0][$args[0].length] to { type: $BPboobs, morph: _Atype }>>\
<<elseif $Mon.sex is "female">>\
<<for _i to ($args[0].length -1); _i > -1; _i-->>\
<<if ($args[0].type is $BPpussy) or ($args[0].type is $BPboobs)>>\
<<set _Atype to $args[0][_i].type>>\
<!-- won't this copymorph method result in female centaurs giving human instead of horse penises? -->\
<<set _CopyMorph to $args[0][_i].morph>>
<<set _throwaway to $args[0].deleteAt(_i)>>\
<<endif>>\
<</for>>\
<<set $args[0][$args[0].length] to { type: $BPpenis, morph: _CopyMorph}>>\
<<else>>\
<!-- theoretically no action required? -->\
<<endif>>\
\
<<for _TryAllThree to 0; _TryAllThree < 3; _TryAllThree++>>\
<<if _TFMethod[_TryAllThree] is "copy">>\
<<set _DONORparts to $args[0]>>\
<!-- generate list of parttype monster has that player lacks, morp will copy with it -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _DONORparts.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _PCparts.length; _j++>>\
<<if _DONORparts[_i].type is _PCparts[_j].type>>\
<<set _FoundOne to true>>\
<<endif>>\
<</for>>\
<<if _FoundOne is false>>\
<<set _TFArray[_counter] to ["gain a new", _DONORparts[_i].morph, _DONORparts[_i].type]>>\
<<set _counter to _counter +1>>\
<<endif>>\
<</for>>\
\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _Morph to _TFArray[_r][1]>>\
<<set _PartTypeToAdd to _TFArray[_r][2]>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, _PartTypeToAdd)>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].morph to _Morph>>\
1debug: _Morph
<<set _MorphHack to setup.bpptrtoname(_PartTypeToAdd, "tf")>>\
2debug: _MorphHack
<<set _MorphHack to _MorphHack.replace("~", _Morph)>>\
3debug: _MorphHack
@@color:Yellow;you have gained a _MorphHack@@\
<<set _TryAllThree to 999>>\
<<else>>\
Debug: tried to copy, but found no monster part type the player doesn't already have (not neccesarily an error)
<<endif>>\
<<elseif _TFMethod[_TryAllThree] is "delete">>\
<<set _DONORparts to $args[0]>>\
<!-- generate list of part types player has that monster lacks, not caring about morphs -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<set _FoundOne to false>>\
<<for _j to 0; _j < _DONORparts.length; _j++>>\
<<if _PCparts[_i].type is _DONORparts[_j].type>>\
<<set _FoundOne to true>>\
<<endif>>\
<</for>>\
<<if _FoundOne is false>>\
<<set _TFArray[_counter] to _i>>\
<<set _counter to _counter +1>>\
<<endif>>\
<</for>>\
\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _PTR to _TFArray[_r]>>\
<<set _PartToRemove to $PC[$CC][$PCbp][_PTR].type>>\
<<set _PartMorph to $PC[$CC][$PCbp][_PTR].morph>>\
<<set _Try to 13289>>\
<<set _WhatItem to $PC[$CC][$PCbp][_PTR].equip>>\
<<if _WhatItem[0] > 0>>\
<<set _InvItem to "true">>\
<<set _WhatItem to $PC[$CC][$PCbp][_PTR].equip>>\
<<set _Try to setup.addtoinven(_WhatItem)>>\
<<endif>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, _PartToRemove)>>
<<set _MorphHack to setup.bpptrtoname(_PartToRemove, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _PartMorph)>>\
@@color:Yellow;you have lost your <<print _MorphHack>>@@\
<<if _Try is 13289>>\
<<elseif _Try is -1>>\
@@color:Yellow;DEBUG: there was an item in that slot and the player has no inventory space. Implement dropping@@
<<else>>\
The item on that body part has been returned to inventory.
<<endif>>\
<<set _TryAllThree to 999>>\
<<endif>>\
<<else>>\
<<set _DONORparts to $args[0]>>\
<!-- generate list of part types that both have, but with different morphs -->\
<<set _TFArray to []>>\
<<set _counter to 0>>\
<<for _i to 0; _i < _PCparts.length; _i++>>\
<<for _j to (_DONORparts.length -1); _j > 0; _j-->>\
<<if _PCparts[_i].type is _DONORparts[_j].type>>\
<<if _PCparts[_i].morph is _DONORparts[_j].morph>>\
<<else>>\
<<set _FoundOne to true>>\
<<set _TFArray[_counter] to [_i, "becomes", _DONORparts[_j].morph]>>\
<<set _throwaway to _DONORparts.deleteAt(_j)>>\
<<set _counter to _counter +1>>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
<!-- if anything's in the list, pick one and we're done -->\
<<if _counter > 0>>\
<<set _r to random(0, _counter -1)>>\
<<set _PTR to _TFArray[_r][0]>>\
<<set _PartToMorph to setup.bpptrtoname(_PCparts[_PTR].type, "tf")>>\
<<set _OldMorph to _PCparts[_PTR].morph>>\
<<set _NewMorph to _TFArray[_r][2]>>\
@@color:Yellow;your <<print setup.TFTextOutputter(_PCparts[_PTR].type, _OldMorph, _NewMorph)>>@@\
<<set $PC[$CC][$PCbp][_PTR].morph to _NewMorph>>\
<!-- stop loop -->\
<<set _TryAllThree to 999>>\
<<else>>\
Debug: tried to morph, but found no matching part type with a different morph (not neccesarily an error)
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $RoomPTR to passage()>>\
<<set $AllowNav to false>>\
\
<<if $WORLD.CombatInterrupt is "defeated Zehtalia">>\
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
<<endif>>\
<<if $Dungeon[_pz][_px][_py][12] is 99>>\
<<set $Dungeon[_pz][_px - 1][_py +1][11] to "Magic Circle">>\
<<set $Dungeon[_pz][_px - 1][_py +1][12] to 0>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsUp">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<set $WORLD.PortalTarget to []>>\
<<set $WORLD.PortalTarget[0] to _pz>>\
<<set $WORLD.PortalTarget[1] to _px -1>>\
<<set $WORLD.PortalTarget[2] to _py +1>>\
<<if $WORLD.Circle < 5>>\
<<set $WORLD.Circle to 5>>\
<<endif>>\
<<replace "#eventtext">>\
<<set _RightPic to $ImgPath + "Zehtalia.png">>\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $AllowNav to true>>\
@@color:Red;Zehtalia@@:"WHAT HAVE YOU DONE?!?" the creature screams, collapsing to four of her knees.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "<<print either("Defeated you?","I've defeated you.","Killed a spider bitch?")>>"
@@color:Red;Zehtalia@@:"NO. YOU HAVE MERELY DESTROYED THIS BODY," she scowls. "BUT WE OF THE ONE TRUE MIND ARE MORE THAN OUR PHYSICAL HUSKS. PRAY, MORTAL, THAT WE NEVER MEET AGAIN."
With that, the rest of her huge ponderous bulk falls to the stone floor and dissolves to dust.
@@color:Gold;Congratulations!@@
You have defeated the level 5 dungeon boss, Zehtalia, Queen of Spiders.\
<<AwardAchievement "Black Mage">>\
<</replace>>\
<<elseif $Dungeon[_pz][_px][_py][12] is "End of content note">>\
<<if $WORLD.Circle < 5>>\
<<set $WORLD.Circle to 5>>\
<<set $Dungeon[_pz][_px - 1][_py +1][11] to "Magic Circle">>\
<<set $Dungeon[_pz][_px - 1][_py +1][12] to 0>>\
<<set $Dungeon[_pz][_px][_py][11] to "StairsUp">>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<set $WORLD.PortalTarget to []>>\
<<set $WORLD.PortalTarget[0] to _pz>>\
<<set $WORLD.PortalTarget[1] to _px -1>>\
<<set $WORLD.PortalTarget[2] to _py +1>>\
<<endif>>\
<<replace "#eventtext">>\
<<set _RightPic to $ImgPath + "Zehtalia.png">>\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $AllowNav to true>>\
@@color:Gold;Congratulations!@@
You have defeated the level 5 dungeon boss, Zehtalia, Queen of Spiders.
<<AwardAchievement "Black Mage">>\
Sadly, this marks the end of content for the current release. You can of course continue playing, or even reset the tower and confront Zehtalia again. But the stairs to the next level won't spawn in the current version of the game.
If you've enjoyed playing @@color:Gold;Tower of Triumph, An Humble Pilgrimage to the Shrine of the Goddess of Primal Darkness@@, please consider heading over to <a href="https://subscribestar.adult/arcdragon" target="_blank" rel="noopener noreferrer">SubscribeStar</a> and subscribing to support further development. If you'd like to share your thoughts or discuss the game with other players, the current discussion home for Tower of Triumph is at tfgames.site.
Thank you for playing, and I hope you've enjoyed everything so far!\
<</replace>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 0>>\
<<replace "#eventtext">>\
<<set _RightPic to $ImgPath + "Zehtalia.png">>\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
@@color:Yellow;Dungeon Boss: Zehtalia, Queen of the Spiders@@
@@color:Red;Zehtalia@@ "WRETCHED MORTAL, HEAR ME!"
Uh-oh.
<hr>\
<span id="KeypOne">\
<<link "1) Listen to what she has to say" "Zehtalia">>
<<set $Dungeon[_pz][_px][_py][12] to 1>>
<</link>>
</span>\
<span id="KeypTwo">\
<<link "2) Attack immediately" "Combat">>\
<<set $ForceMon to ["Zehtalia","female",5]>>
<<GetMon $ForceMon>>\
<<set $WORLD.CombatInterrupt to "Zehtalia", 1>>\
<</link>>\
</span>\
<</replace>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 1>>\
<<SimplePic "Zehtalia.png">>\
@@color:Yellow;Dungeon Boss: Zehtalia, Queen of the Spiders@@
<hr>\
Holding back for now, you listen to what the creature has to say.
@@color:Red;Zehtalia@@: "WELCOME TO MY LAIR, PATHETIC MORTAL! YOU ARE NOT THE FIRST TO MAKE IT THIS FAR. NOR WILL YOU BE THE LAST. FOR YOU WILL DIE THIS DAY, AND THIS ROOM WILL BE YOUR FINAL RESTING PLACE."
Glancing around the room, you notice several piles of gnawed bones.
@@color:Red;Zehtalia@@:"BUT REJOICE!" she continues. "FOR LOWLY MORTALS SUCH AS YOU SERVE A VITAL ROLE IN MY PLAN TO REFORGE THE WORLD. INDEED, YOUR LIVING FLESH WILL SERVE TO FEED MY MYRIAD BROOD WHO VERY SOON SHALL GROW IN STRENGTH AND NUMBER BEYOND WHAT CAN BE CONTAINED. EVEN NOW, THIS WRETCHED TOWER FILLS WITH THEIR NUMBER."
As she speaks, she aims a spinneret in your direction and sprays you with webbing. It's going to be harder to escape now.
<<set _throwaway to setup.ApplyEffect("webbed", 1)>>\
<<ShowActiveEffects>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) Ask about her plan" "Zehtalia">><<set $Dungeon[_pz][_px][_py][12] to 2>><</link>></span>
<span id="KeypTwo"><<link "2) Enough talking! Die!" "Combat">><<set $ForceMon to ["Zehtalia","female",5]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Zehtalia", 1>><</link>></span>
<<elseif $Dungeon[_pz][_px][_py][12] is 2>>\
<<SimplePic "Zehtalia.png">>\
@@color:Yellow;Dungeon Boss: Zehtalia, Queen of the Spiders@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's this about a plan?"
Before answering, she spays a cloud of noxious fumes at you. Secured to the floor by the webs as you are, you can't avoid it. You begin to feel ill.
<<set _throwaway to setup.ApplyEffect("poisoned", 1)>>\
<<ShowActiveEffects>>\
@@color:Red;Zehtalia@@: "INDEED, A PLAN. BUT THE MERE WORD INSUFFICIENT. THE LANGUAGE OF LESSER BEING SUCH AS YOURSELF CANNOT CONVEY THE TRUE GLORY I INTEND. WHEN THIS WORLD WAS FIRST BORN, THE WARDEN OF THE UNMANIFEST DECREED THAT WE DEMONS, ITS JUST AND TRUE MASTERS, WOULD BE CONFINED TO THE BLIGHTED NETHERS. THE BARREN WASTES. THE VILE EMPTINESS. THAT TEEMING INNIFINITY WHICH LAY BEYOND, UNSEEN, UNKNOWN, AND GUARDED ONLY BY THIS WORTHLESS PILLAR OF STONE YOU FOOLISHLY CALL A TOWER."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Warden of the unmanifest?" you puzzle. "You don't mean the Goddess of Primal Darkness, do you?"
@@color:Red;Zehtalia@@: "SHE IS NO GODDESS," she scoffs. "AT BEST SHE IS A POORLY LOCKED DOOR. BUT CALL HER WHAT YOU WILL. IT MATTERS NOT IF AN ANT PERCEIVES A DORMOUSE AS A GIANT. SOON MY PLAN WILL BE CONSUMATED, AND IT IS YOUR WORLD THAT WILL BURN AS FUEL TO POWER WHAT IS IT COME."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And what is to come?"
@@color:Red;Zehtalia@@: "WE, YOUR RIGHTFUL MASTERS," she pauses. "WILL BE FREE."
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) Free of what?" "Zehtalia">><<set $Dungeon[_pz][_px][_py][12] to 3>><</link>></span>
<span id="KeypTwo"><<link "2) Enough talking! Die!" "Combat">><<set $ForceMon to ["Zehtalia","female",5]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Zehtalia", 1>><</link>></span>
<<if $PC[$CC][$PCSmithDemonChat][6] is 2>>\
<span id="KeypThree"><<link "3) Would rightful masters include an omnibus named Charyss?" "Zehtalia">><<set $Dungeon[_pz][_px][_py][12] to 10>><</link>></span>
<<endif>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 3>>\
<<SimplePic "Zehtalia.png">>\
@@color:Yellow;Dungeon Boss: Zehtalia, Queen of the Spiders@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Free of what?" you ask. "free of the tower? Why is that even a problem? I just walked in. Surely nothing's stopping you from leaving?"
<<if $WORLD.SmithQuests[1] > 0>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "That's not true though," you correct her. "I've met a demon outside the tower.
@@color:Red;Zehtalia@@: "CEASE WITH YOUR LIES," she dissmisses you. "I CANNOT BE DECEIVED. WHAT YOU SPEAK IS IMPOSSBLE."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No really," you continue. "She had an adventurer trapped in a cage out in the wetern forest. Said her name was Charyss, and-"
@@color:Red;Zehtalia@@: "HOW DO YOU KNOW THAT NAME?" Zehtalia snarls at you, coming at you with her blackened flail in hand. "YOU SHALL PAY DEARLY FOR SPEAKING THAT DESPICABLE NAME...THE NAME OF MY TORMENTER."
<<else>>\
@@color:Red;Zehtalia@@: "OF COURSE ONE SUCH AS YOU WOULD FAIL TO REALIZE," she scoffs at you. "THAT WE ONE THE ONE TRUE MIND ARE TOO GREAT TO BE CONTAINED BY THIS FLIMSY MATERIAL REALM YOU CALL HOME. AND YET NEVERTHLESS THIS LOATHSOME STRUCTURE HINDERS US IN WAYS BEYOND YOUR KEN. THIS TRAVESTY WILL BE CORRECTED BY MY OWN HANDS. BUT, ENOUGH TALK. YOU HAVE WASTED ENOUGH OF MY TIME WITH YOUR INANE PRATTLING. NOW, YOU DIE."
<<endif>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne">\
<<link "1) Time to fight" "Combat">>
<<set $ForceMon to ["Zehtalia","female",5]>>
<<GetMon $ForceMon>>
<<set $WORLD.CombatInterrupt to "Zehtalia", 1>>
<</link>>
</span>\
<<elseif $Dungeon[_pz][_px][_py][12] is 10>>\
<<SimplePic "Zehtalia.png">>\
@@color:Yellow;Dungeon Boss: Zehtalia, Queen of the Spiders@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Totally unrelated," you segue. "Would the 'true masters' you speak of include an omnibus named Charyss?"
She seems annoyed by the quesion.
@@color:Red;Zehtalia@@: "YES, THOUGH BUT A PETULANT CHILD, THAT ONE IS NEVERTHELESS OF THE TRUE MIND. WHAT OF HER? AND HOW DOES A MORTAL SUCH AS YOURSELF KNOW A DEMON SUCH AS HER BY NAME?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I bumped into her in the forest west of town.
@@color:Red;Zehtalia@@: "WHAT?" she seems taken aback. "A TRUE DEMON, OUTSIDE THE TOWER? IMPOSSIBLE. FOR YOUR LIES I WILL SEE YOU SUFFER FIRST BEFORE YOU FEED MY BROOD."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "No, it's completely true," you object. "She even mentioned you. Said you weren't really the queen of spiders."
@@color:Red;Zehtalia@@: "SILENCE! SPEAK NOT OF THAT WHICH YOU DO NOT UNDERSTAND."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "She said you were just an ordinary demon who lost a fight with-
@@color:Red;Zehtalia@@: "ENOUGH OF THIS HERESY!" she brandishes her weapon and charges at you. "DIE!"
<hr>\
@@color:Gold;Option@@
<span id="KeypOne">\
<<link "1) (Hard mode) It seems you've made her mad" "Combat">>
<<set $ForceMon to ["Zehtalia","female",5]>>
<<GetMon $ForceMon>>
<<set $WORLD.CombatInterrupt to "Zehtalia", 1>>
<<set $Dungeon[_pz][_px][_py][12] to "hard mode Zehtalia">>\
<</link>>
</span>\
<<else>>\
Error: unrecognized '12' state in Zehtalia event: <<print $Dungeon[_pz][_px][_py][12]>>
Attempting recovery...
<<set $AllowNav to true>>\
<<endif>>\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;Active effects@@
<<for _SAE to 0; _SAE < $PC[$CC][$PCeffects].length; _SAE++>>\
<<print $PC[$CC][$PCeffects][_SAE][0]>>: <<print $PC[$CC][$PCeffects][_SAE][1]>>
<</for>>\
<<endif>>\
<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
Wrapping around you like a python, the giant snake girl wastes no time asserting her dominance. Coiling tightly against you, you feel the entire length of her beady skin flow across your flesh in a manner that is both sinister and erotic.
"Yesssss," he hisses. "You'll make sssuitable prey."
Now crushing you too tightly to speak, you can do nothing but lay helpless in her grasp as she brings her massive head to your chest and licks you with her long slippery tongue.
"Your sssalt," she hisses. "Isss deliciousss."
<<if _pcpenis > 0>>\
Sliding down from you chest, she brings her tongue down your stomach until it flicks indelicately across the tip of your cock. Uncertain what she intends, you gasp suddenly usesher tongue to grip your cock tightly at the base, forcing blood into it to give you an erection not of your own doing. From there she slides its slimy length in a corkscrew motion from the base of your cock, around and around until it covers its entire length.
The ensation is erotic, but //bizarre// as the coiling motion stimulates you not in a familiar in-and-out manner, but around and around every centimeter of your length from balls to glans. Meanwhile her tail has you fully encircled from waist to head, and eyes and nostrils are filled with the sight and scent of snake.
Scarcely able to breath from the pressure on your lungs, you shudder out a terrible orgasm that consumes the last bit of oxygen from inside you and leaves you barely on the edge of consciousness as she at licks up every last drop of your fluids, then slithers off deeper into the tower's depths.
<<else>>\
Encircling your breasts with her tongue, you feel your nipples harder as she systematiclly slathers every inch of your chest with her tongue. The sensation is tremendous, and yet every time you think you're able to bear it she indelicatlye flicks her forked tongue across your nipples, inciting you to an even deeper torment of pleasure until at last, you cum.
"Yesss!!" she breathes huskily, thenin an instant tears your knees apart and repositions her head bweteen them. "Ssstay ssstill," she commands.
Before your brain can process the command, her tongue darts deep inside you. At last she relaxes her grip on yourtorso, allow you to desperately gasp for air while her tongue just keeps going. It's as if it's a dozen feet long, perpetually sliding inside and coiling up into a growing ball so large that you see your belly distend from its bulk.
Nomming her entire mouth onto your pelvis, you cum a second time while she sucks every drop of fluid from inside you, her coiled-up tongue spinning like a whirlwind inside you as you cum yet again and again.
At last the naga releases you to the ground with an audible thunking noise, the last sensation you feel before passing out being the length of her slippery tongue beginning its long slide back out from within you.
<<endif>>
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","naga"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "naga double dicks">>\
<<set _r to random(1,3)>>\
<<if _r is 1>>\
Unable to contain your curiosity about her double-dick anatomy, you sit down next to her to get a closer look.
<<elseif _r is 1>>\
Feeling drawn to the naga's curious anatomy, you lean over her fallen form and reach out to touch one of her dicks with a finger. At first she shys away, but, quickly realizing that you're not going to hurt her, she relaxes and simply watches you with her own curiosity.
<<else>>\
"Two dicks?" you marvel out loud, staring at her curious anatomy without reservation. \
<<endif>>\
<<set _r to random(1,3)>>\
<<if _r is 1>>\
Bulbous and thick, both dicks are covered in little lumps that look hard, but you quickly realize are like little jutting bits of vein, pumped full of just enough blood to provide a curious ribbing texture. Gripping one in each hand, you watch in fascination as you jack them both off as if on autopilot. The naga, clearly not objecting to this treatment, puts both hands behind her head and sighs happily.
"I forget that you adventurers are like this," she chuckles. "I must remember not to waste so much energy fighting those who give so freely."
<<elseif _r is 2>>\
"What would you even do with two dicks?"
"Want me to show you?" she waggles her eyebrows at you. "Bend over."
Shaking your head at the thought, you nevertheless slide the fingers of one hand around one, then firmly grab onto it.
"Oh," she grins. "Perhaps you'd rather show me?"
You ignore her, but neither do you stop. Instead, you reach out with your other hand to grab the other dick and begin to playfully stroke them up and down, alternating in opposite directiosn with each hand as if milking a cow.
"Mmm," the naga settles down comfortably onto her back, curling the end of her tail around you and tickling your belly with it while you continue to stroke her.
<<else>>\
Utterly fascinated by the ribbing, you feel one of the bulbous lumps and push down on it. It recedes, but then quickly fills back up with blood.
"If you think they're fun to play with," she waggles her eyebrows at you, "imagaine what a delight they must be to taste."
Stifling a blush, you set aside her comment and instead take both cocks in your hands and bring them to your lips for closer inspection.
"Well, maybe just a taste," you mumble under the sound of her snickering, licking the tip of one cock and the transferring a bit of pre-cum from one to the other. "Solely for lubrication," you insist to the smiling naga.
<<endif>>\
<<set _r to random(1,2)>>\
<<if _r is 1>>\
Pistoning both cocks up and down in alternating fashion like milking a cow, it doesn't take long before the 'milk' comes, first one the left cock and then the right. Despite the temptation you manage to refrain from eagerly licking her clean, but the abdundant fluids do make finishing the handjob much easier.
"Thank you, come again!" the naga laughs, then slithers off alone.\
<<else>>\
Each dick is large enough to be more than a handful, and you briefly try moving both hands to the same cock to give it more full attention. The naga frowns at this, and with a shrug you go back to handling them both toegther.
"Usually these are for fucking both holes at the same time," she comments, prompting all sorts of visuals in your mind as you continue to stroke them. "But you are doing quite well."
Encouraging by her words, you pick up the pace, and before long you're rewarded with a faceful of snake sperm in your face. The flavor is utterly unique and not entirely disagreeable, but you wipe rather than lick most of it off. The naga seems unbothered by this, and slithers off with a tired yawn to find some secluded corner to nap in.\
<<endif>>\
<<elseif $WORLD.datapasser is "naga blowjob">>\
Uncertain where this creature even keeps her vagina, or whether she even has one, you drop your pants and wave your dick in her face.
"Snakes like warmth, right?" you ask. "How about you suck some warmth straight from the source?"
She seems to consider this for a moment, then nods agreeably and slithers over between your legs. Taking your dick fully into her mouth without a fuss, she quickly gets to work sucking on it. Her mouth is shockingly cool, and you realize that maybe she literally does need your body heat. Happy to provide, you reach down with your arms to fondle her enormous tits with an underhanded grip, and she responds by sliding her tail between your legs from behind and coiling it up your thigh.
The action of her mouth is mechanical, but thorough, almost as if she has no sense of the sexual implicatiosn of the act and is simply sucking on your to enjoy the heat like a peculiar inverse of how one might enjoy sucking on a popsicle. There's no arguing with the results, however, as her licking and sucking is relentless, withotu the slightest hint of tiring. Sliding your hands up from her chest, onto her shoulders and down her back, you massage your fingers across her cool flesh...but that's just an excuse. Really, you're trying to keep from falling over from how difficult it is to stand with this monster-machine of a cock-sucker not even bothering to breath with how powerfully she's trying to suck your cock in and out of her thoat.
By this time you're no longer even standing, instead supporting yourself upright on the bulk of her tail while you gasp and shudder in a blowjob that simply won't end. She's sucking like her life depends on it, and yet your balls insistently refuse to give up their sperm for a timeless eternity. It's not until she looks up at youwith an appreciative smile that at last you spray a glorious climax down her eager throat, shuddering and leaning against her in uncontrollable ectasy. Collapsing at last on top of her, she seems perfectly content with this, curling her cool body around your for its warmth. You drift off into a brief but comforting sleep, your face resting gently between her firm and supple breasts.
You awake some time later with the naga still curled around you, her breasts rising and falling gently with her breath. Giving them one last squeeze, you wipe your dick dry against her lips, watching in amusement as her tongue instinctively reaches out for it, then pat her nicely on the head and turn to continue your adventure.\
<<elseif $WORLD.datapasser is "naga boob fondle">>\
The air become noticebly thicker with the scent of snake musk as you approach the fallen naga, her tail still thrashing and coiling wildly in the aftermath of your battle. Plaing one hand on her chest, you can feel her heartbeat though the giant, ponderous flesh her breasts. Faster than you expected. But calming.
Taking both breasts in your hands, you kneadly gently but joyfully. They're truly spectacular both in their impressive size and in their unqiueness of chafacter. The skin is slightly textures and cool to the touch. Lifting one, you judge it to be easily 7 or 8 pounds, and it's remarkable how completely supple and pliable they are.
As for the naga, she seems unbothered by your touch. In fact, her tail is even now coiling itself around oen of your legs, climbing up your thigh in an easy spiral as if seeking out your body heat.
"If that's what you want," you nod to her, "I'm sure we can come to an arrangenment."
You end up with the snake girl half curled up into your lap and half curled around you, purring into the warmth of your chest while you delightfully fondle hers. Its smooth skin. The curiosity of her lack of nipples. You end up falling into a pleasant sleep together before eventually waking up, feeling much refreshed and ready to continue your adventure.\
<<else>>\
Error in naga sex event, unrecognized sex act: <<print $WORLD.datapasser>>\
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<set _StoreMusic to $WORLD.music>>\
<<PlayBGM "town">>\
\
<span id="KeypESC">\
<<link "">>
<<PlayBGM _StoreMusic>>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>
</span>\
\
<<SimplePic "glinda.jpg">>\
<hr>\
<<set _PressurePlate to false>>\
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set _StandingOn to $Dungeon[_pz][_px][_py]>>\
<<if _StandingOn[11] is "PressurePlate">>\
<<set _PressurePlate to true>>\
<<endif>>\
<<endif>>\
<<if _PressurePlate is true>>\
@@color:Gold;Glinda the Rescue Fairy appears in a shower of pretty sparkles!@@
@@color:Aqua;Glinda@@: "Hello, <<print $PC[$CC][$PCname]>>. I notice you're standing on a pressure plate. //Surely// you're not trying to use the Fairy Rescue System to cheat your way through a dungeon puzzle?"
<<link "What? No, there's legitimately a problem. Really. Please help me!" "TownSquare">>
<<set $DisableMenu to false>>\
<<TogglePressurePlate _StandingOn[12]>>\
<<script>>
Dialog.close();
<</script>>
<</link>>
<<link "Uhh, maybe?">>
<<set $DisableMenu to false>>\
<<PlayBGM _StoreMusic>>
<<script>>
Dialog.close();
<</script>>
<</link>>\
<<elseif $Glinda is 0>>\
@@color:Gold;Glinda the Rescue Fairy appears in a shower of pretty sparkles!@@
@@color:Aqua;Glinda@@: "Hello, <<print $PC[$CC][$PCname]>>. Are you in need of assistance?"
<hr>\
<<set _YesMessage to "Yes, I'm stuck. Please teleport me back to town.">>\
<<set _NoMessage to "No, I was just curious to see what this button did.">>\
<<if passage() is "Combat">>\
<<set _YesMessage to "Yes, combat is legitimately broken. Please help.">>\
<<set _NoMessage to "No, I would never abuse the Rescue Fairy system to avoid losing a fight.">>\
<<endif>>\
<<link _YesMessage "TownSquare">>
<<set $DisableMenu to false>>\
<<script>>
Dialog.close();
<</script>>
<</link>>
<<link _NoMessage>>
<<set $DisableMenu to false>>\
<<PlayBGM _StoreMusic>>
<<script>>
Dialog.close();
<</script>>
<</link>>\
<<else>>
@@color:Aqua:Glinda@@ "Oh no!" Glinda cries out. "The Fairy Rescue system has broken! Things must be really bad for that to happen!"
<<link "I have faith in you, Glinda. Please just do your best!">>
<<set $DisableMenu to false>>\
<<script>>
Dialog.close();
Engine.play("TownSquare");
<</script>>
<</link>>\
<<endif>>\
<<set $WORLD.SmithQuests[1] to 99>>\
\
@@color:Gold;A grateful adventurer@@
<hr>\
<<SimplePic _SuccessPic>>\
@@color:LightGreen;Adventurer@@: "Thank you! Thank you so much! I thought I was never going to get out of there!"
<<if $WORLD.smith is 3>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Kind of serves you right though. You're the thief who stole Finley's hammer, aren't you?"
@@color:LightGreen;Adventurer@@: "...stole?" _AdvenHeShe turns white. "No, no,no...I just, uhh...//borrowed// it. But now that you're here I can give it to you to give back to him, so no harm no foul. Right?"
<<if setup.getnextinvslot($CC) < 0>>\
<<set $WORLD.SmithQuests[1] to "smith has it">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Unfortunately my bags are full and I don't have any room to carry it. If I let you go, will you promise to return it for me?"
@@color:LightGreen;Adventurer@@: "Oh, absolutely!" _AdvenHeShe nods vigrously. "I definitely wouldn't take advantage of the opportunity to sneak off into the night instead and head south to Talven where I can get lost without anyone ever finding me!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Good," you nod agreably. "I'm sure I can trust someone who stole a hammer to be true to their word."
Feeling complete and total faith that the now freed adventurer will return the very valuable hammer to the blacksmith without any further need for supervision, you wave goodbye and as _AdvenHeShe runs off into the distance.
<<else>>\
<<set $WORLD.SmithQuests[1] to "player has it">>\
<<set _ads to setup.GiveItem($CC, [101,105,0,0,0])>>\
<<print _AdvenHeShe.toUpperFirst()>> gives you the hammer. To your disappointment, it seems to be a small smithing hammer, and not at all like something you could use in combat. Still, having what you came for, your wave to the adventurer as _AdvenHeShe heads back to town.
<<endif>>\
<<else>>\
<<set _ExitLinks to "return to forest, clear event">>\
<<set $WORLD.SmithQuests[1] to "player doesn't know smith has it">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Happy to help. So, how does this whole master/slave thing work. I just tell you what to do and you have to do it, right?"
@@color:LightGreen;Adventurer@@: "Hahaha," _AdvenHeShe laughs. "Don't be silly. I know you're here to retreive that blacksmith's smithing hammer.
<<print _AdvenHeShe.toUpperFirst()>> holds out a steel smithing hammer for you.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What are you talking about, slave? I never picked up a quest like that."
@@color:LightGreen;Adventurer@@: "Hahaha," _AdvenHisHer laughing starts to sound oddly forced. "I'm so glad my noble and gracious rescuer has such a good sense of humor. Hahaha...right?"
<<if $PC[$CC][$PCsex] is "female">>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Besides, you're my slave now, so everything you own is mine anyway. Hand it over."
<<else>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Besides, you're my slave now, so everything you own is mine anyway. Hand it over. Also, you won't be needing your clothes anymore. Take them off."
<<endif>>\
@@color:LightGreen;Adventurer@@: "Oh look," _AdvenHeShe points behind you. "The omnibus is coming back! She sure looks angry!"
You turn to look, but see nothing. Then turn back just in time to see the adventurer running back towards town.
<<endif>>\
<<set $WORLD.smith to 4>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "Forest">>
<<AdvanceTime 5>>
<</link>>\
</span>\
Quest query
<<elseif $WORLD.datapasser[1] is 4>><!-- Tower level 5 -->\\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Rina. What can you yell me about the abandoned church in town?"
@@color:Pink;Rina@@: "It used to belong to the Order of Immaculate Purity, but they shut down for lack of followers. Hard to convince people around these parts to remain chaste. The internet hasn't been invented yet, so most people go to orgies for their social networking."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Right. So who runs it now??"
@@color:Pink;Rina@@: ""
@@color:Green;<<print $PC[$CC][$PCname]>>@@: ""
@@color:Pink;Rina@@: ""
<<elseif $WORLD.datapasser[1] is 5>><!-- Abandoned church -->\
quest 5
<<elseif $WORLD.datapasser[1] is 6>><!-- Babies -->\\
<<if $PC[$CC][$PCsex] is "male">>\
@@color:Pink;Rina@@: "Do you like sex?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sure, I guess. I mean, I'm playing a porn game, aren't I?"
@@color:Pink;Rina@@: "You'd be surprised. Anyway, for this next quest I want you to go find a sexy monster babe and fuck her."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'm guessing there's a catch."
@@color:Pink;Rina@@: "Yep. You can't just fuck her, you have to make her pregnant."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Still waiting for the catch."
@@color:Pink;Rina@@: "Afterwards, she'll carry the child to term and eventually a brand new baby will show up on your doorstep!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "And there's the catch. Explain to me please, why would I do this?"
@@color:Pink;Rina@@: "It's an important game mechanic. No, really! It is. Honest."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...right. Ok, so supposing I do this, is there anything else I need to know?"
@@color:Pink;Rina@@: "Yep. Monster sex only rarely results in impregnation. I recommend you talk to the alchemist in town to see if she has anything to help with that."
<<else>>\
@@color:Pink;Rina@@: "Do you like babies?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Sure, I guess?"
@@color:Pink;Rina@@: "Great! Because for this next quest, I want you to go get fucked by some monster and become pregnant, then give birth."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "...uhh, how about, no?"
@@color:Pink;Rina@@: "No, seriously. Just go find a wolf or a slime or a goblin or whatever, let it beat you up then pump you full of monster babies! Doesn't that sound fun?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Rina, I think you need profesional help."
@@color:Pink;Rina@@: "Of course, only vaginal sex can result in pregnancy, and even then, not always. That alchemist who lives over by the tower might have something that can help with that."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Rina, just stop."
@@color:Pink;Rina@@: "Gee, I sure wish I was an adventurer! Then I could do super awesome amazing fun quests like this one!"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "If you want, I could hop over onto that side of the desk and you could do it instead?"
@@color:Pink;Rina@@: "Nah, I'll pass, thanks. "
<<endif>>\
quest turnin
@@color:Pink;Rina@@: "Implement quest turn in: defeat the level 5 tower boss"
<<elseif _FocusedQuest is 7>>\
@@color:Pink;Rina@@: "Implement quest turn in: proceed to area south"
<<elseif _FocusedQuest is 8>>\
@@color:Pink;Rina@@: "Implement quest turn in: defeat the level 10 tower boss"
<<elseif _FocusedQuest is 9>>\
@@color:Pink;Rina@@: "Implement quest turn ins!"
<<widget "Use">>\
<<set _iPTR to $args[0]>>\
<<set _item to $PC[$CC][$PCinven][_iPTR]>>\
<<DescribeItem _item>>\
<<set _UseDepleteItem to true>>\
<<set _EndCombatTurn to true>>\
<<unset $InventoryInterrupt>>\
\
<<set _MSM to "meat">>\
<<if $ItemPoke.fullname.includes("semen")>>\
<<set _MSM to "semen">>\
<<elseif $ItemPoke.fullname.includes("milk")>>\
<<set _MSM to "milk">>\
<<endif>>\
<<if $ItemPoke.fullname.includes("bunny-morph")>>\
<<set _Morph to "bunny-morph">>\
<<elseif $ItemPoke.fullname.includes("fox-morph")>>\
<<set _Morph to "fox-morph">>\
<<elseif $ItemPoke.fullname.includes("cat-morph")>>\
<<set _Morph to "cat-morph">>\
<<elseif $ItemPoke.fullname.includes("wolf-morph")>>\
<<set _Morph to "wolf-morph">>\
<<elseif $ItemPoke.fullname.includes("wolf")>>\
<<set _Morph to "wolf">>\
<<elseif $ItemPoke.fullname.includes("horse")>>\
<<set _Morph to "horse">>\
<<elseif $ItemPoke.fullname.includes("cow")>>\
<<set _Morph to "cow">>\
<<elseif $ItemPoke.fullname.includes("centaur")>>\
<<set _Morph to "centaur">>\
<<elseif $ItemPoke.fullname.includes("slime")>>\
<<set _Morph to "slime">>\
<<elseif $ItemPoke.fullname.includes("goblin")>>\
<<set _Morph to "goblin">>\
<<elseif $ItemPoke.fullname.includes("human")>>\
<<set _Morph to "human">>\
<<elseif $ItemPoke.fullname.includes("spider")>>\
<<set _Morph to "spider">>\
<<elseif $ItemPoke.fullname.includes("minotaur")>>\
<<set _Morph to "minotaur">>\
<<elseif $ItemPoke.fullname.includes("cow")>>\
<<set _Morph to "cow">>\
<<elseif $ItemPoke.fullname.includes("hellhound")>>\
<<set _Morph to "hellhound">>\
<<elseif $ItemPoke.fullname.includes("imp")>>\
<<set _Morph to "imp">>\
<<elseif $ItemPoke.fullname.includes("hydra")>>\
<<set _Morph to "hydra">>\
<<elseif $ItemPoke.fullname.includes("rat-morph")>>\
<<set _Morph to "rat-morph">>\
<<elseif $ItemPoke.fullname.includes("troll")>>\
<<set _Morph to "troll">>\
<<elseif $ItemPoke.fullname.includes("drider")>>\
<<set _Morph to "drider">>\
<<elseif $ItemPoke.fullname.includes("harpy")>>\
<<set _Morph to "harpy">>\
<<elseif $ItemPoke.fullname.includes("succubus")>>\
<<set _Morph to "demon">>\
<<elseif $ItemPoke.fullname.includes("incubus")>>\
<<set _Morph to "demon">>\
<<elseif $ItemPoke.fullname.includes("omnibus")>>\
<<set _Morph to "demon">>\
<<elseif $ItemPoke.fullname.includes("tentacle")>>\
<<set _Morph to "tentacle">>\
<<elseif $ItemPoke.fullname.includes("demon")>>\
<<set _Morph to "demon">>\
<<elseif $ItemPoke.fullname.includes("naga")>>\
<<set _Morph to "naga">>\
<<elseif $ItemPoke.fullname.includes("snake")>>\
<<set _Morph to "snake">>\
<<elseif $ItemPoke.fullname.includes("ant")>>\
<<set _Morph to "ant">>\
<<elseif $ItemPoke.fullname.includes("scorpion")>>\
<<set _Morph to "scorpion">>\
<<else>>\
<<set _Morph to "Error: unrecognized morphology for transformative consumable.">>\
<<endif>>\ \
<<if $PC[$CC][$PCinven][_iPTR][0] is 117>><!-- hair dye -->
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _HeadPTR to -1>>\
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
<<if $PC[$CC][$PCbp][_i].type is $BPhead>>\
<<set _HeadPTR to _i>>\
<<endif>>\
<</for>>\
<<if _HeadPTR < 0>>\
<<set _UseDepleteItem to false>>\
<<set _Message to "You don't have a head to apply this to">>\
<<else>>\
<<set _NewColor to $ItemPoke.usedata>>\
<<set $PC[$CC][$PCbp][_HeadPTR].hair to _NewColor>>\
<<set _Message to "You dye your hair " + _NewColor>>\
<<endif>>\
<<elseif ($ItemPoke.tooleffect is 10)>><!-- normal food -->\
<<set _Message to "You feel less hungry">>\
<<set _EatMe to $ItemPoke.foodval>>\
<<if _EatMe > 0>>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] + _EatMe>>\
<<if $PC[$CC][$PChunger] > 500>>\
<<set $PC[$CC][$PChunger] to 500>>\
<<endif>>\
<<endif>>\
<<ShowHunger>>\
<<elseif ($ItemPoke.tooleffect is 11)>><!-- normal drink -->\
<<set _Message to "You feel less thirsty">>\
<<set _EatMe to $ItemPoke.foodval>>\
<<if _EatMe > 0>>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] + _EatMe>>\
<<if $PC[$CC][$PChunger] > 500>>\
<<set $PC[$CC][$PChunger] to 500>>\
<<endif>>\
<<endif>>\
<<ShowHunger>>\
<<elseif ($ItemPoke.tooleffect is 20)>><!-- transformative food -->\
<<set _UIOVERRIDE to true>>\
<<set _EatMe to $ItemPoke.foodval>>\
<<if _EatMe > 0>>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] + _EatMe>>\
<<if $PC[$CC][$PChunger] > 500>>\
<<set $PC[$CC][$PChunger] to 500>>\
<<endif>>\
<<endif>>\
<<ShowHunger>>\
<<replace "#inverr">><<DoTransform _Morph _MSM>><</replace>>\
<<replace "#EquipmentGoesHere">><<ShowEquipment>><</replace>>\
<<elseif ($ItemPoke.tooleffect is 21)>><!-- transformative drink -->\
<<set _UIOVERRIDE to true>>\
<<set _EatMe to $ItemPoke.foodval>>\
<<if _EatMe > 0>>\
<<set $PC[$CC][$PChunger] to $PC[$CC][$PChunger] + _EatMe>>\
<<if $PC[$CC][$PChunger] > 500>>\
<<set $PC[$CC][$PChunger] to 500>>\
<<endif>>\
<<endif>>\
<<ShowHunger>>\
<<replace "#inverr">><<DoTransform _Morph _MSM>><</replace>>\
<<replace "#EquipmentGoesHere">><<ShowEquipment>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 103>><!-- dildo -->
<<set _UseDepleteItem to false>>\
<<if $GameState is "combat">>\
<<set _EndCombatTurn to false>>\
<<set _Message to "You cannot use this in combat, but the " + $Mon.name + " enjoys watching you try.">>\
<<else>>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set _Message to "There's nothing you can do with this.">>\
<<else>>\
<<if $PC[$CC][$PChornycur] is 0>>\
<<set _Message to "You're not horny enough to use this.">>\
<<else>>\
<<set $PC[$CC][$PChornycur] to 0>>\
<<ShowHorny>>\
<<set _Message to "You feel less aroused">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 135>><!-- fleshlight -->
<<set _UseDepleteItem to false>>\
<<if $GameState is "combat">>\
<<set _EndCombatTurn to false>>\
<<set _Message to "You cannot use this in combat, but the " + $Mon.name + " is amused by your attempt.">>\
<<else>>\
<<if $PC[$CC][$PCsex] is "female">>\
<<set _Message to "There's nothing you can do with this.">>\
<<else>>\
<<if $PC[$CC][$PChornycur] is 0>>\
<<set _Message to "You're not horny enough to use this.">>\
<<else>>\
<<set $PC[$CC][$PChornycur] to 0>>\
<<ShowHorny>>\
<<set _Message to "You feel less aroused">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 118>><!-- healing potion -->
<<set _HealAmount to random(1,10) + $PC[$CC][$PClevel]>>\
<<ChangeStat $PChpcur _HealAmount>>\
<<set _Message to "You are @@color:Aqua;healed for " + _HealAmount + "@@ health">>\
<<if $PC[$CC][$PChpcur] >= $PC[$CC][$PChpmax]>>\
<<set _Message to "You are healed to full!">>\
<<endif>>\
<<ShowHealth>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 119>><!-- fire resist potion -->
<<ApplyEffect "resist fire" 1>>\
<<ShowActiveEffects>>\
<<set _Message to "Your skin becomes cool to the touch">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 123>><!-- antivenom -->
<<if setup.GetEffect("oison") > 0>>
<<set _Message to "You drink the antivenom and feel much better">>\
<<for _CBE to $PC[$CC][$PCeffects].length -1; _CBE > -1; _CBE-->>\
<<if $PC[$CC][$PCeffects][_CBE][0].includes("oison")>>\
<<set _throwaway to $PC[$CC][$PCeffects].deleteAt(_CBE)>>\
<<endif>>\
<</for>>\
<<ShowActiveEffects>>\
<<else>>\
<<set _Message to "You drink the antivenom, but you were not poisoned">>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 124>><!-- magic resist potion -->
<<ApplyEffect "resist magic" 1>>\
<<ShowActiveEffects>>\
<<set _Message to "Your skin begins to sparkle">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 125>><!-- penis growth -->
<<set _PenisPTR to setup.GetRandomBPptrOfTypeFromList($BPpenis, $PC[$CC][$PCbp])>>\
<<if _PenisPTR < 0>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, $BPpenis)>>\
<<TFAdderHelper _LocOfNewPart>>\
<< $PC[$CC][$PCbp][_LocOfNewPart].size to 1>>\
<<set _Message to "You sprout a brand new penis!">>\
<<else>>\
<<set _PartMorph to $PC[$CC][$PCbp][_PenisPTR].morph>>\
<<set _MaxSexPart to 12>>\
<<if (_PartMorph is "horse") or (_PartMorph is "cow")>>\
<<set _MaxSexPart to 36>>\
<<elseif (_PartMorph is "wolf") or (_PartMorph is "hellhound")>>\
<<set _MaxSexPart to 18>>\
<<elseif _PartMorph is "demon">>\
<<set _MaxSexPart to 24>>\
<<elseif _PartMorph is "rat-morph">>\
<<set _MaxSexPart to 6>>\
<<endif>>\
<<if $PC[$CC][$PCbp][_PenisPTR].size gte _MaxSexPart>>\
<<set _Message to "You're fairly certain a penis of this type can't get any larger">>\
<<set $PC[$CC][$PCbp][_PenisPTR].size to _MaxSexPart>>\
<<else>>\
<<if $PC[$CC][$PCbp][_PenisPTR].size > 8>>\
<<set $PC[$CC][$PCbp][_PenisPTR].size to $PC[$CC][$PCbp][_PenisPTR].size +1>>\
<<set _Message to "Your penis grows, but only by an inch">>\
<<else>>\
<<set $PC[$CC][$PCbp][_PenisPTR].size to $PC[$CC][$PCbp][_PenisPTR].size + random(1,2)>>\
<<set _Message to "Your penis grows">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<UpdateMorphs>><<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 126>><!-- penis reduction -->\
<<set _PenisPTR to setup.GetRandomBPptrOfTypeFromList($BPpenis, $PC[$CC][$PCbp])>>\
<<if _PenisPTR < 0>>\
<<set _Message to "You drink the liquid down but don't have penis for it to affect">>\
<<else>>\
<<set _PenisSize to $PC[$CC][$PCbp][_PenisPTR].size -1>>\
<<if _PenisSize < 1>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, $BPpenis)>>
<<set _Message to "The last bit of your penis shrivels up and disappears">>\
<<else>>\
<<set _Message to "Your penis shrinks">>\
<<set $PC[$CC][$PCbp][_PenisPTR].size to _PenisSize>>\
<<endif>>\
<<endif>>\
<<UpdateMorphs>><<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 127>><!-- breast growth -->
<<set _BoobPTR to setup.GetRandomBPptrOfTypeFromList($BPboobs, $PC[$CC][$PCbp])>>\
<<if _BoobPTR < 0>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, $BPboobs)>>\
<<TFAdderHelper _LocOfNewPart>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].size to 1>>\
<<set _Message to "You sprout a budding pair of boobs!">>\
<<else>>\
<<set _PartMorph to $PC[$CC][$PCbp][_BoobPTR].morph>>\
<<set _MaxSexPart to 80>>\
<<if (_PartMorph is "cow") or (_PartMorph is "demon")>>\
<<set _MaxSexPart to 120>>\
<<elseif (_PartMorph is "wolf") or (_PartMorph is "hellhound")>>\
<<set _MaxSexPart to 20>>\
<<elseif _PartMorph is "rat-morph">>\
<<set _MaxSexPart to 40>>\
<<endif>>\
<<if _BoobSize > _MaxSexPart>>\
<<set <<set $PC[$CC][$PCbp][_BoobPTR].size to _MaxSexPart>>\
<<set _Message to "You're fairly certain your chest can't get any larger">>\
<<else>>\
<<set $PC[$CC][$PCbp][_BoobPTR].size to $PC[$CC][$PCbp][_BoobPTR].size +1>>\
<<set _Message to "Your breasts grow larger">>\
<<endif>>\
<<endif>>\
<<UpdateMorphs>><<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 128>><!-- breast reduction -->
<<set _BoobPTR to setup.GetRandomBPptrOfTypeFromList($BPboobs, $PC[$CC][$PCbp])>>\
<<if _BoobPTR < 0>>\
<<set _Message to "You drink the liquid down but don't have any breasts for it to affect">>\
<<else>>\
<<set _BoobSize to $PC[$CC][$PCbp][_BoobPTR].size - random(1, 3)>>\
<<if _BoobSize < 1>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, $BPboobs)>>
<<set _Message to "The last bit of mammary tissue fades from your breasts and all that remains is muscle">>\
<<else>>\
<<set _Message to "Your breasts shrink">>\
<<set $PC[$CC][$PCbp][_BoobPTR].size to _BoobSize>>\
<<endif>>\
<<endif>>\
<<UpdateMorphs>><<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 139>><!-- pussy growth -->
<<set _PussyPTR to setup.GetRandomBPptrOfTypeFromList($BPpussy, $PC[$CC][$PCbp])>>\
<<if _PussyPTR < 0>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, $BPpussy)>>\
<<TFAdderHelper _LocOfNewPart>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].size to 1>>\
<<set _Message to "You grow a vagina!">>\
<<else>>\
<<set _PartMorph to $PC[$CC][$PCbp][_PussyPTR].morph>>\
<<set _MaxSexPart to 12>>\
<<if (_PartMorph is "horse") or (_PartMorph is "cow")>>\
<<set _MaxSexPart to 36>>\
<<elseif (_PartMorph is "wolf") or (_PartMorph is "hellhound")>>\
<<set _MaxSexPart to 18>>\
<<elseif _PartMorph is "demon">>\
<<set _MaxSexPart to 24>>\
<<elseif _PartMorph is "rat-morph">>\
<<set _MaxSexPart to 6>>\
<<endif>>\
<<if $PC[$CC][$PCbp][_PussyPTR].size gte _MaxSexPart>>\
<<set _Message to "You're fairly certain a pussy of this type can't get any deeper">>\
<<set $PC[$CC][$PCbp][_PussyPTR].size to _MaxSexPart>>\
<<else>>\
<<if $PC[$CC][$PCbp][_PussyPTR].size > 8>>\
<<set $PC[$CC][$PCbp][_PussyPTR].size to $PC[$CC][$PCbp][_PussyPTR].size +1>>\
<<set _Message to "Your pussy grows deeper">>\
<<else>>\
<<set $PC[$CC][$PCbp][_PussyPTR].size to $PC[$CC][$PCbp][_PussyPTR].size + random(1,2)>>\
<<set _Message to "Your pussy grows deeper">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<UpdateMorphs>><<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 140>><!-- pussy reduction -->\
<<set _PussyPTR to setup.GetRandomBPptrOfTypeFromList($BPpussy, $PC[$CC][$PCbp])>>\
<<if _PussyPTR < 0>>\
<<set _Message to "You drink the liquid down but don't have pussy for it to affect">>\
<<else>>\
<<set _PussySize to $PC[$CC][$PCbp][_PussyPTR].size -5>>\
<<if _PussySize < 1>>\
<<set _BPRemoved to setup.RemoveBodyPart($CC, $BPpussy)>>
<<set _Message to "The last bit flesh fills in and your pussy disappears!">>\
<<else>>\
<<set _Message to "Your pussy shrinks">>\
<<set $PC[$CC][$PCbp][_PussyPTR].size to _PussySize>>\
<<endif>>\
<<endif>>\
<<UpdateMorphs>><<replace "#CapSexMorph">><<ShowSexMorph>><</replace>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 143>><!-- rage potion -->
<<ApplyEffect "rage" 60>>\
<<ShowActiveEffects>>\
<<set _Message to "You blood boils as fury consumes you">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 144>><!-- water walking potion -->
<<ApplyEffect "water walk" 60>>\
<<ShowActiveEffects>>\
<<set _Message to "Your feet feel slippery">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 145>><!-- water breathing potion -->
<<ApplyEffect "water breath" 60>>\
<<ShowActiveEffects>>\
<<set _Message to "Your breathing changes">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 129>><!-- aphrodisiac -->
<<set _Aroused to random(20,30)>>\
<<ChangeStat $PChornycur _Aroused>>\
<<ShowHorny>>\
<<set _Message to "You become more aroused">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 130>><!-- fertili-tea -->
<<if setup.PlayerHasPerk("Barren") is true>>\
<<set _Message to "You drink the liquid, but don't feel any different.">>\
<<else>>\
<<ApplyEffect "fertile" 1440>>\
<<ShowActiveEffects>>\
<<set _Message to "You feel fertile">>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 131>><!-- contraceptive -->
<<if $PC[$CC][$PCpregnant][0] > 0>>\
<<set _Message to "It's a little late for that, don't you think?">>\
<<else>>\
<<ApplyEffect "barren" 1440>>\
<<ShowActiveEffects>>\
<<set _Message to "You feel barren">>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 132>><!-- scissors -->
<<set _UseDepleteItem to false>>\
<<set _HeadPTR to setup.GetRandomBPptrOfTypeFromList($BPhead, $PC[$CC][$PCbp])>>\
<<if _HeadPTR < 0>>\
<<set _UseDepleteItem to false>>\
<<set _Message to "You don't have a head with hair to cut">>\
<<elseif $PC[$CC][$PCbp][_HeadPTR].size < 1>>\
<<set _Message to "You don't have any hair to cut">>\
<<else>>\
<<set _H to $PC[$CC][$PCbp][_HeadPTR].size -1>>\
<<set $PC[$CC][$PCbp][_HeadPTR].size to _H>>\
<<set _Message to "You trim your hair">>\
<<if $PC[$CC][$PCbp][_HeadPTR].size < 1>>\
<<set $PC[$CC][$PCbp][_HeadPTR].size to 0>>\
<<set _Message to "You cut the last bit of hair from your head. You're now bald.">>\
<<endif>>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 133>><!-- hair growth -->
<<set _HeadPTR to setup.GetRandomBPptrOfTypeFromList($BPhead, $PC[$CC][$PCbp])>>\
<<if _HeadPTR < 0>>\
<<set _UseDepleteItem to false>>\
<<set _Message to "You don't have a head to apply this to">>\
<<else>>\
<<set _NewLength to $PC[$CC][$PCbp][_HeadPTR].size + random(1,2)>>\
<<if _NewLength > 0>>\
<<set $PC[$CC][$PCbp][_HeadPTR].size to _NewLength>>\
<<set _Message to "Your hair grows longer">>\
<<endif>>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 136>><!-- strange green liquid -->
<<set _AcidDamage to random(5,10) * -1>>\
<<ChangeStat $PChpcur _AcidDam>>\
<<if $PC[$CC][$PChpcur] < 0>>\
<<elseif $PC[$CC][$PCpregnant][0] > 0>>\
<<set _Message to "The liquid burns going down your throat, then settles painfully in your abdomen. @@color:Yellow;You feel strangely alone.@@">>\
<<set $PC[$CC][$PCpregnant] to [0, "", -1, -1, -1, -1]>>\
<<AwardAchievement "Barren">>\
<<else>>\
<<set _Message to "The liquid burns going down your throat, then settles in your abdomen, burning all the way">>\
<<endif>>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 137>><!-- stoneskin potion -->
<<ApplyEffect "stoneskin" 1>>\
<<ShowActiveEffects>>\
<<set _Message to "Your skin begins to sparkle">>\
<<elseif $PC[$CC][$PCinven][_iPTR][0] is 111>><!-- spellbook -->\
<<if $GameState is "combat">>\
<<set _UseDepleteItem to false>>\
<<set _EndCombatTurn to false>>\
<<set _Message to "You cannot use this in combat">>\
<<else>>\
<<if $PC[$CC][$PCinven][_iPTR][3] is 500>>\
<<set _spell to "firebolt">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 501>>\
<<set _spell to "heal">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 502>>\
<<set _spell to "armor">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 503>>\
<<set _spell to "poison">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 504>>\
<<set _spell to "up">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 505>>\
<<set _spell to "down">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 506>>\
<<set _spell to "portal">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 507>>\
<<set _spell to "light">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 508>>\
<<set _spell to "map">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 509>>\
<<set _spell to "passwall">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 510>>\
<<set _spell to "soultrap">>\
<<elseif $PC[$CC][$PCinven][_iPTR][3] is 511>>\
<<set _spell to "dart">>\
<<else>>\
<<set _spell to "error in use: recognized spellbook " + $PC[$CC][$PCinven][_iPTR][3]>>\
<<set _UseDepleteItem to false>>\
<<endif>>\
<<set _Class to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<if setup.CanClassLearnSpell(_Class, _spell) is true>>\
<<set $Result to setup.LearnSpell(_spell)>>\
<<replace "#inverr">><<print $Result>><<SpellAchieveCheck>><</replace>>\
<<else>>\
<<set $Result to _Class + "s cannot learn " + _spell>>\
<<set _UseDepleteItem to false>>\
<<replace "#inverr">><<print $Result>><</replace>>\
<<endif>>\
<<if $Result is "You already know that spell">>\
<<set _UseDepleteItem to false>>\
<<endif>>\
<<set _Message to $Result>>\
<<unset $Result>>\
<<set _UIOVERRIDE to true>>\
<<endif>>\
<<else>>\
<<replace "#inverr">>@@color:Yellow;Error@@: item ($ItemPoke.fullname) has no Use entry: tooleffect is: <<print $ItemPoke.tooleffect>>, iPTR is_iPTR, manual fetch shows: $PC[$CC][$PCinven][_iPTR] <</replace>>\
<<endif>>\
<<if _UseDepleteItem is true>>\
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _iPTR)>>\
<<replace "#InventoryGoesHere">><<ShowInventory>><</replace>>\
<<endif>>\
<<if $GameState is "combat">>\
<<if _EndCombatTurn is true>>\
<<set _Message to ["INVENTORY",-1,_Message]>>\
<<script>>
Dialog.close();
<</script>>
<<CombatAttack _Message>>
<<run Health2($Mon.hpcur, $Mon.hpmax, "monhpnbar", true)>>\
<<MonsterTurn false>>\
<<else>>\
<<replace "#inverr">><<print _Message>><</replace>>\
<<endif>>\
<<else>>\
<<if _UIOVERRIDE is true>><<else>>\
<<replace "#inverr">><<print _Message>><</replace>>\
<<endif>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>\
<<endif>>\
<</widget>>\
<<widget "ShowEquipment">>\
@@color:Gold;Wearing@@
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _SEi to 0; _SEi < _bpqty; _SEi++>>\
<<set _bp to $PC[$CC][$PCbp][_SEi]>>\
<<if _bp.equippable is true>>\
<<if $PC[$CC][$PCbp][_SEi].equip[0] is 0>>\
<span class="grayb"><<button "[Unequip]">><</button>></span> \
@@color:Gold;<<print setup.bpptrtoname(_bp.type, "formal")>>@@\
<<DescribeItem _bp.equip>>: none <<if $DebugMode is true>>(<<print _bp.type>>)<<endif>>
<<else>>\
<<capture _SEi>>\
<<button "[Unequip]">>
<<if $GameState is "combat">>\
<<replace "#inverr">>Cannot remove equipment during combat<</replace>>
<<else>>\
<<set _whereto to setup.getnextinvslot($CC)>>\
<<if _whereto < 0>>
<<replace "#inverr">>No room in inventory<</replace>>
<<elseif $PC[$CC][$PCbp][_SEi].equip[0] is 0>>
<<replace "#inverr">>Nothing equipped in that slot: _SEi<</replace>>
<<else>>
<<DescribeItem $PC[$CC][$PCbp][_SEi].equip>>\
<<set _itemname to $ItemPoke.name>>\
<<if $PC[$CC][$PCbp][_SEi].equip[2] > 0>>\
<<set _ToSlot to setup.GiveItem($CC, $PC[$CC][$PCbp][_SEi].equip)>>\
<<set $PC[$CC][$PCbp][_SEi].equip to [0,0,0,0,0]>>
<<else>>\
<<set $PC[$CC][$PCinven][_whereto] to $PC[$CC][$PCbp][_SEi].equip>>
<<set $PC[$CC][$PCbp][_SEi].equip to [0,0,0,0,0]>>
<<endif>>\
<<replace "#inverr">>Unequipped <<print _itemname>><</replace>>
<<replace "#EquipmentGoesHere">><<ShowEquipment>><</replace>>\
<<replace "#InventoryGoesHere">><<ShowInventory>><</replace>>\
<<if passage() is "House">>\
<<replace "#PlayerInv">><<HouseShowPlayerInv>><</replace>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>\
<<UpdateACandFlirts>>\
<</button>> \
@@color:Gold;<<print setup.bpptrtoname(_bp.type, "formal")>>@@\
<<DescribeItem _bp.equip>>: <<print $ItemPoke.fullname>> \
<<if $DebugMode is true>>\
(<<print $PC[$CC][$PCbp][_SEi].type>>)
<<else>>\
<br>\
<<endif>>\
<</capture>>\
<<endif>>\
<<elseif $DebugMode is true>>\
Debug: unequippable slot: <<print setup.bpptrtoname(_bp.type, "formal")>>
<<endif>>\
<</for>>\
<</widget>>\
<<widget "ReportInvFullness">>\
<<set _InvCount to setup.GetInvCount($CC)>>\
<<set _InvLimit to setup.GetCarryLimit()>>\
<<if _InvCount < _InvLimit>>\
@@color:LightGreen;<<print _InvCount>> / <<print _InvLimit>>@@\
<<elseif _InvCount is _InvLimit>>\
@@color:Yellow;<<print _InvCount>> / <<print _InvLimit>>@@\
<<else>>\
@@color:Red;<<print _InvCount>> / <<print _InvLimit>>@@\
<<endif>>\
<</widget>>\
<<widget "ShowInventory">>\
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span> \
<<button "[Mode]">>
<<if $InvenMode is "use">>\
<<set $InvenMode to "destroy">>\
<<else>>\
<<set $InvenMode to "use">>\
<<endif>>\
<<replace "#InventoryGoesHere">><<ShowInventory>><</replace>>
<</button>> | \
<<button "[Sort]">>
<<for _SortI to $PC[$CC][$PCinven].length -1; _SortI > -1; _SortI-->>\
<<if $PC[$CC][$PCinven][_SortI][0] is 0>>\
<<set _throwaway to $PC[$CC][$PCinven].deleteAt(_SortI)>>\
<<endif>>\
<</for>>\
<<for _SortI to 0; _SortI < $PC[$CC][$PCinven].length -1; _SortI++>>\
<<for _SortJ to 0; _SortJ < $PC[$CC][$PCinven].length -1; _SortJ++>>\
<<if $PC[$CC][$PCinven][_SortJ][0] > $PC[$CC][$PCinven][_SortJ +1][0]>>\
<<set _SortTemp to $PC[$CC][$PCinven][_SortJ]>>\
<<set $PC[$CC][$PCinven][_SortJ] to $PC[$CC][$PCinven][_SortJ +1]>>\
<<set $PC[$CC][$PCinven][_SortJ +1] to _SortTemp>>\
<<endif>>\
<</for>>\
<</for>>\
<<replace "#InventoryGoesHere">><<ShowInventory>><</replace>>
<</button>>
<<for _SIi to 0; _SIi < $PC[$CC][$PCinven].length; _SIi++>>\
<<set _item to $PC[$CC][$PCinven][_SIi]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<if _desc neq "none">>\
<<if $InvenMode is "destroy">>\
<<capture _SIi>>\
<span class="redb">\
<<button "[DESTROY]">>\
<<set $PC[$CC][$PCinven][_SIi] to [0,0,0,0,0]>>
<<replace "#InventoryGoesHere">><<ShowInventory>><</replace>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>\
<</button>> _desc
</span>\
<</capture>>\
<<elseif $ItemPoke.slot < 0>>\
<<capture _SIi>>\
<<if $ItemPoke.tooleffect is 6>>\
<<button "[-Use-]">>
<<Use _SIi>>\
<</button>> _desc
<<elseif $ItemPoke.tooleffect is 16>>\
<<button "[-Use-]">>
<<Use _SIi>>\
<</button>> _desc
<<elseif $ItemPoke.tooleffect is 7>>\
<<button "[-Use-]">>
<<Use _SIi>>\
<</button>> _desc
<<elseif ($ItemPoke.tooleffect is 10) or ($ItemPoke.tooleffect is 20)>>\
<<button "[-Eat-]">>
<<if $GameState is "combat">>\
<<replace "#inverr">>Cannot eat during combat<</replace>>
<<else>>\
<<set $WORLD.datapasser to "">>\
<<Use _SIi>>\
<<endif>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>\
<</button>> _desc
<<elseif ($ItemPoke.tooleffect is 11) or ($ItemPoke.tooleffect is 21)>>\
<<button "[Drink]">>
<<if $GameState is "combat">>\
<<replace "#inverr">>Cannot drink non-potion items during combat<</replace>>
<<else>>\
<<set $WORLD.datapasser to "">>\
<<Use _SIi>>\
<<endif>>\
<</button>> _desc
<<elseif $ItemPoke.tooleffect is 12>>\
<<button "[Read ]">>
<<Use _SIi>>\
<</button>> _desc
<<elseif $ItemPoke.tooleffect is 13>>\
<<button "[Read ]">>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>\
<</button>> _desc (not implemented)
<<elseif $ItemPoke.tooleffect is 15>>\
<<button "[Drink]">>
<<set $WORLD.datapasser to "">>\
<<Use _SIi>>
<</button>> _desc
<<else>>\
<span class="grayb"><<button "[Equip]">><</button>></span> <<print _desc>>
<<endif>>\
<</capture>>\
<<else>>\
<<set _slottype to $ItemPoke.slot>>\
<<if _slottype > -1>>\
<<capture _SIi, _slottype>>\
<<button "[Equip]">>\
<<if $GameState is "combat">>\
<<replace "#inverr">>Cannot change equipment during combat<</replace>>
<<else>>\
<<DescribeItem $PC[$CC][$PCinven][_SIi]>>\
<<set _slotdesc to setup.bpptrtoname(_slottype, "formal")>>\
<<set _try to setup.getunequippedofslottype($CC, _slottype)>>
<<if _try < 0>>
<<replace "#inverr">>No <<print _slotdesc>> available<</replace>>
<<else>>
<<if $PC[$CC][$PCinven][_SIi][2] > 1>>\
<<set $PC[$CC][$PCbp][_try].equip to clone($PC[$CC][$PCinven][_SIi])>>
<<set $PC[$CC][$PCbp][_try].equip[2] to 1>>
<<set $PC[$CC][$PCinven][_SIi][2] to $PC[$CC][$PCinven][_SIi][2] -1>>
<<else>>\
<<set $PC[$CC][$PCbp][_try].equip to $PC[$CC][$PCinven][_SIi]>>
<<set $PC[$CC][$PCinven][_SIi] to [0,0,0,0,0]>>
<<endif>>\
<<replace "#EquipmentGoesHere">><<ShowEquipment>><</replace>>\
<<replace "#InventoryGoesHere">><<ShowInventory>><</replace>>\
<<replace "#inverr">>Equipped to <<print _slotdesc>><</replace>>
<<if passage() is "House">>\
<<replace "#PlayerInv">><<HouseShowPlayerInv>><</replace>>\
<<endif>>\
<<endif>>\
<<replace "#InvQty">><<ReportInvFullness>><</replace>>\
<<UpdateACandFlirts>>\
<<endif>>\
<</button>> _desc (<<print setup.bpptrtoname(_slottype, "formal")>>)
<</capture>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if $DebugMode is true>>\
<hr>\
<<for _SIi to 0; _SIi < $PC[$CC][$PCinven].length; _SIi++>>\
_1) <<print $PC[$CC][$PCinven][_SIi]>>
<</for>>\
<<endif>>\
<</widget>>\
<<widget "EnchanterHelper">>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<capture _i>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _st to $ItemPoke.stackable>>\
<<if _desc neq "none">>\
<<if (_st is true) or ($ItemPoke.equippable is false)>>\
<span class="grayb"><<button "[Cannot]">><</button>></span> _desc
<<elseif (_item[1] > 549) and (_item[1] < 560)>>\
<span class="grayb"><<button "[Cannot]">><</button>></span> _desc
<<elseif (_item[4] > 0)>>\
<span class="grayb"><<button "[Enchanted]">><</button>></span> _desc
<<elseif $ItemPoke.slot > -1>>\
<<if $DebugMode>>(_item): <<endif>>\
<<button "[Select]">>\
<<set _asd to setup.ChangeButtonClass("foo","blueb")>>\
<<set $SelectedItem to _i>>\
<<replace "#Result">><</replace>>\
<<replace "#EnchantMe">>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<print $ItemPoke.fullname>>\
<</replace>>\
<</button>> _desc
<<else>>\
<span class="grayb"><<button "[Cannot]">><</button>></span> _desc
<<endif>>\
<<endif>>\
<</capture>>\
<</for>>\
<</widget>>\
<<widget "ShowStatsButtonsButtons">>\
<<if $CurrentStatsScreen is "Main">>\
<span class="greenb"><<button "[Main]">><<ShowPageMain>><</button>> | </span>\
<<else>>\
<<button "[Overview]">><<ShowPageOverview>><</button>> | \
<<endif>>\
<<if $CurrentStatsScreen is "Combat">>\
<span class="greenb"><<button "[Combat]">><<ShowPageCombat>><</button>> | </span>\
<<else>>\
<<button "[Overview]">><<ShowPageOverview>><</button>> | \
<<endif>>\
<<if $CurrentStatsScreen is "Statistics">>\
<span class="greenb"><<button "[Stats]">><<ShowPageStats>><</button>> | </span>\
<<else>>\
<<button "[Overview]">><<ShowPageOverview>><</button>> | \
<<endif>>\
<</widget>>\
<<widget "ShowPageMain">>\
<<replace "#StatsPortal">>\
<</replace>>\
<</widget>>\
<<widget "ShowPageOverview">>\
<<replace "#StatsPortal">>\
<</replace>>\
<</widget>>\
<<widget "ShowPageStats">>\
<<replace "#StatsPortal">>\
<</replace>>\
<</widget>>\
<<widget "ShowPageBody">>\
<<set $WORLD.BodyView to 0>>\
<<if $WORLD.Bodyview is 0>>\
<<UpdateMorphs>>\
@@color:Gold;Body@@
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.type is $BPhead>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@ with <<DescribeHair _bp.size _bp.style _bp.hair>>
<<elseif _bp.type is $BPneck>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPback>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPchest>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPwield>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPhands>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPwaist>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPlegs>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPfeet>>\
<!-- hack should be better implemented -->\
<<if _bp.morph is "cow">>\
<!-- cosmetic -->\
<<elseif _bp.morph is "horse">>\
<!-- cosmetic -->\
<<elseif _bp.morph is "demon">>\
<!-- cosmetic -->\
<<else>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<endif>>\
<<elseif _bp.type is $BPtentacle>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPring>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPstinger>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPpincer>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@
<<elseif _bp.type is $BPtail>>\
<<if _bp.morph is "demon">>\
You have a @@color:Red;spiked demon@@ @@color:LightGreen;tail@@\
<<else>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print _bp.morph>> tail@@\
<<endif>> <<if _bp.style is "none">><<else>>with <<DescribeTail _bp.size _bp.style _bp.hair>><<endif>>
<<elseif _bp.type is $BPhorns>>\
<<elseif _bp.type is $BPwings>>\
<<if _bp.morph is "demon">>\
You have a pair of <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;wings@@
<<else>>\
You have a pair of @@color:White;feathered angel@@ @@color:LightGreen;wings@@
<<endif>>\
<<elseif _bp.type is $BPboobs>>\
<<set _OrganCount to _OrganCount +1>>\
<<set _sz to _bp.size * 10>>\
<<set _cup to "You wear an A cup.">>\
<<if _sz > 999>>\
<<set _cup to "Your breasts are enormous">>\
<<elseif _sz > 799>>\
<<set _cup to "You wear a G cup.">>\
<<elseif _sz > 699>>\
<<set _cup to "You wear a F cup.">>\
<<elseif _sz > 599>>\
<<set _cup to "You wear a E cup.">>\
<<elseif _sz > 499>>\
<<set _cup to "You wear a DD cup.">>\
<<elseif _sz > 399>>\
<<set _cup to "You wear a D cup.">>\
<<elseif _sz > 299>>\
<<set _cup to "a You wear a C cup.">>\
<<elseif _sz > 199>>\
<<set _cup to "You wear a B cup.">>\
<<endif>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@, about <<print _sz>>cc in volume. <<print _cup>> <<if $DebugMode is true>>(Debug: Breast size is: <<print _sz>>)<<endif>>
<<elseif _bp.type is $BPpenis>>\
<<elseif _bp.type is $BPpussy>>\
<<else>>\
unrecognized body part: <<print setup.GetMorphFormatted(_bp.morph)>> <<print setup.bpptrtoname(_bp.type, "casual")>> (_bp.type)
<<endif>>\
<</for>>\
<hr>\
@@color:Gold;Cosmetic parts@@
<<set _OrganCount to 0>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.type is $BPhorns>>\
<<set _OrganCount to _OrganCount +1>>\
<<if _bp.morph is "demon">>\
You have a pair of @@color:Red;demonic horns@@
<<elseif _bp.morph is "cow">>\
You have a pair of @@color:Orange;cow horns@@
<<else>>\
You have a pair of @@color:Yellow;horns@@
<<endif>>\
<<elseif _bp.type is $BPwings>>\
<<set _OrganCount to _OrganCount +1>>\
<<if _bp.morph is "demon">>\
You have a pair of @@color:Red;demon wings@@
<<else>>\
You have a pair of @@color:White;feathered angel wings@@
<<endif>>\
<<elseif _bp.type is $BPfeet>>\
<<if _bp.morph is "cow">>\
<<set _OrganCount to _OrganCount +1>>\
You have @@color:Orange;cow hooves@@
<<elseif _bp.morph is "horse">>\
<<set _OrganCount to _OrganCount +1>>\
You have @@color:Green;horse hooves@@
<<elseif _bp.morph is "demon">>\
<<set _OrganCount to _OrganCount +1>>\
You have @@color:Red;demon hooves@@
<<endif>>\
<<endif>>\
<</for>>\
<<if _OrganCount is 0>>\
None
<<endif>>\
<hr>\
@@color:Gold;Sex organs@@
<<set _OrganCount to 0>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<<if _bp.type is $BPpenis>>\
<<set _OrganCount to _OrganCount +1>>\
<<set _sz to _bp.size>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@. It is about <<print _bp.size>> inches long.
<<elseif _bp.type is $BPpussy>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> @@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@. \
<<set _OrganCount to _OrganCount +1>>\
<<if _bp.virgin is true>>\
You are a virgin.
<<else>>\
<<set _sz to _bp.size>>\
<<if _sz > 11>>\
You're comfortably able to accomodate monster cocks well in excess of _sz inches. It would take a horse to satisfy you.
<<elseif _sz > 8>>\
You're can take cocks up unto the _sz inch range, which is quite large.
<<elseif _sz > 6>>\
You're comfortable with dicks as much as _sz inches long.
<<elseif _sz > 4>>\
You can only comfortably take dick up to _sz inches. Anything more than that is painful.
<<else>>\
It is tiny, and only able to accomodate dicks up to _sz inches.
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _OrganCount is 0>>\
You have no sexual organs.
<<endif>>\
<hr>\
@@color:Gold;Morphology@@
<<if $PC[$CC][$PCmorphQTY].human > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].human>> baseline human parts
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].bunny > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].bunny>> bunny parts, for +<<print $PC[$CC][$PCmorphQTY].bunny>> to hit with flirt attacks
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].cat > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].cat>> cat parts, for +<<print $PC[$CC][$PCmorphQTY].cat>> to damage with morph intrinsic attacks
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].fox > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].fox>> fox parts, for +<<print $PC[$CC][$PCmorphQTY].fox>> to hit with morph intrinsic attacks
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].wolf > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].wolf>> wolf parts, for +<<print $PC[$CC][$PCmorphQTY].wolf>> health
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].horse > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].horse>> horse parts, for +<<print $PC[$CC][$PCmorphQTY].horse * 2>> health
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].cow > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].cow>> cow parts, for +<<print $PC[$CC][$PCmorphQTY].cow * 2>> health
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].goblin > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].goblin>> goblin parts, for +<<print $PC[$CC][$PCmorphQTY].goblin>> flirt damage
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].slime > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].slime>> slime parts, causing you to take <<print $PC[$CC][$PCmorphQTY].slime * 2>>% less physical damage
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].insect > 0>>\
<!-- includes ant and scorpion -->\
You have <<print $PC[$CC][$PCmorphQTY].insect>> insect/arthropod parts, for +<<print $PC[$CC][$PCmorphQTY].insect * 2>> armor
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].hellhound > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].hellhound>> hellhound parts, for -<<print $PC[$CC][$PCmorphQTY].hellhound>> fire damage
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].dinosaur > 0>>\
<!-- includes hydra -->\
You have <<print $PC[$CC][$PCmorphQTY].dinosaur>> dinosaur parts, for +<<print $PC[$CC][$PCmorphQTY].dinosaur * 3>> health
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].spider > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].spider>> spider parts, for +<<print $PC[$CC][$PCmorphQTY].spider>> melee to-hit
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].snake > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].snake>> reptile parts, for +<<print $PC[$CC][$PCmorphQTY].snake>>% chance to disengage
<<endif>>\
\
\
\
<<if $PC[$CC][$PCmorphQTY].ratkin > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].ratkin>> rat parts, for +<<print $PC[$CC][$PCmorphQTY].ratkin>> average turns between random encounters
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].harpy > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].harpy>> avian parts, for (not implemented)
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].tentacle > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].tentacle>> tentacle parts, for (not implemented)
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].demon > 0>>\
You have <<print $PC[$CC][$PCmorphQTY].demon>> demon parts, for (not implemented)
<<endif>>\
<<else>>\
@@color:Gold;Body@@
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<set _bp to $PC[$CC][$PCbp][_i]>>\
<!-- hoof hack needs a better solution -->\
<<set _HoofHack to false>>\
<<if _bp.type is $BPfeet>>\
<<if (_bp.morph is "cow") or (_bp.morph is "horse")>>\
<<set _HoofHack to true>>\
You have a @@color:LightGreen;<<print _bp.morph>>@@ hooves\
<<endif>>\
<<endif>>\
<<if _HoofHack is false>>\
You have a <<print setup.GetMorphFormatted(_bp.morph)>> \
@@color:LightGreen;<<print setup.bpptrtoname(_bp.type, "casual")>>@@\
<<endif>>\
<<if _bp.type is $BPpenis>>\
<<set _sz to _bp.size>>\
It is about <<print _bp.size>> inches long\
<<elseif _bp.type is $BPboobs>>\
<<set _sz to _bp.size>>\
<<set _cup to "You wear an A cup.">>\
<<if $DebugMode is true>>\
Debug: Breast size is: _sz
<<endif>>\
<<if _sz > 999>>\
<<set _cup to "Your breasts are so enormous that you pretty much can't find bras that fit.">>\
<<elseif _sz > 799>>\
<<set _cup to "You wear a G cup.">>\
<<elseif _sz > 699>>\
<<set _cup to "You wear a F cup.">>\
<<elseif _sz > 599>>\
<<set _cup to "You wear a E cup.">>\
<<elseif _sz > 499>>\
<<set _cup to "You wear a DD cup.">>\
<<elseif _sz > 399>>\
<<set _cup to "You wear a D cup.">>\
<<elseif _sz > 299>>\
<<set _cup to "a You wear a C cup.">>\
<<elseif _sz > 199>>\
<<set _cup to "You wear a B cup.">>\
<<endif>>\
, about <<print _sz>>cc in volume. <<print _cup>>\
<<elseif _bp.type is $BPpussy>>\
<<if _bp.virgin is true>>\
You are a @@color:pink;virgin@@\
<<else>>\
<<set _sz to _bp.size>>\
<<if _sz > 10>>\
You're comfortably able to accomodate monster cocks well in excess of _sz inches. It would take a horse to satisfy you.\
<<elseif _sz > 8>>\
You're can take cocks up unto the _sz inch range, which is quite large.\
<<elseif _sz > 6>>\
You're comfortable with dicks as much as _sz inches long.\
<<elseif _sz > 4>>\
You can only comfortably take dick up to _sz inches. Anything more than that is painful.\
<<else>>\
It is tiny, and only able to accomodate dicks up to _sz inches.\
<<endif>>\
<<endif>>\
<<elseif _bp.type is $BPwings>>\
<<elseif _bp.type is $BPhorns>>\
<<elseif _bp.type is $BPtail>>\
<<elseif _bp.type is $BPhead>> with <<DescribeHair _bp.size _bp.style _bp.hair>>\
<<endif>><br>\
<</for>>\
<<endif>>\
<</widget>>\
<<widget "ShowAchPerms">>\
Achievements in this category grants rewards that are always active.
<hr>\
<<for _i to 0; _i < _MOO.length; _i++>>\
<<if _MOO[_i].show is "y">>\
<<if _MOO[_i].type is "perm">>\
<<if $Achievements[_i] > 0>>\
@@color:LightGreen;<<print _MOO[_i].name>>@@ <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>
Reward: <<print _MOO[_i].does>>
<<else>>\
@@color:Gray;<<print _MOO[_i].name>>: (Locked) <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>@@
<<endif>>\
<br>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "ShowAchChargen">>\
These achievements unlock new race/sex/class options during character creation
<hr>\
<<for _i to 0; _i < _MOO.length; _i++>>\
<<if _MOO[_i].show is "y">>\
<<set _a to _MOO[_i].type>>\
<<if (_a is "class") or (_a is "sex")>>\
<<if $Achievements[_i] > 0>>\
@@color:LightGreen;<<print _MOO[_i].name>>@@ <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>
Reward: <<print _MOO[_i].does>>
<<else>>\
@@color:Gray;<<print _MOO[_i].name>>: (Locked) <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>@@
<<endif>>\
<br>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "ShowAchPerks">>\
These achievements unlock perks at character creation
<hr>\
<<for _i to 0; _i < _MOO.length; _i++>>\
<<if _MOO[_i].show is "y">>\
<<if _MOO[_i].type is "perk">>\
<<if $Achievements[_i] > 0>>\
@@color:LightGreen;<<print _MOO[_i].name>>@@ <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>
Reward: <<print _MOO[_i].does>>
<<else>>\
@@color:Gray;<<print _MOO[_i].name>>: (Locked) <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>@@
<<endif>>\
<br>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "ShowAchPerkPoints">>\
These achievements will grant more perk points at character creation
<hr>\
<<for _i to 0; _i < _MOO.length; _i++>>\
<<if _MOO[_i].show is "y">>\
<<if _MOO[_i].type is "perkpoints">>\
<<if $Achievements[_i] > 0>>\
@@color:LightGreen;<<print _MOO[_i].name>>@@ <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>
Reward: <<print _MOO[_i].does>>
<<else>>\
@@color:Gray;<<print _MOO[_i].name>>: (Locked) <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>@@
<<endif>>\
<br>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "ShowAchHighestLevels">>\
Your highest level retired as each class grants unique bonuses to all characters
<hr>\
<<for _i to 0; _i < _MOO.length; _i++>>\
<<if _MOO[_i].show is "y">>\
<<if _MOO[_i].type is "highest">>\
<<if $Achievements[_i] > 0>>\
@@color:LightGreen;<<print _MOO[_i].name>>@@ (Level: $Achievements[_i]) <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>
Reward: <<print _MOO[_i].does>>
<<else>>\
@@color:Gray;<<print _MOO[_i].name>>: (Locked) <<if $DebugMode is true>>(Dev note: <<print _MOO[_i].note>>)<<endif>>
Unlock: <<print _MOO[_i].spoil>>@@
<<endif>>\
<br>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "StatsScreenAchievementCheck">>\
<<set _StatsTwelve to 0>>\
<<set _StatsTwenty to false>>\
<<for _AchCheck to 7; _AchCheck < 12; _AchCheck++>>\
<<if $PC[$CC][_AchCheck] > 19>>\
<<set _StatsTwelve to _StatsTwelve +1>>\
<<set _StatsTwenty to true>>\
<<elseif $PC[$CC][_AchCheck] > 11>>\
<<set _StatsTwelve to _StatsTwelve +1>>\
<<endif>>\
<</for>>\
<<replace "#statsinfo">>\
<<if _StatsTwelve is 5>>\
<<AwardAchievement "Jack of All Stats">>\
<<endif>>\
<<if _StatsTwenty is true>>\
<<AwardAchievement "Genetic Lottery">>\
<<endif>>\
<<if $PC[$CC][$PClevel] > 9>>\
<<AwardAchievement "Power Leveler">>\
<<endif>>\
<<if $PC[$CC][$PChpmax] > 199>>\
<<AwardAchievement "Guardian">>\
<<endif>>\
<</replace>>\
<</widget>>\
<<widget "ShowHelpControls">>\
@@color:Gold;Save often!@@
Remember to save your game!
<hr>\
@@color:Gold;Help! I found bug and the game is messed up!@@
In the event of a game-ending bug, Glinda the rescue fairy is ready to assist. Click on "I'm stuck" on the sidebar.
<hr>\
@@color:Gold;Game controls:@@
Town navigation is via mouse. Click on the location you want to visit.
Movement outside of town is controlled by WASD:
* W - north
* D - east
* S - south
* A - west
You can usually access the menu options on the sidebar via keyboard shortcuts:
* Status Screen: Z
* Inventory: I
* Examine Self: X
* Spellbook: B
* Unlocks: U
Escape will close menu overlays. Spacebar serves as both "continue" and as a means of backing out of non-crucial areas and menus like stores.
Important choices will generally be selected via numbers
Combat additionally makes use of Q,W,E for the spell column once you've learned magic, and F and R can be used to flirt and run. Spells available for combat can be selected from the spellbook. Note that neither equipment nor active spells can be changed once combat has started, but you can use certain items like potions from the inventory menu.
<</widget>>\
<<widget "ShowHelpTips">>\
@@color:LightGreen;Very early on@@
<<Bullet>> Don't be afraid of losing battles. Most transformations will help you.
<<Bullet>> If you want transformations without needing to lose fights, buy a butcher knife or bottles in town, and collect consumable monster parts.
<<Bullet>> You can heal by sleeping at the Inn.
<<Bullet>> //Important!// If you can't find the church, your screen may be too small to show the entire map. Try using mobile compatibility mode from the title screen.
<<Bullet>> //Do guild quests!// It's the center doorway on the north end of town
<<Bullet>> If you're desperate for money, try picking up an axe to cut down trees. You can sell them in bulk at the lumber mill on the south end of town.
<<Bullet>> When in doubt, //reincarnate//. Reincarnation is a crucial game mechanic. Learn how it works.
@@color:LightGreen;Slightly less early@@
<<Bullet>> Focus on unlocking classes and building up reincarnation points and permanent rewards. It's much easier to become stronger this way than by simply grinding levels.
<<Bullet>> There's a slightly secret way to pass equipment and gold between characters. Once you unlock it, you'll never need to start with nothing again.
@@color:LightGreen;Misc non-obvious game mechanics:@@
<<Bullet>> Virgins have +20% to resist flirt attacks.
<<Bullet>> Giving your virginity to a monster will forever grant that monster type a +20% flirt chance against that character. This applies both to male and female virginity.
<<Bullet>> The first monster type to impregnate a character will forever gain a +40% to impregnate that character
<<Bullet>> Toughness increases your chance to resist being poisoned
<<Bullet>> There are two types of tower encounters: random, and fixed. Fixed encountes are generated with the level, and cannot be evaded. Random encounters happen randomly over time, and can be evaded
<<Bullet>> Monsters that are poisoned (and taking damage from it) are less likely to pursue if you try to flee
<<Bullet>> It's harder to flee when injured. It's easier to flee from injured monsters.
<<Bullet>> Flirt success is based on compatibility of sex organs. If you have male parts, you'll be effective at flirting with monsters with female parts. With female parts, you'll be effective against males. Flirts on targets without complementary parts are possible, but difficult. The reverse is also true for monster flirts on the player. Hermaphrodites are therefore able to flirt with everyone, but also more susceptible to flirt attacks.
<<Bullet>> There are four types of weapon damage: pierce, slash, cleave, pierce, and blunt. Most monsters will take 50% reduced damage from one damage type. Small monsters are hard to stab, heavily armored monsters are hard to cut, fast monsters are hard to cleave, squishy monsters are hard to crush.
<<Bullet>> Monster 'power moves' take two turns. They're anounced in @@color:Aqua;light blue text@@ in the first round, and then happen in the following round. You can shieldbash after the announcement to interrupt the move and prevent it from happening. Strength improves chance to stun, and monster level decreases it. Monsters in the tower are harder to shieldbash.
<</widget>>
<<widget "ShowAvatar">>\
<<set _AvatarPrefix to _args[0]>>\
<<set _AvatarCount to 7>>\
<<if _AvatarPrefix is "HumanM">>\
<<set _AvatarCount to 11>>\
<<elseif _AvatarPrefix is "HumanF">>\
<<set _AvatarCount to 11>>\
<<endif>>\
\
<<set _ImageList to []>>\
<<set _ImagePreloader to []>>\
<<for _SAcount to 0; _SAcount <= _AvatarCount; _SAcount++>>\
<<set _AddHundred to _SAcount + 100>>\
<<set _SApath to $AvatarPath + _AvatarPrefix + _AddHundred + ".jpg">>\
<<set _ImageList[_SAcount] to [_AvatarPrefix, _AddHundred, _SApath]>>\
<<set _ImagePreloader[_SAcount] to _SApath>>\
<</for>>\
<<set _throwaway to setup.PreloadImages(_ImagePreloader)>>\
\
<div class="avatar-group">\
<<for _SAcount to 0; _SAcount <= _AvatarCount; _SAcount++>>\
<<set _SAarray to _ImageList[_SAcount]>>\
<<capture _SAarray>>\
<<link [img[_SAarray[2]]]>>
<<set $PC[$CC][$PCavatar] to []>>
<<set $PC[$CC][$PCavatar][0] to _SAarray[0]>>
<<set $PC[$CC][$PCavatar][1] to _SAarray[1]>>
<<replace "#CapAvatar">><img id="CaptionPortraitIMG" @src="_SAarray[2]" style="width:200px"><</replace>>\
<</link>>\
<</capture>>\
<</for>>\
</div>\
<</widget>>\
<<widget "ClassInfo">>\
<<set _CINF to _args[0]>>\
<<if _CINF is "peasant">>\
@@color:Gold;Peasant@@
@@color:LightGreen;Class bonus:@@ +1 hp per level
@@color:LightGreen;Achievement bonus:@@ +1 hp per highest retired level
@@color:LightGreen;Level 7 ability:@@
* None
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Red;armor@@, @@color:Red;poison@@, @@color:Red;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Aqua;light@@, @@color:Red;up@@, @@color:Red;down@@, @@color:Red;map@@, @@color:Red;portal@@, @@color:Red;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Pitchfork
* Basic clothes
<<elseif _CINF is "lumberjack">>\
@@color:Gold;Lumberjack@@
@@color:LightGreen;Class bonus:@@ +1 damage with axes per level
@@color:LightGreen;Achievement bonus:@@ +5 to-hit with axes per highest retired level
@@color:LightGreen;Unlocked by:@@ Completing a construction project
@@color:LightGreen;Class unique effect:@@
* +1 to tree-cutting power
@@color:LightGreen;Level 7 ability:@@
* Gain twice as much wood when cutting trees
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Red;poison@@, @@color:Red;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Red;portal@@, @@color:Red;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Hatchet
* Basic clothes
<<elseif _CINF is "prostitute">>\
@@color:Gold;Prostitute@@
@@color:LightGreen;Class bonus:@@ +1 damage with flirt attacks per level
@@color:LightGreen;Achievement bonus:@@ -1 target will per highest retired level when flirting
@@color:LightGreen;Unlocked by:@@ 5 flirt victories
@@color:LightGreen;Class unique effect:@@
* Gain xp from sex
@@color:LightGreen;Level 7 ability:@@
* All lust damage taken is reduced in half
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Aqua;poison@@, @@color:Red;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Red;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Red;map@@, @@color:Red;portal@@, @@color:Aqua;soul trap@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;up@@, @@color:Aqua;down@@...
@@color:LightGreen;Starting equipment:@@
* Stripper gear
* Growth formula
<<elseif _CINF is "warrior">>\
@@color:Gold;Warrior@@
@@color:LightGreen;Class bonus:@@ +10 to-hit with weapons per level
@@color:LightGreen;Achievement bonus:@@ +5 to-hit with weapons per highest retired level
@@color:LightGreen;Unlocked by:@@ Deliver 20 or more damage in a single attack with a weapon
@@color:LightGreen;Level 7 ability:@@
* Riposte: automatically deliver a quick counterattack after every non-special physical attack received
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Aqua;poison@@, @@color:Aqua;firebolt@@, @@color:Aqua;heal@@
* Utility: @@color:Red;light@@, @@color:Red;up@@, @@color:Red;down@@, @@color:Red;map@@, @@color:Red;portal@@, @@color:Red;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Claymore
* Medium shield
* Hauberk
<<elseif _CINF is "scholar">>\
@@color:Gold;Scholar@@
@@color:LightGreen;Class bonus:@@ Gain +1 xp per level from combat
@@color:LightGreen;Achievement bonus:@@ -1 leveling xp requirements per highest retired level
@@color:LightGreen;Unlocked by:@@ Learn any spell
@@color:LightGreen;Level 7 ability:@@
* Party members receive full, undivided experience from combat victories
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Aqua;poison@@, @@color:Aqua;firebolt@@, @@color:Aqua;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Aqua;portal@@, @@color:Aqua;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Basic clothing
<<elseif _CINF is "priest">>\
@@color:Gold;Priest@@
@@color:LightGreen;Class bonus:@@ +1 spell healing per level
@@color:LightGreen;Achievement bonus:@@ +1 spell healing per highest retired level
Unlocked by: Accumulate 100 total spell healing
@@color:LightGreen;Class unique effects:@@
* Heal spells also cure poison and bleed effects
* Holy symbols are twice as effective
@@color:LightGreen;Level 7 ability:@@
* Heal spells now also apply to party members
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Red;poison@@, @@color:Red;firebolt@@, @@color:Aqua;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Aqua;portal@@, @@color:Aqua;soul trap@@
@@color:LightGreen;Starting spell:@@
* Heal
@@color:LightGreen;Starting equipment:@@
* Priest robes
* Holy symbol
<<elseif _CINF is "rogue">>\
@@color:Gold;Rogue@@
@@color:LightGreen;Class bonus:@@ 5% chance per level to dodge power moves
@@color:LightGreen;Achievement bonus:@@ +1 gold found per highest retired level after combat with monsters that carry gold
@@color:LightGreen;Unlocked by:@@ Evade 3 tower traps in a single lifetime
@@color:LightGreen;Class unique effects:@@
* Current level is added to success rate against chest locks and traps
@@color:LightGreen;Level 7 ability:@@
* 100% success against locks and traps
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Red;armor@@, @@color:Aqua;poison@@, @@color:Red;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Red;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Red;portal@@, @@color:Aqua;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Lockpicks
* Basic clothes
<<elseif _CINF is "mage">>\
@@color:Gold;Mage@@
@@color:LightGreen;Class bonus:@@ +1 max mana per level
@@color:LightGreen;Achievement bonus:@@ +1 max mana per highest retired level
@@color:LightGreen;Unlocked by:@@ Learning every spell on the same character
@@color:LightGreen;Level 7 ability:@@
* Restore mana after every battle won
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Aqua;poison@@, @@color:Aqua;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Aqua;portal@@, @@color:Aqua;soul trap@@
@@color:LightGreen;Starting spell:@@
* Dart
@@color:LightGreen;Starting equipment:@@
<<elseif _CINF is "barbarian">>\
@@color:Gold;Barbarian@@
@@color:LightGreen;Class bonus:@@ +1 damage with morph intrinsic attacks per class level
@@color:LightGreen;Achievement bonus:@@ +5% to hit with morph intrinics attacks per highest retired level
@@color:LightGreen;Unlocked by:@@ Defeating a tower monster while naked, without using magic or flirts
@@color:LightGreen;Class unique effect:@@
* Damage absorption: takes -1 damage from all physical attacks
@@color:LightGreen;Level 7 ability:@@
* Claw attacks apply a bleed effect
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Red;armor@@, @@color:Aqua;poison@@, @@color:Red;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Red;map@@, @@color:Red;portal@@, @@color:Aqua;soul trap@@
@@color:LightGreen;Starting equipment:@@
* A selection of raw meat
<<elseif _CINF is "monk">>\
@@color:Gold;Monk@@
@@color:LightGreen;Class bonus:@@ Every empty equipment slot gives +1 defense per class level
@@color:LightGreen;Achievement bonus:@@ +5 defense per highest retired level
@@color:LightGreen;Unlocked by:@@ Defeating a tower monster while barehanded, without using magic or flirts
@@color:LightGreen;Level 7 ability:@@
* Chance to fully dodge non-special physical attacks
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Red;poison@@, @@color:Aqua;firebolt@@, @@color:Aqua;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Aqua;portal@@, @@color:Red;soul trap@@
@@color:LightGreen;Starting equipment:@@
* None
* No money
<<elseif _CINF is "ninja">>\
@@color:Gold;Ninja@@
@@color:LightGreen;Class bonus:@@ Gain 1% chance per level to critical strike with weapon attacks for double damage
@@color:LightGreen;Achievement bonus:@@ +2% chance to flee from combat per highest retired level
@@color:LightGreen;Unlocked by:@@ One-shot a tower monster before it can attack, without using magic or flirts
@@color:LightGreen;Class unique effects:@@
* Sees better in the dark
* +25% to all flee attempts
* Stealth mode: can sneak past random encounters
@@color:LightGreen;Level 7 ability:@@
* 100% crit chance on first attack of every battle
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Red;dart@@, @@color:Red;armor@@, @@color:Aqua;poison@@, @@color:Red;firebolt@@, @@color:Red;heal@@
* Utility: @@color:Red;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Aqua;portal@@, @@color:Aqua;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Katana
* Ninja uniform
<<elseif _CINF is "paladin">>\
@@color:Gold;Paladin@@
@@color:LightGreen;Class bonus:@@ Gain flirt and magic resistence equivalanet to character level willpower
@@color:LightGreen;Achievement bonus:@@ ???
@@color:LightGreen;Unlocked by:@@ Reach level 7 while still a virgin, having previously reached level 7 as both warrior and priest.
@@color:LightGreen;Class unique effect:@@
* Immune to transformation
@@color:LightGreen;Level 7 ability:@@
* Once per adventure, a blow that reduces health to zero will instead restore health to 50%, resets on visit to town
?Gain immunity to poison?
@@color:LightGreen;Starting spells:@@
* Heal
* Light
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Aqua;dart@@, @@color:Aqua;armor@@, @@color:Red;poison@@, @@color:Red;firebolt@@, @@color:Aqua;heal@@
* Utility: @@color:Aqua;light@@, @@color:Aqua;up@@, @@color:Aqua;down@@, @@color:Aqua;map@@, @@color:Aqua;portal@@, @@color:Red;soul trap@@
* Combat: (all) dart, armor, heal
* Utility: (all) light, up, down, map, portal
@@color:LightGreen;Starting equipment:@@
* Holy symbol
* Warhammer
* Tower shield
* Hauberk
<<elseif _CINF is "guardian">>\
@@color:Gold;Guardian@@
@@color:LightGreen;Class bonus:@@ +1 damage absorption per level
@@color:LightGreen;Achievement bonus:@@ Gain +2 health and defense per highest retired guardian level
@@color:LightGreen;Unlocked by:@@ Reach 200 maximum health
@@color:LightGreen;Level 7 ability:@@
* Gain double armor effect from shields
@@color:LightGreen;Starting spell:@@
* Armor
@@color:LightGreen;Allowed spells:@@
* Combat: @@color:Red;dart@@, @@color:Aqua;armor@@, @@color:Red;poison@@, @@color:Red;firebolt@@, @@color:Aqua;heal@@
* Utility: @@color:Aqua;light@@, @@color:Red;up@@, @@color:Red;down@@, @@color:Red;map@@, @@color:Red;portal@@, @@color:Red;soul trap@@
@@color:LightGreen;Starting equipment:@@
* Tower shield
* Hauberk
* Heavy helm
* Leggings
<<elseif _CINF is "druid">>\
@@color:Gold;Druid@@
@@color:LightGreen;Class bonus:@@ ?
@@color:LightGreen;Achievement bonus:@@ Gain +20 stamina per highest retired druid level
@@color:LightGreen;Unlocked by:@@ ?
@@color:LightGreen;Starting spell:@@
* Heal
@@color:LightGreen;Allowed spells:@@
* Combat: ?
* Utility: ?
@@color:LightGreen;Level 7 ability:@@
* Can travel through forest, desert, and ocean terrain unimpeded
@@color:LightGreen;Starting equipment:@@
*
<<elseif _CINF is "necromancer">>\
@@color:Gold;Necromancer@@
@@color:LightGreen;Class bonus:@@ ?All minions gain +5% to hit and +1 damage per minion level?
@@color:LightGreen;Achievement bonus:@@ All minions gain +1 max health per highest retired necromancer level
@@color:LightGreen;Unlocked by:@@ ?Have an orphan land the killing blow against an undead?
@@color:LightGreen;Allowed spells:@@
* Necromancy: @@color:Aqua;Red@@dart@@, @@color:Aqua;armor@@, @@color:Red;poison@@, @@color:Red;firebolt@@, @@color:Aqua;heal@@
Necromancers have a unique spellbook, and are unable to learn mage spells:
* Siphon life: drain health from opponents
* Drain minion: siphon health from a living minion. Creates a skeleton if health reduced to 0
* Restore minion: channel your life health to heal a minion to full. Can kill you.
* Create undead: raise opponent as an undead minion if it is killed by a siphon life spell
@@color:LightGreen;Starting spell:@@
* Heal
@@color:LightGreen;Level 7 ability:@@
* +1 max party size
@@color:LightGreen;Starting equipment:@@
*
<<elseif _CINF is "bard">>\
@@color:Gold;Bard@@
@@color:LightGreen;Class bonus:@@ ?
@@color:LightGreen;Achievement bonus:@@ ?
@@color:LightGreen;Unlocked by:@@ ?
@@color:LightGreen;Allowed spells:@@
@@color:LightGreen;Level 7 ability:@@
* ?
@@color:LightGreen;Starting equipment:@@
*
<<else>>\
Error in ClassInfo: _CINF
<<endif>>\
<</widget>>\
<<widget "ShowHelpClasses">>\
<<set _HClist to ["peasant","lumberjack","prostitute","warrior","scholar","priest","rogue","mage","barbarian","monk","guardian"]>>\
<<set _HCi to 0>>\
<<capture _HCi>>\
<<for _HCi to 0; _HCi < _HClist.length - 1; _HCi++>>\
<<set _TUP to "[" + _HClist[_HCi] + "]">>\
<<button _TUP>>\
<<replace "#HelpClassInfo">>\
<<ClassInfo _HClist[_HCi]>>\
<</replace>>\
<</button>> | \
<</for>>\
<<set _ASD to "[" + _HClist[_HClist.length -1] + "]">>\
<<button _ASD>>\
<<replace "#HelpClassInfo">>\
<<set _ASD to _HClist[_HClist.length -1]>>\
<<ClassInfo _ASD>>\
<</replace>>\
<</button>>
<</capture>>\
<span id="HelpClassInfo"></span>
<</widget>>\
<<widget "ShowHelpTransformation">>\
@@color:Gold;There are three sources of body transformation:@@
@@color:LightGreen;Sex@@
When you //lose// a fight, most monsters will try to rape you. Sex following defeat will generally move you one step closer towards the monster's preferred partner. Generally this will be their same monster type, and of whatever sex they have the parts to interact with. For example, sex with a male goblin will move you towards becoming a female goblin. Sex with a female minotaur will move you towards becoming a male minotaur. And hermaphrodites, being interesting in both sexes, will transform you in whatever sexual direction strikes their fancy.
Sex after winning a fight is (mostly) safe and will generally not transform you.
@@color:LightGreen;Consumables@@
There are three types of transforming consumables: meat, semen, and breast milk.
* Semen will transform you towards becoming a male of the monster type that it came from.
* Milk will transform you towards becoming a female of the monster type that it came from.
* Meat will make you more like the monster type, but will //not// affect sex at all.
@@color:LightGreen;Traps and special events@@
There exist a number of specific events that can result in transformation. Most notably, there is a trap that does this. These events will tend to be "anything goes" types of affairs.
@@color:LightGreen;Simple way to think about it@@
* Transformations from sex make you more like whatever the monster wants to have sex with
* Transformations from consumables make you more ilke whatever produced the consumable
* Transformations from traps are random, and could be anything.
@@color:LightGreen;Special considerations for hybrid types@@
Some monsters are chimera. For example, a centaur is a human/horse chimera. A hippogriff is a horse/eagle chimera. Sex with chimera will move you towards becoming like their type, but consumables from them can be specific to one of their types. When in doubt, pay attention to the descripion of the consumables. For example, a minotaur is half-human, half-cow. If a consumable says "human" then it will make you more human, which probably means gaining human parts. if it says "cow" then it will make you more like a cow, which probably means gaining cow parts. But if it says //minotaur// it will make you more like a minotaur, which could mean a transition towards either human //or// cow parts.
<</widget>>\
<<widget "ShowHelpFAQ">>\
@@color:Gold;What does prayer do?@@
Praying reduces the effectiveness of flirt attacks against you by directly reducing their damage. For example, if a flirt attack lands for 10 lust damage and you have 5 prayer stacks built up you'll only take 5 damage. Build up enough stacks and you can become effectively immune to flirt attacks. But it might take several rounds to do this, and that's time that you could have spent delivering damage yourself. It also requires equipping a holy symbol in a wield slot rather than a weapon or shield. On the other hand, with prayer you might be able to put fewer points into willpower.
Priests pray at double effectiveness. In some rare instances, prayer can result in direct damage to certain monsters.
@@color:Gold;What's the math behind flirt attacks?@@ (Last updated: build 23.7.01)
@@color:LighGreen;Your flirt attack to-hit is:@@
* Your 'Flirt Power' for the current target, as shown in stats, computed based on compatible body parts
* Plus the number of body morphs you have that match the morph of your target (easier to flirt with a human if you're a human, etc.)
* Plus your total 'sexy' bonus from equipment
* Plus your current level, if a Prostitute
* Plus any to-hit bonuses from morphs, (bunny for example)
* Minus your current Praying status effect
* Plus a random number from 1-10
If this total if greater that the target's willpower, your flirt is successful
@@color:LighGreen;Your flirt damage is:@@
Base damage is determined by generating a random number from 1 to your Total Flirt Power for the current target, then modified as followed:
* Plus your current level, if a Prostitute
* Plus any damage bonuses from morphs, (goblin for example)
* Minus your current Praying status effect
* Minus any unique monster damage-reducing effects
<hr>\
<</widget>>
<<widget "SortBodyParts">>\
<<if $GameState is "combat">>\
<<script>>UI.alert("Can't re-sort body during combat")<</script>>\
<<else>>\
<<set _NewBody to []>>\
<<set _BPorder to [$BPhead, $BPneck, $BPback, $BPchest, $BPwield, $BPhands, $BPring, $BPwaist, $BPlegs, $BPfeet, $BPtail, $BPhorns, $BPwings, $BPpenis, $BPboobs, $BPpussy, $BPtentacle, $BPstinger, $BPpincer]>>
\
<<for _SortOrder to 0; _SortOrder < _BPorder.length ; _SortOrder++>>\
<<for _SortBP to 0; _SortBP < $PC[$CC][$PCbp].length ; _SortBP++>>\
<<if $PC[$CC][$PCbp][_SortBP].type is _BPorder[_SortOrder]>>\
<<set _NewBody[_NewBody.length] to $PC[$CC][$PCbp][_SortBP]>>\
<<endif>>\
<</for>>\
<</for>>\
\
<!-- implement check for leftover body parts: at present they will be lost if new bps are added -->\
<<set $PC[$CC][$PCbp] to _NewBody>>\
<<endif>>\
<</widget>>\<span id="KeypSpace">\
<<link "space) close window">>
<<script>>
Dialog.close();
<</script>>
<</link>>\
</span>\
\
<<set _StatsTwelve to 0>>\
<<set _StatsTwenty to false>>\
<<for _AchCheck to 7; _AchCheck < 12; _AchCheck++>>\
<<if $PC[$CC][_AchCheck] > 19>>\
<<set _StatsTwelve to _StatsTwelve +1>>\
<<set _StatsTwenty to true>>\
<<elseif $PC[$CC][_AchCheck] > 11>>\
<<set _StatsTwelve to _StatsTwelve +1>>\
<<endif>>\
<</for>>\
<<if _StatsTwelve is 5>>\
<<AwardAchievement "Jack of All Stats">>\
<<endif>>\
<<if _StatsTwenty is true>>\
<<AwardAchievement "Genetic Lottery">>\
<<endif>>\
\
<hr>\
\
<<set _job to setup.PtrToClass($PC[$CC][$PCclass])>>\
\
<<UpdateMorphs>>\
@@color:Gold;<<print $PC[$CC][$PCname]>>@@
<<set _job to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<print $PC[$CC][$PCsex]>> <<print $PC[$CC][$PCmorph]>> _job
<<set _lev to $PC[$CC][$PClevel]>>\
<<set _xp to $PC[$CC][$PCxp]>>\
<<set _xpneed to setup.XpNeeded($PC[$CC][$PClevel])>>\
Level: _lev, _xp/_xpneed experience
<hr>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
@@color:Gold;Attributes@@ <span id="unspentpoints">Available points: <<print $PC[$CC][$PCunspentPoints]>></span>
<<button "[+]" "ViewStats">>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCstr] to $PC[$CC][$PCstr] + 1>>\
<<replace "#unspentpoints">><<if $PC[$CC][$PCunspentPoints] > 0>>Available points: <<print $PC[$CC][$PCunspentPoints]>><<endif>><</replace>>
<</button>> @@color:LightGreen;Strength :@@ <<print $PC[$CC][$PCstr]>>
<<button "[+]" "ViewStats">>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCdex] to $PC[$CC][$PCdex] + 1>>\
<<replace "#unspentpoints">><<if $PC[$CC][$PCunspentPoints] > 0>>Available points: <<print $PC[$CC][$PCunspentPoints]>><<endif>><</replace>>
<</button>> @@color:LightGreen;Dexterity :@@ <<print $PC[$CC][$PCdex]>>
<<button "[+]" "ViewStats">>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCcon] to $PC[$CC][$PCcon] + 1>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PChpmax] to $PC[$CC][$PChpmax] + $PC[$CC][$PClevel]>>\
<<replace "#unspentpoints">><<if $PC[$CC][$PCunspentPoints] > 0>>Available points: <<print $PC[$CC][$PCunspentPoints]>><<endif>><</replace>>
<<run Health2($PC[$CC][$PChpcur], $PC[$CC][$PChpmax], "hzhealthbar", true)>>\
<</button>> @@color:LightGreen;Toughness :@@ <<print $PC[$CC][$PCcon]>>
<<button "[+]" "ViewStats">>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCint] to $PC[$CC][$PCint] + 1>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanacur] + ($PC[$CC][$PClevel] * 10)>>\
<<set $PC[$CC][$PCmanamax] to $PC[$CC][$PCmanamax] + ($PC[$CC][$PClevel] * 10)>>\
<<replace "#unspentpoints">><<if $PC[$CC][$PCunspentPoints] > 0>>Available points: <<print $PC[$CC][$PCunspentPoints]>><<endif>><</replace>>
<</button>> @@color:LightGreen;Intellect :@@ <<print $PC[$CC][$PCint]>>
<<button "[+]" "ViewStats">>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCwil] to $PC[$CC][$PCwil] + 1>>\
<<set $PC[$CC][$PChornycur] to $PC[$CC][$PChornycur] + 10>>\
<<set $PC[$CC][$PChornymax] to $PC[$CC][$PChornymax] + 10>>\
<<run Health2($PC[$CC][$PChornycur], $PC[$CC][$PChornymax], "hzhornybar", true)>>\
<<replace "#unspentpoints">><<if $PC[$CC][$PCunspentPoints] > 0>>Available points: <<print $PC[$CC][$PCunspentPoints]>><<endif>><</replace>>
<</button>> @@color:LightGreen;Willpower :@@ <<print $PC[$CC][$PCwil]>>
<<else>>\
@@color:Gold;Attributes@@
@@color:LightGreen;Strength :@@ <<print $PC[$CC][$PCstr]>> (<<DescribeStat $PCstr>>)
@@color:LightGreen;Dexterity:@@ <<print $PC[$CC][$PCdex]>> (<<DescribeStat $PCdex>>)
@@color:LightGreen;Toughness:@@ <<print $PC[$CC][$PCcon]>> (<<DescribeStat $PCcon>>)
@@color:LightGreen;Intellect:@@ <<print $PC[$CC][$PCint]>> (<<DescribeStat $PCint>>)
@@color:LightGreen;Willpower:@@ <<print $PC[$CC][$PCwil]>> (<<DescribeStat $PCwil>>)
<<endif>>\
<hr>\
\
<<set _BestPeasant to setup.AchievementHandler("Best Peasant", "HAS?", -1)>>\
<<set _BestLumberjack to setup.AchievementHandler("Best Lumberjack", "HAS?", -1)>>\
<<set _BestBarbarian to setup.AchievementHandler("Best Barbarian", "HAS?", -1)>>\
<<set _BestWarrior to setup.AchievementHandler("Best Warrior", "HAS?", -1)>>\
<<set _BestProstitute to setup.AchievementHandler("Best Prostitute", "HAS?", -1)>>\
\
@@color:Gold;Offense@@
@@color:LightGreen;Weapon attacks@@
To-hit bonus from dexterity: <<FormatPosNeg $PC[$CC][$PCtohit] "%">>
To-hit bonus from morphs: <<FormatPosNeg $PC[$CC][$PCmorphBONI].th "%">>
<<set _str_mod to $PC[$CC][$PCstr] -10>>\
<<if _BestLumberjack > 0>>\
+<<print _BestLumberjack>> (with axes) from Best Lumberjack level achievement
<<endif>>\
<<if _BestWarrior > 0>>\
+<<print _BestWarrior>> from Best Warrior level achievement
<<endif>>\
Damage from strength: <<FormatPosNeg _str_mod>>
@@color:LightGreen;Body attacks@@
To-hit bonus from dexterity: <<FormatPosNeg $PC[$CC][$PCtohit] "%">>
<<set _THFM to $PC[$CC][$PCmorphBONI].th + $PC[$CC][$PCmorphBONI].bodyth>>\
To-hit bonus from morphs: <<FormatPosNeg _THFM "%">>
<<if _BestBarbarian > 0>>\
+<<print _BestBarbarian>> from Best Barbarian level achievement
<<endif>>\
<<set _str_mod to $PC[$CC][$PCstr] -10>>\
Damage from strength: <<FormatPosNeg _str_mod>>
Damage from morphs: <<FormatPosNeg $PC[$CC][$PCmorphBONI].bodydam>>
<<UpdateAC>>\
<<set _AcTotal to 0>>\
<<for _AcCycle to 0; _AcCycle < $PC[$CC][$PCac].length; _AcCycle++>>\
<<set _AcTotal to _AcTotal + $PC[$CC][$PCac][_AcCycle]>>\
<</for>>\
<<set _AcTotal to $PC[$CC][$PCac][0] + $PC[$CC][$PCac][1]>>\
@@color:Gold;Defense@@
Defense from armor: <<FormatPosNeg $PC[$CC][$PCac][1] "%">>
Defense from stats: <<FormatPosNeg $PC[$CC][$PCac][0] "%">>
Defense from morphs: <<FormatPosNeg $PC[$CC][$PCac][2] "%">>
<<if $PC[$CC][$PCac][3] > 0>>\
Defense from magic: <<FormatPosNeg $PC[$CC][$PCac][3] "%">>
<<endif>>\
Total melee defense: <<FormatPosNeg _AcTotal "%">>
Damage absorption: <<GetPlayerAbsorption "show">>
Magic resistance: <<print $PC[$CC][$PCwil]>>
<<Recalc>>\
@@color:Gold;Maximum Health@@
(Level * toughness) = <<print $PC[$CC][$PClevel]>> * <<print $PC[$CC][$PCcon]>> = <<print $PC[$CC][$PClevel] * $PC[$CC][$PCcon]>>
<<if $PC[$CC][$PCmorphQTY].wolf > 0>>\
+ <<print $PC[$CC][$PCmorphQTY].wolf>> from wolf morphs
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].horse > 0>>\
+ <<print $PC[$CC][$PCmorphQTY].horse * 2>> from horse morphs
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].cow > 0>>\
+ <<print $PC[$CC][$PCmorphQTY].cow * 2>> from cow/minotaur morphs
<<endif>>\
<<if _BestPeasant > 0>>\
+<<print _BestPeasant>> from Best Peasant level achievement
<<endif>>\
Total maximum health: <<print $PC[$CC][$PChpmax]>>
@@color:Gold;Flirt power@@
<<set _gfp to setup.GetFlirtPower("none")>>\
@@color:LightGreen;From penis:@@ <<print _gfp[1]>>
@@color:LightGreen;From boobs:@@ <<print _gfp[2]>>
@@color:LightGreen;From pussy:@@ <<print _gfp[3]>>
@@color:LightGreen;From equip:@@ <<print _gfp[4]>>
@@color:LightGreen;From morphs:@@ <<print $PC[$CC][$PCmorphBONI].flirtth>>
<<set _tvM to (_gfp[2] * 10) + (_gfp[3] * 10) + (_gfp[4] * 10) + ($PC[$CC][$PCmorphBONI].flirtth * 10)>>\
<<set _tvF to (_gfp[1] * 10) + (_gfp[4] * 10) + ($PC[$CC][$PCmorphBONI].flirtth * 10)>>\
<<set _tvH to (_gfp[1] * 10) + (_gfp[2] * 10) + (_gfp[3] * 10) + (_gfp[4] * 10) + ($PC[$CC][$PCmorphBONI].flirtth * 10)>>\
<<set _tvM to Math.trunc(_tvM) / 10>>\
<<set _tvF to Math.trunc(_tvF) / 10>>\
<<set _tvH to Math.trunc(_tvH) / 10>>\
@@color:LightGreen;Total vs males:@@ _tvM
@@color:LightGreen;Total vs females:@@ _tvF
@@color:LightGreen;Total vs herms:@@ _tvH
@@color:LightGreen;Bonus flirt damage vs all:@@ <<print $PC[$CC][$PCmorphBONI].flirtdam>>
<<if _job is "prostitute">>\
+5% to all flirt actions, both good and bad (prostitute class bonus)
<<endif>>\
<<if _BestProstitute > 0>>\
+<<print _BestProstitute>> (not implemented) from Best Prostitute level achievement
<<endif>>\
@@color:Gold;Perks@@
<<if $PC[$CC][$PCperks].length <1>>\
None
<<else>>\
<<for _i to 0; _i < $PC[$CC][$PCperks].length; _i++>>\
[<<print $PC[$CC][$PCperks][_i]>>] \
<</for>>
<<endif>>\
@@color:Gold;Sex stats@@
<<set _vstats to 0>>\
<<if $PC[$CC][$PCsexACTS].malevirgin is true>>\
<<else>>\
<<set _vstats to 1>>\
<<endif>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin is true>>\
<<else>>\
<<set _vstats to _vstats +1>>\
<<endif>>\
<<set _f to $PC[$CC][$PCsexACTS]>>\
<<set _TechVirgin to _f.bjgiven + _f.bjreceived + _f.pussylickgiven + _f.pussylickreceived + _f.analgiven + _f.analreceived>>\
<<set _ShowFullStats to true>>\
<<if (_vstats is 0) and _TechVirgin is 0>>\
You are a beautiful, pristine virgin
<<set _ShowFullStats to false>>\
<<elseif (_vstats is 0)>>\
You are still //technically// a virgin
<<else>>\
<<if _vstats is 2>>\
You gave your male virginity to a $PC[$CC][$PCsexACTS].malevirgin
You female virginity was taken by $PC[$CC][$PCsexACTS].femalevirgin
<<else>>\
<<if $PC[$CC][$PCsexACTS].malevirgin neq true>>\
You gave your virginity to $PC[$CC][$PCsexACTS].malevirgin
<<endif>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin neq true>>\
Your virginity was taken by $PC[$CC][$PCsexACTS].femalevirgin
<<endif>>\
<<endif>>\
<<endif>>\
<<if _ShowFullStats is true>>\
<<if $PC[$CC][$PCsexACTS].bjgiven > 0>>\
Blowjobs given: <<print $PC[$CC][$PCsexACTS].bjgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].bjreceived > 0>>\
Blowjobs received: <<print $PC[$CC][$PCsexACTS].bjreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].pussylickgiven > 0>>\
Pussies licked: <<print $PC[$CC][$PCsexACTS].pussylickgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].pussylickreceived > 0>>\
Times your pussy has been licked: <<print $PC[$CC][$PCsexACTS].pussylickreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].vaginalreceived > 0>>\
Fucked in the pussy: <<print $PC[$CC][$PCsexACTS].vaginalreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].vaginalgiven > 0>>\
Cummed in a pussy: <<print $PC[$CC][$PCsexACTS].vaginalgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].analgiven > 0>>\
Asses fucked: <<print $PC[$CC][$PCsexACTS].analgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].analreceived > 0>>\
Fucked in the ass: <<print $PC[$CC][$PCsexACTS].analreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].semengiven > 0>>\
Total semen delivered: <<print $PC[$CC][$PCsexACTS].semengiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].semenreceived > 0>>\
Total semen received: <<print $PC[$CC][$PCsexACTS].semenreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].milked > 0>>\
Total milked volume: <<print $PC[$CC][$PCsexACTS].milked>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].scissored > 0>>\
Total vaginal scissoring: <<print $PC[$CC][$PCsexACTS].scissored>>
<<endif>>\
<<endif>>\
@@color:Gold;Miscellaneous stats@@
@@color:LightGreen;Battles fought@@: $PC[$CC][$PCmisc].battles
@@color:LightGreen;Battles lost@@: $PC[$CC][$PCmisc].battleslost
@@color:LightGreen;Battles won@@: $PC[$CC][$PCmisc].battleswon
@@color:LightGreen;Battles fled@@: $PC[$CC][$PCmisc].battlesfled
@@color:LightGreen;Traps triggered@@: $PC[$CC][$PCmisc].traptrigger
@@color:LightGreen;Traps avoided@@: $PC[$CC][$PCmisc].trapavoid
@@color:LightGreen;Gold earned@@: $PC[$CC][$PCmisc].gold
@@color:LightGreen;Deaths@@: $PC[$CC][$PCmisc].deaths
@@color:Gold;Adventuring stats@@
@@color:LightGreen;Highest tower level@@: $PC[$CC][$PChtze]
@@color:LightGreen;Highest forest level@@: $PC[$CC][$PChfze]
<<set _NameList to ["bunny","cat","fox","wolf","horse","centaur","human","goblin","slime","spider","imp","hellhound","minotaur","drider","tentacle","demon","naga"]>>\
<<for _i to 0; _i < _NameList.length; _i++>>\
<<if $PC[$CC][$PCkills][_i] > 0>>\
@@color:LightGreen;<<print _NameList[_i].toUpperFirst()>> kills@@: <<print $PC[$CC][$PCkills][_i]>>
<<endif>>\
<</for>><<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $RoomPTR to passage()>>\
\
<<set _RightPic to $ImgPath + "eventpuddle.jpg">>\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
\
<<replace "#eventtext">>\
@@color:LightGreen;Strange puddle@@
<<if $Dungeon[_pz][_px][_py][12] is 0>><!-- start state-->\
<<elseif $Dungeon[_pz][_px][_py][12] is 98>><!-- perma murky water->\
<<elseif $Dungeon[_pz][_px][_py][12] is 99>><!-- used-->\
The tile floor here is heavily eroded, with a few moist traces of liquid.
<<else>>\
@@color:Red;Error in Event101: state <<print $Dungeon[_pz][_px][_py][12]>> is not recognized@@
<<endif>>\
<hr>
<</replace>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<if $Mon.name.includes("Zehtalia")>>\
<<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>>\
\
<<SimplePic "Zehtalia.png">>\
@@color:Yellow;Dungeon Boss: Zehtalia, Queen of the Spiders@@
<hr>\
Collapsing to the ground, Zehtalia walks over and stands with her massive spider abdomen above you.
@@color:Red;Zehtalia@@: "REJOICE, MORTAL. YOU WILL NOW BE HOST TO MY NEWEST BROOD."
As she descends on you, you feel a stabbing sensation in your stomach, then everything goes dark.
<hr>\
@@color:Gold;You have died@@
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Used as a living incubator by Zehtalia, Queen of Spiders">>
<</link>>\
</span>\
<<elseif $Mon.name.includes("Neris")>>\
\
<!-- Important! -->\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>>\
\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
You collapse to the ground, your fall somewhat softened by a pile of dust you don't recall standing in. Looking down, you see large portions of your body now missing, apparently having been consumed by the plague curse. As your vision goes dark, you feel Neris standing by your side, whispering softly.
@@color:Red;Neris@@: "I forgive you," she soothes you. "Thank you for trying."
<hr>\
@@color:Gold;You have died@@
<span id="KeypSpace">\
<<link "Press space to continue" "Death">>
<<set $WORLD.diedby to "Killed by the plague curse">>
<</link>>\
</span>\
<<else>>\
@@color:Red;Error: unrecognized boss: <<print $Mon.name>>\
<<link "Error recovery" "TownSquare">>\
<</link>>\
<<endif>>\
<<widget "CombatAttack">>\
<<set _ArrayReceived to $args[0]>>\
\
<<set _a to "CombatAttack received: " + _ArrayReceived + "<br>">><<AddToLog _a>>\
\
<<set _attacktype to _ArrayReceived[0]>>\
<<set _slot to _ArrayReceived[1]>>\
<<if _ArrayReceived[2].includes("shield")>>\
<<set _attacktype to "bash">>\
<<endif>>\
<<set _strmod to $PC[$CC][$PCstr] -10>>\
<<set _mindam to 1>>\
<<set _maxdam to 2>>\
<<set _th to $PC[$CC][$PCtohit]>>\
<<set _missmessage to "default miss">>\
<<set _hitmessage to "default attack">>\
<<set _absorbmessage to "default absorb">>\
<<set _endcombat to "normal">>\
<<set _heshe to "he">>\
<<if $Mon.sex is "female">>\
<<set _heshe to "she">>\
<<elseif $Mon.sex is "herm">>\
<<set _heshe to "it">>\
<<endif>>\
\
<<set _TheMon to "the " + $Mon.name + " ">>\
<<if $Mon.name.includes("Zehtalia")>>\
<<set _TheMon to "Zehtalia ">>\
<<endif>>\
\
\
<<set _GlobalSpellBonus to setup.AchievementHandler("Best Archmage", "HAS?", -1)>>\
\
<<if _attacktype is "body">>\
<<set _bp to $PC[$CC][$PCbp][_slot]>>\
<<set _attacktype to _bp.attacktype>>\
<<set _attackdesc to _bp.attackdesc>>\
<<set _th to random(1, 100) - $Mon.armor + $PC[$CC][$PCtohit]>>\
<<set _th to _th + $PC[$CC][$PCmorphBONI].bodyth>>\
<<if _th < 1>>\
<<set _Message to "You try to " + _attacktype + " " + _attackdesc + " at " + _TheMon>>\
<<else>>\
<<set _mindam to _bp.mindam>>\
<<set _maxdam to _bp.maxdam>>\
<<set _TD to random(_mindam, _maxdam) + _strmod + $PC[$CC][$PCmorphBONI].bodydam>>\
<<if _TD < 1>>\
<<set _Message to "You " + _attacktype + " " + _attackdesc + " at " + _TheMon + " but " + _heshe + " shrugs off the attack like it was nothing">>\
<<else>>\
<<set _m to "You " + _attacktype + " " + _attackdesc + " at " + _TheMon + " for " + _TD + " damage">>\
<<set $Mon.hpcur to $Mon.hpcur - _TD>>\
<<endif>>\
<<endif>>\
<<CombatLog _Message>>\
\
<<elseif _attacktype is "weapon">>\
<<set _bp to $PC[$CC][$PCbp][_slot]>>\
<<set _item to _bp.equip>>\
<<DescribeItem _item>>\
<<set _WeaponName to $ItemPoke.name>>\
<<set _AttackDesc to "attack with your">>\
<<set _AttackType to $ItemPoke.attacktype>>\
<<if _AttackType is "slash">>\
<<set _AttackDesc to "You swing your " + _WeaponName + " at " + _TheMon>>
<<elseif _AttackType is "blunt">>
<<set _AttackDesc to "You swing your " + _WeaponName + " at " + _TheMon>>
<<elseif _AttackType is "cleave">>
<<set _AttackDesc to "You swing your " + _WeaponName + " at " + _TheMon>>
<<elseif _AttackType is "pierce">>
<<set _AttackDesc to "You thrust your " + _WeaponName + " at " + _TheMon>>
<<endif>>\
\
<<set _mindam to $ItemPoke.mindam>>\
<<set _maxdam to $ItemPoke.maxdam>>\
<<set _hitmessage to "You " + _attackdesc + $Mon.name>>\
<<set _missmessage to
<<set _foo to either("hit","punch")>>\
<<set _th to random(1, 100) - $Mon.armor + $PC[$CC][$PCtohit] + $PC[$CC][$PCmorphBONI].th>>\
<<if _th < 1>>\
<<set _Message to "You " + _AttackDesc + $Mon.name + " but miss">>\
<<else>>\
<<set _mindam to _bp.mindam>>\
<<set _maxdam to _bp.maxdam>>\
<<set _TD to random(_mindam, _maxdam) + _strmod>>\
\
<<set _ResSuffix to "">>\
<<for _RES to 0; _RES < $Mon.resists.length; _RES++>>
<<if _attacktype is $Mon.resists[0]>>\
<<set _TD to Math.trunc((_TD * 50) / $Mon.resists[1])>>\
<<set _ResSuffix to _ResSuffix + "()
<<endif>>
<</for>>\
\
<<if _TD < 1>>\
<<set _absorbmessage to _hitmessage + " but " + _heshe + " absorbs the blow for no effect">>\
<<set _Message to "You " + _attacktype + " " + _attackdesc + " at " + _TheMon + " but " + _heshe + " shrugs off the attack like it was nothing">>\
<<else>>\
<<set _m to "You " + _attacktype + " " + _attackdesc + " at " + _TheMon + " for " + _TD + " damage">>\
<<set $Mon.hpcur to $Mon.hpcur - _TD>>\
<<endif>>\
<<endif>>\
<<CombatLog _Message>>\
<<if _td > 19>>\
<<AwardAchievement "Warrior">>\
<<endif>>\
<<elseif _attacktype is "bash">>\
<<if $Mon.stunned < 0>>\
<<set _CombatMessage to _TheMon.toUpperFirst() + " @@color:Yellow;anticipates the blow and dodges@@">>\
<<else>>\
<<set _StunChance to random(-2, 2) + $PC[$CC][$PCstr]>>\
<<if $PC[$CC][$PClocation] is "tower">>\
<<set _StunChance to _StunChance - ($PC[$CC][$PCz] * 3)>>\
<<else>>\
<<set _StunChance to _StunChance - $PC[$CC][$PCfz]>>\
<<endif>>\
<<if _StunChance > 0>>\
<<if $Mon.name.includes("slime")>>\
<<set _CombatMessage to "You swing your shield but @@color:Yellow;the slime absorbs the blow@@">>\
<<elseif $Mon.name.includes("tentacle")>>\
<<set _CombatMessage to "You swing your shield but @@color:Yellow;the creature casually deflects it with a tentacle@@">>\
<<elseif $Mon.name.includes("Zehtalia")>>\
<<if $Mon.Powerup is 1>>\
<<set _CombatMessage to "You smash Zehtalia with your shield and @@color:Aqua;she stops screaming@@">>\
<<else>>\
<<set _CombatMessage to "You @@color:Aqua;smash Zehtalia with your shield@@">>\
<<endif>>\
<<set $Mon.Powerup to 0>>\
<<set $Mon.stunned to 1>>\
<<else>>\
<<set $Mon.Powerup to 0>>\
<<set $Mon.stunned to 1>>\
<<set _CombatMessage to "You @@color:Aqua;bash " + _TheMon + " with your shield@@, knocking " + $Mon.himher + " off balance">>\
<<endif>>\
<<else>>\
<<set _CombatMessage to "You swing your shield but @@color:Yellow;don't connect with enough force@@">>\
<<endif>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _attacktype is "firebolt">>\
<<if $PC[$CC][$PCmanacur] > 0>>\
<<set _MinDam to 1>>\
<<set _MaxDam to $PC[$CC][$PClevel] * $PC[$CC][$PCint]>>\
<<set _TD to random(_MinDam, _MaxDam) + _GlobalSpellBonus + $PC[$CC][$PCspellbook].firebolt>>\
<<set _CombatMessage to "You fling a firebolt at " + _TheMon>>\
<<if $Mon.name.includes("hellhound")>>\
<<set $Mon.hpcur to $Mon.hpcur + _td>>\
<<if ($Mon.hpcur +1) > $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _CombatMessage to "Your firebolt @@color:Red;heals the hellhound to full health!@@">>\
<<else>>\
<<set _CombatMessage to "Your firebolt @@color:Red;heals the hellhound@@ for " + TD + "damage!">>\
<<endif>>\
<<else>>\
<<set $Mon.hpcur to $Mon.hpcur - _TD>>\
<<endif>>\
<<ChangeStat $PCmanacur -1>>\
<<ShowMana>>\
<<else>>\
<<set _CombatMessage to "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _attacktype is "heal">>\
<<set _endcombat to "skip player">>\
<<if $PC[$CC][$PCmanacur] > 1>>\
<<set _HealEffect to $PC[$CC][$PClevel] + _GlobalSpellBonus + $PC[$CC][$PCspellbook].heal>>
<<if ($PC[$CC][$PChpcur] + _HealEffect) gte $PC[$CC][$PChpmax]>>\
<<set _m to "You @@color:LightGreen;heal yourself to full!@@">>\
<<else>>\
<<set _m to "You @@color:LightGreen;heal yourself@@ for " + _HealEffect>>\
<<endif>>\
<<ChangeStat $PChpcur _HealEffect>>\
<<ShowHealth>>\
<<ChangeStat $PCmanacur -2>>\
<<ShowMana>>\
<<CombatLog _m>>\
<<if _HealEffect > ($PC[$CC][$PChpmax] - $PC[$CC][$PChpcur])>>\
<<set _HealEffect to ($PC[$CC][$PChpmax] - $PC[$CC][$PChpcur])>>\
<<endif>>\
<<set $PC[$CC][$PCspellbook].totalheal to $PC[$CC][$PCspellbook].totalheal + _HealEffect>>\
<<if $PC[$CC][$PCspellbook].totalheal > 99>>\
<<AwardAchievement "Priest">>\
<<endif>>\
<<else>>\
<<CombatLog "You try to heal yourself, but @@color:Yellow;you're out of mana@@">>\
<<endif>>\
<<elseif _attacktype is "armor">>\
<<set _endcombat to "skip player">>\
<<if $PC[$CC][$PCmanacur] > 1>>\
<<ChangeStat $PCmanacur -1>>\
<<ShowMana>>\
<<if setup.GetEffect("armor") > 0>>\
<<CombatLog "You cast armor, but that spell is already active">>\
<<else>>\
<<set _Armor to ($PC[$CC][$PClevel] * 10) + _GlobalSpellBonus + $PC[$CC][$PCspellbook].armor>>\
<<set _throwaway to setup.ApplyEffect("armor", _Armor)>>\
<!-- implement update active effects on caption -->\
<<set _m to "You gain @@color:Purple;" + _Armor + " armor@@ for the rest of this battle">>\
<<CombatLog _m>>\
<<endif>>\
<<else>>\
<<set _th to -99>>\
<<CombatLog "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<endif>>\
<<elseif _attacktype is "poison">>\
<<if $PC[$CC][$PCmanacur] > 1>>\
<<set _th to 1000>>\
<<set _td to $PC[$CC][$PCspellbook].poison + _GlobalSpellBonus>>\
<<set $Mon.poisoned to $Mon.poisoned + _td>>\
<<set _m to "You @@color:ForestGreen;poison the " + $Mon.name + "@@">>\
<<CombatLog _m>>\
<<ChangeStat $PCmanacur -1>>\
<<ShowMana>>\
<<else>>\
<<set _m to "You try to cast a spell, but @@color:Yellow;you're out of mana@@">>\
<<CombatLog _m>>\
<<endif>>\
<<elseif _attacktype is "run">>\
<<set _Webbed to setup.GetEffect("webbed")>>\
<<if _Webbed > 0>>\
<<CombatLog "The @@color:Yellow;webbing prevents you from running!@@">>\
<<MonsterTurn false>>
<<else>>\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<set _FleeMessage to "You turn and " + either("run", "flee") + _TheMon.toUpperFirst() + " doesn't give chase.">>\
\
<<set _PlayerFlee to $PC[$CC][$PCdex] + ($PC[$CC][$PClevel] * 5)>>\
<<set _PlayerFlee to _PlayerFlee * ($PC[$CC][$PChpcur] / $PC[$CC][$PChpmax])>>\
<<set _MonsterChase to random(1,10) + $Mon.chase + $Mon.teased - $Mon.poisoned>>\
<<set _MonsterChase to _MonsterChase * ($Mon.hpcur / $Mon.hpmax)>>\
<<if ($PC[$CC][$PClocation] is "tower") and ($Dungeon[_pz][_px][_py][11] is 0)>><<else>>\
<<set _MonsterChase to 999>>\
<<set _FleeMessage to"You try to " + either("run","flee","run away") + " but " + _TheMon + either(" is tenacious!"," is determined to continue the fight!"," blocks your escape!")>>
<<elseif $PC[$CC][$PClocation] is "forest">>\
<<set _MonsterChase to _MonsterChase -5>>\
<<endif>>\
<<if _PlayerFlee > _MonsterChase>>\
<<set _fleemess to "You turn and " + either("run", "flee") + _TheMon.toUpperFirst() + " doesn't give chase.">>\
<<CombatLog _FleeMessage>>\
<<set _endcombat to "yes">>\
<<else>>\
<<CombatLog _FleeMessage>>\
<<MonsterTurn false>>
<<endif>>\
<<endif>>\
<<elseif _attacktype is "flirt">>\
<<set _flirtarray to setup.GetFlirtPower($Mon.morph)>>\
<<set _flirtpower to _flirtarray[0]>>\
<<if $Mon.sex is "male">>\
<<set _flirtpower to _flirtpower + _flirtarray[2] + _flirtarray[3]>>\
<<elseif $Mon.sex is "female">>\
<<set _flirtpower to _flirtpower + _flirtarray[1]>>\
<<else>>\
<<set _flirtpower to _flirtpower + _flirtarray[1] + _flirtarray[2] + _flirtarray[3]>>\
<<endif>>\
\
<<set _th to _flirtpower + $PC[$CC][$PCmorphBONI].flirtth - $Mon.resistflirt>>\
<!-- implement clothes bonus -->\
<<set _td to random(0, _flirtpower) + $PC[$CC][$PCmorphBONI].flirtdam>>\
\
<<if $PC[$CC][$PCsex] is "male">>\
<<set _frand to random(1,4)>>\
<<if _frand is 1>>\
<<set _hitmessage to "You wink suggestively at the " + $Mon.name>>\
<<elseif _frand is 2>>\
<<set _hitmessage to "You strike a pose and curl your biceps">>\
<<elseif _frand is 3>>\
<<set _hitmessage to "You point between your legs and whistle at the " + $Mon.name>>\
<<else>>\
<<set _hitmessage to "You give a winning smile to the " + $Mon.name>>\
<<endif>>\
<<set _frand to random(1,3)>>\
<<if _frand is 1>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " just rolls " + $Mon.hisher + " eyes at you">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is visibly aroused.">>\
<<elseif _frand is 2>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " doesn't seem interested.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is definitely interested.">>\
<<else>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " is unimpressed.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.hisher.toUpperFirst() + " cheeks flush red.">>\
<<endif>>\
<<set _absorbmessage to _missmessage>>\
<<elseif $PC[$CC][$PCsex] is "female">>\
<<set _frand to random(1,4)>>\
<<if _frand is 1>>\
<<set _hitmessage to "You lick your lips at " + _TheMon>>\
<<elseif _frand is 2>>\
<<set _hitmessage to "You look away and pretend to accidentally jiggle your boobs">>\
<<elseif _frand is 3>>\
<<set _hitmessage to "You blow a kiss to " + _TheMon>>\
<<else>>\
<<set _hitmessage to "You squeeze your legs together and sigh longingly at " + _TheMon>>\
<<endif>>\
<<set _frand to random(1,3)>>\
<<if _frand is 1>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " just rolls " + _hisher + " eyes at you">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is visibly aroused.">>\
<<elseif _frand is 2>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " doesn't seem interested.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.heshe.toUpperFirst() + " is definitely interested.">>\
<<else>>\
<<set _missmessage to _hitmessage + ", but " + $Mon.heshe + " is unimpressed.">>\
<<set _hitmessage to _hitmessage + ". " + $Mon.hisher.toUpperFirst() + " cheeks flush red.">>\
<<endif>>\
<<set _absorbmessage to _missmessage>>\
<<else>>\
<<set _frand to random(1,8)>>\
<<if _frand is 1>>\
<<set _hitmessage to "You wink suggestively at + $Mon.name>>\
<<elseif _frand is 2>>\
<<set _hitmessage to "You strike a pose and curl your biceps">>\
<<elseif _frand is 3>>\
<<set _hitmessage to "You point between your legs and whistle at the " + $Mon.name>>\
<<elseif _frand is 4>>\
<<set _hitmessage to "You give a winning smile to the " + $Mon.name>>\
<<elseif _frand is 5>>\
<<set _hitmessage to "You lick your lips at the " + $Mon.name>>\
<<elseif _frand is 6>>\
<<set _hitmessage to "You look away and pretend to accidentally jiggle your boobs">>\
<<elseif _frand is 7>>\
<<set _hitmessage to "You blow a kiss to " + _TheMon>>\
<<else>>\
<<set _hitmessage to "You squeeze your legs together and sigh longingly at " + _TheMon>>\
<<endif>>\
<<set _frand to random(1,3)>>\
<<if _frand is 1>>\
<<set _missmessage to _hitmessage + ", but " + _heshe + " just rolls " + _hisher + " eyes at you">>\
<<set _hitmessage to _hitmessage + ". " + _heshe.toUpperFirst() + " is visibly aroused.">>\
<<elseif _frand is 2>>\
<<set _missmessage to _hitmessage + ", but " + _heshe + " doesn't seem interested.">>\
<<set _hitmessage to _hitmessage + ". " + _heshe.toUpperFirst() + " is definitely interested.">>\
<<else>>\
<<set _missmessage to _hitmessage + ", but " + _heshe + " is unimpressed.">>\
<<set _hitmessage to _hitmessage + ". " + _hisher.toUpperFirst() + " cheeks flush red.">>\
<<endif>>\
<<set _absorbmessage to _missmessage>>\
<<endif>>\
<<elseif _attacktype is "INVENTORY">>\
<<CombatLog _ArrayReceived[2]>>\
<<set _endcombat to "skip player">>\
<<elseif _attacktype is "debug kill">>\
<<set _th to 9999>>\
<<set _td to 9999>>\
<<set _hitmessage to "You zap " + _TheMon>>\
<<else>>\
<!-- defaults -->\
<<set _MaybeError to "CombatLog defaulted: " + _args[0] + ", " + _args[1] + ", " + _args[2]>>\
<<CombatLog _MaybeError>>\
<<endif>>\
\
<<if _endcombat is "yes">>\
<<replace "#monhealth">><</replace>>\
<<replace "#monflirt">><</replace>>\
<<replace "#combatcontrols">>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Continue" $ReturnFromMenu>>
<<ClearTemporaryEffects>>\
<</link>>\
</span>
<</replace>>\
<<elseif _endcombat is "skip player">>\
<<elseif _endcombat is "normal">>\
<<if _th < 1>>\
<<set _m to _missmessage>>\
<<else>>\
<<if _td < 1>>\
<<set _m to _absorbmessage>>\
<<elseif _attacktype is "flirt">>\
<<set _m to _hitmessage>>\
<<set $Mon.teased to $Mon.teased + _td>>\
<<else>>\
<!-- account for resistences? -->\
<<set _m to _hitmessage + " for " + _td + " damage">>\
<<set $Mon.hpcur to $Mon.hpcur - _td>>\
<<endif>>\
<<endif>>\
<<CombatLog _m>>\
<<else>>
<<CombatLog "@@color:Red;Error in combat: do we resolve or no?@@">>\
<<endif>>\
<<if $Mon.poisoned > 0>>\
<<if $Mon.name.includes("slime") or ($Mon.name.includes("Zehtalia"))>>\
<<set $Mon.hpcur to $Mon.hpcur + $Mon.poisoned>>\
<<if $Mon.hpcur gte $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _m to "The " + $Mon.name + " is @@color:Yellow;healed to full by the poison!@@">>\
<<CombatLog _m>>\
<<else>>\
<<set _m to "The " + $Mon.name + " is @@color:Yellow;healed for " + $Mon.poisoned + " by the poison!@@">>\
<<CombatLog _m>>\
<<endif>>\
<<else>>\
<<set $Mon.hpcur to $Mon.hpcur - $Mon.poisoned>>\
<<set _m to "The " + $Mon.name + " takes " + $Mon.poisoned + " @@color:LawnGreen;damage from poison@@">>\
<<CombatLog _m>>\
<<endif>>\
<<endif>>\
<<ShowActiveEffects>>\
<</widget>>\
\
<<widget "CombatLog">>\
<<set $ComLog[0] to $ComLog[1]>>\
<<set $ComLog[1] to $ComLog[2]>>\
<<set $ComLog[2] to $ComLog[3]>>\
<<set $ComLog[3] to $ComLog[4]>>\
<<set $ComLog[4] to $ComLog[5]>>\
<<set $ComLog[5] to $ComLog[6]>>\
<<set $ComLog[6] to $ComLog[7]>>\
<<set $ComLog[7] to $ComLog[8]>>\
<<set $ComLog[8] to $ComLog[9]>>\
<<set $ComLog[9] to $ComLog[10]>>\
<<set $ComLog[10] to $ComLog[11]>>\
<<set $ComLog[11] to $ComLog[12]>>\
<<set $ComLog[12] to $ComLog[13]>>\
<<set $ComLog[13] to $ComLog[14]>>\
<<set $ComLog[14] to $ComLog[15]>>\
<<set $ComLog[15] to $args[0]>>\
<!-- <<set _floof to setup.advanceLog()>> -->\
<<for _i to 0; _i < 16; _i++>>
<<set _foo to "#combatlog" + _i>>
<<replace _foo>>\
<<print $ComLog[_i]>>\
<</replace>>\
<</for>>\
<</widget>>\
<<widget "MonsterAttack">>\
<<CombatLog "monster attack goes here">>\
<</widget>>\
\
<<widget "MonsterTurn">>\
<<set _TheMon to "The " + $Mon.name + " ">>\
<<if $Mon.name.includes("Zehtalia")>>\
<<set _TheMon to $Mon.name + " ">>\
<<endif>>\
\
<<if $Mon.hpcur < 1>>\
\
<<ClearTemporaryEffects>>\
\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
\
<<set _MonKillPTR to setup.MonNameToKillPTR($Mon.morph)>>\
<<set $PC[$CC][$PCkills][_MonKillPTR] to $PC[$CC][$PCkills][_MonKillPTR] +1>>\
\
<<replace "#monhealth">><</replace>>\
<<replace "#monflirt">><</replace>>\
<<replace "#combatcontrols">>\
@@color:LightGreen;You are victorious!@@
<<set $PC[$CC][$PCmisc].battleswon to $PC[$CC][$PCmisc].battleswon +1>>\
\
<<set $LogKills to $LogKills +1>>\
<<if $Mon.xp > 0>>\
<<AwardXP $Mon.xp>>\
<<endif>>\
<<if $Mon.gold > 0>>\
<<set _BonusGold to 0>>\
<<set _TotalGold to $Mon.gold>>\
<<if setup.PlayerHasPerk("Greedy") is true>>
<<set _BonusGold to Math.trunc($Mon.gold / 10)>>\
<<set _TotalGold to _TotalGold + _BonusGold>>\
<<endif>>\
<<if _BonusGold > 0>>\
You find <<print $Mon.gold>>@@color:LightGreen;(+<<print _BonusGold>> from Greedy perk)@@ coins on <<print _TheMon>>
<<else>>\
You find <<print $Mon.gold>> coins on the <<print $Mon.name>>.
<<endif>>\
<<set $PC[$CC][$PCmisc].gold to $PC[$CC][$PCmisc].gold + _TotalGold>>\
<<GainGold _TotalGold>>\
<<endif>>\
\
<<set _AllowRape to true>>\
<<set _AllowDrop to true>>\
<<set _AllowButcher to true>>\
<<set _AllowBottle to true>>\
<<set _AllowBlood to true>>\
<<if $WORLD.CombatInterrupt is "smith quest omnibus">>\
<<set $WORLD.CombatInterrupt to "defeated smith omnibus">>\
<<set _AllowRape to false>>\
<<set _AllowDrop to false>>\
<<set _AllowButcher to false>>\
<<set _AllowBottle to false>>\
<<elseif $WORLD.CombatInterrupt is "Zehtalia">>\
<<set $WORLD.CombatInterrupt to "defeated Zehtalia">>\
<<set _AllowRape to false>>\
<<set _AllowButcher to false>>\
<<set _AllowBottle to false>>\
<<set _AllowBlood to false>>\
<<else>>\
<<set $WORLD.CombatInterrupt to "">>\
<<endif>>\
\
<<if _AllowDrop is true>>\
<<if _pz > 0>>\
<<set _LootChance to random(1,5)>>\
<<if $Dungeon[_pz][_px][_py][11] neq 0>>\
<<set _LootChance to 1>>\
<<endif>>\
<<set _Loot to $Mon.loot>>\
<<if (_Loot[0] is 0) and (_LootChance is 1)>>
<<set _Loot to setup.GenLoot($Mon.name, $Mon.sex, _pz, $PC[$CC][$PClocation])>>\
<<endif>>\
<<if _Loot[0] is 0>>\
<<else>>\
<<DescribeItem _Loot>>\
<<set _name to $ItemPoke.name>>\
<<if _name is "none">>\
<<if $DebugMode is true>>\
@@color:Yellow;Debug: Fixed-placement tower $Mon.name generated no item: (_Loot)@@
<<endif>>\
<<else>>\
<<if setup.getnextinvslot($CC) < 0>>\
You find a <<print _name>>, but @@color:Yellow;you have no room in inventory@@ and abandon it.
<<else>>\
You find a <<print _name>> and take it with you.
<<set _asd to setup.addtoinven(_Loot)>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<endif>>\
<hr>\
<<endif>>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<</link>>
</span>\
<<if _AllowRape is true>>\
<<include "Victory">>\
<<endif>>\
<<if _AllowButcher is true>>\
<<if setup.HasButcherTool() > -1>>\
<hr>\
<<set _foo to "b) Butcher the " + $Mon.name + " for meat">>\
<span id="KeypB">\
<<link _foo $ReturnFromMenu>>
<<set _foo to setup.additemtoinv($CC, [102, 0, 1, $Mon.MeatSemenMilk[0], 0], true)>>
<</link>>
</span>\
<<else>>\
<br>\
<<endif>>\
<<endif>>\
<<if _AllowBottle is true>>\
<<set _BottleSlot to setup.HasBottle()>>\
<<if _BottleSlot > -1>>\
<<if (setup.getnextinvslot($CC) > -1) or ($PC[$CC][$PCinven][_BottleSlot][2] is 1)>>\
<!-- implement case for no room, but already have stackable type -->\
<span id="KeypFour">\
<<link "4) Collect sexual fluids" "Butcher">>
<<set $DisableMenu to false>>
<<set _foo to setup.RemoveOneItemFromInv($CC, _BottleSlot)>>
<<set _foo to setup.additemtoinv($CC, [102, 0, 1, $Mon.MeatSemenMilk[0], 0], true)>>
<</link>>
</span>\
<<else>>\
No room in inventory for additional fluids
<<endif>>\
<<endif>>\
<<endif>>\
<</replace>>\
<!-- TOWER ONLY: remove monster and place blood -->\
<<if _AllowBlood is true>>\
<<if _pz > 0>>\
<<if ($Dungeon[_pz][_px][_py][11] is 0) or $Dungeon[_pz][_px][_py][11] is "Monster">>\
<<set $Dungeon[_pz][_px][_py][8] to 100>>\
<<set $Dungeon[_pz][_px][_py][11] to 0>>\
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<<endif>>\
<<endif>>\
<<endif>>\
<<else>>\
<!-- REMOVE SUBSEQUENT STUN IMMUNITY -->\
<<if $Mon.stunned is -1>>\
<<set $Mon.stunned to 0>>\
<<endif>>\
<!-- PROCESS POISON -->>
<<set _PlayerPoisoned to setup.GetEffect("poison")>>\
<<if _PlayerPoisoned > 0>>\
<<set _PoisonMessage to "You take @@color:Green;" + _PlayerPoisoned + " damage from poison!@@">>\
<<CombatLog _PoisonMessage>>\
<<set _PlayerPoisoned to (_PlayerPoisoned * -1)>>\
<<ChangeStat $PChpcur _PlayerPoisoned>>\
<<endif>>\
<!-- CHOOSE AN ATTACK TYPE -->\
<<if $Mon.att.length > 0>>\
<<else>>\
<<AddToLog "Error in MonsterTurn: no valid attacks in array">>\
<<endif>>\
<<set _WhichAttack to random(0, $Mon.att.length -1)>>\
<<if (_MonAttackType is "heal") and ($Mon.hpcur gte $Mon.hpmax)>>\
<<set _WhichAttack to 0>>\
<<endif>>\
<<if ($Mon.teased > random(1,100)) and (_MonAttackType is "flirt")>>\
<<set _WhichAttack to 0>>\
<<set _changeattack to _TheMon + " seems agitated">>\
<<CombatLog _changeattack>>\
<<endif>>\
<<set _MonAttackType to $Mon.att[_WhichAttack][0]>>\
<!-- ************************************************************* -->\
\
<!-- CALC PLAYER NET ARMOR FOR PHYSICAL ATTACKS ONLY -->\
<<set _PlayerTotalAC to 0>>\
<<for _AcCycle to 0; _AcCycle < $PC[$CC][$PCac].length; _AcCycle++>>\
<<set _PlayerTotalAC to _PlayerTotalAC + $PC[$CC][$PCac][_AcCycle]>>\
<<set _Webbed to setup.GetEffect("webbed")>>\
<<if _Webbed > 0>>\
<<set _PlayerTotalAC to _PlayerTotalAC - _Webbed>>\
<<endif>>\
<</for>>\
<!-- ************************************************************* -->\
\
<!-- CALC PLAYER ABSORPTION AFTER ARMOR PENETRATION -->
<<set _NetAbsorb to $PC[$CC][$PCabsorb] - $Mon.arpen>>\
<<if _NetAbsorb < 0>>\
<<set _TotalAbsorb to 0>>\
<<endif>>\
<!-- ************************************************************* -->\
\
<<set _LosebyLust to false>>\
\
<!-- AI -->\
<<if $Mon.AI is "Zehtalia">>\
<<if (_MonAttackType is "POISON") and ($PC[$CC][$PCcon] > 14)>>\
<<if random(1,2) is 1>>\
<<set _WhichAttack to 0>>\
<<set _MonAttackType to "physical">>\
<<endif>>\
<<elseif (_MonAttackType is "WEB") and ($PC[$CC][$PCdex] > 14)>>\
<<if random(1,2) is 1>>\
<<set _WhichAttack to 0>>\
<<set _MonAttackType to "physical">>\
<<endif>>\
<<endif>>\
<<if $Mon.Powerup > 0>>\
<<set _MonAttackType to "ZEHTALIA">>\
<<elseif setup.GetEffect("poisoned") is 0>>\
<<set _WhichAttack to 3>>\
<<set _MonAttackType to "POISON">>\
<<elseif random(1,3) is 1>>\
<<set _MonAttackType to "ZEHTALIA">>\
<<endif>>\
<<endif>>\
\
<!-- PERFORM MONSTER ATTACK -->\
<<if $Mon.stunned > 0>>\
<<set $Mon.stunned to -1>>\
<<set _CombatMessage to "@@color:Aqua;" + _TheMon + either("is too dazed to attack","is reeling"," takes a moment to catch " + $Mon.hisher + " breath")>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "physical">>\
<<set _ToHit to random(1, 100) + $Mon.att[_WhichAttack][3] - _PlayerTotalAC>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2]) - _NetAbsorb>>\
<<if _Damage > 0>>\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][6]>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "magic">>\
<<set _ToHit to random(1, 100) + $Mon.att[_WhichAttack][3] - $PC[$CC][$PCwil]>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2]) - _NetAbsorb>>\
<<if _Damage > 0>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][6]>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "flirt">>\
<!-- to hit here should be increased by player sexy clothing -->\
<<set _ToHit to random(1, $Mon.att[_WhichAttack][3]) + $Mon.teased - $PC[$CC][$PClevel] - $PC[$CC][$PCwil]>>\
<<if _ToHit > 0>>\
<!-- does anything directly reduce flirt damage? -->\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4] + ", @@color:Pink;+" + _Damage + " arousal@@">>\
<<ChangeStat $PChornycur _Damage>>\
<<CombatLog _CombatMessage>>\
<<if $PC[$CC][$PChornycur] < 1>>\
<<set _LosebyLust to true>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<CombatLog _CombatMessage>>\
<<endif>>\
<<elseif _MonAttackType is "ZEHTALIA">>\
<<if $Dungeon[_pz][_px][_py][12] is "hard mode Zehtalia">>\
<<set _Zshout to "Zehtalia screams, @@color:Yellow;" + either("DIE, HERETIC!","YOUR LIES WILL BE SILENCED!") + "@@">>\
<<set _Zmulti to 3>>\
<<set _ZmissRNG to 1>>\
<<else>>\
<<set _Zshout to "Zehtalia screams, @@color:Yellow;" + either("ANNIHILATION COMES!","DOOM UPON YOU!","TASTE MY WRATH, PUNY MORTAL!","I AM THE GOD OF HELLFIRE!") + "@@">>\
<<set _Zmulti to 2>>\
<<set _ZmissRNG to 2>>\
<<endif>>\
<<if $Mon.Powerup is 0>>\
<<CombatLog _Zshout>>\
<<set $Mon.Powerup to 1>>\
<<else>>\
<<set $Mon.Powerup to 0>>\
<<set _Damage to +_Zmulti * random($Mon.att[0][1], $Mon.att[0][2])>>\
<<set _CombatMessage to "Zehtalia @@color:Red;slams you into the floor for " + _Damage + " damage!@@">>\
<<CombatLog _CombatMessage>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<if random(1, _ZmissRNG) is 1>>\
<<set _Damage to 2 * random($Mon.att[0][1], $Mon.att[0][2])>>\
<<set _CombatMessage to "You are too stunned to avoid her @@color:Red;followup blow for " + _Damage + " more!@@">>\
<<CombatLog _CombatMessage>>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<if _Zmulti is 1>>\
<<set _throwaway to setup.ApplyEffect("poisoned", 1)>>\
<<set _throwaway to setup.ApplyEffect("webbed", 1)>>\
<<set _CombatMessage to _TheMon + " @@color:Yellow;poisons and webs you@@ while you're down!">>\
<<endif>>\
<<endif>>\
<<endif>>\
<<elseif _MonAttackType is "WEB">>\
<<set _ToHit to random(1, 20) + $Mon.level - $PC[$CC][$PClevel] - $PC[$CC][$PCdex]>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<!-- no absorption for web -->\
<<set _throwaway to setup.ApplyEffect("webbed", _Damage)>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4]>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "POISON">>\
<<set _ToHit to random(1, 20) + $Mon.level - $PC[$CC][$PClevel] - $PC[$CC][$PCcon]>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<!-- no absorption for poison -->\
<<set _throwaway to setup.ApplyEffect("poisoned", _Damage)>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][4]>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<<elseif _MonAttackType is "flurry">>\
<<for _flurry to 0; _flurry < $Mon.flurryQTY; _flurry++>>\
<<set _ToHit to random(1, 100) + $Mon.att[_WhichAttack][3] - _PlayerTotalAC>>\
<<if _ToHit > 0>>\
<<set _Damage to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2]) - _NetAbsorb>>\
<<if _Damage > 0>>\
<<set _CombatMessage to _TheMon + $Mon.att[_WhichAttack][4] + " for @@color:Red;" + _Damage + " damage@@">>\
<<set _Damage to (_Damage * -1)>>\
<<ChangeStat $PChpcur _Damage>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][6]>>\
<<endif>>\
<<else>>\
<<set _CombatMessage to _TheMon + " " + $Mon.att[_WhichAttack][5]>>\
<<endif>>\
<<CombatLog _CombatMessage>>\
<</for>>\
<<elseif _MonAttackType is "REMOVEARMOR">>\
<<CombatLog "@@color:Yellow;Debug: implement armor debuff@@">>\
<<elseif _MonAttackType is "debuffTH">>\
<<CombatLog "@@color:Yellow;Debug: to-hit debuff@@">>\
<<elseif _MonAttackType is "fertility">>\
<<CombatLog "@@color:Yellow;Debug: implement fertility attacks@@">>\
<<elseif _MonAttackType is "heal">>\
<<set _Heal to random($Mon.att[_WhichAttack][1], $Mon.att[_WhichAttack][2])>>\
<<set $Mon.hpcur to $Mon.hpcur + _Heal>>\
<<if $Mon.hpcur > $Mon.hpmax>>\
<<set $Mon.hpcur to $Mon.hpmax>>\
<<set _CombatMessage to _TheMon + " " + "@@color:Yellow;" + $Mon.att[_WhichAttack][4] + " to full health!@@">>\
<<else>>\
<<set _foo to _TheMon + " " + "@@color:Yellow;" + $Mon.att[_WhichAttack][4] + " for " + _Heal + " health@@">>\
<<endif>>\
<<else>>\
<<AddToLog "Error in combat widget: unrecognized attack type">>\
<<endif>>\
\
<<ShowHealth>>\
<<ShowHorny>>\
\
<<if _LoseByLust is true>>\
<<CombatLog "You have been defeated!">>\
<<replace "#combatcontrols">>\
@@Color:Red;You submit to the <<print $Mon.name>> in a fit of lust!@@
<hr>\
<span id="KeypOne">\
<<link "1) Continue" "DefeatSex">>
<<ClearTemporaryEffects>>\
<</link>>\
</span>\
<</replace>>\
<<elseif $PC[$CC][$PChpcur] < 1>>\
<<set $PC[$CC][$PCmisc].battleslost to $PC[$CC][$PCmisc].battleslost +1>>\
<<CombatLog "You have been defeated!">>\
<<replace "#combatcontrols">>\
@@Color:Red;You have been defeated!@@
<<if setup.PlayerHasPerk("Rich") is true>>\
<<set _GoldLost to Math.trunc($PC[$CC][$PCcoins] / 4)>>\
<<if _GoldLost is 1>>\
<<print _TheMon>> takes your last piece of gold.
<<elseif _GoldLost is 0>>\
<<else>>\
<<print _TheMon>> takes <<print _GoldLost>> of your gold.
<<endif>>\
<<else>>\
<<set _GoldLost to Math.trunc($PC[$CC][$PCcoins] /2)>>\
<<if _GoldLost is 1>>\
<<print _TheMon>> takes your last piece of gold.
<<elseif _GoldLost is 0>>\
<<else>>\
<<print _TheMon>> takes <<print _GoldLost>> of your gold.
<<endif>>\
<<endif>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _GoldLost>>\
<<if $PC[$CC][$PCcoins] < 0>>\
Debug: monster took more gold than the player had. Attempting to fix.
<<set $PC[$CC][$PCcoins] to 0>>\
<<endif>>\
<hr>\
<span id="KeypSpace">\
<<link "space) Continue" "DefeatSex">>
<<ClearTemporaryEffects>>\
<</link>>\
</span>\
<</replace>>\
<<endif>>\
<<ShowActiveEffects>>\
<<endif>>\
<</widget>>\
<<widget "GetAttackArray">>\
<<AddToLog "@@color:LightGreen;GetAttackArray has been called!@@">>\
<<set $AttackArray to []>>\
<<set _arcount to 0>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _i to 0; _i < _bpqty; _i++>>\
<<if $PC[$CC][$PCbp][_i].type is $BPwield>>\
<<if $PC[$CC][$PCbp][_i].equip[0] > 0>>\
<<DescribeItem $PC[$CC][$PCbp][_i].equip>>\
<<set _fulldesc to $ItemPoke.name + " attack">>\
<<set $AttackArray[_arcount] to ["weapon", _i, _fulldesc]>>\
<<set _arcount to _arcount +1>>\
<<elseif $PC[$CC][$PCbp][_i].hasOwnProperty("attacktype")>>\
<<set _fulldesc to $PC[$CC][$PCbp][_i].attacktype>>\
<<set $AttackArray[_arcount] to ["body", _i, _fulldesc]>>\
<<set _arcount to _arcount +1>>\
<<endif>>\
<<endif>>\
<</for>>\
\
<<if $AttackArray.length < 1>>\
@@color:Red;Probably an error: no valid body parts or weapons to attack with@@
<<endif>>\
\
<<unset $ItemPoke>>\
<</widget>>\<<set $PC[$CC][$PCz] to 0>>\
<<set $PC[$CC][$PClocation] to "town">>\
<<script>>Engine.play("TownSquare");<</script>>\
cut trap string code
not used to prevent infinite free trap avoidance gains. Does that matter?
<<set _HasCuttingTool to -1>>\
<<for _DISARM to 0; _DISARM < $PC[$CC][$PCmaxinven]; _DISARM++>>\
<<if ($PC[$CC][$PCinven][_DISARM][0] is 113) or ($PC[$CC][$PCinven][_DISARM][0] is 132)>>\
<<set _HasCuttingTool to _DISARM>>\
<<endif>>\
<</for>>\
<<if _HasCuttingTool > -1>>\
<<DescribeItem $PC[$CC][$PCinven][_HasCuttingTool]>>\
<<set _cutname to $ItemPoke.name>>
You have a _cutname with you, so you could cut the string if you'd like. Otherwise you could simply leave, but you risk possibly tripping over it if you pass through this room again.
<span id="KeypC">\
<<link "c) cut the string">>
<<set $Dungeon[_pz][_px][_py][8] to 102>>
<<set $Dungeon[_pz][_px][_py][11] to 0>>
<<set $Dungeon[_pz][_px][_py][12] to 0>>
<<ShowRoomDesc>>
<</link>>\
<span>\
<<else>>\
<br>If you had a knife or scissors, you could probably safely cut the string. Lacking this, you decide to leave the string alone. You'll have to be careful to avoid it if you pass through this room again.
<<set $AllowNav to true>>\
<<set _ExitLink to "none">>\
<<endif>>\
<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if (_pcpussy > 0)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven + 1>>\
<<if random(1,2) is 1>>\
The wolf wastes no time pouncing on you, ripping through your clothes with sharp claws and teeth. You kick and scream to no avail, the savage beast now straddled on your hips, pinning you down on all fours with such weight as to preclude any chance of escape. With the wolf's paws bearing down on your back, all you can do is look forward as a meaty cock slides its way between your thighs and plants itself just beweten your pussy lips.
For an excruciating moment, nothing happens. You try to nudge your hips away, but the wolf merely leans in keep his cosk where it is, still inside you. When you come up off your knees to pull your hips away even further, he leans in yet again to keep just his tip inside, and no further. It's not long before your mucles begin straining under his weight.
Content to wait you out, the wolf waits patiently until at last you relax your knees back to the ground, sliding your treacherously dripping pussy down onto his cock as you do. Taking your apparently willful action as submission, that's when he grips onto your hips with his forepaws and begins eagerly thrusting into you.
<<FemaleVirginity "a wolf">>\
As first you tell yourself that you're simply too tired to resist, but before long, the ryhthmic swaying of your hips back onto the wolf's cock make it clear just how much you're into him being into you. Or at least, the wolf and your body are both into it, approval from the rest of you seemingly not required.
Before long yor pussy is autonomically clenching itself around the full mast of the wolf's cock, relaxign with every thrust and tightening as it to keep him inside you when he pulls back. When his climax comes, he thrusts down on your back and leans forward to gain the cooperation of gravity to give every drop of his semen the best possible chance of climbing upward inside you to take root. Only after this does he force the bulbous knot at the base of his cock between your pussy lips to lock his cock inside you, and then inexpcliacably climaxes //again// fully knotted inside you.
That's when you pass out.
<<else>>\
See you struggling to crawl away on hands and knees, the wolf wastes no time mounting you from behind, his hardened member bouncing frantically between your thighs as it seeks a port of entry. Gasped at first contact when he finds it, you can't help but let out a moan of pleasure when he pushes slowly inside you. You then feel your knees lifted off the ground as the huge wolf stands at his full height to fuck you while your legs dangle helplessly beneath him, your hips held securely in the grip of his forelegs wrapped aroudn you like steel bands.
Before long you feel your body moving in rhythm with his, your quick throaty gasps echoing in time with a deep, guttural growl you feel as much as hear above you with his every thrust.
The wolf's claws dug lightly but deeply enough to leave marks on both sides, while you desperately hold your top half up to keep your face from being mashed into the ground. His frantic pace doesn't last long however, and within minutes you feel the telltale twiching of his cock that leads to a powerful gush of sperm inside you. Collpasing down onto your chest, your lower half is still trapped around his cock, still pumping occasional twitchy bursts of semen to be held inside you by the tight fit of his bulbous knot inside you.
Settling down for what seems like it could be a long wait, you come to a climax yourself from the sensation of his warm semen now sloshing audibbly around inside you, seeking to take root, your last thought before falling unconscoius being a wild imagining of what it would be like to be impregnated and to carry around an entire litter of this wolf's pups.
<<endif>>\
<<else>>
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analgiven to $PC[$CC][$PCsexACTS].analgiven + 1>>\
The wolf wastes no time to assert control, using his superior strength to force you into a submissive position on all fours
With his powerful forepaws now locked tightly around your hips, you struggle in vain to crawl away while he thrusts his rubbery cock at your ass cheeks. He seems to be having difficulty getting it in, however, and clenching your ass tightly closed you feel a glint of hope.
That's when he bites down hard around your neck, squeezing hard enough to draw blood until you stop moving.
"You're my bitch now," he growls through his teeth, shocking you into submission at hearing a human voice coming from a wolf.
"You were human once?" you whisper in dread at the implication.
"Shut up, fucktoy!" he snarls, slamming a paw down on the middle of your back to hole your prone, then drilling his rock-hard cock fully eight inches into your ass hole.
Too stunned to struggle, you simply lie there while the wolf get to work, pumping in and out of you roughly while he grunts and growls menacingly. Thankfully it's not long until his generous pre-cum coats and lubricates your insides, making his cock easier to take. But he doesn't let me, keeping you forcefully pinned to the ground
With the smell of his dog-like breath filling your nostisl from above and his thick, meaty cock filling you from benathe, you can do little but take it, scarecly aware of the slobbery bits of drool eagerly dribbling across your back as if to mirror his cum dribbling inside you.
When at last he cums, he digs his claws into your hips and throws his head back with a howl.
"Awwwuuuuuu!!!"
The sound of his howl and his semen bursting inside you are your last thoughts before everything goes dark.
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","wolfquad"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "wolf handjob">>\
With the wolf lying on his side panting, you find your eyes drawn to his disproportionately large cock. At roughly 8 inches it's a size that could reasonably fit on a human, but on a creature whose head only barely reaches you navel, it seems almost grotesquely large.
Watching it pulse with his every gasp of breath, you find yourself fascinated with it, drawn to its thicky, veinly length.
Figuring that since you won the fight, that cock belongs to you now, you sit down next to the wolf, and roll him all the way onto his back. With a cock erect enough to stick up into the air at an angle, the wolf doesn't object when you delicately glide a single finger from just between his balls and across its great length. The tip of his cock is strangely pointed, shaped almost like a straw cut at an angle. Curious, you reach down lick it, the smell of wolf musks hitting you as you grasp the base of his cock with both hands and begin to stroke. At first tempted to suck his balls dry, you instead sit down between splayed legs to watch yourself stroke wolf cock.
Amused at the change in his breathing, you gently massage his balls in one hand and squeeze the tip of his cock between thumb and finger with the other, taking note as the knit at the base of his cock grows and hardens as if to lock him inside a prospective partner. Grasping now with both hands and sliding them up and down the wolf's glroious length, it doesn't take long before he jettisons a spray of musky semen fully six feet away from you and onto the grass.
Wondering briefly what it would be like to feel that eruption inside you, you wipe your hands clean and continue on your way, leaving the wolf curled up and asleep on the ground.
<<elseif $WORLD.datapasser is "wolf blowjob">>\
<<set $PC[$CC][$PCsexACTS].bjgiven to $PC[$CC][$PCsexACTS].bjgiven +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Glancing at the wolf's large testicles dangling from a particularly magnificent cock, you can't help but reach out and give it a quick stroke.
Already moist with the wolf's fluids, your hand glides up and down easily, prompting the wolf to spread his hind legs to give you easier access. Deciding you can make better use of that space, you lean down with a grin and lick the length of his shaft with your tongue. The taste is exquisite, and you nibble and kiss every inch with your lips, licking up tasy little dribbles of fluid as you go.
Feeling daring yet also wanting more, you work your way up to his tip, give it a single flick with your tongue and purse your lips tightly aroudn him to begin a long, slow descent. Hearing the wolf begin to pant, you push your head down on his member with just enough force that it parts your lips and spreads your jaw as you own breathing intensifies. Massaging his fleshy belly with your hands, his cock slides easily between your your tongue and the roof of your mouth, his musky scent filling your tongue more growing intensity until at last his cock nudges against the back of your throat, already twitching and pulsing as if about to burst.
With still a few inches to go, you suppress your gag reflex and press down until your nose brushes against his belly, just in time for the spasm of his balls to tickle your chin before he bursts with a spray of delicious wolf semen inside you, which you eagerly accept over the course of several swallows.
You would have preferred for it to last a little longer, but the wolf seems fully satsified, and you wait for him to fall asleep before at last you slowly slide his cock back out across your tongue, giving it one last lick and a kiss before you at last return to your feet to continue your journey.
<<else>>\
Error in wolf sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\
setup.GetMorphology(WhichMon, WhichSex) = function {
var BPhead = State.variables.BPhead;
var BPneck = State.variables.BPneck;
var BPback = State.variables.BPback;
var BPchest = State.variables.BPchest;
var BPwield = State.variables.BPwield;
var BPhands = State.variables.BPhands;
var BPring = State.variables.BPring;
var BPwaist = State.variables.BPwaist;
var BPlegs = State.variables.BPlegs;
var BPfeet = State.variables.BPfeet;
var BPtail = State.variables.BPtail;
var BPhorn = State.variables.BPhorn;
var BPwings = State.variables.BPwings;
var BPtentacle = State.variables.BPtentacle;
var BPstinger = State.variables.BPstinger;
var BPpenis = State.variables.BPpenis;
var BPpussy = State.variables.BPpussy;
var BPboobs = State.variables.BPboobs;
var anatomy = {};
var Extras = [];
if (WhichMon == "bunny" ) {
Extras = ["tail"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "cat" ) {
Extras = ["tail"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "fox" ) {
Extras = ["tail"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "wolf" ) {
Extras = ["tail"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "horse" || WhichMon == "warg" || WhichMon == "hellhound" ))) {
anatomy[0] = [BPhead, Morph];
anatomy[1] = [BPneck, Morph];
anatomy[2] = [BPback, Morph];
anatomy[3] = [BPchest, Morph];
anatomy[4] = [BPwaist, Morph];
anatomy[5] = [BPtail, Morph];
anatomy[6] = [BPlegs, Morph];
anatomy[7] = [BPlegs, Morph];
anatomy[8] = [BPfeet, Morph];
anatomy[9] = [BPfeet, Morph];
if (Sex == "male) {
anatomy[anatomy.length] = [BPpenis, Morph];
} elseif (Sex == "female) {
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
} elseif (Sex == "herm") {
anatomy[anatomy.length] = [BPpenis, Morph];
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
};
} else if (WhichMon == "centaur" ) {
if (WhichSex == "male") {
} else if (WhichSex == "female") {
} else if (WhichSex == "herm") {
};
} else if (WhichMon == "human" ) {
anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "goblin" ) {
anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "slime" ) {
if (WhichSex == "male") {
anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichSex == "female") {
anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichSex == "herm") {
Extras = ["tail"];
anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
};
} else if (WhichMon == "naga" ) {
if (WhichSex == "male") {
} else if (WhichSex == "female") {
} else if (WhichSex == "herm") {
};
} else if (WhichMon == "spider" ) {
anatomy[0] = [BPhead, Morph];
anatomy[1] = [BPback, Morph];
anatomy[2] = [BPlegs, Morph];
anatomy[3] = [BPlegs, Morph];
anatomy[4] = [BPlegs, Morph];
anatomy[5] = [BPlegs, Morph];
if (Sex == "male) {
anatomy[anatomy.length] = [BPpenis, Morph];
} elseif (Sex == "female) {
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
} elseif (Sex == "herm") {
anatomy[anatomy.length] = [BPpenis, Morph];
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
};
} else if (WhichMon == "minotaur" ) {
Extras = ["tail","horns"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "imp" ) {
Extras = ["tail"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "drider" ) {
anatomy[0] = [BPhead, Morph];
anatomy[1] = [BPneck, Morph];
anatomy[2] = [BPback, Morph];
anatomy[3] = [BPchest, Morph];
anatomy[4] = [BPwaist, Morph];
anatomy[5] = [BPwield, Morph];
anatomy[6] = [BPwield, Morph];
anatomy[7] = [BPhands, Morph];
anatomy[8] = [BPring, Morph];
anatomy[9] = [BPring, Morph];
anatomy[10] = [BPtail, Morph];
anatomy[11] = [BPlegs, Morph];
anatomy[12] = [BPlegs, Morph];
anatomy[13] = [BPlegs, Morph];
anatomy[14] = [BPlegs, Morph];
if (Sex == "male) {
anatomy[anatomy.length] = [BPpenis, Morph];
} elseif (Sex == "female) {
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
} elseif (Sex == "herm") {
anatomy[anatomy.length] = [BPpenis, Morph];
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
};
} else if (WhichMon == "demon" ) {
Extras = ["tail","horns"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon == "tentacle" ) {
if (WhichSex == "male") {
} else if (WhichSex == "female") {
} else if (WhichSex == "herm") {
};
} else if (WhichMon == "chimera" ) {
} else if (WhichMon == "Charyss" ) {
Extras = ["tail","horns"]; anatomy = setup.GetStandardBiped(WhichMon, WhichSex, Extras);
} else if (WhichMon.includes("Zehtalia")) {
anatomy[0] = [BPhorns, Morph];
anatomy[1] = [BPhead, Morph];
anatomy[2] = [BPneck, Morph];
anatomy[3] = [BPback, Morph];
anatomy[4] = [BPchest, Morph];
anatomy[5] = [BPwaist, Morph];
anatomy[6] = [BPtail, Morph];
anatomy[7] = [BPlegs, Morph];
anatomy[8] = [BPlegs, Morph];
anatomy[9] = [BPlegs, Morph];
anatomy[10] = [BPlegs, Morph];
if (Sex == "male) {
anatomy[anatomy.length] = [BPpenis, Morph];
} elseif (Sex == "female) {
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
} elseif (Sex == "herm") {
anatomy[anatomy.length] = [BPpenis, Morph];
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
};
};
};
setup.GetStandardBiped = function(Morph, Sex, Extras) {
var BPhead = State.variables.BPhead;
var BPneck = State.variables.BPneck;
var BPback = State.variables.BPback;
var BPchest = State.variables.BPchest;
var BPwield = State.variables.BPwield;
var BPhands = State.variables.BPhands;
var BPring = State.variables.BPring;
var BPwaist = State.variables.BPwaist;
var BPlegs = State.variables.BPlegs;
var BPfeet = State.variables.BPfeet;
var BPtail = State.variables.BPtail;
var BPhorn = State.variables.BPhorn;
var BPwings = State.variables.BPwings;
var BPtentacle = State.variables.BPtentacle;
var BPstinger = State.variables.BPstinger;
var BPpenis = State.variables.BPpenis;
var BPpussy = State.variables.BPpussy;
var BPboobs = State.variables.BPboobs;
var anatomy = [];
anatomy[0] = [BPhead, Morph];
anatomy[1] = [BPneck, Morph];
anatomy[2] = [BPback, Morph];
anatomy[3] = [BPchest, Morph];
anatomy[4] = [BPwield, Morph];
anatomy[5] = [BPwield, Morph];
anatomy[6] = [BPhands, Morph];
anatomy[7] = [BPring, Morph];
anatomy[8] = [BPring, Morph];
anatomy[9] = [BPwaist, Morph];
anatomy[10] = [BPlegs, Morph];
anatomy[11] = [BPfeet, Morph];
for (i = 0; i < Extras.length; i++) {
var a = Extras[i];
anatomy[anatomy.length] = [a, Morph];
};
if (Sex == "male) {
anatomy[anatomy.length] = [BPpenis, Morph];
} elseif (Sex == "female) {
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
} elseif (Sex == "herm") {
anatomy[anatomy.length] = [BPpenis, Morph];
anatomy[anatomy.length] = [BPpussy, Morph];
anatomy[anatomy.length] = [BPboobs, Morph];
} else {
/* no sex for food items */
};
return anatomy
};@@color:LightGreen;What is maximum stat spread?@@
Your stat spread is the difference between your highest and lowest stat. Maximum spread is the biggest difference that is allowed. At the start of teh game , this is 8. So for example if your lowest stat is 6, your highest stat cannot be more than 14. The spread can be increased be completing certain achievements.
@@color:Gold;Transformation and morphology@@
@@color:LightGreen;What are the effects of on-human body parts?@@
As of this writing, for each body part of each type:
* bunny +1 flirt attack (run away bonus?)
* cat +1 melee damage when attacked unarmed
* fox +1 melee to hit when attacking unarmed
* wolf +1hp
* horse +2hp
* centaur (removed)
* insect +2ac
* goblin +1 flirt dam (-lust cap?)
* slime ? (2% blunt resistance (-health?))
* human None
* cow +2hp
* spider +2 all/melee to hit
* imp ?
* hellhound ?
* demon (spelldam?)
* tentacle ?
<hr>
@@color:Gold;Combat@@
@@color:Gold;How does shield bashing work?@@
A succesful shield bash stuns your opponent for a single turn. As it costs you a turn to bash and there's a chance to fail, shield bash is primarily useful in only two cases. First, if your opponent is taking periodic poison damage, every turn you delay them is basically a turn of free damage against them. Second, some opponents have "powerup" moves that do nothing on the rougd they're activated, but that buff their following attack. Bashing after thr powerup allows you to "interrupt" the power move so that it never occurs.
@@color:Gold;How does prayer work?@@
By brandishing a holy symbol in combat, you can accumlate 'prayer' buffs which reduce the lust damage of all of your opponents attacks. Against some opponents this can be extremely effective, as it doesn't take many turns to build up enough stacks to become immune to their damage. Especially if you're a priest, as priests receive double the normal effect from prayer. However, this strategy comes as a significant cost as it means puttting a holy symbol in your off hand instead of a shield, which generally means losing a lot of armor. Of course, if you have more than two arms, the cost may be negligible. If general, prayer is only a viable strategy in some specific cases.
@@color:Gold;I keep losing to lust attacks@@
In general this is simply a result of low stats. Lust attacks operate on a 1-10 roll, not a 1-100 roll like melee. the +10 flirt resistance you'd get from 10 willpower is the equivalent of +100 melee defense.
@@color:LightGreen;How does flirting work?@@
By default, you have a 0% chance to succeed at flirting.
* Every body part you have that matches the morph type of your target increases this by 1%. This value is not shown on your character sheet, but if you check under 'Examine Self' on the sidebar, you can see how many of which body part morphologies you have.
Your target then has preferences for whichever body parts complement theirs. Males like flirts from character with female body parts. That is, boobs and pussies. Females like flirts from characters with male body parts. That is to say, penises. Hermaphrodites like flirts from characters with any parts.
If your target likes the parts you have:
* Every inch of penis you have increases your success by 1%. For example, a character with 2 six-inch penises gain an extra 12%
* Every 100cc of boob volume increases your success by 1%. For example, a character with a pair of 400cc boobs would gain an extra 4%.
* For pussy, a base 2% is gained, and the bonus is increased by every inch of depth less than 8 inches. That is, smaller is better. For example, a pussy able to accomodate a 12 inch cock would be worth 2%, whereas a pussy only comfortably able to take a 4 inch cock would be worth 6%.
@@color:GoldArmor penetration and damage absorption@@
Physical damage is reduced by damage absorption (being a barbarian, various perks, etc.) Absorption is reduced by monster armor penetration. Armor penetration cannot reduce absorption below zero. That is to say, it's not a straight damage adjustment, it only reduce the amount of reduction that can happen.
@@color:Gold;How do you beat Zehtalia?@@
Zehtalia has very low fire resistence, so if you're a spellcaster, you may be able to simply firebolt her down. Do //not// try to poison her, as it will heal her just like it heals slimes.
If you're fighting with melee only, her key mechanic is her powerup smash. When she screams at you, her next move will land for on averge 225% of her base attack, and this move will never miss. Interrupt it with a shield bash and the attack will never land, resulting her her powerup turn being wasted. Zhetalis resists stun the same as any dungeon level 5 monster, so with 13 strength you'll never succeed, every point above 13 will give you a 20% succeess rate, up to 100% at a strength of 18. If you can't afford that many stat points, it's possible to simply outheal her damage with potions or spells, though that method is somewhat RNG dependant, as it's possible for her to powerup multiple turns in a row. Healing as a strategy is only recommend if you can put out at least 12 healing per turn. Note that while it is possible to become unhittable to her regular attacks at a defense of 300%, it's impractical to reach that target with the content currently in-game. A more reasonable target is 225-250 defense, though be aware that her powerup attacks never miss. Finally, Zehtalia is an armored-typed monster, so it's best to not use swords on her.
<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>
</span>\
<hr>\
@@color:Gold;March 18, 2024: Bugfixes@@
@@color:Aqua;Misc changes:@@
* Inventory quantities larger than your strength will now apply to-hit, defense, and flee penalties
* Defeat by minotaur no longer results in death if your vaginal depth is sufficient to accomodate his cock (test permutations!)
* Completely reworked combat flee math
* Virgins now gain +2 willpower worth of flirt resistence (equivalent to 20%)
* Giving up your virginity now applies a -2 penalty against the specific monster type you submitted to. Stacks for both male and female virginity.
* Tavern now advances time to 6am the following day
* Night time forest encounters are now +1 level
* Weapons now show their damage type
* Legacy items have now been deprecated
@@color:Aqua;Bug fixes:@@
* Rogue pick calcuation fixed
* MoveRefresh error in forest is probably fixed. Hopefully.
* Lumberjack l7 bonus now works on cactus
* Building the vault no longer costs 5000 gold
* Fixed cactus/wood confusion in repeatable guild quest
* Wood quest now counts for Grinder achievement
* +0 enchants should no longer spawn
* Getting help from both Selene and Azax no longer prevents building the Legacy Vault
* It's now possible to withdraw money from the Legacy Vault even if there are no items
* Snakes now properly resist stabbing weapons
* Fixed a harmless console log error
* Herbalist perk works now
* Removed several impossible monster parts from guild quest (spider boobs, etc.)
* Fixed a problem that caused 100% of loot to be enchanted. Oops. :/
* Fixed exploit prevention on Zehtalia room chests
* Hermaphrodites in bedroom events now have vaginas
* Tavern restock updated to array-5 format
* Fixed Iron Army health bonus
* Fixed an incorrect transformation result text
* Incorrect troll parts fixed
* Fixed an exploit that caused eating food before combat to change monster
* Fixed a problem that resulted in infinitely expanding save files
* Fixed pincer text output
* Fixed ampm again
* I think I fixed the Selene flower picking lockout
* No more blue flower bug
* Reading a spellbook now only unlocks scholar if you learn the spell
* Arousal cap fixed
* Rogues no longer need lockpicks to try to pick a chest
<hr>
@@color:Gold;February 18, 2024: Graphics update@@
<hr>\
@@color:Aqua;New features and content:@@
* New map icon customization
* 96 new character avatars, and you can now use external images as custom avatars
* 53 new monster portraits
* Inventory items can now be sorted
* ToT now has a browser tab favicon
* Several new sex scenes
@@color:Aqua;Bug fixes:@@
* Fixed the "immutabliity +700" exploit. Note that this update will retroactively correct all bugged items.
* Fixed 2 Bugs related to forest flower generation
* Fixed a couple items that were being generated with the old pre-versiom 23-12-1 format
* Fixed male goblin softlock
* Fixed an infinite gold exploit in the pawnshop
* Map should fail to load less often when playing online
* The salon no longer shrinks the size of sex organs
* Fixed desert "highest zone ever" tracking
* Avoid combat option now respond to its keyboard shortcut
* Fixed a bug that could cause teleportion from tower to forest when avoiding certain encounter types (test this?)
* "GiveItem was sent an old pre-Nov 2023 formatted item" notice moved to debug mode
* Fixed Fox transform consumables
* Added snake to kill tracking (verify quest works)
* Barren should now be awarded when a slime eats an unborn child
* Fixed yet another problem with the bedroom event
* Minotaurs no longer have (goblin?) attacks
* You can no longer permanently lose character slots by reincarnating with a corpse in your inventory
* Fixed some errors in Harmony's reporting of character corpse locations
* Sleep no longer heals through plague curse
* Inactive characters should no longer be grayed out on the map
* Fixed pawnshop 'sell all' not giving gold
* Repeatable monster parts quest no longer accept any material
\
<hr>\
\
@@color:Gold;December 1, 2023: Major update: pregnancy and party systems, orphanage, legacy vault, tower generation, new quests, better loot!@@
@@color:Aqua;New features and content:@@
* Pregnancy and childbirth
* Party system
* Inventory is now infinitely large!
* Enchanted loot now drops in the tower
* New buildings: Orphanage, Legacy Vault, Salon
* Four new repeatable quests from Rina
* Tower generation rework: larger levels, more rooms per level, new lever puzzle levels
* New perks: Vault, Herbalist, Iron Army, Leader(I, II, III)
* New acheivements: Barren, Fertile, Breeder, Grinder
* New sex scenes for human, wolf, ant, ratkin, bunny, horse
* New items: Rage potion, lantern
* Improved lighting: note some players report it lags if they have browser hardware acceleration disabled on chrome
* Contraceptives, fertili-tea, and acid have been implemented
* Rocks added to forest and desert
@@color:Aqua;UI improvements:@@
* Church now allows retirement without chatting
* House interface now auto-updates on item drop/equip change
* The unlocks window now defaults to showing perms
* Blacksmith now has seperate tabs for weapons and armor
* You no longer need to visit the abandoned building twice to see the upgrade options
* Added [Drop all] button to house
* House inventory handles inventory overlay better now
* Selene no longer introduces herself every single time you talk to her
* Ratkin morph bonus implemented
* "Sort body" option now available from body view
* Audio volume is now remembered between sessions. You will need to set it once before memory starts.
* AC/flirt/light effects from equipment now update immediately on equipment change
@@color:Aqua;Rule changes:@@
* Blood and sexual fluids attract more powerful monsters
* Spells are now restricted by class
* Flowers are now items than can be picked and sold
* Scholar bonuses now apply to party members
* Willpower now determines maximum party size
* It's a little harder to to flee now, and monsters are more likely to chase if you smell sexy
@@color:Aqua;Bugfixes:@@
* Lost tower corpse generation should be vastly improved
* Several problems relating to the level 10 event have been fixed
* Several transformation and sex part bugfixes
* Applied a fix that should globally fix all problems related to keypresses while any window is open.
* Days now increment at midnight rather than 1 am. Again. Hopefully it stays fixed this time.
* World reset no longer resets minimap avatars
* House/pawn no longer destroys items after limit
* Eliminate the double negative for negative stats on the stats screen
* Monk/barbarian/ninja can no longer be unlocked by flirting
* Plain shirts no longer give +5 flirt
* Level 7 rogue trap auto-success fix
* Some issues with the heal spell have been fixed
* Body attacks with greater than 100% to hit now report 100% to hit
* Male prostitutes no longer start with boob armor
* Pawnshop and house no longer make non-stackable items stackable
* Some errors with stat bonus calculation has been fixed
\
<hr>\
\
@@color:Gold;July 12, 2023: Hotfix@@
* Fixed a strange problem that could cause people with old saves to have to load-reload the game a couple times for horn pointers to update
* Fixed firebolt damage
* Fixed bad link for renamed fox-morph defeat event
\
<hr>\
\
@@color:Gold;July 11, 2023: Bugfixes Is Magic@@
@@color:Aqua;New content:@@
* The desert now has music
* 1 new tower event: statue
* Bridge and pressure plate graphics
@@color:Aqua;Mobile compatibility@@
* Compatibility mode now hides upper-right images
@@color:Aqua;Magic system revisions:@@
* Spell levels from books have been removed from the game. No more 750+ damage firebolts.
* New spell: Dart
* Mage level 7 ability now regenerates mana on kills
* Mages start with dart, not firebolt
* Black Mage perk now grants firebolt
* Portal now costs 5 plus current Tower level mana, and it can be cast in combat
* Spells can no longer be learned directly from bookcases
@@color:Aqua;Rule changes:@@
* The chest unlock/trap code has been completely rewritten, both fixing some bugs and changing the math. Rogues are more valuable now.
* Encounters now show monster type before combat begins
* Reptile morphs now grant optional chance to avoid battle before it begins
* All transformation consumables except slime and demon have been standardized so that their name matches their morph. What it says is what you get. Slime are an exception because they only have one fluid: goo, not semen or milk. And demons are an exception because the demon type has unique names per sex: succubus, incubus and omnibus are all demons, and will drop "demon meat." Otherwise, the exceptions follow the standardization. No more "wolf quad," no more cow meat from minotaur, etc. What it says is what you will become. Sex handling for consumables remains the name: milk makes you female, semen makes you male, meat (usually) applies no sex change. Non-consumable-sex-based transformation may occasionally continue to behave in unintuitive ways in cases where certain monster types have no members of a certain sex. For example, there are currently no male ants, there are no female wolves, etc. Note that the standardization may also result in outcomes that favor clarity of player experience over biological accuracy. "Snake milk," for example.
* As part of the above change, several monster types have been renamed for clarity. For example, "wolf" is now "wolf-morph" to distinguish anthropomorphic wolf-men from actual wolves.
* Mining requirements have been increased
@@color:Aqua;Bug fixes:@@
* A whole massive pile of problems relating to transformations and body parts have been fixed
* Catgirl vaginal now logs virginity
* Best Guardian level is no longer applied as a spell bonus
* Fixed level 10 event pressure plate
* Best Lumberjack bonus is counted properly again
* Fixed a problem that could cause nav controls to disappear after using the magic circle to return to the tower
* Greedy now unlocks from piggybank deposits not gold drops
* Sex organ growth/shrink rates have been made slightly more sane
* Fixed some problems relating to fire breath vs magic attacks and fire vs magic resistence
\
<hr>\
\
@@color:Gold;July 5, 2023: Bugfixes for July 2 update@@
@@color:Aqua;New content:@@
* Added discord link
@@color:Aqua;Bug fixes:@@
* A problem relating to scorpion body parts has been fixed
* Added a body part checker to remove irrecoverably broken body parts (scorpion *cough cough*)
* Harpies have been removed from the spawn table (they're not ready)
* Fixed a problem that caused update to not correctly update breast equippability for some characters
* Fixed a problem that could break the desert for some players
* Sex part potions should now be able to grow entirely new parts
* Fixed graveyard reporting
* Avatars no longer appear on gravestones
* Starving to death in the tower works again
* Fixed some problems with monk dodging
* Dungeon bedrooms now prompt you to sleep again rather than auto-healing you
* Fixed a problem with slime damage
* Fixed a problem that prevented stairs from generating on level 5 for some people
<hr>\
@@color:Gold;July 3, 2023: Hotfix@@
* Fixed a problem that caused Zehtalia's artifact finder to fail for players with less than a full roster
<hr>\
@@color:Gold;July 2, 2023: Classes and deserts and new boss, oh my!@@
Note: this was a huge update, and there are probably bugs.
@@color:Aqua;New content:@@
* Tower level 6-10 have been unlocked
* New boss: Neris the Cursed
* The bridge can now be built
* New zone: southern desert
* 7 new monsters: ant, scorpion, ratkin, hellhound, hydra, troll, drider! (verify all)
* 5 new sex scenes: wolfquad blowjob, antgirl vaginal, hydra cock, ratkin defeat, hellhound defeat
* (Experimental) new equipment enchantment mechanic to prevent body parts from transforming
* New items: cactus, pussy growth/reduction potions, several new armor types
* Finley's quest for steel is now available
* 3 new help topics: Class, transformation info, and a FAQ.
* Inventory now reports fullnness/capacity
* Inactive characters now appear on the map
* Unique item artifacts now exist
* Zehtalia has been given a loot upgrade
* New class: Guardian!
* Moonstone now enchants for increased maximum mana (verify)
* New dungeon mechanics: levers and pressure plates
@@color:Aqua;Major class revision:@@
* Class mechanics have been significantly revised, and every class now receives a unique effect that improves with level. These effects stack with retirement bonuses, and the combined bonuses can be substantial. It is advised that you read over the new class info help texts. Some classes that were formerly only useful for their retiremwent bonuses may be considerably more effective than they were previously.
@@color:Aqua;Rule changes:@@
* Achievement/class unlock criteria are no longer hidden
* Naga have been moved to higher tower levels
* The retirement quest now awards 40 instead of 30 xp. Just enough to make a new character immediately eliible to complete the death quest.
* Rebalanced armor values and costs, added a few new armor types, and generally scaled armor/cost ratios so that better armor costs proportionately more and bad armor is more cost efficient.
* Bras can now be worn on boobs
* Strength is now a factor in mining success
* Prostitute class is now unlocked after only 5 flirt victories
* The player flirt system has been significantly revised
* Running from combat now consumes stamina
* Shield bash success chance improved slightly
* Tower traps should trend towards 2 per level now
* Living characters inside the tower during a reset will now be teleported to town. Dead characters will become lost.
* Bonuses from the first three gem enchanments have been massively increased
* Chest stregth requirements have been reduced
@@color:Aqua;Bug fixes:@@
* Fixed a text display error when praying at demons (verify)
* Not-yet-implemented classes and perks no longer appear during character generation (ninja, paladin, breeder, etc.)
* Reversed white/black mage unlock texts have been un-reversed
* Internal code ID for slots no longer appears on inventory screen
* Fixed some problems with sex stat tracking for bunny girls
* Selene's dialogue should remember prior converstions now
* Caves should now no longer reset with every map transition/game reload
* Fixed a Charyss dialogue option that wasn't showing
* Damage absorption now reports correctly
* starter rolls of cheese now correctly stack. Fix is not retroactive.
* Fixed another bug with transformation chest traps
* A couple bugs with soul trap mana costs have been fixed, and "real" costs are now visible in the spellbook during combat
* Probably fixed a bug that caused traps to sometimes overwrite stairs
* Fixed a graphical glitch that caused floor tiles to be drawn on top of tower fountains
* Damage absorption no longer reduces damage from magic attacks
* Improved morph description handling. You shouldn't be a monstrosity quite as often now.
* Combat loot drops should stack now (verify)
* Fire healing now works as intended
* (probably) fixed a bug that could cause trap placement to overwrite dungeon events
<hr>\
@@color:Gold;June 4, 2023: Caves, mining, mobile mode, bugfixes@@
@@color:Aqua;New content:@@
* Caves now appear in the forest
* Mining picks can mine gems in caves
* Daphne can now enchant amulets
* 2 new monsters
* 6 new sex scenes
* 6 new avatars
@@color:Aqua;Mobile/Small screen compatibility mode:@@
* Horizontal shrink for Crescentheart North
* Button press for avatar change during character generation
@@color:Aqua;Rule changes:@@
* Hunger has been renamed stamina
* Victory sex now reduces lust at the cost of stamina
* Pawn store no longer doubles the cost of items
* Pawn value of gems has been cut in half
* Firebolt damage has been nerfed
* Loss by lust now results in gold loss the same as from combat losses
* Monsters without hands (horses, spiders, etc.) no longer take gold
@@color:Aqua;Bug fixes:@@
* House inventory fix
* Players who have level 10 charcters will be retroactively awarded the Power Leveler achievement
* chest transformation trap (verify)
* Hunger/stamina descriptive text should now update instantly
* The priest class can now be unlocked when healing out of combat
* The level 7 priest achievment 'Parson' should now award correctly
* Fixed a bunch of problems with minotaurs
* Horses now drop horse parts instead of fox parts
* Unimplemented flowers should no longer generate in the forest
* Visiting forest level 11 no longer generates errors
* New characters that start at level 2 from scholar bonus now receive a stat point from the free levelup
* Stoneskin and resist potions are no longer permanent
* Rina's quest dialogue has been changed to make the Three's Company acheivement criteria more clear
* It should be a little easier to be classified as a horse or naga now.
* Cleaned up some issues with body display. More remain.
* Fixed an error that sometimes prevented human adventurers from stealing items
* Creatures without fluids no longer give bottles of error
* Several problems relating to naga/snake parts have been fixed
* Bunny victory sex events are now properly logged
* CombatUI damage reporting for weapons now no longer incorrectly include bodymorph bonuses
* Fixed the pluralization error with stackable combat drops
<hr>\
@@color:Gold;May 15, 2023: Crescentheart South, Enchanting, and Bugfixes@@
@@color:Aqua;New features and content:@@
* New zone: Crescentheart South
* New shop: lumber mill, which can bulk buy and sell wood
* New shop: Daphne's jewelry
* Game save/loading has been added to the main menu
* Enchanting is now available from Daphne
* Gems have been added to the loot tables
* New avatars, and avatars can now be changed at any time from the stats menu
* Arrow keys can now be used to move
* 1 new character map icon
* Items in inventory can now be destroyed
* You can now build a bed and upgrade storage in your house
* Change log added to menu
* You can now "visualize defeat/fantasize" about being overcome to more easily lose battles
* Pawnshop and house inventories should remain vertically stationary now
* Minotaurs now have combat decriptions
@@color:Aqua;Rule and balance changes:@@
* Meat/semen/milk can now be pawned for money
* Food/hunger values of meat/semen/milk have been adjusted
* Scholars no longer start with firebolt, and instead gain an extra +1 xp per combat victory
* Unlocking prositute now only requires 10 flirt victories
* being ressurected now restores you to full health
* Penis and breast reduction serums can now fully remove parts
* Newly constructed houses start with 5 storage instead of 10, but are now upgradable to 20
* The distribution of tree tiers has been significantly smoothed over larger number of forest zones
* Defeat by goblin now results in waking up in the church rather than being stuck at low health
* Ordinary and transformative food and drink can no longer be consumed during combat. Potions still can be.
* Items formerly lost when the player loses a limb but lacks inventory space, are now sold to Skitters at the Pawnshop
* Snake milk has been removed from the tavern
* Firebolt mana costs now scale with damage, and will cause feedback damage if they reduce you below 0 mana
* Increased gold drops in the forest by about 33%
* Finley's restocking has been made sligthly more favorable
@@color:Aqua;Bugfixes:@@
* The transformation code has been completely rewritten from scratch, theoretically solving several related bugs
* Transformative food and drink should now work correctly
* Charyss event will no longer disappear if you talk to her then initiate combat
* Charyss is now correctly treated as a demon type for fire effects
* Unimplemented spell "passwall" has been removed from tower bookcase events
* Wolf part health bonus now updates instantly
* Fixed bug that prevented new body parts from being able to equiping/unequip gear: note does not apply retraoctively, bugged parts are still bugged
* fixed penis growth serum
* Power level perk should now be awarded correctly
* Earning the black mage achievement no longer results in an error cascade, and the damage bonus now correctly only applies if you have the perk
* Mage class perk description is now phrased correctly
* slime either ( error has been fixed
* tower monsters defeated by flirt no longer bleed all over the floor
* Up highest zone is now properly reset when the tower is reset
* Peace in the Calm of the Horny can now be unlocked
* Minotaur defeat event should now be accessible
* Defeat by goblin female should no longer result in getting stuck
* Morphology reporting now includes goblins and slimes
* "giant spider" name/morph error fixed
* Selene no longer resets her quests when a new player talks to her (looks ok, but verify as stated)
* Pit trap error when returning to a previously destroyed floor fixed
* Spiders should no longer give snake meat
* Horse legs can now kick. Note that this bug occured at assignment, and the fix doesn't retroactively correct limbs from prior versions.
* Visual error preventing Best Lumberjack bonus from showing in the UI has been fixed
* With suffficient Best Scholar levels, it is now possible for new characters to start at level 2
* Fixed a bug that could cause items of same type but different material to collapse into each other\
* Stats screen no longer mixes up barbarian and paladin bonuses
* Monk and barbarian unlock requirements have been fixed
<hr>\
\
@@color:Gold;May 1, 2023: Bugfixes and rebalancing@@
* Early game difficulty reduced, new NPC dialogue added to explain certain game concepts
* Bugfixes for traps, the ressurection quest, and various other things.
* Food based transofrmations temporarily disabled. System needs an overhaul.
\
<hr>\
\
@@color:Aqua;April 30, 2023: Initial release@@@@color:Gold;Savefile update@@
<hr>\
<<if setup.TypeOf($WORLD.house) is "number">>\
@@color:Yellow;Old house data detected@@: Attempting to update
<<set _OldState to $WORLD.house>>\
<<set $WORLD.house to {state: 0, piggybank: -1, bed: 0, storage: 0}>>\
<<if _OldState is 0>>\
<<set $WORLD.house.state to 0>>\
<<elseif _OldState is 1>>\
<<set $WORLD.house.state to 1>>\
<<elseif _OldState is 2>>\
<<set $WORLD.house.state to 1>>\
<<elseif _OldState is 3>>\
<<set $WORLD.house.state to 2>>\
<<set $WORLD.house.storage to 5>>\
<<elseif _OldState is 4>>\
<<set $WORLD.house.state to 2>>\
<<set $WORLD.house.storage to 5>>\
<<elseif _OldState is 5>>\
<<set $WORLD.house.state to 2>>\
<<set $WORLD.house.storage to 5>>\
<<set $WORLD.house.piggybank to $WORLD.Piggybank>>\
<<endif>>\
<<endif>>\
\
<<if $PC[0][$PCavatar][1] > 99>>\
<<else>>\
@@color:Yellow;Old avatar data format detected@@: Applying new format and assigning an avatar...
NOTE: you can now change avatars at any time on the sidebar
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if $PC[_AllPCS][$PCicon] is "icon4">>\
<<set $PC[_AllPCS][$PCicon] to "icon8">>\
<<endif>>\
<<set _st to $PC[_AllPCS][$PCstate]>>\
<<if (_st is "alive") or (_st is "dead") or (_st is "lost") or (_st is "retired")>>\
<<if $PC[_AllPCS][$PCavatar][0] is "male">>\
<<set $PC[_AllPCS][$PCavatar] to ["Human", 103]>>\
<<else>>\
<<set $PC[_AllPCS][$PCavatar] to ["Human", 101]>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<<if setup.TypeOf($WORLD.bridge) is "number">>\
<<else>>\
@@color:Yellow;Town south@@
Building a bridge...
<<set $WORLD.bridge to 0>>\
Initializing dialogue...
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<set $PC[_AllPCS][$PCBoltmanChat] to [0,0,0,0,0]>>\
<<set $PC[_AllPCS][$PCDaphneChat] to [0,0,0,0,0,0,0,0]>>\
<</for>>\
Setting up Daphne's quests...
<<set $WORLD.DaphneQuests to [0,0,0,0,0,0,0,0,0,0]>>\
Building stores...
<<set $LumberMill to 6>>\
<<set $Daphne to 7>>\
<<set $STORE[$LumberMill] to []>>\
<<set $STORE[$Daphne] to []>>\
<<for _i to 0; _i < 10; _i++>>\
<<set $STORE[$LumberMill][_i] to [0,0,0,0,0]>>\
<<set $STORE[$Daphne][_i] to [0,0,0,0,0]>>\
<</for>>\
<<Restock "lumbermill">>\
<<Restock "daphne">>\
<<endif>>\
\
<<if setup.TypeOf($WORLD.ForestCaves) is "array">>\
<<else>>\
@@color:Yellow;Initializing forest caves...@@
<<set _throwaway to setup.InitForestCaves()>>\
<<endif>>\
\
\
\
<<set _HouseFixCount to 0>>\
<<for _HousePTR to 0; _HousePTR < 20; _HousePTR++>>\
<<if $STORE[$House][_HousePTR]>>\
<<else>>\
<<set $STORE[$House][_HousePTR] to [0,0,0,0,0]>>\
<<set _HouseFixCount to _HouseFixCount +1>>\
<<endif>>\
<</for>>\
<<if _HouseFixCount > 0>>\
@@color:Yellow;Fixing _HouseFixCount house inventory slots broken by Build 23.5.15...@@
<<endif>>\
\
<<if setup.TypeOf($WORLD.MobileMode) is "number">>\
<<else>>\
<<set $WORLD.MobileMode to 0>>\
@@color:Yellow;Adding mobile compatibility mode toggle...@@
<<endif>>\
\
<<if setup.AchievementHandler("Power Leveler", "HAS?", -1)>>\
<<else>>\
<<set _PowerLevelCheck to false>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.TypeOf($PC[_AllPCS][$PClevel]) is "number">>\
<<if $PC[_AllPCS][$PClevel] > 9>>\
<<set _PowerLevelCheck to true>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _PowerLevelCheck is true>>\
@@color:Yellow;Awarding skipped Power Level achievement...@@
<<AwardAchievement "Power Leveler">>\
<<endif>>\
<<endif>>\
<!-- desert update -->\
<<if setup.TypeOf($WORLD.HDZE) is "number">>\
<<else>>\
@@color:Yellow;Applying desert update...@@
<<set $PCdx to 58>>\
<<set $PCdy to 59>>\
<<set $PCdz to 60>>\
<<set $PChdze to 61>>\
<<set $PC[0][$PCdx] to 0>>\
<<set $PC[0][$PCdy] to 0>>\
<<set $PC[0][$PCdz] to 0>>\
<<set $PC[0][$PChdze] to 0>>\
<<set $WORLD.HDZE to 0>>\
<<set $WORLD.DesertDims to []>>\
<<set $WORLD.DesertDims[0] to 14>>\
<<set $WORLD.DesertDims[1] to 14>>\
<<set $BPstinger to 117>>\
<<set $BPpincer to 118>>\
<<endif>>\
<<set _DesertProblems to 0>>\
<<set _ListOfPTRs to [$PCdx, $PCdy, $PCdz, $PChdze]>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to 0; _i < _ListOfPTRs.length; _i++>>\
<<if setup.TypeOf($PC[_AllPCS][_ListOfPTRs[_i]]) is "number">>\
<<else>>\
<<set $PC[_AllPCS][_ListOfPTRs[_i]] to 0>>\
<<set _DesertProblems to _DesertProblems +1>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<if _DesertProblems > 0>>\
@@color:Yellow;Initializing (<<print _DesertProblems>>) missing desert update character variables...@@
<<endif>>\
\
<<if setup.TypeOf($WORLD.Circle) is "number">>\
<<else>>\
<<set $WORLD.circle to 0>>\
@@color:Yellow;You don't have a magic circle tracker? Really? Ok, creating one...@@
<<endif>>\
<<if ($WORLD.circle > 0) and ($Dungeon[5][7][1][11] neq "StairsUp")>>\
@@color:Yellow;Zehtalia defeated: UNLOCKING STAIRS ON TOWER LEVEL 5!@@
<<set $Dungeon[5][7][1][11] to "StairsUp">>\
<<endif>>\
<<if setup.TypeOf($WORLD.CharLocs) is "array">>\
<<else>>\
@@color:Yellow;Updating character interaction location data...@@
<<set $WORLD.CharLocs to []>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<set $WORLD.CharLocs[_AllPCS] to []>>\
<<PlaceCharForMultiChar _AllPCS>>\
<</for>>\
<<endif>>\
\
<<set _BoobsChanged to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to 0; _i < $PC[_AllPCS][$PCbp].length; _i++>>\
<<if $PC[_AllPCS][$PCbp][_i].type is $BPboobs>>\
<<if $PC[_AllPCS][$PCbp][_i].equippable is false>>\
<<set _BoobsChanged to _BoobsChanged +1>>\
<<set $PC[_AllPCS][$PCbp][_i].equippable to true>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<if _BoobsChanged > 0>>\
@@color:Yellow;Making _BoobsChanged pairs of boobs equippable...@@
<<endif>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if setup.TypeOf($PC[_AllPCS][$PCFlirtFromEquip]) is "number">>\
<<else>>\
<<set $PC[_AllPCS][$PCFlirtFromEquip] to 0>>\
@@color:Yellow;Adding flirt from equipment tracker...@@
<<endif>>\
<<endif>>\
<</for>>\
\
<<if $WORLD.DunDimY is 14>>\
<<else>>\
<<set $WORLD.DunDimY to 14>>\
<<ResetTower>>\
<<set _throwaway to setup.InitForestCaves()>>\
<<set _throwaway to setup.InitDesertCaves()>>\
<<for _R to 0; _R < 3; _R++>>\
<<if $PC[_R][$PCstate] is "dead">>\
<<set $PC[_R][$PCstate] to "lost">>\
<<endif>>\
<</for>>\
@@color:Orange;Old map generation detected@@: the tower has been reset
<<endif>>\
\
<<if setup.TypeOf($WORLD.orphanage) is "number">>\
<<else>>\
<<set $WORLD.orphanage to 0>>\
<<set $WORLD.children to []>>\
@@color:Yellow;Burning down an orphanage...@@
<<endif>>\
<<if setup.TypeOf($WORLD.orphans) is "array">>\
<<else>>\
<<set $WORLD.orphans to []>>\
@@color:Yellow;Murdering all the orphans...@@
<<endif>>\
<<if setup.TypeOf($WORLD.PortalTarget) is "array">>\
<<else>>\
<<set $WORLD.PortalTarget to [-1, -1, -1]>>\
@@color:Yellow;Adding portal target array...@@
<<endif>>\
<<if setup.TypeOf($WORLD.BoltmanQuests) is "array">>\
<<else>>\
<<set $WORLD.BoltmanQuests to [0,0,0,0,0]>>\
@@color:Yellow;Adding Boltman quests...@@
<<endif>>\
\
<<set _DeleteEmptyInvSlots to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to $PC[_AllPCS][$PCinven].length -1; _i > -1; _i-->>\
<<if setup.TypeOf($PC[_AllPCS][$PCinven][_i].type) is "array">>\
<<if $PC[_AllPCS][$PCinven][_i][0] is 0>>\
<<set _throwaway to $PC[_AllPCS][$PCinven].deleteAt(_i)>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<if _DeleteEmptyInvSlots > 0>>\
@@color:Yellow;Deleting <<print _DeleteEmptyInvSlots>> old-style fixed inventory slots for infinite inventory...@@
<<endif>>\
<<if setup.TypeOf($PCmaxinven) is "number">>\
<<unset $PCmaxinven>>\
@@color:Yellow;Removing obsolete max inventory pointer@@
<<endif>>\
\
<<if setup.TypeOf($WORLD.LegacyVault) is "number">>\
<<else>>\
<<set $WORLD.LegacyVault to 0>>\
<<set $WORLD.VaultGold to 0>>\
<<set $LegacyVault to 8>>\
<<set $STORE[$LegacyVault] to []>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<set $PC[_AllPCS][$PCBoltmanChat][5] to 0>>\
<<set $PC[_AllPCS][$PCDaphneChat][8] to 0>>\
<<set $PC[_AllPCS][$PCDaphneChat][9] to 0>>\
<<set $PC[_AllPCS][$PCSkittersChat][9] to 0>>\
<<endif>>\
<</for>>\
@@color:Yellow;Building Legacy Vault...@@
<<endif>>\
<<set _ApplyPartyCTR to 0>>\
<<set $PCparty to 63>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if setup.TypeOf($PC[_AllPCS][$PCparty]) is "array">>\
<<else>>\
<<set _ApplyPartyCTR to _ApplyPartyCTR +1>>\
<<set $PC[_AllPCS][$PCparty] to []>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _ApplyPartyCTR > 0>>\
@@color:Yellow;Initializing party data...@@
<<endif>>\
\
<<set _PregnancyAndBirth to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if setup.TypeOf($PC[_AllPCS][$PCsexACTS].malevirgin) is "array">>\
<<else>>\
<<set _PregnancyAndBirth to _PregnancyAndBirth +1>>\
<<set _vTemp to $PC[_AllPCS][$PCsexACTS].femalevirgin>>\
<<set $PC[_AllPCS][$PCsexACTS].malevirgin to []>>\
<<set $PC[_AllPCS][$PCsexACTS].malevirgin[0] to "Unknown">>\
<<set $PC[_AllPCS][$PCsexACTS].malevirgin[1] to _vTemp>>\
<<set $PC[_AllPCS][$PCsexACTS].fathered to 0>>\
<<set $PC[_AllPCS][$PCsexACTS].birthed to 0>>\
<<endif>>\
<<if setup.TypeOf($PC[_AllPCS][$PCsexACTS].femalevirgin) is "array">>\
<<else>>\
<<set _PregnancyAndBirth to _PregnancyAndBirth +1>>\
<<set _vTemp to $PC[_AllPCS][$PCsexACTS].femalevirgin>>\
<<set $PC[_AllPCS][$PCsexACTS].femalevirgin to ["Unknown", _vTemp]>>\
<<set $PC[_AllPCS][$PCpregnant] to [0, "", -1, -1, -1, -1]>>\
<<set $PC[_AllPCS][$PCsexACTS].fathered to 0>>\
<<set $PC[_AllPCS][$PCsexACTS].birthed to 0>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _PregnancyAndBirth > 0>>\
@@color:Yellow;Setting up new pregnancy and birth system...@@
<<endif>>\
\
<<if setup.TypeOf($WORLD.RepeatableQuests) is "array">>\
<<else>>\
<<set $WORLD.RepeatableQuests to []>>\
<<set $WORLD.RepeatableQuests[0] to { state: "avail", target: "", startat: 0, need: 0, lastupdate: 0 }>>\
<<set $WORLD.RepeatableQuests[1] to { state: "avail", target: "", startat: 0, need: 0, lastupdate: 0 }>>\
<<set $WORLD.RepeatableQuests[2] to { state: "avail", target: "", need: 0, lastupdate: 0, xpreward: 0, goldreward: 0 }>>\
<<set $WORLD.RepeatableQuests[3] to { state: "avail", target: "", need: 0, lastupdate: 0 }>>\
@@color:Yellow;Initializing repeatable guild quests...@@
<<endif>>\
\
<<set _Hairstyles to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to 0; _i < $PC[_AllPCS][$PCbp].length; _i++>>\
<<if $PC[_AllPCS][$PCbp][_i].type is $BPhead>>\
<<if setup.TypeOf($PC[_AllPCS][$PCbp][_i].style) is "string">>\
<<else>>\
<<set _Hairstyles to _Hairstyles +1>>\
<<if $PC[_AllPCS][$PCsex] is "male">>\
<<set $PC[_AllPCS][$PCbp][_i].style to either("straight","curly","frizzy","mohawk")>>\
<<elseif $PC[_AllPCS][$PCsex] is "female">>\
<<set $PC[_AllPCS][$PCbp][_i].style to either("straight","curly","braided","pigtails","ponytail")>>\
<<else>>\
<<set $PC[_AllPCS][$PCbp][_i].style to either("straight","curly","braided","frizzy","mohawk","pigtails","ponytail")>>\
<<endif>>\
<<set _NewHairLength to Math.trunc($PC[_AllPCS][$PCbp][_i].size / 5)>>\
<<if _NewHairLength > 4>>\
<<set $PC[_AllPCS][$PCbp][_i].size to 4>>\
<<elseif _NewHairLength < 0>>\
<<set $PC[_AllPCS][$PCbp][_i].size to 0>>\
<<else>>\
<<set $PC[_AllPCS][$PCbp][_i].size to _NewHairLength>>\
<<endif>>\
<<endif>>\
<<elseif $PC[_AllPCS][$PCbp][_i].type is $BPtail>>\
<<if setup.TypeOf($PC[_AllPCS][$PCbp][_i].style) is "string">>\
<<else>>\
<<set _Tailstyles to _Tailstyles +1>>\
<<set $PC[_AllPCS][$PCbp][_i].style to either("plain","braided","poofy","elegant")>>\
<<set $PC[_AllPCS][$PCbp][_i].size to random(0,4)>>\
<<set $PC[_AllPCS][$PCbp][_i].hair to either("black","red","brown","blonde","white")>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<if _Hairstyles > 0>>\
@@color:Yellow;Adding tail styles...@@
<<endif>>\
\
<<set $PCAzaxChat to 64>>\
<<if setup.TypeOf($PC[0][$PCAzaxChat]) is "array">><<else>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<set $PC[_AllPCS][$PCAzaxChat] to [0,0,0,0,0,0,0,0,0,0,0,0]>>\
<</for>>\
@@color:Yellow;Setting up dialogue for Azax...@@
<<endif>>\
\
<<set _PartyUpdateREVAMP to false>>\
<<set _NeedSmithArmor to false>>\
<<if setup.TypeOf($SmithArmor) is "number">>\
<<if setup.TypeOf($STORE[$SmithArmor]) is "array">>\
<<else>>\
<<set _NeedSmithArmor to true>>\
<<set _PartyUpdateREVAMP to true>>\
<<endif>>\
<<else>>\
<<set _NeedSmithArmor to true>>\
<<endif>>\
<<if _NeedSmithArmor is true>>\
@@color:Yellow;Expanding blacksmith...@@
<<set $SmithArmor to 9>>\
<<set $STORE[$SmithArmor] to []>>\
<<for _i to 0; _i < 10; _i++>>\
<<set $STORE[$SmithArmor][_i] to [0,0,0,0,0]>>\
<</for>>\
<<Restock "smith">>\
<<endif>>\
<<if _PartyUpdateREVAMP is true>>\
<<set _ItemConversionCount to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to $PC[_AllPCS][$PCinven].length -1; _i > -1; _i-->>\
<<if $PC[_AllPCS][$PCinven][_i].length is 4>>\
<<set $PC[_AllPCS][$PCinven][_i][4] to 0>>\
<<set _ItemConversionCount to _ItemConversionCount +1>>\
<<endif>>\
<!-- convert enchanted jewelry to new system -->\
<<if ($PC[_AllPCS][$PCinven][_i][0] is 500) or ($PC[_AllPCS][$PCinven][_i][0] is 501)>>\
<<if $PC[_AllPCS][$PCinven][_i][1] is 550>>\
<<set $PC[_AllPCS][$PCinven][_i][3] to $PC[_AllPCS][$PCinven][_i][3] * 5>>\
<<set $PC[_AllPCS][$PCinven][_i][4] to $PC[_AllPCS][$PCinven][_i][1]>>\
<<set $PC[_AllPCS][$PCinven][_i][1] to 0>>\
<<elseif $PC[_AllPCS][$PCinven][_i][1] is 551>>\
<<set $PC[_AllPCS][$PCinven][_i][3] to $PC[_AllPCS][$PCinven][_i][3] * 4>>\
<<set $PC[_AllPCS][$PCinven][_i][4] to $PC[_AllPCS][$PCinven][_i][1]>>\
<<set $PC[_AllPCS][$PCinven][_i][1] to 0>>\
<<elseif $PC[_AllPCS][$PCinven][_i][1] is 552>>\
<<set $PC[_AllPCS][$PCinven][_i][3] to $PC[_AllPCS][$PCinven][_i][3] * 3>>\
<<set $PC[_AllPCS][$PCinven][_i][4] to $PC[_AllPCS][$PCinven][_i][1]>>\
<<set $PC[_AllPCS][$PCinven][_i][1] to 0>>\
<<elseif $PC[_AllPCS][$PCinven][_i][1] is 553>>\
<<set $PC[_AllPCS][$PCinven][_i][3] to $PC[_AllPCS][$PCinven][_i][3]>>\
<<set $PC[_AllPCS][$PCinven][_i][4] to $PC[_AllPCS][$PCinven][_i][1]>>\
<<set $PC[_AllPCS][$PCinven][_i][1] to 0>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to 0; _i < $PC[_AllPCS][$PCbp].length; _i++>>\
<<if $PC[_AllPCS][$PCbp][_i].equippable is true>>\
<<if ($PC[_AllPCS][$PCbp][_i].equip[0] is 500) or ($PC[_AllPCS][$PCbp][_i].equip[0] is 501)>>\
<<if $PC[_AllPCS][$PCbp][_i].equip[1] is 550>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[3] to $PC[_AllPCS][$PCbp][_i].equip[3] * 5>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[4] to $PC[_AllPCS][$PCbp][_i].equip[1]>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[1] to 0>>\
<<elseif $PC[_AllPCS][$PCbp][_i].equip[1] is 551>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[3] to $PC[_AllPCS][$PCbp][_i].equip[3] * 4>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[4] to $PC[_AllPCS][$PCbp][_i].equip[1]>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[1] to 0>>\
<<elseif $PC[_AllPCS][$PCbp][_i].equip[1] is 552>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[3] to $PC[_AllPCS][$PCbp][_i].equip[3] * 3>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[4] to $PC[_AllPCS][$PCbp][_i].equip[1]>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[1] to 0>>\
<<elseif $PC[_AllPCS][$PCbp][_i].equip[1] is 553>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[3] to $PC[_AllPCS][$PCbp][_i].equip[3]>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[4] to $PC[_AllPCS][$PCbp][_i].equip[1]>>\
<<set $PC[_AllPCS][$PCbp][_i].equip[1] to 0>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<for _HousePTR to 0; _HousePTR < $STORE[$House].length; _HousePTR++>>\
<<if $STORE[$House][_HousePTR].length is 4>>\
<<set $STORE[$House][_HousePTR][4] to 0>>\
<<set _ItemConversionCount to _ItemConversionCount +1>>\
<!-- convert enchanted jewelry to new system -->\
<<if ($STORE[$House][_HousePTR][0] is 500) or ($STORE[$House][_HousePTR][0] is 501)>>\
<<if $STORE[$House][_HousePTR][1] is 550>>\
<<set $STORE[$House][_HousePTR][3] to $STORE[$House][_HousePTR][3] * 5>>\
<<set $STORE[$House][_HousePTR][4] to $STORE[$House][_HousePTR][1]>>\
<<set $STORE[$House][_HousePTR][1] to 0>>\
<<elseif $STORE[$House][_HousePTR][1] is 551>>\
<<set $STORE[$House][_HousePTR][3] to $STORE[$House][_HousePTR][3] * 4>>\
<<set $STORE[$House][_HousePTR][4] to $STORE[$House][_HousePTR][1]>>\
<<set $STORE[$House][_HousePTR][1] to 0>>\
<<elseif $STORE[$House][_HousePTR][1] is 552>>\
<<set $STORE[$House][_HousePTR][3] to $STORE[$House][_HousePTR][3] * 3>>\
<<set $STORE[$House][_HousePTR][4] to $STORE[$House][_HousePTR][1]>>\
<<set $STORE[$House][_HousePTR][1] to 0>>\
<<elseif $STORE[$House][_HousePTR][1] is 553>>\
<<set $STORE[$House][_HousePTR][3] to $STORE[$House][_HousePTR][3]>>\
<<set $STORE[$House][_HousePTR][4] to $STORE[$House][_HousePTR][1]>>\
<<set $STORE[$House][_HousePTR][1] to 0>>\
<<endif>>\
<<endif>>\
<<endif>>\
<</for>>\
<<Restock "all">>\
<<set $STORE[$Pawn] to []>>\
<<for _i to 0; _i < 10; _i++>>\
<<set $STORE[$Pawn][_i] to [0,0,0,0,0]>>\
<</for>>\
@@color:Orange;December 2023 Revamp: converting item formats for <<print _ItemConversionCount>> items!@@
<<endif>>\
\
\
\
<!-- Master add dialogue -->\
<<set _DaphneConvs to 11>>\
<<set _DaphneMissing to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<for _DaphneLoop to 0; _DaphneLoop gte _DaphneConvs; _AllPCS++>>\
<<if setup.TypeOf($PC[_AllPCS][$PCDaphneChat][__DaphneConvs]) is "number">>\
<<else>>\
<<set $PC[_AllPCS][$PCDaphneChat][__DaphneConvs] to 0>>\
<<set _DaphneMissing to _DaphneMissing +1>>\
<<endif>>\
<</for>>\
<</for>>\
<<if _DaphneMissing > 0>>\
@@color:Yellow;Adding _DaphneMissing new Daphne dialogues...@@
<<endif>>\
\
<<set _PartsChanged to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to 0; _i < $PC[_AllPCS][$PCbp].length; _i++>>\
<<if $PC[_AllPCS][$PCbp][_i].type is $BPboobs>>\
<<if $PC[_AllPCS][$PCbp][_i].size > 80>>\
<<set _PartsChanged to _PartsChanged +1>>\
<<set $PC[_AllPCS][$PCbp][_i].size to Math.trunc($PC[_AllPCS][$PCbp][_i].size / 10)>>\
<<endif>>\
<<endif>>\
<<if $PC[_AllPCS][$PCbp][_i].type is $BPpussy>>\
<<if $PC[_AllPCS][$PCbp][_i].size > 12>>\
<<set _PartsChanged to _PartsChanged +1>>\
<<set $PC[_AllPCS][$PCbp][_i].size to 12>>\
<<endif>>\
<<endif>>\
<<if $PC[_AllPCS][$PCbp][_i].type is $BPpenis>>\
<<if $PC[_AllPCS][$PCbp][_i].size < 3>>\
<<set _PartsChanged to _PartsChanged +1>>\
<<set $PC[_AllPCS][$PCbp][_i].size to 3>>\
<<endif>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<if _PartsChanged > 0>>\
@@color:Yellow;Adjusting sizes of <<print _PartsChanged>> sex organs...@@
<<endif>>\
\
<<set _RQs to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if setup.TypeOf($PC[_AllPCS][$PCmisc].repeatquests) is "number">>\
<<else>>\
<<set _RQs to _RQs +1>>\
<<set $PC[_AllPCS][$PCmisc].repeatquests to 0>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _RQs > 0>>\
@@color:Yellow;Adding repeatable quest tracker...@@
<<endif>>\
\
<<if setup.TypeOf($WORLD.VersionCounter) is "number">>\
<<else>>\
<<set $WORLD.VersionCounter to 0>>\
@@color:Yellow;Adding integer version counter...@@
<<endif>>\
<<if $WORLD.VersionCounter is 0>>\
<<set _IconCtr to 0>>\
<<GetHairColors>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if setup.TypeOf($PC[_AllPCS][$PCicon]) is "array">>\
<<else>>\
<<set _MaleOrFemale to "HumanF">>\
<<set _IconCtr to 1>>\
<<if $PC[_AllPCS][$PCavatar][1] is 100>>\
<<set $PC[_AllPCS][$PCicon] to [ [1,3], [3,5], [5,8], 0, _HairRed]>>\
<<set _MaleOrFemale to "HumanM">>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 101>>\
<<set $PC[_AllPCS][$PCicon] to [ [1,4], [2,0], [5,0], 0, ""]>>\
<<set _MaleOrFemale to "HumanM">>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 102>>\
<<set $PC[_AllPCS][$PCicon] to [ [1,8], [3,5], [4,4], 0, _HairBlack]>>\
<<set _MaleOrFemale to "HumanM">>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 103>>\
<<set $PC[_AllPCS][$PCicon] to [ [1,1], [2,1], [5,3], 0, _HairBrunette]>>\
<<set _MaleOrFemale to "HumanM">>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 104>>\
<<set $PC[_AllPCS][$PCicon] to [ [0,1], [2,6], [5,1], 0, _HairPurple]>>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 105>>\
<<set $PC[_AllPCS][$PCicon] to [ [0,0], [2,4], [4,5], 0, _HairGreen]>>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 106>>\
<<set $PC[_AllPCS][$PCicon] to [ [0,1], [2,1], [5,0], 0, _HairBrown]>>\
<<elseif $PC[_AllPCS][$PCavatar][1] is 107>>\
<<set $PC[_AllPCS][$PCicon] to [ [0,4], [3,7], [4,5], 0, _HairBlack]>>\
<<else>>\
@@color:Orange;Warning:@@ Avatar/icon data is not in expceted format: (<<print $PC[_AllPCS][$PCavatar]>>) (<<print $PC[_AllPCS][$PCicon]>>) (Old save?) Resetting to safe values.
<<set $PC[_AllPCS][$PCicon] to [ [1,3], [3,5], [5,8], 0, _HairRed]>>\
<<set _MaleOrFemale to "HumanM">>\
<<endif>>\
\
<<set $PC[_AllPCS][$PCavatar][0] to _MaleOrFemale>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _IconCtr > 0>>\
@@color:Yellow;Converting avatars...@@
<<endif>>\
<<endif>>\
\
<<if $WORLD.VersionCounter is 0>>\
<<set _ItemErrorCount to setup.CallFunctionOnAllItemsThatExist(setup.FixDec2023ItemErrors)>>\
<<if _ItemErrorCount > 0>>\
@@color:Red;Warning@@: fixed <<print _ItemErrorCount>> item errors caused by the 2023-Dec-1 update. Many of these errors were harmless, but if you abused the "immutabilitity +700 stat" bug, this update @@color:Red;WILL STRIP THOSE ITEMS@@ of their dual-enchantment. Items store one value for type enchantment, and one for the amount of its bonus. Immutability (which was marked at Daphne's as an experimental feature) is the only enchanment that has no bonus, and these fields got mixed up when tower drop enchantments were added to the game. When immutability was added to already-enchanted items, the data field tracking "amount of bonus" was overwritten with the enchantment ID for immutability, which was 700, giving you +700 to whatever stat, instead of setting the "which enchantment" field to 700 like it was supposed to. So the data that tracked the original value is simply gone. Sorry, but when you got +700 armor or whatever from immutability you had to have known it was a bug. If you want to keep your bugged inventory, you'll need to backup your save and use it only with ToT version 23-12-1. This update will correct the bug.
<<else>>\
@@color:LightGreen;Version 2023 Dec 1 item error check looks ok!@@
<<endif>>\
<<endif>>\
\
<<set _HornyFix to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<!-- can remove this probably come next update -->\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if $PC[_AllPCS][$PChornymax] is ($PC[_AllPCS][$PCwil] * 10)>>\
<<else>>\
<<set $PC[_AllPCS][$PChornymax] to ($PC[_AllPCS][$PCwil] * 10)>>\
<<set _HornyFix to _HornyFix +1>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _HornyFix > 0>>\
@@color:Yellow;Fixing incorrect arousal caps...@@
<<endif>>\
\
\
\
<!-- new changes go here -->
\
\
\
\
\
\
\
<!-- master add achievements -->\
<<set _HighestAchievementPTR to 78>>\
<<set _AchsAdded to 0>>\
<<for _ACH to 0; _ACH <= _HighestAchievementPTR; _ACH++>>\
<<if setup.TypeOf($Achievements[_ACH]) is "number">>\
<<else>>\
<<set $Achievements[_ACH] to 0>>\
<<set _AchsAdded to _AchsAdded +1>>\
<<endif>>\
<</for>>\
<<if _AchsAdded > 0>>\
@@color:Yellow;Adding <<print _AchsAdded>> achievements
<<endif>>\
\
<!-- Update kill pointers -->\
<<set _CurrentHighestTarget to 29>>\
<<for _i to 0; _i < _CurrentHighestTarget +1; _i++>>\
<<if setup.TypeOf($PC[0][$PCkills][_i]) is "number">>\
<<else>>\
<<set _PTRfor to setup.KillPTRToMonName(_i)>>\
@@color:Yellow;Adding kill counters for monster type: '<<print _PTRfor>>'...@@
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if $PC[_AllPCS][$PCstate] is "alive">>\
<<set $PC[_AllPCS][$PCkills][_i] to 0>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
\
<!-- global corrections -->\
@@color:Yellow;Applying general fixes...@@
<<set $BPstinger to 117>>\
<<set $BPpincer to 118>>\
<<set _InvalidBPcounter to 0>>\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<for _i to $PC[_AllPCS][$PCbp].length -1; _i > -1; _i-->>\
<<if setup.TypeOf($PC[_AllPCS][$PCbp][_i].type) is "number">>\
<<else>>\
<<set _InvalidBPcounter to _InvalidBPcounter +1>>\
<<set _throwaway to $PC[_AllPCS][$PCbp].deleteAt(_i)>>\
<<endif>>\
<</for>>\
<<endif>>\
<</for>>\
<<if _InvalidBPcounter > 0>>\
@@color:Orange;WARNING:@@ Removing <<print _InvalidBPcounter>> broken body parts...
<<if _InvalidBPcounter > 3>>\
(_InvalidBPcounter) is a suspiciously high number. Please back up your save before you accept this.
<<endif>>\
<<endif>>\
<<set $LegacyVault to 8>>\
<<set $BPhead to 100>>\
<<set $BPneck to 101>>\
<<set $BPback to 102>>\
<<set $BPchest to 103>>\
<<set $BPwield to 104>>\
<<set $BPhands to 105>>\
<<set $BPring to 106>>\
<<set $BPwaist to 107>>\
<<set $BPlegs to 108>>\
<<set $BPfeet to 109>>\
<<set $BPtail to 110>>\
<<set $BPhorns to 111>>\
<<set $BPwings to 112>>\
<<set $BPpenis to 113>>\
<<set $BPboobs to 114>>\
<<set $BPpussy to 115>>\
<<set $BPtentacle to 116>>\
<<set $BPstinger to 117>>\
<<set $BPpincer to 118>>\
\
<<for _AllPCS to 0; _AllPCS < 3; _AllPCS++>>\
<<if setup.CharacterExists(_AllPCS) is true>>\
<<if setup.TypeOf($PC[_AllPCS][$PCspellbook].dart) is "number">>\
<<else>>\
<<set $PC[_AllPCS][$PCspellbook].dart to 0>>\
@@color:Yellow;Adding Dart to spellbook...@@
<<endif>>\
<<endif>>\
<</for>>\
\
\
\
@@color:Yellow;Running Recalc...@@
<<Recalc>>\
\
@@color:Yellow;Updating version number@@
<<if $WORLD.GameVersion is "PLAYTEST">>\
@@color:Orange;Retaining playtest marker on save...@@
<<else>>\
<<set $WORLD.GameVersion to "24.3.18">>\
<<set $WORLD.VersionCounter to 2>>\
<<endif>>\
\
<hr>\
@@color:Gold;Results@@
If you didn't get any bright red errors, the update probably worked fine. If you do run into problems, try resetting your world state from the menu.
\
<hr>\
@@color:Gold;Options@@
<<link "Save changes and continue" "Preamble">>
<<AutoSaveLoad "set">>
<</link>>
<<link "Do NOT save changes" "Preamble">>
<</link>><span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>\
\
<hr>\
\
<<button "Auto-Select">><</button>>: <span id="AutoAvatar">Disabled</span>
<table>\
<tr>\
<td style="vertical-align: top;border: 20px solid #111111;">\
\
<div class="button-group">\
<<button "[Human]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Human">><</replace>>\
<</button>>
<<button "[Animal]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Animal">><</replace>>\
<</button>>
<<button "[Anthro]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Anthro">><</replace>>\
<</button>>
<<button "[Bunny]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Bunny">><</replace>>\
<</button>>
<<button "[Cat]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Cat">><</replace>>\
<</button>>
<<button "[Demon]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Demon">><</replace>>\
<</button>>
<<button "[Fox]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Fox">><</replace>>\
<</button>>
<<button "[Goblin]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Goblin">><</replace>>\
<</button>>
<<button "[Hellhound]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Hellhound">><</replace>>\
<</button>>
<<button "[Insect]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Insect">><</replace>>\
<</button>>
<<button "[Naga]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Naga">><</replace>>\
<</button>>
<<button "[Minotaur]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Minotaur">><</replace>>\
<</button>>
<<button "[Monster]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Monster">><</replace>>\
<</button>>
<<button "[Slime]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Slime">><</replace>>\
<</button>>
<<button "[Wolf]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Wolf">><</replace>>\
<</button>>\
</div>\
\
</td>\
<td style="vertical-align: top;border: 8px solid #111111;">\
<span id="AvatarChooserPortal"><<ShowAvatar "Human">></span>\
\
</td>\
</tr>\
</table>\
<hr>
<<timed 200ms>>\
<<audio "menu_bgm" stop>>\
<</timed>>\
<<PlayBGM "town">>\
\
<<set _throwaway to setup.InitDesertCaves()>>\
\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
\
<<set $PC[$CC][$PCz] to 0>>\
<<set $PC[$CC][$PClocation] to "town">>\
\
<<MapCrescentheartSouth>>\
<hr>\
\
<<set $WORLD.datapasser to "">>\
Crescentheart's southern half is skirted by the Aubergis river, the last source of fresh water for many miles. On the far side you can see a rocky badlands leading to a flat, dry desert dotted with salt flats.
<hr>\
\
<<if $PC[$CC][$PChpcur] < 1>>\
<<if $PC[$CC][$PChunger] < 1>>\
<<set $WORLD.diedby to "Starved to death">>\
@@color:Red;You have starved to death!@@
It's unfortunate, but you do need to eat. If food is too expensive, you could try carrying around a butcher knife to carve up some of those monsters you keep fighting. Of course, that probably has side effects.\
<<AwardAchievement "Starve to death">>\
<<else>>\
<<set $WORLD.diedby to "Ran out of health in town, but not by starvation?">>\
@@color:Red;You have died!@@
@@color:Yellow;Debug: how did this happen?@@
<<endif>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "Death">>
<</link>>\
</span>
<<else>>\
@@color:Gold;Zone Navigation@@ - click on the map to visit locations
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) North, to Crescentheart North" "TownSquare">>
<<AdvanceTime 10>>
<</link>>\
</span></span>
<<if $WORLD.bridge is 1>>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) South, into the desert" "Desert">>
<<set $PC[$CC][$PCdz] to 1>>
<<set $PC[$CC][$PCdx] to Math.trunc($WORLD.ForestDims[0] / 2)>>
<<set $PC[$CC][$PCdy] to 0>>
<<set $WORLD.datapasser to "reset desert">>
<<AdvanceTime 30>>
<</link>>\
</span></span>
<<else>>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) Damaged bridge">>
<<if setup.GetEffect(" walk") > 0>>\
<<script>>Engine.play("Desert");<</script>>\
<<else>>\
<<script>>Engine.play("Bridge");<</script>>\
<<endif>>\
<</link>>\
</span>
<<endif>>\
<hr>
@@color:Gold;Options@@
<<link "Save and exit to character menu" "Preamble">>
<<AutoSaveLoad "set">>
<</link>>\
<<endif>>\
<<if $DebugMode is true>>\
Bridge state: $WORLD.bridge
Orphanage state: $WORLD.orphanage
<<endif>>\
\
<<BirthCheck>>\
<<set _ChatAvailable to false>>\
<<for _i to 0; _i < $PC[$CC][$PCBoltmanChat].length; _i++>>\
<<if $PC[$CC][$PCBoltmanChat][_i] is 1>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<</for>>\
<<if $PC[$CC][$PCBoltmanChat][0] is 0>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<<if $WORLD.LegacyVault is 1>>\
<<if $PC[$CC][$PCBoltmanChat][5] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][5] to 1>>\
<<endif>>\
<<endif>>\
\
<<set _AskAboutWood to false>>\
<<for _i to 0; _i < $WORLD.BoltmanQuests.length; _i++>>\
<<if $WORLD.BoltmanQuests[_i] is 0>>\
<<set _AskAboutWood to true>>\
<<endif>>\
<</for>>\
<<if _AskAboutWood is true>>\
<<set $PC[$CC][$PCBoltmanChat][4] to 1>><!-- Why can't you sell? -->\
<<endif>>\
\
<<if $BoltmanTalk is "yes">>\
<<SimplePic "boltman.jpg">>\
@@color:LightGreen;Lumber mill@@
<hr>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
\
<<if _CurrentQuestion is 0>>\
<<if $PC[$CC][$PCBoltmanChat][0] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][0] to 2>>\
The shopkeeper here is a plain-looking man with a brown beard. You glance over him looking for transformations, but nothing particularly stands out.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hi," you greet him. "I'm $PC[$CC][$PCname]."
@@color:LightGreen;Shopkeeper@@: "Boltman," he replies. "What can I do for you?"
<!-- Unlocks -->\
<<if $PC[$CC][$PCBoltmanChat][1] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][1] to 1>><!-- Ask about the lumber trade-->\
<<endif>>\
<<if $PC[$CC][$PCBoltmanChat][2] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][2] to 1>><!-- Ask about the bridge -->\
<<endif>>\
<<else>>\
@@color:LightGreen;Boltman@@: "<<print either("Good to see you","Hello again")>>, <<print $PC[$CC][$PCname]>>. What can I get for you?"
<<endif>>\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCBoltmanChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can you tell me about the lumber trade?"
@@color:LightGreen;Boltman@@: "What do you mean? My business in general, or the product itself?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Both?"
@@color:LightGreen;Boltman@@: "Not much to tell," he shrugs. "There are four basic types of wood in these parts. Hardwood, steelwood, faerie wood, and anything that isn't one of those three. Hardwood and steelwood are the best building materials for general construction. Faerie wood's for high-end fancy stuff and magic. And the others, pine and cedar mostly...those are pretty soft, so they're mostly used for small crafts and interior decoration. And they'll work for plugging up holes in a pinch, but you probably wouldn't want to build a foundation out of them. Too soft."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Which do you sell?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "All four types. And I buy in bulk too, so if you fancy yourself a forester, feel free to cut 'em down and bring to me. Saves me the trouble of logging myself. I sell hatchet's if you need one."
<!-- unlocks -->\
<<if $PC[$CC][$PCBoltmanChat][3] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][3] to 1>><!-- Ask about hatchet quality -->\
<<endif>>\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCBoltmanChat][2] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any idea what happened to the bridge out front?"
He glances around before answering you.
@@color:LightGreen;Boltman@@: "Had to demolish it," he explains with a whisper. "Bunch of ant-men from the desert down south tried to come in and bust up the town. Fortunately I was here to save the day."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What happened to the bodies?"
@@color:LightGreen;Boltman@@: "Uhh...I cut them up and threw them in the river?" he asks as if thinking, then nods as if suddenly sure. "Yep, that's what I did. Didn't want them stinking up the place, so they're all gone now. Sorry."
<<elseif _CurrentQuestion is 3>>\
<<set $PC[$CC][$PCBoltmanChat][3] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Does hatchet quality make a difference?"
@@color:LightGreen;Boltman@@: "Sure does," he nods. "Softer metals are easier to shape, but a blade needs to be at least as hard as the wood it's cutting if you're to fell a tree with it. Copper will barely even cut some of the plain wood trees out there. Brass is a bit better, but for hardwood you'll need at least iron, to say nothing of steel or faerie wood. Of course, an experienced lumberjack can usually get more use out of his tool than your average Joe. All the same, I recommend buying the best tool you can afford. It will pay off in the long run."
<!-- unlocks -->\
<<if $PC[$CC][$PCBoltmanChat][8] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][8] to 1>>
<<endif>>\
<<elseif _CurrentQuestion is 4>>\
<<set $PC[$CC][$PCBoltmanChat][4] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Why isn't your lumber for sale?"
@@color:LightGreen;Boltman@@: "Guild policy," he shrugs. "I can't sell you any type of wood you haven't managed to personally cut."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "So what exactly do I have to do?"
@@color:LightGreen;Boltman@@: "Cut lumber and bring it back to me to sell it," he explains. "Sell plain wood, and I'll be allowed to sell it to you. Want to buy hardwood? Sell me some first. Quantity doesn't matter. Even just one will do."
<<elseif _CurrentQuestion is 5>>\
<<set $PC[$CC][$PCBoltmanChat][5] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you know anything about the void rift in that building just west of here?"
@@color:LightGreen;Boltman@@: "The Legacy Vault? Sure, it's broken now but I get asked to fix it all the time. Some sort of magic doohkickey adventurers use for something or another."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Can you fix it?"
@@color:LightGreen;Boltman@@: "No, I'm a lumberjack not a wizard. I've looked at it a couple times though, and its core is a great big box made of faerie wood that's all smashed to bits. If I was a betting man, I'd wager that bit needs to be replaced.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How much faeriewood would it take?"
@@color:LightGreen;Boltman@@: "About 30 planks worth is my guess."
<<elseif _CurrentQuestion is 6>>\
<<elseif _CurrentQuestion is 7>>\
<<elseif _CurrentQuestion is 8>>\
<<else>>\
Error: unrecognized question: _CurrentQuestion
<<endif>>\
<hr>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<!-- questions unlocked by external events go here-->\
\
<<for _i to 0; _i < $PC[$CC][$PCBoltmanChat].length; _i++>>\
<<if $PC[$CC][$PCBoltmanChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "Introduce yourself">>\
<<set _QuestionPool[1] to "Ask about the shop">>\
<<set _QuestionPool[2] to "Ask about the broken bridge">>\
<<set _QuestionPool[3] to "Ask about hatchets">>\
<<set _QuestionPool[4] to "Why isn't your lumber for sale?">>\
<<set _QuestionPool[5] to "Ask about the void rift">>\
<<set _QuestionPool[6] to "q6">>\
<<set _QuestionPool[7] to "q7">>\
\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm done talking for now" "StoreLumber">>
<<set $WORLD.gstore to 2>>\
<<AdvanceTime 5>>
<<unset $BoltmanTalk>>\
<</link>>\
</span>
\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix"]>>\
<<set _KeyChars to ["1","2","3","4","5","6"]>>\
\
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + ") " + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "StoreLumber">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<else>>\
<<SimplePic "boltman.jpg">>\
@@color:LightGreen;Lumber mill@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSouth">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<if _ChatAvailable is false>>\
c) No chats available
<<elseif $PC[$CC][$PCBoltmanChat][1] is 2>>\
<span id="KeypC">\
<<link "c) Chat with Boltman" "StoreLumber">>
<<set $BoltmanTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<else>>\
<span id="KeypC">\
<<link "c) Chat with the shopkeeper" "StoreLumber">>
<<set $BoltmanTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<endif>>\
<hr>\
<<LumberMill>>
<<endif>>\
<<if $DebugMode is true>>\
<hr>\
Boltman: <<print $PC[$CC][$PCBoltmanChat]>>
<<endif>>\
<<set _ChatAvailable to false>>\
<<for _i to 0; _i < $PC[$CC][$PCDaphneChat].length; _i++>>\
<<if $PC[$CC][$PCDaphneChat][_i] is 1>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<</for>>\
<<if $PC[$CC][$PCDaphneChat][0] is 0>>\
<<set _ChatAvailable to true>>\
<<endif>>\
<<if $WORLD.LegacyVault is 1>>\
<<if $PC[$CC][$PCDaphneChat][9] is 0>>\
<<set $PC[$CC][$PCDaphneChat][9] to 1>>\
<<endif>>\
<<endif>>\
\
<<if $DaphneTalk is "enchant">>\
<<SimplePic "daphne.png">>\
@@color:LightGreen;Daphne's Fine Jewelry@@
<hr>\
@@color:LightGreen;Daphne@@: "What can I enchant for you, <<print either("dear","darling")>>?"
<hr>\
<<set $RingOrAmulet to 500>>\
<<button "Enchant Type">>\
<<if $RingOrAmulet is 500>>\
<<set $RingOrAmulet to 501>>
<<replace "#RingOrAmuletText">>Amulet<</replace>>
<<else>>\
<<set $RingOrAmulet to 500>>
<<replace "#RingOrAmuletText">>Ring<</replace>>
<<endif>>\
<</button>>: <span id="RingOrAmuletText">Ring</span>\
<hr>\
<<set $DaphneTalk to "ring">>\
<span id="DaphneEnchantPortal"></span>\
<<set _AvailableGems to []>>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<if (_item[0] > 549) and (_item[0] < 560)>>\
<<if (_item[3] > 0) and (_item[3] < 21)>>\
<<set _AvailableGems[_AvailableGems.length] to _i>>\
<<endif>>\
<<endif>>\
<</for>>\
\
<<for _i to 0; _i < _AvailableGems.length; _i++>>\
<<set _ItemPTR to _AvailableGems[_i]>>\
<<set _item to $PC[$CC][$PCinven][_ItemPTR]>>\
<<DescribeItem _item>>\
<<set _ItemName to $ItemPoke.fullname>>\
<<set _GemType to $PC[$CC][$PCinven][_ItemPTR][0]>>\
<<if _GemType is 550>><!-- quartz: health 1:5 -->\
<<set _Enchant to "of health">>\
<<set _Multi to 5>>\
<<elseif _GemType is 551>><!-- garnet defense 1:4 -->\
<<set _Enchant to "of defense">>\
<<set _Multi to 4>>\
<<elseif _GemType is 552>><!-- citrine tohit 1:3 -->\
<<set _Enchant to "of accuracy">>\
<<set _Multi to 3>>\
<<elseif _GemType is 553>><!-- moonstrate mp 1:1 -->\
<<set _Enchant to "of mana">>\
<<set _Multi to 1>>\
<<elseif _GemType is 554>>\
<<set _Enchant to "">>\
<<set _Multi to 1>>\
<<elseif _GemType is 555>>\
<<set _Enchant to "">>\
<<set _Multi to 1>>\
<<else>>\
<<set _Enchant to "error: " + _GemType>>\
<<set _Multi to 1>>\
<<endif>>\
<<set _MultiplyBy to ($PC[$CC][$PCinven][_ItemPTR][3] ** 2)>>\
<<set _Cost to 100 * (_GemType - 549) * _MultiplyBy>>\
<<set _ButtonText to "[Enchant for " + _Cost + "]">>\
<<if $PC[$CC][$PCcoins] gte _Cost>>\
<<capture _ItemPTR, _Cost>>\
<<button _ButtonText "StoreDaphne">>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _Cost>>
<<ShowCoins>>
<<set _OldGem to $PC[$CC][$PCinven][_ItemPTR]>>
<<set _AAA to $RingOrAmulet>>\
<<set _BBB to 0>>\
<<set _CCC to 0>>\
<<set _DDD to _OldGem[3] * _Multi>>\
<<set _EEE to _GemType>>\
<<set _QuestUnlock to _BBB -550>>
<<set $WORLD.DaphneQuests[_QuestUnlock] to 2>>
<<set _NewJewelry to [_AAA, _BBB, _CCC, _DDD, _EEE]>>\
<<set $PC[$CC][$PCinven][_ItemPTR] to _NewJewelry>>\
<<unset $DaphneTalk>>\
<</button>> <<print _ItemName>>: <<print _Enchant>>
<</capture>>\
<<else>>\
<span class="grayb"><<button _ButtonText>><</button>></span> <<print _ItemName>>: <<print _Enchant>>
<<endif>>\
<</for>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Cancel" "StoreDaphne">>
<<set $WORLD.gstore to 2>>\
<<AdvanceTime 5>>
<<unset $DaphneTalk>>
<<unset $RingOrAmulet>>
<<set $PC[$CC][$PCDaphneChat][7] to 1>><!-- perpetual gem correlation reminder -->\
<</link>>\
</span>
\
\
\
<<elseif $DaphneTalk is "yes">>\
<<SimplePic "daphne.png">>\
@@color:LightGreen;Daphne's Fine Jewelry@@
<hr>\
<<set _CurrentQuestion to $WORLD.datapasser>>\
\
<<if _CurrentQuestion is 0>>\
<<if $PC[$CC][$PCDaphneChat][0] is 0>>\
<<set $PC[$CC][$PCDaphneChat][0] to 2>>\
The prioprieter is a tall slime-girl sporting a pair of large breasts and four very phallic tentacles sprouting from her back. As you examine her, she watches you with half-lidded eyes.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hello," you introduce yourself. "I'm $PC[$CC][$PCname]."
@@color:LightGreen;Shopkeeper@@: "Welcome to Daphne's Fine Jewelry," the woman purrs. "Are you here for business or pleasure?"
<!-- Unlocks -->\
<<if $PC[$CC][$PCDaphneChat][1] is 0>>\
<<set $PC[$CC][$PCDaphneChat][1] to 1>><!-- Business-->\
<<endif>>\
<<if $PC[$CC][$PCDaphneChat][2] is 0>>\
<<set $PC[$CC][$PCDaphneChat][2] to 1>><!-- Pleasure -->\
<<endif>>\
<<else>>\
@@color:LightGreen;Daphne@@: "<<print either("Hello, darling.","Welcome back, darling.")>> <<print either("What can I do for you?","Are you here to buy, or just to admire what's on display?")>>
<<endif>>\
<<elseif _CurrentQuestion is 1>>\
<<set $PC[$CC][$PCDaphneChat][1] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'm here for business," you nod at some of the stonesunder glass. "Tell me about your wares. You sell gems?"
@@color:LightGreen;Daphne@@: "Oh, you poor dear," she pities you, then dramatically throws her arms wide, her slime boobs jiggling as she does. "I am an //enchantress// and my trade is to keep brave tower adventurers supplied with the greatest and finest magic in all of the Crescentheart! These precious gems you see are merely but tools of the trade that I offer for the convenience of my customers."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You can enchant my gear?"
<<set _PCaddress to "lady">>\
<<if $PC[$CC][$PCsex] is "male">>\
<<set _PCaddress to "gentleman">>\
<<endif>>\
@@color:LightGreen;Daphne@@: "Not just //any// gear, darling. Only the //finest// and most priceless of rings and jewelry, splendid and decadent in their lustrous beauty! Oh yes, my dear...the most precious of gems set in a glistening ring or necklace of your choice, and wrapped up in glorious magic! That is what you long for, isn't it? Just a tiny extra glimpse of true power? No? Oh, I see. Yes, of course. I see it in your eyes. Such a discerning <<print _PCaddress>> as yourself would never settle for a pittance. So why not go large? If you wish, in time, I could make you one of the most powerful adventurers ever to grace my shop! You can have it all, wrapped up in an exquisite package of splendor and beauty...and all for but a //tiny// sum of gold, just a token payment really, a trifle."
Something about the glint in her eyes when she tells you how inexpensive her enchantments are keeps you on edge.
<!-- unlocks -->\
<<if $PC[$CC][$PCDaphneChat][3] is 0>>\
<<set $PC[$CC][$PCDaphneChat][3] to 1>><!-- Enchanting overview -->\
<<endif>>\
<<if $PC[$CC][$PCDaphneChat][4] is 0>>\
<<set $PC[$CC][$PCDaphneChat][4] to 1>><!-- What enchantments are available-->\
<<endif>>\
<<elseif _CurrentQuestion is 2>>\
<<set $PC[$CC][$PCDaphneChat][2] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I'm here for pleasure," you whisper throatily, staring at her body.
@@color:LightGreen;Daphne@@: "Oh, are you now?" she giggles. Despite being taken in by her charm, you find yourself suddenly leaping back at the unexpected sensation of a goo-tentacle sliding moistly between your thighs.
@@color:LightGreen;Daphne@@: "A little jumpy, aren't we?" she teases. "Maybe try again when you're feeling less skittish, dear. I prefer not to have to chase after my meals."
<<elseif _CurrentQuestion is 3>>\
<<if $PC[$CC][$PCDaphneChat][10] is 0>>\
<<set $PC[$CC][$PCDaphneChat][10] to 1>><!-- Where to learn soul trap? -->\
<<endif>>\
<<set $PC[$CC][$PCDaphneChat][3] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ok. So how does this work? I give you money and you give me magic equipment?"
@@color:LightGreen;Daphne@@: "Oh, but darling..." she smiles sadly at you. "It's not quite that simple. The magic of the Goddess never is, it seems. If you want to harness true power, you'll need to unlock it one step at a time."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How?"
@@color:Gold;Enchanting 101@@
@@color:Aqua;Step 1:@@ Learn the soul trap spell. Note this this spell is very mana intensive, with costs that scale with the level of the target to be captured. In general it is recommended to not try enchanting until you have at least 20 mana.
@@color:Aqua;Step 2:@@ Acquire and equip a gemstone. With the gemstone equipped, cast soul trap on a //tower// monster, then win the battle to trap the target's soul in the gem. Spell effect is determined by gemstone type, while the strength of its effect is determined by the level of the soul captured.
@@color:Aqua;Step 3:@@ Return to Daphne, pay an exorbitant fee to permanently enchant the gem's magic into a piece of equippable jewelry.
@@color:LightGreen;Daphne@@: "Oh, do ignore that last bit," Daphne waves a hand dismissively. "My fees are //very// reasonable, but nonsense like that keeps the lawyers happy."
<<elseif _CurrentQuestion is 4>>\
<<set $PC[$CC][$PCDaphneChat][4] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What exactly do enchamentments do?"
@@color:LightGreen;Daphne@@: "Many things," she draws out her words for emphasis "But most often they provide passive effects so long as you keep an item equipped. A simple enchanment might increase your health or reduce the damage you take. A more powerful item might allow you to siphon blood from your defeated foes to heal yourself. It all depends on the gem."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Can you tell me which gems do what?"
@@color:LightGreen;Daphne@@: "Sadly no," she raises the back of one hand to her forehead and sighs dramatically, then latches onto your ankle with a tentacle to pull you in closer. "Of course I would //love// to tell you precisely what each and every gem in my store does, darling. Believe me, I would. But, alas...the magic of the goddess isn't quite so simple as that, and //unfortunately// dear, you'll just have to buy each and every single stone that I painstakingly stock at great personal expense for the //good// of fellow adventurers like yourself, in order to experiment with them one by one. Alas, it's barely a break-even proposition for me most of the time, but such a kind and gerenous soul as myself is simply obliged to share the goodness."
Between the glint in her eyes and her nipples very obviously hardening when she mentions buying her products, you're a little skeptical that she's telling the the whole truth.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Do you know Rina at the guildhall, by chance?"
@@color:LightGreen;Daphne@@: "Oh, yes!" she smiles. "Charming girl. I still remember all those years ago when she took over from Lyta, the prior guild clerk. My, how time flies."
<!-- unlocks -->\
<<if $PC[$CC][$PCDaphneChat][5] is 0>>\
<<set $PC[$CC][$PCDaphneChat][5] to 1>><!-- ? -->\
<<endif>>\
<<elseif _CurrentQuestion is 5>>\
<<set $PC[$CC][$PCDaphneChat][5] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Were you an adventurer once?"
@@color:LightGreen;Daphne@@: "Can't you tell, dear?" she smiles in amusement, waving her goo-tentacles behind her. "Made it impressively far, I might add. But I found that I enjoyed myself a bit too much, almost as much as the creatures in there enjoyed me, I suspect. After a time it simply became too much of a burden, and so I retired."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What sort of creatures are up there in the higher levels?"
@@color:LightGreen;Daphne@@: "Oh, all sorts of lovely things," she glances down at her own body. "I wasn't always like this, you know."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I guessed that."
@@color:LightGreen;Daphne@@: "No dear, you misunderstand," she hefts her gooey slime breasts in both hands. "I didn't used to have these, you see. I was once a strapping yound lad, remarkably well endowed, shall we say. I took to adventuring because of the bunny girls...oh, such good times those were. And when I graduated to the tower, first it was busty goblins, then naga, so //eager// for my embrace, slimes, cow girls...such a lovely variety of ladies, all waiting in line for my pleasure, it seemed."
<!-- unlocks -->\
<<if $PC[$CC][$PCDaphneChat][6] is 0>>\
<<set $PC[$CC][$PCDaphneChat][6] to 1>><!-- ? -->\
<<endif>>\
<<elseif _CurrentQuestion is 6>>\
<<set $PC[$CC][$PCDaphneChat][6] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What happened?"
@@color:LightGreen;Daphne@@: "I climbed too high," she smiles deviously at you. "And got caught by a tentacle monster. By the time it was done with me, my...manhood was not quite so manly as it had once been, and in its place was the very thing I sought to enjoy. I came back another time to try to reclaim myself, and another, and another...but each time I became more soft, more supple, more deliciously //desireable// myself until at last I realized I wasn't even trying to win anymore. I wasn't even going to enjoy myself. I was going...to be enjoyed. And I knew then, that I didn't have much time left."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What do you mean?"
@@color:LightGreen;Daphne@@: "Don't make me say it, darling," she admonishes you. "All the 'creatures' in the forest, and probably most in the tower, I'd wager...let's just say I was among the early settlers in this region, and back then it wasn't nearly so...populated."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "You mean the monsters were //human// once?" you gasp at the implication. "Adventurers? All of them, turned?"
@@color:LightGreen;Daphne@@: "Who can say?" she shrugs dismissively. "But do try to remember why you're in the tower, dear. You can lose a bit of your body, even most of it, and still be you. But once your mind goes? There's no coming back from that."
<<elseif _CurrentQuestion is 7>>\
<!-- this remains always avaialble -->\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Would you remind me which enchantments have been unlocked?"
<<set _DUnlocks to 0>>\
<<for _i to ($WORLD.DaphneQuests.length -1); _i > -1; _i-->>\
<<if $WORLD.DaphneQuests[_i] is 2>>\
<<set _DUnlocks to _DUnlocks +1>>\
<<endif>>\
<</for>>\
<<if _DUnlocks > 0>>\
@@color:LightGreen;Daphne@@: "Of course, dear."
<<set _Gems to ["Quartz","Garnet","Citrine","Moonstone","Amethyst","Aquamarine","Star Opal","Emerald","Sapphire","Diamond"]>>\
<<set _Descs to []>>\
<<set _Descs[0] to "increases health, +5 per soul level">>\
<<set _Descs[1] to "Increases defense, +4 per soul level">>\
<<set _Descs[2] to "Increase accuracy, +3 per soul level">>\
<<set _Descs[3] to "Increase max mana, +1 per soul level">>\
<<set _Descs[4] to "is NOT IMPLEMENTED">>\
<<set _Descs[5] to "is NOT IMPLEMENTED">>\
<<set _Descs[6] to "is NOT IMPLEMENTED">>\
<<set _Descs[7] to "is NOT IMPLEMENTED">>\
<<set _Descs[8] to "is NOT IMPLEMENTED">>\
<<set _Descs[9] to "is NOT IMPLEMENTED">>\
<<for _i to 0; _i < $WORLD.DaphneQuests.length; _i++>>\
<<if $WORLD.DaphneQuests[_i] is 2>>\
<<Bullet>> @@color:Aqua;<<print _Gems[_i]>>@@: <<print _Descs[_i]>>
<<endif>>\
<</for>>\
<<else>>\
@@color:LightGreen;Daphne@@: "I would love to darling, but unfortunately you haven't enchanted anything yet."
<<endif>>\
<<elseif _CurrentQuestion is 8>>\
<<set $PC[$CC][$PCDaphneChat][8] to 2>>\
<<if $PC[$CC][$PCDaphneChat][9] is 0>>\
<<set $PC[$CC][$PCDaphneChat][9] to 1>><!-- Tower -->\
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Hey, Daphne. There's some sort of crazy magic rift in the building just across from your shop. Is it, uhh...safe?"
@@color:LightGreen;Daphne@@: "You mean the rift left over from the destruction of the Legacy Vault? I wouldn't recomend you stick your dick in it unless you fancy a very circuitous lobotomy, but as void rifts go, it's reasonably stable, yes."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is there any way to fix it?"
@@color:LightGreen;Daphne@@: "If you can procure a level 1 soul stone I'm almost certain I could handle the re-enchanting," she looks thoughtful then sighs. "But I can't do it alone. You'll need to find another wizard to help, and a fairly powerful one at that."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Any idea where I might find one?"
@@color:LightGreen;Daphne@@: "Wizards aren't exactly uncommon, dear. I'm sure if you ask around you can probably find a suitable candidate here in town. But if it were me, I'd go see if Azax is still haunting the College of Magic down south." Daphne lightly brushes her neck and her nipples visibly harden. "Not only I have worked with him before, he's worked with me before too. He'd do quite nicely. If you can't find a suitable candidate here in town, you might consider extending an invitation for Azax to come visit his little pooky. I'm sure he'll coming running as fast as his dick will allow him."
<<elseif _CurrentQuestion is 9>>\
<<set $PC[$CC][$PCDaphneChat][9] to 2>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "College of Magic?"
@@color:LightGreen;Daphne@@: "Oh, were you not aware?" she tilts her head. "Anyone can learn magic by completing its trials. There's an initial trial to gain entrance, and then an additional trial for each spell."
@@color:Yellow;Dev note:@@ magic trials are not implemented as of this version, but the system being described here is planned to eventually replace the current 'sleep at the inn until the book you want is for sale' system.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Where is it?"
<<if $WORLD.bridge is 1>>\
@@color:LightGreen;Daphne@@: "And there's the rub," she sighs. "It's deep in the desert, halfway to Talvin. You'll need to already be fairly powerful to reach it. It's no simple stroll, as I'm sure you're aware.
<<else>>\
@@color:LightGreen;Daphne@@: "And there's the rub," she sighs. "It's deep in the desert south of town, halfway to Talvin. You'll need to already be fairly powerful to reach it. It's no simple stroll, even if the bridge were still standing. You'll need to find a way to repair it first, and once you do you'll be greeted by prickly cactus and swarms of ant-girls who won't take no for an answer."
<<endif>>\
<<elseif _CurrentQuestion is 10>>\
<<set $PC[$CC][$PCDaphneChat][10] to 2>>\
<<if $PC[$CC][$PCDaphneChat][9] is 0>>\
<<set $PC[$CC][$PCDaphneChat][9] to 1>><!-- Tower -->\
<<endif>>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Where can I learn the soul trap spell?"
@@color:LightGreen;Daphne@@: "Ordinarily I'd direct you to the local mage guild, but Crescentheart doesn't seem to have one. The College of Magic is probably your best bet. It's run by a, shall we say...former aquaintence of mine. Azax. positively a delight in bed, but no business sense at all."
\
\
\
<<else>>\
Error: unrecognized question: _CurrentQuestion
<<endif>>\
<hr>\
<<set _AskTheseQuestions to []>>\
<<set _CurrentQuestionPTR to 0>>\
\
<<set _UnaskedCantAsk to 0>>\
<<set _UnaskedCANAsk to 1>>\
<<set _AlreadyAnswered to 2>>\
\
<!-- questions unlocked by external events go here-->\
\
<<for _i to 0; _i < $PC[$CC][$PCDaphneChat].length; _i++>>\
<<if $PC[$CC][$PCDaphneChat][_i] is 1>>\
<<set _AskTheseQuestions[_CurrentQuestionPTR] to _i>>\
<<set _CurrentQuestionPTR to _CurrentQuestionPTR +1>>\
<<endif>>\
<</for>>\
\
<<set _QuestionPool to []>>\
<<set _QuestionPool[0] to "Default intro">>\
<<set _QuestionPool[1] to "I'm here for business">>\
<<set _QuestionPool[2] to "I'm here for pleasure">>\
<<set _QuestionPool[3] to "How does this work?">>\
<<set _QuestionPool[4] to "What do enchantments do?">>\
<<set _QuestionPool[5] to "Were you an adventurer?">>\
<<set _QuestionPool[6] to "What happened?">>\
<<set _QuestionPool[7] to "Would you remind me which gem does what?">>\
<<set _QuestionPool[8] to "Do you know anything about the void rift in the next store over?">>\
<<set _QuestionPool[9] to "College of Magic?">>\
<<set _QuestionPool[10] to "Where can I learn the soul trap spell?">>\
\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) I'm done talking for now" "StoreDaphne">>
<<set $WORLD.gstore to 2>>\
<<AdvanceTime 5>>
<<unset $DaphneTalk>>\
<<set $PC[$CC][$PCDaphneChat][7] to 1>><!-- perpetual gem correlation reminder -->\
<</link>>\
</span>
\
<<set _SpanTexts to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix","KeypSeven"]>>\
<<set _KeyChars to ["1","2","3","4","5","6","7"]>>\
\
<<set _NextQuestion to 0>>\
<<for _i to 0; _i < _AskTheseQuestions.length; _i++>>\
<span @id="_SpanTexts[_NextQuestion]">\
<<set _NextQuestion to _NextQuestion +1>>\
<<set _LinkText to _KeyChars[_i] + ") " + _QuestionPool[_AskTheseQuestions[_i]]>>\
<<capture _i>>\
<<link _LinkText "StoreDaphne">>
<<set $WORLD.datapasser to _AskTheseQuestions[_i]>>\
<</link>>
<</capture>>\
</span>\
<</for>>\
<<else>>\
<<SimplePic "daphne.png">>\
@@color:LightGreen;Daphne's Fine Jewelry@@
<span id="KeypSpace">\
<<link "space) Return to town" "TownSouth">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<if _ChatAvailable is false>>\
c) No chats available
<<elseif $PC[$CC][$PCDaphneChat][1] is 2>>\
<span id="KeypC">\
<<link "c) Chat with Daphne" "StoreDaphne">>
<<set $DaphneTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<else>>\
<span id="KeypC">\
<<link "c) Chat with the shopkeeper" "StoreDaphne">>
<<set $DaphneTalk to "yes">>\
<<set $WORLD.datapasser to 0>>\
<</link>>\
</span>
<<endif>>\
\
<!-- enchanting -->\
\
<<set _SoulGemsReady to 0>>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<if (_item[0] > 549) and (_item[0] < 560)>>\
<<if (_item[3] > 0) and (_item[3] < 21)>>\
<<set _SoulGemsReady to _SoulGemsReady +1>>\
<<endif>>\
<<endif>>\
<</for>>\
@@color:Yellow;Dev note:@@ March 19, 2024: accessory enchanting is temporary disabled due to a rather unfortunate bug that was reported the morning after the 24-3-18 update.
<<if _SoulGemsReady > 99999>>\
<span id="KeypE">\
<<link "e) Enchanting" "StoreDaphne">>
<<set $DaphneTalk to "enchant">>\
<<set $WORLD.datapasser to "">>\
<</link>>\
</span>
<<endif>>\
<span id="KeypWest">\
<<link "a) Armor enchanting" "Test">>
<</link>>\
</span>
\
<hr>\
<<Store $Daphne>>
<<endif>>\
\
<<if $DebugMode is true>>\
<hr>\
DaphneChat: <<print $PC[$CC][$PCDaphneChat]>>
Stock:
<<for _i to 0; _i < 10; _i++>>\
_i) <<print $STORE[$Daphne][_i]>>
<</for>>\
<<endif>>\<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "main">>\
\
<<set _ExitLinks to "AllowLeave">>\
\
<<set _Hammer to setup.HasItemA(101)>>\
<<set _PlainwoodPTR to setup.HasItemA(105)>>\
<<set _PlainwoodQty to 0>>\
<<if _PlainwoodPTR > -1>>\
<<set _PlainwoodQty to $PC[$CC][$PCinven][_PlainwoodPTR][2]>>\
<<endif>>\
<<set _HardwoodPTR to setup.HasItemA(120)>>\
<<set _HardwoodQty to 0>>\
<<if _HardwoodPTR > -1>>\
<<set _HardwoodQty to $PC[$CC][$PCinven][_HardwoodPTR][2]>>\
<<endif>>\
<<set _SteelwoodPTR to setup.HasItemA(121)>>\
<<set _SteelwoodQty to 0>>\
<<if _SteelwoodPTR > -1>>\
<<set _SteelwoodQty to $PC[$CC][$PCinven][_SteelwoodPTR][2]>>\
<<endif>>\
\
<<if $WORLD.bridge is 1>>\
@@color:Gold;Bridge@@
With the bridge repaired, you can now access the southern desert.
<<AwardAchievement "Lumberjack">>\
<hr>
<span id="KeypSpace">\
<<link "space) Return to town" "TownSouth">>
<<AdvanceTime 5>>
<</link>>\
</span>
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) South into the desert" "Desert">>
<<set $PC[$CC][$PCdz] to 1>>
<<set $PC[$CC][$PCdx] to Math.trunc($WORLD.ForestDims[0] / 2)>>
<<set $PC[$CC][$PCdy] to 0>>
<<set $WORLD.datapasser to "reset desert">>
<<AdvanceTime 30>>
<</link>>\
</span></span>
<<else>>\
@@color:Gold;Broken bridge@@
<hr>
The bridge is thoroughly smashed up, cut up by an axe from the look of it. Unfortunately, as is tradition for hardened adventurers the world over, you never learned how to swim despite how obviously useful a skill it would be.
<<if (_Hammer > 0) or (_PlainwoodQty > 0) or (_SteelwoodQty > 0)>>\
Surveying the bridge, you find serviceable stone foundations, but the wood is throroughly smashed and will need to be completely replaced.
To perform the upgrade, you'll need:
<<set _AllowUpgrade to true>>\
<<if _Hammer > -1>>\
@@color:LightGreen; * A hammer (have)@@
<<else>>\
<<set _AllowUpgrade to false>>\
@@color:Red;* A hammer@@
<<endif>>\
<<if _PlainwoodQty > 49>>\
@@color:LightGreen; * 50 logs (have _PlainwoodQty)@@
<<elseif _PlainwoodQty > 0>>\
<<set _AllowUpgrade to false>>\
@@color:Yellow; * 50 logs (have _PlainwoodQty)@@
<<else>>\
<<set _AllowUpgrade to false>>\
@@color:LightRed; * 50 logs (have 0)@@
<<endif>>\
<<if _SteelwoodQty > 9>>\
@@color:LightGreen; * 10 steelwood (have _SteelwoodQty)@@
<<elseif _SteelwoodQty > 0>>\
<<set _AllowUpgrade to false>>\
@@color:Yellow; * 10 steelwood (have _SteelwoodQty)@@
<<else>>\
<<set _AllowUpgrade to false>>\
@@color:LightRed; * 10 steelwood (have 0)@@
<<endif>>\
<<set _Hunger to Math.trunc($PC[$CC][$PChunger] / 5)>>\
<<if $PC[$CC][$PChunger] > 249>>\
@@color:LightGreen; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<elseif $PC[$CC][$PChunger] > 300>>\
@@color:Yellow; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<else>>\
<<set _AllowUpgrade to false>>\
@@color:Red; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<endif>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "TownSouth">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<if _AllowUpgrade is true>>\
<span id="KeypR">\
<<link "r) Repair the bridge" "Bridge">>
<<if $PC[$CC][$PCinven][_PlainwoodPTR][2] > 100>>\
<<set $PC[$CC][$PCinven][_PlainwoodPTR][2] to $PC[$CC][$PCinven][_PlainwoodPTR][2] -100>>
<<else>>
<<set $PC[$CC][$PCinven][_PlainwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<if $PC[$CC][$PCinven][_SteelwoodPTR][2] > 100>>\
<<set $PC[$CC][$PCinven][_SteelwoodPTR][2] to $PC[$CC][$PCinven][_SteelwoodPTR][2] -100>>
<<else>>
<<set $PC[$CC][$PCinven][_SteelwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<set $WORLD.bridge to 1>>
<<AdvanceTime 250>>
<</link>>\
</span>
<<endif>>\
<<else>>\
Perhaps with the right tools and materials you could repair it.
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "TownSouth">>
<<AdvanceTime 5>>
<</link>>\
</span>
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
<<link "(Debug) Repair" "Bridge">>
<<set $WORLD.bridge to 1>>
<</link>>\
<<endif>>\
<<widget "VetData">>\
<<set _SourceAnatomy to _args[1]>>\
<<for _i to 0; _i < _SourceAnatomy.length; _i++>>\
_i: <<print _SourceAnatomy[_i].type>>, <<print _SourceAnatomy[_i].morph>>
<</for>>\
<</widget>>\
<<widget "TestTransform">>\
<<set _SourceAnatomy to _args[0]>>\
<<set _DestAnatomy to _args[1]>>\
<<set _ChangeList to []>>\
\
<!-- Does Source have any body parts Dest lacks? -->\
<<for _i to 0; _i < _SourceAnatomy.length; _i++>>\
<<set _Exists to false>>\
<<for _j to 0; _j < _DestAnatomy.length; _j++>>\
<<if _SourceAnatomy[_i].type is _DestAnatomy[_j].type>>\
<<set _Exists to true>>\
<<endif>>\
<</for>>\
<<if _Exists is false>>\
<<set _ChangeList[_ChangeList.length] to ["Add", _SourceAnatomy[_i].type, _SourceAnatomy[_i].morph]>>\
<<endif>>\
<</for>>\
\
<!-- Does Dest have any body parts Source lacks? -->\
<<for _i to 0; _i < _DestAnatomy.length; _i++>>\
<<set _Exists to false>>\
<<for _j to 0; _j < _SourceAnatomy.length; _j++>>\
<<if _DestAnatomy[_i].type is _SourceAnatomy[_j].type>>\
<<set _Exists to true>>\
<<endif>>\
<</for>>\
<<if _Exists is false>>\
<<set _ChangeList[_ChangeList.length] to ["Delete", _DestAnatomy[_i].type, _DestAnatomy[_i].morph]>>\
<<endif>>\
<</for>>\
\
<!-- Are there any matching pairs of body parts with different morphs? -->\
<<for _i to 0; _i < _SourceAnatomy.length; _i++>>\
<<set _Exists to false>>\
<<for _j to _SourceAnatomy.length -1; _j > -1; _j-->>\
<<if (_SourceAnatomy[_i].type is _DestAnatomy[_j].type) and (_SourceAnatomy[_i].morph neq _DestAnatomy[_j].morph)>>\
<<set _ChangeList[_ChangeList.length] to ["Modify", _DestAnatomy[_i].type, _SourceAnatomy[_i].morph]>>\
<<set _throwaway to _DestAnatomy.deleteAt(_j)>>\
<<endif>>\
<</for>>\
<</for>>\
<<for _i to 0; _i < _ChangeList.length; _i++>>\
_i: <<print _ChangeList[_i]>>
<</for>>\
<</widget>>\
<<widget "DoTransform">>\
<!-- source anatomy must accomodate swaps below -->\
<<set $ClonedPlayerAnatomy to clone($PC[$CC][$PCbp])>>\
<<set _source to $args[1]>>\
\
<!-- apply sex part filters -->\
<<if $DebugMode is true>>\
Debug: DoTransform morph is: <<print $args[0]>>
Debug: DoTransform source is: _source
<<endif>>\
<<if _source is "fountain">>\
<<set $SourceAnatomy to clone($args[0])>>\
<<elseif _source is "chest">>\
<<set $SourceAnatomy to clone($args[0])>>\
<<elseif _source is "meat">>\
<<set $ForceMon to [$args[0], "male", $Mon.level]>>\
<<GetMon>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<for _i to $SourceAnatomy.length -1; _i gte 0 ; _i-->>\
<<if $SourceAnatomy[_i].type is $BPpenis>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<elseif $SourceAnatomy[_i].type is $BPpussy>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<elseif $SourceAnatomy[_i].type is $BPboobs>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<endif>>\
<</for>>\
<<for _j to $ClonedPlayerAnatomy.length -1; _j gte 0 ; _j-->>\
<<if $ClonedPlayerAnatomy[_j].type is $BPpenis>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_j)>>\
<<elseif $ClonedPlayerAnatomy[_j].type is $BPpussy>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_j)>>\
<<elseif $ClonedPlayerAnatomy[_j].type is $BPboobs>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_j)>>\
<<endif>>\
<</for>>\
<<elseif _source is "semen">>\
<<set $ForceMon to [$args[0], "transform male", $Mon.level]>>\
<<GetMon>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<elseif _source is "milk">>\
<<set $ForceMon to [$args[0], "transform female", $Mon.level]>>\
<<GetMon>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<elseif _source is "sex">>\
<<if $Mon.sex is "male">>\
<<if $DebugMode is true>>\
Debug: Requesting $Mon.morph female
<<endif>>\
<<set $ForceMon to [$Mon.morph, "transform female", $Mon.level]>>\
<<GetMon>>\
<<elseif $Mon.sex is "female">>\
<<if $DebugMode is true>>\
Debug: Requesting $Mon.morph male
<<endif>>\
<<set $ForceMon to [$Mon.morph, "transform male", $Mon.level]>>\
<<GetMon>>\
<<else>>\
<<if $DebugMode is true>>\
Debug: No sex request, mon is $Mon.sex
<<endif>>\
<<set $ForceMon to [$Mon.morph, "transform herm", $Mon.level]>>\
<<GetMon>>\
<<endif>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<else>>\
@@color:Red;Error in DoTransform: unrecognized Tf source: _source
<<endif>>\
\
\
<<if $DebugMode is true>>\
@@color:Gold;Source anatomy@@
<<for _i to 0; _i < $SourceAnatomy.length ; _i++>>\
<<set _TFa to setup.bpptrtoname($SourceAnatomy[_i].type, "casual")>>\
_i) <<print _TFa>>, <<print $SourceAnatomy[_i].morph>>
<</for>>\
@@color:Gold;Player anatomy before transform@@
<<for _i to 0; _i < $PC[$CC][$PCbp].length ; _i++>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "casual")>>\
_i) <<print _TFa>>, <<print $PC[$CC][$PCbp][_i].morph>>
<</for>>\
<<endif>>\
\
<<for _i to $SourceAnatomy.length -1; _i gte 0 ; _i-->>\
<<set _Stop to false>>\
<<for _j to $ClonedPlayerAnatomy.length -1; _j gte 0 ; _j-->>\
<<if _Stop is false>>\
<<if ($SourceAnatomy[_i].type is $ClonedPlayerAnatomy[_j].type) and ($SourceAnatomy[_i].morph is $ClonedPlayerAnatomy[_j].morph)>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_j)>>\
<<set _Stop to true>>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;Source anatomy AFTER PRUNE@@
<<for _i to 0; _i < $SourceAnatomy.length ; _i++>>\
_i) <<print $SourceAnatomy[_i].type>>, <<print $SourceAnatomy[_i].morph>>
<</for>>\
@@color:Gold;Player anatomy AFTER PRUNE@@
<<for _i to 0; _i < $ClonedPlayerAnatomy.length ; _i++>>\
_i) <<print $ClonedPlayerAnatomy[_i].type>>, <<print $ClonedPlayerAnatomy[_i].morph>>
<</for>>\
<hr>\
<<endif>>\
\
<<set _WhichList to "source">>\
<<if ($SourceAnatomy.length is 0) and ($ClonedPlayerAnatomy.length is 0)>>\
<<set _WhichList to "none">>\
<<elseif ($ClonedPlayerAnatomy.length > $SourceAnatomy.length)>>\
<<set _WhichList to "player">>\
<<elseif $SourceAnatomy.length is 0>>\
<<set _WhichList to "player">>\
<<endif>>\
\
<<if $DebugMode is true>>\
@@color:LightGreen;Selected list is:@@ _WhichList
<<endif>>\
\
<<if _WhichList is "source">>\
<<set _SelectedSource to random(0, $SourceAnatomy.length -1)>>\
<<if $DebugMode is true>>\
@@color:LightGreen;We've chosen to look for a: @@ $SourceAnatomy[_SelectedSource].type in the destination body
<<endif>>\
<<set _LookingFor to []>>\
<<set _LookingFor[0] to $SourceAnatomy[_SelectedSource].type>>\
<<set _LookingFor[1] to $SourceAnatomy[_SelectedSource].morph>>\
\
<<set _TargetToChange to -1>>\
<<for _i to 0; _i < $ClonedPlayerAnatomy.length; _i++>>\
<<if $ClonedPlayerAnatomy[_i].type is _LookingFor[0]>>\
<<set _TargetToChange to _i>>\
<<endif>>\
<</for>>\
<<if _TargetToChange is -1>>\
<<set _TFa to setup.bpptrtoname($SourceAnatomy[_SelectedSource].type, "casual")>>\
<!-- @@color:Yellow;You have gained $SourceAnatomy[_SelectedSource].morph _TFa<<print "!">> -->\
<<if $DebugMode is true>>\
Doesn't exist, so add one! Adding a $SourceAnatomy[_SelectedSource].morph $SourceAnatomy[_SelectedSource].type to player
<<endif>>\
<<set _Morph to $SourceAnatomy[_SelectedSource].morph>>\
<<set _PartTypeToAdd to $SourceAnatomy[_SelectedSource].type>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, _PartTypeToAdd)>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].morph to _Morph>>\
<<set _MorphHack to setup.bpptrtoname(_PartTypeToAdd, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _Morph)>>\
You have gained _MorphHack\
<<TFAdderHelper _LocOfNewPart>>\
<<else>>\
<<if $DebugMode is true>>\
@@color:Aqua;We've found a :@@ $ClonedPlayerAnatomy[_TargetToChange].type in slot: _TargetToChange of the pruned list, now find on real body
<<endif>>\
<<set _RealSlotToChange to -1>>\
<<for _i to 0; _i < $PC[$CC][$PCbp].length ; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is _LookingFor[0]) and ($PC[$CC][$PCbp][_i].morph neq _LookingFor[1])>>\
<<set _RealSlotToChange to _i>>\
<<endif>>\
<</for>>\
<<if _RealSlotToChange > -1>>\
<<if $PC[$CC][$PCbp][_RealSlotToChange].equip[4] is 700>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_RealSlotToChange].type, "casual")>>\
Your $PC[$CC][$PCbp][_RealSlotToChange].morph _TFa would have become $SourceAnatomy[_SelectedSource].morph _TFa<<print ",">> but your enchantment of @@color:LightGreen;immutability has prevented it!@@
<<else>>\
<<set _TFbp to $PC[$CC][$PCbp][_RealSlotToChange].type>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_RealSlotToChange].type, "lost")>>\
<<set _TFb to setup.bpptrtoname($SourceAnatomy[_SelectedSource].type, "lost")>>\
\
<!-- this was the troublesome one -->\
<<set _FinalTypeBP to $PC[$CC][$PCbp][_RealSlotToChange].type>>\
<<set _OldMorph to $PC[$CC][$PCbp][_RealSlotToChange].morph>>\
<<set _NewMorph to $SourceAnatomy[_SelectedSource].morph>>\
<<print setup.TFTextOutputter(_FinalTypeBP, _OldMorph, _NewMorph)>>\
\
\
<<if $DebugMode is true>>\
Success! Converting player's $PC[$CC][$PCbp][_RealSlotToChange].morph $PC[$CC][$PCbp][_RealSlotToChange].type to a $SourceAnatomy[_SelectedSource].morph $SourceAnatomy[_SelectedSource].type
<<endif>>\
<<set $PC[$CC][$PCbp][_RealSlotToChange].morph to $SourceAnatomy[_SelectedSource].morph>>\
<<TFAdderHelper _RealSlotToChange>>\
<<endif>>\
<<else>>\
@@color:Red;Error in Transform@@: couldn't find a _LookingFor[1] _LookingFor[0]
<<endif>>\
<<endif>>\
<<elseif _WhichList is "player">>\
<<set _SelectedTarget to random(0, $ClonedPlayerAnatomy.length -1)>>\
<<if $DebugMode is true>>\
@@color:LightGreen;We've chosen to look for a: @@ $ClonedPlayerAnatomy[_SelectedTarget].type to convert to whatever morph the source has for that type
<<endif>>\
<<set _LookingFor to []>>\
<<set _LookingFor[0] to $ClonedPlayerAnatomy[_SelectedTarget].type>>\
<<set _LookingFor[1] to $ClonedPlayerAnatomy[_SelectedTarget].morph>>\
\
<<set _LocatedSource to -1>>\
<<for _i to 0; _i < $SourceAnatomy.length; _i++>>\
<<if ($SourceAnatomy[_i].type is _LookingFor[0]) and ($SourceAnatomy[_i].morph neq _LookingFor[1])>>\
<<set _LocatedSource to _i>>\
<<endif>>\
<</for>>\
<<if _LocatedSource is -1>>\
<<if $DebugMode is true>>\
Doesn't exist! Look for a $ClonedPlayerAnatomy[_SelectedTarget].type to remove!
<<endif>>\
\
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is $ClonedPlayerAnatomy[_SelectedTarget].type)>>\
<<if $PC[$CC][$PCbp][_i].equip[4] is 700>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "casual")>>\
You almost lost your $PC[$CC][$PCbp][_i].morph _TFa<<print ",">> but your enchantment of @@color:LightGreen;immutability has prevented it!@@
<<else>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "lost")>>\
You have lost your $PC[$CC][$PCbp][_i].morph _TFa<<print "!">>\
<<if $PC[$CC][$PCbp][_i].equippable is true>>\
<<set _Try to 13289>>\
<<set _WhatItem to $PC[$CC][$PCbp][_i].equip>>\
<<if _WhatItem[0] > 0>>\
<<set _InvItem to "true">>\
<<set _WhatItem to $PC[$CC][$PCbp][_i].equip>>\
<<set _throwaway to setup.GiveItem($CC, _WhatItem)>>\
The item on that body part has been returned to inventory.
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
Success: removing $PC[$CC][$PCbp][_i].morph $PC[$CC][$PCbp][_i].type from slot _i
<<endif>>\
<<set _throwaway to $PC[$CC][$PCbp].deleteAt(_i)>>\
<<set _i to 9999>>\
<<endif>>\
<<endif>>\
<</for>>\
\
<<else>>\
<<if $DebugMode is true>>\
@@color:Aqua;We've found a :@@ $SourceAnatomy[_LocatedSource].type in slot: _LocatedSource
<<endif>>\
<<set _RealSlotToChange to -1>>\
<<for _i to 0; _i < $PC[$CC][$PCbp].length ; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is _LookingFor[0]) and ($PC[$CC][$PCbp][_i].morph is _LookingFor[1])>>\
<<set _RealSlotToChange to _i>>\
<<endif>>\
<</for>>\
<<if _RealSlotToChange > -1>>\
<<if $PC[$CC][$PCbp][_RealSlotToChange].equip[4] is 700>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_RealSlotToChange].type, "casual")>>\
<<set _TFb to setup.bpptrtoname($SourceAnatomy[_LocatedSource].type, "casual")>>\
Your $PC[$CC][$PCbp][_RealSlotToChange].morph _TFa would have become $SourceAnatomy[_LocatedSource].morph _TFb<<print ",">> but your enchantment of @@color:LightGreen;immutability has prevented it!@@
<<else>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_RealSlotToChange].type, "casual")>>\
<<set _TFb to setup.bpptrtoname($SourceAnatomy[_LocatedSource].type, "casual")>>\
<!-- Your $PC[$CC][$PCbp][_RealSlotToChange].morph _TFa are now $SourceAnatomy[_LocatedSource].morph _TFb<<print "!">> -->\
<<set _TFbp to $PC[$CC][$PCbp][_RealSlotToChange].type>>\
<<set _OldMorph to $PC[$CC][$PCbp][_RealSlotToChange].morph>>\
<<set _NewMorph to setup.bpptrtoname($SourceAnatomy[_LocatedSource].type)>>\
<<set _NewMorph to $SourceAnatomy[_LocatedSource].morph>>\
<<print setup.TFTextOutputter(_TFbp, _OldMorph, _NewMorph)>>\
<<if $DebugMode is true>>\
Success! Converting player's $PC[$CC][$PCbp][_RealSlotToChange].morph $PC[$CC][$PCbp][_RealSlotToChange].type to a $SourceAnatomy[_LocatedSource].morph $SourceAnatomy[_LocatedSource].type
<<endif>>\
<<set $PC[$CC][$PCbp][_RealSlotToChange].morph to $SourceAnatomy[_LocatedSource].morph>>\
<<TFAdderHelper _RealSlotToChange>>\
<<endif>>\
<<else>>\
@@color:Red;Error in Transform@@: couldn't find a _LookingFor[1] _LookingFor[0]
<<endif>>\
<<endif>>\
<<else>>\
@@color:LightGreen;You have fully converted into a <<print $Mon.morph>>!@@
<<endif>>\
\
<<if $DebugMode is true>>\
@@color:Gold;Source anatomy@@
<<for _i to 0; _i < $SourceAnatomy.length; _i++>>\
_i) <<print $SourceAnatomy[_i].type>>, <<print $SourceAnatomy[_i].morph>>
<</for>>\
@@color:Gold;Player anatomy after transform@@
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
_i) <<print $PC[$CC][$PCbp][_i].type>>, <<print $PC[$CC][$PCbp][_i].morph>>
<</for>>\
<<endif>>\
<<unset $SourceAnatomy>>\
<<unset $ClonedPlayerAnatomy>>\
<<Recalc>>\
<<ShowHealth>>\
<</widget>>\
<<widget "TFAdderHelper">>\
<<set _WhichBodyPart to $args[0]>>\
<<set _Type to $PC[$CC][$PCbp][_WhichBodyPart].type>>\
<<set _Morph to $PC[$CC][$PCbp][_WhichBodyPart].morph>>\
<<set _Equip to $PC[$CC][$PCbp][_WhichBodyPart].equip>>\
<<set _MascFem to $PC[$CC][$PCbp][_WhichBodyPart].mascfem>>\
\
<<if _Type is $BPpenis>>\
<<if _Morph is "horse">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(18, 24)>>\
<<elseif _Morph is "cow">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(18, 24)>>\
<<elseif _Morph is "hellhound">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(8, 12)>>\
<<elseif _Morph is "wolf">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(6, 9)>>\
<<elseif (_Morph is "rat-morph") or (_Morph is "ratkin")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(2, 3)>>\
<<elseif _Morph is "human">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(4, 7)>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPboobs>>\
<<if _Morph is "bunny">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(30, 40)>>\
<<elseif _Morph is "wolf">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(10, 20)>>\
<<elseif _Morph is "hellhound">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(10, 20)>>\
<<elseif _Morph is "cow">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(40, 80)>>\
<<elseif (_Morph is "rat-morph") or (_Morph is "ratkin")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].size to random(10, 20)>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPlegs>>\
<<if _Morph is "horse">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "kick">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 8>>\
<<else>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 0>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 0>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPfeet>>\
<<if (_Morph is "horse") or (_Morph is "cow") or (_Morph is "spider") or (_Morph is "hellhound")>>\
<<if _Equip[0] > 0>>\
<<set _throwaway to setup.GiveItem($CC, _Equip)>>\
The item on that body part has been returned to inventory.
<<endif>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].equippable to false>>\
<<else>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].equippable to true>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPstinger>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "impale">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 10>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 20>>\
<<endif>>\
<<if _Type is $BPpincer>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "crush">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "immobilize">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 4>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 16>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].equippable to false>>\
<<endif>>\
<<if _Type is $BPhead>>\
<<if _Morph is "horse">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 6>>\
<<elseif (_Type is $BPhead) and (_Morph is "spider")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "poison bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 1>>\
<<elseif (_Type is $BPhead) and (_Morph is "naga")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 6>>\
<<elseif (_Type is $BPhead) and (_Morph is "wolf")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Type is $BPhead) and (_Morph is "dinosuar")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "pierce">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "bite">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 8>>\
<<elseif (_Type is $BPhead) and (_Morph is "hellhound")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "magic">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "breath">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 2>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 8>>\
<<else>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 0>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 0>>\
<<endif>>\
<<endif>>\
<<if _Type is $BPtail>>\
<<if _Morph is "snake">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].style to "none">>\
<<elseif _Morph is "demon">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].style to "none">>\
<<elseif _Morph is "insect">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].style to "none">>\
<<endif>>\
<<endif>>\
<<if _Type is $BPwield>>\
<<if _Morph is "fox">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "cut">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "claw">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Morph is "cat")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "cut">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "claw">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Morph is "human")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "punch">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Morph is "goblin")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "punch">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 1>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 4>>\
<<elseif (_Morph is "minotaur")>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attacktype to "blunt">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].attackdesc to "punch">>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].mindam to 2>>\
<<set $PC[$CC][$PCbp][_WhichBodyPart].maxdam to 7>>\
<<endif>>\
<<endif>>\
\
<</widget>>\<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $RoomPTR to passage()>>\
<<set $AllowNav to false>>\
\
<<if $WORLD.CombatInterrupt is "defeated Neris">>\
<<set $Dungeon[_pz][_px][_py][12] to 98>>\
<<set $WORLD.CombatInterrupt to "">>\
<<endif>>\
<<if $Dungeon[_pz][_px][_py][12] is 98>>\
<<set $Dungeon[_pz][_px][_py][12] to 99>>\
\
<<if $WORLD.Circle < 10>>\
<<set $WORLD.Circle to 10>>\
<<set $Dungeon[_pz][_px - 1][_py][11] to "Magic Circle">>\
<<set $Dungeon[_pz][_px - 1][_py][12] to 0>>\
<!-- set $Dungeon[_pz][_px][_py][11] to "StairsUp" -->\
<!-- set $Dungeon[_pz][_px][_py][12] to 0 -->\
<<set $WORLD.PortalTarget to []>>\
<<set $WORLD.PortalTarget[0] to _pz>>\
<<set $WORLD.PortalTarget[1] to _px -1>>\
<<set $WORLD.PortalTarget[2] to _py>>\
<<endif>>\
\
<<replace "#eventtext">>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $AllowNav to true>>\
\
Her body now failing, Neris collapses to her knees in a bloody pulp. And yet despite her broken body, she nevertheless looks up at you in relief.
@@color:Aqua;Neris@@: "Thank you adventurer," she smiles through her final, dying breaths. "At last I am free. If you survive the curse, please tell my friends that I forgive them for abandoning me."
With that, her smoldering body finally fails, collapsing to the stone floor in pieces that slowly disintegrate to dust.
@@color:Gold;Congratulations!@@
You have defeated the level 10 dungeon boss, Neris the Cursed.
<<AwardAchievement "White Mage">>\
Sadly, this marks the end of content for the current release. You can of course continue playing, but the stairs to the next level won't spawn in the current version of the game.
If you've enjoyed playing @@color:Gold;Tower of Triumph, An Humble Pilgrimage to the Shrine of the Goddess of Primal Darkness@@, please consider heading over to <a href="https://subscribestar.adult/arcdragon" target="_blank" rel="noopener noreferrer">SubscribeStar</a> and subscribing to support further development. If you'd like to share your thoughts or discuss the game with other players, please consider joining our <a href="https://discord.gg/AvbCAFKfzY" target="_blank" rel="noopener noreferrer">Discord channel</a> or visiting the <a href="https://arcdragon.com/forum" target="_blank" rel="noopener noreferrer">ArcDragon discussion Forums</a>.
Thank you for playing, and I hope you've enjoyed everything so far!\
<</replace>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 99>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>\
<<set $AllowNav to true>>\
With Neris dead, this marks the end of content for the current release. You can of course continue playing, but the stairs to the next level won't spawn in the current version of the game.
If you've enjoyed playing @@color:Gold;Tower of Triumph, An Humble Pilgrimage to the Shrine of the Goddess of Primal Darkness@@, please consider heading over to <a href="https://subscribestar.adult/arcdragon" target="_blank" rel="noopener noreferrer">SubscribeStar</a> and subscribing to support further development. If you'd like to share your thoughts or discuss the game with other players, please consider joining our <a href="https://discord.gg/AvbCAFKfzY" target="_blank" rel="noopener noreferrer">Discord channel</a> or visiting the <a href="https://arcdragon.com/forum" target="_blank" rel="noopener noreferrer">ArcDragon discussion Forums</a>.
Thank you for playing, and I hope you've enjoyed everything so far!\
<</replace>>\
<<elseif $Dungeon[_pz][_px][_py][12] is 0>>\
<<replace "#eventtext">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
Approaching the altar, you see a pale girl with demon wings and horns. Her dress is tattered, and manacles with torn chains dangle from her wrist and ankles. Seeing you approach, she gazes down at you in sadness.
@@color:Red;Neris@@: "Please stay away."
There is no anger in her voice, no venom. Only sadness. While clearly a demon, she doesn't seem to be acting very demonic.
<hr>\
<span id="KeypOne">\
<<link "1) Talk to her" "Neris">>
<<set $Dungeon[_pz][_px][_py][12] to 1>>
<</link>>
</span>\
<span id="KeypTwo">\
<<link "2) Attack" "Combat">>\
<<set $ForceMon to ["Neris","female",10]>>
<<GetMon $ForceMon>>\
<<set $WORLD.CombatInterrupt to "Neris", 1>>\
<</link>>
</span>\
<span id="KeypThree">\
<<link "3) Keep your distance" "Dungeon64">>\
<<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>>
<<set $Dungeon[_pz][_px][_py][12] to 0>>\
<</link>>\
</span>\
<</replace>>\
<!-- ---------------------------------- -->\
<<elseif $Dungeon[_pz][_px][_py][12] is 1>>\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Who are you? Why should I stay away?"
@@color:Red;Neris@@: "I'm cursed," she speaks plainly. "If you approach, you will die. It may be too late already."
You wait for her to elaborate, but she does not.
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] - setup.GetEffect("plague curse")>>\
<<ShowActiveEffects>><<ShowHealth>>\
<hr>\
@@color:Gold;Option@@
<hr>\
<span id="KeypOne"><<link "1) Ask questions" "Neris">><<set $Dungeon[_pz][_px][_py][12] to 2>><</link>></span>
<span id="KeypTwo"><<link "2) Attack" "Combat">><<set $ForceMon to ["Neris","female",10]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Neris", 1>><</link>></span>
<span id="KeypThree"><<link "3) Leave" "Dungeon64">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><<set $Dungeon[_pz][_px][_py][12] to 0>><</link>></span>\
<!-- ---------------------------------- -->\
<<elseif $Dungeon[_pz][_px][_py][12] is 2>>\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "How were you cursed? What curse?"
Rather than answer right away, she merely looks at you. Glancing down you see a dark smoke that matches the color of her wings begin to erupt from your skin.
@@color:Red;Neris@@: "With what little time you have, you deserve answers at least."
She pauses before continuing as if collecting her thoughts.
@@color:Red;Neris@@: "I was once an adventurer like yourself," she explains. "Climbing the tower for some dream I've long since forgotten with my good friends. Kleaton. Finley. Nesbitt. These and others, my loyal companions now fallen. One day we encountered a demon spider. Zehtalia. We fought her. We failed. This was my punishment."
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] - setup.GetEffect("plague curse")>>\
<<ShowActiveEffects>><<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
Unfortunately, the curse has taken it's toll, and you have died before you could ask any more questions.
<hr>@@color:Gold;Option@@
<span id="KeypSpace"><<link "Press space to continue" "Death">><<set $WORLD.diedby to "Killed by the plague curse">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><</link>></span>
<<else>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) Zehtalia has been defeated" "Neris">><<set $Dungeon[_pz][_px][_py][12] to 3>><</link>></span>
<span id="KeypTwo"><<link "2) Finley the blacksmith?" "Neris">><<set $Dungeon[_pz][_px][_py][12] to 4>><</link>></span>
<span id="KeypThree"><<link "3) Attack" "Combat">><<set $ForceMon to ["Neris","female",10]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Neris", 1>><</link>></span>
<span id="KeypFour"><<link "4) Leave" "Dungeon64">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><<set $Dungeon[_pz][_px][_py][12] to 0>><</link>></span>\
<<endif>>\
<!-- ---------------------------------- -->\
<<elseif $Dungeon[_pz][_px][_py][12] is 3>>\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Zehtalia, Queen of the Spiders is dead," you proclaim.
@@color:Red;Neris@@: "Dead? No. You may have destroyed her body, but unlike those who merely wear demonic transformations like myself, true demons are not of this world. Destroying their body merely returns them from whence they came. On the bright, when she returns her defeat will leave her weak for a time. It may be some time before she's able to deliver a curse like the one she placed on me. Though Zehtalia is but one demon of many, and not an particularly strong one. Still, you've done the world a great service by holding at least one of their number at bay. For that, I thank you."
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] - setup.GetEffect("plague curse")>>\
<<ShowActiveEffects>><<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
Unfortunately, the curse as taken it's toll, and you have died before you could ask any more questions.
<hr>@@color:Gold;Option@@
<span id="KeypSpace"><<link "Press space to continue" "Death">><<set $WORLD.diedby to "Killed by the plague curse">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><</link>></span>
<<else>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) True demons?" "Neris">><<set $Dungeon[_pz][_px][_py][12] to 5>><</link>></span>
<span id="KeypTwo"><<link "2) Tell me more about this curse" "Neris">><<set $Dungeon[_pz][_px][_py][12] to 6>><</link>></span>
<span id="KeypThree"><<link "3) Attack" "Combat">><<set $ForceMon to ["Neris","female",10]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Neris", 1>><</link>></span>
<span id="KeypFour"><<link "4) Leave" "Dungeon64">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><<set $Dungeon[_pz][_px][_py][12] to 0>><</link>></span>\
<<endif>>\
<!-- ---------------------------------- -->\
<<elseif $Dungeon[_pz][_px][_py][12] is 4>>\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Finley?" you ask. "Finley the blacksmith?"
@@color:Red;Neris@@: "Blacksmith?" she raises an eyebrow curiously.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Yes," you nod. "Crescentheart's blacksmith is a former adventurer named Finley. Grayed beard? Slightly overweight? Completely unintelligible accent?"
@@color:Red;Neris@@: "That's him," she allows herself a smile. "I was the last of my party to fall, and I saw the others cocooned in her web, but it seems at least one of my friends managed to escaped."
The joy of her smile is diminished by the growing smoke erupting from your body amidst growing pain.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is there any cure for this?"
@@color:Red;Neris@@: "The curse? No, once afflicted you will surely die. And this is the fate that the Spider Queen doomed me with. To kill all I come into contact with, whether friend or foe. It's why I hide here in this tower, alone. But there is one thing you can do."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's that?"
@@color:Red;Neris@@: "Kill me," she gazes into your eyes solemnly. "Before you die, and before I curse anyone else."
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] - setup.GetEffect("plague curse")>>\
<<ShowActiveEffects>><<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
Unfortunately, the curse as taken it's toll, and you have died before you could ask any more questions.
<hr>@@color:Gold;Option@@
<span id="KeypSpace"><<link "Press space to continue" "Death">><<set $WORLD.diedby to "Killed by the plague curse">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><</link>></span>
<<else>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) Attack" "Combat">><<set $ForceMon to ["Neris","female",10]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Neris", 1>><</link>></span>
<span id="KeypTwo"><<link "2) Leave" "Dungeon64">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><<set $Dungeon[_pz][_px][_py][12] to 0>><</link>></span>\
<<endif>>\
<!-- ---------------------------------- -->\
<<elseif $Dungeon[_pz][_px][_py][12] is 5>>\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What are true demons?"
@@color:Red;Neris@@: "Those of the 'One True Mind' they call themselves. Lesser demons such as I are merely former humans transformed. Little different from the deranged bunny girls and cat men in the forest. Some consumed by lust, while others retain greater bits of their dwindling sanity."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "I've met a few of those," you nod. "And the One True Mind?"
@@color:Red;Neris@@: "All I can tell you is that what we call demons are not natives to this world, and they form sort of loosely knit hivemind. They share a collective awareness, but also retain a sense of self and the ability to act independently. In some way I don't understand, the magic of the Tower and the wish-fulfillment nature of the goddess that fills this place has allows them to break through to this reality and create bodies to inhabit."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Did somebody wish for this?"
@@color:Red;Neris@@: "Perhaps."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What's their plan?"
@@color:Red;Neris@@: "I don't know."
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] - setup.GetEffect("plague curse")>>\
<<ShowActiveEffects>><<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
Unfortunately, the curse as taken it's toll, and you have died before you could ask any more questions.
<hr>@@color:Gold;Option@@
<span id="KeypSpace"><<link "Press space to continue" "Death">><<set $WORLD.diedby to "Killed by the plague curse">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><</link>></span>
<<else>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) Tell me more about this curse" "Neris">><<set $Dungeon[_pz][_px][_py][12] to 6>><</link>></span>
<span id="KeypTwo"><<link "2) Attack" "Combat">><<set $ForceMon to ["Neris","female",10]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Neris", 1>><</link>></span>
<span id="KeypThree"><<link "3) Leave" "Dungeon64">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><<set $Dungeon[_pz][_px][_py][12] to 0>><</link>></span>\
<<endif>>\
<!-- ---------------------------------- -->\
<<elseif $Dungeon[_pz][_px][_py][12] is 6>>\
<<SimplePic "Neris.jpg">>\
@@color:Yellow;Dungeon Boss: Neris the Cursed@@
<hr>\
While the pain of the curse is growing ever worse, you steel your resolve and continue your questions.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can you tell me about this curse?"
@@color:Red;Neris@@: "I know little about it," she stares at the ground. "Zehtalia selected me alone among my companions to receive it. I was too cheerful for her tastes, too friendly...a 'pompous magical girl' she called me. It rubbed her the wrong way, and she decided to hurt me in the worst way possible: to doom me to kill any and all I should ever come into contact with, that I would die alone among the corpses of those who might otherwise have become my friends."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Is that all?" you frown. "No grand plan to conquer the world? Just personal, petty vegeance because she didn't like you?"
@@color:Red;Neris@@: "I am but one casualty," she chokes on her words. "Not important enough to be told of the greater evils she has in mind for this world."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "She didn't even give you a villain speech where she revealed all her plans?"
@@color:Red;Neris@@: "Sadly no," she looks at the growing mist erupting from your body. "But it would not help you if she had. For you and I are both dead, and there is but one last service you can perform before you succumb. One way to at least assure that no one else will fall."
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "What can I do?"
@@color:Red;Neris@@: "Kill me."
<<set _throwaway to setup.ApplyEffect("plague curse", 1)>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] - setup.GetEffect("plague curse")>>\
<<ShowActiveEffects>><<ShowHealth>>\
<<if $PC[$CC][$PChpcur] < 1>>\
Unfortunately, the curse as taken it's toll, and you have died before you could ask any more questions.
<hr>@@color:Gold;Option@@
<span id="KeypSpace"><<link "Press space to continue" "Death">><<set $WORLD.diedby to "Killed by the plague curse">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><</link>></span>
<<else>>\
<hr>\
@@color:Gold;Option@@
<span id="KeypOne"><<link "1) Attack" "Combat">><<set $ForceMon to ["Neris","female",10]>><<GetMon $ForceMon>><<set $WORLD.CombatInterrupt to "Neris", 1>><</link>></span>
<span id="KeypTwo"><<link "2) Leave" "Dungeon64">><<set $PC[$CC][$PCy] to $PC[$CC][$PCy] +1>><<set $Dungeon[_pz][_px][_py][12] to 0>><</link>></span>\
<<endif>>\
<<else>>\
Error: unrecognized '12' state in Neris event: <<print $Dungeon[_pz][_px][_py][12]>>
Attempting recovery...
<<set $AllowNav to true>>\
<<endif>>\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;Active effects@@
<<for _SAE to 0; _SAE < $PC[$CC][$PCeffects].length; _SAE++>>\
<<print $PC[$CC][$PCeffects][_SAE][0]>>: <<print $PC[$CC][$PCeffects][_SAE][1]>>
<</for>>\
<<endif>>\
<!-- source anatomy must accomodate swaps below -->\
<<set $ClonedPlayerAnatomy to clone($PC[$CC][$PCbp])>>\
<<set _source to $TWO>>\
\
<!-- apply sex part filters -->\
<<if $DebugMode is true>>\
Debug: DoTransform source is: _source
<<endif>>\
<<if _source is "meat">>\
<<set $SourceAnatomy to clone($args[0])>>\
<<for _i to $SourceAnatomy.length -1; _i gte 0 ; _i-->>\
<<if $SourceAnatomy[_i].type is $BPpenis>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<elseif $SourceAnatomy[_i].type is $BPpussy>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<elseif $SourceAnatomy[_i].type is $BPboobs>>\
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<endif>>\
<</for>>\
<<for _j to $ClonedPlayerAnatomy.length -1; _j gte 0 ; _j-->>\
<<if $ClonedPlayerAnatomy[_i].type is $BPpenis>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_i)>>\
<<elseif $ClonedPlayerAnatomy[_i].type is $BPpussy>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_i)>>\
<<elseif $ClonedPlayerAnatomy[_i].type is $BPboobs>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_i)>>\
<<endif>>\
<</for>>\
<<elseif _source is "semen">>\
<<set $ForceMon to [$Mon.morph, "male", $Mon.level]>>\
<<GetMon>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<elseif _source is "milk">>\
<<set $ForceMon to [$Mon.morph, "female", $Mon.level]>>\
<<GetMon>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<elseif _source is "sex">>\
<<if $Mon.sex is "male">>\
<<if $DebugMode is true>>\
Debug: Requesting $Mon.morph female
<<endif>>\
<<set $ForceMon to [$Mon.morph, "female", $Mon.level]>>\
<<GetMon>>\
<<elseif $Mon.sex is "female">>\
<<if $DebugMode is true>>\
Debug: Requesting $Mon.morph male
<<endif>>\
<<set $ForceMon to [$Mon.morph, "male", $Mon.level]>>\
<<GetMon>>\
<<else>>\
<<if $DebugMode is true>>\
Debug: No sex request, mon is $Mon.sex
<<endif>>\
<!-- no action required for herms? -->\
<<endif>>\
<<set $SourceAnatomy to clone($Mon.anatomy)>>\
<<else>>\
@@color:Red;Error in DoTransform: unrecognized Tf source: _source
<<endif>>\
\
\
<<if $DebugMode is true>>\
@@color:Gold;Source anatomy@@
<<for _i to 0; _i < $SourceAnatomy.length ; _i++>>\
<<set _TFa to setup.bpptrtoname($SourceAnatomy[_i].type, "casual")>>\
_i) <<print _TFa>>, <<print $SourceAnatomy[_i].morph>>, <<print $SourceAnatomy[_i].type>>
<</for>>\
@@color:Gold;Player anatomy before transform@@
<<for _i to 0; _i < $PC[$CC][$PCbp].length ; _i++>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "casual")>>\
_i) <<print _TFa>>, <<print $PC[$CC][$PCbp][_i].morph>>, <<print $PC[$CC][$PCbp][_i].type>>
<</for>>\
<<endif>>\
\
<<for _i to $SourceAnatomy.length -1; _i gte 0 ; _i-->>\
<<set _Stop to false>>\
<<for _j to $ClonedPlayerAnatomy.length -1; _j gte 0 ; _j-->>\
<<if _Stop is false>>\
<<if ($SourceAnatomy[_i].type is $ClonedPlayerAnatomy[_j].type) and ($SourceAnatomy[_i].morph is $ClonedPlayerAnatomy[_j].morph)>>\
____________
i: _i j: _j
$SourceAnatomy[_i].type
$ClonedPlayerAnatomy[_j].type
($SourceAnatomy[_i].morph
$ClonedPlayerAnatomy[_j].morph
<<set _throwaway to $SourceAnatomy.deleteAt(_i)>>\
<<set _throwaway to $ClonedPlayerAnatomy.deleteAt(_j)>>\
<<set _Stop to true>>\
<<endif>>\
<<endif>>\
<</for>>\
<</for>>\
\
<<if $DebugMode is true>>\
<hr>
@@color:Gold;Source anatomy AFTER PRUNE@@
<<for _i to 0; _i < $SourceAnatomy.length ; _i++>>\
_i) <<print $SourceAnatomy[_i].type>>, <<print $SourceAnatomy[_i].morph>>
<</for>>\
@@color:Gold;Player anatomy AFTER PRUNE@@
<<for _i to 0; _i < $ClonedPlayerAnatomy.length ; _i++>>\
_i) <<print $ClonedPlayerAnatomy[_i].type>>, <<print $ClonedPlayerAnatomy[_i].morph>>
<</for>>\
<hr>\
<<endif>>\
\
<<set _WhichList to "source">>\
<<if ($SourceAnatomy.length is 0) and ($ClonedPlayerAnatomy.length is 0)>>\
<<set _WhichList to "none">>\
<<elseif ($ClonedPlayerAnatomy.length > $SourceAnatomy.length)>>\
<<set _WhichList to "player">>\
<<elseif $SourceAnatomy.length is 0>>\
<<set _WhichList to "player">>\
<<endif>>\
\
<<if $DebugMode is true>>\
@@color:LightGreen;Selected list is:@@ _WhichList
<<endif>>\
\
<<if _WhichList is "source">>\
<<set _SelectedSource to random(0, $SourceAnatomy.length -1)>>\
<<if $DebugMode is true>>\
@@color:LightGreen;We've chosen to look for a: @@ $SourceAnatomy[_SelectedSource].type in the destination body
<<endif>>\
<<set _LookingFor to []>>\
<<set _LookingFor[0] to $SourceAnatomy[_SelectedSource].type>>\
<<set _LookingFor[1] to $SourceAnatomy[_SelectedSource].morph>>\
\
<<set _TargetToChange to -1>>\
<<for _i to 0; _i < $ClonedPlayerAnatomy.length; _i++>>\
<<if $ClonedPlayerAnatomy[_i].type is _LookingFor[0]>>\
<<set _TargetToChange to _i>>\
<<endif>>\
<</for>>\
<<if _TargetToChange is -1>>\
<<set _TFa to setup.bpptrtoname($SourceAnatomy[_SelectedSource].type, "casual")>>\
<!-- @@color:Yellow;You have gained $SourceAnatomy[_SelectedSource].morph _TFa<<print "!">> -->\
<<if $DebugMode is true>>\
Doesn't exist, so add one! Adding a $SourceAnatomy[_SelectedSource].morph $SourceAnatomy[_SelectedSource].type to player
<<endif>>\
<<set _Morph to $SourceAnatomy[_SelectedSource].morph>>\
<<set _PartTypeToAdd to $SourceAnatomy[_SelectedSource].type>>\
<<set _LocOfNewPart to setup.AddBodyPart($CC, _PartTypeToAdd)>>\
<<set $PC[$CC][$PCbp][_LocOfNewPart].morph to _Morph>>\
<<set _MorphHack to setup.bpptrtoname(_PartTypeToAdd, "tf")>>\
<<set _MorphHack to _MorphHack.replace("~", _Morph)>>\
@@color:Yellow;you have gained a _MorphHack@@\
<<TFAdderHelper _LocOfNewPart>>\
<<else>>\
<<if $DebugMode is true>>\
@@color:Aqua;We've found a :@@ $ClonedPlayerAnatomy[_TargetToChange].type in slot: _TargetToChange of the pruned list, now find on real body
<<endif>>\
<<set _RealSlotToChange to -1>>\
<<for _i to 0; _i < $PC[$CC][$PCbp].length ; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is _LookingFor[0]) and ($PC[$CC][$PCbp][_i].morph neq _LookingFor[1])>>\
<<set _RealSlotToChange to _i>>\
<<endif>>\
<</for>>\
<<if _RealSlotToChange > -1>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_RealSlotToChange].type, "casual")>>\
<<set _TFb to setup.bpptrtoname($SourceAnatomy[_SelectedSource].type, "casual")>>\
@@color:Yellow;Your $PC[$CC][$PCbp][_RealSlotToChange].morph _TFa has become $SourceAnatomy[_SelectedSource].morph _TFb<<print "!">>@@\
<<if $DebugMode is true>>\
Success! Converting player's $PC[$CC][$PCbp][_RealSlotToChange].morph $PC[$CC][$PCbp][_RealSlotToChange].type to a $SourceAnatomy[_SelectedSource].morph $SourceAnatomy[_SelectedSource].type
<<endif>>\
<<set $PC[$CC][$PCbp][_RealSlotToChange].morph to $SourceAnatomy[_SelectedSource].morph>>\
<<TFAdderHelper _RealSlotToChange>>\
<<else>>\
@@color:Red;Error in Transform@@: couldn't find a _LookingFor[1] _LookingFor[0]
<<endif>>\
<<endif>>\
<<elseif _WhichList is "player">>\
<<set _SelectedTarget to random(0, $ClonedPlayerAnatomy.length -1)>>\
<<if $DebugMode is true>>\
@@color:LightGreen;We've chosen to look for a: @@ $ClonedPlayerAnatomy[_SelectedTarget].type to convert to whatever morph the source has for that type
<<endif>>\
<<set _LookingFor to []>>\
<<set _LookingFor[0] to $ClonedPlayerAnatomy[_SelectedTarget].type>>\
<<set _LookingFor[1] to $ClonedPlayerAnatomy[_SelectedTarget].morph>>\
\
<<set _LocatedSource to -1>>\
<<for _i to 0; _i < $SourceAnatomy.length; _i++>>\
<<if ($SourceAnatomy[_i].type is _LookingFor[0]) and ($SourceAnatomy[_i].morph neq _LookingFor[1])>>\
<<set _LocatedSource to _i>>\
<<endif>>\
<</for>>\
<<if _LocatedSource is -1>>\
<<if $DebugMode is true>>\
Doesn't exist! Look for a $ClonedPlayerAnatomy[_SelectedTarget].type to remove!
<<endif>>\
\
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is $ClonedPlayerAnatomy[_SelectedTarget].type)>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "casual")>>\
@@color:Yellow;Your have lost your $PC[$CC][$PCbp][_i].morph _TFa<<print "!">>@@\
<<if $PC[$CC][$PCbp][_i].equippable is true>>\
<<set _Try to 13289>>\
<<set _WhatItem to $PC[$CC][$PCbp][_i.equip>>\
<<if _WhatItem[0] > 0>>\
<<set _InvItem to "true">>\
<<set _WhatItem to $PC[$CC][$PCbp][_i].equip>>\
<<set _Try to setup.addtoinven(_WhatItem)>>\
<<endif>>\
<<if _Try is 13289>>\
<<elseif _Try is -1>>\
@@color:Yellow;NOTE: You had equipment on the body part you just lost. It has been delivered to Skitters at the pawn shop.@@
<<set _GS to _WhatItem>>\
<<AddToStore $Pawn _GS>>\
<<else>>\
The item on that body part has been returned to inventory.
<<endif>>\
<<endif>>\
<<if $DebugMode is true>>\
Success: removing $PC[$CC][$PCbp][_i].morph $PC[$CC][$PCbp][_i].type from slot _i
<<endif>>\
<<set _throwaway to $PC[$CC][$PCbp].deleteAt(_i)>>\
<<set _i to 9999>>\
<<endif>>\
<</for>>\
\
<<else>>\
<<if $DebugMode is true>>\
@@color:Aqua;We've found a :@@ $SourceAnatomy[_LocatedSource].type in slot: _LocatedSource
<<endif>>\
<<set _RealSlotToChange to -1>>\
<<for _i to 0; _i < $PC[$CC][$PCbp].length ; _i++>>\
<<if ($PC[$CC][$PCbp][_i].type is _LookingFor[0]) and ($PC[$CC][$PCbp][_i].morph is _LookingFor[1])>>\
<<set _RealSlotToChange to _i>>\
<<endif>>\
<</for>>\
<<if _RealSlotToChange > -1>>\
<<set _TFa to setup.bpptrtoname($PC[$CC][$PCbp][_RealSlotToChange].type, "casual")>>\
<<set _TFb to setup.bpptrtoname($SourceAnatomy[_LocatedSource].type, "casual")>>\
@@color:Yellow;Your $PC[$CC][$PCbp][_RealSlotToChange].morph _TFa are now $SourceAnatomy[_LocatedSource].morph _TFb<<print "!">>@@\
<<if $DebugMode is true>>\
Success! Converting player's $PC[$CC][$PCbp][_RealSlotToChange].morph $PC[$CC][$PCbp][_RealSlotToChange].type to a $SourceAnatomy[_LocatedSource].morph $SourceAnatomy[_LocatedSource].type
<<endif>>\
<<set $PC[$CC][$PCbp][_RealSlotToChange].morph to $SourceAnatomy[_LocatedSource].morph>>\
<<TFAdderHelper _RealSlotToChange>>\
<<else>>\
@@color:Red;Error in Transform@@: couldn't find a _LookingFor[1] _LookingFor[0]
<<endif>>\
<<endif>>\
<<else>>\
@@color:LightGreen;You have fully converted into a <<print $Mon.morph>>!@@
<<endif>>\
\
<<if $DebugMode is true>>\
@@color:Gold;Source anatomy@@
<<for _i to 0; _i < $SourceAnatomy.length; _i++>>\
_i) <<print $SourceAnatomy[_i].type>>, <<print $SourceAnatomy[_i].morph>>
<</for>>\
@@color:Gold;Player anatomy after transform@@
<<for _i to 0; _i < $PC[$CC][$PCbp].length; _i++>>\
_i) <<print $PC[$CC][$PCbp][_i].type>>, <<print $PC[$CC][$PCbp][_i].morph>>
<</for>>\
<<endif>>\
<<unset $SourceAnatomy>>\
<<unset $ClonedPlayerAnatomy>>\
<<Recalc>>\
<<ShowHealth>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
<<set _px to $PC[$CC][$PCfx]>>\
<<set _py to $PC[$CC][$PCfy]>>\
<<set _pz to $PC[$CC][$PCfz]>>\
\
<<if $WORLD.CombatInterrupt is "defeated cave">>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $WORLD.ForestCaves[_pz][0] to "none">>\
<<endif>>\
\
<<set _cave to $WORLD.ForestCaves[_pz]>>\
\
<<RightPic "forestcave.png">>\
<<if $DebugMode is true>>\
Debug, cave is: _cave
<<endif>>\
<<if _cave[3] is 0>>\
@@color:LightGreen;Forest cave@@
There is an empty cave here.\
<<elseif _cave[0] is "none">>\
@@color:LightGreen;Gemstone deposit@@
<<set _PickSlot to setup.HasMiningPick()>>\
<<if _PickSlot > -1>>\
<<set _PickMat to $PC[$CC][$PCinven][_PickSlot][1]>>\
<<set _GemType to _cave[3]>>\
<<set _MineDifficulty to 2 * (_GemType - 550)>>\
<<set _MineStrength to (_PickMat - 102) + ($PC[$CC][$PCstr] - 10)>>\
@@color:Gold;Target difficulty@@: 2 + (<<print _MineDifficulty>>)
* Pick strength: <<print _PickMat - 102>>
* Strength bonus: <<print $PC[$CC][$PCstr] - 10>>
* Total: <<print _MineStrength>>
<<if _MineStrength gte _MineDifficulty>>\
<span id="KeypOne">\
<<link "1) Mine">>
<<AdvanceTime 30>>
<<set _Gem to [_GemType, 0, 1, 0, 0]>>\
<<set _foo to setup.GiveItem($CC, _Gem)>>\
<<set $WORLD.ForestCaves[_pz][3] to 0>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>You mine a gem<</replace>>\
<</link>>\
</span>\
<<else>>\
There is a gemstone deposit here, but your mining strength is too low to mine it.\
<<endif>>\
<<else>>\
There is a gemstone deposit here, but you have nothing to mine with.\
<<endif>>\
<<else>>\
@@color:LightGreen;Forest cave@@
You find a cave.
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Explore" "Combat">>
<<set $WORLD.CombatInterrupt to "cave">>\
<<set $ForceMon to [_cave[0], "male", (_pz +1)]>>\
<<GetMon $ForceMon>>\
<</link>>\
</span>\
<<endif>>\
<</replace>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if (_pcpussy > 0)>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
Your muscles lock up from the effect of the snake's poison, and you collapse onto your back. You lie there for several moments unable to move before you feel the snake wriggling against your foot, then up between your legs. Completely paralyzed, you can do little but take it as the snake slithers up onto your pelvis and...wiggles?
No, wait. There's definitely something penetrating you. Barely. From the loudly insistent hissing you get the distinct impression that you're absolutely making this snake's day, or maybe his entire month. But you can barely feel more than a tickle perhaps a quarter inch inside you, barely making it past your labia. You find yourself more curious than bothered, and if it weren't for the paralytic effect of the poison you'd be very tempted to watch.
<<FemaleVirginity "a snake">>\
As is, there's little you can do but wait for him to finish. And you only know that he does from the scant few droplets of liquid dripping down your pelvis and into your buttcrack. After a brief few moments of silence, he then slithers away, leaving you still paralyzed, alone.
<<elseif (_pcpenis > 0)>>\
<<set $PC[$CC][$PCsexACTS].bjreceived to $PC[$CC][$PCsexACTS].bjreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Your muscles completely lock up from the effect of the snake's poison, and you collapse onto your back. You lie there for several moments unable to move before you feel the snake wriggling against your leg. Completely paralyzed, you can do little but wait as the snake slithers up between your legs, then unexpecedtly flicks the slippery tip of its cock across the tip of your penis.
That's when you discover that the paralytic effect of the poison apparently doesn't stop erections.
Engulfing your cock into its mouth, the snake slowly works its mouth aroudn yoru dock and down towards your pelvis, stretching and sliding its way a quarter of an inch at a time. Its shockingly erotic, and by the time its nose is pressed against your belly, your cock is fully engorged and ready to go.
But there's no motion, and barely any lubrication. With only the constrictions of its muscles rolling across your length, it takes only a few minutes before you cum, the tip of your penis fully a third of way down inside its entire length.
Satisfied with this, the snake rests for a few moments before reversing course and slowly sliding its way back off your cock. As your erection subsides, the snake has an easier time, and before long it slithers silently off into the grass, leaving you alone and still paralyzed.
<<else>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
Your muscles completely lock up from the effect of the snake's poison, and you collapse onto your back. You lie there for several moments unable to move before you feel the snake wriggling against your leg. Completely paralyzed, you can do little but wait as the snake slithers up between your legs and begins probing at your ass hole.
It tickles a little bit, but more than anything you're baffled. What you feel is entirely too large to be a snake penis, and as best as you can tell the snake seems to be crawling entirely up into your ass, head first. Concerned about the possibility that it might crawl up there and asphyxiate, you can do little but hope this particular breed of snake can breath through its skin.
For the next several minutes it wriggles and shudders inside you. Then without warning, it unceremoniously wriggles back out, then slithers off into the grass, leaving you unsure whether it ever even came.
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","snake"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<set $NoDoubleKeypress to 1>>\
\
<<timed 500ms>>\
<<audio "menu_bgm" stop>>\
<</timed>>\
<<PlayBGM "desert">>\
\
<<ClearTemporaryEffects>>\
\
<<set $PC[$CC][$PClocation] to "desert">>\
\
<<set _px to $PC[$CC][$PCdx]>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
\
<<if _pz > $PC[$CC][$PChdze]>>\
<<set $PC[$CC][$PChdze] to _pz>>\
<<endif>>\
<<if _pz > $WORLD.HDZE>>\
<<set $WORLD.HDZE to _pz>>\
<<endif>>\
\
<<if ($WORLD.datapasser is "reset desert") or ($DesertMap.length is 0)>>\
<<AddToLog "Arriving in desert">>\
<<set $DesertMap to []>>\
<<set $DesertMap to setup.DesertSnake()>>\
<!-- Don't stand on cactus or rocks -->\
<<set _ThisSpot to $DesertMap[_px][_py]>>\
<<if _ThisSpot is 300>>\
<<set $DesertMap[_px][_py] to 0>>\
<<elseif (_ThisSpot > 199) and (_ThisSpot < 203)>>\
<<set $DesertMap[_px][_py] to 0>>\
<<endif>>\
<<else>>\
<<endif>>\
<<set $WORLD.datapasser to 0>>\
\
<!-- Material level of our best axe? -->\
<<set $WORLD.TreeCutter to setup.AxeLevel()>>\
\
<<set $DisableMenu to false>>\
<<set $ReturnFromMenu to passage()>>\
<<set $GameState to "desert">>\
<<set $WORLD.dialogue to 0>>\
\
<<set _DesertLevel to $PC[$CC][$PCdz]>>\
<<if _DesertLevel is 0>>\
@@color:Red;Error:Desert should never be level zero@@\
<<elseif _DesertLevel is 1>>\
@@color:Gold;Southern Desert, level 1 (near town)@@\
<<else>>\
@@color:Gold;Southern Desert, level _DesertLevel@@\
<<endif>>\
<hr>\
<span id="right-img"></span>\
<canvas id="myCanvas" width="960" height="450" style="border:0px solid #f47373;">
Your browser does not support the HTML canvas tag.
</canvas>
<hr>\
<span id ="roomdesc"></span>\
<span id ="eventtext"></span>
<hr>\
<span id="navcontrols"><<ShowDesertNavControls>></span>
<span id="debug"></span>\
\
<<set _tempname to "S64Desert">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64CactusStump">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64CactusA">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64CactusB">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64CactusC">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Sign">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Grave">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Cave">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Rocks">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64College">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<set _tempname to "S64Tent">>\
<<set _pic to $ImgPath + _tempname + ".png">>\
<img @id="_tempname" height="1" style="visibility: hidden;" img @src="_pic"/>\
\
<<timed 300ms>>\
<<DesertMoveRefresh>>\
<<set _throwaway to setup.DrawDesertMap64(_px, _py, _pz, 64)>>\
<<set $NoDoubleKeypress to 0>>\
<</timed>>\
\
<<BirthCheck>>\<<widget "ShowDesertNavControls">>\
<<set _px to $PC[$CC][$PCdx]>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
\
<<if $PC[$CC][$PChpcur] < 1>>\
<<if $PC[$CC][$PChunger] < 1>>\
<<set $WORLD.diedby to "Starved to death">>\
@@color:Red;You have starved to death!@@
It's unfortunate, but you do need to eat. If food is too expensive, you could try carrying around a butcher knife to carve up some of those monsters you keep fighting. Of course, that probably has side effects.\
<<AwardAchievement "Starve to death">>\
<<else>>\
@@color:Red;You have bled to death!@@
Be careful of those cactus thorns. They're pointy.\
<<set $WORLD.diedby to "Pricked to death by cactus">>\
@@color:Red;You have died!@@
<<endif>>\
<span id="KeypSpace">\
<<link "space) Continue" "Death">>
<</link>>\
</span>
<<elseif $AllowNav is true>>\
<!-- avoid array out of bounds -->\
<<set _n to 0>>\
<<set _e to 0>>\
<<set _s to 0>>\
<<set _w to 0>>\
<<set _AllowMoveNorth to false>>\
<<set _AllowMoveSouth to false>>\
<<if _px is 0>>\
<<set _e to $DesertMap[_px +1][_py]>>\
<<set _w to 9999>>\
<<elseif _px >= $WORLD.DesertDims[0]>>\
<<set _e to 9999>>\
<<set _w to $DesertMap[_px -1][_py]>>\
<<else>>\
<<set _e to $DesertMap[_px +1][_py]>>\
<<set _w to $DesertMap[_px -1][_py]>>\
<<endif>>\
<<if _py is 0>>\
<<set _s to $DesertMap[_px][_py +1]>>\
<<set _AllowMoveNorth to true>>\
<<elseif _py >= $WORLD.DesertDims[1] -1>>\
<<set _n to $DesertMap[_px][_py -1]>>\
<<set _AllowMoveSouth to true>>\
<<else>>\
<<set _n to $DesertMap[_px][_py -1]>>\
<<set _s to $DesertMap[_px][_py +1]>>\
<<endif>>\
\
<!-- AXE CUTTING -->\
<<if (_n > 199) and (_n < 210)>>\
<<if $WORLD.TreeCutter > 0>>\
<<set _n to "cut">>\
<<else>>\
<<set _n to "push">>\
<<endif>>\
<<elseif (_n > 299) and (_n < 400)>>\
<<set _n to "blocked">>\
<<endif>>\
<<if (_e > 199) and (_e < 210)>>\
<<if $WORLD.TreeCutter > 0>>\
<<set _e to "cut">>\
<<else>>\
<<set _e to "push">>\
<<endif>>\
<<elseif (_e > 299) and (_e < 400)>>\
<<set _e to "blocked">>\
<<endif>>\
<<if (_s > 199) and (_s < 210)>>\
<<if $WORLD.TreeCutter > 0>>\
<<set _s to "cut">>\
<<else>>\
<<set _s to "push">>\
<<endif>>\
<<elseif (_s > 299) and (_s < 400)>>\
<<set _s to "blocked">>\
<<endif>>\
<<if (_w > 199) and (_w < 210)>>\
<<if $WORLD.TreeCutter > 0>>\
<<set _w to "cut">>\
<<else>>\
<<set _w to "push">>\
<<endif>>\
<<elseif (_w > 299) and (_w < 400)>>\
<<set _w to "blocked">>\
<<endif>>\
<!-- END TREE CUTTING -->\
\
@@color:LightGreen;Navigation@@
<<if _AllowMoveNorth is true>>\
<<if _pz < 2>>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) Return to town" "TownSouth">>
<<AdvanceTime 1>>
<</link>>\
</span></span>
<<else>>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "d) Head back towards town">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 1>>
<<set $WORLD.datapasser to "reset desert">>
<<set $PC[$CC][$PCdy] to $WORLD.DesertDims[1] -1>>
<<set $PC[$CC][$PCdz] to $PC[$CC][$PCdz] -1>>
<<script>>Engine.play("Desert");<</script>>
<<endif>>\
<</link>>\
</span>
<<endif>>\
<<elseif _n is "cut">>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) Cut through cactus">>
<<AdvanceTime 10>>
<<set _py to _py -1>>
<<set $PC[$CC][$PCdy] to _py>>\
<<set $WORLD.datapasser to "cut cactus">>
<<DesertMoveRefresh>>
<</link>>\
</span></span>
<<elseif _n is "push">>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) Push through cactus">>
<<AdvanceTime 10>>
<<set _py to _py -1>>
<<set $PC[$CC][$PCdy] to _py>>\
<<set $WORLD.datapasser to "push cactus">>
<<DesertMoveRefresh>>
<</link>>\
</span></span>
<<elseif _n is "blocked">>\
North - blocked
<<else>>\
<span id="KeypNorth"><span id="KeypUP">\
<<link "w) North">>
<<AdvanceTime 1>>
<<set _py to _py -1>>
<<set $PC[$CC][$PCdy] to _py>>\
<<set $WORLD.datapasser to "no cactus">>
<<DesertMoveRefresh>>
<</link>>\
</span></span>
<<endif>>\
<<if _e is 9999>>\
East - edge of map
<<elseif _e is "cut">>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) Cut through cactus">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 10>>
<<set _px to _px + 1>>
<<set $PC[$CC][$PCdx] to _px>>\
<<set $WORLD.datapasser to "cut cactus">>
<<DesertMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _e is "push">>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) Push through cactus">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 10>>
<<set _px to _px + 1>>
<<set $PC[$CC][$PCdx] to _px>>\
<<set $WORLD.datapasser to "push cactus">>
<<DesertMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _e is "blocked">>\
East - blocked
<<else>>\
<span id="KeypEast"><span id="KeypRIGHT">\
<<link "d) East">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 1>>
<<set _px to _px + 1>>
<<set $PC[$CC][$PCdx] to _px>>\
<<set $WORLD.datapasser to "no cactus">>
<<DesertMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<endif>>\
<<if _AllowMoveSouth is true>>\
<<if _pz > 9>>\
<span id="KeypSouth"><span id="KeypDOWN">\
s - Town of Talvin not implemented
</span></span>\
<<else>>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) Head deeper into the desert">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 10>>
<<set $WORLD.datapasser to "reset desert">>
<<set $PC[$CC][$PCdy] to 0>>
<<set $PC[$CC][$PCdz] to $PC[$CC][$PCdz] +1>>
<<script>>Engine.play("Desert");<</script>>
<<endif>>\
<</link>>\
</span>
<<endif>>\
<<elseif _s is "cut">>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) Cut through cactus">>
<<if $NoDoubleKeypress is 0>>
<<AdvanceTime 10>>
<<set _py to _py + 1>>
<<set $PC[$CC][$PCdy] to _py>>\
<<set $WORLD.datapasser to "cut cactus">>
<<DesertMoveRefresh>>
<<endif>>
<</link>>\
</span></span>
<<elseif _s is "push">>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) Push through cactus">>
<<if $NoDoubleKeypress is 0>>
<<AdvanceTime 10>>
<<set _py to _py + 1>>
<<set $PC[$CC][$PCdy] to _py>>\
<<set $WORLD.datapasser to "push cactus">>
<<DesertMoveRefresh>>
<<endif>>
<</link>>\
</span></span>
<<elseif _s is "blocked">>\
South - blocked
<<else>>\
<span id="KeypSouth"><span id="KeypDOWN">\
<<link "s) South">>
<<if $NoDoubleKeypress is 0>>
<<AdvanceTime 1>>
<<set _py to _py + 1>>
<<set $PC[$CC][$PCdy] to _py>>\
<<set $WORLD.datapasser to "no cactus">>
<<DesertMoveRefresh>>
<<endif>>
<</link>>\
</span></span>
<<endif>>\
<<if _w is 9999>>\
West - edge of map
<<elseif _w is "cut">>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) Cut through cactus">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 10>>
<<set _px to _px - 1>>
<<set $PC[$CC][$PCdx] to _px>>\
<<set $WORLD.datapasser to "cut cactus">>
<<DesertMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _w is "push">>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) Push through cactus">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 10>>
<<set _px to _px - 1>>
<<set $PC[$CC][$PCdx] to _px>>\
<<set $WORLD.datapasser to "push cactus">>
<<DesertMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<elseif _w is "blocked">>\
West - blocked
<<else>>\
<span id="KeypWest"><span id="KeypLEFT">\
<<link "a) West">>
<<if $NoDoubleKeypress is 0>>\
<<AdvanceTime 1>>
<<set _px to _px - 1>>
<<set $PC[$CC][$PCdx] to _px>>\
<<set $WORLD.datapasser to "no cactus">>
<<DesertMoveRefresh>>
<<endif>>\
<</link>>\
</span></span>
<<endif>>\
<<endif>>\
<</widget>>\
<<widget "DesertMoveRefresh">>\
<<set _px to $PC[$CC][$PCdx]>>\
<<if _px > -1>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
<<replace "#right-img">><</replace>>\
\
\
\
<!-- did we chop down cactus? -->\
<<set _CosmeticText to "">>\
<<if $WORLD.datapasser is "cut cactus">>\
<<set _Terrain to $DesertMap[_px][_py]>>\
<<if (_Terrain > 199) and (_Terrain < 210)>>
<<set $DesertMap[_px][_py] to 199>>\
<<set _CactusQTY to 1>>\
<<if (setup.PtrToClass($PC[$CC][$PCclass]) is "lumberjack") and ($PC[$CC][$PClevel] > 6)>>\
<<set _CactusQTY to 2>>\
<<endif>>\
<<set _foo to setup.GiveItem($CC, [138, 0, _CactusQTY, 0, 0])>>
<<set _CosmeticText to "@@color:LightGreen;You cut through the cactus and add it to your inventory@@">>
<<ChangeStat $PChpcur -1>>\
<<ShowHealth>>\
<<else>>
<!-- not cactus? -->\
<<endif>>\
<<elseif $WORLD.datapasser is "push cactus">>\
<<set _CosmeticText to "You push through the cactus">>\
<<ChangeStat $PChpcur -1>>\
<<ShowHealth>>\
<<else>>\
<<endif>>\
\
<<set _throwaway to setup.DrawDesertMap64(_px, _py, _pz, 64)>>\
<<if _throwaway is 1>>\
<<else>>\
<<script>>alert("Error: DrawDesertMap64 failed to complete");<</script>>\
<<endif>>\
\
<<set $WORLD.turnssincecombat to $WORLD.turnssincecombat +1>>\
<<replace "#time">><<ShowTime>><</replace>>\
<<ShowHunger>>\
\
<<if $DebugMode is true>>\
<<replace "#debug">>\
@@color:Gold;Debug info@@
dx,dy,dz: <<print $PC[$CC][$PCdx]>>, <<print $PC[$CC][$PCdy]>>, <<print $PC[$CC][$PCdz]>>
Tile: <<print $DesertMap[_px][_py]>>
Theme: N/A
Since Last combat: <<print $WORLD.turnssincecombat>>
Treecutter: <<print $WORLD.TreeCutter>>
<</replace>>\
<<endif>>\
\
<<set _DesertEventNow to $DesertMap[_px][_py]>>
\
<<if _DesertEventNow is 110>>
<<include "EventSmith">>\
<<elseif _DesertEventNow is 111>>\
<<set _CosmeticText to "@@color:Yellow;Dev note@@: This is the last zone with meaningful desert content. You can delve deeper, but there are no further events in later zones.">>\
<<elseif _DesertEventNow is 112>>\
<<include "PlayerCorpse">>\
<<elseif _DesertEventNow is 113>>\
<<include "DesertCave">>\
<<elseif (_DesertEventNow > 0) and (_DesertEventNow < 10)>>\
<<set _Flowers to _DesertEventNow -1>>\
<<replace "#roomdesc">><</replace>>\
<<set _HerbNames to ["daisies","skretch grass","sunflower","roses","goose berries","brown mushrooms","azaleas","unnamed flower 8","unnamed flower 9","unnamed flower 10"]>>\
<<if $WORLD.SeleneQuests[_Flowers] is 1>>\
<<set $WORLD.SeleneQuests[_Flowers] to 2>>\
<<set _CosmeticText to "@@color:LightGreen;New herb found!@@" + "<br>You pick up a sample of @@color:Aqua;" + _HerbNames[_Flowers] + "@@ for Selene. " + either("Hopefully it will be useful.","Wonder what she'll be able to make from it?","Hopefully this makes something good.")>>
<<else>>\
<<set _CosmeticText to "Some " + _HerbNames[_Flowers]>>\
<<endif>>\
<<elseif (_DesertEventNow is 0) or (_DesertEventNow is 199)>>\
<<set _ModdedTurnsSinceCombat to $WORLD.turnssincecombat - $PC[$CC][$PCmorphQTY].ratkin>>\
<<if _ModdedTurnsSinceCombat > 20>>\
<<if random(20,50) < _ModdedTurnsSinceCombat>>\
<<set $AllowNav to false>>\
<<replace "#roomdesc">><</replace>>\
<<replace "#eventtext">>\
<<set $ForceMon to ["random", "random"]>>\
<<GetMon $ForceMon>>\
<<set $NoInventoryHack to 1>>\
@@color:Gold;Monster encounter: random <<print $Mon.name>>!@@
<span id="KeypOne">\
<<link "1) Fight" "Combat">>
<<unset $NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<</link>>\
</span>\
<<set _DisengageChance to setup.DisengageChance()>>\
<<if _DisengageChance > 0>>\
<br><<if random(1, 100) < _DisengageChance>>\
<span id="KeypOne">\
<<link "2) Avoid" "Desert">>
<<unset $NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<else>>\
<span id="KeypTwo">\
<<link "2) Avoid" "Combat">>
<<unset $NoInventoryHack>>
<<set $WORLD.turnssincecombat to 0>>
<<set $DisableMenu to true>>
<</link>> (<<print _DisengageChance>>% chance)\
</span>\
<<endif>>\
<<endif>>\
<<if $DebugMode>>\
<hr>\
@@color:Gold;Debug info@@
(Random encounter)
Turns since last combat: <<print $WORLD.turnssincecombat>>
'Force' data being set: $ForceMon
<<endif>>\
<</replace>>\
<<else>>\
<<set $AllowNav to true>>
<<replace "#eventtext">><</replace>>\
<<endif>>\
<<else>>\
<<set $AllowNav to true>>
<<replace "#roomdesc">><</replace>>\
<<replace "#eventtext">><</replace>>\
<<endif>>\
<<elseif (_DesertEventNow > 199) and (_DesertEventNow < 210)>>\
<!-- cactus -->\
<<elseif (_DesertEventNow > 299) and (_DesertEventNow < 300)>>\
<!-- blocker -->\
<<elseif _DesertEventNow is 400>>\
<<include "DesertSchool">>\
<<elseif _DesertEventNow is 401>>\
<<include "DesertTent">>\
<<else>>\
<<replace "#eventtext">>\
@@color:Yellow;Error in DesertMoveRefresh: _DesertEventNow@@
<</replace>>\
<<endif>>\
<<replace "#roomdesc">><<print _CosmeticText>><</replace>>\
<<replace "#navcontrols">><<ShowDesertNavControls>><</replace>>\
<<endif>>\
<</widget>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
<<set _px to $PC[$CC][$PCdx]>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
<<set _RightPic to $ImgPath + "forestcave.png">>\
\
<<if $WORLD.CombatInterrupt is "defeated cave">>\
<<set $WORLD.CombatInterrupt to "">>\
<<set $WORLD.DesertCaves[_pz][0] to "none">>\
<<endif>>\
\
<<set _cave to $WORLD.DesertCaves[_pz]>>\
\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
<<if $DebugMode is true>>\
Debug, cave is: _cave
<<endif>>\
<<if _cave[3] is 0>>\
@@color:LightGreen;Desert cave@@
There is an empty cave here.\
<<elseif _cave[0] is "none">>\
@@color:LightGreen;Mineral deposit@@
<<set _PickSlot to setup.HasMiningPick()>>\
<<if _PickSlot > -1>>\
<<set _PickMat to $PC[$CC][$PCinven][_PickSlot][1]>>\
<<set _GemType to _cave[3]>>\
<<set _MineDifficulty to 2 * (_GemType - 550)>>\
<<set _MineStrength to (_PickMat - 102) + ($PC[$CC][$PCstr] - 10)>>\
@@color:Gold;Target difficulty@@: 2 + (<<print _MineDifficulty>>)
* Pick strength: <<print _PickMat - 102>>
* Strength bonus: <<print $PC[$CC][$PCstr] - 10>>
* Total: <<print _MineStrength>>
<<if _MineStrength gte _MineDifficulty>>\
<<set _FluxChance to 0>>\
<<if $WORLD.smithLevel is 1>>
<<set _FluxChance to $PC[$CC][$PCdz] * 10>>\
<<endif>>\
<<if random(1,30) lte _FluxChance>>\
There is a large deposit of powdery white stone here.
<span id="KeypOne">\
<<link "1) Mine">>
<<AdvanceTime 30>>
<<set $WORLD.smith to 7>>\
<<set $WORLD.DesertCaves[_pz][3] to 0>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>You mine a sample of the material. Perhaps smith Finley in Crescentheart has a use for it.<</replace>>\
<</link>>\
</span>\
<<else>>\
There is a gemstone desposit here.
<span id="KeypOne">\
<<link "1) Mine">>
<<AdvanceTime 30>>
<<set _Gem to [_GemType, 0, 1, 0, 0]>>\
<<set _foo to setup.GiveItem($CC, _Gem)>>\
<<set $WORLD.DesertCaves[_pz][3] to 0>>\
<<replace "#right-img">><</replace>>\
<<replace "#eventtext">>You mine a gem<</replace>>\
<</link>>\
</span>\
<<endif>>\
<<else>>\
There is a gemstone deposit here, but your mining strength is too low to mine it.\
<<endif>>\
<<else>>\
There is a gemstone deposit here, but you have nothing to mine with.\
<<endif>>\
<<else>>\
You find a cave.
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Explore" "Combat">>
<<set $WORLD.CombatInterrupt to "cave">>\
<<set $ForceMon to [_cave[0], "random", (_pz +1)]>>\
<<GetMon $ForceMon>>\
<</link>>\
</span>\
<<endif>>\
<</replace>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<set _WhichCloser to "pass out">>\
\
<<if $WORLD.datapasser is "yes male">>\
@@color:Gold;You have lost to a <<print $Mon.name>>!@@
<hr>\
<<set _r to random(1,2)>>\
<<if _r is 1>>\
"Yes, I'm male" you agree warily as her eyes light up in excitement.
"I have caught a male!" she gleefully crawls up and envelops you in her legs. "Only the queen is permitted to possess males, but today I have captured a male. So clearly I am a Queen!"
Unable to refute that logic, you watch as the ant- girl eagerly lowers her abdomen generally over your pelvis and waits. A few moments pass. Then a few more.
"Perhaps it is not as good to be Queen as I'd thought," she frowns. "Mating is not as excited as I'd imagined."
"You're...umm, doing it wrong."
"Do you think me a mere nymph?" she rolls her eyes at you. "I am very well versed in the mating act. I have turned eggs in the breeding chamber many times."
"Yes, I'm sure you're a regular whore," you gently reassure her. "But since I'm new to this, would it be ok if I...uhh, take this as a explorative learning opportunity?"
"Hmm," she considers, then nods. "Very well. I will permit it."
Reaching up to pull her abdomen closer, you slide your hands across its chitinous surface looking for an entrance. When at last you find one, you gently slip a finger inside and start rubbing up and down its length.
"Oh my," she exhales. " That is very plesant."
"May I continue, my Queen?" you smirk up at her.
"Yes," she gulps as you grab your dick and stick the tip inside her. "...yes, do please...umm. That. Do that. Yes. Wow."
Her abdomen is too large to reach around, but by grabbing onto her middle two legs you're able to pull her down onto your cock and start thrusting up into her. She quickly shuts down to gibbering out happy but confused little noises as you pick up the pace. Eventually she gets the idea and starts to squat up and down in time with your thrusts. Her motions are clumsy but eager, and you relish in the novel, cool rubbery sensation of her ant pussy on your cock.
After you cum, she continues squatting up and down on you until her own climax moments later, her eyes half-lidded and her body now leaning awkwardly off-kilter from her abdomen.
"So," you start to feel yourself nodding off. "How did you like being queen?"
"...I could...get...used to it," her words come out slurred and slowly, as if she's struggling to stay awake. Then she passes out on top of you.
<<elseif _r is 2>>\
"Yes, I'm male," you explain, as her eyebrows knit together.
"Then why have you left your burrow?" she asks, clearly puzzled. "Surely you must know that enemy ants will capture a weak one such as you, as I have done. And what hope have you for your future except to be taken back to my hive and thrown into the breeding pit? Your seed would forever serve our Queen and not your own, you silly male."
"Uhh, things are a little different where I'm from," you struggle as she pins you to the ground with her enormous abdomen. "Males don't-"
"Be quiet," she silences. "You're mine now, and I do not permit you to speak. But rejoice, for I am greedy have decided I will not throw you to the breeding pits. Instead I will have you for myself."
Held tightly in all six of her legs, you can offer no resistence as the smooth chitin of her lower body slides around on your now-growing member. It takes a moment for her to position herself, but before long a coolness brushes against the tip your cock as she slips it inside her hard, almost-rubbery interior.
"And now," her eyes go lidded. "We breed."
Still holding you firmly to he ground, she slowly raises her abdomen and steadily lower it down onto you.
"You may inseminate me now," she sighs happily.
<<print either("Amused but willing","Shrugging","It takes you a moment to realize she expects you do to all the work","")>>, you <<print either("shift your pelvis up and press your cock inside her.","reach down with one hand and slide the tip of your cock across her slit, then slip it inside.","reach around her carpace with both hands and pull her down onto your waiting cock.")>> <<print either("Her eyes widen and she gasps slightly, but does not object as you pull back and thrust again.","Her mouth drops at the unexpected pleasure and she eagerly nods and demands that you do whatever it was you just did again.","Convulsing in pleasure, her entire body shakes and shudders as if it were an inverted vibrator bouncing up and down on you.","Overwhelmed by the sensation, the ant-girl's entire body collapses on top of you, burying your cock balls-deep inside of her as her eyes roll back in her head.")>> With each thrust, you feel her body stretch around you, and with each withdrawal you sense her inner walls squeezing tightly. She's surprisingly cool compared to the hot desert at your back, and her eager cluelessness make it all the more enticing as the two of your approach climax together.
"<<print either("I'm the queen","Coat my eggs!","Better than spilled honey")>>!" she shouts in time with your orgasm, then passes out on top of you.
It takes some time to extract yourself from beneath her bulk, but afte getting to your feet you give her an amused headpat and continue on your way, the sound of her ragged snores lingering as you walk off into the distance.
<<endif>>\
<<elseif $WORLD.datapasser is "not male">>\
@@color:Gold;You have lost to a <<print $Mon.name>>!@@
<hr>\
"Nope, not me," you insist. "Definitely a girl, yep."
"Oh," she seems disappointed. "I had hoped that I might be permitted the joy of having a male for my own pleasure, even if only for but a brief time. It was foolish of me, but as a female yourself surely you can understand."
"Oh, absolutely," you nod, looking around for a way out.
"But since you are merely another female, instead of mating with you until we both collapse in exhausted bliss, I suppose I shall instead simply harvest you of fluids and leave you to die."
"...wait, what?"
<<if _pcboobs > 0>>\
"What did you expect?" she tilts her head and begins removing your clothes "A lone female in another hive's territory, surely you must have known your fate."
Grabbing your boobs in her hands, the ant-girl emotionally opens her mouth and begins milking you.
"Your fluid sacs are soft and well-rounded," she compliments as the sacs on her own chest grow to acommodate her siphoned gains. "Pity they will shrivel up into nothing when I leave you dehydrated in the sand, to die alone. Had we only been closer to the hive I might have dragged you back to serve as a nursemaid for our larva."
"Right," you frown. "Pity we're not doing...that."
Her ministrations grow more forceful as your breasts deflate, her determination to squeeze you dry of your very last drop leaving you flat and deflated while her chest has obviously grown larger. Once she's finished, you feel dizzy and collapse in the sand, your last sight before losing conscoiusness being the ant swieling her her axis, her enlarged breasts bouncing on her chest with the weight of your combined fluids.
<<else>>\
"Surely you must have known your fate," she removes you clothes then stares at your chest, then pokes at it in confusion. "Your fluids sacs are already dry. How are you still standing? To be that empty, you should be dead."
"I'm a different species," you explain, thinking quickly. "My uhh, fluid sac, is between my legs, you see."
"Ahh, of course," she nods, removing your pants and taking a testicle in each hand. "I will now squeeze until your sacs are but flat and empty husks."
"Wait!" you stop her. "It's easier to milk me if you stroke the shaft in the middle there. That's where the, uhh...fluids come out."
"Curious anatomy," she frowns then shrugs. "Very well."
Coming down on her front two knees, she begins stroking your now-slowly-growing cock and opens her mouth to receive your fluids. It takes longer than usual to get in the mood, but she's determined and untiring, and before long you're sporting an erection at full mast, relaxed, and enjoying her ministrations.
"Does it usually take this long?" she frowns. "Milk should come out in little spurts immediately. Are you unwell? I do not wish for milk that is spoiled."
"No, it's all good!" you pant as she strokes you off. "Just keep going, and it should all come out at once, yeah."
Her persistence pays off, and before long you've climaxed into her open and waiting mouth. She seems disappointed with the volume, but you're left with no regrets as you pass out in the sand, watching in amusement as she turns to leave for her hive.
<<endif>>\
<<elseif $WORLD.datapasser is "sort of male">>\
@@color:Gold;You have lost to a <<print $Mon.name>>!@@
<hr>\
"I'm a hermaphrodite," you explain as she blinks in confusion. "I have both male and female parts."
"That...does not make sense," she speaks slowly, her eyebrows knitted together. "Do you lay eggs?"
"No?"
"Then you a drone," she nods sagely. "Come with me and you may serve my hive in the fertilization chamber until you die, as is your duty."
"Umm..." you struggle for a reply. "That's not quite how it works for me."
"What do you mean?" she seems puzzled.
You patiently explain human reproduction to her. She listens attentively as you tell her about everything from live birth to breastfeeding.
"I understand now," she nods. "You are a nymph, and have no idea how any of this works. You need not feel embarassed by it. It is a good story you made up just now. You're very creative for a nymph."
Smiling and patting your head in a way that you can't help but feel is a bit condescending, you watch as the ant-girl leaves you on your back in the sand, turning briefly to wave goodbye to you before disappearing into the distance.
You pass out from heat exhaustion shortly thereafter.
<<elseif (_pcpenis > 0)>>\
<<set _WhichCloser to "none">>\
Curious, the ant-girl walks over your fallen form, her many legs straddling your lower torso. Curious, she leans down and sniffs at you.
"You...are male?" she raises an eyebrow.
<hr>\
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Yes, I'm male" "DefeatAnt">>
<<set $WORLD.datapasser to "yes male">>
<</link>>\
</span>
<span id="KeypTwo">\
<<link "2) Nope, just a girl like you. Yep, definitely." "DefeatAnt">>
<<set $WORLD.datapasser to "not male">>
<</link>>\
</span>
<<if (_pcpussy > 0) or (_pcboobs > 0)>>\
<span id="KeypThree">\
<<link "3) ...sort of?" "DefeatAnt">>
<<set $WORLD.datapasser to "sort of male">>
<</link>>\
</span>
<<endif>>\
<<elseif (_pcpussy > 0)>>\
<<set _r to random(1,2)>>\
<<if _r is 1>>\
"Foolish invader," the ant-girl admonishes you. "You should know better than to hunt in our hive's territory. Your fluids are forfeit to feed my hive."
<<elseif _r is 2>>\
"<<print either("You","Invader","Infidel","Thief")>>!" the ant-glares menacingly at you. "Which hive sent you?"
Unsure how else to respond, you explain that you're not from another hive and that you're from the city of Crescentheart to the north.
"<<print either("Vile intruder!","Foul interloper!","Foolish tresspasser")>> You cannot trick me. We of the <<print either("","","glorious","illustrious")>> <<print either("southern","western","eastern")>> hive know all too well of your <<print either("treachery","misdeeds","attempts to sabotage us")>>! <<print either("Your fluids are now forfeit, and with them, your life.","Your fluids are now forfeit.","How unfortunate for you that will not live to rue this day.")>>
<<endif>>\
<<if _pcboobs > 0>>\
<<print either("Before you can ask what she means,","While you ponder how to respond to that")>> \
<<print either(" she hastily pins your ankles and wrists to the gound with four legs, and begins kneading your breasts with the other two. "," she reaches in to gently cups your breasts in her hands and begins to message them. "," you're taken offguard by her sudden manhandling of your breasts in both hands.")>> \
<<print either("The sensation is unexpectedly pleasant, completely at odds with the scowl on her face as she gently massages your breasts until small droplets of milk begin to drip from them both.","She's a bit too rough for your tastes, but your body reacts all the same and within moments she has your nipples perky and hard, and ready to be milked.","")>>
<<else>>\
Before you can ask what she means, she pins your ankles and wrists to the ground with four legs while sliding the middle pair between your knees and thrusting them apart.
"<<print either("Fool","You should never have come here,","And so, another rival of the hive is defeated","And so it comes to this")>> she <<print either("scowls are you","admonishes","shakes her head in pity")>>. "<<print either("Now you will die.","Now you will be sucked dry.","Take comfort in knowing that after I have drunk you dry, the heat of the desert will at least kill you quickly.")>>
<<endif>>\
<<print either("No longer having it in you to resist","Feeling somewhat less concerned by this than she seems to feel you should")>>, you <<print either("lay back comfortably in the sand","lean into the ant-girl","relax into her")>> as she \
<<if _pcboobs > 0>>\
<<print either("roughly squeezes your breasts, opening her mouth to catch their milky spray.","works your breasts in her hands, milking them of their fluid while catching every drop in her mouth. ","squeezes your tits and opens her mouth to catch their fluids.")>> <<print either("It's not entire pleasant, but you're in no position to protest.","While she's far from gentle, you can't help but be a bit turned on by the firm sensation of being handled like this.","Discontent with the speed of her efforts, she leans in and suckles on you, eliciting fleeting gasps of pleasure from you.")>>
<<print either("While it doesn't her last as long as you'd have preferred, by the time she's finished, you're left with a pair of delated tits but a happy smile.","For the next several minutes she alternately squeezes and sucks on your breasts, left and right together, until nothing is left.","Seemingly misundertsanding your growing moans, the ant-girl looks away briefly as if in remorse for the pain she thinks she's causing you. But she does not relent, continuing her ministations and licking and suckling your nipples all the while, until at last you are finally spent.")>> Curiously, her own chest is noticeably larger now, apparently serving as some sort of convenient fluid storage system.
"<<print either("And now I leave you to die, a dry dessicated husk in the sand","May the desert claim you","Take comfort in knowing that your sacrifice will nourish the many thirsty larva of my hive","Though you are my enemy, I nevetheless thank you for your contribution to our hive")>>," she whispers, then turns and leaves.
<<else>>\
removes your clothes and gives you a puzzled look.
"Your fluids sacs," she frowns at the flatness of your chest. "They're already empty. You have nothing left to drink. So be it. May the desert claim you."
With that, she wanders off, leaving you somewhat disappointed.
<<endif>>\
<<else>>\
<<set $WORLD.datapasser to ["knockout", "insect"]>>\
<<set _WhichCloser to "none">>\
The ant-girl approaches you on the ground and sniffs uncertainly at you.
"You are not a worker," she sniffs. "Nor are you a warrior. Or a breeder. What are you?"
"Uhh...I'm an adventurer?" you offer.
"Is that food?"
"What? No, I'm not food."
The ant-girl continues to sniff at you for a few more moments before she gives up, not knowing what to do with you, and walks off into the desert. Staggering to your feet, you make it about fifty feet before you collapse and pass out unconscious in the sand.
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Wake up several hour later" "Church">>
<<AdvanceTime 480>>
<</link>>\
</span>
<<endif>>\
\
<<if _WhichCloser is "none">>\
<<else>>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","insect"]>>
<<AdvanceTime 480>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if (_pcpussy > 0)>>\
Implement harpy on female
<<elseif (_pcpenis > 0)>>\
Implement harpy on male
<<else>>\
Imlpement harpy on anal
<<endif>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","harpy"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if (_pcpussy > 0)>>\
Implement scorpion on female
<<elseif (_pcpenis > 0)>>\
Implement scorpion on male
<<else>>\
Imlpement scorpion on anal
<<endif>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","scorpion"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "ant vaginal">>\
<<set $PC[$CC][$PCsexACTS].vaginalgiven to $PC[$CC][$PCsexACTS].vaginalgiven + 1>>\
<<set $PC[$CC][$PCsexACTS].semengiven to $PC[$CC][$PCsexACTS].semengiven + $PC[$CC][$PClevel]>>\
The ant-girl lays on the ground, panting from exhaustion as you approach with confidence. Kneeling down beside her, you gently reach out to caress her bruised carapace before tenderly kissing her lips. Her antenna swirl around to face you and she hesitantly returns the kiss with a frown as if confused. Thinking to clear up any possible doubt over your intentions, you brandish your already-engored cock, and motion for her to turn around.
She gives you a momentary look of confusion, followed by realization, then shock.
"I'm not of breeding caste!" she objects, her wide eyes fixated between your legs as her breathing hastens. "I'm not...allowed."
"<<print either("I won't tell your queen if you don't","Sorry, don't care")>>," you <<print either("smile","shrug","pat her nicely on the head","affectionately wrap an arm around her")>>.
<<if random(1,2) is 1>>\
"Really?" she boggles, then nods eagerly and spins around, raising and thrusting the hind portion of her abdomen towards you. Reaching underneath with one hand it takes you a moment to find her entrance, a tiny bit of moist warmth in the middle of a vast, smooth sea of shiny ant chitin.
<<else>>\
"But, the hive..." she trails off, clearly conflicted. A moment later, she sighs and nods, "Alright."
Slowly and tentatively, she turns around and raises her hind quarter. It takes you a moment to find her entrance, but the moment your fingers slid across it she lets loose with a gasp of such shocked pleasure at your touch that hearing it sends shivers down your spine.
<<endif>>\
Placing the tip of your cock just a few inches inside her, the ant-girl gasps and shudders.
<<MaleVirginity "a grateful ant-girl">>\
"I've never..." she whispers, "I never even thought..."
Happy to be the dream she never believed she could have, you grasp her hind quarter in both hands and begin <<print either("enthusiastically thrusting","thrusting gently")>> into her.
"This is such an honor for one of my station," she cries happy tears of joy. "Thank you so much for this."
While she's a little clueless about what to do, her gratitude more than makes up for it, and with a little gentle coaching from you it's not long before she's eagerly pushing back on you with a smile you can feel radiating from her even as she faces away. After you climax, she envelops you with all six of her legs and both arms in a grateful hug.
"Thank you so much," she cries into your chest. "I'll remember you, I'll remember this moment...forever and always."
<<else>>
Error in VictoryAnt: $WORLD.datapasser
<<endif>>\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "harpy sex">>\
<<if $Mon.pussy is true>>\
<<endif>>\
<<elseif $WORLD.datapasser is "harpy licks you">>\
<<elseif $WORLD.datapasser is "harpy boobplay">>\
<<else>>\
Error in harpy sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "scorpion sex">>\
<<if $Mon.pussy is true>>\
<<endif>>\
<<elseif $WORLD.datapasser is "scorpion licks you">>\
<<elseif $WORLD.datapasser is "scorpion boobplay">>\
<<else>>\
Error in scorpion sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if (_pcpussy > 0)>>\
Implement hydra on female
<<elseif (_pcpenis > 0)>>\
Implement hydra on male
<<else>>\
Imlpement hydra on anal
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","hydra"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "hydra cock">>\
<<AdvanceTime 30>>
Curious more than anything, you walk around the hydra to see what he has between his legs. With four legs and multiple necks all of similar width, it takes you a moment to sort out which is which, and to your surprise what you thought for a moment was a neck is in fact a ginormous cock easily as thick as your torso. It's so massive it seems almost impossible to handle, but you're determined not to let this opportunity pass you by without at least giving it a try.
Placing hand on opposite sides, you give it your best to stroke him off, but even with your palms fully open you're barely getting coverage around a quarter of its girth. Fascinating as this experience is, the lack of resposne from the hydra leaves you unconvinced you're really doing much for him. You're not even sure he's conscious. That is, until you feel an unexpected twitch betwen your hands and are suddenly blasted with a firehose worth of sticky, pungent fluid as thick as honey.
It takes a bit of effort to clean the gunk out from your eyes, and it seems to be rapidly congealing to become thicker, as if its intended to form a seal to keep from leaking out from the insides of its recipient. You're stuck cleaning yourself for the next half hour, and you wonder if the smell will ever fully come out of your clothes.
The hydra meanwhile, sleeps through it all, and is still dozing peacefully by the time you finally recover enough to walk away.\
<<else>>\
Error in VictoryHydra: $WORLD.datapasser
<<endif>>\
\
<<ProstXP>>\
\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $Mon.penis is true>>\
<<if _pcboobs > 0>>\
"Hoo boy!" the rat-man eagerly catches you before you fall, jamming his face between your breasts and gleefully motorboating you.
His enthusiasm is flattering, almost, but the way he's dry-humping you through his clothes is a little off-putting. You're a little tempted to help him with that, but right now he seems pretty happy with what he has.
"OH, YES!" he cries, squeezing your tits so hard you can see them squishing out from between his fingers. "These are almost as good as my sisters!"
<<else>>\
"Hoo boy!" the rat-man eagerly catches you before you fall, then looks at your chest in disappointment. "Aww, boobs are my favorite thing!" he whines. "Guess I'll just have to fuck you instead."
<<endif>>\
<<if _pcpussy > 0>>\
Confused about his priorities but too exhausted to protest, you offer no resistence when he pushes you to your knees and sticks his surprisingly normal dick in your mouth. But after only a couple thrusts he then turns you around and pushes you down to your hands and knees, then slides thumb and middle finger into your ass and pussy together while making noises as if taste-tasting wine.
<<if random(1,2) is 1>>\
"Hmm," he thinks out loud. "Pussy it is!"
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Clearly excited, he sits down on his knees next to you and gazers into your eyes with a manic grin.
"Yer my hoss, and I'm yer cowboy!" he giggles, then turns you aroudn and pushes you down onto your hands and knees. "Ride'em cowboy!" he cheers. "Woooo!"
<<else>>\
"Hmm," he thinks out loud. "Ass it is!"
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
Clearly excited for some doggy-style action, the rat-man pulls his fingers out and quickly pops his cock in your asshole and begins pumping in and out, whooping and hollering with glee.
"Ride'em cowboy!" he cheers. "Woooo!"
<<endif>>\
His enthusiasm is contagious, and you soon find yourself pushing back onto his cock with an amused grin.
"That's the spirit!" he applauds, picking up his pace and tracing his fingers up and down your back. "Make me cum!
You do indeed make him cum. <<print either("Twice. ","Three times, in fact.","")>> You don't quite manage to climax yourself, <<if _pcpussy > 0>>but he's a good sport about it and tells you you're a good girl while fingering you to completion.<<else>>but you still feel pretty good about the experience overall.<<endif>>
<<else>>\
Confused about his priorities but too exhausted to protest, you offer no resistence when he pushes you to your knees and sticks his surprisingly normal dick in your mouth. But after only a couple thrusts he then turns you around and pushes you down to your hands and knees, then makes some disappointed noises at what he doesn't fine.
"Awww, no pussy either?" he mopes. "Oh, well. Ass it is I guess."
<<endif>>\
<<else>>\
<<if _pcpenis > 0>>\
<<if random(1,2) is 1>>\
Taking initiative as you fall to the dungeon floor, the rat-girl charges in and slaps you across the face.
"That's for trying to kill me!" she shouts. "You adventurers are all the same. You think it's all fun and games, but have you ever asked yourself what it must be like for us tower monsters? Minding our own business when some random idiot walks by and treats you like a piece of ass and cheap xp?"
"Didn't you attack me?"
"Quiet!" she shouts, mere inches from your face. "I'm going to show you what it's like to be me and have some horny adventure throw themself at you!"
The next thing you know, her tongue has buried inself as far down your throat as it can reach while she frantically grabs your hands and presses them to her chest while she straddles your leg and grinds up and down on you. You pretty quickly get the idea, and freely slide your hands underneath her shirt to squeeze her boobs and roll her already-hard nipples between your fingers.
"Oh fuck, I needed this," she pants, sliding down your torso until her face is at your crotch, removing your pants and gracellessly impaling her face onto your cock while her thighs grind and squeeze against your shins. Gasping at her enthusism as she suctions your cock down to the base of her throat, she spams in reflex but chokes undeterred while reaching out with her tongue to lick your balls. You can barely keep up with her pace, and yet mere seconds later her panties are somehow resting on your face.
Pausing only a moment to wonder how she managed that, you throw caution to the wind and extract your cock from her throat just long enough to collapse onto your back and land with the girl straddling your hips. Clearly pleased with the new arangement, she reaches between her legs to slide your erect cock between her tight pussy lips, then begins bouncing cheerfully up and down on it.
"Go me!" she cheers herself on. "Take that, you foolish adventurer! I'll teach //you// to think you can beat up on a defenseless little rat-kin!"
By her <<print either("third","fourth","fifth")>> climax and your second, your cock has still somehow yet to go soft. Unrelenting in her enjoyment, your vision starts to go dark as she winds up for another round.
<<else>>\
Collapsing onto your back, the rat-girl stands with her legs straddled over you at the knees. Lasciviously running her eyes and down your body while cupping her own breasts in one hand, her wandering eyes at last settle on your own and hold your gaze
"Do you want some of this?" she smiles then looks away bashfull, stroking her free hand down her stomach and between her legs.
"Oh, fuck yes," you feel your erection harden.
"Do you?" she grins in a way that leaves you feeling a bit unsure. "Do you really?"
"Yes?"
"Yay!" she cheers, dropping her skirt to reveal a large pink dildo trapped onto her pelvis then shoving it in your mouth "Suck on my cock, you whore!"
A bit put out by the unexpected turn of events, you wave your hands together in a 'time out' motion while mumbling out garbled objections around the dildo.
"Oh, I'm sorry," she apologizes. "Was this not what you had in mind?"
"No!" you choke the dildo out of your mouth. "I was thinking, you know, sex?"
"...really?" her mouth drops in awe while she nods, wide-eyed in amazed glee. "Yes! Yes, yes, yes!!!"
Whacking the side of your with her strap-on hard enough to knock you over, she pushes your head to the ground and indelicatetely grabs your hips. By this point you're not even surprised when she thrusts her pelvis-dildo up your ass, lubricated by your own saliva. Too tired to object now, you lay your head to the ground, resigned to your fate.
"Oh my god, this is so hot!" she cries out, slapping one hand on your back and increasing her already-frantic pace. "Take my dick, you slut!"
She keeps at it for a while, but you pass out before she finishes.
<<endif>>\
<<else>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived + 1>>\
The rat girl stands triumphantly you, dropping her skirt and revealing a large pink dildo strapped onto her pelvis.
"Playtime!" she giggles, sliding between your legs and tucking your knees into her elbows. Carefully positioning the tip just barely at your pussy lips, she slides up your torso and bends down to nibble playfullt at your ear.
"My brother taught me how to do this," she whisipers. "I think you'll like it."
Your snort of shock quickly turns to a slow inhale as she slides her tongue into your ear and rolls little circles around your clitoris with her thumb. Bringing her hand to her mouth, she smiles into your eyes and slowly slides that same thumb into her mouth, licking it playfully and making a big show of swallowing your juices from it.
"Time for the main event," her eyes glisten, and the strap-on you'd long since forgotton about finally slides into you. Just an inch at first, pause then out. Then an inch and a half, pause...and out. Squirming for penetration, your feel your hips reaching upwards of their own volition, prompting another giggle from the girl.
"Well, if you want it //that// badly, I'll give it to you," she smiles, then pouts. "But you still have to wait."
Unable to contain yourself, you twitch in need as she slowly draws out the penetration to two inches, two and a half...three. Clutching her back with her hands you squeeze her boobs to your face, and still she makes you wait. Four inches, getting better, //five//...by now she's fucking you with a smooth and steady stroke, licking your ear <<if _pcboobs > 0>>and squeezing your boobs in her hands and flicking your nipples<<else>>while holding herself just high enough above you that her nipples bounce and tickle their way across your chest.<<endif>>\
When you finally climax, she simply smiles at you, thrusting her strap-on in and out of you at a steady clip, unmoved by any need to cum for herself and simply pushing in and out without pause until you relax, and even then still pushing.
Eventually she leans down into you, her bright pink cock thrust up to the hilt inside you as she nuzzles into your neck as you drift into a contented sleep.
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived + 1>>\
The rat girl stands triumphantly you, her victory over an adventurer like yourself clearly very satisfying to her as her eyes run eagerly up and down your fallen form. Glancing at her shapely legs and tiny waist, you begin to think her victory won't be so bad. That's when she drops her skirt to reveal a large pink dildo strapped onto her pelvis.
"Wait," you object.
"No!" she grins, flipping you over onto your stomach and lifting your hips to hers with a strength that belies her size. Moments later you feel the smooth rubbery tip poking insistently at your anus.
"Oops!" she laughs. "Forgot to make you suck on it for lubrication. "Oh well!"
With a slow, inexolerable thrust that can't go any faster on your dry hole, she works the dildo into your ass hole.
"Pink looks good on you," she giggles, picking up her pace now that she's decently well inside. "Or I guess, pink looks good //in// you? Something like that."
You're too busy trying to relax and position your hips for minimal friction to object to her phrasing. She takes your silence as submission and slaps a hand down onto your lower back then throws her other hand into the air and starts making whooping noises like a cowgirl.
"Woo, yeah!" she shouts. "That's my hoss! I'm your Gumby and you're my Pokey! I'm your mane gal, so gimme some lovin'!"
The next several minutes before passing out are filled with a littany of bad cowgirl puns delivered with every dildo thrust.
<<endif>>\
<<endif>>\
<<endif>>\
\
<<ProstXP>>\
\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Pass out from exhaustion" "Church">>
<<set $WORLD.datapasser to ["sex","ratkin"]>>
<<AdvanceTime 480>>
<</link>>\
</span><<SimplePic $Mon.pic>>\
@@color:Gold;Sexy times with a defeated <<print $Mon.name>>@@
<<set $WORLD.dialogue to 0>>\
<<set _AllowNormalExit to true>>\
<hr>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if $Mon.pussy is true>>\\
<<set _RatType to "rat-girl">>\
<<else>>\
<<set _RatType to "rat-man">>\
<<endif>>\
\
<<if $WORLD.datapasser is "default Victory Sex">>\
Error/fallthrough result: <<print $WORLD.datapasser>>
<<elseif $WORLD.datapasser is "ratkin ears">>\
<<print either("Amused by the","Curious about","Entranced by")>> \
<<if random(0,1) is 1>><<print _RatType>>'s <<print either("fluffy","cute little")>> ears<<else>>$Mon.hisher ears<<endif>>, you <<print either("reach out and give them a gentle pat.","plant one hand on $Mon.hisher head and give it a pat, leisurely moving your way over to $Mon.hisher ears.","lean in and give them a tentative poke.")>> At first <<print $Mon.heshe>> winces away, but as your transition from simple pats to affectionate scritches, <<if random(0,1) is 1>>soon $Mon.heshe relaxes and leans into you.<<else>>you quickly earn $Mon.hisher trust and $Mon.heshe relaxes.<<endif>>
<<if $Mon.boobs is true>>\
"What's someone as nice as you doing in a tower like this?" $Mon.heshe nuzzles into your chest.
"Scratching your ears?"
"I know that," $Mon.heshe sticks $Mon.hisher tongue out at you. "I'm just saying, if all you wanted was to give a rat some cuddles, we could have skipped all the fighting and gone straight to this.
"Hmm, that's probably true."
Curling up into a little ball $Mon.heshe closes $Mon.hisher eyes and <<print either("makes cute little noises","lets out a happy sigh")>> while you <<print either("continue to give $Mon.himher pats and hugs and scritches","gently stroke her head")>>. Eventually $Mon.heshe falls asleep in your lap, and after carefully extracting yourself you set $Mon.himher on the floor and resume your journey.
<<else>>\
Half expecting <<print $Mon.hisher>> leg to start kicking, you set him on your lap and are pleased to at least see his tail wagging as he smiles warmly into you. Working both hands in his hair, you explore from the base of his ears to his scalp and eventully wrap your arms around $Mon.himher in a warm <<print either("hug","embrace")>>.
"This is nice," $Mon.heshe nuzzles into you with $Mon.hisher nose. Giggling and giving it a boop, you sigh happily back against $Mon.himher and settle in together for a brief nap.
Awakening a short time later by surprise realization that apparently ratkin //purr//, you gently nudge $Mon.himher off of you with one final headpat and ready yourself to resume your journey.
"Best defeat ever," he smiles with yawn, then stretches himself awake and runs off into the tower depths with a wave goodbye.
<<endif>>\
<<elseif $WORLD.datapasser is "ratkin vaginal">>\
<<set _r to random(1,3)>>\
<<set _r to either(1,2)>>\
<<if _r is 1>>\
"<<print either("That's a cute uniform you're wearing. It's Japanese, isn't it?","I love that Japanese schoolgirl look you have going there.","Hey, is that a sailor fuku you'er wearing?")>>"
<<if random(1,2) is 1>>\
"...yes," she <<print either("stammers shyly.","nods, blushing and looking away.","rolls her eyes at you.")>>
<<else>>\
<<print either("She nods, but doesn't look up.","She doesn't speak, but her heads moves up and down slightly.","She looks away, but the blush on her face says yes.")>>
<<endif>>\
<<elseif _r is 2>>\
"<<print either("You're not going hurt me, are you?","","")>>"
The rat-girl cowers to her knees and looks up at you shyly.
implement this path
<<else>>\
Deciding not to stand on ceremony, you approach the girl and gently pat her on the head. Then you whip out your cock and tell her that if she doesn't want it to hurt when you fuck her, she'd better make sure you're wet enough to slide right in.
"Honestly that's a better offer than the last adventurer I met gave me," she shrugs, reaching out for your cock with a shrug and giving it a light stroke before taking it into her mouth. After a couple swallows she nods and gets on her hand and knees. Flipping her miniskirt up onto her back you're surprised to see that she's not wearing any panties. Life in the tower, you suppose.
<<if random(0,1) is 1>>\
"<<print either("I'm ready,","Come get some,","So, you want some of this?","Is that what you want?")>>" she turns her head around <<print either("and shakes her hips at you","wagging her tail at you")>> <<print either(" with a grin"," with eyes half-lidded"," with an eager sigh")>>.
<<else>>\
<<print either("Grabbing her by the hips and pushing her head to the floor","Planting one hand on her back","Feeling the blood pulse through your nethers with every heartbeat")>>, you <<print either("slide your already-erect cock inside","immediately plunge balls-deep into her","pull her back onto your engorged cock as you simultaneously press forward")>><<print either(" and find yourself gasping at the girl's tightness",", prompting her to gasp in a sudden cry of pleasure",", escorted by the girl's pussy muscles involuntarily clenching around you in pleasure"," while the two of you moan together in pleasure")>>.
<<endif>>\
<<endif>>\
<<else>>\
Error in ratkin sex event, unrecognized sex act: <<print $WORLD.datapasser>>
<<endif>>\
<<if _AllowNormalExit is true>>\
<hr>
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" $ReturnFromMenu>>
<<set $DisableMenu to false>>
<</link>>\
</span>
<<endif>>\<<SimplePic $Mon.pic>>\
\
<<set _pcpenis to setup.getbpqty($CC, $BPpenis)>>\
<<set _pcpussy to setup.getbpqty($CC, $BPpussy)>>\
<<set _pcboobs to setup.getbpqty($CC, $BPboobs)>>\
\
<<if ($Mon.penis is true)>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
implement male troll on female character
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
<<set $PC[$CC][$PCsexACTS].semenreceived to $PC[$CC][$PCsexACTS].semenreceived + $Mon.level>>\
implement male troll on male character
<<endif>>\
<<else>>\
<<if _pcpussy > 0>>\
<<set $PC[$CC][$PCsexACTS].vaginalreceived to $PC[$CC][$PCsexACTS].vaginalreceived +1>>\
implement female troll on female character
<<else>>\
<<set $PC[$CC][$PCsexACTS].analreceived to $PC[$CC][$PCsexACTS].analreceived +1>>\
implement female troll on male character
<<endif>>\
<<endif>>\
\
<<ProstXP>>\
\
<span id="KeypSpace">\
<<link "space) Pass out in sheer horror" "Church">>
<<set $WORLD.datapasser to ["sex","troll"]>>
<<AdvanceTime 480>>
<</link>>\
</span><!-- lever -->\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
<<if $DebugMode is true>>\
Lever Debug:
11: <<print $Dungeon[_pz][_px][_py][11]>>
12: <<print $Dungeon[_pz][_px][_py][12]>>
12-0: <<print $Dungeon[_pz][_px][_py][12][0]>>
12-1: <<print $Dungeon[_pz][_px][_py][12][1]>>
<<endif>>\
\
<<if $Dungeon[_pz][_px][_py][11] is "LeverLeftUp">>\
<<RightPic "eventleverup.png">>\
<<ShowLever "LeverLeftUp">>\
<<elseif $Dungeon[_pz][_px][_py][11] is "LeverLeftDown">>\
<<RightPic "eventleverdown.png">>\
<<ShowLever "LeverLeftDown">>\
<<elseif $Dungeon[_pz][_px][_py][11] is "LeverRightUp">>\
<<RightPic "eventleverup.png">>\
<<ShowLever "LeverRightUp">>\
<<elseif $Dungeon[_pz][_px][_py][11] is "LeverRightDown">>\
<<RightPic "eventleverdown.png">>\
<<ShowLever "LeverRightDown">>\
<<else>>\
@@color:Red;Error in lever: unrecognized state: <<print $Dungeon[_pz][_px][_py][11]>>@@
<<endif>>\
<</replace>>\@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) leave" "StoreDaphne">>
<<unset $SelectedItem>>
<</link>>\
</span>
<hr>
\
<<set $SelectedItem to -1>>\
\
@@color:Yellow;Experimental:@@
Wearing equipment with this enchantment will prevent the body part wearing it from being transformed. This is a highly requested feature that may take some time to properly balance and integrate into the game. Feel free to play with it, but be aware that it's probably going to evolve over time.
<hr>
@@color:LightGreen;Selected item@@
<span class="grayb" id="foo">\
<<button "[1000 gold]">>\
<<if $SelectedItem < 0>>\
<<elseif $PC[$CC][$PCcoins] < 1000>>\
<<replace "#Result">>Not enough gold"<</replace>>\
<<else>>\
<<if $PC[$CC][$PCinven][$SelectedItem][3] is 0>>\
<<set $PC[$CC][$PCinven][$SelectedItem][4] to 700>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 1000>>\
<<replace "#capcoins">><<print $PC[$CC][$PCcoins]>><</replace>>\
<<replace "#EnchantInventoryPool">><<EnchanterHelper>><</replace>>\
<<set $SelectedItem to -1>>\
<<replace "#EnchantMe">><</replace>>\
<<set _asd to setup.ChangeButtonClass("foo","grayb")>>
<<replace "#Result">>Success!<</replace>>\
<<else>>\
<<replace "#Result">>Cannot enchant: item is alrady enchanted<</replace>>\
<<endif>>\
<<endif>>\
<</button>>\
</span> <span id="EnchantMe"></span>
<hr>\
<span id="Result"></span>
<hr>
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span>
<span id="EnchantInventoryPool">\
<<EnchanterHelper>>\
</span>\<!-- Pressure Plate -->\
<<set _px to $PC[$CC][$PCx]>>\
<<set _py to $PC[$CC][$PCy]>>\
<<set _pz to $PC[$CC][$PCz]>>\
<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<RightPic "eventplate.jpg">>\
\
<<replace "#eventtext">>\
<<if $DebugMode is true>>\
Pressure plate debug:
11: <<print $Dungeon[_pz][_px][_py][11]>>
12: <<print $Dungeon[_pz][_px][_py][12]>>
<<endif>>\
\
<!-- thisonly works if the first change is to remove a wall and not place one -->\
<<set _StandingOn to $Dungeon[_pz][_px][_py]>>\
<<set _FirstPlateState to _StandingOn[12]>>\
<<set _DunXtoChange to _FirstPlateState[0][0]>>\
<<set _DunYtoChange to _FirstPlateState[0][1]>>\
<<set _ArrayPosToChange to _FirstPlateState[0][2]>>\
<<set _NewValue to 1>>\
<<if $Dungeon[_pz][_DunXtoChange][_DunYtoChange][_ArrayPosToChange] is _NewValue>>\
<!-- plate has already been activated -->\
<<else>>\
<<TogglePressurePlate $Dungeon[_pz][_px][_py][12]>>\
<<endif>>\
<</replace>>\
<<if setup.TypeOf($WORLD.orphanage is "number")>>\
<<else>>\
<<set $WORLD.orphanage to 0>>
<<set $WORLD.children to []>>\
<<endif>>\
\
<<set $WORLD.datapasser to "">>\
\
<<if $WORLD.orphanage is 0>>\
<!-- unlocks -->\
<<if $PC[$CC][$PCSeleneChat][13] is 0>>\
<<set $PC[$CC][$PCSeleneChat][13] to 1>>\
<<endif>>\
<<SimplePic "BurnedOrphanage.jpg">>\
@@color:Gold;Burned out remains of the Crescentheart Orphanage@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSouth">>
<<AdvanceTime 5>>
<</link>>
</span>\
<hr>
<<set _Prerequisites to 0>>\
<<set _Hammer to setup.HasItemA(101)>>\
<<set _PlainwoodPTR to setup.HasItemA(105)>>\
<<set _PlainwoodQty to 0>>\
<<if _PlainwoodPTR > -1>>\
<<set _PlainwoodQty to $PC[$CC][$PCinven][_PlainwoodPTR][2]>>\
<<endif>>\
<<set _HardwoodPTR to setup.HasItemA(120)>>\
<<set _HardwoodQty to 0>>\
<<if _HardwoodPTR > -1>>\
<<set _HardwoodQty to $PC[$CC][$PCinven][_HardwoodPTR][2]>>\
<<endif>>\
<<set _SteelwoodPTR to setup.HasItemA(121)>>\
<<set _SteelwoodQty to 0>>\
<<if _SteelwoodPTR > -1>>\
<<set _SteelwoodQty to $PC[$CC][$PCinven][_SteelwoodPTR][2]>>\
<<endif>>\
\
<<set _AllowUpdate to true>>\
\
The charred remains of Crescentheart's orphanage, this was once a thriving building.
@@color:Gold;To rebuild the orphanage you will need@@
<<if _PlainwoodQty > 199>>\
@@color:LightGreen;<<Bullet>>200 plain wood@@
<<else>>\
@@color:Yellow;<<Bullet>>200 plain wood@@
<<set _AllowUpdate to false>>\
<<endif>>\
<<if _HardwoodQty > 49>>\
@@color:LightGreen;<<Bullet>>50 hard wood@@
<<else>>\
@@color:Yellow;<<Bullet>>50 hard wood@@
<<set _AllowUpdate to false>>\
<<endif>>\
<<if _SteelwoodQty > 9>>\
@@color:LightGreen;<<Bullet>>10 steel wood@@
<<else>>\
@@color:Yellow;<<Bullet>>10 steel wood@@
<<set _AllowUpdate to false>>\
<<endif>>\
\
<<if $PC[$CC][$PCcoins] > 999>>\
@@color:LightGreen;<<Bullet>>1000 gold@@
<<else>>\
@@color:Yellow;<<Bullet>>1000 gold@@
<<set _AllowUpdate to false>>\
<<endif>>\
<<if _Hammer > -1>>\
@@color:LightGreen; * A hammer (have)@@
<<else>>\
@@color:Red;* A hammer@@
<<set _AllowUpdate to false>>\
<<endif>>\
<<set _Hunger to Math.trunc($PC[$CC][$PChunger] / 5)>>\
<<if $PC[$CC][$PChunger] > 249>>\
@@color:LightGreen; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<elseif $PC[$CC][$PChunger] > 300>>\
@@color:Yellow; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<set _AllowUpdate to false>>\
<<else>>\
<<set _AllowUpdate to false>>\
@@color:Red; * Stamina of at least 50% (Currently at <<print _Hunger>>%)
<<set _AllowUpdate to false>>\
<<endif>>\
<<if _AllowUpdate is true>>\
<hr>
<span id="KeypR">\
<<link "r) Rebuild the orphanage" "Orphanage">>
<<set $WORLD.orphanage to 1>>\
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - 1000>>
<<if $PC[$CC][$PCinven][_PlainwoodPTR][2] > 200>>\
<<set $PC[$CC][$PCinven][_PlainwoodPTR][2] to $PC[$CC][$PCinven][_PlainwoodPTR][2] -200>>
<<else>>
<<set $PC[$CC][$PCinven][_PlainwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<if $PC[$CC][$PCinven][_HardwoodPTR][2] > 50>>\
<<set $PC[$CC][$PCinven][_HardwoodPTR][2] to $PC[$CC][$PCinven][_HardwoodPTR][2] -50>>
<<else>>
<<set $PC[$CC][$PCinven][_HardwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<<if $PC[$CC][$PCinven][_SteelwoodPTR][2] > 10>>\
<<set $PC[$CC][$PCinven][_SteelwoodPTR][2] to $PC[$CC][$PCinven][_SteelwoodPTR][2] -10>>
<<else>>
<<set $PC[$CC][$PCinven][_SteelwoodPTR] to [0,0,0,0,0]>>
<<endif>>
<</link>>
</span>\
<<endif>>\
<<elseif ($WORLD.orphanage is 1) or ($WORLD.orphanage is 2)>>\
<<SimplePic "orphanage.jpg">>\
@@color:Gold;Crescentheart Orphanage@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSouth">>
<<AdvanceTime 5>>
<<unset $TEMPBUTTON>>
<</link>>
</span>\
<span id="KeypH">\
<<link "h) toggle help">>
<<if $WORLD.datapasser is "orphanage help">>
<<set $WORLD.datapasser to "">> \
<<replace "#OrphanagePortal">>\
@@color:Gold;Party size limit:@@ <<print setup.GetPartyLimit($CC)>>\
<<link "Toggle join/expel mode" "Orphanage">>\
<<if $TEMPBUTTON is "delete">>\
<<unset $TEMPBUTTON>>\
<<else>>\
<<set $TEMPBUTTON to "delete">>\
<<endif>>\
<</link>>\
<hr>\
<<ShowOrphans>>\
<</replace>>\
<<else>>\
<<set $WORLD.datapasser to "orphanage help">> \
<<replace "#OrphanagePortal">>\
@@color:LightGreen;Orphanage explained@@
The Crescentheart orphanage is a place where the many children of lost combat encounters will eventually end up.
In the current version of the game, only female and hermaphrodite characters may give birth. Monsters do not become pregnant. Only the children of your own characters will appear in the orphanage, not the presumed children of other npc adventurers. So if you want some orphans, get out there and lose some battles! Only vaginal encounters may result in pregnancy, and pregnancy is not gaurunteed. Base chance of pregnancy is 30%, but whatever monster type you give your virginity to will forever gain a +40% chance to impregnate you due to your //eager// remembering of your first time. This bonus is also applies to your first sexual encounter, meaning that you're far more likely to become pregnant the first time you have sex than during subsequent encounters with different monster types. Note that it is not currently possible to be impregnated by monsters who don't yet have a vaginal sex scene.
Orphans may be recruited to join your party, where they serve mostly as meat shields, but may also do small amounts of damage. Party size is limited by one per five points of willpower, plus any relevant perk or class bonuses. Future plans include each monster type gaining a special ability that matches their monster type. Horses might kick, spiders might poison, etc.
* A party member set to attack [Att] will attack enemies, and has a base 10% chance to intercept incoming physical attacks on your behalf
* A party member set to protect [Prot] will attempt to stand in the way of enemy attacks, giving them a base 50% to intercept
* A party member set to hide [Hide] will attempt to intercept enemy attacks, giving them a base 50% to to intercept
* A defeated party member falls [Down], takes no action and will be ignored
* Party members cannot intercept non-physical attacks
<</replace>>\
<<endif>>\
<</link>>
</span>\
<hr>
<span id="OrphanagePortal">\
<<if $WORLD.orphanage is 1>>\
<<set $WORLD.orphanage to 2>>\
<<set $WORLD.orphans to []>>\
<<AdvanceTime 250>>
After a great deal of work you're finally able to sit back and look on the fruit of your labor: a fine multi-story building with an open play area beneath, and many small bedrooms on the floors above. Bedrooms ready to receive the many children produced by the encounters between monsters and adventurers alike.
While you admire your work, a couple adventurers stop by to congratulate you, and befoer long you've solicited a few donations and volunteers to provide food and care for the many children who will surely soon be running playfully through the halls of their new home.
<<AwardAchievement "Lumberjack">>\
<<else>>\
@@color:Gold;Party size limit:@@ <<print setup.GetPartyLimit($CC)>>\
<<link "Toggle join/expel mode" "Orphanage">>\
<<if $TEMPBUTTON is "delete">>\
<<unset $TEMPBUTTON>>\
<<else>>\
<<set $TEMPBUTTON to "delete">>\
<<endif>>\
<</link>>\
<hr>\
<<ShowOrphans>>\
<<endif>>\
</span>\
<<else>>\
Error: unrecognized orphanage state: $WORLD.orphanage
<<endif>>\
<<if $DebugMode is true>>\
<<link "Spawn orphan to orphanage" "Orphanage">>
<<set _CalcedAge to ($WORLD.year * 365) + $WORLD.day>>\
<<set _name to either("Adam","Bob","Charlie","Dan","Edward","Frank","George","Harry")>>\
<<set _morph to either("wolf","horse","spider","tentacle","cow","minotaur","snake")>>\
<<set $WORLD.orphans[$WORLD.orphans.length] to {
name: _name,
state: "alive",
sex: "male",
morph: _morph,
parent: "debug spawn",
origin: "orphan",
age: _CalcedAge,
level: 0,
xp: 0,
hpcur: 1,
hpmax: 1,
stance: "Hide"
}>>
<</link>>
<<endif>>\
<<if setup.TypeOf($WORLD.LegacyVault) is "number">>\
<<else>>\
<<set $WORLD.LegacyVault to 0>>\
<<set $LegacyVault to 8>>\
<<set $STORE[$LegacyVault] to []>>\
<<endif>>\
\
<<set $WORLD.datapasser to "">>\
\
<<if $WORLD.LegacyVault is 0>>\
<<set $WORLD.LegacyVault to 1>>\
<<SimplePic "LegacyVaultRift.jpg">>\
@@color:Gold;Void Rift@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSouth">>
<<AdvanceTime 5>>
<</link>>
</span>\
<hr>
<<set _heshe to either("he","she")>>\
Chaotic waves of force stream from an uncontained void rift in the center of this building. Terrified of being sucked inside, you grab onto a rail and slowly back away only to bump into someone standing behind you.
"Is the Legacy Vault fixed yet?" _heshe asks without much concern. "No? Aww, that's too bad."
Turning, you see a fellow adventurer casually glancing over your shoulder at the magic streaming with such force that your teeth rattle merely being in its presence. Then with no more than a shrug, _heshe turns and walks away.
Whatever this is, apparently it's common knowldege to the townsfolk. Perhaps you could ask around to find out more.
<!-- unlocks -->\
<<if $PC[$CC][$PCDaphneChat][8] is 0>>\
<<set $PC[$CC][$PCDaphneChat][8] to 1>>\
<<endif>>\
<<if $PC[$CC][$PCSeleneChat][12] is 0>>\
<<set $PC[$CC][$PCSeleneChat][12] to 1>>\
<<endif>>\
<<if $PC[$CC][$PCBoltmanChat][5] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][5] to 1>>\
<<endif>>\
\
<<elseif $WORLD.LegacyVault is 1>>\
<!-- retirement fix -->\
<<if $PC[$CC][$PCDaphneChat][8] is 0>>\
<<set $PC[$CC][$PCDaphneChat][8] to 1>>\
<<endif>>\
<<if $PC[$CC][$PCBoltmanChat][5] is 0>>\
<<set $PC[$CC][$PCBoltmanChat][5] to 1>>\
<<endif>>\
<<if $PC[$CC][$PCDaphneChat][9] is 0>>\
<<set $PC[$CC][$PCDaphneChat][9] to 1>>\
<<endif>>\
<!-- -->\
<<SimplePic "LegacyVaultRift.jpg">>\
@@color:Gold;Void Rift@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSouth">>
<<AdvanceTime 5>>
<</link>>
</span>\
<hr>
The energies flowing from the void rift make your teeth vibrate.
<<set _Prerequisites to 0>>\
\
<<if $PC[$CC][$PCDaphneChat][8] is 2>>\
<<set _SoulstonePTR to -1>>\
<<set _LowestOkLevel to 9999>>\
<<for _FindSS to 0; _FindSS < $PC[$CC][$PCinven].length; _FindSS++>>\
<<set _item to $PC[$CC][$PCinven][_FindSS]>>\
<<if (_item[0] > 549) and (_item[0] < 560)>>\
<<if (_item[3] > 0) and (_item[3] < _LowestOkLevel)>>\
<<set _SoulstonePTR to _FindSS>>\
<<set _LowestOkLevel to _item[3]>>\
<<endif>>\
<<endif>>\
<</for>>\
<<if _SoulstonePTR > -1>>\
<<set _Prerequisites to _Prerequisites +1>>\
@@color:LightGreen;<<Bullet>>You have a level 1 (or higher) soulstone to power re-enchanting the Vault@@
<<else>>\
@@color:Yellow;<<Bullet>>Daphne says it will take a gem containing a level 1 soul to power the re-enchanting of the vault. You do not have one.@@
<<endif>>\
<<else>>\
@@color:Red;<<Bullet>>You have not yet uncovered the first clue@@
<<endif>>\
\
<<set _FaeriewoodPTR to setup.HasItemA(122)>>\
<<set _FaeriewoodQty to 0>>\
<<if _FaeriewoodPTR > -1>>\
<<set _FaeriewoodQty to $PC[$CC][$PCinven][_FaeriewoodPTR][2]>>\
<<endif>>\
<<if $PC[$CC][$PCBoltmanChat][5] is 2>>\
<<if _FaeriewoodQty > 29>>\
<<set _Prerequisites to _Prerequisites +1>>\
@@color:LightGreen;<<Bullet>>You have 30 faeriewood to replace the central core@@
<<else>>\
@@color:Yellow;<<Bullet>>Boltman has examined the vault's core, and says that it will take 30 faerie wood to replace it. You do not have 30 faerie wood.@@
<<endif>>\
<<else>>\
@@color:Red;<<Bullet>>You have not yet uncovered the second clue@@
<<endif>>\
\
<<if ($PC[$CC][$PCSeleneChat][12] is 2) or ($PC[$CC][$PCDaphneChat][9] is 2)>>\
@@color:LightGreen;<<Bullet>>You will need to find a wizard to help with the repair@@
<<if $PC[$CC][$PCSeleneChat][14] is 2>>\
<<set _Prerequisites to _Prerequisites +1>>\
@@color:LightGreen;<<Bullet>>Selene the witch will help@@
<<elseif $PC[$CC][$PCSeleneChat][12] is 2>>\
@@color:Yellow;<<Bullet>>Selene the witch has offered to assist the vault's repair for 5000 gold@@
<<else>>\
@@color:Red;<<Bullet>>You have not found a suitable candidate here in town@@
<<endif>>\
<<if $PC[$CC][$PCDaphneChat][9] is 2>>\
<<if $PC[$CC][$PCAzaxChat][0] is 2>>\
<<set _Prerequisites to _Prerequisites +1>>\
@@color:LightGreen;<<Bullet>>Azax the wizard will help@@
<<else>>\
@@color:Yellow;<<Bullet>>Daphne suggested speaking to Azax at the College of Magic, but you haven't spoken to him yet@@
<<endif>>\
<<else>>\
@@color:Red; <<Bullet>>You have not found any other candidates@@
<<endif>>\
<<else>>\
@@color:Red;<<Bullet>>You have not yet uncovered the third clue@@
<<endif>>\
<<if _Prerequisites > 2>>\
<hr>
<span id="KeypSpace">\
<<link "V) Repair the Legacy Vault" "LegacyVault">>
<<set $WORLD.LegacyVault to 2>>\
<<set _throwaway to setup.RemoveOneItemFromInv($CC, _SoulstonePTR)>>
<<if $PC[$CC][$PCinven][_FaeriewoodPTR][2] > 30>>\
<<set $PC[$CC][$PCinven][_FaeriewoodPTR][2] to $PC[$CC][$PCinven][_FaeriewoodPTR][2] -30>>
<<else>>
<<set $PC[$CC][$PCinven][_FaeriewoodPTR] to [0,0,0,0,0]>>
<<endif>>
<</link>>
</span>\
<<endif>>\
<<elseif $WORLD.LegacyVault is 2>>\
<<set $WORLD.LegacyVault to 3>>\
<<SimplePic "LegacyVault.jpg">>\
@@color:Gold;The Legacy Vault, restored@@
<hr>
<<if ($PC[$CC][$PCAzaxChat][0] is 2) and ($PC[$CC][$PCSeleneChat][13] is 2)>>\
@@color:Orange;Azax>>@@: "Oh, hmm," Azax pokes at the gaping hole in reality with his staff. "This doesn't look so good."
@@color:Red;Selene@@: "I wouldn't get to close to that if I were you. Not unless you want a haircut halfway to your lungs."
@@color:Orange;Azax>>@@: "And who might you be? My assistent for this little venture, I'm guessing?"
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Azax, meet Selene, the...uhh, local witch," you introduce the two. "Selene, this is Azax. I found him at the College of Magic. Said he could help."
@@color:Orange;Azax>>@@: "Charmed, my lady," he kisses her hand, to her amusement.
@@color:Red;Selene@@: "I have to admit," she giggles. "It's nice to have somebody not threatening to kill me for once."
@@color:Orange;Azax>>@@: "Goodness!" Azax looks apalled. "Whatever reason could anyone have to harm such a charming lady as yourself?"
@@color:Red;Selene@@: "Oh. Well, umm..."
You interrupt the awkward silence with a reminder that the two have a job to do. After a shrug, they begin casting what to your eyes seems an extraordinarily complicated spell. But it only takes a moment before the vibrations from the vault subside and you teeth stop chattering.
<<elseif ($PC[$CC][$PCSeleneChat][14] is 2)>>\
@@color:LightGreen;Daphne@@: "Oh," Daphne frowns. "It's you."
@@color:Red;Selene@@: "Well, don't be so thrilled about it," Selene rolls her eyes. "Can't say I'm surprised to see you here though. I bet a hole every adventurer stuffs his things into makes you feel right at home."
@@color:LightGreen;Daphne@@: "At least I get some, dear," smiles back. "And how do you spend your nights, living in that broken-down hole in the wall you call a home? How lonely does it get, I wonder."
Selene snarls and takes a fighting pose as flames engulf her clenched fists.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Ladies, please!" you interrupt. "Can't we set aside our differences long enough to take care of business?"
@@color:Red;Selene@@: "If I'd known the green bimbo would be here, I'd have asked for more money."
@@color:LightGreen;Daphne@@: "He paid you?" Daphne feigns shock. "And here I thought you'd be the one paying for a little hole-stuffing. Goodness knows you couldn't get it any other way."
@@color:Red;Selene@@: "Let's just get this over with," Selene grits her teeth.
The spell itself takes only a few minutes.
<<else>>\
@@color:Orange;Azax@@: "Daphne!" Axaz beams with delight. "I'd hoped I'd run into you while I was here."
@@color:LightGreen;Daphne@@: "It's good to see you too," Daphne smiles as he delivers kisses and and down her forearm.
@@color:Green;<<print $PC[$CC][$PCname]>>@@: "Not to interrupt the reunion, but I don't suppose we could get this statrted? It's unpleasant even being in the same room as that thing."
@@color:LightGreen;Daphne@@: "Mmmm...and here I was rather wondering what sort of naughty uses we might find for those those vibrations. But, I suppose if you're not into threesomes," she shrugs. "Shall we get started, then?"
The spell itself takes only a few minutes, leaving you staring at a glowing, hovering blue box as the two wizards leave, arm in arm.
<<endif>>\
<<AwardAchievement "Lumberjack">>\
<<AwardAchievement "Vault">>\
<hr>\
@@color:Gold;Options@@
<span id="KeypSpace">\
<<link "space) Continue" "LegacyVault">>
<</link>>
</span>\
<<elseif $WORLD.LegacyVault is 3>>\
<<SimplePic "LegacyVault.jpg">>\
<<AwardAchievement "Vault">>\
@@color:Gold;Legacy Vault@@
<span id="KeypSpace">\
<<link "space) Leave" "TownSouth">>
<<AdvanceTime 5>>
<</link>>
</span>\
<<if setup.PlayerHasPerk("Vault")>>\
<<if ($STORE[$LegacyVault].length > 0) or ($WORLD.VaultGold > 0)>>\
<span id="KeypOne">\
<<link "1) Add contents of Vault to inventory" "LegacyVault">>
<<if $WORLD.VaultGold > 0>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] + $WORLD.VaultGold>>\
<<set $WORLD.VaultGold to 0>>\
<<endif>>\
<<set $WORLD.VaultCoins to 0>>\
<<for _i to 0; _i < $STORE[$LegacyVault].length; _i++>>\
<<set _item to clone($STORE[$LegacyVault][_i])>>\
<<if _item[0] > 0>>\
<<set _throwaway to setup.GiveItem($CC, _item)>>
<<endif>>\
<</for>>\
<<set $STORE[$LegacyVault] to []>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot access vault - Required Vault perk
<<endif>>\
<span id="KeypH">\
<<link "h) help toggle">>
<<if $WORLD.datapasser is "vault help">>
<<set $WORLD.datapasser to "">>
<<replace "#VaultPortal">><<ShowLegacyVault>><</replace>>
<<else>>\
<<set $WORLD.datapasser to "vault help">>
<<replace "#VaultPortal">>\
@@color:LightGreen;Legacy Vault explained@@
The Legacy Vault is a quality of life feature that allows players to quickly transfer entire inventories between characters without needing to manually juggle individual pieces of gear.
<<Bullet>>Building the vault unlocks the Vault perk.
<<Bullet>>Any character with the vault perk will have the option, on retirement, to have all of their equipment, their inventory, and their gold transferred into the Legacy Vault. If the Vault is empty, this will happen automatically without prompting. If the Vault is already full, however, the process is @@color:Orange;NOT ADDITIVE@@, and anything already in the vault from prior retirements will be overwritten and lost. As such, you'll be reminded of this and asked whether or not you really want to proceed.
<<Bullet>>Any character with the Vault perk may, with a single button click, transfer everything currently in the vault to their inventory. This process @@color:AQUA;IS@@ additive, and you need not worry about emptying out a character's inventory before making a withdrawal
<<Bullet>>This process @@color:Aqua;MAY@@ be used to transfer gear between characters in different character slots.
<</replace>>
<<endif>>
<</link>>
</span>\
<hr>
<span id="VaultPortal"><<ShowLegacyVault>></span>\
<<else>>\
Error: unrecognized LegacyVault state: $WORLD.LegacyVault
<<endif>>\
<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>
<hr>
<<set _whichmon to $PC[$CC][$PCpregnant][1]>>\
<<set _Blurb to "You have given birth!">>\
<<if _whichmon is "goblin">>\
<<set _Pic to "BabyGoblin.png">>\
<<set _Blurb to "You have given birth to a baby goblin!">>\
<<elseif _whichmon is "slime">>\
<<set _Pic to "BabySlime.png">>\
<<set _Blurb to "You have given birth to a slime monster!">>\
<<elseif _whichmon is "bunny-morph">>\
<<set _Pic to "BabyBunny.png">>\
<<set _Blurb to "You have given birth to a baby bunny-morph!">>\
<<elseif _whichmon is "cat-morph">>\
<<set _Pic to "BabyKitten.png">>\
<<set _Blurb to "You have given birth to a baby cat-morph!">>\
<<elseif _whichmon is "fox-morph">>\
<<set _Pic to "BabyFox.png">>\
<<set _Blurb to "You have given birth to a baby fox-morph!">>\
<<elseif _whichmon is "wolf-morph">>\
<<set _Pic to "BabyWolf.png">>\
<<set _Blurb to "You have given birth to a baby wolf-morph!">>\
<<elseif _whichmon is "wolf">>\
<<set _Pic to "BabyWolf.png">>\
<<set _Blurb to "You have given birth to a baby wolf!">>\
<<elseif _whichmon is "horse">>\
<<set _Pic to "BabyHorse.png">>\
<<set _Blurb to "You have given birth to a baby horse!">>\
<<elseif _whichmon is "cow">>\
<<set _Pic to "">>\
<<set _Blurb to "You have given birth to a baby cow!">>\
<<elseif _whichmon is "snake">>\
<<set _Pic to "BabySnake.png">>\
<<set _Blurb to "You have given birth to a snake!">>\
<<elseif _whichmon is "ant">>\
<<set _Pic to "BabyAnt.png">>\
<<set _Blurb to "You have given birth to an ant!">>\
<<elseif _whichmon is "scorpion">>\
<<set _Pic to "BabyScorpion.png">>\
<<set _Blurb to "You have given birth to a scorpion!">>\
<<elseif _whichmon is "harpy">>\
<<set _Pic to "BabyHarpy.png">>\
<<set _Blurb to "You have given birth to a harpy!">>\
<<elseif _whichmon is "human">>\
<<set _Pic to "BabyHuman.png">>\
<<set _Blurb to "You have given birth!">>\
<<elseif _whichmon is "minotaur">>\
<<set _Pic to "BabyMinotaur.png">>\
<<set _Blurb to "You have given birth to a minotaur!">>\
<<elseif _whichmon is "spider">>\
<<set _Pic to "BabySpider.png">>\
<<set _Blurb to "You have given birth to a baby spider!">>\
<<elseif _whichmon is "naga">>\
<<set _Pic to "BabyNaga.png">>\
<<set _Blurb to "You have given birth to a naga!">>\
<<elseif _whichmon is "hellhound">>\
<<set _Pic to "BabyHellhound.png">>\
<<set _Blurb to "You have given birth to a hellhound!">>\
<<elseif _whichmon is "troll">>\
<<set _Pic to "BabyTroll.png">>\
<<set _Blurb to "You have given birth to a troll!">>\
<<elseif _whichmon is "ratkin">>\
<<set _Pic to "BabyRatkin.png">>\
<<set _Blurb to "You have given birth to a rat-morph!">>\
<<elseif _whichmon is "hydra">>\
<<set _Pic to "BabyHydra.png">>\
<<set _Blurb to "You have given birth to a baby hydra!">>\
<<elseif _whichmon is "drider">>\
<<set _Pic to "BabyDrider.png">>\
<<set _Blurb to "You have given birth to a drider!">>\
<<elseif _whichmon is "demon">>\
<<set _Pic to "BabyDemon.png">>\
<<set _Blurb to "You have given birth to a demon!">>\
<<elseif _whichmon is "tentacle">>\
<<set _Pic to "BabyTentacle.png">>\
<<set _Blurb to "You have given birth to a tentacle monster!">>\
<<else>>\
<<set _Pic to "BabyHuman.png">>\
<<set _Blurb to "@@color:Red;Error in birth. Unrecognized monster. Monster reported was:@@ (" + _whichmon + ")">>\
<<set _whichmon to "human">>\
<<endif>>\
\
<<set _Pic to $ImgPath + _Pic>>\
<div id="birth-img"><img @src="_Pic"/></div>\
\
\
<<set $PC[$CC][$PChunger] to 0>>\
<<print _Blurb>>
\
<<AwardAchievement "Fertile">>\
\
<<set $PC[$CC][$PCpregnant] to [0, "", -1, -1, -1, -1]>>\
<<set $PC[$CC][$PCsexACTS].birthed to $PC[$CC][$PCsexACTS].birthed +1>>\
<<if $PC[$CC][$PCsexACTS].birthed > 2>>\
<<AwardAchievement "Breeder">>\
<<endif>>\
\
As you go through giving birth, your body experiences strong and intense sensations. Each contraction brings you closer to the moment when everything changes. With every breath, you find the strength to face the challenge. And then, in the midst of it all, you bring a new life into the world: a clear reminder of your strength and the incredible miracle of birth.
<<if $WORLD.orphanage > 0>>\
<<set _ChildSex to either("male","female")>>\
<<set _HisHer to "his">>\
<<set _HimHer to "him">>\
<<if _ChildSex is "female">>\
<<set _HisHer to "her">>\
<<set _HimHer to "her">>\
<<endif>>\
<br>Sensing that _HisHer mother is an important adventurer, the child gives you an appreciative hugs for bringing _HimHer into the world, then wanders off towards Crescentheart's orphanage, turning briefly to give you a bright happy smile before finally leaving your field of view.
<<set $WORLD.orphans[$WORLD.orphans.length] to {
name: "Baby " + _whichmon,
sex: _ChildSex,
morph: _whichmon,
parent: $PC[$CC][$PCname],
age: 0,
level: 0,
xp: 0,
hpcur: 1,
hpmax: 1,
stance: "Hide"
}>>\
<<else>>\
<br>With nowhere to go, the child wanders off on its own. Perhaps in the future you could build more accomodating facilities.
<<endif>>\
<<widget "ShowStatsMain">>\
<<set _job to setup.PtrToClass($PC[$CC][$PCclass])>>\
\
<<UpdateMorphs>>\
<table>\
<tr >\
<td style="vertical-align: top;border: 20px solid #111111;">\
\
<<set _p to $AvatarPath + $PC[$CC][$PCavatar][0] + $PC[$CC][$PCavatar][1] +".jpg">>\
<img @src="_p" style="width:200px">
<<if $DebugMode is true>>\
<<button "Customize">>
<<script>>
Dialog.setup("Avatar designer");
Dialog.wiki(Story.get("Designer").processText());
Dialog.open();
<</script>>
<</button>>
<<endif>>\
<hr>\
@@color:Gold;<<print $PC[$CC][$PCname]>>@@
<<set _job to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<print $PC[$CC][$PCsex]>> <<print $PC[$CC][$PCmorph]>> _job
<<set _lev to $PC[$CC][$PClevel]>>\
<<set _xp to $PC[$CC][$PCxp]>>\
<<set _xpneed to setup.XpNeeded($PC[$CC][$PClevel])>>\
Level: _lev, _xp/_xpneed experience
<hr>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
@@color:Gold;Attributes@@ <span id="unspentpoints">Available points: <<print $PC[$CC][$PCunspentPoints]>></span>
<<button "[+]">>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCstr] to $PC[$CC][$PCstr] + 1>>\
<<replace "#unspentpoints">>Available points: <<print $PC[$CC][$PCunspentPoints]>><</replace>>
<<replace "#str">><<print $PC[$CC][$PCstr]>> (<<DescribeStat $PCstr>>)<</replace>>
<<StatsScreenAchievementCheck>>\
<<endif>>\
<</button>> @@color:LightGreen;Strength :@@ <span id="str"><<print $PC[$CC][$PCstr]>> (<<DescribeStat $PCstr>>)</span>
<<button "[+]">>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCdex] to $PC[$CC][$PCdex] + 1>>\
<<replace "#unspentpoints">>Available points: <<print $PC[$CC][$PCunspentPoints]>><</replace>>
<<replace "#dex">><<print $PC[$CC][$PCdex]>> (<<DescribeStat $PCdex>>)<</replace>>
<<StatsScreenAchievementCheck>>\
<<endif>>\
<</button>> @@color:LightGreen;Dexerity :@@ <span id="dex"><<print $PC[$CC][$PCdex]>> (<<DescribeStat $PCdex>>)</span>
<<button "[+]">>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCcon] to $PC[$CC][$PCcon] + 1>>\
<<set $PC[$CC][$PChpcur] to $PC[$CC][$PChpcur] + $PC[$CC][$PClevel]>>\
<<set $PC[$CC][$PChpmax] to $PC[$CC][$PChpmax] + $PC[$CC][$PClevel]>>\
<<run Health2($PC[$CC][$PChpcur], $PC[$CC][$PChpmax], "hzhealthbar", true)>>\
<<replace "#unspentpoints">>Available points: <<print $PC[$CC][$PCunspentPoints]>><</replace>>
<<replace "#con">><<print $PC[$CC][$PCcon]>> (<<DescribeStat $PCcon>>)<</replace>>
<<StatsScreenAchievementCheck>>\
<<endif>>\
<</button>> @@color:LightGreen;Toughness :@@ <span id="con"><<print $PC[$CC][$PCcon]>> (<<DescribeStat $PCcon>>)</span>
<<button "[+]">>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCint] to $PC[$CC][$PCint] + 1>>\
<<set $PC[$CC][$PCmanacur] to $PC[$CC][$PCmanacur] + 1>>\
<<set $PC[$CC][$PCmanamax] to $PC[$CC][$PCmanamax] + 1>>\
<<replace "#unspentpoints">>Available points: <<print $PC[$CC][$PCunspentPoints]>><</replace>>
<<replace "#int">><<print $PC[$CC][$PCint]>> (<<DescribeStat $PCint>>)<</replace>>
<<StatsScreenAchievementCheck>>\
<<endif>>\
<</button>> @@color:LightGreen;Intellect :@@ <span id="int"><<print $PC[$CC][$PCint]>> (<<DescribeStat $PCint>>)</span>
<<button "[+]">>\
<<if $PC[$CC][$PCunspentPoints] > 0>>\
<<set $PC[$CC][$PCunspentPoints] to $PC[$CC][$PCunspentPoints] - 1>>\
<<set $PC[$CC][$PCwil] to $PC[$CC][$PCwil] + 1>>\
<<set $PC[$CC][$PChornycur] to $PC[$CC][$PChornycur] + 10>>\
<<set $PC[$CC][$PChornymax] to $PC[$CC][$PChornymax] + 10>>\
<<run Health2($PC[$CC][$PChornycur], $PC[$CC][$PChornymax], "hzhornybar", true)>>\
<<replace "#unspentpoints">>Available points: <<print $PC[$CC][$PCunspentPoints]>><</replace>>
<<replace "#wil">><<print $PC[$CC][$PCwil]>> (<<DescribeStat $PCwil>>)<</replace>>
<<StatsScreenAchievementCheck>>\
<<endif>>\
<</button>> @@color:LightGreen;Willpower :@@ <span id="wil"><<print $PC[$CC][$PCwil]>> (<<DescribeStat $PCwil>>)</span>
<<else>>\
@@color:Gold;Attributes@@
@@color:LightGreen;Strength :@@ <<print $PC[$CC][$PCstr]>> (<<DescribeStat $PCstr>>)
@@color:LightGreen;Dexterity:@@ <<print $PC[$CC][$PCdex]>> (<<DescribeStat $PCdex>>)
@@color:LightGreen;Toughness:@@ <<print $PC[$CC][$PCcon]>> (<<DescribeStat $PCcon>>)
@@color:LightGreen;Intellect:@@ <<print $PC[$CC][$PCint]>> (<<DescribeStat $PCint>>)
@@color:LightGreen;Willpower:@@ <<print $PC[$CC][$PCwil]>> (<<DescribeStat $PCwil>>)
<<endif>>\
<hr>\
@@color:Gold;Perks@@
<<if $PC[$CC][$PCperks].length <1>>\
None
<<else>>\
<<for _i to 0; _i < $PC[$CC][$PCperks].length; _i++>>\
[<<print $PC[$CC][$PCperks][_i]>>] \
<</for>>
<<endif>>
<span id="statsinfo"></span>\
\
</td>\
<td style="vertical-align: top;border: 8px solid #111111;">\
\
<<set _CurrentClass to setup.PtrToClass($PC[$CC][$PCclass])>>\
\
<<set _BestPeasant to setup.AchievementHandler("Best Peasant", "HAS?", -1)>>\
<<set _BestLumberjack to setup.AchievementHandler("Best Lumberjack", "HAS?", -1)>>\
<<set _BestBarbarian to setup.AchievementHandler("Best Barbarian", "HAS?", -1)>>\
<<set _BestMonk to setup.AchievementHandler("Best Monk", "HAS?", -1)>>\
<<set _BestPaladin to setup.AchievementHandler("Best Paladin", "HAS?", -1)>>\
<<set _BestWarrior to setup.AchievementHandler("Best Warrior", "HAS?", -1)>>\
<<set _BestProstitute to setup.AchievementHandler("Best Prostitute", "HAS?", -1)>>\
<<set _BestGuardian to setup.AchievementHandler("Best Guardian", "HAS?", -1)>>\
\
<<set _EnchantBonuses to setup.GetEnchantBonuses($CC)>>\
\
<<set _InvCount to setup.GetInvCount($CC)>>\
<<set _InvLimit to setup.GetCarryLimit()>>\
<<set _Encumbered to _InvLimit - _InvCount>>\
\
@@color:Gold;Weapon attacks@@
To-hit bonus from dexterity: <<FormatPosNeg $PC[$CC][$PCtohit] "%">>
<<if $PC[$CC][$PCmorphBONI].th > 0>>\
To-hit bonus from morphs: <<FormatPosNeg $PC[$CC][$PCmorphBONI].th "%">>
<<endif>>\
<<if _Encumbered < 0>>\
Encumbered: @@color:Red;<<print _Encumbered>> to hit@@
<<endif>>\
<<if setup.GetEffect("rage") > 0>>\
To-hit bonus from rage: <<FormatPosNeg 50 "%">>
<<endif>>\
<<if _EnchantBonuses.Accuracy > 0>>\
To-hit bonus from enchants: @@color:LightGreen;+<<print _EnchantBonuses.Accuracy>>%@@
<<endif>>\
<<set _str_mod to $PC[$CC][$PCstr] -10>>\
<<if _CurrentClass is "warrior">>\
Warrior class bonus: @@color:LightGreen;+<<print $PC[$CC][$PClevel] * 10>>%@@
<<endif>>\
<<if _BestWarrior > 0>>\
Best Warrior to-hit bonus: @@color:LightGreen;+<<print _BestWarrior * 5>>%@@
<<endif>>\
<<if _BestLumberjack > 0>>\
Best Lumberjack axe bonus: @@color:LightGreen;+<<print _BestLumberjack * 5>>%@@
<<endif>>\
<<if _CurrentClass is "lumberjack">>\
+<<print $PC[$CC][$PClevel]>> axe damage from lumberjack class bonus
<<endif>>\
Damage from strength: <<FormatPosNeg _str_mod>>
<<if _BestPaladin > 0>>\
Best Paladin damage bonus: @@color:LightGreen;+<<print _BestPaladin>>@@
<<endif>>\
@@color:Gold;Body attacks@@
To-hit bonus from dexterity: <<FormatPosNeg $PC[$CC][$PCtohit] "%">>
<<set _THFM to $PC[$CC][$PCmorphBONI].th + $PC[$CC][$PCmorphBONI].bodyth>>\
<<if setup.GetEffect("rage") > 0>>\
To-hit bonus from rage: <<FormatPosNeg 50 "%">>
<<endif>>\
<<if _Encumbered < 0>>\
Encumbered: @@color:Red;<<print _Encumbered>> to hit@@
<<endif>>\
To-hit bonus from morphs: <<FormatPosNeg _THFM "%">>
<<if _EnchantBonuses.Accuracy > 0>>\
To-hit bonus from enchants: @@color:LightGreen;+<<print _EnchantBonuses.Accuracy>>%@@
<<endif>>\
<<if _BestBarbarian > 0>>\
Best barbarian to-hit bonus: @@color:LightGreen;+<<print _BestBarbarian * 5>>@@
<<endif>>\
<<set _str_mod to $PC[$CC][$PCstr] -10>>\
Damage from strength: <<FormatPosNeg _str_mod>>
Damage from morphs: <<FormatPosNeg $PC[$CC][$PCmorphBONI].bodydam>>
<<if _CurrentClass is "barbarian">>\
Barbarian damage bonus: @@color:LightGreen;+<<print $PC[$CC][$PClevel]>>@@
<<endif>>\
<<UpdateACandFlirts>>\
<<set _AcTotal to 0>>\
<<for _AcCycle to 0; _AcCycle < $PC[$CC][$PCac].length; _AcCycle++>>\
<<set _AcTotal to _AcTotal + $PC[$CC][$PCac][_AcCycle]>>\
<<if $DebugMode is true>>\
Debug: Source _AcCycle is: <<print $PC[$CC][$PCac][_AcCycle]>>
<<endif>>\
<</for>>\
@@color:Gold;Defense@@
Defense from armor: <<FormatPosNeg $PC[$CC][$PCac][1] "%">>
Defense from stats: <<FormatPosNeg $PC[$CC][$PCac][0] "%">>
Defense from morphs: <<FormatPosNeg $PC[$CC][$PCac][2] "%">>
<<if $PC[$CC][$PCac][4] > 0>>\
Defense from Best Monk: <<FormatPosNeg $PC[$CC][$PCac][4] "%">>
<<endif>>\
<<if $PC[$CC][$PCac][8] > 0>>\
Defense from Best Guardian: <<FormatPosNeg $PC[$CC][$PCac][8] "%">>
<<endif>>\
<<if $PC[$CC][$PCac][3] > 0>>\
Defense from magic: <<FormatPosNeg $PC[$CC][$PCac][3] "%">>
<<endif>>\
<<if $PC[$CC][$PCac][5] neq 0>>\
Defense from potions: <<FormatPosNeg $PC[$CC][$PCac][5] "%">>
<<endif>>\
<<if $PC[$CC][$PCac][6] > 0>>\
Defense from enchants: <<FormatPosNeg $PC[$CC][$PCac][6] "%">>
<<endif>>\
<<if $PC[$CC][$PCac][7] > 0>>\
Unarmored monk bonus: <<FormatPosNeg $PC[$CC][$PCac][7] "%">>
<<endif>>\
<<if _Encumbered < 0>>\
Encumbered: @@color:Red;<<print _Encumbered>> to defense@@
<<endif>>\
Total melee defense: <<FormatPosNeg _AcTotal "%">>
Damage absorption: <<GetPlayerAbsorption "show">>\
<<Recalc>>\
@@color:Gold;Maximum Health@@
(Level * toughness) = <<print $PC[$CC][$PClevel]>> * <<print $PC[$CC][$PCcon]>> = <<print $PC[$CC][$PClevel] * $PC[$CC][$PCcon]>>
<<if $PC[$CC][$PCmorphQTY].wolf > 0>>\
+<<print $PC[$CC][$PCmorphQTY].wolf>> from wolf morphs
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].horse > 0>>\
+<<print $PC[$CC][$PCmorphQTY].horse * 2>> from horse morphs
<<endif>>\
<<if $PC[$CC][$PCmorphQTY].cow > 0>>\
+<<print $PC[$CC][$PCmorphQTY].cow * 2>> from cow morphs
<<endif>>\
<<if _EnchantBonuses.Health > 0>>\
+<<print _EnchantBonuses.Health>> from enchantments
<<endif>>\
<<if _CurrentClass is "peasant">>\
+<<print $PC[$CC][$PClevel]>> from peasant class bonus
<<endif>>\
<<if _BestPeasant > 0>>\
+<<print _BestPeasant>> from Best Peasant level
<<endif>>\
<<if _BestGuardian > 0>>\
+<<print _BestGuardian * 2>> from Best Guardian level
<<endif>>\
Total maximum health: <<print $PC[$CC][$PChpmax]>>
@@color:Gold;Flirt power@@
<<set _gfp to setup.GetFlirtPower("none")>>\
<<if _gfp[1] > 0>>\
@@color:LightGreen;From penis:@@ <<print _gfp[1]>>
<<endif>>\
<<if _gfp[2] > 0>>\
@@color:LightGreen;From boobs:@@ <<print _gfp[2]>>
<<endif>>\
<<if _gfp[3] > 0>>\
@@color:LightGreen;From pussy:@@ <<print _gfp[3]>>
<<endif>>\
<<if $PC[$CC][$PCFlirtFromEquip] neq 0>>\
@@color:LightGreen;From equipment:@@ <<print $PC[$CC][$PCFlirtFromEquip]>>
<<endif>>\
<<if $PC[$CC][$PCmorphBONI].flirtth > 0>>\
@@color:LightGreen;From morphs:@@ <<print $PC[$CC][$PCmorphBONI].flirtth>>
<<endif>>\
<<if _BestProstitute > 0>>\
@@color:LightGreen;Best Prostitute:@@ +<<print _BestProstitute>>
<<endif>>\
\
<<set _tvM to (_gfp[2] * 10) + (_gfp[3] * 10) + ($PC[$CC][$PCFlirtFromEquip] * 10) + ($PC[$CC][$PCmorphBONI].flirtth * 10) + (_BestProstitute * 10)>>\
<<set _tvF to (_gfp[1] * 10) + ($PC[$CC][$PCFlirtFromEquip] * 10) + ($PC[$CC][$PCmorphBONI].flirtth * 10) + (_BestProstitute * 10)>>\
<<set _tvH to (_gfp[1] * 10) + (_gfp[2] * 10) + (_gfp[3] * 10) + ($PC[$CC][$PCFlirtFromEquip] * 10) + ($PC[$CC][$PCmorphBONI].flirtth * 10) + (_BestProstitute * 10)>>\
<<set _tvM to Math.trunc(_tvM) / 10>>\
<<set _tvF to Math.trunc(_tvF) / 10>>\
<<set _tvH to Math.trunc(_tvH) / 10>>\
@@color:LightGreen;Total vs males:@@ _tvM
@@color:LightGreen;Total vs females:@@ _tvF
@@color:LightGreen;Total vs herms:@@ _tvH
<<if $PC[$CC][$PCmorphBONI].flirtdam > 0>>\
@@color:LightGreen;Damage from morphs:@@ +<<print $PC[$CC][$PCmorphBONI].flirtdam>>
<<endif>>\
<<if _job is "prostitute">>\
@@color:LightGreen;Damage from class level:@@ +<<print $PC[$CC][$PClevel]>>
<<endif>>\
\
</td>\
<td style="vertical-align: top;border: 8px solid #111111;">\
\
@@color:Gold;Sex stats@@
<<set _vstats to 0>>\
<<if $PC[$CC][$PCsexACTS].malevirgin[1] is true>>\
<<else>>\
<<set _vstats to 1>>\
<<endif>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] is true>>\
<<else>>\
<<set _vstats to _vstats +1>>\
<<endif>>\
<<if $PC[$CC][$PCsexACTS].birthed > 0>>\
You have birthed $PC[$CC][$PCsexACTS].birthed children
<<endif>>\
<<if $PC[$CC][$PCsexACTS].fathered > 0>>\
You have fathered $PC[$CC][$PCsexACTS].fathered children
<<endif>>\
<<set _f to $PC[$CC][$PCsexACTS]>>\
<<set _TechVirgin to _f.bjgiven + _f.bjreceived + _f.pussylickgiven + _f.pussylickreceived + _f.analgiven + _f.analreceived>>\
<<set _ShowFullStats to true>>\
<<if (_vstats is 0) and _TechVirgin is 0>>\
You are a beautiful, pristine virgin
<<set _ShowFullStats to false>>\
<<elseif (_vstats is 0)>>\
You are still //technically// a virgin
<<else>>\
<<if _vstats is 2>>\
You gave your male virginity to <<print $PC[$CC][$PCsexACTS].malevirgin[1]>>
You female virginity was taken by <<print $PC[$CC][$PCsexACTS].femalevirgin[1]>>
<<else>>\
<<if $PC[$CC][$PCsexACTS].malevirgin[1] neq true>>\
You gave your virginity to <<print $PC[$CC][$PCsexACTS].malevirgin[1]>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].femalevirgin[1] neq true>>\
Your virginity was taken by <<print $PC[$CC][$PCsexACTS].femalevirgin[1]>>
<<endif>>\
<<endif>>\
<<endif>>\
\
<<if $PC[$CC][$PCpregnant][0] > 0>>\
<<set _Pa to $PC[$CC][$PCpregnant][0]>>\
<<set _Pb to $PC[$CC][$PCpregnant][1]>>\
<<set _Pc to $PC[$CC][$PCpregnant][2]>>\
<<set _Pd to $PC[$CC][$PCpregnant][3]>>\
<<set _CountDown to setup.DaysUntilBirth($CC)>>\
<<if _CountDown < 2>>\
@@color:Gold;Birth imminent@@
<<print either("You are in labor","Your water has broken")>>
<<elseif _CountDown < 6>>\
@@color:Gold;Pregnancy@@
<<print either("It won't be long now","You feel ready")>>
<<elseif _CountDown < 20>>\
<<print either("You are definitely pregnant","Something in your belly just moved","You feel the kicks of a monster baby inside you")>>
<<elseif _CountDown < 26>>\
@@color:Gold;Condition@@
<<print either("Your belly is slightly distended","You have a slight belly bump","Have you gained weight recently?")>>
<<else>>\
@@color:Gold;Current Mood@@
<<print either("You feel nauseous","You crave pickle-flavored ice cream","You feel a little irritable","You've been having mood swings lately","Your ankles seem swollen for some reason")>>
<<endif>>\
<<endif>>\
\
<<if ($PC[$CC][$PCpregnant] > 0) or ($DebugMode is true)>>\
@@color:Gold;Pregnancy debug@@
<<set _Pa to $PC[$CC][$PCpregnant][0]>>\
<<set _Pb to $PC[$CC][$PCpregnant][1]>>\
<<set _Pc to $PC[$CC][$PCpregnant][2]>>\
<<set _Pd to $PC[$CC][$PCpregnant][3]>>\
<<print _Pa>>, <<print _Pb>>, <<print _Pc>>, <<print _Pd>>
<<endif>>\
\
<<if _ShowFullStats is true>>\
<<if $PC[$CC][$PCsexACTS].bjgiven > 0>>\
Blowjobs given: <<print $PC[$CC][$PCsexACTS].bjgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].bjreceived > 0>>\
Blowjobs received: <<print $PC[$CC][$PCsexACTS].bjreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].pussylickgiven > 0>>\
Pussies licked: <<print $PC[$CC][$PCsexACTS].pussylickgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].pussylickreceived > 0>>\
Times your pussy has been licked: <<print $PC[$CC][$PCsexACTS].pussylickreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].vaginalreceived > 0>>\
Fucked in the pussy: <<print $PC[$CC][$PCsexACTS].vaginalreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].vaginalgiven > 0>>\
Cummed in a pussy: <<print $PC[$CC][$PCsexACTS].vaginalgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].analgiven > 0>>\
Asses fucked: <<print $PC[$CC][$PCsexACTS].analgiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].analreceived > 0>>\
Fucked in the ass: <<print $PC[$CC][$PCsexACTS].analreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].semengiven > 0>>\
Total semen delivered: <<print $PC[$CC][$PCsexACTS].semengiven>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].semenreceived > 0>>\
Total semen received: <<print $PC[$CC][$PCsexACTS].semenreceived>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].milked > 0>>\
Total milked volume: <<print $PC[$CC][$PCsexACTS].milked>>
<<endif>>\
<<if $PC[$CC][$PCsexACTS].scissored > 0>>\
Total vaginal scissoring: <<print $PC[$CC][$PCsexACTS].scissored>>
<<endif>>\
<<endif>>\
@@color:Gold;Miscellaneous stats@@
@@color:LightGreen;Battles fought@@: $PC[$CC][$PCmisc].battles
@@color:LightGreen;Battles lost@@: $PC[$CC][$PCmisc].battleslost
@@color:LightGreen;Battles won@@: $PC[$CC][$PCmisc].battleswon
@@color:LightGreen;Battles fled@@: $PC[$CC][$PCmisc].battlesfled
@@color:LightGreen;Traps triggered@@: $PC[$CC][$PCmisc].traptrigger
@@color:LightGreen;Traps avoided@@: $PC[$CC][$PCmisc].trapavoid
@@color:LightGreen;Chests opened@@: $PC[$CC][$PCmisc].chests
@@color:LightGreen;Total healing@@: $PC[$CC][$PCspellbook].totalheal
@@color:LightGreen;Gold earned@@: $PC[$CC][$PCmisc].gold
@@color:LightGreen;Repeatable quests@@: $PC[$CC][$PCmisc].repeatquests
@@color:LightGreen;Deaths@@: $PC[$CC][$PCmisc].deaths
@@color:Gold;Adventuring stats@@
@@color:LightGreen;Highest tower level@@: $PC[$CC][$PChtze]
@@color:LightGreen;Highest forest level@@: $PC[$CC][$PChfze]
@@color:LightGreen;Highest desert level@@: $PC[$CC][$PChdze]
@@color:LightGreen;Flirt victories@@: <<print $PC[$CC][$PCmisc].flirtvictory>>
<<set _NameList to ["bunny-morph", "cat-morph", "fox-morph", "wolf-morph", "horse", "ant", "scorpion", "centaur", "human", "goblin", "slime", "spider", "imp", "hellhound", "cow", "minotaur", "drider", "tentacle", "naga", "demon", "Zehtalia", "harpy", "troll", "ratkin", "hydra", "dinosaur", "Neris", "Charyss", "wolf","snake"]>>\
<<for _i to 0; _i < _NameList.length; _i++>>\
<<if $PC[$CC][$PCkills][_i] > 0>>\
@@color:LightGreen;<<print _NameList[_i].toUpperFirst()>> kills@@: <<print $PC[$CC][$PCkills][_i]>>
<<endif>>\
<</for>>
\
</td>\
</tr>\
</table>\
<</widget>>\
<<widget "ShowStatsParty">>\
<<set _PPcur to $PC[$CC][$PCparty].length>>\
<<if _PPcur > 0>>\
<<for _SPi to 0; _SPi < $PC[$CC][$PCparty].length; _SPi++>>\
<<set _Name to $PC[$CC][$PCparty][_SPi].name>>\
<<set _Stance to "[" + $PC[$CC][$PCparty][_SPi].stance + "]">>\
<<set _Hp to $PC[$CC][$PCparty][_SPi].hpcur + "/" + $PC[$CC][$PCparty][_SPi].hpmax>>\
<<set _Xp to "" + $PC[$CC][$PCparty][_SPi].xp + "/" + setup.XpNeeded($PC[$CC][$PCparty][_SPi].level)>>\
<<set _Parentage to $PC[$CC][$PCparty][_SPi].parent>>\
<<if _Parentage is "">>\
<<set _Parentage to "unknown parentage">>\
<<endif>>\
<<set _SpawnOf to $PC[$CC][$PCparty][_SPi].morph + " son of " + _Parentage>>\
<<if $PC[$CC][$PCparty][_SPi].sex is "female">>\
<<set _SpawnOf to $PC[$CC][$PCparty][_SPi].morph + " daughter of " + _Parentage>>\
<<endif>>\
<<print _Name>>, <<print _SpawnOf>>
Level: <<print $PC[$CC][$PCparty][_SPi].level>>, XP: <<print _Xp>>, Hp: <<print _Hp>>
<</for>>\
<<else>>\
No active party
<<endif>>\
<</widget>>\<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
<<set _px to $PC[$CC][$PCdx]>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
<<set _RightPic to $ImgPath + "deserttent.jpg">>\
\
\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
<<if true is false>>\
<<else>>\
There's a tent here on a patch of sand that looks like it's been smoothed with a rake. You're not entirely sure it's safe, but if you're desperate for a nap there's a slightly used sleeping bag inside.
@@color:Gold;Options@@
<span id="KeypOne">\
<<link "1) Sleep" "Combat">>
<<set _NoCombatAdvance to $WORLD.turnssincecombat>>
<<AdvanceTime 720>>\
<<set $WORLD.turnssincecombat to _NoCombatAdvance>>
<<FullyHeal>>\
<</link>>\
</span>\
<<endif>>\
<</replace>>\<<set $AllowNav to true>>\
<<set $RoomPTR to passage()>>\
\
<<replace "#eventtext">>\
<<set _px to $PC[$CC][$PCdx]>>\
<<set _py to $PC[$CC][$PCdy]>>\
<<set _pz to $PC[$CC][$PCdz]>>\
<<set _RightPic to $ImgPath + "magictower.jpg">>\
\
\
<<replace "#right-img">><img @src="_RightPic"/><</replace>>\
<<if true is false>>\
<<else>>\
@@color:Yellow;Dev note:@@ This will eventually be the college of magic mentioned by Daphne, with individual trials for learning each spell. For now, click to get spells for free! Yay!
<hr>\
<<if $PC[$CC][$PCAzaxChat][0] is 2>>\
<<if $WORLD.LegacyVault is 1>>\
Azax will help with the Legacy Vault when you are ready for him.
<<else>>\
Azax waves hello.
<<endif>>\
<<else>>\
<<if ($PC[$CC][$PCDaphneChat][8] is 2) or ($WORLD.LegacyVault is 1)>>\
<span id="Azax">\
<<if $PC[$CC][$PCAzaxChat][0] is 0>>\
<<if $PC[$CC][$PCDaphneChat][8] is 2>>\
The wizard introduces himself as Azax.
<<else>>\
You find the wizard that Daphne mentioned.
<<endif>>\
<<link "Talk to Azax">>\
<<set $PC[$CC][$PCAzaxChat][0] to 2>>
<<if ($PC[$CC][$PCDaphneChat][8] is 2)>>
<<replace "#Azax">>You explain the situation with the Legacy Vault, and Azax agrees to help.<</replace>>
<<else>>\
<<replace "#Azax">>You explain the situation with the Legacy Vault, and Azax agrees to help.<</replace>>
<<endif>>\
<</link>>
<<endif>>\
</span>\
<<else>>\
The wizard, Azax, introduces himself and asks if you would like any help with magic.\
<<endif>>\
<<endif>>\
<hr>
<<set _Class to setup.PtrToClass($PC[$CC][$PCclass])>>\
<<if $TEMPDEBUG is "peasant">><<set _Class to "peasant">><<endif>>\
<<if $TEMPDEBUG is "lumberjack">><<set _Class to "lumberjack">><<endif>>\
<<if $TEMPDEBUG is "prostitute">><<set _Class to "prostitute">><<endif>>\
<<if $TEMPDEBUG is "warrior">><<set _Class to "warrior">><<endif>>\
<<if $TEMPDEBUG is "scholar">><<set _Class to "scholar">><<endif>>\
<<if $TEMPDEBUG is "rogue">><<set _Class to "rogue">><<endif>>\
<<if $TEMPDEBUG is "mage">><<set _Class to "mage">><<endif>>\
<<if $TEMPDEBUG is "barbarian">><<set _Class to "barbarian">><<endif>>\
<<if $TEMPDEBUG is "monk">><<set _Class to "monk">><<endif>>\
<<if $TEMPDEBUG is "ninja">><<set _Class to "ninja">><<endif>>\
<<if $TEMPDEBUG is "paladin">><<set _Class to "paladin">><<endif>>\
<<if $TEMPDEBUG is "guardian">><<set _Class to "guardian">><<endif>>\
<<if $TEMPDEBUG is "druid">><<set _Class to "druid">><<endif>>\
<<if $TEMPDEBUG is "necromancer">><<set _Class to "necromancer">><<endif>>\
<<unset $TEMPDEBUG>>\
\
<<AllowedSpellsTempArray>>\
\
@@color:Gold;Options@@
@@color:LightGreen;Combat spells@@
<<if setup.FindInArray(_AllowedSpells, "dart") > -1>>\
<<if $PC[$CC][$PCspellbook].dart > 0>>\
Dart
<<else>>\
<span id="dart">\
<<link "Learn dart">>
<<set $PC[$CC][$PCspellbook].dart to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#dart">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn dart
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "armor") > -1>>\
<<if $PC[$CC][$PCspellbook].armor > 0>>\
Armor
<<else>>\
<span id="armor">\
<<link "Learn armor">>
<<set $PC[$CC][$PCspellbook].armor to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#armor">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn armor
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "poison") > -1>>\
<<if $PC[$CC][$PCspellbook].poison > 0>>\
Poison
<<else>>\
<span id="poison">\
<<link "Learn poison">>
<<set $PC[$CC][$PCspellbook].poison to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#poison">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn poison
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "firebolt") > -1>>\
<<if $PC[$CC][$PCspellbook].firebolt > 0>>\
Firebolt
<<else>>\
<span id="firebolt">\
<<link "Learn firebolt">>
<<set $PC[$CC][$PCspellbook].firebolt to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#firebolt">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn firebolt
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "heal") > -1>>\
<<if $PC[$CC][$PCspellbook].heal > 0>>\
Heal
<<else>>\
<span id="heal">\
<<link "Learn heal">>
<<set $PC[$CC][$PCspellbook].heal to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#heal">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn heal
<<endif>>\
@@color:LightGreen;Utility spells@@
<<if setup.FindInArray(_AllowedSpells, "light") > -1>>\
<<if $PC[$CC][$PCspellbook].light > 0>>\
Light
<<else>>\
<span id="light">\
<<link "Learn light">>
<<set $PC[$CC][$PCspellbook].light to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#light">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn light
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "up") > -1>>\
<<if $PC[$CC][$PCspellbook].up > 0>>\
Up
<<else>>\
<span id="up">\
<<link "Learn up">>
<<set $PC[$CC][$PCspellbook].up to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#up">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn up
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "down") > -1>>\
<<if $PC[$CC][$PCspellbook].down > 0>>\
Down
<<else>>\
<span id="down">\
<<link "Learn down">>
<<set $PC[$CC][$PCspellbook].down to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#down">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn down
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "map") > -1>>\
<<if $PC[$CC][$PCspellbook].map > 0>>\
Map
<<else>>\
<span id="map">\
<<link "Learn map">>
<<set $PC[$CC][$PCspellbook].map to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#map">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn map
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "portal") > -1>>\
<<if $PC[$CC][$PCspellbook].portal > 0>>\
Portal
<<else>>\
<span id="portal">\
<<link "Learn portal">>
<<set $PC[$CC][$PCspellbook].portal to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#portal">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn portal
<<endif>>\
<<if setup.FindInArray(_AllowedSpells, "soultrap") > -1>>\
<<if $PC[$CC][$PCspellbook].soultrap > 0>>\
Soultrap
<<else>>\
<span id="soultrap">\
<<link "Learn soultrap">>
<<set $PC[$CC][$PCspellbook].soultrap to 1>>
<<set $PC[$CC][$PCspellbook].any to true>>
<<SpellAchieveCheck>>
<<replace "#soultrap">><</replace>>\
<</link>>
</span>\
<<endif>>\
<<else>>\
Cannot learn soul trap
<<endif>>\
<<endif>>\
\
<span id ="debugtext"></span>
<<if $DebugMode is true>>\
<hr>
@@color:Yellow;Debug@@
<<link "Peasant" "Desert">><<set $TEMPDEBUG to "peasant">><</link>>
<<link "Lumberjack" "Desert">><<set $TEMPDEBUG to "lumberjack">><</link>>
<<link "Prostitute" "Desert">><<set $TEMPDEBUG to "prostitute">><</link>>
<<link "Warrior" "Desert">><<set $TEMPDEBUG to "warrior">><</link>>
<<link "Scholar" "Desert">><<set $TEMPDEBUG to "scholar">><</link>>
<<link "Rogue" "Desert">><<set $TEMPDEBUG to "rogue">><</link>>
<<link "Mage" "Desert">><<set $TEMPDEBUG to "mage">><</link>>
<<link "Barbarian" "Desert">><<set $TEMPDEBUG to "barbarian">><</link>>
<<link "Monk" "Desert">><<set $TEMPDEBUG to "monk">><</link>>
<<link "Ninja" "Desert">><<set $TEMPDEBUG to "ninja">><</link>>
<<link "Paladin" "Desert">><<set $TEMPDEBUG to "paladin">><</link>>
<<link "Druid" "Desert">><<set $TEMPDEBUG to "druid">><</link>>
<<link "Necromancer" "Desert">><<set $TEMPDEBUG to "necromancer">><</link>>
<<endif>>\
<</replace>>\<<widget "ShowGuildTimeToMidnight">>\
<<set _Remain to 1440 - (($WORLD.hour * 60) + $WORLD.minute)>>\
<<set _hrs to Math.trunc(_Remain / 60)>>\
<<set _min to _Remain - (_hrs * 60)>>\
<<print _hrs>>:<<print _min>>\
<</widget>>\
<<widget "ShowGuildButtons">>\
<<if $GuildTemp is "tutorial">>\
<span class="greenb">\
<<button "Tutorial">>\
<<set $GuildTemp to "tutorial">>\
<<replace "#GuildButtons">>\
<<ShowGuildButtons>>\
<</replace>>\
<</button>>\
</span> | \
<span class="blueb">\
<<button "Repeatable">>\
<<set $GuildTemp to "repeatable">>\
<<replace "#GuildButtons">>\
<<ShowGuildButtons>>\
<</replace>>\
<<replace "#GuildQuests">>\
<<ShowGuildRepeatableQuests>>\
<</replace>>\
<</button>>\
</span>\
<<elseif $GuildTemp is "repeatable">>\
<span class="blueb">\
<<button "Tutorial">>\
<<set $GuildTemp to "tutorial">>\
<<replace "#GuildButtons">>\
<<ShowGuildButtons>>\
<</replace>>\
<<replace "#GuildQuests">>\
<<ShowGuildTutorialQuests>>\
<</replace>>\
<</button>>\
</span> | \
<span class="greenb">\
<<button "Repeatable">>\
<<set $GuildTemp to "repeatable">>\
<<replace "#GuildButtons">>\
<<ShowGuildButtons>>\
<</replace>>\
<</button>>\
</span>\
<<else>>\
Error in guild buttons: $GuildTemp
<<endif>>\
<</widget>>\
<<widget "ShowGuildTutorialQuests">>\
<<set _spanarray to ["KeypOne","KeypTwo","KeypThree","KeypFour","KeypFive","KeypSix","KeypSeven","KeypEight","KepyNine"]>>\
<<set _QuestNames to ["Meet the town","Forest combat","Meat","Transformation","Cut trees","Retirement","Unto eternity","Rescue"]>>\
<<for _i to 0; _i < $WORLD.quests.length; _i++>>\
<<capture _i>>\
<<set _nzero to _i +1>>\
<<set _linktext to "" + _nzero + ") " + _QuestNames[_i]>>\
<span @id="_spanarray[_i]">\
<<if $WORLD.quests[_i].state is "avail">>\
<<link _linktext "Guild">>
<<set $WORLD.datapasser to ["quest query", _i]>>\
<</link>> - Available
<<elseif $WORLD.quests[_i].state is "complete">>\
@@color:LightBlue;<<print _i +1>>) <<print _QuestNames[_i]>> - Complete@@
<<elseif $WORLD.quests[_i].state is "active">>\
<<if setup.IsQuestFinished(_i) is "Not using this?">>\
<<link _linktext "Guild">>
<<set $WORLD.datapasser to ["quest turnin", _i]>>\
<</link>> - @@color:Orange;Accepted!@@
<<else>>\
<<link _linktext "Guild">>
<<set $WORLD.datapasser to ["quest turnin", _i]>>\
<</link>> - @@color:Yellow;Pending@@
<<endif>>\
<<else>>\
<!-- there comes a point where it's faster and easier to simply hard code these things -->\
<<if _i is 3>>\
4) ??? - Complete 'Meat' to unlock
<<elseif _i is 4>>\
5) ??? - Complete 'Forest Combat' to unlock
<<elseif _i is 5>>\
6) ??? - Reach level 3 to unlock
<<elseif _i is 6>>\
7) ??? - Complete 'Retire' to unlock
<<elseif _i is 7>>\
8) ??? - Complete 'Unto Eternity' to unlock
<<endif>>\
<<endif>>\
</span>\
<</capture>>\
<</for>>\
<</widget>>\
<<widget "ShowGuildRepeatableQuests">>\
<<if $DebugMode is true>>\
Repeatable quest states:
0: <<print $WORLD.RepeatableQuests[0].state>>
1: <<print $WORLD.RepeatableQuests[1].state>>
2: <<print $WORLD.RepeatableQuests[2].state>>
3: <<print $WORLD.RepeatableQuests[3].state>>
<hr>
<<endif>>\
\
<<for _SGRQi to 0; _SGRQi < $WORLD.RepeatableQuests.length; _SGRQi++>>\
<<if $WORLD.RepeatableQuests[_SGRQi].state is "complete">>\
<<if setup.CurrentDayCount() > $WORLD.RepeatableQuests[_SGRQi].lastupdate>>\
<<set $WORLD.RepeatableQuests[_SGRQi].state to "avail">>\
<<endif>>\
<<endif>>\
<</for>>\
\
<<if setup.TypeOf($WORLD.RepeatableQuests) is "array">>\
\
<!-- Overland Hunt -->\
<<if $WORLD.quests[1].state is "complete">>\
<<if $WORLD.RepeatableQuests[0].state is "avail">>\
<span id="KeypOne">\
<<link "1) Overland Hunt" "Guild">>
<<set $WORLD.datapasser to ["quest query", 10]>>\
<</link>> - Available
</span>\
<<elseif $WORLD.RepeatableQuests[0].state is "complete">>\
@@color:LightBlue;1) Overland Hunt - Complete: resets in <<ShowGuildTimeToMidnight>>@@
<<elseif $WORLD.RepeatableQuests[0].state is "active">>\
<span id="KeypOne">\
<<link "1) Overland Hunt" "Guild">>
<<set $WORLD.datapasser to ["quest turnin", 10]>>\
<</link>> - @@color:Yellow;Pending@@
</span>\
<<else>>\
Error in Overland Hunt: state is: $WORLD.RepeatableQuests[0].state
<<endif>>\
<<else>>\
1) ??? - Complete 'Forest Combat' tutorial to unlock
<<endif>>\
\
<!-- Tower Hunt -->\
<<if $WORLD.MainQuest[0].state is "complete">>\
<<if $WORLD.RepeatableQuests[1].state is "avail">>\
<span id="KeypTwo">\
<<link "2) Tower Hunt" "Guild">>
<<set $WORLD.datapasser to ["quest query", 11]>>\
<</link>> - Available
</span>\
<<elseif $WORLD.RepeatableQuests[1].state is "complete">>\
@@color:LightBlue;2) Tower Hunt - Complete: resets in <<ShowGuildTimeToMidnight>>@@
<<elseif $WORLD.RepeatableQuests[1].state is "active">>\
<span id="KeypTwo">\
<<link "2) Tower Hunt" "Guild">>
<<set $WORLD.datapasser to ["quest turnin", 11]>>\
<</link>> - @@color:Yellow;Pending@@
</span>\
<<else>>\
Error in tower hunt: state is: $WORLD.RepeatableQuests[1].state
<<endif>>\
<<else>>\
2) ??? - Gain access to the tower to unlock
<<endif>>\
\
<!-- Monster Parts Hunt -->\
<<if $WORLD.quests[2].state is "complete">>\
<<if $WORLD.RepeatableQuests[2].state is "avail">>\
<span id="KeypThree">\
<<link "3) Monster Parts Hunt" "Guild">>
<<set $WORLD.datapasser to ["quest query", 12]>>\
<</link>> - Available
</span>\
<<elseif $WORLD.RepeatableQuests[2].state is "complete">>\
@@color:LightBlue;3) Monster Parts Hunt - Complete: resets in <<ShowGuildTimeToMidnight>>@@
<<elseif $WORLD.RepeatableQuests[2].state is "active">>\
<span id="KeypThree">\
<<link "3) Monster Parts Hunt" "Guild">>
<<set $WORLD.datapasser to ["quest turnin", 12]>>\
<</link>> - @@color:Yellow;Pending@@
</span>\
<<else>>\
Error in tower hunt: state is: $WORLD.RepeatableQuests[2].state
<<endif>>\
<<else>>\
3) ??? - Complete 'Meat' tutorial to unlock
<<endif>>\
\
<!-- Wood Hunt -->\
<<if $WORLD.quests[4].state is "complete">>\
<<if $WORLD.RepeatableQuests[3].state is "avail">>\
<span id="KeypFour">\
<<link "4) Resource collection" "Guild">>
<<set $WORLD.datapasser to ["quest query", 13]>>\
<</link>> - Available
</span>\
<<elseif $WORLD.RepeatableQuests[3].state is "complete">>\
@@color:LightBlue;4) Resource collection - Complete: resets in <<ShowGuildTimeToMidnight>>@@
<<elseif $WORLD.RepeatableQuests[3].state is "active">>\
<span id="KeypFour">\
<<link "4) Resource Collection" "Guild">>
<<set $WORLD.datapasser to ["quest turnin", 13]>>\
<</link>> - @@color:Yellow;Pending@@
</span>\
<<else>>\
Error in tower hunt: state is: $WORLD.RepeatableQuests[3].state
<<endif>>\
<<else>>\
4) ??? - Complete 'Cut trees' tutorial to unlock
<<endif>>\
<<else>>\
@@color:Red;No repeatable quests data@@: try running 'Force version update check' from main menu
<<endif>>\
<</widget>>\
<<widget "ShowSmithButtons">>\
<<if $SmithTemp is "weapons">>\
<span class="blueb">\
<<button "Armor">>\
<<set $SmithTemp to "armor">>\
<<replace "#SmithButtons">>\
<<ShowSmithButtons>>\
<</replace>>\
<<replace "#SmithStores">>\
<<Store $SmithArmor>>\
<</replace>>\
<</button>>\
</span> | \
<span class="greenb">\
<<button "Weapons">>\
<<set $SmithTemp to "weapons">>\
<<replace "#SmithButtons">>\
<<ShowSmithButtons>>\
<</replace>>\
<</button>>\
</span>\
<<elseif $SmithTemp is "armor">>\
<span class="greenb">\
<<button "Armor">>\
<<set $SmithTemp to "armor">>\
<<replace "#SmithButtons">>\
<<ShowSmithButtons>>\
<</replace>>\
<</button>>\
</span> | \
<span class="blueb">\
<<button "Weapons">>\
<<set $SmithTemp to "weapons">>\
<<replace "#SmithButtons">>\
<<ShowSmithButtons>>\
<</replace>>\
<<replace "#SmithStores">>\
<<Store $Smith>>\
<</replace>>\
<</button>>\
</span>\
<<else>>\
Error in smith buttons: $SmithTemp
<<endif>>\
<</widget>>\
<<widget "ShowLegacyVault">>\
<<if ($STORE[$LegacyVault].length is 0) and ($WORLD.VaultGold is 0)>>\
The Legacy Vault is empty
<<else>>\
@@color:LightGreen;The Vault contains:@@
<<if $WORLD.VaultGold > 0>>\
<<print $WORLD.VaultGold>> gold coins
<<endif>>\
<<for _i to 0; _i < $STORE[$LegacyVault].length; _i++>>\
<<set _item to $STORE[$LegacyVault][_i]>>\
<<if _item[0] > 0>>\
<<if $DebugMode>>(_item): <<endif>>\
<<DescribeItem _item>>\
<<set _st to $ItemPoke.stackable>>\
<<if $DebugMode is true>>(<<print _item>>)<br> <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$LegacyVault][_i]>>\
<<print $ItemPoke.fullname>>\
<br>\
<<else>>\
<<Bullet>> <br>\
<<endif>>\
<</for>>\
<<endif>>\
<<if $DebugMode is true>>\
debug reports <<print $STORE[$LegacyVault].length>> items in the Vault
<<print $STORE[$LegacyVault]>>\
<<endif>>\
<</widget>>\
<<widget "FillLegacyVault">>\
<<set $WORLD.VaultGold to $PC[$CC][$PCcoins]>>\
<<set _VaultPTR to 0>>\
<<for _FLV to 0; _FLV < $PC[$CC][$PCinven].length; _FLV++>>\
<<if $PC[$CC][$PCinven][_FLV][0] > 0>>\
<<set $STORE[$LegacyVault][_VaultPTR] to $PC[$CC][$PCinven][_FLV]>>\
<<set _VaultPTR to _VaultPTR +1>>\
<<endif>>\
<</for>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<for _FLV to 0; _FLV < _bpqty; _FLV++>>\
<<set _bp to $PC[$CC][$PCbp][_FLV]>>\
<<if _bp.equippable is true>>\
<<if $PC[$CC][$PCbp][_FLV].equip[0] neq 0>>\
<<set $STORE[$LegacyVault][_VaultPTR] to $PC[$CC][$PCbp][_FLV].equip>>\
<<set _VaultPTR to _VaultPTR +1>>\
<<endif>>\
<<endif>>\
<</for>>\
<</widget>>\Pending:
Verify:
* Monsters can appear in bedroom events again
* Scholar's level 7 bonus now grants full xp to all party members rather than dividing it among them
* bug: party members can't attack on initial combat round
* Party members can now gain xp and levels
* bug: downed orphans will continue to siphon xp as if they were still conscious
* New potion: Rage
* Newly observed bug: Restoring the game on desert 5 fails to generate the College of Magic. May be related to caves overwriting them
* Newly observed exploit: during combat, heal can be cast from the spelbook without consuming a turn
* Arrow mashing exploit at bed: bed was heavily changed and needs testing anyway
* Changes to priests:
* Priest poison/bleed curing effect is now a basic class feature, not a level 7 ability
* Priest bleed cure should actually work now
* Priest level 7 class bonus is now: Heal spell now also applies to party members, and can restore from "down" state
* Bug: Lifetime total healing stat doesn't count party heals when cast from spellbook
@@color:LightGreen;Changes/fixes with playtest 8:@@
* Implemented Legacy Vault, and related quest, acheivement and access perk
@@color:LightGreen;Confirmed known/pending issues:@@
* Levers on towers level 7-9 aren't correctly linking up with door chambers
* "Error in DesertMoveRefresh" (level 3?)
* Legacy Vault from quest completion to actual use probably fails horribly, code bits still untested
* "Shriveled Genitals"
* Unarmed sometimes displays over 100% to-hit
* Party levelups not working
* Graphical ghosting glitch with most tower events
* There's a huge backlog of images and sex scenes. No way it's all going to get done, but this being a porn game I should probably make a point of adding at least some every update
* New perks seem to work, but need more robust testing
* Some transformations still need morph bonuses (ratkin, etc)
* Rat/ratkin needs the wolf/wolf-morph treatment
* Rat-morph consumables generate error
* "fight to cancel the fight" exploit: not sure if this needs fixing
* Heal spell really should be able to target party/local characters in some way
* Scholar level 7 ability: party xp
<hr>\
@@color:LightGreen;Reported, but uncertain/pending verification/needs more information@@
* Am I totally out of touch on gold costs? Submitted save files routinely have hundreds of thousands of gold, which is 10x more than me the dev has ever had, ever. Are costs too low? Do we need more gold sinks or things to spend money on? Or is this just a result of the long delay since the last update and people are grinding to fill time while progression is locked?
* fix prostitute: "volume is tracking between sessions"
* mage tower can spawn on rock
* Can be random book from tower of magic spell-learning: how?
* hecatolite: reports transform errors still
* hecatolite: the gender bender fountain gives sexual body parts for free (sounds correct, but pending investigation) and 71/80 fountains were gender bending (verify; might be debug leftover)
* feature request: "sell all" button for stackable items at the pawn shop
* feature request: tail styling at salon, horse hair should be called mane
* LPAdrien: "the tower of magic spawned inside a rock" How? That really shoudln't be possible
* LPAdrien:Tower of magic spell learning: "I just get a random book" ...how? There's no item generation code anywhere in that entire passage.
* LPAdrien: What does prostitute "volume is tracking between sessions" mean?
* Barehanded combat reporting > 100% to hit
@@color:LightGreen;Very old to-do list, verify, but much of this may have already been done@@
High priority
* magic/fire resist potions
* Finalize current event set
* implement or lock all achievements
* Defeat dialogue for minotaur, horse, slime, spider
* Victory sex events for: (wolf) and (naga, spider, minotaur)
* more textual varity in monster attack types and descriptions
* clean up right-images
Moderate priority
* The morphology system needs a complete rewrite to accomodate body attacks, display names, combat verbage, and equippableness
* need a way to delete items besides pawnshop
* Show per-weapon damage and to-hit on stats screen
* Possible new spells: passwall, cure, detect traps
Other to do
* Forest should maybe go to perma-save like tower
* Dialogue alterations for if player wins by flirt?
* reverse color bars for hunger and arousal
* adjust flirts to handle sex
* flirt power from clothes
* item descs should move to JS
* setup updateflirt from equipment
* salon, clothing store
* char sheet perks should show what they do
* Earning the Priest acheivement while casting from the spellbook does not inform the players
* Resolve English language issues surrounding bovine transformations "cow penis" etc
* Rina should notice when you show up at her door with a dead body
* It's not currently possible to starve to death in town
* Player dialogue with Gerard about people seeming normal should reflect if they've already met Skitters
<<set _ReagentList to []>>\
<<set _ReagentList[0] to [600, "daisies",10]>>\
<<set _ReagentList[1] to [601, "skretch weed",15]>>\
<<set _ReagentList[2] to [602, "sunflower",20]>>\
<<set _ReagentList[3] to [603, "roses",25]>>\
<<set _ReagentList[4] to [604, "goose berries",30]>>\
<<set _ReagentList[5] to [605, "brown mushroom",35]>>\
<<set _ReagentList[6] to [606, "azalea",40]>>\
\
@@color:Gold;Potion Maker@@
<<if $WORLD.SeleneQuests[0] is 2>>
Daisy: <span id="Reagent0QTY"><<print $STORE[$Selene][0]</span>
<!-- A: 117, D: 600-611 -->\
<<set _PotionList to [600,"black"][602,"white"][603,"brunette"][604,"blonde"][605,"platinum"][606,"brown"][607,"blue"][608,"pink"][609,"orange"][610,"green"][611,"purple]>>\
<<else>>\
Undiscovered reagent
<<endif>>\
<<if $WORLD.SeleneQuests[1] is 2>>
Skretch weed: <span id="Reagent1QTY"><<print $STORE[$Selene][0]</span>
<<else>>\
Undiscovered reagent
<<endif>>\
<<if $WORLD.SeleneQuests[2] is 2>>
Sunflower: <span id="Reagent2QTY"><<print $STORE[$Selene][0]</span>
<<else>>\
Undiscovered reagent
<<endif>>\
<<if $WORLD.SeleneQuests[3] is 2>>
Roses: <span id="Reagent3QTY"><<print $STORE[$Selene][0]</span>
<<else>>\
Undiscovered reagent
<<endif>>\
<<if $WORLD.SeleneQuests[4] is 2>>
Goose berry: <span id="Reagent4QTY"><<print $STORE[$Selene][0]</span>
<<else>>\
Undiscovered reagent
<<endif>>\
<<if $WORLD.SeleneQuests[5] is 2>>
brown mushroom: <span id="Reagent5QTY"><<print $STORE[$Selene][0]</span>
<<else>>\
Undiscovered reagent
<<endif>>\
<<if $WORLD.SeleneQuests[6] is 2>>
Azalea: <span id="Reagent6QTY"><<print $STORE[$Selene][0]</span>
<<else>>\
Undiscovered reagent
<<endif>>\
<hr>\
@@color:Gold;Alchemical Ingredients@@
<<set _ReagentCount to 0>>\
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<if $ItemPoke.tooleffect is 24>>\
<<set _ReagentCount to _ReagentCount +1>>\
<<endif>>\
<<button "_buttontext">>
<!-- Sugarcube does not clone values until passage refresh -->\
<<set _AAAA to $PC[$CC][$PCinven][_i][0]>>
<<set _BBBB to $PC[$CC][$PCinven][_i][1]>>
<<set _CCCC to 1>>
<<set _DDDD to $PC[$CC][$PCinven][_i][3]>>
<<set _EEEE to $PC[$CC][$PCinven][_i][4]>>
<<set _ByValHack to [_AAAA, _BBBB, _CCCC, _DDDD, _EEEE]>>
<<DescribeItem _ByValHack>>
<<set _st to $ItemPoke.stackable>>\
<<set _throwaway to setup.additemtostore($Selene, _ByValHack)>>
<<set _desc to $ItemPoke.fullname>>\
<<replace "#storereport">><<GainGold _p>><</replace>>\
<!-- if has qty, subtract one, otherwise remove -->\
<<if $PC[$CC][$PCinven][_i][2] > 1>>\
<<set $PC[$CC][$PCinven][_i][2] to $PC[$CC][$PCinven][_i][2] -1>>
<<else>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<</button>> _desc
<</for>>\
<<if _ReagentCount is i 0>>\
You have no reagents that Selene will buy
<<endif>>\
@@color:Gold;For sale@@
<<for _i to 0; _i < $STORE[$Selene].length; _i++>>\
<<set _item to $STORE[$Selene][_i]>>\
<<if _item[0] > 0>>\
<<if $DebugMode>>(_item): <<endif>>\
<<DescribeItem _item>>\
<<set _st to $ItemPoke.stackable>>\
<<set _p to $ItemPoke.price>>\
<<capture _i, _p, _st>>\
<<Bullet>> <<button "[Buyback]">>
<<if $PC[$CC][$PCcoins] < _p>>\
<<replace "#storereport">>Not enough money: _p<</replace>>\
<<else>>
\
<<set _ByValHack to []>>\
<<set _ByValHack[0] to $STORE[$Selene][_i][0]>>
<<set _ByValHack[1] to $STORE[$Selene][_i][1]>>
<<set _ByValHack[2] to 0>>
<<if $STORE[$Selene][_i][1] > 0>>\
<<set _ByValHack[2] to 1>>
<<endif>>\
<<set _ByValHack[3] to $STORE[$Selene][_i][3]>>
<<set _ByValHack[4] to $STORE[$Selene][_i][4]>>
\
<<set _try to setup.GiveItem($CC, _ByValHack)>>
<<set $PC[$CC][$PCcoins] to $PC[$CC][$PCcoins] - _p>>
<!-- if has qty, subtract one, otherwise remove -->\
<<if $STORE[$Selene][_i][2] > 1>>\
<<set $STORE[$Selene][_i][2] to $STORE[$Selene][_i][2] -1>>
<<else>>\
<<set $STORE[$Selene][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<endif>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<</button>> \
<</capture>>\
<<if $DebugMode is true>>(<<print _item>>) <<endif>>\
<!-- fetch data for actual item, not 1-quantity ByVal hack, so that quantities display correctly -->\
<<DescribeItem $STORE[$Selene][_i]>>\
<<print $ItemPoke.fullname>>, cost: _p \
<<if $ItemPoke.stackable is true>>each<<endif>>\
<br>\
<<else>>\
<<Bullet>> <br>\
<<endif>>\
<</for>>\
<span id="storereport"></span>\
\
<<unset _item>>\
\
<hr>\
@@color:Gold;Inventory@@ <span id="InvQty"><<ReportInvFullness>></span>
<<for _i to 0; _i < $PC[$CC][$PCinven].length; _i++>>\
<<set _item to $PC[$CC][$PCinven][_i]>>\
<<DescribeItem _item>>\
<<set _desc to $ItemPoke.fullname>>\
<<set _p to $ItemPoke.price / 2>>\
<!-- half price for gems -->\
<<if (_item[0] > 549) and (_item[0] < 560)>>\
<<set _p to _p / 2>>\
<<endif>>\
<<set _p to Math.trunc(_p)>>\
<<capture _i, _p>>\
<<set _st to $ItemPoke.stackable>>\
<<if $ItemPoke.unique is true>>\
<span class="grayb"><<button "[Unique]">><</button>> <<print $ItemPoke.fullname>></span>
<<elseif _desc neq "none">>\
<<if $DebugMode>>(_item): <<endif>>\
<<set _buttontext to "[Pawn for " + _p + " gold]">>\
<<button "_buttontext">>
<!-- Sugarcube does not clone values until passage refresh -->\
<<set _AAAA to $PC[$CC][$PCinven][_i][0]>>
<<set _BBBB to $PC[$CC][$PCinven][_i][1]>>
<<set _CCCC to 1>>
<<set _DDDD to $PC[$CC][$PCinven][_i][3]>>
<<set _EEEE to $PC[$CC][$PCinven][_i][4]>>
<<set _ByValHack to [_AAAA, _BBBB, _CCCC, _DDDD, _EEEE]>>
<<DescribeItem _ByValHack>>
<<set _st to $ItemPoke.stackable>>\
<<set _throwaway to setup.additemtostore($Selene, _ByValHack)>>
<<set _desc to $ItemPoke.fullname>>\
<<replace "#storereport">><<GainGold _p>><</replace>>\
<!-- if has qty, subtract one, otherwise remove -->\
<<if $PC[$CC][$PCinven][_i][2] > 1>>\
<<set $PC[$CC][$PCinven][_i][2] to $PC[$CC][$PCinven][_i][2] -1>>
<<else>>\
<<set $PC[$CC][$PCinven][_i] to [0,0,0,0,0]>>
<<endif>>\
<<set _asd to Engine.play(passage(), true)>>
<<replace "#InvQty">><<ReportInvFullness>><</replace>>
<</button>> _desc
<<endif>>\
<</capture>>\
<</for>>\
@@color:LightGreen;Transformation debug tool@@
<span id="KeypSpace">\
<<link "space) Finished" "TownSquare">>
<</link>>\
</span>
<hr>\
<<set $TFmorph to "bunny-morph">>\
<<set $TFsex to "male">>\
<<set $TFsource to "sex">>\
\
@@color:Gold;Morph@@: <span id="TFmorph">bunny-morph</span>
<<button "ant">><<set $TFmorph to "ant">><<TFtest>><</button>> \
<<button "bunny-morph">><<set $TFmorph to "bunny-morph">><<TFtest>><</button>> \
<<button "cat-morph">><<set $TFmorph to "cat-morph">><<TFtest>><</button>> \
<<button "demon">><<set $TFmorph to "demon">><<TFtest>><</button>> \
<<button "drider">><<set $TFmorph to "drider">><<TFtest>><</button>> \
<<button "fox-morph">><<set $TFmorph to "fox-morph">><<TFtest>><</button>> \
<<button "hellhound">><<set $TFmorph to "hellhound">><<TFtest>><</button>> \
<<button "horse">><<set $TFmorph to "horse">><<TFtest>><</button>> \
<<button "human">><<set $TFmorph to "human">><<TFtest>><</button>> \
<<button "hydra">><<set $TFmorph to "hydra">><<TFtest>><</button>> \
<<button "minotaur">><<set $TFmorph to "minotaur">><<TFtest>><</button>>
<<button "naga">><<set $TFmorph to "naga">><<TFtest>><</button>> \
<<button "rat-morph">><<set $TFmorph to "rat-morph">><<TFtest>><</button>> \
<<button "scorpion">><<set $TFmorph to "scorpion">><<TFtest>><</button>> \
<<button "slime">><<set $TFmorph to "slime">><<TFtest>><</button>> \
<<button "snake">><<set $TFmorph to "snake">><<TFtest>><</button>> \
<<button "spider">><<set $TFmorph to "spider">><<TFtest>><</button>> \
<<button "tentacle">><<set $TFmorph to "tentacle">><<TFtest>><</button>> \
<<button "troll">><<set $TFmorph to "troll">><<TFtest>><</button>> \
<<button "wolf">><<set $TFmorph to "wolf">><<TFtest>><</button>> \
<<button "wolf-morph">><<set $TFmorph to "wolf-morph">><<TFtest>><</button>> \
@@color:Gold;Sex@@: <span id="TFsex">male</span>
<<button "male">><<set $TFsex to "male">><<TFtest>><</button>> \
<<button "female">><<set $TFsex to "female">><<TFtest>><</button>> \
<<button "herm">><<set $TFsex to "herm">><<TFtest>><</button>> \
@@color:Gold;Source@@: <span id="TFsource">sex</span>
<<button "sex">><<set $TFsource to "sex">><<TFtest>><</button>> \
<<button "meat">><<set $TFsource to "meat">><<TFtest>><</button>> \
<<button "semen">><<set $TFsource to "semen">><<TFtest>><</button>> \
<<button "milk">><<set $TFsource to "milk">><<TFtest>><</button>> \
<<button "Do transform">>\
<<replace "#TextOutput">>\
<<set $ForceMon to [$TFmorph, $TFsex]>>\
<<GetMon $ForceMon>>\
<<DoTransform $Mon.anatomy "sex">>\
<</replace>>\
<</button>>
<hr>\
<span id="TextOutput">Results go here</span><<widget "TFtest">>\
<<replace "#TFmorph">><<print $TFmorph>><</replace>>\
<<replace "#TFsex">><<print $TFsex>><</replace>>\
<<replace "#TFsource">><<print $TFsource>><</replace>>\
<</widget>>\
<<widget "DrawAvPreset">>\
<<set $ABCtempA to _args[0]>>\
<<set $ABCtempB to _args[1]>>\
<<script>>
State.variables.PC[State.variables.CC][State.variables.PCavatar] = [State.variables.ABCtempA, State.variables.ABCtempB];
if (setup.ElementExists("myCanvas")) {
if (setup.ClearCanvas("myCanvas") == 0) {
};
if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};
};
if (setup.ElementExists("CharGenIconCanvas")) {
if (setup.ClearCanvas("CharGenIconCanvas") == 0) {
};
if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "CharGenIconCanvas") == 0) {};
};
<</script>>
\
<<set _ABCavatar to $ImgPath + "avatars/" + _args[0] + _args[1] + ".jpg">>\
<<replace "#CapAvatar">><img id="CaptionPortraitIMG" @src="_ABCavatar" style="width:200px"><</replace>>\
<<unset $ABCtempA>>\
<<unset $ABCtempB>>\
<</widget>>\
<<widget "AssignIconByAvatar">>\
<<GetHairColors>>\
<<set _IconArray to []>>\
<<if _args[0] is "HumanM">>\
<<set _IconArray[0] to [ [1,3], [3,5], [5,8], 0, _HairRed]>>\
<<set _IconArray[1] to [ [1,4], [2,0], [5,0], 0, ""]>>\
<<set _IconArray[2] to [ [1,8], [3,5], [4,4], 0, _HairBlack]>>\
<<set _IconArray[3] to [ [1,1], [2,1], [5,3], 0, _HairBrunette]>>\
<<set _IconArray[4] to [ [1,2], [2,3], [4,3], 0, _HairWhite]>>\
<<set _IconArray[5] to [ [1,6], [2,4], [4,0], 0, _HairPurple]>>\
<<set _IconArray[6] to [ [1,3], [2,7], [5,0], 0, _HairWhite]>>\
<<set _IconArray[7] to [ [1,4], [3,9], [6,7], 0, _HairPink]>>\
<<set _IconArray[8] to [ [1,1], [3,0], [5,7], 0, _HairBlack]>>\
<<set _IconArray[9] to [ [1,1], [2,6], [5,1], 0, _HairBrown]>>\
<<set _IconArray[10] to [ [1,4], [2,3], [5,0], 0, _HairBlue]>>\
<<set _IconArray[11] to [ [1,3], [2,7], [5,2], 0, _HairGren]>>\
<<set $PC[$CC][$PCicon] to _IconArray[_args[1] -100]>>\
<<if _args[2] is "draw">>\
<<DrawAvPreset _args[0] _args[1]>>\
<<endif>>\
<<elseif _args[0] is "HumanF">>\
<<set _IconArray[0] to [ [0,4], [2,2], [4,5], 0, ""]>>\
<<set _IconArray[1] to [ [0,4], [2,3], [4,6], 0, _HairPink]>>\
<<set _IconArray[2] to [ [0,6], [2,5], [4,1], 0, _HairWhite]>>\
<<set _IconArray[3] to [ [0,2], [3,4], [6,5], 0, "hue-rotate(-30deg) saturate(100%) brightness(100%)"]>>\
<<set _IconArray[4] to [ [0,1], [2,6], [5,1], 0, "hue-rotate(200deg) saturate(100%) brightness(100%)"]>>\
<<set _IconArray[5] to [ [0,0], [2,4], [4,5], 0, "hue-rotate(60deg) saturate(100%) brightness(100%)"]>>\
<<set _IconArray[6] to [ [0,1], [2,1], [5,0], 0, _HairBrown]>>\
<<set _IconArray[7] to [ [0,4], [3,7], [4,5], 0, "hue-rotate(180deg) saturate(50%) brightness(30%)"]>>\
<<set _IconArray[8] to [ [0,9], [2,7], [5,6], 0, "hue-rotate(165deg) saturate(100%) brightness(100%)"]>>\
<<set _IconArray[9] to [ [0,0], [3,6], [5,0], 0, _HairRed]>>\
<<set _IconArray[10] to [ [0,7], [3,8], [5,5], 0, _HairBlonde]>>\
<<set _IconArray[11] to [ [0,1], [2,6], [5,0], 0, _HairPlatinumBlone]>>\
<<set $PC[$CC][$PCicon] to _IconArray[_args[1] - 100]>>\
<<if _args[2] is "draw">>\
<<DrawAvPreset _args[0] _args[1]>>\
<<endif>>\
<<else>>\
@@color:Yellow;Warning: AssignIconByAvatar has no (<<print _args[0]>>) entry@@
<<endif>>\
<</widget>>\
<<widget "ModifyAvatar">>\
<<set _ExternalSource to "">>\
<<button "External Image">>
<<replace "#CapAvatar">><img id="CaptionPortraitIMG" @src="_ExternalSource" style="width:200px"><</replace>>\
<<set $PC[$CC][$PCavatar][0] to "external">>\
<<set $PC[$CC][$PCavatar][1] to _ExternalSource>>\
<<script>>
CaptionPortraitIMG.addEventListener('error', function handleError() {
console.log(CaptionPortraitIMG.src);
CaptionPortraitIMG.style.display = 'none';
const myTextBox = document.getElementById("textbox--externalsource");
myTextBox.value = "Invalid path or URL";
State.variables.PC[State.variables.CC][State.variables.PCavatar] = ["Human", 100];
});
<</script>>
<</button>>: <<textbox "_ExternalSource" _ExternalSource onfocus="this.value=''">>
\
<<timed 200ms>>\
<<script>>
const urlTB = document.getElementById('textbox--externalsource');
urlTB.addEventListener('click', function() {
this.value = "";
});
<</script>>\
<</timed>>\
\
<<if 1 is "implement me">>\
<<button "[Change on transform]">>
<</button>>: <span id="AutoAvatar">(Not implemented)</span>
<<endif>>\
<table>\
<tr>\
<td style="vertical-align: top;border: 20px solid #111111;">\
\
<div class="button-group">\
<<button "[Human M]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "HumanM">><</replace>>\
<</button>>
<<button "[Human F]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "HumanF">><</replace>>\
<</button>>
<<button "[Bunny]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Bunny">><</replace>>\
<</button>>
<<button "[Cat]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Cat">><</replace>>\
<</button>>
<<button "[Demon]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Demon">><</replace>>\
<</button>>
<<button "[Fox]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Fox">><</replace>>\
<</button>>
<<button "[Goblin]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Goblin">><</replace>>\
<</button>>
<<button "[Hellhound]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Hellhound">><</replace>>\
<</button>>
<<button "[Insect]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Insect">><</replace>>\
<</button>>
<<button "[Naga]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Naga">><</replace>>\
<</button>>
<<button "[Minotaur]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Minotaur">><</replace>>\
<</button>>
<<button "[Slime]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Slime">><</replace>>\
<</button>>
<<button "[Wolf]">>
<<replace "#AvatarChooserPortal">><<ShowAvatar "Wolf">><</replace>>\
<</button>>\
</div>\
\
</td>\
<td style="vertical-align: top;border: 8px solid #111111;">\
<span id="AvatarChooserPortal"><<ShowAvatar "HumanM">></span>\
\
</td>\
</tr>\
</table>\
<hr>
<</widget>>\
<<widget "GetHairColors">>\
<<set _HairPlatinumBlonde to "hue-rotate(0deg) saturate(100%) brightness(100%)">>\
<<set _HairBrunette to "hue-rotate(300deg) saturate(50%) brightness(100%)">>\
<<set _HairBrown to "hue-rotate(300deg) saturate(100%) brightness(50%)">>\
<<set _HairBlack to "hue-rotate(180deg) saturate(50%) brightness(30%)">>\
<<set _HairRed to "hue-rotate(265deg) saturate(110%) brightness(90%)">>\
<<set _HairBlonde to "hue-rotate(0deg) saturate(150%) brightness(100%)">>\
<<set _HairWhite to "hue-rotate(180deg) saturate(5%) brightness(100%)">>\
<<set _HairBlue to "hue-rotate(165deg) saturate(100%) brightness(100%)">>\
<<set _HairPink to "hue-rotate(270deg) saturate(100%) brightness(100%)">>\
<<set _HairOrange to "hue-rotate(-30deg) saturate(100%) brightness(100%)">>\
<<set _HairGreen to "hue-rotate(60deg) saturate(100%) brightness(100%)">>\
<<set _HairPurple to "hue-rotate(200deg) saturate(100%) brightness(100%)">>\
<<if $DebugMode is true>>\
<<set _HairTestA to "hue-rotate(30deg) saturate(100%) brightness(100%)">>\
<<set _HairTestB to []>>\
<<set _HairTestB[0] to "hue-rotate(90deg) saturate(100%) brightness(100%)">>\
<<set _HairTestB[1] to "hue-rotate(90deg) saturate(100%) brightness(100%)">>\
<<endif>>\
\
<</widget>>\
<<widget "ModifyIcon">>\
@@color:Gold;Avatar@@
<canvas id="myCanvas" width="64" height="64" style="border:0px solid #d3d3d3;">
Your browser does not support the HTML canvas tag.
</canvas>\
<hr>\
\
@@color:Gold;Presets@@
<<button "[M0]">> <<AssignIconByAvatar "HumanM" 100 "draw">><</button>> \
<<button "[M1]">> <<AssignIconByAvatar "HumanM" 101 "draw">><</button>> \
<<button "[M2]">> <<AssignIconByAvatar "HumanM" 102 "draw">><</button>> \
<<button "[M3]">> <<AssignIconByAvatar "HumanM" 103 "draw">><</button>> \
<<button "[M4]">> <<AssignIconByAvatar "HumanM" 104 "draw">><</button>> \
<<button "[M5]">> <<AssignIconByAvatar "HumanM" 105 "draw">><</button>> \
<<button "[M6]">> <<AssignIconByAvatar "HumanM" 106 "draw">><</button>> \
<<button "[M7]">> <<AssignIconByAvatar "HumanM" 107 "draw">><</button>> \
<<button "[M8]">> <<AssignIconByAvatar "HumanM" 108 "draw">><</button>> \
<<button "[M9]">> <<AssignIconByAvatar "HumanM" 109 "draw">><</button>> \
<<button "[M10]">><<AssignIconByAvatar "HumanM" 110 "draw">><</button>> \
<<button "[M11]">><<AssignIconByAvatar "HumanM" 111 "draw">><</button>>
\
<<button "[F0]">> <<AssignIconByAvatar "HumanF" 100 "draw">><</button>> \
<<button "[F1]">> <<AssignIconByAvatar "HumanF" 101 "draw">><</button>> \
<<button "[F2]">> <<AssignIconByAvatar "HumanF" 102 "draw">><</button>> \
<<button "[F3]">> <<AssignIconByAvatar "HumanF" 103 "draw">><</button>> \
<<button "[F4]">> <<AssignIconByAvatar "HumanF" 104 "draw">><</button>> \
<<button "[F5]">> <<AssignIconByAvatar "HumanF" 105 "draw">><</button>> \
<<button "[F6]">> <<AssignIconByAvatar "HumanF" 106 "draw">><</button>> \
<<button "[F7]">> <<AssignIconByAvatar "HumanF" 107 "draw">><</button>> \
<<button "[F8]">> <<AssignIconByAvatar "HumanF" 108 "draw">><</button>> \
<<button "[F9]">> <<AssignIconByAvatar "HumanF" 109 "draw">><</button>> \
<<button "[F10]">><<AssignIconByAvatar "HumanF" 110 "draw">><</button>> \
<<button "[F11]">><<AssignIconByAvatar "HumanF" 111 "draw">><</button>> \
\
<<if $DebugMode is true>>\
<hr>\
@@color:Debug colors@@
<<button "[Test A]">>
<<GetHairColors>>\
<<set $PC[$CC][$PCicon][4] to _HairTestA>>
<<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>>
<</button>> \
<<button "[Test B]">>
<<GetHairColors>>\
<<set $PC[$CC][$PCicon][4] to _HairTestB>>
<<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>>
<</button>> \
<<endif>>\
<hr>\
@@color:Gold;Hair Color picker@@
<<GetHairColors>>\
<<button "[Platinum Blonde]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(0deg) saturate(100%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Brunette]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(300deg) saturate(50%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Brown]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(300deg) saturate(100%) brightness(50%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Black]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(180deg) saturate(50%) brightness(30%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Red]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(270deg) saturate(150%) brightness(60%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Blonde]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(0deg) saturate(150%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[White]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(180deg) saturate(5%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Blue]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(165deg) saturate(100%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Pink]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(270deg) saturate(100%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Orange]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(-30deg) saturate(100%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Green]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(60deg) saturate(100%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<<button "[Purple]">><<set $PC[$CC][$PCicon][4] to "hue-rotate(200deg) saturate(100%) brightness(100%)">><<script>>if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {};<</script>><</button>> \
<div id="NavMap">\
<<script>>
setup.MapClick = function (x, y) {
var IconRow = Math.trunc(y / 64);
var IconCol = Math.trunc(x / 64);
var t = "";
const CC = State.variables.CC;
const PCIconPTR = State.variables.PCicon;
if (IconRow == 0) {
State.variables.PC[CC][PCIconPTR][0] = [IconRow, IconCol];
} else if (IconRow == 1) {
State.variables.PC[CC][PCIconPTR][0] = [IconRow, IconCol];
} else if (IconRow == 2) {
State.variables.PC[CC][PCIconPTR][1] = [IconRow, IconCol];
} else if (IconRow == 3) {
State.variables.PC[CC][PCIconPTR][1] = [IconRow, IconCol];
} else if (IconRow == 4) {
State.variables.PC[CC][PCIconPTR][2] = [IconRow, IconCol];
} else if (IconRow == 5) {
State.variables.PC[CC][PCIconPTR][2] = [IconRow, IconCol];
} else if (IconRow == 6) {
State.variables.PC[CC][PCIconPTR][2] = [IconRow, IconCol];
} else {
t = t + " (selection out of bounds)";
};
if (setup.ClearCanvas("myCanvas") == 0) {
};
if (setup.DrawCharIcon(State.variables.PC[CC][PCIconPTR], "myCanvas") == 0) {
};
if (passage() == "CharGen") {
if (setup.ClearCanvas("CharGenIconCanvas") == 0) {
};
const CharGenIconCanvas = document.getElementById("CharGenIconCanvas");
const ctxCharGen = CharGenIconCanvas.getContext("2d");
ctxCharGen.drawImage(myCanvas, 0, 0);
};
};
<</script>>\
\
<<set _foo to $ImgPath + "IconPalette.png">>\
<img @src="_foo" usemap="#image-map" id="IconPalette">
<<nobr>>
<map name="image-map">
<area onclick="SugarCube.setup.MapClick(event.offsetX, event.offsetY)" coords="0, 0, 640, 448" shape="rect">
</map>
<</nobr>>
<span id="TextArea">\
</span>\
</div>\
<<timed 500ms>>\
<<script>>
if (setup.DrawCharIcon(State.variables.PC[State.variables.CC][State.variables.PCicon], "myCanvas") == 0) {
};
<</script>>\
<</timed>>\
<</widget>>\
<<widget "HairRestyle">>\
<<set _HeadCount to 0>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _LengthList to ["very short","short","medium","long","very long"]>>\
<<set _StyleList to ["straight","curly","braided","frizzy","mohawk","pigtails","ponytail"]>>\
<<set _ColorList to ["blonde","brunette","brown","black","red","platinum blonde","white","blue","pink","orange","green","purple"]>>\
\
<<for _i to 0; _i < _bpqty; _i++>>\
\
<<if $PC[$CC][$PCbp][_i].type is $BPhead>>\
<!-- shrink old hair size to new hair size -->\
<<if $PC[$CC][$PCbp][_i].size > _LengthList.length>>\
<<set $PC[$CC][$PCbp][_i].size to random(0, _LengthList.length)>>\
<<endif>>\
\
<<set _HeadCount to _HeadCount +1>>\
<<if _HeadCount > 1>>\
@@color:Yellow;Dev note:@@ support for multiple heads has not been implemented. Sorry, hydras.
<<endif>>\
@@color:LightGreen;<<print setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "formal")>>@@:
* Hair length: <span id="LengthGoesHere"><<print _LengthList[$PC[$CC][$PCbp][_i].size]>></span>
* Hair style: <span id="StyleGoesHere"><<print $PC[$CC][$PCbp][_i].style>></span>
* Hair color: <span id="ColorGoesHere"><<print $PC[$CC][$PCbp][_i].hair>></span>
Description: <span id="DescGoeshere"><<DescribeHair $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>></span>
@@color:Gold;Length@@
<<for _j to 0; _j < _LengthList.length; _j++>>\
<<capture _i _j>>\
<<set _spanid to "length" + _j>>\
<<if $PC[$CC][$PCbp][_i].size is _j>>\
<<set _WhichColor to "greenb">>\
<<else>>\
<<set _WhichColor to "blueb">>\
<<endif>>\
<span @id="_spanid" @class="_WhichColor">\
<<button _LengthList[_j]>>
<<set $PC[$CC][$PCbp][_i].size to _j>>
<<replace "#LengthGoesHere">><<print _LengthList[$PC[$CC][$PCbp][_i].size]>><</replace>>
<<replace "#DescGoeshere">><<DescribeHair $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>><</replace>>
<<for _k to 0; _k < _LengthList.length; _k++>>\
<<set _spanid to "length" + _k>>\
<<if _j is _k>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"greenb")>>
<<else>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"blueb")>>
<<endif>>\
<</for>>\
<</button>><<if _j +1 < _LengthList.length>> | <<endif>>\
</span>\
<</capture>>\
<</for>>\
@@color:Gold;Style@@
<<for _j to 0; _j < _StyleList.length; _j++>>\
<<capture _i _j>>\
<<set _spanid to "style" + _j>>\
<<if $PC[$CC][$PCbp][_i].style is _StyleList[_j]>>\
<<set _WhichColor to "greenb">>\
<<else>>\
<<set _WhichColor to "blueb">>\
<<endif>>\
<span @id="_spanid" @class="_WhichColor">\
<<button _StyleList[_j]>>
<<set $PC[$CC][$PCbp][_i].style to _StyleList[_j]>>
<<replace "#StyleGoesHere">><<print _StyleList[_j]>><</replace>>
<<replace "#DescGoeshere">><<DescribeHair $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>><</replace>>
<<for _k to 0; _k < _StyleList.length; _k++>>\
<<set _spanid to "style" + _k>>\
<<if _j is _k>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"greenb")>>
<<else>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"blueb")>>
<<endif>>\
<</for>>\
<</button>><<if _j +1 < _StyleList.length>> | <<endif>>\
</span>\
<</capture>>\
<</for>>\
@@color:Gold;Color@@
<<for _j to 0; _j < _ColorList.length; _j++>>\
<<capture _i _j>>\
<<set _spanid to "color" + _j>>\
<<if $PC[$CC][$PCbp][_i].hair is _ColorList[_j]>>\
<<set _WhichColor to "greenb">>\
<<else>>\
<<set _WhichColor to "blueb">>\
<<endif>>\
<span @id="_spanid" @class="_WhichColor">\
<<button _ColorList[_j]>>
<<set $PC[$CC][$PCbp][_i].hair to _ColorList[_j]>>
<<replace "#ColorGoesHere">><<print _ColorList[_j]>><</replace>>
<<replace "#DescGoeshere">><<DescribeHair $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>><</replace>>
<<for _k to 0; _k < _ColorList.length; _k++>>\
<<set _spanid to "color" + _k>>\
<<if _j is _k>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"greenb")>>
<<else>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"blueb")>>
<<endif>>\
<</for>>\
<</button>><<if _j +1 < _ColorList.length>> | <<endif>>\
</span>\
<</capture>>\
<</for>>\
<<endif>>\
<</for>>\
<</widget>>\
<<widget "TailRestyle">>\
<<set _TailCount to 0>>\
<<set _bpqty to $PC[$CC][$PCbp].length>>\
<<set _LengthList to ["very short","short","medium","long","very long"]>>\
<<set _StyleList to ["plain","braided","ribbons","poofy","elegant"]>>\
<<set _ColorList to ["blonde","brunette","brown","black","red","platinum blonde","white","blue","pink","orange","green","purple"]>>\
\
<<for _i to 0; _i < _bpqty; _i++>>\
<<if $PC[$CC][$PCbp][_i].type is $BPtail>>\
<!-- shrink old hair size to new hair size -->\
<<if $PC[$CC][$PCbp][_i].size > _LengthList.length>>\
<<set $PC[$CC][$PCbp][_i].size to random(0, _LengthList.length)>>\
<<endif>>\
\
<<set _TailCount to _TailCount +1>>\
<<if _TailCount > 1>>\
@@color:Yellow;Dev note:@@ support for multiple tails has not been implemented. Sorry, foxes.
<<endif>>\
@@color:LightGreen;<<print setup.bpptrtoname($PC[$CC][$PCbp][_i].type, "formal")>>@@:
* Tail length: <span id="LengthGoesHere"><<print _LengthList[$PC[$CC][$PCbp][_i].size]>></span>
* Tail style: <span id="StyleGoesHere"><<print $PC[$CC][$PCbp][_i].style>></span>
* Tail color: <span id="ColorGoesHere"><<print $PC[$CC][$PCbp][_i].hair>></span>
Description: <span id="DescGoeshere"><<DescribeTail $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>></span>
@@color:Gold;Length@@
<<for _j to 0; _j < _LengthList.length; _j++>>\
<<capture _i _j>>\
<<set _spanid to "length" + _j>>\
<<if $PC[$CC][$PCbp][_i].size is _j>>\
<<set _WhichColor to "greenb">>\
<<else>>\
<<set _WhichColor to "blueb">>\
<<endif>>\
<span @id="_spanid" @class="_WhichColor">\
<<button _LengthList[_j]>>
<<set $PC[$CC][$PCbp][_i].size to _j>>
<<replace "#LengthGoesHere">><<print _LengthList[$PC[$CC][$PCbp][_i].size]>><</replace>>
<<replace "#DescGoeshere">><<DescribeTail $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>><</replace>>
<<for _k to 0; _k < _LengthList.length; _k++>>\
<<set _spanid to "length" + _k>>\
<<if _j is _k>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"greenb")>>
<<else>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"blueb")>>
<<endif>>\
<</for>>\
<</button>><<if _j +1 < _LengthList.length>> | <<endif>>\
</span>\
<</capture>>\
<</for>>\
@@color:Gold;Style@@
<<for _j to 0; _j < _StyleList.length; _j++>>\
<<capture _i _j>>\
<<set _spanid to "style" + _j>>\
<<if $PC[$CC][$PCbp][_i].style is _StyleList[_j]>>\
<<set _WhichColor to "greenb">>\
<<else>>\
<<set _WhichColor to "blueb">>\
<<endif>>\
<span @id="_spanid" @class="_WhichColor">\
<<button _StyleList[_j]>>
<<set $PC[$CC][$PCbp][_i].style to _StyleList[_j]>>
<<replace "#StyleGoesHere">><<print _StyleList[_j]>><</replace>>
<<replace "#DescGoeshere">><<DescribeTail $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>><</replace>>
<<for _k to 0; _k < _StyleList.length; _k++>>\
<<set _spanid to "style" + _k>>\
<<if _j is _k>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"greenb")>>
<<else>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"blueb")>>
<<endif>>\
<</for>>\
<</button>><<if _j +1 < _StyleList.length>> | <<endif>>\
</span>\
<</capture>>\
<</for>>\
@@color:Gold;Color@@
<<for _j to 0; _j < _ColorList.length; _j++>>\
<<capture _i _j>>\
<<set _spanid to "color" + _j>>\
<<if $PC[$CC][$PCbp][_i].hair is _ColorList[_j]>>\
<<set _WhichColor to "greenb">>\
<<else>>\
<<set _WhichColor to "blueb">>\
<<endif>>\
<span @id="_spanid" @class="_WhichColor">\
<<button _ColorList[_j]>>
<<set $PC[$CC][$PCbp][_i].hair to _ColorList[_j]>>
<<replace "#ColorGoesHere">><<print _ColorList[_j]>><</replace>>
<<replace "#DescGoeshere">><<DescribeTail $PC[$CC][$PCbp][_i].size $PC[$CC][$PCbp][_i].style $PC[$CC][$PCbp][_i].hair>><</replace>>
<<for _k to 0; _k < _ColorList.length; _k++>>\
<<set _spanid to "color" + _k>>\
<<if _j is _k>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"greenb")>>
<<else>>\
<<set _asd to setup.ChangeButtonClass(_spanid,"blueb")>>
<<endif>>\
<</for>>\
<</button>><<if _j +1 < _ColorList.length>> | <<endif>>\
</span>\
<</capture>>\
<</for>>\
<<endif>>\
<</for>>\
<</widget>>\<span id="KeypESC">\
<<link "esc) close window">>
<<script>>
Dialog.close();
document.activeElement.blur();
<</script>>
<</link>>\
</span>\
<br>\
<<button "[Avatar]">>
<<replace "#ConfigPortal">><<ModifyAvatar>><</replace>>\
<</button>> | \
<<button "[Map Icon]">>
<<replace "#ConfigPortal">><<ModifyIcon>><</replace>>\
<</button>> | \
<<button "[Hair]">>
<<replace "#ConfigPortal">><<HairRestyle>><</replace>>\
<</button>> \
<<if passage() is "CharGen">><<else>> | \
<<button "[Tail]">>
<<replace "#ConfigPortal">><<TailRestyle>><</replace>>\
<</button>>\
<<endif>>\
\
<hr>\
<span id="ConfigPortal"><<ModifyAvatar>></span>\
<<widget "CharGenShowIcons">>\
<table><tr>\
<<for _ShowAVS to 1; _ShowAVS < 5; _ShowAVS++>>\
<<capture _ShowAVS>>\
<td>\
<<if $PC[$CC][$PCicon] is _ShowAVS>>\
<span style = ""><<set _q to $ImgPath + "icon" + _ShowAVS + ".png">><<link [img[_q]]>><</link>></span>\
<<else>>\
<span style = "filter: grayscale(100%)">\
<<set _q to $ImgPath + "icon" + _ShowAVS + ".png">>\
<<link [img[_q]]>>\
<<set $PC[$CC][$PCicon] to _ShowAVS>>\
<<replace "#CharGenICONS">><<CharGenShowIcons>><</replace>>\
<</link>>\
</span>\
<<endif>>\
</td>\
<</capture>>\
<</for>>\
</tr></table>\
<br>\
<table><tr>\
<<for _ShowAVS to 5; _ShowAVS < 9; _ShowAVS++>>\
<<capture _ShowAVS>>\
<td>\
<<if $PC[$CC][$PCicon] is _ShowAVS>>\
<span style = ""><<set _q to $ImgPath + "icon" + _ShowAVS + ".png">><<link [img[_q]]>><</link>></span>\
<<else>>\
<span style = "filter: grayscale(100%)">\
<<set _q to $ImgPath + "icon" + _ShowAVS + ".png">>\
<<link [img[_q]]>>\
<<set $PC[$CC][$PCicon] to _ShowAVS>>\
<<replace "#CharGenICONS">><<CharGenShowIcons>><</replace>>\
<</link>>\
</span>\
<<endif>>\
</td>\
<</capture>>\
<</for>>\
</tr></table>\
<</widget>>\
<<widget "CharGenShowAvatars">>\
<<if $WORLD.MobileMode is 1>>\
<table><tr><td>\
<span id="CapAvatar">\
<<set _q to $AvatarPath + "Human100.png">>\
<<link [img[_q]]>>\
<</link>>\
</span>\
</td></tr><tr><td>
<<button "[Change Avatar]">>
<<script>>
Dialog.setup("Avatar configuration");
Dialog.wiki(Story.get("AvatarChooser").processText());
Dialog.open();
<</script>>
<</button>>
</td></tr></table>\
<<else>>\
<table><tr>\
<<for _ShowAVS to 100; _ShowAVS < 106; _ShowAVS++>>\
<<capture _ShowAVS>>\
<td>\
<<if $PC[$CC][$PCavatar][1] is _ShowAVS>>\
<span style = "filter: grayscale(0%)"><<set _q to $AvatarPath + $PC[$CC][$PCavatar][0] + _ShowAVS + ".png">><<link [img[_q]]>><</link>></span>\
<<else>>\
<span style = "filter: grayscale(100%)">\
<<set _q to $AvatarPath + $PC[$CC][$PCavatar][0] + _ShowAVS + ".png">>\
<<link [img[_q]]>>\
<<set $PC[$CC][$PCavatar][1] to _ShowAVS>>\
<<replace "#CharGenAVATARS">><<CharGenShowAvatars>><</replace>>\
<</link>>\
</span>\
<<endif>>\
<<if _ShowAVS is 105>><br><<endif>>\
</td>\
<</capture>>\
<</for>>\
</tr></table>\
<<endif>>\
<</widget>>\
The Rottweiler continued to ravish her, pounding her harder and harder with every passing minute. Jessica screamed and moaned as she was taken by this brute force of nature, her body wracked by waves of pleasure she had never known existed. Every muscle in her body tightened as she felt the animal inside of her relentlessly drive towards his release.
And then it happened; the Rottweiler let out a deep growl as he sprayed his hot seed all throughout her insides. Jessica’s body shook with the force of his orgasm as she felt every inch of him slide out of her dripping wet pussy. The world around her seemed to fade away as she lay there, panting heavily and covered in a thin layer of sweat and cum.
she’s surrounded by lustful canines of all shapes and sizes. Their hot breath blows against her skin as they circle around her, eager to claim their prize. Their growls fill the room with primal desire as they wait impatiently for permission to touch her. With a deep breath, Jessica nods in consent and instantly feels a wave of relief wash over her. Hands grab hold of her body, exploring every curve and crevice before pushing her flat against a wall.*
“Mine,” a low voice growls close to her ear. Jessica whimpers in response, arching her back to grant access to anyone willing to take it. Claws dig into her thighs as paws slap against her rear end, propelling her towards another eager participant in the group orgy. This continues for hours upon hours; each new partner bringing something new and exciting to the table. By the time Jessica awakes drenched in sweat, she knows that she’ll never forget this experience.*
Jessica whimpers as the sheer size of the dog’s cock tears at her insides, stretching her walls and filling her up. She can feel it throbbing within her, growing ever larger as it continues to slam into her over and over again.
The man beside her strokes her clit as he whispers words of encouragement into her ear. “That’s it, baby. Relax and take it. Accept your fate as a toy for horny animals.” His fingers glide over her swollen nub, teasing it with gentle circles before dipping down to rub at her entrance, spreading her juices around her hole. She moans louder, the sound muffled by the thick folds of flesh invading her mouth.
Suddenly, the dog lets out a loud groan, its hips jerking wildly. Jessica feels the first wave of its spunk flood her womb, its cum shooting out with incredible force. She gasps, unable to believe how much seed this animal contains.
essica shrieks in terror as the massive dog’s massive cock presses deeper into her soaking wet pussy lips, forcing its way inside her despite her best efforts to stop it. She feels incredibly violated, trapped underneath this monstrous creature’s weight, unable to break free from its powerful grasp. Her screams echo throughout the park as passersby look on, some amused by the display of forceful passion, others concerned for the young girl’s wellbeing.
Feeling the hot breath of the massive dog against her thighs, Jessica screams in surprise as the animal begins to force itself inside her tiny skirt. She wriggles and squirms beneath the beast, trying desperately to escape but its grip around her hips is firm and tight. The dog starts to snarl and growl lowly, showing its teeth as it attempts to climb higher over her petite frame.
horse?
Purah watches with hungry eyes as Rex mounts you, positioning himself between your legs and pushing against your thighs to spread them open wide. His massive head presses against your entrance, seeking entry as though it were the most natural thing in the world. You gasp in shock and surprise, struggling weakly beneath him as he continues to push his weight against you, forcing his way deeper inside.
You can feel Rex’s cock twitching within you, pulsing with excitement as he starts to thrust, slowly at first but gaining speed and intensity the longer he moves. His massive size stretches your tiny body impossibly wide, filling you up in ways you never knew possible. But Purah doesn’t seem to care; instead, she kneels behind you, massaging your buttocks possessively while keeping careful track of Rex’s movements from start to finish.
“That’s it, Rex. Take your time, enjoy yourself. You’ll have to last quite some time if you really want to fertilize this sweet thing.”
You struggle to push him off, but he’s much too strong, and it’s far too late. His powerful paws have an unbreakable grasp around your tiny waist and his cock is pumping balls-deep in and out of you with such ferocity that you can barely breath under the relentless fucking he’s giving you.
*Kotone gasped as Michael’s massive cock filled her completely. Its size alone was enough to send shockwaves through her body, making it difficult to catch her breath. Every inch of him seemed to spread her open wider, claiming her as his own. She cried out in both pain and pleasure as he stretched her delicate passage with his immense girth.
With great effort, she managed to wrap her legs around his waist and pull him deeper inside her. Her hips rocked back and forth, meeting his thrusts with equal force. Their moans grew louder as their passion intensified. Sweat dripped down their bodies as they lost themselves in a primal dance of love and worship.
Michael reached out to grab hold of two handfuls of her soft, voluptuous ass cheeks and begun to play with them vigorously as he drove into her, repeatedly impaling her with his enormous spear of flesh. He continued this motion for what felt like hours, until finally they both reached their climaxes simultaneously.
Kotone felt her organs convulse as wave after wave of pleasure crashed over her. She cried out Michael’s name over and over again, her voice hoarse from all the screaming. As for Michael, he let out a roar so loud it shook the very foundations of the mountain itself.Config.history.maxStates = 1;
config.history.controls = false;
config.saves.isAllowed = function () {
return tags().contains("savable");
};
setup.ExportSave = function() {
Save.export()
};
setup.FavIcon = function(path) {
var link = document.querySelector("link[rel~='icon']");
if (!link) {
link = document.createElement('link');
link.rel = 'icon';
document.head.appendChild(link);
}
link.href = path + "FavIcon2.png";
};
/* Execute the handler function when the event triggers. */
$(document).on(':dialogopening', function (ev) {
State.variables.DialogOpen = true;
});
/* Execute the handler function when the event triggers. */
$(document).on(':dialogclosing', function (ev) {
State.variables.DialogOpen = false;
});
setup.HideElement = function(ElementToHide) {
var ElementState = document.getElementById(ElementToHide);
ElementState.style.display = "none";
};
setup.ShowElement = function(ElementToHide) {
var ElementState = document.getElementById(ElementToHide);
ElementState.style.display = "inline";
};
setup.ElementExists = function(which) {
if (document.getElementById(which)) {
return true;
} else {
return false;
};
};
setup.PreloadImages = function(ImgNameArray) {
var images = [];
for (var i = 0; i < ImgNameArray.length; i++) {
images[i] = new Image();
images[i].src = ImgNameArray[i];
};
};
setup.IsNan = function(n) {
return isNaN(n)
};
setup.TypeOf = function(v) {
if (Array.isArray(v)) {
return "array";
};
return typeof v;
};
setup.FindInArray = function(arr, con) {
var i = 0;
for (i = arr.length -1; i > -1; i--) {
if (arr[i] == con) {
return i;
};
};
return -1;
};
setup.PurgeValueBFromArrayA = function(arr, PurgeThis) {
var i = 0
for (i = arr.length -1; i > -1; i--) {
if (arr[i] == PurgeThis) {
arr.splice(i,1);
};
};
return arr;
};
setup.HasKey = function(myObj, myKey) {
return myObj.hasOwnProperty('myKey');
};
setup.DestroyKey = function(myObj, WhichKey) {
delete myObj.WhichKey;
};
setup.XpNeeded = function(level) {
var n = ((2**level) * 10) -10;
var BestScholar = setup.AchievementHandler("Best Scholar", "HAS?", -1);
if (BestScholar > 0) {
n = n - BestScholar;
};
if (n < 0) {
n = 0
};
return n;
};
setup.GenName = function(sex) {
if (sex == "male") {
return either("Atlas","Bahadur","Calderon","Dante","Einhard","Falkner","Gabriel","Hadrian","Icarus","Jacques","Kaden","Luke","Maximillian","Nicodemus","Octavian","Paimon","Ramses","Solomon","Thaddeus","Vladimir");
} else {
return either("Adria","Brunhilda","Cassandra","Deirdre","Elizabeth","Felicity","Gabrielle","Haley","Isabelle","Jade","Katalinka","Luna","Maeve","Nadia","Ophelia","Persephone","Raven","Sabine","Tatiana","Victoria");
};
};
/* Array/object functions: why are js array methods so obtuse? */
setup.Stringify = function(a) {
return JSON.stringify(a);
};
setup.RemoveEveryOneOf = function(This, FromThis) {
var i;
for (i = FromThis.length -1; i > -1; i--) {
if (FromThis[i] == This) {
FromThis.splice(i,1);
};
};
return FromThis;
};
setup.FindInANotB = function(a, b) {
var i;
for (i = 0; i < b.length; i++) {
if (b[i][1] == "used") {
} else {
if (b[i][0] == a) {
return -1;
};
};
};
return "yes";
};
setup.FindInBoth = function(a, b) {
var i;
for (i = 0; i < b.length; i++) {
if (b[i][1] == "used") {
} else {
if (b[i][0] == a) {
return i;
};
};
};
return -1;
};
setup.LowestIn = function(a) {
var l = a[0];
var i;
for (i = a.length -1; i > -1; i--) {
if (a[i] < l) {
l = a[i];
};
};
return l;
};
setup.HighestIn = function(a) {
var h = a[0];
var i;
for (i = a.length -1; i > -1; i--) {
if (a[i] > h) {
h = a[i];
};
};
return h;
};
setup.Shuffle = function(a) {
var j, x, i;
for (i = a.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
x = a[i];
a[i] = a[j];
a[j] = x;
};
return a;
};
/ * end array functions */
/* Quest functions */
setup.IsQuestFinished = function(which) {
/* This would be terribly complicated. try to not need it */
var tf = false;
if (which == 0) {
} else if (which == 1) {
var meep = 0;
if (State.variables.WORLD.selene > 0) {
meep = meep +1;
};
if (State.variables.WORLD.smith > 0) {
meep = meep +1;
};
if (State.variables.WORLD.gstore > 0) {
meep = meep +1;
};
if (State.variables.WORLD.pawn > 0) {
meep = meep +1;
};
if (meep > 2) {
tf = true;
};
} else if (which == 2) {
} else if (which == 3) {
} else if (which == 4) {
} else if (which == 5) {
} else if (which == 6) {
} else if (which == 7) {
} else if (which == 8) {
} else if (which == 9) {
} else if (which == 10) {
};
return tf;
};
setup.ShowQuestProgress = function(which) {
return "(Implement quest progress)";
};
/* End quest functions */
setup.PlayerHasPerk = function(Which) {
var perks = State.variables.PC[State.variables.CC][State.variables.PCperks];
var i = 0;
for (i = 0; i < perks.length; i++) {
if (perks[i] == Which) {
return true;
};
};
return false;
};
setup.CurrentDayCount = function() {
var y = State.variables.WORLD.year;
var d = State.variables.WORLD.day;
var total = (y * 365) + d;
return total;
};
setup.ApplyEffect = function(which, weight) {
var ae = State.variables.PC[State.variables.CC][State.variables.PCeffects];
for (let i = 0; i < ae.length; i++) {
if (ae[i][0].includes(which)) {
State.variables.PC[State.variables.CC][State.variables.PCeffects][i][1] = State.variables.PC[State.variables.CC][State.variables.PCeffects][i][1] + weight;
return i;
};
};
var ExistsAt = State.variables.PC[State.variables.CC][State.variables.PCeffects].length;
State.variables.PC[State.variables.CC][State.variables.PCeffects][ExistsAt] = [];
State.variables.PC[State.variables.CC][State.variables.PCeffects][ExistsAt][0] = which;
State.variables.PC[State.variables.CC][State.variables.PCeffects][ExistsAt][1]= weight;
return ExistsAt;
};
setup.GetEffect = function(which) {
var ae = State.variables.PC[State.variables.CC][State.variables.PCeffects];
for (let i = 0; i < ae.length; i++) {
if (ae[i][0].includes(which)) {
return ae[i][1];
};
};
return 0;
};
/ * kill count ptr back and forth */
setup.MonNameToKillPTR = function(mon) {
if (mon == "bunny-morph") { return 0; }
else if (mon == "cat-morph") { return 1;}
else if (mon == "fox-morph") { return 2;}
else if (mon == "wolf-morph") { return 3;}
else if (mon == "horse") { return 4;}
else if (mon == "ant") { return 5;}
else if (mon == "scorpion") { return 6;}
else if (mon == "centaur") { return 7;}
else if (mon == "human") { return 8;}
else if (mon == "goblin") { return 9;}
else if (mon == "slime") { return 10;}
else if (mon == "spider") { return 11;}
else if (mon == "imp") { return 12;}
else if (mon == "hellhound") { return 13;}
else if (mon == "cow") { return 14;}
else if (mon == "minotaur") { return 15;}
else if (mon == "drider") { return 16;}
else if (mon == "tentacle") { return 17;}
else if (mon == "naga") { return 18;}
else if (mon == "demon") { return 19;}
else if (mon == "succubus") { return 19;}
else if (mon == "incubus") { return 19;}
else if (mon == "omnibus") { return 19;}
else if (mon == "Zehtalia") { return 20;}
else if (mon == "harpy") { return 21;}
else if (mon == "troll") { return 22;}
else if (mon == "rat-morph") { return 23;}
else if (mon == "ratkin") { return 23;}
else if (mon == "hydra") { return 24;}
else if (mon == "dinosaur") { return 25;}
else if (mon == "Neris") { return 26;}
else if (mon == "Charyss") { return 27;}
else if (mon == "wolf") { return 28;}
else if (mon == "snake") { return 29;}
else {
return "-1";
};
};
setup.KillPTRToMonName = function(ptr) {
/* special cases can't go backwards with available data */
var mons = ["bunny-morph", "cat-morph", "fox-morph", "wolf-morph", "horse", "ant", "scorpion", "centaur", "human", "goblin", "slime", "spider", "imp", "hellhound", "cow", "minotaur", "drider", "tentacle", "naga", "demon", "Zehtalia", "harpy", "troll", "rat-morph", "hydra", "dinosaur", "Neris", "Charyss", "wolf","snake"];
return mons[ptr];
};
/* end kill count ptr back and forth */
/* Is this a leftover? */
setup.MapClick = function(a) {
if (a == "Slums") {
Engine.play("Slums");
} else if (a == "Garden") {
Engine.goToPassage("Garden");
};
};
setup.al = function(what) {
var foo = State.variables.GameLog + what + "<br>";
State.variables.GameLog = foo;
};
setup.GetRandomBPptrOfTypeFromList = function(which, BPlist) {
var l = [];
var i = 0;
var p = 0;
for (i = 0; i < BPlist.length; i++) {
if (BPlist[i].type == which) {
l[p] = i;
p = p +1;
};
};
if (l.length < 1) {
return -1;
} else {
var foo = l[random(0, l.length -1)];
return foo;
};
};
setup.AddBodyPart = function(who, bp) {
var n = setup.getnextbodypart();
var bpPTR = State.variables.PCbp;
var haircol = either("blonde","brown","red");
var hairstyle = either("straight","curly");
var hairlength = random(1,3);
var taillength = random(0,4);
if (bp == State.variables.BPhead) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: haircol, style: hairstyle, size: hairlength, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0};
} else if (bp == State.variables.BPtail) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: haircol, style: "plain", size: taillength, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0};
} else if (bp == State.variables.BPwield) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "punch", attacktype: "blunt", mindam: 1, maxdam: 2};
} else if (bp == State.variables.BPpenis) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: false, morph: "human", mascfem: 0, hair: "", size: random(3, 5), attackdesc: "", attacktype: "", mindam: 0, maxdam: 0};
} else if (bp == State.variables.BPboobs) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: random(10, 20), attackdesc: "", attacktype: "", mindam: 0, maxdam: 0};
} else if (bp == State.variables.BPpussy) {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: false, morph: "human", mascfem: 0, hair: "", size: random(3, 7), attackdesc: "", attacktype: "", mindam: 0, maxdam: 0};
} else {
State.variables.PC[who][bpPTR][n] = { type: bp, equip: [0,0,0,0,0], equippable: true, morph: "human", mascfem: 0, hair: "", size: 0, attackdesc: "", attacktype: "", mindam: 0, maxdam: 0};
};
return n;
};
setup.RemoveBodyPart = function(who, type){
var bpPTR = State.variables.PCbp;
var i = 0;
var body = State.variables.PC[who][bpPTR];
for (i = body.length -1; i > -1; i--) {
if (body[i].type == type) {
/* alert(JSON.stringify(State.variables.PC[who][bpPTR][i])); */
var meh = State.variables.PC[who][bpPTR].splice(i, 1);
/* alert(JSON.stringify(meh)); */
return meh[0];
};
};
};
setup.FetchBodyPart = function(who, type){
var bpPTR = State.variables.PCbp;
var i = 0;
var body = State.variables.PC[who][bpPTR];
for (i = body.length -1; i > -1; i--) {
if (body[i].type == type) {
return i;
};
};
};
setup.GetMorphFormatted = function(TheMorph) {
var r = "Error: unrecognized morph: " + TheMorph;
if (TheMorph == "bunny") {
r = "@@color:LightGreen;bunny@@";
} else if (TheMorph == "cat") {
r = "@@color:LightGreen;cat@@";
} else if (TheMorph == "fox") {
r = "@@color:LightGreen;fox@@";
} else if (TheMorph == "wolf") {
r = "@@color:Green;wolf@@";
} else if (TheMorph == "horse") {
r = "@@color:Green;horse@@";
} else if (TheMorph == "snake") {
r = "@@color:Green;snake@@";
} else if (TheMorph == "centaur") {
r = "@@color:Green;centaur@@";
} else if (TheMorph == "ant") {
r = "@@color:DarkOrange;ant@@";
} else if (TheMorph == "scorpion") {
r = "@@color:DarkOrange;scorpion@@";
} else if (TheMorph == "insect") {
r = "@@color:DarkOrange;insect@@";
} else if (TheMorph == "harpy") {
r = "@@color:DarkOrange;harpy@@";
} else if (TheMorph == "human") {
r = "@@color:Aqua;human@@";
} else if (TheMorph == "goblin") {
r = "@@color:Yellow;goblin@@";
} else if (TheMorph == "slime") {
r = "@@color:Yellow;slime@@";
} else if (TheMorph == "rat-morph") {
r = "@@color:Yellow;rat-morph@@";
} else if (TheMorph == "ratkin") {
r = "@@color:Yellow;rat-morph@@";
} else if (TheMorph == "spider") {
r = "@@color:Yellow;spider@@";
} else if (TheMorph == "naga") {
r = "@@color:Yellow;naga@@";
} else if (TheMorph == "hellhound") {
r = "@@color:Orange;hellhound@@";
} else if (TheMorph == "cow") {
r = "@@color:Orange;cow@@";
} else if (TheMorph == "minotaur") {
r = "@@color:Orange;minotaur@@";
} else if (TheMorph == "drider") {
r = "@@color:Orange;drider@@";
} else if (TheMorph == "troll") {
r = "@@color:Orange;troll@@";
} else if (TheMorph == "hydra") {
r = "@@color:Orange;hydra@@";
} else if (TheMorph == "dinosuar") {
r = "@@color:Red;dinosaur@@";
} else if (TheMorph == "tentacle") {
r = "@@color:Red;tentacle@@";
} else if (TheMorph == "demon") {
r = "@@color:Red;@@";
} else if (TheMorph == "succubus") {
r = "@@color:Red;demon@@";
} else if (TheMorph == "incubus") {
r = "@@color:Red;demon@@";
} else if (TheMorph == "omnibus") {
r = "@@color:Red;demon@@";
} else {
r = "format needed for this morph: " + TheMorph;
};
return r;
};
setup.GetStandardSex = function() {
var CC = State.variables.CC;
var sexptr = State.variables.PCsex;
var sex = State.variables.PC[CC][sexptr];
var monsex = "female";
if (sex == "female") {
if (random(1,10) < 8) {
monsex = "male";
};
} else if (sex == "male") {
if (random(1,10) < 4) {
monsex = "male";
};
} else {
if (random(1,10) < 6) {
monsex = "male";
};
};
if (random(1,10) < 3) {
monsex = "herm";
};
return monsex;
};
setup.HasQuestMonsterParts = function(PartType, MonsterSource) {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == PartType) {
if (Inven[i][3] == MonsterSource) {
return i;
}
};
};
return -1;
};
setup.HasItemA = function(A) {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == A) {
return i;
};
};
return -1;
};
setup.HasRope = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 100) {
return i;
};
};
return -1;
};
setup.HasHammer = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 101) {
return i;
} else if (Inven[i][0] == 206) {
return i;
};
};
return -1;
};
setup.HasPick = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 115) {
return i;
};
};
return -1;
};
setup.HasMiningPick = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 253) {
return i;
};
};
return -1;
};
setup.HasAxe = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 202) {
return i;
} else if (Inven[i][0] == 207) {
return i;
};
};
return -1;
};
setup.AxeLevel = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
var Lev = 0;
var MaxTree = 0;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 220) {
MaxTree = Inven[i][1] -2;
if (MaxTree > 110) {
MaxTree = 100;
};
if (MaxTree > Lev) {
Lev = MaxTree;
};
} else if (Inven[i][0] == 221) {
MaxTree = Inven[i][1] -2;
if (MaxTree > 110) {
MaxTree = 100;
};
if (MaxTree > Lev) {
Lev = MaxTree;
};
};
};
var equipped = State.variables.PC[State.variables.CC][State.variables.PCbp];
for (i = 0; i < equipped.length; i++) {
if (equipped[i].hasOwnProperty('equip')) {
if (equipped[i].equip[0] == 220) {
MaxTree = equipped[i].equip[1] -2;
if (MaxTree > 110) {
MaxTree = 100;
};
if (MaxTree > Lev) {
Lev = MaxTree;
};
} else if (equipped[i].equip[0] == 221) {
MaxTree = equipped[i].equip[1] -2;
if (MaxTree > 110) {
MaxTree = 100;
};
if (MaxTree > Lev) {
Lev = MaxTree;
};
};
};
};
if (Lev > 0) {
if (State.variables.PC[State.variables.CC][State.variables.PCclass] == 1) {
Lev = Lev +1;
};
};
return Lev;
};
setup.HasBottle = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 108) {
return i;
};
};
return -1;
};
setup.HasButcherTool = function() {
var Inven = State.variables.PC[State.variables.CC][State.variables.PCinven];
var i;
for (i = 0; i < Inven.length; i++) {
if (Inven[i][0] == 113) {
return i;
} else if (Inven[i][0] == 230) {
return i;
};
};
return -1;
};
setup.GiveItem = function(who, item) {
var PCinven = State.variables.PCinven;
var CurInvLength = State.variables.PC[who][PCinven].length;
var i = 0;
if (item.length == 4) {
if (State.variables.DebugMode == true) {
var foo = "Warning: GiveItem was sent an old pre-Nov 2023 formatted item: " + item;
alert(foo);
};
item[4] = 0;
};
/* Try stackable */
if (item[2] > 0) {
for (i = 0; i < CurInvLength; i++) {
var a = item[0];
var b = parseInt(State.variables.PC[who][PCinven][i][0]);
var c = item[1];
var d = parseInt(State.variables.PC[who][PCinven][i][1]);
var g = item[3];
var h = parseInt(State.variables.PC[who][PCinven][i][3]);
if (a == b) {
if (c == d) {
if (g == h) {
State.variables.PC[who][PCinven][i][2] = State.variables.PC[who][PCinven][i][2] + item[2];
return i;
};
};
};
};
};
/* No match, look for empty spot */
for (i = 0; i < CurInvLength; i++) {
if (State.variables.PC[who][PCinven][i][0] == 0) {
State.variables.PC[who][PCinven][i] = item;
return i;
};
};
/* No empty spots, so make one */
State.variables.PC[who][PCinven][CurInvLength] = item;
return CurInvLength;
};
setup.additemtostore = function(which, item, stackable) {
var STORE = State.variables.STORE[which];
var actualloops = STORE.length;
if (which == State.variables.House) {
actualloops = State.variables.WORLD.house.storage;
};
var stackable = false;
if (item[2] > 0) {
stackable = true;
};
var i = 0;
var holder = 0;
if (stackable == true) {
for (i = 0; i < actualloops; i++) {
var a = parseInt(item[0]);
var b = parseInt(STORE[i][0]);
var c = parseInt(item[1]);
var d = parseInt(STORE[i][1]);
var g = parseInt(item[3]);
var h = parseInt(STORE[i][3]);
if (a == b) {
if (c == d) {
if (g == h) {
State.variables.STORE[which][i][2] = State.variables.STORE[which][i][2] + item[2];
return i;
};
};
};
};
};
for (let i = 0; i < actualloops; i++) {
if (State.variables.STORE[which][i][0] == 0) {
State.variables.STORE[which][i] = item;
return i;
};
};
return -1;
};
/* Custom functions */
setup.pluralize = function (itemdesc, qty) {
var foo;
if (qty > 1) {
foo = "" + qty + " " + itemdesc.replace("~", "s");
} else {
foo = "1 " + itemdesc.replace("~", "");
};
return foo;
};
setup.Bang = function (fullname, rep) {
var foo = fullname.replace("!", rep);
return foo;
};
setup.GenericReplace = function (FromThis, ReplaceThis, WithThis) {
var foo = FromThis.replace(ReplaceThis, WithThis);
return foo;
};
setup.getfrom = function(qty, pool) {
var i = 0;
var onlythese = [];
for (i = 0; i < qty; i++) {
onlythese[i] = pool.splice(random(0, (pool.length -1)),1);
};
return onlythese;
};
setup.stringhack = function (foo) {
var thisis = foo.toString();
var very = thisis;
var strange = very.substr(0,5);
return strange;
};
setup.updatenametextbox = function() {
var CC = State.variables.CC;
var nameptr = State.variables.PCname;
document.getElementById("textbox-pcccpcname").value = State.variables.PC[CC][nameptr];
};
setup.getnextbodypart = function() {
var CC = State.variables.CC;
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[CC][PCbp];
return bp.length;
};
setup.getbpqty = function(who, type) {
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[who][PCbp];
var count = 0;
for (let i = 0; i < bp.length; i++) {
if (bp[i].type == type) {
count = count +1;
};
};
return count;
};
setup.getparttypeqty = function(who, type) {
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[who][PCbp];
var count = 0;
for (let i = 0; i < bp.length; i++) {
if (bp[i].morph == type) {
count = count +1;
}
};
return count;
};
setup.getnextinvslot = function(who) {
var PCinven = State.variables.PCinven;
var ActualInvenMax = State.variables.PC[who][PCinven].length;
for (let i = 0; i < ActualInvenMax; i++) {
if (State.variables.PC[who][PCinven][i][0] == 0) {
return i;
}
};
return ActualInvenMax;
};
setup.getunequippedofslottype = function(who, slottype) {
var PCbp = State.variables.PCbp;
var bp = State.variables.PC[who][PCbp];
for (let i = 0; i < bp.length; i++) {
if (bp[i].type == slottype) {
if (bp[i].equip[0] == 0) {
return i;
}
}
};
return -1;
};
setup.DoesPlayerHave = function(itemreq) {
var who = State.variables.CC;
var PCinven = State.variables.PCinven;
var a = itemreq[0];
var b = itemreq[1];
var c = itemreq[2];
var d = itemreq[3];
var e = itemreq[3];
var comp = [0,0,0,0,0];
var i = 0;
for (i = 0; i < State.variables.PC[who][PCinven].length; i++) {
comp = State.variables.PC[who][PCinven][i];
if (comp[0] > 0) {
if (a == "*" || comp[0] == a) {
if (b == "*" || comp[1] == b) {
if (c == "*" || comp[2] == c) {
if (d == "*" || comp[3] == d) {
if (e == "*" || comp[4] == d) {
return "yes";
};
};
};
};
};
};
};
return "no";
};
setup.RemoveOneItemFromInv = function(who, slot) {
var CurQty = State.variables.PC[who][State.variables.PCinven][slot][2];
if (CurQty < 2) {
/* State.variables.PC[who][State.variables.PCinven][slot] = [0,0,0,0,0] */
var throwaway = State.variables.PC[who][State.variables.PCinven].deleteAt(slot);
} else {
State.variables.PC[who][State.variables.PCinven][slot][2] = CurQty -1;
};
return true;
};
setup.GenLoot = function(mon, sex, level, zone) {
var loot = [0,0,0,0,0];
var DefaultMaterial = 102;
var ClothMat = 150;
var DefaultGem = 550;
var EnchantChance = level;
EnchantChance = 100;
var Enchants = [550, 551, 552, 553];
if (level < 2) {
DefaultMaterial = either(103,104);
ClothMat = 150;
DefaultGem = either(550,550,551);
} else if (level < 5) {
DefaultMaterial = [104,104,104,105];
ClothMat = either(150,151);
DefaultGem = either(550,550,551,551,552);
} else if (level < 7) {
DefaultMaterial = [104,105];
ClothMat = either(150,151,152);
DefaultGem = either(551,552);
} else if (level < 9) {
DefaultMaterial = [104,105];
ClothMat = either(151,152);
} else if (level < 11) {
DefaultMaterial = [105];
ClothMat = 152;
} else if (level < 13) {
DefaultMaterial = [106];
ClothMat = 152;
} else if (level < 15) {
DefaultMaterial = [106];
ClothMat = 152;
} else if (level < 17) {
DefaultMaterial = [106];
ClothMat = 152;
} else if (level < 19) {
DefaultMaterial = [106,107];
ClothMat = 152;
} else if (level < 20) {
DefaultMaterial = [106,107];
ClothMat = 152;
} else {
DefaultMaterial = [107];
ClothMat = 152;
};
var Item = 103;
var Mat = either(DefaultMaterial);
var r = random(1,4);
if (mon.includes("chest")) {
EnchantChance = EnchantChance * 10;
if (mon.includes("boss")) {
EnchantChance = 101;
};
var r = random(1,2);
if (r == 1) {
/* weapon or shield */
if (level < 2) {
Item = either(200,210,220,230,240);
} else if (level < 3) {
Item = either(200,201,210,211,220,221,230,231,240,241);
} else if (level < 5) {
Item = either(200,201,210,211,220,221,230,231,240,241);
} else if (level < 10) {
Item = either(200,201,202,210,211,212,220,221,222,230,231,232,240,241,242);
} else {
Item = either(201,202,211,212,221,222,231,232,241,242);
};
loot = [Item, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else {
/* armor or shield */
Item = either(240,241,242,306,307,309,310,311,350,352,353,354,355,359);
loot = [Item, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
};
} else if (mon.includes("goblin")) {
if (sex == "male") {
r = random(1,3)
if (r == 1) {
/* club */
loot = [200, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else if (r == 2) {
/* fleshlight */
loot = [135, 0, 1, 0, 0];
} else {
/* penis growth or aphrodisiac */
Item = either(125,129);
loot = [Item, 0, 1, 0, 0];
};
} else {
r = random(1,4)
if (r == 1) {
/* dildo */
loot = [103, 0, 1, 0, 0];
} else if (r == 2) {
/* penis breast mods */
Item = either(125,126,127,128);
loot = [Item, 0, 1, 0, 0];
} else if (r == 3) {
/* hair dye */
loot = [117, 0, 1, random(600,611), 0];
} else if (r == 4) {
loot = [100,0,1,0,0];
} else {
/* aphrosisiac */
loot = [131, 0, 1, 0, 0];
};
};
} else if (mon.includes("slime")) {
loot = [0,0,0,0,0];
} else if (mon.includes("spider")) {
loot = [0,0,0,0,0];
} else if (mon.includes("drider")) {
loot = [0,0,0,0,0];
} else if (mon.includes("minotaur")) {
Item = either(200,201,202,210,211,212,220,221,222,230,231,232);
var r = random(1,2);
if (r == 1) {
loot = [Item, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else {
loot = [DefaultGem, 0, 1, 0, 0];
};
} else if (mon.includes("ant")) {
loot = [0,0,0,0,0];
} else if (mon.includes("scorpion")) {
loot = [0,0,0,0,0];
} else if (mon.includes("harpy")) {
loot = [0,0,0,0,0];
} else if (mon.includes("rat")) {
loot = [0,0,0,0,0];
} else if (mon.includes("hound")) {
loot = [0,0,0,0,0];
} else if (mon.includes("hydra")) {
loot = [0,0,0,0,0];
} else if (mon.includes("naga")) {
/* copper/brass chainmail bra/tail armor */
Item = either(356,357,358,360);
loot = [Item, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else if (mon.includes("adventurer")) {
if (sex == "female") {
var r = random(1,4);
if (r == 1) {
/* silk clothing */
loot = [either(301,302,304,305), 152, 0, 0, 0];
EnchantChance = EnchantChance * 10;
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else if (r == 2) {
/* any combat or utility spellbook */
loot = [111, 0, 0, either(500,501,502,503,507,508), 0];
} else if (r == 3) {
/* armor, maybe differentiate by level */
loot = [either(351,356,357,358), Mat, 0, 0, 0];
EnchantChance = EnchantChance * 3;
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else {
/* heal potion */
loot = [118, 0, 1, 0, 0];
};
} else {
var r = random(1,2);
if (r == 1) {
/* weapon or shield */
if (level < 2) {
Item = either(200,210,220,230,240);
} else if (level < 3) {
Item = either(200,201,210,211,220,221,230,231,240,241);
} else if (level < 5) {
Item = either(200,201,210,211,220,221,230,231,240,241);
} else if (level < 10) {
Item = either(200,201,202,210,211,212,220,221,222,230,231,232,240,241,242);
} else {
Item = either(201,202,211,212,221,222,231,232,241,242);
};
loot = [Item, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
} else {
/* armor or shield */
Item = either(240,241,242,306,307,309,310,311,350,352,353,354,355,359);
loot = [Item, Mat, 0, 0, 0];
if (random(0,100) < EnchantChance) {
loot[3] = level;
loot[4] = either(Enchants);
if (loot[4] == 553) {
loot[3] = 1 + Math.trunc(level / 2);
};
};
};
}
};
return loot;
};
setup.HasTool = function(effect) {
return -1;
};
setup.ChangeButtonClass = function(what, towhat) {
document.getElementById(what).className = towhat;
};
setup.DisengageChance = function() {
var PCcc = State.variables.PC[State.variables.CC];
var chance = PCcc[State.variables.PCmorphBONI].disengage;
if (setup.PtrToClass(PCcc[State.variables.PClcass]) == "ninja") {
chance = chance + PCcc[State.variables.PClevel];
};
if (chance > 100) {
chance = 100;
};
return chance;
};
setup.PtrToClass = function(charclass) {
var n = "error in setup.PtrToClass: " + charclass;
if (charclass == 0) {
n = "peasant";
} else if (charclass == 1) {
n = "lumberjack";
} else if (charclass == 2) {
n = "prostitute";
} else if (charclass == 3) {
n = "warrior";
} else if (charclass == 4) {
n = "scholar";
} else if (charclass == 5) {
n = "priest";
} else if (charclass == 6) {
n = "rogue";
} else if (charclass == 7) {
n = "mage";
} else if (charclass == 8) {
n = "barbarian";
} else if (charclass == 9) {
n = "monk";
} else if (charclass == 10) {
n = "ninja";
} else if (charclass == 11) {
n = "paladin";
} else if (charclass == 12) {
n = "guardian";
} else if (charclass == 13) {
n = "necromancer";
} else if (charclass == 14) {
n = "druid";
};
return n;
};
setup.TFTextHack = function(morph, bp) {
var a = "error";
var b = "error";
if (bp == 100) {
a = morph + " head has become a ";
b = morph + " head";
} else if (bp == 101) {
a = morph + " neck has become a ";
b = morph + " neck";
} else if (bp == 102) {
a = morph + " back has become a ";
b = morph + " back";
} else if (bp == 103) {
a = morph + " chest has become a ";
b = morph + " chest";
} else if (bp == 104) {
a = morph + " arms have become ";
b = morph + " arms";
} else if (bp == 105) {
a = morph + " hands have become ";
b = morph + " hands";
} else if (bp == 106) {
a = morph + " fingers have become ";
b = morph + " fingers";
} else if (bp == 107) {
a = morph + " waist has become a ";
b = morph + " waist";
} else if (bp == 108) {
a = morph + " legs have become ";
b = morph + " legs";
} else if (bp == 109) {
a = morph + " feet have become ";
b = morph + " feet";
} else if (bp == 110) {
a = morph + " tail has become a ";
b = morph + " tail";
} else if (bp == 111) {
a = morph + "horns have become ";
b = morph + " horns";
} else if (bp == 112) {
a = morph + " wings have become ";
b = morph + " wings";
} else if (bp == 113) {
a = morph + " penis has become a ";
b = morph + " penis";
} else if (bp == 114) {
a = morph + " breasts have become ";
b = morph + " breasts";
} else if (bp == 115) {
a = morph + " pussy has become a ";
b = morph + " pussy";
} else if (bp == 116) {
a = "tentacles have ";
b = "grown larger";
} else if (bp == 117) {
a = morph + " stinger has become a ";
b = morph + " stinger";
} else if (bp == 118) {
a = morph + " pincer has become a ";
b = morph + " pincer";
};
return [a,b];
};
setup.bpptrtoname = function(bp, formal) {
var c = "error in setup.bpptrtoname: " + bp;
var f = "error in setup.bpptrtoname: " + bp;
var tf = "error in setup.bpptrtoname: " + bp;
var l = "error in setup.bpptrtoname: " + bp;
if (bp == 100) {
f = "Head";
c = "head";
l = "head";
tf = "~ head";
} else if (bp == 101) {
f = "Neck";
c = "neck";
l = "Neck";
tf = "a ~ neck";
} else if (bp == 102) {
f = "Back";
c = "back";
l = "";
tf = "a ~ back";
} else if (bp == 103) {
f = "Chest";
c = "chest";
l = "chest";
tf = "a ~ chest";
} else if (bp == 104) {
f = "Wield";
c = "arm";
l = "arm";
tf = "a ~ arm";
} else if (bp == 105) {
f = "Hands";
c = "pair of hands";
l = "hands";
tf = "a pair of ~ hands";
} else if (bp == 106) {
f = "Ring";
c = "set of fingers";
l = "fingers";
tf = "a set of ~ fingers";
} else if (bp == 107) {
f = "Waist";
c = "waist";
l = "waist";
tf = "a ~ waist";
} else if (bp == 108) {
f = "Legs";
c = "a pair of legs";
l = "legs";
tf = "pair of ~ legs";
} else if (bp == 109) {
f = "Feet";
c = "pair of feet";
l = "feet";
tf = "a pair of ~ feet";
} else if (bp == 110) {
f = "Tail";
c = "tail";
l = "tail";
tf = "a ~ tail";
} else if (bp == 111) {
f = "Horns";
c = "horns";
l = "horns";
tf = "~ horns";
} else if (bp == 112) {
f = "Wings";
c = "pair of wings";
l = "wings";
tf = "a pair of ~ wings";
} else if (bp == 113) {
f = "Penis";
c = "penis";
l = "penis";
tf = "a ~ penis";
} else if (bp == 114) {
f = "Breasts";
c = "pair of breasts";
l = "breasts";
tf = "~ breasts";
} else if (bp == 115) {
f = "Pussy";
c = "pussy";
l = "pussy";
tf = "a ~ pussy";
} else if (bp == 116) {
f = "Tentacle";
c = "tentacle";
l = "tentacle";
tf = "a tentacle";
} else if (bp == 117) {
f = "Stinger";
c = "stinger";
l = "stinger";
tf = "a ~ stinger";
} else if (bp == 118) {
f = "Pincer";
c = "pincer";
l = "pincer";
tf = "a ~ pincer";
};
if (formal == "casual") {
return c;
} else if (formal == "tf") {
return tf;
} else if (formal == "lost") {
return l;
} else {
return f;
}
};
setup.TFTextOutputter = function(bp, OldMorph, NewMorph) {
var o = "Your ";
if (bp == 100) {
o = o + OldMorph + " head has become a " + NewMorph + " head";
} else if (bp == 101) {
o = o + OldMorph + " neck has become a " + NewMorph + " neck";
} else if (bp == 102) {
o = o + OldMorph + " back has become a " + NewMorph + " back";
} else if (bp == 103) {
o = o + OldMorph + " chest has become a " + NewMorph + " chest";
} else if (bp == 104) {
o = o + OldMorph + " arms have become " + NewMorph + " arms";
} else if (bp == 105) {
o = o + OldMorph + " hands have become " + NewMorph + " hands";
} else if (bp == 106) {
o = o + OldMorph + " fingers have become " + NewMorph + " fingers";
} else if (bp == 107) {
o = o + OldMorph + " waist has become a " + NewMorph + " waist";
} else if (bp == 108) {
o = o + OldMorph + " legs have become " + NewMorph + " legs";
} else if (bp == 109) {
o = o + OldMorph + " feet have become " + NewMorph + " feet";
} else if (bp == 110) {
o = o + OldMorph + " tail has become a " + NewMorph + " tail";
} else if (bp == 111) {
o = o + OldMorph + " horns have become " + NewMorph + " horns";
} else if (bp == 112) {
o = o + OldMorph + " wings have become " + NewMorph + " wings";
} else if (bp == 113) {
o = o + OldMorph + " penis has become a " + NewMorph + " penis";
} else if (bp == 114) {
o = o + OldMorph + " breasts have become " + NewMorph + " breasts";
} else if (bp == 115) {
o = o + OldMorph + " pussy has become a " + NewMorph + " pussy";
} else if (bp == 116) {
o = o + OldMorph + " tentacle has become a " + NewMorph + " tentacle";
} else if (bp == 117) {
o = o + OldMorph + " stinger has become a " + NewMorph + " stinger";
} else if (bp == 118) {
o = o + OldMorph + " pincers have become " + NewMorph + " pincers";
};
return o;
};
setup.ChooseMon = function() {
var CC = State.variables.CC;
var PCz = State.variables.PCz;
var diff = State.variables.PC[CC][PCz];
var mon = "goblin";
if (diff == 1) {
mon = "goblin";
} else if (diff == 2) {
mon = "goblin";
} else if (diff == 3) {
mon = "goblin";
};
return mon;
};
setup.GetFlirtPower = function(morph) {
var frommorph = 0;
var frompenis = 0;
var fromboobs = 0;
var frompussy = 0;
var fromequip = "not used";
var p = 0;
var ispenis = State.variables.BPpenis;
var isboobs = State.variables.BPboobs;
var ispussy = State.variables.BPpussy;
var CC = State.variables.CC;
var PCbp = State.variables.PCbp;
var bod = State.variables.PC[CC][PCbp];
var bp;
var i = 0;
for (i = 0; i < bod.length; i++) {
bp = bod[i];
if (bp.morph == morph) {
frommorph = frommorph + 1;
};
if (bp.type == ispenis) {
frompenis = frompenis + bp.size;
} else if (bp.type == ispussy) {
frompussy = frompussy + bp.size;
} else if (bp.type == isboobs) {
fromboobs = fromboobs + bp.size;
};
};
fromboobs = Math.trunc(fromboobs) / 10;
return [frommorph, frompenis, fromboobs, frompussy, fromequip];
};
setup.DrawMap = function(px, py, tilesize) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var CC = State.variables.CC;
var pcz = State.variables.PCz;
var CurDunLev = State.variables[CC][pcz];
var Dungeon = State.variables.Dungeon[CurDunLev];
var DunDim = State.variables.WORLD.dundim;
for (let i = 0; i < DunDim +1; i++) {
for (let j = 0; j < DunDim +1; j++) {
var imgname = "Map-";
if (Dungeon[i][j][0] > 0) {
imgname = imgname + "N";
};
if (Dungeon[i][j][1] > 0) {
imgname = imgname + "E";
};
if (Dungeon[i][j][2] > 0) {
imgname = imgname + "S";
};
if (Dungeon[i][j][3] > 0) {
imgname = imgname + "W";
};
if (imgname == "Map-") {
imgname = "Map-Blank";
};
if (Dungeon[i][j][11] == "StairsUp") {
imgname = "UpStairsBottom";
} else if (Dungeon[i][j][11] == "StairsDown") {
imgname = "DownStairs";
};
if (Dungeon[i][j][15] == 0) {
imgname = "Map-Blank";
};
if (tilesize == 64) {
imgname = imgname + "64";
};
var img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
ctx.fillStyle = "#fef4f4";
var ppx = 11 + (px * tilesize);
var ppy = 11 + (py * tilesize);
ctx.fillRect(ppx, ppy, (tilesize / 4), 10);
};
setup.GetDarkTime = function() {
var h = State.variables.WORLD.hour;
var m = State.variables.WORLD.minute;
if (h > 20) {
return 8;
} else if (h < 5) {
return 8;
} else if (h > 17) {
/* h is 18,19,20 */
m = m + (60 * (h - 18));
var GradientMulti = Math.trunc(m / 22.5);
return GradientMulti;
} else if (h < 8) {
/* h is 5,6,7 */
m = m + (60 * (h - 5));
var GradientMulti = 8 - Math.trunc(m / 22.5);
return GradientMulti;
} else {
return 0;
};
};
setup.DrawForestMap64 = function(x, y, z, tilesize) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var Theme = State.variables.WORLD.ForestTheme;
var allowdraw = false;
var floor = "S64Forest-Grass" + Theme;
var Forest = State.variables.ForestMap;
var ForestDims = State.variables.WORLD.ForestDims;
var i = 0;
var j = 0;
/* make it dark */
var DarkTime = setup.GetDarkTime();
var FTbright = 100 - (DarkTime * 10);
var FTcontrast = 100 + (DarkTime * 2);
var FTsepia = DarkTime * 2;
var FTgray = DarkTime;
var CtxFilterText = "brightness(" + FTbright + "%) contrast(" + FTcontrast + "%) sepia(" + FTsepia + "%) grayscale(" + FTgray + "%)";
var ChromeFilterHack = 0;
ctx.filter = CtxFilterText;
var LightRadius = 0;
var LightDuration = setup.GetEffect("Light");
if (LightDuration > 0) {
LightRadius = 1;
};
var Lantern = setup.GetEffect("Lantern");
if (Lantern > 0) {
LightRadius = LightRadius + Lantern;
};
for (i = 0; i <= ForestDims[0]; i++) {
for (j = 0; j < ForestDims[1]; j++) {
allowdraw = true;
if (ChromeFilterHack == 1) {
ctx.filter = CtxFilterText;
ChromeFilterHack = 0;
};
if (LightRadius > -1) {
if (i >= x - LightRadius) {
if (i <= x + LightRadius) {
if (j >= y - LightRadius) {
if (j <= y + LightRadius) {
if (ChromeFilterHack == 0) {
ctx.filter = "brightness(100%) contrast(100%) sepia(0%) grayscale(0%)";
ChromeFilterHack = 1;
};
};
};
};
};
};
var img = document.getElementById(floor);
ctx.drawImage(img, i * tilesize, j * tilesize);
/* Draw plants here */
if (Forest[i][j] == 0) {
imgname = "empty";
} else if (Forest[i][j] == 1) {
var imgname = "S64Flower1";
} else if (Forest[i][j] == 2) {
var imgname = "S64Flower2";
} else if (Forest[i][j] == 3) {
var imgname = "S64Flower3";
} else if (Forest[i][j] == 4) {
var imgname = "S64Flower4";
} else if (Forest[i][j] == 5) {
var imgname = "S64Flower5";
} else if (Forest[i][j] == 6) {
var imgname = "S64Flower6";
} else if (Forest[i][j] == 7) {
var imgname = "S64Flower7";
} else if (Forest[i][j] == 8) {
var imgname = "S64Flower8";
} else if (Forest[i][j] == 99) {
var imgname = "S64Forest-TreeTrunk";
} else if (Forest[i][j] == 100) {
var imgname = "S64Forest-Tree1";
} else if (Forest[i][j] == 101) {
var imgname = "S64Forest-Tree2";
} else if (Forest[i][j] == 102) {
var imgname = "S64Forest-Tree3";
} else if (Forest[i][j] == 103) {
var imgname = "S64Forest-Tree4";
} else if (Forest[i][j] == 104) {
var imgname = "S64Forest-Tree5";
} else if (Forest[i][j] == 110) {
var imgname = "S64Cage";
} else if (Forest[i][j] == 111) {
var imgname = "S64Sign";
} else if (Forest[i][j] == 112) {
var imgname = "S64Grave";
} else if (Forest[i][j] == 113) {
var imgname = "S64Cave";
} else if (Forest[i][j] == 300) {
var imgname = "S64Rocks";
} else {
alert("Error in DrawForestMap 64, failed to draw: " + Forest[i][j]);
};
if (imgname == "empty") {
} else {
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
};
ctx.save();
ctx.beginPath();
ctx.arc(0, 0, 64, 0, 2 * Math.PI);
ctx.clip();
ctx.clearRect(0, 0, myCanvas.width, myCanvas.height);
ctx.filter = "brightness(20%) contrast(100%) sepia(0%) grayscale(0%)";
for (i = 0; i <= ForestDims[0]; i++) {
for (j = 0; j < ForestDims[1]; j++) {
allowdraw = true;
if (ChromeFilterHack == 1) {
ctx.filter = CtxFilterText;
ChromeFilterHack = 0;
};
if (LightRadius > -1) {
if (i >= x - LightRadius) {
if (i <= x + LightRadius) {
if (j >= y - LightRadius) {
if (j <= y + LightRadius) {
if (ChromeFilterHack == 0) {
ctx.filter = "brightness(100%) contrast(100%) sepia(0%) grayscale(0%)";
ChromeFilterHack = 1;
};
};
};
};
};
};
var img = document.getElementById(floor);
ctx.drawImage(img, i * tilesize, j * tilesize);
/* Draw plants here */
if (Forest[i][j] == 0) {
imgname = "empty";
} else if (Forest[i][j] == 1) {
var imgname = "S64Flower1";
} else if (Forest[i][j] == 2) {
var imgname = "S64Flower2";
} else if (Forest[i][j] == 3) {
var imgname = "S64Flower3";
} else if (Forest[i][j] == 4) {
var imgname = "S64Flower4";
} else if (Forest[i][j] == 5) {
var imgname = "S64Flower5";
} else if (Forest[i][j] == 6) {
var imgname = "S64Flower6";
} else if (Forest[i][j] == 7) {
var imgname = "S64Flower7";
} else if (Forest[i][j] == 8) {
var imgname = "S64Flower8";
} else if (Forest[i][j] == 99) {
var imgname = "S64Forest-TreeTrunk";
} else if (Forest[i][j] == 100) {
var imgname = "S64Forest-Tree1";
} else if (Forest[i][j] == 101) {
var imgname = "S64Forest-Tree2";
} else if (Forest[i][j] == 102) {
var imgname = "S64Forest-Tree3";
} else if (Forest[i][j] == 103) {
var imgname = "S64Forest-Tree4";
} else if (Forest[i][j] == 104) {
var imgname = "S64Forest-Tree5";
} else if (Forest[i][j] == 110) {
var imgname = "S64Cage";
} else if (Forest[i][j] == 111) {
var imgname = "S64Sign";
} else if (Forest[i][j] == 112) {
var imgname = "S64Grave";
} else if (Forest[i][j] == 113) {
var imgname = "S64Cave";
} else if (Forest[i][j] == 300) {
var imgname = "S64Rocks";
} else {
alert("Error in DrawForestMap 64, failed to draw: " + Forest[i][j]);
};
if (imgname == "empty") {
} else {
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
};
ctx.filter = "none";
ctx.restore();
/* Minimap avatars */
for (var i = 0; i < 3; i++) {
if (State.variables.PC[i][State.variables.PClocation] == "forest") {
if (State.variables.PC[i][State.variables.PCfz] == z) {
if (State.variables.PC[i][State.variables.PCstate] == "alive") {
const PcIconPTR = State.variables.PCicon;
var CharIconData = State.variables.PC[i][PcIconPTR];
var localXDrawHere = State.variables.PC[i][State.variables.PCfx] * tilesize;
var localYDrawHere = State.variables.PC[i][State.variables.PCfy] * tilesize;
ctx.filter = "brightness(100%) contrast(100%) sepia(0%) grayscale(0%)";
var throwaway = setup.DrawCharIcon(CharIconData, "myCanvas", localXDrawHere, localYDrawHere);
};
};
};
};
return 1;
};
setup.DrawDesertMap64 = function(x, y, z, tilesize) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var allowdraw = false;
var floor = "S64Desert";
var Desert = State.variables.DesertMap;
var DesertDims = State.variables.WORLD.DesertDims;
var i = 0;
var j = 0;
var yOffset = 0;
var avatarY = 0;
if (y < 3) {
yOffset = 0;
avatarY = y;
} else if (y < 11) {
yOffset = y - 3;
avatarY = 3;
} else if (y == 11) {
yOffset = 7;
avatarY = 4;
} else if (y == 12) {
yOffset = 7;
avatarY = 5;
} else if (y == 13) {
yOffset = 7;
avatarY = 6;
} else if (y == 14) {
yOffset = 0;
avatarY = 0;
};
for (i = 0; i <= 14; i++) {
for (j = 0; j < 7; j++) {
allowdraw = true;
/* Allow view by distance? */
var img = document.getElementById(floor);
ctx.drawImage(img, i * tilesize, j * tilesize);
var desertPTR = Desert[i][j + yOffset]
/* Draw plants here */
if (desertPTR == 0) {
imgname = "empty";
} else if (desertPTR == 1) {
var imgname = "MiniAV0";
} else if (desertPTR == 2) {
var imgname = "MiniAV0";
} else if (desertPTR == 3) {
var imgname = "MiniAV0";
} else if (desertPTR == 4) {
var imgname = "MiniAV0";
} else if (desertPTR == 5) {
var imgname = "MiniAV0";
} else if (desertPTR == 6) {
var imgname = "MiniAV0";
} else if (desertPTR == 7) {
var imgname = "MiniAV0";
} else if (desertPTR == 8) {
var imgname = "MiniAV0";
} else if (desertPTR == 110) {
var imgname = "S64Cage";
} else if (desertPTR == 111) {
var imgname = "S64Sign";
} else if (desertPTR == 112) {
var imgname = "S64Grave";
} else if (desertPTR == 113) {
var imgname = "S64Cave";
} else if (desertPTR == 199) {
var imgname = "S64CactusStump";
} else if (desertPTR == 200) {
var imgname = "S64CactusA";
} else if (desertPTR == 201) {
var imgname = "S64CactusB";
} else if (desertPTR == 202) {
var imgname = "S64CactusC";
} else if (desertPTR == 300) {
var imgname = "S64Rocks";
} else if (desertPTR == 400) {
var imgname = "S64College";
} else if (desertPTR == 401) {
var imgname = "S64Tent";
} else {
alert("Error in DrawDesertMap 64, failed to draw: " + desertPTR);
};
if (imgname == "empty") {
} else {
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
};
/* Minimap avatars */
for (i = 0; i < 3; i++) {
if (State.variables.PC[i][State.variables.PClocation] == "desert") {
if (State.variables.PC[i][State.variables.PCdz] == z) {
if (State.variables.PC[i][State.variables.PCstate] == "alive") {
const PcIconPTR = State.variables.PCicon;
var CharIconData = State.variables.PC[i][PcIconPTR];
var localXDrawHere = State.variables.PC[i][State.variables.PCdx] * tilesize;
var localYDrawHere = (State.variables.PC[i][State.variables.PCdy] - yOffset) * tilesize;
var throwaway = setup.DrawCharIcon(CharIconData, "myCanvas", localXDrawHere, localYDrawHere);
};
};
};
};
return 1;
};
setup.DrawMap64 = function(x, y, z, tilesize, WhichMap) {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var AllowVerticalScroll = false;
var WORLD = State.variables.WORLD;
var Theme = "";
var floor = "";
floor = "";;
var Dungeon = [];
var DunDimX = -1;
var DunDimY = -1;
/* zone draw parameters */
if (WhichMap == "tower") {
AllowVerticalScroll = true;
Dungeon = State.variables.Dungeon[z];
DunDimX = State.variables.WORLD.DunDimX;
DunDimY = State.variables.WORLD.DunDimY;
Theme = WORLD.dungeonthemes[z];
floor = "S64Floor" + Theme[0];
} else if (WhichMap == "forest") {
AllowVerticalScroll = false;
} else if (WhichMap == "desert") {
AllowVerticalScroll = true;
};
/* end zone draw parameters */
var Explorer = true;
var FountainHack = false;
var FountainCoords = []
/* Handle offset */
var yOffset = 0;
var avatarY = 0;
if (y < 3) {
yOffset = 0;
avatarY = y;
} else if (y < 11) {
yOffset = y - 3;
avatarY = 3;
} else if (y == 11) {
yOffset = 7;
avatarY = 4;
} else if (y == 12) {
yOffset = 7;
avatarY = 5;
} else if (y == 13) {
yOffset = 7;
avatarY = 6;
} else if (y == 14) {
yOffset = 0;
avatarY = 0;
};
var CtxFilterText = "brightness(20%) contrast(100%) sepia(0%) grayscale(0%)";
var LightRadius = 0;
var LightDuration = setup.GetEffect("Light");
if (LightDuration > 0) {
LightRadius = 1;
};
var Lantern = setup.GetEffect("Lantern");
if (Lantern > 0) {
LightRadius = LightRadius + Lantern;
};
for (let i = (x - LightRadius); i < (x + LightRadius +1); i++) {
for (let j = (y - LightRadius); j < (y + LightRadius +1); j++) {
if (i > -1 && i < DunDimX) {
if (j > -1 && j < DunDimY) {
Dungeon[i][j][15] = 1;
};
};
};
};
var allowdraw = false;
for (let i = 0; i < 14; i++) {
for (let j = 0; j < 7; j++) {
var tilePTR = Dungeon[i][j + yOffset];
allowdraw = false;
if (tilePTR[15] > 0) {
allowdraw = true;
} else {
Explorer = false;
};
ctx.filter = CtxFilterText;
if (i >= x - LightRadius) {
if (i <= x + LightRadius) {
if (j + yOffset >= y - LightRadius) {
if (j + yOffset <= y + LightRadius) {
ctx.filter = "brightness(100%) contrast(100%) sepia(0%) grayscale(0%)";
};
};
};
};
var imgname = "S64Map-";
if (tilePTR[0] > 0) {
imgname = imgname + "N";
};
if (tilePTR[1] > 0) {
imgname = imgname + "E";
};
if (tilePTR[2] > 0) {
imgname = imgname + "S";
};
if (tilePTR[3] > 0) {
imgname = imgname + "W";
};
if (imgname == "S64Map-") {
/* what causes this? */
allowdraw = false;
};
if (tilePTR[15] == 0) {
allowdraw = false;
};
if (allowdraw == true) {
var img = document.getElementById(floor);
ctx.drawImage(img, i * tilesize, j * tilesize);
if (imgname == "S64Map-NESW") {
} else {
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
if (tilePTR[11] == "StairsUp") {
if (tilePTR[3] > 0) {
imgname = "S64StairsUpRight";
img = document.getElementById(imgname);
} else {
imgname = "S64StairsUpLeft";
img = document.getElementById(imgname);
};
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "StairsDown") {
imgname = "S64StairsDown";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Fountain") {
/* FountainHack = true; */
FountainCoords[0] = clone(i);
FountainCoords[1] = clone(j);
/* fountain */
imgname = "S64Fountain";
img = document.getElementById(imgname);
ctx.drawImage(img, (i * tilesize) -16, (j * tilesize) -16);
} else if (tilePTR[11] == "Puddle") {
imgname = "S64Puddle";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Bedroom") {
imgname = "S64Bed";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Chest") {
if (tilePTR[12] == 99) {
imgname = "S64ChestEmpty";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else {
imgname = "S64Chest";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
} else if (tilePTR[11] == "Barrel") {
if (tilePTR[12] == 99) {
imgname = "S64BarrelEmpty";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else {
imgname = "S64Barrel";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
} else if (tilePTR[11] == "Bookcase") {
if (tilePTR[12] == 99) {
imgname = "S64BookshelfEmpty";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else {
imgname = "S64Bookshelf";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
} else if (tilePTR[11] == "Statue") {
imgname = "S64StatueAngel";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "StatueAngel") {
imgname = "S64StatueAngel";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "StatueKnight") {
imgname = "S64StatueKnight";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "StatueDemon") {
imgname = "S64StatueDemon";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Zehtalia") {
imgname = "S64FloorRedCarpet";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Neris") {
imgname = "S64FloorRedCarpet";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Magic Circle") {
imgname = "S64Circle";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "Trap") {
if (tilePTR[12] == 104 || tilePTR[12] == 106) {
imgname = "S64Hole";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
} else if (tilePTR[11] == "LeverLeftUp") {
imgname = "S64LeverLeftUp";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "LeverLeftDown") {
imgname = "S64LeverLeftDown";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "LeverRightUp") {
imgname = "S64LeverRightUp";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "LeverRightDown") {
imgname = "S64LeverRightDown";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "PressurePlate") {
imgname = "S64PressurePlate";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
} else if (tilePTR[11] == "PlayerCorpse") {
var imgname = "S64Grave";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
} else {
var imgname = "S64Blank";
img = document.getElementById(imgname);
ctx.drawImage(img, i * tilesize, j * tilesize);
};
};
};
/* Draw fountain on top */
if (FountainHack == true) {
var fI = FountainCoords[0];
var fJ = FountainCoords[1];
if (Dungeon[fI][fJ][12] > 200) {
imgname = "S64FountainEmpty";
} else {
imgname = "S64Fountain";
};
img = document.getElementById(imgname);
ctx.drawImage(img, (fI * tilesize) -16, (fJ * tilesize) -16);
};
/* Minimap avatars */
for (var i = 0; i < 3; i++) {
if (State.variables.PC[i][State.variables.PClocation] == "tower") {
if (State.variables.PC[i][State.variables.PCz] == z) {
if (State.variables.PC[i][State.variables.PCstate] == "alive") {
const PcIconPTR = State.variables.PCicon;
var CharIconData = State.variables.PC[i][PcIconPTR];
var localXDrawHere = State.variables.PC[i][State.variables.PCx] * tilesize;
var localYDrawHere = (State.variables.PC[i][State.variables.PCy] - yOffset) * tilesize;
ctx.filter = "brightness(100%) contrast(100%) sepia(0%) grayscale(0%)";
var throwaway = setup.DrawCharIcon(CharIconData, "myCanvas", localXDrawHere, localYDrawHere);
};
};
};
};
return Explorer;
};
/* meters */
window.Health2 = function (CurHP, MaxHP, BarID, Horizontal, Container) {
if (Container == undefined) {
Container = document;
}
var HP = parseInt((CurHP / MaxHP) * 100);
if (HP < 0) HP = 0;
if (HP > 100) HP = 100;
var BarElement = $(Container).find("#" + BarID);
if (Horizontal) {
BarElement.css( { width : HP + "%" } );
} else {
BarElement.css( { height : HP + "%" } );
}
// Hue goes from -20 to 240 = red (hue = 0) -> green -> blue (hue = 240)
var col = "hsl(" + (Math.floor(HP * 2.6) - 20) + ", 100%, 50%)";
BarElement.css("background-color", col);
BarElement.attr("title", CurHP + "/" + MaxHP + " HP");
$(Container).find("#" + BarID + "bkg").attr("title", CurHP + "/" + MaxHP + " HP");
};
/* Keypress */
$(document).on("keyup", function(dir) {
if(dir.keyCode != 27){
const CurrentFocus = document.activeElement;
const CFid = CurrentFocus.id;
if (CFid.includes("textbox")) {
return;
};
};
if(dir.keyCode == 27){
$('#KeypESC a').trigger("click");
} else if(dir.keyCode == 90){
$('#KeypZ a').trigger("click");
} else if(dir.keyCode == 85){
$('#KeypU a').trigger("click");
} else if(dir.keyCode == 88){
$('#KeypX a').trigger("click");
} else if(dir.keyCode == 73){
$('#KeypI a').trigger("click");
} else if(dir.keyCode == 66){
$('#KeypB a').trigger("click");
} else if(dir.keyCode == 84){
$('#KeypT a').trigger("click");
};
if (State.variables.DialogOpen == true) {
return;
};
if(dir.keyCode == 49){
$('#KeypOne a').trigger("click");
}
else if(dir.keyCode == 50){
$('#KeypTwo a').trigger("click");
}
else if(dir.keyCode == 51){
$('#KeypThree a').trigger("click");
}
else if(dir.keyCode == 52){
$('#KeypFour a').trigger("click");
}
else if(dir.keyCode == 53){
$('#KeypFive a').trigger("click");
}
else if(dir.keyCode == 54){
$('#KeypSix a').trigger("click");
}
else if(dir.keyCode == 55){
$('#KeypSeven a').trigger("click");
}
else if(dir.keyCode == 56){
$('#KeypEight a').trigger("click");
}
else if(dir.keyCode == 57){
$('#KeypNine a').trigger("click");
}
else if(dir.keyCode == 32){
$('#KeypSpace a').trigger("click");
}
else if(dir.keyCode == 87){
$('#KeypNorth a').trigger("click");
}
else if(dir.keyCode == 68){
$('#KeypEast a').trigger("click");
}
else if(dir.keyCode == 83){
$('#KeypSouth a').trigger("click");
}
else if(dir.keyCode == 65){
$('#KeypWest a').trigger("click");
}
else if(dir.keyCode == 67){
$('#KeypC a').trigger("click");
}
else if(dir.keyCode == 70){
$('#KeypF a').trigger("click");
}
else if(dir.keyCode == 82){
$('#KeypR a').trigger("click");
}
else if(dir.keyCode == 89){
$('#KeypY a').trigger("click");
}
else if(dir.keyCode == 78){
$('#KeypN a').trigger("click");
}
else if(dir.keyCode == 81){
$('#KeypQ a').trigger("click");
}
else if(dir.keyCode == 69){
$('#KeypE a').trigger("click");
}
else if(dir.keyCode == 84){
$('#KeypT a').trigger("click");
}
else if(dir.keyCode == 86){
$('#KeypV a').trigger("click");
}
else if(dir.keyCode == 71){
$('#KeypG a').trigger("click");
}
else if(dir.keyCode == 72){
$('#KeypH a').trigger("click");
}
else if(dir.keyCode == 38){
$('#KeypUP a').trigger("click");
}
else if(dir.keyCode == 40){
$('#KeypDOWN a').trigger("click");
}
else if(dir.keyCode == 37){
$('#KeypLEFT a').trigger("click");
}
else if(dir.keyCode == 39){
$('#KeypRIGHT a').trigger("click");
};
});
setup.ForestSnake = function() {
var i = 0;
var j = 0;
var ForestDims = State.variables.WORLD.ForestDims;
var ForestDimX = ForestDims[0];
var ForestDimY = ForestDims[1];
var CC = State.variables.CC;
var PCfz = State.variables.PCfz;
var zLevel = State.variables.PC[CC][PCfz];
var Forest = [];
var FlowerPool = [1,2,3,4,5,6,7,8];
var MaxFlower = zLevel -1;
if (MaxFlower > 7) {
MaxFlower = 7;
};
for (i = 0; i <= ForestDimX; i++) {
Forest[i] = [];
for (j = 0; j < ForestDimY; j++) {
if (zLevel == 1) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,100,100,100,100,100,100,100,100);
} else if (zLevel == 2) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,100,100,100,100,100,100,101,101);
} else if (zLevel == 3) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,100,100,100,100,101,101,101,102);
} else if (zLevel == 4) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,100,100,101,101,101,101,102,102);
} else if (zLevel == 5) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,101,101,101,101,101,102,102,103);
} else if (zLevel == 6) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,101,101,101,101,102,102,102,103);
} else if (zLevel == 7) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,101,101,101,102,102,102,103,103);
} else if (zLevel == 8) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,100,101,102,102,102,102,103,103);
} else if (zLevel == 9) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,101,102,102,102,102,103,103,103);
} else if (zLevel == 10) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,102,102,102,103,103,104);
} else if (zLevel == 11) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,102,102,103,103,103,104);
} else if (zLevel == 12) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,102,102,103,103,103,104);
} else if (zLevel == 13) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,102,103,103,103,104,104);
} else if (zLevel == 14) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,102,103,103,103,104,104);
} else if (zLevel == 15) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,103,103,103,103,104,104);
} else if (zLevel == 16) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,102,103,103,103,104,104,104);
} else if (zLevel == 17) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,103,103,103,103,104,104,104);
} else if (zLevel == 18) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,102,103,103,103,103,104,103,104);
} else if (zLevel == 19) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,103,103,103,103,104,104,104,104);
} else if (zLevel == 20) {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,103,103,103,103,104,104,104,104);
} else {
Forest[i][j] = either(0,0,0,0,0,0,0,0,0,0,103,103,103,103,104,104,104,104);
};
if (random(1,33) == 1) {
Forest[i][j] = FlowerPool[random(0, MaxFlower)];
};
};
};
var RockQTY = zLevel;
var Fx = 0;
var Fy = 0;
for (i = 0; i <= RockQTY; i++) {
Fx = random(0, ForestDimX -1);
Fy = random(0, ForestDimY -1);
Forest[Fx][Fy] = 300;
};
/* this breaks easy forest redimensioning */
if (zLevel < 3) {
var maskhackleft = either(2,4);
for (i = 0; i < 5; i++) {
Forest[i][maskhackleft] = 0;
};
var maskhackright = either(2,4);
for (i = 10; i < 15; i++) {
Forest[i][maskhackright] = 0;
};
if (maskhackleft == 2) {
if (maskhackright == 2) {
Forest[5][1] = 0;
Forest[5][0] = 0;
Forest[6][0] = 0;
Forest[7][0] = 0;
Forest[7][1] = 0;
Forest[8][1] = 0;
Forest[8][2] = 0;
Forest[9][2] = 0;
} else {
Forest[4][3] = 0;
Forest[4][4] = 0;
Forest[5][4] = 0;
Forest[5][5] = 0;
Forest[6][5] = 0;
Forest[6][6] = 0;
Forest[7][6] = 0;
Forest[8][6] = 0;
Forest[9][6] = 0;
Forest[9][5] = 0;
Forest[10][4] = 0;
};
} else {
if (maskhackright == 2) {
Forest[4][3] = 0;
Forest[5][3] = 0;
Forest[5][2] = 0;
Forest[6][2] = 0;
Forest[7][2] = 0;
Forest[8][2] = 0;
Forest[8][1] = 0;
Forest[9][1] = 0;
Forest[10][1] = 0;
Forest[11][1] = 0;
Forest[11][2] = 0;
Forest[11][3] = 0;
} else {
Forest[4][3] = 0;
Forest[5][3] = 0;
Forest[6][3] = 0;
Forest[7][3] = 0;
Forest[7][4] = 0;
Forest[7][5] = 0;
Forest[8][5] = 0;
Forest[9][5] = 0;
Forest[10][5] = 0;
};
};
};
if (zLevel == 5) {
Forest[2][2] = 0;
Forest[2][3] = 0;
Forest[2][4] = 0;
Forest[3][2] = 0;
Forest[3][3] = 110;
Forest[3][4] = 0;
Forest[4][2] = 0;
Forest[4][3] = 0;
Forest[4][4] = 0;
};
if (zLevel == 6) {
Forest[0][0] = 102;
Forest[0][1] = 102;
Forest[0][2] = 102;
Forest[0][3] = 102;
Forest[0][4] = 102;
Forest[0][5] = 102;
Forest[0][6] = 102;
Forest[1][random(0,6)] = 102;
Forest[1][random(0,6)] = 102;
Forest[1][random(0,6)] = 102;
Forest[2][random(0,6)] = 102;
};
if (zLevel == 10) {
Forest[0][0] = 103;
Forest[0][1] = 103;
Forest[0][2] = 103;
Forest[0][3] = 103;
Forest[0][4] = 103;
Forest[0][5] = 103;
Forest[0][6] = 103;
Forest[1][random(0,6)] = 103;
Forest[1][random(0,6)] = 103;
Forest[1][random(0,6)] = 103;
Forest[2][random(0,6)] = 103;
};
if (zLevel == 12) {
Forest[0][0] = 300;
Forest[0][1] = 300;
Forest[0][2] = 300;
Forest[0][3] = 300;
Forest[0][4] = 300;
Forest[0][5] = 300;
Forest[0][6] = 300;
Forest[1][random(0,6)] = 300;
Forest[1][random(0,6)] = 300;
Forest[1][random(0,6)] = 300;
Forest[2][random(0,6)] = 300;
};
var PCfx = 3;
var PCfy = 3;
var h = 0;
var TreeHere;
for (h = 0; h < 3; h++) {
if (State.variables.PC[h][State.variables.PCstate] == "lost" || State.variables.PC[h][State.variables.PCstate] == "dead") {
if (State.variables.PC[h][State.variables.PClocation] == "forest") {
if (zLevel == State.variables.PC[h][State.variables.PCfz]) {
PCfx = State.variables.PC[h][State.variables.PCfx];
PCfy = State.variables.PC[h][State.variables.PCfy];
TreeHere = setup.IsThisATree(Forest[PCfx][PCfy]);
if (Forest[PCfx][PCfy] == 0) {
Forest[PCfx][PCfy] = 112;
} else if (TreeHere == true) {
Forest[PCfx][PCfy] = 112;
};
};
};
};
};
/* cave override */
if (zLevel < 21) {
if (zLevel / 2 == Math.trunc(zLevel / 2)) {
var caves = State.variables.WORLD.ForestCaves[zLevel];
if (typeof caves[0] == 'string') {
Forest[caves[1]][caves[2]] = 113;
};
};
};
return Forest;
};
setup.DesertSnake = function() {
var i = 0;
var j = 0;
var k = 0;
var DesertDims = State.variables.WORLD.DesertDims;
var DesertDimX = DesertDims[0];
var DesertDimY = DesertDims[1];
var CC = State.variables.CC;
var PCdz = State.variables.PCdz;
var zLevel = State.variables.PC[CC][PCdz];
var Desert = [];
var FlowerPool = [1,2,3,4,5,6,7,8];
var MaxFlower = zLevel -1;
if (MaxFlower > 7) {
MaxFlower = 7;
};
MaxFlower = 0;
for (i = 0; i <= DesertDimX; i++) {
Desert[i] = [];
for (j = 0; j < DesertDimY; j++) {
if (zLevel == 1) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 2) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 3) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 4) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 5) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 6) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 7) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 8) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 9) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else if (zLevel == 10) {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
} else {
Desert[i][j] = either(0,0,0,0,0,0,0,0,0,0,0,0,200,200,200,201,201,201,202,202,202);
};
if (random(1,33) == 99) {
Desert[i][j] = FlowerPool[random(0, MaxFlower)];
};
};
};
var RockQTY = random(1,3) * zLevel;
var Dx = 0;
var Dy = 0;
for (i = 0; i <= RockQTY; i++) {
Dx = random(0, DesertDimX -1);
Dy = random(0, DesertDimY -1);
Desert[Dx][Dy] = 300;
};
if (zLevel == 5) {
Desert[5][7] = 400;
/* Desert[9][7] = 401; */
};
if (zLevel == 10) {
for (k = 0; k <= DesertDimX; k++) {
Desert[k][DesertDimY -1] = 300;
};
Desert[random(0, DesertDimX -1)][DesertDimY -2] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -2] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -2] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -2] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -2] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -2] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -3] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -3] = 300;
Desert[random(0, DesertDimX -1)][DesertDimY -3] = 300;
};
var PCdx = 3;
var PCdy = 3;
var h = 0;
var CactusHere;
for (h = 0; h < 3; h++) {
if (State.variables.PC[h][State.variables.PCstate] == "lost" || State.variables.PC[h][State.variables.PCstate] == "dead") {
if (State.variables.PC[h][State.variables.PClocation] == "desert") {
if (zLevel == State.variables.PC[h][State.variables.PCdz]) {
PCdx = State.variables.PC[h][State.variables.PCdx];
PCdy = State.variables.PC[h][State.variables.PCdy];
CactusHere = setup.IsThisATree(Desert[PCdx][PCdy]);
if (Desert[PCdx][PCdy] == 0) {
Desert[PCdx][PCdy] = 112;
} else if (CactusHere == true) {
Desert[PCdx][PCdy] = 112;
};
};
};
};
};
/* cave override */
var caves = State.variables.WORLD.DesertCaves[zLevel];
if (typeof caves[0] == 'string') {
if (Desert[caves[1]][caves[2]] != 400) {
Desert[caves[1]][caves[2]] = 113;
};
};
return Desert;
};
setup.IsThisATree = function(what) {
if (what > 99 && what < 110) {
return true;
};
return false;
};
setup.Snake = function() {
var CC = State.variables.CC;
var PCx = State.variables.PCx;
var PCy = State.variables.PCy;
var PCz = State.variables.PCz;
var zlevel = State.variables.PC[CC][PCz];
var PlayerX = State.variables.PC[CC][PCx];
var PlayerY = State.variables.PC[CC][PCy];
var DunDimX = State.variables.WORLD.DunDimX;
var DunDimY = State.variables.WORLD.DunDimY;
var Dungeon = [];
var Visited = [];
/* Place default floors/walls to maybe be overriden later */
var floor = either("Cobble","White","Brick");
var walls = 1;
State.variables.WORLD.dungeonthemes[zlevel] = [floor, walls];
/* End place floors */
var i = 0;
var j = 0;
for (i = 0; i < DunDimX; i++) {
Dungeon[i] = [];
Visited[i] = [];
for (j = 0; j < DunDimY; j++) {
Dungeon[i][j] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
Visited[i][j] = false;
};
};
/* place monsters and traps here because later is causing ovewrite problems */
var dx = 0;
var dy = 0;
var infloop = true;
/* monster */
infloop = true;
while (infloop == true) {
dx = random(0, DunDimX -1);
dy = random(0, DunDimY -1);
if (Dungeon[dx][dy][11] == 0); {
Dungeon[dx][dy][11] = "Monster";
Dungeon[dx][dy][12] = setup.GetMonByDLEV("tower", zlevel);
infloop = false;
};
};
/* trap */
infloop = 0;
while (infloop < 4) {
dx = random(0, DunDimX -1);
dy = random(0, DunDimY -1);
if (Dungeon[dx][dy][11] == 0); {
Dungeon[dx][dy][11] = "Trap";
Dungeon[dx][dy][12] = 0;
infloop = infloop +1;
};
};
var RemoveFromSnakeItinerary = 0;
var RoomReturn = [];
var BreakWallHere = [];
if (zlevel == 1) {
var EventPool = ["Puddle","Barrel","Bedroom"];
/* Room 1 */
var WhichEvent = setup.getfrom(1, EventPool);
var UpperLeftX = random(2, 10);
var UpperLeftY = random(2, 3);
var BreakTryQty = 4;
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
/* Room 2 */
var UpperLeftX = random(2, 10);
var UpperLeftY = random(7, 10);
var WhichEvent = setup.getfrom(1, EventPool);
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
/* stairs down */
var StairsX = 0;
var StairsY = Math.trunc(DunDimY / 2);
State.variables.WORLD.TowerOrigin = [StairsX, StairsY];
Dungeon[StairsX][StairsY].splice(0,4,1,1,1,0);
BreakWallHere[BreakWallHere.length] = [StairsX, StairsY -1, 2];
BreakWallHere[BreakWallHere.length] = [StairsX+1, StairsY, 3];
BreakWallHere[BreakWallHere.length] = [StairsX, StairsY +1, 0];
Dungeon[StairsX][StairsY][11] = "StairsDown";
Dungeon[StairsX][StairsY][12] = "0";
Visited[StairsX][StairsY] = true;
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary +1;
/* stairs up */
WhichEvent = "StairsUp";
var WhichSide = either(0,1,2);
var BreakTryQty = 4;
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
} else {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
};
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
} else if (zlevel == 2) {
var EventPool = ["Chest","Chest","Puddle","Barrel","Bedroom","Bookcase"];
/* Room 1 */
var WhichEvent = setup.getfrom(1, EventPool);
var UpperLeftX = random(2, 10);
var UpperLeftY = random(2, 3);
var BreakTryQty = 4;
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[UpperLeftX+1][UpperLeftY+1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Room 2 */
UpperLeftX = random(2, 10);
UpperLeftY = random(7, 10);
WhichEvent = setup.getfrom(1, EventPool);
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[UpperLeftX+1][UpperLeftY+1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
/* Stairs up */
WhichEvent = "StairsUp";
var PossibleSides = [0,1,2,3];
if (PlayerX < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3) };
if (PlayerY < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0) };
if (PlayerX > DunDimX -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1) };
if (PlayerY > DunDimY -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2) };
var WhichSide = either(PossibleSides);
var BreakTryQty = 3;
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
} else if (WhichSide == 2) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
} else {
UpperLeftX = 0;
UpperLeftY = random(1, DunDimY -3);
};
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
} else if (zlevel == 3) {
var EventPool = ["Chest","Chest","Bedroom","Bookcase"];
/* Room 1 */
var WhichEvent = setup.getfrom(1, EventPool);
var UpperLeftX = random(2, 10);
var UpperLeftY = random(2, 3);
var BreakTryQty = 4;
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[UpperLeftX+1][UpperLeftY+1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Room 2 */
UpperLeftX = random(2, 10);
UpperLeftY = random(7, 10);
WhichEvent = setup.getfrom(1, EventPool);
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[UpperLeftX+1][UpperLeftY+1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
/* Stairs up */
WhichEvent = "StairsUp";
var PossibleSides = [0,1,2,3];
if (PlayerX < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3) };
if (PlayerY < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0) };
if (PlayerX > DunDimX -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1) };
if (PlayerY > DunDimY -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2) };
var WhichSide = either(PossibleSides);
var BreakTryQty = 3;
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
} else if (WhichSide == 2) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
} else {
UpperLeftX = 0;
UpperLeftY = random(1, DunDimY -3);
};
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
} else if (zlevel == 4) {
var EventPool = ["Chest","Chest","Bedroom","Bookcase"];
var RoomOneUpperLeftX = random(2,9);
var RoomOneUpperLeftY = random(2,3);
var RoomTwoUpperLeftX = random(2,9);
var RoomTwoUpperLeftY = random(7,9);
if (random(1,2) == 1){
RoomOneUpperLeftX = random(2,3);
RoomOneUpperLeftY = random(2,9);
RoomTwoUpperLeftX = random(7,9);
RoomTwoUpperLeftY = random(2,9);
};
/* Room 1 */
var WhichEvent = setup.getfrom(1, EventPool);
var BreakTryQty = 4;
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, RoomOneUpperLeftX, RoomOneUpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[RoomOneUpperLeftX+1][RoomOneUpperLeftY+1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Room 2 */
WhichEvent = setup.getfrom(1, EventPool);
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, RoomTwoUpperLeftX, RoomTwoUpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[RoomTwoUpperLeftX+1][RoomTwoUpperLeftY+1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
/* Stairs up */
WhichEvent = "StairsUp";
var PossibleSides = [0,1,2,3];
if (PlayerX < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3) };
if (PlayerY < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0) };
if (PlayerX > DunDimX -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1) };
if (PlayerY > DunDimY -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2) };
var WhichSide = either(PossibleSides);
var BreakTryQty = 3;
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
} else if (WhichSide == 2) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
} else {
UpperLeftX = 0;
UpperLeftY = random(1, DunDimY -3);
};
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
} else if (zlevel == 5) {
State.variables.WORLD.dungeonthemes[zlevel] = ["RedTile", walls];
RemoveFromSnakeItinerary = 22;
UpperLeftX = random(2,5);
UpperLeftY = random(3,5);
BreakWallHere = [];
BreakWallHere[0] = [0 + UpperLeftX, 2 + UpperLeftY, 2];
BreakWallHere[1] = [6 + UpperLeftX, 2 + UpperLeftY, 2];
Visited[2 + UpperLeftX][0 + UpperLeftY] = true;
Visited[3 + UpperLeftX][0 + UpperLeftY] = true;
Visited[4 + UpperLeftX][0 + UpperLeftY] = true;
Visited[2 + UpperLeftX][1 + UpperLeftY] = true;
Visited[3 + UpperLeftX][1 + UpperLeftY] = true;
Visited[4 + UpperLeftX][1 + UpperLeftY] = true;
Visited[2 + UpperLeftX][2 + UpperLeftY] = true;
Visited[3 + UpperLeftX][2 + UpperLeftY] = true;
Visited[4 + UpperLeftX][2 + UpperLeftY] = true;
Visited[0 + UpperLeftX][3 + UpperLeftY] = true;
Visited[1 + UpperLeftX][3 + UpperLeftY] = true;
Visited[2 + UpperLeftX][3 + UpperLeftY] = true;
Visited[3 + UpperLeftX][3 + UpperLeftY] = true;
Visited[4 + UpperLeftX][3 + UpperLeftY] = true;
Visited[5 + UpperLeftX][3 + UpperLeftY] = true;
Visited[6 + UpperLeftX][3 + UpperLeftY] = true;
Visited[0 + UpperLeftX][4 + UpperLeftY] = true;
Visited[1 + UpperLeftX][4 + UpperLeftY] = true;
Visited[2 + UpperLeftX][4 + UpperLeftY] = true;
Visited[4 + UpperLeftX][4 + UpperLeftY] = true;
Visited[5 + UpperLeftX][4 + UpperLeftY] = true;
Visited[6 + UpperLeftX][4 + UpperLeftY] = true;
Dungeon[2 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,1,1,0);
Dungeon[3 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,1,1,1);
Dungeon[4 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,0,1,1);
Dungeon[2 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,1,1,0);
Dungeon[3 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,1,1,1);
Dungeon[4 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,0,1,1);
Dungeon[2 + UpperLeftX][2 + UpperLeftY].splice(0,4,1,1,1,0);
Dungeon[3 + UpperLeftX][2 + UpperLeftY].splice(0,4,1,1,1,1);
Dungeon[4 + UpperLeftX][2 + UpperLeftY].splice(0,4,1,0,1,1);
Dungeon[0 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,0,1,0);
Dungeon[1 + UpperLeftX][3 + UpperLeftY].splice(0,4,0,1,1,0);
Dungeon[2 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[3 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[4 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[5 + UpperLeftX][3 + UpperLeftY].splice(0,4,0,0,1,1);
Dungeon[6 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,0,1,0);
Dungeon[0 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,1,0,0);
Dungeon[1 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[2 + UpperLeftX][4 + UpperLeftY].splice(0,4,0,0,0,1);
Dungeon[4 + UpperLeftX][4 + UpperLeftY].splice(0,4,0,1,0,0);
Dungeon[5 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[6 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,0,0,1);
var TwoEvents = setup.getfrom(2, ["Chest","Chest","Bookcase","Statue","Bedroom"])
Dungeon[2 + UpperLeftX][4 + UpperLeftY][11] = TwoEvents[0];
Dungeon[2 + UpperLeftX][4 + UpperLeftY][12] = 0;
if (WhichEvent == "Chest") {
Dungeon[2 + UpperLeftX][4 + UpperLeftY][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
Dungeon[3 + UpperLeftX][0 + UpperLeftY][11] = "Zehtalia";
Dungeon[3 + UpperLeftX][0 + UpperLeftY][12] = 0;
Dungeon[4 + UpperLeftX][4 + UpperLeftY][11] = TwoEvents[1];
Dungeon[4 + UpperLeftX][4 + UpperLeftY][12] = 0;
if (WhichEvent == "Chest") {
Dungeon[4 + UpperLeftX][4 + UpperLeftY][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
Dungeon[2 + UpperLeftX][0 + UpperLeftY][11] = "StatueDemon";
Dungeon[4 + UpperLeftX][0 + UpperLeftY][11] = "StatueDemon";
Dungeon[2 + UpperLeftX][2 + UpperLeftY][11] = "StatueDemon";
Dungeon[4 + UpperLeftX][2 + UpperLeftY][11] = "StatueDemon";
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
} else if (zlevel == 6) {
RemoveFromSnakeItinerary = 9;
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
UpperLeftX = PlayerX -1;
UpperLeftY = PlayerY -1;
Visited[0 + UpperLeftX][0 + UpperLeftY] = true;
Visited[1 + UpperLeftX][0 + UpperLeftY] = true;
Visited[2 + UpperLeftX][0 + UpperLeftY] = true;
Visited[0 + UpperLeftX][1 + UpperLeftY] = true;
Visited[1 + UpperLeftX][1 + UpperLeftY] = true;
Visited[2 + UpperLeftX][1 + UpperLeftY] = true;
Visited[0 + UpperLeftX][2 + UpperLeftY] = true;
Visited[1 + UpperLeftX][2 + UpperLeftY] = true;
Visited[2 + UpperLeftX][2 + UpperLeftY] = true;
Dungeon[0 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,1,1,0);
Dungeon[1 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,1,1,1);
Dungeon[2 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,0,1,1);
Dungeon[0 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,1,1,0);
Dungeon[1 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,1,1,1);
Dungeon[2 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,0,1,1);
Dungeon[0 + UpperLeftX][2 + UpperLeftY].splice(0,4,1,1,0,0);
Dungeon[1 + UpperLeftX][2 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[2 + UpperLeftX][2 + UpperLeftY].splice(0,4,1,0,0,1);
if (random(1,2) == 1) {
Dungeon[0 + UpperLeftX][0 + UpperLeftY][11] = "LeverLeftUp";
Dungeon[0 + UpperLeftX][0 + UpperLeftY][12] = [];
/* up position */
var LeverDoesThis = [];
LeverDoesThis[0] = [0 + UpperLeftX, 2 + UpperLeftY, 3, 0];
LeverDoesThis[1] = [-1 + UpperLeftX, 2 + UpperLeftY, 1, 0];
Dungeon[0 + UpperLeftX][0 + UpperLeftY][12][0] = LeverDoesThis;
/* down position */
LeverDoesThis = [];
LeverDoesThis[0] = [0 + UpperLeftX, 2 + UpperLeftY, 3, 1];
LeverDoesThis[1] = [-1 + UpperLeftX, 2 + UpperLeftY, 1, 1];
Dungeon[0 + UpperLeftX][0 + UpperLeftY][12][1] = LeverDoesThis;
} else {
Dungeon[2 + UpperLeftX][0 + UpperLeftY][11] = "LeverRightUp";
Dungeon[2 + UpperLeftX][0 + UpperLeftY][12] = [];
/* up position */
var LeverDoesThis = [];
LeverDoesThis[0] = [2 + UpperLeftX, 2 + UpperLeftY, 1, 0];
LeverDoesThis[1] = [3 + UpperLeftX, 2 + UpperLeftY, 3, 0];
Dungeon[2 + UpperLeftX][0 + UpperLeftY][12][0] = LeverDoesThis;
/* down position */
LeverDoesThis = [];
LeverDoesThis[0] = [2 + UpperLeftX, 2 + UpperLeftY, 1, 1];
LeverDoesThis[1] = [3 + UpperLeftX, 2 + UpperLeftY, 3, 1];
Dungeon[2 + UpperLeftX][0 + UpperLeftY][12][1] = LeverDoesThis;
};
/* Stairs up */
WhichEvent = "StairsUp";
var PossibleSides = [0,1,2,3];
if (PlayerX < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3) };
if (PlayerY < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0) };
if (PlayerX > DunDimX -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1) };
if (PlayerY > DunDimY -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2) };
var WhichSide = either(PossibleSides);
var BreakTryQty = 3;
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
} else if (WhichSide == 2) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
} else {
UpperLeftX = 0;
UpperLeftY = random(1, DunDimY -3);
};
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
} else if (zlevel > 6 && zlevel < 10) {
var Layout = either(1,2);
if (Layout == 1) {
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
/* Stairs up */
WhichEvent = "StairsUp";
var PossibleSides = [0,1,2,3];
if (PlayerX < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3) };
if (PlayerY < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0) };
if (PlayerX > DunDimX -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1) };
if (PlayerY > DunDimY -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2) };
var WhichSide = either(PossibleSides);
var BreakTryQty = 0;
var onLeverOpen = [];
var onLeverClose = [];
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0)
var TempX = UpperLeftX + random(0,1);
onLeverOpen[0] = [TempX, 1, 2, 0];
onLeverOpen[1] = [TempX, 2, 0, 0];
onLeverClose[0] = [TempX, 1, 2, 1];
onLeverClose[1] = [TempX, 2, 0, 1];
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1)
var TempY = UpperLeftY + random(0,1);
onLeverOpen[0] = [DunDimX - 2, TempY, 3, 0];
onLeverOpen[1] = [DunDimX - 3, TempY, 1, 0];
onLeverClose[0] = [DunDimX - 2, TempY, 3, 1];
onLeverClose[1] = [DunDimX - 3, TempY, 1, 1];
} else if (WhichSide == 2) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2)
var TempX = UpperLeftX + random(0,1);
onLeverOpen[0] = [TempX, DunDimY - 2, 0, 0];
onLeverOpen[1] = [TempX, DunDimY - 3, 2, 0];
onLeverClose[0] = [TempX, DunDimY - 2, 0, 1];
onLeverClose[1] = [TempX, DunDimY - 3, 2, 1];
} else {
UpperLeftX = 0;
UpperLeftY = random(1, DunDimY -3);
PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3)
var TempY = UpperLeftY + random(0,1);
onLeverOpen[0] = [1, TempY, 1, 0];
onLeverOpen[1] = [2, TempY, 3, 0];
onLeverClose[0] = [1, TempY, 1, 1];
onLeverClose[1] = [2, TempY, 3, 1];
};
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
/* asd */
var LeverRoomOnThisSide = either(PossibleSides);
var LeverRoomTopX = 0;
var LeverRoomTopY = 0;
if (LeverRoomOnThisSide == 0) {
LeverRoomTopX = random(2, DunDimX -5);
LeverRoomTopY = 0;
} else if (LeverRoomOnThisSide == 1) {
LeverRoomTopX = DunDimX -2;
LeverRoomTopY = random(2, DunDimY -3);
} else if (LeverRoomOnThisSide == 2) {
LeverRoomTopX = random(2, DunDimX -5);
LeverRoomTopY = DunDimY -2;
} else {
LeverRoomTopX = 0;
LeverRoomTopY = random(2, DunDimY -3);
};
WhichEvent = 0;
BreakTryQty = 3;
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, LeverRoomTopX, LeverRoomTopY, WhichEvent, BreakTryQty);
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
/* Now actually place the lever */
var PossibleAnchors = setup.DungeonGetValidWallAnchors(Dungeon, LeverRoomTopX, LeverRoomTopY);
var r = random(0, PossibleAnchors.length -1);
var LeverX = PossibleAnchors[r][0];
var LeverY = PossibleAnchors[r][1];
var LeverLeftRightType = PossibleAnchors[r][2];
Dungeon[LeverX][LeverY][11] = LeverLeftRightType;
Dungeon[LeverX][LeverY][12] = [];
/* up position */
Dungeon[LeverX][LeverY][12][0] = onLeverOpen;
/* down position */
Dungeon[LeverX][LeverY][12][1] = onLeverClose;
/* place a chest/chest/bookcase/statue room */
var RoomUpperLeftX = random(4,8);
var RoomUpperLeftY = random(4,8);
var WhichEvent = either("Chest","Chest","Chest","Statue");
var BreakTryQty = 4;
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, RoomUpperLeftX, RoomUpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[RoomUpperLeftX +1][RoomUpperLeftY +1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
} else {
var EventPool = ["Chest","Chest","Chest","Bookcase","Statue"];
var RoomOneUpperLeftX = random(2,9);
var RoomOneUpperLeftY = random(2,3);
var RoomTwoUpperLeftX = random(2,9);
var RoomTwoUpperLeftY = random(7,9);
if (random(1,2) == 1){
RoomOneUpperLeftX = random(2,3);
RoomOneUpperLeftY = random(2,9);
RoomTwoUpperLeftX = random(7,9);
RoomTwoUpperLeftY = random(2,9);
};
/* Room 1 */
var WhichEvent = setup.getfrom(1, EventPool);
var BreakTryQty = 4;
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, RoomOneUpperLeftX, RoomOneUpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[RoomOneUpperLeftX +1][RoomOneUpperLeftY +1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Room 2 */
WhichEvent = setup.getfrom(1, EventPool);
RoomReturn = setup.DungeonPlaceThreeByThree(Dungeon, Visited, BreakWallHere, RoomTwoUpperLeftX, RoomTwoUpperLeftY, WhichEvent, BreakTryQty);
Dungeon = RoomReturn[0];
Visited = RoomReturn[1];
BreakWallHere = RoomReturn[2];
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
if (WhichEvent == "Chest") {
Dungeon[RoomTwoUpperLeftX +1][RoomTwoUpperLeftY +1][13] = setup.GenLoot("chest", "none", zlevel, "tower");
};
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
/* Stairs up */
WhichEvent = "StairsUp";
var PossibleSides = [0,1,2,3];
if (PlayerX < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 3) };
if (PlayerY < 2) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 0) };
if (PlayerX > DunDimX -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 1) };
if (PlayerY > DunDimY -3) { PossibleSides = setup.PurgeValueBFromArrayA(PossibleSides, 2) };
var WhichSide = either(PossibleSides);
var BreakTryQty = 3;
if (WhichSide == 0) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = 0;
} else if (WhichSide == 1) {
UpperLeftX = DunDimX -2;
UpperLeftY = random(1, DunDimY -3);
} else if (WhichSide == 2) {
UpperLeftX = random(2, DunDimX -4);
UpperLeftY = DunDimY -2;
} else {
UpperLeftX = 0;
UpperLeftY = random(1, DunDimY -3);
};
RoomReturn = setup.DungeonPlaceTwoByTwo(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty);
RemoveFromSnakeItinerary = RemoveFromSnakeItinerary + RoomReturn[3];
};
} else if (zlevel == 10) {
State.variables.WORLD.dungeonthemes[zlevel] = ["RedTile", walls];
RemoveFromSnakeItinerary = 15;
UpperLeftX = random(3,5);
UpperLeftY = random(3,7);
BreakWallHere = [];
BreakWallHere[0] = [UpperLeftX+1, UpperLeftY+5, 0];
Visited[0 + UpperLeftX][0 + UpperLeftY] = true;
Visited[1 + UpperLeftX][0 + UpperLeftY] = true;
Visited[2 + UpperLeftX][0 + UpperLeftY] = true;
Visited[0 + UpperLeftX][1 + UpperLeftY] = true;
Visited[1 + UpperLeftX][1 + UpperLeftY] = true;
Visited[2 + UpperLeftX][1 + UpperLeftY] = true;
Visited[0 + UpperLeftX][2 + UpperLeftY] = true;
Visited[1 + UpperLeftX][2 + UpperLeftY] = true;
Visited[2 + UpperLeftX][2 + UpperLeftY] = true;
Visited[0 + UpperLeftX][3 + UpperLeftY] = true;
Visited[1 + UpperLeftX][3 + UpperLeftY] = true;
Visited[2 + UpperLeftX][3 + UpperLeftY] = true;
Visited[0 + UpperLeftX][4 + UpperLeftY] = true;
Visited[1 + UpperLeftX][4 + UpperLeftY] = true;
Visited[2 + UpperLeftX][4 + UpperLeftY] = true;
Dungeon[0 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,1,1,0);
Dungeon[1 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,1,1,1);
Dungeon[2 + UpperLeftX][0 + UpperLeftY].splice(0,4,0,0,1,1);
Dungeon[0 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,1,0,0);
Dungeon[1 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,1,0,1);
Dungeon[2 + UpperLeftX][1 + UpperLeftY].splice(0,4,1,0,0,1);
Dungeon[0 + UpperLeftX][2 + UpperLeftY].splice(0,4,0,1,1,0);
Dungeon[1 + UpperLeftX][2 + UpperLeftY].splice(0,4,0,1,1,1);
Dungeon[2 + UpperLeftX][2 + UpperLeftY].splice(0,4,0,0,1,1);
Dungeon[0 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,1,1,0);
Dungeon[1 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,1,1,1);
Dungeon[2 + UpperLeftX][3 + UpperLeftY].splice(0,4,1,0,1,1);
Dungeon[0 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,1,0,0);
Dungeon[1 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,1,1,1);
Dungeon[2 + UpperLeftX][4 + UpperLeftY].splice(0,4,1,0,0,1);
Dungeon[0 + UpperLeftX][0 + UpperLeftY][11] = "Chest";
Dungeon[0 + UpperLeftX][0 + UpperLeftY][12] = 0;
Dungeon[1 + UpperLeftX][1 + UpperLeftY][11] = "Neris";
Dungeon[1 + UpperLeftX][1 + UpperLeftY][12] = 0;
Dungeon[2 + UpperLeftX][0 + UpperLeftY][11] = "Chest";
Dungeon[2 + UpperLeftX][0 + UpperLeftY][12] = 0;
Dungeon[1 + UpperLeftX][3 + UpperLeftY][11] = "PressurePlate";
Dungeon[1 + UpperLeftX][3 + UpperLeftY][12] = [];
Dungeon[1 + UpperLeftX][3 + UpperLeftY][12][0] = [1 + UpperLeftX, 1 + UpperLeftY, 2];
Dungeon[1 + UpperLeftX][3 + UpperLeftY][12][1] = [1 + UpperLeftX, 2 + UpperLeftY, 0];
Dungeon[0 + UpperLeftX][0 + UpperLeftY][13] = setup.GenLoot("boss chest", "none", zlevel, "tower");
Dungeon[2 + UpperLeftX][0 + UpperLeftY][13] = setup.GenLoot("boss chest", "none", zlevel, "tower");
Dungeon[0 + UpperLeftX][3 + UpperLeftY][11] = "StatueDemon";
Dungeon[2 + UpperLeftX][3 + UpperLeftY][11] = "StatueDemon";
/* Stairs down */
Dungeon[PlayerX][PlayerY][11] = "StairsDown";
Dungeon[PlayerX][PlayerY][12] = 0;
} else if (zlevel == 11) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 12) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 13) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 14) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 15) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 16) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 17) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 18) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 19) {
alert("Warning: No special parameters were assigned for this tower level");
} else if (zlevel == 20) {
alert("Warning: No special parameters were assigned for this tower level");
} else {
alert("Warning: No special parameters were assigned for this tower level");
};
var StartX = State.variables.PC[CC][PCx];
var StartY = State.variables.PC[CC][PCy];
/* zlevel assigned above for use by room generation */
var SnakeX = 1;
var SnakeY = 1;
var whereto = 0;
var wherefrom = 0;
var pathstack = [];
var endofstack = 0;
var silly;
var modX = 0;
var modY = 0;
var plen = 0;
var dunpasser = [];
Visited[SnakeX][SnakeY] = true;
var bar = "Snake starts at: (" + SnakeX + ", " + SnakeY + ")";
setup.al(bar);
var VisitedCount = 0;
var TargetVisits = (DunDimX * DunDimY) - RemoveFromSnakeItinerary;
var bw = 0;
/* for (i = 0; i < 50; i++) { */
while (true) {
dunpasser = Dungeon[SnakeX][SnakeY];
whereto = setup.DunGenDeadEnd(dunpasser, SnakeX, SnakeY, Visited);
if (whereto < 0) {
if (pathstack.length < 1) {
/* If room, break a wall to make accessible after snake paved around it */
if (BreakWallHere.length > 0) {
for (bw = 0; bw < BreakWallHere.length; bw++) {
var a = BreakWallHere[bw][0];
var b = BreakWallHere[bw][1];
var c = BreakWallHere[bw][2];
Dungeon[a][b][c] = 1;
};
};
return Dungeon;
} else if (VisitedCount > TargetVisits -2) {
/* If room, break a wall to make accessible after snake paved around it */
if (BreakWallHere.length > 0) {
for (bw = 0; bw < BreakWallHere.length; bw++) {
var a = BreakWallHere[bw][0];
var b = BreakWallHere[bw][1];
var c = BreakWallHere[bw][2];
Dungeon[a][b][c] = 1;
};
};
return Dungeon;
} else {
/* alert("We acknowlege no path was available"); */
var foo = "Before, the pathstack is " + pathstack;
/* alert(foo); */
setup.al(foo);
silly = pathstack.pop();
/* alert("We have popped the pathstack"); */
var foo = "After,the pathstack is " + pathstack;
/* alert(foo); */
/* setup.al(foo); */
endofstack = pathstack.length -1;
SnakeX = pathstack[endofstack][0];
SnakeY = pathstack[endofstack][1];
};
} else {
if (whereto == 0) {
/* alert("Snake went north"); */
/* setup.al("Snake went north"); */
modX = 0;
modY = -1;
wherefrom = 2;
} else if (whereto == 1) {
/* alert("Snake went east"); */
/* setup.al("Snake went east"); */
modX = 1;
modY = 0;
wherefrom = 3;
} else if (whereto == 2) {
/* alert("Snake went south"); */
/* setup.al("Snake went south"); */
modX = 0;
modY = 1;
wherefrom = 0;
} else if (whereto == 3) {
/* alert("Snake went west"); */
/* setup.al("Snake went west"); */
modX = -1;
modY = 0;
wherefrom = 1;
};
Dungeon[SnakeX][SnakeY][whereto] = 1;
plen = pathstack.length;
pathstack[plen] = [99, 99];
SnakeX = SnakeX + modX;
SnakeY = SnakeY + modY;
if (Visited[SnakeX][SnakeY] == true) {
alert("Snaked visited a place he's already been to");
};
Visited[SnakeX][SnakeY] = true;
VisitedCount = VisitedCount +1;
bar = "Snake now visiting: (" + SnakeX + ", " + SnakeY + ")";
/* setup.al(bar); */
var snakepos = "Snake now at X: " + SnakeX + ", Y: " + SnakeY;
pathstack[plen][0] = SnakeX;
pathstack[plen][1] = SnakeY;
if (SnakeX < 0) {
alert("SnakeX < 0");
} ;
if (SnakeY < 0) {
alert("SnakeY < 0");
} ;
Dungeon[SnakeX][SnakeY][wherefrom] = 1;
};
};
/* If room, break wall(s) to make accessible after snake paved around it */
if (BreakWallHere.length > 0) {
for (bw = 0; bw < BreakWallHere.length; bw++) {
var a = BreakWallHere[bw][0];
var b = BreakWallHere[bw][1];
var c = BreakWallHere[bw][2];
Dungeon[a][b][c] = 1;
};
};
return Dungeon;
};
setup.DunGenDeadEnd = function(d, x, y, Visited) {
var n = [0, d[0]];
var e = [1, d[1]];
var s = [2, d[2]];
var w = [3, d[3]];
var pool = [n,e,s,w];
var silly;
var DunDimX = State.variables.WORLD.DunDimX;
var DunDimY = State.variables.WORLD.DunDimY;
var foo;
var i = 0;
if (y < 1) {
/* alert("Snake will crash if he goes north"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 0) {
silly = pool.splice(i, 1);
/* alert("And so north was removed"); */
};
};
};
if (x == DunDimX -1) {
/* alert("Snake will crash if he goes east"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 1) {
silly = pool.splice(i, 1);
/* alert("And so east was removed"); */
};
};
};
if (y == DunDimY -1) {
/* alert("Snake will crash if he goes south"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 2) {
silly = pool.splice(i, 1);
/* alert("And so south was removed"); */
};
};
};
if (x < 1) {
/* alert("Snake will crash if he goes west"); */
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 3) {
silly = pool.splice(i, 1);
/* alert("And so west was removed"); */
};
};
};
if (y > 0) {
if (Visited[x][y -1] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 0) {
silly = pool.splice(i, 1);
/* alert("north was removed because it's been visited"); */
};
};
};
};
if (x < DunDimX -1) {
if (Visited[x+1][y] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 1) {
silly = pool.splice(i, 1);
/* alert("east was removed because it's been visited"); */
};
};
};
};
if (y < DunDimY -1) {
if (Visited[x][y +1] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 2) {
silly = pool.splice(i, 1);
/* alert("south was removed because it's been visited"); */
};
};
};
};
if (x > 0) {
if (Visited[x-1][y] == true) {
for (i = 0; i < pool.length; i++) {
if (pool[i][0] == 3) {
silly = pool.splice(i, 1);
/* alert("west was removed because it's been visited"); */
};
};
};
};
foo = "pool size is: " + pool.length;
/* alert(foo); */
if (pool.length < 1) {
/* alert("No options in pool, so snake must backtrack"); */
setup.al("No options in pool, so snake must backtrack");
return -1;
};
var pickone = random(0, pool.length-1);
if (pool[pickone][0] == 0) {
foo = "Snake intends to go north";
} else if (pool[pickone][0] == 1) {
foo = "Snake intends to go east";
} else if (pool[pickone][0] == 2) {
foo = "Snake intends to go south";
} else if (pool[pickone][0] == 3) {
foo = "Snake intends to go west";
};
/* alert(foo); */
return pool[pickone][0];
};
setup.GetMonByDLEV = function(location, lev) {
var m = [];
var p = [];
if (location == "forest") {
if (lev < 5) {
m = ["bunny-morph","cat-morph","fox-morph","wolf-morph"];
p = [25,25,25,25];
} else {
m = ["horse","bunny-morph","cat-morph","fox-morph","wolf-morph"];
p = [40,15,15,15,15];
};
};
if (location == "desert") {
if (lev == 1) {
m = ["ant"];
p = [100];
} else if (lev < 4) {
m = ["ant","scorpion"];
p = [50,50];
} else {
m = ["ant","scorpion"];
p = [30,30];
};
};
if (location == "tower") {
if (lev == 1) {
m = ["human","goblin","slime"];
p = [10,90];
} else if (lev == 2) {
m = ["human","goblin","slime"];
p = [10,45,45];
} else if (lev == 3) {
m = ["human","goblin","slime","rat-morph"];
p = [10,30,30,30];
} else if (lev == 4) {
m = ["human","slime","rat-morph","spider"];
p = [10,30,30,30];
} else if (lev == 5) {
m = ["human","rat-morph","spider","minotaur"];
p = [10,30,30,30];
} else if (lev == 6) {
m = ["human","spider","minotaur","naga"];
p = [10,30,30,30];
} else if (lev == 7) {
m = ["human","minotaur","naga","troll"];
p = [10,30,30,30];
} else if (lev == 8) {
m = ["human","naga","troll","hellhound"];
p = [10,30,30,30];
} else if (lev == 9) {
m = ["human","troll","hellhound","drider"];
p = [10,30,30,30];
} else if (lev == 10) {
m = ["human","hellhound","drider","hydra"];
p = [10,30,30,30];
} else if (lev == 11) {
m = ["human","hydra","drider",""];
p = [10,30,30,30];
} else if (lev == 12) {
m = ["","","",""];
p = [20,50,5,5];
} else if (lev == 13) {
m = ["minotaur","tentacle","demon"];
p = [30,5,5];
} else if (lev == 14) {
m = ["minotaur","tentacle","demon"];
p = [20,10,10];
} else if (lev == 15) {
m = ["naga","hound","tentacle","demon"];
p = [10,20,20,20];
} else if (lev == 16) {
m = ["naga","hound","tentacle","demon"];
p = [10,20,30,30];
} else if (lev == 17) {
m = ["naga","hound","demon"];
p = [10,20,40];
} else if (lev == 18) {
m = ["naga","hound","demon"];
p = [10,20,50];
} else if (lev == 19) {
m = ["hound","demon"];
p = [20,40];
} else if (lev == 20) {
m = ["demon"];
p = [30];
};
};
var total = 0
var i = 0;
for (i = 0; i < m.length; i++) {
total = total + m[i][1];
};
var which = setup.WeightedRandom(p);
return m[which];
};
setup.WeightedRandom = function(probarray) {
var i = 0;
var sum = 0;
var total = 0;
for (i in probarray) {
total = total + probarray[i];
};
var r = random(0, total);
for (i in probarray) {
sum += probarray[i];
if (r <= sum) return i;
};
};
setup.PlaceLostTowerCorpses = function(pz) {
var dx = 0;
var dy = 0;
var DunDimX = State.variables.WORLD.DunDimX;
var DunDimY = State.variables.WORLD.DunDimY;
var Dungeon = clone(State.variables.Dungeon[pz]);
var h = 0;
var LostQTY = 0;
for (h = 0; h < 3; h++) {
if (State.variables.PC[h][State.variables.PCstate] == "lost") {
if (State.variables.PC[h][State.variables.PClocation] == "tower") {
if (pz == State.variables.PC[h][State.variables.PCz]) {
LostQTY = LostQTY +1;
var Attempts = 0;
for (Attempts = 0; Attempts < 100; Attempts++) {
dx = random(0, DunDimX -1);
dy = random(0, DunDimY -1);
if (Dungeon[dx][dy][11] == 0); {
State.variables.Dungeon[pz][dx][dy][11] = "PlayerCorpse";
State.variables.Dungeon[pz][dx][dy][12] = h;
State.variables.PC[h][State.variables.PCstate] = "dead";
State.variables.PC[h][State.variables.PCx] = dx;
State.variables.PC[h][State.variables.PCy] = dy;
Attempts = 100;
return 1;
};
};
};
};
};
};
if (LostQTY > 0) {
alert("Alert: Failed to place lost player corpse");
};
return -1;
};
if (document.location.href.toLowerCase().includes("/temp/") || document.location.href.toLowerCase().includes("/private/") || hasOwnProperty.call(window, "storyFormat")) {
// Change this to the path where the HTML file is
// located if you want to run this from inside Twine.
setup.Path = "./"; // Running inside Twine application
} else {
setup.Path = "./"; // Running in a browser
}
setup.SoundPath = setup.Path + "media/";
// Volume Slider, by Chapel; for SugarCube 2
// version 1.2.0 (modified by HiEv)
// For custom CSS for slider use: http://danielstern.ca/range.css/#/
/*
Changelog:
v1.2.0:
- Fixed using/storing the current volume level in the settings.
v1.1.0:
- Fixed compatibility issues with SugarCube version 2.28 (still
compatible with older versions, too).
- Added settings API integration for SugarCube 2.26.
- Internal improvements and greater style consistency with my
other work.
- Added a pre-minified version.
- By default, the slider is now more granular than before
(101 possible positions vs 11). Change the 'current' and
'rangeMax' options to 10 to restore the old feel.
*/
(function () {
// Set initial values.
var options = {
current : 50, // Default volume level.
rangeMax : 100,
step : 1,
setting : true
};
Setting.load();
if (options.setting && settings.volume) {
options.current = parseInt(settings.volume);
}
var vol = {
last: options.current,
start: (options.current / options.rangeMax).toFixed(2)
};
// Function to update the volume level.
function setVolume (val) {
if (State.variables.SoundVolLoadOrderHack == 0) {
val = State.variables.WORLD.volume;
State.variables.SoundVolLoadOrderHack = 1;
};
if (typeof val !== 'number') val = Number(val);
if (Number.isNaN(val) || val < 0) val = 0;
if (val > 1) val = 1;
options.current = Math.round(val * options.rangeMax);
if (options.setting) {
settings.volume = options.current;
Setting.save();
}
if ($('input[name=volume]').val() != options.current) {
$('input[name=volume]').val(options.current);
}
try {
if (SimpleAudio) {
if (typeof SimpleAudio.volume === 'function') {
SimpleAudio.volume(val);
} else {
SimpleAudio.volume = val;
}
if (State.variables.SoundVolLoadOrderHack == 1) {
State.variables.WORLD.volume = val;
};
return val;
} else {
throw new Error('Cannot access audio API.');
}
} catch (err) {
// Fall back to the wikifier if we have to.
console.error(err.message, err);
$.wiki('<<masteraudio volume ' + val + '>>');
return val;
}
}
// Fix the initial volume level display.
postdisplay['volume-task'] = function (taskName) {
delete postdisplay[taskName];
setVolume(vol.start);
};
// Grab volume level changes from the volume slider.
$(document).on('input', 'input[name=volume]', function() {
var change = parseInt($('input[name=volume]').val());
setVolume(change / options.rangeMax);
vol.last = change;
});
// Create the <<volume>> macro.
Macro.add('volume', {
handler : function () {
var wrapper = $(document.createElement('span'));
var slider = $(document.createElement('input'));
var className = 'macro-' + this.name;
slider.attr({
id : 'volume-control',
type : 'range',
name : 'volume',
min : '0',
max : options.rangeMax,
step : options.step,
value : options.current
});
// Class '.macro-volume' and ID '#volume-control' for styling the slider
wrapper.append(slider).addClass(className).appendTo(this.output);
}
});
// Add Setting API integration for SugarCube 2.26 and higher.
function updateVolume () {
setVolume(settings.volume / options.rangeMax);
}
if (options.setting) {
if (Setting && Setting.addRange && typeof Setting.addRange === 'function') {
Setting.addRange('volume', {
label : 'Volume: ',
min : 0,
max : options.rangeMax,
step : options.step,
default : options.current,
onInit : updateVolume,
onChange : updateVolume
});
} else {
console.error('This version of SugarCube does not include the `Settings.addRange()` method; please try updating to the latest version of SugarCube.');
}
}
}());
setup.AchievementHandler = function (which, action, value) {
var aData = [];
aData[0] = {show: "y", note: "works!", name: "Genetic Lottery", type: "perk", clue: "Highly focused attributes might help", spoil: "Raise any one stat to 20 or more", does: "Gain +2 stat points. Applied after character creation"};
aData[1] = {show: "y", note: "works!", name: "Rich", type: "perk", clue: "Stop losing battles", spoil: "Have 1000 gold on you after looting a monster", does: "Halve gold lost from losing battles"};
aData[2] = {show: "y", note: "works!", name: "Greedy", type: "perk", clue: "Like rich, but more", spoil: "Have 10,000 gold in the bank", does: "Gain +10% to all gold drops"};
aData[3] = {show: "y", note: "works!", name: "Starve to death", type: "perm", clue: "Self explanatory", spoil: "Starve to death", does: "Start every new game with some food"};
aData[4] = {show: "y", note: "verify", name: "Guildmaster", type: "perm", clue: "Rina might be able to help with this", spoil: "Complete all tutorial quests", does: "+1 to max stat spread on character creation"};
aData[5] = {show: "n", note: "Not planned for this version", name: "Gamemaster", type: "perm", clue: "Rina might be able to help with this with this too", spoil: "Complete all guild quests", does: "+1 to max stat spread on character creation"};
aData[6] = {show: "y", note: "works", name: "Potionmaster", type: "perm", clue: "Selene might be able to help with this", spoil: "Complete all of Selene's quests", does: "+1 to max stat spread on character creation"};
aData[7] = {show: "n", note: "Not planned for this version", name: "Metal master", type: "perm", clue: "The blacksmith might be able to help with this", spoil: "Complete every blacksmithing quest", does: "+1 to max stat spread on character creation"};
aData[8] = {show: "n", note: "Not planned for this version", name: "Monster tourism", type: "perk", clue: "How many monsters are there?", spoil: "Defeat every monster type at least once", does: "Implement: What does this do?"};
aData[9] = {show: "y", note: "verify", name: "Playing both sides", type: "sex", clue: "Play both sides to learn the middle", spoil: "Have a sexual encounter as both sexes on the same character", does: "Unlocks the hermaphrodite starting sex"};
aData[10] = {show: "y", note: "Verify", name: "Archeologist", type: "perk", clue: "Find lots of treasure", spoil: "Succesfully complete 4 treasure events in a single lifetime", does: "Chests always drop an item"};
aData[11] = {show: "y", note: "Verify", name: "Trapmaster", type: "perk", clue: "Trigger a trap", spoil: "Trigger a trap", does: "Reduces trap damage by 50 percent"};
aData[12] = {show: "y", note: "works", name: "Explorer", type: "perk", clue: "Leave no stone unturned", spoil: "Explore every square of a tower floor", does: "Start with the light spell"};
aData[13] = {show: "n", note: "?", name: "Pacifist", type: "perk", clue: "How far can you get without hurting anything?", spoil: "Clear the level 5 dungeon event having never killed any opponent", does: "Gain +1 damage absorbtion, but -1 to melee damage"};
aData[14] = {show: "y", note: "?", name: "Durable", type: "perk", clue: "Fatal attraction", spoil: "Die during a sexual encounter", does: "Take -1 damage from melee attacks"};
aData[15] = {show: "y", note: "verify", name: "Fertile", type: "perk", clue: "I'm sure lots of monsters would love to help you earn this achievement", spoil: "Give birth", does: "Increased pregnancy chance"};
aData[16] = {show: "y", note: "verify", name: "Barren", type: "perk", clue: "Change your mind", spoil: "Terminate a pregnancy", does: "You will be incapable of becoming pregnant. Overrides Fertile. Don't take them both."};
aData[17] = {show: "y", note: "verify", name: "Breeder", type: "perk", clue: "Where once may fail, many succeeds!", spoil: "Give birth 3 times in a single game", does: "Cuts all pregnancy times in half"};
aData[18] = {show: "y", note: "works", name: "Black Mage", type: "perk", clue: "25%", spoil: "Clear the level 5 dungeon event", does: "Increased firebolt damage when injured"};
aData[19] = {show: "y", note: "verify", name: "White Mage", type: "perk", clue: "50%", spoil: "Clear the level 10 dungeon event", does: "Healing increased by your level"};
aData[20] = {show: "n", note: "Not planned for this version", name: "Red Mage", type: "perk", clue: "75%", spoil: "Clear the level 15 dungeon event", does: "Casting costs reduced by 1, minimum of 1"};
aData[21] = {show: "n", note: "Not planned for this version", name: "Necromancer", type: "perk", clue: "100%", spoil: "Clear the level 20 dungeon event", does: "Returns half of all spell damage you do as healing"};
aData[22] = {show: "y", note: "works", name: "Power Leveler", type: "perk", clue: "Reach level 10 in any class", spoil: "Reach level 10 in any class", does: "+1 experience earned every battle"};
aData[23] = {show: "y", note: "works!", name: "Jack of All Stats", type: "perm", clue: "And pretty much a master of them too", spoil: "Reach 12 in every primary stat", does: "+1 stat point to all new characters"};
aData[24] = {show: "y", note: "works!", name: "I feel your loss", type: "perm", clue: "To the graveyard", spoil: "Retire a character of at least level 3", does: "Unlocks the second character slot"};
aData[25] = {show: "y", note: "works!", name: "Three's Company", type: "perm", clue: "Fail to retire", spoil: "Have a character of at least level 3, die", does: "Unlock the third character slot"};
aData[26] = {show: "y", note: "Works!", name: "Lumberjack", type: "class", clue: "Help the town to grow", spoil: "Complete any construction project", does: "Unlocks the lumberjack class"};
aData[27] = {show: "y", note: "works", name: "Prostitute", type: "class", clue: "Flirt more", spoil: "Win 5 victories by flirting", does: "Unlocks the prostitute class"};
aData[28] = {show: "y", note: "works", name: "Warrior", type: "class", clue: "Hit harder", spoil: "Deliver 20 damage with a single weapon attack", does: "Unlocks the warrior class"};
aData[29] = {show: "y", note: "works", name: "Scholar", type: "class", clue: "Read a book", spoil: "Learn any spell", does: "Unlocks the scholar class"};
aData[30] = {show: "y", note: "works", name: "Priest", type: "class", clue: "Heal more", spoil: "Deliver 100 total points worth of healing", does: "Unlocks the priest class"};
aData[31] = {show: "y", note: "works", name: "Rogue", type: "class", clue: "Be good at avoiding traps", spoil: "Succesfully avoid 3 traps in one life", does: "Unlocks the rogue class"};
aData[32] = {show: "y", note: "works", name: "Mage", type: "class", clue: "Become a learned scholar", spoil: "Know every spell at once", does: "Unlocks the mage class"};
aData[33] = {show: "y", note: "works", name: "Barbarian", type: "class", clue: "Fight while deep and naked. Win.", spoil: "Defeat a tower monster with melee attacks while unarmored", does: "Unlocks the barbarian class"};
aData[34] = {show: "y", note: "works", name: "Monk", type: "class", clue: "Master the art of the fist", spoil: "Defeat a tower monster with melee attacks and both hands empty", does: "Unlocks the monk class"};
aData[35] = {show: "n", note: "?", name: "Ninja", type: "class", clue: "One-shot a tower monster with a physical attack before it can act", spoil: "One-shot a tower monster with a physical attack before it can act", does: "Unlocks the ninja class"};
aData[36] = {show: "n", note: "not planned for this release", name: "Paladin", type: "class", clue: "Only the purest of heart will achieve this: 777", spoil: "Reach level 7 while still a virgin, having previously reached level 7 as both warrior and priest.", does: "Unlocks the paladin class"};
aData[37] = {show: "y", note: "works", name: "Guardian", type: "class", clue: "Be very tough", spoil: "Reach 200 maximum health", does: "Unlocks the guardian class"};
aData[38] = {show: "y", note: "works", name: "Peasant Proficiency", type: "perkpoints", clue: "Reach level 7 as a peasant", spoil: "Reach level 7 as a peasant", does: "+1 perk on character creation"};
aData[39] = {show: "y", note: "works", name: "Lumberjacked up!", type: "perkpoints", clue: "Reach level 7 as a lumberjack", spoil: "Reach level 7 as a lumberjack", does: "+1 perk on character creation"};
aData[40] = {show: "y", note: "?", name: "World's Oldest Professon", type: "perkpoints", clue: "Reach level 7 as a prostitute", spoil: "Reach level 7 as a prostitute", does: "+1 perk on character creation"};
aData[41] = {show: "y", note: "?", name: "Swords and spears", type: "perkpoints", clue: "Reach level 7 as a warrior", spoil: "Reach level 7 as a warrior", does: "+1 perk on character creation"};
aData[42] = {show: "y", note: "?", name: "Scholarly pursuits", type: "perkpoints", clue: "Reach level 7 as a scholar", spoil: "Reach level 7 as a scholar", does: "+1 perk on character creation"};
aData[43] = {show: "y", note: "?", name: "Parson", type: "perkpoints", clue: "Reach level 7 as a priest", spoil: "Reach level 7 as a priest", does: "+1 perk on character creation"};
aData[44] = {show: "y", note: "?", name: "Sneaky McSneakerson", type: "perkpoints", clue: "Reach level 7 as a rogue", spoil: "Reach level 7 as a rogue", does: "+1 perk on character creation"};
aData[45] = {show: "y", note: "?", name: "Magiferous Magery", type: "perkpoints", clue: "Reach level 7 as a mage", spoil: "Reach level 7 as a mage", does: "+1 perk on character creation"};
aData[46] = {show: "y", note: "?", name: "Driven Before You", type: "perkpoints", clue: "Reach level 7 as a barbarian", spoil: "Reach level 7 as a barbarian", does: "+1 perk on character creation"};
aData[47] = {show: "y", note: "?", name: "Peace in the Calm of the Horny", type: "perkpoints", clue: "Reach level 7 as a monk", spoil: "Reach level 7 as a monk", does: "+1 perk on character creation"};
aData[48] = {show: "n", note: "?", name: "Stabby Stealther", type: "perkpoints", clue: "Reach level 7 as a ninja", spoil: "Reach level 7 as a ninja", does: "+1 perk on character creation"};
aData[49] = {show: "n", note: "not planned for this release", name: "Pally Power!", type: "perkpoints", clue: "Reach level 7 as a paladin", spoil: "Reach level 7 as a paladin", does: "+1 perk on character creation"};
aData[50] = {show: "y", note: "verify", name: "Panzerheitschaftlichkeit", type: "perkpoints", clue: "Reach level 7 as a guardian", spoil: "Reach level 7 as a guardian", does: "+1 perk on character creation"};
aData[51] = {show: "y", note: "Works!", name: "Best Peasant", type: "highest", clue: "Retire as a peasant", spoil: "Retire as a peasant", does: "Gain +1hp per highest retired peasant level, for all characters, always"};
aData[52] = {show: "y", note: "works", name: "Best Lumberjack", type: "highest", clue: "Retire as a lumberjack", spoil: "Retire as a lumberjack", does: "Gain +5% to hit bonus with axes per highest retired lumberjack level, for all characters, always"};
aData[53] = {show: "y", note: "works", name: "Best Prostitute", type: "highest", clue: "Retire as a prostitute", spoil: "Retire as a prostitute", does: "Gain +1 to-hi with flirt attacks per highest retired prostitute level, for all characters, always"};
aData[54] = {show: "y", note: "works", name: "Best Warrior", type: "highest", clue: "Retire as a warrior", spoil: "Retire as a warrior", does: "Gain +5 melee to-hit with weapons per highest retired level, for all characters, always"};
aData[55] = {show: "y", note: "works", name: "Best Scholar", type: "highest", clue: "Retire as a scholar", spoil: "Retire as a scholar", does: "-1 to xp requirement per level, per highest retired scholar level, for all characters and party members"};
aData[56] = {show: "y", note: "works", name: "Best Priest", type: "highest", clue: "Retire as a priest", spoil: "Retire as a priest", does: "Gain +1 healing spell effect per highest retired level, for all characters, always"};
aData[57] = {show: "y", note: "?", name: "Best Rogue", type: "highest", clue: "Retire as a rogue", spoil: "Retire as a rogue", does: "Gain +1 gold per combat victory per highest retired rogue level, for all characters, always"};
aData[58] = {show: "y", note: "?", name: "Best Mage", type: "highest", clue: "Retire as a mage", spoil: "Retire as a mage", does: "Gain +1 maximum mana per highest retired mage level, for all characters, always"};
aData[59] = {show: "y", note: "works", name: "Best Barbarian", type: "highest", clue: "Retire as a barbarian", spoil: "Retire as a barbarian", does: "Gain +5 to hit with body morph type attacks per highest retired barbarian level, for all characters, always"};
aData[60] = {show: "y", note: "works", name: "Best Monk", type: "highest", clue: "Retire as a monk", spoil: "Retire as a monk", does: "Gain +5 melee defense per highest retired monk level, for all characters, always"};
aData[61] = {show: "n", note: "?", name: "Best Ninja", type: "highest", clue: "Retire as a ninja", spoil: "Retire as a ninja", does: "+2% chance to flee from combat per highest retired ninja level, for all characters, always"};
aData[62] = {show: "n", note: "not planned for this release", name: "Best Paladin", type: "highest", clue: "Retire as a paladin", spoil: "Retire as a paladin", does: "Gain +1 melee damage per highest retired paladin level, for all characters, always"};
aData[63] = {show: "y", note: "verify", name: "Best Guardian", type: "highest", clue: "Retire as a guardian", spoil: "Retire as a guardian", does: "Gain +2 health and defense per highest retired guardian level, for all characters, always"};
aData[64] = {show: "y", note: "works", name: "Vault", type: "perk", clue: "Repair the Legacy Vault", spoil: "Repair the Legacy Vault", does: "Allows Legacy Vault access"};
aData[65] = {show: "n", note: "?", name: "Necromancer", type: "class", clue: "Kill an undead with an orphan", spoil: "Kill an undead with an orphan", does: "Unlocks the necromancer class"};
aData[66] = {show: "n", note: "?", name: "Death becomes you", type: "perkpoints", clue: "Reach level 7 as a necromancer", spoil: "Reach level 7 as a necromancer", does: "+1 perk on character creation"};
aData[67] = {show: "n", note: "?", name: "Best Necromancer", type: "highest", clue: "Retire as a necromancer", spoil: "Retire as a necromancer", does: "???"};
aData[68] = {show: "n", note: "?", name: "Druid", type: "class", clue: "?", spoil: "?", does: "Unlocks the druid class"};
aData[69] = {show: "n", note: "?", name: "L7 druid", type: "perkpoints", clue: "Reach level 7 as a druid", spoil: "Reach level 7 as a druid", does: "+1 perk on character creation"};
aData[70] = {show: "n", note: "?", name: "Best Druid", type: "highest", clue: "Retire as a druid", spoil: "Retire as a druid", does: "???"};
aData[71] = {show: "y", note: "verify", name: "Leader", type: "perk", clue: "Have an orphan join your party", spoil: "Have an orphan join your party", does: "Increases your party cap by 1"};
aData[72] = {show: "y", note: "verify", name: "Leader-II", type: "perk", clue: "Have an orphan join your party", spoil: "Have an orphan join your party", does: "Increases your party cap by 1"};
aData[73] = {show: "y", note: "verify", name: "Leader-III", type: "perk", clue: "Have an orphan join your party", spoil: "Have an orphan join your party", does: "Increases your party cap by 1"};
aData[74] = {show: "n", note: "reserved", name: "reserved-fagh", type: "perk", clue: "reserved", spoil: "reserved", does: "reserved"};
aData[75] = {show: "n", note: "reserved", name: "reserved-frere", type: "perk", clue: "reserved", spoil: "reserved", does: "reserved"};
aData[76] = {show: "y", note: "verify", name: "Iron Army", type: "perk", clue: "Have a party member reach level 7", spoil: "Have a party member reach level 7", does: "Increases party maximum health by 2"};
aData[77] = {show: "y", note: "?", name: "Herbalist", type: "perk", clue: "Collect and deliver any alchemical plant", spoil: "Collect and deliver any alchemical plant", does: "Receive xp from collecting herbs"};
aData[78] = {show: "y", note: "?", name: "Grinder", type: "perm", clue: "Complete 20 repeatable quests on a single character", spoil: "Complete 20 repeatable quests on a single character", does: "+10 xp to all repeatable quests"};
if (action == "HAS?") {
var i = 0;
for (i = 0; i < aData.length; i++) {
if (which == aData[i].name) {
return State.variables.Achievements[i];
};
};
return -1;
} else if (action == "FETCH") {
var i = 0;
for (i = 0; i < aData.length; i++) {
if (aData[i].name == which) {
return [i, aData[i]];
};
};
return [-1, -1];
} else if (action == "SET") {
var i = 0;
for (i = 0; i < aData.length; i++) {
if (aData[i].name == which) {
State.variables.Achievements[i] = 1;
return i;
};
};
} else if (action == "UPGRADE") {
var i = 0;
for (i = 0; i < aData.length; i++) {
if (aData[i].name == which) {
if (value > State.variables.Achievements[i]) {
State.variables.Achievements[i] = value;
return i;
} else {
return "not an upgrade from " + State.variables.Achievements[i];
};
};
};
return -1;
} else if (action == "FETCH ALL DATA") {
return aData;
};
return "error: unrecognized action";
};
setup.SpellbookLookup = function(which) {
var n = [];
n[0] = ["firebolt","heal","armor","poison","up","down","portal","light","map","passwall","soul trap","dart"];
n[1] = [500,501,502,503,504,505,506,507,508,509,510,511];
for (let i = 0; i < n[1].length; i++) {
if (which == n[0][i]) {
return n[1][i];
} else if (which == n[1][i]) {
return n[0][i];
};
};
return -1;
};
setup.CanClassLearnSpell = function(c, sp) {
var allow = [];
if (c == "peasant") {
allow = ["dart","light"];
} else if (c == "lumberjack") {
allow = ["dart","armor","light","up","down","map"];
} else if (c == "prostitute") {
allow = ["dart","armor","poison","up","down","soultrap"];
} else if (c == "warrior") {
allow = ["dart","armor","poison","firebolt","heal"];
} else if (c == "scholar") {
allow = ["dart","armor","poison","firebolt","heal","light","up","down","map","portal","soultrap"];
} else if (c == "priest") {
allow = ["dart","armor","heal","light","up","down","map","portal","soultrap"];
} else if (c == "rogue") {
allow = ["dart","poison","up","down","map","soultrap"];
} else if (c == "mage") {
allow = ["dart","armor","poison","firebolt","light","up","down","map","portal","soultrap"];
} else if (c == "barbarian") {
allow = ["dart","poison","light","up","down","soultrap"];
} else if (c == "monk") {
allow = ["dart","armor","firebolt","heal","light","up","down","portal"];
} else if (c == "guardian") {
allow = [];
} else if (c == "ninja") {
allow = [];
} else if (c == "paladin") {
allow = [];
} else if (c == "druid") {
allow = [];
} else if (c == "necromancer") {
allow = [];
} else {
alert("error in CanClassLearnSpell: unrecognized class");
};
if (setup.FindInArray(allow, sp) > -1) {
return true;
}
return false;
};
setup.LearnSpell = function(which) {
var sb = State.variables.PC[State.variables.CC][State.variables.PCspellbook];
var PCclassPTR = State.variables.PC[State.variables.CC][State.variables.PCclass];
var PClevel = State.variables.PC[State.variables.CC][State.variables.PClevel];
State.variables.PC[State.variables.CC][State.variables.PCspellbook].any = true;
if (sb[which] == 0) {
State.variables.PC[State.variables.CC][State.variables.PCspellbook][which] = 1;
var r = "You have learned to cast " + which;
return r;
} else if (sb[which] > 0) {
var r = "You already know that spell";
return r;
} else {
var r = "Error: spellbook is corrupted. Data sent was: (" + which + ")";
return r;
};
};
setup.AD = function() {
return document.URL;
};
setup.GetEnchantBonuses = function(CC) {
var PC = State.variables.PC;
var PCbp = State.variables.PCbp;
var bodyparts = PC[CC][PCbp];
var HealthBonus = 0;
var DefenseBonus = 0;
var AccuracyBonus = 0;
var ManaBonus = 0;
var i = 0;
for (i = 0; i < bodyparts.length; i++) {
if (bodyparts[i].equippable == true) {
if (bodyparts[i].equip[4] == 550) {
HealthBonus = HealthBonus + bodyparts[i].equip[3];
} else if (bodyparts[i].equip[4] == 551) {
DefenseBonus = DefenseBonus + bodyparts[i].equip[3];
} else if (bodyparts[i].equip[4] == 552) {
AccuracyBonus = AccuracyBonus + bodyparts[i].equip[3];
} else if (bodyparts[i].equip[4] == 553) {
ManaBonus = ManaBonus + bodyparts[i].equip[3];
} else if (bodyparts[i].equip[4] == 554) {
} else if (bodyparts[i].equip[4] == 555) {
} else if (bodyparts[i].equip[4] == 556) {
} else if (bodyparts[i].equip[4] == 557) {
} else if (bodyparts[i].equip[4] == 558) {
} else if (bodyparts[i].equip[4] == 559) {
/* Legacy */
} else if (bodyparts[i].equip[1] == 550) {
HealthBonus = HealthBonus + (5 * bodyparts[i].equip[3]);
} else if (bodyparts[i].equip[1] == 551) {
DefenseBonus = DefenseBonus + (4 * bodyparts[i].equip[3]);
} else if (bodyparts[i].equip[1] == 552) {
AccuracyBonus = AccuracyBonus + (3 * bodyparts[i].equip[3]);
} else if (bodyparts[i].equip[1] == 553) {
ManaBonus = ManaBonus + bodyparts[i].equip[3];
} else if (bodyparts[i].equip[1] == 554) {
} else if (bodyparts[i].equip[1] == 555) {
} else if (bodyparts[i].equip[1] == 556) {
} else if (bodyparts[i].equip[1] == 557) {
} else if (bodyparts[i].equip[1] == 558) {
} else if (bodyparts[i].equip[1] == 559) {
};
};
};
var r = {Health: HealthBonus, Defense: DefenseBonus, Accuracy: AccuracyBonus, ManaBonus};
return r;
};
setup.InitForestCaves = function() {
State.variables.WORLD.ForestCaves = [];
State.variables.WORLD.ForestCaves[2] = [either("wolf","snake"), random(2,5), random(2,6), 550];
State.variables.WORLD.ForestCaves[4] = [either("wolf","snake"), random(2,5), random(2,6), either(550,551)];
State.variables.WORLD.ForestCaves[6] = [either("wolf","snake"), random(2,5), random(2,6), random(550,552)];
State.variables.WORLD.ForestCaves[8] = [either("wolf","snake"), random(2,5), random(2,6), random(550,553)];
State.variables.WORLD.ForestCaves[10] = [either("wolf","snake"), random(2,5), random(2,6), random(550,554)];
State.variables.WORLD.ForestCaves[12] = [either("wolf","snake"), random(2,5), random(2,6), random(550,555)];
State.variables.WORLD.ForestCaves[14] = [either("wolf","snake"), random(2,5), random(2,6), random(550,556)];
State.variables.WORLD.ForestCaves[16] = [either("wolf","snake"), random(2,5), random(2,6), random(550,557)];
State.variables.WORLD.ForestCaves[18] = [either("wolf","snake"), random(2,5), random(2,6), random(550,558)];
State.variables.WORLD.ForestCaves[20] = [either("wolf","snake"), random(2,5), random(2,6), random(550,559)];
return 0;
};
setup.InitDesertCaves = function() {
State.variables.WORLD.DesertCaves = [];
State.variables.WORLD.DesertCaves[1] = ["ant", random(2,11), random(2,11), 550];
State.variables.WORLD.DesertCaves[2] = ["ant", random(2,11), random(2,11), either(550,551)];
State.variables.WORLD.DesertCaves[3] = [either("ant","scorpion"), random(2,11), random(2,11), random(550,552)];
State.variables.WORLD.DesertCaves[4] = [either("ant","scorpion"), random(2,11), random(2,11), random(550,553)];
State.variables.WORLD.DesertCaves[5] = [either("ant","scorpion"), random(2,11), random(2,11), random(550,554)];
State.variables.WORLD.DesertCaves[6] = [either("scorpion"), random(2,11), random(2,11), random(550,555)];
State.variables.WORLD.DesertCaves[7] = [either("scorpion"), random(2,11), random(2,11), random(550,556)];
State.variables.WORLD.DesertCaves[8] = [either("scorpion"), random(2,11), random(2,11), random(550,557)];
State.variables.WORLD.DesertCaves[9] = [either("scorpion"), random(2,11), random(2,11), random(550,558)];
State.variables.WORLD.DesertCaves[10] = [either("scorpion"), random(2,11), random(2,11), random(550,559)];
return 0;
};
setup.GetFlirtDataAgainstMon = function() {
var MonMorph = State.variables.Mon.morph;
var MonSex = State.variables.Mon.sex;
var FlirtArray = setup.GetFlirtPower(MonMorph);
var Physiology = FlirtArray[0]
if (MonSex == "male") {
Physiology = Physiology + FlirtArray[2] + FlirtArray[3];
} else if (MonSex == "female") {
Physiology = Physiology + FlirtArray[1];
} else {
Physiology = Physiology + FlirtArray[1] + FlirtArray[2] + FlirtArray[3];
};
var ProstituteBonus = 0;
if (setup.PtrToClass(State.variables.PC[State.variables.CC][State.variables.PCclass]) == "prostitute") {
ProstituteBonus = State.variables.PC[State.variables.CC][State.variables.PClevel];
};
var EquipBonus = State.variables.PC[State.variables.CC][State.variables.PCFlirtFromEquip];
var MorphToHitBonus = State.variables.PC[State.variables.CC][State.variables.PCmorphBONI].flirtth;
var MorphDamBonus = State.variables.PC[State.variables.CC][State.variables.PCmorphBONI].flirtdam;
var Praying = setup.GetEffect("praying");
var BestProstitute = setup.AchievementHandler("Best Prostitute", "HAS?", -1);
return [Physiology, ProstituteBonus, EquipBonus, MorphToHitBonus, MorphDamBonus, Praying, BestProstitute];
};
setup.FindUnique = function(aID) {
var housePTR = State.variables.House;
var STORES = State.variables.STORE;
var i = 0;
var j = 0;
for (i = 0; i < State.variables.WORLD.house.storage; i++) {
if (STORES[housePTR][i] == "undefined") {
} else if (STORES[housePTR][i][0] == aID) {
return [true, housePTR, i];
};
};
var VaultPTR = State.variables.LegacyVault;
for (i = 0; i < STORES[VaultPTR].length; i++) {
if (STORES[VaultPTR][i] == "undefined") {
} else if (STORES[VaultPTR][i][0] == aID) {
return [true, VaultPTR, i];
};
};
var PCinvenPTR = State.variables.PCinven;
for (i = 0; i < 3; i++) {
if (setup.CharacterExists(i)) {
var PCinvenSize = State.variables.PC[i].length;
for (j = 0; j < State.variables.PC[i][PCinvenPTR].length; j++) {
if (State.variables.PC[i][PCinvenPTR][j][0] == aID) {
return [true, "pcinven", i, j];
};
};
};
};
var PCbpPTR = State.variables.PCbp;
for (i = 0; i < 3; i++) {
if (setup.CharacterExists(i)) {
var bpQTY = State.variables.PC[i][PCbpPTR].length
for (j = 0; j < bpQTY; j++) {
if (State.variables.PC[i][PCbpPTR][j].equippable == true) {
if (State.variables.PC[i][PCbpPTR][j].equip[0] == aID) {
return [true, "pcequip", i, j];
};
};
};
};
};
return [false];
};
setup.CharacterExists = function(which) {
var PC = State.variables.PC;
var PCstate = State.variables.PCstate;
var CharExists = false;
if (State.variables.PC[which]) {
if (State.variables.PC[which][PCstate] == "alive") {
return true;
} else if (State.variables.PC[which][PCstate] == "dead") {
return true;
} else if (State.variables.PC[which][PCstate] == "lost") {
return true;
} else if (State.variables.PC[which][PCstate] == "in transit") {
return true;
};
} else {
return "whole array pos doesn't exist?";
};
return false;
};
setup.FadeBabe = function(s) {
let h1 = 0xfadebabe ^ s, h2 = 0x41c6ce57 ^ s;
for(let i = 0, ch; i < s.length; i++) {
ch = s.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
};
setup.IsPregnant= function(who) {
var PCstate = State.variables.PC[who][State.variables.PCpregnant];
if (PCstate[0] > 0) {
return true;
};
return false;
};
setup.TryPregnancy = function(who, which, chance, DaysToBirth) {
var PCstate = State.variables.PC[who][State.variables.PCpregnant];
if (PCstate[0] > 0) {
return "already pregnant";
};
if (setup.GetEffect("fertile") > 0) {
chance = chance * 2;
};
if (setup.PlayerHasPerk("Fertile")) {
chance = chance * 2;
};
if (setup.PlayerHasPerk("Barren")) {
chance = 0;
};
/* overriding days to birth? */
DaysToBirth = 30;
if (setup.PlayerHasPerk("Breeder")) {
DaysToBirth = Math.trunc(DaysToBirth / 2);
};
if (random(1,100) > chance) {
return "failed";
} else {
var birthYear = State.variables.WORLD.year;
var birthDay = State.variables.WORLD.day + DaysToBirth;
if (birthDay > 365) {
birthYear = birthYear +1;
birthDay = birthDay - 365;
};
State.variables.PC[who][State.variables.PCpregnant] = [];
State.variables.PC[who][State.variables.PCpregnant][0] = 1;
State.variables.PC[who][State.variables.PCpregnant][1] = which;
State.variables.PC[who][State.variables.PCpregnant][2] = birthYear;
State.variables.PC[who][State.variables.PCpregnant][3] = birthDay;
State.variables.PC[who][State.variables.PCpregnant][4] = State.variables.WORLD.year;
State.variables.PC[who][State.variables.PCpregnant][5] = State.variables.WORLD.day;
return "success";
};
};
setup.DungeonGetValidWallAnchors = function(Dungeon, LeverRoomUpperX, LeverRoomUpperY) {
var ValidPlacements = [];
var NextPos = 0;
if (Dungeon[LeverRoomUpperX][LeverRoomUpperY][3] == 0) {
ValidPlacements[NextPos] = [LeverRoomUpperX, LeverRoomUpperY, "LeverLeftUp"];
NextPos = NextPos +1;
};
if (Dungeon[LeverRoomUpperX][LeverRoomUpperY+1][3] == 0) {
ValidPlacements[NextPos] = [LeverRoomUpperX, LeverRoomUpperY+1, "LeverLeftUp"];
NextPos = NextPos +1;
};
if (Dungeon[LeverRoomUpperX+1][LeverRoomUpperY][1] == 0) {
ValidPlacements[NextPos] = [LeverRoomUpperX+1, LeverRoomUpperY, "LeverRightUp"];
NextPos = NextPos +1;
};
if (Dungeon[LeverRoomUpperX+1][LeverRoomUpperY+1][1] == 0) {
ValidPlacements[NextPos] = [LeverRoomUpperX+1, LeverRoomUpperY+1, "LeverRightUp"];
NextPos = NextPos +1;
};
if (ValidPlacements.length < 1) {
alert("Warning: lever room has no valid anchors. Will float the lever so player can proceed.");
ValidPlacements[NextPos] = [LeverRoomUpperX, LeverRoomUpperY, "LeverLeftUp"];
};
return ValidPlacements;
};
setup.DungeonPlaceTwoByTwo = function(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty) {
var DunDimX = State.variables.WORLD.DunDimX;
var DunDimY = State.variables.WORLD.DunDimY;
var RemoveTilesFromSnake = 4;
Visited[UpperLeftX][UpperLeftY] = true;
Visited[UpperLeftX][UpperLeftY+1] = true;
Visited[UpperLeftX+1][UpperLeftY] = true;
Visited[UpperLeftX+1][UpperLeftY+1] = true;
Dungeon[UpperLeftX][UpperLeftY].splice(0,4,0,1,1,0);
Dungeon[UpperLeftX+1][UpperLeftY].splice(0,4,0,0,1,1);
Dungeon[UpperLeftX][UpperLeftY+1].splice(0,4,1,1,0,0);
Dungeon[UpperLeftX+1][UpperLeftY+1].splice(0,4,1,0,0,1);
/* modified by corridor plaement, assigned near last */
var PlaceEventX = either(UpperLeftX, UpperLeftX +1);
var PlaceEventY = either(UpperLeftY, UpperLeftY +1);
var LocalLoop = 0;
var PickOne = 0;
var TooCloseToNorth = false;
var TooCloseToEast = false;
var TooCloseToSouth = false;
var TooCloseToWest = false;
/* BreakTryQty = 1; */
for (LocalLoop = 0; LocalLoop < BreakTryQty; LocalLoop++) {
var rbp = random(0,3);
var bwh = BreakWallHere.length;
PickOne = either(0,1);
if (UpperLeftY == 0) {
TooCloseToNorth = true;
};
if (UpperLeftX >= DunDimX - 2) {
TooCloseToEast = true;
};
if (UpperLeftY >= DunDimY - 2) {
TooCloseToSouth = true;
};
if (UpperLeftX == 0) {
TooCloseToWest = true;
};
if (rbp == 0) {
if (TooCloseToNorth == true) {
/* place south */
Dungeon[UpperLeftX][UpperLeftY +1][2] = 1;
BreakWallHere[bwh] = [UpperLeftX, UpperLeftY +2, 0];
PlaceEventY = UpperLeftY;
} else {
/* place north */
Dungeon[UpperLeftX][UpperLeftY][0] = 1;
BreakWallHere[bwh] = [UpperLeftX, UpperLeftY -1, 2];
PlaceEventY = UpperLeftY +1;
};
} else if (rbp == 1) {
if (TooCloseToEast == true) {
/* place west */
Dungeon[UpperLeftX][UpperLeftY][3] = 1;
BreakWallHere[bwh] = [UpperLeftX -1, UpperLeftY, 1];
PlaceEventX = UpperLeftX +1;
} else {
/* place east */
Dungeon[UpperLeftX +1][UpperLeftY][1] = 1;
BreakWallHere[bwh] = [UpperLeftX +2, UpperLeftY, 3];
PlaceEventX = UpperLeftX;
};
} else if (rbp == 2) {
if (TooCloseToSouth == true) {
/* place north */
Dungeon[UpperLeftX][UpperLeftY][0] = 1;
BreakWallHere[bwh] = [UpperLeftX, UpperLeftY -1, 2];
PlaceEventY = UpperLeftY +1;
} else {
/* place south */
Dungeon[UpperLeftX][UpperLeftY +1][2] = 1;
BreakWallHere[bwh] = [UpperLeftX, UpperLeftY +2, 0];
PlaceEventY = UpperLeftY;
};
} else {
if (TooCloseToWest == true) {
/* place east */
Dungeon[UpperLeftX +1][UpperLeftY][1] = 1;
BreakWallHere[bwh] = [UpperLeftX +2, UpperLeftY, 3];
PlaceEventX = UpperLeftX;
} else {
/* place west */
Dungeon[UpperLeftX][UpperLeftY][3] = 1;
BreakWallHere[bwh] = [UpperLeftX -1, UpperLeftY, 1];
PlaceEventX = UpperLeftX +1;
};
};
};
Dungeon[PlaceEventX][PlaceEventY][11] = WhichEvent;
Dungeon[PlaceEventX][PlaceEventY][12] = 0;
return [Dungeon, Visited, BreakWallHere, RemoveTilesFromSnake];
};
setup.DungeonPlaceThreeByThree = function(Dungeon, Visited, BreakWallHere, UpperLeftX, UpperLeftY, WhichEvent, BreakTryQty) {
var RemoveTilesFromSnake = 9;
Visited[UpperLeftX][UpperLeftY] = true;
Visited[UpperLeftX][UpperLeftY+1] = true;
Visited[UpperLeftX][UpperLeftY+2] = true;
Visited[UpperLeftX+1][UpperLeftY] = true;
Visited[UpperLeftX+1][UpperLeftY+1] = true;
Visited[UpperLeftX+1][UpperLeftY+2] = true;
Visited[UpperLeftX+2][UpperLeftY] = true;
Visited[UpperLeftX+2][UpperLeftY+1] = true;
Visited[UpperLeftX+2][UpperLeftY+2] = true;
/* Top row */
Dungeon[UpperLeftX][UpperLeftY][0] = 0;
Dungeon[UpperLeftX][UpperLeftY][1] = 1;
Dungeon[UpperLeftX][UpperLeftY][2] = 1;
Dungeon[UpperLeftX][UpperLeftY][3] = 0;
Dungeon[UpperLeftX+1][UpperLeftY][0] = 0;
Dungeon[UpperLeftX+1][UpperLeftY][1] = 1;
Dungeon[UpperLeftX+1][UpperLeftY][2] = 1;
Dungeon[UpperLeftX+1][UpperLeftY][3] = 1;
Dungeon[UpperLeftX+2][UpperLeftY][0] = 0;
Dungeon[UpperLeftX+2][UpperLeftY][1] = 0;
Dungeon[UpperLeftX+2][UpperLeftY][2] = 1;
Dungeon[UpperLeftX+2][UpperLeftY][3] = 1;
/* Middle row */
Dungeon[UpperLeftX][UpperLeftY+1][0] = 1;
Dungeon[UpperLeftX][UpperLeftY+1][1] = 1;
Dungeon[UpperLeftX][UpperLeftY+1][2] = 1;
Dungeon[UpperLeftX][UpperLeftY+1][3] = 0;
Dungeon[UpperLeftX+1][UpperLeftY+1][0] = 1;
Dungeon[UpperLeftX+1][UpperLeftY+1][1] = 1;
Dungeon[UpperLeftX+1][UpperLeftY+1][2] = 1;
Dungeon[UpperLeftX+1][UpperLeftY+1][3] = 1;
Dungeon[UpperLeftX+2][UpperLeftY+1][0] = 1;
Dungeon[UpperLeftX+2][UpperLeftY+1][1] = 0;
Dungeon[UpperLeftX+2][UpperLeftY+1][2] = 1;
Dungeon[UpperLeftX+2][UpperLeftY+1][3] = 1;
/* Bottom row */
Dungeon[UpperLeftX][UpperLeftY+2][0] = 1;
Dungeon[UpperLeftX][UpperLeftY+2][1] = 1;
Dungeon[UpperLeftX][UpperLeftY+2][2] = 0;
Dungeon[UpperLeftX][UpperLeftY+2][3] = 0;
Dungeon[UpperLeftX+1][UpperLeftY+2][0] = 1;
Dungeon[UpperLeftX+1][UpperLeftY+2][1] = 1;
Dungeon[UpperLeftX+1][UpperLeftY+2][2] = 0;
Dungeon[UpperLeftX+1][UpperLeftY+2][3] = 1;
Dungeon[UpperLeftX+2][UpperLeftY+2][0] = 1;
Dungeon[UpperLeftX+2][UpperLeftY+2][1] = 0;
Dungeon[UpperLeftX+2][UpperLeftY+2][2] = 0;
Dungeon[UpperLeftX+2][UpperLeftY+2][3] = 1;
var LocalLoop = 0;
for (LocalLoop = 0; LocalLoop < BreakTryQty; LocalLoop++) {
var rbp = random(0,3);
var bwh = BreakWallHere.length;
if (rbp == 0) {
BreakWallHere[bwh] = [UpperLeftX+1,UpperLeftY-1,2];
Dungeon[UpperLeftX+1][UpperLeftY][0] = 1;
} else if (rbp == 1) {
BreakWallHere[bwh] = [UpperLeftX+3,UpperLeftY+1,3];
Dungeon[UpperLeftX+2][UpperLeftY+1][1] = 1;
} else if (rbp == 2) {
BreakWallHere[bwh] = [UpperLeftX+1,UpperLeftY+3,0];
Dungeon[UpperLeftX+1][UpperLeftY+2][2] = 1;
} else {
BreakWallHere[bwh] = [UpperLeftX-1,UpperLeftY+1,1];
Dungeon[UpperLeftX][UpperLeftY+1][3] = 1;
};
};
Dungeon[UpperLeftX+1][UpperLeftY+1][11] = WhichEvent;
Dungeon[UpperLeftX+1][UpperLeftY+1][12] = 0;
return [Dungeon, Visited, BreakWallHere, RemoveTilesFromSnake];
};
setup.DaysUntilBirth = function(who) {
if (State.variables.PC[who][State.variables.PCpregnant][0] < 1) {
return 999;
};
var CurrentYear = State.variables.WORLD.year;
var CurrentDay = State.variables.WORLD.day;
var BirthYear = State.variables.PC[who][State.variables.PCpregnant][2];
var BirthDay = State.variables.PC[who][State.variables.PCpregnant][3];
var days = (BirthYear * 360) + BirthDay - (CurrentYear * 360) - CurrentDay;
return days;
};
setup.GetPartyLimit = function(who) {
var r = Math.trunc(State.variables.PC[who][State.variables.PCwil] / 5);
var c = State.variables.PC[who][State.variables.PCclass];
if (setup.PlayerHasPerk("Leader") == true) {
r = r + 1;
};
if (setup.PlayerHasPerk("Leader-II") == true) {
r = r + 1;
};
if (setup.PlayerHasPerk("Leader-III") == true) {
r = r + 1;
};
if (setup.PtrToClass(c) == "necromancer") {
r = r +1;
var l = State.variables.PC[who][State.variables.PClevel];
if (l > 6) {
r = r + 1;
};
};
return r;
};
setup.GetPluralOf = function(what) {
if (what == "cat-morph") {
return "cat-morphs";
} else if (what == "bunny-morph") {
return "bunny-morphs";
} else if (what == "fox-morph") {
return "fox-morphs";
} else if (what == "wolf-morph") {
return "wolf-morphs";
} else if (what == "wolf") {
return "wolves";
} else if (what == "horse") {
return "horses";
} else if (what == "snake") {
return "snakes";
} else if (what == "ant") {
return "ant girls";
} else if (what == "scorpion") {
return "scorpions";
} else if (what == "harpy") {
return "harpies";
} else if (what == "goblin") {
return "goblins";
} else if (what == "slime") {
return "slimes";
} else if (what == "spider") {
return "spiders";
} else if (what == "naga") {
return "naga";
} else if (what == "drider") {
return "driders";
} else if (what == "minotaur") {
return "minotaurs";
} else if (what == "hellhound") {
return "hellhounds";
} else if (what == "rat-morph") {
return "rat-morphs";
} else if (what == "ratkin") {
return "ratkin";
} else if (what == "hydra") {
return "hydras";
} else if (what == "demon") {
return "demons";
} else if (what == "succubus") {
return "succubi";
} else if (what == "incubus") {
return "incubi";
} else if (what == "tentacle") {
return "tentacle monsters";
} else if (what == "tentacle monster") {
return "tentacle monsters";
} else {
return "(No entry in GetPluralOf)";
};
};
setup.CallFunctionOnAllItemsThatExist = function(func) {
var AllPCs = 0;
var i = 0;
var j = 0;
var PCbp = State.variables.PCbp;
var PCinven = State.variables.PCinven;
var Affected = 0;
/* Character equipment */
for (AllPCs = 0; AllPCs < 3; AllPCs++) {
if (setup.CharacterExists(AllPCs) == true) {
for (i = 0; i < State.variables.PC[AllPCs][PCbp].length; i++) {
if (State.variables.PC[AllPCs][PCbp][i].equippable == true) {
Affected = Affected + func(State.variables.PC[AllPCs][PCbp][i].equip);
};
};
};
};
/* Character Inventory */
for (AllPCs = 0; AllPCs < 3; AllPCs++) {
if (setup.CharacterExists(AllPCs) == true) {
for (i = 0; i < State.variables.PC[AllPCs][PCinven].length; i++) {
if (State.variables.PC[AllPCs][PCinven][i][0] != 0) {
Affected = Affected + func(State.variables.PC[AllPCs][PCinven][i]);
};
};
};
};
/* Pawnshop */
var pawnPTR = State.variables.Pawn;
for (i = 0; i < State.variables.STORE[pawnPTR].length; i++) {
Affected = Affected + func(State.variables.STORE[pawnPTR][i]);
};
/* Legacy Vault */
var vaultPTR = State.variables.LegacyVault;
for (i = 0; i < State.variables.STORE[vaultPTR].length; i++) {
Affected = Affected + func(State.variables.STORE[vaultPTR][i]);
};
return Affected;
};
setup.FixDec2023ItemErrors = function(item) {
var FoundError = 0;
if (setup.TypeOf(item) == "array") {
for (let i = 0; i < 4; i++) {
if (item[i] > -1) {
} else {
item[i] = 0;
FoundError = 1;
};
};
if (item[4] == 700 && item[3] != 0) {
item[3] = 0;
FoundError = 1;
};
if (item[3] == 700) {
item[4] = 700;
item[3] = 0;
FoundError = 1;
};
return FoundError;
} else {
alert("Something went very wrong: attempting to fix Dec 2023 item error, but function was sent something that isn't an item");
};
return 0;
};
setup.PromiseLoadImage = function(imgSrc) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => resolve(img);
img.onerror = (error) => reject(error);
img.src = imgSrc;
});
};
setup.ClearCanvas = function(WhichCanvas) {
var c = document.getElementById(WhichCanvas);
var ctx = c.getContext("2d");
ctx.clearRect(0, 0, c.width, c.height);
return 0;
};
setup.DrawCharIcon = function(IconData, WhichCanvas, xDest, yDest) {
var cCDI = document.getElementById(WhichCanvas);
var ctxCDI = cCDI.getContext("2d");
/* ctxCDI.clearRect(0, 0, cCDI.width, cCDI.height); */
var imgCDI = document.getElementById("CapIconTilemap");
if (setup.TypeOf(xDest) != "number") {
xDest = 0;
yDest = 0;
};
//* can these go? *//
//* FilterText = "hue-rotate(45deg) saturate(150%) brightness(120%)"; *//
//* ctxCDI.filter = "hue-rotate(0deg) saturate(100%) brightness(100%) sepia(150%)"; *//
//* const imageData = ctxCDI.getImageData(0, 0, WhichCanvas.width, WhichCanvas.height); *//
//* Draw body *//
ctxCDI.filter = "";
var tarY = IconData[1][0];
var tarX = IconData[1][1];
ctxCDI.drawImage(imgCDI, tarX * 64, tarY * 64, 64, 64, xDest, yDest, 64, 64);
//* draw hair *//
var FilterText = IconData[4];
if (setup.TypeOf(FilterText) == "array") {
var tarY = IconData[0][0];
var tarX = IconData[0][1];
const intermediateCanvas = document.createElement("canvas");
const intermediateCtx = intermediateCanvas.getContext("2d");
intermediateCanvas.width = 64;
intermediateCanvas.height = 64;
intermediateCtx.filter = FilterText[0];
intermediateCtx.drawImage(imgCDI, tarX * 64, tarY * 64, 64, 64, xDest, yDest, 64, 64);
const finalCanvas = document.createElement("canvas");
const finalCtx = finalCanvas.getContext("2d");
finalCanvas.width = 64;
finalCanvas.height = 64;
finalCtx.filter = FilterText[1];
finalCtx.drawImage(intermediateCanvas, 0, 0);
ctxCDI.filter = "none";
ctxCDI.drawImage(finalCanvas, 0, 0);
} else {
ctxCDI.filter = FilterText;
var tarY = IconData[0][0];
var tarX = IconData[0][1];
ctxCDI.drawImage(imgCDI, tarX * 64, tarY * 64, 64, 64, xDest, yDest, 64, 64);
}
//* Draw accessory *//
ctxCDI.filter = "none";
var tarY = IconData[2][0];
var tarX = IconData[2][1];
ctxCDI.drawImage(imgCDI, tarX * 64, tarY * 64, 64, 64, xDest, yDest, 64, 64);
return 0;
};
setup.executeFunction = function(func, param) {
return func(param);
};
LandingEnchanted Glade update checklist
* Convert tile tiles to image maps
* Water walking potion
* Add water to forest map
* add harpies to desert
* Implement flying, over water, over rocks, through tower holes
* breadcrumb item?
* Selene alchemy flower deposit and potion UI
* Desert level 10 Talvin border
* Talvin placeholder
* clean up caption active effects UI on overworld
* Add centaurs, gryphons, and fairies
* Enchanted Glade persistent map
* Need some reason to go to the Glade
* Quest for mithril
* make store UIs work like house UI
*
Done: