From 4e3b63f34544960714339ff8041f58346ebbdaef Mon Sep 17 00:00:00 2001 From: Ormael Date: Tue, 20 Feb 2018 16:39:06 +0100 Subject: [PATCH 01/27] 0.8i2.00 - Luna sparing option --- Corruption-of-Champions-FD-STANDALONE.as3proj | 2 +- classes/classes/CoC.as | 4 +-- classes/classes/Items/Weapons/FlyWhisk.as | 2 +- classes/classes/Scenes/Camp.as | 2 ++ classes/classes/Scenes/Changelog.as | 15 ++++----- classes/classes/Scenes/NPCs/Luna.as | 7 +++-- classes/classes/Scenes/NPCs/LunaFollower.as | 31 +++++++++++++++++-- classes/classes/Scenes/Soulforce.as | 2 +- 8 files changed, 49 insertions(+), 16 deletions(-) diff --git a/Corruption-of-Champions-FD-STANDALONE.as3proj b/Corruption-of-Champions-FD-STANDALONE.as3proj index f56b6cea1a..5170b5ca75 100644 --- a/Corruption-of-Champions-FD-STANDALONE.as3proj +++ b/Corruption-of-Champions-FD-STANDALONE.as3proj @@ -4,7 +4,7 @@ - + diff --git a/classes/classes/CoC.as b/classes/classes/CoC.as index af1dda889e..aad7a3f8a8 100644 --- a/classes/classes/CoC.as +++ b/classes/classes/CoC.as @@ -247,8 +247,8 @@ public class CoC extends MovieClip //model.debug = debug; // TODO: Set on model? //Version NUMBER - ver = "1.0.2_mod_Xianxia_0.8i"; - version = ver + " (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes))"; + ver = "1.0.2_mod_Xianxia_0.8i2"; + version = ver + " ()"; this.images = new ImageManager(stage, mainView); this.inputManager = new InputManager(stage, mainView, false); diff --git a/classes/classes/Items/Weapons/FlyWhisk.as b/classes/classes/Items/Weapons/FlyWhisk.as index 012ce69696..e5e7cff354 100644 --- a/classes/classes/Items/Weapons/FlyWhisk.as +++ b/classes/classes/Items/Weapons/FlyWhisk.as @@ -12,7 +12,7 @@ package classes.Items.Weapons public function FlyWhisk() { - super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 800, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); + super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 400, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); } } } \ No newline at end of file diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index f8b0d5bdc9..d2c7ec8dbb 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -1001,6 +1001,7 @@ public function loversHotBathCount():Number { if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.DIANA_FOLLOWER] > 5) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) counter++; if (followerHel()) counter++; if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; @@ -1023,6 +1024,7 @@ public function sparableCampMembersCount():Number { if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) counter++; if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) counter++; if (followerHel()) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; if (followerKiha()) counter++; diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 2bf325152f..53fb27dd3b 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -39,7 +39,7 @@ package classes.Scenes outputText("-Kindra archery training would progress 2x faster.\n"); outputText("-Manual that Chi Chi drops after beating PC in second fight unlock Soul Blast soulskill (15 turns CD, chance to stun for 3 turns and dmg scale with PC current str, int and wis)\n"); outputText("-Fixed bugs: Softlocks on few enemy bind specials (like Izumi or Ceraph), Wrath specials correctly list needed resource, option to send Izma to fishery before it's built, many other small fixes\n\n"); - outputText("Version 0.8i:\n\n"); + outputText("Version 0.8i (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes):\n\n"); outputText("-New tier 0 misc lvl-up perk: Tough Hide. Req. Job: Beast Warrior perk and 30+ tou. Effect: Increase natural armor by 2 so long as PC have scale chitin fur or other natural armor.\n"); outputText("-New tier 1 misc lvl-up perk: Feral Armor. Req. Tough Hide perk and 60+ tou. Effect: Gain extra armor based on PC toughness so long as PC is naked, +20 to max wrath. (Similar to agility but PC must be naked and have natural armor)\n"); outputText("-New tier 1 misc lvl-up perk: Job: Healer. Req. 30+ int and 30+ wis. Effect: +5 to max Int and Wis (scalable), +30 to max Mana, +10% to spellpower when using healing spells\n"); @@ -57,7 +57,6 @@ package classes.Scenes outputText("-Having natural claws add toggle in combat menu to switch between normal or feral combat style. Only when PC not use any weapon (after few special exceptions) can benefit from feral combat style - when PC can attack more than once a turn fatigue costs will be halfed.\n"); outputText("-New melee weapon: Claws - obtainable by buying in weapon shop in He'Xin'Dao. 0 atk, 10% to cause bleed, 100 gems, is one of special exception weapons, which could be used without loosing benefits from using feral combat style.\n"); outputText("-All bleed effects not req. to lower enemy armor below 10. Also previous 50% chance for bleed effect was lowered to 25% for hooked gaunlets.\n"); - //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-First gaunlet repeatable reward was lowered to 15 spirit stones to keep in theme of 5 SS for each enemy defeated in gaunlet challanges.\n"); outputText("-Perk Rage give 50 more to max wrath and perk Anger 100 more to max wrath. To perk Job: Warlord req. was added option to use perk Feral Whirlwind instead of Whirlwind or Whipping. Other req. stay the same.\n"); outputText("-Beast Warrior PC's can use their own version of Whirlwind that req. only to have natural claws or weapons that can substitude natural claws. Almost all rest is similar to Whirlwind performed with any non-large/large weapon.\n"); @@ -74,7 +73,6 @@ package classes.Scenes outputText("-New body part - face: Avain Face. No prereq.\n"); outputText("-New body part - ears: Avain Ears. No prereq.\n"); outputText("-New body part - skin: Feathers. No prereq.\n"); - //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); outputText("-New melee weapon (by Shamanknight): Halberd - buyable in weapons shop in Tel'Adre. Cost 1200 gems. Base atk is 6 increased by 9 when PC have 50+ str and another 15 more atk when having 100+ str. Attacks ignore 40% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Guan Dao - buyable in weapons shop in He'Xin'Dao. Cost 100 spirit stones. Base atk is 6 increased by 8 when PC have 50+ str and another 11 more atk when having 100+ str. Attacks ignore 60% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Fly-Whisk - buyable in weapons shop in He'Xin'Dao. Cost 80 spirit stones. Base atk is 0, increase magical soulskills power by 20%.\n"); @@ -92,15 +90,18 @@ package classes.Scenes outputText("-Tease and few other lust dealing attacks scalling was changed to use libido scaling instead lvl based one + in case of alraune it will have toughness scaling too.\n"); outputText("-Giacomo was added to possible encounters in Soul Sense menu. Also Lumi Lab after first time visiting it would be moved to Dungeons submenu (since it should been like Sean shop inside one of dungeons).\n"); outputText("-Celess related events in forest would be temporaly unaccesable (not affecting anything if PC already have Celess in camp).\n"); - outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n\n\n\n\n");/*ostatni punkt changelogu - outputText("-Added in current version race effects to Metamorph perk: \n"); - outputText("-\n"); + outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n"); + outputText("Version 0.8i2:\n\n"); outputText("-\n"); + outputText("-Fly-Whisk price lowered by half.\n"); + outputText("-Fixed bugs: \n\n\n\n\n");/*ostatni punkt changelogu + //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); + //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Corrupted Celess to corrupt. (item properties desc).\n"); outputText("-New event perk: Gargoyle. Gained in ritual to become gargoyle by picking own blood. Effects: \n"); outputText("-New event perk: Corrupted Gargoyle. Gained in ritual to become gargoyle by picking minotaur blood. Effects: \n"); - outputText("-\n"); + outputText("-Added in current version race effects to Metamorph perk: \n"); outputText("-\n"); outputText("-\n"); outputText("\n"); diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index aea648bbe2..7885ebba14 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -8,6 +8,7 @@ package classes.Scenes.NPCs import classes.BodyParts.Butt; import classes.BodyParts.Hips; import classes.Scenes.SceneLib; + import classes.GlobalFlags.kFLAGS; import classes.internals.*; use namespace CoC; @@ -51,12 +52,14 @@ package classes.Scenes.NPCs override public function defeated(hpVictory:Boolean):void { - SceneLib.lunaFollower.fullMoonEventResistWin(); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaWon(); + else SceneLib.lunaFollower.fullMoonEventResistWin(); } override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void { - SceneLib.lunaFollower.fullMoonEventResistDefat(); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaLost(); + else SceneLib.lunaFollower.fullMoonEventResistDefeat(); } public function Luna() diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index de93b53e4d..aa9c1cab6b 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -121,7 +121,10 @@ package classes.Scenes.NPCs if (flags[kFLAGS.SLEEP_WITH] != "Luna") addButton(5, "Sleep With", lunaSleepToggle); else addButton(5, "Sleep Alone", lunaSleepToggle); } - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(6, "Sex", sexMenuMain); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { + if (flags[kFLAGS.CAMP_UPGRADES_SPARING_RING] >= 2) addButton(2, "Spar", sparLuna); + addButton(6, "Sex", sexMenuMain); + } if (flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 10) addButton(7, "Unchain", lunaChainToggle).hint("Unchain Luna and see what happens."); if (flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 8) addButton(7, "Chain", lunaChainToggle).hint("Chain Luna."); addButton(14, "Leave", camp.campFollowers); @@ -215,6 +218,30 @@ package classes.Scenes.NPCs doNext(camp.returnToCampUseOneHour); } + public function sparLuna():void { + clearOutput(); + outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); + outputText("\"" + player.mf("Master", "Mistress") + ", we both know it is best not to awaken my instincts during the day. I am a pitiful woman.\"\n\n"); + outputText("Well it's exactly because she is both strong and dangerous that you need her help to become so yourself.\n\n"); + outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); + outputText("You both head to the ring and get ready for a brawl. She removes her dress and gets stark naked before you " + (camp.companionsCount() >= 2 ? "to the consternation of everyone who’s looking, " : "") + "before starting to pant as she changes shape. You recognise the green glow of crazed desire in her eyes now and almost regret your choice. Losing to her will likely result into you both having sex whether you like it or not.\n\n"); + startCombat(new Luna()); + } + public function sparLunaWon():void { + clearOutput(); + outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); + outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); + doNext(camp.returnToCampUseOneHour); + } + public function sparLunaLost():void { + clearOutput(); + outputText("Luna pounces on you with a hungry growl. Guess you had it coming when you asked her to spar you.\n\n"); + outputText("\"You lost " + player.mf("Master", "Mistress") + ", therefore I’m entitled to do whatever I want with you. Well I don’t care what it is as long as we do it now.\"\n\n"); + monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); + cleanupAfterCombat(); + doNext(sexMenuDominateHer); + } + public function mealLuna():void { clearOutput(); outputText("You ask Luna if today's meal is ready.\n\n"); @@ -395,7 +422,7 @@ package classes.Scenes.NPCs CoC.instance.timeQ += 6; doNext(camp.sleepWrapper); } - public function fullMoonEventResistDefat():void { + public function fullMoonEventResistDefeat():void { clearOutput(); outputText("You are too weak to keep fighting and Luna senses it. Before you can react she pounces on you. You’re back to the position you were in earlier and this time you are in no way capable of putting up a fight.\n\n"); outputText("\"It's ok, [name], the pain will only last for a few seconds and then...\"\n\n"); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 39d15f8910..9633b41038 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -190,7 +190,7 @@ use namespace CoC; //addButton(5, "Upgrade", UpgradeItems).hint("."); //ulepszanie itemów if (player.findPerk(PerkLib.Metamorph) >= 0) addButton(6, "Metamorf", SceneLib.metamorph.accessMetamorphMenu).hint("Use your soulforce to mold freely your body.");//używanie metamorfowania z użyciem soulforce if (player.findPerk(PerkLib.SoulSense) >= 0) addButton(7, "Soul Sense", SoulSense).hint("Use your soul sense to trigger specific encounter."); //używanie divine sense aby znaleść określone event encounters: Tamani (lvl 6+), Tamani daugthers (lvl 6+), Kitsune mansion (lvl 12+), Izumi (lvl 18/24+), itp. - //addButton(10, "Cheats", SoulforceCheats).hint("Well as title saying those are cheats ^^");//block this option at each public version + addButton(10, "Cheats", SoulforceCheats).hint("Well as title saying those are cheats ^^");//block this option at each public version addButton(14, "Back", playerMenu); }//w lini 28 w oOnLoadVariables zmian wprowadzić i w lini conditionalConverters w folderze parser zmian dot. wraith wprowadzić, zablokować perki soul tyrant i dual wield w momencie robienia release version public function SoulforceCheats():void { From ff10f11b27b9f1101602638c5c1749370b557b85 Mon Sep 17 00:00:00 2001 From: Oxdeception <30361731+Oxdeception@users.noreply.github.com> Date: Wed, 21 Feb 2018 16:39:55 -0500 Subject: [PATCH 02/27] Fix Vampire Blood body part refs --- classes/classes/Items/Consumables/VampireBlood.as | 8 +++++--- content/coc/NPC/diva.xml | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/classes/classes/Items/Consumables/VampireBlood.as b/classes/classes/Items/Consumables/VampireBlood.as index f1b9368f0e..5285db5e47 100644 --- a/classes/classes/Items/Consumables/VampireBlood.as +++ b/classes/classes/Items/Consumables/VampireBlood.as @@ -55,7 +55,7 @@ public class VampireBlood extends Consumable { Check : player.hasGooSkin(), Override: mutations.humanizeSkin }, { - BodyPart: 'ears.Type', + BodyPart: 'ears.type', ChangeTo: pure ? Ears.VAMPIRE : Ears.BAT, Check : pure ? player.ears.type != Ears.HUMAN : false, Override: pure ? mutations.humanizeEars : null @@ -63,7 +63,7 @@ public class VampireBlood extends Consumable { BodyPart: 'eyes.type', ChangeTo: Eyes.VAMPIRE }, { - BodyPart: 'face.Type', + BodyPart: 'faceType', ChangeTo: Face.VAMPIRE } ]; @@ -112,7 +112,9 @@ public class VampireBlood extends Consumable { if(count)changes++; } outputText("\n\n"); - story.display(tf.BodyPart, {$pure: pure}); + if(count){ + story.display(tf.BodyPart, {$pure: pure}); + } hostObj[bodyPart] = tf.ChangeTo; for each(var extra:Object in tf.Addition){ doChange(extra,false); diff --git a/content/coc/NPC/diva.xml b/content/coc/NPC/diva.xml index e6954579bd..70c7ed8925 100644 --- a/content/coc/NPC/diva.xml +++ b/content/coc/NPC/diva.xml @@ -669,7 +669,7 @@ Well, this isn’t so bad, the scarf-like look is certainly nice, at the very least. Your neck now sports a collar of fur. - + You yelp as a throbbing pain takes root in the sides of your mouth. You feel your canines grow longer as your throat grow dryer. You could go for some wine right now, with a bloody steak to top it off… maybe just the steak. From fafefa704bd18758d6133f9cb8836eb6a461bd35 Mon Sep 17 00:00:00 2001 From: aimozg Date: Sat, 24 Feb 2018 14:01:09 +0600 Subject: [PATCH 03/27] Fixed several unclosed italic tags. Searched by RegExp ```regex ([^<]|<[^/]|Where are my saves located?\n"); - outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); + outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); outputText("In Windows Vista/7 (Chrome):
Users/{username}/AppData/Local/Google/Chrome/User Data/Default/Pepper Data/Shockwave Flash/WritableRoot/#SharedObjects/{GIBBERISH}/
\n\n"); outputText("Inside that folder it will saved in a folder corresponding to where it was played from. If you saved the CoC.swf to your HDD, then it will be in a folder called localhost. If you played from my website, it will be in fenoxo.com. The save files will be labelled CoC_1.sol, CoC_2.sol, CoC_3.sol, etc.
\n\n"); outputText("Why do my saves disappear all the time?\nThere are numerous things that will wipe out flash local shared files. If your browser or player is set to delete flash cookies or data, that will do it. CCleaner will also remove them. CoC or its updates will never remove your savegames - if they disappear something else is wiping them out.\n\n"); diff --git a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as index ceec9b80eb..4a424f9620 100644 --- a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as +++ b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as @@ -589,7 +589,7 @@ public class MinervaPurification extends BaseContent outputText("Giving me these daughters is the greatest gift you could have given me...
\" she says softly as she holds you gently, bulge pressed gently against bulge, her hands stroking your stomach as you caress hers."); outputText("\n\nThe two of you lay here against the tree cuddling together as a pair of expecting parents"); if (flags[kFLAGS.MINERVA_CHILDREN] > 0) outputText(", your daughters curled up with you and Minerva; they seem very happy, as if they all know that they are going to be getting more sisters soon"); - outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?"); + outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?\""); } else { //Not pregnant or pregnant with something else. outputText("You can't help wondering if anything has changed since you had been with her last. If her body was any hint at how fertile she now is, it was likely very easy for her to get pregnant. It's not hard to spot her; the golden siren is sitting on the edge of the spring with her feet in the water, gently splashing the water as she softly sings to herself. When you get closer, though, you realize that she is not really singing to herself but to her round pregnant belly. From where you are you can clearly tell she is stroking her pregnancy gently with her hands as she sings softly to her unborn babies."); @@ -1652,7 +1652,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } @@ -1664,7 +1664,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } diff --git a/classes/classes/Scenes/Areas/Lake/FetishZealot.as b/classes/classes/Scenes/Areas/Lake/FetishZealot.as index 00c4f47940..f4d2d5716d 100644 --- a/classes/classes/Scenes/Areas/Lake/FetishZealot.as +++ b/classes/classes/Scenes/Areas/Lake/FetishZealot.as @@ -82,7 +82,7 @@ public class FetishZealot extends Monster //A pirate costume; if(armorName == PIRATE_CLOTHES) { //You are faced with one of the strangest things you have ever seen in your life. A stereotypical pirate, who has not replaced his hand with a hook, but rather a collection of sex toys. You can see at least two dildos, a fleshlight, and numerous other toys that you're incapable of recognizing. - outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); + outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); } //Military attire; if(armorName == MILITARY_CLOTHES) { diff --git a/classes/classes/Scenes/DebugMenu.as b/classes/classes/Scenes/DebugMenu.as index 6308bb4bfd..ec21b20d7f 100644 --- a/classes/classes/Scenes/DebugMenu.as +++ b/classes/classes/Scenes/DebugMenu.as @@ -627,7 +627,7 @@ public class DebugMenu extends BaseContent } displayHeader("Color picker"); outputText('\nCurrent color:'); - outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); + outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); outputText("\nSaturation:\t\t"+s+' / 100\t(0: greyscale, 100: bright color)'); outputText("\nLuminosity:\t"+l+' / 100\t(0: black, 50: bright color, 100: white)'); outputText('\n\nCurrent mode: '+pickerMode+' color.'); diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as index 3ca1310290..0eb4b7601a 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as @@ -210,7 +210,7 @@ use namespace CoC; outputText("\n\n\"I think that even after we are friends and all, and the fact of we don’t mind…em...relieving pressure, together…\""); outputText("\n\nOh, you’re understanding the way of he’s going. After a few doubts, he puts his hand on yours and finally says:"); outputText("\n\n\"I think… I now think of you as more than a friend. You see…despite being a god, sometimes I could be a little unsure, and explaining this kind of thing is difficult for me, but…I think, no, I’m sure what I feel about you is not only friendship, because, [name], I think that I’ve fallen in love with you. "); - outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me."); + outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me.\""); flags[kFLAGS.ANZU_RELATIONSHIP_LEVEL] = 4; doYesNo(anzuRelatLvl4Sex, anzuRelatLvl4Dont); return; diff --git a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as index 84227e4eb7..78479adbc5 100644 --- a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as +++ b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as @@ -777,7 +777,7 @@ public class LethiceScenes extends BaseContent outputText("\n\nThe girl blinks, the rage on her face replaced by confusion. “W-what are you talking about, demon?” she murmurs, looking up for the first time. You glance down at her from your place at Mistress’s side, really looking at this... this “Champion” for the first time. You feel a vague sense of recognition when you look at her, even as dirty and cum-slathered as she is, though you can’t place her. You squint, but trying to think more about it just makes your head hurt, and so you instead look down at those perky tits of hers, letting yourself get hard again at the thought of grabbing onto them and fucking her as your next bitch."); outputText("\n\n“You’re lucky,” Mistress smirks, standing. “"); - if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines."); + if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines.\""); else { outputText("How did you escape from the factory, I wonder? And so clean and pure, too... you’re belly’s not yet swollen with imps, and your breasts are so small. Did you slip through"); diff --git a/classes/classes/Scenes/Holidays.as b/classes/classes/Scenes/Holidays.as index 9dda10232f..0627d34c71 100644 --- a/classes/classes/Scenes/Holidays.as +++ b/classes/classes/Scenes/Holidays.as @@ -1677,7 +1677,7 @@ public class Holidays { if (player.hasVagina()) EngineCore.addButton(3, "Pussy", pastieValentineIntro, "vag"); } else { - EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover."); + EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover.\""); EngineCore.doNext(SceneLib.camp.returnToCampUseTwoHours); } } diff --git a/classes/classes/Scenes/NPCs/AmilyScene.as b/classes/classes/Scenes/NPCs/AmilyScene.as index 82b6f63814..a60d03b4bd 100644 --- a/classes/classes/Scenes/NPCs/AmilyScene.as +++ b/classes/classes/Scenes/NPCs/AmilyScene.as @@ -2702,7 +2702,7 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface private function amilyCorruptSexMenu():void { amilySprite(); if(player.gender > 0) { - outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?"); + outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?\""); menu(); if (player.hasCock()) { addButton(0, "Anal", corruptAmilyBuckFutter).hint("Fuck Amily in the ass!"); diff --git a/classes/classes/Scenes/NPCs/ChiChiFollower.as b/classes/classes/Scenes/NPCs/ChiChiFollower.as index adec4177a1..5b79a6da9a 100644 --- a/classes/classes/Scenes/NPCs/ChiChiFollower.as +++ b/classes/classes/Scenes/NPCs/ChiChiFollower.as @@ -73,7 +73,7 @@ public function WonSecondFight():void { public function WonSecondFightNo():void { outputText("Likely the proud master would rather have her opponent leave her be than be dishonored any further. You head back toward your camp to rest after this well earned victory, pocketing the scroll you found on Chi Chi at the same time, as you fail to notice the blood beginning to slowly create a small pool under her.\n\n"); outputText("A peasant runs to you, stopping you from leaving for a moment.\n\n"); - outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\n\n"); + outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\"\n\n"); outputText("You are somewhat shocked to learn that Chi Chi died, did she go all out in this battle to the point it cost her life? You head back to camp trying to figure how such a tragic incident happened in a training session.\n\n"); flags[kFLAGS.CHI_CHI_FOLLOWER] = 2; inventory.takeItem(weapons.MASTGLO, WonSecondFightNo2); diff --git a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as index 4f9fe5bc03..8753264117 100644 --- a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as @@ -346,7 +346,7 @@ private function isabellasAccentCoaching():void { clearOutput(); //Cooldown rejection if(flags[kFLAGS.ISABELLA_ACCENT_TRAINING_COOLDOWN] > 1) { - outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); + outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); //Back to follower menu! doNext(callForFollowerIsabella); return; @@ -983,7 +983,7 @@ public function angryMurble():void { clearOutput(); outputText("You come to Isabella's part of the camp with Marble in tow, supposing now is as good a time as ever to introduce the two. Marble greats Isabella warmly but immediately starts bombarding her with questions about her origin. From her persistence, it seems she is interested in meeting another cow-girl. Though a little overwhelmed, Isabella recovers quickly, explaining her origins and the impurity of her cow-girl nature. Marble is visibly disappointed.\n\n"); - outputText("\"The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); + outputText("The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); flags[kFLAGS.ISABELLA_MURBLE_BLEH] = 2; doNext(playerMenu); } diff --git a/classes/classes/Scenes/NPCs/IsabellaScene.as b/classes/classes/Scenes/NPCs/IsabellaScene.as index a9d2865332..50cbb3947b 100644 --- a/classes/classes/Scenes/NPCs/IsabellaScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaScene.as @@ -258,7 +258,7 @@ public function unwelcomeFightCowGal():void { public function fightIsabella():void { clearOutput(); if(!isabellaFollower()) isabellaFollowerScene.isabellaAffection(-5); - outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); + outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); startCombat(new Isabella()); flags[kFLAGS.ISABELLA_ANGRY_AT_PC_COUNTER] += 72; spriteSelect(31); diff --git a/classes/classes/Scenes/NPCs/JoyScene.as b/classes/classes/Scenes/NPCs/JoyScene.as index c3dd4f52d6..ec6e52bf8e 100644 --- a/classes/classes/Scenes/NPCs/JoyScene.as +++ b/classes/classes/Scenes/NPCs/JoyScene.as @@ -581,7 +581,7 @@ import classes.lists.Gender; outputText("...Well, you're not really anything. And it's not really a lot of fun... can't you turn into a boy or a girl?"); } //Corruption and perk check - outputText("\n\nNext, Joy closes her eyes and focuses on your aura."); + outputText("\"\n\nNext, Joy closes her eyes and focuses on your aura."); if (player.cor < 5) { //Pure outputText("\n\n\"Your aura's, like, super shiny white - I can't remember seeing anyone as clean and pretty as you!\""); } @@ -1186,7 +1186,7 @@ import classes.lists.Gender; outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this will make my funstick bigger. Are you sure you want that [name]?\""); } else { - outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); + outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); } doYesNo(giveJoyAnIncubiDraftForReal, dontGiveJoyAnIncubiDraft); } diff --git a/classes/classes/Scenes/NPCs/LatexGirl.as b/classes/classes/Scenes/NPCs/LatexGirl.as index 930730e237..3859ca1e85 100644 --- a/classes/classes/Scenes/NPCs/LatexGirl.as +++ b/classes/classes/Scenes/NPCs/LatexGirl.as @@ -645,7 +645,7 @@ private function changeGooDick():void { else outputText("I want you to order me to shift it often. "); outputText("Changing myself further, twisting my body into a sexual playground for you... that would be the ultimate thrill!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"I'll need something masculine if you want me to grow a cock, [Master]. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She shudders and closes her eyes, imagining herself with a rigid equine pole. Your goo must have a bit of a fetish."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was."); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was.\""); } //High Happiness + Whatever Obedience(F) else if(gooHappiness() >= 70) { @@ -654,7 +654,7 @@ private function changeGooDick():void { else outputText("she'd like to change what kind of dick she has."); outputText(" She beams and titters, \"Omigod, I loved growing penises back before I changed! It was so much fun to see how surprised it would make people and to make new shapes to see how they'd feel. Let's do it!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I'll need something masculine if you want me to grow a cock. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She smiles wickedly."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was."); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was.\""); } //Low Obedience(F) else { diff --git a/classes/classes/Scenes/NPCs/Rathazul.as b/classes/classes/Scenes/NPCs/Rathazul.as index c4e6c9c64c..6452220460 100644 --- a/classes/classes/Scenes/NPCs/Rathazul.as +++ b/classes/classes/Scenes/NPCs/Rathazul.as @@ -863,7 +863,7 @@ private function growLethiciteDefenseYesYesYes():void { private function growLethiciteDefenseGuessNot():void { spriteSelect(49); clearOutput(); - outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power."); + outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power.\""); doNext(returnToRathazulMenu); } diff --git a/classes/classes/Scenes/NPCs/ShouldraFollower.as b/classes/classes/Scenes/NPCs/ShouldraFollower.as index eb90436416..bf8059132a 100644 --- a/classes/classes/Scenes/NPCs/ShouldraFollower.as +++ b/classes/classes/Scenes/NPCs/ShouldraFollower.as @@ -1950,7 +1950,7 @@ private function goAlongWIthShouldrasEatingSpree():void { outputText("\n\nYou struggle forward in your seat and resume grazing on a stack of donuts, though you are hindered somewhat by both the ghost girl's pussy worship and your cramped stomach. The bloated orb has by now pushed your shirt up around your [fullChest] and left your skirt in tatters; it rests between your thighs, your legs having been forced to part under its growing weight. An ominous gurgle erupts from your overtaxed gut; perhaps you've overestimated yourself? You massage the complaining flesh with one hand to ease the pressure while continuing to sate your insatiable appetite with the other, heavenly gouts of angel cake dropping into your abyss of a stomach. Shouldra smiles as the churning and gurgling continues; her fucksucking lips slip off your drooling pussy-flesh and ascend, trailing supersized kisses across your crotch and up to your navel. She nuzzles your bloated belly like a pillow, her hands digging gently into the flesh and kneading with equal parts care and roughness. Your free hand stops massaging and cradles her head, and in a moment of impishness you shove a slice of something gooey and triple-layered into her unsuspecting candied maw. She swallows, surprise turning quickly to a grin of friendly vengeance. \"So that's how we're playing it, big girl?\" Shouldra snickers, before giving your sensitive stomach a hearty slap."); outputText("\n\nYou wince slightly before returning a sloppy food-filled grin... Wait. You're not feeding yourself. What the fuck? The ghost girl answers your confusion with a profiterole that soars into your slack mouth. Damned ghoul, that's just playing dirty! You both devolve into a fierce stuffing contest; your desperate hands snag anything they can from the spread and cram them into the ghost's gullet, while waves of pastries ram themselves into your own defenseless mouth. The combination of the adrenaline-fueled force-feeding frenzy and the increasing pressure of your swelling gut on your button forms a familiar sensation; prickling loins, skipped heartbeats, an intense heat in your flushed cheeks. As you feel the giddy euphoria of an oncoming food coma, Shouldra seizes the moment and dives down into your crotch, lapping and licking every oh-so-sensitive inch she can, teasing and tickling, probing your wet cunt with her jellied tongue."); outputText("\n\nA guttural moan escapes your icing-caked lips as you sink into a creamy smooth orgasm, like sliding into a hot bath. [if (isSquiter = true) \"Hot streams of liquid lust spurt across Maddie's face, drizzling her with your copious fem-spunk. \"][if (isLactating = true) \"Droplets of milk form on your [nipples], soon forming rivers of cream that cascade down your fiery-hot flesh. \"]After a moment of rest, Shouldra squeezes out from under the table, licking your girl-cum from her lips with a satisfied slurp, and helps you to your feet; a task made seriously annoying by your titanic tummy digging in to the edge of the counter. The other patrons remain blissfully unaware of the whole act, including your current nudity. Speaking of which..."); - outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!"); + outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!\""); outputText("\n\nYou leave the bakery and head back to camp, leaving behind a very confused Maddie."); player.orgasm(); doNext(camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/NPCs/SophieFollowerScene.as b/classes/classes/Scenes/NPCs/SophieFollowerScene.as index f95017ba29..19a75beddd 100644 --- a/classes/classes/Scenes/NPCs/SophieFollowerScene.as +++ b/classes/classes/Scenes/NPCs/SophieFollowerScene.as @@ -1092,9 +1092,9 @@ internal function sophieIncestInHerCooterOrSomethingIDunno():void { outputText("\n\nUnable to resist the feeling of her achingly hard nipples being pressed against you so tightly, you reach out for your daughter's big, creamy udders and grab her hard nipples. You pull your stacked daughter's sensitive buds before you pinch and squeeze them. Not quite done with her, you let go of her nipples, letting your hands sink into the supple flesh of her enormous breasts before grabbing them harder, starting to knead and massage the soft, pliant jugs. The rough and passionate touching of her body only seems to excite and arouse your firstborn further. She's clearly enjoying the groping and teasing of her sensitive breasts, and you draw needy, birdlike coos and cries from her pouty lips. "); - if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); + if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); //[normal speech: - else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); + else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); } //second daughter: else if(daughterCap == 1) { diff --git a/classes/classes/Scenes/NPCs/Urta.as b/classes/classes/Scenes/NPCs/Urta.as index fb96c5da07..1f043b9be6 100644 --- a/classes/classes/Scenes/NPCs/Urta.as +++ b/classes/classes/Scenes/NPCs/Urta.as @@ -2604,7 +2604,7 @@ private function tellUrtaNoMoreScylla():void { flags[kFLAGS.UNKNOWN_FLAG_NUMBER_00147] = 1; outputText("You let Urta know that you're willing to overlook this, but that Scylla is a slippery slope that's best avoided. She nods, a sober expression on her vulpine face. Once you finish, she replies, \"I understand, but you need to know – when 'it' gets too much for me to handle... if you aren't around to help I'm going to see Edryn. S-she helps... if it wasn't for her I probably would've given up and done something stupid a long time ago. What we have is more important, but unless we can get together every couple days I'll NEED to visit her. "); if(urtaLove()) outputText("Just please, don't doubt my love for you. "); - outputText("Do I need to stop drinking too?"); + outputText("Do I need to stop drinking too?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } @@ -2615,7 +2615,7 @@ private function tellUrtaMoreScyllaIsFine():void { outputText("You give Urta a raunchy, lewd smile and let her know that you're okay with her 'helping' Scylla, and vice-versa, so long as they don't mind you popping in. She smiles and gives you a wink, but her expression darkens after a moment of thought. Urta interrupts to mention, \"There's something else. If I can't find you or Scylla and I NEED to cum, I'll have to visit Edryn. She's probably the only thing that's kept me sane, and if you aren't around to help with my needs I'll visit her. "); if(urtaLove()) outputText("Just remember that YOU'RE the one I love, not her. "); else outputText("Me and her, we've been partners in the guard for a long time, but the sex is just mechanical, to sate us. You don't have to worry about her stealing me away. "); - outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); + outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } diff --git a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as index a93ffe8377..69fb7e1fbb 100644 --- a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as +++ b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as @@ -387,7 +387,7 @@ package classes.Scenes.Places.Prison break; case 4: default: - outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead. "); + outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead.\" "); if(player.hasVagina()) { outputText("Your gaping pussy has lubricated me well enough to comfortably fuck an entire harem of dry, virgin assholes."); diff --git a/classes/classes/Scenes/Places/TelAdre/Rubi.as b/classes/classes/Scenes/Places/TelAdre/Rubi.as index 412a8c441d..b8cee7efff 100644 --- a/classes/classes/Scenes/Places/TelAdre/Rubi.as +++ b/classes/classes/Scenes/Places/TelAdre/Rubi.as @@ -2079,7 +2079,7 @@ private function iceCreamDate():void { outputText("\n\nYour parfaits are not infinite, however, and once you've depleted your layered frozen treats it seems it's time to head back. The two of you clasp hands once more and head out of the shop, heading back to Rubi's place in silence, content to be in each other's presence."); - outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); + outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); //[Go to Sex menu] rubiSexMenu(); addButton(14,"Leave",camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/Pregnancy.as b/classes/classes/Scenes/Pregnancy.as index e2e8a8cea8..71347044c1 100644 --- a/classes/classes/Scenes/Pregnancy.as +++ b/classes/classes/Scenes/Pregnancy.as @@ -1798,7 +1798,7 @@ public class Pregnancy extends NPCAwareContent { if (flags[kFLAGS.MARBLE_BOYS] == 0) //has Marble had male kids before? { - EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me."); + EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me.\""); } //Add to marble-kids: flags[kFLAGS.MARBLE_KIDS]++; From b739e89b94a85cf3145f4096cd19ab62c633b320 Mon Sep 17 00:00:00 2001 From: Ormael Date: Sat, 24 Feb 2018 23:20:20 +0100 Subject: [PATCH 04/27] 0.8i2.01 - Kiha lvl-up fixes. 2 new melee weapons --- classes/classes/Items/WeaponLib.as | 4 +- classes/classes/Scenes/Combat/Combat.as | 25 ++++- .../classes/Scenes/Combat/PhysicalSpecials.as | 6 + classes/classes/Scenes/NPCs/DianaFollower.as | 2 +- classes/classes/Scenes/NPCs/KihaFollower.as | 105 +++++++++--------- classes/classes/Scenes/Soulforce.as | 14 ++- 6 files changed, 97 insertions(+), 59 deletions(-) diff --git a/classes/classes/Items/WeaponLib.as b/classes/classes/Items/WeaponLib.as index e6163eb764..069ca220a5 100644 --- a/classes/classes/Items/WeaponLib.as +++ b/classes/classes/Items/WeaponLib.as @@ -82,8 +82,9 @@ package classes.Items public const S_BLADE:Spellblade = new Spellblade(); public const S_GAUNT:Weapon = new Weapon("S.Gaunt","S.Gauntlet","spiked gauntlet","a spiked gauntlet","spiked punch",0,200,"This single metal gauntlet has the knuckles tipped with metal spikes. Though it lacks the damaging potential of other weapons, the sheer pain of its wounds has a chance of stunning your opponent."); public const SCARBLD:Weapon = new ScarredBlade(); - public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); + public const SCECOMM:Weapon = new Weapon("SceComm", "SceptreOfCom", "Sceptre of Command", "a Sceptre of Command", "smack", 4, 600, "This enchanted scepter empowers the abilities and control of summoners over their minions."); public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); + public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); public const SESPEAR:SeraphicSpear = new SeraphicSpear(); public const SNAKESW:Weapon = new Weapon("SnakeSw", "SnakeSword", "Snake Sword", "a Snake Sword", "whip-slash", 20, 800, "This unassuming double-edged sword is comprised of segmented pieces which, when swung, will lash out akin to a whip."); public const SPEAR :Spear = new Spear(); @@ -91,6 +92,7 @@ package classes.Items public const TCLAYMO:TopazClaymore = new TopazClaymore(); public const TRASAXE:Weapon = new Weapon("TraSAxe","Train.S.Axe", "training soul axe", "a training soul axe", "cleave", 1, 80, "This axe was specialy forged and enhanted to help novice soul cultivatiors to train their soulforce. Still if situation calls for it it could be used as a normal weapon."); public const TRIDENT:Trident = new Trident(); + public const TRSTSWO:Weapon = new Weapon("TrStSwo","TruestrikeSword", "Truestrike sword", "a Truestrike sword", "slash", 5, 400, "Lia will write desc of it...soon."); public const U_STAFF:UnicornStaff = new UnicornStaff(); public const URTAHLB:Weapon = new Weapon("UrtaHlb","UrtaHlb","halberd","a halberd","slash",30,1200,"Urta's halberd. How did you manage to get this?","Large"); public const VBLADE :Weapon = new Weapon("V.Blade","V.Blade", "V.Blade", "a V.Blade", "slash", 28, 2240, "A peculiar sword. The letter V is engraved into the blade perhaps its former owner name."); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index a8c6d8d56f..0973a9a568 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -829,6 +829,7 @@ public function elementalattacks(elementType:int, summonedElementals:int):void { if (player.hasPerk(PerkLib.ElementalConjurerResolve)) elementalamplification += 0.1 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerDedication)) elementalamplification += 0.2 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerSacrifice)) elementalamplification += 0.3 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; + if (player.weapon == weapons.SCECOMM) elementalamplification += 0.5; elementalDamage *= elementalamplification; //Determine if critical hit! var crit:Boolean = false; @@ -1253,6 +1254,11 @@ internal function wait():void { } } +public function meleeAccuracy():Number { + var accmod:Number = 200; + return accmod; +} + public function arrowsAccuracy():Number { var accmod:Number = 60; if (player.hasPerk(PerkLib.HistoryScout) || player.hasPerk(PerkLib.PastLifeScout)) accmod += 40; @@ -2340,7 +2346,6 @@ public function attack():void { return; } - var damage:Number = 0; //Determine if dodged! if ((player.hasStatusEffect(StatusEffects.Blind) && rand(2) == 0) || (monster.spe - player.spe > 0 && int(Math.random() * (((monster.spe - player.spe) / 4) + 80)) > 80)) { //Akbal dodges special education @@ -2379,6 +2384,17 @@ public function attack():void { enemyAI(); return; } + meleeDamageAcc(); +} + +public function meleeDamageAcc():void { + var accMelee:Number = 0; + accMelee += (meleeAccuracy() / 2); + if (flags[kFLAGS.ATTACKS_ACCURACY] > 0) accMelee -= flags[kFLAGS.ATTACKS_ACCURACY]; + if (player.weaponName == "Truestrike sword") accMelee = 100; +// fatigue(oneArrowTotalCost()); + if (rand(100) < accMelee) { + var damage:Number = 0; //------------ // DAMAGE //------------ @@ -2780,16 +2796,19 @@ public function attack():void { dynStats("lus", 25); } - outputText("\n"); checkAchievementDamage(damage); WrathWeaponsProc(); heroBaneProc(damage); + } + else { + + } if(monster.HP <= 0){doNext(endHpVictory); return;} if(monster.lust >= monster.maxLust()){doNext(endLustVictory); return;} if (flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] >= 2){ flags[kFLAGS.MULTIPLE_ATTACKS_STYLE]--; - // flags[kFLAGS.ATTACKS_ACCURACY] += 5; + // flags[kFLAGS.ATTACKS_ACCURACY] += 15; attack(); return; } diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index c22a005709..803f3d3905 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -1143,6 +1143,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1196,6 +1197,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1250,6 +1252,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1291,6 +1294,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1326,6 +1330,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1361,6 +1366,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 81d0c624e2..4087681632 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -459,7 +459,7 @@ public function wonOverDianaSpare():void { flags[kFLAGS.DIANA_DEFEATS_COUNTER]++; if (flags[kFLAGS.DIANA_DEFEATS_COUNTER] == 1 && flags[kFLAGS.DIANA_LVL_UP] == 0) { if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers2)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers2, 4, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 0, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers2, 0, 0, 0, 18); flags[kFLAGS.DIANA_DEFEATS_COUNTER] = 0; flags[kFLAGS.DIANA_LVL_UP] = 1; } diff --git a/classes/classes/Scenes/NPCs/KihaFollower.as b/classes/classes/Scenes/NPCs/KihaFollower.as index 7cc966cb47..eb7014af40 100644 --- a/classes/classes/Scenes/NPCs/KihaFollower.as +++ b/classes/classes/Scenes/NPCs/KihaFollower.as @@ -413,11 +413,8 @@ internal function winSparWithKiha():void { outputText("[pg]\"W-what are you doing!?\" she starts, pushing away. \"You - you dumbass!\" Face as red as her scales, she storms off to the other side of camp."); outputText("[pg]You sigh and head back towards your stuff."); kihaAffection(20); - /*if(flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - }*/ } + lvlUpCheckup(); cleanupAfterCombat(); } //Spar with Friendly Kiha - Kiha Wins (Z) @@ -1853,54 +1850,7 @@ internal function pcLosesDomFight():void { //[PC wins the fight] internal function pcWinsDomFight():void { clearOutput(); - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 2; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 3; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 4; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 5; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 6; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 7; - } - } + lvlUpCheckup(); outputText(images.showImage("kiha-dom-win")); spriteSelect(72); var x:Number = player.cockThatFits(67); @@ -2085,6 +2035,57 @@ private function guardMyCampKiha():void { addButton(0,"Next",warmLoverKihaIntro); } +private function lvlUpCheckup():void { + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 2; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 3; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 4; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 5; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 6; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 7; + } + } +} + private function giveKihaUndergarmentsPrompt():void { clearOutput(); outputText("You ask Kiha if she's willing to wear something to cover that nether regions of hers. She could use a bit of modesty after all. "); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 9633b41038..33be4096a5 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -693,8 +693,10 @@ public function FightNightmare():void { addButton(8, "NineTailWhip", AddNineTailWhip).hint("Add 1 Nine Tail Whip."); addButton(9, "Hodr's Bow", AddHodrsBow).hint("Add 1 Hodr's Bow."); // addButton(9, "L Ayo Arm", AddLightAyoArmor).hint("Add 1 Light Ayo Armor for testing purposes."); - addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); - addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); + // addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); + addButton(10, "TruestriekSword", AddTruestrikeSword).hint("Add 1 Truestrike Sword."); + // addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); + addButton(11, "ScepterComm", AddSceptreOfCommand).hint("Add 1 Sceptre of Command."); addButton(12, "CatONIneTWhip", AddCatONineTailWhip).hint("Add 1 Bastet Whip."); addButton(13, "InqTome", AddTheInquisitorsTome).hint("Add 1 Inquisitor's Tome."); addButton(14, "Back", SoulforceCheats); @@ -882,10 +884,18 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Seer's Hairpin!)\n\n"); inventory.takeItem(jewelries.SEERPIN, EquipmentMenu); } + public function AddTruestrikeSword():void { + outputText("\n\n(Gained 1 Truestrike Sword!)\n\n"); + inventory.takeItem(weapons.TRSTSWO, EquipmentMenu); + } public function AddTheDemonicScythe():void { outputText("\n\n(Gained 1 Demonic Scythe!)\n\n"); inventory.takeItem(weapons.DEMSCYT, EquipmentMenu); } + public function AddSceptreOfCommand():void { + outputText("\n\n(Gained 1 Sceptre of Command!)\n\n"); + inventory.takeItem(weapons.SCECOMM, EquipmentMenu); + } public function AddTheInquisitorsTome():void { outputText("\n\n(Gained 1 Inquisitor's Tome!)\n\n"); inventory.takeItem(weaponsrange.I_TOME_, EquipmentMenu); From b2e6a88d4c5e2e9201406f51db459d8a35e17ccb Mon Sep 17 00:00:00 2001 From: Ormael Date: Sun, 25 Feb 2018 20:45:37 +0100 Subject: [PATCH 05/27] 0.8i2.02 - werewolf and luna related fixed/small additions, Soul Arean Gaunlet 2 added, buffing a bit BW Crinos Shape --- classes/classes/PlayerInfo.as | 3 +++ classes/classes/Scenes/Camp.as | 17 ++++++++++++- classes/classes/Scenes/Changelog.as | 12 +++++++++- .../classes/Scenes/Combat/MagicSpecials.as | 24 +++++++++---------- classes/classes/Scenes/NPCs/LunaFollower.as | 2 +- classes/classes/Scenes/Places/HeXinDao.as | 23 +++++++++++------- classes/classes/Scenes/Soulforce.as | 10 +++++--- 7 files changed, 65 insertions(+), 26 deletions(-) diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index d0d3cd8619..020533d369 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -557,6 +557,9 @@ public class PlayerInfo extends BaseContent { if (flags[kFLAGS.LUNA_FOLLOWER] > 3) { interpersonStats += "Luna Affection: " + Math.round(flags[kFLAGS.LUNA_AFFECTION]) + "%\n"; interpersonStats += "Luna Jealousy: " + Math.round(flags[kFLAGS.LUNA_JEALOUSY]) + "%\n"; + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; + else interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; + interpersonStats += "\n"; } if (flags[kFLAGS.OWCAS_ATTITUDE] > 0) interpersonStats += "Owca's Attitude: " + flags[kFLAGS.OWCAS_ATTITUDE] + "\n"; diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index d2c7ec8dbb..f68107c7bf 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -3461,8 +3461,9 @@ private function promptSaveUpdate():void { } /* if (flags[kFLAGS.MOD_SAVE_VERSION] == 20) { flags[kFLAGS.MOD_SAVE_VERSION] = 21; + if (player.hasPerk(PerkLib.Lycanthropy)) player.skin.coverage = Skin.COVERAGE_MEDIUM; clearOutput(); - outputText("Text."); + outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); doNext(doCamp); return; } @@ -3473,6 +3474,20 @@ private function promptSaveUpdate():void { doNext(doCamp); return; } + if (flags[kFLAGS.MOD_SAVE_VERSION] == 22) { + flags[kFLAGS.MOD_SAVE_VERSION] = 23; + clearOutput(); + outputText("Text."); + doNext(doCamp); + return; + } + if (flags[kFLAGS.MOD_SAVE_VERSION] == 23) { + flags[kFLAGS.MOD_SAVE_VERSION] = 24; + clearOutput(); + outputText("Text."); + doNext(doCamp); + return; + } */ doCamp(); } diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 53fb27dd3b..24a169e12b 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -93,8 +93,14 @@ package classes.Scenes outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n"); outputText("Version 0.8i2:\n\n"); outputText("-\n"); + outputText("-\n"); + outputText("-\n"); + outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); + outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); + outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); + outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/30/40/50%.\n"); outputText("-Fly-Whisk price lowered by half.\n"); - outputText("-Fixed bugs: \n\n\n\n\n");/*ostatni punkt changelogu + outputText("-Fixed bugs: Werewolf full fur instead of partial\n\n\n\n\n");/*ostatni punkt changelogu //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); @@ -104,6 +110,7 @@ package classes.Scenes outputText("-Added in current version race effects to Metamorph perk: \n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); outputText("\n"); outputText("\n"); outputText("\n"); @@ -114,6 +121,7 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); @@ -157,6 +165,8 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); + outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index 029b89f49f..041f3c864e 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -1713,26 +1713,26 @@ public class MagicSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.ImprovedCrinosShape)) { if (player.hasPerk(PerkLib.GreaterCrinosShape)) { if (player.hasPerk(PerkLib.MasterCrinosShape)) { - temp1 += player.str * 0.2; - temp2 += player.tou * 0.2; - temp3 += player.spe * 0.2; + temp1 += player.str * 0.5; + temp2 += player.tou * 0.5; + temp3 += player.spe * 0.5; } else { - temp1 += player.str * 0.15; - temp2 += player.tou * 0.15; - temp3 += player.spe * 0.15; + temp1 += player.str * 0.4; + temp2 += player.tou * 0.4; + temp3 += player.spe * 0.4; } } else { - temp1 += player.str * 0.1; - temp2 += player.tou * 0.1; - temp3 += player.spe * 0.1; + temp1 += player.str * 0.3; + temp2 += player.tou * 0.3; + temp3 += player.spe * 0.3; } } else { - temp1 += player.str * 0.05; - temp2 += player.tou * 0.05; - temp3 += player.spe * 0.05; + temp1 += player.str * 0.2; + temp2 += player.tou * 0.2; + temp3 += player.spe * 0.2; } temp1 = Math.round(temp1); temp2 = Math.round(temp2); diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index aa9c1cab6b..3b79833aba 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -444,7 +444,7 @@ package classes.Scenes.NPCs player.wings.type = Wings.NONE; player.antennae.type = Antennae.NONE; player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, Skin.COVERAGE_MEDIUM); + player.skin.growCoat(Skin.FUR, null, Skin.COVERAGE_MEDIUM); if (player.hasCock() && player.wolfCocks() < 1) { var selectedCockValue:int = -1; for (var indexI:int = 0; indexI < player.cocks.length; indexI++) diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index 57cda75a63..c7a396bdee 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -484,7 +484,7 @@ public function soularena():void { outputText("Picking the one in the middle prepared for challanges you enter there and looking around checking who if there is currently anyone up for a challange."); menu(); addButton(0, "Gaunlet 1", gaunletchallange1fight1).hint("Fight 3 diff enemies one after another."); - //if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); + if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); //addButton(2, "Gaunlet 3", gaunletchallange3).hint("Fight 5 diff enemies one after another."); //addButton(3, "Gaunlet 4", gaunletchallange4).hint("Fight 6 diff enemies one after another."); //addButton(4, "Gaunlet 5", gaunletchallange5).hint("Fight 7 diff enemies one after another."); @@ -566,27 +566,34 @@ public function soularena():void { } public function gaunletchallange2fight3():void { clearOutput(); - outputText("Placeholder.\n\n"); - outputText("Placeholder.\n\n"); + outputText("The mutt fall defeated to the floor as the crowd scream your name. The announcer announce the next contestant.\n\n"); + outputText("\"The next opponent is a fighter known and loved by the public. You have heard her name told in shallow whispers for the next opponent is an expert of the terrible art known as BDSM. Yes you have all been waiting for her so cheer up for Malady the drider!!!\"\n\n"); + outputText("A drider in bondage suit comes out of the gate and eyes you amused.\n\n"); + outputText("\"You are my opponent uh? Doesn’t look like much. Little pet, by the time I’m done binding you, you will seldom call me mistress!\"\n\n"); startCombat(new CorruptedDrider()); } public function gaunletchallange2fight4():void { clearOutput(); - outputText("Placeholder.\n\n"); + outputText("As the drider falls defeated the crowd cheer to your victory. That said the battle is far from over yet. A large amount of shadows mass behind the opposite gate and already you can guess what's coming up for you.\n\n"); + outputText("\"The final contestant is both a new opponent and a test! The town golemancer has been working extra shifts on these thing she calls her babies!! Using the traditional gargoyle model but deprived of soul so for the purpose of mass production these living weapons will mercilessly beat the hell out of the contestant. Who do you think will win the living or the artificial creation? LEEEEETS FIND OUT!!!!!!\"\n\n"); + outputText("A full squad of stone gargoyle pour out of the gate their mace like tail trailing in the sands. Their claws are sharp and their soulless gaze tells you it will end poorly should you lose.\n\n"); startCombat(new BossGolems()); } public function gaunletchallange2postfight():void { clearOutput(); - outputText("Placeholder.\n\n"); + outputText("The last gargoyle crumble to rubble and you hold its head up toward the public in victory.\n\n"); + outputText("\"The challenger defeated all of his opponent what a miracle! Challenger you may now exit the arena and claim your prize, well done!\"\n\n"); + outputText("You make your way toward the exit and to your surprise meet face to face with the town golemancer. She grudgingly handle you your reward.\n\n"); + outputText("\"I’m supposed to reward you "); if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] >= 2) { - outputText("\"Good show, champion. As a reward for your performance, please accept these 20 spirit stones. Please do come back again and maybe next time you could even try the harder challenge.\"\n\n"); + outputText("a full chest of soulstone. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); flags[kFLAGS.SPIRIT_STONES] += 20; cleanupAfterCombat(); } else { - outputText("Placeholder.\n\n"); + outputText("with this scepter. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] = 2; - inventory.takeItem(weaponsrange.BOWGUID, cleanupAfterCombat); + inventory.takeItem(weapons.SCECOMM, cleanupAfterCombat); } } public function restaurantShiraOfTheEast():void { diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 33be4096a5..5bcbe976db 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -208,10 +208,10 @@ use namespace CoC; addButton(7, "RevertCabin", RevertCabinProgress).hint("Revert cabin flag back to value 2 (for bug fix test)"); addButton(8, "Gargoyle", GargoyleMenu).hint("To Be or Not To Be Gargoyle that is a question."); addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); - addButton(10, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); - addButton(11, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); - //addButton(13, "13", ); + if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_MEDIUM) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); addButton(14, "Back", accessSoulforceMenu); } public function celessIntroForced():void { @@ -223,6 +223,10 @@ public function replacingBarbsWithsSowrds():void { player.createPerk(PerkLib.JobSwordsman, 0, 0, 0, 0); doNext(SoulforceCheats); } +public function fixingWerewolfFur():void { + player.skin.coverage = Skin.COVERAGE_MEDIUM; + doNext(SoulforceCheats); +} public function LvLUPDiana():void { outputText("\n\nDiana get stronger! (cheat stop working when she reach max possible lvl (atm it's lvl 27))"); if (flags[kFLAGS.DIANA_LVL_UP] < 8) flags[kFLAGS.DIANA_LVL_UP]++; From fdb9f1d7cea87b7e13e622eaae22ed69334465c4 Mon Sep 17 00:00:00 2001 From: Ormael Date: Mon, 26 Feb 2018 18:12:09 +0100 Subject: [PATCH 06/27] 0.8i2.03 - Luna fixes, Metamorph perk small change --- classes/classes/Character.as | 1 + classes/classes/PlayerAppearance.as | 2 +- classes/classes/PlayerEvents.as | 4 ++-- classes/classes/Scenes/Camp.as | 8 ++++++-- classes/classes/Scenes/Changelog.as | 8 +++++++- classes/classes/Scenes/Metamorph.as | 3 ++- classes/classes/Scenes/NPCs/Luna.as | 6 +++--- classes/classes/Scenes/NPCs/LunaFollower.as | 6 ++++-- classes/classes/Scenes/Soulforce.as | 5 +++-- 9 files changed, 29 insertions(+), 14 deletions(-) diff --git a/classes/classes/Character.as b/classes/classes/Character.as index d20f52be7f..706a77b9a9 100644 --- a/classes/classes/Character.as +++ b/classes/classes/Character.as @@ -672,6 +672,7 @@ import classes.Items.JewelryLib; if (game.player.alicornScore() >= 6) max += (150 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (game.player.unicornScore() >= 5) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (hasPerk(PerkLib.DemonicLethicite)) max += Math.round(lib); + if (hasPerk(PerkLib.Metamorph)) max += 50; if (flags[kFLAGS.SOUL_CULTIVATION] >= 2) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 3) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 4) max += 30; diff --git a/classes/classes/PlayerAppearance.as b/classes/classes/PlayerAppearance.as index bcd60c3d2e..a1b6e131ef 100644 --- a/classes/classes/PlayerAppearance.as +++ b/classes/classes/PlayerAppearance.as @@ -1831,7 +1831,7 @@ public class PlayerAppearance extends BaseContent { else if(skin.hasLightningShapedTattoo()) outputText(" covered with a few glowing lightning tattoos"); outputText(". Your mouth is somewhat human save for your wolf-like canines."); } else if (player.hasPartialCoat(Skin.FUR)) { - outputText(" Your face looks human save for your wolf-like canines. You've got [skin coat], hiding your [skin noadj] underneath your furry visage."); + outputText(" Your face looks human save for your wolf-like canines. On your cheek you have [skin coat]."); } else { outputText(" Your face looks human save for your wolf-like canines, but overlaid with glittering [skin coat]."); } diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index cf7d0628e7..1d937d7079 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -141,8 +141,8 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { if (flags[kFLAGS.LUNA_JEALOUSY] < 200) flags[kFLAGS.LUNA_JEALOUSY]++; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 10) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 9) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; + if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); } Begin("PlayerEvents","hourlyCheckRacialPerks"); needNext = hourlyCheckRacialPerks(); diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index f68107c7bf..fd5fb2d1a1 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -860,7 +860,8 @@ CoC.instance.saves.saveGame(player.slotName); if (slavesCount() > 0) addButton(7, "Slaves", campSlavesMenu).hint("Check up on any slaves you have received and interact with them."); addButton(8, "Camp Actions", campActions).hint("Interact with the camp surroundings and also read your codex or questlog."); if (flags[kFLAGS.CAMP_CABIN_PROGRESS] >= 10 || flags[kFLAGS.CAMP_BUILT_CABIN] >= 1) addButton(9, "Enter Cabin", cabinProgress.initiateCabin).hint("Enter your cabin."); //Enter cabin for furnish. - if (player.findPerk(PerkLib.JobSoulCultivator) >= 0 || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); + if (player.hasPerk(PerkLib.JobSoulCultivator) || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); + else if (!player.hasPerk(PerkLib.JobSoulCultivator) && player.hasPerk(PerkLib.Metamorph)) addButton(10, "Metamorf", SceneLib.metamorph.accessMetamorphMenu).hint("Use your soulforce to mold freely your body."); var canFap:Boolean = !player.hasStatusEffect(StatusEffects.Dysfunction) && (flags[kFLAGS.UNABLE_TO_MASTURBATE_BECAUSE_CENTAUR] == 0 && !player.isTaur()); if (player.lust >= 30) { addButton(11, "Masturbate", SceneLib.masturbation.masturbateMenu); @@ -3461,7 +3462,10 @@ private function promptSaveUpdate():void { } /* if (flags[kFLAGS.MOD_SAVE_VERSION] == 20) { flags[kFLAGS.MOD_SAVE_VERSION] = 21; - if (player.hasPerk(PerkLib.Lycanthropy)) player.skin.coverage = Skin.COVERAGE_MEDIUM; + if (player.hasPerk(PerkLib.Lycanthropy)) { + player.skin.coverage = Skin.COVERAGE_LOW; + player.coatColor = player.hairColor; + } clearOutput(); outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); doNext(doCamp); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 24a169e12b..9209734678 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -95,12 +95,14 @@ package classes.Scenes outputText("-\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/30/40/50%.\n"); + outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); outputText("-Fly-Whisk price lowered by half.\n"); - outputText("-Fixed bugs: Werewolf full fur instead of partial\n\n\n\n\n");/*ostatni punkt changelogu + outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed\n\n\n\n\n");/*ostatni punkt changelogu //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); @@ -111,6 +113,8 @@ package classes.Scenes outputText("-\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); + outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); @@ -167,6 +171,8 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); + outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Metamorph.as b/classes/classes/Scenes/Metamorph.as index 59161ed796..729017e4fc 100644 --- a/classes/classes/Scenes/Metamorph.as +++ b/classes/classes/Scenes/Metamorph.as @@ -40,7 +40,8 @@ public function accessMetamorphMenu():void { addButton(11, "Page 2", accessPage2MetamorphMenu); // addButton(12, "Page 3", accessPage3MetamorphMenu); // addButton(13, "Page 4", accessPage4MetamorphMenu); - addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); + if (player.hasPerk(PerkLib.JobSoulCultivator)) addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); + else addButton(14, "Back", playerMenu); } private function accessPage1MetamorphMenu():void { diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index 7885ebba14..d294be04bf 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -80,19 +80,19 @@ package classes.Scenes.NPCs this.skin.growFur({color:"ashen"}); this.hairColor = "ashen"; this.hairLength = 8; - initStrTouSpeInte(40, 60, 40, 50); + initStrTouSpeInte(40, 80, 40, 50); initWisLibSensCor(50, 80, 40, 75); this.weaponName = "paws"; this.weaponVerb="paw-slash"; this.weaponAttack = 37; this.armorName = "fur"; - this.armorDef = 2000; + this.armorDef = 200; this.bonusHP = 800; this.bonusLust = 10; this.lust = 10; this.lustVuln = 0; this.temperment = TEMPERMENT_LUSTY_GRAPPLES; - this.level = 10; + this.level = 9; this.gems = 5 + rand(5); this.drop = NO_DROP; this.createPerk(PerkLib.MonsterRegeneration, 5, 0, 0, 0); diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index 3b79833aba..afcc6099e3 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -109,6 +109,7 @@ package classes.Scenes.NPCs else if (model.time.hours <= 18) outputText("afternoon"); else outputText("evening"); outputText(" " + player.mf("Master","Mistress") + ". How can I be of assistance, if any? Just tell me what you may need.\"\n\n"); + outputText("Luna Follower flag: " + flags[kFLAGS.LUNA_FOLLOWER] + "\n\n"); menu(); addButton(0, "Appearance", LunaAppearance); addButton(1, "Talk", talkMenuLuna); @@ -369,6 +370,8 @@ package classes.Scenes.NPCs outputText("Well of course. Had she made her needs clear in the first place you would have helped her with them. There was no need for her to hide her desires. That aside, you already thought of her as more than just a maid. You just didn’t know how to tell her. You don’t care if she thinks she is a monster. From your point of view, even in this form she remains cute. To her utter surprise you"); if (!player.isNaked()) outputText(" get rid of your own clothes and"); outputText(" display your naked body, telling her she will get exactly what she wants.\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 11; + if (flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10) flags[kFLAGS.LUNA_FOLLOWER] = 12; flags[kFLAGS.LUNA_MOONING] = 2; doNext(sexMenuVaginal); } @@ -444,7 +447,7 @@ package classes.Scenes.NPCs player.wings.type = Wings.NONE; player.antennae.type = Antennae.NONE; player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, null, Skin.COVERAGE_MEDIUM); + player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); if (player.hasCock() && player.wolfCocks() < 1) { var selectedCockValue:int = -1; for (var indexI:int = 0; indexI < player.cocks.length; indexI++) @@ -537,7 +540,6 @@ package classes.Scenes.NPCs lunaJealousy(-50); lunaAffection(2); player.orgasm(); - if (flags[kFLAGS.LUNA_FOLLOWER] < 7) flags[kFLAGS.LUNA_FOLLOWER] = 11; if (flags[kFLAGS.LUNA_MOONING] == 2) { flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 5bcbe976db..284f03c90a 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -211,7 +211,7 @@ use namespace CoC; addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); - if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_MEDIUM) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); + if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); addButton(14, "Back", accessSoulforceMenu); } public function celessIntroForced():void { @@ -224,7 +224,8 @@ public function replacingBarbsWithsSowrds():void { doNext(SoulforceCheats); } public function fixingWerewolfFur():void { - player.skin.coverage = Skin.COVERAGE_MEDIUM; + player.skin.coverage = Skin.COVERAGE_LOW; + player.coatColor = player.hairColor; doNext(SoulforceCheats); } public function LvLUPDiana():void { From aec85d7a2b1cb31d7227f3fc7414ff741ec8085d Mon Sep 17 00:00:00 2001 From: Ormael Date: Thu, 1 Mar 2018 01:07:25 +0100 Subject: [PATCH 07/27] 0.8i2.04 - Bite me option, full ww bonuses fix, new items added to inn and moga hen menu --- classes/classes/Creature.as | 48 +++++++++----- classes/classes/Player.as | 2 +- classes/classes/PlayerEvents.as | 24 ++++--- classes/classes/Scenes/NPCs/LunaFollower.as | 62 +++++++++++++++++-- classes/classes/Scenes/Places/HeXinDao.as | 1 + .../Places/HeXinDao/JourneyToTheEast.as | 2 + 6 files changed, 112 insertions(+), 27 deletions(-) diff --git a/classes/classes/Creature.as b/classes/classes/Creature.as index a4407059f3..a847657fd4 100644 --- a/classes/classes/Creature.as +++ b/classes/classes/Creature.as @@ -2965,34 +2965,38 @@ public class Creature extends Utils public function canOvipositSpider():Boolean { return eggs() >= 10 && findPerk(PerkLib.SpiderOvipositor) >= 0 && isDrider() && tail.type == Tail.SPIDER_ADBOMEN; - } public function canOvipositBee():Boolean { return eggs() >= 10 && findPerk(PerkLib.BeeOvipositor) >= 0 && tail.type == Tail.BEE_ABDOMEN; + } + public function canOvipositMantis():Boolean + { + return eggs() >= 10 && findPerk(PerkLib.MantisOvipositor) >= 0 && tail.type == Tail.MANTIS_ABDOMEN; } public function canOviposit():Boolean { - return canOvipositSpider() || canOvipositBee(); - + return canOvipositSpider() || canOvipositBee() || canOvipositMantis(); } public function eggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv1(PerkLib.SpiderOvipositor); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) return perkv1(PerkLib.BeeOvipositor); + else + return perkv1(PerkLib.MantisOvipositor); } public function addEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3001,18 +3005,24 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else { + else if (findPerk(PerkLib.BeeOvipositor) >= 0) { addPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } + else { + addPerkValue(PerkLib.MantisOvipositor, 1, arg); + if (eggs() > 50) + setPerkValue(PerkLib.MantisOvipositor, 1, 50); + return perkv1(PerkLib.MantisOvipositor); + } } } public function dumpEggs():void { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return; setEggs(0); //Sets fertile eggs = regular eggs (which are 0) @@ -3021,7 +3031,7 @@ public class Creature extends Utils public function setEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3030,33 +3040,43 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else { + else if (findPerk(PerkLib.BeeOvipositor) >= 0) { setPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } + else { + setPerkValue(PerkLib.MantisOvipositor, 1, arg); + if (eggs() > 50) + setPerkValue(PerkLib.MantisOvipositor, 1, 50); + return perkv1(PerkLib.MantisOvipositor); + } } } public function fertilizedEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv2(PerkLib.SpiderOvipositor); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) return perkv2(PerkLib.BeeOvipositor); + else + return perkv2(PerkLib.MantisOvipositor); } public function fertilizeEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) setPerkValue(PerkLib.SpiderOvipositor, 2, eggs()); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); + else + setPerkValue(PerkLib.MantisOvipositor, 2, eggs()); return fertilizedEggs(); } diff --git a/classes/classes/Player.as b/classes/classes/Player.as index 5095da238e..5db0b3d893 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -5281,7 +5281,7 @@ use namespace CoC; } }//+15(60)((70))(((140))) / 10 - 20(50 - 60)((70 - 80))(((130 - 140))) if (werewolfScore() >= 6) { - if (wolfScore() >= 12) { + if (werewolfScore() >= 12) { maxStr += (100 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (60 * newGamePlusMod); diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index 1d937d7079..1d0be1814e 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -590,40 +590,48 @@ if (CoC.instance.model.time.hours > 23) { //Once per day if (player.hasPerk(PerkLib.Lycanthropy)) { if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nYou can’t help but notice the moon is almost full as it rises up. It seems transfixing like it is calling to you."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + needNext = true; } if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nWhen the almost-full moon appears it causes your heart to race with excitement. You hearing seems better than ever. Every breath brings a rush of smells through your nose that seem much more pronounced than they should."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + needNext = true; } if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nYou gaze at the moon and it seems to gaze back into you. Something is coming and it won’t be long now. You feel like you are crawling in your skin. It feels like tear out of your body and be born anew."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time."); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time.\n"); dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + needNext = true; } if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { - outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + "."); + outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + ".\n"); dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); if (player.hasCock() || (player.gender == 3 && rand(2) == 0)) player.goIntoRut(false); else if (player.hasVagina()) player.goIntoHeat(false); + needNext = true; } if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); + outputText("\nThe moon is waning, you are feeling less powerful.\n"); dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + needNext = true; } if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); + outputText("\nThe moon is waning, you are feeling less powerful.\n"); dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + needNext = true; } if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); + outputText("\nThe moon is waning, you are feeling less powerful.\n"); dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + needNext = true; } if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 4) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nIt's a new moon tonight, you feel somewhat weak."); + outputText("\nIt's a new moon tonight, you feel somewhat weak.\n"); dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + needNext = true; } } } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index afcc6099e3..8881a3f8be 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -157,6 +157,7 @@ package classes.Scenes.NPCs addButton(3, "Camp", talkMenuLunaCampThoughts); if (flags[kFLAGS.LUNA_FOLLOWER] > 6) addButton(4, "Lycanthropy", talkMenuLunaLycanthropy); else addButtonDisabled(4, "???", "You need to know her better for this."); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10 && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); addButton(14, "Back", mainLunaMenu); } public function talkMenuLunaHer():void { @@ -218,6 +219,57 @@ package classes.Scenes.NPCs lunaAffection(2); doNext(camp.returnToCampUseOneHour); } + public function talkMenuBiteMe():void { + clearOutput(); + outputText("It occurs to you that you could gain the same kind of powers as Luna if you asked her. That said, is that what you truly want?\n\n"); + menu(); + addButton(0, "Yes", talkMenuBiteMeYes); + addButton(1, "No", talkMenuLuna); + } + public function talkMenuBiteMeYes():void { + outputText("You ask Luna the one thing she likely never expected, would she mind biting you? Luna almost panics the moment you request it, though she also blushes.\n\n"); + outputText("\"" + player.mf("Master","Mistress") + " I...This is a very important choice you are making here, did you truly think it through? I mean once you are cursed there's no removing it, you will truly be just like me.\"\n\n"); + outputText("You don’t mind it, truthfully if this can tie the both of you together better, you will do it all the more. Luna nods and undresses as she changes shape. You hold your arm before her and she lose all form of restraint biting you with just the required strength to draw blood. At first it hurts like crazy but then the pain recedes, replaced with spreading pleasure as the wounds begin to throb. "); + outputText("Your" + (player.hasCock() ? " [cock] goes fully erect" : "") + "" + (player.gender == 3 ? " and your" : "") + "" + (player.hasVagina() ? " pussy starts moistening" : "") + " from this weird feeling, something's not right.\n\n"); + outputText("" + (player.humanScore() < 30 ? "Your body starts changing, and to your surprise, its features warp back to their former human features. You begin to think she may have purged you of the transformations that afflicted you, but that's not exactly it. " : "") + "Heat begins to spread from your wound and you start panting, trying to vent out the pleasure and the hot feeling in your body as something fundamental about you changes.\n\n"); + outputText("Fur begins to grow on various point of your body, namely your arms and legs. Your nails sharpen and curve, turning into a full set of claws as your hands and feet reshape into 5 digit paws. You groan in pleasure, revealing your forming canines as your spine extends into a furry tail while your ears migrate to the top of your head, covering in fur and changing into triangular points like those of a wolf. You pant in pleasure at the change, revealing a moist dog like tongue"); + if (player.hasCock()) outputText(" as you feel a tightness near the base of your cock where your skin seems to be bunching up. A canine-looking sheath begins forming around your cock’s base, tightening and pulling your penis inside its depths. A hot feeling envelops your member as it surges out and starts throbbing, the crown now a point. The sensations are too much for you. You throw back your head and howl as the transformation completes, your pointed shaft erupting with intense force"); + outputText(".\n\n"); + player.lowerBody = LowerBody.WOLF; + if (player.legCount != 2) player.legCount = 2; + player.tailType = Tail.WOLF; + if (player.tailCount != 1) player.tailCount = 1; + player.rearBody.type = RearBody.WOLF_COLLAR; + player.arms.type = Arms.WOLF; + player.faceType = Face.WOLF_FANGS; + player.ears.type = Ears.WOLF; + player.eyes.type = Eyes.FERAL; + player.tongue.type = Tongue.DOG; + player.wings.type = Wings.NONE; + player.antennae.type = Antennae.NONE; + player.horns.type = Horns.NONE; + player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); + if (player.hasCock() && player.wolfCocks() < 1) { + var selectedCockValue:int = -1; + for (var indexI:int = 0; indexI < player.cocks.length; indexI++) + { + if (player.cocks[indexI].cockType != CockTypesEnum.WOLF) + { + selectedCockValue = indexI; + break; + } + } + if (selectedCockValue != -1) { + player.cocks[selectedCockValue].cockType = CockTypesEnum.WOLF; + player.cocks[selectedCockValue].knotMultiplier = 1.1; + player.cocks[selectedCockValue].thickenCock(2); + } + } + // player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); + player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); + doNext(sexMenuDominateHer); + } public function sparLuna():void { clearOutput(); @@ -230,8 +282,10 @@ package classes.Scenes.NPCs } public function sparLunaWon():void { clearOutput(); - outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); - outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); + outputText("Luna sit down like a good well behaved dog to admit defeat.\n\n"); + outputText("\"I yield " + player.mf("Master", "Mistress") + ". You win this one. I hope this warm up was worth your time.\"\n\n"); + outputText("You thank Luna for helping you with your training and give her freedom to resume duty which she gladly do.\n\n"); + cleanupAfterCombat(); doNext(camp.returnToCampUseOneHour); } public function sparLunaLost():void { @@ -488,8 +542,8 @@ package classes.Scenes.NPCs else addButtonDisabled(6, "???", "Req. Ayane in camp and 100 affection."); } } - if (player.cor < 33) addButton(10, "Headpat", sexMenuHeadpat); - else addButtonDisabled(10, "Headpat", "You're too corrupted for that!"); + if (player.cor >= 30) addButton(10, "Headpat", sexMenuHeadpat); + else addButtonDisabled(10, "Headpat", "You're too pure for that!"); addButton(14, "Back", mainLunaMenu); } public function sexMenuHeadpat():void { diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index c7a396bdee..ff832628bc 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -232,6 +232,7 @@ public class HeXinDao extends BaseContent addButton(1, "DryTent", buyItem,consumables.DRYTENT,sayLine(consumables.DRYTENT,"anemone"),onBuyString).hint("Buy a shriveled tentacle."); addButton(2, "EctoPls", buyItem,consumables.ECTOPLS,sayLine(consumables.ECTOPLS,"ghost"),onBuyString).hint("Buy a bottle of ectoplasm."); addButton(3, "TrapOil", buyItem,consumables.TRAPOIL,sayLine(consumables.TRAPOIL,"sand trap"),onBuyString).hint("Buy a vial of trap oil."); + addButton(4, "Icicle", buyItem,consumables.ICICLE_,sayLine(consumables.ICICLE_,"ice shard"),onBuyString).hint("Buy an icicle."); addButton(14, "Back", mogahenmerchant); statScreenRefresh(); } diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index d6c72c2252..2dec1067b7 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -39,6 +39,8 @@ package classes.Scenes.Places.HeXinDao addButton(2, "NoceLiq", buyDrink, consumables.NOCELIQ); addButton(3, "OniSake", buyDrink, consumables.ONISAKE); addButton(4, "SalamFW", buyDrink, consumables.SALAMFW); + addButton(12, "BimboL", buyDrink, consumables.BIMBOLQ); + addButton(13, "BroBrew", buyDrink, consumables.BROBREW); addButton(14, "Back", notThirsty); } From 1e2dc971fd3a1b719af803cfaea3d6cfb5e334a6 Mon Sep 17 00:00:00 2001 From: Ormael Date: Fri, 2 Mar 2018 00:34:21 +0100 Subject: [PATCH 08/27] 0.8i2.05 - Chi Chi drunk sex, Feral Whirlwind base dmg increased --- classes/classes/Scenes/Changelog.as | 8 +-- .../classes/Scenes/Combat/CombatSoulskills.as | 6 ++ .../classes/Scenes/Combat/PhysicalSpecials.as | 6 +- .../Places/HeXinDao/JourneyToTheEast.as | 72 +++++++++++++++++-- classes/classes/Scenes/Places/TelAdre.as | 2 +- 5 files changed, 82 insertions(+), 12 deletions(-) diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 9209734678..582a373dd0 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -96,12 +96,15 @@ package classes.Scenes outputText("-\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); + outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); + outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/30/40/50%.\n"); outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); - outputText("-Fly-Whisk price lowered by half.\n"); + outputText("-Feral Whirlwind base dmg increased by 50%. Fly-Whisk price lowered by half.\n"); outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed\n\n\n\n\n");/*ostatni punkt changelogu //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); @@ -113,8 +116,6 @@ package classes.Scenes outputText("-\n"); outputText("-\n"); outputText("-\n"); - outputText("-\n"); - outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); @@ -125,7 +126,6 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); diff --git a/classes/classes/Scenes/Combat/CombatSoulskills.as b/classes/classes/Scenes/Combat/CombatSoulskills.as index 7f0d942710..4ebe47fba0 100644 --- a/classes/classes/Scenes/Combat/CombatSoulskills.as +++ b/classes/classes/Scenes/Combat/CombatSoulskills.as @@ -25,6 +25,8 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Ice Fist", IceFist).hint("A chilling strike that can freeze an opponent solid, leaving it vulnerable to shattering soul art and hindering its movement. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.findPerk(PerkLib.FireAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to fire."); + } else if (!player.isFistOrFistWeapon()) { + bd.disable("Your current used weapon not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } @@ -33,6 +35,8 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Fire Punch", FirePunch).hint("Ignite your opponents dealing fire damage and setting them ablaze. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); + } else if (!player.isFistOrFistWeapon()) { + bd.disable("Your current used weapon not allow to use this technique."); } else if (player.findPerk(PerkLib.ColdAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to cold."); } @@ -57,6 +61,8 @@ public class CombatSoulskills extends BaseCombatContent { buttons.add("Punishing Kick", PunishingKick).hint("A vicious kick that can daze an opponent, reducing its damage for a while. \n\nWould go into cooldown after use for: 10 rounds \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.hasStatusEffect(StatusEffects.CooldownPunishingKick)) { bd.disable("You need more time before you can use Punishing Kick again."); + } else if (!player.isBiped() || !player.isTaur()) { + bd.disable("Your legs not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 803f3d3905..2672220e78 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -830,9 +830,9 @@ public class PhysicalSpecials extends BaseCombatContent { } fatigue(50, USEFATG_PHYSICAL); var damage:Number = 0; - damage += (scalingBonusStrength() * 0.2) + player.str + unarmedAttack(); - if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.1) + ((player.str + unarmedAttack()) * 0.5); - if (damage < 10) damage = 10; + damage += (scalingBonusStrength() * 0.3) + ((player.str + unarmedAttack()) * 1.5); + if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.15) + ((player.str + unarmedAttack()) * 0.75); + if (damage < 15) damage = 15; //weapon bonus if (player.weaponAttack < 101) damage *= (1 + (player.weaponAttack * 0.02)); else if (player.weaponAttack >= 101 && player.weaponAttack < 201) damage *= (2 + ((player.weaponAttack - 100) * 0.015)); diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index 2dec1067b7..001ca2fd70 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -7,6 +7,7 @@ package classes.Scenes.Places.HeXinDao import classes.*; import classes.GlobalFlags.kFLAGS; import classes.Scenes.SceneLib; + import classes.BodyParts.Tail; public class JourneyToTheEast extends HeXinDaoAbstractContent { @@ -19,6 +20,10 @@ package classes.Scenes.Places.HeXinDao outputText("You enter the town local Inn ‘Journey to the East’ and look around. "); } outputText("You can see many people enjoying a meal or drink in the dining hall, a barman standing by ready to serve drinks."); + if (model.time.hours >= 18 && rand(4) == 0) { + ChiChiDrunkSex(); + return; + } menu(); addButton(0, "Drink", drinkAlcohol); //addButton(4, "", );mission giving npc @@ -43,13 +48,13 @@ package classes.Scenes.Places.HeXinDao addButton(13, "BroBrew", buyDrink, consumables.BROBREW); addButton(14, "Back", notThirsty); } - + //drink list (to be expanded) fire mouse TF, some generic nonTF beers private function notThirsty():void { clearOutput(); outputText("In the end you realise you are not thirsty after all and wave a goodbye before leaving.\n\n"); doNext(curry(enteringInn,false)); } - + private function buyDrink(drink:ItemType):void{ var cost:int = drink.value * 3; if(player.gems < cost){ @@ -62,7 +67,66 @@ package classes.Scenes.Places.HeXinDao outputText("\n\nThe barman hands over the drink you ordered."); inventory.takeItem(drink, drinkAlcohol); } - //drink list (to be expanded) - //MANUP_B, GOB_ALE, NOCELIQ, ONISAKE, SALAMFW, fire mouse TF, some generic nonTF beers + + public function ChiChiDrunkSex():void { + clearOutput(); + outputText("As you enter the bar you hear a feminine laughter swiftly spotting what seems to be "); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] >= 20) outputText("Chi Chi"); + else if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] < 20) outputText("Chi Chi the waitress from the exotic food restaurant"); + else outputText("a blazing mouse girl"); + outputText(" sitting on one of the stool drinking sake.\n\n"); + outputText("\"Yeah, and after I told it I was the top girl here I punched it in the face, Woooooooo!\""); + outputText("The barman sighs, pretending not to notice the drunken mouse, aside for when he has to serve her a new drink. Just as you are about to order something she realises you are there and engages in conversation.\n\n"); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) outputText("\"Gaaaaah, [name], why do you hang around all those girls. Worse why do you fuck with them and not me?! Its like you are a " + player.mf("go go boy","cheap whore") + " selling your body to everyone and thish drives me mad! Yeaaa, I’m going to prove them all I’m the top shlut!\""); + else if (flags[kFLAGS.CHI_CHI_FOLLOWER] == 1) outputText("\"Hey... you’re that so called champ who lost in the arena?! Well I like you. I like you so much I’d want you as my " + player.mf("boy","girl") + "friend but waaaah I’m way too shy to tell you that right! Well don’t go tell [name] I like " + player.mf("him","her") + " got it? Yeah who cares about that! Barman a round for [name] the best person I met woooo. Now let’s have sex!\""); + else outputText("\"Hey you... yesh you, the tall person over there! Think you can fight?! Well I’m pretty sure nobody in this village hash the guts to anyway. If you dare show up in the arena I will beat you to death like I do everyone. Now that I think of it, there are other kinds of battle I can beat people in. Bet you're the kind who fucks every demon you meet. Well not tonight, letsh bang!\""); + outputText("Wait, what? You barely have the time to mutter a reply before the red cheeked mousette pushes you on the nearest table and climbs over you. The barman pulls a curtain around your table, he must be used to this.\n\n"); + outputText("\"Yeshh you heard me you big idiot. I’m going to fuck with you here and now! So don’t you dare try to run away because I will get very mad if you do.\""); + outputText("Do you let her?\n\n"); + menu(); + addButton(0, "Let Her", drunksex,true); + addButton(1, "Refuse", drunksex,false); + } + private function drunksex(selected:Boolean):void { + if (!selected) { + outputText("" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 0 ? "Chi Chi" : "The mouse") + " is clearly out of it. Better stop her now before she does something she will regret later. You shove her to the side and run for the exit of the bar. Hearing her swear in background. Once outside you head back to camp."); + doNext(camp.returnToCampUseOneHour); + } + else { + outputText("You would have to be an idiot indeed to refuse this free fuck. The drunken mouse girl licks her lips in anticipation, grabbing your clothes and begins to removing them one-by-one. Unsurprisingly, her own clothes barely takes a second to remove. She is so close now you can feel her breath on your neck."); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) { + outputText(" The mousette introduces herself.\n\n"); + outputText("\"My name’s Chi Chi by the way, but... oh why does it matter? What's important is that we are about to have a lot of fun.\""); + } + //post marriage + if (player.hasCock()) { + outputText("Chi Chi initiates with a wet but warm kiss; Her tongue dancing tango with yours. While small in stature, she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how her burning tail and fur isn't actually setting everything on fire around her, especially you. You inquire on this matter.\n\n"); + outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\""); + outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore, you slowly tease the entrance of her warm canal with your [cock]. If anything, despite being wet you can already feel how hot her oven is from the outside and can’t help but hope you won’t end up burned. Chi Chi however has no such concern and out of impatience starts stroking your dick with her embery tail.\n\n"); + outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\""); + outputText("You're surprised by the direct contact with her fiery tail, even more so by the fact that it didn’t leave your dick with a third degree burn. Deciding to give the hot mouse what she wants, you put it in. Her vagina immediately starts milking you as if it was a thirsty mouth seeking water, and the frantic moving of her hips up down doesn’t help it.\n\n"); + outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\""); + outputText("Her pussy starts heating even more and before you know it, it actually transfers to you. Wow, your urethra is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, only the cool passage of cum can free you from this heat! You begin to piston in and out of Chi Chi desperate for a cooling release.\n\n"); + outputText("Both desperate for a way to get rid of the heat, the two of you manage to cum together, your jizz filling Chi Chi to the brim before slowly dripping on the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\""); + outputText("She finally passes out, which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeds to also get the sleeping inferno-mouse out with the help of a bouncer.\n\n"); + } + else { + outputText("Chi Chi initiates with a wet but warm kiss her tongue dancing tango with yours. While small in stature she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how come her burning tail and fur isn't actually setting on fire everything around her starting with you. You inquire on this matter.\n\n"); + outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\""); + outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore you begin to grind your pussy lips against hers making her gasp in surprise at your initiative.\n\n"); + outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\""); + outputText("Chi Chi begins to grind herself in response, making you both coo. For a drunk she clearly knows what she’s doing, almost like if drunken sex was an expertise of hers. You’re swiftly forced out back to reality as your blazing partner accelerates the tempo, causing you to moan in pleasure. Well now there's no way you going to simply lose this! You get the mouse ears with your hands and start caressing them. Chi Chi has a positive reaction and you are clearly getting to her however "); + outputText("that's counting without her hidden weapon. Her burning tail lashes out like a whip and slides between you, aiming for your cunt. Before you can stop it you already have 15 inch of hot mouse tail in your [pussy] and Chi Chi uses it to fuck your brain out. The fuck isn't all that happens it seems her very heat start to spread on to you. Wow your cunt is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, "); + outputText("only the cool passage of your girl-juices can free you from this heat! Meanwhile she grinds against her own tail bump but you have decided not to let her get off at her own pace. You swiftly slide " + (player.tailType > Tail.NONE ? "your tail" : "a pair of finger") + " in the smoking hot hinezumi cunt and retaliate with a set of rapid movement of your own.\n\n"); + outputText("Both desperate for a way to get rid of the heat and unable to fully outpace her, the two of you still manage to cum together your girl juices melding together and staining the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\""); + outputText("She finally pass out which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeded to also get the sleeping mouse out with the help of a bouncer.\n\n"); + } + player.orgasm(); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) flags[kFLAGS.CHI_CHI_FOLLOWER] = 1; + doNext(camp.returnToCampUseOneHour); + } + } } } \ No newline at end of file diff --git a/classes/classes/Scenes/Places/TelAdre.as b/classes/classes/Scenes/Places/TelAdre.as index beb760270e..45a6902011 100644 --- a/classes/classes/Scenes/Places/TelAdre.as +++ b/classes/classes/Scenes/Places/TelAdre.as @@ -184,7 +184,7 @@ public function telAdreMenu():void { if (flags[kFLAGS.LUNA_FOLLOWER] < 2 && rand(10) == 0) { if (flags[kFLAGS.LUNA_FOLLOWER] == 1) SceneLib.lunaFollower.meetingLunaRepated(); else SceneLib.lunaFollower.meetingLunaFirstTime(); - return + return; } spriteSelect(-1); outputText(images.showImage("location-teladre")); From 8b45b132d2cffbae754a2fed874cbcc41737ca98 Mon Sep 17 00:00:00 2001 From: Ormael Date: Mon, 5 Mar 2018 19:01:33 +0100 Subject: [PATCH 09/27] 0.8i2.06 - BW Crinos shape stat bonuses boosted, few of Luna realted mishaps for camp npc's, Moon cycle bonuses for WW PC changes, Luna 3 lvl-ups, Diana combat stats minor changes, Griffin TF (part 1), bonus max lust for monsters per lvl, Raiju PC's lust attacks nerfed --- classes/classes/Appearance.as | 16 +++-- classes/classes/BodyParts/Arms.as | 1 + classes/classes/BodyParts/Ears.as | 1 + classes/classes/BodyParts/Eyes.as | 1 + classes/classes/BodyParts/LowerBody.as | 1 + classes/classes/BodyParts/Tail.as | 1 + classes/classes/CockTypesEnum.as | 1 + classes/classes/Creature.as | 5 ++ classes/classes/Items/Mutations.as | 53 ++++++++++++++ classes/classes/Items/MutationsHelper.as | 5 ++ classes/classes/Monster.as | 16 +++++ classes/classes/Player.as | 10 +-- classes/classes/PlayerAppearance.as | 20 +++++- classes/classes/PlayerEvents.as | 71 ++++++++++++------- classes/classes/PlayerInfo.as | 6 +- classes/classes/Scenes/Areas/HighMountains.as | 42 +++++++++-- classes/classes/Scenes/Camp.as | 29 ++++---- classes/classes/Scenes/Changelog.as | 14 ++-- classes/classes/Scenes/Combat/Combat.as | 40 ++++++----- classes/classes/Scenes/Combat/CombatTeases.as | 4 +- classes/classes/Scenes/Combat/CombatUI.as | 2 +- .../classes/Scenes/Combat/MagicSpecials.as | 22 +++--- .../classes/Scenes/Combat/PhysicalSpecials.as | 2 +- classes/classes/Scenes/Inventory.as | 12 +++- classes/classes/Scenes/NPCs/AmilyScene.as | 15 ++++ classes/classes/Scenes/NPCs/ChiChiFollower.as | 17 +++++ classes/classes/Scenes/NPCs/Diana.as | 28 +++++--- classes/classes/Scenes/NPCs/DianaFollower.as | 4 +- classes/classes/Scenes/NPCs/EmberScene.as | 13 ++++ classes/classes/Scenes/NPCs/EtnaFollower.as | 15 ++++ classes/classes/Scenes/NPCs/HelFollower.as | 13 +++- classes/classes/Scenes/NPCs/IzmaScene.as | 14 ++++ classes/classes/Scenes/NPCs/JojoScene.as | 12 ++++ classes/classes/Scenes/NPCs/KihaScene.as | 19 ++++- classes/classes/Scenes/NPCs/Luna.as | 41 +++++++++-- classes/classes/Scenes/NPCs/LunaFollower.as | 35 ++++++++- .../Places/HeXinDao/JourneyToTheEast.as | 14 ++-- classes/classes/Scenes/SceneLib.as | 3 + classes/classes/Scenes/Soulforce.as | 7 +- classes/classes/StatusEffects.as | 4 ++ 40 files changed, 502 insertions(+), 127 deletions(-) diff --git a/classes/classes/Appearance.as b/classes/classes/Appearance.as index f63272221b..f0a96a1c59 100644 --- a/classes/classes/Appearance.as +++ b/classes/classes/Appearance.as @@ -2386,6 +2386,7 @@ public class Appearance extends Utils [Skin.DRAGON_SCALES, "dragon scales", "dragon scales", "", true], [Skin.MOSS, "moss", "moss", "", false], [Skin.AQUA_RUBBER_LIKE, "AQUA_RUBBER_LIKE", "slippery rubber-like skin", "", false], + [Skin.FEATHER, "FEATHER", "feather", "", false], [Skin.TATTOED_ONI, "TATTOED_ONI", "tattooed skin", "", false], [Skin.PARTIAL_DRAGON_SCALES, "partial dragon scales", "partial dragon scales", "", true], [Skin.PARTIAL_STONE, "partial stone", "partial stone", "", false], @@ -2494,7 +2495,8 @@ public class Appearance extends Utils [Eyes.ELF, "elf"], [Eyes.RAIJU, "raiju"], [Eyes.GEMSTONES, "gemstones"], - [Eyes.FERAL, "feral"] + [Eyes.FERAL, "feral"], + [Eyes.GRYPHON, "gryphon"] ] ); public static const DEFAULT_EARS_NAMES:Object = createMapFromPairs( @@ -2527,7 +2529,8 @@ public class Appearance extends Utils [Ears.ELVEN, "elven"], [Ears.WEASEL, "weasel"], [Ears.RED_PANDA, "red-panda"], - [Ears.AVIAN, "avian"] + [Ears.AVIAN, "avian"], + [Ears.GRYPHON, "gryphon"] ] ); public static const DEFAULT_HORNS_NAMES:Object = createMapFromPairs( @@ -2584,7 +2587,8 @@ public class Appearance extends Utils [Arms.RAIJU, "raiju"], [Arms.RED_PANDA, "red-panda"], [Arms.CAT, "cat"], - [Arms.AVIAN, "avian"] + [Arms.AVIAN, "avian"], + [Arms.GRYPHON, "gryphon"] ] ); public static const DEFAULT_TAIL_NAMES:Object = createMapFromPairs( @@ -2624,7 +2628,8 @@ public class Appearance extends Utils [Tail.RAIJU, "raiju"], [Tail.RED_PANDA, "red-panda"], [Tail.GARGOYLE_2, "axe-shaped gargoyle"], - [Tail.AVIAN, "avian"] + [Tail.AVIAN, "avian"], + [Tail.GRIFFIN, "griffin"] ] ); public static const DEFAULT_WING_NAMES:Object = createMapFromPairs( @@ -2733,7 +2738,8 @@ public class Appearance extends Utils [LowerBody.ELF, "elf"], [LowerBody.RAIJU, "raiju"], [LowerBody.RED_PANDA, "red-panda"], - [LowerBody.AVIAN, "avian"] + [LowerBody.AVIAN, "avian"], + [LowerBody.GRYPHON, "gryphon"] ] ); // diff --git a/classes/classes/BodyParts/Arms.as b/classes/classes/BodyParts/Arms.as index f390988b88..d7c06721d1 100644 --- a/classes/classes/BodyParts/Arms.as +++ b/classes/classes/BodyParts/Arms.as @@ -28,6 +28,7 @@ public class Arms extends BodyPart { public static const GARGOYLE_2:int = 24; public static const CAT:int = 25; public static const AVIAN:int = 26; + public static const GRYPHON:int = 27; public function Arms() { super(null, null); diff --git a/classes/classes/BodyParts/Ears.as b/classes/classes/BodyParts/Ears.as index c3fabbbdf4..faa105a0b2 100644 --- a/classes/classes/BodyParts/Ears.as +++ b/classes/classes/BodyParts/Ears.as @@ -32,6 +32,7 @@ public class Ears extends BodyPart { public static const VAMPIRE:int = 28; public static const RED_PANDA:int = 29; public static const AVIAN:int = 30; + public static const GRYPHON:int = 31; public function Ears() { super(null, null); diff --git a/classes/classes/BodyParts/Eyes.as b/classes/classes/BodyParts/Eyes.as index 8308ffcba2..3bd8d3b353 100644 --- a/classes/classes/BodyParts/Eyes.as +++ b/classes/classes/BodyParts/Eyes.as @@ -20,6 +20,7 @@ public class Eyes extends BodyPart { public static const VAMPIRE:int = 15; public static const GEMSTONES:int = 16; public static const FERAL:int = 17; + public static const GRYPHON:int = 18; public var colour:String = "brown"; public function Eyes() { diff --git a/classes/classes/BodyParts/LowerBody.as b/classes/classes/BodyParts/LowerBody.as index 3f391c8047..54b426a5ea 100644 --- a/classes/classes/BodyParts/LowerBody.as +++ b/classes/classes/BodyParts/LowerBody.as @@ -50,6 +50,7 @@ public class LowerBody extends SaveableBodyPart { public static const RED_PANDA:int = 42; public static const GARGOYLE_2:int = 43; public static const AVIAN:int = 44; + public static const GRYPHON:int = 45; override public function set type(value:int):void { super.type = value; diff --git a/classes/classes/BodyParts/Tail.as b/classes/classes/BodyParts/Tail.as index 3b8ba5721f..68d6ac5f72 100644 --- a/classes/classes/BodyParts/Tail.as +++ b/classes/classes/BodyParts/Tail.as @@ -50,6 +50,7 @@ public class Tail extends SaveableBodyPart { public static const RED_PANDA:int = 34; public static const GARGOYLE_2:int = 35; public static const AVIAN:int = 36; + public static const GRIFFIN:int = 37; override public function set type(value:int):void { var old:int = type; diff --git a/classes/classes/CockTypesEnum.as b/classes/classes/CockTypesEnum.as index 20c33a3842..9546405828 100644 --- a/classes/classes/CockTypesEnum.as +++ b/classes/classes/CockTypesEnum.as @@ -49,6 +49,7 @@ package classes public static const WOLF:CockTypesEnum = new CockTypesEnum("mammal"); public static const STAMEN:CockTypesEnum = new CockTypesEnum("plant"); public static const RED_PANDA:CockTypesEnum = new CockTypesEnum("mammal"); + public static const GRYPHON:CockTypesEnum = new CockTypesEnum("avian"); public static const UNDEFINED:CockTypesEnum = new CockTypesEnum(""); function CockTypesEnum(i_group:String = "") { _group = i_group; } diff --git a/classes/classes/Creature.as b/classes/classes/Creature.as index a847657fd4..7521618b60 100644 --- a/classes/classes/Creature.as +++ b/classes/classes/Creature.as @@ -2293,6 +2293,11 @@ public class Creature extends Utils return countCocksOfType(CockTypesEnum.AVIAN); } + public function gryphonCocks():int { //How many gryphoncocks? + return countCocksOfType(CockTypesEnum.GRYPHON); + } + + public function findFirstCockType(ctype:CockTypesEnum):Number { var index:Number = 0; diff --git a/classes/classes/Items/Mutations.as b/classes/classes/Items/Mutations.as index cbbd38d2ae..c5f069b17f 100644 --- a/classes/classes/Items/Mutations.as +++ b/classes/classes/Items/Mutations.as @@ -6600,6 +6600,8 @@ public final class Mutations extends MutationsHelper //Generic eating text: clearOutput(); if (type == 0) outputText("You crack open the seed easily, and eat the fruit inside. A bit dry, as you expected, but with a sweet and aromatic taste that leaves you wanting another one."); + if (type == 1) outputText("Looking again at the fierce gryphon sculpted on brass and bronze that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); + if (type == 2) outputText("Looking again at the wonderful peacock carved in alabaster and ruby that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); //Stats changes //-Speed increase to 100. if (player.spe < 100 && type == 0 && rand(3) == 0 && changes < changeLimit) { @@ -6629,6 +6631,7 @@ public final class Mutations extends MutationsHelper if (player.str < 40) dynStats("str", .5); dynStats("str", .5); } + if (type == 1 || type == 2) changeLimit = 1; if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; //Sexual changes if (player.avianCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 0 && rand(3) == 0) { @@ -6649,6 +6652,24 @@ public final class Mutations extends MutationsHelper player.cocks[temp2].cockType = CockTypesEnum.AVIAN; changes++; } + if (player.gryphonCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 1 && rand(3) == 0) { + for (temp2 = 0; temp2 < player.cocks.length; temp2++) { + if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; + } + outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); + outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); + player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; + changes++; + } + if (player.cockTotal() > 1 && player.gryphonCocks() > 0 && player.cockTotal() > player.gryphonCocks() && type == 1 && rand(3) == 0 && changes < changeLimit) { + for (temp2 = 0; temp2 < player.cocks.length; temp2++) { + if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; + } + outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); + outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); + player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; + changes++; + } //Legs if (player.lowerBody != LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.isGoo()) { @@ -6691,6 +6712,13 @@ public final class Mutations extends MutationsHelper player.legCount = 2; changes++; } + if (player.lowerBody != LowerBody.GRYPHON && player.eyes.type == Eyes.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nTaking a seat while you see how the magic within the statue affects you, a familiar numbness reaches your legs. The rough skin covering your lower legs and feet change into more usual, soft skin, and shortly after, it starts sprouting " + player.skin.coat.color2 + " colored fur over them."); + outputText("\n\nYour feet themselves reshape, losing their avian stance and gaining one much more feline, complete with soft pink paw pads. The talons at the end of each toe become retractile feline claws. Albeit walking with those seems initially tricky, you easily gain a hold on how using your new gryphon-like legs."); + setLowerBody(LowerBody.GRYPHON); + player.legCount = 2; + changes++; + } //Tail if (player.tailType != Tail.AVIAN && player.lowerBody == LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.tailType > Tail.NONE) { @@ -6711,6 +6739,12 @@ public final class Mutations extends MutationsHelper setTailType(Tail.AVIAN); changes++; } + if (player.tailType != Tail.GRIFFIN && player.lowerBody == LowerBody.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe fan of feathers at your backside reacts under the statue magic effects. An otherworldly magic envelopes it, making the feathers twist and converge in an odd fashion, at the same time that the small bump of your tail elongates until becoming long enough to reach far past your knee."); + outputText("\n\nBefore you notice it, the long feathers have merged into a tuft of " + player.skin.coat.color + " at the end of your now long tail, while the short, downy ones now cover every inch of bare skin that the elongated appendage now have. Well, seems like you gained a griffin-like tail! It’s quite leonine in shape, but its appearance remains a bit avian."); + setTailType(Tail.GRIFFIN); + changes++; + } //Arms if (player.arms.type != Arms.AVIAN && player.tailType == Tail.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.skin.hasChitin()) { @@ -6735,6 +6769,12 @@ public final class Mutations extends MutationsHelper setArmType(Arms.AVIAN); changes++; } + if (player.arms.type != Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe skin on your arms change a bit, as the " + player.skin.coat.color2 + " turning into soft, feline fur. Your palms and fingers acquire pink paw pads, while at the end of each one of your fingers, the talons sharpen and become prehensile, adopting a posture better suited to pounce over a unsuspecting victim."); + outputText("\n\nFrom the fringe on your elbows to your armpits, your " + player.skin.coat.color + " colored plumage remains the same. At the end, you’ve gotten gryphon-like arms!."); + setArmType(Arms.GRYPHON); + changes++; + } //Wings if (player.wings.type != Wings.FEATHERED_AVIAN && player.arms.type == Arms.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.wings.type == Wings.DRACONIC_SMALL || player.wings.type == Wings.DRACONIC_LARGE || player.wings.type == Wings.DRACONIC_HUGE || player.wings.type == Wings.BAT_LIKE_TINY || player.wings.type == Wings.BAT_LIKE_LARGE || player.wings.type == Wings.BAT_LIKE_LARGE_2 || player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) { @@ -6789,6 +6829,12 @@ public final class Mutations extends MutationsHelper setEarType(Ears.AVIAN); changes++; } + if (player.ears.type != Ears.GRYPHON && player.tailType == Tail.GRIFFIN && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nAfter another session under the statue magic, the lingering effects seem to having taken a toll on you, as your ears buzz. The sound turns worse for a second, and then vanish. You hear for a second a light flapping sound, and then, nothing.\n\nWhen everything seems to have finished, you realize that your hearing range has changed, and while your overall sense of hearing remains the same, pinpointing the source of a sounds is much easier. On a nearby reflection you discover the reason: "); + outputText("two triangular ears have sprouted at your head, streamlined to flight and with a gryphon like appearance. A short layer of downy feathers covers them, the tip having a distinctive tuft. Checking that your ears are rightly placed on the new auricles, you smile happily at the sight of your gryphon ears, noting how well they compliment your looks."); + setEarType(Ears.GRYPHON); + changes++; + } //Skin if (!player.hasFeather() && changes < changeLimit && type == 0 && rand(4) == 0) { if (player.hasFur()) { @@ -6825,6 +6871,13 @@ public final class Mutations extends MutationsHelper player.skin.growCoat(Skin.FEATHER,{color:player.skin.coat.color}); changes++; } + //Eyes + if (player.eyes.type != Eyes.GRYPHON && player.arms.type == Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe mysterious energy coming from the statue continues adapting your body into a more fierce, strong shape. This time, it has affected you eyesight, as you suddenly notice how the long distances that you once had trouble seeing are clear as if you were in front of them, and that you can perceive even the minimal move even from several miles afar."); + outputText("\n\nChecking your changes on the river, you see clearly how your sclera has acquired a golden-orange coloration, as well as your outer iris, separated from the former by a thin circle of black. Both your pupil and your inner iris, which now has enlarged, are solid black. Now you’ll have a blessed vision due those raptor, gryphon-like eyes."); + setEyeTypeAndColor(Eyes.GRYPHON, "golden-orange"); + changes++; + } if (changes == 0 && type == 0) outputText("\n\nIt seems like the fruit had no effect this time. Maybe it was spoiled, or kept in storage for too much time?"); if (type == 0) player.refillHunger(15); flags[kFLAGS.TIMES_TRANSFORMED] += changes; diff --git a/classes/classes/Items/MutationsHelper.as b/classes/classes/Items/MutationsHelper.as index fba6557316..3d78201379 100644 --- a/classes/classes/Items/MutationsHelper.as +++ b/classes/classes/Items/MutationsHelper.as @@ -302,6 +302,7 @@ import classes.BodyParts.Wings; [Arms.FOX, StatusEffects.UnlockedFoxArms], [Arms.GARGOYLE, null], [Arms.GARGOYLE_2, null], + [Arms.GRYPHON, null], [Arms.HARPY, StatusEffects.UnlockedHarpyArms], [Arms.HUMAN, null], [Arms.KITSUNE, StatusEffects.UnlockedKitsuneArms], @@ -339,6 +340,7 @@ import classes.BodyParts.Wings; [Ears.FERRET, null], [Ears.FOX, StatusEffects.UnlockedFoxEars], [Ears.GOAT, StatusEffects.UnlockedGoatEars], + [Ears.GRYPHON, null], [Ears.HORSE, null], [Ears.HUMAN, null], [Ears.KANGAROO, null], @@ -375,6 +377,7 @@ import classes.BodyParts.Wings; [Eyes.FOX, StatusEffects.UnlockedFoxEyes], [Eyes.GEMSTONES, null], [Eyes.GORGON, StatusEffects.UnlockedGorgonEyes], + [Eyes.GRYPHON, null], [Eyes.HUMAN, null], [Eyes.MANTICORE, null], [Eyes.ONI, StatusEffects.UnlockedOniEyes], @@ -510,6 +513,7 @@ import classes.BodyParts.Wings; [LowerBody.GARGOYLE, null], [LowerBody.GARGOYLE_2, null], [LowerBody.GOO, null], + [LowerBody.GRYPHON, null], [LowerBody.HARPY, StatusEffects.UnlockedHarpyLegs], [LowerBody.HOOFED, StatusEffects.UnlockedHoofedLegs], [LowerBody.HUMAN, null], @@ -598,6 +602,7 @@ import classes.BodyParts.Wings; [Tail.GARGOYLE, null], [Tail.GARGOYLE_2, null], [Tail.GOAT, StatusEffects.UnlockedGoatTail], + [Tail.GRIFFIN, null], [Tail.HARPY, StatusEffects.UnlockedHarpyTail], [Tail.HORSE, null], [Tail.KANGAROO, null], diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index 77c0cda15d..55098f5342 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -286,6 +286,7 @@ import flash.utils.getQualifiedClassName; if (findPerk(PerkLib.GclassHeavenTribulationSurvivor) >= 0) temp += (75 * (1 + newGamePlusMod())); //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); + temp += this.level * 10; return temp; } @@ -345,6 +346,21 @@ import flash.utils.getQualifiedClassName; if (this.level >= 20) temp += 50; if (this.level >= 22) temp += 50; } + if (findPerk(PerkLib.SoulSprite) >= 0) { + if (this.level >= 24) temp += 60; + if (this.level >= 26) temp += 60; + if (this.level >= 28) temp += 60; + } + if (findPerk(PerkLib.SoulScholar) >= 0) { + if (this.level >= 30) temp += 70; + if (this.level >= 32) temp += 70; + if (this.level >= 34) temp += 70; + } + if (findPerk(PerkLib.SoulElder) >= 0) { + if (this.level >= 36) temp += 80; + if (this.level >= 38) temp += 80; + if (this.level >= 40) temp += 80; + } if (findPerk(PerkLib.InsightfulResourcesI) >= 0) temp += Math.round((this.wis*5) * (1 + newGamePlusMod())); if (findPerk(PerkLib.DeityJobMunchkin) >= 0) temp *= 1.1; if (hasPerk(PerkLib.EnemyTrueDemon)) temp = 0; diff --git a/classes/classes/Player.as b/classes/classes/Player.as index 5db0b3d893..74a4dcd5e8 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -5074,6 +5074,8 @@ use namespace CoC; min += 10; if(eggs() >= 40) min += 10; } + //Werebeast + if (hasPerk(PerkLib.Lycanthropy)) min += perk(findPerk(PerkLib.Lycanthropy)).value1; //Jewelry effects if (jewelryEffectId == JewelryLib.MODIFIER_MINIMUM_LUST) { @@ -6104,22 +6106,22 @@ use namespace CoC; } if (findPerk(PerkLib.CarefulButRecklessAimAndShooting) >= 0 && findPerk(PerkLib.ColdAim) < 0) maxTou -= (15 * newGamePlusMod); if (hasPerk(PerkLib.Lycanthropy)) { - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 3)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { maxStr += (10 * newGamePlusMod); maxTou += (10 * newGamePlusMod); maxSpe += (10 * newGamePlusMod); } - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 2)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { maxStr += (20 * newGamePlusMod); maxTou += (20 * newGamePlusMod); maxSpe += (20 * newGamePlusMod); } - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 1)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { maxStr += (30 * newGamePlusMod); maxTou += (30 * newGamePlusMod); maxSpe += (30 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { maxStr += (40 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (40 * newGamePlusMod); diff --git a/classes/classes/PlayerAppearance.as b/classes/classes/PlayerAppearance.as index a1b6e131ef..be8e016a57 100644 --- a/classes/classes/PlayerAppearance.as +++ b/classes/classes/PlayerAppearance.as @@ -1025,6 +1025,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Your " + num2Text(player.legCount) + " legs are equally covered in [skin coat.color] fur, ending on red-panda paws with short claws. They have a nimble and strong build, in case you need to escape from something."); else if (player.lowerBody == LowerBody.AVIAN) outputText(" You have strong thighs perfect for launching you into the air which end in slender, bird-like legs, covered with a [skin coat.color] plumage down to your knees and slightly rough, [skin] below. You have digitigrade feet, with toes that end in sharp talons."); + else if (player.lowerBody == LowerBody.GRYPHON) + outputText(" You have strong thighs perfect for launching you into the air ending in furred, feline legs, covered with a coat of soft, [skin coat.color2] fur. Your have digitigrade feet, lion-like, with soft, pink soles and paw pads, with feline toes ending in sharp, retractile claws."); if (player.findPerk(PerkLib.Incorporeality) >= 0) outputText(" Of course, your [legs] are partially transparent due to their ghostly nature."); // isn't goo transparent anyway? } @@ -1153,6 +1155,9 @@ public class PlayerAppearance extends BaseContent { else if (player.tailType == Tail.AVIAN) { outputText(" A tail shaped like a fan of long, [skin coat.color] feathers rests above your " + assDescript() + ", twitching instinctively to help guide you if you were to take flight."); } + else if (player.tailType == Tail.GRIFFIN) { + outputText(" From your backside hangs a long tail, leonine in shape and covered mostly by a layer of [skin coat.color2] fur with a tip made of a tuft of [skin coat.color] colored feathers. It moves sinuously as you walk."); + } } public function describeArms():void { //Wing arms @@ -1213,6 +1218,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Your arms are covered in [skin coat.color] up to your shoulder. They end with a pair of five-toed cat paws armed with lethal claws."); else if (armType == Arms.AVIAN) outputText(" Your arms are covered with [skin coat.color] colored feathers just a bit past your elbow. Your humanoid hands have " + player.skinTone + ", slightly rough skin and end in short claws."); + else if (armType == Arms.GRYPHON) + outputText(" The feathers on your arms reach a bit past your elbows, the fringe of [skin coat.color] plumage leading to your " + player.skinTone + ", slightly rough skinned hands. They end in short, avian claws."); if (player.wings.type == Wings.BAT_ARM ){ outputText(" Your arm bones are thin and light in order to allow flight. You have grown a few extra fingers, which allow you to hold various items even with your abnormal hands, albeit at the cost of preventing flight while doing so."); } @@ -1473,6 +1480,9 @@ public class PlayerAppearance extends BaseContent { else if(eyeType == Eyes.FERAL){ outputText(" In your eyes sometime dance a green light. It encompass your entire pupil when you let the beast within loose."); } + else if(eyeType == Eyes.GRYPHON){ + outputText(" Your gifted eyes have a bird-like appearance, having an [eyecolor] sclera and a large, black iris. A thin ring of black separates your sclera from your outer iris."); + } else outputText(" Your eyes are [eyecolor]."); } public function describeHairAndEars():void { @@ -1553,6 +1563,9 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" Two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } + if (earType == Ears.GRYPHON){ + outputText(" A duo of triangular, streamlined ears are located at each side of your head, helping you to pinpoint sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); + } // if (player.gills.type == Gills.FISH) { @@ -1637,6 +1650,9 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" The [hair] atop your head compliments you quite well, and two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } + if (earType == Ears.GRYPHON){ + outputText(" Two triangular ears part your [hair] at each side of your head. They’re streamlined and adapted to fly, and are quite useful to locate sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); + } // if(player.antennae.type == Antennae.MANTIS) { @@ -1984,11 +2000,11 @@ public class PlayerAppearance extends BaseContent { } if (faceType == Face.RED_PANDA) { outputText(" Your face has a distinctive animalistic muzzle, proper from a red-panda, complete with a cute pink nose."); - if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") + if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat.color] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") } if (faceType == Face.AVIAN) { outputText(" Your visage has a bird-like appearance, complete with an avian beak. A couple of small holes on it makes up for your nostrils, while a long, nimble tongue is hidden inside."); - if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat] feathers.") + if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat].") } // } diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index 1d0be1814e..1c602c88b2 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -137,6 +137,15 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers2); } } + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) { + if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, -1); + if (player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 2, -1); + if (player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 3, -1); + if (player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 4, -1); + if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) <= 0) { + player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers3); + } + } //Sidonie checks if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { @@ -433,7 +442,12 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { } if (player.werewolfScore() >= 6 && player.hasPerk(PerkLib.LycanthropyDormant)) { outputText("\nAs you become wolf enough your mind recedes into increasingly animalistic urges. It will only get worse as the moon comes closer to full. Gained Lycanthropy.\n"); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + var bonusStats:Number = 0; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; + player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); player.removePerk(PerkLib.LycanthropyDormant); needNext = true; } @@ -584,55 +598,62 @@ if (CoC.instance.model.time.hours > 23) { //Once per day if (flags[kFLAGS.CHI_CHI_LVL_UP] < 2) flags[kFLAGS.CHI_CHI_LVL_UP] = 2; else flags[kFLAGS.CHI_CHI_LVL_UP]++; } + //Mishaps reset + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.removeStatusEffect(StatusEffects.CampLunaMishaps1); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.removeStatusEffect(StatusEffects.CampLunaMishaps2); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps3)) player.removeStatusEffect(StatusEffects.CampLunaMishaps3); //Full moon if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { flags[kFLAGS.LUNA_MOON_CYCLE]++; + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; if (player.hasPerk(PerkLib.Lycanthropy)) { - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + var changeV:Number = 10 * player.newGamePlusMod(); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { outputText("\nYou can’t help but notice the moon is almost full as it rises up. It seems transfixing like it is calling to you."); outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,10); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { outputText("\nWhen the almost-full moon appears it causes your heart to race with excitement. You hearing seems better than ever. Every breath brings a rush of smells through your nose that seem much more pronounced than they should."); outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,20); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { outputText("\nYou gaze at the moon and it seems to gaze back into you. Something is coming and it won’t be long now. You feel like you are crawling in your skin. It feels like tear out of your body and be born anew."); outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time.\n"); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,30); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + ".\n"); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,40); if (player.hasCock() || (player.gender == 3 && rand(2) == 0)) player.goIntoRut(false); else if (player.hasVagina()) player.goIntoHeat(false); - needNext = true; } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1) { outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,30); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2) { outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,20); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3) { outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,10); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 4) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 4) { outputText("\nIt's a new moon tonight, you feel somewhat weak.\n"); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); - needNext = true; + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,0); } + needNext = true; } } } diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index 020533d369..48a3c3cbc0 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -557,9 +557,13 @@ public class PlayerInfo extends BaseContent { if (flags[kFLAGS.LUNA_FOLLOWER] > 3) { interpersonStats += "Luna Affection: " + Math.round(flags[kFLAGS.LUNA_AFFECTION]) + "%\n"; interpersonStats += "Luna Jealousy: " + Math.round(flags[kFLAGS.LUNA_JEALOUSY]) + "%\n"; - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; else interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; interpersonStats += "\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 3) interpersonStats += "Luna lvl: 27\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 2) interpersonStats += "Luna lvl: 21\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 1) interpersonStats += "Luna lvl: 15\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 0) interpersonStats += "Luna lvl: 9\n"; } if (flags[kFLAGS.OWCAS_ATTITUDE] > 0) interpersonStats += "Owca's Attitude: " + flags[kFLAGS.OWCAS_ATTITUDE] + "\n"; diff --git a/classes/classes/Scenes/Areas/HighMountains.as b/classes/classes/Scenes/Areas/HighMountains.as index 3ceeaa64fe..1c1dd89704 100644 --- a/classes/classes/Scenes/Areas/HighMountains.as +++ b/classes/classes/Scenes/Areas/HighMountains.as @@ -106,6 +106,10 @@ use namespace CoC; phoenixScene.encounterPhoenix1(); return; } + if ((player.hasKeyItem("Gryphon Statuette") < 0 || player.hasKeyItem("Peacock Statuette") < 0) && rand(4) == 0) { + caveScene(); + return; + } //10% chance to mino encounter rate if addicted if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_STATE] > 0 && rand(10) == 0) { spriteSelect(44); @@ -178,6 +182,7 @@ use namespace CoC; return; } } + //\"Chicken Harpy\" by Jay Gatsby and not Savin he didn't do ANYTHING //Initial Intro public function chickenHarpy():void @@ -210,7 +215,6 @@ use namespace CoC; if (player.hasItem(consumables.OVIELIX, 3)) addButton(1, "Give Three", giveThreeOviElix); addButton(4, "Leave", leaveChickenx); } - //If Give Two public function giveTwoOviElix():void { @@ -228,7 +232,6 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.PURPLEG); addButton(5, "White", getHarpyEgg, consumables.WHITEEG); } - //If Give Three public function giveThreeOviElix():void { @@ -245,7 +248,6 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.L_PRPEG); addButton(5, "White", getHarpyEgg, consumables.L_WHTEG); } - //All Text public function getHarpyEgg(itype:ItemType):void { @@ -255,7 +257,6 @@ use namespace CoC; outputText("You take " + itype.longName + ", and the harpy nods in regards to your decision. Prepping her cart back up for the road, she gives you a final wave goodbye before heading back down through the mountains.\n\n"); inventory.takeItem(itype, chickenHarpy); } - //If No public function leaveChickenx():void { @@ -265,5 +266,38 @@ use namespace CoC; outputText("\n\nYou decide to take your own path, heading back to camp while you can."); doNext(camp.returnToCampUseOneHour); } + + public function caveScene():void { + clearOutput(); + outputText("Wandering once more around the rocky cliffs on the higher area of the mountains, you find yourself increasingly bores, as you spend the most of the hour tossing aside pebbles and rocks that fell on the path, or crushing the solidified snow with your footwear.\n\n"); + outputText("On the middle of your careless, and surprisingly peaceful stroll, you happen to find an alcove carved on the cliff’s stone. It’s not very big, maybe three or four feet tall, five feet wide and two feet deep, resting one feet above the path ground, so you’re forced to get on your knees to examine it better.\n\n"); + outputText("The alcove itself is seemingly empty, though after a better examination, the back has engraved on the cliff rock a long, detailed inscription. Sadly, you can’t get a word from it, since it’s written in a strange, old language that’s doesn’t barely resemble anything that you’ve found in Mareth. Carved on each side there area stylized figures of avian creatures, "); + outputText("the most noticeable ones being a gryphon with the wings spread, and in the other side, a peacock doing the same with its tail. As you put your hands on them, you notice a that a shape vaguely resembling a hand forming in the floor of the alcove.\n\n"); + outputText("Tentatively you put one hand on place"); + if (player.avianScore() < 9) { + outputText(", but absolutely nothing happens. Maybe the magic or whatever that thing was supposed to do stopped working long ago? In any case, you had enough looking for a while, and since you’re not getting anything useful from there, you resume your walk.\n\n"); + doNext(camp.returnToCampUseOneHour); + } + else { + outputText(" and gasp in surprise as the figures depicting the creatures at the sides of the alcove recede as you do so, leaving in place two smaller alcoves with two statuettes on them.\n\n"); + outputText("The first one, made on brass and bronze, depicts a fierce looking gryphon in an assault stance. Every bit of the artifact emanates an unnatural strength. On the other side, a statue made of alabaster and ruby gemstones is shaped as a graceful peacock. Strangely, besides being pretty, the way it’s crafted gives you a weird, mystic feel.\n\n"); + outputText("You try to grab both, but as soon as you put your hands in one of them, the alcove with the other starts closing. Seems like you’ll have only one choice here.\n\n"); + menu(); + addButton(0, "Gryphon", caveSceneGryphon); + addButton(1, "Peacock", caveScenePeacock); + } + } + public function caveSceneGryphon():void { + outputText("Picking the brass-forged statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); + outputText("With nothing useful left to you here, you resume your walk and return to your camp with the gryphon idol on your bag.\n\n"); + player.createKeyItem("Gryphon Statuette", 0, 0, 0, 0); + doNext(camp.returnToCampUseOneHour); + } + public function caveScenePeacock():void { + outputText("Picking the alabaster statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); + outputText("With nothing useful left to you here, you resume your walk and return to your camp with the peacock idol on your bag.\n\n"); + player.createKeyItem("Peacock Statuette", 0, 0, 0, 0); + doNext(camp.returnToCampUseOneHour); + } } } diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index fd5fb2d1a1..39a79f738d 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -1078,7 +1078,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { break; } outputText(".\n\n"); - buttons.add("Amily", amilyScene.amilyFollowerEncounter); + buttons.add("Amily", amilyScene.amilyFollowerEncounter2).disableIf(player.statusEffectv1(StatusEffects.CampLunaMishaps1) > 0,"Hurt foot."); } //Amily out freaking Urta? else if(flags[kFLAGS.AMILY_VISITING_URTA] == 1 || flags[kFLAGS.AMILY_VISITING_URTA] == 2) { @@ -1099,7 +1099,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Chi Chi if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) { outputText("You can see Chi Chi not so far from Jojo. She’s busy practicing her many combos on a dummy. Said dummy will more than likely have to be replaced within twenty four hours.\n\n"); - buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu); + /*if (player.statusEffectv4(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); + else */buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu2); } //Diana if (flags[kFLAGS.DIANA_FOLLOWER] > 5) { @@ -1109,7 +1110,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Etna if (flags[kFLAGS.ETNA_FOLLOWER] > 0) { outputText("Etna is resting lazily on a rug in a very cat-like manner. She’s looking at you always with this adorable expression of hers, her tail wagging expectantly at your approach.\n\n"); - buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Sleeping."); + else */buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu2).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //Helia if(SceneLib.helScene.followerHel()) { @@ -1132,7 +1134,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("You see the salamander Helia pacing around camp, anxiously awaiting your departure to the harpy roost. Seeing you looking her way, she perks up, obviously ready to get underway.\n\n"); } } - buttons.add( "Helia", helFollower.heliaFollowerMenu); + buttons.add( "Helia", helFollower.heliaFollowerMenu2).disableIf(player.statusEffectv3(StatusEffects.CampLunaMishaps2) > 0,"Sleeping."); } //Isabella if(isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) { @@ -1225,7 +1227,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { case 2: outputText("Izma is lying on her back near her bedroll. You wonder at first just why she isn't using her bed, but as you look closer you notice all the water pooled beneath her and the few droplets running down her arm, evidence that she's just returned from the stream."); break; } outputText("\n\n"); - buttons.add( "Izma", izmaScene.izmaFollowerMenu); + buttons.add( "Izma", izmaScene.izmaFollowerMenu2).disableIf(player.statusEffectv4(StatusEffects.CampLunaMishaps1) > 0,"Fish smell."); } } //Kiha! @@ -1251,7 +1253,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("Most of them are on fire.\n\n"); } } - buttons.add( "Kiha", kihaScene.encounterKiha).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Cleaning burnt meat."); + else */buttons.add( "Kiha", kihaScene.encounterKiha2).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //MARBLE if(player.hasStatusEffect(StatusEffects.CampMarble) && flags[kFLAGS.FOLLOWER_AT_FARM_MARBLE] == 0) { @@ -1431,9 +1434,10 @@ public function campFollowers(descOnly:Boolean = false):void { //Ember if(emberScene.followerEmber()) { emberScene.emberCampDesc(); - buttons.add( + /*if (player.statusEffectv2(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); + else */buttons.add( "Ember", - emberScene.emberCampMenu + emberScene.emberCampMenu2 ).hint("Check up on Ember the dragon-" + (flags[kFLAGS.EMBER_ROUNDFACE] == 0 ? "morph" : flags[kFLAGS.EMBER_GENDER] == 1 ? "boy" : "girl" ) + "" ).disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } @@ -1474,7 +1478,7 @@ public function campFollowers(descOnly:Boolean = false):void { if (flags[kFLAGS.CAMP_BUILT_CABIN] > 0) outputText(" cabin"); if (!(model.time.hours > 4 && model.time.hours < 23)) outputText(" and the mouse is sleeping on it right now.\n\n"); else outputText(", though the mouse is probably hanging around the camp's perimeter.\n\n"); - buttons.add( "Jojo", jojoScene.jojoCamp).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty."); + buttons.add( "Jojo", jojoScene.jojoCamp2).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty.").disableIf(player.statusEffectv2(StatusEffects.CampLunaMishaps1) > 0,"Annoyed."); } } //Celess @@ -1608,9 +1612,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Luna if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("Luna wanders around the camp, doing her chores as usual."); - if (flags[kFLAGS.LUNA_JEALOUSY] >= 25) outputText(" She looks at you from time to time, as if expecting you to notice her."); + if (flags[kFLAGS.LUNA_JEALOUSY] >= 50) outputText(" She looks at you from time to time, as if expecting you to notice her."); outputText("\n\n"); - buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna."); + buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna.").disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0,"Training."); } for each(var npc:XXCNPC in _campFollowers){ npc.campDescription(buttons,XXCNPC.FOLLOWER); @@ -2235,7 +2239,7 @@ CoC.instance.saves.saveGame(player.slotName); return; } //Full Moon - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { SceneLib.lunaFollower.fullMoonEvent(); sleepRecovery(false); return; @@ -3466,6 +3470,7 @@ private function promptSaveUpdate():void { player.skin.coverage = Skin.COVERAGE_LOW; player.coatColor = player.hairColor; } + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; clearOutput(); outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); doNext(doCamp); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 582a373dd0..4e741ca879 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -102,7 +102,7 @@ package classes.Scenes outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); - outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/30/40/50%.\n"); + outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); outputText("-Feral Whirlwind base dmg increased by 50%. Fly-Whisk price lowered by half.\n"); outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed\n\n\n\n\n");/*ostatni punkt changelogu @@ -116,6 +116,10 @@ package classes.Scenes outputText("-\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); + outputText("-\n"); + outputText("\n"); + outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); @@ -126,6 +130,8 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); + outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); @@ -167,12 +173,6 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); - outputText("\n"); - outputText("\n"); - outputText("\n"); - outputText("\n"); - outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index 0973a9a568..d189458f97 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -804,6 +804,7 @@ public function baseelementalattacks(elementType:int = -1):void { if (summonedElementals >= 8 && manaCost > 45 && player.hasPerk(PerkLib.StrongestElementalBond)) manaCost -= 40; if (player.mana < manaCost) { outputText("Your mana is too low to fuel your elemental attack!\n\n"); + flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] = 1; doNext(combatMenu); } else { @@ -5347,6 +5348,13 @@ public function clawsRend():void { outputText("\n\n"); enemyAI(); } +public function PussyLeggoMyEggo():void { + clearOutput(); + outputText("You let your opponent free ending your embrace."); + outputText("\n\n"); + monster.removeStatusEffect(StatusEffects.Pounce); + enemyAI(); +} public function runAway(callHook:Boolean = true):void { if (callHook && monster.onPcRunAttempt != null){ @@ -5833,28 +5841,16 @@ public function soulskillCost():Number { for(var i:int = 20; (i <= 80) && (i <= stat); i += 20){ scale += stat - i; } - for(i = 100; (i <= 1200) && (i <= stat); i += 50){ + for(i = 100; (i <= 2000) && (i <= stat); i += 50){ scale += stat - i; } return scale; } - public function scalingBonusToughness():Number { - return touSpeStrScale(player.tou); - } - - public function scalingBonusSpeed():Number { - return touSpeStrScale(player.spe); - } - - public function scalingBonusStrength():Number { - return touSpeStrScale(player.str); - } - private function inteWisLibScale(stat:int):Number{ var scale:Number = 6.75; var changeBy:Number = 0.50; - if(stat <= 1200){ + if(stat <= 2000){ if(stat <= 100){ scale = (2/6) + ((int(stat/100)/20) * (1/6)); changeBy = 0.25; @@ -5865,12 +5861,24 @@ public function soulskillCost():Number { return (stat * scale) + rand(stat * (scale + changeBy)); } + public function scalingBonusToughness():Number { + return touSpeStrScale(player.tou); + } + + public function scalingBonusSpeed():Number { + return touSpeStrScale(player.spe); + } + + public function scalingBonusStrength():Number { + return touSpeStrScale(player.str); + } + public function scalingBonusWisdom():Number { - return inteWisLibScale(player.wis); + return touSpeStrScale(player.wis); } public function scalingBonusIntelligence():Number { - return inteWisLibScale(player.inte); + return touSpeStrScale(player.inte); } public function scalingBonusLibido():Number { diff --git a/classes/classes/Scenes/Combat/CombatTeases.as b/classes/classes/Scenes/Combat/CombatTeases.as index de139f03f7..130bd92292 100644 --- a/classes/classes/Scenes/Combat/CombatTeases.as +++ b/classes/classes/Scenes/Combat/CombatTeases.as @@ -1462,8 +1462,8 @@ public class CombatTeases extends BaseCombatContent { damage *= .7; bonusDamage *= .7; if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - damage *= (1 + player.lust100); - bonusDamage *= (1 + player.lust100); + damage *= (1 + (player.lust100 * 0.01)); + bonusDamage *= (1 + (player.lust100 * 0.01)); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { damage *= 1.15; diff --git a/classes/classes/Scenes/Combat/CombatUI.as b/classes/classes/Scenes/Combat/CombatUI.as index 29d50a87cf..42ddc3f323 100644 --- a/classes/classes/Scenes/Combat/CombatUI.as +++ b/classes/classes/Scenes/Combat/CombatUI.as @@ -187,7 +187,7 @@ public class CombatUI extends BaseCombatContent { if (player.fatigueLeft() <= combat.physicalCost(20)) { button(0).disable("You are too tired to bite " + monster.a + " " + monster.short + "."); } - //addButton(4, "Release", combat.GooLeggoMyEggo); + //addButton(4, "Release", combat.PussyLeggoMyEggo); } else if (player.hasPerk(PerkLib.FirstAttackElementals) && flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] == 3 && flags[kFLAGS.IN_COMBAT_PLAYER_ELEMENTAL_ATTACKED] != 1) { menu(); if (player.hasStatusEffect(StatusEffects.SummonedElementalsAir)) addButton(0, "Air", combat.baseelementalattacks, Combat.AIR); diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index 041f3c864e..031acec5c8 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -695,7 +695,7 @@ public class MagicSpecials extends BaseCombatContent { } if (player.findPerk(PerkLib.SluttySimplicity) >= 0 && player.armorName == "nothing") lustDmgF *= (1 + ((10 + rand(11)) / 100)); if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - lustDmgF *= (1 + player.lust100); + lustDmgF *= (1 + (player.lust100 * 0.01)); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { lustDmgF *= 1.15; @@ -1713,20 +1713,20 @@ public class MagicSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.ImprovedCrinosShape)) { if (player.hasPerk(PerkLib.GreaterCrinosShape)) { if (player.hasPerk(PerkLib.MasterCrinosShape)) { - temp1 += player.str * 0.5; - temp2 += player.tou * 0.5; - temp3 += player.spe * 0.5; + temp1 += player.str * 1.6; + temp2 += player.tou * 1.6; + temp3 += player.spe * 1.6; } else { - temp1 += player.str * 0.4; - temp2 += player.tou * 0.4; - temp3 += player.spe * 0.4; + temp1 += player.str * 0.8; + temp2 += player.tou * 0.8; + temp3 += player.spe * 0.8; } } else { - temp1 += player.str * 0.3; - temp2 += player.tou * 0.3; - temp3 += player.spe * 0.3; + temp1 += player.str * 0.4; + temp2 += player.tou * 0.4; + temp3 += player.spe * 0.4; } } else { @@ -1756,7 +1756,7 @@ public class MagicSpecials extends BaseCombatContent { } public function returnToNormalShape():void { clearOutput(); - outputText("Gathering all you willpower you forcefully subduing your inner beast and retunrning to your normal shape."); + outputText("Gathering all you willpower you forcefully subduing your inner beast and returning to your normal shape."); player.dynStats("str", -player.statusEffectv1(StatusEffects.CrinosShape)); player.dynStats("tou", -player.statusEffectv2(StatusEffects.CrinosShape)); player.dynStats("spe", -player.statusEffectv3(StatusEffects.CrinosShape)); diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 2672220e78..0988a20547 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -1818,7 +1818,7 @@ public class PhysicalSpecials extends BaseCombatContent { clearOutput(); if(player.fatigue + physicalCost(10) > player.maxFatigue()) { clearOutput(); - outputText("You just don't have the energy to puonce at anyone right now..."); + outputText("You just don't have the energy to pounce at anyone right now..."); //Gone menuLoc = 1; menu(); addButton(0, "Next", combatMenu, false); diff --git a/classes/classes/Scenes/Inventory.as b/classes/classes/Scenes/Inventory.as index 7b77536180..7c30754c5a 100644 --- a/classes/classes/Scenes/Inventory.as +++ b/classes/classes/Scenes/Inventory.as @@ -102,6 +102,8 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (miscNieve || miscHolli || player.hasKeyItem("Dragon Egg") >= 0 + || player.hasKeyItem("Gryphon Statuette") >= 0 + || player.hasKeyItem("Peacock Statuette") >= 0 || flags[kFLAGS.ANEMONE_KID] > 0 || flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (miscNieve) { @@ -173,7 +175,15 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (model.time.hours >= 6) addButton(5, "Garden", Gardening.manageuyourgarden).hint("Visit your plant offspring"); } - addButton(14, "Back", inventoryMenu); + /* if (player.hasKeyItem("Gryphon Statuette") >= 0) { + addButton(6, "Gryphon", SceneLib.mutationsTable.skybornSeed(1)); + foundItem = true; + } + if (player.hasKeyItem("Peacock Statuette") >= 0) { + addButton(6, "Peacock", SceneLib.mutationsTable.skybornSeed(2)); + foundItem = true; + } + */ addButton(14, "Back", inventoryMenu); } public function BagOfCosmosMenu():void { diff --git a/classes/classes/Scenes/NPCs/AmilyScene.as b/classes/classes/Scenes/NPCs/AmilyScene.as index a60d03b4bd..dbc851dd57 100644 --- a/classes/classes/Scenes/NPCs/AmilyScene.as +++ b/classes/classes/Scenes/NPCs/AmilyScene.as @@ -2548,6 +2548,11 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface //----------=============================------------ //Approach Amily: // EVENT 2427 + public function amilyFollowerEncounter2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaAmily(); + else amilyFollowerEncounter(); + } + public function amilyFollowerEncounter():void { if(!amilyCorrupt() && player.eggs() >= 20 && player.canOviposit() && flags[kFLAGS.AMILY_OVIPOSITION_UNLOCKED] == 0) { amilyEggStuff(); @@ -8293,5 +8298,15 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface amilyPreggoChance(); doNext(camp.returnToCampUseOneHour); } + + public function mishapsLunaAmily():void { + clearOutput(); + outputText("You check on Amily and notice the mouse is holding her foot visibly in pain.\n\n"); + outputText("\"Gah how did I step on these " + (silly() ? "Lego" : "rocks") + "!? I should’ve paid more attention. Sorry [name], we’ll talk again later.\"\n\n"); + outputText("You think you notice Luna watching from a distance, but surely it's just your imagination.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 1, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 1, 0, 0, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/ChiChiFollower.as b/classes/classes/Scenes/NPCs/ChiChiFollower.as index 5b79a6da9a..0cc0a71aa5 100644 --- a/classes/classes/Scenes/NPCs/ChiChiFollower.as +++ b/classes/classes/Scenes/NPCs/ChiChiFollower.as @@ -421,6 +421,11 @@ public function SoulskilsManualsShopPunishingKick2():void { doNext(camp.returnToCampUseFourHours); } +public function ChiChiCampMainMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaChiChi(); + else ChiChiCampMainMenu(); +} + public function ChiChiCampMainMenu():void { clearOutput(); outputText("You go over to Chi Chi who pauses her training to head to you once you are close."); @@ -518,5 +523,17 @@ public function chichiSparring():void { startCombat(new ChiChi()); } +public function mishapsLunaChiChi():void { + clearOutput(); + outputText("As you go to visit Chi Chi you hear her scream. Running over to check whats going on you notice the fire mouse is now a sobbing mess, wet with water. You don’t recall her crying before so this must be serious.\n\n"); + outputText("\"Why why? Why would someone put a bucket right above my bedroll now I’m all wet and my fire will take hours to rise again!\"\n\n"); + outputText("She notice you checking her and panic.\n\n"); + outputText("\"Eep go away [name]! D..don’t look at me!! The last thing I need is you looking at me right now.\"\n\n"); + outputText("That’s quite the surprise. Does the proud fighter she normaly is turn into an awkward village girl the moment shes wet? Well regardless you guess you will have to visit her later because there’s no way she’s letting you approach her right now.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 4, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 0, 1); + doNext(playerMenu); +} + } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/Diana.as b/classes/classes/Scenes/NPCs/Diana.as index 956a2dc1ea..275830179e 100644 --- a/classes/classes/Scenes/NPCs/Diana.as +++ b/classes/classes/Scenes/NPCs/Diana.as @@ -34,6 +34,8 @@ package classes.Scenes.NPCs var cost:Number = 30; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 3; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 4.5; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 5; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -41,6 +43,8 @@ package classes.Scenes.NPCs var cost:Number = 50; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 5; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 7.5; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 10; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -54,6 +58,8 @@ package classes.Scenes.NPCs if (findPerk(PerkLib.WizardsFocus) >= 0) mod1 += .4; if (findPerk(PerkLib.SpellpowerHealing) >= 0) mod1 += .2; if (findPerk(PerkLib.NaturalHealingMinor) >= 0) mod1 += .3; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) mod1 += .4; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) mod1 += .5; return mod1; } public function SpellMod():Number { @@ -260,8 +266,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 18; - this.bonusHP = 725; - this.bonusMana = 265; + this.bonusHP = 730; + this.bonusMana = 285; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -275,8 +281,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 21; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 785; + this.bonusMana = 310; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -290,8 +296,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 24; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 790; + this.bonusMana = 330; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -305,8 +311,8 @@ package classes.Scenes.NPCs this.weaponAttack = 9; this.armorDef = 12; this.level = 27; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 845; + this.bonusMana = 355; this.gems = rand(5) + 15; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -415,13 +421,13 @@ package classes.Scenes.NPCs this.createPerk(PerkLib.NaturalHealingMinor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 6) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.NaturalHealingMajor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 7) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.SoulSprite, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 8) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.NaturalHealingEpic, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_FOLLOWER] == 3 || flags[kFLAGS.DIANA_FOLLOWER] == 4) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 4087681632..6850a3f379 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -225,7 +225,7 @@ public function wonOverDianaOralM():void { if (flags[kFLAGS.DIANA_FOLLOWER] >= 2) { outputText("You don’t really even have to tell her, she’s already practically drooling. She quickly grabs your "); if (player.cockTotal() > 1) outputText("largest "); - outputText("cock. , before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); + outputText("cock, before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); outputText("Pleased you start pushing your "); if (player.cockTotal() > 1) outputText("largest "); outputText("[cock] into her eager mouth, "); @@ -440,7 +440,7 @@ public function wonOverDianaRape():void { outputText("Grunting, and with a huge amount of self control, you pull yourself out of her, spraying your load over her back. Satisfied, you climb off her, leaving her to hang off the " + object() + ", crying softly to herself, while you dress yourself and leave.\n\n"); } //if (player.isAlraune()) x; - if (flags[kFLAGS.DIANA_LVL_UP] < 2) flags[kFLAGS.DIANA_FOLLOWER] = 3; + if (flags[kFLAGS.DIANA_LVL_UP] < 3) flags[kFLAGS.DIANA_FOLLOWER] = 3; else flags[kFLAGS.DIANA_FOLLOWER] = 4; player.orgasm(); cleanupAfterCombat(); diff --git a/classes/classes/Scenes/NPCs/EmberScene.as b/classes/classes/Scenes/NPCs/EmberScene.as index 697edddec3..701e6fcfe3 100644 --- a/classes/classes/Scenes/NPCs/EmberScene.as +++ b/classes/classes/Scenes/NPCs/EmberScene.as @@ -209,6 +209,11 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface } //Approaching Ember (Z) + public function emberCampMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEmber(); + else emberCampMenu(); + } + public function emberCampMenu():void { clearOutput(); @@ -4615,5 +4620,13 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface outputText("\n\nYou look about, but see no sign of the dragon... " + emberMF("he", "she") + "'s probably gone to get breakfast." + player.clothedOrNaked(".. looking to the side, you spot your [armorName] neatly folded beside the nest.") + " Smiling to yourself, you " + player.clothedOrNaked("put on your [armorName] and ") + "get ready for another day..."); doNext(playerMenu); } + + public function mishapsLunaEmber():void { + clearOutput(); + outputText("As you call for Ember the dragon simply does not show up. You can see " + emberMF("him", "her") + " in the sky searching angrily for something and even hear " + emberMF("him", "her") + " swear in the distance. Whatever made Ember so mad you don’t want to know. You decide to call " + emberMF("him", "her") + " later so to avoid getting yourself burned as " + emberMF("he", "she") + " indeed start to torch the landscape at random.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 2, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 1, 0, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/EtnaFollower.as b/classes/classes/Scenes/NPCs/EtnaFollower.as index 89c187fb86..a398186a8b 100644 --- a/classes/classes/Scenes/NPCs/EtnaFollower.as +++ b/classes/classes/Scenes/NPCs/EtnaFollower.as @@ -419,6 +419,11 @@ public function etnaRapeIntro2():void addButton(2, "No", etnaRapeNo); } +public function etnaCampMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEtna(); + else etnaCampMenu(); +} + public function etnaCampMenu():void { spriteSelect(SpriteDb.s_etna); @@ -571,6 +576,16 @@ public function etnaSparsWithPC():void startCombat(new Etna()); } +public function mishapsLunaEtna():void { + clearOutput(); + outputText("You go check on Etna but find her sleeping in broad daylight. She acknowledge you for a second only.\n\n"); + outputText("\"Yawn... Sorry [name] since I found those weird herbs next to my carpet I just feel so drowsy. We will talk again later okay?\"\n\n"); + outputText("Well, guess you will come back later then, but herbs? Now that you look at them these herbs indeed look like catnip. You remove them from Etna direct environment for now. Still who would actually do this kind of prank?\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 1, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 1, 0, 0, 0); + doNext(playerMenu); +} + } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/HelFollower.as b/classes/classes/Scenes/NPCs/HelFollower.as index f969c8100d..59a240b163 100644 --- a/classes/classes/Scenes/NPCs/HelFollower.as +++ b/classes/classes/Scenes/NPCs/HelFollower.as @@ -475,7 +475,10 @@ public function angryHelAndIzzyCampHelHereFirst():void { doNext(camp.returnToCampUseOneHour); } - +public function heliaFollowerMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaHel(); + else heliaFollowerMenu(); +} //Introduction -- Followers -> Helia public function heliaFollowerMenu(display:Boolean = true):void { @@ -2429,5 +2432,13 @@ outputText("\n\nYour hand slides across Sophie’s stomach to squeeze one of her menu(); doNext(camp.returnToCampUseOneHour); } + +public function mishapsLunaHel():void { + clearOutput(); + outputText("Helia is currently sleeping on her mats holding a bottle of firewater. You smell the bottle up and find clear sign of soporifics inside. Whoever did this wanted to get rid of her for a few hours. Regardless the result is the same and no matter what you do the lizard girl won’t wake up, might as well try again later.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 3, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 1, 0); + doNext(playerMenu); +} } } diff --git a/classes/classes/Scenes/NPCs/IzmaScene.as b/classes/classes/Scenes/NPCs/IzmaScene.as index 30dfbd9e67..95648750a7 100644 --- a/classes/classes/Scenes/NPCs/IzmaScene.as +++ b/classes/classes/Scenes/NPCs/IzmaScene.as @@ -1654,6 +1654,11 @@ private function submitToLakeIzma():void { doNext(camp.returnToCampUseOneHour); } +public function izmaFollowerMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaIzma(); + else izmaFollowerMenu(); +} + //9999 CAMP FOLLOWER // tion camp //[Follower options] @@ -3582,5 +3587,14 @@ private function izmaValeriaToggle():void { addButton(4,"Back",izmaValeriaSubmenu); } +public function mishapsLunaIzma():void { + clearOutput(); + outputText("You pass by Izma’s spot and to your surprise, the smell of fish assaults your nose. For some weird reason, the entire area around Izma bedroll now smells of fish and, heck, it smells so much you decide to keep your distance until it’s gone.\n\n"); + outputText("Perhaps someone dropped fish oil around here, but who?\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 4, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 0, 1); + doNext(playerMenu); +} + } } diff --git a/classes/classes/Scenes/NPCs/JojoScene.as b/classes/classes/Scenes/NPCs/JojoScene.as index 49692b445b..69547dd6cf 100644 --- a/classes/classes/Scenes/NPCs/JojoScene.as +++ b/classes/classes/Scenes/NPCs/JojoScene.as @@ -2440,6 +2440,11 @@ public function refuseOfferOfHelp():void jojoCampMenu(); } +public function jojoCamp2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaJojo(); + else jojoCamp(); +} + public function jojoCamp():void { clearOutput(); jojoSprite(); @@ -3307,6 +3312,13 @@ private function suckJojosCock():void { doNext(camp.returnToCampUseOneHour); } +public function mishapsLunaJojo():void { + clearOutput(); + outputText("Jojo is looking at the ground in front of his training area in annoyance. Seems someone has drawn an ugly imp in the dirt using red paint and the imp happens to be jerking a 10 foot long cock. You spot Luna in the distance, cleaning the area with a smile. Surely it couldn’t have been her.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 2, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 1, 0, 0); + doNext(playerMenu); +} } } diff --git a/classes/classes/Scenes/NPCs/KihaScene.as b/classes/classes/Scenes/NPCs/KihaScene.as index 8b76e7d794..d138799d56 100644 --- a/classes/classes/Scenes/NPCs/KihaScene.as +++ b/classes/classes/Scenes/NPCs/KihaScene.as @@ -21,7 +21,12 @@ public class KihaScene extends NPCAwareContent { //const PC_WIN_LAST_KIHA_FIGHT:int = 345; //const KIHA_CHOKED_OUT_PC:int = 432; -//Encounter Dragon-Gal +//Encounter Dragon-Gal +public function encounterKiha2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaKiha(); + else encounterKiha(); +} + public function encounterKiha():void { var temp:Function; clearOutput(); @@ -901,5 +906,17 @@ private function analRapuzulaKiha():void { flags[kFLAGS.GOTTEN_INQUISITOR_ARMOR] = 2; inventory.takeItem(weaponsrange.I_TOME_, camp.returnToCampUseOneHour); } + + public function mishapsLunaKiha():void { + clearOutput(); + outputText("As you walk up to Kiha, you notice the dragon girl appears to be having a tantrum.\n\n"); + outputText("\"[name], are you the asshole that left all that burnt meat right next to my sleep area? What's the message behind this, you don’t like my cooking?!\"\n\n"); + outputText("You swear it's not you. Besides, you don’t hunt for food, so where would you even find the meat?\n\n"); + outputText("\"Umph! Whatever. Come back later, doofus, I need to clean up this mess!\"\n\n"); + outputText("You walk away and notice Luna in the distance cooking today’s meal with a satisfied smile.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 3, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 1, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index d294be04bf..1ecdc4fd2b 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -80,23 +80,52 @@ package classes.Scenes.NPCs this.skin.growFur({color:"ashen"}); this.hairColor = "ashen"; this.hairLength = 8; - initStrTouSpeInte(40, 80, 40, 50); - initWisLibSensCor(50, 80, 40, 75); + if (flags[kFLAGS.LUNA_LVL_UP] == 0) { + initStrTouSpeInte(30, 90, 40, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 800; + this.level = 9; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 1) { + initStrTouSpeInte(30, 95, 45, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 800; + this.level = 15; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 2) { + initStrTouSpeInte(35, 100, 50, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 850; + this.level = 21; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 3) { + initStrTouSpeInte(35, 100, 55, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 900; + this.level = 27; + } this.weaponName = "paws"; this.weaponVerb="paw-slash"; - this.weaponAttack = 37; this.armorName = "fur"; - this.armorDef = 200; - this.bonusHP = 800; this.bonusLust = 10; this.lust = 10; this.lustVuln = 0; this.temperment = TEMPERMENT_LUSTY_GRAPPLES; - this.level = 9; this.gems = 5 + rand(5); this.drop = NO_DROP; this.createPerk(PerkLib.MonsterRegeneration, 5, 0, 0, 0); this.createPerk(PerkLib.EnemyBeastOrAnimalMorphType, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 1) this.createPerk(PerkLib.RefinedBodyI, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 2) this.createPerk(PerkLib.TankI, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 3) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index 8881a3f8be..ff17d37942 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -265,8 +265,14 @@ package classes.Scenes.NPCs player.cocks[selectedCockValue].thickenCock(2); } } - // player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + var bonusStats:Number = 0; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; + player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); + player.dynStats("str", (bonusStats * player.newGamePlusMod()), "tou", (bonusStats * player.newGamePlusMod()), "spe", (bonusStats * player.newGamePlusMod()), "cor", 20); + statScreenRefresh(); outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); doNext(sexMenuDominateHer); } @@ -285,6 +291,28 @@ package classes.Scenes.NPCs outputText("Luna sit down like a good well behaved dog to admit defeat.\n\n"); outputText("\"I yield " + player.mf("Master", "Mistress") + ". You win this one. I hope this warm up was worth your time.\"\n\n"); outputText("You thank Luna for helping you with your training and give her freedom to resume duty which she gladly do.\n\n"); + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.LUNA_DEFEATS_COUNTER]++; + else flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 1; + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 2 && flags[kFLAGS.LUNA_LVL_UP] == 0) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 12); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 12, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 1; + } + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 3 && flags[kFLAGS.LUNA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 18, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 2; + } + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.LUNA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 24, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 3; + } + } cleanupAfterCombat(); doNext(camp.returnToCampUseOneHour); } @@ -518,8 +546,9 @@ package classes.Scenes.NPCs player.cocks[selectedCockValue].thickenCock(2); } } + player.createPerk(PerkLib.Lycanthropy,40,0,0,0); player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + statScreenRefresh(); outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); cleanupAfterCombat(); diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index 001ca2fd70..4796f32ff3 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -101,26 +101,26 @@ package classes.Scenes.Places.HeXinDao //post marriage if (player.hasCock()) { outputText("Chi Chi initiates with a wet but warm kiss; Her tongue dancing tango with yours. While small in stature, she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how her burning tail and fur isn't actually setting everything on fire around her, especially you. You inquire on this matter.\n\n"); - outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\""); + outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\"\n\n"); outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore, you slowly tease the entrance of her warm canal with your [cock]. If anything, despite being wet you can already feel how hot her oven is from the outside and can’t help but hope you won’t end up burned. Chi Chi however has no such concern and out of impatience starts stroking your dick with her embery tail.\n\n"); - outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\""); + outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\"\n\n"); outputText("You're surprised by the direct contact with her fiery tail, even more so by the fact that it didn’t leave your dick with a third degree burn. Deciding to give the hot mouse what she wants, you put it in. Her vagina immediately starts milking you as if it was a thirsty mouth seeking water, and the frantic moving of her hips up down doesn’t help it.\n\n"); - outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\""); + outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\"\n\n"); outputText("Her pussy starts heating even more and before you know it, it actually transfers to you. Wow, your urethra is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, only the cool passage of cum can free you from this heat! You begin to piston in and out of Chi Chi desperate for a cooling release.\n\n"); outputText("Both desperate for a way to get rid of the heat, the two of you manage to cum together, your jizz filling Chi Chi to the brim before slowly dripping on the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); - outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\""); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); outputText("She finally passes out, which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeds to also get the sleeping inferno-mouse out with the help of a bouncer.\n\n"); } else { outputText("Chi Chi initiates with a wet but warm kiss her tongue dancing tango with yours. While small in stature she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how come her burning tail and fur isn't actually setting on fire everything around her starting with you. You inquire on this matter.\n\n"); - outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\""); + outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\"\n\n"); outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore you begin to grind your pussy lips against hers making her gasp in surprise at your initiative.\n\n"); - outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\""); + outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\"\n\n"); outputText("Chi Chi begins to grind herself in response, making you both coo. For a drunk she clearly knows what she’s doing, almost like if drunken sex was an expertise of hers. You’re swiftly forced out back to reality as your blazing partner accelerates the tempo, causing you to moan in pleasure. Well now there's no way you going to simply lose this! You get the mouse ears with your hands and start caressing them. Chi Chi has a positive reaction and you are clearly getting to her however "); outputText("that's counting without her hidden weapon. Her burning tail lashes out like a whip and slides between you, aiming for your cunt. Before you can stop it you already have 15 inch of hot mouse tail in your [pussy] and Chi Chi uses it to fuck your brain out. The fuck isn't all that happens it seems her very heat start to spread on to you. Wow your cunt is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, "); outputText("only the cool passage of your girl-juices can free you from this heat! Meanwhile she grinds against her own tail bump but you have decided not to let her get off at her own pace. You swiftly slide " + (player.tailType > Tail.NONE ? "your tail" : "a pair of finger") + " in the smoking hot hinezumi cunt and retaliate with a set of rapid movement of your own.\n\n"); outputText("Both desperate for a way to get rid of the heat and unable to fully outpace her, the two of you still manage to cum together your girl juices melding together and staining the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); - outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\""); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); outputText("She finally pass out which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeded to also get the sleeping mouse out with the help of a bouncer.\n\n"); } player.orgasm(); diff --git a/classes/classes/Scenes/SceneLib.as b/classes/classes/Scenes/SceneLib.as index c6af555150..625ee7828c 100644 --- a/classes/classes/Scenes/SceneLib.as +++ b/classes/classes/Scenes/SceneLib.as @@ -1,5 +1,6 @@ package classes.Scenes { import classes.CoC; +import classes.Items.Mutations; import classes.Scenes.Areas.*; import classes.Scenes.Areas.Forest.KitsuneScene; import classes.Scenes.Combat.Combat; @@ -27,6 +28,8 @@ public class SceneLib { public static var masturbation:Masturbation = new Masturbation(); + public static var mutationsTable:Mutations = new Mutations(); + public static var beach:Beach = new Beach(); public static var blightridge:BlightRidge = new BlightRidge(); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 284f03c90a..aeae662f85 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -210,7 +210,7 @@ use namespace CoC; addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); - if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) addButton(12, "MoonCycleAdj", moonCycleAdjusting).hint("Adjusting wild moon cycle to pokeba... norm."); if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); addButton(14, "Back", accessSoulforceMenu); } @@ -218,9 +218,8 @@ public function celessIntroForced():void { clearOutput(); CelessScene.instance.birthScene(); } -public function replacingBarbsWithsSowrds():void { - player.removePerk(PerkLib.JobBarbarian); - player.createPerk(PerkLib.JobSwordsman, 0, 0, 0, 0); +public function moonCycleAdjusting():void { + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; doNext(SoulforceCheats); } public function fixingWerewolfFur():void { diff --git a/classes/classes/StatusEffects.as b/classes/classes/StatusEffects.as index 59bb1ec91c..de02e5e5df 100644 --- a/classes/classes/StatusEffects.as +++ b/classes/classes/StatusEffects.as @@ -38,8 +38,12 @@ import classes.StatusEffects.VampireThirstEffect; public static const CampAnemoneTrigger:StatusEffectType = mk("Camp Anemone Trigger"); public static const CampMarble:StatusEffectType = mk("Camp Marble"); public static const CampRathazul:StatusEffectType = mk("Camp Rathazul"); + public static const CampLunaMishaps1:StatusEffectType = mk("Camp Luna Mishaps 1"); + public static const CampLunaMishaps2:StatusEffectType = mk("Camp Luna Mishaps 2"); + public static const CampLunaMishaps3:StatusEffectType = mk("Camp Luna Mishaps 3"); public static const CampSparingNpcsTimers1:StatusEffectType = mk("Camp Sparing Npc's Timers 1"); public static const CampSparingNpcsTimers2:StatusEffectType = mk("Camp Sparing Npc's Timers 2"); + public static const CampSparingNpcsTimers3:StatusEffectType = mk("Camp Sparing Npc's Timers 3"); public static const ClaraCombatRounds:StatusEffectType = mk("Clara Combat Rounds"); public static const ClaraFoughtInCamp:StatusEffectType = mk("Clara Fought In Camp"); public static const CockPumped:StatusEffectType = mk("Cock Pumped"); From 5f1b3d5dc6f289ae8a561655aca965652e58ad6e Mon Sep 17 00:00:00 2001 From: Ormael Date: Wed, 7 Mar 2018 22:16:06 +0100 Subject: [PATCH 10/27] 0.8i2.07 - shield bash req. adjusted, Raiju perk incorect boost fixes (few more), gaunlet fights stats boosting bugfix --- classes/classes/Monster.as | 5 ++++- classes/classes/PerkLib.as | 14 +++++++------- classes/classes/Player.as | 5 +++++ classes/classes/PlayerEvents.as | 4 ++-- .../Areas/HighMountains/TempleOfTheDivine.as | 1 + classes/classes/Scenes/Camp.as | 2 +- classes/classes/Scenes/Camp/CampScenes.as | 4 ++-- classes/classes/Scenes/Changelog.as | 10 +++++----- classes/classes/Scenes/Combat/Combat.as | 2 +- classes/classes/Scenes/Combat/CombatMagic.as | 2 +- classes/classes/Scenes/Combat/MagicSpecials.as | 2 +- classes/classes/Scenes/Combat/PhysicalSpecials.as | 2 +- classes/classes/Scenes/NPCs/LunaFollower.as | 15 +++++++++------ classes/classes/Scenes/Places/HeXinDao.as | 14 ++++++++++++-- 14 files changed, 52 insertions(+), 30 deletions(-) diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index 55098f5342..d2a2402498 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -286,7 +286,10 @@ import flash.utils.getQualifiedClassName; if (findPerk(PerkLib.GclassHeavenTribulationSurvivor) >= 0) temp += (75 * (1 + newGamePlusMod())); //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); - temp += this.level * 10; + temp += this.level * 2; + if (this.level >= 24) temp += this.level * 3; + if (this.level >= 42) temp += this.level * 5; + if (this.level >= 72) temp += this.level * 10; return temp; } diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index 82e405900c..51d9674936 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -3231,23 +3231,23 @@ public class PerkLib // CORRUPTION //------------ //Slot 7 - Corrupted Libido - lust raises 10% slower. - CorruptedLibido.requireCor(25); + CorruptedLibido.requireCor(10); CorruptedLibido.defaultValue1 = 20; //Slot 7 - Seduction (Must have seduced Jojo) - Seduction.requireCor(50); + Seduction.requireCor(15); //Slot 7 - Nymphomania - Nymphomania.requireCor(75) + Nymphomania.requireCor(15) .requirePerk(CorruptedLibido); //Slot 7 - UNFINISHED :3 - Acclimation.requireCor(50) + Acclimation.requireCor(15) .requirePerk(CorruptedLibido) .requireMinLust(20); - SenseCorruption.requireCor(75); + SenseCorruption.requireCor(15); //Tier 1 Corruption Perks - acclimation over-rides - Sadist.requireCor(60) + Sadist.requireCor(20) .requirePerk(CorruptedLibido) .requireLevel(6); - ArousingAura.requireCor(70) + ArousingAura.requireCor(25) .requirePerk(CorruptedLibido) .requireLevel(6); //Tier 2 diff --git a/classes/classes/Player.as b/classes/classes/Player.as index 74a4dcd5e8..9527d2a5bd 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -700,6 +700,11 @@ use namespace CoC; return _jewelry.value; } + //Shields for Bash + public function isShieldsForShieldBash():Boolean + { + return shield == game.shields.BUCKLER || shield == game.shields.GREATSH || shield == game.shields.KITE_SH || shield == game.shields.TRASBUC || shield == game.shields.TOWERSH || shield == game.shields.DRGNSHL || shield == game.shields.SANCTYN || shield == game.shields.SANCTYL || shield == game.shields.SANCTYD; + } //override public function get shields override public function get shieldName():String { return _shield.name; diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index 1c602c88b2..c152f0d6f2 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -150,8 +150,8 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { if (flags[kFLAGS.LUNA_JEALOUSY] < 200) flags[kFLAGS.LUNA_JEALOUSY]++; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12 || flags[kFLAGS.LUNA_FOLLOWER] == 14 || flags[kFLAGS.LUNA_FOLLOWER] == 16) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; + if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11 || flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 15) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); } Begin("PlayerEvents","hourlyCheckRacialPerks"); needNext = hourlyCheckRacialPerks(); diff --git a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as index 3004463f23..d515cdfe09 100644 --- a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as +++ b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as @@ -81,6 +81,7 @@ use namespace CoC; mainmenu(); } private function mainmenu():void { + outputText("\n\nGargoyle Quest progress: " + flags[kFLAGS.GARGOYLE_QUEST] + ""); menu(); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 1) { addButton(0, "Pray", PlayerPrayAtTemple).hint("Offer your prayer to one of the temple altar."); diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index 39a79f738d..d327e988de 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -2269,7 +2269,7 @@ CoC.instance.saves.saveGame(player.slotName); } else if(flags[kFLAGS.SLEEP_WITH] == "Luna" && flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("You head to bed, Luna following you. "); - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { SceneLib.lunaFollower.sleepingFullMoon(); return; } diff --git a/classes/classes/Scenes/Camp/CampScenes.as b/classes/classes/Scenes/Camp/CampScenes.as index 5f84239f84..e4094b97d5 100644 --- a/classes/classes/Scenes/Camp/CampScenes.as +++ b/classes/classes/Scenes/Camp/CampScenes.as @@ -125,7 +125,7 @@ public function PeepingTom3():void { // outputText("As a naga, Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (arianScene.arianFollower() && flags[kFLAGS.ARIAN_VAGINA] > 0 && flags[kFLAGS.ARIAN_COCK_SIZE] == 0) outputText("Arian while formerly a male seems to get along with the other girls.\n\n"); if (flags[kFLAGS.SIDONIE_FOLLOWER] >= 1) { outputText("Sitting on a side of the spring that is spacious enough to accommodate his larger frame, Sidonie lies relaxed, among the girls. Most of them give her not-so subtle glances, some of them at her hefty bosom, but the most directed at the thick equine member dangling from the legs. Not caring too much about their looks, she simply lies and enjoy the bath.\n\n"); @@ -178,7 +178,7 @@ public function HaveAGirlBath():void { // outputText("As a naga Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath. Can’t say this is not welcome.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) { if (flags[kFLAGS.IZMA_NO_COCK] == 0) outputText("While not entirely a girl, Izma is womanly enough that she was still accepted in the bath, her crotch well hidden behind a cloth.\n\n"); else outputText("While she was not always a girl, Izma is womanly enough that she was still accepted in the bath.\n\n"); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 4e741ca879..d7cbc3ba4e 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -94,9 +94,7 @@ package classes.Scenes outputText("Version 0.8i2:\n\n"); outputText("-\n"); outputText("-\n"); - outputText("-\n"); - outputText("-\n"); - outputText("-\n"); + outputText("-Luna can be spared when PC accept her (by loosing in fight or just accepting). In case of simple accepting there would be new option showing up in talk menu after talking with her on Lycantrophy after accpting her that allow voluntary been biten by her. After sparing she can lvl up up to lvl 27.\n"); outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); @@ -104,8 +102,10 @@ package classes.Scenes outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); - outputText("-Feral Whirlwind base dmg increased by 50%. Fly-Whisk price lowered by half.\n"); - outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed\n\n\n\n\n");/*ostatni punkt changelogu + outputText("-Feral Whirlwind base dmg increased by 50%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not jsut any item in shield slot like mana bracer\n"); + outputText("-Attacks using intelligence and wisdom scalling would now use scalling used by attack using str/tou/spe, which mean at stat values above 100 it would be weaker effect.\n"); + outputText("-Req. for perks form corruption tree lowered: Corrupted Libido, Seduction, Nymphomania, Acclimation, Sense Corruption, Sadist, Arousing Aura\n"); + outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed\n\n\n\n\n");/*ostatni punkt changelogu //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index d189458f97..24d71717d0 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -5807,7 +5807,7 @@ public function soulskillMagicalMod():Number { public function soulskillcostmulti():Number { var multiss:Number = 1; - if (soulskillMod() > 1) multiss += Math.round(soulskillMod() - 1) * 10;/* + if (soulskillMod() > 1) multiss += (soulskillMod() - 1) * 0.1;/* if (player.hasPerk(PerkLib.SoulPersonage)) multiss += 1; if (player.hasPerk(PerkLib.SoulWarrior)) multiss += 1; if (player.hasPerk(PerkLib.SoulSprite)) multiss += 1; diff --git a/classes/classes/Scenes/Combat/CombatMagic.as b/classes/classes/Scenes/Combat/CombatMagic.as index 85597129cc..6099d08834 100644 --- a/classes/classes/Scenes/Combat/CombatMagic.as +++ b/classes/classes/Scenes/Combat/CombatMagic.as @@ -2053,7 +2053,7 @@ public class CombatMagic extends BaseCombatContent { if (monster.hasPerk(PerkLib.DarknessVulnerability)) damage *= 0.5; if (monster.hasPerk(PerkLib.LightningNature)) damage *= 0.2; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); damage = Math.round(damage); //if (monster.short == "goo-girl") damage = Math.round(damage * 1.5); - pomyśleć czy bdą dostawać bonusowe obrażenia //if (monster.short == "tentacle beast") damage = Math.round(damage * 1.2); - tak samo przemyśleć czy bedą dodatkowo ranione diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index 031acec5c8..dfd6de6728 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -1127,7 +1127,7 @@ public class MagicSpecials extends BaseCombatContent { if (monster.hasPerk(PerkLib.LightningVulnerability)) damage *= 2; if (monster.hasPerk(PerkLib.DarknessNature)) damage *= 5; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); damage = Math.round(damage); //Shell if(monster.hasStatusEffect(StatusEffects.Shell)) { diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 0988a20547..4ebd372f98 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -223,7 +223,7 @@ public class PhysicalSpecials extends BaseCombatContent { bd.disable("Your golems can't attack flying targets. (Only golems made by grand-master golem maker can do this)"); } } - if (player.shield != ShieldLib.NOTHING) { + if (player.isShieldsForShieldBash()) { bd = buttons.add("Shield Bash", shieldBash).hint("Bash your opponent with a shield. Has a chance to stun. Bypasses stun immunity. \n\nThe more you stun your opponent, the harder it is to stun them again."); bd.requireFatigue(physicalCost(20)); } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index ff17d37942..b3e3bcf8be 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -29,7 +29,7 @@ package classes.Scenes.NPCs { } - //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted + //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted (PC no WW), 13,14 - unchained post moon accepted and talked about lycantrophy (PC no WW), 15,16 - unchained post moon accepted (PC WW) public function lunaAffection(changes:Number = 0):Number { @@ -109,7 +109,6 @@ package classes.Scenes.NPCs else if (model.time.hours <= 18) outputText("afternoon"); else outputText("evening"); outputText(" " + player.mf("Master","Mistress") + ". How can I be of assistance, if any? Just tell me what you may need.\"\n\n"); - outputText("Luna Follower flag: " + flags[kFLAGS.LUNA_FOLLOWER] + "\n\n"); menu(); addButton(0, "Appearance", LunaAppearance); addButton(1, "Talk", talkMenuLuna); @@ -157,7 +156,7 @@ package classes.Scenes.NPCs addButton(3, "Camp", talkMenuLunaCampThoughts); if (flags[kFLAGS.LUNA_FOLLOWER] > 6) addButton(4, "Lycanthropy", talkMenuLunaLycanthropy); else addButtonDisabled(4, "???", "You need to know her better for this."); - if (flags[kFLAGS.LUNA_FOLLOWER] > 10 && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 14) && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); addButton(14, "Back", mainLunaMenu); } public function talkMenuLunaHer():void { @@ -215,6 +214,8 @@ package classes.Scenes.NPCs outputText("\"Well, my hormonal system is totally messed up as the lunar cycle causes me to go into heat.The closer we lycanthropes get to the full moon, the hornier we get, until we all turn into sex crazed beasts willing to go so far as to rape innocent people for a good fuck. That said, sex is not all there is to it. We are all gifted with the ability to change form at will, and I know for a fact that we’re also faster, "); outputText("stronger, and sturdier than any normal morph or human. There is no known permanent cure to lycanthropy. The truth is that, while I could change into something different using transformatives, I think that so long as whatever I transform into is an animal I would still go mad during a full moon. Even worse, my bite can turn about anyone into a lycanthrope the same as me.\"\n\n"); outputText("Guess she really is more than just a cute pup.\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 13; + else flags[kFLAGS.LUNA_FOLLOWER] = 14; lunaJealousy(-50); lunaAffection(2); doNext(camp.returnToCampUseOneHour); @@ -416,7 +417,9 @@ package classes.Scenes.NPCs if (flags[kFLAGS.LUNA_FOLLOWER] == 5) flags[kFLAGS.LUNA_FOLLOWER] = 6; else if (flags[kFLAGS.LUNA_FOLLOWER] == 7) flags[kFLAGS.LUNA_FOLLOWER] = 8; else if (flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 10; - else flags[kFLAGS.LUNA_FOLLOWER] = 12; + else if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 12; + else if (flags[kFLAGS.LUNA_FOLLOWER] == 13) flags[kFLAGS.LUNA_FOLLOWER] = 14; + else flags[kFLAGS.LUNA_FOLLOWER] = 16; outputText("Luna come over to you.\n\n"); outputText("\"" + player.mf("Master","Mistress") + " you haven’t been using my services in some time. I came to remind you that should you need anything, and by that I truly mean anything you desire, all you need to do is call me. It is always my greatest pleasure to serve you.\"\n\n"); outputText("She walk away to prepare today's food and clean which reminds you that you indeed hadn’t had her food in a while.\n\n"); @@ -747,7 +750,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 11; + flags[kFLAGS.LUNA_FOLLOWER] = 15; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -776,7 +779,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 11; + flags[kFLAGS.LUNA_FOLLOWER] = 15; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index ff832628bc..549cf0653f 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -507,6 +507,11 @@ public function soularena():void { monster.createStatusEffect(StatusEffects.NoLoot, 0, 0, 0, 0); monster.XP = Math.round(monster.XP / 2); } + public function gaunletsinbetween():void { + cleanupAfterCombat(); + player.createStatusEffect(StatusEffects.SoulArena, 0, 0, 0, 0); + player.createStatusEffect(StatusEffects.SoulArenaGaunlet, 0, 0, 0, 0); + } public function gaunletchallange1fight1():void { clearOutput(); outputText("You register for the gauntlet challenge then when called, move out beyond the arena gate to face your opponent. The crowd is big, you sure will have quite the audience. A man with a necktie and a weird stick screams across the area.\n\n"); @@ -521,14 +526,16 @@ public function soularena():void { } public function gaunletchallange1fight2():void { clearOutput(); - outputText("As the last of the golem falls down, the commentator resumes.\n\n"); + gaunletsinbetween(); + outputText("As the last of the golem falls down, the commentator resumes.\n\n"); outputText("\"This one is straight from the woods. Freshly caught and horny to boot. Can our champion’s strength overcome the beast’s lust? LET'S FIND OUT!!\"\n\n"); outputText("A shadow moves out behind the gate, revealing the shape of a fluid starved tentacle beast.\n\n"); startCombat(new TentacleBeast()); } public function gaunletchallange1fight3():void { clearOutput(); - outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); + gaunletsinbetween(); + outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); outputText("\"This contestant is smaller than the last two... Smarter too, and most of all extremely deadly. She’s paid a handsome sack of gems daily to kick the ass of anyone who reach this stage, yet is by far the deadliest combatant of her division. She’s your favorite and an expert huntress. Here she comes... Merisiel the dark elf!!!\"\n\n"); outputText("A woman with dark skin walks by the entrance of the arena with only a bow for a weapon. She sure does look like an elf, however. She’s nothing like the gentle creature from your childhood stories as she observes you with a cruel, calculative gaze. The dark elf readies her bow, smirking.\n\n"); startCombat(new DarkElfScout()); @@ -560,6 +567,7 @@ public function soularena():void { } public function gaunletchallange2fight2():void { clearOutput(); + gaunletsinbetween(); outputText("As the goblin falls unconscious to the ground the crowd cheer for you.\n\n"); outputText("\"It would seems the hero squashed that midget good but were only beginning. If I may the next contestant has been sex starved for two consecutive month and is desperate to sow his seed hence now we release... THE HOUND!!!\"\n\n"); outputText("A massive hellhound of proportion larger than normal rush out of an opening gate. Its eye burns with lust.\n\n"); @@ -567,6 +575,7 @@ public function soularena():void { } public function gaunletchallange2fight3():void { clearOutput(); + gaunletsinbetween(); outputText("The mutt fall defeated to the floor as the crowd scream your name. The announcer announce the next contestant.\n\n"); outputText("\"The next opponent is a fighter known and loved by the public. You have heard her name told in shallow whispers for the next opponent is an expert of the terrible art known as BDSM. Yes you have all been waiting for her so cheer up for Malady the drider!!!\"\n\n"); outputText("A drider in bondage suit comes out of the gate and eyes you amused.\n\n"); @@ -575,6 +584,7 @@ public function soularena():void { } public function gaunletchallange2fight4():void { clearOutput(); + gaunletsinbetween(); outputText("As the drider falls defeated the crowd cheer to your victory. That said the battle is far from over yet. A large amount of shadows mass behind the opposite gate and already you can guess what's coming up for you.\n\n"); outputText("\"The final contestant is both a new opponent and a test! The town golemancer has been working extra shifts on these thing she calls her babies!! Using the traditional gargoyle model but deprived of soul so for the purpose of mass production these living weapons will mercilessly beat the hell out of the contestant. Who do you think will win the living or the artificial creation? LEEEEETS FIND OUT!!!!!!\"\n\n"); outputText("A full squad of stone gargoyle pour out of the gate their mace like tail trailing in the sands. Their claws are sharp and their soulless gaze tells you it will end poorly should you lose.\n\n"); From 99b9fd06d9dc41f56e550f4d597f4ea6c554e53e Mon Sep 17 00:00:00 2001 From: Ormael Date: Fri, 9 Mar 2018 21:28:58 +0100 Subject: [PATCH 11/27] 0.8i2.08 - Temple of the Divine/Gargoyle TF fixes, other small fixes --- classes/classes/Character.as | 4 +-- classes/classes/Monster.as | 9 ++--- classes/classes/PerkLib.as | 1 - .../Areas/HighMountains/TempleOfTheDivine.as | 25 ++++++------- classes/classes/Scenes/Areas/Lake.as | 2 +- classes/classes/Scenes/Camp.as | 35 +------------------ classes/classes/Scenes/Changelog.as | 10 +++--- classes/classes/Scenes/Combat/Combat.as | 2 +- classes/classes/Scenes/Dungeons/AnzuPalace.as | 7 ++++ .../classes/Scenes/NPCs/EvangelineFollower.as | 2 +- classes/classes/Scenes/NPCs/LunaFollower.as | 6 ++-- 11 files changed, 39 insertions(+), 64 deletions(-) diff --git a/classes/classes/Character.as b/classes/classes/Character.as index 706a77b9a9..4edb575b9c 100644 --- a/classes/classes/Character.as +++ b/classes/classes/Character.as @@ -607,7 +607,7 @@ import classes.Items.JewelryLib; public override function maxFatigue():Number { - var max:Number = 100; + var max:Number = 150; if (game.player.alicornScore() >= 6) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 20) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 28) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); @@ -837,7 +837,7 @@ import classes.Items.JewelryLib; public override function maxMana():Number { - var max:Number = 100; + var max:Number = 200; if (findPerk(PerkLib.ManaAffinityI) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityII) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityIII) >= 0) max += 35; diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index d2a2402498..a001005300 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -260,7 +260,7 @@ import flash.utils.getQualifiedClassName; protected override function maxLust_base():Number { //Base lust - var temp:Number = 100 + this.bonusLust; + var temp:Number = 70 + this.bonusLust; //Apply perks if (findPerk(PerkLib.BasicSelfControl) >= 0) temp += 15; if (findPerk(PerkLib.HalfStepToImprovedSelfControl) >= 0) temp += 25; @@ -287,9 +287,10 @@ import flash.utils.getQualifiedClassName; //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); temp += this.level * 2; - if (this.level >= 24) temp += this.level * 3; - if (this.level >= 42) temp += this.level * 5; - if (this.level >= 72) temp += this.level * 10; + if (this.level >= 24) temp += (this.level - 23) * 3; + if (this.level >= 42) temp += (this.level - 42) * 5; + if (this.level >= 72) temp += (this.level - 72) * 10; + if (this.level >= 102) temp += (this.level - 102) * 20; return temp; } diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index 51d9674936..f667b46769 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -3123,7 +3123,6 @@ public class PerkLib .requireLib(50) .requireStatusEffect(StatusEffects.KnowsArouse, "Arouse spell"); JobCourtesan.requirePerk(JobSeducer) - .requirePerk(Heroism) .requireLib(50) .requireLevel(12); DazzlingDisplay.requirePerk(JobCourtesan) diff --git a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as index d515cdfe09..94bb8ff32d 100644 --- a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as +++ b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as @@ -82,6 +82,7 @@ use namespace CoC; } private function mainmenu():void { outputText("\n\nGargoyle Quest progress: " + flags[kFLAGS.GARGOYLE_QUEST] + ""); + outputText("\n\nTemple Repair progress: " + flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] + ""); menu(); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 1) { addButton(0, "Pray", PlayerPrayAtTemple).hint("Offer your prayer to one of the temple altar."); @@ -262,11 +263,11 @@ use namespace CoC; if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 150) addButton(1, "Statue of Marae", rebuildStatueOfMarae).hint("Repair the statue."); else addButtonDisabled(1, "Statue of Marae", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) { - if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Repairing the gargoyles on the walls", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); - else addButtonDisabled(2, "Repairing the gargoyles on the walls", "You not have enough stones."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) { + if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Gargoyles", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); + else addButtonDisabled(2, "Gargoyles", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 18) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 17) { if (flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 50 && flags[kFLAGS.CAMP_CABIN_NAILS_RESOURCES] >= 10) addButton(3, "Prayer Bench", makeNewPrayerBenches).hint("Repair some of the temple banches."); else addButtonDisabled(3, "Prayer Bench", "You not have enough wood or/and nails."); } @@ -339,7 +340,7 @@ use namespace CoC; }*/ public function rebuildStatueOfMarae():void { clearOutput(); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 4) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); else outputText("You work for the entire day sculpting stone and repairing the statue of Marae. By the time you're done you can feel divine power radiate from it empowering the entire temple."); flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] -= 150; flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS]++; @@ -378,11 +379,11 @@ use namespace CoC; if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] < 1) outputText("broken altar of Fera. You believe it was damaged way before the demons came in, likely by the priesthood tending the temple."); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] == 1) outputText("Altar of Fera. An aura of depraved lust rise from it, inviting you to unknown pleasure. This altar radiate a clearly demonic aura and dims the sanctity of the temple like an idol."); outputText("\n\nMarae's statue "); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 6) outputText("lies on the ground, its head shattered to pieces"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6) outputText("in the background awaits the worshippers with its serene and compassionate expression"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("lies on the ground, its head shattered to pieces"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5) outputText("in the background awaits the worshippers with its serene and compassionate expression"); outputText(". Lining both walls"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7) { outputText(", many decorative gargoyles are displayed."); if (flags[kFLAGS.ONYX_PATH] < 1) outputText(" While Sapphire is the last living stony guardian of the temple, this still gives off the illusion of a platoon of guardians watching faithfully over this divine place."); if (player.isGargoyle()) outputText(" Your own pedestal stands right next to Sapphire's, allowing you to keep close to her when you need to rest (using your pedestal allows you to sleep with Sapphire if your relation is high enough)."); @@ -393,7 +394,7 @@ use namespace CoC; outputText(" is looking at you expectantly."); } } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 9) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { outputText(" There are " + player.statusEffectv1(StatusEffects.TempleOfTheDivineTracker) + " benches in the temple for the worshipers to sit upon."); } doNext(TempleAltairsRebuildMenu); @@ -1207,11 +1208,11 @@ use namespace CoC; outputText(".\n\nIt's arms "); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with a set of bestial four fingered sharp stone claws"); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("ends with very human fist"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); outputText(". It's legs "); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with clawed bestial feets with three toe at the front and one at the back"); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("are human like"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); outputText(". Its "); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("mace like"); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("axe like"); diff --git a/classes/classes/Scenes/Areas/Lake.as b/classes/classes/Scenes/Areas/Lake.as index 7f5f062142..e954514c0d 100644 --- a/classes/classes/Scenes/Areas/Lake.as +++ b/classes/classes/Scenes/Areas/Lake.as @@ -43,7 +43,7 @@ use namespace CoC; return; } //Diana - if (flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(4) == 0) { + if (player.level >= 3 && flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(10) == 0) { SceneLib.dianaScene.repeatLakeEnc(); return; } diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index d327e988de..0c37d5522b 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -1646,7 +1646,7 @@ private function campActions():void { addButton(5, "Build", campBuildingSim).hint("Check your camp build options."); if (player.hasPerk(PerkLib.JobElementalConjurer) >= 0 || player.hasPerk(PerkLib.JobGolemancer) >= 0) addButton(6, "Winions", campWinionsArmySim).hint("Check your options for making some Winions."); else addButtonDisabled(6, "Winions", "You need to be able to make some minions that fight for you to use this option like elementals or golems..."); - if (player.hasStatusEffect(StatusEffects.KnowsHeal)) addButton(7, "Heal", spellHealcamp).hint("Heal will attempt to use white magic to instantly close your wounds and restore your body. \n\nMana Cost: 30"); + //addButton(7, "Heal", spellHealcamp).hint("Heal. \n\nMana Cost: 30"); //addButton(8, "Craft", kGAMECLASS.crafting.accessCraftingMenu).hint("Craft some items."); if (flags[kFLAGS.CAMP_UPGRADES_FISHERY] >= 1) addButton(8, "Fishery", VisitFishery).hint("Visit Fishery."); addButton(9, "Questlog", questlog.accessQuestlogMainMenu).hint("Check your questlog."); @@ -1739,39 +1739,6 @@ private function RetrieveStack():void { } } -public function spellHealcamp():void { - clearOutput(); - if(player.mana < 30) { - outputText("Your mana is too low to cast this spell."); - doNext(campActions); - return; - } - useMana(30); - var healing:int = combat.scalingBonusIntelligence(); - //healing *= spellMod(); - if (player.unicornScore() >= 5) healing *= ((player.unicornScore() - 4) * 0.5); - if (player.alicornScore() >= 6) healing *= ((player.alicornScore() - 5) * 0.5); - if (player.armorName == "skimpy nurse's outfit") healing *= 1.2; - //Determine if critical heal! - var crit:Boolean = false; - var critHeal:int = 5; - if (player.findPerk(PerkLib.Tactician) >= 0 && player.inte >= 50) critHeal += (player.inte - 50) / 5; - if (rand(100) < critHeal) { - crit = true; - healing *= 1.75; - } - healing = Math.round(healing); - outputText("You chant a magical song of healing and recovery and your wounds start knitting themselves shut in response. (+" + healing + ")."); - if (crit == true) outputText(" *Critical Heal!*"); - HPChange(healing,false); - outputText("\n\n"); - statScreenRefresh(); - flags[kFLAGS.SPELLS_CAST]++; - //spellPerkUnlock(); - doNext(doCamp); - cheatTime(1/12); -} - private function swimInStream():void { var izmaJoinsStream:Boolean = false; var marbleJoinsStream:Boolean = false; diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index d7cbc3ba4e..6c53a2bbd2 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -94,6 +94,8 @@ package classes.Scenes outputText("Version 0.8i2:\n\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); + outputText("-Diana later stages stats adjusted. Also added req. of min. lvl 3 to meet her at lake, lowered encounter chance.\n"); outputText("-Luna can be spared when PC accept her (by loosing in fight or just accepting). In case of simple accepting there would be new option showing up in talk menu after talking with her on Lycantrophy after accpting her that allow voluntary been biten by her. After sparing she can lvl up up to lvl 27.\n"); outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); @@ -102,10 +104,11 @@ package classes.Scenes outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); - outputText("-Feral Whirlwind base dmg increased by 50%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not jsut any item in shield slot like mana bracer\n"); + outputText("-Starting mana cap rised from 100 to 200 and starting fatigue cap from 100 to 150. Feral Whirlwind base dmg increased by 50%. Archery base accuracy increased form 30% to 40%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not just any item in shield slot like mana bracer.\n"); outputText("-Attacks using intelligence and wisdom scalling would now use scalling used by attack using str/tou/spe, which mean at stat values above 100 it would be weaker effect.\n"); outputText("-Req. for perks form corruption tree lowered: Corrupted Libido, Seduction, Nymphomania, Acclimation, Sense Corruption, Sadist, Arousing Aura\n"); - outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed\n\n\n\n\n");/*ostatni punkt changelogu + outputText("-Monsters base lust cap lowered from 100 to 70. Also now they will get a few points to max cap each lvl (at begining 2, then 5, 10, 20).\n"); + outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed, Temple of the Divine rebulding bugfixing, removed req. of Herism perk for perk Job: Countresan, missing Anzu in his Palace\n\n\n\n\n");/*ostatni punkt changelogu //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); @@ -117,8 +120,6 @@ package classes.Scenes outputText("-\n"); outputText("-\n"); outputText("-\n"); - outputText("-\n"); - outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); @@ -131,7 +132,6 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index 24d71717d0..aad6d3e7d0 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -1261,7 +1261,7 @@ public function meleeAccuracy():Number { } public function arrowsAccuracy():Number { - var accmod:Number = 60; + var accmod:Number = 80; if (player.hasPerk(PerkLib.HistoryScout) || player.hasPerk(PerkLib.PastLifeScout)) accmod += 40; if (player.hasPerk(PerkLib.Accuracy1)) { accmod += player.perkv1(PerkLib.Accuracy1); diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace.as b/classes/classes/Scenes/Dungeons/AnzuPalace.as index d61458f1e5..2228124af4 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace.as @@ -135,6 +135,7 @@ use namespace CoC; outputText("\n\nComfortable armchairs, with soft cushions, covered in red velvet provide a good place to rest. On the left part of the room, are several shelves containing books about the story of Mittani and other similar things."); outputText("\n\nTo the east is the hall which connects the rest of the rooms in this floor. In a corner, on the end of the room, leading to the north, a door leads to the baths."); dungeons.setDungeonButtons(roomBathroom, null, null, roomFoyer); + if ((model.time.hours >= 10 && model.time.hours < 13) || model.time.hours == 19) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomBathroom():void { dungeonLoc = 91; @@ -144,6 +145,7 @@ use namespace CoC; outputText("\n\nThe rest of the room is covered with light brown tiles on the floor and the lower part of the walls, and a pattern of golden tiles and gold inlaids on the upper walls, separated by a band of mosaics displaying fish in exotic colors, sea serpents and aquatic monsters of a kind that you can’t recognize."); outputText("\n\nSome lamps around the room keep the bath well illuminated, and a door to the south leads back to living room."); dungeons.setDungeonButtons(null, roomLivingRoom, null, null); + if (model.time.hours == 22) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomDiningRoom():void { dungeonLoc = 92; @@ -153,6 +155,7 @@ use namespace CoC; outputText("\n\nDecorating the corners are vases with violets, whose smell perfumes the air. The columns in golden marble and the colorful decorations in silk hanging from them complete the room atmosphere."); outputText("\n\nTo the north, there is a door that leads to the kitchen. Another, leading to the west, goes back to the principal hall."); dungeons.setDungeonButtons(roomKitchen, null, roomFoyer, null); + if (model.time.hours == 9 || model.time.hours == 14 || model.time.hours == 21) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomKitchen():void { dungeonLoc = 93; @@ -162,6 +165,7 @@ use namespace CoC; outputText("\n\nIn the back of the room, a wooden door leads to the place where Anzu stores food. Inside are grains, bread, cheese, several crates containing wine, and in some containers, wrapped inside snow and ice, are big pieces of meat."); outputText("\n\nThe constant heat from the oven and the stove makes this room as warm as the bedroom or the living room."); dungeons.setDungeonButtons(null, roomDiningRoom, null, null); + if (model.time.hours == 8 || model.time.hours == 13 || model.time.hours == 20) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Floor 2 public function roomHallFloor2():void { @@ -184,6 +188,7 @@ use namespace CoC; outputText("\n\nAnzu’s bed is huge, even for Marethian standards. Soft cushions and linen sheets cover the mattress. The bed itself releases an aromatic smell. You have the temptation of climb in and sleep on it all day."); outputText("\n\nAnother fireplace, smaller than the one in the living room, warms the place atmosphere."); dungeons.setDungeonButtons(null, null, null, roomHallFloor2); + if (model.time.hours <= 7 || model.time.hours >= 23) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomLibrary():void { dungeonLoc = 96; @@ -193,6 +198,7 @@ use namespace CoC; outputText("\n\nOn the end of the place, is Anzu’s private study. A desk, a chair, some bookcases next to it. Nothing extraordinary."); outputText("\n\nTo the south is the exit to the hall, that connects all rooms in the third floor."); dungeons.setDungeonButtons(null, roomHallFloor2, null, null); + if (model.time.hours >= 15 && model.time.hours < 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomMultiuse():void { dungeonLoc = 97; @@ -243,6 +249,7 @@ use namespace CoC; outputText("\n\nThe forest and the snow covered hills extend as far as the eye can see. The fresh air, though cold, bring you a peace which takes you away from the corruption and the horrors of this land for a moment."); dungeons.setDungeonButtons(null, null, null, null); addButton(7, "Downstairs", roomHallFloor3); + if (model.time.hours == 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Basement public function roomBasement():void { diff --git a/classes/classes/Scenes/NPCs/EvangelineFollower.as b/classes/classes/Scenes/NPCs/EvangelineFollower.as index 753de6c789..756c7c6b4e 100644 --- a/classes/classes/Scenes/NPCs/EvangelineFollower.as +++ b/classes/classes/Scenes/NPCs/EvangelineFollower.as @@ -703,7 +703,7 @@ private function recivingCraftedSoulGem():void { clearOutput(); outputText("As you check on Evangeline she hands a purplish crystal to you.\n\n"); outputText("\"Here's your soul gem. Please use this responsibly, they are very hard to craft, and quite dangerous.\"\n\n"); - outputText("Acquired Soul Gem"); + outputText("Acquired Soul Gem\n\n"); if (flags[kFLAGS.GARGOYLE_QUEST] == 3) flags[kFLAGS.GARGOYLE_QUEST]++; player.removeStatusEffect(StatusEffects.SoulGemCrafting); inventory.takeItem(useables.SOULGEM, meetEvangeline); diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index b3e3bcf8be..6fd9624784 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -359,10 +359,10 @@ package classes.Scenes.NPCs lunaAffection(5); HPChange(Math.round(player.maxHP() * .5), true); if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - outputText(" Luna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); + outputText("\nLuna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); menu(); - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(0, "Yes", sexMenuMain); - addButton(0, "No", nurseLunaEnd); + addButton(0, "Yes", sexMenuMain); + addButton(1, "No", nurseLunaEnd); } else doNext(camp.returnToCampUseFourHours); } From f1cbf99de1995f15a47bf93ca03107f68e1f70a6 Mon Sep 17 00:00:00 2001 From: Liadri Date: Sat, 10 Mar 2018 20:00:54 -0500 Subject: [PATCH 12/27] Added Sphinx Added Sphinx --- Corruption-of-Champions-FD-STANDALONE.as3proj | 2 +- classes/classes/Appearance.as | 20 +- classes/classes/BodyParts/Arms.as | 2 +- classes/classes/BodyParts/Ears.as | 1 - classes/classes/BodyParts/Eyes.as | 1 - classes/classes/BodyParts/LowerBody.as | 1 - classes/classes/BodyParts/Tail.as | 2 +- classes/classes/BodyParts/Wings.as | 1 + classes/classes/Character.as | 5 +- classes/classes/CoC.as | 4 +- classes/classes/CockTypesEnum.as | 1 - classes/classes/Creature.as | 53 +- classes/classes/Items/ConsumableLib.as | 1 + .../classes/Items/Consumables/Enigmanium.as | 500 ++++++++++++++++++ .../classes/Items/Consumables/VampireBlood.as | 8 +- classes/classes/Items/Mutations.as | 55 +- classes/classes/Items/MutationsHelper.as | 5 - classes/classes/Items/WeaponLib.as | 4 +- classes/classes/Items/Weapons/FlyWhisk.as | 2 +- classes/classes/Monster.as | 22 +- classes/classes/PerkLib.as | 15 +- classes/classes/Player.as | 77 ++- classes/classes/PlayerAppearance.as | 29 +- classes/classes/PlayerEvents.as | 83 +-- classes/classes/PlayerInfo.as | 7 - classes/classes/Saves.as | 2 +- classes/classes/Scenes/Areas/HighMountains.as | 42 +- .../HighMountains/MinervaPurification.as | 6 +- .../Areas/HighMountains/TempleOfTheDivine.as | 26 +- classes/classes/Scenes/Areas/Lake.as | 2 +- .../classes/Scenes/Areas/Lake/FetishZealot.as | 2 +- classes/classes/Scenes/Camp.as | 91 ++-- classes/classes/Scenes/Camp/CampScenes.as | 4 +- classes/classes/Scenes/Changelog.as | 31 +- classes/classes/Scenes/Combat/Combat.as | 69 +-- classes/classes/Scenes/Combat/CombatMagic.as | 2 +- .../classes/Scenes/Combat/CombatSoulskills.as | 6 - classes/classes/Scenes/Combat/CombatTeases.as | 4 +- classes/classes/Scenes/Combat/CombatUI.as | 2 +- .../classes/Scenes/Combat/MagicSpecials.as | 30 +- .../classes/Scenes/Combat/PhysicalSpecials.as | 16 +- classes/classes/Scenes/DebugMenu.as | 2 +- classes/classes/Scenes/Dungeons/AnzuPalace.as | 7 - .../Scenes/Dungeons/AnzuPalace/AnzuScene.as | 2 +- .../Scenes/Dungeons/D3/LethiceScenes.as | 2 +- classes/classes/Scenes/Holidays.as | 2 +- classes/classes/Scenes/Inventory.as | 12 +- classes/classes/Scenes/Metamorph.as | 3 +- classes/classes/Scenes/NPCs/AmilyScene.as | 17 +- classes/classes/Scenes/NPCs/ChiChiFollower.as | 19 +- classes/classes/Scenes/NPCs/Diana.as | 28 +- classes/classes/Scenes/NPCs/DianaFollower.as | 6 +- classes/classes/Scenes/NPCs/EmberScene.as | 13 - classes/classes/Scenes/NPCs/EtnaFollower.as | 15 - .../classes/Scenes/NPCs/EvangelineFollower.as | 2 +- classes/classes/Scenes/NPCs/HelFollower.as | 13 +- .../Scenes/NPCs/IsabellaFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/IsabellaScene.as | 2 +- classes/classes/Scenes/NPCs/IzmaScene.as | 14 - classes/classes/Scenes/NPCs/JojoScene.as | 12 - classes/classes/Scenes/NPCs/JoyScene.as | 4 +- classes/classes/Scenes/NPCs/KihaFollower.as | 105 ++-- classes/classes/Scenes/NPCs/KihaScene.as | 19 +- classes/classes/Scenes/NPCs/LatexGirl.as | 4 +- classes/classes/Scenes/NPCs/Luna.as | 48 +- classes/classes/Scenes/NPCs/LunaFollower.as | 143 +---- classes/classes/Scenes/NPCs/Rathazul.as | 2 +- .../classes/Scenes/NPCs/ShouldraFollower.as | 2 +- .../Scenes/NPCs/SophieFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/Urta.as | 4 +- classes/classes/Scenes/Places/HeXinDao.as | 38 +- .../Places/HeXinDao/JourneyToTheEast.as | 74 +-- .../Scenes/Places/Prison/TrainingFeeding.as | 2 +- classes/classes/Scenes/Places/TelAdre.as | 2 +- classes/classes/Scenes/Places/TelAdre/Rubi.as | 2 +- classes/classes/Scenes/Pregnancy.as | 2 +- classes/classes/Scenes/SceneLib.as | 3 - classes/classes/Scenes/Soulforce.as | 39 +- classes/classes/StatusEffects.as | 4 - content/coc/NPC/diva.xml | 2 +- 80 files changed, 922 insertions(+), 992 deletions(-) create mode 100644 classes/classes/Items/Consumables/Enigmanium.as diff --git a/Corruption-of-Champions-FD-STANDALONE.as3proj b/Corruption-of-Champions-FD-STANDALONE.as3proj index 5170b5ca75..f56b6cea1a 100644 --- a/Corruption-of-Champions-FD-STANDALONE.as3proj +++ b/Corruption-of-Champions-FD-STANDALONE.as3proj @@ -4,7 +4,7 @@ - + diff --git a/classes/classes/Appearance.as b/classes/classes/Appearance.as index f0a96a1c59..0035080fbf 100644 --- a/classes/classes/Appearance.as +++ b/classes/classes/Appearance.as @@ -2386,7 +2386,6 @@ public class Appearance extends Utils [Skin.DRAGON_SCALES, "dragon scales", "dragon scales", "", true], [Skin.MOSS, "moss", "moss", "", false], [Skin.AQUA_RUBBER_LIKE, "AQUA_RUBBER_LIKE", "slippery rubber-like skin", "", false], - [Skin.FEATHER, "FEATHER", "feather", "", false], [Skin.TATTOED_ONI, "TATTOED_ONI", "tattooed skin", "", false], [Skin.PARTIAL_DRAGON_SCALES, "partial dragon scales", "partial dragon scales", "", true], [Skin.PARTIAL_STONE, "partial stone", "partial stone", "", false], @@ -2495,8 +2494,7 @@ public class Appearance extends Utils [Eyes.ELF, "elf"], [Eyes.RAIJU, "raiju"], [Eyes.GEMSTONES, "gemstones"], - [Eyes.FERAL, "feral"], - [Eyes.GRYPHON, "gryphon"] + [Eyes.FERAL, "feral"] ] ); public static const DEFAULT_EARS_NAMES:Object = createMapFromPairs( @@ -2529,8 +2527,7 @@ public class Appearance extends Utils [Ears.ELVEN, "elven"], [Ears.WEASEL, "weasel"], [Ears.RED_PANDA, "red-panda"], - [Ears.AVIAN, "avian"], - [Ears.GRYPHON, "gryphon"] + [Ears.AVIAN, "avian"] ] ); public static const DEFAULT_HORNS_NAMES:Object = createMapFromPairs( @@ -2574,6 +2571,7 @@ public class Appearance extends Utils [Arms.GARGOYLE_2, "gargoyle"], [Arms.WOLF, "wolf"], [Arms.LION, "lion"], + [Arms.SPHINX, "sphinx"], [Arms.KITSUNE, "kitsune"], [Arms.FOX, "fox"], [Arms.LIZARD, "lizard"], @@ -2587,8 +2585,7 @@ public class Appearance extends Utils [Arms.RAIJU, "raiju"], [Arms.RED_PANDA, "red-panda"], [Arms.CAT, "cat"], - [Arms.AVIAN, "avian"], - [Arms.GRYPHON, "gryphon"] + [Arms.AVIAN, "avian"] ] ); public static const DEFAULT_TAIL_NAMES:Object = createMapFromPairs( @@ -2621,6 +2618,7 @@ public class Appearance extends Utils [Tail.KITSHOO, "kitshoo"], [Tail.MANTIS_ABDOMEN, "mantis abdomen"], [Tail.WOLF, "wolf"], + [Tail.LION, "lion"], [Tail.GARGOYLE, "mace-shaped gargoyle"], [Tail.MANTICORE_PUSSYTAIL, "manticore pussytail"], [Tail.ORCA, "orca"], @@ -2628,8 +2626,7 @@ public class Appearance extends Utils [Tail.RAIJU, "raiju"], [Tail.RED_PANDA, "red-panda"], [Tail.GARGOYLE_2, "axe-shaped gargoyle"], - [Tail.AVIAN, "avian"], - [Tail.GRIFFIN, "griffin"] + [Tail.AVIAN, "avian"] ] ); public static const DEFAULT_WING_NAMES:Object = createMapFromPairs( @@ -2650,6 +2647,7 @@ public class Appearance extends Utils [Wings.DRACONIC_HUGE, "large majestic draconic"], [Wings.FEATHERED_PHOENIX, "phoenix"], [Wings.FEATHERED_ALICORN, "alicorn"], + [Wings.FEATHERED_SPHINX, "sphinx"], [Wings.MANTIS_LIKE_SMALL, "small mantis-like"], [Wings.MANTIS_LIKE_LARGE, "large mantis-like"], [Wings.MANTIS_LIKE_LARGE_2, "two large pairs of mantis-like"], @@ -2682,6 +2680,7 @@ public class Appearance extends Utils [Wings.DRACONIC_HUGE, "large, majestic draconic"], [Wings.FEATHERED_PHOENIX, "large crimson feathered"], [Wings.FEATHERED_ALICORN, "large white feathered"], + [Wings.FEATHERED_SPHINX, "large feathered"], [Wings.MANTIS_LIKE_SMALL, "small mantis-like"], [Wings.MANTIS_LIKE_LARGE, "large mantis-like"], [Wings.MANTIS_LIKE_LARGE_2, "two large pairs of mantis-like"], @@ -2738,8 +2737,7 @@ public class Appearance extends Utils [LowerBody.ELF, "elf"], [LowerBody.RAIJU, "raiju"], [LowerBody.RED_PANDA, "red-panda"], - [LowerBody.AVIAN, "avian"], - [LowerBody.GRYPHON, "gryphon"] + [LowerBody.AVIAN, "avian"] ] ); // diff --git a/classes/classes/BodyParts/Arms.as b/classes/classes/BodyParts/Arms.as index d7c06721d1..f6704e560d 100644 --- a/classes/classes/BodyParts/Arms.as +++ b/classes/classes/BodyParts/Arms.as @@ -28,7 +28,7 @@ public class Arms extends BodyPart { public static const GARGOYLE_2:int = 24; public static const CAT:int = 25; public static const AVIAN:int = 26; - public static const GRYPHON:int = 27; + public static const SPHINX:int = 28; public function Arms() { super(null, null); diff --git a/classes/classes/BodyParts/Ears.as b/classes/classes/BodyParts/Ears.as index faa105a0b2..c3fabbbdf4 100644 --- a/classes/classes/BodyParts/Ears.as +++ b/classes/classes/BodyParts/Ears.as @@ -32,7 +32,6 @@ public class Ears extends BodyPart { public static const VAMPIRE:int = 28; public static const RED_PANDA:int = 29; public static const AVIAN:int = 30; - public static const GRYPHON:int = 31; public function Ears() { super(null, null); diff --git a/classes/classes/BodyParts/Eyes.as b/classes/classes/BodyParts/Eyes.as index 3bd8d3b353..8308ffcba2 100644 --- a/classes/classes/BodyParts/Eyes.as +++ b/classes/classes/BodyParts/Eyes.as @@ -20,7 +20,6 @@ public class Eyes extends BodyPart { public static const VAMPIRE:int = 15; public static const GEMSTONES:int = 16; public static const FERAL:int = 17; - public static const GRYPHON:int = 18; public var colour:String = "brown"; public function Eyes() { diff --git a/classes/classes/BodyParts/LowerBody.as b/classes/classes/BodyParts/LowerBody.as index 54b426a5ea..3f391c8047 100644 --- a/classes/classes/BodyParts/LowerBody.as +++ b/classes/classes/BodyParts/LowerBody.as @@ -50,7 +50,6 @@ public class LowerBody extends SaveableBodyPart { public static const RED_PANDA:int = 42; public static const GARGOYLE_2:int = 43; public static const AVIAN:int = 44; - public static const GRYPHON:int = 45; override public function set type(value:int):void { super.type = value; diff --git a/classes/classes/BodyParts/Tail.as b/classes/classes/BodyParts/Tail.as index 68d6ac5f72..99003e0516 100644 --- a/classes/classes/BodyParts/Tail.as +++ b/classes/classes/BodyParts/Tail.as @@ -50,7 +50,7 @@ public class Tail extends SaveableBodyPart { public static const RED_PANDA:int = 34; public static const GARGOYLE_2:int = 35; public static const AVIAN:int = 36; - public static const GRIFFIN:int = 37; + public static const LION:int = 38; override public function set type(value:int):void { var old:int = type; diff --git a/classes/classes/BodyParts/Wings.as b/classes/classes/BodyParts/Wings.as index b06f37dbeb..fa2e473c84 100644 --- a/classes/classes/BodyParts/Wings.as +++ b/classes/classes/BodyParts/Wings.as @@ -29,6 +29,7 @@ public class Wings extends BodyPart { public static const FEY_DRAGON_WINGS:int = 26; public static const FEATHERED_AVIAN:int = 27; public static const NIGHTMARE:int = 28; + public static const FEATHERED_SPHINX:int = 29; public var desc:String = "non-existant"; public function Wings() { diff --git a/classes/classes/Character.as b/classes/classes/Character.as index 4edb575b9c..d20f52be7f 100644 --- a/classes/classes/Character.as +++ b/classes/classes/Character.as @@ -607,7 +607,7 @@ import classes.Items.JewelryLib; public override function maxFatigue():Number { - var max:Number = 150; + var max:Number = 100; if (game.player.alicornScore() >= 6) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 20) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 28) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); @@ -672,7 +672,6 @@ import classes.Items.JewelryLib; if (game.player.alicornScore() >= 6) max += (150 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (game.player.unicornScore() >= 5) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (hasPerk(PerkLib.DemonicLethicite)) max += Math.round(lib); - if (hasPerk(PerkLib.Metamorph)) max += 50; if (flags[kFLAGS.SOUL_CULTIVATION] >= 2) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 3) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 4) max += 30; @@ -837,7 +836,7 @@ import classes.Items.JewelryLib; public override function maxMana():Number { - var max:Number = 200; + var max:Number = 100; if (findPerk(PerkLib.ManaAffinityI) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityII) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityIII) >= 0) max += 35; diff --git a/classes/classes/CoC.as b/classes/classes/CoC.as index aad7a3f8a8..af1dda889e 100644 --- a/classes/classes/CoC.as +++ b/classes/classes/CoC.as @@ -247,8 +247,8 @@ public class CoC extends MovieClip //model.debug = debug; // TODO: Set on model? //Version NUMBER - ver = "1.0.2_mod_Xianxia_0.8i2"; - version = ver + " ()"; + ver = "1.0.2_mod_Xianxia_0.8i"; + version = ver + " (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes))"; this.images = new ImageManager(stage, mainView); this.inputManager = new InputManager(stage, mainView, false); diff --git a/classes/classes/CockTypesEnum.as b/classes/classes/CockTypesEnum.as index 9546405828..20c33a3842 100644 --- a/classes/classes/CockTypesEnum.as +++ b/classes/classes/CockTypesEnum.as @@ -49,7 +49,6 @@ package classes public static const WOLF:CockTypesEnum = new CockTypesEnum("mammal"); public static const STAMEN:CockTypesEnum = new CockTypesEnum("plant"); public static const RED_PANDA:CockTypesEnum = new CockTypesEnum("mammal"); - public static const GRYPHON:CockTypesEnum = new CockTypesEnum("avian"); public static const UNDEFINED:CockTypesEnum = new CockTypesEnum(""); function CockTypesEnum(i_group:String = "") { _group = i_group; } diff --git a/classes/classes/Creature.as b/classes/classes/Creature.as index 7521618b60..a4407059f3 100644 --- a/classes/classes/Creature.as +++ b/classes/classes/Creature.as @@ -2293,11 +2293,6 @@ public class Creature extends Utils return countCocksOfType(CockTypesEnum.AVIAN); } - public function gryphonCocks():int { //How many gryphoncocks? - return countCocksOfType(CockTypesEnum.GRYPHON); - } - - public function findFirstCockType(ctype:CockTypesEnum):Number { var index:Number = 0; @@ -2970,38 +2965,34 @@ public class Creature extends Utils public function canOvipositSpider():Boolean { return eggs() >= 10 && findPerk(PerkLib.SpiderOvipositor) >= 0 && isDrider() && tail.type == Tail.SPIDER_ADBOMEN; + } public function canOvipositBee():Boolean { return eggs() >= 10 && findPerk(PerkLib.BeeOvipositor) >= 0 && tail.type == Tail.BEE_ABDOMEN; - } - public function canOvipositMantis():Boolean - { - return eggs() >= 10 && findPerk(PerkLib.MantisOvipositor) >= 0 && tail.type == Tail.MANTIS_ABDOMEN; } public function canOviposit():Boolean { - return canOvipositSpider() || canOvipositBee() || canOvipositMantis(); + return canOvipositSpider() || canOvipositBee(); + } public function eggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv1(PerkLib.SpiderOvipositor); - else if (findPerk(PerkLib.BeeOvipositor) >= 0) - return perkv1(PerkLib.BeeOvipositor); else - return perkv1(PerkLib.MantisOvipositor); + return perkv1(PerkLib.BeeOvipositor); } public function addEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3010,24 +3001,18 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else if (findPerk(PerkLib.BeeOvipositor) >= 0) { + else { addPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } - else { - addPerkValue(PerkLib.MantisOvipositor, 1, arg); - if (eggs() > 50) - setPerkValue(PerkLib.MantisOvipositor, 1, 50); - return perkv1(PerkLib.MantisOvipositor); - } } } public function dumpEggs():void { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return; setEggs(0); //Sets fertile eggs = regular eggs (which are 0) @@ -3036,7 +3021,7 @@ public class Creature extends Utils public function setEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3045,43 +3030,33 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else if (findPerk(PerkLib.BeeOvipositor) >= 0) { + else { setPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } - else { - setPerkValue(PerkLib.MantisOvipositor, 1, arg); - if (eggs() > 50) - setPerkValue(PerkLib.MantisOvipositor, 1, 50); - return perkv1(PerkLib.MantisOvipositor); - } } } public function fertilizedEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv2(PerkLib.SpiderOvipositor); - else if (findPerk(PerkLib.BeeOvipositor) >= 0) - return perkv2(PerkLib.BeeOvipositor); else - return perkv2(PerkLib.MantisOvipositor); + return perkv2(PerkLib.BeeOvipositor); } public function fertilizeEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) setPerkValue(PerkLib.SpiderOvipositor, 2, eggs()); - else if (findPerk(PerkLib.BeeOvipositor) >= 0) - setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); else - setPerkValue(PerkLib.MantisOvipositor, 2, eggs()); + setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); return fertilizedEggs(); } diff --git a/classes/classes/Items/ConsumableLib.as b/classes/classes/Items/ConsumableLib.as index 6ea06bca11..f8cbe72dcf 100644 --- a/classes/classes/Items/ConsumableLib.as +++ b/classes/classes/Items/ConsumableLib.as @@ -193,6 +193,7 @@ public final class ConsumableLib extends BaseContent //TRANSFORMATIVE ITEMS public const ABYSSIN:SimpleConsumable = mk("AbyssIn", "AbyssalInk", "a vial of abyssal ink", 10, "Pitch black ink normaly used for writing consuming this doesnt seem like the best idea.", curry(m.scyllaInk, 3)); public const ALICORN:AbstractEquinum = new AbstractEquinum(2, "Alicorn", "Alicornum", "a vial of Alicornum", 200, "This is a long flared vial with a small label that reads, \"Alicornum\". It is likely this potion is tied to alicorns in some way."); + public const ENIGMANIUM:Enigmanium = new Enigmanium(); public const AQUSEED:SimpleConsumable = mk("AquSeed", "AquaSeed", "an aqua seed", 20, "This seed looks and smells absolutely delicious. Though it has an unusual color, the harpies prize these nuts as delicious treats. Eating one might induce some physical transformations.", curry(m.goldenSeed, 0)); public const B_GOSSR:SimpleConsumable = mk("B.Gossr", "B.Gossr", "a bundle of black, gossamer webbing", 6, "These strands of gooey black gossamer seem quite unlike the normal silk that driders produce. It smells sweet and is clearly edible, but who knows what it might do to you?", curry(m.sweetGossamer, 1)); public const BEEHONY:BeeHoney = new BeeHoney(false, false); diff --git a/classes/classes/Items/Consumables/Enigmanium.as b/classes/classes/Items/Consumables/Enigmanium.as new file mode 100644 index 0000000000..e8d2b198cb --- /dev/null +++ b/classes/classes/Items/Consumables/Enigmanium.as @@ -0,0 +1,500 @@ +/** + * Coded by Liadri on 03.10.2018. + */ +package classes.Items.Consumables { +import classes.Appearance; +import classes.BodyParts.Antennae; +import classes.BodyParts.Arms; +import classes.BodyParts.Ears; +import classes.BodyParts.Eyes; +import classes.BodyParts.Face; +import classes.BodyParts.Gills; +import classes.BodyParts.Hair; +import classes.BodyParts.Horns; +import classes.BodyParts.LowerBody; +import classes.BodyParts.RearBody; +import classes.BodyParts.Skin; +import classes.BodyParts.Tail; +import classes.BodyParts.Tongue; +import classes.BodyParts.Wings; +import classes.CoC_Settings; +import classes.CockTypesEnum; +import classes.EngineCore; +import classes.Items.Consumable; +import classes.PerkLib; +import classes.StatusEffects; +import classes.VaginaClass; + +public class Enigmanium extends Consumable{ + public function Enigmanium() { + super("Enigmanium", "Enigmanium", "a vial of Enigmanium", 20, "This strange brew crafted by Evangeline combine harpy, cat, human and centaur traits. Supposedly it could allow you to become a sphinx."); + } + public override function useItem():Boolean { + var choice:int; + var changes:Number = 0; + var changeLimit:Number = 1; + var temp2:Number = 0; + var temp3:Number = 0; + if (rand(2) == 0) changeLimit++; + if (rand(2) == 0) changeLimit++; + if (rand(3) == 0) changeLimit++; + if (player.findPerk(PerkLib.HistoryAlchemist) >= 0 || player.findPerk(PerkLib.PastLifeAlchemist) >= 0) changeLimit++; + if (player.findPerk(PerkLib.EzekielBlessing) >= 0) changeLimit++; + if (player.findPerk(PerkLib.TransformationResistance) >= 0) changeLimit--; + //Text go! + clearOutput(); + outputText("You chug down the potion pinching your nose and hoping for the best. Knowledge flood your mind. Hey you could as well get to making riddles as a pastime."); + + //Speed raises up to 75 + if (player.spe < 75 && rand(3) == 0 && changes < changeLimit) { + //low speed + if (player.spe <= 30) { + outputText("\n\nYou feel... more balanced, sure of step. You're certain that you've become just a little bit faster."); + dynStats("spe", 2); + } + //medium speed + else if (player.spe <= 60) { + outputText("\n\nYou stumble as you shift position, surprised by how quickly you move. After a moment or two of disorientation, you adjust. You're certain that you can run faster now."); + dynStats("spe", 1); + } + //high speed + else { + outputText("\n\nYou pause mid-step and crouch. Your leg muscles have cramped up like crazy. After a few moments, the pain passes and you feel like you could chase anything down."); + dynStats("spe", .5); + } + changes++; + } + //Strength raises to 80 + if (player.str < 80 && rand(3) == 0 && changes < changeLimit) { + if (rand(2) == 0) outputText("\n\nYour muscles feel taut, like a coiled spring, and a bit more on edge."); + else outputText("\n\nYou arch your back as your muscles clench painfully. The cramp passes swiftly, leaving you feeling like you've gotten a bit stronger."); + dynStats("str", 1); + changes++; + } + //Toughness drops if over 50 + //Does not add to change total + if (player.tou > 50 && rand(2) == 0) { + outputText("\n\nYour body seems to compress momentarily, becoming leaner and noticeably less tough."); + dynStats("tou", -2); + } + //IntelliWisGain + if (player.inte < 100 && rand(4) == 0 && changes < changeLimit) { + outputText("\n\nThousands of glowing symbols, hieroglyphics you remember them being denoted as, appear in vast arrays in your mind. Miraculously, you can make sense of them, as if they were in your own language. Shifting them, you giggle to yourself as you begin crafting a riddle that will surely baffle great minds. The visions end, and you feel incredibly enlightened! Is this how Sanurah feels?"); + dynStats("int", 2); + dynStats("wis", 2); + changes++; + } + + + //Libido gain + if (player.lib < 80 && changes < changeLimit && rand(4) == 0) { + //Cat dicked folks + if (player.catCocks() > 0) { + choice = player.findFirstCockType(CockTypesEnum.CAT); + outputText("\n\nYou feel your [cock] growing hard, the barbs becoming more sensitive. You gently run your hands down them and imagine the feeling of raking the insides of a cunt as you pull. The fantasy continues, and after ejaculating and hearing the female yowl with pleasure, you shake your head and try to drive off the image. "); + if (player.cor < 33) outputText("You need to control yourself better."); + else if (player.cor < 66) outputText("You're not sure how you feel about the fantasy."); + else outputText("You hope to find a willing partner to make this a reality."); + } + //Else – + else { + outputText("\n\nA rush of tingling warmth spreads through your body as it digests the fruit. You can feel your blood pumping through your extremities, making them feel sensitive and surprisingly sensual. It's going to be hard to resist getting "); + if (player.lust > 60) outputText("even more "); + outputText("turned on."); + } + dynStats("lib", 1, "sen", .25); + changes++; + } + + //Mare + if (player.gender == 2 || player.gender == 3) { + //Single vag + if (player.vaginas.length == 1) { + if (player.vaginas[0].vaginalLooseness <= VaginaClass.LOOSENESS_GAPING && changes < changeLimit && rand(2) == 0) { + outputText("\n\nYou grip your gut in pain as you feel your organs shift slightly. When the pressure passes, you realize your [vagina] has grown larger, in depth AND size."); + player.vaginas[0].vaginalLooseness++; + changes++; + } + if (player.vaginas[0].vaginalWetness <= VaginaClass.WETNESS_NORMAL && changes < changeLimit && rand(2) == 0) { + outputText("\n\nYour [vagina] moistens perceptably, giving off an animalistic scent."); + player.vaginas[0].vaginalWetness++; + changes++; + } + } + //Multicooch + else { + //determine least wet + //temp - least wet + //temp2 - saved wetness + //temp3 - counter + temp = 0; + temp2 = player.vaginas[temp].vaginalWetness; + temp3 = player.vaginas.length; + while (temp3 > 0) { + temp3--; + if (temp2 > player.vaginas[temp3].vaginalWetness) { + temp = temp3; + temp2 = player.vaginas[temp].vaginalWetness; + } + } + if (player.vaginas[temp].vaginalWetness <= VaginaClass.WETNESS_NORMAL && changes < changeLimit && rand(2) == 0) { + outputText("\n\nOne of your " + Appearance.vaginaDescript(player,temp) + " moistens perceptably, giving off an animalistic scent."); + player.vaginas[temp].vaginalWetness++; + changes++; + } + //determine smallest + //temp - least big + //temp2 - saved looseness + //temp3 - counter + temp = 0; + temp2 = player.vaginas[temp].vaginalLooseness; + temp3 = player.vaginas.length; + while (temp3 > 0) { + temp3--; + if (temp2 > player.vaginas[temp3].vaginalLooseness) { + temp = temp3; + temp2 = player.vaginas[temp].vaginalLooseness; + } + } + if (player.vaginas[0].vaginalLooseness <= VaginaClass.LOOSENESS_GAPING && changes < changeLimit && rand(2) == 0) { + outputText("\n\nYou grip your gut in pain as you feel your organs shift slightly. When the pressure passes, you realize one of your " + Appearance.vaginaDescript(player,temp) + " has grown larger, in depth AND size."); + player.vaginas[temp].vaginalLooseness++; + changes++; + } + } + if (player.statusEffectv2(StatusEffects.Heat) < 30 && rand(2) == 0 && changes < changeLimit) { + if (player.goIntoHeat(true)) { + changes++; + } + } + } + //Mare-gina + //classic horse-taur version + if (changes < changeLimit && rand(2) == 0 && player.lowerBody == LowerBody.CAT && player.lowerBody != LowerBody.GARGOYLE && !player.isTaur()) { + changes++; + outputText("\n\nImmense pain overtakes you as you feel your backbone snap. The agony doesn't stop, blacking you out as your spine lengthens, growing with new flesh from your backside as the bones of your legs flex and twist. Muscle groups shift and rearrange themselves as the change completes, the pain dying away as your consciousness returns. You now have the lower body of a centaur."); + if (player.gender > 0) { + outputText(" After taking a moment to get used to your new body, you notice that your genitals now reside between the back legs on your centaur body."); + } + dynStats("spe", 3); + mutations.setLowerBody(LowerBody.CAT); + player.legCount = 4; + } + + //Increase player's breast size, if they are big FF or smaller + if (player.smallestTitSize() <= 14 && player.gender >= 2 && changes < changeLimit && rand(4) == 0) { + outputText("\n\nAfter eating it, your chest aches and tingles, and your hands reach up to scratch at it unthinkingly. Silently, you hope that you aren't allergic to it. Just as you start to scratch at your " + player.breastDescript(player.smallestTitRow()) + ", your chest pushes out in slight but sudden growth."); + player.breastRows[player.smallestTitRow()].breastRating++; + changes++; + } + + if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; + //Sexual changes would go here if I wasn't a tard. + //Heat + if (rand(4) == 0 && changes < changeLimit) + { + var intensified:Boolean = player.inHeat; + + if (player.goIntoHeat(false)) + { + if (intensified) + { + if (rand(2) == 0) outputText("\n\nThe itch inside your [vagina] is growing stronger, and you desperately want to find a nice cock to massage the inside."); + else outputText("\n\nThe need inside your [vagina] grows even stronger. You desperately need to find a mate to 'scratch your itch' and fill your womb with kittens. It's difficult NOT to think about a cock slipping inside your moist fuck-tunnel, and at this point you'll have a hard time resisting ANY male who approaches."); + } + else + { + outputText("\n\nThe interior of your [vagina] clenches tightly, squeezing with reflexive, aching need. Your skin flushes hot "); + if (player.hasFur()) outputText("underneath your fur "); + outputText("as images and fantasies "); + if (player.cor < 50) outputText("assault "); + else outputText("fill "); + outputText(" your mind. Lithe cat-boys with their perfect, spine-covered cocks line up behind you, and you bend over to present your needy pussy to them. You tremble with the desire to feel the exotic texture of their soft barbs rubbing your inner walls, smearing your [vagina] with their cum as you're impregnated. Shivering, you recover from the fantasy and pull your fingers from your aroused sex. It would seem you've gone into heat!"); + } + changes++; + } + } + + //Wings + if (player.wings.type == Wings.NONE && changes < changeLimit && player.arms.type == Arms.SPHINX && rand(4) == 0) { + outputText("\n\nPain lances through your back, the muscles knotting oddly and pressing up to bulge your [skin.type]. It hurts, oh gods does it hurt, but you can't get a good angle to feel at the source of your agony. A loud crack splits the air, and then your body is forcing a pair of narrow limbs through a gap in your [armor]. Blood pumps through the new appendages, easing the pain as they fill out and grow. Tentatively, you find yourself flexing muscles you didn't know you had, and you're able to curve the new growths far enough around to behold your brand new, [haircolor] wings."); + mutations.setWingType(Wings.FEATHERED_SPHINX, "large crimson feathered"); + changes++; + } + //Remove old wings + if (player.wings.type != Wings.FEATHERED_SPHINX && player.wings.type > Wings.NONE && player.lowerBody != LowerBody.GARGOYLE && changes < changeLimit && rand(4) == 0) { + mutations.removeWings(); + changes++; + } + + + //generic version + if (player.lowerBody != LowerBody.CAT && player.lowerBody != LowerBody.GARGOYLE && !player.isTaur()) { + if (changes < changeLimit && rand(3) == 0) { + changes++; + //else if (player.lowerBody == DOG) outputText("\n\nYou stagger as your paws change, curling up into painful angry lumps of flesh. They get tighter and tighter, harder and harder, until at last they solidify into hooves!"); + if (player.lowerBody == LowerBody.NAGA || player.lowerBody == LowerBody.SCYLLA) { + if (player.lowerBody == LowerBody.NAGA) { + outputText("\n\nYou collapse as your sinuous snake-tail tears in half, shifting into legs. The pain is immense, particularly in your new feet as they transform into paws!"); + } + if (player.lowerBody == LowerBody.SCYLLA) { + outputText("\n\nYou collapse as your tentacle legs starts to merge in pairs, shifting into legs. The pain is immense, particularly in your new feet as they transform into paws!"); + } + mutations.setLowerBody(LowerBody.CAT); + } + //Catch-all + else { + if (player.lowerBody == LowerBody.HUMAN) + mutations.setLowerBody(LowerBody.CAT); + outputText("\n\nImmense pain overtakes you as you feel your backbone snap. The agony doesn't stop, blacking you out as your spine lengthens, growing with new flesh from your backside as the bones of your legs flex and twist. Muscle groups shift and rearrange themselves as the change completes, the pain dying away as your consciousness returns. You now have the lower body of a lion!"); + } + if (player.gender > 0) + outputText(" After taking a moment to get used to your new body, you notice that your genitals now reside between the hind legs of your body."); + dynStats("spe", 3); + //outputText(" A coat of beastial fur springs up below your waist, itching as it fills in. You now have paws in place of your feet!"); + player.legCount = 4; + //dynStats("cor", 0); + changes++; + } + } + + //Human skin + if (player.tailType == Tail.CAT && !player.hasPlainSkinOnly() && !player.isGargoyle() && changes < changeLimit && rand(4) == 0) { + mutations.humanizeSkin(); + changes++; + } + + //Cat dangly-doo. + if (player.cockTotal() > 0 && player.catCocks() < player.cockTotal() && (player.ears.type == Ears.LION || rand(3) > 0) && (player.tailType == Tail.CAT || rand(3) > 0) && changes < changeLimit && rand(4) == 0) { + //loop through and find a non-cat wang. + for (var i:Number = 0; i < (player.cockTotal()) && player.cocks[i].cockType == CockTypesEnum.CAT; i++) { } + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum. "); + if (!player.hasSheath()) { + outputText("Then, it begins to shrink and sucks itself inside your body. Within a few moments, a fleshy sheath is formed."); + if (player.balls > 0) outputText(" Thankfully, your balls appear untouched."); + } + else outputText("Then, it disappears back into your sheath."); + player.cocks[i].cockType = CockTypesEnum.CAT; + player.cocks[i].knotMultiplier = 1; + changes++; + } + + //If cocks that aren't horsified! + if ((player.catCocks() + player.demonCocks()) < player.cocks.length) { + //Transform a cock and store it's index value to talk about it. + //Single cock + if (player.cocks.length == 1) { + var temp:int = 0; + //Use temp3 to track whether or not anything is changed. + temp3 = 0; + if (player.cocks[0].cockType == CockTypesEnum.HUMAN) { + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + temp = player.addHorseCock(); + temp2 = player.increaseCock(temp, rand(4) + 4); + temp3 = 1; + dynStats("lib", 5, "sen", 4, "lus", 35); + } + if (player.cocks[0].cockType == CockTypesEnum.DOG) { + temp = player.addHorseCock(); + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + temp2 = player.increaseCock(temp, rand(4) + 4); + temp3 = 1; + dynStats("lib", 5, "sen", 4, "lus", 35); + } + if (player.cocks[0].cockType == CockTypesEnum.TENTACLE) { + temp = player.addHorseCock(); + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + temp2 = player.increaseCock(temp, rand(4) + 4); + temp3 = 1; + dynStats("lib", 5, "sen", 4, "lus", 35); + } + if (player.cocks[0].cockType.Index > 4) { + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + temp = player.addHorseCock(); + temp2 = player.increaseCock(temp, rand(4) + 4); + temp3 = 1; + dynStats("lib", 5, "sen", 4, "lus", 35); + } + if (temp3 == 1) outputText(" Your penis has transformed into a Cat's!"); + } + //MULTICOCK + else { + dynStats("lib", 5, "sen", 4, "lus", 35); + temp = player.addHorseCock(); + outputText("\n\nOne of your penises begins to feel strange. You pull down your clothes to take a look and see your [cock] swells up with near-painful arousal and begin to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum.."); + if (temp == -1) { + CoC_Settings.error(""); + clearOutput(); + outputText("FUKKKK ERROR NO COCK XFORMED"); + } + //Already have a sheath + if (player.horseCocks() > 1 || player.dogCocks() > 0) outputText(" Your sheath tingles and begins growing larger as the cock's base shifts to lie inside it."); + else outputText(" You feel a tightness near the base where your skin seems to be bunching up. A sheath begins forming around your " + player.cockDescript(temp) + "'s root, tightening and pulling your " + player.cockDescript(temp) + " inside its depths."); + temp2 = player.increaseCock(temp, rand(4) + 4); + outputText(" The shaft suddenly explodes with movement, growing longer and turning pink as it begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible."); + outputText(" You now have a horse-cock."); + } + //Make cock thicker if not thick already! + if (player.cocks[temp].cockThickness <= 2) player.cocks[temp].thickenCock(1); + changes++; + } + //Players cocks are all horse-type - increase size! + else { + //single cock + if (player.cocks.length == 1) { + temp2 = player.increaseCock(0, rand(3) + 1); + temp = 0; + dynStats("sen", 1, "lus", 10); + } + //Multicock + else { + //Find smallest cock + //Temp2 = smallness size + //temp = current smallest + temp3 = player.cocks.length; + temp = 0; + while (temp3 > 0) { + temp3--; + //If current cock is smaller than saved, switch values. + if (player.cocks[temp].cockLength > player.cocks[temp3].cockLength) { + temp2 = player.cocks[temp3].cockLength; + temp = temp3; + } + } + //Grow smallest cock! + //temp2 changes to growth amount + temp2 = player.increaseCock(temp, rand(4) + 1); + dynStats("sen", 1, "lus", 10); + } + outputText("\n\n"); + if (temp2 > 2) outputText("Your " + player.cockDescript(temp) + " tightens painfully, inches of taut horse-flesh pouring out from your sheath as it grows longer. Thick animal-pre forms at the flared tip, drawn out from the pleasure of the change."); + if (temp2 > 1 && temp2 <= 2) outputText("Aching pressure builds within your sheath, suddenly releasing as an inch or more of extra dick flesh spills out. A dollop of pre beads on the head of your enlarged " + player.cockDescript(temp) + " from the pleasure of the growth."); + if (temp2 <= 1) outputText("A slight pressure builds and releases as your " + player.cockDescript(temp) + " pushes a bit further out of your sheath."); + changes++; + } + //Chance of thickness + daydream + if (rand(2) == 0 && changes < changeLimit && player.horseCocks() > 0) { + temp3 = 0; + temp2 = player.cocks.length; + while (temp2 > 0) { + temp2--; + if (player.cocks[temp2].cockThickness <= player.cocks[temp3].cockThickness) { + temp3 = temp2; + } + } + temp = temp3; + player.cocks[temp].thickenCock(.5); + outputText("\n\nYour " + Appearance.cockNoun(CockTypesEnum.CAT) + " thickens inside its sheath, growing larger and fatter as your veins thicken, becoming more noticeable. It feels right"); + if (player.cor + player.lib < 60) outputText(" to have such a splendid tool. You idly daydream about cunts and pussies, your " + Appearance.cockNoun(CockTypesEnum.CAT) + " plowing them relentlessly, stuffing them pregnant with cum"); + if (player.cor + player.lib >= 60 && player.cor + player.lib < 100) outputText(" to be this way... You breath the powerful animalistic scent and fantasize about fucking catgirls and centaurs night and day until their bellies slosh with your cum"); + if (player.cor + player.lib >= 100 && player.cor + player.lib <= 175) outputText(" to be a rutting stud. You ache to find a catgirl in heat to breed with. Longing to spend your evenings plunging a " + Appearance.cockNoun(CockTypesEnum.CAT) + " deep into their passages, dumping load after load of your thick animal-cum into them. You'd be happy just fucking cunt morning, noon, and night."); + if (player.cor + player.lib > 175) outputText(" Your " + Appearance.cockNoun(CockTypesEnum.CAT) + " is perfect for fucking about anything that is a cat or a horse. You imagine the feel of plowing an equine pussy deeply, bottoming out and unloading sticky jets of horse-jizz into its fertile womb. Your hand strokes your cat cock of its own accord, musky pre dripping from the spiked tip with each stroke. Your mind wanders to the thought of you with a harem of pregnant cat or centaurs."); + outputText("."); + if (player.cor < 30) outputText(" You shudder in revulsion at the strange thoughts and vow to control yourself better."); + if (player.cor >= 30 && player.cor < 60) outputText(" You wonder why you thought such odd things, but they have a certain appeal."); + if (player.cor >= 60 && player.cor < 90) outputText(" You relish your twisted fantasies, hoping to dream of them again."); + if (player.cor >= 90) outputText(" You flush hotly and give a twisted smile, resolving to find a fitting subject to rape and relive your fantasies."); + dynStats("lib", .5, "lus", 10); + } + //Chance of ball growth if not 3" yet + if (rand(2) == 0 && changes < changeLimit && player.ballSize <= 3 && player.horseCocks() > 0) { + if (player.balls == 0) { + player.balls = 2; + player.ballSize = 1; + outputText("\n\nA nauseating pressure forms just under the base of your maleness. With agonizing pain the flesh bulges and distends, pushing out a rounded lump of flesh that you recognize as a testicle! A moment later relief overwhelms you as the second drops into your newly formed sack."); + dynStats("lib", 2, "lus", 5); + } + else { + player.ballSize++; + if (player.ballSize <= 2) outputText("\n\nA flash of warmth passes through you and a sudden weight develops in your groin. You pause to examine the changes and your roving fingers discover your " + Appearance.ballsDescription(false, true, player) + " have grown larger than a human's."); + if (player.ballSize > 2) outputText("\n\nA sudden onset of heat envelops your groin, focusing on your [sack]. Walking becomes difficult as you discover your " + Appearance.ballsDescription(false, true, player) + " have enlarged again."); + dynStats("lib", 1, "lus", 3); + } + changes++; + } + + //Body type changes. Teh rarest of the rare. + //DA EARZ + if (player.ears.type != Ears.LION && player.tailType != Tail.GARGOYLE && rand(4) == 0 && changes < changeLimit) { + //human to lion: + if (player.ears.type == Ears.HUMAN) { + if (rand(2) == 0) outputText("\n\nThe skin on the sides of your face stretches painfully as your ears migrate upwards, towards the top of your head. They shift and elongate a little, fur growing on them as they become feline in nature. You now have cat ears."); + else outputText("\n\nYour ears begin to tingle. You reach up with one hand and gently rub them. They appear to be growing fur. Within a few moments, they've migrated up to the top of your head and increased in size. The tingling stops and you find yourself hearing noises in a whole new way. You now have cat ears."); + } + //non human to lion: + else { + if (rand(2) == 0) outputText("\n\nYour ears change shape, morphing into round, feline ears not unlike those of a lion! They swivel about reflexively as you adjust to them. You now have lion ears."); + else outputText("\n\nYour ears tingle and begin to change shape. Within a few moments, they've become long and feline. Thanks to the new fuzzy organs, you find yourself able to hear things that eluded your notice up until now. You now have lion ears."); + } + mutations.setEarType(Ears.CAT); + changes++; + } + //DA TAIL (IF ALREADY HAZ URZ) + if (player.tailType != Tail.CAT && player.ears.type == Ears.LION && rand(4) == 0 && changes < changeLimit) { + if (player.tailType == Tail.NONE) { + choice = rand(3); + if (choice == 0) outputText("\n\nA pressure builds in your backside. You feel under your [armor] and discover an odd bump that seems to be growing larger by the moment. In seconds it passes between your fingers, bursts out the back of your clothes and grows most of the way to the ground. A thick coat of fur springs up to cover your new tail. You instinctively keep adjusting it to improve your balance. You now have a cat-tail."); + if (choice == 1) outputText("\n\nYou feel your backside shift and change, flesh molding and displacing into a long, flexible tail! You now have a cat tail."); + if (choice == 2) outputText("\n\nYou feel an odd tingling in your spine and your tail bone starts to throb and then swell. Within a few moments it begins to grow, adding new bones to your spine. Before you know it, you have a tail. Just before you think it's over, the tail begins to sprout soft, glossy [skin coat.color] fur. You now have a cat tail."); + } + else outputText("\n\nYou pause and tilt your head... something feels different. Ah, that's what it is; you turn around and look down at your tail as it starts to change shape, narrowing and sprouting glossy fur. You now have a cat tail."); + mutations.setTailType(Tail.CAT); + changes++; + } + //Da paws (if already haz ears & tail) + if (player.tailType == Tail.CAT && player.ears.type == Ears.LION && rand(4) == 0 && changes < changeLimit && player.lowerBody != LowerBody.CAT) { + //hoof to cat: + if (player.lowerBody == LowerBody.HOOFED) { + outputText("\n\nYou feel your hooves suddenly splinter, growing into five unique digits. Their flesh softens as your hooves reshape into furred cat paws. You now have cat paws."); + if (player.isTaur()) outputText(" You feel woozy and collapse on your side. When you wake, you're no longer a centaur and your body has returned to a humanoid shape."); + } + //Goo to cat + else if (player.lowerBody == LowerBody.GOO) { + outputText("\n\nYour lower body rushes inward, molding into two leg-like shapes that gradually stiffen up. In moments they solidify into digitigrade legs, complete with soft, padded cat-paws. You now have cat-paws!"); + } + //non hoof to cat: + else outputText("\n\nYou scream in agony as you feel the bones in your [feet] break and begin to rearrange. When the pain fades, you feel surprisingly well-balanced. You now have cat paws."); + mutations.setLowerBody(LowerBody.CAT); + player.legCount = 2; + changes++; + } + if (player.lowerBody == LowerBody.CAT && rand(4) == 0 && changes < changeLimit && player.arms.type != Arms.SPHINX) { + if (player.arms.type != Arms.HUMAN) { + mutations.humanizeArms(); + outputText(" "); + } + else outputText("\n\n"); + outputText("Your hands suddenly start to tingle as your arms grow a thin layer of -fur color- fur up to your shoulders. You watch, enthralled, as your nails fall off your fingers, feline claws taking their place on your five-fingered hands. That said, they don't look exactly like paws as your hands retain their dexterity and general appearance which is a perfect mix between human and leonine features. Thanks to their shape, your new bestial hands should not hinder your spellcasting abilities.. Your arms are now covered in fur and end with clawed hands like those of a sphinx."); + mutations.setArmType(Arms.SPHINX); + changes++; + } + //CAT TOUNGE CUZ WHY NOT? + if (player.faceType == Face.HUMAN && player.tongue.type != Tongue.CAT && rand(3) == 0 && changes < changeLimit) { + outputText("\n\nYour tongue suddenly feel weird. You try to stick it out to see what’s going on and discover it changed to look similar to the tongue of a cat. At least you will be able to groom yourself properly with your new cat tongue."); + mutations.setTongueType(Tongue.CAT); + changes++; + } + + //DAT EYES + if (player.tailType == Tail.CAT && player.ears.type == Ears.LION && rand(4) == 0 && changes < changeLimit && player.lowerBody == LowerBody.CAT && (player.hasFur() || (player.hasCoatOfType(Skin.SCALES) && player.dragonneScore() >= 4)) && player.faceType == Face.CAT && player.eyes.type != Eyes.CAT_SLITS) { + //Gain cat-like eyes + outputText("\n\nYou blink and stumble, a wave of vertigo threatening to pull your [feet] from under you. As you steady and open your eyes, you realize something seems different. Your vision is changed somehow. Your eyes has turned into those of cat with vertical slit."); + mutations.setEyeType(Eyes.CAT_SLITS); + changes++; + } + //FAILSAFE CHANGE + if (changes == 0) { + outputText("\n\nInhuman vitality spreads through your body, invigorating you!\n"); + EngineCore.HPChange(50, true); + dynStats("lus", 3); + } + if (changes < changeLimit) { + if (rand(2) == 0) outputText(player.modThickness(5, 2)); + if (rand(2) == 0) outputText(player.modTone(76, 2)); + else outputText(player.modFem(85, 2)); + } + player.refillHunger(20); + return false; + } + } +} \ No newline at end of file diff --git a/classes/classes/Items/Consumables/VampireBlood.as b/classes/classes/Items/Consumables/VampireBlood.as index 5285db5e47..f1b9368f0e 100644 --- a/classes/classes/Items/Consumables/VampireBlood.as +++ b/classes/classes/Items/Consumables/VampireBlood.as @@ -55,7 +55,7 @@ public class VampireBlood extends Consumable { Check : player.hasGooSkin(), Override: mutations.humanizeSkin }, { - BodyPart: 'ears.type', + BodyPart: 'ears.Type', ChangeTo: pure ? Ears.VAMPIRE : Ears.BAT, Check : pure ? player.ears.type != Ears.HUMAN : false, Override: pure ? mutations.humanizeEars : null @@ -63,7 +63,7 @@ public class VampireBlood extends Consumable { BodyPart: 'eyes.type', ChangeTo: Eyes.VAMPIRE }, { - BodyPart: 'faceType', + BodyPart: 'face.Type', ChangeTo: Face.VAMPIRE } ]; @@ -112,9 +112,7 @@ public class VampireBlood extends Consumable { if(count)changes++; } outputText("\n\n"); - if(count){ - story.display(tf.BodyPart, {$pure: pure}); - } + story.display(tf.BodyPart, {$pure: pure}); hostObj[bodyPart] = tf.ChangeTo; for each(var extra:Object in tf.Addition){ doChange(extra,false); diff --git a/classes/classes/Items/Mutations.as b/classes/classes/Items/Mutations.as index c5f069b17f..686f4c36f3 100644 --- a/classes/classes/Items/Mutations.as +++ b/classes/classes/Items/Mutations.as @@ -4970,6 +4970,8 @@ public final class Mutations extends MutationsHelper player.refillHunger(20); flags[kFLAGS.TIMES_TRANSFORMED] += changes; } + + public function reptilum(player:Player):void { @@ -6600,8 +6602,6 @@ public final class Mutations extends MutationsHelper //Generic eating text: clearOutput(); if (type == 0) outputText("You crack open the seed easily, and eat the fruit inside. A bit dry, as you expected, but with a sweet and aromatic taste that leaves you wanting another one."); - if (type == 1) outputText("Looking again at the fierce gryphon sculpted on brass and bronze that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); - if (type == 2) outputText("Looking again at the wonderful peacock carved in alabaster and ruby that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); //Stats changes //-Speed increase to 100. if (player.spe < 100 && type == 0 && rand(3) == 0 && changes < changeLimit) { @@ -6631,7 +6631,6 @@ public final class Mutations extends MutationsHelper if (player.str < 40) dynStats("str", .5); dynStats("str", .5); } - if (type == 1 || type == 2) changeLimit = 1; if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; //Sexual changes if (player.avianCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 0 && rand(3) == 0) { @@ -6652,24 +6651,6 @@ public final class Mutations extends MutationsHelper player.cocks[temp2].cockType = CockTypesEnum.AVIAN; changes++; } - if (player.gryphonCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 1 && rand(3) == 0) { - for (temp2 = 0; temp2 < player.cocks.length; temp2++) { - if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; - } - outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); - outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); - player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; - changes++; - } - if (player.cockTotal() > 1 && player.gryphonCocks() > 0 && player.cockTotal() > player.gryphonCocks() && type == 1 && rand(3) == 0 && changes < changeLimit) { - for (temp2 = 0; temp2 < player.cocks.length; temp2++) { - if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; - } - outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); - outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); - player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; - changes++; - } //Legs if (player.lowerBody != LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.isGoo()) { @@ -6712,13 +6693,6 @@ public final class Mutations extends MutationsHelper player.legCount = 2; changes++; } - if (player.lowerBody != LowerBody.GRYPHON && player.eyes.type == Eyes.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nTaking a seat while you see how the magic within the statue affects you, a familiar numbness reaches your legs. The rough skin covering your lower legs and feet change into more usual, soft skin, and shortly after, it starts sprouting " + player.skin.coat.color2 + " colored fur over them."); - outputText("\n\nYour feet themselves reshape, losing their avian stance and gaining one much more feline, complete with soft pink paw pads. The talons at the end of each toe become retractile feline claws. Albeit walking with those seems initially tricky, you easily gain a hold on how using your new gryphon-like legs."); - setLowerBody(LowerBody.GRYPHON); - player.legCount = 2; - changes++; - } //Tail if (player.tailType != Tail.AVIAN && player.lowerBody == LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.tailType > Tail.NONE) { @@ -6739,12 +6713,6 @@ public final class Mutations extends MutationsHelper setTailType(Tail.AVIAN); changes++; } - if (player.tailType != Tail.GRIFFIN && player.lowerBody == LowerBody.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nThe fan of feathers at your backside reacts under the statue magic effects. An otherworldly magic envelopes it, making the feathers twist and converge in an odd fashion, at the same time that the small bump of your tail elongates until becoming long enough to reach far past your knee."); - outputText("\n\nBefore you notice it, the long feathers have merged into a tuft of " + player.skin.coat.color + " at the end of your now long tail, while the short, downy ones now cover every inch of bare skin that the elongated appendage now have. Well, seems like you gained a griffin-like tail! It’s quite leonine in shape, but its appearance remains a bit avian."); - setTailType(Tail.GRIFFIN); - changes++; - } //Arms if (player.arms.type != Arms.AVIAN && player.tailType == Tail.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.skin.hasChitin()) { @@ -6769,12 +6737,6 @@ public final class Mutations extends MutationsHelper setArmType(Arms.AVIAN); changes++; } - if (player.arms.type != Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nThe skin on your arms change a bit, as the " + player.skin.coat.color2 + " turning into soft, feline fur. Your palms and fingers acquire pink paw pads, while at the end of each one of your fingers, the talons sharpen and become prehensile, adopting a posture better suited to pounce over a unsuspecting victim."); - outputText("\n\nFrom the fringe on your elbows to your armpits, your " + player.skin.coat.color + " colored plumage remains the same. At the end, you’ve gotten gryphon-like arms!."); - setArmType(Arms.GRYPHON); - changes++; - } //Wings if (player.wings.type != Wings.FEATHERED_AVIAN && player.arms.type == Arms.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.wings.type == Wings.DRACONIC_SMALL || player.wings.type == Wings.DRACONIC_LARGE || player.wings.type == Wings.DRACONIC_HUGE || player.wings.type == Wings.BAT_LIKE_TINY || player.wings.type == Wings.BAT_LIKE_LARGE || player.wings.type == Wings.BAT_LIKE_LARGE_2 || player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) { @@ -6829,12 +6791,6 @@ public final class Mutations extends MutationsHelper setEarType(Ears.AVIAN); changes++; } - if (player.ears.type != Ears.GRYPHON && player.tailType == Tail.GRIFFIN && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nAfter another session under the statue magic, the lingering effects seem to having taken a toll on you, as your ears buzz. The sound turns worse for a second, and then vanish. You hear for a second a light flapping sound, and then, nothing.\n\nWhen everything seems to have finished, you realize that your hearing range has changed, and while your overall sense of hearing remains the same, pinpointing the source of a sounds is much easier. On a nearby reflection you discover the reason: "); - outputText("two triangular ears have sprouted at your head, streamlined to flight and with a gryphon like appearance. A short layer of downy feathers covers them, the tip having a distinctive tuft. Checking that your ears are rightly placed on the new auricles, you smile happily at the sight of your gryphon ears, noting how well they compliment your looks."); - setEarType(Ears.GRYPHON); - changes++; - } //Skin if (!player.hasFeather() && changes < changeLimit && type == 0 && rand(4) == 0) { if (player.hasFur()) { @@ -6871,13 +6827,6 @@ public final class Mutations extends MutationsHelper player.skin.growCoat(Skin.FEATHER,{color:player.skin.coat.color}); changes++; } - //Eyes - if (player.eyes.type != Eyes.GRYPHON && player.arms.type == Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nThe mysterious energy coming from the statue continues adapting your body into a more fierce, strong shape. This time, it has affected you eyesight, as you suddenly notice how the long distances that you once had trouble seeing are clear as if you were in front of them, and that you can perceive even the minimal move even from several miles afar."); - outputText("\n\nChecking your changes on the river, you see clearly how your sclera has acquired a golden-orange coloration, as well as your outer iris, separated from the former by a thin circle of black. Both your pupil and your inner iris, which now has enlarged, are solid black. Now you’ll have a blessed vision due those raptor, gryphon-like eyes."); - setEyeTypeAndColor(Eyes.GRYPHON, "golden-orange"); - changes++; - } if (changes == 0 && type == 0) outputText("\n\nIt seems like the fruit had no effect this time. Maybe it was spoiled, or kept in storage for too much time?"); if (type == 0) player.refillHunger(15); flags[kFLAGS.TIMES_TRANSFORMED] += changes; diff --git a/classes/classes/Items/MutationsHelper.as b/classes/classes/Items/MutationsHelper.as index 3d78201379..fba6557316 100644 --- a/classes/classes/Items/MutationsHelper.as +++ b/classes/classes/Items/MutationsHelper.as @@ -302,7 +302,6 @@ import classes.BodyParts.Wings; [Arms.FOX, StatusEffects.UnlockedFoxArms], [Arms.GARGOYLE, null], [Arms.GARGOYLE_2, null], - [Arms.GRYPHON, null], [Arms.HARPY, StatusEffects.UnlockedHarpyArms], [Arms.HUMAN, null], [Arms.KITSUNE, StatusEffects.UnlockedKitsuneArms], @@ -340,7 +339,6 @@ import classes.BodyParts.Wings; [Ears.FERRET, null], [Ears.FOX, StatusEffects.UnlockedFoxEars], [Ears.GOAT, StatusEffects.UnlockedGoatEars], - [Ears.GRYPHON, null], [Ears.HORSE, null], [Ears.HUMAN, null], [Ears.KANGAROO, null], @@ -377,7 +375,6 @@ import classes.BodyParts.Wings; [Eyes.FOX, StatusEffects.UnlockedFoxEyes], [Eyes.GEMSTONES, null], [Eyes.GORGON, StatusEffects.UnlockedGorgonEyes], - [Eyes.GRYPHON, null], [Eyes.HUMAN, null], [Eyes.MANTICORE, null], [Eyes.ONI, StatusEffects.UnlockedOniEyes], @@ -513,7 +510,6 @@ import classes.BodyParts.Wings; [LowerBody.GARGOYLE, null], [LowerBody.GARGOYLE_2, null], [LowerBody.GOO, null], - [LowerBody.GRYPHON, null], [LowerBody.HARPY, StatusEffects.UnlockedHarpyLegs], [LowerBody.HOOFED, StatusEffects.UnlockedHoofedLegs], [LowerBody.HUMAN, null], @@ -602,7 +598,6 @@ import classes.BodyParts.Wings; [Tail.GARGOYLE, null], [Tail.GARGOYLE_2, null], [Tail.GOAT, StatusEffects.UnlockedGoatTail], - [Tail.GRIFFIN, null], [Tail.HARPY, StatusEffects.UnlockedHarpyTail], [Tail.HORSE, null], [Tail.KANGAROO, null], diff --git a/classes/classes/Items/WeaponLib.as b/classes/classes/Items/WeaponLib.as index 069ca220a5..e6163eb764 100644 --- a/classes/classes/Items/WeaponLib.as +++ b/classes/classes/Items/WeaponLib.as @@ -82,9 +82,8 @@ package classes.Items public const S_BLADE:Spellblade = new Spellblade(); public const S_GAUNT:Weapon = new Weapon("S.Gaunt","S.Gauntlet","spiked gauntlet","a spiked gauntlet","spiked punch",0,200,"This single metal gauntlet has the knuckles tipped with metal spikes. Though it lacks the damaging potential of other weapons, the sheer pain of its wounds has a chance of stunning your opponent."); public const SCARBLD:Weapon = new ScarredBlade(); - public const SCECOMM:Weapon = new Weapon("SceComm", "SceptreOfCom", "Sceptre of Command", "a Sceptre of Command", "smack", 4, 600, "This enchanted scepter empowers the abilities and control of summoners over their minions."); - public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); + public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); public const SESPEAR:SeraphicSpear = new SeraphicSpear(); public const SNAKESW:Weapon = new Weapon("SnakeSw", "SnakeSword", "Snake Sword", "a Snake Sword", "whip-slash", 20, 800, "This unassuming double-edged sword is comprised of segmented pieces which, when swung, will lash out akin to a whip."); public const SPEAR :Spear = new Spear(); @@ -92,7 +91,6 @@ package classes.Items public const TCLAYMO:TopazClaymore = new TopazClaymore(); public const TRASAXE:Weapon = new Weapon("TraSAxe","Train.S.Axe", "training soul axe", "a training soul axe", "cleave", 1, 80, "This axe was specialy forged and enhanted to help novice soul cultivatiors to train their soulforce. Still if situation calls for it it could be used as a normal weapon."); public const TRIDENT:Trident = new Trident(); - public const TRSTSWO:Weapon = new Weapon("TrStSwo","TruestrikeSword", "Truestrike sword", "a Truestrike sword", "slash", 5, 400, "Lia will write desc of it...soon."); public const U_STAFF:UnicornStaff = new UnicornStaff(); public const URTAHLB:Weapon = new Weapon("UrtaHlb","UrtaHlb","halberd","a halberd","slash",30,1200,"Urta's halberd. How did you manage to get this?","Large"); public const VBLADE :Weapon = new Weapon("V.Blade","V.Blade", "V.Blade", "a V.Blade", "slash", 28, 2240, "A peculiar sword. The letter V is engraved into the blade perhaps its former owner name."); diff --git a/classes/classes/Items/Weapons/FlyWhisk.as b/classes/classes/Items/Weapons/FlyWhisk.as index e5e7cff354..012ce69696 100644 --- a/classes/classes/Items/Weapons/FlyWhisk.as +++ b/classes/classes/Items/Weapons/FlyWhisk.as @@ -12,7 +12,7 @@ package classes.Items.Weapons public function FlyWhisk() { - super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 400, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); + super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 800, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); } } } \ No newline at end of file diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index a001005300..77c0cda15d 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -260,7 +260,7 @@ import flash.utils.getQualifiedClassName; protected override function maxLust_base():Number { //Base lust - var temp:Number = 70 + this.bonusLust; + var temp:Number = 100 + this.bonusLust; //Apply perks if (findPerk(PerkLib.BasicSelfControl) >= 0) temp += 15; if (findPerk(PerkLib.HalfStepToImprovedSelfControl) >= 0) temp += 25; @@ -286,11 +286,6 @@ import flash.utils.getQualifiedClassName; if (findPerk(PerkLib.GclassHeavenTribulationSurvivor) >= 0) temp += (75 * (1 + newGamePlusMod())); //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); - temp += this.level * 2; - if (this.level >= 24) temp += (this.level - 23) * 3; - if (this.level >= 42) temp += (this.level - 42) * 5; - if (this.level >= 72) temp += (this.level - 72) * 10; - if (this.level >= 102) temp += (this.level - 102) * 20; return temp; } @@ -350,21 +345,6 @@ import flash.utils.getQualifiedClassName; if (this.level >= 20) temp += 50; if (this.level >= 22) temp += 50; } - if (findPerk(PerkLib.SoulSprite) >= 0) { - if (this.level >= 24) temp += 60; - if (this.level >= 26) temp += 60; - if (this.level >= 28) temp += 60; - } - if (findPerk(PerkLib.SoulScholar) >= 0) { - if (this.level >= 30) temp += 70; - if (this.level >= 32) temp += 70; - if (this.level >= 34) temp += 70; - } - if (findPerk(PerkLib.SoulElder) >= 0) { - if (this.level >= 36) temp += 80; - if (this.level >= 38) temp += 80; - if (this.level >= 40) temp += 80; - } if (findPerk(PerkLib.InsightfulResourcesI) >= 0) temp += Math.round((this.wis*5) * (1 + newGamePlusMod())); if (findPerk(PerkLib.DeityJobMunchkin) >= 0) temp *= 1.1; if (hasPerk(PerkLib.EnemyTrueDemon)) temp = 0; diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index f667b46769..82e405900c 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -3123,6 +3123,7 @@ public class PerkLib .requireLib(50) .requireStatusEffect(StatusEffects.KnowsArouse, "Arouse spell"); JobCourtesan.requirePerk(JobSeducer) + .requirePerk(Heroism) .requireLib(50) .requireLevel(12); DazzlingDisplay.requirePerk(JobCourtesan) @@ -3230,23 +3231,23 @@ public class PerkLib // CORRUPTION //------------ //Slot 7 - Corrupted Libido - lust raises 10% slower. - CorruptedLibido.requireCor(10); + CorruptedLibido.requireCor(25); CorruptedLibido.defaultValue1 = 20; //Slot 7 - Seduction (Must have seduced Jojo) - Seduction.requireCor(15); + Seduction.requireCor(50); //Slot 7 - Nymphomania - Nymphomania.requireCor(15) + Nymphomania.requireCor(75) .requirePerk(CorruptedLibido); //Slot 7 - UNFINISHED :3 - Acclimation.requireCor(15) + Acclimation.requireCor(50) .requirePerk(CorruptedLibido) .requireMinLust(20); - SenseCorruption.requireCor(15); + SenseCorruption.requireCor(75); //Tier 1 Corruption Perks - acclimation over-rides - Sadist.requireCor(20) + Sadist.requireCor(60) .requirePerk(CorruptedLibido) .requireLevel(6); - ArousingAura.requireCor(25) + ArousingAura.requireCor(70) .requirePerk(CorruptedLibido) .requireLevel(6); //Tier 2 diff --git a/classes/classes/Player.as b/classes/classes/Player.as index 9527d2a5bd..263e082f7d 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -700,11 +700,6 @@ use namespace CoC; return _jewelry.value; } - //Shields for Bash - public function isShieldsForShieldBash():Boolean - { - return shield == game.shields.BUCKLER || shield == game.shields.GREATSH || shield == game.shields.KITE_SH || shield == game.shields.TRASBUC || shield == game.shields.TOWERSH || shield == game.shields.DRGNSHL || shield == game.shields.SANCTYN || shield == game.shields.SANCTYL || shield == game.shields.SANCTYD; - } //override public function get shields override public function get shieldName():String { return _shield.name; @@ -3721,6 +3716,51 @@ use namespace CoC; End("Player","racialScore"); return centaurCounter; } + + public function sphinxScore():Number + { + var sphinxCounter:Number = 0; + if (isTaur()) { + if (lowerBody == 1 || lowerBody == 21) + sphinxCounter += 2; + if (tailType == 8 && (lowerBody == 1 || lowerBody == 21)) + sphinxCounter++; + if (skinType == 0 && (lowerBody == 1 || lowerBody == 21)) + sphinxCounter++; + if (arms.type == 26 && (lowerBody == 1 || lowerBody == 21)) + sphinxCounter++; + if (ears.type == 0 && (lowerBody == 1 || lowerBody == 21)) + sphinxCounter++; + if (faceType == Face.CAT_CANINES && (lowerBody == 1 || lowerBody == 21)) + sphinxCounter++; + } + if (eyes.type == Eyes.CAT_SLITS) + sphinxCounter++; + if (ears.type == 5) + sphinxCounter++; + if (tongue.type == 5) + sphinxCounter++; + if (tailType == 8) + sphinxCounter++; + if (tailType == 37) + sphinxCounter++; + if (lowerBody == 9) + sphinxCounter++; + if (faceType == 0) + sphinxCounter++; + if (wings.type == 29) + sphinxCounter += 2; + if (findPerk(PerkLib.ChimericalBodyPerfectStage) >= 0) + sphinxCounter += 10; + if (findPerk(PerkLib.AscensionHybridTheory) >= 0 && sphinxCounter >= 3) + sphinxCounter += 1; + if (findPerk(PerkLib.Flexibility) > 0) + sphinxCounter++; + if (findPerk(PerkLib.CatlikeNimbleness) > 0) + sphinxCounter++; + return sphinxCounter; + } + //Determine Unicorn Rating public function unicornScore():Number { @@ -5079,8 +5119,6 @@ use namespace CoC; min += 10; if(eggs() >= 40) min += 10; } - //Werebeast - if (hasPerk(PerkLib.Lycanthropy)) min += perk(findPerk(PerkLib.Lycanthropy)).value1; //Jewelry effects if (jewelryEffectId == JewelryLib.MODIFIER_MINIMUM_LUST) { @@ -5288,7 +5326,7 @@ use namespace CoC; } }//+15(60)((70))(((140))) / 10 - 20(50 - 60)((70 - 80))(((130 - 140))) if (werewolfScore() >= 6) { - if (werewolfScore() >= 12) { + if (wolfScore() >= 12) { maxStr += (100 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (60 * newGamePlusMod); @@ -5326,6 +5364,21 @@ use namespace CoC; } }//+10 / 10 - 20 + + + if (sphinxScore() >= 5) { + if (sphinxScore() >= 14) { + if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); + else maxSpe += (40 * newGamePlusMod); + maxStr += (50 * newGamePlusMod); + maxTou -= (20 * newGamePlusMod); + maxInt += (100 * newGamePlusMod); + maxWis += (40 * newGamePlusMod); + } + }//+50/-20/+40/+100/+40 + + + if (nekomataScore() >= 11) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); else maxSpe += (40 * newGamePlusMod); @@ -6111,22 +6164,22 @@ use namespace CoC; } if (findPerk(PerkLib.CarefulButRecklessAimAndShooting) >= 0 && findPerk(PerkLib.ColdAim) < 0) maxTou -= (15 * newGamePlusMod); if (hasPerk(PerkLib.Lycanthropy)) { - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { + if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 3)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { maxStr += (10 * newGamePlusMod); maxTou += (10 * newGamePlusMod); maxSpe += (10 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { + if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 2)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { maxStr += (20 * newGamePlusMod); maxTou += (20 * newGamePlusMod); maxSpe += (20 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { + if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 1)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { maxStr += (30 * newGamePlusMod); maxTou += (30 * newGamePlusMod); maxSpe += (30 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { maxStr += (40 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (40 * newGamePlusMod); diff --git a/classes/classes/PlayerAppearance.as b/classes/classes/PlayerAppearance.as index be8e016a57..f9c9e52428 100644 --- a/classes/classes/PlayerAppearance.as +++ b/classes/classes/PlayerAppearance.as @@ -1025,8 +1025,6 @@ public class PlayerAppearance extends BaseContent { outputText(" Your " + num2Text(player.legCount) + " legs are equally covered in [skin coat.color] fur, ending on red-panda paws with short claws. They have a nimble and strong build, in case you need to escape from something."); else if (player.lowerBody == LowerBody.AVIAN) outputText(" You have strong thighs perfect for launching you into the air which end in slender, bird-like legs, covered with a [skin coat.color] plumage down to your knees and slightly rough, [skin] below. You have digitigrade feet, with toes that end in sharp talons."); - else if (player.lowerBody == LowerBody.GRYPHON) - outputText(" You have strong thighs perfect for launching you into the air ending in furred, feline legs, covered with a coat of soft, [skin coat.color2] fur. Your have digitigrade feet, lion-like, with soft, pink soles and paw pads, with feline toes ending in sharp, retractile claws."); if (player.findPerk(PerkLib.Incorporeality) >= 0) outputText(" Of course, your [legs] are partially transparent due to their ghostly nature."); // isn't goo transparent anyway? } @@ -1152,12 +1150,12 @@ public class PlayerAppearance extends BaseContent { else if (player.tailType == Tail.RED_PANDA) { outputText(" Sprouting from your [ass], you have a long, bushy tail. It has a beautiful pattern of rings in [skin coat.color] fluffy fur. It waves playfully as you walk giving to your step a mesmerizing touch."); } + else if(player.tailType == Tail.LION) { + outputText(" A soft [skin coat.color] cat-tail sprouts just above your " + assDescript() + ", curling and twisting with every step to maintain perfect balance. It ends with a small puffy hair balls like that of a lion"); + } else if (player.tailType == Tail.AVIAN) { outputText(" A tail shaped like a fan of long, [skin coat.color] feathers rests above your " + assDescript() + ", twitching instinctively to help guide you if you were to take flight."); } - else if (player.tailType == Tail.GRIFFIN) { - outputText(" From your backside hangs a long tail, leonine in shape and covered mostly by a layer of [skin coat.color2] fur with a tip made of a tuft of [skin coat.color] colored feathers. It moves sinuously as you walk."); - } } public function describeArms():void { //Wing arms @@ -1176,6 +1174,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Shining thick, leathery red scales covers your arms from the biceps down and your fingernails are now a short curved claws."); else if (armType == Arms.PLANT) outputText(" Delicate vines crawl down from the upper parts of your arms to your wrists covered in spade-like leaves, that bob whenever you move."); + else if(armType == Arms.SPHINX) + outputText(" Your arms are covered with [skin coat.color] fur. They end with somewhat human-like hands armed with lethal claws."); else if (armType == Arms.PLANT2) outputText(" Vines crawl down from your shoulders to your wrists, tipped with slits that drool precum. They look like innocent decorations from a distance."); else if (armType == Arms.SHARK) @@ -1218,8 +1218,6 @@ public class PlayerAppearance extends BaseContent { outputText(" Your arms are covered in [skin coat.color] up to your shoulder. They end with a pair of five-toed cat paws armed with lethal claws."); else if (armType == Arms.AVIAN) outputText(" Your arms are covered with [skin coat.color] colored feathers just a bit past your elbow. Your humanoid hands have " + player.skinTone + ", slightly rough skin and end in short claws."); - else if (armType == Arms.GRYPHON) - outputText(" The feathers on your arms reach a bit past your elbows, the fringe of [skin coat.color] plumage leading to your " + player.skinTone + ", slightly rough skinned hands. They end in short, avian claws."); if (player.wings.type == Wings.BAT_ARM ){ outputText(" Your arm bones are thin and light in order to allow flight. You have grown a few extra fingers, which allow you to hold various items even with your abnormal hands, albeit at the cost of preventing flight while doing so."); } @@ -1272,6 +1270,8 @@ public class PlayerAppearance extends BaseContent { outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as a harpy."); if (wingType == Wings.FEATHERED_ALICORN) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an alicorn."); + if (wingType == Wings.FEATHERED_SPHINX) + outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an sphinx."); if (wingType == Wings.FEATHERED_PHOENIX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the crimson-colored wings folded close, they can unfurl to allow you to soar as gracefully as a phoenix."); if (wingType == Wings.DRACONIC_SMALL) @@ -1480,9 +1480,6 @@ public class PlayerAppearance extends BaseContent { else if(eyeType == Eyes.FERAL){ outputText(" In your eyes sometime dance a green light. It encompass your entire pupil when you let the beast within loose."); } - else if(eyeType == Eyes.GRYPHON){ - outputText(" Your gifted eyes have a bird-like appearance, having an [eyecolor] sclera and a large, black iris. A thin ring of black separates your sclera from your outer iris."); - } else outputText(" Your eyes are [eyecolor]."); } public function describeHairAndEars():void { @@ -1563,9 +1560,6 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" Two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } - if (earType == Ears.GRYPHON){ - outputText(" A duo of triangular, streamlined ears are located at each side of your head, helping you to pinpoint sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); - } // if (player.gills.type == Gills.FISH) { @@ -1650,9 +1644,6 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" The [hair] atop your head compliments you quite well, and two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } - if (earType == Ears.GRYPHON){ - outputText(" Two triangular ears part your [hair] at each side of your head. They’re streamlined and adapted to fly, and are quite useful to locate sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); - } // if(player.antennae.type == Antennae.MANTIS) { @@ -1847,7 +1838,7 @@ public class PlayerAppearance extends BaseContent { else if(skin.hasLightningShapedTattoo()) outputText(" covered with a few glowing lightning tattoos"); outputText(". Your mouth is somewhat human save for your wolf-like canines."); } else if (player.hasPartialCoat(Skin.FUR)) { - outputText(" Your face looks human save for your wolf-like canines. On your cheek you have [skin coat]."); + outputText(" Your face looks human save for your wolf-like canines. You've got [skin coat], hiding your [skin noadj] underneath your furry visage."); } else { outputText(" Your face looks human save for your wolf-like canines, but overlaid with glittering [skin coat]."); } @@ -2000,11 +1991,11 @@ public class PlayerAppearance extends BaseContent { } if (faceType == Face.RED_PANDA) { outputText(" Your face has a distinctive animalistic muzzle, proper from a red-panda, complete with a cute pink nose."); - if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat.color] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") + if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") } if (faceType == Face.AVIAN) { outputText(" Your visage has a bird-like appearance, complete with an avian beak. A couple of small holes on it makes up for your nostrils, while a long, nimble tongue is hidden inside."); - if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat].") + if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat] feathers.") } // } diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index c152f0d6f2..cf7d0628e7 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -137,21 +137,12 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers2); } } - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) { - if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, -1); - if (player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 2, -1); - if (player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 3, -1); - if (player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 4, -1); - if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) <= 0) { - player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers3); - } - } //Sidonie checks if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { if (flags[kFLAGS.LUNA_JEALOUSY] < 200) flags[kFLAGS.LUNA_JEALOUSY]++; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12 || flags[kFLAGS.LUNA_FOLLOWER] == 14 || flags[kFLAGS.LUNA_FOLLOWER] == 16) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11 || flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 15) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 10) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; + if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 9) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); } Begin("PlayerEvents","hourlyCheckRacialPerks"); needNext = hourlyCheckRacialPerks(); @@ -442,12 +433,7 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { } if (player.werewolfScore() >= 6 && player.hasPerk(PerkLib.LycanthropyDormant)) { outputText("\nAs you become wolf enough your mind recedes into increasingly animalistic urges. It will only get worse as the moon comes closer to full. Gained Lycanthropy.\n"); - var bonusStats:Number = 0; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; - player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); + player.createPerk(PerkLib.Lycanthropy,0,0,0,0); player.removePerk(PerkLib.LycanthropyDormant); needNext = true; } @@ -598,62 +584,47 @@ if (CoC.instance.model.time.hours > 23) { //Once per day if (flags[kFLAGS.CHI_CHI_LVL_UP] < 2) flags[kFLAGS.CHI_CHI_LVL_UP] = 2; else flags[kFLAGS.CHI_CHI_LVL_UP]++; } - //Mishaps reset - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.removeStatusEffect(StatusEffects.CampLunaMishaps1); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.removeStatusEffect(StatusEffects.CampLunaMishaps2); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps3)) player.removeStatusEffect(StatusEffects.CampLunaMishaps3); //Full moon if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { flags[kFLAGS.LUNA_MOON_CYCLE]++; - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; if (player.hasPerk(PerkLib.Lycanthropy)) { - var changeV:Number = 10 * player.newGamePlusMod(); - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { + if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nYou can’t help but notice the moon is almost full as it rises up. It seems transfixing like it is calling to you."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,10); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { + if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nWhen the almost-full moon appears it causes your heart to race with excitement. You hearing seems better than ever. Every breath brings a rush of smells through your nose that seem much more pronounced than they should."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,20); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { + if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nYou gaze at the moon and it seems to gaze back into you. Something is coming and it won’t be long now. You feel like you are crawling in your skin. It feels like tear out of your body and be born anew."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time.\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,30); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { - outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + ".\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,40); + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { + outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + "."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); if (player.hasCock() || (player.gender == 3 && rand(2) == 0)) player.goIntoRut(false); else if (player.hasVagina()) player.goIntoHeat(false); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1) { - outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,30); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nThe moon is waning, you are feeling less powerful."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2) { - outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,20); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nThe moon is waning, you are feeling less powerful."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3) { - outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,10); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nThe moon is waning, you are feeling less powerful."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 4) { - outputText("\nIt's a new moon tonight, you feel somewhat weak.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,0); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 4) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nIt's a new moon tonight, you feel somewhat weak."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - needNext = true; } } } diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index 48a3c3cbc0..d0d3cd8619 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -557,13 +557,6 @@ public class PlayerInfo extends BaseContent { if (flags[kFLAGS.LUNA_FOLLOWER] > 3) { interpersonStats += "Luna Affection: " + Math.round(flags[kFLAGS.LUNA_AFFECTION]) + "%\n"; interpersonStats += "Luna Jealousy: " + Math.round(flags[kFLAGS.LUNA_JEALOUSY]) + "%\n"; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; - else interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; - interpersonStats += "\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 3) interpersonStats += "Luna lvl: 27\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 2) interpersonStats += "Luna lvl: 21\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 1) interpersonStats += "Luna lvl: 15\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 0) interpersonStats += "Luna lvl: 9\n"; } if (flags[kFLAGS.OWCAS_ATTITUDE] > 0) interpersonStats += "Owca's Attitude: " + flags[kFLAGS.OWCAS_ATTITUDE] + "\n"; diff --git a/classes/classes/Saves.as b/classes/classes/Saves.as index a574dc0c17..4e7cfaff2c 100644 --- a/classes/classes/Saves.as +++ b/classes/classes/Saves.as @@ -358,7 +358,7 @@ public function saveLoad(e:MouseEvent = null):void clearOutput(); outputText("Where are my saves located?\n"); - outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); + outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); outputText("In Windows Vista/7 (Chrome):
Users/{username}/AppData/Local/Google/Chrome/User Data/Default/Pepper Data/Shockwave Flash/WritableRoot/#SharedObjects/{GIBBERISH}/
\n\n"); outputText("Inside that folder it will saved in a folder corresponding to where it was played from. If you saved the CoC.swf to your HDD, then it will be in a folder called localhost. If you played from my website, it will be in fenoxo.com. The save files will be labelled CoC_1.sol, CoC_2.sol, CoC_3.sol, etc.
\n\n"); outputText("Why do my saves disappear all the time?\nThere are numerous things that will wipe out flash local shared files. If your browser or player is set to delete flash cookies or data, that will do it. CCleaner will also remove them. CoC or its updates will never remove your savegames - if they disappear something else is wiping them out.\n\n"); diff --git a/classes/classes/Scenes/Areas/HighMountains.as b/classes/classes/Scenes/Areas/HighMountains.as index 1c1dd89704..3ceeaa64fe 100644 --- a/classes/classes/Scenes/Areas/HighMountains.as +++ b/classes/classes/Scenes/Areas/HighMountains.as @@ -106,10 +106,6 @@ use namespace CoC; phoenixScene.encounterPhoenix1(); return; } - if ((player.hasKeyItem("Gryphon Statuette") < 0 || player.hasKeyItem("Peacock Statuette") < 0) && rand(4) == 0) { - caveScene(); - return; - } //10% chance to mino encounter rate if addicted if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_STATE] > 0 && rand(10) == 0) { spriteSelect(44); @@ -182,7 +178,6 @@ use namespace CoC; return; } } - //\"Chicken Harpy\" by Jay Gatsby and not Savin he didn't do ANYTHING //Initial Intro public function chickenHarpy():void @@ -215,6 +210,7 @@ use namespace CoC; if (player.hasItem(consumables.OVIELIX, 3)) addButton(1, "Give Three", giveThreeOviElix); addButton(4, "Leave", leaveChickenx); } + //If Give Two public function giveTwoOviElix():void { @@ -232,6 +228,7 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.PURPLEG); addButton(5, "White", getHarpyEgg, consumables.WHITEEG); } + //If Give Three public function giveThreeOviElix():void { @@ -248,6 +245,7 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.L_PRPEG); addButton(5, "White", getHarpyEgg, consumables.L_WHTEG); } + //All Text public function getHarpyEgg(itype:ItemType):void { @@ -257,6 +255,7 @@ use namespace CoC; outputText("You take " + itype.longName + ", and the harpy nods in regards to your decision. Prepping her cart back up for the road, she gives you a final wave goodbye before heading back down through the mountains.\n\n"); inventory.takeItem(itype, chickenHarpy); } + //If No public function leaveChickenx():void { @@ -266,38 +265,5 @@ use namespace CoC; outputText("\n\nYou decide to take your own path, heading back to camp while you can."); doNext(camp.returnToCampUseOneHour); } - - public function caveScene():void { - clearOutput(); - outputText("Wandering once more around the rocky cliffs on the higher area of the mountains, you find yourself increasingly bores, as you spend the most of the hour tossing aside pebbles and rocks that fell on the path, or crushing the solidified snow with your footwear.\n\n"); - outputText("On the middle of your careless, and surprisingly peaceful stroll, you happen to find an alcove carved on the cliff’s stone. It’s not very big, maybe three or four feet tall, five feet wide and two feet deep, resting one feet above the path ground, so you’re forced to get on your knees to examine it better.\n\n"); - outputText("The alcove itself is seemingly empty, though after a better examination, the back has engraved on the cliff rock a long, detailed inscription. Sadly, you can’t get a word from it, since it’s written in a strange, old language that’s doesn’t barely resemble anything that you’ve found in Mareth. Carved on each side there area stylized figures of avian creatures, "); - outputText("the most noticeable ones being a gryphon with the wings spread, and in the other side, a peacock doing the same with its tail. As you put your hands on them, you notice a that a shape vaguely resembling a hand forming in the floor of the alcove.\n\n"); - outputText("Tentatively you put one hand on place"); - if (player.avianScore() < 9) { - outputText(", but absolutely nothing happens. Maybe the magic or whatever that thing was supposed to do stopped working long ago? In any case, you had enough looking for a while, and since you’re not getting anything useful from there, you resume your walk.\n\n"); - doNext(camp.returnToCampUseOneHour); - } - else { - outputText(" and gasp in surprise as the figures depicting the creatures at the sides of the alcove recede as you do so, leaving in place two smaller alcoves with two statuettes on them.\n\n"); - outputText("The first one, made on brass and bronze, depicts a fierce looking gryphon in an assault stance. Every bit of the artifact emanates an unnatural strength. On the other side, a statue made of alabaster and ruby gemstones is shaped as a graceful peacock. Strangely, besides being pretty, the way it’s crafted gives you a weird, mystic feel.\n\n"); - outputText("You try to grab both, but as soon as you put your hands in one of them, the alcove with the other starts closing. Seems like you’ll have only one choice here.\n\n"); - menu(); - addButton(0, "Gryphon", caveSceneGryphon); - addButton(1, "Peacock", caveScenePeacock); - } - } - public function caveSceneGryphon():void { - outputText("Picking the brass-forged statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); - outputText("With nothing useful left to you here, you resume your walk and return to your camp with the gryphon idol on your bag.\n\n"); - player.createKeyItem("Gryphon Statuette", 0, 0, 0, 0); - doNext(camp.returnToCampUseOneHour); - } - public function caveScenePeacock():void { - outputText("Picking the alabaster statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); - outputText("With nothing useful left to you here, you resume your walk and return to your camp with the peacock idol on your bag.\n\n"); - player.createKeyItem("Peacock Statuette", 0, 0, 0, 0); - doNext(camp.returnToCampUseOneHour); - } } } diff --git a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as index 4a424f9620..ceec9b80eb 100644 --- a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as +++ b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as @@ -589,7 +589,7 @@ public class MinervaPurification extends BaseContent outputText("Giving me these daughters is the greatest gift you could have given me...\" she says softly as she holds you gently, bulge pressed gently against bulge, her hands stroking your stomach as you caress hers."); outputText("\n\nThe two of you lay here against the tree cuddling together as a pair of expecting parents"); if (flags[kFLAGS.MINERVA_CHILDREN] > 0) outputText(", your daughters curled up with you and Minerva; they seem very happy, as if they all know that they are going to be getting more sisters soon"); - outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?\""); + outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?"); } else { //Not pregnant or pregnant with something else. outputText("You can't help wondering if anything has changed since you had been with her last. If her body was any hint at how fertile she now is, it was likely very easy for her to get pregnant. It's not hard to spot her; the golden siren is sitting on the edge of the spring with her feet in the water, gently splashing the water as she softly sings to herself. When you get closer, though, you realize that she is not really singing to herself but to her round pregnant belly. From where you are you can clearly tell she is stroking her pregnancy gently with her hands as she sings softly to her unborn babies."); @@ -1652,7 +1652,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } @@ -1664,7 +1664,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } diff --git a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as index 94bb8ff32d..3004463f23 100644 --- a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as +++ b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as @@ -81,8 +81,6 @@ use namespace CoC; mainmenu(); } private function mainmenu():void { - outputText("\n\nGargoyle Quest progress: " + flags[kFLAGS.GARGOYLE_QUEST] + ""); - outputText("\n\nTemple Repair progress: " + flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] + ""); menu(); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 1) { addButton(0, "Pray", PlayerPrayAtTemple).hint("Offer your prayer to one of the temple altar."); @@ -263,11 +261,11 @@ use namespace CoC; if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 150) addButton(1, "Statue of Marae", rebuildStatueOfMarae).hint("Repair the statue."); else addButtonDisabled(1, "Statue of Marae", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) { - if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Gargoyles", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); - else addButtonDisabled(2, "Gargoyles", "You not have enough stones."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) { + if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Repairing the gargoyles on the walls", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); + else addButtonDisabled(2, "Repairing the gargoyles on the walls", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 17) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 18) { if (flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 50 && flags[kFLAGS.CAMP_CABIN_NAILS_RESOURCES] >= 10) addButton(3, "Prayer Bench", makeNewPrayerBenches).hint("Repair some of the temple banches."); else addButtonDisabled(3, "Prayer Bench", "You not have enough wood or/and nails."); } @@ -340,7 +338,7 @@ use namespace CoC; }*/ public function rebuildStatueOfMarae():void { clearOutput(); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 4) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); else outputText("You work for the entire day sculpting stone and repairing the statue of Marae. By the time you're done you can feel divine power radiate from it empowering the entire temple."); flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] -= 150; flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS]++; @@ -379,11 +377,11 @@ use namespace CoC; if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] < 1) outputText("broken altar of Fera. You believe it was damaged way before the demons came in, likely by the priesthood tending the temple."); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] == 1) outputText("Altar of Fera. An aura of depraved lust rise from it, inviting you to unknown pleasure. This altar radiate a clearly demonic aura and dims the sanctity of the temple like an idol."); outputText("\n\nMarae's statue "); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("lies on the ground, its head shattered to pieces"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5) outputText("in the background awaits the worshippers with its serene and compassionate expression"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 6) outputText("lies on the ground, its head shattered to pieces"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6) outputText("in the background awaits the worshippers with its serene and compassionate expression"); outputText(". Lining both walls"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { outputText(", many decorative gargoyles are displayed."); if (flags[kFLAGS.ONYX_PATH] < 1) outputText(" While Sapphire is the last living stony guardian of the temple, this still gives off the illusion of a platoon of guardians watching faithfully over this divine place."); if (player.isGargoyle()) outputText(" Your own pedestal stands right next to Sapphire's, allowing you to keep close to her when you need to rest (using your pedestal allows you to sleep with Sapphire if your relation is high enough)."); @@ -394,7 +392,7 @@ use namespace CoC; outputText(" is looking at you expectantly."); } } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 9) { outputText(" There are " + player.statusEffectv1(StatusEffects.TempleOfTheDivineTracker) + " benches in the temple for the worshipers to sit upon."); } doNext(TempleAltairsRebuildMenu); @@ -1208,11 +1206,11 @@ use namespace CoC; outputText(".\n\nIt's arms "); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with a set of bestial four fingered sharp stone claws"); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("ends with very human fist"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); outputText(". It's legs "); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with clawed bestial feets with three toe at the front and one at the back"); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("are human like"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); outputText(". Its "); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("mace like"); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("axe like"); diff --git a/classes/classes/Scenes/Areas/Lake.as b/classes/classes/Scenes/Areas/Lake.as index e954514c0d..7f5f062142 100644 --- a/classes/classes/Scenes/Areas/Lake.as +++ b/classes/classes/Scenes/Areas/Lake.as @@ -43,7 +43,7 @@ use namespace CoC; return; } //Diana - if (player.level >= 3 && flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(10) == 0) { + if (flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(4) == 0) { SceneLib.dianaScene.repeatLakeEnc(); return; } diff --git a/classes/classes/Scenes/Areas/Lake/FetishZealot.as b/classes/classes/Scenes/Areas/Lake/FetishZealot.as index f4d2d5716d..00c4f47940 100644 --- a/classes/classes/Scenes/Areas/Lake/FetishZealot.as +++ b/classes/classes/Scenes/Areas/Lake/FetishZealot.as @@ -82,7 +82,7 @@ public class FetishZealot extends Monster //A pirate costume; if(armorName == PIRATE_CLOTHES) { //You are faced with one of the strangest things you have ever seen in your life. A stereotypical pirate, who has not replaced his hand with a hook, but rather a collection of sex toys. You can see at least two dildos, a fleshlight, and numerous other toys that you're incapable of recognizing. - outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); + outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); } //Military attire; if(armorName == MILITARY_CLOTHES) { diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index 0c37d5522b..f8b0d5bdc9 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -860,8 +860,7 @@ CoC.instance.saves.saveGame(player.slotName); if (slavesCount() > 0) addButton(7, "Slaves", campSlavesMenu).hint("Check up on any slaves you have received and interact with them."); addButton(8, "Camp Actions", campActions).hint("Interact with the camp surroundings and also read your codex or questlog."); if (flags[kFLAGS.CAMP_CABIN_PROGRESS] >= 10 || flags[kFLAGS.CAMP_BUILT_CABIN] >= 1) addButton(9, "Enter Cabin", cabinProgress.initiateCabin).hint("Enter your cabin."); //Enter cabin for furnish. - if (player.hasPerk(PerkLib.JobSoulCultivator) || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); - else if (!player.hasPerk(PerkLib.JobSoulCultivator) && player.hasPerk(PerkLib.Metamorph)) addButton(10, "Metamorf", SceneLib.metamorph.accessMetamorphMenu).hint("Use your soulforce to mold freely your body."); + if (player.findPerk(PerkLib.JobSoulCultivator) >= 0 || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); var canFap:Boolean = !player.hasStatusEffect(StatusEffects.Dysfunction) && (flags[kFLAGS.UNABLE_TO_MASTURBATE_BECAUSE_CENTAUR] == 0 && !player.isTaur()); if (player.lust >= 30) { addButton(11, "Masturbate", SceneLib.masturbation.masturbateMenu); @@ -1002,7 +1001,6 @@ public function loversHotBathCount():Number { if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.DIANA_FOLLOWER] > 5) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) counter++; if (followerHel()) counter++; if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; @@ -1025,7 +1023,6 @@ public function sparableCampMembersCount():Number { if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) counter++; if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) counter++; if (followerHel()) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; if (followerKiha()) counter++; @@ -1078,7 +1075,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { break; } outputText(".\n\n"); - buttons.add("Amily", amilyScene.amilyFollowerEncounter2).disableIf(player.statusEffectv1(StatusEffects.CampLunaMishaps1) > 0,"Hurt foot."); + buttons.add("Amily", amilyScene.amilyFollowerEncounter); } //Amily out freaking Urta? else if(flags[kFLAGS.AMILY_VISITING_URTA] == 1 || flags[kFLAGS.AMILY_VISITING_URTA] == 2) { @@ -1099,8 +1096,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Chi Chi if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) { outputText("You can see Chi Chi not so far from Jojo. She’s busy practicing her many combos on a dummy. Said dummy will more than likely have to be replaced within twenty four hours.\n\n"); - /*if (player.statusEffectv4(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); - else */buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu2); + buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu); } //Diana if (flags[kFLAGS.DIANA_FOLLOWER] > 5) { @@ -1110,8 +1106,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Etna if (flags[kFLAGS.ETNA_FOLLOWER] > 0) { outputText("Etna is resting lazily on a rug in a very cat-like manner. She’s looking at you always with this adorable expression of hers, her tail wagging expectantly at your approach.\n\n"); - /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Sleeping."); - else */buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu2).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //Helia if(SceneLib.helScene.followerHel()) { @@ -1134,7 +1129,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("You see the salamander Helia pacing around camp, anxiously awaiting your departure to the harpy roost. Seeing you looking her way, she perks up, obviously ready to get underway.\n\n"); } } - buttons.add( "Helia", helFollower.heliaFollowerMenu2).disableIf(player.statusEffectv3(StatusEffects.CampLunaMishaps2) > 0,"Sleeping."); + buttons.add( "Helia", helFollower.heliaFollowerMenu); } //Isabella if(isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) { @@ -1227,7 +1222,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { case 2: outputText("Izma is lying on her back near her bedroll. You wonder at first just why she isn't using her bed, but as you look closer you notice all the water pooled beneath her and the few droplets running down her arm, evidence that she's just returned from the stream."); break; } outputText("\n\n"); - buttons.add( "Izma", izmaScene.izmaFollowerMenu2).disableIf(player.statusEffectv4(StatusEffects.CampLunaMishaps1) > 0,"Fish smell."); + buttons.add( "Izma", izmaScene.izmaFollowerMenu); } } //Kiha! @@ -1253,8 +1248,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("Most of them are on fire.\n\n"); } } - /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Cleaning burnt meat."); - else */buttons.add( "Kiha", kihaScene.encounterKiha2).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + buttons.add( "Kiha", kihaScene.encounterKiha).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //MARBLE if(player.hasStatusEffect(StatusEffects.CampMarble) && flags[kFLAGS.FOLLOWER_AT_FARM_MARBLE] == 0) { @@ -1434,10 +1428,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Ember if(emberScene.followerEmber()) { emberScene.emberCampDesc(); - /*if (player.statusEffectv2(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); - else */buttons.add( + buttons.add( "Ember", - emberScene.emberCampMenu2 + emberScene.emberCampMenu ).hint("Check up on Ember the dragon-" + (flags[kFLAGS.EMBER_ROUNDFACE] == 0 ? "morph" : flags[kFLAGS.EMBER_GENDER] == 1 ? "boy" : "girl" ) + "" ).disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } @@ -1478,7 +1471,7 @@ public function campFollowers(descOnly:Boolean = false):void { if (flags[kFLAGS.CAMP_BUILT_CABIN] > 0) outputText(" cabin"); if (!(model.time.hours > 4 && model.time.hours < 23)) outputText(" and the mouse is sleeping on it right now.\n\n"); else outputText(", though the mouse is probably hanging around the camp's perimeter.\n\n"); - buttons.add( "Jojo", jojoScene.jojoCamp2).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty.").disableIf(player.statusEffectv2(StatusEffects.CampLunaMishaps1) > 0,"Annoyed."); + buttons.add( "Jojo", jojoScene.jojoCamp).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty."); } } //Celess @@ -1612,9 +1605,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Luna if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("Luna wanders around the camp, doing her chores as usual."); - if (flags[kFLAGS.LUNA_JEALOUSY] >= 50) outputText(" She looks at you from time to time, as if expecting you to notice her."); + if (flags[kFLAGS.LUNA_JEALOUSY] >= 25) outputText(" She looks at you from time to time, as if expecting you to notice her."); outputText("\n\n"); - buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna.").disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0,"Training."); + buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna."); } for each(var npc:XXCNPC in _campFollowers){ npc.campDescription(buttons,XXCNPC.FOLLOWER); @@ -1646,7 +1639,7 @@ private function campActions():void { addButton(5, "Build", campBuildingSim).hint("Check your camp build options."); if (player.hasPerk(PerkLib.JobElementalConjurer) >= 0 || player.hasPerk(PerkLib.JobGolemancer) >= 0) addButton(6, "Winions", campWinionsArmySim).hint("Check your options for making some Winions."); else addButtonDisabled(6, "Winions", "You need to be able to make some minions that fight for you to use this option like elementals or golems..."); - //addButton(7, "Heal", spellHealcamp).hint("Heal. \n\nMana Cost: 30"); + if (player.hasStatusEffect(StatusEffects.KnowsHeal)) addButton(7, "Heal", spellHealcamp).hint("Heal will attempt to use white magic to instantly close your wounds and restore your body. \n\nMana Cost: 30"); //addButton(8, "Craft", kGAMECLASS.crafting.accessCraftingMenu).hint("Craft some items."); if (flags[kFLAGS.CAMP_UPGRADES_FISHERY] >= 1) addButton(8, "Fishery", VisitFishery).hint("Visit Fishery."); addButton(9, "Questlog", questlog.accessQuestlogMainMenu).hint("Check your questlog."); @@ -1739,6 +1732,39 @@ private function RetrieveStack():void { } } +public function spellHealcamp():void { + clearOutput(); + if(player.mana < 30) { + outputText("Your mana is too low to cast this spell."); + doNext(campActions); + return; + } + useMana(30); + var healing:int = combat.scalingBonusIntelligence(); + //healing *= spellMod(); + if (player.unicornScore() >= 5) healing *= ((player.unicornScore() - 4) * 0.5); + if (player.alicornScore() >= 6) healing *= ((player.alicornScore() - 5) * 0.5); + if (player.armorName == "skimpy nurse's outfit") healing *= 1.2; + //Determine if critical heal! + var crit:Boolean = false; + var critHeal:int = 5; + if (player.findPerk(PerkLib.Tactician) >= 0 && player.inte >= 50) critHeal += (player.inte - 50) / 5; + if (rand(100) < critHeal) { + crit = true; + healing *= 1.75; + } + healing = Math.round(healing); + outputText("You chant a magical song of healing and recovery and your wounds start knitting themselves shut in response. (+" + healing + ")."); + if (crit == true) outputText(" *Critical Heal!*"); + HPChange(healing,false); + outputText("\n\n"); + statScreenRefresh(); + flags[kFLAGS.SPELLS_CAST]++; + //spellPerkUnlock(); + doNext(doCamp); + cheatTime(1/12); +} + private function swimInStream():void { var izmaJoinsStream:Boolean = false; var marbleJoinsStream:Boolean = false; @@ -2206,7 +2232,7 @@ CoC.instance.saves.saveGame(player.slotName); return; } //Full Moon - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { SceneLib.lunaFollower.fullMoonEvent(); sleepRecovery(false); return; @@ -2236,7 +2262,7 @@ CoC.instance.saves.saveGame(player.slotName); } else if(flags[kFLAGS.SLEEP_WITH] == "Luna" && flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("You head to bed, Luna following you. "); - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { SceneLib.lunaFollower.sleepingFullMoon(); return; } @@ -3433,13 +3459,8 @@ private function promptSaveUpdate():void { } /* if (flags[kFLAGS.MOD_SAVE_VERSION] == 20) { flags[kFLAGS.MOD_SAVE_VERSION] = 21; - if (player.hasPerk(PerkLib.Lycanthropy)) { - player.skin.coverage = Skin.COVERAGE_LOW; - player.coatColor = player.hairColor; - } - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; clearOutput(); - outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); + outputText("Text."); doNext(doCamp); return; } @@ -3450,20 +3471,6 @@ private function promptSaveUpdate():void { doNext(doCamp); return; } - if (flags[kFLAGS.MOD_SAVE_VERSION] == 22) { - flags[kFLAGS.MOD_SAVE_VERSION] = 23; - clearOutput(); - outputText("Text."); - doNext(doCamp); - return; - } - if (flags[kFLAGS.MOD_SAVE_VERSION] == 23) { - flags[kFLAGS.MOD_SAVE_VERSION] = 24; - clearOutput(); - outputText("Text."); - doNext(doCamp); - return; - } */ doCamp(); } diff --git a/classes/classes/Scenes/Camp/CampScenes.as b/classes/classes/Scenes/Camp/CampScenes.as index e4094b97d5..5f84239f84 100644 --- a/classes/classes/Scenes/Camp/CampScenes.as +++ b/classes/classes/Scenes/Camp/CampScenes.as @@ -125,7 +125,7 @@ public function PeepingTom3():void { // outputText("As a naga, Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (arianScene.arianFollower() && flags[kFLAGS.ARIAN_VAGINA] > 0 && flags[kFLAGS.ARIAN_COCK_SIZE] == 0) outputText("Arian while formerly a male seems to get along with the other girls.\n\n"); if (flags[kFLAGS.SIDONIE_FOLLOWER] >= 1) { outputText("Sitting on a side of the spring that is spacious enough to accommodate his larger frame, Sidonie lies relaxed, among the girls. Most of them give her not-so subtle glances, some of them at her hefty bosom, but the most directed at the thick equine member dangling from the legs. Not caring too much about their looks, she simply lies and enjoy the bath.\n\n"); @@ -178,7 +178,7 @@ public function HaveAGirlBath():void { // outputText("As a naga Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath. Can’t say this is not welcome.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) { if (flags[kFLAGS.IZMA_NO_COCK] == 0) outputText("While not entirely a girl, Izma is womanly enough that she was still accepted in the bath, her crotch well hidden behind a cloth.\n\n"); else outputText("While she was not always a girl, Izma is womanly enough that she was still accepted in the bath.\n\n"); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 6c53a2bbd2..2bf325152f 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -39,7 +39,7 @@ package classes.Scenes outputText("-Kindra archery training would progress 2x faster.\n"); outputText("-Manual that Chi Chi drops after beating PC in second fight unlock Soul Blast soulskill (15 turns CD, chance to stun for 3 turns and dmg scale with PC current str, int and wis)\n"); outputText("-Fixed bugs: Softlocks on few enemy bind specials (like Izumi or Ceraph), Wrath specials correctly list needed resource, option to send Izma to fishery before it's built, many other small fixes\n\n"); - outputText("Version 0.8i (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes):\n\n"); + outputText("Version 0.8i:\n\n"); outputText("-New tier 0 misc lvl-up perk: Tough Hide. Req. Job: Beast Warrior perk and 30+ tou. Effect: Increase natural armor by 2 so long as PC have scale chitin fur or other natural armor.\n"); outputText("-New tier 1 misc lvl-up perk: Feral Armor. Req. Tough Hide perk and 60+ tou. Effect: Gain extra armor based on PC toughness so long as PC is naked, +20 to max wrath. (Similar to agility but PC must be naked and have natural armor)\n"); outputText("-New tier 1 misc lvl-up perk: Job: Healer. Req. 30+ int and 30+ wis. Effect: +5 to max Int and Wis (scalable), +30 to max Mana, +10% to spellpower when using healing spells\n"); @@ -57,6 +57,7 @@ package classes.Scenes outputText("-Having natural claws add toggle in combat menu to switch between normal or feral combat style. Only when PC not use any weapon (after few special exceptions) can benefit from feral combat style - when PC can attack more than once a turn fatigue costs will be halfed.\n"); outputText("-New melee weapon: Claws - obtainable by buying in weapon shop in He'Xin'Dao. 0 atk, 10% to cause bleed, 100 gems, is one of special exception weapons, which could be used without loosing benefits from using feral combat style.\n"); outputText("-All bleed effects not req. to lower enemy armor below 10. Also previous 50% chance for bleed effect was lowered to 25% for hooked gaunlets.\n"); + //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-First gaunlet repeatable reward was lowered to 15 spirit stones to keep in theme of 5 SS for each enemy defeated in gaunlet challanges.\n"); outputText("-Perk Rage give 50 more to max wrath and perk Anger 100 more to max wrath. To perk Job: Warlord req. was added option to use perk Feral Whirlwind instead of Whirlwind or Whipping. Other req. stay the same.\n"); outputText("-Beast Warrior PC's can use their own version of Whirlwind that req. only to have natural claws or weapons that can substitude natural claws. Almost all rest is similar to Whirlwind performed with any non-large/large weapon.\n"); @@ -73,6 +74,7 @@ package classes.Scenes outputText("-New body part - face: Avain Face. No prereq.\n"); outputText("-New body part - ears: Avain Ears. No prereq.\n"); outputText("-New body part - skin: Feathers. No prereq.\n"); + //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); outputText("-New melee weapon (by Shamanknight): Halberd - buyable in weapons shop in Tel'Adre. Cost 1200 gems. Base atk is 6 increased by 9 when PC have 50+ str and another 15 more atk when having 100+ str. Attacks ignore 40% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Guan Dao - buyable in weapons shop in He'Xin'Dao. Cost 100 spirit stones. Base atk is 6 increased by 8 when PC have 50+ str and another 11 more atk when having 100+ str. Attacks ignore 60% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Fly-Whisk - buyable in weapons shop in He'Xin'Dao. Cost 80 spirit stones. Base atk is 0, increase magical soulskills power by 20%.\n"); @@ -90,33 +92,14 @@ package classes.Scenes outputText("-Tease and few other lust dealing attacks scalling was changed to use libido scaling instead lvl based one + in case of alraune it will have toughness scaling too.\n"); outputText("-Giacomo was added to possible encounters in Soul Sense menu. Also Lumi Lab after first time visiting it would be moved to Dungeons submenu (since it should been like Sean shop inside one of dungeons).\n"); outputText("-Celess related events in forest would be temporaly unaccesable (not affecting anything if PC already have Celess in camp).\n"); - outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n"); - outputText("Version 0.8i2:\n\n"); - outputText("-\n"); + outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n\n\n\n\n");/*ostatni punkt changelogu + outputText("-Added in current version race effects to Metamorph perk: \n"); outputText("-\n"); outputText("-\n"); - outputText("-Diana later stages stats adjusted. Also added req. of min. lvl 3 to meet her at lake, lowered encounter chance.\n"); - outputText("-Luna can be spared when PC accept her (by loosing in fight or just accepting). In case of simple accepting there would be new option showing up in talk menu after talking with her on Lycantrophy after accpting her that allow voluntary been biten by her. After sparing she can lvl up up to lvl 27.\n"); - outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); - outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); - outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); - outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); - outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); - outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); - outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); - outputText("-Starting mana cap rised from 100 to 200 and starting fatigue cap from 100 to 150. Feral Whirlwind base dmg increased by 50%. Archery base accuracy increased form 30% to 40%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not just any item in shield slot like mana bracer.\n"); - outputText("-Attacks using intelligence and wisdom scalling would now use scalling used by attack using str/tou/spe, which mean at stat values above 100 it would be weaker effect.\n"); - outputText("-Req. for perks form corruption tree lowered: Corrupted Libido, Seduction, Nymphomania, Acclimation, Sense Corruption, Sadist, Arousing Aura\n"); - outputText("-Monsters base lust cap lowered from 100 to 70. Also now they will get a few points to max cap each lvl (at begining 2, then 5, 10, 20).\n"); - outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed, Temple of the Divine rebulding bugfixing, removed req. of Herism perk for perk Job: Countresan, missing Anzu in his Palace\n\n\n\n\n");/*ostatni punkt changelogu - //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); - //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Corrupted Celess to corrupt. (item properties desc).\n"); outputText("-New event perk: Gargoyle. Gained in ritual to become gargoyle by picking own blood. Effects: \n"); outputText("-New event perk: Corrupted Gargoyle. Gained in ritual to become gargoyle by picking minotaur blood. Effects: \n"); - outputText("-Added in current version race effects to Metamorph perk: \n"); - outputText("-\n"); outputText("-\n"); outputText("-\n"); outputText("-\n"); @@ -124,14 +107,12 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); outputText("-Added in current version race effects to Metamorph perk: \n");, Goo, Siren, Bat, Vampire, Cat, Cheshire cat outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); @@ -173,6 +154,8 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); + outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index aad6d3e7d0..a8c6d8d56f 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -804,7 +804,6 @@ public function baseelementalattacks(elementType:int = -1):void { if (summonedElementals >= 8 && manaCost > 45 && player.hasPerk(PerkLib.StrongestElementalBond)) manaCost -= 40; if (player.mana < manaCost) { outputText("Your mana is too low to fuel your elemental attack!\n\n"); - flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] = 1; doNext(combatMenu); } else { @@ -830,7 +829,6 @@ public function elementalattacks(elementType:int, summonedElementals:int):void { if (player.hasPerk(PerkLib.ElementalConjurerResolve)) elementalamplification += 0.1 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerDedication)) elementalamplification += 0.2 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerSacrifice)) elementalamplification += 0.3 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; - if (player.weapon == weapons.SCECOMM) elementalamplification += 0.5; elementalDamage *= elementalamplification; //Determine if critical hit! var crit:Boolean = false; @@ -1255,13 +1253,8 @@ internal function wait():void { } } -public function meleeAccuracy():Number { - var accmod:Number = 200; - return accmod; -} - public function arrowsAccuracy():Number { - var accmod:Number = 80; + var accmod:Number = 60; if (player.hasPerk(PerkLib.HistoryScout) || player.hasPerk(PerkLib.PastLifeScout)) accmod += 40; if (player.hasPerk(PerkLib.Accuracy1)) { accmod += player.perkv1(PerkLib.Accuracy1); @@ -2347,6 +2340,7 @@ public function attack():void { return; } + var damage:Number = 0; //Determine if dodged! if ((player.hasStatusEffect(StatusEffects.Blind) && rand(2) == 0) || (monster.spe - player.spe > 0 && int(Math.random() * (((monster.spe - player.spe) / 4) + 80)) > 80)) { //Akbal dodges special education @@ -2385,17 +2379,6 @@ public function attack():void { enemyAI(); return; } - meleeDamageAcc(); -} - -public function meleeDamageAcc():void { - var accMelee:Number = 0; - accMelee += (meleeAccuracy() / 2); - if (flags[kFLAGS.ATTACKS_ACCURACY] > 0) accMelee -= flags[kFLAGS.ATTACKS_ACCURACY]; - if (player.weaponName == "Truestrike sword") accMelee = 100; -// fatigue(oneArrowTotalCost()); - if (rand(100) < accMelee) { - var damage:Number = 0; //------------ // DAMAGE //------------ @@ -2797,19 +2780,16 @@ public function meleeDamageAcc():void { dynStats("lus", 25); } + outputText("\n"); checkAchievementDamage(damage); WrathWeaponsProc(); heroBaneProc(damage); - } - else { - - } if(monster.HP <= 0){doNext(endHpVictory); return;} if(monster.lust >= monster.maxLust()){doNext(endLustVictory); return;} if (flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] >= 2){ flags[kFLAGS.MULTIPLE_ATTACKS_STYLE]--; - // flags[kFLAGS.ATTACKS_ACCURACY] += 15; + // flags[kFLAGS.ATTACKS_ACCURACY] += 5; attack(); return; } @@ -5348,13 +5328,6 @@ public function clawsRend():void { outputText("\n\n"); enemyAI(); } -public function PussyLeggoMyEggo():void { - clearOutput(); - outputText("You let your opponent free ending your embrace."); - outputText("\n\n"); - monster.removeStatusEffect(StatusEffects.Pounce); - enemyAI(); -} public function runAway(callHook:Boolean = true):void { if (callHook && monster.onPcRunAttempt != null){ @@ -5807,7 +5780,7 @@ public function soulskillMagicalMod():Number { public function soulskillcostmulti():Number { var multiss:Number = 1; - if (soulskillMod() > 1) multiss += (soulskillMod() - 1) * 0.1;/* + if (soulskillMod() > 1) multiss += Math.round(soulskillMod() - 1) * 10;/* if (player.hasPerk(PerkLib.SoulPersonage)) multiss += 1; if (player.hasPerk(PerkLib.SoulWarrior)) multiss += 1; if (player.hasPerk(PerkLib.SoulSprite)) multiss += 1; @@ -5841,16 +5814,28 @@ public function soulskillCost():Number { for(var i:int = 20; (i <= 80) && (i <= stat); i += 20){ scale += stat - i; } - for(i = 100; (i <= 2000) && (i <= stat); i += 50){ + for(i = 100; (i <= 1200) && (i <= stat); i += 50){ scale += stat - i; } return scale; } + public function scalingBonusToughness():Number { + return touSpeStrScale(player.tou); + } + + public function scalingBonusSpeed():Number { + return touSpeStrScale(player.spe); + } + + public function scalingBonusStrength():Number { + return touSpeStrScale(player.str); + } + private function inteWisLibScale(stat:int):Number{ var scale:Number = 6.75; var changeBy:Number = 0.50; - if(stat <= 2000){ + if(stat <= 1200){ if(stat <= 100){ scale = (2/6) + ((int(stat/100)/20) * (1/6)); changeBy = 0.25; @@ -5861,24 +5846,12 @@ public function soulskillCost():Number { return (stat * scale) + rand(stat * (scale + changeBy)); } - public function scalingBonusToughness():Number { - return touSpeStrScale(player.tou); - } - - public function scalingBonusSpeed():Number { - return touSpeStrScale(player.spe); - } - - public function scalingBonusStrength():Number { - return touSpeStrScale(player.str); - } - public function scalingBonusWisdom():Number { - return touSpeStrScale(player.wis); + return inteWisLibScale(player.wis); } public function scalingBonusIntelligence():Number { - return touSpeStrScale(player.inte); + return inteWisLibScale(player.inte); } public function scalingBonusLibido():Number { diff --git a/classes/classes/Scenes/Combat/CombatMagic.as b/classes/classes/Scenes/Combat/CombatMagic.as index 6099d08834..85597129cc 100644 --- a/classes/classes/Scenes/Combat/CombatMagic.as +++ b/classes/classes/Scenes/Combat/CombatMagic.as @@ -2053,7 +2053,7 @@ public class CombatMagic extends BaseCombatContent { if (monster.hasPerk(PerkLib.DarknessVulnerability)) damage *= 0.5; if (monster.hasPerk(PerkLib.LightningNature)) damage *= 0.2; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); damage = Math.round(damage); //if (monster.short == "goo-girl") damage = Math.round(damage * 1.5); - pomyśleć czy bdą dostawać bonusowe obrażenia //if (monster.short == "tentacle beast") damage = Math.round(damage * 1.2); - tak samo przemyśleć czy bedą dodatkowo ranione diff --git a/classes/classes/Scenes/Combat/CombatSoulskills.as b/classes/classes/Scenes/Combat/CombatSoulskills.as index 4ebe47fba0..7f0d942710 100644 --- a/classes/classes/Scenes/Combat/CombatSoulskills.as +++ b/classes/classes/Scenes/Combat/CombatSoulskills.as @@ -25,8 +25,6 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Ice Fist", IceFist).hint("A chilling strike that can freeze an opponent solid, leaving it vulnerable to shattering soul art and hindering its movement. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.findPerk(PerkLib.FireAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to fire."); - } else if (!player.isFistOrFistWeapon()) { - bd.disable("Your current used weapon not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } @@ -35,8 +33,6 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Fire Punch", FirePunch).hint("Ignite your opponents dealing fire damage and setting them ablaze. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); - } else if (!player.isFistOrFistWeapon()) { - bd.disable("Your current used weapon not allow to use this technique."); } else if (player.findPerk(PerkLib.ColdAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to cold."); } @@ -61,8 +57,6 @@ public class CombatSoulskills extends BaseCombatContent { buttons.add("Punishing Kick", PunishingKick).hint("A vicious kick that can daze an opponent, reducing its damage for a while. \n\nWould go into cooldown after use for: 10 rounds \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.hasStatusEffect(StatusEffects.CooldownPunishingKick)) { bd.disable("You need more time before you can use Punishing Kick again."); - } else if (!player.isBiped() || !player.isTaur()) { - bd.disable("Your legs not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } diff --git a/classes/classes/Scenes/Combat/CombatTeases.as b/classes/classes/Scenes/Combat/CombatTeases.as index 130bd92292..de139f03f7 100644 --- a/classes/classes/Scenes/Combat/CombatTeases.as +++ b/classes/classes/Scenes/Combat/CombatTeases.as @@ -1462,8 +1462,8 @@ public class CombatTeases extends BaseCombatContent { damage *= .7; bonusDamage *= .7; if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - damage *= (1 + (player.lust100 * 0.01)); - bonusDamage *= (1 + (player.lust100 * 0.01)); + damage *= (1 + player.lust100); + bonusDamage *= (1 + player.lust100); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { damage *= 1.15; diff --git a/classes/classes/Scenes/Combat/CombatUI.as b/classes/classes/Scenes/Combat/CombatUI.as index 42ddc3f323..29d50a87cf 100644 --- a/classes/classes/Scenes/Combat/CombatUI.as +++ b/classes/classes/Scenes/Combat/CombatUI.as @@ -187,7 +187,7 @@ public class CombatUI extends BaseCombatContent { if (player.fatigueLeft() <= combat.physicalCost(20)) { button(0).disable("You are too tired to bite " + monster.a + " " + monster.short + "."); } - //addButton(4, "Release", combat.PussyLeggoMyEggo); + //addButton(4, "Release", combat.GooLeggoMyEggo); } else if (player.hasPerk(PerkLib.FirstAttackElementals) && flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] == 3 && flags[kFLAGS.IN_COMBAT_PLAYER_ELEMENTAL_ATTACKED] != 1) { menu(); if (player.hasStatusEffect(StatusEffects.SummonedElementalsAir)) addButton(0, "Air", combat.baseelementalattacks, Combat.AIR); diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index dfd6de6728..029b89f49f 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -695,7 +695,7 @@ public class MagicSpecials extends BaseCombatContent { } if (player.findPerk(PerkLib.SluttySimplicity) >= 0 && player.armorName == "nothing") lustDmgF *= (1 + ((10 + rand(11)) / 100)); if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - lustDmgF *= (1 + (player.lust100 * 0.01)); + lustDmgF *= (1 + player.lust100); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { lustDmgF *= 1.15; @@ -1127,7 +1127,7 @@ public class MagicSpecials extends BaseCombatContent { if (monster.hasPerk(PerkLib.LightningVulnerability)) damage *= 2; if (monster.hasPerk(PerkLib.DarknessNature)) damage *= 5; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); damage = Math.round(damage); //Shell if(monster.hasStatusEffect(StatusEffects.Shell)) { @@ -1713,26 +1713,26 @@ public class MagicSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.ImprovedCrinosShape)) { if (player.hasPerk(PerkLib.GreaterCrinosShape)) { if (player.hasPerk(PerkLib.MasterCrinosShape)) { - temp1 += player.str * 1.6; - temp2 += player.tou * 1.6; - temp3 += player.spe * 1.6; + temp1 += player.str * 0.2; + temp2 += player.tou * 0.2; + temp3 += player.spe * 0.2; } else { - temp1 += player.str * 0.8; - temp2 += player.tou * 0.8; - temp3 += player.spe * 0.8; + temp1 += player.str * 0.15; + temp2 += player.tou * 0.15; + temp3 += player.spe * 0.15; } } else { - temp1 += player.str * 0.4; - temp2 += player.tou * 0.4; - temp3 += player.spe * 0.4; + temp1 += player.str * 0.1; + temp2 += player.tou * 0.1; + temp3 += player.spe * 0.1; } } else { - temp1 += player.str * 0.2; - temp2 += player.tou * 0.2; - temp3 += player.spe * 0.2; + temp1 += player.str * 0.05; + temp2 += player.tou * 0.05; + temp3 += player.spe * 0.05; } temp1 = Math.round(temp1); temp2 = Math.round(temp2); @@ -1756,7 +1756,7 @@ public class MagicSpecials extends BaseCombatContent { } public function returnToNormalShape():void { clearOutput(); - outputText("Gathering all you willpower you forcefully subduing your inner beast and returning to your normal shape."); + outputText("Gathering all you willpower you forcefully subduing your inner beast and retunrning to your normal shape."); player.dynStats("str", -player.statusEffectv1(StatusEffects.CrinosShape)); player.dynStats("tou", -player.statusEffectv2(StatusEffects.CrinosShape)); player.dynStats("spe", -player.statusEffectv3(StatusEffects.CrinosShape)); diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 4ebd372f98..c22a005709 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -223,7 +223,7 @@ public class PhysicalSpecials extends BaseCombatContent { bd.disable("Your golems can't attack flying targets. (Only golems made by grand-master golem maker can do this)"); } } - if (player.isShieldsForShieldBash()) { + if (player.shield != ShieldLib.NOTHING) { bd = buttons.add("Shield Bash", shieldBash).hint("Bash your opponent with a shield. Has a chance to stun. Bypasses stun immunity. \n\nThe more you stun your opponent, the harder it is to stun them again."); bd.requireFatigue(physicalCost(20)); } @@ -830,9 +830,9 @@ public class PhysicalSpecials extends BaseCombatContent { } fatigue(50, USEFATG_PHYSICAL); var damage:Number = 0; - damage += (scalingBonusStrength() * 0.3) + ((player.str + unarmedAttack()) * 1.5); - if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.15) + ((player.str + unarmedAttack()) * 0.75); - if (damage < 15) damage = 15; + damage += (scalingBonusStrength() * 0.2) + player.str + unarmedAttack(); + if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.1) + ((player.str + unarmedAttack()) * 0.5); + if (damage < 10) damage = 10; //weapon bonus if (player.weaponAttack < 101) damage *= (1 + (player.weaponAttack * 0.02)); else if (player.weaponAttack >= 101 && player.weaponAttack < 201) damage *= (2 + ((player.weaponAttack - 100) * 0.015)); @@ -1143,7 +1143,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1197,7 +1196,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1252,7 +1250,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1294,7 +1291,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1330,7 +1326,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1366,7 +1361,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1818,7 +1812,7 @@ public class PhysicalSpecials extends BaseCombatContent { clearOutput(); if(player.fatigue + physicalCost(10) > player.maxFatigue()) { clearOutput(); - outputText("You just don't have the energy to pounce at anyone right now..."); + outputText("You just don't have the energy to puonce at anyone right now..."); //Gone menuLoc = 1; menu(); addButton(0, "Next", combatMenu, false); diff --git a/classes/classes/Scenes/DebugMenu.as b/classes/classes/Scenes/DebugMenu.as index ec21b20d7f..6308bb4bfd 100644 --- a/classes/classes/Scenes/DebugMenu.as +++ b/classes/classes/Scenes/DebugMenu.as @@ -627,7 +627,7 @@ public class DebugMenu extends BaseContent } displayHeader("Color picker"); outputText('\nCurrent color:'); - outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); + outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); outputText("\nSaturation:\t\t"+s+' / 100\t(0: greyscale, 100: bright color)'); outputText("\nLuminosity:\t"+l+' / 100\t(0: black, 50: bright color, 100: white)'); outputText('\n\nCurrent mode: '+pickerMode+' color.'); diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace.as b/classes/classes/Scenes/Dungeons/AnzuPalace.as index 2228124af4..d61458f1e5 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace.as @@ -135,7 +135,6 @@ use namespace CoC; outputText("\n\nComfortable armchairs, with soft cushions, covered in red velvet provide a good place to rest. On the left part of the room, are several shelves containing books about the story of Mittani and other similar things."); outputText("\n\nTo the east is the hall which connects the rest of the rooms in this floor. In a corner, on the end of the room, leading to the north, a door leads to the baths."); dungeons.setDungeonButtons(roomBathroom, null, null, roomFoyer); - if ((model.time.hours >= 10 && model.time.hours < 13) || model.time.hours == 19) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomBathroom():void { dungeonLoc = 91; @@ -145,7 +144,6 @@ use namespace CoC; outputText("\n\nThe rest of the room is covered with light brown tiles on the floor and the lower part of the walls, and a pattern of golden tiles and gold inlaids on the upper walls, separated by a band of mosaics displaying fish in exotic colors, sea serpents and aquatic monsters of a kind that you can’t recognize."); outputText("\n\nSome lamps around the room keep the bath well illuminated, and a door to the south leads back to living room."); dungeons.setDungeonButtons(null, roomLivingRoom, null, null); - if (model.time.hours == 22) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomDiningRoom():void { dungeonLoc = 92; @@ -155,7 +153,6 @@ use namespace CoC; outputText("\n\nDecorating the corners are vases with violets, whose smell perfumes the air. The columns in golden marble and the colorful decorations in silk hanging from them complete the room atmosphere."); outputText("\n\nTo the north, there is a door that leads to the kitchen. Another, leading to the west, goes back to the principal hall."); dungeons.setDungeonButtons(roomKitchen, null, roomFoyer, null); - if (model.time.hours == 9 || model.time.hours == 14 || model.time.hours == 21) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomKitchen():void { dungeonLoc = 93; @@ -165,7 +162,6 @@ use namespace CoC; outputText("\n\nIn the back of the room, a wooden door leads to the place where Anzu stores food. Inside are grains, bread, cheese, several crates containing wine, and in some containers, wrapped inside snow and ice, are big pieces of meat."); outputText("\n\nThe constant heat from the oven and the stove makes this room as warm as the bedroom or the living room."); dungeons.setDungeonButtons(null, roomDiningRoom, null, null); - if (model.time.hours == 8 || model.time.hours == 13 || model.time.hours == 20) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Floor 2 public function roomHallFloor2():void { @@ -188,7 +184,6 @@ use namespace CoC; outputText("\n\nAnzu’s bed is huge, even for Marethian standards. Soft cushions and linen sheets cover the mattress. The bed itself releases an aromatic smell. You have the temptation of climb in and sleep on it all day."); outputText("\n\nAnother fireplace, smaller than the one in the living room, warms the place atmosphere."); dungeons.setDungeonButtons(null, null, null, roomHallFloor2); - if (model.time.hours <= 7 || model.time.hours >= 23) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomLibrary():void { dungeonLoc = 96; @@ -198,7 +193,6 @@ use namespace CoC; outputText("\n\nOn the end of the place, is Anzu’s private study. A desk, a chair, some bookcases next to it. Nothing extraordinary."); outputText("\n\nTo the south is the exit to the hall, that connects all rooms in the third floor."); dungeons.setDungeonButtons(null, roomHallFloor2, null, null); - if (model.time.hours >= 15 && model.time.hours < 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomMultiuse():void { dungeonLoc = 97; @@ -249,7 +243,6 @@ use namespace CoC; outputText("\n\nThe forest and the snow covered hills extend as far as the eye can see. The fresh air, though cold, bring you a peace which takes you away from the corruption and the horrors of this land for a moment."); dungeons.setDungeonButtons(null, null, null, null); addButton(7, "Downstairs", roomHallFloor3); - if (model.time.hours == 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Basement public function roomBasement():void { diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as index 0eb4b7601a..3ca1310290 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as @@ -210,7 +210,7 @@ use namespace CoC; outputText("\n\n\"I think that even after we are friends and all, and the fact of we don’t mind…em...relieving pressure, together…\""); outputText("\n\nOh, you’re understanding the way of he’s going. After a few doubts, he puts his hand on yours and finally says:"); outputText("\n\n\"I think… I now think of you as more than a friend. You see…despite being a god, sometimes I could be a little unsure, and explaining this kind of thing is difficult for me, but…I think, no, I’m sure what I feel about you is not only friendship, because, [name], I think that I’ve fallen in love with you. "); - outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me.\""); + outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me."); flags[kFLAGS.ANZU_RELATIONSHIP_LEVEL] = 4; doYesNo(anzuRelatLvl4Sex, anzuRelatLvl4Dont); return; diff --git a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as index 78479adbc5..84227e4eb7 100644 --- a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as +++ b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as @@ -777,7 +777,7 @@ public class LethiceScenes extends BaseContent outputText("\n\nThe girl blinks, the rage on her face replaced by confusion. “W-what are you talking about, demon?” she murmurs, looking up for the first time. You glance down at her from your place at Mistress’s side, really looking at this... this “Champion” for the first time. You feel a vague sense of recognition when you look at her, even as dirty and cum-slathered as she is, though you can’t place her. You squint, but trying to think more about it just makes your head hurt, and so you instead look down at those perky tits of hers, letting yourself get hard again at the thought of grabbing onto them and fucking her as your next bitch."); outputText("\n\n“You’re lucky,” Mistress smirks, standing. “"); - if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines.\""); + if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines."); else { outputText("How did you escape from the factory, I wonder? And so clean and pure, too... you’re belly’s not yet swollen with imps, and your breasts are so small. Did you slip through"); diff --git a/classes/classes/Scenes/Holidays.as b/classes/classes/Scenes/Holidays.as index 0627d34c71..9dda10232f 100644 --- a/classes/classes/Scenes/Holidays.as +++ b/classes/classes/Scenes/Holidays.as @@ -1677,7 +1677,7 @@ public class Holidays { if (player.hasVagina()) EngineCore.addButton(3, "Pussy", pastieValentineIntro, "vag"); } else { - EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover.\""); + EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover."); EngineCore.doNext(SceneLib.camp.returnToCampUseTwoHours); } } diff --git a/classes/classes/Scenes/Inventory.as b/classes/classes/Scenes/Inventory.as index 7c30754c5a..7b77536180 100644 --- a/classes/classes/Scenes/Inventory.as +++ b/classes/classes/Scenes/Inventory.as @@ -102,8 +102,6 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (miscNieve || miscHolli || player.hasKeyItem("Dragon Egg") >= 0 - || player.hasKeyItem("Gryphon Statuette") >= 0 - || player.hasKeyItem("Peacock Statuette") >= 0 || flags[kFLAGS.ANEMONE_KID] > 0 || flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (miscNieve) { @@ -175,15 +173,7 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (model.time.hours >= 6) addButton(5, "Garden", Gardening.manageuyourgarden).hint("Visit your plant offspring"); } - /* if (player.hasKeyItem("Gryphon Statuette") >= 0) { - addButton(6, "Gryphon", SceneLib.mutationsTable.skybornSeed(1)); - foundItem = true; - } - if (player.hasKeyItem("Peacock Statuette") >= 0) { - addButton(6, "Peacock", SceneLib.mutationsTable.skybornSeed(2)); - foundItem = true; - } - */ addButton(14, "Back", inventoryMenu); + addButton(14, "Back", inventoryMenu); } public function BagOfCosmosMenu():void { diff --git a/classes/classes/Scenes/Metamorph.as b/classes/classes/Scenes/Metamorph.as index 729017e4fc..59161ed796 100644 --- a/classes/classes/Scenes/Metamorph.as +++ b/classes/classes/Scenes/Metamorph.as @@ -40,8 +40,7 @@ public function accessMetamorphMenu():void { addButton(11, "Page 2", accessPage2MetamorphMenu); // addButton(12, "Page 3", accessPage3MetamorphMenu); // addButton(13, "Page 4", accessPage4MetamorphMenu); - if (player.hasPerk(PerkLib.JobSoulCultivator)) addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); - else addButton(14, "Back", playerMenu); + addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); } private function accessPage1MetamorphMenu():void { diff --git a/classes/classes/Scenes/NPCs/AmilyScene.as b/classes/classes/Scenes/NPCs/AmilyScene.as index dbc851dd57..82b6f63814 100644 --- a/classes/classes/Scenes/NPCs/AmilyScene.as +++ b/classes/classes/Scenes/NPCs/AmilyScene.as @@ -2548,11 +2548,6 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface //----------=============================------------ //Approach Amily: // EVENT 2427 - public function amilyFollowerEncounter2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaAmily(); - else amilyFollowerEncounter(); - } - public function amilyFollowerEncounter():void { if(!amilyCorrupt() && player.eggs() >= 20 && player.canOviposit() && flags[kFLAGS.AMILY_OVIPOSITION_UNLOCKED] == 0) { amilyEggStuff(); @@ -2707,7 +2702,7 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface private function amilyCorruptSexMenu():void { amilySprite(); if(player.gender > 0) { - outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?\""); + outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?"); menu(); if (player.hasCock()) { addButton(0, "Anal", corruptAmilyBuckFutter).hint("Fuck Amily in the ass!"); @@ -8298,15 +8293,5 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface amilyPreggoChance(); doNext(camp.returnToCampUseOneHour); } - - public function mishapsLunaAmily():void { - clearOutput(); - outputText("You check on Amily and notice the mouse is holding her foot visibly in pain.\n\n"); - outputText("\"Gah how did I step on these " + (silly() ? "Lego" : "rocks") + "!? I should’ve paid more attention. Sorry [name], we’ll talk again later.\"\n\n"); - outputText("You think you notice Luna watching from a distance, but surely it's just your imagination.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 1, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 1, 0, 0, 0); - doNext(playerMenu); - } } } diff --git a/classes/classes/Scenes/NPCs/ChiChiFollower.as b/classes/classes/Scenes/NPCs/ChiChiFollower.as index 0cc0a71aa5..adec4177a1 100644 --- a/classes/classes/Scenes/NPCs/ChiChiFollower.as +++ b/classes/classes/Scenes/NPCs/ChiChiFollower.as @@ -73,7 +73,7 @@ public function WonSecondFight():void { public function WonSecondFightNo():void { outputText("Likely the proud master would rather have her opponent leave her be than be dishonored any further. You head back toward your camp to rest after this well earned victory, pocketing the scroll you found on Chi Chi at the same time, as you fail to notice the blood beginning to slowly create a small pool under her.\n\n"); outputText("A peasant runs to you, stopping you from leaving for a moment.\n\n"); - outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\"\n\n"); + outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\n\n"); outputText("You are somewhat shocked to learn that Chi Chi died, did she go all out in this battle to the point it cost her life? You head back to camp trying to figure how such a tragic incident happened in a training session.\n\n"); flags[kFLAGS.CHI_CHI_FOLLOWER] = 2; inventory.takeItem(weapons.MASTGLO, WonSecondFightNo2); @@ -421,11 +421,6 @@ public function SoulskilsManualsShopPunishingKick2():void { doNext(camp.returnToCampUseFourHours); } -public function ChiChiCampMainMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaChiChi(); - else ChiChiCampMainMenu(); -} - public function ChiChiCampMainMenu():void { clearOutput(); outputText("You go over to Chi Chi who pauses her training to head to you once you are close."); @@ -523,17 +518,5 @@ public function chichiSparring():void { startCombat(new ChiChi()); } -public function mishapsLunaChiChi():void { - clearOutput(); - outputText("As you go to visit Chi Chi you hear her scream. Running over to check whats going on you notice the fire mouse is now a sobbing mess, wet with water. You don’t recall her crying before so this must be serious.\n\n"); - outputText("\"Why why? Why would someone put a bucket right above my bedroll now I’m all wet and my fire will take hours to rise again!\"\n\n"); - outputText("She notice you checking her and panic.\n\n"); - outputText("\"Eep go away [name]! D..don’t look at me!! The last thing I need is you looking at me right now.\"\n\n"); - outputText("That’s quite the surprise. Does the proud fighter she normaly is turn into an awkward village girl the moment shes wet? Well regardless you guess you will have to visit her later because there’s no way she’s letting you approach her right now.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 4, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 0, 1); - doNext(playerMenu); -} - } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/Diana.as b/classes/classes/Scenes/NPCs/Diana.as index 275830179e..956a2dc1ea 100644 --- a/classes/classes/Scenes/NPCs/Diana.as +++ b/classes/classes/Scenes/NPCs/Diana.as @@ -34,8 +34,6 @@ package classes.Scenes.NPCs var cost:Number = 30; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 3; - if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 4.5; - if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 5; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -43,8 +41,6 @@ package classes.Scenes.NPCs var cost:Number = 50; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 5; - if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 7.5; - if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 10; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -58,8 +54,6 @@ package classes.Scenes.NPCs if (findPerk(PerkLib.WizardsFocus) >= 0) mod1 += .4; if (findPerk(PerkLib.SpellpowerHealing) >= 0) mod1 += .2; if (findPerk(PerkLib.NaturalHealingMinor) >= 0) mod1 += .3; - if (findPerk(PerkLib.NaturalHealingMajor) >= 0) mod1 += .4; - if (findPerk(PerkLib.NaturalHealingEpic) >= 0) mod1 += .5; return mod1; } public function SpellMod():Number { @@ -266,8 +260,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 18; - this.bonusHP = 730; - this.bonusMana = 285; + this.bonusHP = 725; + this.bonusMana = 265; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -281,8 +275,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 21; - this.bonusHP = 785; - this.bonusMana = 310; + this.bonusHP = 220; + this.bonusMana = 120; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -296,8 +290,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 24; - this.bonusHP = 790; - this.bonusMana = 330; + this.bonusHP = 220; + this.bonusMana = 120; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -311,8 +305,8 @@ package classes.Scenes.NPCs this.weaponAttack = 9; this.armorDef = 12; this.level = 27; - this.bonusHP = 845; - this.bonusMana = 355; + this.bonusHP = 220; + this.bonusMana = 120; this.gems = rand(5) + 15; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -421,13 +415,13 @@ package classes.Scenes.NPCs this.createPerk(PerkLib.NaturalHealingMinor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 6) { - this.createPerk(PerkLib.NaturalHealingMajor, 0, 0, 0, 0); + //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 7) { - this.createPerk(PerkLib.SoulSprite, 0, 0, 0, 0); + //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 8) { - this.createPerk(PerkLib.NaturalHealingEpic, 0, 0, 0, 0); + //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_FOLLOWER] == 3 || flags[kFLAGS.DIANA_FOLLOWER] == 4) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 6850a3f379..81d0c624e2 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -225,7 +225,7 @@ public function wonOverDianaOralM():void { if (flags[kFLAGS.DIANA_FOLLOWER] >= 2) { outputText("You don’t really even have to tell her, she’s already practically drooling. She quickly grabs your "); if (player.cockTotal() > 1) outputText("largest "); - outputText("cock, before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); + outputText("cock. , before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); outputText("Pleased you start pushing your "); if (player.cockTotal() > 1) outputText("largest "); outputText("[cock] into her eager mouth, "); @@ -440,7 +440,7 @@ public function wonOverDianaRape():void { outputText("Grunting, and with a huge amount of self control, you pull yourself out of her, spraying your load over her back. Satisfied, you climb off her, leaving her to hang off the " + object() + ", crying softly to herself, while you dress yourself and leave.\n\n"); } //if (player.isAlraune()) x; - if (flags[kFLAGS.DIANA_LVL_UP] < 3) flags[kFLAGS.DIANA_FOLLOWER] = 3; + if (flags[kFLAGS.DIANA_LVL_UP] < 2) flags[kFLAGS.DIANA_FOLLOWER] = 3; else flags[kFLAGS.DIANA_FOLLOWER] = 4; player.orgasm(); cleanupAfterCombat(); @@ -459,7 +459,7 @@ public function wonOverDianaSpare():void { flags[kFLAGS.DIANA_DEFEATS_COUNTER]++; if (flags[kFLAGS.DIANA_DEFEATS_COUNTER] == 1 && flags[kFLAGS.DIANA_LVL_UP] == 0) { if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers2)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers2, 4, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers2, 0, 0, 0, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 0, 18); flags[kFLAGS.DIANA_DEFEATS_COUNTER] = 0; flags[kFLAGS.DIANA_LVL_UP] = 1; } diff --git a/classes/classes/Scenes/NPCs/EmberScene.as b/classes/classes/Scenes/NPCs/EmberScene.as index 701e6fcfe3..697edddec3 100644 --- a/classes/classes/Scenes/NPCs/EmberScene.as +++ b/classes/classes/Scenes/NPCs/EmberScene.as @@ -209,11 +209,6 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface } //Approaching Ember (Z) - public function emberCampMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEmber(); - else emberCampMenu(); - } - public function emberCampMenu():void { clearOutput(); @@ -4620,13 +4615,5 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface outputText("\n\nYou look about, but see no sign of the dragon... " + emberMF("he", "she") + "'s probably gone to get breakfast." + player.clothedOrNaked(".. looking to the side, you spot your [armorName] neatly folded beside the nest.") + " Smiling to yourself, you " + player.clothedOrNaked("put on your [armorName] and ") + "get ready for another day..."); doNext(playerMenu); } - - public function mishapsLunaEmber():void { - clearOutput(); - outputText("As you call for Ember the dragon simply does not show up. You can see " + emberMF("him", "her") + " in the sky searching angrily for something and even hear " + emberMF("him", "her") + " swear in the distance. Whatever made Ember so mad you don’t want to know. You decide to call " + emberMF("him", "her") + " later so to avoid getting yourself burned as " + emberMF("he", "she") + " indeed start to torch the landscape at random.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 2, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 1, 0, 0); - doNext(playerMenu); - } } } diff --git a/classes/classes/Scenes/NPCs/EtnaFollower.as b/classes/classes/Scenes/NPCs/EtnaFollower.as index a398186a8b..89c187fb86 100644 --- a/classes/classes/Scenes/NPCs/EtnaFollower.as +++ b/classes/classes/Scenes/NPCs/EtnaFollower.as @@ -419,11 +419,6 @@ public function etnaRapeIntro2():void addButton(2, "No", etnaRapeNo); } -public function etnaCampMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEtna(); - else etnaCampMenu(); -} - public function etnaCampMenu():void { spriteSelect(SpriteDb.s_etna); @@ -576,16 +571,6 @@ public function etnaSparsWithPC():void startCombat(new Etna()); } -public function mishapsLunaEtna():void { - clearOutput(); - outputText("You go check on Etna but find her sleeping in broad daylight. She acknowledge you for a second only.\n\n"); - outputText("\"Yawn... Sorry [name] since I found those weird herbs next to my carpet I just feel so drowsy. We will talk again later okay?\"\n\n"); - outputText("Well, guess you will come back later then, but herbs? Now that you look at them these herbs indeed look like catnip. You remove them from Etna direct environment for now. Still who would actually do this kind of prank?\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 1, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 1, 0, 0, 0); - doNext(playerMenu); -} - } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/EvangelineFollower.as b/classes/classes/Scenes/NPCs/EvangelineFollower.as index 756c7c6b4e..753de6c789 100644 --- a/classes/classes/Scenes/NPCs/EvangelineFollower.as +++ b/classes/classes/Scenes/NPCs/EvangelineFollower.as @@ -703,7 +703,7 @@ private function recivingCraftedSoulGem():void { clearOutput(); outputText("As you check on Evangeline she hands a purplish crystal to you.\n\n"); outputText("\"Here's your soul gem. Please use this responsibly, they are very hard to craft, and quite dangerous.\"\n\n"); - outputText("Acquired Soul Gem\n\n"); + outputText("Acquired Soul Gem"); if (flags[kFLAGS.GARGOYLE_QUEST] == 3) flags[kFLAGS.GARGOYLE_QUEST]++; player.removeStatusEffect(StatusEffects.SoulGemCrafting); inventory.takeItem(useables.SOULGEM, meetEvangeline); diff --git a/classes/classes/Scenes/NPCs/HelFollower.as b/classes/classes/Scenes/NPCs/HelFollower.as index 59a240b163..f969c8100d 100644 --- a/classes/classes/Scenes/NPCs/HelFollower.as +++ b/classes/classes/Scenes/NPCs/HelFollower.as @@ -475,10 +475,7 @@ public function angryHelAndIzzyCampHelHereFirst():void { doNext(camp.returnToCampUseOneHour); } -public function heliaFollowerMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaHel(); - else heliaFollowerMenu(); -} + //Introduction -- Followers -> Helia public function heliaFollowerMenu(display:Boolean = true):void { @@ -2432,13 +2429,5 @@ outputText("\n\nYour hand slides across Sophie’s stomach to squeeze one of her menu(); doNext(camp.returnToCampUseOneHour); } - -public function mishapsLunaHel():void { - clearOutput(); - outputText("Helia is currently sleeping on her mats holding a bottle of firewater. You smell the bottle up and find clear sign of soporifics inside. Whoever did this wanted to get rid of her for a few hours. Regardless the result is the same and no matter what you do the lizard girl won’t wake up, might as well try again later.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 3, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 1, 0); - doNext(playerMenu); -} } } diff --git a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as index 8753264117..4f9fe5bc03 100644 --- a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as @@ -346,7 +346,7 @@ private function isabellasAccentCoaching():void { clearOutput(); //Cooldown rejection if(flags[kFLAGS.ISABELLA_ACCENT_TRAINING_COOLDOWN] > 1) { - outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); + outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); //Back to follower menu! doNext(callForFollowerIsabella); return; @@ -983,7 +983,7 @@ public function angryMurble():void { clearOutput(); outputText("You come to Isabella's part of the camp with Marble in tow, supposing now is as good a time as ever to introduce the two. Marble greats Isabella warmly but immediately starts bombarding her with questions about her origin. From her persistence, it seems she is interested in meeting another cow-girl. Though a little overwhelmed, Isabella recovers quickly, explaining her origins and the impurity of her cow-girl nature. Marble is visibly disappointed.\n\n"); - outputText("The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); + outputText("\"The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); flags[kFLAGS.ISABELLA_MURBLE_BLEH] = 2; doNext(playerMenu); } diff --git a/classes/classes/Scenes/NPCs/IsabellaScene.as b/classes/classes/Scenes/NPCs/IsabellaScene.as index 50cbb3947b..a9d2865332 100644 --- a/classes/classes/Scenes/NPCs/IsabellaScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaScene.as @@ -258,7 +258,7 @@ public function unwelcomeFightCowGal():void { public function fightIsabella():void { clearOutput(); if(!isabellaFollower()) isabellaFollowerScene.isabellaAffection(-5); - outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); + outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); startCombat(new Isabella()); flags[kFLAGS.ISABELLA_ANGRY_AT_PC_COUNTER] += 72; spriteSelect(31); diff --git a/classes/classes/Scenes/NPCs/IzmaScene.as b/classes/classes/Scenes/NPCs/IzmaScene.as index 95648750a7..30dfbd9e67 100644 --- a/classes/classes/Scenes/NPCs/IzmaScene.as +++ b/classes/classes/Scenes/NPCs/IzmaScene.as @@ -1654,11 +1654,6 @@ private function submitToLakeIzma():void { doNext(camp.returnToCampUseOneHour); } -public function izmaFollowerMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaIzma(); - else izmaFollowerMenu(); -} - //9999 CAMP FOLLOWER // tion camp //[Follower options] @@ -3587,14 +3582,5 @@ private function izmaValeriaToggle():void { addButton(4,"Back",izmaValeriaSubmenu); } -public function mishapsLunaIzma():void { - clearOutput(); - outputText("You pass by Izma’s spot and to your surprise, the smell of fish assaults your nose. For some weird reason, the entire area around Izma bedroll now smells of fish and, heck, it smells so much you decide to keep your distance until it’s gone.\n\n"); - outputText("Perhaps someone dropped fish oil around here, but who?\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 4, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 0, 1); - doNext(playerMenu); -} - } } diff --git a/classes/classes/Scenes/NPCs/JojoScene.as b/classes/classes/Scenes/NPCs/JojoScene.as index 69547dd6cf..49692b445b 100644 --- a/classes/classes/Scenes/NPCs/JojoScene.as +++ b/classes/classes/Scenes/NPCs/JojoScene.as @@ -2440,11 +2440,6 @@ public function refuseOfferOfHelp():void jojoCampMenu(); } -public function jojoCamp2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaJojo(); - else jojoCamp(); -} - public function jojoCamp():void { clearOutput(); jojoSprite(); @@ -3312,13 +3307,6 @@ private function suckJojosCock():void { doNext(camp.returnToCampUseOneHour); } -public function mishapsLunaJojo():void { - clearOutput(); - outputText("Jojo is looking at the ground in front of his training area in annoyance. Seems someone has drawn an ugly imp in the dirt using red paint and the imp happens to be jerking a 10 foot long cock. You spot Luna in the distance, cleaning the area with a smile. Surely it couldn’t have been her.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 2, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 1, 0, 0); - doNext(playerMenu); -} } } diff --git a/classes/classes/Scenes/NPCs/JoyScene.as b/classes/classes/Scenes/NPCs/JoyScene.as index ec6e52bf8e..c3dd4f52d6 100644 --- a/classes/classes/Scenes/NPCs/JoyScene.as +++ b/classes/classes/Scenes/NPCs/JoyScene.as @@ -581,7 +581,7 @@ import classes.lists.Gender; outputText("...Well, you're not really anything. And it's not really a lot of fun... can't you turn into a boy or a girl?"); } //Corruption and perk check - outputText("\"\n\nNext, Joy closes her eyes and focuses on your aura."); + outputText("\n\nNext, Joy closes her eyes and focuses on your aura."); if (player.cor < 5) { //Pure outputText("\n\n\"Your aura's, like, super shiny white - I can't remember seeing anyone as clean and pretty as you!\""); } @@ -1186,7 +1186,7 @@ import classes.lists.Gender; outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this will make my funstick bigger. Are you sure you want that [name]?\""); } else { - outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); + outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); } doYesNo(giveJoyAnIncubiDraftForReal, dontGiveJoyAnIncubiDraft); } diff --git a/classes/classes/Scenes/NPCs/KihaFollower.as b/classes/classes/Scenes/NPCs/KihaFollower.as index eb7014af40..7cc966cb47 100644 --- a/classes/classes/Scenes/NPCs/KihaFollower.as +++ b/classes/classes/Scenes/NPCs/KihaFollower.as @@ -413,8 +413,11 @@ internal function winSparWithKiha():void { outputText("[pg]\"W-what are you doing!?\" she starts, pushing away. \"You - you dumbass!\" Face as red as her scales, she storms off to the other side of camp."); outputText("[pg]You sigh and head back towards your stuff."); kihaAffection(20); + /*if(flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + }*/ } - lvlUpCheckup(); cleanupAfterCombat(); } //Spar with Friendly Kiha - Kiha Wins (Z) @@ -1850,7 +1853,54 @@ internal function pcLosesDomFight():void { //[PC wins the fight] internal function pcWinsDomFight():void { clearOutput(); - lvlUpCheckup(); + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 2; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 3; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 4; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 5; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 6; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 7; + } + } outputText(images.showImage("kiha-dom-win")); spriteSelect(72); var x:Number = player.cockThatFits(67); @@ -2035,57 +2085,6 @@ private function guardMyCampKiha():void { addButton(0,"Next",warmLoverKihaIntro); } -private function lvlUpCheckup():void { - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 2; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 3; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 4; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 5; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 6; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 7; - } - } -} - private function giveKihaUndergarmentsPrompt():void { clearOutput(); outputText("You ask Kiha if she's willing to wear something to cover that nether regions of hers. She could use a bit of modesty after all. "); diff --git a/classes/classes/Scenes/NPCs/KihaScene.as b/classes/classes/Scenes/NPCs/KihaScene.as index d138799d56..8b76e7d794 100644 --- a/classes/classes/Scenes/NPCs/KihaScene.as +++ b/classes/classes/Scenes/NPCs/KihaScene.as @@ -21,12 +21,7 @@ public class KihaScene extends NPCAwareContent { //const PC_WIN_LAST_KIHA_FIGHT:int = 345; //const KIHA_CHOKED_OUT_PC:int = 432; -//Encounter Dragon-Gal -public function encounterKiha2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaKiha(); - else encounterKiha(); -} - +//Encounter Dragon-Gal public function encounterKiha():void { var temp:Function; clearOutput(); @@ -906,17 +901,5 @@ private function analRapuzulaKiha():void { flags[kFLAGS.GOTTEN_INQUISITOR_ARMOR] = 2; inventory.takeItem(weaponsrange.I_TOME_, camp.returnToCampUseOneHour); } - - public function mishapsLunaKiha():void { - clearOutput(); - outputText("As you walk up to Kiha, you notice the dragon girl appears to be having a tantrum.\n\n"); - outputText("\"[name], are you the asshole that left all that burnt meat right next to my sleep area? What's the message behind this, you don’t like my cooking?!\"\n\n"); - outputText("You swear it's not you. Besides, you don’t hunt for food, so where would you even find the meat?\n\n"); - outputText("\"Umph! Whatever. Come back later, doofus, I need to clean up this mess!\"\n\n"); - outputText("You walk away and notice Luna in the distance cooking today’s meal with a satisfied smile.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 3, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 1, 0); - doNext(playerMenu); - } } } diff --git a/classes/classes/Scenes/NPCs/LatexGirl.as b/classes/classes/Scenes/NPCs/LatexGirl.as index 3859ca1e85..930730e237 100644 --- a/classes/classes/Scenes/NPCs/LatexGirl.as +++ b/classes/classes/Scenes/NPCs/LatexGirl.as @@ -645,7 +645,7 @@ private function changeGooDick():void { else outputText("I want you to order me to shift it often. "); outputText("Changing myself further, twisting my body into a sexual playground for you... that would be the ultimate thrill!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"I'll need something masculine if you want me to grow a cock, [Master]. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She shudders and closes her eyes, imagining herself with a rigid equine pole. Your goo must have a bit of a fetish."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was.\""); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was."); } //High Happiness + Whatever Obedience(F) else if(gooHappiness() >= 70) { @@ -654,7 +654,7 @@ private function changeGooDick():void { else outputText("she'd like to change what kind of dick she has."); outputText(" She beams and titters, \"Omigod, I loved growing penises back before I changed! It was so much fun to see how surprised it would make people and to make new shapes to see how they'd feel. Let's do it!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I'll need something masculine if you want me to grow a cock. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She smiles wickedly."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was.\""); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was."); } //Low Obedience(F) else { diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index 1ecdc4fd2b..aea648bbe2 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -8,7 +8,6 @@ package classes.Scenes.NPCs import classes.BodyParts.Butt; import classes.BodyParts.Hips; import classes.Scenes.SceneLib; - import classes.GlobalFlags.kFLAGS; import classes.internals.*; use namespace CoC; @@ -52,14 +51,12 @@ package classes.Scenes.NPCs override public function defeated(hpVictory:Boolean):void { - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaWon(); - else SceneLib.lunaFollower.fullMoonEventResistWin(); + SceneLib.lunaFollower.fullMoonEventResistWin(); } override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void { - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaLost(); - else SceneLib.lunaFollower.fullMoonEventResistDefeat(); + SceneLib.lunaFollower.fullMoonEventResistDefat(); } public function Luna() @@ -80,52 +77,23 @@ package classes.Scenes.NPCs this.skin.growFur({color:"ashen"}); this.hairColor = "ashen"; this.hairLength = 8; - if (flags[kFLAGS.LUNA_LVL_UP] == 0) { - initStrTouSpeInte(30, 90, 40, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 800; - this.level = 9; - } - if (flags[kFLAGS.LUNA_LVL_UP] == 1) { - initStrTouSpeInte(30, 95, 45, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 800; - this.level = 15; - } - if (flags[kFLAGS.LUNA_LVL_UP] == 2) { - initStrTouSpeInte(35, 100, 50, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 850; - this.level = 21; - } - if (flags[kFLAGS.LUNA_LVL_UP] == 3) { - initStrTouSpeInte(35, 100, 55, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 900; - this.level = 27; - } + initStrTouSpeInte(40, 60, 40, 50); + initWisLibSensCor(50, 80, 40, 75); this.weaponName = "paws"; this.weaponVerb="paw-slash"; + this.weaponAttack = 37; this.armorName = "fur"; + this.armorDef = 2000; + this.bonusHP = 800; this.bonusLust = 10; this.lust = 10; this.lustVuln = 0; this.temperment = TEMPERMENT_LUSTY_GRAPPLES; + this.level = 10; this.gems = 5 + rand(5); this.drop = NO_DROP; this.createPerk(PerkLib.MonsterRegeneration, 5, 0, 0, 0); this.createPerk(PerkLib.EnemyBeastOrAnimalMorphType, 0, 0, 0, 0); - if (flags[kFLAGS.LUNA_LVL_UP] >= 1) this.createPerk(PerkLib.RefinedBodyI, 0, 0, 0, 0); - if (flags[kFLAGS.LUNA_LVL_UP] >= 2) this.createPerk(PerkLib.TankI, 0, 0, 0, 0); - if (flags[kFLAGS.LUNA_LVL_UP] >= 3) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index 6fd9624784..de93b53e4d 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -29,7 +29,7 @@ package classes.Scenes.NPCs { } - //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted (PC no WW), 13,14 - unchained post moon accepted and talked about lycantrophy (PC no WW), 15,16 - unchained post moon accepted (PC WW) + //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted public function lunaAffection(changes:Number = 0):Number { @@ -121,10 +121,7 @@ package classes.Scenes.NPCs if (flags[kFLAGS.SLEEP_WITH] != "Luna") addButton(5, "Sleep With", lunaSleepToggle); else addButton(5, "Sleep Alone", lunaSleepToggle); } - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - if (flags[kFLAGS.CAMP_UPGRADES_SPARING_RING] >= 2) addButton(2, "Spar", sparLuna); - addButton(6, "Sex", sexMenuMain); - } + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(6, "Sex", sexMenuMain); if (flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 10) addButton(7, "Unchain", lunaChainToggle).hint("Unchain Luna and see what happens."); if (flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 8) addButton(7, "Chain", lunaChainToggle).hint("Chain Luna."); addButton(14, "Leave", camp.campFollowers); @@ -156,7 +153,6 @@ package classes.Scenes.NPCs addButton(3, "Camp", talkMenuLunaCampThoughts); if (flags[kFLAGS.LUNA_FOLLOWER] > 6) addButton(4, "Lycanthropy", talkMenuLunaLycanthropy); else addButtonDisabled(4, "???", "You need to know her better for this."); - if ((flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 14) && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); addButton(14, "Back", mainLunaMenu); } public function talkMenuLunaHer():void { @@ -214,117 +210,10 @@ package classes.Scenes.NPCs outputText("\"Well, my hormonal system is totally messed up as the lunar cycle causes me to go into heat.The closer we lycanthropes get to the full moon, the hornier we get, until we all turn into sex crazed beasts willing to go so far as to rape innocent people for a good fuck. That said, sex is not all there is to it. We are all gifted with the ability to change form at will, and I know for a fact that we’re also faster, "); outputText("stronger, and sturdier than any normal morph or human. There is no known permanent cure to lycanthropy. The truth is that, while I could change into something different using transformatives, I think that so long as whatever I transform into is an animal I would still go mad during a full moon. Even worse, my bite can turn about anyone into a lycanthrope the same as me.\"\n\n"); outputText("Guess she really is more than just a cute pup.\n\n"); - if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 13; - else flags[kFLAGS.LUNA_FOLLOWER] = 14; lunaJealousy(-50); lunaAffection(2); doNext(camp.returnToCampUseOneHour); } - public function talkMenuBiteMe():void { - clearOutput(); - outputText("It occurs to you that you could gain the same kind of powers as Luna if you asked her. That said, is that what you truly want?\n\n"); - menu(); - addButton(0, "Yes", talkMenuBiteMeYes); - addButton(1, "No", talkMenuLuna); - } - public function talkMenuBiteMeYes():void { - outputText("You ask Luna the one thing she likely never expected, would she mind biting you? Luna almost panics the moment you request it, though she also blushes.\n\n"); - outputText("\"" + player.mf("Master","Mistress") + " I...This is a very important choice you are making here, did you truly think it through? I mean once you are cursed there's no removing it, you will truly be just like me.\"\n\n"); - outputText("You don’t mind it, truthfully if this can tie the both of you together better, you will do it all the more. Luna nods and undresses as she changes shape. You hold your arm before her and she lose all form of restraint biting you with just the required strength to draw blood. At first it hurts like crazy but then the pain recedes, replaced with spreading pleasure as the wounds begin to throb. "); - outputText("Your" + (player.hasCock() ? " [cock] goes fully erect" : "") + "" + (player.gender == 3 ? " and your" : "") + "" + (player.hasVagina() ? " pussy starts moistening" : "") + " from this weird feeling, something's not right.\n\n"); - outputText("" + (player.humanScore() < 30 ? "Your body starts changing, and to your surprise, its features warp back to their former human features. You begin to think she may have purged you of the transformations that afflicted you, but that's not exactly it. " : "") + "Heat begins to spread from your wound and you start panting, trying to vent out the pleasure and the hot feeling in your body as something fundamental about you changes.\n\n"); - outputText("Fur begins to grow on various point of your body, namely your arms and legs. Your nails sharpen and curve, turning into a full set of claws as your hands and feet reshape into 5 digit paws. You groan in pleasure, revealing your forming canines as your spine extends into a furry tail while your ears migrate to the top of your head, covering in fur and changing into triangular points like those of a wolf. You pant in pleasure at the change, revealing a moist dog like tongue"); - if (player.hasCock()) outputText(" as you feel a tightness near the base of your cock where your skin seems to be bunching up. A canine-looking sheath begins forming around your cock’s base, tightening and pulling your penis inside its depths. A hot feeling envelops your member as it surges out and starts throbbing, the crown now a point. The sensations are too much for you. You throw back your head and howl as the transformation completes, your pointed shaft erupting with intense force"); - outputText(".\n\n"); - player.lowerBody = LowerBody.WOLF; - if (player.legCount != 2) player.legCount = 2; - player.tailType = Tail.WOLF; - if (player.tailCount != 1) player.tailCount = 1; - player.rearBody.type = RearBody.WOLF_COLLAR; - player.arms.type = Arms.WOLF; - player.faceType = Face.WOLF_FANGS; - player.ears.type = Ears.WOLF; - player.eyes.type = Eyes.FERAL; - player.tongue.type = Tongue.DOG; - player.wings.type = Wings.NONE; - player.antennae.type = Antennae.NONE; - player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); - if (player.hasCock() && player.wolfCocks() < 1) { - var selectedCockValue:int = -1; - for (var indexI:int = 0; indexI < player.cocks.length; indexI++) - { - if (player.cocks[indexI].cockType != CockTypesEnum.WOLF) - { - selectedCockValue = indexI; - break; - } - } - if (selectedCockValue != -1) { - player.cocks[selectedCockValue].cockType = CockTypesEnum.WOLF; - player.cocks[selectedCockValue].knotMultiplier = 1.1; - player.cocks[selectedCockValue].thickenCock(2); - } - } - var bonusStats:Number = 0; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; - player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); - player.dynStats("str", (bonusStats * player.newGamePlusMod()), "tou", (bonusStats * player.newGamePlusMod()), "spe", (bonusStats * player.newGamePlusMod()), "cor", 20); - statScreenRefresh(); - outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); - doNext(sexMenuDominateHer); - } - - public function sparLuna():void { - clearOutput(); - outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); - outputText("\"" + player.mf("Master", "Mistress") + ", we both know it is best not to awaken my instincts during the day. I am a pitiful woman.\"\n\n"); - outputText("Well it's exactly because she is both strong and dangerous that you need her help to become so yourself.\n\n"); - outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); - outputText("You both head to the ring and get ready for a brawl. She removes her dress and gets stark naked before you " + (camp.companionsCount() >= 2 ? "to the consternation of everyone who’s looking, " : "") + "before starting to pant as she changes shape. You recognise the green glow of crazed desire in her eyes now and almost regret your choice. Losing to her will likely result into you both having sex whether you like it or not.\n\n"); - startCombat(new Luna()); - } - public function sparLunaWon():void { - clearOutput(); - outputText("Luna sit down like a good well behaved dog to admit defeat.\n\n"); - outputText("\"I yield " + player.mf("Master", "Mistress") + ". You win this one. I hope this warm up was worth your time.\"\n\n"); - outputText("You thank Luna for helping you with your training and give her freedom to resume duty which she gladly do.\n\n"); - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.LUNA_DEFEATS_COUNTER]++; - else flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 1; - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 2 && flags[kFLAGS.LUNA_LVL_UP] == 0) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 12); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 12, 0, 0, 0); - flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.LUNA_LVL_UP] = 1; - } - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 3 && flags[kFLAGS.LUNA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 18, 0, 0, 0); - flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.LUNA_LVL_UP] = 2; - } - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.LUNA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 24, 0, 0, 0); - flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.LUNA_LVL_UP] = 3; - } - } - cleanupAfterCombat(); - doNext(camp.returnToCampUseOneHour); - } - public function sparLunaLost():void { - clearOutput(); - outputText("Luna pounces on you with a hungry growl. Guess you had it coming when you asked her to spar you.\n\n"); - outputText("\"You lost " + player.mf("Master", "Mistress") + ", therefore I’m entitled to do whatever I want with you. Well I don’t care what it is as long as we do it now.\"\n\n"); - monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); - cleanupAfterCombat(); - doNext(sexMenuDominateHer); - } public function mealLuna():void { clearOutput(); @@ -359,10 +248,10 @@ package classes.Scenes.NPCs lunaAffection(5); HPChange(Math.round(player.maxHP() * .5), true); if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - outputText("\nLuna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); + outputText(" Luna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); menu(); - addButton(0, "Yes", sexMenuMain); - addButton(1, "No", nurseLunaEnd); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(0, "Yes", sexMenuMain); + addButton(0, "No", nurseLunaEnd); } else doNext(camp.returnToCampUseFourHours); } @@ -417,9 +306,7 @@ package classes.Scenes.NPCs if (flags[kFLAGS.LUNA_FOLLOWER] == 5) flags[kFLAGS.LUNA_FOLLOWER] = 6; else if (flags[kFLAGS.LUNA_FOLLOWER] == 7) flags[kFLAGS.LUNA_FOLLOWER] = 8; else if (flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 10; - else if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 12; - else if (flags[kFLAGS.LUNA_FOLLOWER] == 13) flags[kFLAGS.LUNA_FOLLOWER] = 14; - else flags[kFLAGS.LUNA_FOLLOWER] = 16; + else flags[kFLAGS.LUNA_FOLLOWER] = 12; outputText("Luna come over to you.\n\n"); outputText("\"" + player.mf("Master","Mistress") + " you haven’t been using my services in some time. I came to remind you that should you need anything, and by that I truly mean anything you desire, all you need to do is call me. It is always my greatest pleasure to serve you.\"\n\n"); outputText("She walk away to prepare today's food and clean which reminds you that you indeed hadn’t had her food in a while.\n\n"); @@ -455,8 +342,6 @@ package classes.Scenes.NPCs outputText("Well of course. Had she made her needs clear in the first place you would have helped her with them. There was no need for her to hide her desires. That aside, you already thought of her as more than just a maid. You just didn’t know how to tell her. You don’t care if she thinks she is a monster. From your point of view, even in this form she remains cute. To her utter surprise you"); if (!player.isNaked()) outputText(" get rid of your own clothes and"); outputText(" display your naked body, telling her she will get exactly what she wants.\n\n"); - if (flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 11; - if (flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10) flags[kFLAGS.LUNA_FOLLOWER] = 12; flags[kFLAGS.LUNA_MOONING] = 2; doNext(sexMenuVaginal); } @@ -510,7 +395,7 @@ package classes.Scenes.NPCs CoC.instance.timeQ += 6; doNext(camp.sleepWrapper); } - public function fullMoonEventResistDefeat():void { + public function fullMoonEventResistDefat():void { clearOutput(); outputText("You are too weak to keep fighting and Luna senses it. Before you can react she pounces on you. You’re back to the position you were in earlier and this time you are in no way capable of putting up a fight.\n\n"); outputText("\"It's ok, [name], the pain will only last for a few seconds and then...\"\n\n"); @@ -532,7 +417,7 @@ package classes.Scenes.NPCs player.wings.type = Wings.NONE; player.antennae.type = Antennae.NONE; player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); + player.skin.growCoat(Skin.FUR, Skin.COVERAGE_MEDIUM); if (player.hasCock() && player.wolfCocks() < 1) { var selectedCockValue:int = -1; for (var indexI:int = 0; indexI < player.cocks.length; indexI++) @@ -549,9 +434,8 @@ package classes.Scenes.NPCs player.cocks[selectedCockValue].thickenCock(2); } } - player.createPerk(PerkLib.Lycanthropy,40,0,0,0); player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); - statScreenRefresh(); + player.createPerk(PerkLib.Lycanthropy,0,0,0,0); outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); cleanupAfterCombat(); @@ -574,8 +458,8 @@ package classes.Scenes.NPCs else addButtonDisabled(6, "???", "Req. Ayane in camp and 100 affection."); } } - if (player.cor >= 30) addButton(10, "Headpat", sexMenuHeadpat); - else addButtonDisabled(10, "Headpat", "You're too pure for that!"); + if (player.cor < 33) addButton(10, "Headpat", sexMenuHeadpat); + else addButtonDisabled(10, "Headpat", "You're too corrupted for that!"); addButton(14, "Back", mainLunaMenu); } public function sexMenuHeadpat():void { @@ -626,6 +510,7 @@ package classes.Scenes.NPCs lunaJealousy(-50); lunaAffection(2); player.orgasm(); + if (flags[kFLAGS.LUNA_FOLLOWER] < 7) flags[kFLAGS.LUNA_FOLLOWER] = 11; if (flags[kFLAGS.LUNA_MOONING] == 2) { flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -750,7 +635,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 15; + flags[kFLAGS.LUNA_FOLLOWER] = 11; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -779,7 +664,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 15; + flags[kFLAGS.LUNA_FOLLOWER] = 11; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; diff --git a/classes/classes/Scenes/NPCs/Rathazul.as b/classes/classes/Scenes/NPCs/Rathazul.as index 6452220460..c4e6c9c64c 100644 --- a/classes/classes/Scenes/NPCs/Rathazul.as +++ b/classes/classes/Scenes/NPCs/Rathazul.as @@ -863,7 +863,7 @@ private function growLethiciteDefenseYesYesYes():void { private function growLethiciteDefenseGuessNot():void { spriteSelect(49); clearOutput(); - outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power.\""); + outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power."); doNext(returnToRathazulMenu); } diff --git a/classes/classes/Scenes/NPCs/ShouldraFollower.as b/classes/classes/Scenes/NPCs/ShouldraFollower.as index bf8059132a..eb90436416 100644 --- a/classes/classes/Scenes/NPCs/ShouldraFollower.as +++ b/classes/classes/Scenes/NPCs/ShouldraFollower.as @@ -1950,7 +1950,7 @@ private function goAlongWIthShouldrasEatingSpree():void { outputText("\n\nYou struggle forward in your seat and resume grazing on a stack of donuts, though you are hindered somewhat by both the ghost girl's pussy worship and your cramped stomach. The bloated orb has by now pushed your shirt up around your [fullChest] and left your skirt in tatters; it rests between your thighs, your legs having been forced to part under its growing weight. An ominous gurgle erupts from your overtaxed gut; perhaps you've overestimated yourself? You massage the complaining flesh with one hand to ease the pressure while continuing to sate your insatiable appetite with the other, heavenly gouts of angel cake dropping into your abyss of a stomach. Shouldra smiles as the churning and gurgling continues; her fucksucking lips slip off your drooling pussy-flesh and ascend, trailing supersized kisses across your crotch and up to your navel. She nuzzles your bloated belly like a pillow, her hands digging gently into the flesh and kneading with equal parts care and roughness. Your free hand stops massaging and cradles her head, and in a moment of impishness you shove a slice of something gooey and triple-layered into her unsuspecting candied maw. She swallows, surprise turning quickly to a grin of friendly vengeance. \"So that's how we're playing it, big girl?\" Shouldra snickers, before giving your sensitive stomach a hearty slap."); outputText("\n\nYou wince slightly before returning a sloppy food-filled grin... Wait. You're not feeding yourself. What the fuck? The ghost girl answers your confusion with a profiterole that soars into your slack mouth. Damned ghoul, that's just playing dirty! You both devolve into a fierce stuffing contest; your desperate hands snag anything they can from the spread and cram them into the ghost's gullet, while waves of pastries ram themselves into your own defenseless mouth. The combination of the adrenaline-fueled force-feeding frenzy and the increasing pressure of your swelling gut on your button forms a familiar sensation; prickling loins, skipped heartbeats, an intense heat in your flushed cheeks. As you feel the giddy euphoria of an oncoming food coma, Shouldra seizes the moment and dives down into your crotch, lapping and licking every oh-so-sensitive inch she can, teasing and tickling, probing your wet cunt with her jellied tongue."); outputText("\n\nA guttural moan escapes your icing-caked lips as you sink into a creamy smooth orgasm, like sliding into a hot bath. [if (isSquiter = true) \"Hot streams of liquid lust spurt across Maddie's face, drizzling her with your copious fem-spunk. \"][if (isLactating = true) \"Droplets of milk form on your [nipples], soon forming rivers of cream that cascade down your fiery-hot flesh. \"]After a moment of rest, Shouldra squeezes out from under the table, licking your girl-cum from her lips with a satisfied slurp, and helps you to your feet; a task made seriously annoying by your titanic tummy digging in to the edge of the counter. The other patrons remain blissfully unaware of the whole act, including your current nudity. Speaking of which..."); - outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!\""); + outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!"); outputText("\n\nYou leave the bakery and head back to camp, leaving behind a very confused Maddie."); player.orgasm(); doNext(camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/NPCs/SophieFollowerScene.as b/classes/classes/Scenes/NPCs/SophieFollowerScene.as index 19a75beddd..f95017ba29 100644 --- a/classes/classes/Scenes/NPCs/SophieFollowerScene.as +++ b/classes/classes/Scenes/NPCs/SophieFollowerScene.as @@ -1092,9 +1092,9 @@ internal function sophieIncestInHerCooterOrSomethingIDunno():void { outputText("\n\nUnable to resist the feeling of her achingly hard nipples being pressed against you so tightly, you reach out for your daughter's big, creamy udders and grab her hard nipples. You pull your stacked daughter's sensitive buds before you pinch and squeeze them. Not quite done with her, you let go of her nipples, letting your hands sink into the supple flesh of her enormous breasts before grabbing them harder, starting to knead and massage the soft, pliant jugs. The rough and passionate touching of her body only seems to excite and arouse your firstborn further. She's clearly enjoying the groping and teasing of her sensitive breasts, and you draw needy, birdlike coos and cries from her pouty lips. "); - if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); + if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); //[normal speech: - else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); + else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); } //second daughter: else if(daughterCap == 1) { diff --git a/classes/classes/Scenes/NPCs/Urta.as b/classes/classes/Scenes/NPCs/Urta.as index 1f043b9be6..fb96c5da07 100644 --- a/classes/classes/Scenes/NPCs/Urta.as +++ b/classes/classes/Scenes/NPCs/Urta.as @@ -2604,7 +2604,7 @@ private function tellUrtaNoMoreScylla():void { flags[kFLAGS.UNKNOWN_FLAG_NUMBER_00147] = 1; outputText("You let Urta know that you're willing to overlook this, but that Scylla is a slippery slope that's best avoided. She nods, a sober expression on her vulpine face. Once you finish, she replies, \"I understand, but you need to know – when 'it' gets too much for me to handle... if you aren't around to help I'm going to see Edryn. S-she helps... if it wasn't for her I probably would've given up and done something stupid a long time ago. What we have is more important, but unless we can get together every couple days I'll NEED to visit her. "); if(urtaLove()) outputText("Just please, don't doubt my love for you. "); - outputText("Do I need to stop drinking too?"); + outputText("Do I need to stop drinking too?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } @@ -2615,7 +2615,7 @@ private function tellUrtaMoreScyllaIsFine():void { outputText("You give Urta a raunchy, lewd smile and let her know that you're okay with her 'helping' Scylla, and vice-versa, so long as they don't mind you popping in. She smiles and gives you a wink, but her expression darkens after a moment of thought. Urta interrupts to mention, \"There's something else. If I can't find you or Scylla and I NEED to cum, I'll have to visit Edryn. She's probably the only thing that's kept me sane, and if you aren't around to help with my needs I'll visit her. "); if(urtaLove()) outputText("Just remember that YOU'RE the one I love, not her. "); else outputText("Me and her, we've been partners in the guard for a long time, but the sex is just mechanical, to sate us. You don't have to worry about her stealing me away. "); - outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); + outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index 549cf0653f..57cda75a63 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -232,7 +232,6 @@ public class HeXinDao extends BaseContent addButton(1, "DryTent", buyItem,consumables.DRYTENT,sayLine(consumables.DRYTENT,"anemone"),onBuyString).hint("Buy a shriveled tentacle."); addButton(2, "EctoPls", buyItem,consumables.ECTOPLS,sayLine(consumables.ECTOPLS,"ghost"),onBuyString).hint("Buy a bottle of ectoplasm."); addButton(3, "TrapOil", buyItem,consumables.TRAPOIL,sayLine(consumables.TRAPOIL,"sand trap"),onBuyString).hint("Buy a vial of trap oil."); - addButton(4, "Icicle", buyItem,consumables.ICICLE_,sayLine(consumables.ICICLE_,"ice shard"),onBuyString).hint("Buy an icicle."); addButton(14, "Back", mogahenmerchant); statScreenRefresh(); } @@ -485,7 +484,7 @@ public function soularena():void { outputText("Picking the one in the middle prepared for challanges you enter there and looking around checking who if there is currently anyone up for a challange."); menu(); addButton(0, "Gaunlet 1", gaunletchallange1fight1).hint("Fight 3 diff enemies one after another."); - if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); + //if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); //addButton(2, "Gaunlet 3", gaunletchallange3).hint("Fight 5 diff enemies one after another."); //addButton(3, "Gaunlet 4", gaunletchallange4).hint("Fight 6 diff enemies one after another."); //addButton(4, "Gaunlet 5", gaunletchallange5).hint("Fight 7 diff enemies one after another."); @@ -507,11 +506,6 @@ public function soularena():void { monster.createStatusEffect(StatusEffects.NoLoot, 0, 0, 0, 0); monster.XP = Math.round(monster.XP / 2); } - public function gaunletsinbetween():void { - cleanupAfterCombat(); - player.createStatusEffect(StatusEffects.SoulArena, 0, 0, 0, 0); - player.createStatusEffect(StatusEffects.SoulArenaGaunlet, 0, 0, 0, 0); - } public function gaunletchallange1fight1():void { clearOutput(); outputText("You register for the gauntlet challenge then when called, move out beyond the arena gate to face your opponent. The crowd is big, you sure will have quite the audience. A man with a necktie and a weird stick screams across the area.\n\n"); @@ -526,16 +520,14 @@ public function soularena():void { } public function gaunletchallange1fight2():void { clearOutput(); - gaunletsinbetween(); - outputText("As the last of the golem falls down, the commentator resumes.\n\n"); + outputText("As the last of the golem falls down, the commentator resumes.\n\n"); outputText("\"This one is straight from the woods. Freshly caught and horny to boot. Can our champion’s strength overcome the beast’s lust? LET'S FIND OUT!!\"\n\n"); outputText("A shadow moves out behind the gate, revealing the shape of a fluid starved tentacle beast.\n\n"); startCombat(new TentacleBeast()); } public function gaunletchallange1fight3():void { clearOutput(); - gaunletsinbetween(); - outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); + outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); outputText("\"This contestant is smaller than the last two... Smarter too, and most of all extremely deadly. She’s paid a handsome sack of gems daily to kick the ass of anyone who reach this stage, yet is by far the deadliest combatant of her division. She’s your favorite and an expert huntress. Here she comes... Merisiel the dark elf!!!\"\n\n"); outputText("A woman with dark skin walks by the entrance of the arena with only a bow for a weapon. She sure does look like an elf, however. She’s nothing like the gentle creature from your childhood stories as she observes you with a cruel, calculative gaze. The dark elf readies her bow, smirking.\n\n"); startCombat(new DarkElfScout()); @@ -567,7 +559,6 @@ public function soularena():void { } public function gaunletchallange2fight2():void { clearOutput(); - gaunletsinbetween(); outputText("As the goblin falls unconscious to the ground the crowd cheer for you.\n\n"); outputText("\"It would seems the hero squashed that midget good but were only beginning. If I may the next contestant has been sex starved for two consecutive month and is desperate to sow his seed hence now we release... THE HOUND!!!\"\n\n"); outputText("A massive hellhound of proportion larger than normal rush out of an opening gate. Its eye burns with lust.\n\n"); @@ -575,36 +566,27 @@ public function soularena():void { } public function gaunletchallange2fight3():void { clearOutput(); - gaunletsinbetween(); - outputText("The mutt fall defeated to the floor as the crowd scream your name. The announcer announce the next contestant.\n\n"); - outputText("\"The next opponent is a fighter known and loved by the public. You have heard her name told in shallow whispers for the next opponent is an expert of the terrible art known as BDSM. Yes you have all been waiting for her so cheer up for Malady the drider!!!\"\n\n"); - outputText("A drider in bondage suit comes out of the gate and eyes you amused.\n\n"); - outputText("\"You are my opponent uh? Doesn’t look like much. Little pet, by the time I’m done binding you, you will seldom call me mistress!\"\n\n"); + outputText("Placeholder.\n\n"); + outputText("Placeholder.\n\n"); startCombat(new CorruptedDrider()); } public function gaunletchallange2fight4():void { clearOutput(); - gaunletsinbetween(); - outputText("As the drider falls defeated the crowd cheer to your victory. That said the battle is far from over yet. A large amount of shadows mass behind the opposite gate and already you can guess what's coming up for you.\n\n"); - outputText("\"The final contestant is both a new opponent and a test! The town golemancer has been working extra shifts on these thing she calls her babies!! Using the traditional gargoyle model but deprived of soul so for the purpose of mass production these living weapons will mercilessly beat the hell out of the contestant. Who do you think will win the living or the artificial creation? LEEEEETS FIND OUT!!!!!!\"\n\n"); - outputText("A full squad of stone gargoyle pour out of the gate their mace like tail trailing in the sands. Their claws are sharp and their soulless gaze tells you it will end poorly should you lose.\n\n"); + outputText("Placeholder.\n\n"); startCombat(new BossGolems()); } public function gaunletchallange2postfight():void { clearOutput(); - outputText("The last gargoyle crumble to rubble and you hold its head up toward the public in victory.\n\n"); - outputText("\"The challenger defeated all of his opponent what a miracle! Challenger you may now exit the arena and claim your prize, well done!\"\n\n"); - outputText("You make your way toward the exit and to your surprise meet face to face with the town golemancer. She grudgingly handle you your reward.\n\n"); - outputText("\"I’m supposed to reward you "); + outputText("Placeholder.\n\n"); if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] >= 2) { - outputText("a full chest of soulstone. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); + outputText("\"Good show, champion. As a reward for your performance, please accept these 20 spirit stones. Please do come back again and maybe next time you could even try the harder challenge.\"\n\n"); flags[kFLAGS.SPIRIT_STONES] += 20; cleanupAfterCombat(); } else { - outputText("with this scepter. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); + outputText("Placeholder.\n\n"); flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] = 2; - inventory.takeItem(weapons.SCECOMM, cleanupAfterCombat); + inventory.takeItem(weaponsrange.BOWGUID, cleanupAfterCombat); } } public function restaurantShiraOfTheEast():void { diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index 4796f32ff3..d6c72c2252 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -7,7 +7,6 @@ package classes.Scenes.Places.HeXinDao import classes.*; import classes.GlobalFlags.kFLAGS; import classes.Scenes.SceneLib; - import classes.BodyParts.Tail; public class JourneyToTheEast extends HeXinDaoAbstractContent { @@ -20,10 +19,6 @@ package classes.Scenes.Places.HeXinDao outputText("You enter the town local Inn ‘Journey to the East’ and look around. "); } outputText("You can see many people enjoying a meal or drink in the dining hall, a barman standing by ready to serve drinks."); - if (model.time.hours >= 18 && rand(4) == 0) { - ChiChiDrunkSex(); - return; - } menu(); addButton(0, "Drink", drinkAlcohol); //addButton(4, "", );mission giving npc @@ -44,17 +39,15 @@ package classes.Scenes.Places.HeXinDao addButton(2, "NoceLiq", buyDrink, consumables.NOCELIQ); addButton(3, "OniSake", buyDrink, consumables.ONISAKE); addButton(4, "SalamFW", buyDrink, consumables.SALAMFW); - addButton(12, "BimboL", buyDrink, consumables.BIMBOLQ); - addButton(13, "BroBrew", buyDrink, consumables.BROBREW); addButton(14, "Back", notThirsty); } - //drink list (to be expanded) fire mouse TF, some generic nonTF beers + private function notThirsty():void { clearOutput(); outputText("In the end you realise you are not thirsty after all and wave a goodbye before leaving.\n\n"); doNext(curry(enteringInn,false)); } - + private function buyDrink(drink:ItemType):void{ var cost:int = drink.value * 3; if(player.gems < cost){ @@ -67,66 +60,7 @@ package classes.Scenes.Places.HeXinDao outputText("\n\nThe barman hands over the drink you ordered."); inventory.takeItem(drink, drinkAlcohol); } - - public function ChiChiDrunkSex():void { - clearOutput(); - outputText("As you enter the bar you hear a feminine laughter swiftly spotting what seems to be "); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] >= 20) outputText("Chi Chi"); - else if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] < 20) outputText("Chi Chi the waitress from the exotic food restaurant"); - else outputText("a blazing mouse girl"); - outputText(" sitting on one of the stool drinking sake.\n\n"); - outputText("\"Yeah, and after I told it I was the top girl here I punched it in the face, Woooooooo!\""); - outputText("The barman sighs, pretending not to notice the drunken mouse, aside for when he has to serve her a new drink. Just as you are about to order something she realises you are there and engages in conversation.\n\n"); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) outputText("\"Gaaaaah, [name], why do you hang around all those girls. Worse why do you fuck with them and not me?! Its like you are a " + player.mf("go go boy","cheap whore") + " selling your body to everyone and thish drives me mad! Yeaaa, I’m going to prove them all I’m the top shlut!\""); - else if (flags[kFLAGS.CHI_CHI_FOLLOWER] == 1) outputText("\"Hey... you’re that so called champ who lost in the arena?! Well I like you. I like you so much I’d want you as my " + player.mf("boy","girl") + "friend but waaaah I’m way too shy to tell you that right! Well don’t go tell [name] I like " + player.mf("him","her") + " got it? Yeah who cares about that! Barman a round for [name] the best person I met woooo. Now let’s have sex!\""); - else outputText("\"Hey you... yesh you, the tall person over there! Think you can fight?! Well I’m pretty sure nobody in this village hash the guts to anyway. If you dare show up in the arena I will beat you to death like I do everyone. Now that I think of it, there are other kinds of battle I can beat people in. Bet you're the kind who fucks every demon you meet. Well not tonight, letsh bang!\""); - outputText("Wait, what? You barely have the time to mutter a reply before the red cheeked mousette pushes you on the nearest table and climbs over you. The barman pulls a curtain around your table, he must be used to this.\n\n"); - outputText("\"Yeshh you heard me you big idiot. I’m going to fuck with you here and now! So don’t you dare try to run away because I will get very mad if you do.\""); - outputText("Do you let her?\n\n"); - menu(); - addButton(0, "Let Her", drunksex,true); - addButton(1, "Refuse", drunksex,false); - } - private function drunksex(selected:Boolean):void { - if (!selected) { - outputText("" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 0 ? "Chi Chi" : "The mouse") + " is clearly out of it. Better stop her now before she does something she will regret later. You shove her to the side and run for the exit of the bar. Hearing her swear in background. Once outside you head back to camp."); - doNext(camp.returnToCampUseOneHour); - } - else { - outputText("You would have to be an idiot indeed to refuse this free fuck. The drunken mouse girl licks her lips in anticipation, grabbing your clothes and begins to removing them one-by-one. Unsurprisingly, her own clothes barely takes a second to remove. She is so close now you can feel her breath on your neck."); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) { - outputText(" The mousette introduces herself.\n\n"); - outputText("\"My name’s Chi Chi by the way, but... oh why does it matter? What's important is that we are about to have a lot of fun.\""); - } - //post marriage - if (player.hasCock()) { - outputText("Chi Chi initiates with a wet but warm kiss; Her tongue dancing tango with yours. While small in stature, she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how her burning tail and fur isn't actually setting everything on fire around her, especially you. You inquire on this matter.\n\n"); - outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\"\n\n"); - outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore, you slowly tease the entrance of her warm canal with your [cock]. If anything, despite being wet you can already feel how hot her oven is from the outside and can’t help but hope you won’t end up burned. Chi Chi however has no such concern and out of impatience starts stroking your dick with her embery tail.\n\n"); - outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\"\n\n"); - outputText("You're surprised by the direct contact with her fiery tail, even more so by the fact that it didn’t leave your dick with a third degree burn. Deciding to give the hot mouse what she wants, you put it in. Her vagina immediately starts milking you as if it was a thirsty mouth seeking water, and the frantic moving of her hips up down doesn’t help it.\n\n"); - outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\"\n\n"); - outputText("Her pussy starts heating even more and before you know it, it actually transfers to you. Wow, your urethra is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, only the cool passage of cum can free you from this heat! You begin to piston in and out of Chi Chi desperate for a cooling release.\n\n"); - outputText("Both desperate for a way to get rid of the heat, the two of you manage to cum together, your jizz filling Chi Chi to the brim before slowly dripping on the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); - outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); - outputText("She finally passes out, which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeds to also get the sleeping inferno-mouse out with the help of a bouncer.\n\n"); - } - else { - outputText("Chi Chi initiates with a wet but warm kiss her tongue dancing tango with yours. While small in stature she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how come her burning tail and fur isn't actually setting on fire everything around her starting with you. You inquire on this matter.\n\n"); - outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\"\n\n"); - outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore you begin to grind your pussy lips against hers making her gasp in surprise at your initiative.\n\n"); - outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\"\n\n"); - outputText("Chi Chi begins to grind herself in response, making you both coo. For a drunk she clearly knows what she’s doing, almost like if drunken sex was an expertise of hers. You’re swiftly forced out back to reality as your blazing partner accelerates the tempo, causing you to moan in pleasure. Well now there's no way you going to simply lose this! You get the mouse ears with your hands and start caressing them. Chi Chi has a positive reaction and you are clearly getting to her however "); - outputText("that's counting without her hidden weapon. Her burning tail lashes out like a whip and slides between you, aiming for your cunt. Before you can stop it you already have 15 inch of hot mouse tail in your [pussy] and Chi Chi uses it to fuck your brain out. The fuck isn't all that happens it seems her very heat start to spread on to you. Wow your cunt is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, "); - outputText("only the cool passage of your girl-juices can free you from this heat! Meanwhile she grinds against her own tail bump but you have decided not to let her get off at her own pace. You swiftly slide " + (player.tailType > Tail.NONE ? "your tail" : "a pair of finger") + " in the smoking hot hinezumi cunt and retaliate with a set of rapid movement of your own.\n\n"); - outputText("Both desperate for a way to get rid of the heat and unable to fully outpace her, the two of you still manage to cum together your girl juices melding together and staining the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); - outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); - outputText("She finally pass out which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeded to also get the sleeping mouse out with the help of a bouncer.\n\n"); - } - player.orgasm(); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) flags[kFLAGS.CHI_CHI_FOLLOWER] = 1; - doNext(camp.returnToCampUseOneHour); - } - } + //drink list (to be expanded) + //MANUP_B, GOB_ALE, NOCELIQ, ONISAKE, SALAMFW, fire mouse TF, some generic nonTF beers } } \ No newline at end of file diff --git a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as index 69fb7e1fbb..a93ffe8377 100644 --- a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as +++ b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as @@ -387,7 +387,7 @@ package classes.Scenes.Places.Prison break; case 4: default: - outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead.\" "); + outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead. "); if(player.hasVagina()) { outputText("Your gaping pussy has lubricated me well enough to comfortably fuck an entire harem of dry, virgin assholes."); diff --git a/classes/classes/Scenes/Places/TelAdre.as b/classes/classes/Scenes/Places/TelAdre.as index 45a6902011..beb760270e 100644 --- a/classes/classes/Scenes/Places/TelAdre.as +++ b/classes/classes/Scenes/Places/TelAdre.as @@ -184,7 +184,7 @@ public function telAdreMenu():void { if (flags[kFLAGS.LUNA_FOLLOWER] < 2 && rand(10) == 0) { if (flags[kFLAGS.LUNA_FOLLOWER] == 1) SceneLib.lunaFollower.meetingLunaRepated(); else SceneLib.lunaFollower.meetingLunaFirstTime(); - return; + return } spriteSelect(-1); outputText(images.showImage("location-teladre")); diff --git a/classes/classes/Scenes/Places/TelAdre/Rubi.as b/classes/classes/Scenes/Places/TelAdre/Rubi.as index b8cee7efff..412a8c441d 100644 --- a/classes/classes/Scenes/Places/TelAdre/Rubi.as +++ b/classes/classes/Scenes/Places/TelAdre/Rubi.as @@ -2079,7 +2079,7 @@ private function iceCreamDate():void { outputText("\n\nYour parfaits are not infinite, however, and once you've depleted your layered frozen treats it seems it's time to head back. The two of you clasp hands once more and head out of the shop, heading back to Rubi's place in silence, content to be in each other's presence."); - outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); + outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); //[Go to Sex menu] rubiSexMenu(); addButton(14,"Leave",camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/Pregnancy.as b/classes/classes/Scenes/Pregnancy.as index 71347044c1..e2e8a8cea8 100644 --- a/classes/classes/Scenes/Pregnancy.as +++ b/classes/classes/Scenes/Pregnancy.as @@ -1798,7 +1798,7 @@ public class Pregnancy extends NPCAwareContent { if (flags[kFLAGS.MARBLE_BOYS] == 0) //has Marble had male kids before? { - EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me.\""); + EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me."); } //Add to marble-kids: flags[kFLAGS.MARBLE_KIDS]++; diff --git a/classes/classes/Scenes/SceneLib.as b/classes/classes/Scenes/SceneLib.as index 625ee7828c..c6af555150 100644 --- a/classes/classes/Scenes/SceneLib.as +++ b/classes/classes/Scenes/SceneLib.as @@ -1,6 +1,5 @@ package classes.Scenes { import classes.CoC; -import classes.Items.Mutations; import classes.Scenes.Areas.*; import classes.Scenes.Areas.Forest.KitsuneScene; import classes.Scenes.Combat.Combat; @@ -28,8 +27,6 @@ public class SceneLib { public static var masturbation:Masturbation = new Masturbation(); - public static var mutationsTable:Mutations = new Mutations(); - public static var beach:Beach = new Beach(); public static var blightridge:BlightRidge = new BlightRidge(); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index aeae662f85..56c8465168 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -208,23 +208,20 @@ use namespace CoC; addButton(7, "RevertCabin", RevertCabinProgress).hint("Revert cabin flag back to value 2 (for bug fix test)"); addButton(8, "Gargoyle", GargoyleMenu).hint("To Be or Not To Be Gargoyle that is a question."); addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); - addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); - addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) addButton(12, "MoonCycleAdj", moonCycleAdjusting).hint("Adjusting wild moon cycle to pokeba... norm."); - if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); + addButton(10, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); + addButton(11, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(12, "DERP", AddEnigmanium).hint("DERP."); + if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); + //addButton(13, "13", ); addButton(14, "Back", accessSoulforceMenu); } public function celessIntroForced():void { clearOutput(); CelessScene.instance.birthScene(); } -public function moonCycleAdjusting():void { - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; - doNext(SoulforceCheats); -} -public function fixingWerewolfFur():void { - player.skin.coverage = Skin.COVERAGE_LOW; - player.coatColor = player.hairColor; +public function replacingBarbsWithsSowrds():void { + player.removePerk(PerkLib.JobBarbarian); + player.createPerk(PerkLib.JobSwordsman, 0, 0, 0, 0); doNext(SoulforceCheats); } public function LvLUPDiana():void { @@ -697,10 +694,8 @@ public function FightNightmare():void { addButton(8, "NineTailWhip", AddNineTailWhip).hint("Add 1 Nine Tail Whip."); addButton(9, "Hodr's Bow", AddHodrsBow).hint("Add 1 Hodr's Bow."); // addButton(9, "L Ayo Arm", AddLightAyoArmor).hint("Add 1 Light Ayo Armor for testing purposes."); - // addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); - addButton(10, "TruestriekSword", AddTruestrikeSword).hint("Add 1 Truestrike Sword."); - // addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); - addButton(11, "ScepterComm", AddSceptreOfCommand).hint("Add 1 Sceptre of Command."); + addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); + addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); addButton(12, "CatONIneTWhip", AddCatONineTailWhip).hint("Add 1 Bastet Whip."); addButton(13, "InqTome", AddTheInquisitorsTome).hint("Add 1 Inquisitor's Tome."); addButton(14, "Back", SoulforceCheats); @@ -888,18 +883,10 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Seer's Hairpin!)\n\n"); inventory.takeItem(jewelries.SEERPIN, EquipmentMenu); } - public function AddTruestrikeSword():void { - outputText("\n\n(Gained 1 Truestrike Sword!)\n\n"); - inventory.takeItem(weapons.TRSTSWO, EquipmentMenu); - } public function AddTheDemonicScythe():void { outputText("\n\n(Gained 1 Demonic Scythe!)\n\n"); inventory.takeItem(weapons.DEMSCYT, EquipmentMenu); } - public function AddSceptreOfCommand():void { - outputText("\n\n(Gained 1 Sceptre of Command!)\n\n"); - inventory.takeItem(weapons.SCECOMM, EquipmentMenu); - } public function AddTheInquisitorsTome():void { outputText("\n\n(Gained 1 Inquisitor's Tome!)\n\n"); inventory.takeItem(weaponsrange.I_TOME_, EquipmentMenu); @@ -1240,6 +1227,12 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Sky Poison Pearl!)\n\n"); inventory.takeItem(consumables.SPPEARL, EquipmentMenu); } + + public function AddEnigmanium():void { + outputText("\n\n(Gained 1 Enigmanium!)\n\n"); + inventory.takeItem(consumables.ENIGMANIUM, EquipmentMenu); + } + public function AddLightAyoArmor():void { outputText("\n\n(Gained 1 Light Ayo Armor!)\n\n"); inventory.takeItem(armors.LAYOARM, EquipmentMenu); diff --git a/classes/classes/StatusEffects.as b/classes/classes/StatusEffects.as index de02e5e5df..59bb1ec91c 100644 --- a/classes/classes/StatusEffects.as +++ b/classes/classes/StatusEffects.as @@ -38,12 +38,8 @@ import classes.StatusEffects.VampireThirstEffect; public static const CampAnemoneTrigger:StatusEffectType = mk("Camp Anemone Trigger"); public static const CampMarble:StatusEffectType = mk("Camp Marble"); public static const CampRathazul:StatusEffectType = mk("Camp Rathazul"); - public static const CampLunaMishaps1:StatusEffectType = mk("Camp Luna Mishaps 1"); - public static const CampLunaMishaps2:StatusEffectType = mk("Camp Luna Mishaps 2"); - public static const CampLunaMishaps3:StatusEffectType = mk("Camp Luna Mishaps 3"); public static const CampSparingNpcsTimers1:StatusEffectType = mk("Camp Sparing Npc's Timers 1"); public static const CampSparingNpcsTimers2:StatusEffectType = mk("Camp Sparing Npc's Timers 2"); - public static const CampSparingNpcsTimers3:StatusEffectType = mk("Camp Sparing Npc's Timers 3"); public static const ClaraCombatRounds:StatusEffectType = mk("Clara Combat Rounds"); public static const ClaraFoughtInCamp:StatusEffectType = mk("Clara Fought In Camp"); public static const CockPumped:StatusEffectType = mk("Cock Pumped"); diff --git a/content/coc/NPC/diva.xml b/content/coc/NPC/diva.xml index 70c7ed8925..e6954579bd 100644 --- a/content/coc/NPC/diva.xml +++ b/content/coc/NPC/diva.xml @@ -669,7 +669,7 @@ Well, this isn’t so bad, the scarf-like look is certainly nice, at the very least. Your neck now sports a collar of fur.
- + You yelp as a throbbing pain takes root in the sides of your mouth. You feel your canines grow longer as your throat grow dryer. You could go for some wine right now, with a bloody steak to top it off… maybe just the steak. From d0f3755bbd4771d19d1c1deea11a189bf7fe81c2 Mon Sep 17 00:00:00 2001 From: Oxdeception <30361731+Oxdeception@users.noreply.github.com> Date: Sat, 10 Mar 2018 20:32:59 -0500 Subject: [PATCH 13/27] Fix regressions from Adding Sphinx This reverts part of commit f1cbf99 --- Corruption-of-Champions-FD-STANDALONE.as3proj | 2 +- classes/classes/Appearance.as | 16 +- classes/classes/BodyParts/Arms.as | 3 +- classes/classes/BodyParts/Ears.as | 1 + classes/classes/BodyParts/Eyes.as | 1 + classes/classes/BodyParts/LowerBody.as | 1 + classes/classes/BodyParts/Tail.as | 3 +- classes/classes/Character.as | 5 +- classes/classes/CoC.as | 4 +- classes/classes/CockTypesEnum.as | 1 + classes/classes/Creature.as | 53 +++++-- .../classes/Items/Consumables/VampireBlood.as | 8 +- classes/classes/Items/Mutations.as | 55 ++++++- classes/classes/Items/MutationsHelper.as | 5 + classes/classes/Items/WeaponLib.as | 4 +- classes/classes/Items/Weapons/FlyWhisk.as | 2 +- classes/classes/Monster.as | 22 ++- classes/classes/PerkLib.as | 15 +- classes/classes/Player.as | 28 ++-- classes/classes/PlayerAppearance.as | 24 ++- classes/classes/PlayerEvents.as | 83 ++++++---- classes/classes/PlayerInfo.as | 7 + classes/classes/Saves.as | 2 +- classes/classes/Scenes/Areas/HighMountains.as | 42 ++++- .../HighMountains/MinervaPurification.as | 6 +- .../Areas/HighMountains/TempleOfTheDivine.as | 26 ++-- classes/classes/Scenes/Areas/Lake.as | 2 +- .../classes/Scenes/Areas/Lake/FetishZealot.as | 2 +- classes/classes/Scenes/Camp.as | 91 +++++------ classes/classes/Scenes/Camp/CampScenes.as | 4 +- classes/classes/Scenes/Changelog.as | 31 +++- classes/classes/Scenes/Combat/Combat.as | 69 ++++++--- classes/classes/Scenes/Combat/CombatMagic.as | 2 +- .../classes/Scenes/Combat/CombatSoulskills.as | 6 + classes/classes/Scenes/Combat/CombatTeases.as | 4 +- classes/classes/Scenes/Combat/CombatUI.as | 2 +- .../classes/Scenes/Combat/MagicSpecials.as | 30 ++-- .../classes/Scenes/Combat/PhysicalSpecials.as | 16 +- classes/classes/Scenes/DebugMenu.as | 2 +- classes/classes/Scenes/Dungeons/AnzuPalace.as | 7 + .../Scenes/Dungeons/AnzuPalace/AnzuScene.as | 2 +- .../Scenes/Dungeons/D3/LethiceScenes.as | 2 +- classes/classes/Scenes/Holidays.as | 2 +- classes/classes/Scenes/Inventory.as | 12 +- classes/classes/Scenes/Metamorph.as | 3 +- classes/classes/Scenes/NPCs/AmilyScene.as | 17 ++- classes/classes/Scenes/NPCs/ChiChiFollower.as | 19 ++- classes/classes/Scenes/NPCs/Diana.as | 28 ++-- classes/classes/Scenes/NPCs/DianaFollower.as | 6 +- classes/classes/Scenes/NPCs/EmberScene.as | 13 ++ classes/classes/Scenes/NPCs/EtnaFollower.as | 15 ++ .../classes/Scenes/NPCs/EvangelineFollower.as | 2 +- classes/classes/Scenes/NPCs/HelFollower.as | 13 +- .../Scenes/NPCs/IsabellaFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/IsabellaScene.as | 2 +- classes/classes/Scenes/NPCs/IzmaScene.as | 14 ++ classes/classes/Scenes/NPCs/JojoScene.as | 12 ++ classes/classes/Scenes/NPCs/JoyScene.as | 4 +- classes/classes/Scenes/NPCs/KihaFollower.as | 105 ++++++------- classes/classes/Scenes/NPCs/KihaScene.as | 19 ++- classes/classes/Scenes/NPCs/LatexGirl.as | 4 +- classes/classes/Scenes/NPCs/Luna.as | 48 +++++- classes/classes/Scenes/NPCs/LunaFollower.as | 143 ++++++++++++++++-- classes/classes/Scenes/NPCs/Rathazul.as | 2 +- .../classes/Scenes/NPCs/ShouldraFollower.as | 2 +- .../Scenes/NPCs/SophieFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/Urta.as | 4 +- classes/classes/Scenes/Places/HeXinDao.as | 38 +++-- .../Places/HeXinDao/JourneyToTheEast.as | 74 ++++++++- .../Scenes/Places/Prison/TrainingFeeding.as | 2 +- classes/classes/Scenes/Places/TelAdre.as | 2 +- classes/classes/Scenes/Places/TelAdre/Rubi.as | 2 +- classes/classes/Scenes/Pregnancy.as | 2 +- classes/classes/Scenes/SceneLib.as | 3 + classes/classes/Scenes/Soulforce.as | 36 +++-- classes/classes/StatusEffects.as | 4 + content/coc/NPC/diva.xml | 2 +- 77 files changed, 1002 insertions(+), 351 deletions(-) diff --git a/Corruption-of-Champions-FD-STANDALONE.as3proj b/Corruption-of-Champions-FD-STANDALONE.as3proj index f56b6cea1a..5170b5ca75 100644 --- a/Corruption-of-Champions-FD-STANDALONE.as3proj +++ b/Corruption-of-Champions-FD-STANDALONE.as3proj @@ -4,7 +4,7 @@ - + diff --git a/classes/classes/Appearance.as b/classes/classes/Appearance.as index 0035080fbf..7ffd76aec8 100644 --- a/classes/classes/Appearance.as +++ b/classes/classes/Appearance.as @@ -2386,6 +2386,7 @@ public class Appearance extends Utils [Skin.DRAGON_SCALES, "dragon scales", "dragon scales", "", true], [Skin.MOSS, "moss", "moss", "", false], [Skin.AQUA_RUBBER_LIKE, "AQUA_RUBBER_LIKE", "slippery rubber-like skin", "", false], + [Skin.FEATHER, "FEATHER", "feather", "", false], [Skin.TATTOED_ONI, "TATTOED_ONI", "tattooed skin", "", false], [Skin.PARTIAL_DRAGON_SCALES, "partial dragon scales", "partial dragon scales", "", true], [Skin.PARTIAL_STONE, "partial stone", "partial stone", "", false], @@ -2494,7 +2495,8 @@ public class Appearance extends Utils [Eyes.ELF, "elf"], [Eyes.RAIJU, "raiju"], [Eyes.GEMSTONES, "gemstones"], - [Eyes.FERAL, "feral"] + [Eyes.FERAL, "feral"], + [Eyes.GRYPHON, "gryphon"] ] ); public static const DEFAULT_EARS_NAMES:Object = createMapFromPairs( @@ -2527,7 +2529,8 @@ public class Appearance extends Utils [Ears.ELVEN, "elven"], [Ears.WEASEL, "weasel"], [Ears.RED_PANDA, "red-panda"], - [Ears.AVIAN, "avian"] + [Ears.AVIAN, "avian"], + [Ears.GRYPHON, "gryphon"] ] ); public static const DEFAULT_HORNS_NAMES:Object = createMapFromPairs( @@ -2585,7 +2588,8 @@ public class Appearance extends Utils [Arms.RAIJU, "raiju"], [Arms.RED_PANDA, "red-panda"], [Arms.CAT, "cat"], - [Arms.AVIAN, "avian"] + [Arms.AVIAN, "avian"], + [Arms.GRYPHON, "gryphon"] ] ); public static const DEFAULT_TAIL_NAMES:Object = createMapFromPairs( @@ -2626,7 +2630,8 @@ public class Appearance extends Utils [Tail.RAIJU, "raiju"], [Tail.RED_PANDA, "red-panda"], [Tail.GARGOYLE_2, "axe-shaped gargoyle"], - [Tail.AVIAN, "avian"] + [Tail.AVIAN, "avian"], + [Tail.GRIFFIN, "griffin"] ] ); public static const DEFAULT_WING_NAMES:Object = createMapFromPairs( @@ -2737,7 +2742,8 @@ public class Appearance extends Utils [LowerBody.ELF, "elf"], [LowerBody.RAIJU, "raiju"], [LowerBody.RED_PANDA, "red-panda"], - [LowerBody.AVIAN, "avian"] + [LowerBody.AVIAN, "avian"], + [LowerBody.GRYPHON, "gryphon"] ] ); // diff --git a/classes/classes/BodyParts/Arms.as b/classes/classes/BodyParts/Arms.as index f6704e560d..f5e6c2c928 100644 --- a/classes/classes/BodyParts/Arms.as +++ b/classes/classes/BodyParts/Arms.as @@ -28,8 +28,9 @@ public class Arms extends BodyPart { public static const GARGOYLE_2:int = 24; public static const CAT:int = 25; public static const AVIAN:int = 26; + public static const GRYPHON:int = 27; public static const SPHINX:int = 28; - + public function Arms() { super(null, null); } diff --git a/classes/classes/BodyParts/Ears.as b/classes/classes/BodyParts/Ears.as index c3fabbbdf4..faa105a0b2 100644 --- a/classes/classes/BodyParts/Ears.as +++ b/classes/classes/BodyParts/Ears.as @@ -32,6 +32,7 @@ public class Ears extends BodyPart { public static const VAMPIRE:int = 28; public static const RED_PANDA:int = 29; public static const AVIAN:int = 30; + public static const GRYPHON:int = 31; public function Ears() { super(null, null); diff --git a/classes/classes/BodyParts/Eyes.as b/classes/classes/BodyParts/Eyes.as index 8308ffcba2..3bd8d3b353 100644 --- a/classes/classes/BodyParts/Eyes.as +++ b/classes/classes/BodyParts/Eyes.as @@ -20,6 +20,7 @@ public class Eyes extends BodyPart { public static const VAMPIRE:int = 15; public static const GEMSTONES:int = 16; public static const FERAL:int = 17; + public static const GRYPHON:int = 18; public var colour:String = "brown"; public function Eyes() { diff --git a/classes/classes/BodyParts/LowerBody.as b/classes/classes/BodyParts/LowerBody.as index 3f391c8047..54b426a5ea 100644 --- a/classes/classes/BodyParts/LowerBody.as +++ b/classes/classes/BodyParts/LowerBody.as @@ -50,6 +50,7 @@ public class LowerBody extends SaveableBodyPart { public static const RED_PANDA:int = 42; public static const GARGOYLE_2:int = 43; public static const AVIAN:int = 44; + public static const GRYPHON:int = 45; override public function set type(value:int):void { super.type = value; diff --git a/classes/classes/BodyParts/Tail.as b/classes/classes/BodyParts/Tail.as index 99003e0516..c6a0da025c 100644 --- a/classes/classes/BodyParts/Tail.as +++ b/classes/classes/BodyParts/Tail.as @@ -50,8 +50,9 @@ public class Tail extends SaveableBodyPart { public static const RED_PANDA:int = 34; public static const GARGOYLE_2:int = 35; public static const AVIAN:int = 36; + public static const GRIFFIN:int = 37; public static const LION:int = 38; - + override public function set type(value:int):void { var old:int = type; super.type = value; diff --git a/classes/classes/Character.as b/classes/classes/Character.as index d20f52be7f..4edb575b9c 100644 --- a/classes/classes/Character.as +++ b/classes/classes/Character.as @@ -607,7 +607,7 @@ import classes.Items.JewelryLib; public override function maxFatigue():Number { - var max:Number = 100; + var max:Number = 150; if (game.player.alicornScore() >= 6) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 20) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 28) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); @@ -672,6 +672,7 @@ import classes.Items.JewelryLib; if (game.player.alicornScore() >= 6) max += (150 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (game.player.unicornScore() >= 5) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (hasPerk(PerkLib.DemonicLethicite)) max += Math.round(lib); + if (hasPerk(PerkLib.Metamorph)) max += 50; if (flags[kFLAGS.SOUL_CULTIVATION] >= 2) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 3) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 4) max += 30; @@ -836,7 +837,7 @@ import classes.Items.JewelryLib; public override function maxMana():Number { - var max:Number = 100; + var max:Number = 200; if (findPerk(PerkLib.ManaAffinityI) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityII) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityIII) >= 0) max += 35; diff --git a/classes/classes/CoC.as b/classes/classes/CoC.as index af1dda889e..aad7a3f8a8 100644 --- a/classes/classes/CoC.as +++ b/classes/classes/CoC.as @@ -247,8 +247,8 @@ public class CoC extends MovieClip //model.debug = debug; // TODO: Set on model? //Version NUMBER - ver = "1.0.2_mod_Xianxia_0.8i"; - version = ver + " (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes))"; + ver = "1.0.2_mod_Xianxia_0.8i2"; + version = ver + " ()"; this.images = new ImageManager(stage, mainView); this.inputManager = new InputManager(stage, mainView, false); diff --git a/classes/classes/CockTypesEnum.as b/classes/classes/CockTypesEnum.as index 20c33a3842..9546405828 100644 --- a/classes/classes/CockTypesEnum.as +++ b/classes/classes/CockTypesEnum.as @@ -49,6 +49,7 @@ package classes public static const WOLF:CockTypesEnum = new CockTypesEnum("mammal"); public static const STAMEN:CockTypesEnum = new CockTypesEnum("plant"); public static const RED_PANDA:CockTypesEnum = new CockTypesEnum("mammal"); + public static const GRYPHON:CockTypesEnum = new CockTypesEnum("avian"); public static const UNDEFINED:CockTypesEnum = new CockTypesEnum(""); function CockTypesEnum(i_group:String = "") { _group = i_group; } diff --git a/classes/classes/Creature.as b/classes/classes/Creature.as index a4407059f3..7521618b60 100644 --- a/classes/classes/Creature.as +++ b/classes/classes/Creature.as @@ -2293,6 +2293,11 @@ public class Creature extends Utils return countCocksOfType(CockTypesEnum.AVIAN); } + public function gryphonCocks():int { //How many gryphoncocks? + return countCocksOfType(CockTypesEnum.GRYPHON); + } + + public function findFirstCockType(ctype:CockTypesEnum):Number { var index:Number = 0; @@ -2965,34 +2970,38 @@ public class Creature extends Utils public function canOvipositSpider():Boolean { return eggs() >= 10 && findPerk(PerkLib.SpiderOvipositor) >= 0 && isDrider() && tail.type == Tail.SPIDER_ADBOMEN; - } public function canOvipositBee():Boolean { return eggs() >= 10 && findPerk(PerkLib.BeeOvipositor) >= 0 && tail.type == Tail.BEE_ABDOMEN; + } + public function canOvipositMantis():Boolean + { + return eggs() >= 10 && findPerk(PerkLib.MantisOvipositor) >= 0 && tail.type == Tail.MANTIS_ABDOMEN; } public function canOviposit():Boolean { - return canOvipositSpider() || canOvipositBee(); - + return canOvipositSpider() || canOvipositBee() || canOvipositMantis(); } public function eggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv1(PerkLib.SpiderOvipositor); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) return perkv1(PerkLib.BeeOvipositor); + else + return perkv1(PerkLib.MantisOvipositor); } public function addEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3001,18 +3010,24 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else { + else if (findPerk(PerkLib.BeeOvipositor) >= 0) { addPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } + else { + addPerkValue(PerkLib.MantisOvipositor, 1, arg); + if (eggs() > 50) + setPerkValue(PerkLib.MantisOvipositor, 1, 50); + return perkv1(PerkLib.MantisOvipositor); + } } } public function dumpEggs():void { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return; setEggs(0); //Sets fertile eggs = regular eggs (which are 0) @@ -3021,7 +3036,7 @@ public class Creature extends Utils public function setEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3030,33 +3045,43 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else { + else if (findPerk(PerkLib.BeeOvipositor) >= 0) { setPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } + else { + setPerkValue(PerkLib.MantisOvipositor, 1, arg); + if (eggs() > 50) + setPerkValue(PerkLib.MantisOvipositor, 1, 50); + return perkv1(PerkLib.MantisOvipositor); + } } } public function fertilizedEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv2(PerkLib.SpiderOvipositor); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) return perkv2(PerkLib.BeeOvipositor); + else + return perkv2(PerkLib.MantisOvipositor); } public function fertilizeEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) setPerkValue(PerkLib.SpiderOvipositor, 2, eggs()); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); + else + setPerkValue(PerkLib.MantisOvipositor, 2, eggs()); return fertilizedEggs(); } diff --git a/classes/classes/Items/Consumables/VampireBlood.as b/classes/classes/Items/Consumables/VampireBlood.as index f1b9368f0e..5285db5e47 100644 --- a/classes/classes/Items/Consumables/VampireBlood.as +++ b/classes/classes/Items/Consumables/VampireBlood.as @@ -55,7 +55,7 @@ public class VampireBlood extends Consumable { Check : player.hasGooSkin(), Override: mutations.humanizeSkin }, { - BodyPart: 'ears.Type', + BodyPart: 'ears.type', ChangeTo: pure ? Ears.VAMPIRE : Ears.BAT, Check : pure ? player.ears.type != Ears.HUMAN : false, Override: pure ? mutations.humanizeEars : null @@ -63,7 +63,7 @@ public class VampireBlood extends Consumable { BodyPart: 'eyes.type', ChangeTo: Eyes.VAMPIRE }, { - BodyPart: 'face.Type', + BodyPart: 'faceType', ChangeTo: Face.VAMPIRE } ]; @@ -112,7 +112,9 @@ public class VampireBlood extends Consumable { if(count)changes++; } outputText("\n\n"); - story.display(tf.BodyPart, {$pure: pure}); + if(count){ + story.display(tf.BodyPart, {$pure: pure}); + } hostObj[bodyPart] = tf.ChangeTo; for each(var extra:Object in tf.Addition){ doChange(extra,false); diff --git a/classes/classes/Items/Mutations.as b/classes/classes/Items/Mutations.as index 686f4c36f3..c5f069b17f 100644 --- a/classes/classes/Items/Mutations.as +++ b/classes/classes/Items/Mutations.as @@ -4970,8 +4970,6 @@ public final class Mutations extends MutationsHelper player.refillHunger(20); flags[kFLAGS.TIMES_TRANSFORMED] += changes; } - - public function reptilum(player:Player):void { @@ -6602,6 +6600,8 @@ public final class Mutations extends MutationsHelper //Generic eating text: clearOutput(); if (type == 0) outputText("You crack open the seed easily, and eat the fruit inside. A bit dry, as you expected, but with a sweet and aromatic taste that leaves you wanting another one."); + if (type == 1) outputText("Looking again at the fierce gryphon sculpted on brass and bronze that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); + if (type == 2) outputText("Looking again at the wonderful peacock carved in alabaster and ruby that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); //Stats changes //-Speed increase to 100. if (player.spe < 100 && type == 0 && rand(3) == 0 && changes < changeLimit) { @@ -6631,6 +6631,7 @@ public final class Mutations extends MutationsHelper if (player.str < 40) dynStats("str", .5); dynStats("str", .5); } + if (type == 1 || type == 2) changeLimit = 1; if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; //Sexual changes if (player.avianCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 0 && rand(3) == 0) { @@ -6651,6 +6652,24 @@ public final class Mutations extends MutationsHelper player.cocks[temp2].cockType = CockTypesEnum.AVIAN; changes++; } + if (player.gryphonCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 1 && rand(3) == 0) { + for (temp2 = 0; temp2 < player.cocks.length; temp2++) { + if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; + } + outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); + outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); + player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; + changes++; + } + if (player.cockTotal() > 1 && player.gryphonCocks() > 0 && player.cockTotal() > player.gryphonCocks() && type == 1 && rand(3) == 0 && changes < changeLimit) { + for (temp2 = 0; temp2 < player.cocks.length; temp2++) { + if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; + } + outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); + outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); + player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; + changes++; + } //Legs if (player.lowerBody != LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.isGoo()) { @@ -6693,6 +6712,13 @@ public final class Mutations extends MutationsHelper player.legCount = 2; changes++; } + if (player.lowerBody != LowerBody.GRYPHON && player.eyes.type == Eyes.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nTaking a seat while you see how the magic within the statue affects you, a familiar numbness reaches your legs. The rough skin covering your lower legs and feet change into more usual, soft skin, and shortly after, it starts sprouting " + player.skin.coat.color2 + " colored fur over them."); + outputText("\n\nYour feet themselves reshape, losing their avian stance and gaining one much more feline, complete with soft pink paw pads. The talons at the end of each toe become retractile feline claws. Albeit walking with those seems initially tricky, you easily gain a hold on how using your new gryphon-like legs."); + setLowerBody(LowerBody.GRYPHON); + player.legCount = 2; + changes++; + } //Tail if (player.tailType != Tail.AVIAN && player.lowerBody == LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.tailType > Tail.NONE) { @@ -6713,6 +6739,12 @@ public final class Mutations extends MutationsHelper setTailType(Tail.AVIAN); changes++; } + if (player.tailType != Tail.GRIFFIN && player.lowerBody == LowerBody.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe fan of feathers at your backside reacts under the statue magic effects. An otherworldly magic envelopes it, making the feathers twist and converge in an odd fashion, at the same time that the small bump of your tail elongates until becoming long enough to reach far past your knee."); + outputText("\n\nBefore you notice it, the long feathers have merged into a tuft of " + player.skin.coat.color + " at the end of your now long tail, while the short, downy ones now cover every inch of bare skin that the elongated appendage now have. Well, seems like you gained a griffin-like tail! It’s quite leonine in shape, but its appearance remains a bit avian."); + setTailType(Tail.GRIFFIN); + changes++; + } //Arms if (player.arms.type != Arms.AVIAN && player.tailType == Tail.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.skin.hasChitin()) { @@ -6737,6 +6769,12 @@ public final class Mutations extends MutationsHelper setArmType(Arms.AVIAN); changes++; } + if (player.arms.type != Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe skin on your arms change a bit, as the " + player.skin.coat.color2 + " turning into soft, feline fur. Your palms and fingers acquire pink paw pads, while at the end of each one of your fingers, the talons sharpen and become prehensile, adopting a posture better suited to pounce over a unsuspecting victim."); + outputText("\n\nFrom the fringe on your elbows to your armpits, your " + player.skin.coat.color + " colored plumage remains the same. At the end, you’ve gotten gryphon-like arms!."); + setArmType(Arms.GRYPHON); + changes++; + } //Wings if (player.wings.type != Wings.FEATHERED_AVIAN && player.arms.type == Arms.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.wings.type == Wings.DRACONIC_SMALL || player.wings.type == Wings.DRACONIC_LARGE || player.wings.type == Wings.DRACONIC_HUGE || player.wings.type == Wings.BAT_LIKE_TINY || player.wings.type == Wings.BAT_LIKE_LARGE || player.wings.type == Wings.BAT_LIKE_LARGE_2 || player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) { @@ -6791,6 +6829,12 @@ public final class Mutations extends MutationsHelper setEarType(Ears.AVIAN); changes++; } + if (player.ears.type != Ears.GRYPHON && player.tailType == Tail.GRIFFIN && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nAfter another session under the statue magic, the lingering effects seem to having taken a toll on you, as your ears buzz. The sound turns worse for a second, and then vanish. You hear for a second a light flapping sound, and then, nothing.\n\nWhen everything seems to have finished, you realize that your hearing range has changed, and while your overall sense of hearing remains the same, pinpointing the source of a sounds is much easier. On a nearby reflection you discover the reason: "); + outputText("two triangular ears have sprouted at your head, streamlined to flight and with a gryphon like appearance. A short layer of downy feathers covers them, the tip having a distinctive tuft. Checking that your ears are rightly placed on the new auricles, you smile happily at the sight of your gryphon ears, noting how well they compliment your looks."); + setEarType(Ears.GRYPHON); + changes++; + } //Skin if (!player.hasFeather() && changes < changeLimit && type == 0 && rand(4) == 0) { if (player.hasFur()) { @@ -6827,6 +6871,13 @@ public final class Mutations extends MutationsHelper player.skin.growCoat(Skin.FEATHER,{color:player.skin.coat.color}); changes++; } + //Eyes + if (player.eyes.type != Eyes.GRYPHON && player.arms.type == Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe mysterious energy coming from the statue continues adapting your body into a more fierce, strong shape. This time, it has affected you eyesight, as you suddenly notice how the long distances that you once had trouble seeing are clear as if you were in front of them, and that you can perceive even the minimal move even from several miles afar."); + outputText("\n\nChecking your changes on the river, you see clearly how your sclera has acquired a golden-orange coloration, as well as your outer iris, separated from the former by a thin circle of black. Both your pupil and your inner iris, which now has enlarged, are solid black. Now you’ll have a blessed vision due those raptor, gryphon-like eyes."); + setEyeTypeAndColor(Eyes.GRYPHON, "golden-orange"); + changes++; + } if (changes == 0 && type == 0) outputText("\n\nIt seems like the fruit had no effect this time. Maybe it was spoiled, or kept in storage for too much time?"); if (type == 0) player.refillHunger(15); flags[kFLAGS.TIMES_TRANSFORMED] += changes; diff --git a/classes/classes/Items/MutationsHelper.as b/classes/classes/Items/MutationsHelper.as index fba6557316..3d78201379 100644 --- a/classes/classes/Items/MutationsHelper.as +++ b/classes/classes/Items/MutationsHelper.as @@ -302,6 +302,7 @@ import classes.BodyParts.Wings; [Arms.FOX, StatusEffects.UnlockedFoxArms], [Arms.GARGOYLE, null], [Arms.GARGOYLE_2, null], + [Arms.GRYPHON, null], [Arms.HARPY, StatusEffects.UnlockedHarpyArms], [Arms.HUMAN, null], [Arms.KITSUNE, StatusEffects.UnlockedKitsuneArms], @@ -339,6 +340,7 @@ import classes.BodyParts.Wings; [Ears.FERRET, null], [Ears.FOX, StatusEffects.UnlockedFoxEars], [Ears.GOAT, StatusEffects.UnlockedGoatEars], + [Ears.GRYPHON, null], [Ears.HORSE, null], [Ears.HUMAN, null], [Ears.KANGAROO, null], @@ -375,6 +377,7 @@ import classes.BodyParts.Wings; [Eyes.FOX, StatusEffects.UnlockedFoxEyes], [Eyes.GEMSTONES, null], [Eyes.GORGON, StatusEffects.UnlockedGorgonEyes], + [Eyes.GRYPHON, null], [Eyes.HUMAN, null], [Eyes.MANTICORE, null], [Eyes.ONI, StatusEffects.UnlockedOniEyes], @@ -510,6 +513,7 @@ import classes.BodyParts.Wings; [LowerBody.GARGOYLE, null], [LowerBody.GARGOYLE_2, null], [LowerBody.GOO, null], + [LowerBody.GRYPHON, null], [LowerBody.HARPY, StatusEffects.UnlockedHarpyLegs], [LowerBody.HOOFED, StatusEffects.UnlockedHoofedLegs], [LowerBody.HUMAN, null], @@ -598,6 +602,7 @@ import classes.BodyParts.Wings; [Tail.GARGOYLE, null], [Tail.GARGOYLE_2, null], [Tail.GOAT, StatusEffects.UnlockedGoatTail], + [Tail.GRIFFIN, null], [Tail.HARPY, StatusEffects.UnlockedHarpyTail], [Tail.HORSE, null], [Tail.KANGAROO, null], diff --git a/classes/classes/Items/WeaponLib.as b/classes/classes/Items/WeaponLib.as index e6163eb764..069ca220a5 100644 --- a/classes/classes/Items/WeaponLib.as +++ b/classes/classes/Items/WeaponLib.as @@ -82,8 +82,9 @@ package classes.Items public const S_BLADE:Spellblade = new Spellblade(); public const S_GAUNT:Weapon = new Weapon("S.Gaunt","S.Gauntlet","spiked gauntlet","a spiked gauntlet","spiked punch",0,200,"This single metal gauntlet has the knuckles tipped with metal spikes. Though it lacks the damaging potential of other weapons, the sheer pain of its wounds has a chance of stunning your opponent."); public const SCARBLD:Weapon = new ScarredBlade(); - public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); + public const SCECOMM:Weapon = new Weapon("SceComm", "SceptreOfCom", "Sceptre of Command", "a Sceptre of Command", "smack", 4, 600, "This enchanted scepter empowers the abilities and control of summoners over their minions."); public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); + public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); public const SESPEAR:SeraphicSpear = new SeraphicSpear(); public const SNAKESW:Weapon = new Weapon("SnakeSw", "SnakeSword", "Snake Sword", "a Snake Sword", "whip-slash", 20, 800, "This unassuming double-edged sword is comprised of segmented pieces which, when swung, will lash out akin to a whip."); public const SPEAR :Spear = new Spear(); @@ -91,6 +92,7 @@ package classes.Items public const TCLAYMO:TopazClaymore = new TopazClaymore(); public const TRASAXE:Weapon = new Weapon("TraSAxe","Train.S.Axe", "training soul axe", "a training soul axe", "cleave", 1, 80, "This axe was specialy forged and enhanted to help novice soul cultivatiors to train their soulforce. Still if situation calls for it it could be used as a normal weapon."); public const TRIDENT:Trident = new Trident(); + public const TRSTSWO:Weapon = new Weapon("TrStSwo","TruestrikeSword", "Truestrike sword", "a Truestrike sword", "slash", 5, 400, "Lia will write desc of it...soon."); public const U_STAFF:UnicornStaff = new UnicornStaff(); public const URTAHLB:Weapon = new Weapon("UrtaHlb","UrtaHlb","halberd","a halberd","slash",30,1200,"Urta's halberd. How did you manage to get this?","Large"); public const VBLADE :Weapon = new Weapon("V.Blade","V.Blade", "V.Blade", "a V.Blade", "slash", 28, 2240, "A peculiar sword. The letter V is engraved into the blade perhaps its former owner name."); diff --git a/classes/classes/Items/Weapons/FlyWhisk.as b/classes/classes/Items/Weapons/FlyWhisk.as index 012ce69696..e5e7cff354 100644 --- a/classes/classes/Items/Weapons/FlyWhisk.as +++ b/classes/classes/Items/Weapons/FlyWhisk.as @@ -12,7 +12,7 @@ package classes.Items.Weapons public function FlyWhisk() { - super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 800, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); + super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 400, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); } } } \ No newline at end of file diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index 77c0cda15d..a001005300 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -260,7 +260,7 @@ import flash.utils.getQualifiedClassName; protected override function maxLust_base():Number { //Base lust - var temp:Number = 100 + this.bonusLust; + var temp:Number = 70 + this.bonusLust; //Apply perks if (findPerk(PerkLib.BasicSelfControl) >= 0) temp += 15; if (findPerk(PerkLib.HalfStepToImprovedSelfControl) >= 0) temp += 25; @@ -286,6 +286,11 @@ import flash.utils.getQualifiedClassName; if (findPerk(PerkLib.GclassHeavenTribulationSurvivor) >= 0) temp += (75 * (1 + newGamePlusMod())); //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); + temp += this.level * 2; + if (this.level >= 24) temp += (this.level - 23) * 3; + if (this.level >= 42) temp += (this.level - 42) * 5; + if (this.level >= 72) temp += (this.level - 72) * 10; + if (this.level >= 102) temp += (this.level - 102) * 20; return temp; } @@ -345,6 +350,21 @@ import flash.utils.getQualifiedClassName; if (this.level >= 20) temp += 50; if (this.level >= 22) temp += 50; } + if (findPerk(PerkLib.SoulSprite) >= 0) { + if (this.level >= 24) temp += 60; + if (this.level >= 26) temp += 60; + if (this.level >= 28) temp += 60; + } + if (findPerk(PerkLib.SoulScholar) >= 0) { + if (this.level >= 30) temp += 70; + if (this.level >= 32) temp += 70; + if (this.level >= 34) temp += 70; + } + if (findPerk(PerkLib.SoulElder) >= 0) { + if (this.level >= 36) temp += 80; + if (this.level >= 38) temp += 80; + if (this.level >= 40) temp += 80; + } if (findPerk(PerkLib.InsightfulResourcesI) >= 0) temp += Math.round((this.wis*5) * (1 + newGamePlusMod())); if (findPerk(PerkLib.DeityJobMunchkin) >= 0) temp *= 1.1; if (hasPerk(PerkLib.EnemyTrueDemon)) temp = 0; diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index 82e405900c..f667b46769 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -3123,7 +3123,6 @@ public class PerkLib .requireLib(50) .requireStatusEffect(StatusEffects.KnowsArouse, "Arouse spell"); JobCourtesan.requirePerk(JobSeducer) - .requirePerk(Heroism) .requireLib(50) .requireLevel(12); DazzlingDisplay.requirePerk(JobCourtesan) @@ -3231,23 +3230,23 @@ public class PerkLib // CORRUPTION //------------ //Slot 7 - Corrupted Libido - lust raises 10% slower. - CorruptedLibido.requireCor(25); + CorruptedLibido.requireCor(10); CorruptedLibido.defaultValue1 = 20; //Slot 7 - Seduction (Must have seduced Jojo) - Seduction.requireCor(50); + Seduction.requireCor(15); //Slot 7 - Nymphomania - Nymphomania.requireCor(75) + Nymphomania.requireCor(15) .requirePerk(CorruptedLibido); //Slot 7 - UNFINISHED :3 - Acclimation.requireCor(50) + Acclimation.requireCor(15) .requirePerk(CorruptedLibido) .requireMinLust(20); - SenseCorruption.requireCor(75); + SenseCorruption.requireCor(15); //Tier 1 Corruption Perks - acclimation over-rides - Sadist.requireCor(60) + Sadist.requireCor(20) .requirePerk(CorruptedLibido) .requireLevel(6); - ArousingAura.requireCor(70) + ArousingAura.requireCor(25) .requirePerk(CorruptedLibido) .requireLevel(6); //Tier 2 diff --git a/classes/classes/Player.as b/classes/classes/Player.as index 263e082f7d..f7313d4933 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -700,6 +700,11 @@ use namespace CoC; return _jewelry.value; } + //Shields for Bash + public function isShieldsForShieldBash():Boolean + { + return shield == game.shields.BUCKLER || shield == game.shields.GREATSH || shield == game.shields.KITE_SH || shield == game.shields.TRASBUC || shield == game.shields.TOWERSH || shield == game.shields.DRGNSHL || shield == game.shields.SANCTYN || shield == game.shields.SANCTYL || shield == game.shields.SANCTYD; + } //override public function get shields override public function get shieldName():String { return _shield.name; @@ -3716,7 +3721,7 @@ use namespace CoC; End("Player","racialScore"); return centaurCounter; } - + public function sphinxScore():Number { var sphinxCounter:Number = 0; @@ -3745,7 +3750,7 @@ use namespace CoC; if (tailType == 37) sphinxCounter++; if (lowerBody == 9) - sphinxCounter++; + sphinxCounter++; if (faceType == 0) sphinxCounter++; if (wings.type == 29) @@ -3761,7 +3766,6 @@ use namespace CoC; return sphinxCounter; } - //Determine Unicorn Rating public function unicornScore():Number { if (horns.type != Horns.UNICORN) @@ -5119,6 +5123,8 @@ use namespace CoC; min += 10; if(eggs() >= 40) min += 10; } + //Werebeast + if (hasPerk(PerkLib.Lycanthropy)) min += perk(findPerk(PerkLib.Lycanthropy)).value1; //Jewelry effects if (jewelryEffectId == JewelryLib.MODIFIER_MINIMUM_LUST) { @@ -5326,7 +5332,7 @@ use namespace CoC; } }//+15(60)((70))(((140))) / 10 - 20(50 - 60)((70 - 80))(((130 - 140))) if (werewolfScore() >= 6) { - if (wolfScore() >= 12) { + if (werewolfScore() >= 12) { maxStr += (100 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (60 * newGamePlusMod); @@ -5364,8 +5370,8 @@ use namespace CoC; } }//+10 / 10 - 20 - - + + if (sphinxScore() >= 5) { if (sphinxScore() >= 14) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); @@ -5378,7 +5384,7 @@ use namespace CoC; }//+50/-20/+40/+100/+40 - + if (nekomataScore() >= 11) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); else maxSpe += (40 * newGamePlusMod); @@ -6164,22 +6170,22 @@ use namespace CoC; } if (findPerk(PerkLib.CarefulButRecklessAimAndShooting) >= 0 && findPerk(PerkLib.ColdAim) < 0) maxTou -= (15 * newGamePlusMod); if (hasPerk(PerkLib.Lycanthropy)) { - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 3)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { maxStr += (10 * newGamePlusMod); maxTou += (10 * newGamePlusMod); maxSpe += (10 * newGamePlusMod); } - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 2)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { maxStr += (20 * newGamePlusMod); maxTou += (20 * newGamePlusMod); maxSpe += (20 * newGamePlusMod); } - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 1)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { maxStr += (30 * newGamePlusMod); maxTou += (30 * newGamePlusMod); maxSpe += (30 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { maxStr += (40 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (40 * newGamePlusMod); diff --git a/classes/classes/PlayerAppearance.as b/classes/classes/PlayerAppearance.as index f9c9e52428..314b1eed96 100644 --- a/classes/classes/PlayerAppearance.as +++ b/classes/classes/PlayerAppearance.as @@ -1025,6 +1025,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Your " + num2Text(player.legCount) + " legs are equally covered in [skin coat.color] fur, ending on red-panda paws with short claws. They have a nimble and strong build, in case you need to escape from something."); else if (player.lowerBody == LowerBody.AVIAN) outputText(" You have strong thighs perfect for launching you into the air which end in slender, bird-like legs, covered with a [skin coat.color] plumage down to your knees and slightly rough, [skin] below. You have digitigrade feet, with toes that end in sharp talons."); + else if (player.lowerBody == LowerBody.GRYPHON) + outputText(" You have strong thighs perfect for launching you into the air ending in furred, feline legs, covered with a coat of soft, [skin coat.color2] fur. Your have digitigrade feet, lion-like, with soft, pink soles and paw pads, with feline toes ending in sharp, retractile claws."); if (player.findPerk(PerkLib.Incorporeality) >= 0) outputText(" Of course, your [legs] are partially transparent due to their ghostly nature."); // isn't goo transparent anyway? } @@ -1156,6 +1158,9 @@ public class PlayerAppearance extends BaseContent { else if (player.tailType == Tail.AVIAN) { outputText(" A tail shaped like a fan of long, [skin coat.color] feathers rests above your " + assDescript() + ", twitching instinctively to help guide you if you were to take flight."); } + else if (player.tailType == Tail.GRIFFIN) { + outputText(" From your backside hangs a long tail, leonine in shape and covered mostly by a layer of [skin coat.color2] fur with a tip made of a tuft of [skin coat.color] colored feathers. It moves sinuously as you walk."); + } } public function describeArms():void { //Wing arms @@ -1218,6 +1223,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Your arms are covered in [skin coat.color] up to your shoulder. They end with a pair of five-toed cat paws armed with lethal claws."); else if (armType == Arms.AVIAN) outputText(" Your arms are covered with [skin coat.color] colored feathers just a bit past your elbow. Your humanoid hands have " + player.skinTone + ", slightly rough skin and end in short claws."); + else if (armType == Arms.GRYPHON) + outputText(" The feathers on your arms reach a bit past your elbows, the fringe of [skin coat.color] plumage leading to your " + player.skinTone + ", slightly rough skinned hands. They end in short, avian claws."); if (player.wings.type == Wings.BAT_ARM ){ outputText(" Your arm bones are thin and light in order to allow flight. You have grown a few extra fingers, which allow you to hold various items even with your abnormal hands, albeit at the cost of preventing flight while doing so."); } @@ -1270,7 +1277,7 @@ public class PlayerAppearance extends BaseContent { outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as a harpy."); if (wingType == Wings.FEATHERED_ALICORN) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an alicorn."); - if (wingType == Wings.FEATHERED_SPHINX) + if (wingType == Wings.FEATHERED_SPHINX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an sphinx."); if (wingType == Wings.FEATHERED_PHOENIX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the crimson-colored wings folded close, they can unfurl to allow you to soar as gracefully as a phoenix."); @@ -1480,6 +1487,9 @@ public class PlayerAppearance extends BaseContent { else if(eyeType == Eyes.FERAL){ outputText(" In your eyes sometime dance a green light. It encompass your entire pupil when you let the beast within loose."); } + else if(eyeType == Eyes.GRYPHON){ + outputText(" Your gifted eyes have a bird-like appearance, having an [eyecolor] sclera and a large, black iris. A thin ring of black separates your sclera from your outer iris."); + } else outputText(" Your eyes are [eyecolor]."); } public function describeHairAndEars():void { @@ -1560,6 +1570,9 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" Two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } + if (earType == Ears.GRYPHON){ + outputText(" A duo of triangular, streamlined ears are located at each side of your head, helping you to pinpoint sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); + } // if (player.gills.type == Gills.FISH) { @@ -1644,6 +1657,9 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" The [hair] atop your head compliments you quite well, and two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } + if (earType == Ears.GRYPHON){ + outputText(" Two triangular ears part your [hair] at each side of your head. They’re streamlined and adapted to fly, and are quite useful to locate sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); + } // if(player.antennae.type == Antennae.MANTIS) { @@ -1838,7 +1854,7 @@ public class PlayerAppearance extends BaseContent { else if(skin.hasLightningShapedTattoo()) outputText(" covered with a few glowing lightning tattoos"); outputText(". Your mouth is somewhat human save for your wolf-like canines."); } else if (player.hasPartialCoat(Skin.FUR)) { - outputText(" Your face looks human save for your wolf-like canines. You've got [skin coat], hiding your [skin noadj] underneath your furry visage."); + outputText(" Your face looks human save for your wolf-like canines. On your cheek you have [skin coat]."); } else { outputText(" Your face looks human save for your wolf-like canines, but overlaid with glittering [skin coat]."); } @@ -1991,11 +2007,11 @@ public class PlayerAppearance extends BaseContent { } if (faceType == Face.RED_PANDA) { outputText(" Your face has a distinctive animalistic muzzle, proper from a red-panda, complete with a cute pink nose."); - if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") + if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat.color] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") } if (faceType == Face.AVIAN) { outputText(" Your visage has a bird-like appearance, complete with an avian beak. A couple of small holes on it makes up for your nostrils, while a long, nimble tongue is hidden inside."); - if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat] feathers.") + if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat].") } // } diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index cf7d0628e7..c152f0d6f2 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -137,12 +137,21 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers2); } } + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) { + if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, -1); + if (player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 2, -1); + if (player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 3, -1); + if (player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 4, -1); + if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) <= 0) { + player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers3); + } + } //Sidonie checks if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { if (flags[kFLAGS.LUNA_JEALOUSY] < 200) flags[kFLAGS.LUNA_JEALOUSY]++; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 10) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 9) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12 || flags[kFLAGS.LUNA_FOLLOWER] == 14 || flags[kFLAGS.LUNA_FOLLOWER] == 16) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; + if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11 || flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 15) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); } Begin("PlayerEvents","hourlyCheckRacialPerks"); needNext = hourlyCheckRacialPerks(); @@ -433,7 +442,12 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { } if (player.werewolfScore() >= 6 && player.hasPerk(PerkLib.LycanthropyDormant)) { outputText("\nAs you become wolf enough your mind recedes into increasingly animalistic urges. It will only get worse as the moon comes closer to full. Gained Lycanthropy.\n"); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + var bonusStats:Number = 0; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; + player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); player.removePerk(PerkLib.LycanthropyDormant); needNext = true; } @@ -584,47 +598,62 @@ if (CoC.instance.model.time.hours > 23) { //Once per day if (flags[kFLAGS.CHI_CHI_LVL_UP] < 2) flags[kFLAGS.CHI_CHI_LVL_UP] = 2; else flags[kFLAGS.CHI_CHI_LVL_UP]++; } + //Mishaps reset + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.removeStatusEffect(StatusEffects.CampLunaMishaps1); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.removeStatusEffect(StatusEffects.CampLunaMishaps2); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps3)) player.removeStatusEffect(StatusEffects.CampLunaMishaps3); //Full moon if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { flags[kFLAGS.LUNA_MOON_CYCLE]++; + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; if (player.hasPerk(PerkLib.Lycanthropy)) { - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + var changeV:Number = 10 * player.newGamePlusMod(); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { outputText("\nYou can’t help but notice the moon is almost full as it rises up. It seems transfixing like it is calling to you."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,10); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { outputText("\nWhen the almost-full moon appears it causes your heart to race with excitement. You hearing seems better than ever. Every breath brings a rush of smells through your nose that seem much more pronounced than they should."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,20); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { outputText("\nYou gaze at the moon and it seems to gaze back into you. Something is coming and it won’t be long now. You feel like you are crawling in your skin. It feels like tear out of your body and be born anew."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time.\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,30); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { - outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + "."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { + outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + ".\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,40); if (player.hasCock() || (player.gender == 3 && rand(2) == 0)) player.goIntoRut(false); else if (player.hasVagina()) player.goIntoHeat(false); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1) { + outputText("\nThe moon is waning, you are feeling less powerful.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,30); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2) { + outputText("\nThe moon is waning, you are feeling less powerful.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,20); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3) { + outputText("\nThe moon is waning, you are feeling less powerful.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,10); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 4) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nIt's a new moon tonight, you feel somewhat weak."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 4) { + outputText("\nIt's a new moon tonight, you feel somewhat weak.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,0); } + needNext = true; } } } diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index d0d3cd8619..48a3c3cbc0 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -557,6 +557,13 @@ public class PlayerInfo extends BaseContent { if (flags[kFLAGS.LUNA_FOLLOWER] > 3) { interpersonStats += "Luna Affection: " + Math.round(flags[kFLAGS.LUNA_AFFECTION]) + "%\n"; interpersonStats += "Luna Jealousy: " + Math.round(flags[kFLAGS.LUNA_JEALOUSY]) + "%\n"; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; + else interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; + interpersonStats += "\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 3) interpersonStats += "Luna lvl: 27\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 2) interpersonStats += "Luna lvl: 21\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 1) interpersonStats += "Luna lvl: 15\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 0) interpersonStats += "Luna lvl: 9\n"; } if (flags[kFLAGS.OWCAS_ATTITUDE] > 0) interpersonStats += "Owca's Attitude: " + flags[kFLAGS.OWCAS_ATTITUDE] + "\n"; diff --git a/classes/classes/Saves.as b/classes/classes/Saves.as index 4e7cfaff2c..a574dc0c17 100644 --- a/classes/classes/Saves.as +++ b/classes/classes/Saves.as @@ -358,7 +358,7 @@ public function saveLoad(e:MouseEvent = null):void clearOutput(); outputText("Where are my saves located?\n"); - outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); + outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); outputText("In Windows Vista/7 (Chrome):
Users/{username}/AppData/Local/Google/Chrome/User Data/Default/Pepper Data/Shockwave Flash/WritableRoot/#SharedObjects/{GIBBERISH}/
\n\n"); outputText("Inside that folder it will saved in a folder corresponding to where it was played from. If you saved the CoC.swf to your HDD, then it will be in a folder called localhost. If you played from my website, it will be in fenoxo.com. The save files will be labelled CoC_1.sol, CoC_2.sol, CoC_3.sol, etc.
\n\n"); outputText("Why do my saves disappear all the time?\nThere are numerous things that will wipe out flash local shared files. If your browser or player is set to delete flash cookies or data, that will do it. CCleaner will also remove them. CoC or its updates will never remove your savegames - if they disappear something else is wiping them out.\n\n"); diff --git a/classes/classes/Scenes/Areas/HighMountains.as b/classes/classes/Scenes/Areas/HighMountains.as index 3ceeaa64fe..1c1dd89704 100644 --- a/classes/classes/Scenes/Areas/HighMountains.as +++ b/classes/classes/Scenes/Areas/HighMountains.as @@ -106,6 +106,10 @@ use namespace CoC; phoenixScene.encounterPhoenix1(); return; } + if ((player.hasKeyItem("Gryphon Statuette") < 0 || player.hasKeyItem("Peacock Statuette") < 0) && rand(4) == 0) { + caveScene(); + return; + } //10% chance to mino encounter rate if addicted if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_STATE] > 0 && rand(10) == 0) { spriteSelect(44); @@ -178,6 +182,7 @@ use namespace CoC; return; } } + //\"Chicken Harpy\" by Jay Gatsby and not Savin he didn't do ANYTHING //Initial Intro public function chickenHarpy():void @@ -210,7 +215,6 @@ use namespace CoC; if (player.hasItem(consumables.OVIELIX, 3)) addButton(1, "Give Three", giveThreeOviElix); addButton(4, "Leave", leaveChickenx); } - //If Give Two public function giveTwoOviElix():void { @@ -228,7 +232,6 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.PURPLEG); addButton(5, "White", getHarpyEgg, consumables.WHITEEG); } - //If Give Three public function giveThreeOviElix():void { @@ -245,7 +248,6 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.L_PRPEG); addButton(5, "White", getHarpyEgg, consumables.L_WHTEG); } - //All Text public function getHarpyEgg(itype:ItemType):void { @@ -255,7 +257,6 @@ use namespace CoC; outputText("You take " + itype.longName + ", and the harpy nods in regards to your decision. Prepping her cart back up for the road, she gives you a final wave goodbye before heading back down through the mountains.\n\n"); inventory.takeItem(itype, chickenHarpy); } - //If No public function leaveChickenx():void { @@ -265,5 +266,38 @@ use namespace CoC; outputText("\n\nYou decide to take your own path, heading back to camp while you can."); doNext(camp.returnToCampUseOneHour); } + + public function caveScene():void { + clearOutput(); + outputText("Wandering once more around the rocky cliffs on the higher area of the mountains, you find yourself increasingly bores, as you spend the most of the hour tossing aside pebbles and rocks that fell on the path, or crushing the solidified snow with your footwear.\n\n"); + outputText("On the middle of your careless, and surprisingly peaceful stroll, you happen to find an alcove carved on the cliff’s stone. It’s not very big, maybe three or four feet tall, five feet wide and two feet deep, resting one feet above the path ground, so you’re forced to get on your knees to examine it better.\n\n"); + outputText("The alcove itself is seemingly empty, though after a better examination, the back has engraved on the cliff rock a long, detailed inscription. Sadly, you can’t get a word from it, since it’s written in a strange, old language that’s doesn’t barely resemble anything that you’ve found in Mareth. Carved on each side there area stylized figures of avian creatures, "); + outputText("the most noticeable ones being a gryphon with the wings spread, and in the other side, a peacock doing the same with its tail. As you put your hands on them, you notice a that a shape vaguely resembling a hand forming in the floor of the alcove.\n\n"); + outputText("Tentatively you put one hand on place"); + if (player.avianScore() < 9) { + outputText(", but absolutely nothing happens. Maybe the magic or whatever that thing was supposed to do stopped working long ago? In any case, you had enough looking for a while, and since you’re not getting anything useful from there, you resume your walk.\n\n"); + doNext(camp.returnToCampUseOneHour); + } + else { + outputText(" and gasp in surprise as the figures depicting the creatures at the sides of the alcove recede as you do so, leaving in place two smaller alcoves with two statuettes on them.\n\n"); + outputText("The first one, made on brass and bronze, depicts a fierce looking gryphon in an assault stance. Every bit of the artifact emanates an unnatural strength. On the other side, a statue made of alabaster and ruby gemstones is shaped as a graceful peacock. Strangely, besides being pretty, the way it’s crafted gives you a weird, mystic feel.\n\n"); + outputText("You try to grab both, but as soon as you put your hands in one of them, the alcove with the other starts closing. Seems like you’ll have only one choice here.\n\n"); + menu(); + addButton(0, "Gryphon", caveSceneGryphon); + addButton(1, "Peacock", caveScenePeacock); + } + } + public function caveSceneGryphon():void { + outputText("Picking the brass-forged statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); + outputText("With nothing useful left to you here, you resume your walk and return to your camp with the gryphon idol on your bag.\n\n"); + player.createKeyItem("Gryphon Statuette", 0, 0, 0, 0); + doNext(camp.returnToCampUseOneHour); + } + public function caveScenePeacock():void { + outputText("Picking the alabaster statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); + outputText("With nothing useful left to you here, you resume your walk and return to your camp with the peacock idol on your bag.\n\n"); + player.createKeyItem("Peacock Statuette", 0, 0, 0, 0); + doNext(camp.returnToCampUseOneHour); + } } } diff --git a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as index ceec9b80eb..4a424f9620 100644 --- a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as +++ b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as @@ -589,7 +589,7 @@ public class MinervaPurification extends BaseContent outputText("Giving me these daughters is the greatest gift you could have given me...
\" she says softly as she holds you gently, bulge pressed gently against bulge, her hands stroking your stomach as you caress hers."); outputText("\n\nThe two of you lay here against the tree cuddling together as a pair of expecting parents"); if (flags[kFLAGS.MINERVA_CHILDREN] > 0) outputText(", your daughters curled up with you and Minerva; they seem very happy, as if they all know that they are going to be getting more sisters soon"); - outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?"); + outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?\""); } else { //Not pregnant or pregnant with something else. outputText("You can't help wondering if anything has changed since you had been with her last. If her body was any hint at how fertile she now is, it was likely very easy for her to get pregnant. It's not hard to spot her; the golden siren is sitting on the edge of the spring with her feet in the water, gently splashing the water as she softly sings to herself. When you get closer, though, you realize that she is not really singing to herself but to her round pregnant belly. From where you are you can clearly tell she is stroking her pregnancy gently with her hands as she sings softly to her unborn babies."); @@ -1652,7 +1652,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } @@ -1664,7 +1664,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } diff --git a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as index 3004463f23..94bb8ff32d 100644 --- a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as +++ b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as @@ -81,6 +81,8 @@ use namespace CoC; mainmenu(); } private function mainmenu():void { + outputText("\n\nGargoyle Quest progress: " + flags[kFLAGS.GARGOYLE_QUEST] + ""); + outputText("\n\nTemple Repair progress: " + flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] + ""); menu(); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 1) { addButton(0, "Pray", PlayerPrayAtTemple).hint("Offer your prayer to one of the temple altar."); @@ -261,11 +263,11 @@ use namespace CoC; if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 150) addButton(1, "Statue of Marae", rebuildStatueOfMarae).hint("Repair the statue."); else addButtonDisabled(1, "Statue of Marae", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) { - if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Repairing the gargoyles on the walls", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); - else addButtonDisabled(2, "Repairing the gargoyles on the walls", "You not have enough stones."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) { + if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Gargoyles", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); + else addButtonDisabled(2, "Gargoyles", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 18) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 17) { if (flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 50 && flags[kFLAGS.CAMP_CABIN_NAILS_RESOURCES] >= 10) addButton(3, "Prayer Bench", makeNewPrayerBenches).hint("Repair some of the temple banches."); else addButtonDisabled(3, "Prayer Bench", "You not have enough wood or/and nails."); } @@ -338,7 +340,7 @@ use namespace CoC; }*/ public function rebuildStatueOfMarae():void { clearOutput(); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 4) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); else outputText("You work for the entire day sculpting stone and repairing the statue of Marae. By the time you're done you can feel divine power radiate from it empowering the entire temple."); flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] -= 150; flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS]++; @@ -377,11 +379,11 @@ use namespace CoC; if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] < 1) outputText("broken altar of Fera. You believe it was damaged way before the demons came in, likely by the priesthood tending the temple."); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] == 1) outputText("Altar of Fera. An aura of depraved lust rise from it, inviting you to unknown pleasure. This altar radiate a clearly demonic aura and dims the sanctity of the temple like an idol."); outputText("\n\nMarae's statue "); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 6) outputText("lies on the ground, its head shattered to pieces"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6) outputText("in the background awaits the worshippers with its serene and compassionate expression"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("lies on the ground, its head shattered to pieces"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5) outputText("in the background awaits the worshippers with its serene and compassionate expression"); outputText(". Lining both walls"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7) { outputText(", many decorative gargoyles are displayed."); if (flags[kFLAGS.ONYX_PATH] < 1) outputText(" While Sapphire is the last living stony guardian of the temple, this still gives off the illusion of a platoon of guardians watching faithfully over this divine place."); if (player.isGargoyle()) outputText(" Your own pedestal stands right next to Sapphire's, allowing you to keep close to her when you need to rest (using your pedestal allows you to sleep with Sapphire if your relation is high enough)."); @@ -392,7 +394,7 @@ use namespace CoC; outputText(" is looking at you expectantly."); } } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 9) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { outputText(" There are " + player.statusEffectv1(StatusEffects.TempleOfTheDivineTracker) + " benches in the temple for the worshipers to sit upon."); } doNext(TempleAltairsRebuildMenu); @@ -1206,11 +1208,11 @@ use namespace CoC; outputText(".\n\nIt's arms "); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with a set of bestial four fingered sharp stone claws"); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("ends with very human fist"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); outputText(". It's legs "); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with clawed bestial feets with three toe at the front and one at the back"); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("are human like"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); outputText(". Its "); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("mace like"); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("axe like"); diff --git a/classes/classes/Scenes/Areas/Lake.as b/classes/classes/Scenes/Areas/Lake.as index 7f5f062142..e954514c0d 100644 --- a/classes/classes/Scenes/Areas/Lake.as +++ b/classes/classes/Scenes/Areas/Lake.as @@ -43,7 +43,7 @@ use namespace CoC; return; } //Diana - if (flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(4) == 0) { + if (player.level >= 3 && flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(10) == 0) { SceneLib.dianaScene.repeatLakeEnc(); return; } diff --git a/classes/classes/Scenes/Areas/Lake/FetishZealot.as b/classes/classes/Scenes/Areas/Lake/FetishZealot.as index 00c4f47940..f4d2d5716d 100644 --- a/classes/classes/Scenes/Areas/Lake/FetishZealot.as +++ b/classes/classes/Scenes/Areas/Lake/FetishZealot.as @@ -82,7 +82,7 @@ public class FetishZealot extends Monster //A pirate costume; if(armorName == PIRATE_CLOTHES) { //You are faced with one of the strangest things you have ever seen in your life. A stereotypical pirate, who has not replaced his hand with a hook, but rather a collection of sex toys. You can see at least two dildos, a fleshlight, and numerous other toys that you're incapable of recognizing. - outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); + outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); } //Military attire; if(armorName == MILITARY_CLOTHES) { diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index f8b0d5bdc9..0c37d5522b 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -860,7 +860,8 @@ CoC.instance.saves.saveGame(player.slotName); if (slavesCount() > 0) addButton(7, "Slaves", campSlavesMenu).hint("Check up on any slaves you have received and interact with them."); addButton(8, "Camp Actions", campActions).hint("Interact with the camp surroundings and also read your codex or questlog."); if (flags[kFLAGS.CAMP_CABIN_PROGRESS] >= 10 || flags[kFLAGS.CAMP_BUILT_CABIN] >= 1) addButton(9, "Enter Cabin", cabinProgress.initiateCabin).hint("Enter your cabin."); //Enter cabin for furnish. - if (player.findPerk(PerkLib.JobSoulCultivator) >= 0 || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); + if (player.hasPerk(PerkLib.JobSoulCultivator) || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); + else if (!player.hasPerk(PerkLib.JobSoulCultivator) && player.hasPerk(PerkLib.Metamorph)) addButton(10, "Metamorf", SceneLib.metamorph.accessMetamorphMenu).hint("Use your soulforce to mold freely your body."); var canFap:Boolean = !player.hasStatusEffect(StatusEffects.Dysfunction) && (flags[kFLAGS.UNABLE_TO_MASTURBATE_BECAUSE_CENTAUR] == 0 && !player.isTaur()); if (player.lust >= 30) { addButton(11, "Masturbate", SceneLib.masturbation.masturbateMenu); @@ -1001,6 +1002,7 @@ public function loversHotBathCount():Number { if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.DIANA_FOLLOWER] > 5) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) counter++; if (followerHel()) counter++; if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; @@ -1023,6 +1025,7 @@ public function sparableCampMembersCount():Number { if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) counter++; if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) counter++; if (followerHel()) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; if (followerKiha()) counter++; @@ -1075,7 +1078,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { break; } outputText(".\n\n"); - buttons.add("Amily", amilyScene.amilyFollowerEncounter); + buttons.add("Amily", amilyScene.amilyFollowerEncounter2).disableIf(player.statusEffectv1(StatusEffects.CampLunaMishaps1) > 0,"Hurt foot."); } //Amily out freaking Urta? else if(flags[kFLAGS.AMILY_VISITING_URTA] == 1 || flags[kFLAGS.AMILY_VISITING_URTA] == 2) { @@ -1096,7 +1099,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Chi Chi if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) { outputText("You can see Chi Chi not so far from Jojo. She’s busy practicing her many combos on a dummy. Said dummy will more than likely have to be replaced within twenty four hours.\n\n"); - buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu); + /*if (player.statusEffectv4(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); + else */buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu2); } //Diana if (flags[kFLAGS.DIANA_FOLLOWER] > 5) { @@ -1106,7 +1110,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Etna if (flags[kFLAGS.ETNA_FOLLOWER] > 0) { outputText("Etna is resting lazily on a rug in a very cat-like manner. She’s looking at you always with this adorable expression of hers, her tail wagging expectantly at your approach.\n\n"); - buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Sleeping."); + else */buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu2).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //Helia if(SceneLib.helScene.followerHel()) { @@ -1129,7 +1134,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("You see the salamander Helia pacing around camp, anxiously awaiting your departure to the harpy roost. Seeing you looking her way, she perks up, obviously ready to get underway.\n\n"); } } - buttons.add( "Helia", helFollower.heliaFollowerMenu); + buttons.add( "Helia", helFollower.heliaFollowerMenu2).disableIf(player.statusEffectv3(StatusEffects.CampLunaMishaps2) > 0,"Sleeping."); } //Isabella if(isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) { @@ -1222,7 +1227,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { case 2: outputText("Izma is lying on her back near her bedroll. You wonder at first just why she isn't using her bed, but as you look closer you notice all the water pooled beneath her and the few droplets running down her arm, evidence that she's just returned from the stream."); break; } outputText("\n\n"); - buttons.add( "Izma", izmaScene.izmaFollowerMenu); + buttons.add( "Izma", izmaScene.izmaFollowerMenu2).disableIf(player.statusEffectv4(StatusEffects.CampLunaMishaps1) > 0,"Fish smell."); } } //Kiha! @@ -1248,7 +1253,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("Most of them are on fire.\n\n"); } } - buttons.add( "Kiha", kihaScene.encounterKiha).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Cleaning burnt meat."); + else */buttons.add( "Kiha", kihaScene.encounterKiha2).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //MARBLE if(player.hasStatusEffect(StatusEffects.CampMarble) && flags[kFLAGS.FOLLOWER_AT_FARM_MARBLE] == 0) { @@ -1428,9 +1434,10 @@ public function campFollowers(descOnly:Boolean = false):void { //Ember if(emberScene.followerEmber()) { emberScene.emberCampDesc(); - buttons.add( + /*if (player.statusEffectv2(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); + else */buttons.add( "Ember", - emberScene.emberCampMenu + emberScene.emberCampMenu2 ).hint("Check up on Ember the dragon-" + (flags[kFLAGS.EMBER_ROUNDFACE] == 0 ? "morph" : flags[kFLAGS.EMBER_GENDER] == 1 ? "boy" : "girl" ) + "" ).disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } @@ -1471,7 +1478,7 @@ public function campFollowers(descOnly:Boolean = false):void { if (flags[kFLAGS.CAMP_BUILT_CABIN] > 0) outputText(" cabin"); if (!(model.time.hours > 4 && model.time.hours < 23)) outputText(" and the mouse is sleeping on it right now.\n\n"); else outputText(", though the mouse is probably hanging around the camp's perimeter.\n\n"); - buttons.add( "Jojo", jojoScene.jojoCamp).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty."); + buttons.add( "Jojo", jojoScene.jojoCamp2).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty.").disableIf(player.statusEffectv2(StatusEffects.CampLunaMishaps1) > 0,"Annoyed."); } } //Celess @@ -1605,9 +1612,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Luna if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("Luna wanders around the camp, doing her chores as usual."); - if (flags[kFLAGS.LUNA_JEALOUSY] >= 25) outputText(" She looks at you from time to time, as if expecting you to notice her."); + if (flags[kFLAGS.LUNA_JEALOUSY] >= 50) outputText(" She looks at you from time to time, as if expecting you to notice her."); outputText("\n\n"); - buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna."); + buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna.").disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0,"Training."); } for each(var npc:XXCNPC in _campFollowers){ npc.campDescription(buttons,XXCNPC.FOLLOWER); @@ -1639,7 +1646,7 @@ private function campActions():void { addButton(5, "Build", campBuildingSim).hint("Check your camp build options."); if (player.hasPerk(PerkLib.JobElementalConjurer) >= 0 || player.hasPerk(PerkLib.JobGolemancer) >= 0) addButton(6, "Winions", campWinionsArmySim).hint("Check your options for making some Winions."); else addButtonDisabled(6, "Winions", "You need to be able to make some minions that fight for you to use this option like elementals or golems..."); - if (player.hasStatusEffect(StatusEffects.KnowsHeal)) addButton(7, "Heal", spellHealcamp).hint("Heal will attempt to use white magic to instantly close your wounds and restore your body. \n\nMana Cost: 30"); + //addButton(7, "Heal", spellHealcamp).hint("Heal. \n\nMana Cost: 30"); //addButton(8, "Craft", kGAMECLASS.crafting.accessCraftingMenu).hint("Craft some items."); if (flags[kFLAGS.CAMP_UPGRADES_FISHERY] >= 1) addButton(8, "Fishery", VisitFishery).hint("Visit Fishery."); addButton(9, "Questlog", questlog.accessQuestlogMainMenu).hint("Check your questlog."); @@ -1732,39 +1739,6 @@ private function RetrieveStack():void { } } -public function spellHealcamp():void { - clearOutput(); - if(player.mana < 30) { - outputText("Your mana is too low to cast this spell."); - doNext(campActions); - return; - } - useMana(30); - var healing:int = combat.scalingBonusIntelligence(); - //healing *= spellMod(); - if (player.unicornScore() >= 5) healing *= ((player.unicornScore() - 4) * 0.5); - if (player.alicornScore() >= 6) healing *= ((player.alicornScore() - 5) * 0.5); - if (player.armorName == "skimpy nurse's outfit") healing *= 1.2; - //Determine if critical heal! - var crit:Boolean = false; - var critHeal:int = 5; - if (player.findPerk(PerkLib.Tactician) >= 0 && player.inte >= 50) critHeal += (player.inte - 50) / 5; - if (rand(100) < critHeal) { - crit = true; - healing *= 1.75; - } - healing = Math.round(healing); - outputText("You chant a magical song of healing and recovery and your wounds start knitting themselves shut in response. (+" + healing + ")."); - if (crit == true) outputText(" *Critical Heal!*"); - HPChange(healing,false); - outputText("\n\n"); - statScreenRefresh(); - flags[kFLAGS.SPELLS_CAST]++; - //spellPerkUnlock(); - doNext(doCamp); - cheatTime(1/12); -} - private function swimInStream():void { var izmaJoinsStream:Boolean = false; var marbleJoinsStream:Boolean = false; @@ -2232,7 +2206,7 @@ CoC.instance.saves.saveGame(player.slotName); return; } //Full Moon - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { SceneLib.lunaFollower.fullMoonEvent(); sleepRecovery(false); return; @@ -2262,7 +2236,7 @@ CoC.instance.saves.saveGame(player.slotName); } else if(flags[kFLAGS.SLEEP_WITH] == "Luna" && flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("You head to bed, Luna following you. "); - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { SceneLib.lunaFollower.sleepingFullMoon(); return; } @@ -3459,8 +3433,13 @@ private function promptSaveUpdate():void { } /* if (flags[kFLAGS.MOD_SAVE_VERSION] == 20) { flags[kFLAGS.MOD_SAVE_VERSION] = 21; + if (player.hasPerk(PerkLib.Lycanthropy)) { + player.skin.coverage = Skin.COVERAGE_LOW; + player.coatColor = player.hairColor; + } + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; clearOutput(); - outputText("Text."); + outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); doNext(doCamp); return; } @@ -3471,6 +3450,20 @@ private function promptSaveUpdate():void { doNext(doCamp); return; } + if (flags[kFLAGS.MOD_SAVE_VERSION] == 22) { + flags[kFLAGS.MOD_SAVE_VERSION] = 23; + clearOutput(); + outputText("Text."); + doNext(doCamp); + return; + } + if (flags[kFLAGS.MOD_SAVE_VERSION] == 23) { + flags[kFLAGS.MOD_SAVE_VERSION] = 24; + clearOutput(); + outputText("Text."); + doNext(doCamp); + return; + } */ doCamp(); } diff --git a/classes/classes/Scenes/Camp/CampScenes.as b/classes/classes/Scenes/Camp/CampScenes.as index 5f84239f84..e4094b97d5 100644 --- a/classes/classes/Scenes/Camp/CampScenes.as +++ b/classes/classes/Scenes/Camp/CampScenes.as @@ -125,7 +125,7 @@ public function PeepingTom3():void { // outputText("As a naga, Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (arianScene.arianFollower() && flags[kFLAGS.ARIAN_VAGINA] > 0 && flags[kFLAGS.ARIAN_COCK_SIZE] == 0) outputText("Arian while formerly a male seems to get along with the other girls.\n\n"); if (flags[kFLAGS.SIDONIE_FOLLOWER] >= 1) { outputText("Sitting on a side of the spring that is spacious enough to accommodate his larger frame, Sidonie lies relaxed, among the girls. Most of them give her not-so subtle glances, some of them at her hefty bosom, but the most directed at the thick equine member dangling from the legs. Not caring too much about their looks, she simply lies and enjoy the bath.\n\n"); @@ -178,7 +178,7 @@ public function HaveAGirlBath():void { // outputText("As a naga Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath. Can’t say this is not welcome.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) { if (flags[kFLAGS.IZMA_NO_COCK] == 0) outputText("While not entirely a girl, Izma is womanly enough that she was still accepted in the bath, her crotch well hidden behind a cloth.\n\n"); else outputText("While she was not always a girl, Izma is womanly enough that she was still accepted in the bath.\n\n"); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 2bf325152f..6c53a2bbd2 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -39,7 +39,7 @@ package classes.Scenes outputText("-Kindra archery training would progress 2x faster.\n"); outputText("-Manual that Chi Chi drops after beating PC in second fight unlock Soul Blast soulskill (15 turns CD, chance to stun for 3 turns and dmg scale with PC current str, int and wis)\n"); outputText("-Fixed bugs: Softlocks on few enemy bind specials (like Izumi or Ceraph), Wrath specials correctly list needed resource, option to send Izma to fishery before it's built, many other small fixes\n\n"); - outputText("Version 0.8i:\n\n"); + outputText("Version 0.8i (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes):\n\n"); outputText("-New tier 0 misc lvl-up perk: Tough Hide. Req. Job: Beast Warrior perk and 30+ tou. Effect: Increase natural armor by 2 so long as PC have scale chitin fur or other natural armor.\n"); outputText("-New tier 1 misc lvl-up perk: Feral Armor. Req. Tough Hide perk and 60+ tou. Effect: Gain extra armor based on PC toughness so long as PC is naked, +20 to max wrath. (Similar to agility but PC must be naked and have natural armor)\n"); outputText("-New tier 1 misc lvl-up perk: Job: Healer. Req. 30+ int and 30+ wis. Effect: +5 to max Int and Wis (scalable), +30 to max Mana, +10% to spellpower when using healing spells\n"); @@ -57,7 +57,6 @@ package classes.Scenes outputText("-Having natural claws add toggle in combat menu to switch between normal or feral combat style. Only when PC not use any weapon (after few special exceptions) can benefit from feral combat style - when PC can attack more than once a turn fatigue costs will be halfed.\n"); outputText("-New melee weapon: Claws - obtainable by buying in weapon shop in He'Xin'Dao. 0 atk, 10% to cause bleed, 100 gems, is one of special exception weapons, which could be used without loosing benefits from using feral combat style.\n"); outputText("-All bleed effects not req. to lower enemy armor below 10. Also previous 50% chance for bleed effect was lowered to 25% for hooked gaunlets.\n"); - //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-First gaunlet repeatable reward was lowered to 15 spirit stones to keep in theme of 5 SS for each enemy defeated in gaunlet challanges.\n"); outputText("-Perk Rage give 50 more to max wrath and perk Anger 100 more to max wrath. To perk Job: Warlord req. was added option to use perk Feral Whirlwind instead of Whirlwind or Whipping. Other req. stay the same.\n"); outputText("-Beast Warrior PC's can use their own version of Whirlwind that req. only to have natural claws or weapons that can substitude natural claws. Almost all rest is similar to Whirlwind performed with any non-large/large weapon.\n"); @@ -74,7 +73,6 @@ package classes.Scenes outputText("-New body part - face: Avain Face. No prereq.\n"); outputText("-New body part - ears: Avain Ears. No prereq.\n"); outputText("-New body part - skin: Feathers. No prereq.\n"); - //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); outputText("-New melee weapon (by Shamanknight): Halberd - buyable in weapons shop in Tel'Adre. Cost 1200 gems. Base atk is 6 increased by 9 when PC have 50+ str and another 15 more atk when having 100+ str. Attacks ignore 40% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Guan Dao - buyable in weapons shop in He'Xin'Dao. Cost 100 spirit stones. Base atk is 6 increased by 8 when PC have 50+ str and another 11 more atk when having 100+ str. Attacks ignore 60% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Fly-Whisk - buyable in weapons shop in He'Xin'Dao. Cost 80 spirit stones. Base atk is 0, increase magical soulskills power by 20%.\n"); @@ -92,14 +90,33 @@ package classes.Scenes outputText("-Tease and few other lust dealing attacks scalling was changed to use libido scaling instead lvl based one + in case of alraune it will have toughness scaling too.\n"); outputText("-Giacomo was added to possible encounters in Soul Sense menu. Also Lumi Lab after first time visiting it would be moved to Dungeons submenu (since it should been like Sean shop inside one of dungeons).\n"); outputText("-Celess related events in forest would be temporaly unaccesable (not affecting anything if PC already have Celess in camp).\n"); - outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n\n\n\n\n");/*ostatni punkt changelogu - outputText("-Added in current version race effects to Metamorph perk: \n"); + outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n"); + outputText("Version 0.8i2:\n\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); + outputText("-Diana later stages stats adjusted. Also added req. of min. lvl 3 to meet her at lake, lowered encounter chance.\n"); + outputText("-Luna can be spared when PC accept her (by loosing in fight or just accepting). In case of simple accepting there would be new option showing up in talk menu after talking with her on Lycantrophy after accpting her that allow voluntary been biten by her. After sparing she can lvl up up to lvl 27.\n"); + outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); + outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); + outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); + outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); + outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); + outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); + outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); + outputText("-Starting mana cap rised from 100 to 200 and starting fatigue cap from 100 to 150. Feral Whirlwind base dmg increased by 50%. Archery base accuracy increased form 30% to 40%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not just any item in shield slot like mana bracer.\n"); + outputText("-Attacks using intelligence and wisdom scalling would now use scalling used by attack using str/tou/spe, which mean at stat values above 100 it would be weaker effect.\n"); + outputText("-Req. for perks form corruption tree lowered: Corrupted Libido, Seduction, Nymphomania, Acclimation, Sense Corruption, Sadist, Arousing Aura\n"); + outputText("-Monsters base lust cap lowered from 100 to 70. Also now they will get a few points to max cap each lvl (at begining 2, then 5, 10, 20).\n"); + outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed, Temple of the Divine rebulding bugfixing, removed req. of Herism perk for perk Job: Countresan, missing Anzu in his Palace\n\n\n\n\n");/*ostatni punkt changelogu + //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); + //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Corrupted Celess to corrupt. (item properties desc).\n"); outputText("-New event perk: Gargoyle. Gained in ritual to become gargoyle by picking own blood. Effects: \n"); outputText("-New event perk: Corrupted Gargoyle. Gained in ritual to become gargoyle by picking minotaur blood. Effects: \n"); + outputText("-Added in current version race effects to Metamorph perk: \n"); + outputText("-\n"); outputText("-\n"); outputText("-\n"); outputText("-\n"); @@ -107,12 +124,14 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); outputText("-Added in current version race effects to Metamorph perk: \n");, Goo, Siren, Bat, Vampire, Cat, Cheshire cat outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); @@ -154,8 +173,6 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); - outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index a8c6d8d56f..aad6d3e7d0 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -804,6 +804,7 @@ public function baseelementalattacks(elementType:int = -1):void { if (summonedElementals >= 8 && manaCost > 45 && player.hasPerk(PerkLib.StrongestElementalBond)) manaCost -= 40; if (player.mana < manaCost) { outputText("Your mana is too low to fuel your elemental attack!\n\n"); + flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] = 1; doNext(combatMenu); } else { @@ -829,6 +830,7 @@ public function elementalattacks(elementType:int, summonedElementals:int):void { if (player.hasPerk(PerkLib.ElementalConjurerResolve)) elementalamplification += 0.1 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerDedication)) elementalamplification += 0.2 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerSacrifice)) elementalamplification += 0.3 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; + if (player.weapon == weapons.SCECOMM) elementalamplification += 0.5; elementalDamage *= elementalamplification; //Determine if critical hit! var crit:Boolean = false; @@ -1253,8 +1255,13 @@ internal function wait():void { } } +public function meleeAccuracy():Number { + var accmod:Number = 200; + return accmod; +} + public function arrowsAccuracy():Number { - var accmod:Number = 60; + var accmod:Number = 80; if (player.hasPerk(PerkLib.HistoryScout) || player.hasPerk(PerkLib.PastLifeScout)) accmod += 40; if (player.hasPerk(PerkLib.Accuracy1)) { accmod += player.perkv1(PerkLib.Accuracy1); @@ -2340,7 +2347,6 @@ public function attack():void { return; } - var damage:Number = 0; //Determine if dodged! if ((player.hasStatusEffect(StatusEffects.Blind) && rand(2) == 0) || (monster.spe - player.spe > 0 && int(Math.random() * (((monster.spe - player.spe) / 4) + 80)) > 80)) { //Akbal dodges special education @@ -2379,6 +2385,17 @@ public function attack():void { enemyAI(); return; } + meleeDamageAcc(); +} + +public function meleeDamageAcc():void { + var accMelee:Number = 0; + accMelee += (meleeAccuracy() / 2); + if (flags[kFLAGS.ATTACKS_ACCURACY] > 0) accMelee -= flags[kFLAGS.ATTACKS_ACCURACY]; + if (player.weaponName == "Truestrike sword") accMelee = 100; +// fatigue(oneArrowTotalCost()); + if (rand(100) < accMelee) { + var damage:Number = 0; //------------ // DAMAGE //------------ @@ -2780,16 +2797,19 @@ public function attack():void { dynStats("lus", 25); } - outputText("\n"); checkAchievementDamage(damage); WrathWeaponsProc(); heroBaneProc(damage); + } + else { + + } if(monster.HP <= 0){doNext(endHpVictory); return;} if(monster.lust >= monster.maxLust()){doNext(endLustVictory); return;} if (flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] >= 2){ flags[kFLAGS.MULTIPLE_ATTACKS_STYLE]--; - // flags[kFLAGS.ATTACKS_ACCURACY] += 5; + // flags[kFLAGS.ATTACKS_ACCURACY] += 15; attack(); return; } @@ -5328,6 +5348,13 @@ public function clawsRend():void { outputText("\n\n"); enemyAI(); } +public function PussyLeggoMyEggo():void { + clearOutput(); + outputText("You let your opponent free ending your embrace."); + outputText("\n\n"); + monster.removeStatusEffect(StatusEffects.Pounce); + enemyAI(); +} public function runAway(callHook:Boolean = true):void { if (callHook && monster.onPcRunAttempt != null){ @@ -5780,7 +5807,7 @@ public function soulskillMagicalMod():Number { public function soulskillcostmulti():Number { var multiss:Number = 1; - if (soulskillMod() > 1) multiss += Math.round(soulskillMod() - 1) * 10;/* + if (soulskillMod() > 1) multiss += (soulskillMod() - 1) * 0.1;/* if (player.hasPerk(PerkLib.SoulPersonage)) multiss += 1; if (player.hasPerk(PerkLib.SoulWarrior)) multiss += 1; if (player.hasPerk(PerkLib.SoulSprite)) multiss += 1; @@ -5814,28 +5841,16 @@ public function soulskillCost():Number { for(var i:int = 20; (i <= 80) && (i <= stat); i += 20){ scale += stat - i; } - for(i = 100; (i <= 1200) && (i <= stat); i += 50){ + for(i = 100; (i <= 2000) && (i <= stat); i += 50){ scale += stat - i; } return scale; } - public function scalingBonusToughness():Number { - return touSpeStrScale(player.tou); - } - - public function scalingBonusSpeed():Number { - return touSpeStrScale(player.spe); - } - - public function scalingBonusStrength():Number { - return touSpeStrScale(player.str); - } - private function inteWisLibScale(stat:int):Number{ var scale:Number = 6.75; var changeBy:Number = 0.50; - if(stat <= 1200){ + if(stat <= 2000){ if(stat <= 100){ scale = (2/6) + ((int(stat/100)/20) * (1/6)); changeBy = 0.25; @@ -5846,12 +5861,24 @@ public function soulskillCost():Number { return (stat * scale) + rand(stat * (scale + changeBy)); } + public function scalingBonusToughness():Number { + return touSpeStrScale(player.tou); + } + + public function scalingBonusSpeed():Number { + return touSpeStrScale(player.spe); + } + + public function scalingBonusStrength():Number { + return touSpeStrScale(player.str); + } + public function scalingBonusWisdom():Number { - return inteWisLibScale(player.wis); + return touSpeStrScale(player.wis); } public function scalingBonusIntelligence():Number { - return inteWisLibScale(player.inte); + return touSpeStrScale(player.inte); } public function scalingBonusLibido():Number { diff --git a/classes/classes/Scenes/Combat/CombatMagic.as b/classes/classes/Scenes/Combat/CombatMagic.as index 85597129cc..6099d08834 100644 --- a/classes/classes/Scenes/Combat/CombatMagic.as +++ b/classes/classes/Scenes/Combat/CombatMagic.as @@ -2053,7 +2053,7 @@ public class CombatMagic extends BaseCombatContent { if (monster.hasPerk(PerkLib.DarknessVulnerability)) damage *= 0.5; if (monster.hasPerk(PerkLib.LightningNature)) damage *= 0.2; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); damage = Math.round(damage); //if (monster.short == "goo-girl") damage = Math.round(damage * 1.5); - pomyśleć czy bdą dostawać bonusowe obrażenia //if (monster.short == "tentacle beast") damage = Math.round(damage * 1.2); - tak samo przemyśleć czy bedą dodatkowo ranione diff --git a/classes/classes/Scenes/Combat/CombatSoulskills.as b/classes/classes/Scenes/Combat/CombatSoulskills.as index 7f0d942710..4ebe47fba0 100644 --- a/classes/classes/Scenes/Combat/CombatSoulskills.as +++ b/classes/classes/Scenes/Combat/CombatSoulskills.as @@ -25,6 +25,8 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Ice Fist", IceFist).hint("A chilling strike that can freeze an opponent solid, leaving it vulnerable to shattering soul art and hindering its movement. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.findPerk(PerkLib.FireAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to fire."); + } else if (!player.isFistOrFistWeapon()) { + bd.disable("Your current used weapon not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } @@ -33,6 +35,8 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Fire Punch", FirePunch).hint("Ignite your opponents dealing fire damage and setting them ablaze. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); + } else if (!player.isFistOrFistWeapon()) { + bd.disable("Your current used weapon not allow to use this technique."); } else if (player.findPerk(PerkLib.ColdAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to cold."); } @@ -57,6 +61,8 @@ public class CombatSoulskills extends BaseCombatContent { buttons.add("Punishing Kick", PunishingKick).hint("A vicious kick that can daze an opponent, reducing its damage for a while. \n\nWould go into cooldown after use for: 10 rounds \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.hasStatusEffect(StatusEffects.CooldownPunishingKick)) { bd.disable("You need more time before you can use Punishing Kick again."); + } else if (!player.isBiped() || !player.isTaur()) { + bd.disable("Your legs not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } diff --git a/classes/classes/Scenes/Combat/CombatTeases.as b/classes/classes/Scenes/Combat/CombatTeases.as index de139f03f7..130bd92292 100644 --- a/classes/classes/Scenes/Combat/CombatTeases.as +++ b/classes/classes/Scenes/Combat/CombatTeases.as @@ -1462,8 +1462,8 @@ public class CombatTeases extends BaseCombatContent { damage *= .7; bonusDamage *= .7; if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - damage *= (1 + player.lust100); - bonusDamage *= (1 + player.lust100); + damage *= (1 + (player.lust100 * 0.01)); + bonusDamage *= (1 + (player.lust100 * 0.01)); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { damage *= 1.15; diff --git a/classes/classes/Scenes/Combat/CombatUI.as b/classes/classes/Scenes/Combat/CombatUI.as index 29d50a87cf..42ddc3f323 100644 --- a/classes/classes/Scenes/Combat/CombatUI.as +++ b/classes/classes/Scenes/Combat/CombatUI.as @@ -187,7 +187,7 @@ public class CombatUI extends BaseCombatContent { if (player.fatigueLeft() <= combat.physicalCost(20)) { button(0).disable("You are too tired to bite " + monster.a + " " + monster.short + "."); } - //addButton(4, "Release", combat.GooLeggoMyEggo); + //addButton(4, "Release", combat.PussyLeggoMyEggo); } else if (player.hasPerk(PerkLib.FirstAttackElementals) && flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] == 3 && flags[kFLAGS.IN_COMBAT_PLAYER_ELEMENTAL_ATTACKED] != 1) { menu(); if (player.hasStatusEffect(StatusEffects.SummonedElementalsAir)) addButton(0, "Air", combat.baseelementalattacks, Combat.AIR); diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index 029b89f49f..dfd6de6728 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -695,7 +695,7 @@ public class MagicSpecials extends BaseCombatContent { } if (player.findPerk(PerkLib.SluttySimplicity) >= 0 && player.armorName == "nothing") lustDmgF *= (1 + ((10 + rand(11)) / 100)); if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - lustDmgF *= (1 + player.lust100); + lustDmgF *= (1 + (player.lust100 * 0.01)); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { lustDmgF *= 1.15; @@ -1127,7 +1127,7 @@ public class MagicSpecials extends BaseCombatContent { if (monster.hasPerk(PerkLib.LightningVulnerability)) damage *= 2; if (monster.hasPerk(PerkLib.DarknessNature)) damage *= 5; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); damage = Math.round(damage); //Shell if(monster.hasStatusEffect(StatusEffects.Shell)) { @@ -1713,26 +1713,26 @@ public class MagicSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.ImprovedCrinosShape)) { if (player.hasPerk(PerkLib.GreaterCrinosShape)) { if (player.hasPerk(PerkLib.MasterCrinosShape)) { - temp1 += player.str * 0.2; - temp2 += player.tou * 0.2; - temp3 += player.spe * 0.2; + temp1 += player.str * 1.6; + temp2 += player.tou * 1.6; + temp3 += player.spe * 1.6; } else { - temp1 += player.str * 0.15; - temp2 += player.tou * 0.15; - temp3 += player.spe * 0.15; + temp1 += player.str * 0.8; + temp2 += player.tou * 0.8; + temp3 += player.spe * 0.8; } } else { - temp1 += player.str * 0.1; - temp2 += player.tou * 0.1; - temp3 += player.spe * 0.1; + temp1 += player.str * 0.4; + temp2 += player.tou * 0.4; + temp3 += player.spe * 0.4; } } else { - temp1 += player.str * 0.05; - temp2 += player.tou * 0.05; - temp3 += player.spe * 0.05; + temp1 += player.str * 0.2; + temp2 += player.tou * 0.2; + temp3 += player.spe * 0.2; } temp1 = Math.round(temp1); temp2 = Math.round(temp2); @@ -1756,7 +1756,7 @@ public class MagicSpecials extends BaseCombatContent { } public function returnToNormalShape():void { clearOutput(); - outputText("Gathering all you willpower you forcefully subduing your inner beast and retunrning to your normal shape."); + outputText("Gathering all you willpower you forcefully subduing your inner beast and returning to your normal shape."); player.dynStats("str", -player.statusEffectv1(StatusEffects.CrinosShape)); player.dynStats("tou", -player.statusEffectv2(StatusEffects.CrinosShape)); player.dynStats("spe", -player.statusEffectv3(StatusEffects.CrinosShape)); diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index c22a005709..4ebd372f98 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -223,7 +223,7 @@ public class PhysicalSpecials extends BaseCombatContent { bd.disable("Your golems can't attack flying targets. (Only golems made by grand-master golem maker can do this)"); } } - if (player.shield != ShieldLib.NOTHING) { + if (player.isShieldsForShieldBash()) { bd = buttons.add("Shield Bash", shieldBash).hint("Bash your opponent with a shield. Has a chance to stun. Bypasses stun immunity. \n\nThe more you stun your opponent, the harder it is to stun them again."); bd.requireFatigue(physicalCost(20)); } @@ -830,9 +830,9 @@ public class PhysicalSpecials extends BaseCombatContent { } fatigue(50, USEFATG_PHYSICAL); var damage:Number = 0; - damage += (scalingBonusStrength() * 0.2) + player.str + unarmedAttack(); - if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.1) + ((player.str + unarmedAttack()) * 0.5); - if (damage < 10) damage = 10; + damage += (scalingBonusStrength() * 0.3) + ((player.str + unarmedAttack()) * 1.5); + if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.15) + ((player.str + unarmedAttack()) * 0.75); + if (damage < 15) damage = 15; //weapon bonus if (player.weaponAttack < 101) damage *= (1 + (player.weaponAttack * 0.02)); else if (player.weaponAttack >= 101 && player.weaponAttack < 201) damage *= (2 + ((player.weaponAttack - 100) * 0.015)); @@ -1143,6 +1143,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1196,6 +1197,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1250,6 +1252,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1291,6 +1294,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1326,6 +1330,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1361,6 +1366,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1812,7 +1818,7 @@ public class PhysicalSpecials extends BaseCombatContent { clearOutput(); if(player.fatigue + physicalCost(10) > player.maxFatigue()) { clearOutput(); - outputText("You just don't have the energy to puonce at anyone right now..."); + outputText("You just don't have the energy to pounce at anyone right now..."); //Gone menuLoc = 1; menu(); addButton(0, "Next", combatMenu, false); diff --git a/classes/classes/Scenes/DebugMenu.as b/classes/classes/Scenes/DebugMenu.as index 6308bb4bfd..ec21b20d7f 100644 --- a/classes/classes/Scenes/DebugMenu.as +++ b/classes/classes/Scenes/DebugMenu.as @@ -627,7 +627,7 @@ public class DebugMenu extends BaseContent } displayHeader("Color picker"); outputText('\nCurrent color:'); - outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); + outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); outputText("\nSaturation:\t\t"+s+' / 100\t(0: greyscale, 100: bright color)'); outputText("\nLuminosity:\t"+l+' / 100\t(0: black, 50: bright color, 100: white)'); outputText('\n\nCurrent mode: '+pickerMode+' color.'); diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace.as b/classes/classes/Scenes/Dungeons/AnzuPalace.as index d61458f1e5..2228124af4 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace.as @@ -135,6 +135,7 @@ use namespace CoC; outputText("\n\nComfortable armchairs, with soft cushions, covered in red velvet provide a good place to rest. On the left part of the room, are several shelves containing books about the story of Mittani and other similar things."); outputText("\n\nTo the east is the hall which connects the rest of the rooms in this floor. In a corner, on the end of the room, leading to the north, a door leads to the baths."); dungeons.setDungeonButtons(roomBathroom, null, null, roomFoyer); + if ((model.time.hours >= 10 && model.time.hours < 13) || model.time.hours == 19) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomBathroom():void { dungeonLoc = 91; @@ -144,6 +145,7 @@ use namespace CoC; outputText("\n\nThe rest of the room is covered with light brown tiles on the floor and the lower part of the walls, and a pattern of golden tiles and gold inlaids on the upper walls, separated by a band of mosaics displaying fish in exotic colors, sea serpents and aquatic monsters of a kind that you can’t recognize."); outputText("\n\nSome lamps around the room keep the bath well illuminated, and a door to the south leads back to living room."); dungeons.setDungeonButtons(null, roomLivingRoom, null, null); + if (model.time.hours == 22) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomDiningRoom():void { dungeonLoc = 92; @@ -153,6 +155,7 @@ use namespace CoC; outputText("\n\nDecorating the corners are vases with violets, whose smell perfumes the air. The columns in golden marble and the colorful decorations in silk hanging from them complete the room atmosphere."); outputText("\n\nTo the north, there is a door that leads to the kitchen. Another, leading to the west, goes back to the principal hall."); dungeons.setDungeonButtons(roomKitchen, null, roomFoyer, null); + if (model.time.hours == 9 || model.time.hours == 14 || model.time.hours == 21) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomKitchen():void { dungeonLoc = 93; @@ -162,6 +165,7 @@ use namespace CoC; outputText("\n\nIn the back of the room, a wooden door leads to the place where Anzu stores food. Inside are grains, bread, cheese, several crates containing wine, and in some containers, wrapped inside snow and ice, are big pieces of meat."); outputText("\n\nThe constant heat from the oven and the stove makes this room as warm as the bedroom or the living room."); dungeons.setDungeonButtons(null, roomDiningRoom, null, null); + if (model.time.hours == 8 || model.time.hours == 13 || model.time.hours == 20) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Floor 2 public function roomHallFloor2():void { @@ -184,6 +188,7 @@ use namespace CoC; outputText("\n\nAnzu’s bed is huge, even for Marethian standards. Soft cushions and linen sheets cover the mattress. The bed itself releases an aromatic smell. You have the temptation of climb in and sleep on it all day."); outputText("\n\nAnother fireplace, smaller than the one in the living room, warms the place atmosphere."); dungeons.setDungeonButtons(null, null, null, roomHallFloor2); + if (model.time.hours <= 7 || model.time.hours >= 23) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomLibrary():void { dungeonLoc = 96; @@ -193,6 +198,7 @@ use namespace CoC; outputText("\n\nOn the end of the place, is Anzu’s private study. A desk, a chair, some bookcases next to it. Nothing extraordinary."); outputText("\n\nTo the south is the exit to the hall, that connects all rooms in the third floor."); dungeons.setDungeonButtons(null, roomHallFloor2, null, null); + if (model.time.hours >= 15 && model.time.hours < 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomMultiuse():void { dungeonLoc = 97; @@ -243,6 +249,7 @@ use namespace CoC; outputText("\n\nThe forest and the snow covered hills extend as far as the eye can see. The fresh air, though cold, bring you a peace which takes you away from the corruption and the horrors of this land for a moment."); dungeons.setDungeonButtons(null, null, null, null); addButton(7, "Downstairs", roomHallFloor3); + if (model.time.hours == 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Basement public function roomBasement():void { diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as index 3ca1310290..0eb4b7601a 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as @@ -210,7 +210,7 @@ use namespace CoC; outputText("\n\n\"I think that even after we are friends and all, and the fact of we don’t mind…em...relieving pressure, together…\""); outputText("\n\nOh, you’re understanding the way of he’s going. After a few doubts, he puts his hand on yours and finally says:"); outputText("\n\n\"I think… I now think of you as more than a friend. You see…despite being a god, sometimes I could be a little unsure, and explaining this kind of thing is difficult for me, but…I think, no, I’m sure what I feel about you is not only friendship, because, [name], I think that I’ve fallen in love with you. "); - outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me."); + outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me.\""); flags[kFLAGS.ANZU_RELATIONSHIP_LEVEL] = 4; doYesNo(anzuRelatLvl4Sex, anzuRelatLvl4Dont); return; diff --git a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as index 84227e4eb7..78479adbc5 100644 --- a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as +++ b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as @@ -777,7 +777,7 @@ public class LethiceScenes extends BaseContent outputText("\n\nThe girl blinks, the rage on her face replaced by confusion. “W-what are you talking about, demon?” she murmurs, looking up for the first time. You glance down at her from your place at Mistress’s side, really looking at this... this “Champion” for the first time. You feel a vague sense of recognition when you look at her, even as dirty and cum-slathered as she is, though you can’t place her. You squint, but trying to think more about it just makes your head hurt, and so you instead look down at those perky tits of hers, letting yourself get hard again at the thought of grabbing onto them and fucking her as your next bitch."); outputText("\n\n“You’re lucky,” Mistress smirks, standing. “"); - if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines."); + if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines.\""); else { outputText("How did you escape from the factory, I wonder? And so clean and pure, too... you’re belly’s not yet swollen with imps, and your breasts are so small. Did you slip through"); diff --git a/classes/classes/Scenes/Holidays.as b/classes/classes/Scenes/Holidays.as index 9dda10232f..0627d34c71 100644 --- a/classes/classes/Scenes/Holidays.as +++ b/classes/classes/Scenes/Holidays.as @@ -1677,7 +1677,7 @@ public class Holidays { if (player.hasVagina()) EngineCore.addButton(3, "Pussy", pastieValentineIntro, "vag"); } else { - EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover."); + EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover.\""); EngineCore.doNext(SceneLib.camp.returnToCampUseTwoHours); } } diff --git a/classes/classes/Scenes/Inventory.as b/classes/classes/Scenes/Inventory.as index 7b77536180..7c30754c5a 100644 --- a/classes/classes/Scenes/Inventory.as +++ b/classes/classes/Scenes/Inventory.as @@ -102,6 +102,8 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (miscNieve || miscHolli || player.hasKeyItem("Dragon Egg") >= 0 + || player.hasKeyItem("Gryphon Statuette") >= 0 + || player.hasKeyItem("Peacock Statuette") >= 0 || flags[kFLAGS.ANEMONE_KID] > 0 || flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (miscNieve) { @@ -173,7 +175,15 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (model.time.hours >= 6) addButton(5, "Garden", Gardening.manageuyourgarden).hint("Visit your plant offspring"); } - addButton(14, "Back", inventoryMenu); + /* if (player.hasKeyItem("Gryphon Statuette") >= 0) { + addButton(6, "Gryphon", SceneLib.mutationsTable.skybornSeed(1)); + foundItem = true; + } + if (player.hasKeyItem("Peacock Statuette") >= 0) { + addButton(6, "Peacock", SceneLib.mutationsTable.skybornSeed(2)); + foundItem = true; + } + */ addButton(14, "Back", inventoryMenu); } public function BagOfCosmosMenu():void { diff --git a/classes/classes/Scenes/Metamorph.as b/classes/classes/Scenes/Metamorph.as index 59161ed796..729017e4fc 100644 --- a/classes/classes/Scenes/Metamorph.as +++ b/classes/classes/Scenes/Metamorph.as @@ -40,7 +40,8 @@ public function accessMetamorphMenu():void { addButton(11, "Page 2", accessPage2MetamorphMenu); // addButton(12, "Page 3", accessPage3MetamorphMenu); // addButton(13, "Page 4", accessPage4MetamorphMenu); - addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); + if (player.hasPerk(PerkLib.JobSoulCultivator)) addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); + else addButton(14, "Back", playerMenu); } private function accessPage1MetamorphMenu():void { diff --git a/classes/classes/Scenes/NPCs/AmilyScene.as b/classes/classes/Scenes/NPCs/AmilyScene.as index 82b6f63814..dbc851dd57 100644 --- a/classes/classes/Scenes/NPCs/AmilyScene.as +++ b/classes/classes/Scenes/NPCs/AmilyScene.as @@ -2548,6 +2548,11 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface //----------=============================------------ //Approach Amily: // EVENT 2427 + public function amilyFollowerEncounter2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaAmily(); + else amilyFollowerEncounter(); + } + public function amilyFollowerEncounter():void { if(!amilyCorrupt() && player.eggs() >= 20 && player.canOviposit() && flags[kFLAGS.AMILY_OVIPOSITION_UNLOCKED] == 0) { amilyEggStuff(); @@ -2702,7 +2707,7 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface private function amilyCorruptSexMenu():void { amilySprite(); if(player.gender > 0) { - outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?"); + outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?\""); menu(); if (player.hasCock()) { addButton(0, "Anal", corruptAmilyBuckFutter).hint("Fuck Amily in the ass!"); @@ -8293,5 +8298,15 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface amilyPreggoChance(); doNext(camp.returnToCampUseOneHour); } + + public function mishapsLunaAmily():void { + clearOutput(); + outputText("You check on Amily and notice the mouse is holding her foot visibly in pain.\n\n"); + outputText("\"Gah how did I step on these " + (silly() ? "Lego" : "rocks") + "!? I should’ve paid more attention. Sorry [name], we’ll talk again later.\"\n\n"); + outputText("You think you notice Luna watching from a distance, but surely it's just your imagination.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 1, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 1, 0, 0, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/ChiChiFollower.as b/classes/classes/Scenes/NPCs/ChiChiFollower.as index adec4177a1..0cc0a71aa5 100644 --- a/classes/classes/Scenes/NPCs/ChiChiFollower.as +++ b/classes/classes/Scenes/NPCs/ChiChiFollower.as @@ -73,7 +73,7 @@ public function WonSecondFight():void { public function WonSecondFightNo():void { outputText("Likely the proud master would rather have her opponent leave her be than be dishonored any further. You head back toward your camp to rest after this well earned victory, pocketing the scroll you found on Chi Chi at the same time, as you fail to notice the blood beginning to slowly create a small pool under her.\n\n"); outputText("A peasant runs to you, stopping you from leaving for a moment.\n\n"); - outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\n\n"); + outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\"\n\n"); outputText("You are somewhat shocked to learn that Chi Chi died, did she go all out in this battle to the point it cost her life? You head back to camp trying to figure how such a tragic incident happened in a training session.\n\n"); flags[kFLAGS.CHI_CHI_FOLLOWER] = 2; inventory.takeItem(weapons.MASTGLO, WonSecondFightNo2); @@ -421,6 +421,11 @@ public function SoulskilsManualsShopPunishingKick2():void { doNext(camp.returnToCampUseFourHours); } +public function ChiChiCampMainMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaChiChi(); + else ChiChiCampMainMenu(); +} + public function ChiChiCampMainMenu():void { clearOutput(); outputText("You go over to Chi Chi who pauses her training to head to you once you are close."); @@ -518,5 +523,17 @@ public function chichiSparring():void { startCombat(new ChiChi()); } +public function mishapsLunaChiChi():void { + clearOutput(); + outputText("As you go to visit Chi Chi you hear her scream. Running over to check whats going on you notice the fire mouse is now a sobbing mess, wet with water. You don’t recall her crying before so this must be serious.\n\n"); + outputText("\"Why why? Why would someone put a bucket right above my bedroll now I’m all wet and my fire will take hours to rise again!\"\n\n"); + outputText("She notice you checking her and panic.\n\n"); + outputText("\"Eep go away [name]! D..don’t look at me!! The last thing I need is you looking at me right now.\"\n\n"); + outputText("That’s quite the surprise. Does the proud fighter she normaly is turn into an awkward village girl the moment shes wet? Well regardless you guess you will have to visit her later because there’s no way she’s letting you approach her right now.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 4, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 0, 1); + doNext(playerMenu); +} + } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/Diana.as b/classes/classes/Scenes/NPCs/Diana.as index 956a2dc1ea..275830179e 100644 --- a/classes/classes/Scenes/NPCs/Diana.as +++ b/classes/classes/Scenes/NPCs/Diana.as @@ -34,6 +34,8 @@ package classes.Scenes.NPCs var cost:Number = 30; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 3; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 4.5; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 5; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -41,6 +43,8 @@ package classes.Scenes.NPCs var cost:Number = 50; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 5; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 7.5; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 10; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -54,6 +58,8 @@ package classes.Scenes.NPCs if (findPerk(PerkLib.WizardsFocus) >= 0) mod1 += .4; if (findPerk(PerkLib.SpellpowerHealing) >= 0) mod1 += .2; if (findPerk(PerkLib.NaturalHealingMinor) >= 0) mod1 += .3; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) mod1 += .4; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) mod1 += .5; return mod1; } public function SpellMod():Number { @@ -260,8 +266,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 18; - this.bonusHP = 725; - this.bonusMana = 265; + this.bonusHP = 730; + this.bonusMana = 285; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -275,8 +281,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 21; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 785; + this.bonusMana = 310; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -290,8 +296,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 24; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 790; + this.bonusMana = 330; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -305,8 +311,8 @@ package classes.Scenes.NPCs this.weaponAttack = 9; this.armorDef = 12; this.level = 27; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 845; + this.bonusMana = 355; this.gems = rand(5) + 15; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -415,13 +421,13 @@ package classes.Scenes.NPCs this.createPerk(PerkLib.NaturalHealingMinor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 6) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.NaturalHealingMajor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 7) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.SoulSprite, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 8) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.NaturalHealingEpic, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_FOLLOWER] == 3 || flags[kFLAGS.DIANA_FOLLOWER] == 4) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 81d0c624e2..6850a3f379 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -225,7 +225,7 @@ public function wonOverDianaOralM():void { if (flags[kFLAGS.DIANA_FOLLOWER] >= 2) { outputText("You don’t really even have to tell her, she’s already practically drooling. She quickly grabs your "); if (player.cockTotal() > 1) outputText("largest "); - outputText("cock. , before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); + outputText("cock, before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); outputText("Pleased you start pushing your "); if (player.cockTotal() > 1) outputText("largest "); outputText("[cock] into her eager mouth, "); @@ -440,7 +440,7 @@ public function wonOverDianaRape():void { outputText("Grunting, and with a huge amount of self control, you pull yourself out of her, spraying your load over her back. Satisfied, you climb off her, leaving her to hang off the " + object() + ", crying softly to herself, while you dress yourself and leave.\n\n"); } //if (player.isAlraune()) x; - if (flags[kFLAGS.DIANA_LVL_UP] < 2) flags[kFLAGS.DIANA_FOLLOWER] = 3; + if (flags[kFLAGS.DIANA_LVL_UP] < 3) flags[kFLAGS.DIANA_FOLLOWER] = 3; else flags[kFLAGS.DIANA_FOLLOWER] = 4; player.orgasm(); cleanupAfterCombat(); @@ -459,7 +459,7 @@ public function wonOverDianaSpare():void { flags[kFLAGS.DIANA_DEFEATS_COUNTER]++; if (flags[kFLAGS.DIANA_DEFEATS_COUNTER] == 1 && flags[kFLAGS.DIANA_LVL_UP] == 0) { if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers2)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers2, 4, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 0, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers2, 0, 0, 0, 18); flags[kFLAGS.DIANA_DEFEATS_COUNTER] = 0; flags[kFLAGS.DIANA_LVL_UP] = 1; } diff --git a/classes/classes/Scenes/NPCs/EmberScene.as b/classes/classes/Scenes/NPCs/EmberScene.as index 697edddec3..701e6fcfe3 100644 --- a/classes/classes/Scenes/NPCs/EmberScene.as +++ b/classes/classes/Scenes/NPCs/EmberScene.as @@ -209,6 +209,11 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface } //Approaching Ember (Z) + public function emberCampMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEmber(); + else emberCampMenu(); + } + public function emberCampMenu():void { clearOutput(); @@ -4615,5 +4620,13 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface outputText("\n\nYou look about, but see no sign of the dragon... " + emberMF("he", "she") + "'s probably gone to get breakfast." + player.clothedOrNaked(".. looking to the side, you spot your [armorName] neatly folded beside the nest.") + " Smiling to yourself, you " + player.clothedOrNaked("put on your [armorName] and ") + "get ready for another day..."); doNext(playerMenu); } + + public function mishapsLunaEmber():void { + clearOutput(); + outputText("As you call for Ember the dragon simply does not show up. You can see " + emberMF("him", "her") + " in the sky searching angrily for something and even hear " + emberMF("him", "her") + " swear in the distance. Whatever made Ember so mad you don’t want to know. You decide to call " + emberMF("him", "her") + " later so to avoid getting yourself burned as " + emberMF("he", "she") + " indeed start to torch the landscape at random.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 2, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 1, 0, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/EtnaFollower.as b/classes/classes/Scenes/NPCs/EtnaFollower.as index 89c187fb86..a398186a8b 100644 --- a/classes/classes/Scenes/NPCs/EtnaFollower.as +++ b/classes/classes/Scenes/NPCs/EtnaFollower.as @@ -419,6 +419,11 @@ public function etnaRapeIntro2():void addButton(2, "No", etnaRapeNo); } +public function etnaCampMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEtna(); + else etnaCampMenu(); +} + public function etnaCampMenu():void { spriteSelect(SpriteDb.s_etna); @@ -571,6 +576,16 @@ public function etnaSparsWithPC():void startCombat(new Etna()); } +public function mishapsLunaEtna():void { + clearOutput(); + outputText("You go check on Etna but find her sleeping in broad daylight. She acknowledge you for a second only.\n\n"); + outputText("\"Yawn... Sorry [name] since I found those weird herbs next to my carpet I just feel so drowsy. We will talk again later okay?\"\n\n"); + outputText("Well, guess you will come back later then, but herbs? Now that you look at them these herbs indeed look like catnip. You remove them from Etna direct environment for now. Still who would actually do this kind of prank?\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 1, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 1, 0, 0, 0); + doNext(playerMenu); +} + } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/EvangelineFollower.as b/classes/classes/Scenes/NPCs/EvangelineFollower.as index 753de6c789..756c7c6b4e 100644 --- a/classes/classes/Scenes/NPCs/EvangelineFollower.as +++ b/classes/classes/Scenes/NPCs/EvangelineFollower.as @@ -703,7 +703,7 @@ private function recivingCraftedSoulGem():void { clearOutput(); outputText("As you check on Evangeline she hands a purplish crystal to you.\n\n"); outputText("\"Here's your soul gem. Please use this responsibly, they are very hard to craft, and quite dangerous.\"\n\n"); - outputText("Acquired Soul Gem"); + outputText("Acquired Soul Gem\n\n"); if (flags[kFLAGS.GARGOYLE_QUEST] == 3) flags[kFLAGS.GARGOYLE_QUEST]++; player.removeStatusEffect(StatusEffects.SoulGemCrafting); inventory.takeItem(useables.SOULGEM, meetEvangeline); diff --git a/classes/classes/Scenes/NPCs/HelFollower.as b/classes/classes/Scenes/NPCs/HelFollower.as index f969c8100d..59a240b163 100644 --- a/classes/classes/Scenes/NPCs/HelFollower.as +++ b/classes/classes/Scenes/NPCs/HelFollower.as @@ -475,7 +475,10 @@ public function angryHelAndIzzyCampHelHereFirst():void { doNext(camp.returnToCampUseOneHour); } - +public function heliaFollowerMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaHel(); + else heliaFollowerMenu(); +} //Introduction -- Followers -> Helia public function heliaFollowerMenu(display:Boolean = true):void { @@ -2429,5 +2432,13 @@ outputText("\n\nYour hand slides across Sophie’s stomach to squeeze one of her menu(); doNext(camp.returnToCampUseOneHour); } + +public function mishapsLunaHel():void { + clearOutput(); + outputText("Helia is currently sleeping on her mats holding a bottle of firewater. You smell the bottle up and find clear sign of soporifics inside. Whoever did this wanted to get rid of her for a few hours. Regardless the result is the same and no matter what you do the lizard girl won’t wake up, might as well try again later.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 3, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 1, 0); + doNext(playerMenu); +} } } diff --git a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as index 4f9fe5bc03..8753264117 100644 --- a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as @@ -346,7 +346,7 @@ private function isabellasAccentCoaching():void { clearOutput(); //Cooldown rejection if(flags[kFLAGS.ISABELLA_ACCENT_TRAINING_COOLDOWN] > 1) { - outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); + outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); //Back to follower menu! doNext(callForFollowerIsabella); return; @@ -983,7 +983,7 @@ public function angryMurble():void { clearOutput(); outputText("You come to Isabella's part of the camp with Marble in tow, supposing now is as good a time as ever to introduce the two. Marble greats Isabella warmly but immediately starts bombarding her with questions about her origin. From her persistence, it seems she is interested in meeting another cow-girl. Though a little overwhelmed, Isabella recovers quickly, explaining her origins and the impurity of her cow-girl nature. Marble is visibly disappointed.\n\n"); - outputText("\"The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); + outputText("The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); flags[kFLAGS.ISABELLA_MURBLE_BLEH] = 2; doNext(playerMenu); } diff --git a/classes/classes/Scenes/NPCs/IsabellaScene.as b/classes/classes/Scenes/NPCs/IsabellaScene.as index a9d2865332..50cbb3947b 100644 --- a/classes/classes/Scenes/NPCs/IsabellaScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaScene.as @@ -258,7 +258,7 @@ public function unwelcomeFightCowGal():void { public function fightIsabella():void { clearOutput(); if(!isabellaFollower()) isabellaFollowerScene.isabellaAffection(-5); - outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); + outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); startCombat(new Isabella()); flags[kFLAGS.ISABELLA_ANGRY_AT_PC_COUNTER] += 72; spriteSelect(31); diff --git a/classes/classes/Scenes/NPCs/IzmaScene.as b/classes/classes/Scenes/NPCs/IzmaScene.as index 30dfbd9e67..95648750a7 100644 --- a/classes/classes/Scenes/NPCs/IzmaScene.as +++ b/classes/classes/Scenes/NPCs/IzmaScene.as @@ -1654,6 +1654,11 @@ private function submitToLakeIzma():void { doNext(camp.returnToCampUseOneHour); } +public function izmaFollowerMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaIzma(); + else izmaFollowerMenu(); +} + //9999 CAMP FOLLOWER // tion camp //[Follower options] @@ -3582,5 +3587,14 @@ private function izmaValeriaToggle():void { addButton(4,"Back",izmaValeriaSubmenu); } +public function mishapsLunaIzma():void { + clearOutput(); + outputText("You pass by Izma’s spot and to your surprise, the smell of fish assaults your nose. For some weird reason, the entire area around Izma bedroll now smells of fish and, heck, it smells so much you decide to keep your distance until it’s gone.\n\n"); + outputText("Perhaps someone dropped fish oil around here, but who?\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 4, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 0, 1); + doNext(playerMenu); +} + } } diff --git a/classes/classes/Scenes/NPCs/JojoScene.as b/classes/classes/Scenes/NPCs/JojoScene.as index 49692b445b..69547dd6cf 100644 --- a/classes/classes/Scenes/NPCs/JojoScene.as +++ b/classes/classes/Scenes/NPCs/JojoScene.as @@ -2440,6 +2440,11 @@ public function refuseOfferOfHelp():void jojoCampMenu(); } +public function jojoCamp2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaJojo(); + else jojoCamp(); +} + public function jojoCamp():void { clearOutput(); jojoSprite(); @@ -3307,6 +3312,13 @@ private function suckJojosCock():void { doNext(camp.returnToCampUseOneHour); } +public function mishapsLunaJojo():void { + clearOutput(); + outputText("Jojo is looking at the ground in front of his training area in annoyance. Seems someone has drawn an ugly imp in the dirt using red paint and the imp happens to be jerking a 10 foot long cock. You spot Luna in the distance, cleaning the area with a smile. Surely it couldn’t have been her.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 2, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 1, 0, 0); + doNext(playerMenu); +} } } diff --git a/classes/classes/Scenes/NPCs/JoyScene.as b/classes/classes/Scenes/NPCs/JoyScene.as index c3dd4f52d6..ec6e52bf8e 100644 --- a/classes/classes/Scenes/NPCs/JoyScene.as +++ b/classes/classes/Scenes/NPCs/JoyScene.as @@ -581,7 +581,7 @@ import classes.lists.Gender; outputText("...Well, you're not really anything. And it's not really a lot of fun... can't you turn into a boy or a girl?"); } //Corruption and perk check - outputText("\n\nNext, Joy closes her eyes and focuses on your aura."); + outputText("\"\n\nNext, Joy closes her eyes and focuses on your aura."); if (player.cor < 5) { //Pure outputText("\n\n\"Your aura's, like, super shiny white - I can't remember seeing anyone as clean and pretty as you!\""); } @@ -1186,7 +1186,7 @@ import classes.lists.Gender; outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this will make my funstick bigger. Are you sure you want that [name]?\""); } else { - outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); + outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); } doYesNo(giveJoyAnIncubiDraftForReal, dontGiveJoyAnIncubiDraft); } diff --git a/classes/classes/Scenes/NPCs/KihaFollower.as b/classes/classes/Scenes/NPCs/KihaFollower.as index 7cc966cb47..eb7014af40 100644 --- a/classes/classes/Scenes/NPCs/KihaFollower.as +++ b/classes/classes/Scenes/NPCs/KihaFollower.as @@ -413,11 +413,8 @@ internal function winSparWithKiha():void { outputText("[pg]\"W-what are you doing!?\" she starts, pushing away. \"You - you dumbass!\" Face as red as her scales, she storms off to the other side of camp."); outputText("[pg]You sigh and head back towards your stuff."); kihaAffection(20); - /*if(flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - }*/ } + lvlUpCheckup(); cleanupAfterCombat(); } //Spar with Friendly Kiha - Kiha Wins (Z) @@ -1853,54 +1850,7 @@ internal function pcLosesDomFight():void { //[PC wins the fight] internal function pcWinsDomFight():void { clearOutput(); - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 2; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 3; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 4; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 5; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 6; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 7; - } - } + lvlUpCheckup(); outputText(images.showImage("kiha-dom-win")); spriteSelect(72); var x:Number = player.cockThatFits(67); @@ -2085,6 +2035,57 @@ private function guardMyCampKiha():void { addButton(0,"Next",warmLoverKihaIntro); } +private function lvlUpCheckup():void { + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 2; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 3; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 4; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 5; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 6; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 7; + } + } +} + private function giveKihaUndergarmentsPrompt():void { clearOutput(); outputText("You ask Kiha if she's willing to wear something to cover that nether regions of hers. She could use a bit of modesty after all. "); diff --git a/classes/classes/Scenes/NPCs/KihaScene.as b/classes/classes/Scenes/NPCs/KihaScene.as index 8b76e7d794..d138799d56 100644 --- a/classes/classes/Scenes/NPCs/KihaScene.as +++ b/classes/classes/Scenes/NPCs/KihaScene.as @@ -21,7 +21,12 @@ public class KihaScene extends NPCAwareContent { //const PC_WIN_LAST_KIHA_FIGHT:int = 345; //const KIHA_CHOKED_OUT_PC:int = 432; -//Encounter Dragon-Gal +//Encounter Dragon-Gal +public function encounterKiha2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaKiha(); + else encounterKiha(); +} + public function encounterKiha():void { var temp:Function; clearOutput(); @@ -901,5 +906,17 @@ private function analRapuzulaKiha():void { flags[kFLAGS.GOTTEN_INQUISITOR_ARMOR] = 2; inventory.takeItem(weaponsrange.I_TOME_, camp.returnToCampUseOneHour); } + + public function mishapsLunaKiha():void { + clearOutput(); + outputText("As you walk up to Kiha, you notice the dragon girl appears to be having a tantrum.\n\n"); + outputText("\"[name], are you the asshole that left all that burnt meat right next to my sleep area? What's the message behind this, you don’t like my cooking?!\"\n\n"); + outputText("You swear it's not you. Besides, you don’t hunt for food, so where would you even find the meat?\n\n"); + outputText("\"Umph! Whatever. Come back later, doofus, I need to clean up this mess!\"\n\n"); + outputText("You walk away and notice Luna in the distance cooking today’s meal with a satisfied smile.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 3, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 1, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/LatexGirl.as b/classes/classes/Scenes/NPCs/LatexGirl.as index 930730e237..3859ca1e85 100644 --- a/classes/classes/Scenes/NPCs/LatexGirl.as +++ b/classes/classes/Scenes/NPCs/LatexGirl.as @@ -645,7 +645,7 @@ private function changeGooDick():void { else outputText("I want you to order me to shift it often. "); outputText("Changing myself further, twisting my body into a sexual playground for you... that would be the ultimate thrill!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"I'll need something masculine if you want me to grow a cock, [Master]. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She shudders and closes her eyes, imagining herself with a rigid equine pole. Your goo must have a bit of a fetish."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was."); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was.\""); } //High Happiness + Whatever Obedience(F) else if(gooHappiness() >= 70) { @@ -654,7 +654,7 @@ private function changeGooDick():void { else outputText("she'd like to change what kind of dick she has."); outputText(" She beams and titters, \"Omigod, I loved growing penises back before I changed! It was so much fun to see how surprised it would make people and to make new shapes to see how they'd feel. Let's do it!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I'll need something masculine if you want me to grow a cock. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She smiles wickedly."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was."); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was.\""); } //Low Obedience(F) else { diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index aea648bbe2..1ecdc4fd2b 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -8,6 +8,7 @@ package classes.Scenes.NPCs import classes.BodyParts.Butt; import classes.BodyParts.Hips; import classes.Scenes.SceneLib; + import classes.GlobalFlags.kFLAGS; import classes.internals.*; use namespace CoC; @@ -51,12 +52,14 @@ package classes.Scenes.NPCs override public function defeated(hpVictory:Boolean):void { - SceneLib.lunaFollower.fullMoonEventResistWin(); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaWon(); + else SceneLib.lunaFollower.fullMoonEventResistWin(); } override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void { - SceneLib.lunaFollower.fullMoonEventResistDefat(); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaLost(); + else SceneLib.lunaFollower.fullMoonEventResistDefeat(); } public function Luna() @@ -77,23 +80,52 @@ package classes.Scenes.NPCs this.skin.growFur({color:"ashen"}); this.hairColor = "ashen"; this.hairLength = 8; - initStrTouSpeInte(40, 60, 40, 50); - initWisLibSensCor(50, 80, 40, 75); + if (flags[kFLAGS.LUNA_LVL_UP] == 0) { + initStrTouSpeInte(30, 90, 40, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 800; + this.level = 9; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 1) { + initStrTouSpeInte(30, 95, 45, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 800; + this.level = 15; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 2) { + initStrTouSpeInte(35, 100, 50, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 850; + this.level = 21; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 3) { + initStrTouSpeInte(35, 100, 55, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 900; + this.level = 27; + } this.weaponName = "paws"; this.weaponVerb="paw-slash"; - this.weaponAttack = 37; this.armorName = "fur"; - this.armorDef = 2000; - this.bonusHP = 800; this.bonusLust = 10; this.lust = 10; this.lustVuln = 0; this.temperment = TEMPERMENT_LUSTY_GRAPPLES; - this.level = 10; this.gems = 5 + rand(5); this.drop = NO_DROP; this.createPerk(PerkLib.MonsterRegeneration, 5, 0, 0, 0); this.createPerk(PerkLib.EnemyBeastOrAnimalMorphType, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 1) this.createPerk(PerkLib.RefinedBodyI, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 2) this.createPerk(PerkLib.TankI, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 3) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index de93b53e4d..6fd9624784 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -29,7 +29,7 @@ package classes.Scenes.NPCs { } - //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted + //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted (PC no WW), 13,14 - unchained post moon accepted and talked about lycantrophy (PC no WW), 15,16 - unchained post moon accepted (PC WW) public function lunaAffection(changes:Number = 0):Number { @@ -121,7 +121,10 @@ package classes.Scenes.NPCs if (flags[kFLAGS.SLEEP_WITH] != "Luna") addButton(5, "Sleep With", lunaSleepToggle); else addButton(5, "Sleep Alone", lunaSleepToggle); } - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(6, "Sex", sexMenuMain); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { + if (flags[kFLAGS.CAMP_UPGRADES_SPARING_RING] >= 2) addButton(2, "Spar", sparLuna); + addButton(6, "Sex", sexMenuMain); + } if (flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 10) addButton(7, "Unchain", lunaChainToggle).hint("Unchain Luna and see what happens."); if (flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 8) addButton(7, "Chain", lunaChainToggle).hint("Chain Luna."); addButton(14, "Leave", camp.campFollowers); @@ -153,6 +156,7 @@ package classes.Scenes.NPCs addButton(3, "Camp", talkMenuLunaCampThoughts); if (flags[kFLAGS.LUNA_FOLLOWER] > 6) addButton(4, "Lycanthropy", talkMenuLunaLycanthropy); else addButtonDisabled(4, "???", "You need to know her better for this."); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 14) && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); addButton(14, "Back", mainLunaMenu); } public function talkMenuLunaHer():void { @@ -210,10 +214,117 @@ package classes.Scenes.NPCs outputText("\"Well, my hormonal system is totally messed up as the lunar cycle causes me to go into heat.The closer we lycanthropes get to the full moon, the hornier we get, until we all turn into sex crazed beasts willing to go so far as to rape innocent people for a good fuck. That said, sex is not all there is to it. We are all gifted with the ability to change form at will, and I know for a fact that we’re also faster, "); outputText("stronger, and sturdier than any normal morph or human. There is no known permanent cure to lycanthropy. The truth is that, while I could change into something different using transformatives, I think that so long as whatever I transform into is an animal I would still go mad during a full moon. Even worse, my bite can turn about anyone into a lycanthrope the same as me.\"\n\n"); outputText("Guess she really is more than just a cute pup.\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 13; + else flags[kFLAGS.LUNA_FOLLOWER] = 14; lunaJealousy(-50); lunaAffection(2); doNext(camp.returnToCampUseOneHour); } + public function talkMenuBiteMe():void { + clearOutput(); + outputText("It occurs to you that you could gain the same kind of powers as Luna if you asked her. That said, is that what you truly want?\n\n"); + menu(); + addButton(0, "Yes", talkMenuBiteMeYes); + addButton(1, "No", talkMenuLuna); + } + public function talkMenuBiteMeYes():void { + outputText("You ask Luna the one thing she likely never expected, would she mind biting you? Luna almost panics the moment you request it, though she also blushes.\n\n"); + outputText("\"" + player.mf("Master","Mistress") + " I...This is a very important choice you are making here, did you truly think it through? I mean once you are cursed there's no removing it, you will truly be just like me.\"\n\n"); + outputText("You don’t mind it, truthfully if this can tie the both of you together better, you will do it all the more. Luna nods and undresses as she changes shape. You hold your arm before her and she lose all form of restraint biting you with just the required strength to draw blood. At first it hurts like crazy but then the pain recedes, replaced with spreading pleasure as the wounds begin to throb. "); + outputText("Your" + (player.hasCock() ? " [cock] goes fully erect" : "") + "" + (player.gender == 3 ? " and your" : "") + "" + (player.hasVagina() ? " pussy starts moistening" : "") + " from this weird feeling, something's not right.\n\n"); + outputText("" + (player.humanScore() < 30 ? "Your body starts changing, and to your surprise, its features warp back to their former human features. You begin to think she may have purged you of the transformations that afflicted you, but that's not exactly it. " : "") + "Heat begins to spread from your wound and you start panting, trying to vent out the pleasure and the hot feeling in your body as something fundamental about you changes.\n\n"); + outputText("Fur begins to grow on various point of your body, namely your arms and legs. Your nails sharpen and curve, turning into a full set of claws as your hands and feet reshape into 5 digit paws. You groan in pleasure, revealing your forming canines as your spine extends into a furry tail while your ears migrate to the top of your head, covering in fur and changing into triangular points like those of a wolf. You pant in pleasure at the change, revealing a moist dog like tongue"); + if (player.hasCock()) outputText(" as you feel a tightness near the base of your cock where your skin seems to be bunching up. A canine-looking sheath begins forming around your cock’s base, tightening and pulling your penis inside its depths. A hot feeling envelops your member as it surges out and starts throbbing, the crown now a point. The sensations are too much for you. You throw back your head and howl as the transformation completes, your pointed shaft erupting with intense force"); + outputText(".\n\n"); + player.lowerBody = LowerBody.WOLF; + if (player.legCount != 2) player.legCount = 2; + player.tailType = Tail.WOLF; + if (player.tailCount != 1) player.tailCount = 1; + player.rearBody.type = RearBody.WOLF_COLLAR; + player.arms.type = Arms.WOLF; + player.faceType = Face.WOLF_FANGS; + player.ears.type = Ears.WOLF; + player.eyes.type = Eyes.FERAL; + player.tongue.type = Tongue.DOG; + player.wings.type = Wings.NONE; + player.antennae.type = Antennae.NONE; + player.horns.type = Horns.NONE; + player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); + if (player.hasCock() && player.wolfCocks() < 1) { + var selectedCockValue:int = -1; + for (var indexI:int = 0; indexI < player.cocks.length; indexI++) + { + if (player.cocks[indexI].cockType != CockTypesEnum.WOLF) + { + selectedCockValue = indexI; + break; + } + } + if (selectedCockValue != -1) { + player.cocks[selectedCockValue].cockType = CockTypesEnum.WOLF; + player.cocks[selectedCockValue].knotMultiplier = 1.1; + player.cocks[selectedCockValue].thickenCock(2); + } + } + var bonusStats:Number = 0; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; + player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); + player.dynStats("str", (bonusStats * player.newGamePlusMod()), "tou", (bonusStats * player.newGamePlusMod()), "spe", (bonusStats * player.newGamePlusMod()), "cor", 20); + statScreenRefresh(); + outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); + doNext(sexMenuDominateHer); + } + + public function sparLuna():void { + clearOutput(); + outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); + outputText("\"" + player.mf("Master", "Mistress") + ", we both know it is best not to awaken my instincts during the day. I am a pitiful woman.\"\n\n"); + outputText("Well it's exactly because she is both strong and dangerous that you need her help to become so yourself.\n\n"); + outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); + outputText("You both head to the ring and get ready for a brawl. She removes her dress and gets stark naked before you " + (camp.companionsCount() >= 2 ? "to the consternation of everyone who’s looking, " : "") + "before starting to pant as she changes shape. You recognise the green glow of crazed desire in her eyes now and almost regret your choice. Losing to her will likely result into you both having sex whether you like it or not.\n\n"); + startCombat(new Luna()); + } + public function sparLunaWon():void { + clearOutput(); + outputText("Luna sit down like a good well behaved dog to admit defeat.\n\n"); + outputText("\"I yield " + player.mf("Master", "Mistress") + ". You win this one. I hope this warm up was worth your time.\"\n\n"); + outputText("You thank Luna for helping you with your training and give her freedom to resume duty which she gladly do.\n\n"); + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.LUNA_DEFEATS_COUNTER]++; + else flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 1; + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 2 && flags[kFLAGS.LUNA_LVL_UP] == 0) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 12); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 12, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 1; + } + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 3 && flags[kFLAGS.LUNA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 18, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 2; + } + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.LUNA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 24, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 3; + } + } + cleanupAfterCombat(); + doNext(camp.returnToCampUseOneHour); + } + public function sparLunaLost():void { + clearOutput(); + outputText("Luna pounces on you with a hungry growl. Guess you had it coming when you asked her to spar you.\n\n"); + outputText("\"You lost " + player.mf("Master", "Mistress") + ", therefore I’m entitled to do whatever I want with you. Well I don’t care what it is as long as we do it now.\"\n\n"); + monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); + cleanupAfterCombat(); + doNext(sexMenuDominateHer); + } public function mealLuna():void { clearOutput(); @@ -248,10 +359,10 @@ package classes.Scenes.NPCs lunaAffection(5); HPChange(Math.round(player.maxHP() * .5), true); if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - outputText(" Luna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); + outputText("\nLuna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); menu(); - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(0, "Yes", sexMenuMain); - addButton(0, "No", nurseLunaEnd); + addButton(0, "Yes", sexMenuMain); + addButton(1, "No", nurseLunaEnd); } else doNext(camp.returnToCampUseFourHours); } @@ -306,7 +417,9 @@ package classes.Scenes.NPCs if (flags[kFLAGS.LUNA_FOLLOWER] == 5) flags[kFLAGS.LUNA_FOLLOWER] = 6; else if (flags[kFLAGS.LUNA_FOLLOWER] == 7) flags[kFLAGS.LUNA_FOLLOWER] = 8; else if (flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 10; - else flags[kFLAGS.LUNA_FOLLOWER] = 12; + else if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 12; + else if (flags[kFLAGS.LUNA_FOLLOWER] == 13) flags[kFLAGS.LUNA_FOLLOWER] = 14; + else flags[kFLAGS.LUNA_FOLLOWER] = 16; outputText("Luna come over to you.\n\n"); outputText("\"" + player.mf("Master","Mistress") + " you haven’t been using my services in some time. I came to remind you that should you need anything, and by that I truly mean anything you desire, all you need to do is call me. It is always my greatest pleasure to serve you.\"\n\n"); outputText("She walk away to prepare today's food and clean which reminds you that you indeed hadn’t had her food in a while.\n\n"); @@ -342,6 +455,8 @@ package classes.Scenes.NPCs outputText("Well of course. Had she made her needs clear in the first place you would have helped her with them. There was no need for her to hide her desires. That aside, you already thought of her as more than just a maid. You just didn’t know how to tell her. You don’t care if she thinks she is a monster. From your point of view, even in this form she remains cute. To her utter surprise you"); if (!player.isNaked()) outputText(" get rid of your own clothes and"); outputText(" display your naked body, telling her she will get exactly what she wants.\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 11; + if (flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10) flags[kFLAGS.LUNA_FOLLOWER] = 12; flags[kFLAGS.LUNA_MOONING] = 2; doNext(sexMenuVaginal); } @@ -395,7 +510,7 @@ package classes.Scenes.NPCs CoC.instance.timeQ += 6; doNext(camp.sleepWrapper); } - public function fullMoonEventResistDefat():void { + public function fullMoonEventResistDefeat():void { clearOutput(); outputText("You are too weak to keep fighting and Luna senses it. Before you can react she pounces on you. You’re back to the position you were in earlier and this time you are in no way capable of putting up a fight.\n\n"); outputText("\"It's ok, [name], the pain will only last for a few seconds and then...\"\n\n"); @@ -417,7 +532,7 @@ package classes.Scenes.NPCs player.wings.type = Wings.NONE; player.antennae.type = Antennae.NONE; player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, Skin.COVERAGE_MEDIUM); + player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); if (player.hasCock() && player.wolfCocks() < 1) { var selectedCockValue:int = -1; for (var indexI:int = 0; indexI < player.cocks.length; indexI++) @@ -434,8 +549,9 @@ package classes.Scenes.NPCs player.cocks[selectedCockValue].thickenCock(2); } } + player.createPerk(PerkLib.Lycanthropy,40,0,0,0); player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + statScreenRefresh(); outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); cleanupAfterCombat(); @@ -458,8 +574,8 @@ package classes.Scenes.NPCs else addButtonDisabled(6, "???", "Req. Ayane in camp and 100 affection."); } } - if (player.cor < 33) addButton(10, "Headpat", sexMenuHeadpat); - else addButtonDisabled(10, "Headpat", "You're too corrupted for that!"); + if (player.cor >= 30) addButton(10, "Headpat", sexMenuHeadpat); + else addButtonDisabled(10, "Headpat", "You're too pure for that!"); addButton(14, "Back", mainLunaMenu); } public function sexMenuHeadpat():void { @@ -510,7 +626,6 @@ package classes.Scenes.NPCs lunaJealousy(-50); lunaAffection(2); player.orgasm(); - if (flags[kFLAGS.LUNA_FOLLOWER] < 7) flags[kFLAGS.LUNA_FOLLOWER] = 11; if (flags[kFLAGS.LUNA_MOONING] == 2) { flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -635,7 +750,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 11; + flags[kFLAGS.LUNA_FOLLOWER] = 15; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -664,7 +779,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 11; + flags[kFLAGS.LUNA_FOLLOWER] = 15; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; diff --git a/classes/classes/Scenes/NPCs/Rathazul.as b/classes/classes/Scenes/NPCs/Rathazul.as index c4e6c9c64c..6452220460 100644 --- a/classes/classes/Scenes/NPCs/Rathazul.as +++ b/classes/classes/Scenes/NPCs/Rathazul.as @@ -863,7 +863,7 @@ private function growLethiciteDefenseYesYesYes():void { private function growLethiciteDefenseGuessNot():void { spriteSelect(49); clearOutput(); - outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power."); + outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power.\""); doNext(returnToRathazulMenu); } diff --git a/classes/classes/Scenes/NPCs/ShouldraFollower.as b/classes/classes/Scenes/NPCs/ShouldraFollower.as index eb90436416..bf8059132a 100644 --- a/classes/classes/Scenes/NPCs/ShouldraFollower.as +++ b/classes/classes/Scenes/NPCs/ShouldraFollower.as @@ -1950,7 +1950,7 @@ private function goAlongWIthShouldrasEatingSpree():void { outputText("\n\nYou struggle forward in your seat and resume grazing on a stack of donuts, though you are hindered somewhat by both the ghost girl's pussy worship and your cramped stomach. The bloated orb has by now pushed your shirt up around your [fullChest] and left your skirt in tatters; it rests between your thighs, your legs having been forced to part under its growing weight. An ominous gurgle erupts from your overtaxed gut; perhaps you've overestimated yourself? You massage the complaining flesh with one hand to ease the pressure while continuing to sate your insatiable appetite with the other, heavenly gouts of angel cake dropping into your abyss of a stomach. Shouldra smiles as the churning and gurgling continues; her fucksucking lips slip off your drooling pussy-flesh and ascend, trailing supersized kisses across your crotch and up to your navel. She nuzzles your bloated belly like a pillow, her hands digging gently into the flesh and kneading with equal parts care and roughness. Your free hand stops massaging and cradles her head, and in a moment of impishness you shove a slice of something gooey and triple-layered into her unsuspecting candied maw. She swallows, surprise turning quickly to a grin of friendly vengeance. \"So that's how we're playing it, big girl?\" Shouldra snickers, before giving your sensitive stomach a hearty slap."); outputText("\n\nYou wince slightly before returning a sloppy food-filled grin... Wait. You're not feeding yourself. What the fuck? The ghost girl answers your confusion with a profiterole that soars into your slack mouth. Damned ghoul, that's just playing dirty! You both devolve into a fierce stuffing contest; your desperate hands snag anything they can from the spread and cram them into the ghost's gullet, while waves of pastries ram themselves into your own defenseless mouth. The combination of the adrenaline-fueled force-feeding frenzy and the increasing pressure of your swelling gut on your button forms a familiar sensation; prickling loins, skipped heartbeats, an intense heat in your flushed cheeks. As you feel the giddy euphoria of an oncoming food coma, Shouldra seizes the moment and dives down into your crotch, lapping and licking every oh-so-sensitive inch she can, teasing and tickling, probing your wet cunt with her jellied tongue."); outputText("\n\nA guttural moan escapes your icing-caked lips as you sink into a creamy smooth orgasm, like sliding into a hot bath. [if (isSquiter = true) \"Hot streams of liquid lust spurt across Maddie's face, drizzling her with your copious fem-spunk. \"][if (isLactating = true) \"Droplets of milk form on your [nipples], soon forming rivers of cream that cascade down your fiery-hot flesh. \"]After a moment of rest, Shouldra squeezes out from under the table, licking your girl-cum from her lips with a satisfied slurp, and helps you to your feet; a task made seriously annoying by your titanic tummy digging in to the edge of the counter. The other patrons remain blissfully unaware of the whole act, including your current nudity. Speaking of which..."); - outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!"); + outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!\""); outputText("\n\nYou leave the bakery and head back to camp, leaving behind a very confused Maddie."); player.orgasm(); doNext(camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/NPCs/SophieFollowerScene.as b/classes/classes/Scenes/NPCs/SophieFollowerScene.as index f95017ba29..19a75beddd 100644 --- a/classes/classes/Scenes/NPCs/SophieFollowerScene.as +++ b/classes/classes/Scenes/NPCs/SophieFollowerScene.as @@ -1092,9 +1092,9 @@ internal function sophieIncestInHerCooterOrSomethingIDunno():void { outputText("\n\nUnable to resist the feeling of her achingly hard nipples being pressed against you so tightly, you reach out for your daughter's big, creamy udders and grab her hard nipples. You pull your stacked daughter's sensitive buds before you pinch and squeeze them. Not quite done with her, you let go of her nipples, letting your hands sink into the supple flesh of her enormous breasts before grabbing them harder, starting to knead and massage the soft, pliant jugs. The rough and passionate touching of her body only seems to excite and arouse your firstborn further. She's clearly enjoying the groping and teasing of her sensitive breasts, and you draw needy, birdlike coos and cries from her pouty lips. "); - if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); + if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); //[normal speech: - else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); + else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); } //second daughter: else if(daughterCap == 1) { diff --git a/classes/classes/Scenes/NPCs/Urta.as b/classes/classes/Scenes/NPCs/Urta.as index fb96c5da07..1f043b9be6 100644 --- a/classes/classes/Scenes/NPCs/Urta.as +++ b/classes/classes/Scenes/NPCs/Urta.as @@ -2604,7 +2604,7 @@ private function tellUrtaNoMoreScylla():void { flags[kFLAGS.UNKNOWN_FLAG_NUMBER_00147] = 1; outputText("You let Urta know that you're willing to overlook this, but that Scylla is a slippery slope that's best avoided. She nods, a sober expression on her vulpine face. Once you finish, she replies, \"I understand, but you need to know – when 'it' gets too much for me to handle... if you aren't around to help I'm going to see Edryn. S-she helps... if it wasn't for her I probably would've given up and done something stupid a long time ago. What we have is more important, but unless we can get together every couple days I'll NEED to visit her. "); if(urtaLove()) outputText("Just please, don't doubt my love for you. "); - outputText("Do I need to stop drinking too?"); + outputText("Do I need to stop drinking too?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } @@ -2615,7 +2615,7 @@ private function tellUrtaMoreScyllaIsFine():void { outputText("You give Urta a raunchy, lewd smile and let her know that you're okay with her 'helping' Scylla, and vice-versa, so long as they don't mind you popping in. She smiles and gives you a wink, but her expression darkens after a moment of thought. Urta interrupts to mention, \"There's something else. If I can't find you or Scylla and I NEED to cum, I'll have to visit Edryn. She's probably the only thing that's kept me sane, and if you aren't around to help with my needs I'll visit her. "); if(urtaLove()) outputText("Just remember that YOU'RE the one I love, not her. "); else outputText("Me and her, we've been partners in the guard for a long time, but the sex is just mechanical, to sate us. You don't have to worry about her stealing me away. "); - outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); + outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index 57cda75a63..549cf0653f 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -232,6 +232,7 @@ public class HeXinDao extends BaseContent addButton(1, "DryTent", buyItem,consumables.DRYTENT,sayLine(consumables.DRYTENT,"anemone"),onBuyString).hint("Buy a shriveled tentacle."); addButton(2, "EctoPls", buyItem,consumables.ECTOPLS,sayLine(consumables.ECTOPLS,"ghost"),onBuyString).hint("Buy a bottle of ectoplasm."); addButton(3, "TrapOil", buyItem,consumables.TRAPOIL,sayLine(consumables.TRAPOIL,"sand trap"),onBuyString).hint("Buy a vial of trap oil."); + addButton(4, "Icicle", buyItem,consumables.ICICLE_,sayLine(consumables.ICICLE_,"ice shard"),onBuyString).hint("Buy an icicle."); addButton(14, "Back", mogahenmerchant); statScreenRefresh(); } @@ -484,7 +485,7 @@ public function soularena():void { outputText("Picking the one in the middle prepared for challanges you enter there and looking around checking who if there is currently anyone up for a challange."); menu(); addButton(0, "Gaunlet 1", gaunletchallange1fight1).hint("Fight 3 diff enemies one after another."); - //if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); + if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); //addButton(2, "Gaunlet 3", gaunletchallange3).hint("Fight 5 diff enemies one after another."); //addButton(3, "Gaunlet 4", gaunletchallange4).hint("Fight 6 diff enemies one after another."); //addButton(4, "Gaunlet 5", gaunletchallange5).hint("Fight 7 diff enemies one after another."); @@ -506,6 +507,11 @@ public function soularena():void { monster.createStatusEffect(StatusEffects.NoLoot, 0, 0, 0, 0); monster.XP = Math.round(monster.XP / 2); } + public function gaunletsinbetween():void { + cleanupAfterCombat(); + player.createStatusEffect(StatusEffects.SoulArena, 0, 0, 0, 0); + player.createStatusEffect(StatusEffects.SoulArenaGaunlet, 0, 0, 0, 0); + } public function gaunletchallange1fight1():void { clearOutput(); outputText("You register for the gauntlet challenge then when called, move out beyond the arena gate to face your opponent. The crowd is big, you sure will have quite the audience. A man with a necktie and a weird stick screams across the area.\n\n"); @@ -520,14 +526,16 @@ public function soularena():void { } public function gaunletchallange1fight2():void { clearOutput(); - outputText("As the last of the golem falls down, the commentator resumes.\n\n"); + gaunletsinbetween(); + outputText("As the last of the golem falls down, the commentator resumes.\n\n"); outputText("\"This one is straight from the woods. Freshly caught and horny to boot. Can our champion’s strength overcome the beast’s lust? LET'S FIND OUT!!\"\n\n"); outputText("A shadow moves out behind the gate, revealing the shape of a fluid starved tentacle beast.\n\n"); startCombat(new TentacleBeast()); } public function gaunletchallange1fight3():void { clearOutput(); - outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); + gaunletsinbetween(); + outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); outputText("\"This contestant is smaller than the last two... Smarter too, and most of all extremely deadly. She’s paid a handsome sack of gems daily to kick the ass of anyone who reach this stage, yet is by far the deadliest combatant of her division. She’s your favorite and an expert huntress. Here she comes... Merisiel the dark elf!!!\"\n\n"); outputText("A woman with dark skin walks by the entrance of the arena with only a bow for a weapon. She sure does look like an elf, however. She’s nothing like the gentle creature from your childhood stories as she observes you with a cruel, calculative gaze. The dark elf readies her bow, smirking.\n\n"); startCombat(new DarkElfScout()); @@ -559,6 +567,7 @@ public function soularena():void { } public function gaunletchallange2fight2():void { clearOutput(); + gaunletsinbetween(); outputText("As the goblin falls unconscious to the ground the crowd cheer for you.\n\n"); outputText("\"It would seems the hero squashed that midget good but were only beginning. If I may the next contestant has been sex starved for two consecutive month and is desperate to sow his seed hence now we release... THE HOUND!!!\"\n\n"); outputText("A massive hellhound of proportion larger than normal rush out of an opening gate. Its eye burns with lust.\n\n"); @@ -566,27 +575,36 @@ public function soularena():void { } public function gaunletchallange2fight3():void { clearOutput(); - outputText("Placeholder.\n\n"); - outputText("Placeholder.\n\n"); + gaunletsinbetween(); + outputText("The mutt fall defeated to the floor as the crowd scream your name. The announcer announce the next contestant.\n\n"); + outputText("\"The next opponent is a fighter known and loved by the public. You have heard her name told in shallow whispers for the next opponent is an expert of the terrible art known as BDSM. Yes you have all been waiting for her so cheer up for Malady the drider!!!\"\n\n"); + outputText("A drider in bondage suit comes out of the gate and eyes you amused.\n\n"); + outputText("\"You are my opponent uh? Doesn’t look like much. Little pet, by the time I’m done binding you, you will seldom call me mistress!\"\n\n"); startCombat(new CorruptedDrider()); } public function gaunletchallange2fight4():void { clearOutput(); - outputText("Placeholder.\n\n"); + gaunletsinbetween(); + outputText("As the drider falls defeated the crowd cheer to your victory. That said the battle is far from over yet. A large amount of shadows mass behind the opposite gate and already you can guess what's coming up for you.\n\n"); + outputText("\"The final contestant is both a new opponent and a test! The town golemancer has been working extra shifts on these thing she calls her babies!! Using the traditional gargoyle model but deprived of soul so for the purpose of mass production these living weapons will mercilessly beat the hell out of the contestant. Who do you think will win the living or the artificial creation? LEEEEETS FIND OUT!!!!!!\"\n\n"); + outputText("A full squad of stone gargoyle pour out of the gate their mace like tail trailing in the sands. Their claws are sharp and their soulless gaze tells you it will end poorly should you lose.\n\n"); startCombat(new BossGolems()); } public function gaunletchallange2postfight():void { clearOutput(); - outputText("Placeholder.\n\n"); + outputText("The last gargoyle crumble to rubble and you hold its head up toward the public in victory.\n\n"); + outputText("\"The challenger defeated all of his opponent what a miracle! Challenger you may now exit the arena and claim your prize, well done!\"\n\n"); + outputText("You make your way toward the exit and to your surprise meet face to face with the town golemancer. She grudgingly handle you your reward.\n\n"); + outputText("\"I’m supposed to reward you "); if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] >= 2) { - outputText("\"Good show, champion. As a reward for your performance, please accept these 20 spirit stones. Please do come back again and maybe next time you could even try the harder challenge.\"\n\n"); + outputText("a full chest of soulstone. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); flags[kFLAGS.SPIRIT_STONES] += 20; cleanupAfterCombat(); } else { - outputText("Placeholder.\n\n"); + outputText("with this scepter. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] = 2; - inventory.takeItem(weaponsrange.BOWGUID, cleanupAfterCombat); + inventory.takeItem(weapons.SCECOMM, cleanupAfterCombat); } } public function restaurantShiraOfTheEast():void { diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index d6c72c2252..4796f32ff3 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -7,6 +7,7 @@ package classes.Scenes.Places.HeXinDao import classes.*; import classes.GlobalFlags.kFLAGS; import classes.Scenes.SceneLib; + import classes.BodyParts.Tail; public class JourneyToTheEast extends HeXinDaoAbstractContent { @@ -19,6 +20,10 @@ package classes.Scenes.Places.HeXinDao outputText("You enter the town local Inn ‘Journey to the East’ and look around. "); } outputText("You can see many people enjoying a meal or drink in the dining hall, a barman standing by ready to serve drinks."); + if (model.time.hours >= 18 && rand(4) == 0) { + ChiChiDrunkSex(); + return; + } menu(); addButton(0, "Drink", drinkAlcohol); //addButton(4, "", );mission giving npc @@ -39,15 +44,17 @@ package classes.Scenes.Places.HeXinDao addButton(2, "NoceLiq", buyDrink, consumables.NOCELIQ); addButton(3, "OniSake", buyDrink, consumables.ONISAKE); addButton(4, "SalamFW", buyDrink, consumables.SALAMFW); + addButton(12, "BimboL", buyDrink, consumables.BIMBOLQ); + addButton(13, "BroBrew", buyDrink, consumables.BROBREW); addButton(14, "Back", notThirsty); } - + //drink list (to be expanded) fire mouse TF, some generic nonTF beers private function notThirsty():void { clearOutput(); outputText("In the end you realise you are not thirsty after all and wave a goodbye before leaving.\n\n"); doNext(curry(enteringInn,false)); } - + private function buyDrink(drink:ItemType):void{ var cost:int = drink.value * 3; if(player.gems < cost){ @@ -60,7 +67,66 @@ package classes.Scenes.Places.HeXinDao outputText("\n\nThe barman hands over the drink you ordered."); inventory.takeItem(drink, drinkAlcohol); } - //drink list (to be expanded) - //MANUP_B, GOB_ALE, NOCELIQ, ONISAKE, SALAMFW, fire mouse TF, some generic nonTF beers + + public function ChiChiDrunkSex():void { + clearOutput(); + outputText("As you enter the bar you hear a feminine laughter swiftly spotting what seems to be "); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] >= 20) outputText("Chi Chi"); + else if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] < 20) outputText("Chi Chi the waitress from the exotic food restaurant"); + else outputText("a blazing mouse girl"); + outputText(" sitting on one of the stool drinking sake.\n\n"); + outputText("\"Yeah, and after I told it I was the top girl here I punched it in the face, Woooooooo!\""); + outputText("The barman sighs, pretending not to notice the drunken mouse, aside for when he has to serve her a new drink. Just as you are about to order something she realises you are there and engages in conversation.\n\n"); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) outputText("\"Gaaaaah, [name], why do you hang around all those girls. Worse why do you fuck with them and not me?! Its like you are a " + player.mf("go go boy","cheap whore") + " selling your body to everyone and thish drives me mad! Yeaaa, I’m going to prove them all I’m the top shlut!\""); + else if (flags[kFLAGS.CHI_CHI_FOLLOWER] == 1) outputText("\"Hey... you’re that so called champ who lost in the arena?! Well I like you. I like you so much I’d want you as my " + player.mf("boy","girl") + "friend but waaaah I’m way too shy to tell you that right! Well don’t go tell [name] I like " + player.mf("him","her") + " got it? Yeah who cares about that! Barman a round for [name] the best person I met woooo. Now let’s have sex!\""); + else outputText("\"Hey you... yesh you, the tall person over there! Think you can fight?! Well I’m pretty sure nobody in this village hash the guts to anyway. If you dare show up in the arena I will beat you to death like I do everyone. Now that I think of it, there are other kinds of battle I can beat people in. Bet you're the kind who fucks every demon you meet. Well not tonight, letsh bang!\""); + outputText("Wait, what? You barely have the time to mutter a reply before the red cheeked mousette pushes you on the nearest table and climbs over you. The barman pulls a curtain around your table, he must be used to this.\n\n"); + outputText("\"Yeshh you heard me you big idiot. I’m going to fuck with you here and now! So don’t you dare try to run away because I will get very mad if you do.\""); + outputText("Do you let her?\n\n"); + menu(); + addButton(0, "Let Her", drunksex,true); + addButton(1, "Refuse", drunksex,false); + } + private function drunksex(selected:Boolean):void { + if (!selected) { + outputText("" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 0 ? "Chi Chi" : "The mouse") + " is clearly out of it. Better stop her now before she does something she will regret later. You shove her to the side and run for the exit of the bar. Hearing her swear in background. Once outside you head back to camp."); + doNext(camp.returnToCampUseOneHour); + } + else { + outputText("You would have to be an idiot indeed to refuse this free fuck. The drunken mouse girl licks her lips in anticipation, grabbing your clothes and begins to removing them one-by-one. Unsurprisingly, her own clothes barely takes a second to remove. She is so close now you can feel her breath on your neck."); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) { + outputText(" The mousette introduces herself.\n\n"); + outputText("\"My name’s Chi Chi by the way, but... oh why does it matter? What's important is that we are about to have a lot of fun.\""); + } + //post marriage + if (player.hasCock()) { + outputText("Chi Chi initiates with a wet but warm kiss; Her tongue dancing tango with yours. While small in stature, she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how her burning tail and fur isn't actually setting everything on fire around her, especially you. You inquire on this matter.\n\n"); + outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\"\n\n"); + outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore, you slowly tease the entrance of her warm canal with your [cock]. If anything, despite being wet you can already feel how hot her oven is from the outside and can’t help but hope you won’t end up burned. Chi Chi however has no such concern and out of impatience starts stroking your dick with her embery tail.\n\n"); + outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\"\n\n"); + outputText("You're surprised by the direct contact with her fiery tail, even more so by the fact that it didn’t leave your dick with a third degree burn. Deciding to give the hot mouse what she wants, you put it in. Her vagina immediately starts milking you as if it was a thirsty mouth seeking water, and the frantic moving of her hips up down doesn’t help it.\n\n"); + outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\"\n\n"); + outputText("Her pussy starts heating even more and before you know it, it actually transfers to you. Wow, your urethra is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, only the cool passage of cum can free you from this heat! You begin to piston in and out of Chi Chi desperate for a cooling release.\n\n"); + outputText("Both desperate for a way to get rid of the heat, the two of you manage to cum together, your jizz filling Chi Chi to the brim before slowly dripping on the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); + outputText("She finally passes out, which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeds to also get the sleeping inferno-mouse out with the help of a bouncer.\n\n"); + } + else { + outputText("Chi Chi initiates with a wet but warm kiss her tongue dancing tango with yours. While small in stature she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how come her burning tail and fur isn't actually setting on fire everything around her starting with you. You inquire on this matter.\n\n"); + outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\"\n\n"); + outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore you begin to grind your pussy lips against hers making her gasp in surprise at your initiative.\n\n"); + outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\"\n\n"); + outputText("Chi Chi begins to grind herself in response, making you both coo. For a drunk she clearly knows what she’s doing, almost like if drunken sex was an expertise of hers. You’re swiftly forced out back to reality as your blazing partner accelerates the tempo, causing you to moan in pleasure. Well now there's no way you going to simply lose this! You get the mouse ears with your hands and start caressing them. Chi Chi has a positive reaction and you are clearly getting to her however "); + outputText("that's counting without her hidden weapon. Her burning tail lashes out like a whip and slides between you, aiming for your cunt. Before you can stop it you already have 15 inch of hot mouse tail in your [pussy] and Chi Chi uses it to fuck your brain out. The fuck isn't all that happens it seems her very heat start to spread on to you. Wow your cunt is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, "); + outputText("only the cool passage of your girl-juices can free you from this heat! Meanwhile she grinds against her own tail bump but you have decided not to let her get off at her own pace. You swiftly slide " + (player.tailType > Tail.NONE ? "your tail" : "a pair of finger") + " in the smoking hot hinezumi cunt and retaliate with a set of rapid movement of your own.\n\n"); + outputText("Both desperate for a way to get rid of the heat and unable to fully outpace her, the two of you still manage to cum together your girl juices melding together and staining the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); + outputText("She finally pass out which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeded to also get the sleeping mouse out with the help of a bouncer.\n\n"); + } + player.orgasm(); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) flags[kFLAGS.CHI_CHI_FOLLOWER] = 1; + doNext(camp.returnToCampUseOneHour); + } + } } } \ No newline at end of file diff --git a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as index a93ffe8377..69fb7e1fbb 100644 --- a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as +++ b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as @@ -387,7 +387,7 @@ package classes.Scenes.Places.Prison break; case 4: default: - outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead. "); + outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead.\" "); if(player.hasVagina()) { outputText("Your gaping pussy has lubricated me well enough to comfortably fuck an entire harem of dry, virgin assholes."); diff --git a/classes/classes/Scenes/Places/TelAdre.as b/classes/classes/Scenes/Places/TelAdre.as index beb760270e..45a6902011 100644 --- a/classes/classes/Scenes/Places/TelAdre.as +++ b/classes/classes/Scenes/Places/TelAdre.as @@ -184,7 +184,7 @@ public function telAdreMenu():void { if (flags[kFLAGS.LUNA_FOLLOWER] < 2 && rand(10) == 0) { if (flags[kFLAGS.LUNA_FOLLOWER] == 1) SceneLib.lunaFollower.meetingLunaRepated(); else SceneLib.lunaFollower.meetingLunaFirstTime(); - return + return; } spriteSelect(-1); outputText(images.showImage("location-teladre")); diff --git a/classes/classes/Scenes/Places/TelAdre/Rubi.as b/classes/classes/Scenes/Places/TelAdre/Rubi.as index 412a8c441d..b8cee7efff 100644 --- a/classes/classes/Scenes/Places/TelAdre/Rubi.as +++ b/classes/classes/Scenes/Places/TelAdre/Rubi.as @@ -2079,7 +2079,7 @@ private function iceCreamDate():void { outputText("\n\nYour parfaits are not infinite, however, and once you've depleted your layered frozen treats it seems it's time to head back. The two of you clasp hands once more and head out of the shop, heading back to Rubi's place in silence, content to be in each other's presence."); - outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); + outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); //[Go to Sex menu] rubiSexMenu(); addButton(14,"Leave",camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/Pregnancy.as b/classes/classes/Scenes/Pregnancy.as index e2e8a8cea8..71347044c1 100644 --- a/classes/classes/Scenes/Pregnancy.as +++ b/classes/classes/Scenes/Pregnancy.as @@ -1798,7 +1798,7 @@ public class Pregnancy extends NPCAwareContent { if (flags[kFLAGS.MARBLE_BOYS] == 0) //has Marble had male kids before? { - EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me."); + EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me.\""); } //Add to marble-kids: flags[kFLAGS.MARBLE_KIDS]++; diff --git a/classes/classes/Scenes/SceneLib.as b/classes/classes/Scenes/SceneLib.as index c6af555150..625ee7828c 100644 --- a/classes/classes/Scenes/SceneLib.as +++ b/classes/classes/Scenes/SceneLib.as @@ -1,5 +1,6 @@ package classes.Scenes { import classes.CoC; +import classes.Items.Mutations; import classes.Scenes.Areas.*; import classes.Scenes.Areas.Forest.KitsuneScene; import classes.Scenes.Combat.Combat; @@ -27,6 +28,8 @@ public class SceneLib { public static var masturbation:Masturbation = new Masturbation(); + public static var mutationsTable:Mutations = new Mutations(); + public static var beach:Beach = new Beach(); public static var blightridge:BlightRidge = new BlightRidge(); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 56c8465168..a56a8fe05c 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -208,20 +208,24 @@ use namespace CoC; addButton(7, "RevertCabin", RevertCabinProgress).hint("Revert cabin flag back to value 2 (for bug fix test)"); addButton(8, "Gargoyle", GargoyleMenu).hint("To Be or Not To Be Gargoyle that is a question."); addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); - addButton(10, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); - addButton(11, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); addButton(12, "DERP", AddEnigmanium).hint("DERP."); - if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); - //addButton(13, "13", ); + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) addButton(12, "MoonCycleAdj", moonCycleAdjusting).hint("Adjusting wild moon cycle to pokeba... norm."); + if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); addButton(14, "Back", accessSoulforceMenu); } public function celessIntroForced():void { clearOutput(); CelessScene.instance.birthScene(); } -public function replacingBarbsWithsSowrds():void { - player.removePerk(PerkLib.JobBarbarian); - player.createPerk(PerkLib.JobSwordsman, 0, 0, 0, 0); +public function moonCycleAdjusting():void { + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; + doNext(SoulforceCheats); +} +public function fixingWerewolfFur():void { + player.skin.coverage = Skin.COVERAGE_LOW; + player.coatColor = player.hairColor; doNext(SoulforceCheats); } public function LvLUPDiana():void { @@ -694,8 +698,10 @@ public function FightNightmare():void { addButton(8, "NineTailWhip", AddNineTailWhip).hint("Add 1 Nine Tail Whip."); addButton(9, "Hodr's Bow", AddHodrsBow).hint("Add 1 Hodr's Bow."); // addButton(9, "L Ayo Arm", AddLightAyoArmor).hint("Add 1 Light Ayo Armor for testing purposes."); - addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); - addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); + // addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); + addButton(10, "TruestriekSword", AddTruestrikeSword).hint("Add 1 Truestrike Sword."); + // addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); + addButton(11, "ScepterComm", AddSceptreOfCommand).hint("Add 1 Sceptre of Command."); addButton(12, "CatONIneTWhip", AddCatONineTailWhip).hint("Add 1 Bastet Whip."); addButton(13, "InqTome", AddTheInquisitorsTome).hint("Add 1 Inquisitor's Tome."); addButton(14, "Back", SoulforceCheats); @@ -883,10 +889,18 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Seer's Hairpin!)\n\n"); inventory.takeItem(jewelries.SEERPIN, EquipmentMenu); } + public function AddTruestrikeSword():void { + outputText("\n\n(Gained 1 Truestrike Sword!)\n\n"); + inventory.takeItem(weapons.TRSTSWO, EquipmentMenu); + } public function AddTheDemonicScythe():void { outputText("\n\n(Gained 1 Demonic Scythe!)\n\n"); inventory.takeItem(weapons.DEMSCYT, EquipmentMenu); } + public function AddSceptreOfCommand():void { + outputText("\n\n(Gained 1 Sceptre of Command!)\n\n"); + inventory.takeItem(weapons.SCECOMM, EquipmentMenu); + } public function AddTheInquisitorsTome():void { outputText("\n\n(Gained 1 Inquisitor's Tome!)\n\n"); inventory.takeItem(weaponsrange.I_TOME_, EquipmentMenu); @@ -1227,12 +1241,12 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Sky Poison Pearl!)\n\n"); inventory.takeItem(consumables.SPPEARL, EquipmentMenu); } - + public function AddEnigmanium():void { outputText("\n\n(Gained 1 Enigmanium!)\n\n"); inventory.takeItem(consumables.ENIGMANIUM, EquipmentMenu); } - + public function AddLightAyoArmor():void { outputText("\n\n(Gained 1 Light Ayo Armor!)\n\n"); inventory.takeItem(armors.LAYOARM, EquipmentMenu); diff --git a/classes/classes/StatusEffects.as b/classes/classes/StatusEffects.as index 59bb1ec91c..de02e5e5df 100644 --- a/classes/classes/StatusEffects.as +++ b/classes/classes/StatusEffects.as @@ -38,8 +38,12 @@ import classes.StatusEffects.VampireThirstEffect; public static const CampAnemoneTrigger:StatusEffectType = mk("Camp Anemone Trigger"); public static const CampMarble:StatusEffectType = mk("Camp Marble"); public static const CampRathazul:StatusEffectType = mk("Camp Rathazul"); + public static const CampLunaMishaps1:StatusEffectType = mk("Camp Luna Mishaps 1"); + public static const CampLunaMishaps2:StatusEffectType = mk("Camp Luna Mishaps 2"); + public static const CampLunaMishaps3:StatusEffectType = mk("Camp Luna Mishaps 3"); public static const CampSparingNpcsTimers1:StatusEffectType = mk("Camp Sparing Npc's Timers 1"); public static const CampSparingNpcsTimers2:StatusEffectType = mk("Camp Sparing Npc's Timers 2"); + public static const CampSparingNpcsTimers3:StatusEffectType = mk("Camp Sparing Npc's Timers 3"); public static const ClaraCombatRounds:StatusEffectType = mk("Clara Combat Rounds"); public static const ClaraFoughtInCamp:StatusEffectType = mk("Clara Fought In Camp"); public static const CockPumped:StatusEffectType = mk("Cock Pumped"); diff --git a/content/coc/NPC/diva.xml b/content/coc/NPC/diva.xml index e6954579bd..70c7ed8925 100644 --- a/content/coc/NPC/diva.xml +++ b/content/coc/NPC/diva.xml @@ -669,7 +669,7 @@ Well, this isn’t so bad, the scarf-like look is certainly nice, at the very least. Your neck now sports a collar of fur.
- + You yelp as a throbbing pain takes root in the sides of your mouth. You feel your canines grow longer as your throat grow dryer. You could go for some wine right now, with a bloody steak to top it off… maybe just the steak. From b8c701dedb28461310f992aae44a68b79b886c67 Mon Sep 17 00:00:00 2001 From: Liadri Date: Sun, 11 Mar 2018 19:02:37 -0400 Subject: [PATCH 14/27] Full complete Sphinx TF availlable from debug Sphinx --- Corruption-of-Champions-FD-STANDALONE.as3proj | 2 +- classes/classes/Appearance.as | 16 +- classes/classes/BodyParts/Arms.as | 3 +- classes/classes/BodyParts/Ears.as | 1 - classes/classes/BodyParts/Eyes.as | 1 - classes/classes/BodyParts/LowerBody.as | 1 - classes/classes/BodyParts/Tail.as | 3 +- classes/classes/Character.as | 5 +- classes/classes/CoC.as | 4 +- classes/classes/CockTypesEnum.as | 1 - classes/classes/Creature.as | 73 +++++---- .../classes/Items/Consumables/Enigmanium.as | 56 ++++--- .../classes/Items/Consumables/VampireBlood.as | 8 +- classes/classes/Items/Mutations.as | 55 +------ classes/classes/Items/MutationsHelper.as | 5 - classes/classes/Items/WeaponLib.as | 4 +- classes/classes/Items/Weapons/FlyWhisk.as | 2 +- classes/classes/Monster.as | 22 +-- classes/classes/PerkLib.as | 23 +-- classes/classes/Player.as | 68 ++++----- classes/classes/PlayerAppearance.as | 30 ++-- classes/classes/PlayerEvents.as | 85 ++++------- classes/classes/PlayerInfo.as | 7 - classes/classes/Saves.as | 2 +- classes/classes/Scenes/Areas/HighMountains.as | 42 +---- .../HighMountains/MinervaPurification.as | 6 +- .../Areas/HighMountains/TempleOfTheDivine.as | 26 ++-- classes/classes/Scenes/Areas/Lake.as | 2 +- .../classes/Scenes/Areas/Lake/FetishZealot.as | 2 +- classes/classes/Scenes/Camp.as | 91 ++++++----- classes/classes/Scenes/Camp/CampScenes.as | 4 +- classes/classes/Scenes/Changelog.as | 31 +--- classes/classes/Scenes/Combat/Combat.as | 69 +++------ classes/classes/Scenes/Combat/CombatMagic.as | 2 +- .../classes/Scenes/Combat/CombatSoulskills.as | 6 - classes/classes/Scenes/Combat/CombatTeases.as | 4 +- classes/classes/Scenes/Combat/CombatUI.as | 2 +- .../classes/Scenes/Combat/MagicSpecials.as | 89 +++++++++-- .../classes/Scenes/Combat/PhysicalSpecials.as | 79 ++++++++-- classes/classes/Scenes/DebugMenu.as | 2 +- classes/classes/Scenes/Dungeons/AnzuPalace.as | 7 - .../Scenes/Dungeons/AnzuPalace/AnzuScene.as | 2 +- .../Scenes/Dungeons/D3/LethiceScenes.as | 2 +- classes/classes/Scenes/Holidays.as | 2 +- classes/classes/Scenes/Inventory.as | 12 +- classes/classes/Scenes/Metamorph.as | 3 +- classes/classes/Scenes/NPCs/AmilyScene.as | 17 +-- classes/classes/Scenes/NPCs/ChiChiFollower.as | 19 +-- classes/classes/Scenes/NPCs/Diana.as | 28 ++-- classes/classes/Scenes/NPCs/DianaFollower.as | 6 +- classes/classes/Scenes/NPCs/EmberScene.as | 13 -- classes/classes/Scenes/NPCs/EtnaFollower.as | 15 -- .../classes/Scenes/NPCs/EvangelineFollower.as | 2 +- classes/classes/Scenes/NPCs/HelFollower.as | 13 +- .../Scenes/NPCs/IsabellaFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/IsabellaScene.as | 2 +- classes/classes/Scenes/NPCs/IzmaScene.as | 14 -- classes/classes/Scenes/NPCs/JojoScene.as | 12 -- classes/classes/Scenes/NPCs/JoyScene.as | 4 +- classes/classes/Scenes/NPCs/KihaFollower.as | 105 +++++++------ classes/classes/Scenes/NPCs/KihaScene.as | 19 +-- classes/classes/Scenes/NPCs/LatexGirl.as | 4 +- classes/classes/Scenes/NPCs/Luna.as | 48 +----- classes/classes/Scenes/NPCs/LunaFollower.as | 143 ++---------------- classes/classes/Scenes/NPCs/Rathazul.as | 2 +- .../classes/Scenes/NPCs/ShouldraFollower.as | 2 +- .../Scenes/NPCs/SophieFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/Urta.as | 4 +- classes/classes/Scenes/Places/HeXinDao.as | 38 ++--- .../Places/HeXinDao/JourneyToTheEast.as | 74 +-------- .../Scenes/Places/Prison/TrainingFeeding.as | 2 +- classes/classes/Scenes/Places/TelAdre.as | 2 +- classes/classes/Scenes/Places/TelAdre/Rubi.as | 2 +- classes/classes/Scenes/Pregnancy.as | 2 +- classes/classes/Scenes/SceneLib.as | 3 - classes/classes/Scenes/Soulforce.as | 36 ++--- classes/classes/StatusEffects.as | 5 +- content/coc/NPC/diva.xml | 2 +- 78 files changed, 563 insertions(+), 1045 deletions(-) diff --git a/Corruption-of-Champions-FD-STANDALONE.as3proj b/Corruption-of-Champions-FD-STANDALONE.as3proj index 5170b5ca75..f56b6cea1a 100644 --- a/Corruption-of-Champions-FD-STANDALONE.as3proj +++ b/Corruption-of-Champions-FD-STANDALONE.as3proj @@ -4,7 +4,7 @@ - + diff --git a/classes/classes/Appearance.as b/classes/classes/Appearance.as index 7ffd76aec8..0035080fbf 100644 --- a/classes/classes/Appearance.as +++ b/classes/classes/Appearance.as @@ -2386,7 +2386,6 @@ public class Appearance extends Utils [Skin.DRAGON_SCALES, "dragon scales", "dragon scales", "", true], [Skin.MOSS, "moss", "moss", "", false], [Skin.AQUA_RUBBER_LIKE, "AQUA_RUBBER_LIKE", "slippery rubber-like skin", "", false], - [Skin.FEATHER, "FEATHER", "feather", "", false], [Skin.TATTOED_ONI, "TATTOED_ONI", "tattooed skin", "", false], [Skin.PARTIAL_DRAGON_SCALES, "partial dragon scales", "partial dragon scales", "", true], [Skin.PARTIAL_STONE, "partial stone", "partial stone", "", false], @@ -2495,8 +2494,7 @@ public class Appearance extends Utils [Eyes.ELF, "elf"], [Eyes.RAIJU, "raiju"], [Eyes.GEMSTONES, "gemstones"], - [Eyes.FERAL, "feral"], - [Eyes.GRYPHON, "gryphon"] + [Eyes.FERAL, "feral"] ] ); public static const DEFAULT_EARS_NAMES:Object = createMapFromPairs( @@ -2529,8 +2527,7 @@ public class Appearance extends Utils [Ears.ELVEN, "elven"], [Ears.WEASEL, "weasel"], [Ears.RED_PANDA, "red-panda"], - [Ears.AVIAN, "avian"], - [Ears.GRYPHON, "gryphon"] + [Ears.AVIAN, "avian"] ] ); public static const DEFAULT_HORNS_NAMES:Object = createMapFromPairs( @@ -2588,8 +2585,7 @@ public class Appearance extends Utils [Arms.RAIJU, "raiju"], [Arms.RED_PANDA, "red-panda"], [Arms.CAT, "cat"], - [Arms.AVIAN, "avian"], - [Arms.GRYPHON, "gryphon"] + [Arms.AVIAN, "avian"] ] ); public static const DEFAULT_TAIL_NAMES:Object = createMapFromPairs( @@ -2630,8 +2626,7 @@ public class Appearance extends Utils [Tail.RAIJU, "raiju"], [Tail.RED_PANDA, "red-panda"], [Tail.GARGOYLE_2, "axe-shaped gargoyle"], - [Tail.AVIAN, "avian"], - [Tail.GRIFFIN, "griffin"] + [Tail.AVIAN, "avian"] ] ); public static const DEFAULT_WING_NAMES:Object = createMapFromPairs( @@ -2742,8 +2737,7 @@ public class Appearance extends Utils [LowerBody.ELF, "elf"], [LowerBody.RAIJU, "raiju"], [LowerBody.RED_PANDA, "red-panda"], - [LowerBody.AVIAN, "avian"], - [LowerBody.GRYPHON, "gryphon"] + [LowerBody.AVIAN, "avian"] ] ); // diff --git a/classes/classes/BodyParts/Arms.as b/classes/classes/BodyParts/Arms.as index f5e6c2c928..f6704e560d 100644 --- a/classes/classes/BodyParts/Arms.as +++ b/classes/classes/BodyParts/Arms.as @@ -28,9 +28,8 @@ public class Arms extends BodyPart { public static const GARGOYLE_2:int = 24; public static const CAT:int = 25; public static const AVIAN:int = 26; - public static const GRYPHON:int = 27; public static const SPHINX:int = 28; - + public function Arms() { super(null, null); } diff --git a/classes/classes/BodyParts/Ears.as b/classes/classes/BodyParts/Ears.as index faa105a0b2..c3fabbbdf4 100644 --- a/classes/classes/BodyParts/Ears.as +++ b/classes/classes/BodyParts/Ears.as @@ -32,7 +32,6 @@ public class Ears extends BodyPart { public static const VAMPIRE:int = 28; public static const RED_PANDA:int = 29; public static const AVIAN:int = 30; - public static const GRYPHON:int = 31; public function Ears() { super(null, null); diff --git a/classes/classes/BodyParts/Eyes.as b/classes/classes/BodyParts/Eyes.as index 3bd8d3b353..8308ffcba2 100644 --- a/classes/classes/BodyParts/Eyes.as +++ b/classes/classes/BodyParts/Eyes.as @@ -20,7 +20,6 @@ public class Eyes extends BodyPart { public static const VAMPIRE:int = 15; public static const GEMSTONES:int = 16; public static const FERAL:int = 17; - public static const GRYPHON:int = 18; public var colour:String = "brown"; public function Eyes() { diff --git a/classes/classes/BodyParts/LowerBody.as b/classes/classes/BodyParts/LowerBody.as index 54b426a5ea..3f391c8047 100644 --- a/classes/classes/BodyParts/LowerBody.as +++ b/classes/classes/BodyParts/LowerBody.as @@ -50,7 +50,6 @@ public class LowerBody extends SaveableBodyPart { public static const RED_PANDA:int = 42; public static const GARGOYLE_2:int = 43; public static const AVIAN:int = 44; - public static const GRYPHON:int = 45; override public function set type(value:int):void { super.type = value; diff --git a/classes/classes/BodyParts/Tail.as b/classes/classes/BodyParts/Tail.as index c6a0da025c..99003e0516 100644 --- a/classes/classes/BodyParts/Tail.as +++ b/classes/classes/BodyParts/Tail.as @@ -50,9 +50,8 @@ public class Tail extends SaveableBodyPart { public static const RED_PANDA:int = 34; public static const GARGOYLE_2:int = 35; public static const AVIAN:int = 36; - public static const GRIFFIN:int = 37; public static const LION:int = 38; - + override public function set type(value:int):void { var old:int = type; super.type = value; diff --git a/classes/classes/Character.as b/classes/classes/Character.as index 4edb575b9c..d20f52be7f 100644 --- a/classes/classes/Character.as +++ b/classes/classes/Character.as @@ -607,7 +607,7 @@ import classes.Items.JewelryLib; public override function maxFatigue():Number { - var max:Number = 150; + var max:Number = 100; if (game.player.alicornScore() >= 6) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 20) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 28) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); @@ -672,7 +672,6 @@ import classes.Items.JewelryLib; if (game.player.alicornScore() >= 6) max += (150 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (game.player.unicornScore() >= 5) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (hasPerk(PerkLib.DemonicLethicite)) max += Math.round(lib); - if (hasPerk(PerkLib.Metamorph)) max += 50; if (flags[kFLAGS.SOUL_CULTIVATION] >= 2) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 3) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 4) max += 30; @@ -837,7 +836,7 @@ import classes.Items.JewelryLib; public override function maxMana():Number { - var max:Number = 200; + var max:Number = 100; if (findPerk(PerkLib.ManaAffinityI) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityII) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityIII) >= 0) max += 35; diff --git a/classes/classes/CoC.as b/classes/classes/CoC.as index aad7a3f8a8..af1dda889e 100644 --- a/classes/classes/CoC.as +++ b/classes/classes/CoC.as @@ -247,8 +247,8 @@ public class CoC extends MovieClip //model.debug = debug; // TODO: Set on model? //Version NUMBER - ver = "1.0.2_mod_Xianxia_0.8i2"; - version = ver + " ()"; + ver = "1.0.2_mod_Xianxia_0.8i"; + version = ver + " (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes))"; this.images = new ImageManager(stage, mainView); this.inputManager = new InputManager(stage, mainView, false); diff --git a/classes/classes/CockTypesEnum.as b/classes/classes/CockTypesEnum.as index 9546405828..20c33a3842 100644 --- a/classes/classes/CockTypesEnum.as +++ b/classes/classes/CockTypesEnum.as @@ -49,7 +49,6 @@ package classes public static const WOLF:CockTypesEnum = new CockTypesEnum("mammal"); public static const STAMEN:CockTypesEnum = new CockTypesEnum("plant"); public static const RED_PANDA:CockTypesEnum = new CockTypesEnum("mammal"); - public static const GRYPHON:CockTypesEnum = new CockTypesEnum("avian"); public static const UNDEFINED:CockTypesEnum = new CockTypesEnum(""); function CockTypesEnum(i_group:String = "") { _group = i_group; } diff --git a/classes/classes/Creature.as b/classes/classes/Creature.as index 7521618b60..fb5dd57cd8 100644 --- a/classes/classes/Creature.as +++ b/classes/classes/Creature.as @@ -2293,11 +2293,6 @@ public class Creature extends Utils return countCocksOfType(CockTypesEnum.AVIAN); } - public function gryphonCocks():int { //How many gryphoncocks? - return countCocksOfType(CockTypesEnum.GRYPHON); - } - - public function findFirstCockType(ctype:CockTypesEnum):Number { var index:Number = 0; @@ -2451,6 +2446,7 @@ public class Creature extends Utils Wings.VAMPIRE, Wings.FEY_DRAGON_WINGS, Wings.FEATHERED_AVIAN, + Wings.FEATHERED_SPHINX, //WING_TYPE_IMP_LARGE, ]; @@ -2462,6 +2458,25 @@ public class Creature extends Utils return false; return canFlyWings.indexOf(wings.type) != -1; } + + public static const canPounceLeg:Array = [ + LowerBody.CAT, + LowerBody.LION, + LowerBody.WOLF, + ]; + + public static const canPounceArms:Array = [ + Arms.CAT, + Arms.LION, + Arms.SPHINX, + Arms.WOLF, + ]; + + public function canPounce():Boolean + { + return canPounceLeg.indexOf(lowerBody) != -1 && canPounceArms.indexOf(arms.type) != -1; + } + //PC can swim underwater? public function canSwimUnderwater():Boolean @@ -2970,38 +2985,34 @@ public class Creature extends Utils public function canOvipositSpider():Boolean { return eggs() >= 10 && findPerk(PerkLib.SpiderOvipositor) >= 0 && isDrider() && tail.type == Tail.SPIDER_ADBOMEN; + } public function canOvipositBee():Boolean { return eggs() >= 10 && findPerk(PerkLib.BeeOvipositor) >= 0 && tail.type == Tail.BEE_ABDOMEN; - } - public function canOvipositMantis():Boolean - { - return eggs() >= 10 && findPerk(PerkLib.MantisOvipositor) >= 0 && tail.type == Tail.MANTIS_ABDOMEN; } public function canOviposit():Boolean { - return canOvipositSpider() || canOvipositBee() || canOvipositMantis(); + return canOvipositSpider() || canOvipositBee(); + } public function eggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv1(PerkLib.SpiderOvipositor); - else if (findPerk(PerkLib.BeeOvipositor) >= 0) - return perkv1(PerkLib.BeeOvipositor); else - return perkv1(PerkLib.MantisOvipositor); + return perkv1(PerkLib.BeeOvipositor); } public function addEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3010,24 +3021,18 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else if (findPerk(PerkLib.BeeOvipositor) >= 0) { + else { addPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } - else { - addPerkValue(PerkLib.MantisOvipositor, 1, arg); - if (eggs() > 50) - setPerkValue(PerkLib.MantisOvipositor, 1, 50); - return perkv1(PerkLib.MantisOvipositor); - } } } public function dumpEggs():void { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return; setEggs(0); //Sets fertile eggs = regular eggs (which are 0) @@ -3036,7 +3041,7 @@ public class Creature extends Utils public function setEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3045,43 +3050,33 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else if (findPerk(PerkLib.BeeOvipositor) >= 0) { + else { setPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } - else { - setPerkValue(PerkLib.MantisOvipositor, 1, arg); - if (eggs() > 50) - setPerkValue(PerkLib.MantisOvipositor, 1, 50); - return perkv1(PerkLib.MantisOvipositor); - } } } public function fertilizedEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv2(PerkLib.SpiderOvipositor); - else if (findPerk(PerkLib.BeeOvipositor) >= 0) - return perkv2(PerkLib.BeeOvipositor); else - return perkv2(PerkLib.MantisOvipositor); + return perkv2(PerkLib.BeeOvipositor); } public function fertilizeEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) setPerkValue(PerkLib.SpiderOvipositor, 2, eggs()); - else if (findPerk(PerkLib.BeeOvipositor) >= 0) - setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); else - setPerkValue(PerkLib.MantisOvipositor, 2, eggs()); + setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); return fertilizedEggs(); } diff --git a/classes/classes/Items/Consumables/Enigmanium.as b/classes/classes/Items/Consumables/Enigmanium.as index e8d2b198cb..dea72ace63 100644 --- a/classes/classes/Items/Consumables/Enigmanium.as +++ b/classes/classes/Items/Consumables/Enigmanium.as @@ -38,9 +38,9 @@ public class Enigmanium extends Consumable{ if (rand(2) == 0) changeLimit++; if (rand(2) == 0) changeLimit++; if (rand(3) == 0) changeLimit++; - if (player.findPerk(PerkLib.HistoryAlchemist) >= 0 || player.findPerk(PerkLib.PastLifeAlchemist) >= 0) changeLimit++; - if (player.findPerk(PerkLib.EzekielBlessing) >= 0) changeLimit++; - if (player.findPerk(PerkLib.TransformationResistance) >= 0) changeLimit--; + if (player.hasPerk(PerkLib.HistoryAlchemist) || player.hasPerk(PerkLib.PastLifeAlchemist)) changeLimit++; + if (player.hasPerk(PerkLib.EzekielBlessing)) changeLimit++; + if (player.hasPerk(PerkLib.TransformationResistance)) changeLimit--; //Text go! clearOutput(); outputText("You chug down the potion pinching your nose and hoping for the best. Knowledge flood your mind. Hey you could as well get to making riddles as a pastime."); @@ -279,7 +279,8 @@ public class Enigmanium extends Consumable{ changes++; } - //If cocks that aren't horsified! + if ((player.isMaleOrHerm()) && rand(3) == 0 && changes < changeLimit) { + //If cocks that aren't Catsified! if ((player.catCocks() + player.demonCocks()) < player.cocks.length) { //Transform a cock and store it's index value to talk about it. //Single cock @@ -287,8 +288,9 @@ public class Enigmanium extends Consumable{ var temp:int = 0; //Use temp3 to track whether or not anything is changed. temp3 = 0; + if (player.cocks[0].cockType != CockTypesEnum.CAT) { if (player.cocks[0].cockType == CockTypesEnum.HUMAN) { - outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); temp = player.addHorseCock(); temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; @@ -296,25 +298,26 @@ public class Enigmanium extends Consumable{ } if (player.cocks[0].cockType == CockTypesEnum.DOG) { temp = player.addHorseCock(); - outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; dynStats("lib", 5, "sen", 4, "lus", 35); } if (player.cocks[0].cockType == CockTypesEnum.TENTACLE) { temp = player.addHorseCock(); - outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; dynStats("lib", 5, "sen", 4, "lus", 35); } if (player.cocks[0].cockType.Index > 4) { - outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); + outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); temp = player.addHorseCock(); temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; dynStats("lib", 5, "sen", 4, "lus", 35); } + } if (temp3 == 1) outputText(" Your penis has transformed into a Cat's!"); } //MULTICOCK @@ -339,7 +342,7 @@ public class Enigmanium extends Consumable{ changes++; } //Players cocks are all horse-type - increase size! - else { + else if(player.hasCock()) { //single cock if (player.cocks.length == 1) { temp2 = player.increaseCock(0, rand(3) + 1); @@ -367,7 +370,7 @@ public class Enigmanium extends Consumable{ dynStats("sen", 1, "lus", 10); } outputText("\n\n"); - if (temp2 > 2) outputText("Your " + player.cockDescript(temp) + " tightens painfully, inches of taut horse-flesh pouring out from your sheath as it grows longer. Thick animal-pre forms at the flared tip, drawn out from the pleasure of the change."); + if (temp2 > 2) outputText("Your " + player.cockDescript(temp) + " tightens painfully, inches of taut flesh pouring out from your sheath as it grows longer. Thick animal-pre forms at the flared tip, drawn out from the pleasure of the change."); if (temp2 > 1 && temp2 <= 2) outputText("Aching pressure builds within your sheath, suddenly releasing as an inch or more of extra dick flesh spills out. A dollop of pre beads on the head of your enlarged " + player.cockDescript(temp) + " from the pleasure of the growth."); if (temp2 <= 1) outputText("A slight pressure builds and releases as your " + player.cockDescript(temp) + " pushes a bit further out of your sheath."); changes++; @@ -388,7 +391,7 @@ public class Enigmanium extends Consumable{ if (player.cor + player.lib < 60) outputText(" to have such a splendid tool. You idly daydream about cunts and pussies, your " + Appearance.cockNoun(CockTypesEnum.CAT) + " plowing them relentlessly, stuffing them pregnant with cum"); if (player.cor + player.lib >= 60 && player.cor + player.lib < 100) outputText(" to be this way... You breath the powerful animalistic scent and fantasize about fucking catgirls and centaurs night and day until their bellies slosh with your cum"); if (player.cor + player.lib >= 100 && player.cor + player.lib <= 175) outputText(" to be a rutting stud. You ache to find a catgirl in heat to breed with. Longing to spend your evenings plunging a " + Appearance.cockNoun(CockTypesEnum.CAT) + " deep into their passages, dumping load after load of your thick animal-cum into them. You'd be happy just fucking cunt morning, noon, and night."); - if (player.cor + player.lib > 175) outputText(" Your " + Appearance.cockNoun(CockTypesEnum.CAT) + " is perfect for fucking about anything that is a cat or a horse. You imagine the feel of plowing an equine pussy deeply, bottoming out and unloading sticky jets of horse-jizz into its fertile womb. Your hand strokes your cat cock of its own accord, musky pre dripping from the spiked tip with each stroke. Your mind wanders to the thought of you with a harem of pregnant cat or centaurs."); + if (player.cor + player.lib > 175) outputText(" Your " + Appearance.cockNoun(CockTypesEnum.CAT) + " is perfect for fucking about anything that is a cat or a taur. You imagine the feel of plowing an equine pussy deeply, bottoming out and unloading sticky jets of horse-jizz into its fertile womb. Your hand strokes your cat cock of its own accord, musky pre dripping from the spiked tip with each stroke. Your mind wanders to the thought of you with a harem of pregnant cat or centaurs."); outputText("."); if (player.cor < 30) outputText(" You shudder in revulsion at the strange thoughts and vow to control yourself better."); if (player.cor >= 30 && player.cor < 60) outputText(" You wonder why you thought such odd things, but they have a certain appeal."); @@ -411,36 +414,49 @@ public class Enigmanium extends Consumable{ dynStats("lib", 1, "lus", 3); } changes++; - } + } + } //Body type changes. Teh rarest of the rare. //DA EARZ if (player.ears.type != Ears.LION && player.tailType != Tail.GARGOYLE && rand(4) == 0 && changes < changeLimit) { //human to lion: if (player.ears.type == Ears.HUMAN) { - if (rand(2) == 0) outputText("\n\nThe skin on the sides of your face stretches painfully as your ears migrate upwards, towards the top of your head. They shift and elongate a little, fur growing on them as they become feline in nature. You now have cat ears."); - else outputText("\n\nYour ears begin to tingle. You reach up with one hand and gently rub them. They appear to be growing fur. Within a few moments, they've migrated up to the top of your head and increased in size. The tingling stops and you find yourself hearing noises in a whole new way. You now have cat ears."); + if (rand(2) == 0) outputText("\n\nThe skin on the sides of your face stretches painfully as your ears migrate upwards, towards the top of your head. They shift and elongate a little, fur growing on them as they become feline in nature. You now have Lion ears."); + else outputText("\n\nYour ears begin to tingle. You reach up with one hand and gently rub them. They appear to be growing fur. Within a few moments, they've migrated up to the top of your head and increased in size. The tingling stops and you find yourself hearing noises in a whole new way. You now have Lion ears."); } //non human to lion: else { if (rand(2) == 0) outputText("\n\nYour ears change shape, morphing into round, feline ears not unlike those of a lion! They swivel about reflexively as you adjust to them. You now have lion ears."); else outputText("\n\nYour ears tingle and begin to change shape. Within a few moments, they've become long and feline. Thanks to the new fuzzy organs, you find yourself able to hear things that eluded your notice up until now. You now have lion ears."); } - mutations.setEarType(Ears.CAT); + mutations.setEarType(Ears.LION); changes++; } //DA TAIL (IF ALREADY HAZ URZ) if (player.tailType != Tail.CAT && player.ears.type == Ears.LION && rand(4) == 0 && changes < changeLimit) { if (player.tailType == Tail.NONE) { - choice = rand(3); - if (choice == 0) outputText("\n\nA pressure builds in your backside. You feel under your [armor] and discover an odd bump that seems to be growing larger by the moment. In seconds it passes between your fingers, bursts out the back of your clothes and grows most of the way to the ground. A thick coat of fur springs up to cover your new tail. You instinctively keep adjusting it to improve your balance. You now have a cat-tail."); - if (choice == 1) outputText("\n\nYou feel your backside shift and change, flesh molding and displacing into a long, flexible tail! You now have a cat tail."); - if (choice == 2) outputText("\n\nYou feel an odd tingling in your spine and your tail bone starts to throb and then swell. Within a few moments it begins to grow, adding new bones to your spine. Before you know it, you have a tail. Just before you think it's over, the tail begins to sprout soft, glossy [skin coat.color] fur. You now have a cat tail."); + switch(rand(3)){ + case 0: outputText("\n\nA pressure builds in your backside. You feel under your [armor] and discover an odd bump that seems to be growing larger by the moment. In seconds it passes between your fingers, bursts out the back of your clothes and grows most of the way to the ground. A thick coat of fur springs up to cover your new tail. You instinctively keep adjusting it to improve your balance. You now have a cat-tail."); break; + case 1: outputText("\n\nYou feel your backside shift and change, flesh molding and displacing into a long, flexible tail! You now have a cat tail."); break; + case 2: outputText("\n\nYou feel an odd tingling in your spine and your tail bone starts to throb and then swell. Within a few moments it begins to grow, adding new bones to your spine. Before you know it, you have a tail. Just before you think it's over, the tail begins to sprout soft, glossy [skin coat.color] fur. You now have a cat tail."); break; + } } else outputText("\n\nYou pause and tilt your head... something feels different. Ah, that's what it is; you turn around and look down at your tail as it starts to change shape, narrowing and sprouting glossy fur. You now have a cat tail."); mutations.setTailType(Tail.CAT); changes++; } + + //DA Mouth + if (player.faceType != Face.CAT_CANINES) { + if (player.faceType != Face.HUMAN) { outputText("\n\nYour face suddenly mold back into its former human shape. However you feel your canine changing elongating into sharp dagger-like teeth capable of causing severe injuries. "); + } + else { outputText("\n\nYou feel your canines changing, elongating into sharp dagger-like teeth capable of causing severe injuries. Funnily, your face remained relatively human even after the change. You purr at the change it gives you a cute look. Your mouth is now filled with Cat-like canines."); + } + mutations.setFaceType(Face.CAT_CANINES); + changes++; + } + //Da paws (if already haz ears & tail) if (player.tailType == Tail.CAT && player.ears.type == Ears.LION && rand(4) == 0 && changes < changeLimit && player.lowerBody != LowerBody.CAT) { //hoof to cat: @@ -458,6 +474,8 @@ public class Enigmanium extends Consumable{ player.legCount = 2; changes++; } + + //Sphinx Arms if (player.lowerBody == LowerBody.CAT && rand(4) == 0 && changes < changeLimit && player.arms.type != Arms.SPHINX) { if (player.arms.type != Arms.HUMAN) { mutations.humanizeArms(); diff --git a/classes/classes/Items/Consumables/VampireBlood.as b/classes/classes/Items/Consumables/VampireBlood.as index 5285db5e47..f1b9368f0e 100644 --- a/classes/classes/Items/Consumables/VampireBlood.as +++ b/classes/classes/Items/Consumables/VampireBlood.as @@ -55,7 +55,7 @@ public class VampireBlood extends Consumable { Check : player.hasGooSkin(), Override: mutations.humanizeSkin }, { - BodyPart: 'ears.type', + BodyPart: 'ears.Type', ChangeTo: pure ? Ears.VAMPIRE : Ears.BAT, Check : pure ? player.ears.type != Ears.HUMAN : false, Override: pure ? mutations.humanizeEars : null @@ -63,7 +63,7 @@ public class VampireBlood extends Consumable { BodyPart: 'eyes.type', ChangeTo: Eyes.VAMPIRE }, { - BodyPart: 'faceType', + BodyPart: 'face.Type', ChangeTo: Face.VAMPIRE } ]; @@ -112,9 +112,7 @@ public class VampireBlood extends Consumable { if(count)changes++; } outputText("\n\n"); - if(count){ - story.display(tf.BodyPart, {$pure: pure}); - } + story.display(tf.BodyPart, {$pure: pure}); hostObj[bodyPart] = tf.ChangeTo; for each(var extra:Object in tf.Addition){ doChange(extra,false); diff --git a/classes/classes/Items/Mutations.as b/classes/classes/Items/Mutations.as index c5f069b17f..686f4c36f3 100644 --- a/classes/classes/Items/Mutations.as +++ b/classes/classes/Items/Mutations.as @@ -4970,6 +4970,8 @@ public final class Mutations extends MutationsHelper player.refillHunger(20); flags[kFLAGS.TIMES_TRANSFORMED] += changes; } + + public function reptilum(player:Player):void { @@ -6600,8 +6602,6 @@ public final class Mutations extends MutationsHelper //Generic eating text: clearOutput(); if (type == 0) outputText("You crack open the seed easily, and eat the fruit inside. A bit dry, as you expected, but with a sweet and aromatic taste that leaves you wanting another one."); - if (type == 1) outputText("Looking again at the fierce gryphon sculpted on brass and bronze that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); - if (type == 2) outputText("Looking again at the wonderful peacock carved in alabaster and ruby that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); //Stats changes //-Speed increase to 100. if (player.spe < 100 && type == 0 && rand(3) == 0 && changes < changeLimit) { @@ -6631,7 +6631,6 @@ public final class Mutations extends MutationsHelper if (player.str < 40) dynStats("str", .5); dynStats("str", .5); } - if (type == 1 || type == 2) changeLimit = 1; if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; //Sexual changes if (player.avianCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 0 && rand(3) == 0) { @@ -6652,24 +6651,6 @@ public final class Mutations extends MutationsHelper player.cocks[temp2].cockType = CockTypesEnum.AVIAN; changes++; } - if (player.gryphonCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 1 && rand(3) == 0) { - for (temp2 = 0; temp2 < player.cocks.length; temp2++) { - if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; - } - outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); - outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); - player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; - changes++; - } - if (player.cockTotal() > 1 && player.gryphonCocks() > 0 && player.cockTotal() > player.gryphonCocks() && type == 1 && rand(3) == 0 && changes < changeLimit) { - for (temp2 = 0; temp2 < player.cocks.length; temp2++) { - if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; - } - outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); - outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); - player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; - changes++; - } //Legs if (player.lowerBody != LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.isGoo()) { @@ -6712,13 +6693,6 @@ public final class Mutations extends MutationsHelper player.legCount = 2; changes++; } - if (player.lowerBody != LowerBody.GRYPHON && player.eyes.type == Eyes.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nTaking a seat while you see how the magic within the statue affects you, a familiar numbness reaches your legs. The rough skin covering your lower legs and feet change into more usual, soft skin, and shortly after, it starts sprouting " + player.skin.coat.color2 + " colored fur over them."); - outputText("\n\nYour feet themselves reshape, losing their avian stance and gaining one much more feline, complete with soft pink paw pads. The talons at the end of each toe become retractile feline claws. Albeit walking with those seems initially tricky, you easily gain a hold on how using your new gryphon-like legs."); - setLowerBody(LowerBody.GRYPHON); - player.legCount = 2; - changes++; - } //Tail if (player.tailType != Tail.AVIAN && player.lowerBody == LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.tailType > Tail.NONE) { @@ -6739,12 +6713,6 @@ public final class Mutations extends MutationsHelper setTailType(Tail.AVIAN); changes++; } - if (player.tailType != Tail.GRIFFIN && player.lowerBody == LowerBody.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nThe fan of feathers at your backside reacts under the statue magic effects. An otherworldly magic envelopes it, making the feathers twist and converge in an odd fashion, at the same time that the small bump of your tail elongates until becoming long enough to reach far past your knee."); - outputText("\n\nBefore you notice it, the long feathers have merged into a tuft of " + player.skin.coat.color + " at the end of your now long tail, while the short, downy ones now cover every inch of bare skin that the elongated appendage now have. Well, seems like you gained a griffin-like tail! It’s quite leonine in shape, but its appearance remains a bit avian."); - setTailType(Tail.GRIFFIN); - changes++; - } //Arms if (player.arms.type != Arms.AVIAN && player.tailType == Tail.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.skin.hasChitin()) { @@ -6769,12 +6737,6 @@ public final class Mutations extends MutationsHelper setArmType(Arms.AVIAN); changes++; } - if (player.arms.type != Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nThe skin on your arms change a bit, as the " + player.skin.coat.color2 + " turning into soft, feline fur. Your palms and fingers acquire pink paw pads, while at the end of each one of your fingers, the talons sharpen and become prehensile, adopting a posture better suited to pounce over a unsuspecting victim."); - outputText("\n\nFrom the fringe on your elbows to your armpits, your " + player.skin.coat.color + " colored plumage remains the same. At the end, you’ve gotten gryphon-like arms!."); - setArmType(Arms.GRYPHON); - changes++; - } //Wings if (player.wings.type != Wings.FEATHERED_AVIAN && player.arms.type == Arms.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.wings.type == Wings.DRACONIC_SMALL || player.wings.type == Wings.DRACONIC_LARGE || player.wings.type == Wings.DRACONIC_HUGE || player.wings.type == Wings.BAT_LIKE_TINY || player.wings.type == Wings.BAT_LIKE_LARGE || player.wings.type == Wings.BAT_LIKE_LARGE_2 || player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) { @@ -6829,12 +6791,6 @@ public final class Mutations extends MutationsHelper setEarType(Ears.AVIAN); changes++; } - if (player.ears.type != Ears.GRYPHON && player.tailType == Tail.GRIFFIN && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nAfter another session under the statue magic, the lingering effects seem to having taken a toll on you, as your ears buzz. The sound turns worse for a second, and then vanish. You hear for a second a light flapping sound, and then, nothing.\n\nWhen everything seems to have finished, you realize that your hearing range has changed, and while your overall sense of hearing remains the same, pinpointing the source of a sounds is much easier. On a nearby reflection you discover the reason: "); - outputText("two triangular ears have sprouted at your head, streamlined to flight and with a gryphon like appearance. A short layer of downy feathers covers them, the tip having a distinctive tuft. Checking that your ears are rightly placed on the new auricles, you smile happily at the sight of your gryphon ears, noting how well they compliment your looks."); - setEarType(Ears.GRYPHON); - changes++; - } //Skin if (!player.hasFeather() && changes < changeLimit && type == 0 && rand(4) == 0) { if (player.hasFur()) { @@ -6871,13 +6827,6 @@ public final class Mutations extends MutationsHelper player.skin.growCoat(Skin.FEATHER,{color:player.skin.coat.color}); changes++; } - //Eyes - if (player.eyes.type != Eyes.GRYPHON && player.arms.type == Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { - outputText("\n\nThe mysterious energy coming from the statue continues adapting your body into a more fierce, strong shape. This time, it has affected you eyesight, as you suddenly notice how the long distances that you once had trouble seeing are clear as if you were in front of them, and that you can perceive even the minimal move even from several miles afar."); - outputText("\n\nChecking your changes on the river, you see clearly how your sclera has acquired a golden-orange coloration, as well as your outer iris, separated from the former by a thin circle of black. Both your pupil and your inner iris, which now has enlarged, are solid black. Now you’ll have a blessed vision due those raptor, gryphon-like eyes."); - setEyeTypeAndColor(Eyes.GRYPHON, "golden-orange"); - changes++; - } if (changes == 0 && type == 0) outputText("\n\nIt seems like the fruit had no effect this time. Maybe it was spoiled, or kept in storage for too much time?"); if (type == 0) player.refillHunger(15); flags[kFLAGS.TIMES_TRANSFORMED] += changes; diff --git a/classes/classes/Items/MutationsHelper.as b/classes/classes/Items/MutationsHelper.as index 3d78201379..fba6557316 100644 --- a/classes/classes/Items/MutationsHelper.as +++ b/classes/classes/Items/MutationsHelper.as @@ -302,7 +302,6 @@ import classes.BodyParts.Wings; [Arms.FOX, StatusEffects.UnlockedFoxArms], [Arms.GARGOYLE, null], [Arms.GARGOYLE_2, null], - [Arms.GRYPHON, null], [Arms.HARPY, StatusEffects.UnlockedHarpyArms], [Arms.HUMAN, null], [Arms.KITSUNE, StatusEffects.UnlockedKitsuneArms], @@ -340,7 +339,6 @@ import classes.BodyParts.Wings; [Ears.FERRET, null], [Ears.FOX, StatusEffects.UnlockedFoxEars], [Ears.GOAT, StatusEffects.UnlockedGoatEars], - [Ears.GRYPHON, null], [Ears.HORSE, null], [Ears.HUMAN, null], [Ears.KANGAROO, null], @@ -377,7 +375,6 @@ import classes.BodyParts.Wings; [Eyes.FOX, StatusEffects.UnlockedFoxEyes], [Eyes.GEMSTONES, null], [Eyes.GORGON, StatusEffects.UnlockedGorgonEyes], - [Eyes.GRYPHON, null], [Eyes.HUMAN, null], [Eyes.MANTICORE, null], [Eyes.ONI, StatusEffects.UnlockedOniEyes], @@ -513,7 +510,6 @@ import classes.BodyParts.Wings; [LowerBody.GARGOYLE, null], [LowerBody.GARGOYLE_2, null], [LowerBody.GOO, null], - [LowerBody.GRYPHON, null], [LowerBody.HARPY, StatusEffects.UnlockedHarpyLegs], [LowerBody.HOOFED, StatusEffects.UnlockedHoofedLegs], [LowerBody.HUMAN, null], @@ -602,7 +598,6 @@ import classes.BodyParts.Wings; [Tail.GARGOYLE, null], [Tail.GARGOYLE_2, null], [Tail.GOAT, StatusEffects.UnlockedGoatTail], - [Tail.GRIFFIN, null], [Tail.HARPY, StatusEffects.UnlockedHarpyTail], [Tail.HORSE, null], [Tail.KANGAROO, null], diff --git a/classes/classes/Items/WeaponLib.as b/classes/classes/Items/WeaponLib.as index 069ca220a5..e6163eb764 100644 --- a/classes/classes/Items/WeaponLib.as +++ b/classes/classes/Items/WeaponLib.as @@ -82,9 +82,8 @@ package classes.Items public const S_BLADE:Spellblade = new Spellblade(); public const S_GAUNT:Weapon = new Weapon("S.Gaunt","S.Gauntlet","spiked gauntlet","a spiked gauntlet","spiked punch",0,200,"This single metal gauntlet has the knuckles tipped with metal spikes. Though it lacks the damaging potential of other weapons, the sheer pain of its wounds has a chance of stunning your opponent."); public const SCARBLD:Weapon = new ScarredBlade(); - public const SCECOMM:Weapon = new Weapon("SceComm", "SceptreOfCom", "Sceptre of Command", "a Sceptre of Command", "smack", 4, 600, "This enchanted scepter empowers the abilities and control of summoners over their minions."); - public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); + public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); public const SESPEAR:SeraphicSpear = new SeraphicSpear(); public const SNAKESW:Weapon = new Weapon("SnakeSw", "SnakeSword", "Snake Sword", "a Snake Sword", "whip-slash", 20, 800, "This unassuming double-edged sword is comprised of segmented pieces which, when swung, will lash out akin to a whip."); public const SPEAR :Spear = new Spear(); @@ -92,7 +91,6 @@ package classes.Items public const TCLAYMO:TopazClaymore = new TopazClaymore(); public const TRASAXE:Weapon = new Weapon("TraSAxe","Train.S.Axe", "training soul axe", "a training soul axe", "cleave", 1, 80, "This axe was specialy forged and enhanted to help novice soul cultivatiors to train their soulforce. Still if situation calls for it it could be used as a normal weapon."); public const TRIDENT:Trident = new Trident(); - public const TRSTSWO:Weapon = new Weapon("TrStSwo","TruestrikeSword", "Truestrike sword", "a Truestrike sword", "slash", 5, 400, "Lia will write desc of it...soon."); public const U_STAFF:UnicornStaff = new UnicornStaff(); public const URTAHLB:Weapon = new Weapon("UrtaHlb","UrtaHlb","halberd","a halberd","slash",30,1200,"Urta's halberd. How did you manage to get this?","Large"); public const VBLADE :Weapon = new Weapon("V.Blade","V.Blade", "V.Blade", "a V.Blade", "slash", 28, 2240, "A peculiar sword. The letter V is engraved into the blade perhaps its former owner name."); diff --git a/classes/classes/Items/Weapons/FlyWhisk.as b/classes/classes/Items/Weapons/FlyWhisk.as index e5e7cff354..012ce69696 100644 --- a/classes/classes/Items/Weapons/FlyWhisk.as +++ b/classes/classes/Items/Weapons/FlyWhisk.as @@ -12,7 +12,7 @@ package classes.Items.Weapons public function FlyWhisk() { - super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 400, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); + super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 800, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); } } } \ No newline at end of file diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index a001005300..77c0cda15d 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -260,7 +260,7 @@ import flash.utils.getQualifiedClassName; protected override function maxLust_base():Number { //Base lust - var temp:Number = 70 + this.bonusLust; + var temp:Number = 100 + this.bonusLust; //Apply perks if (findPerk(PerkLib.BasicSelfControl) >= 0) temp += 15; if (findPerk(PerkLib.HalfStepToImprovedSelfControl) >= 0) temp += 25; @@ -286,11 +286,6 @@ import flash.utils.getQualifiedClassName; if (findPerk(PerkLib.GclassHeavenTribulationSurvivor) >= 0) temp += (75 * (1 + newGamePlusMod())); //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); - temp += this.level * 2; - if (this.level >= 24) temp += (this.level - 23) * 3; - if (this.level >= 42) temp += (this.level - 42) * 5; - if (this.level >= 72) temp += (this.level - 72) * 10; - if (this.level >= 102) temp += (this.level - 102) * 20; return temp; } @@ -350,21 +345,6 @@ import flash.utils.getQualifiedClassName; if (this.level >= 20) temp += 50; if (this.level >= 22) temp += 50; } - if (findPerk(PerkLib.SoulSprite) >= 0) { - if (this.level >= 24) temp += 60; - if (this.level >= 26) temp += 60; - if (this.level >= 28) temp += 60; - } - if (findPerk(PerkLib.SoulScholar) >= 0) { - if (this.level >= 30) temp += 70; - if (this.level >= 32) temp += 70; - if (this.level >= 34) temp += 70; - } - if (findPerk(PerkLib.SoulElder) >= 0) { - if (this.level >= 36) temp += 80; - if (this.level >= 38) temp += 80; - if (this.level >= 40) temp += 80; - } if (findPerk(PerkLib.InsightfulResourcesI) >= 0) temp += Math.round((this.wis*5) * (1 + newGamePlusMod())); if (findPerk(PerkLib.DeityJobMunchkin) >= 0) temp *= 1.1; if (hasPerk(PerkLib.EnemyTrueDemon)) temp = 0; diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index f667b46769..f116fc7994 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -331,7 +331,7 @@ public class PerkLib public static const CatlikeNimbleness:PerkType = mk("Cat-like Nimbleness", "Cat-like Nimbleness", "Your transformed joins allows you to move more swiftly and with greater nimbleness.", "You choose the 'Cat-like Nimbleness' perk. Your body joints due to repeadly usage of cat-like flexibility became more nimble."); - public static const CatlikeNimblenessEvolved:PerkType = mk("Cat-like Nimbleness", "Cat-like Nimbleness", + public static const CatlikeNimblenessEvolved:PerkType = mk("Cat-like Nimbleness (Evolved)", "Cat-like Nimbleness (Evolved)", "Your nimble body allows you to move more swiftly and with greater nimbleness than before.", "You choose the 'Cat-like Nimbleness (Evolved)' perk. Continuous usage of cat-like flexibility caused it to undergone change."); public static const Channeling:PerkType = mk("Channeling", "Channeling", @@ -3123,6 +3123,7 @@ public class PerkLib .requireLib(50) .requireStatusEffect(StatusEffects.KnowsArouse, "Arouse spell"); JobCourtesan.requirePerk(JobSeducer) + .requirePerk(Heroism) .requireLib(50) .requireLevel(12); DazzlingDisplay.requirePerk(JobCourtesan) @@ -3230,23 +3231,23 @@ public class PerkLib // CORRUPTION //------------ //Slot 7 - Corrupted Libido - lust raises 10% slower. - CorruptedLibido.requireCor(10); + CorruptedLibido.requireCor(25); CorruptedLibido.defaultValue1 = 20; //Slot 7 - Seduction (Must have seduced Jojo) - Seduction.requireCor(15); + Seduction.requireCor(50); //Slot 7 - Nymphomania - Nymphomania.requireCor(15) + Nymphomania.requireCor(75) .requirePerk(CorruptedLibido); //Slot 7 - UNFINISHED :3 - Acclimation.requireCor(15) + Acclimation.requireCor(50) .requirePerk(CorruptedLibido) .requireMinLust(20); - SenseCorruption.requireCor(15); + SenseCorruption.requireCor(75); //Tier 1 Corruption Perks - acclimation over-rides - Sadist.requireCor(20) + Sadist.requireCor(60) .requirePerk(CorruptedLibido) .requireLevel(6); - ArousingAura.requireCor(25) + ArousingAura.requireCor(70) .requirePerk(CorruptedLibido) .requireLevel(6); //Tier 2 @@ -3366,9 +3367,13 @@ public class PerkLib BlackHeart.requirePerk(DarkCharm).requireCor(90).requireCustomFunction(function (player:Player):Boolean { return player.demonScore() >= 6; }, "Demon race"); + CatlikeNimbleness.requirePerk(Flexibility).requireCustomFunction(function (player:Player):Boolean { - return player.catScore() >= 4 || player.nekomataScore() >= 4 || player.cheshireScore() >= 4; + return player.catScore() >= 4 || player.nekomataScore() >= 4 || player.cheshireScore() >= 4 || player.manticoreScore() >= 4 || player.sphinxScore() >= 4; }, "Any cat race"); + + //CatlikeNimbleness.requirePerk(Flexibility); + DraconicLungs.requirePerk(DragonFireBreath) .requirePerk(DragonIceBreath) .requirePerk(DragonLightningBreath) diff --git a/classes/classes/Player.as b/classes/classes/Player.as index f7313d4933..fa39ebfc03 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -700,11 +700,6 @@ use namespace CoC; return _jewelry.value; } - //Shields for Bash - public function isShieldsForShieldBash():Boolean - { - return shield == game.shields.BUCKLER || shield == game.shields.GREATSH || shield == game.shields.KITE_SH || shield == game.shields.TRASBUC || shield == game.shields.TOWERSH || shield == game.shields.DRGNSHL || shield == game.shields.SANCTYN || shield == game.shields.SANCTYL || shield == game.shields.SANCTYD; - } //override public function get shields override public function get shieldName():String { return _shield.name; @@ -1285,13 +1280,11 @@ use namespace CoC; { //Determine race type: var race:String = "human"; - if (catScore() >= 4) + if (catScore() >= 4) { if (catScore() >= 8) { if (isTaur() && lowerBody == LowerBody.CAT) { race = "cat-taur"; - if (faceType == Face.HUMAN) - race = "sphinx-morph"; // no way to be fully feral anyway } else { race = "cat-morph"; @@ -1312,6 +1305,10 @@ use namespace CoC; } } } + if (sphinxScore() >= 13) + { + race = "Sphinx"; + } if (nekomataScore() >= 11) { race = "Nekomanta"; @@ -3721,39 +3718,39 @@ use namespace CoC; End("Player","racialScore"); return centaurCounter; } - + public function sphinxScore():Number { var sphinxCounter:Number = 0; if (isTaur()) { - if (lowerBody == 1 || lowerBody == 21) + if (lowerBody == LowerBody.CAT) sphinxCounter += 2; - if (tailType == 8 && (lowerBody == 1 || lowerBody == 21)) + if (tailType == Tail.CAT && (lowerBody == LowerBody.CAT)) sphinxCounter++; - if (skinType == 0 && (lowerBody == 1 || lowerBody == 21)) + if (skinType == 0 && (lowerBody == LowerBody.CAT)) sphinxCounter++; - if (arms.type == 26 && (lowerBody == 1 || lowerBody == 21)) + if (arms.type == Arms.SPHINX && (lowerBody == LowerBody.CAT)) sphinxCounter++; - if (ears.type == 0 && (lowerBody == 1 || lowerBody == 21)) + if (ears.type == Ears.LION && (lowerBody == LowerBody.CAT)) sphinxCounter++; - if (faceType == Face.CAT_CANINES && (lowerBody == 1 || lowerBody == 21)) + if (faceType == Face.CAT_CANINES && (lowerBody == LowerBody.CAT)) sphinxCounter++; } if (eyes.type == Eyes.CAT_SLITS) sphinxCounter++; - if (ears.type == 5) - sphinxCounter++; - if (tongue.type == 5) + if (ears.type == Ears.LION) sphinxCounter++; - if (tailType == 8) + if (tongue.type == Tongue.CAT) sphinxCounter++; - if (tailType == 37) + if (tailType == Tail.CAT) sphinxCounter++; - if (lowerBody == 9) + if (tailType == Tail.LION) sphinxCounter++; - if (faceType == 0) + if (lowerBody == LowerBody.CAT) + sphinxCounter++; + if (faceType == Face.CAT_CANINES) sphinxCounter++; - if (wings.type == 29) + if (wings.type == Wings.FEATHERED_SPHINX) sphinxCounter += 2; if (findPerk(PerkLib.ChimericalBodyPerfectStage) >= 0) sphinxCounter += 10; @@ -3762,10 +3759,11 @@ use namespace CoC; if (findPerk(PerkLib.Flexibility) > 0) sphinxCounter++; if (findPerk(PerkLib.CatlikeNimbleness) > 0) - sphinxCounter++; + sphinxCounter += 1; return sphinxCounter; } + //Determine Unicorn Rating public function unicornScore():Number { if (horns.type != Horns.UNICORN) @@ -5123,8 +5121,6 @@ use namespace CoC; min += 10; if(eggs() >= 40) min += 10; } - //Werebeast - if (hasPerk(PerkLib.Lycanthropy)) min += perk(findPerk(PerkLib.Lycanthropy)).value1; //Jewelry effects if (jewelryEffectId == JewelryLib.MODIFIER_MINIMUM_LUST) { @@ -5332,7 +5328,7 @@ use namespace CoC; } }//+15(60)((70))(((140))) / 10 - 20(50 - 60)((70 - 80))(((130 - 140))) if (werewolfScore() >= 6) { - if (werewolfScore() >= 12) { + if (wolfScore() >= 12) { maxStr += (100 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (60 * newGamePlusMod); @@ -5370,8 +5366,8 @@ use namespace CoC; } }//+10 / 10 - 20 - - + + if (sphinxScore() >= 5) { if (sphinxScore() >= 14) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); @@ -5381,10 +5377,8 @@ use namespace CoC; maxInt += (100 * newGamePlusMod); maxWis += (40 * newGamePlusMod); } - }//+50/-20/+40/+100/+40 - - - + }//+40/-20/+40/+100/+35 + if (nekomataScore() >= 11) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); else maxSpe += (40 * newGamePlusMod); @@ -6170,22 +6164,22 @@ use namespace CoC; } if (findPerk(PerkLib.CarefulButRecklessAimAndShooting) >= 0 && findPerk(PerkLib.ColdAim) < 0) maxTou -= (15 * newGamePlusMod); if (hasPerk(PerkLib.Lycanthropy)) { - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { + if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 3)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { maxStr += (10 * newGamePlusMod); maxTou += (10 * newGamePlusMod); maxSpe += (10 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { + if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 2)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { maxStr += (20 * newGamePlusMod); maxTou += (20 * newGamePlusMod); maxSpe += (20 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { + if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 1)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { maxStr += (30 * newGamePlusMod); maxTou += (30 * newGamePlusMod); maxSpe += (30 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { maxStr += (40 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (40 * newGamePlusMod); diff --git a/classes/classes/PlayerAppearance.as b/classes/classes/PlayerAppearance.as index 314b1eed96..364c8dee72 100644 --- a/classes/classes/PlayerAppearance.as +++ b/classes/classes/PlayerAppearance.as @@ -1025,8 +1025,6 @@ public class PlayerAppearance extends BaseContent { outputText(" Your " + num2Text(player.legCount) + " legs are equally covered in [skin coat.color] fur, ending on red-panda paws with short claws. They have a nimble and strong build, in case you need to escape from something."); else if (player.lowerBody == LowerBody.AVIAN) outputText(" You have strong thighs perfect for launching you into the air which end in slender, bird-like legs, covered with a [skin coat.color] plumage down to your knees and slightly rough, [skin] below. You have digitigrade feet, with toes that end in sharp talons."); - else if (player.lowerBody == LowerBody.GRYPHON) - outputText(" You have strong thighs perfect for launching you into the air ending in furred, feline legs, covered with a coat of soft, [skin coat.color2] fur. Your have digitigrade feet, lion-like, with soft, pink soles and paw pads, with feline toes ending in sharp, retractile claws."); if (player.findPerk(PerkLib.Incorporeality) >= 0) outputText(" Of course, your [legs] are partially transparent due to their ghostly nature."); // isn't goo transparent anyway? } @@ -1158,9 +1156,6 @@ public class PlayerAppearance extends BaseContent { else if (player.tailType == Tail.AVIAN) { outputText(" A tail shaped like a fan of long, [skin coat.color] feathers rests above your " + assDescript() + ", twitching instinctively to help guide you if you were to take flight."); } - else if (player.tailType == Tail.GRIFFIN) { - outputText(" From your backside hangs a long tail, leonine in shape and covered mostly by a layer of [skin coat.color2] fur with a tip made of a tuft of [skin coat.color] colored feathers. It moves sinuously as you walk."); - } } public function describeArms():void { //Wing arms @@ -1223,8 +1218,6 @@ public class PlayerAppearance extends BaseContent { outputText(" Your arms are covered in [skin coat.color] up to your shoulder. They end with a pair of five-toed cat paws armed with lethal claws."); else if (armType == Arms.AVIAN) outputText(" Your arms are covered with [skin coat.color] colored feathers just a bit past your elbow. Your humanoid hands have " + player.skinTone + ", slightly rough skin and end in short claws."); - else if (armType == Arms.GRYPHON) - outputText(" The feathers on your arms reach a bit past your elbows, the fringe of [skin coat.color] plumage leading to your " + player.skinTone + ", slightly rough skinned hands. They end in short, avian claws."); if (player.wings.type == Wings.BAT_ARM ){ outputText(" Your arm bones are thin and light in order to allow flight. You have grown a few extra fingers, which allow you to hold various items even with your abnormal hands, albeit at the cost of preventing flight while doing so."); } @@ -1277,7 +1270,7 @@ public class PlayerAppearance extends BaseContent { outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as a harpy."); if (wingType == Wings.FEATHERED_ALICORN) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an alicorn."); - if (wingType == Wings.FEATHERED_SPHINX) + if (wingType == Wings.FEATHERED_SPHINX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an sphinx."); if (wingType == Wings.FEATHERED_PHOENIX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the crimson-colored wings folded close, they can unfurl to allow you to soar as gracefully as a phoenix."); @@ -1487,9 +1480,6 @@ public class PlayerAppearance extends BaseContent { else if(eyeType == Eyes.FERAL){ outputText(" In your eyes sometime dance a green light. It encompass your entire pupil when you let the beast within loose."); } - else if(eyeType == Eyes.GRYPHON){ - outputText(" Your gifted eyes have a bird-like appearance, having an [eyecolor] sclera and a large, black iris. A thin ring of black separates your sclera from your outer iris."); - } else outputText(" Your eyes are [eyecolor]."); } public function describeHairAndEars():void { @@ -1570,9 +1560,6 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" Two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } - if (earType == Ears.GRYPHON){ - outputText(" A duo of triangular, streamlined ears are located at each side of your head, helping you to pinpoint sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); - } // if (player.gills.type == Gills.FISH) { @@ -1657,9 +1644,6 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" The [hair] atop your head compliments you quite well, and two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } - if (earType == Ears.GRYPHON){ - outputText(" Two triangular ears part your [hair] at each side of your head. They’re streamlined and adapted to fly, and are quite useful to locate sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); - } // if(player.antennae.type == Antennae.MANTIS) { @@ -1854,7 +1838,7 @@ public class PlayerAppearance extends BaseContent { else if(skin.hasLightningShapedTattoo()) outputText(" covered with a few glowing lightning tattoos"); outputText(". Your mouth is somewhat human save for your wolf-like canines."); } else if (player.hasPartialCoat(Skin.FUR)) { - outputText(" Your face looks human save for your wolf-like canines. On your cheek you have [skin coat]."); + outputText(" Your face looks human save for your wolf-like canines. You've got [skin coat], hiding your [skin noadj] underneath your furry visage."); } else { outputText(" Your face looks human save for your wolf-like canines, but overlaid with glittering [skin coat]."); } @@ -2007,11 +1991,11 @@ public class PlayerAppearance extends BaseContent { } if (faceType == Face.RED_PANDA) { outputText(" Your face has a distinctive animalistic muzzle, proper from a red-panda, complete with a cute pink nose."); - if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat.color] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") + if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") } if (faceType == Face.AVIAN) { outputText(" Your visage has a bird-like appearance, complete with an avian beak. A couple of small holes on it makes up for your nostrils, while a long, nimble tongue is hidden inside."); - if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat].") + if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat] feathers.") } // } @@ -2044,6 +2028,12 @@ public function RacialScores():void { if (player.bunnyScore() >= 4) outputText("\nBunny-morph: " + player.bunnyScore() + " (+" + (10 * (1 + player.newGamePlusMod())) + " max Spe)"); else if (player.bunnyScore() >= 1 && player.bunnyScore() < 4) outputText("\nBunny-morph: " + player.bunnyScore() + ""); else if (player.bunnyScore() < 1) outputText("\nBunny-morph: 0"); + + //Sphinx + if (player.sphinxScore() >= 14) outputText("\nSphinx: " + player.sphinxScore() + " (+" + (50 * (1 + player.newGamePlusMod())) + " max Str, -" + (20 * (1 + player.newGamePlusMod())) + " max Tou, +" + (40 * (1 + player.newGamePlusMod())) + " max Spe, +" + (100 * (1 + player.newGamePlusMod())) + " max Int, +" + (40 * (1 + player.newGamePlusMod())) + " max Wis)"); + else if (player.sphinxScore() >= 1 && player.sphinxScore() < 14) outputText("\nSphinx: " + player.sphinxScore() + ""); + else if (player.sphinxScore() < 1) outputText("\nSphinx: 0"); + if (player.catScore() >= 8) { outputText("\nCat-girl/Cat-boy/Cat Morph: " + player.catScore() + " ("); if (player.findPerk(PerkLib.Flexibility) > 0) outputText("+" + (70 * (1 + player.newGamePlusMod())) + " "); diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index c152f0d6f2..7051e95a3d 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -137,21 +137,12 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers2); } } - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) { - if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, -1); - if (player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 2, -1); - if (player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 3, -1); - if (player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 4, -1); - if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) <= 0) { - player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers3); - } - } //Sidonie checks if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { if (flags[kFLAGS.LUNA_JEALOUSY] < 200) flags[kFLAGS.LUNA_JEALOUSY]++; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12 || flags[kFLAGS.LUNA_FOLLOWER] == 14 || flags[kFLAGS.LUNA_FOLLOWER] == 16) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11 || flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 15) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 10) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; + if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 9) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); } Begin("PlayerEvents","hourlyCheckRacialPerks"); needNext = hourlyCheckRacialPerks(); @@ -442,12 +433,7 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { } if (player.werewolfScore() >= 6 && player.hasPerk(PerkLib.LycanthropyDormant)) { outputText("\nAs you become wolf enough your mind recedes into increasingly animalistic urges. It will only get worse as the moon comes closer to full. Gained Lycanthropy.\n"); - var bonusStats:Number = 0; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; - player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); + player.createPerk(PerkLib.Lycanthropy,0,0,0,0); player.removePerk(PerkLib.LycanthropyDormant); needNext = true; } @@ -598,62 +584,47 @@ if (CoC.instance.model.time.hours > 23) { //Once per day if (flags[kFLAGS.CHI_CHI_LVL_UP] < 2) flags[kFLAGS.CHI_CHI_LVL_UP] = 2; else flags[kFLAGS.CHI_CHI_LVL_UP]++; } - //Mishaps reset - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.removeStatusEffect(StatusEffects.CampLunaMishaps1); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.removeStatusEffect(StatusEffects.CampLunaMishaps2); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps3)) player.removeStatusEffect(StatusEffects.CampLunaMishaps3); //Full moon if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { flags[kFLAGS.LUNA_MOON_CYCLE]++; - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; if (player.hasPerk(PerkLib.Lycanthropy)) { - var changeV:Number = 10 * player.newGamePlusMod(); - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { + if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nYou can’t help but notice the moon is almost full as it rises up. It seems transfixing like it is calling to you."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,10); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { + if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nWhen the almost-full moon appears it causes your heart to race with excitement. You hearing seems better than ever. Every breath brings a rush of smells through your nose that seem much more pronounced than they should."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,20); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { + if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { outputText("\nYou gaze at the moon and it seems to gaze back into you. Something is coming and it won’t be long now. You feel like you are crawling in your skin. It feels like tear out of your body and be born anew."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time.\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,30); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { - outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + ".\n"); - dynStats("str", changeV, "tou", changeV, "spe", changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,40); + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { + outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + "."); + dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); if (player.hasCock() || (player.gender == 3 && rand(2) == 0)) player.goIntoRut(false); else if (player.hasVagina()) player.goIntoHeat(false); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1) { - outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,30); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nThe moon is waning, you are feeling less powerful."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2) { - outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,20); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nThe moon is waning, you are feeling less powerful."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3) { - outputText("\nThe moon is waning, you are feeling less powerful.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,10); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nThe moon is waning, you are feeling less powerful."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 4) { - outputText("\nIt's a new moon tonight, you feel somewhat weak.\n"); - dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); - player.setPerkValue(PerkLib.Lycanthropy,1,0); + if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 4) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + outputText("\nIt's a new moon tonight, you feel somewhat weak."); + dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); } - needNext = true; } } } @@ -754,7 +725,7 @@ if (CoC.instance.model.time.hours > 23) { //Once per day player.createPerk(PerkLib.ImprovedVenomGland, 0, 0, 0, 0); } //Flexibility perk - if (player.tailType == Tail.CAT && player.lowerBody == LowerBody.CAT && player.ears.type == Ears.CAT) { //Check for gain of cat agility - requires legs, tail, and ears + if (player.tailType == Tail.CAT || player.tailType == Tail.MANTICORE_PUSSYTAIL && player.lowerBody == LowerBody.CAT && player.ears.type == Ears.CAT || player.ears.type == Ears.LION) { //Check for gain of cat agility - requires legs, tail, and ears if (player.findPerk(PerkLib.Flexibility) < 0) { outputText("\nWhile stretching, you notice that you're much more flexible than you were before. Perhaps this will make it a bit easier to dodge attacks in battle?\n\n(Gained Perk: Flexibility)\n"); player.createPerk(PerkLib.Flexibility, 0, 0, 0, 0); diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index 48a3c3cbc0..d0d3cd8619 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -557,13 +557,6 @@ public class PlayerInfo extends BaseContent { if (flags[kFLAGS.LUNA_FOLLOWER] > 3) { interpersonStats += "Luna Affection: " + Math.round(flags[kFLAGS.LUNA_AFFECTION]) + "%\n"; interpersonStats += "Luna Jealousy: " + Math.round(flags[kFLAGS.LUNA_JEALOUSY]) + "%\n"; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; - else interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; - interpersonStats += "\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 3) interpersonStats += "Luna lvl: 27\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 2) interpersonStats += "Luna lvl: 21\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 1) interpersonStats += "Luna lvl: 15\n"; - if (flags[kFLAGS.LUNA_LVL_UP] == 0) interpersonStats += "Luna lvl: 9\n"; } if (flags[kFLAGS.OWCAS_ATTITUDE] > 0) interpersonStats += "Owca's Attitude: " + flags[kFLAGS.OWCAS_ATTITUDE] + "\n"; diff --git a/classes/classes/Saves.as b/classes/classes/Saves.as index a574dc0c17..4e7cfaff2c 100644 --- a/classes/classes/Saves.as +++ b/classes/classes/Saves.as @@ -358,7 +358,7 @@ public function saveLoad(e:MouseEvent = null):void clearOutput(); outputText("Where are my saves located?\n"); - outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); + outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); outputText("In Windows Vista/7 (Chrome):
Users/{username}/AppData/Local/Google/Chrome/User Data/Default/Pepper Data/Shockwave Flash/WritableRoot/#SharedObjects/{GIBBERISH}/
\n\n"); outputText("Inside that folder it will saved in a folder corresponding to where it was played from. If you saved the CoC.swf to your HDD, then it will be in a folder called localhost. If you played from my website, it will be in fenoxo.com. The save files will be labelled CoC_1.sol, CoC_2.sol, CoC_3.sol, etc.
\n\n"); outputText("Why do my saves disappear all the time?\nThere are numerous things that will wipe out flash local shared files. If your browser or player is set to delete flash cookies or data, that will do it. CCleaner will also remove them. CoC or its updates will never remove your savegames - if they disappear something else is wiping them out.\n\n"); diff --git a/classes/classes/Scenes/Areas/HighMountains.as b/classes/classes/Scenes/Areas/HighMountains.as index 1c1dd89704..3ceeaa64fe 100644 --- a/classes/classes/Scenes/Areas/HighMountains.as +++ b/classes/classes/Scenes/Areas/HighMountains.as @@ -106,10 +106,6 @@ use namespace CoC; phoenixScene.encounterPhoenix1(); return; } - if ((player.hasKeyItem("Gryphon Statuette") < 0 || player.hasKeyItem("Peacock Statuette") < 0) && rand(4) == 0) { - caveScene(); - return; - } //10% chance to mino encounter rate if addicted if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_STATE] > 0 && rand(10) == 0) { spriteSelect(44); @@ -182,7 +178,6 @@ use namespace CoC; return; } } - //\"Chicken Harpy\" by Jay Gatsby and not Savin he didn't do ANYTHING //Initial Intro public function chickenHarpy():void @@ -215,6 +210,7 @@ use namespace CoC; if (player.hasItem(consumables.OVIELIX, 3)) addButton(1, "Give Three", giveThreeOviElix); addButton(4, "Leave", leaveChickenx); } + //If Give Two public function giveTwoOviElix():void { @@ -232,6 +228,7 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.PURPLEG); addButton(5, "White", getHarpyEgg, consumables.WHITEEG); } + //If Give Three public function giveThreeOviElix():void { @@ -248,6 +245,7 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.L_PRPEG); addButton(5, "White", getHarpyEgg, consumables.L_WHTEG); } + //All Text public function getHarpyEgg(itype:ItemType):void { @@ -257,6 +255,7 @@ use namespace CoC; outputText("You take " + itype.longName + ", and the harpy nods in regards to your decision. Prepping her cart back up for the road, she gives you a final wave goodbye before heading back down through the mountains.\n\n"); inventory.takeItem(itype, chickenHarpy); } + //If No public function leaveChickenx():void { @@ -266,38 +265,5 @@ use namespace CoC; outputText("\n\nYou decide to take your own path, heading back to camp while you can."); doNext(camp.returnToCampUseOneHour); } - - public function caveScene():void { - clearOutput(); - outputText("Wandering once more around the rocky cliffs on the higher area of the mountains, you find yourself increasingly bores, as you spend the most of the hour tossing aside pebbles and rocks that fell on the path, or crushing the solidified snow with your footwear.\n\n"); - outputText("On the middle of your careless, and surprisingly peaceful stroll, you happen to find an alcove carved on the cliff’s stone. It’s not very big, maybe three or four feet tall, five feet wide and two feet deep, resting one feet above the path ground, so you’re forced to get on your knees to examine it better.\n\n"); - outputText("The alcove itself is seemingly empty, though after a better examination, the back has engraved on the cliff rock a long, detailed inscription. Sadly, you can’t get a word from it, since it’s written in a strange, old language that’s doesn’t barely resemble anything that you’ve found in Mareth. Carved on each side there area stylized figures of avian creatures, "); - outputText("the most noticeable ones being a gryphon with the wings spread, and in the other side, a peacock doing the same with its tail. As you put your hands on them, you notice a that a shape vaguely resembling a hand forming in the floor of the alcove.\n\n"); - outputText("Tentatively you put one hand on place"); - if (player.avianScore() < 9) { - outputText(", but absolutely nothing happens. Maybe the magic or whatever that thing was supposed to do stopped working long ago? In any case, you had enough looking for a while, and since you’re not getting anything useful from there, you resume your walk.\n\n"); - doNext(camp.returnToCampUseOneHour); - } - else { - outputText(" and gasp in surprise as the figures depicting the creatures at the sides of the alcove recede as you do so, leaving in place two smaller alcoves with two statuettes on them.\n\n"); - outputText("The first one, made on brass and bronze, depicts a fierce looking gryphon in an assault stance. Every bit of the artifact emanates an unnatural strength. On the other side, a statue made of alabaster and ruby gemstones is shaped as a graceful peacock. Strangely, besides being pretty, the way it’s crafted gives you a weird, mystic feel.\n\n"); - outputText("You try to grab both, but as soon as you put your hands in one of them, the alcove with the other starts closing. Seems like you’ll have only one choice here.\n\n"); - menu(); - addButton(0, "Gryphon", caveSceneGryphon); - addButton(1, "Peacock", caveScenePeacock); - } - } - public function caveSceneGryphon():void { - outputText("Picking the brass-forged statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); - outputText("With nothing useful left to you here, you resume your walk and return to your camp with the gryphon idol on your bag.\n\n"); - player.createKeyItem("Gryphon Statuette", 0, 0, 0, 0); - doNext(camp.returnToCampUseOneHour); - } - public function caveScenePeacock():void { - outputText("Picking the alabaster statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); - outputText("With nothing useful left to you here, you resume your walk and return to your camp with the peacock idol on your bag.\n\n"); - player.createKeyItem("Peacock Statuette", 0, 0, 0, 0); - doNext(camp.returnToCampUseOneHour); - } } } diff --git a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as index 4a424f9620..ceec9b80eb 100644 --- a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as +++ b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as @@ -589,7 +589,7 @@ public class MinervaPurification extends BaseContent outputText("Giving me these daughters is the greatest gift you could have given me...
\" she says softly as she holds you gently, bulge pressed gently against bulge, her hands stroking your stomach as you caress hers."); outputText("\n\nThe two of you lay here against the tree cuddling together as a pair of expecting parents"); if (flags[kFLAGS.MINERVA_CHILDREN] > 0) outputText(", your daughters curled up with you and Minerva; they seem very happy, as if they all know that they are going to be getting more sisters soon"); - outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?\""); + outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?"); } else { //Not pregnant or pregnant with something else. outputText("You can't help wondering if anything has changed since you had been with her last. If her body was any hint at how fertile she now is, it was likely very easy for her to get pregnant. It's not hard to spot her; the golden siren is sitting on the edge of the spring with her feet in the water, gently splashing the water as she softly sings to herself. When you get closer, though, you realize that she is not really singing to herself but to her round pregnant belly. From where you are you can clearly tell she is stroking her pregnancy gently with her hands as she sings softly to her unborn babies."); @@ -1652,7 +1652,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } @@ -1664,7 +1664,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } diff --git a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as index 94bb8ff32d..3004463f23 100644 --- a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as +++ b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as @@ -81,8 +81,6 @@ use namespace CoC; mainmenu(); } private function mainmenu():void { - outputText("\n\nGargoyle Quest progress: " + flags[kFLAGS.GARGOYLE_QUEST] + ""); - outputText("\n\nTemple Repair progress: " + flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] + ""); menu(); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 1) { addButton(0, "Pray", PlayerPrayAtTemple).hint("Offer your prayer to one of the temple altar."); @@ -263,11 +261,11 @@ use namespace CoC; if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 150) addButton(1, "Statue of Marae", rebuildStatueOfMarae).hint("Repair the statue."); else addButtonDisabled(1, "Statue of Marae", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) { - if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Gargoyles", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); - else addButtonDisabled(2, "Gargoyles", "You not have enough stones."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) { + if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Repairing the gargoyles on the walls", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); + else addButtonDisabled(2, "Repairing the gargoyles on the walls", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 17) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 18) { if (flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 50 && flags[kFLAGS.CAMP_CABIN_NAILS_RESOURCES] >= 10) addButton(3, "Prayer Bench", makeNewPrayerBenches).hint("Repair some of the temple banches."); else addButtonDisabled(3, "Prayer Bench", "You not have enough wood or/and nails."); } @@ -340,7 +338,7 @@ use namespace CoC; }*/ public function rebuildStatueOfMarae():void { clearOutput(); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 4) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); else outputText("You work for the entire day sculpting stone and repairing the statue of Marae. By the time you're done you can feel divine power radiate from it empowering the entire temple."); flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] -= 150; flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS]++; @@ -379,11 +377,11 @@ use namespace CoC; if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] < 1) outputText("broken altar of Fera. You believe it was damaged way before the demons came in, likely by the priesthood tending the temple."); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] == 1) outputText("Altar of Fera. An aura of depraved lust rise from it, inviting you to unknown pleasure. This altar radiate a clearly demonic aura and dims the sanctity of the temple like an idol."); outputText("\n\nMarae's statue "); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("lies on the ground, its head shattered to pieces"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5) outputText("in the background awaits the worshippers with its serene and compassionate expression"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 6) outputText("lies on the ground, its head shattered to pieces"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6) outputText("in the background awaits the worshippers with its serene and compassionate expression"); outputText(". Lining both walls"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { outputText(", many decorative gargoyles are displayed."); if (flags[kFLAGS.ONYX_PATH] < 1) outputText(" While Sapphire is the last living stony guardian of the temple, this still gives off the illusion of a platoon of guardians watching faithfully over this divine place."); if (player.isGargoyle()) outputText(" Your own pedestal stands right next to Sapphire's, allowing you to keep close to her when you need to rest (using your pedestal allows you to sleep with Sapphire if your relation is high enough)."); @@ -394,7 +392,7 @@ use namespace CoC; outputText(" is looking at you expectantly."); } } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 9) { outputText(" There are " + player.statusEffectv1(StatusEffects.TempleOfTheDivineTracker) + " benches in the temple for the worshipers to sit upon."); } doNext(TempleAltairsRebuildMenu); @@ -1208,11 +1206,11 @@ use namespace CoC; outputText(".\n\nIt's arms "); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with a set of bestial four fingered sharp stone claws"); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("ends with very human fist"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); outputText(". It's legs "); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with clawed bestial feets with three toe at the front and one at the back"); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("are human like"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); outputText(". Its "); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("mace like"); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("axe like"); diff --git a/classes/classes/Scenes/Areas/Lake.as b/classes/classes/Scenes/Areas/Lake.as index e954514c0d..7f5f062142 100644 --- a/classes/classes/Scenes/Areas/Lake.as +++ b/classes/classes/Scenes/Areas/Lake.as @@ -43,7 +43,7 @@ use namespace CoC; return; } //Diana - if (player.level >= 3 && flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(10) == 0) { + if (flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(4) == 0) { SceneLib.dianaScene.repeatLakeEnc(); return; } diff --git a/classes/classes/Scenes/Areas/Lake/FetishZealot.as b/classes/classes/Scenes/Areas/Lake/FetishZealot.as index f4d2d5716d..00c4f47940 100644 --- a/classes/classes/Scenes/Areas/Lake/FetishZealot.as +++ b/classes/classes/Scenes/Areas/Lake/FetishZealot.as @@ -82,7 +82,7 @@ public class FetishZealot extends Monster //A pirate costume; if(armorName == PIRATE_CLOTHES) { //You are faced with one of the strangest things you have ever seen in your life. A stereotypical pirate, who has not replaced his hand with a hook, but rather a collection of sex toys. You can see at least two dildos, a fleshlight, and numerous other toys that you're incapable of recognizing. - outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); + outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); } //Military attire; if(armorName == MILITARY_CLOTHES) { diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index 0c37d5522b..f8b0d5bdc9 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -860,8 +860,7 @@ CoC.instance.saves.saveGame(player.slotName); if (slavesCount() > 0) addButton(7, "Slaves", campSlavesMenu).hint("Check up on any slaves you have received and interact with them."); addButton(8, "Camp Actions", campActions).hint("Interact with the camp surroundings and also read your codex or questlog."); if (flags[kFLAGS.CAMP_CABIN_PROGRESS] >= 10 || flags[kFLAGS.CAMP_BUILT_CABIN] >= 1) addButton(9, "Enter Cabin", cabinProgress.initiateCabin).hint("Enter your cabin."); //Enter cabin for furnish. - if (player.hasPerk(PerkLib.JobSoulCultivator) || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); - else if (!player.hasPerk(PerkLib.JobSoulCultivator) && player.hasPerk(PerkLib.Metamorph)) addButton(10, "Metamorf", SceneLib.metamorph.accessMetamorphMenu).hint("Use your soulforce to mold freely your body."); + if (player.findPerk(PerkLib.JobSoulCultivator) >= 0 || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); var canFap:Boolean = !player.hasStatusEffect(StatusEffects.Dysfunction) && (flags[kFLAGS.UNABLE_TO_MASTURBATE_BECAUSE_CENTAUR] == 0 && !player.isTaur()); if (player.lust >= 30) { addButton(11, "Masturbate", SceneLib.masturbation.masturbateMenu); @@ -1002,7 +1001,6 @@ public function loversHotBathCount():Number { if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.DIANA_FOLLOWER] > 5) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) counter++; if (followerHel()) counter++; if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; @@ -1025,7 +1023,6 @@ public function sparableCampMembersCount():Number { if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) counter++; if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) counter++; if (followerHel()) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; if (followerKiha()) counter++; @@ -1078,7 +1075,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { break; } outputText(".\n\n"); - buttons.add("Amily", amilyScene.amilyFollowerEncounter2).disableIf(player.statusEffectv1(StatusEffects.CampLunaMishaps1) > 0,"Hurt foot."); + buttons.add("Amily", amilyScene.amilyFollowerEncounter); } //Amily out freaking Urta? else if(flags[kFLAGS.AMILY_VISITING_URTA] == 1 || flags[kFLAGS.AMILY_VISITING_URTA] == 2) { @@ -1099,8 +1096,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Chi Chi if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) { outputText("You can see Chi Chi not so far from Jojo. She’s busy practicing her many combos on a dummy. Said dummy will more than likely have to be replaced within twenty four hours.\n\n"); - /*if (player.statusEffectv4(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); - else */buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu2); + buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu); } //Diana if (flags[kFLAGS.DIANA_FOLLOWER] > 5) { @@ -1110,8 +1106,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Etna if (flags[kFLAGS.ETNA_FOLLOWER] > 0) { outputText("Etna is resting lazily on a rug in a very cat-like manner. She’s looking at you always with this adorable expression of hers, her tail wagging expectantly at your approach.\n\n"); - /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Sleeping."); - else */buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu2).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //Helia if(SceneLib.helScene.followerHel()) { @@ -1134,7 +1129,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("You see the salamander Helia pacing around camp, anxiously awaiting your departure to the harpy roost. Seeing you looking her way, she perks up, obviously ready to get underway.\n\n"); } } - buttons.add( "Helia", helFollower.heliaFollowerMenu2).disableIf(player.statusEffectv3(StatusEffects.CampLunaMishaps2) > 0,"Sleeping."); + buttons.add( "Helia", helFollower.heliaFollowerMenu); } //Isabella if(isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) { @@ -1227,7 +1222,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { case 2: outputText("Izma is lying on her back near her bedroll. You wonder at first just why she isn't using her bed, but as you look closer you notice all the water pooled beneath her and the few droplets running down her arm, evidence that she's just returned from the stream."); break; } outputText("\n\n"); - buttons.add( "Izma", izmaScene.izmaFollowerMenu2).disableIf(player.statusEffectv4(StatusEffects.CampLunaMishaps1) > 0,"Fish smell."); + buttons.add( "Izma", izmaScene.izmaFollowerMenu); } } //Kiha! @@ -1253,8 +1248,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("Most of them are on fire.\n\n"); } } - /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Cleaning burnt meat."); - else */buttons.add( "Kiha", kihaScene.encounterKiha2).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + buttons.add( "Kiha", kihaScene.encounterKiha).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //MARBLE if(player.hasStatusEffect(StatusEffects.CampMarble) && flags[kFLAGS.FOLLOWER_AT_FARM_MARBLE] == 0) { @@ -1434,10 +1428,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Ember if(emberScene.followerEmber()) { emberScene.emberCampDesc(); - /*if (player.statusEffectv2(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); - else */buttons.add( + buttons.add( "Ember", - emberScene.emberCampMenu2 + emberScene.emberCampMenu ).hint("Check up on Ember the dragon-" + (flags[kFLAGS.EMBER_ROUNDFACE] == 0 ? "morph" : flags[kFLAGS.EMBER_GENDER] == 1 ? "boy" : "girl" ) + "" ).disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } @@ -1478,7 +1471,7 @@ public function campFollowers(descOnly:Boolean = false):void { if (flags[kFLAGS.CAMP_BUILT_CABIN] > 0) outputText(" cabin"); if (!(model.time.hours > 4 && model.time.hours < 23)) outputText(" and the mouse is sleeping on it right now.\n\n"); else outputText(", though the mouse is probably hanging around the camp's perimeter.\n\n"); - buttons.add( "Jojo", jojoScene.jojoCamp2).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty.").disableIf(player.statusEffectv2(StatusEffects.CampLunaMishaps1) > 0,"Annoyed."); + buttons.add( "Jojo", jojoScene.jojoCamp).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty."); } } //Celess @@ -1612,9 +1605,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Luna if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("Luna wanders around the camp, doing her chores as usual."); - if (flags[kFLAGS.LUNA_JEALOUSY] >= 50) outputText(" She looks at you from time to time, as if expecting you to notice her."); + if (flags[kFLAGS.LUNA_JEALOUSY] >= 25) outputText(" She looks at you from time to time, as if expecting you to notice her."); outputText("\n\n"); - buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna.").disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0,"Training."); + buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna."); } for each(var npc:XXCNPC in _campFollowers){ npc.campDescription(buttons,XXCNPC.FOLLOWER); @@ -1646,7 +1639,7 @@ private function campActions():void { addButton(5, "Build", campBuildingSim).hint("Check your camp build options."); if (player.hasPerk(PerkLib.JobElementalConjurer) >= 0 || player.hasPerk(PerkLib.JobGolemancer) >= 0) addButton(6, "Winions", campWinionsArmySim).hint("Check your options for making some Winions."); else addButtonDisabled(6, "Winions", "You need to be able to make some minions that fight for you to use this option like elementals or golems..."); - //addButton(7, "Heal", spellHealcamp).hint("Heal. \n\nMana Cost: 30"); + if (player.hasStatusEffect(StatusEffects.KnowsHeal)) addButton(7, "Heal", spellHealcamp).hint("Heal will attempt to use white magic to instantly close your wounds and restore your body. \n\nMana Cost: 30"); //addButton(8, "Craft", kGAMECLASS.crafting.accessCraftingMenu).hint("Craft some items."); if (flags[kFLAGS.CAMP_UPGRADES_FISHERY] >= 1) addButton(8, "Fishery", VisitFishery).hint("Visit Fishery."); addButton(9, "Questlog", questlog.accessQuestlogMainMenu).hint("Check your questlog."); @@ -1739,6 +1732,39 @@ private function RetrieveStack():void { } } +public function spellHealcamp():void { + clearOutput(); + if(player.mana < 30) { + outputText("Your mana is too low to cast this spell."); + doNext(campActions); + return; + } + useMana(30); + var healing:int = combat.scalingBonusIntelligence(); + //healing *= spellMod(); + if (player.unicornScore() >= 5) healing *= ((player.unicornScore() - 4) * 0.5); + if (player.alicornScore() >= 6) healing *= ((player.alicornScore() - 5) * 0.5); + if (player.armorName == "skimpy nurse's outfit") healing *= 1.2; + //Determine if critical heal! + var crit:Boolean = false; + var critHeal:int = 5; + if (player.findPerk(PerkLib.Tactician) >= 0 && player.inte >= 50) critHeal += (player.inte - 50) / 5; + if (rand(100) < critHeal) { + crit = true; + healing *= 1.75; + } + healing = Math.round(healing); + outputText("You chant a magical song of healing and recovery and your wounds start knitting themselves shut in response. (+" + healing + ")."); + if (crit == true) outputText(" *Critical Heal!*"); + HPChange(healing,false); + outputText("\n\n"); + statScreenRefresh(); + flags[kFLAGS.SPELLS_CAST]++; + //spellPerkUnlock(); + doNext(doCamp); + cheatTime(1/12); +} + private function swimInStream():void { var izmaJoinsStream:Boolean = false; var marbleJoinsStream:Boolean = false; @@ -2206,7 +2232,7 @@ CoC.instance.saves.saveGame(player.slotName); return; } //Full Moon - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { SceneLib.lunaFollower.fullMoonEvent(); sleepRecovery(false); return; @@ -2236,7 +2262,7 @@ CoC.instance.saves.saveGame(player.slotName); } else if(flags[kFLAGS.SLEEP_WITH] == "Luna" && flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("You head to bed, Luna following you. "); - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { SceneLib.lunaFollower.sleepingFullMoon(); return; } @@ -3433,13 +3459,8 @@ private function promptSaveUpdate():void { } /* if (flags[kFLAGS.MOD_SAVE_VERSION] == 20) { flags[kFLAGS.MOD_SAVE_VERSION] = 21; - if (player.hasPerk(PerkLib.Lycanthropy)) { - player.skin.coverage = Skin.COVERAGE_LOW; - player.coatColor = player.hairColor; - } - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; clearOutput(); - outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); + outputText("Text."); doNext(doCamp); return; } @@ -3450,20 +3471,6 @@ private function promptSaveUpdate():void { doNext(doCamp); return; } - if (flags[kFLAGS.MOD_SAVE_VERSION] == 22) { - flags[kFLAGS.MOD_SAVE_VERSION] = 23; - clearOutput(); - outputText("Text."); - doNext(doCamp); - return; - } - if (flags[kFLAGS.MOD_SAVE_VERSION] == 23) { - flags[kFLAGS.MOD_SAVE_VERSION] = 24; - clearOutput(); - outputText("Text."); - doNext(doCamp); - return; - } */ doCamp(); } diff --git a/classes/classes/Scenes/Camp/CampScenes.as b/classes/classes/Scenes/Camp/CampScenes.as index e4094b97d5..5f84239f84 100644 --- a/classes/classes/Scenes/Camp/CampScenes.as +++ b/classes/classes/Scenes/Camp/CampScenes.as @@ -125,7 +125,7 @@ public function PeepingTom3():void { // outputText("As a naga, Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (arianScene.arianFollower() && flags[kFLAGS.ARIAN_VAGINA] > 0 && flags[kFLAGS.ARIAN_COCK_SIZE] == 0) outputText("Arian while formerly a male seems to get along with the other girls.\n\n"); if (flags[kFLAGS.SIDONIE_FOLLOWER] >= 1) { outputText("Sitting on a side of the spring that is spacious enough to accommodate his larger frame, Sidonie lies relaxed, among the girls. Most of them give her not-so subtle glances, some of them at her hefty bosom, but the most directed at the thick equine member dangling from the legs. Not caring too much about their looks, she simply lies and enjoy the bath.\n\n"); @@ -178,7 +178,7 @@ public function HaveAGirlBath():void { // outputText("As a naga Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath. Can’t say this is not welcome.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) { if (flags[kFLAGS.IZMA_NO_COCK] == 0) outputText("While not entirely a girl, Izma is womanly enough that she was still accepted in the bath, her crotch well hidden behind a cloth.\n\n"); else outputText("While she was not always a girl, Izma is womanly enough that she was still accepted in the bath.\n\n"); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 6c53a2bbd2..2bf325152f 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -39,7 +39,7 @@ package classes.Scenes outputText("-Kindra archery training would progress 2x faster.\n"); outputText("-Manual that Chi Chi drops after beating PC in second fight unlock Soul Blast soulskill (15 turns CD, chance to stun for 3 turns and dmg scale with PC current str, int and wis)\n"); outputText("-Fixed bugs: Softlocks on few enemy bind specials (like Izumi or Ceraph), Wrath specials correctly list needed resource, option to send Izma to fishery before it's built, many other small fixes\n\n"); - outputText("Version 0.8i (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes):\n\n"); + outputText("Version 0.8i:\n\n"); outputText("-New tier 0 misc lvl-up perk: Tough Hide. Req. Job: Beast Warrior perk and 30+ tou. Effect: Increase natural armor by 2 so long as PC have scale chitin fur or other natural armor.\n"); outputText("-New tier 1 misc lvl-up perk: Feral Armor. Req. Tough Hide perk and 60+ tou. Effect: Gain extra armor based on PC toughness so long as PC is naked, +20 to max wrath. (Similar to agility but PC must be naked and have natural armor)\n"); outputText("-New tier 1 misc lvl-up perk: Job: Healer. Req. 30+ int and 30+ wis. Effect: +5 to max Int and Wis (scalable), +30 to max Mana, +10% to spellpower when using healing spells\n"); @@ -57,6 +57,7 @@ package classes.Scenes outputText("-Having natural claws add toggle in combat menu to switch between normal or feral combat style. Only when PC not use any weapon (after few special exceptions) can benefit from feral combat style - when PC can attack more than once a turn fatigue costs will be halfed.\n"); outputText("-New melee weapon: Claws - obtainable by buying in weapon shop in He'Xin'Dao. 0 atk, 10% to cause bleed, 100 gems, is one of special exception weapons, which could be used without loosing benefits from using feral combat style.\n"); outputText("-All bleed effects not req. to lower enemy armor below 10. Also previous 50% chance for bleed effect was lowered to 25% for hooked gaunlets.\n"); + //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-First gaunlet repeatable reward was lowered to 15 spirit stones to keep in theme of 5 SS for each enemy defeated in gaunlet challanges.\n"); outputText("-Perk Rage give 50 more to max wrath and perk Anger 100 more to max wrath. To perk Job: Warlord req. was added option to use perk Feral Whirlwind instead of Whirlwind or Whipping. Other req. stay the same.\n"); outputText("-Beast Warrior PC's can use their own version of Whirlwind that req. only to have natural claws or weapons that can substitude natural claws. Almost all rest is similar to Whirlwind performed with any non-large/large weapon.\n"); @@ -73,6 +74,7 @@ package classes.Scenes outputText("-New body part - face: Avain Face. No prereq.\n"); outputText("-New body part - ears: Avain Ears. No prereq.\n"); outputText("-New body part - skin: Feathers. No prereq.\n"); + //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); outputText("-New melee weapon (by Shamanknight): Halberd - buyable in weapons shop in Tel'Adre. Cost 1200 gems. Base atk is 6 increased by 9 when PC have 50+ str and another 15 more atk when having 100+ str. Attacks ignore 40% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Guan Dao - buyable in weapons shop in He'Xin'Dao. Cost 100 spirit stones. Base atk is 6 increased by 8 when PC have 50+ str and another 11 more atk when having 100+ str. Attacks ignore 60% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Fly-Whisk - buyable in weapons shop in He'Xin'Dao. Cost 80 spirit stones. Base atk is 0, increase magical soulskills power by 20%.\n"); @@ -90,33 +92,14 @@ package classes.Scenes outputText("-Tease and few other lust dealing attacks scalling was changed to use libido scaling instead lvl based one + in case of alraune it will have toughness scaling too.\n"); outputText("-Giacomo was added to possible encounters in Soul Sense menu. Also Lumi Lab after first time visiting it would be moved to Dungeons submenu (since it should been like Sean shop inside one of dungeons).\n"); outputText("-Celess related events in forest would be temporaly unaccesable (not affecting anything if PC already have Celess in camp).\n"); - outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n"); - outputText("Version 0.8i2:\n\n"); - outputText("-\n"); + outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n\n\n\n\n");/*ostatni punkt changelogu + outputText("-Added in current version race effects to Metamorph perk: \n"); outputText("-\n"); outputText("-\n"); - outputText("-Diana later stages stats adjusted. Also added req. of min. lvl 3 to meet her at lake, lowered encounter chance.\n"); - outputText("-Luna can be spared when PC accept her (by loosing in fight or just accepting). In case of simple accepting there would be new option showing up in talk menu after talking with her on Lycantrophy after accpting her that allow voluntary been biten by her. After sparing she can lvl up up to lvl 27.\n"); - outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); - outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); - outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); - outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); - outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); - outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); - outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); - outputText("-Starting mana cap rised from 100 to 200 and starting fatigue cap from 100 to 150. Feral Whirlwind base dmg increased by 50%. Archery base accuracy increased form 30% to 40%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not just any item in shield slot like mana bracer.\n"); - outputText("-Attacks using intelligence and wisdom scalling would now use scalling used by attack using str/tou/spe, which mean at stat values above 100 it would be weaker effect.\n"); - outputText("-Req. for perks form corruption tree lowered: Corrupted Libido, Seduction, Nymphomania, Acclimation, Sense Corruption, Sadist, Arousing Aura\n"); - outputText("-Monsters base lust cap lowered from 100 to 70. Also now they will get a few points to max cap each lvl (at begining 2, then 5, 10, 20).\n"); - outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed, Temple of the Divine rebulding bugfixing, removed req. of Herism perk for perk Job: Countresan, missing Anzu in his Palace\n\n\n\n\n");/*ostatni punkt changelogu - //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); - //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Corrupted Celess to corrupt. (item properties desc).\n"); outputText("-New event perk: Gargoyle. Gained in ritual to become gargoyle by picking own blood. Effects: \n"); outputText("-New event perk: Corrupted Gargoyle. Gained in ritual to become gargoyle by picking minotaur blood. Effects: \n"); - outputText("-Added in current version race effects to Metamorph perk: \n"); - outputText("-\n"); outputText("-\n"); outputText("-\n"); outputText("-\n"); @@ -124,14 +107,12 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); outputText("-Added in current version race effects to Metamorph perk: \n");, Goo, Siren, Bat, Vampire, Cat, Cheshire cat outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); @@ -173,6 +154,8 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); + outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index aad6d3e7d0..a8c6d8d56f 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -804,7 +804,6 @@ public function baseelementalattacks(elementType:int = -1):void { if (summonedElementals >= 8 && manaCost > 45 && player.hasPerk(PerkLib.StrongestElementalBond)) manaCost -= 40; if (player.mana < manaCost) { outputText("Your mana is too low to fuel your elemental attack!\n\n"); - flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] = 1; doNext(combatMenu); } else { @@ -830,7 +829,6 @@ public function elementalattacks(elementType:int, summonedElementals:int):void { if (player.hasPerk(PerkLib.ElementalConjurerResolve)) elementalamplification += 0.1 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerDedication)) elementalamplification += 0.2 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerSacrifice)) elementalamplification += 0.3 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; - if (player.weapon == weapons.SCECOMM) elementalamplification += 0.5; elementalDamage *= elementalamplification; //Determine if critical hit! var crit:Boolean = false; @@ -1255,13 +1253,8 @@ internal function wait():void { } } -public function meleeAccuracy():Number { - var accmod:Number = 200; - return accmod; -} - public function arrowsAccuracy():Number { - var accmod:Number = 80; + var accmod:Number = 60; if (player.hasPerk(PerkLib.HistoryScout) || player.hasPerk(PerkLib.PastLifeScout)) accmod += 40; if (player.hasPerk(PerkLib.Accuracy1)) { accmod += player.perkv1(PerkLib.Accuracy1); @@ -2347,6 +2340,7 @@ public function attack():void { return; } + var damage:Number = 0; //Determine if dodged! if ((player.hasStatusEffect(StatusEffects.Blind) && rand(2) == 0) || (monster.spe - player.spe > 0 && int(Math.random() * (((monster.spe - player.spe) / 4) + 80)) > 80)) { //Akbal dodges special education @@ -2385,17 +2379,6 @@ public function attack():void { enemyAI(); return; } - meleeDamageAcc(); -} - -public function meleeDamageAcc():void { - var accMelee:Number = 0; - accMelee += (meleeAccuracy() / 2); - if (flags[kFLAGS.ATTACKS_ACCURACY] > 0) accMelee -= flags[kFLAGS.ATTACKS_ACCURACY]; - if (player.weaponName == "Truestrike sword") accMelee = 100; -// fatigue(oneArrowTotalCost()); - if (rand(100) < accMelee) { - var damage:Number = 0; //------------ // DAMAGE //------------ @@ -2797,19 +2780,16 @@ public function meleeDamageAcc():void { dynStats("lus", 25); } + outputText("\n"); checkAchievementDamage(damage); WrathWeaponsProc(); heroBaneProc(damage); - } - else { - - } if(monster.HP <= 0){doNext(endHpVictory); return;} if(monster.lust >= monster.maxLust()){doNext(endLustVictory); return;} if (flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] >= 2){ flags[kFLAGS.MULTIPLE_ATTACKS_STYLE]--; - // flags[kFLAGS.ATTACKS_ACCURACY] += 15; + // flags[kFLAGS.ATTACKS_ACCURACY] += 5; attack(); return; } @@ -5348,13 +5328,6 @@ public function clawsRend():void { outputText("\n\n"); enemyAI(); } -public function PussyLeggoMyEggo():void { - clearOutput(); - outputText("You let your opponent free ending your embrace."); - outputText("\n\n"); - monster.removeStatusEffect(StatusEffects.Pounce); - enemyAI(); -} public function runAway(callHook:Boolean = true):void { if (callHook && monster.onPcRunAttempt != null){ @@ -5807,7 +5780,7 @@ public function soulskillMagicalMod():Number { public function soulskillcostmulti():Number { var multiss:Number = 1; - if (soulskillMod() > 1) multiss += (soulskillMod() - 1) * 0.1;/* + if (soulskillMod() > 1) multiss += Math.round(soulskillMod() - 1) * 10;/* if (player.hasPerk(PerkLib.SoulPersonage)) multiss += 1; if (player.hasPerk(PerkLib.SoulWarrior)) multiss += 1; if (player.hasPerk(PerkLib.SoulSprite)) multiss += 1; @@ -5841,16 +5814,28 @@ public function soulskillCost():Number { for(var i:int = 20; (i <= 80) && (i <= stat); i += 20){ scale += stat - i; } - for(i = 100; (i <= 2000) && (i <= stat); i += 50){ + for(i = 100; (i <= 1200) && (i <= stat); i += 50){ scale += stat - i; } return scale; } + public function scalingBonusToughness():Number { + return touSpeStrScale(player.tou); + } + + public function scalingBonusSpeed():Number { + return touSpeStrScale(player.spe); + } + + public function scalingBonusStrength():Number { + return touSpeStrScale(player.str); + } + private function inteWisLibScale(stat:int):Number{ var scale:Number = 6.75; var changeBy:Number = 0.50; - if(stat <= 2000){ + if(stat <= 1200){ if(stat <= 100){ scale = (2/6) + ((int(stat/100)/20) * (1/6)); changeBy = 0.25; @@ -5861,24 +5846,12 @@ public function soulskillCost():Number { return (stat * scale) + rand(stat * (scale + changeBy)); } - public function scalingBonusToughness():Number { - return touSpeStrScale(player.tou); - } - - public function scalingBonusSpeed():Number { - return touSpeStrScale(player.spe); - } - - public function scalingBonusStrength():Number { - return touSpeStrScale(player.str); - } - public function scalingBonusWisdom():Number { - return touSpeStrScale(player.wis); + return inteWisLibScale(player.wis); } public function scalingBonusIntelligence():Number { - return touSpeStrScale(player.inte); + return inteWisLibScale(player.inte); } public function scalingBonusLibido():Number { diff --git a/classes/classes/Scenes/Combat/CombatMagic.as b/classes/classes/Scenes/Combat/CombatMagic.as index 6099d08834..85597129cc 100644 --- a/classes/classes/Scenes/Combat/CombatMagic.as +++ b/classes/classes/Scenes/Combat/CombatMagic.as @@ -2053,7 +2053,7 @@ public class CombatMagic extends BaseCombatContent { if (monster.hasPerk(PerkLib.DarknessVulnerability)) damage *= 0.5; if (monster.hasPerk(PerkLib.LightningNature)) damage *= 0.2; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); damage = Math.round(damage); //if (monster.short == "goo-girl") damage = Math.round(damage * 1.5); - pomyśleć czy bdą dostawać bonusowe obrażenia //if (monster.short == "tentacle beast") damage = Math.round(damage * 1.2); - tak samo przemyśleć czy bedą dodatkowo ranione diff --git a/classes/classes/Scenes/Combat/CombatSoulskills.as b/classes/classes/Scenes/Combat/CombatSoulskills.as index 4ebe47fba0..7f0d942710 100644 --- a/classes/classes/Scenes/Combat/CombatSoulskills.as +++ b/classes/classes/Scenes/Combat/CombatSoulskills.as @@ -25,8 +25,6 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Ice Fist", IceFist).hint("A chilling strike that can freeze an opponent solid, leaving it vulnerable to shattering soul art and hindering its movement. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.findPerk(PerkLib.FireAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to fire."); - } else if (!player.isFistOrFistWeapon()) { - bd.disable("Your current used weapon not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } @@ -35,8 +33,6 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Fire Punch", FirePunch).hint("Ignite your opponents dealing fire damage and setting them ablaze. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); - } else if (!player.isFistOrFistWeapon()) { - bd.disable("Your current used weapon not allow to use this technique."); } else if (player.findPerk(PerkLib.ColdAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to cold."); } @@ -61,8 +57,6 @@ public class CombatSoulskills extends BaseCombatContent { buttons.add("Punishing Kick", PunishingKick).hint("A vicious kick that can daze an opponent, reducing its damage for a while. \n\nWould go into cooldown after use for: 10 rounds \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.hasStatusEffect(StatusEffects.CooldownPunishingKick)) { bd.disable("You need more time before you can use Punishing Kick again."); - } else if (!player.isBiped() || !player.isTaur()) { - bd.disable("Your legs not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } diff --git a/classes/classes/Scenes/Combat/CombatTeases.as b/classes/classes/Scenes/Combat/CombatTeases.as index 130bd92292..de139f03f7 100644 --- a/classes/classes/Scenes/Combat/CombatTeases.as +++ b/classes/classes/Scenes/Combat/CombatTeases.as @@ -1462,8 +1462,8 @@ public class CombatTeases extends BaseCombatContent { damage *= .7; bonusDamage *= .7; if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - damage *= (1 + (player.lust100 * 0.01)); - bonusDamage *= (1 + (player.lust100 * 0.01)); + damage *= (1 + player.lust100); + bonusDamage *= (1 + player.lust100); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { damage *= 1.15; diff --git a/classes/classes/Scenes/Combat/CombatUI.as b/classes/classes/Scenes/Combat/CombatUI.as index 42ddc3f323..29d50a87cf 100644 --- a/classes/classes/Scenes/Combat/CombatUI.as +++ b/classes/classes/Scenes/Combat/CombatUI.as @@ -187,7 +187,7 @@ public class CombatUI extends BaseCombatContent { if (player.fatigueLeft() <= combat.physicalCost(20)) { button(0).disable("You are too tired to bite " + monster.a + " " + monster.short + "."); } - //addButton(4, "Release", combat.PussyLeggoMyEggo); + //addButton(4, "Release", combat.GooLeggoMyEggo); } else if (player.hasPerk(PerkLib.FirstAttackElementals) && flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] == 3 && flags[kFLAGS.IN_COMBAT_PLAYER_ELEMENTAL_ATTACKED] != 1) { menu(); if (player.hasStatusEffect(StatusEffects.SummonedElementalsAir)) addButton(0, "Air", combat.baseelementalattacks, Combat.AIR); diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index dfd6de6728..6992fae145 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -37,6 +37,15 @@ public class MagicSpecials extends BaseCombatContent { bd.disable("You need more time before you can use Compelling Aria again.\n\n"); } } + + if (player.sphinxScore() >= 14) { + bd = buttons.add("Cursed Riddle", CursedRiddle, "Weave a curse in the form of a magical riddle. If the victims fails to answer it, it will be immediately struck by the curse. Intelligence determines the odds and damage."); + bd.requireFatigue(spellCost(50)); + if (player.hasStatusEffect(StatusEffects.CooldownCursedRiddle)) { + bd.disable("You need some time to think of a new riddle.\n\n"); + } + } + if (player.hasPerk(PerkLib.Incorporeality)) { buttons.add("Possess", possess).hint("Attempt to temporarily possess a foe and force them to raise their own lusts."); } @@ -51,6 +60,7 @@ public class MagicSpecials extends BaseCombatContent { bd.disable("You cannot focus to use this ability while you're having so much difficult breathing."); } } + if (player.hasPerk(PerkLib.CorruptedKitsune) && player.tailType == Tail.FOX && player.tailCount >= 7) { // Corrupt Fox Fire bd = buttons.add("C.FoxFire", corruptedFoxFire,"Unleash a corrupted purple flame at your opponent for high damage. Less effective against corrupted enemies. \n"); @@ -695,7 +705,7 @@ public class MagicSpecials extends BaseCombatContent { } if (player.findPerk(PerkLib.SluttySimplicity) >= 0 && player.armorName == "nothing") lustDmgF *= (1 + ((10 + rand(11)) / 100)); if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - lustDmgF *= (1 + (player.lust100 * 0.01)); + lustDmgF *= (1 + player.lust100); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { lustDmgF *= 1.15; @@ -1127,7 +1137,7 @@ public class MagicSpecials extends BaseCombatContent { if (monster.hasPerk(PerkLib.LightningVulnerability)) damage *= 2; if (monster.hasPerk(PerkLib.DarknessNature)) damage *= 5; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); damage = Math.round(damage); //Shell if(monster.hasStatusEffect(StatusEffects.Shell)) { @@ -1713,26 +1723,26 @@ public class MagicSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.ImprovedCrinosShape)) { if (player.hasPerk(PerkLib.GreaterCrinosShape)) { if (player.hasPerk(PerkLib.MasterCrinosShape)) { - temp1 += player.str * 1.6; - temp2 += player.tou * 1.6; - temp3 += player.spe * 1.6; + temp1 += player.str * 0.2; + temp2 += player.tou * 0.2; + temp3 += player.spe * 0.2; } else { - temp1 += player.str * 0.8; - temp2 += player.tou * 0.8; - temp3 += player.spe * 0.8; + temp1 += player.str * 0.15; + temp2 += player.tou * 0.15; + temp3 += player.spe * 0.15; } } else { - temp1 += player.str * 0.4; - temp2 += player.tou * 0.4; - temp3 += player.spe * 0.4; + temp1 += player.str * 0.1; + temp2 += player.tou * 0.1; + temp3 += player.spe * 0.1; } } else { - temp1 += player.str * 0.2; - temp2 += player.tou * 0.2; - temp3 += player.spe * 0.2; + temp1 += player.str * 0.05; + temp2 += player.tou * 0.05; + temp3 += player.spe * 0.05; } temp1 = Math.round(temp1); temp2 = Math.round(temp2); @@ -1756,7 +1766,7 @@ public class MagicSpecials extends BaseCombatContent { } public function returnToNormalShape():void { clearOutput(); - outputText("Gathering all you willpower you forcefully subduing your inner beast and returning to your normal shape."); + outputText("Gathering all you willpower you forcefully subduing your inner beast and retunrning to your normal shape."); player.dynStats("str", -player.statusEffectv1(StatusEffects.CrinosShape)); player.dynStats("tou", -player.statusEffectv2(StatusEffects.CrinosShape)); player.dynStats("spe", -player.statusEffectv3(StatusEffects.CrinosShape)); @@ -2490,6 +2500,55 @@ public class MagicSpecials extends BaseCombatContent { if(monster.lust >= monster.maxLust()) doNext(endLustVictory); } } + + //cursed riddle + public function CursedRiddle():void { + clearOutput(); + player.createStatusEffect(StatusEffects.CooldownCursedRiddle, 0, 0, 0, 0); + outputText("You stop fighting for a second and speak aloud a magical riddle. " + monster.a + monster.short + " gives you a troubled look, everyone knows of the terrifying power of a sphinx riddle used as a curse. You give " + monster.a + monster.short + " some time crossing your forepaws in anticipation. "); + + //odds of success + var baseInteReq:Number = 200 + var chance:Number = Math.max(player.inte/baseInteReq, 0.05) + 25 + chance = Math.min(chance, 0.80); + + if (Math.random() < chance){ + outputText("\n\n" + monster.a + monster.short + " hazard an answer and your smirk as you respond, “Sadly incorrect!” Your curse smiting your foe for its mistake, leaving it stunned by pain and pleasure."); + //damage dealth + var damage:Number = ((scalingBonusWisdom() * 0.5) + scalingBonusIntelligence()) * spellMod(); + //Determine if critical hit! + var crit:Boolean = false; + var critChance:int = 5; + if (player.hasPerk(PerkLib.Tactician) && player.inte >= 50) { + if (player.inte <= 100) critChance += (player.inte - 50) / 50; + if (player.inte > 100) critChance += 10; + } + if (monster.isImmuneToCrits() && !player.hasPerk(PerkLib.EnableCriticals)) critChance = 0; + if (rand(100) < critChance) { + crit = true; + damage *= 1.75; + } + damage = Math.round(damage); + damage = doDamage(damage); + outputText("(" + damage + ")"); + + //Lust damage dealth + if (monster.lustVuln > 0) { + outputText(" "); + var lustDmg:Number = monster.lustVuln * ((player.inte + (player.wis * 0.50)) / 5 * spellMod() + rand(monster.lib - monster.inte * 2 + monster.cor) / 5); + monster.teased(lustDmg); + } + monster.createStatusEffect(StatusEffects.Stunned, 1, 0, 0, 0); + outputText("\n\n"); + combat.heroBaneProc(damage); + } + else { + outputText("\n\nTo your complete frustration, " + monster.a + monster.short + " answers correctly."); + outputText("\n\n"); + } + if(monster.HP < 1) doNext(endHpVictory); + else enemyAI(); + } //Transfer public function lustTransfer():void { diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 4ebd372f98..101ae17f04 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -78,10 +78,12 @@ public class PhysicalSpecials extends BaseCombatContent { if ((player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Embrace", vampireEmbrace).hint("Embrace an opponent in your wings."); } + //Pounce - if ((player.catScore() > 4 || player.werewolfScore() >= 6) && !monster.hasPerk(PerkLib.EnemyGroupType)) { + if (player.canPounce() && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Pounce", catPounce).hint("Pounce and rend your enemy using your claws, this initiate a grapple combo."); } + //Kick attackuuuu if (player.isTaur() || player.lowerBody == LowerBody.HOOFED || player.lowerBody == LowerBody.BUNNY || player.lowerBody == LowerBody.KANGAROO) { bd = buttons.add("Kick", kick).hint("Attempt to kick an enemy using your powerful lower body."); @@ -223,7 +225,7 @@ public class PhysicalSpecials extends BaseCombatContent { bd.disable("Your golems can't attack flying targets. (Only golems made by grand-master golem maker can do this)"); } } - if (player.isShieldsForShieldBash()) { + if (player.shield != ShieldLib.NOTHING) { bd = buttons.add("Shield Bash", shieldBash).hint("Bash your opponent with a shield. Has a chance to stun. Bypasses stun immunity. \n\nThe more you stun your opponent, the harder it is to stun them again."); bd.requireFatigue(physicalCost(20)); } @@ -281,12 +283,19 @@ public class PhysicalSpecials extends BaseCombatContent { internal function buildMenuForFlying(buttons:ButtonDataList):void { var bd:ButtonData; buttons.add("Great Dive", combat.greatDive).hint("Make a Great Dive to deal TONS of damage!"); + //Embrace if ((player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Embrace", vampireEmbrace).hint("Embrace an opponent in your wings."); } + + //Sky Pounce + if (player.canPounce() && player.canFly() && !monster.hasPerk(PerkLib.EnemyGroupType)) { + buttons.add("Skyrend", skyPounce).hint("Crash into your enemy and initiate a grapple combo. End flight."); + } + //Tornado Strike - if (player.vouivreScore() >= 11) { + if (player.couatlScore() >= 11) { bd = buttons.add("Tornado Strike", TornadoStrike).hint("Use wind to forcefully lift a foe in the air and deal damage. \n\nWould go into cooldown after use for: 8 rounds"); bd.requireFatigue(physicalCost(60)); if (player.hasStatusEffect(StatusEffects.CooldownTornadoStrike)) { @@ -830,9 +839,9 @@ public class PhysicalSpecials extends BaseCombatContent { } fatigue(50, USEFATG_PHYSICAL); var damage:Number = 0; - damage += (scalingBonusStrength() * 0.3) + ((player.str + unarmedAttack()) * 1.5); - if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.15) + ((player.str + unarmedAttack()) * 0.75); - if (damage < 15) damage = 15; + damage += (scalingBonusStrength() * 0.2) + player.str + unarmedAttack(); + if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.1) + ((player.str + unarmedAttack()) * 0.5); + if (damage < 10) damage = 10; //weapon bonus if (player.weaponAttack < 101) damage *= (1 + (player.weaponAttack * 0.02)); else if (player.weaponAttack >= 101 && player.weaponAttack < 201) damage *= (2 + ((player.weaponAttack - 100) * 0.015)); @@ -1143,7 +1152,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1197,7 +1205,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1252,7 +1259,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1294,7 +1300,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1330,7 +1335,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1366,7 +1370,6 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; - if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1858,6 +1861,58 @@ public class PhysicalSpecials extends BaseCombatContent { outputText("\n\n"); enemyAI(); } + + + public function skyPounce():void { + flags[kFLAGS.LAST_ATTACK_TYPE] = 4; + clearOutput(); + if(player.fatigue + physicalCost(10) > player.maxFatigue()) { + clearOutput(); + outputText("You just don't have the energy to grapple with anyone right now..."); + //Gone menuLoc = 1; + menu(); + addButton(0, "Next", combatMenu, false); + return; + } + if(monster.short == "pod") { + clearOutput(); + outputText("You can't crash into something you're trapped inside of!"); + //Gone menuLoc = 1; + menu(); + addButton(0, "Next", combatMenu, false); + return; + } + fatigue(10, USEFATG_PHYSICAL); + //Amily! + if(monster.hasStatusEffect(StatusEffects.Concentration)) { + clearOutput(); + outputText("Amily easily glides around your attack thanks to her complete concentration on your movements."); + enemyAI(); + return; + } + //WRAP IT UPPP + if(40 + rand(player.spe) > monster.spe) { + outputText("You growl menacingly, and fold your wings, as you dive into " + monster.a + monster.short + " clawing at its/her/his body and leaving deep bleeding wounds. You’re now grappling with your target ready to tear it to shreds."); + monster.createStatusEffect(StatusEffects.Pounce, 4 + rand(2), 0, 0, 0); + player.removeStatusEffect(StatusEffects.Flying); + if (player.hasStatusEffect(StatusEffects.FlyingNoStun)) { + player.removeStatusEffect(StatusEffects.FlyingNoStun); + player.removePerk(PerkLib.Resolute); + } + } + //Failure + else { + //Failure (-10 HPs) - + outputText("As you attempt to grapple your target it slips out of your reach delivering a glancing blow to your limbs. Unable to grab your opponent flap your wing and resume flight."); + player.takePhysDamage(5, true); + if(player.HP <= 0) { + doNext(endHpLoss); + return; + } + } + outputText("\n\n"); + enemyAI(); + } public function nagaBiteAttack():void { flags[kFLAGS.LAST_ATTACK_TYPE] = 4; diff --git a/classes/classes/Scenes/DebugMenu.as b/classes/classes/Scenes/DebugMenu.as index ec21b20d7f..6308bb4bfd 100644 --- a/classes/classes/Scenes/DebugMenu.as +++ b/classes/classes/Scenes/DebugMenu.as @@ -627,7 +627,7 @@ public class DebugMenu extends BaseContent } displayHeader("Color picker"); outputText('\nCurrent color:'); - outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); + outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); outputText("\nSaturation:\t\t"+s+' / 100\t(0: greyscale, 100: bright color)'); outputText("\nLuminosity:\t"+l+' / 100\t(0: black, 50: bright color, 100: white)'); outputText('\n\nCurrent mode: '+pickerMode+' color.'); diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace.as b/classes/classes/Scenes/Dungeons/AnzuPalace.as index 2228124af4..d61458f1e5 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace.as @@ -135,7 +135,6 @@ use namespace CoC; outputText("\n\nComfortable armchairs, with soft cushions, covered in red velvet provide a good place to rest. On the left part of the room, are several shelves containing books about the story of Mittani and other similar things."); outputText("\n\nTo the east is the hall which connects the rest of the rooms in this floor. In a corner, on the end of the room, leading to the north, a door leads to the baths."); dungeons.setDungeonButtons(roomBathroom, null, null, roomFoyer); - if ((model.time.hours >= 10 && model.time.hours < 13) || model.time.hours == 19) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomBathroom():void { dungeonLoc = 91; @@ -145,7 +144,6 @@ use namespace CoC; outputText("\n\nThe rest of the room is covered with light brown tiles on the floor and the lower part of the walls, and a pattern of golden tiles and gold inlaids on the upper walls, separated by a band of mosaics displaying fish in exotic colors, sea serpents and aquatic monsters of a kind that you can’t recognize."); outputText("\n\nSome lamps around the room keep the bath well illuminated, and a door to the south leads back to living room."); dungeons.setDungeonButtons(null, roomLivingRoom, null, null); - if (model.time.hours == 22) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomDiningRoom():void { dungeonLoc = 92; @@ -155,7 +153,6 @@ use namespace CoC; outputText("\n\nDecorating the corners are vases with violets, whose smell perfumes the air. The columns in golden marble and the colorful decorations in silk hanging from them complete the room atmosphere."); outputText("\n\nTo the north, there is a door that leads to the kitchen. Another, leading to the west, goes back to the principal hall."); dungeons.setDungeonButtons(roomKitchen, null, roomFoyer, null); - if (model.time.hours == 9 || model.time.hours == 14 || model.time.hours == 21) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomKitchen():void { dungeonLoc = 93; @@ -165,7 +162,6 @@ use namespace CoC; outputText("\n\nIn the back of the room, a wooden door leads to the place where Anzu stores food. Inside are grains, bread, cheese, several crates containing wine, and in some containers, wrapped inside snow and ice, are big pieces of meat."); outputText("\n\nThe constant heat from the oven and the stove makes this room as warm as the bedroom or the living room."); dungeons.setDungeonButtons(null, roomDiningRoom, null, null); - if (model.time.hours == 8 || model.time.hours == 13 || model.time.hours == 20) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Floor 2 public function roomHallFloor2():void { @@ -188,7 +184,6 @@ use namespace CoC; outputText("\n\nAnzu’s bed is huge, even for Marethian standards. Soft cushions and linen sheets cover the mattress. The bed itself releases an aromatic smell. You have the temptation of climb in and sleep on it all day."); outputText("\n\nAnother fireplace, smaller than the one in the living room, warms the place atmosphere."); dungeons.setDungeonButtons(null, null, null, roomHallFloor2); - if (model.time.hours <= 7 || model.time.hours >= 23) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomLibrary():void { dungeonLoc = 96; @@ -198,7 +193,6 @@ use namespace CoC; outputText("\n\nOn the end of the place, is Anzu’s private study. A desk, a chair, some bookcases next to it. Nothing extraordinary."); outputText("\n\nTo the south is the exit to the hall, that connects all rooms in the third floor."); dungeons.setDungeonButtons(null, roomHallFloor2, null, null); - if (model.time.hours >= 15 && model.time.hours < 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomMultiuse():void { dungeonLoc = 97; @@ -249,7 +243,6 @@ use namespace CoC; outputText("\n\nThe forest and the snow covered hills extend as far as the eye can see. The fresh air, though cold, bring you a peace which takes you away from the corruption and the horrors of this land for a moment."); dungeons.setDungeonButtons(null, null, null, null); addButton(7, "Downstairs", roomHallFloor3); - if (model.time.hours == 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Basement public function roomBasement():void { diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as index 0eb4b7601a..3ca1310290 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as @@ -210,7 +210,7 @@ use namespace CoC; outputText("\n\n\"I think that even after we are friends and all, and the fact of we don’t mind…em...relieving pressure, together…\""); outputText("\n\nOh, you’re understanding the way of he’s going. After a few doubts, he puts his hand on yours and finally says:"); outputText("\n\n\"I think… I now think of you as more than a friend. You see…despite being a god, sometimes I could be a little unsure, and explaining this kind of thing is difficult for me, but…I think, no, I’m sure what I feel about you is not only friendship, because, [name], I think that I’ve fallen in love with you. "); - outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me.\""); + outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me."); flags[kFLAGS.ANZU_RELATIONSHIP_LEVEL] = 4; doYesNo(anzuRelatLvl4Sex, anzuRelatLvl4Dont); return; diff --git a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as index 78479adbc5..84227e4eb7 100644 --- a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as +++ b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as @@ -777,7 +777,7 @@ public class LethiceScenes extends BaseContent outputText("\n\nThe girl blinks, the rage on her face replaced by confusion. “W-what are you talking about, demon?” she murmurs, looking up for the first time. You glance down at her from your place at Mistress’s side, really looking at this... this “Champion” for the first time. You feel a vague sense of recognition when you look at her, even as dirty and cum-slathered as she is, though you can’t place her. You squint, but trying to think more about it just makes your head hurt, and so you instead look down at those perky tits of hers, letting yourself get hard again at the thought of grabbing onto them and fucking her as your next bitch."); outputText("\n\n“You’re lucky,” Mistress smirks, standing. “"); - if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines.\""); + if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines."); else { outputText("How did you escape from the factory, I wonder? And so clean and pure, too... you’re belly’s not yet swollen with imps, and your breasts are so small. Did you slip through"); diff --git a/classes/classes/Scenes/Holidays.as b/classes/classes/Scenes/Holidays.as index 0627d34c71..9dda10232f 100644 --- a/classes/classes/Scenes/Holidays.as +++ b/classes/classes/Scenes/Holidays.as @@ -1677,7 +1677,7 @@ public class Holidays { if (player.hasVagina()) EngineCore.addButton(3, "Pussy", pastieValentineIntro, "vag"); } else { - EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover.\""); + EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover."); EngineCore.doNext(SceneLib.camp.returnToCampUseTwoHours); } } diff --git a/classes/classes/Scenes/Inventory.as b/classes/classes/Scenes/Inventory.as index 7c30754c5a..7b77536180 100644 --- a/classes/classes/Scenes/Inventory.as +++ b/classes/classes/Scenes/Inventory.as @@ -102,8 +102,6 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (miscNieve || miscHolli || player.hasKeyItem("Dragon Egg") >= 0 - || player.hasKeyItem("Gryphon Statuette") >= 0 - || player.hasKeyItem("Peacock Statuette") >= 0 || flags[kFLAGS.ANEMONE_KID] > 0 || flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (miscNieve) { @@ -175,15 +173,7 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (model.time.hours >= 6) addButton(5, "Garden", Gardening.manageuyourgarden).hint("Visit your plant offspring"); } - /* if (player.hasKeyItem("Gryphon Statuette") >= 0) { - addButton(6, "Gryphon", SceneLib.mutationsTable.skybornSeed(1)); - foundItem = true; - } - if (player.hasKeyItem("Peacock Statuette") >= 0) { - addButton(6, "Peacock", SceneLib.mutationsTable.skybornSeed(2)); - foundItem = true; - } - */ addButton(14, "Back", inventoryMenu); + addButton(14, "Back", inventoryMenu); } public function BagOfCosmosMenu():void { diff --git a/classes/classes/Scenes/Metamorph.as b/classes/classes/Scenes/Metamorph.as index 729017e4fc..59161ed796 100644 --- a/classes/classes/Scenes/Metamorph.as +++ b/classes/classes/Scenes/Metamorph.as @@ -40,8 +40,7 @@ public function accessMetamorphMenu():void { addButton(11, "Page 2", accessPage2MetamorphMenu); // addButton(12, "Page 3", accessPage3MetamorphMenu); // addButton(13, "Page 4", accessPage4MetamorphMenu); - if (player.hasPerk(PerkLib.JobSoulCultivator)) addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); - else addButton(14, "Back", playerMenu); + addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); } private function accessPage1MetamorphMenu():void { diff --git a/classes/classes/Scenes/NPCs/AmilyScene.as b/classes/classes/Scenes/NPCs/AmilyScene.as index dbc851dd57..82b6f63814 100644 --- a/classes/classes/Scenes/NPCs/AmilyScene.as +++ b/classes/classes/Scenes/NPCs/AmilyScene.as @@ -2548,11 +2548,6 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface //----------=============================------------ //Approach Amily: // EVENT 2427 - public function amilyFollowerEncounter2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaAmily(); - else amilyFollowerEncounter(); - } - public function amilyFollowerEncounter():void { if(!amilyCorrupt() && player.eggs() >= 20 && player.canOviposit() && flags[kFLAGS.AMILY_OVIPOSITION_UNLOCKED] == 0) { amilyEggStuff(); @@ -2707,7 +2702,7 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface private function amilyCorruptSexMenu():void { amilySprite(); if(player.gender > 0) { - outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?\""); + outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?"); menu(); if (player.hasCock()) { addButton(0, "Anal", corruptAmilyBuckFutter).hint("Fuck Amily in the ass!"); @@ -8298,15 +8293,5 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface amilyPreggoChance(); doNext(camp.returnToCampUseOneHour); } - - public function mishapsLunaAmily():void { - clearOutput(); - outputText("You check on Amily and notice the mouse is holding her foot visibly in pain.\n\n"); - outputText("\"Gah how did I step on these " + (silly() ? "Lego" : "rocks") + "!? I should’ve paid more attention. Sorry [name], we’ll talk again later.\"\n\n"); - outputText("You think you notice Luna watching from a distance, but surely it's just your imagination.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 1, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 1, 0, 0, 0); - doNext(playerMenu); - } } } diff --git a/classes/classes/Scenes/NPCs/ChiChiFollower.as b/classes/classes/Scenes/NPCs/ChiChiFollower.as index 0cc0a71aa5..adec4177a1 100644 --- a/classes/classes/Scenes/NPCs/ChiChiFollower.as +++ b/classes/classes/Scenes/NPCs/ChiChiFollower.as @@ -73,7 +73,7 @@ public function WonSecondFight():void { public function WonSecondFightNo():void { outputText("Likely the proud master would rather have her opponent leave her be than be dishonored any further. You head back toward your camp to rest after this well earned victory, pocketing the scroll you found on Chi Chi at the same time, as you fail to notice the blood beginning to slowly create a small pool under her.\n\n"); outputText("A peasant runs to you, stopping you from leaving for a moment.\n\n"); - outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\"\n\n"); + outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\n\n"); outputText("You are somewhat shocked to learn that Chi Chi died, did she go all out in this battle to the point it cost her life? You head back to camp trying to figure how such a tragic incident happened in a training session.\n\n"); flags[kFLAGS.CHI_CHI_FOLLOWER] = 2; inventory.takeItem(weapons.MASTGLO, WonSecondFightNo2); @@ -421,11 +421,6 @@ public function SoulskilsManualsShopPunishingKick2():void { doNext(camp.returnToCampUseFourHours); } -public function ChiChiCampMainMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaChiChi(); - else ChiChiCampMainMenu(); -} - public function ChiChiCampMainMenu():void { clearOutput(); outputText("You go over to Chi Chi who pauses her training to head to you once you are close."); @@ -523,17 +518,5 @@ public function chichiSparring():void { startCombat(new ChiChi()); } -public function mishapsLunaChiChi():void { - clearOutput(); - outputText("As you go to visit Chi Chi you hear her scream. Running over to check whats going on you notice the fire mouse is now a sobbing mess, wet with water. You don’t recall her crying before so this must be serious.\n\n"); - outputText("\"Why why? Why would someone put a bucket right above my bedroll now I’m all wet and my fire will take hours to rise again!\"\n\n"); - outputText("She notice you checking her and panic.\n\n"); - outputText("\"Eep go away [name]! D..don’t look at me!! The last thing I need is you looking at me right now.\"\n\n"); - outputText("That’s quite the surprise. Does the proud fighter she normaly is turn into an awkward village girl the moment shes wet? Well regardless you guess you will have to visit her later because there’s no way she’s letting you approach her right now.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 4, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 0, 1); - doNext(playerMenu); -} - } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/Diana.as b/classes/classes/Scenes/NPCs/Diana.as index 275830179e..956a2dc1ea 100644 --- a/classes/classes/Scenes/NPCs/Diana.as +++ b/classes/classes/Scenes/NPCs/Diana.as @@ -34,8 +34,6 @@ package classes.Scenes.NPCs var cost:Number = 30; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 3; - if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 4.5; - if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 5; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -43,8 +41,6 @@ package classes.Scenes.NPCs var cost:Number = 50; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 5; - if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 7.5; - if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 10; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -58,8 +54,6 @@ package classes.Scenes.NPCs if (findPerk(PerkLib.WizardsFocus) >= 0) mod1 += .4; if (findPerk(PerkLib.SpellpowerHealing) >= 0) mod1 += .2; if (findPerk(PerkLib.NaturalHealingMinor) >= 0) mod1 += .3; - if (findPerk(PerkLib.NaturalHealingMajor) >= 0) mod1 += .4; - if (findPerk(PerkLib.NaturalHealingEpic) >= 0) mod1 += .5; return mod1; } public function SpellMod():Number { @@ -266,8 +260,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 18; - this.bonusHP = 730; - this.bonusMana = 285; + this.bonusHP = 725; + this.bonusMana = 265; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -281,8 +275,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 21; - this.bonusHP = 785; - this.bonusMana = 310; + this.bonusHP = 220; + this.bonusMana = 120; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -296,8 +290,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 24; - this.bonusHP = 790; - this.bonusMana = 330; + this.bonusHP = 220; + this.bonusMana = 120; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -311,8 +305,8 @@ package classes.Scenes.NPCs this.weaponAttack = 9; this.armorDef = 12; this.level = 27; - this.bonusHP = 845; - this.bonusMana = 355; + this.bonusHP = 220; + this.bonusMana = 120; this.gems = rand(5) + 15; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -421,13 +415,13 @@ package classes.Scenes.NPCs this.createPerk(PerkLib.NaturalHealingMinor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 6) { - this.createPerk(PerkLib.NaturalHealingMajor, 0, 0, 0, 0); + //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 7) { - this.createPerk(PerkLib.SoulSprite, 0, 0, 0, 0); + //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 8) { - this.createPerk(PerkLib.NaturalHealingEpic, 0, 0, 0, 0); + //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_FOLLOWER] == 3 || flags[kFLAGS.DIANA_FOLLOWER] == 4) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 6850a3f379..81d0c624e2 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -225,7 +225,7 @@ public function wonOverDianaOralM():void { if (flags[kFLAGS.DIANA_FOLLOWER] >= 2) { outputText("You don’t really even have to tell her, she’s already practically drooling. She quickly grabs your "); if (player.cockTotal() > 1) outputText("largest "); - outputText("cock, before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); + outputText("cock. , before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); outputText("Pleased you start pushing your "); if (player.cockTotal() > 1) outputText("largest "); outputText("[cock] into her eager mouth, "); @@ -440,7 +440,7 @@ public function wonOverDianaRape():void { outputText("Grunting, and with a huge amount of self control, you pull yourself out of her, spraying your load over her back. Satisfied, you climb off her, leaving her to hang off the " + object() + ", crying softly to herself, while you dress yourself and leave.\n\n"); } //if (player.isAlraune()) x; - if (flags[kFLAGS.DIANA_LVL_UP] < 3) flags[kFLAGS.DIANA_FOLLOWER] = 3; + if (flags[kFLAGS.DIANA_LVL_UP] < 2) flags[kFLAGS.DIANA_FOLLOWER] = 3; else flags[kFLAGS.DIANA_FOLLOWER] = 4; player.orgasm(); cleanupAfterCombat(); @@ -459,7 +459,7 @@ public function wonOverDianaSpare():void { flags[kFLAGS.DIANA_DEFEATS_COUNTER]++; if (flags[kFLAGS.DIANA_DEFEATS_COUNTER] == 1 && flags[kFLAGS.DIANA_LVL_UP] == 0) { if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers2)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers2, 4, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers2, 0, 0, 0, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 0, 18); flags[kFLAGS.DIANA_DEFEATS_COUNTER] = 0; flags[kFLAGS.DIANA_LVL_UP] = 1; } diff --git a/classes/classes/Scenes/NPCs/EmberScene.as b/classes/classes/Scenes/NPCs/EmberScene.as index 701e6fcfe3..697edddec3 100644 --- a/classes/classes/Scenes/NPCs/EmberScene.as +++ b/classes/classes/Scenes/NPCs/EmberScene.as @@ -209,11 +209,6 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface } //Approaching Ember (Z) - public function emberCampMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEmber(); - else emberCampMenu(); - } - public function emberCampMenu():void { clearOutput(); @@ -4620,13 +4615,5 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface outputText("\n\nYou look about, but see no sign of the dragon... " + emberMF("he", "she") + "'s probably gone to get breakfast." + player.clothedOrNaked(".. looking to the side, you spot your [armorName] neatly folded beside the nest.") + " Smiling to yourself, you " + player.clothedOrNaked("put on your [armorName] and ") + "get ready for another day..."); doNext(playerMenu); } - - public function mishapsLunaEmber():void { - clearOutput(); - outputText("As you call for Ember the dragon simply does not show up. You can see " + emberMF("him", "her") + " in the sky searching angrily for something and even hear " + emberMF("him", "her") + " swear in the distance. Whatever made Ember so mad you don’t want to know. You decide to call " + emberMF("him", "her") + " later so to avoid getting yourself burned as " + emberMF("he", "she") + " indeed start to torch the landscape at random.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 2, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 1, 0, 0); - doNext(playerMenu); - } } } diff --git a/classes/classes/Scenes/NPCs/EtnaFollower.as b/classes/classes/Scenes/NPCs/EtnaFollower.as index a398186a8b..89c187fb86 100644 --- a/classes/classes/Scenes/NPCs/EtnaFollower.as +++ b/classes/classes/Scenes/NPCs/EtnaFollower.as @@ -419,11 +419,6 @@ public function etnaRapeIntro2():void addButton(2, "No", etnaRapeNo); } -public function etnaCampMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEtna(); - else etnaCampMenu(); -} - public function etnaCampMenu():void { spriteSelect(SpriteDb.s_etna); @@ -576,16 +571,6 @@ public function etnaSparsWithPC():void startCombat(new Etna()); } -public function mishapsLunaEtna():void { - clearOutput(); - outputText("You go check on Etna but find her sleeping in broad daylight. She acknowledge you for a second only.\n\n"); - outputText("\"Yawn... Sorry [name] since I found those weird herbs next to my carpet I just feel so drowsy. We will talk again later okay?\"\n\n"); - outputText("Well, guess you will come back later then, but herbs? Now that you look at them these herbs indeed look like catnip. You remove them from Etna direct environment for now. Still who would actually do this kind of prank?\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 1, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 1, 0, 0, 0); - doNext(playerMenu); -} - } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/EvangelineFollower.as b/classes/classes/Scenes/NPCs/EvangelineFollower.as index 756c7c6b4e..753de6c789 100644 --- a/classes/classes/Scenes/NPCs/EvangelineFollower.as +++ b/classes/classes/Scenes/NPCs/EvangelineFollower.as @@ -703,7 +703,7 @@ private function recivingCraftedSoulGem():void { clearOutput(); outputText("As you check on Evangeline she hands a purplish crystal to you.\n\n"); outputText("\"Here's your soul gem. Please use this responsibly, they are very hard to craft, and quite dangerous.\"\n\n"); - outputText("Acquired Soul Gem\n\n"); + outputText("Acquired Soul Gem"); if (flags[kFLAGS.GARGOYLE_QUEST] == 3) flags[kFLAGS.GARGOYLE_QUEST]++; player.removeStatusEffect(StatusEffects.SoulGemCrafting); inventory.takeItem(useables.SOULGEM, meetEvangeline); diff --git a/classes/classes/Scenes/NPCs/HelFollower.as b/classes/classes/Scenes/NPCs/HelFollower.as index 59a240b163..f969c8100d 100644 --- a/classes/classes/Scenes/NPCs/HelFollower.as +++ b/classes/classes/Scenes/NPCs/HelFollower.as @@ -475,10 +475,7 @@ public function angryHelAndIzzyCampHelHereFirst():void { doNext(camp.returnToCampUseOneHour); } -public function heliaFollowerMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaHel(); - else heliaFollowerMenu(); -} + //Introduction -- Followers -> Helia public function heliaFollowerMenu(display:Boolean = true):void { @@ -2432,13 +2429,5 @@ outputText("\n\nYour hand slides across Sophie’s stomach to squeeze one of her menu(); doNext(camp.returnToCampUseOneHour); } - -public function mishapsLunaHel():void { - clearOutput(); - outputText("Helia is currently sleeping on her mats holding a bottle of firewater. You smell the bottle up and find clear sign of soporifics inside. Whoever did this wanted to get rid of her for a few hours. Regardless the result is the same and no matter what you do the lizard girl won’t wake up, might as well try again later.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 3, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 1, 0); - doNext(playerMenu); -} } } diff --git a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as index 8753264117..4f9fe5bc03 100644 --- a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as @@ -346,7 +346,7 @@ private function isabellasAccentCoaching():void { clearOutput(); //Cooldown rejection if(flags[kFLAGS.ISABELLA_ACCENT_TRAINING_COOLDOWN] > 1) { - outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); + outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); //Back to follower menu! doNext(callForFollowerIsabella); return; @@ -983,7 +983,7 @@ public function angryMurble():void { clearOutput(); outputText("You come to Isabella's part of the camp with Marble in tow, supposing now is as good a time as ever to introduce the two. Marble greats Isabella warmly but immediately starts bombarding her with questions about her origin. From her persistence, it seems she is interested in meeting another cow-girl. Though a little overwhelmed, Isabella recovers quickly, explaining her origins and the impurity of her cow-girl nature. Marble is visibly disappointed.\n\n"); - outputText("The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); + outputText("\"The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); flags[kFLAGS.ISABELLA_MURBLE_BLEH] = 2; doNext(playerMenu); } diff --git a/classes/classes/Scenes/NPCs/IsabellaScene.as b/classes/classes/Scenes/NPCs/IsabellaScene.as index 50cbb3947b..a9d2865332 100644 --- a/classes/classes/Scenes/NPCs/IsabellaScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaScene.as @@ -258,7 +258,7 @@ public function unwelcomeFightCowGal():void { public function fightIsabella():void { clearOutput(); if(!isabellaFollower()) isabellaFollowerScene.isabellaAffection(-5); - outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); + outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); startCombat(new Isabella()); flags[kFLAGS.ISABELLA_ANGRY_AT_PC_COUNTER] += 72; spriteSelect(31); diff --git a/classes/classes/Scenes/NPCs/IzmaScene.as b/classes/classes/Scenes/NPCs/IzmaScene.as index 95648750a7..30dfbd9e67 100644 --- a/classes/classes/Scenes/NPCs/IzmaScene.as +++ b/classes/classes/Scenes/NPCs/IzmaScene.as @@ -1654,11 +1654,6 @@ private function submitToLakeIzma():void { doNext(camp.returnToCampUseOneHour); } -public function izmaFollowerMenu2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaIzma(); - else izmaFollowerMenu(); -} - //9999 CAMP FOLLOWER // tion camp //[Follower options] @@ -3587,14 +3582,5 @@ private function izmaValeriaToggle():void { addButton(4,"Back",izmaValeriaSubmenu); } -public function mishapsLunaIzma():void { - clearOutput(); - outputText("You pass by Izma’s spot and to your surprise, the smell of fish assaults your nose. For some weird reason, the entire area around Izma bedroll now smells of fish and, heck, it smells so much you decide to keep your distance until it’s gone.\n\n"); - outputText("Perhaps someone dropped fish oil around here, but who?\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 4, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 0, 1); - doNext(playerMenu); -} - } } diff --git a/classes/classes/Scenes/NPCs/JojoScene.as b/classes/classes/Scenes/NPCs/JojoScene.as index 69547dd6cf..49692b445b 100644 --- a/classes/classes/Scenes/NPCs/JojoScene.as +++ b/classes/classes/Scenes/NPCs/JojoScene.as @@ -2440,11 +2440,6 @@ public function refuseOfferOfHelp():void jojoCampMenu(); } -public function jojoCamp2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaJojo(); - else jojoCamp(); -} - public function jojoCamp():void { clearOutput(); jojoSprite(); @@ -3312,13 +3307,6 @@ private function suckJojosCock():void { doNext(camp.returnToCampUseOneHour); } -public function mishapsLunaJojo():void { - clearOutput(); - outputText("Jojo is looking at the ground in front of his training area in annoyance. Seems someone has drawn an ugly imp in the dirt using red paint and the imp happens to be jerking a 10 foot long cock. You spot Luna in the distance, cleaning the area with a smile. Surely it couldn’t have been her.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 2, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 1, 0, 0); - doNext(playerMenu); -} } } diff --git a/classes/classes/Scenes/NPCs/JoyScene.as b/classes/classes/Scenes/NPCs/JoyScene.as index ec6e52bf8e..c3dd4f52d6 100644 --- a/classes/classes/Scenes/NPCs/JoyScene.as +++ b/classes/classes/Scenes/NPCs/JoyScene.as @@ -581,7 +581,7 @@ import classes.lists.Gender; outputText("...Well, you're not really anything. And it's not really a lot of fun... can't you turn into a boy or a girl?"); } //Corruption and perk check - outputText("\"\n\nNext, Joy closes her eyes and focuses on your aura."); + outputText("\n\nNext, Joy closes her eyes and focuses on your aura."); if (player.cor < 5) { //Pure outputText("\n\n\"Your aura's, like, super shiny white - I can't remember seeing anyone as clean and pretty as you!\""); } @@ -1186,7 +1186,7 @@ import classes.lists.Gender; outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this will make my funstick bigger. Are you sure you want that [name]?\""); } else { - outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); + outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); } doYesNo(giveJoyAnIncubiDraftForReal, dontGiveJoyAnIncubiDraft); } diff --git a/classes/classes/Scenes/NPCs/KihaFollower.as b/classes/classes/Scenes/NPCs/KihaFollower.as index eb7014af40..7cc966cb47 100644 --- a/classes/classes/Scenes/NPCs/KihaFollower.as +++ b/classes/classes/Scenes/NPCs/KihaFollower.as @@ -413,8 +413,11 @@ internal function winSparWithKiha():void { outputText("[pg]\"W-what are you doing!?\" she starts, pushing away. \"You - you dumbass!\" Face as red as her scales, she storms off to the other side of camp."); outputText("[pg]You sigh and head back towards your stuff."); kihaAffection(20); + /*if(flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + }*/ } - lvlUpCheckup(); cleanupAfterCombat(); } //Spar with Friendly Kiha - Kiha Wins (Z) @@ -1850,7 +1853,54 @@ internal function pcLosesDomFight():void { //[PC wins the fight] internal function pcWinsDomFight():void { clearOutput(); - lvlUpCheckup(); + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 2; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 3; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 4; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 5; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 6; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 7; + } + } outputText(images.showImage("kiha-dom-win")); spriteSelect(72); var x:Number = player.cockThatFits(67); @@ -2035,57 +2085,6 @@ private function guardMyCampKiha():void { addButton(0,"Next",warmLoverKihaIntro); } -private function lvlUpCheckup():void { - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 2; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 3; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 4; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 5; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 6; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 7; - } - } -} - private function giveKihaUndergarmentsPrompt():void { clearOutput(); outputText("You ask Kiha if she's willing to wear something to cover that nether regions of hers. She could use a bit of modesty after all. "); diff --git a/classes/classes/Scenes/NPCs/KihaScene.as b/classes/classes/Scenes/NPCs/KihaScene.as index d138799d56..8b76e7d794 100644 --- a/classes/classes/Scenes/NPCs/KihaScene.as +++ b/classes/classes/Scenes/NPCs/KihaScene.as @@ -21,12 +21,7 @@ public class KihaScene extends NPCAwareContent { //const PC_WIN_LAST_KIHA_FIGHT:int = 345; //const KIHA_CHOKED_OUT_PC:int = 432; -//Encounter Dragon-Gal -public function encounterKiha2():void { - if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaKiha(); - else encounterKiha(); -} - +//Encounter Dragon-Gal public function encounterKiha():void { var temp:Function; clearOutput(); @@ -906,17 +901,5 @@ private function analRapuzulaKiha():void { flags[kFLAGS.GOTTEN_INQUISITOR_ARMOR] = 2; inventory.takeItem(weaponsrange.I_TOME_, camp.returnToCampUseOneHour); } - - public function mishapsLunaKiha():void { - clearOutput(); - outputText("As you walk up to Kiha, you notice the dragon girl appears to be having a tantrum.\n\n"); - outputText("\"[name], are you the asshole that left all that burnt meat right next to my sleep area? What's the message behind this, you don’t like my cooking?!\"\n\n"); - outputText("You swear it's not you. Besides, you don’t hunt for food, so where would you even find the meat?\n\n"); - outputText("\"Umph! Whatever. Come back later, doofus, I need to clean up this mess!\"\n\n"); - outputText("You walk away and notice Luna in the distance cooking today’s meal with a satisfied smile.\n\n"); - if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 3, 1); - else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 1, 0); - doNext(playerMenu); - } } } diff --git a/classes/classes/Scenes/NPCs/LatexGirl.as b/classes/classes/Scenes/NPCs/LatexGirl.as index 3859ca1e85..930730e237 100644 --- a/classes/classes/Scenes/NPCs/LatexGirl.as +++ b/classes/classes/Scenes/NPCs/LatexGirl.as @@ -645,7 +645,7 @@ private function changeGooDick():void { else outputText("I want you to order me to shift it often. "); outputText("Changing myself further, twisting my body into a sexual playground for you... that would be the ultimate thrill!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"I'll need something masculine if you want me to grow a cock, [Master]. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She shudders and closes her eyes, imagining herself with a rigid equine pole. Your goo must have a bit of a fetish."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was.\""); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was."); } //High Happiness + Whatever Obedience(F) else if(gooHappiness() >= 70) { @@ -654,7 +654,7 @@ private function changeGooDick():void { else outputText("she'd like to change what kind of dick she has."); outputText(" She beams and titters, \"Omigod, I loved growing penises back before I changed! It was so much fun to see how surprised it would make people and to make new shapes to see how they'd feel. Let's do it!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I'll need something masculine if you want me to grow a cock. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She smiles wickedly."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was.\""); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was."); } //Low Obedience(F) else { diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index 1ecdc4fd2b..aea648bbe2 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -8,7 +8,6 @@ package classes.Scenes.NPCs import classes.BodyParts.Butt; import classes.BodyParts.Hips; import classes.Scenes.SceneLib; - import classes.GlobalFlags.kFLAGS; import classes.internals.*; use namespace CoC; @@ -52,14 +51,12 @@ package classes.Scenes.NPCs override public function defeated(hpVictory:Boolean):void { - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaWon(); - else SceneLib.lunaFollower.fullMoonEventResistWin(); + SceneLib.lunaFollower.fullMoonEventResistWin(); } override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void { - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaLost(); - else SceneLib.lunaFollower.fullMoonEventResistDefeat(); + SceneLib.lunaFollower.fullMoonEventResistDefat(); } public function Luna() @@ -80,52 +77,23 @@ package classes.Scenes.NPCs this.skin.growFur({color:"ashen"}); this.hairColor = "ashen"; this.hairLength = 8; - if (flags[kFLAGS.LUNA_LVL_UP] == 0) { - initStrTouSpeInte(30, 90, 40, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 800; - this.level = 9; - } - if (flags[kFLAGS.LUNA_LVL_UP] == 1) { - initStrTouSpeInte(30, 95, 45, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 800; - this.level = 15; - } - if (flags[kFLAGS.LUNA_LVL_UP] == 2) { - initStrTouSpeInte(35, 100, 50, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 850; - this.level = 21; - } - if (flags[kFLAGS.LUNA_LVL_UP] == 3) { - initStrTouSpeInte(35, 100, 55, 50); - initWisLibSensCor(50, 80, 40, 75); - this.weaponAttack = 37; - this.armorDef = 200; - this.bonusHP = 900; - this.level = 27; - } + initStrTouSpeInte(40, 60, 40, 50); + initWisLibSensCor(50, 80, 40, 75); this.weaponName = "paws"; this.weaponVerb="paw-slash"; + this.weaponAttack = 37; this.armorName = "fur"; + this.armorDef = 2000; + this.bonusHP = 800; this.bonusLust = 10; this.lust = 10; this.lustVuln = 0; this.temperment = TEMPERMENT_LUSTY_GRAPPLES; + this.level = 10; this.gems = 5 + rand(5); this.drop = NO_DROP; this.createPerk(PerkLib.MonsterRegeneration, 5, 0, 0, 0); this.createPerk(PerkLib.EnemyBeastOrAnimalMorphType, 0, 0, 0, 0); - if (flags[kFLAGS.LUNA_LVL_UP] >= 1) this.createPerk(PerkLib.RefinedBodyI, 0, 0, 0, 0); - if (flags[kFLAGS.LUNA_LVL_UP] >= 2) this.createPerk(PerkLib.TankI, 0, 0, 0, 0); - if (flags[kFLAGS.LUNA_LVL_UP] >= 3) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index 6fd9624784..de93b53e4d 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -29,7 +29,7 @@ package classes.Scenes.NPCs { } - //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted (PC no WW), 13,14 - unchained post moon accepted and talked about lycantrophy (PC no WW), 15,16 - unchained post moon accepted (PC WW) + //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted public function lunaAffection(changes:Number = 0):Number { @@ -121,10 +121,7 @@ package classes.Scenes.NPCs if (flags[kFLAGS.SLEEP_WITH] != "Luna") addButton(5, "Sleep With", lunaSleepToggle); else addButton(5, "Sleep Alone", lunaSleepToggle); } - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - if (flags[kFLAGS.CAMP_UPGRADES_SPARING_RING] >= 2) addButton(2, "Spar", sparLuna); - addButton(6, "Sex", sexMenuMain); - } + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(6, "Sex", sexMenuMain); if (flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 10) addButton(7, "Unchain", lunaChainToggle).hint("Unchain Luna and see what happens."); if (flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 8) addButton(7, "Chain", lunaChainToggle).hint("Chain Luna."); addButton(14, "Leave", camp.campFollowers); @@ -156,7 +153,6 @@ package classes.Scenes.NPCs addButton(3, "Camp", talkMenuLunaCampThoughts); if (flags[kFLAGS.LUNA_FOLLOWER] > 6) addButton(4, "Lycanthropy", talkMenuLunaLycanthropy); else addButtonDisabled(4, "???", "You need to know her better for this."); - if ((flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 14) && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); addButton(14, "Back", mainLunaMenu); } public function talkMenuLunaHer():void { @@ -214,117 +210,10 @@ package classes.Scenes.NPCs outputText("\"Well, my hormonal system is totally messed up as the lunar cycle causes me to go into heat.The closer we lycanthropes get to the full moon, the hornier we get, until we all turn into sex crazed beasts willing to go so far as to rape innocent people for a good fuck. That said, sex is not all there is to it. We are all gifted with the ability to change form at will, and I know for a fact that we’re also faster, "); outputText("stronger, and sturdier than any normal morph or human. There is no known permanent cure to lycanthropy. The truth is that, while I could change into something different using transformatives, I think that so long as whatever I transform into is an animal I would still go mad during a full moon. Even worse, my bite can turn about anyone into a lycanthrope the same as me.\"\n\n"); outputText("Guess she really is more than just a cute pup.\n\n"); - if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 13; - else flags[kFLAGS.LUNA_FOLLOWER] = 14; lunaJealousy(-50); lunaAffection(2); doNext(camp.returnToCampUseOneHour); } - public function talkMenuBiteMe():void { - clearOutput(); - outputText("It occurs to you that you could gain the same kind of powers as Luna if you asked her. That said, is that what you truly want?\n\n"); - menu(); - addButton(0, "Yes", talkMenuBiteMeYes); - addButton(1, "No", talkMenuLuna); - } - public function talkMenuBiteMeYes():void { - outputText("You ask Luna the one thing she likely never expected, would she mind biting you? Luna almost panics the moment you request it, though she also blushes.\n\n"); - outputText("\"" + player.mf("Master","Mistress") + " I...This is a very important choice you are making here, did you truly think it through? I mean once you are cursed there's no removing it, you will truly be just like me.\"\n\n"); - outputText("You don’t mind it, truthfully if this can tie the both of you together better, you will do it all the more. Luna nods and undresses as she changes shape. You hold your arm before her and she lose all form of restraint biting you with just the required strength to draw blood. At first it hurts like crazy but then the pain recedes, replaced with spreading pleasure as the wounds begin to throb. "); - outputText("Your" + (player.hasCock() ? " [cock] goes fully erect" : "") + "" + (player.gender == 3 ? " and your" : "") + "" + (player.hasVagina() ? " pussy starts moistening" : "") + " from this weird feeling, something's not right.\n\n"); - outputText("" + (player.humanScore() < 30 ? "Your body starts changing, and to your surprise, its features warp back to their former human features. You begin to think she may have purged you of the transformations that afflicted you, but that's not exactly it. " : "") + "Heat begins to spread from your wound and you start panting, trying to vent out the pleasure and the hot feeling in your body as something fundamental about you changes.\n\n"); - outputText("Fur begins to grow on various point of your body, namely your arms and legs. Your nails sharpen and curve, turning into a full set of claws as your hands and feet reshape into 5 digit paws. You groan in pleasure, revealing your forming canines as your spine extends into a furry tail while your ears migrate to the top of your head, covering in fur and changing into triangular points like those of a wolf. You pant in pleasure at the change, revealing a moist dog like tongue"); - if (player.hasCock()) outputText(" as you feel a tightness near the base of your cock where your skin seems to be bunching up. A canine-looking sheath begins forming around your cock’s base, tightening and pulling your penis inside its depths. A hot feeling envelops your member as it surges out and starts throbbing, the crown now a point. The sensations are too much for you. You throw back your head and howl as the transformation completes, your pointed shaft erupting with intense force"); - outputText(".\n\n"); - player.lowerBody = LowerBody.WOLF; - if (player.legCount != 2) player.legCount = 2; - player.tailType = Tail.WOLF; - if (player.tailCount != 1) player.tailCount = 1; - player.rearBody.type = RearBody.WOLF_COLLAR; - player.arms.type = Arms.WOLF; - player.faceType = Face.WOLF_FANGS; - player.ears.type = Ears.WOLF; - player.eyes.type = Eyes.FERAL; - player.tongue.type = Tongue.DOG; - player.wings.type = Wings.NONE; - player.antennae.type = Antennae.NONE; - player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); - if (player.hasCock() && player.wolfCocks() < 1) { - var selectedCockValue:int = -1; - for (var indexI:int = 0; indexI < player.cocks.length; indexI++) - { - if (player.cocks[indexI].cockType != CockTypesEnum.WOLF) - { - selectedCockValue = indexI; - break; - } - } - if (selectedCockValue != -1) { - player.cocks[selectedCockValue].cockType = CockTypesEnum.WOLF; - player.cocks[selectedCockValue].knotMultiplier = 1.1; - player.cocks[selectedCockValue].thickenCock(2); - } - } - var bonusStats:Number = 0; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; - if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; - player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); - player.dynStats("str", (bonusStats * player.newGamePlusMod()), "tou", (bonusStats * player.newGamePlusMod()), "spe", (bonusStats * player.newGamePlusMod()), "cor", 20); - statScreenRefresh(); - outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); - doNext(sexMenuDominateHer); - } - - public function sparLuna():void { - clearOutput(); - outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); - outputText("\"" + player.mf("Master", "Mistress") + ", we both know it is best not to awaken my instincts during the day. I am a pitiful woman.\"\n\n"); - outputText("Well it's exactly because she is both strong and dangerous that you need her help to become so yourself.\n\n"); - outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); - outputText("You both head to the ring and get ready for a brawl. She removes her dress and gets stark naked before you " + (camp.companionsCount() >= 2 ? "to the consternation of everyone who’s looking, " : "") + "before starting to pant as she changes shape. You recognise the green glow of crazed desire in her eyes now and almost regret your choice. Losing to her will likely result into you both having sex whether you like it or not.\n\n"); - startCombat(new Luna()); - } - public function sparLunaWon():void { - clearOutput(); - outputText("Luna sit down like a good well behaved dog to admit defeat.\n\n"); - outputText("\"I yield " + player.mf("Master", "Mistress") + ". You win this one. I hope this warm up was worth your time.\"\n\n"); - outputText("You thank Luna for helping you with your training and give her freedom to resume duty which she gladly do.\n\n"); - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.LUNA_DEFEATS_COUNTER]++; - else flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 1; - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 2 && flags[kFLAGS.LUNA_LVL_UP] == 0) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 12); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 12, 0, 0, 0); - flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.LUNA_LVL_UP] = 1; - } - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 3 && flags[kFLAGS.LUNA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 18, 0, 0, 0); - flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.LUNA_LVL_UP] = 2; - } - if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.LUNA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 24, 0, 0, 0); - flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.LUNA_LVL_UP] = 3; - } - } - cleanupAfterCombat(); - doNext(camp.returnToCampUseOneHour); - } - public function sparLunaLost():void { - clearOutput(); - outputText("Luna pounces on you with a hungry growl. Guess you had it coming when you asked her to spar you.\n\n"); - outputText("\"You lost " + player.mf("Master", "Mistress") + ", therefore I’m entitled to do whatever I want with you. Well I don’t care what it is as long as we do it now.\"\n\n"); - monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); - cleanupAfterCombat(); - doNext(sexMenuDominateHer); - } public function mealLuna():void { clearOutput(); @@ -359,10 +248,10 @@ package classes.Scenes.NPCs lunaAffection(5); HPChange(Math.round(player.maxHP() * .5), true); if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - outputText("\nLuna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); + outputText(" Luna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); menu(); - addButton(0, "Yes", sexMenuMain); - addButton(1, "No", nurseLunaEnd); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(0, "Yes", sexMenuMain); + addButton(0, "No", nurseLunaEnd); } else doNext(camp.returnToCampUseFourHours); } @@ -417,9 +306,7 @@ package classes.Scenes.NPCs if (flags[kFLAGS.LUNA_FOLLOWER] == 5) flags[kFLAGS.LUNA_FOLLOWER] = 6; else if (flags[kFLAGS.LUNA_FOLLOWER] == 7) flags[kFLAGS.LUNA_FOLLOWER] = 8; else if (flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 10; - else if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 12; - else if (flags[kFLAGS.LUNA_FOLLOWER] == 13) flags[kFLAGS.LUNA_FOLLOWER] = 14; - else flags[kFLAGS.LUNA_FOLLOWER] = 16; + else flags[kFLAGS.LUNA_FOLLOWER] = 12; outputText("Luna come over to you.\n\n"); outputText("\"" + player.mf("Master","Mistress") + " you haven’t been using my services in some time. I came to remind you that should you need anything, and by that I truly mean anything you desire, all you need to do is call me. It is always my greatest pleasure to serve you.\"\n\n"); outputText("She walk away to prepare today's food and clean which reminds you that you indeed hadn’t had her food in a while.\n\n"); @@ -455,8 +342,6 @@ package classes.Scenes.NPCs outputText("Well of course. Had she made her needs clear in the first place you would have helped her with them. There was no need for her to hide her desires. That aside, you already thought of her as more than just a maid. You just didn’t know how to tell her. You don’t care if she thinks she is a monster. From your point of view, even in this form she remains cute. To her utter surprise you"); if (!player.isNaked()) outputText(" get rid of your own clothes and"); outputText(" display your naked body, telling her she will get exactly what she wants.\n\n"); - if (flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 11; - if (flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10) flags[kFLAGS.LUNA_FOLLOWER] = 12; flags[kFLAGS.LUNA_MOONING] = 2; doNext(sexMenuVaginal); } @@ -510,7 +395,7 @@ package classes.Scenes.NPCs CoC.instance.timeQ += 6; doNext(camp.sleepWrapper); } - public function fullMoonEventResistDefeat():void { + public function fullMoonEventResistDefat():void { clearOutput(); outputText("You are too weak to keep fighting and Luna senses it. Before you can react she pounces on you. You’re back to the position you were in earlier and this time you are in no way capable of putting up a fight.\n\n"); outputText("\"It's ok, [name], the pain will only last for a few seconds and then...\"\n\n"); @@ -532,7 +417,7 @@ package classes.Scenes.NPCs player.wings.type = Wings.NONE; player.antennae.type = Antennae.NONE; player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); + player.skin.growCoat(Skin.FUR, Skin.COVERAGE_MEDIUM); if (player.hasCock() && player.wolfCocks() < 1) { var selectedCockValue:int = -1; for (var indexI:int = 0; indexI < player.cocks.length; indexI++) @@ -549,9 +434,8 @@ package classes.Scenes.NPCs player.cocks[selectedCockValue].thickenCock(2); } } - player.createPerk(PerkLib.Lycanthropy,40,0,0,0); player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); - statScreenRefresh(); + player.createPerk(PerkLib.Lycanthropy,0,0,0,0); outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); cleanupAfterCombat(); @@ -574,8 +458,8 @@ package classes.Scenes.NPCs else addButtonDisabled(6, "???", "Req. Ayane in camp and 100 affection."); } } - if (player.cor >= 30) addButton(10, "Headpat", sexMenuHeadpat); - else addButtonDisabled(10, "Headpat", "You're too pure for that!"); + if (player.cor < 33) addButton(10, "Headpat", sexMenuHeadpat); + else addButtonDisabled(10, "Headpat", "You're too corrupted for that!"); addButton(14, "Back", mainLunaMenu); } public function sexMenuHeadpat():void { @@ -626,6 +510,7 @@ package classes.Scenes.NPCs lunaJealousy(-50); lunaAffection(2); player.orgasm(); + if (flags[kFLAGS.LUNA_FOLLOWER] < 7) flags[kFLAGS.LUNA_FOLLOWER] = 11; if (flags[kFLAGS.LUNA_MOONING] == 2) { flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -750,7 +635,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 15; + flags[kFLAGS.LUNA_FOLLOWER] = 11; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -779,7 +664,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 15; + flags[kFLAGS.LUNA_FOLLOWER] = 11; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; diff --git a/classes/classes/Scenes/NPCs/Rathazul.as b/classes/classes/Scenes/NPCs/Rathazul.as index 6452220460..c4e6c9c64c 100644 --- a/classes/classes/Scenes/NPCs/Rathazul.as +++ b/classes/classes/Scenes/NPCs/Rathazul.as @@ -863,7 +863,7 @@ private function growLethiciteDefenseYesYesYes():void { private function growLethiciteDefenseGuessNot():void { spriteSelect(49); clearOutput(); - outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power.\""); + outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power."); doNext(returnToRathazulMenu); } diff --git a/classes/classes/Scenes/NPCs/ShouldraFollower.as b/classes/classes/Scenes/NPCs/ShouldraFollower.as index bf8059132a..eb90436416 100644 --- a/classes/classes/Scenes/NPCs/ShouldraFollower.as +++ b/classes/classes/Scenes/NPCs/ShouldraFollower.as @@ -1950,7 +1950,7 @@ private function goAlongWIthShouldrasEatingSpree():void { outputText("\n\nYou struggle forward in your seat and resume grazing on a stack of donuts, though you are hindered somewhat by both the ghost girl's pussy worship and your cramped stomach. The bloated orb has by now pushed your shirt up around your [fullChest] and left your skirt in tatters; it rests between your thighs, your legs having been forced to part under its growing weight. An ominous gurgle erupts from your overtaxed gut; perhaps you've overestimated yourself? You massage the complaining flesh with one hand to ease the pressure while continuing to sate your insatiable appetite with the other, heavenly gouts of angel cake dropping into your abyss of a stomach. Shouldra smiles as the churning and gurgling continues; her fucksucking lips slip off your drooling pussy-flesh and ascend, trailing supersized kisses across your crotch and up to your navel. She nuzzles your bloated belly like a pillow, her hands digging gently into the flesh and kneading with equal parts care and roughness. Your free hand stops massaging and cradles her head, and in a moment of impishness you shove a slice of something gooey and triple-layered into her unsuspecting candied maw. She swallows, surprise turning quickly to a grin of friendly vengeance. \"So that's how we're playing it, big girl?\" Shouldra snickers, before giving your sensitive stomach a hearty slap."); outputText("\n\nYou wince slightly before returning a sloppy food-filled grin... Wait. You're not feeding yourself. What the fuck? The ghost girl answers your confusion with a profiterole that soars into your slack mouth. Damned ghoul, that's just playing dirty! You both devolve into a fierce stuffing contest; your desperate hands snag anything they can from the spread and cram them into the ghost's gullet, while waves of pastries ram themselves into your own defenseless mouth. The combination of the adrenaline-fueled force-feeding frenzy and the increasing pressure of your swelling gut on your button forms a familiar sensation; prickling loins, skipped heartbeats, an intense heat in your flushed cheeks. As you feel the giddy euphoria of an oncoming food coma, Shouldra seizes the moment and dives down into your crotch, lapping and licking every oh-so-sensitive inch she can, teasing and tickling, probing your wet cunt with her jellied tongue."); outputText("\n\nA guttural moan escapes your icing-caked lips as you sink into a creamy smooth orgasm, like sliding into a hot bath. [if (isSquiter = true) \"Hot streams of liquid lust spurt across Maddie's face, drizzling her with your copious fem-spunk. \"][if (isLactating = true) \"Droplets of milk form on your [nipples], soon forming rivers of cream that cascade down your fiery-hot flesh. \"]After a moment of rest, Shouldra squeezes out from under the table, licking your girl-cum from her lips with a satisfied slurp, and helps you to your feet; a task made seriously annoying by your titanic tummy digging in to the edge of the counter. The other patrons remain blissfully unaware of the whole act, including your current nudity. Speaking of which..."); - outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!\""); + outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!"); outputText("\n\nYou leave the bakery and head back to camp, leaving behind a very confused Maddie."); player.orgasm(); doNext(camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/NPCs/SophieFollowerScene.as b/classes/classes/Scenes/NPCs/SophieFollowerScene.as index 19a75beddd..f95017ba29 100644 --- a/classes/classes/Scenes/NPCs/SophieFollowerScene.as +++ b/classes/classes/Scenes/NPCs/SophieFollowerScene.as @@ -1092,9 +1092,9 @@ internal function sophieIncestInHerCooterOrSomethingIDunno():void { outputText("\n\nUnable to resist the feeling of her achingly hard nipples being pressed against you so tightly, you reach out for your daughter's big, creamy udders and grab her hard nipples. You pull your stacked daughter's sensitive buds before you pinch and squeeze them. Not quite done with her, you let go of her nipples, letting your hands sink into the supple flesh of her enormous breasts before grabbing them harder, starting to knead and massage the soft, pliant jugs. The rough and passionate touching of her body only seems to excite and arouse your firstborn further. She's clearly enjoying the groping and teasing of her sensitive breasts, and you draw needy, birdlike coos and cries from her pouty lips. "); - if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); + if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); //[normal speech: - else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); + else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); } //second daughter: else if(daughterCap == 1) { diff --git a/classes/classes/Scenes/NPCs/Urta.as b/classes/classes/Scenes/NPCs/Urta.as index 1f043b9be6..fb96c5da07 100644 --- a/classes/classes/Scenes/NPCs/Urta.as +++ b/classes/classes/Scenes/NPCs/Urta.as @@ -2604,7 +2604,7 @@ private function tellUrtaNoMoreScylla():void { flags[kFLAGS.UNKNOWN_FLAG_NUMBER_00147] = 1; outputText("You let Urta know that you're willing to overlook this, but that Scylla is a slippery slope that's best avoided. She nods, a sober expression on her vulpine face. Once you finish, she replies, \"I understand, but you need to know – when 'it' gets too much for me to handle... if you aren't around to help I'm going to see Edryn. S-she helps... if it wasn't for her I probably would've given up and done something stupid a long time ago. What we have is more important, but unless we can get together every couple days I'll NEED to visit her. "); if(urtaLove()) outputText("Just please, don't doubt my love for you. "); - outputText("Do I need to stop drinking too?"); + outputText("Do I need to stop drinking too?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } @@ -2615,7 +2615,7 @@ private function tellUrtaMoreScyllaIsFine():void { outputText("You give Urta a raunchy, lewd smile and let her know that you're okay with her 'helping' Scylla, and vice-versa, so long as they don't mind you popping in. She smiles and gives you a wink, but her expression darkens after a moment of thought. Urta interrupts to mention, \"There's something else. If I can't find you or Scylla and I NEED to cum, I'll have to visit Edryn. She's probably the only thing that's kept me sane, and if you aren't around to help with my needs I'll visit her. "); if(urtaLove()) outputText("Just remember that YOU'RE the one I love, not her. "); else outputText("Me and her, we've been partners in the guard for a long time, but the sex is just mechanical, to sate us. You don't have to worry about her stealing me away. "); - outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); + outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index 549cf0653f..57cda75a63 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -232,7 +232,6 @@ public class HeXinDao extends BaseContent addButton(1, "DryTent", buyItem,consumables.DRYTENT,sayLine(consumables.DRYTENT,"anemone"),onBuyString).hint("Buy a shriveled tentacle."); addButton(2, "EctoPls", buyItem,consumables.ECTOPLS,sayLine(consumables.ECTOPLS,"ghost"),onBuyString).hint("Buy a bottle of ectoplasm."); addButton(3, "TrapOil", buyItem,consumables.TRAPOIL,sayLine(consumables.TRAPOIL,"sand trap"),onBuyString).hint("Buy a vial of trap oil."); - addButton(4, "Icicle", buyItem,consumables.ICICLE_,sayLine(consumables.ICICLE_,"ice shard"),onBuyString).hint("Buy an icicle."); addButton(14, "Back", mogahenmerchant); statScreenRefresh(); } @@ -485,7 +484,7 @@ public function soularena():void { outputText("Picking the one in the middle prepared for challanges you enter there and looking around checking who if there is currently anyone up for a challange."); menu(); addButton(0, "Gaunlet 1", gaunletchallange1fight1).hint("Fight 3 diff enemies one after another."); - if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); + //if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); //addButton(2, "Gaunlet 3", gaunletchallange3).hint("Fight 5 diff enemies one after another."); //addButton(3, "Gaunlet 4", gaunletchallange4).hint("Fight 6 diff enemies one after another."); //addButton(4, "Gaunlet 5", gaunletchallange5).hint("Fight 7 diff enemies one after another."); @@ -507,11 +506,6 @@ public function soularena():void { monster.createStatusEffect(StatusEffects.NoLoot, 0, 0, 0, 0); monster.XP = Math.round(monster.XP / 2); } - public function gaunletsinbetween():void { - cleanupAfterCombat(); - player.createStatusEffect(StatusEffects.SoulArena, 0, 0, 0, 0); - player.createStatusEffect(StatusEffects.SoulArenaGaunlet, 0, 0, 0, 0); - } public function gaunletchallange1fight1():void { clearOutput(); outputText("You register for the gauntlet challenge then when called, move out beyond the arena gate to face your opponent. The crowd is big, you sure will have quite the audience. A man with a necktie and a weird stick screams across the area.\n\n"); @@ -526,16 +520,14 @@ public function soularena():void { } public function gaunletchallange1fight2():void { clearOutput(); - gaunletsinbetween(); - outputText("As the last of the golem falls down, the commentator resumes.\n\n"); + outputText("As the last of the golem falls down, the commentator resumes.\n\n"); outputText("\"This one is straight from the woods. Freshly caught and horny to boot. Can our champion’s strength overcome the beast’s lust? LET'S FIND OUT!!\"\n\n"); outputText("A shadow moves out behind the gate, revealing the shape of a fluid starved tentacle beast.\n\n"); startCombat(new TentacleBeast()); } public function gaunletchallange1fight3():void { clearOutput(); - gaunletsinbetween(); - outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); + outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); outputText("\"This contestant is smaller than the last two... Smarter too, and most of all extremely deadly. She’s paid a handsome sack of gems daily to kick the ass of anyone who reach this stage, yet is by far the deadliest combatant of her division. She’s your favorite and an expert huntress. Here she comes... Merisiel the dark elf!!!\"\n\n"); outputText("A woman with dark skin walks by the entrance of the arena with only a bow for a weapon. She sure does look like an elf, however. She’s nothing like the gentle creature from your childhood stories as she observes you with a cruel, calculative gaze. The dark elf readies her bow, smirking.\n\n"); startCombat(new DarkElfScout()); @@ -567,7 +559,6 @@ public function soularena():void { } public function gaunletchallange2fight2():void { clearOutput(); - gaunletsinbetween(); outputText("As the goblin falls unconscious to the ground the crowd cheer for you.\n\n"); outputText("\"It would seems the hero squashed that midget good but were only beginning. If I may the next contestant has been sex starved for two consecutive month and is desperate to sow his seed hence now we release... THE HOUND!!!\"\n\n"); outputText("A massive hellhound of proportion larger than normal rush out of an opening gate. Its eye burns with lust.\n\n"); @@ -575,36 +566,27 @@ public function soularena():void { } public function gaunletchallange2fight3():void { clearOutput(); - gaunletsinbetween(); - outputText("The mutt fall defeated to the floor as the crowd scream your name. The announcer announce the next contestant.\n\n"); - outputText("\"The next opponent is a fighter known and loved by the public. You have heard her name told in shallow whispers for the next opponent is an expert of the terrible art known as BDSM. Yes you have all been waiting for her so cheer up for Malady the drider!!!\"\n\n"); - outputText("A drider in bondage suit comes out of the gate and eyes you amused.\n\n"); - outputText("\"You are my opponent uh? Doesn’t look like much. Little pet, by the time I’m done binding you, you will seldom call me mistress!\"\n\n"); + outputText("Placeholder.\n\n"); + outputText("Placeholder.\n\n"); startCombat(new CorruptedDrider()); } public function gaunletchallange2fight4():void { clearOutput(); - gaunletsinbetween(); - outputText("As the drider falls defeated the crowd cheer to your victory. That said the battle is far from over yet. A large amount of shadows mass behind the opposite gate and already you can guess what's coming up for you.\n\n"); - outputText("\"The final contestant is both a new opponent and a test! The town golemancer has been working extra shifts on these thing she calls her babies!! Using the traditional gargoyle model but deprived of soul so for the purpose of mass production these living weapons will mercilessly beat the hell out of the contestant. Who do you think will win the living or the artificial creation? LEEEEETS FIND OUT!!!!!!\"\n\n"); - outputText("A full squad of stone gargoyle pour out of the gate their mace like tail trailing in the sands. Their claws are sharp and their soulless gaze tells you it will end poorly should you lose.\n\n"); + outputText("Placeholder.\n\n"); startCombat(new BossGolems()); } public function gaunletchallange2postfight():void { clearOutput(); - outputText("The last gargoyle crumble to rubble and you hold its head up toward the public in victory.\n\n"); - outputText("\"The challenger defeated all of his opponent what a miracle! Challenger you may now exit the arena and claim your prize, well done!\"\n\n"); - outputText("You make your way toward the exit and to your surprise meet face to face with the town golemancer. She grudgingly handle you your reward.\n\n"); - outputText("\"I’m supposed to reward you "); + outputText("Placeholder.\n\n"); if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] >= 2) { - outputText("a full chest of soulstone. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); + outputText("\"Good show, champion. As a reward for your performance, please accept these 20 spirit stones. Please do come back again and maybe next time you could even try the harder challenge.\"\n\n"); flags[kFLAGS.SPIRIT_STONES] += 20; cleanupAfterCombat(); } else { - outputText("with this scepter. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); + outputText("Placeholder.\n\n"); flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] = 2; - inventory.takeItem(weapons.SCECOMM, cleanupAfterCombat); + inventory.takeItem(weaponsrange.BOWGUID, cleanupAfterCombat); } } public function restaurantShiraOfTheEast():void { diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index 4796f32ff3..d6c72c2252 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -7,7 +7,6 @@ package classes.Scenes.Places.HeXinDao import classes.*; import classes.GlobalFlags.kFLAGS; import classes.Scenes.SceneLib; - import classes.BodyParts.Tail; public class JourneyToTheEast extends HeXinDaoAbstractContent { @@ -20,10 +19,6 @@ package classes.Scenes.Places.HeXinDao outputText("You enter the town local Inn ‘Journey to the East’ and look around. "); } outputText("You can see many people enjoying a meal or drink in the dining hall, a barman standing by ready to serve drinks."); - if (model.time.hours >= 18 && rand(4) == 0) { - ChiChiDrunkSex(); - return; - } menu(); addButton(0, "Drink", drinkAlcohol); //addButton(4, "", );mission giving npc @@ -44,17 +39,15 @@ package classes.Scenes.Places.HeXinDao addButton(2, "NoceLiq", buyDrink, consumables.NOCELIQ); addButton(3, "OniSake", buyDrink, consumables.ONISAKE); addButton(4, "SalamFW", buyDrink, consumables.SALAMFW); - addButton(12, "BimboL", buyDrink, consumables.BIMBOLQ); - addButton(13, "BroBrew", buyDrink, consumables.BROBREW); addButton(14, "Back", notThirsty); } - //drink list (to be expanded) fire mouse TF, some generic nonTF beers + private function notThirsty():void { clearOutput(); outputText("In the end you realise you are not thirsty after all and wave a goodbye before leaving.\n\n"); doNext(curry(enteringInn,false)); } - + private function buyDrink(drink:ItemType):void{ var cost:int = drink.value * 3; if(player.gems < cost){ @@ -67,66 +60,7 @@ package classes.Scenes.Places.HeXinDao outputText("\n\nThe barman hands over the drink you ordered."); inventory.takeItem(drink, drinkAlcohol); } - - public function ChiChiDrunkSex():void { - clearOutput(); - outputText("As you enter the bar you hear a feminine laughter swiftly spotting what seems to be "); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] >= 20) outputText("Chi Chi"); - else if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] < 20) outputText("Chi Chi the waitress from the exotic food restaurant"); - else outputText("a blazing mouse girl"); - outputText(" sitting on one of the stool drinking sake.\n\n"); - outputText("\"Yeah, and after I told it I was the top girl here I punched it in the face, Woooooooo!\""); - outputText("The barman sighs, pretending not to notice the drunken mouse, aside for when he has to serve her a new drink. Just as you are about to order something she realises you are there and engages in conversation.\n\n"); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) outputText("\"Gaaaaah, [name], why do you hang around all those girls. Worse why do you fuck with them and not me?! Its like you are a " + player.mf("go go boy","cheap whore") + " selling your body to everyone and thish drives me mad! Yeaaa, I’m going to prove them all I’m the top shlut!\""); - else if (flags[kFLAGS.CHI_CHI_FOLLOWER] == 1) outputText("\"Hey... you’re that so called champ who lost in the arena?! Well I like you. I like you so much I’d want you as my " + player.mf("boy","girl") + "friend but waaaah I’m way too shy to tell you that right! Well don’t go tell [name] I like " + player.mf("him","her") + " got it? Yeah who cares about that! Barman a round for [name] the best person I met woooo. Now let’s have sex!\""); - else outputText("\"Hey you... yesh you, the tall person over there! Think you can fight?! Well I’m pretty sure nobody in this village hash the guts to anyway. If you dare show up in the arena I will beat you to death like I do everyone. Now that I think of it, there are other kinds of battle I can beat people in. Bet you're the kind who fucks every demon you meet. Well not tonight, letsh bang!\""); - outputText("Wait, what? You barely have the time to mutter a reply before the red cheeked mousette pushes you on the nearest table and climbs over you. The barman pulls a curtain around your table, he must be used to this.\n\n"); - outputText("\"Yeshh you heard me you big idiot. I’m going to fuck with you here and now! So don’t you dare try to run away because I will get very mad if you do.\""); - outputText("Do you let her?\n\n"); - menu(); - addButton(0, "Let Her", drunksex,true); - addButton(1, "Refuse", drunksex,false); - } - private function drunksex(selected:Boolean):void { - if (!selected) { - outputText("" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 0 ? "Chi Chi" : "The mouse") + " is clearly out of it. Better stop her now before she does something she will regret later. You shove her to the side and run for the exit of the bar. Hearing her swear in background. Once outside you head back to camp."); - doNext(camp.returnToCampUseOneHour); - } - else { - outputText("You would have to be an idiot indeed to refuse this free fuck. The drunken mouse girl licks her lips in anticipation, grabbing your clothes and begins to removing them one-by-one. Unsurprisingly, her own clothes barely takes a second to remove. She is so close now you can feel her breath on your neck."); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) { - outputText(" The mousette introduces herself.\n\n"); - outputText("\"My name’s Chi Chi by the way, but... oh why does it matter? What's important is that we are about to have a lot of fun.\""); - } - //post marriage - if (player.hasCock()) { - outputText("Chi Chi initiates with a wet but warm kiss; Her tongue dancing tango with yours. While small in stature, she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how her burning tail and fur isn't actually setting everything on fire around her, especially you. You inquire on this matter.\n\n"); - outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\"\n\n"); - outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore, you slowly tease the entrance of her warm canal with your [cock]. If anything, despite being wet you can already feel how hot her oven is from the outside and can’t help but hope you won’t end up burned. Chi Chi however has no such concern and out of impatience starts stroking your dick with her embery tail.\n\n"); - outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\"\n\n"); - outputText("You're surprised by the direct contact with her fiery tail, even more so by the fact that it didn’t leave your dick with a third degree burn. Deciding to give the hot mouse what she wants, you put it in. Her vagina immediately starts milking you as if it was a thirsty mouth seeking water, and the frantic moving of her hips up down doesn’t help it.\n\n"); - outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\"\n\n"); - outputText("Her pussy starts heating even more and before you know it, it actually transfers to you. Wow, your urethra is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, only the cool passage of cum can free you from this heat! You begin to piston in and out of Chi Chi desperate for a cooling release.\n\n"); - outputText("Both desperate for a way to get rid of the heat, the two of you manage to cum together, your jizz filling Chi Chi to the brim before slowly dripping on the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); - outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); - outputText("She finally passes out, which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeds to also get the sleeping inferno-mouse out with the help of a bouncer.\n\n"); - } - else { - outputText("Chi Chi initiates with a wet but warm kiss her tongue dancing tango with yours. While small in stature she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how come her burning tail and fur isn't actually setting on fire everything around her starting with you. You inquire on this matter.\n\n"); - outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\"\n\n"); - outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore you begin to grind your pussy lips against hers making her gasp in surprise at your initiative.\n\n"); - outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\"\n\n"); - outputText("Chi Chi begins to grind herself in response, making you both coo. For a drunk she clearly knows what she’s doing, almost like if drunken sex was an expertise of hers. You’re swiftly forced out back to reality as your blazing partner accelerates the tempo, causing you to moan in pleasure. Well now there's no way you going to simply lose this! You get the mouse ears with your hands and start caressing them. Chi Chi has a positive reaction and you are clearly getting to her however "); - outputText("that's counting without her hidden weapon. Her burning tail lashes out like a whip and slides between you, aiming for your cunt. Before you can stop it you already have 15 inch of hot mouse tail in your [pussy] and Chi Chi uses it to fuck your brain out. The fuck isn't all that happens it seems her very heat start to spread on to you. Wow your cunt is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, "); - outputText("only the cool passage of your girl-juices can free you from this heat! Meanwhile she grinds against her own tail bump but you have decided not to let her get off at her own pace. You swiftly slide " + (player.tailType > Tail.NONE ? "your tail" : "a pair of finger") + " in the smoking hot hinezumi cunt and retaliate with a set of rapid movement of your own.\n\n"); - outputText("Both desperate for a way to get rid of the heat and unable to fully outpace her, the two of you still manage to cum together your girl juices melding together and staining the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); - outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); - outputText("She finally pass out which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeded to also get the sleeping mouse out with the help of a bouncer.\n\n"); - } - player.orgasm(); - if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) flags[kFLAGS.CHI_CHI_FOLLOWER] = 1; - doNext(camp.returnToCampUseOneHour); - } - } + //drink list (to be expanded) + //MANUP_B, GOB_ALE, NOCELIQ, ONISAKE, SALAMFW, fire mouse TF, some generic nonTF beers } } \ No newline at end of file diff --git a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as index 69fb7e1fbb..a93ffe8377 100644 --- a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as +++ b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as @@ -387,7 +387,7 @@ package classes.Scenes.Places.Prison break; case 4: default: - outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead.\" "); + outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead. "); if(player.hasVagina()) { outputText("Your gaping pussy has lubricated me well enough to comfortably fuck an entire harem of dry, virgin assholes."); diff --git a/classes/classes/Scenes/Places/TelAdre.as b/classes/classes/Scenes/Places/TelAdre.as index 45a6902011..beb760270e 100644 --- a/classes/classes/Scenes/Places/TelAdre.as +++ b/classes/classes/Scenes/Places/TelAdre.as @@ -184,7 +184,7 @@ public function telAdreMenu():void { if (flags[kFLAGS.LUNA_FOLLOWER] < 2 && rand(10) == 0) { if (flags[kFLAGS.LUNA_FOLLOWER] == 1) SceneLib.lunaFollower.meetingLunaRepated(); else SceneLib.lunaFollower.meetingLunaFirstTime(); - return; + return } spriteSelect(-1); outputText(images.showImage("location-teladre")); diff --git a/classes/classes/Scenes/Places/TelAdre/Rubi.as b/classes/classes/Scenes/Places/TelAdre/Rubi.as index b8cee7efff..412a8c441d 100644 --- a/classes/classes/Scenes/Places/TelAdre/Rubi.as +++ b/classes/classes/Scenes/Places/TelAdre/Rubi.as @@ -2079,7 +2079,7 @@ private function iceCreamDate():void { outputText("\n\nYour parfaits are not infinite, however, and once you've depleted your layered frozen treats it seems it's time to head back. The two of you clasp hands once more and head out of the shop, heading back to Rubi's place in silence, content to be in each other's presence."); - outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); + outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); //[Go to Sex menu] rubiSexMenu(); addButton(14,"Leave",camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/Pregnancy.as b/classes/classes/Scenes/Pregnancy.as index 71347044c1..e2e8a8cea8 100644 --- a/classes/classes/Scenes/Pregnancy.as +++ b/classes/classes/Scenes/Pregnancy.as @@ -1798,7 +1798,7 @@ public class Pregnancy extends NPCAwareContent { if (flags[kFLAGS.MARBLE_BOYS] == 0) //has Marble had male kids before? { - EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me.\""); + EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me."); } //Add to marble-kids: flags[kFLAGS.MARBLE_KIDS]++; diff --git a/classes/classes/Scenes/SceneLib.as b/classes/classes/Scenes/SceneLib.as index 625ee7828c..c6af555150 100644 --- a/classes/classes/Scenes/SceneLib.as +++ b/classes/classes/Scenes/SceneLib.as @@ -1,6 +1,5 @@ package classes.Scenes { import classes.CoC; -import classes.Items.Mutations; import classes.Scenes.Areas.*; import classes.Scenes.Areas.Forest.KitsuneScene; import classes.Scenes.Combat.Combat; @@ -28,8 +27,6 @@ public class SceneLib { public static var masturbation:Masturbation = new Masturbation(); - public static var mutationsTable:Mutations = new Mutations(); - public static var beach:Beach = new Beach(); public static var blightridge:BlightRidge = new BlightRidge(); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index a56a8fe05c..56c8465168 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -208,24 +208,20 @@ use namespace CoC; addButton(7, "RevertCabin", RevertCabinProgress).hint("Revert cabin flag back to value 2 (for bug fix test)"); addButton(8, "Gargoyle", GargoyleMenu).hint("To Be or Not To Be Gargoyle that is a question."); addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); - addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); - addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); + addButton(10, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); + addButton(11, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); addButton(12, "DERP", AddEnigmanium).hint("DERP."); - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) addButton(12, "MoonCycleAdj", moonCycleAdjusting).hint("Adjusting wild moon cycle to pokeba... norm."); - if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); + if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); + //addButton(13, "13", ); addButton(14, "Back", accessSoulforceMenu); } public function celessIntroForced():void { clearOutput(); CelessScene.instance.birthScene(); } -public function moonCycleAdjusting():void { - if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; - doNext(SoulforceCheats); -} -public function fixingWerewolfFur():void { - player.skin.coverage = Skin.COVERAGE_LOW; - player.coatColor = player.hairColor; +public function replacingBarbsWithsSowrds():void { + player.removePerk(PerkLib.JobBarbarian); + player.createPerk(PerkLib.JobSwordsman, 0, 0, 0, 0); doNext(SoulforceCheats); } public function LvLUPDiana():void { @@ -698,10 +694,8 @@ public function FightNightmare():void { addButton(8, "NineTailWhip", AddNineTailWhip).hint("Add 1 Nine Tail Whip."); addButton(9, "Hodr's Bow", AddHodrsBow).hint("Add 1 Hodr's Bow."); // addButton(9, "L Ayo Arm", AddLightAyoArmor).hint("Add 1 Light Ayo Armor for testing purposes."); - // addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); - addButton(10, "TruestriekSword", AddTruestrikeSword).hint("Add 1 Truestrike Sword."); - // addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); - addButton(11, "ScepterComm", AddSceptreOfCommand).hint("Add 1 Sceptre of Command."); + addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); + addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); addButton(12, "CatONIneTWhip", AddCatONineTailWhip).hint("Add 1 Bastet Whip."); addButton(13, "InqTome", AddTheInquisitorsTome).hint("Add 1 Inquisitor's Tome."); addButton(14, "Back", SoulforceCheats); @@ -889,18 +883,10 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Seer's Hairpin!)\n\n"); inventory.takeItem(jewelries.SEERPIN, EquipmentMenu); } - public function AddTruestrikeSword():void { - outputText("\n\n(Gained 1 Truestrike Sword!)\n\n"); - inventory.takeItem(weapons.TRSTSWO, EquipmentMenu); - } public function AddTheDemonicScythe():void { outputText("\n\n(Gained 1 Demonic Scythe!)\n\n"); inventory.takeItem(weapons.DEMSCYT, EquipmentMenu); } - public function AddSceptreOfCommand():void { - outputText("\n\n(Gained 1 Sceptre of Command!)\n\n"); - inventory.takeItem(weapons.SCECOMM, EquipmentMenu); - } public function AddTheInquisitorsTome():void { outputText("\n\n(Gained 1 Inquisitor's Tome!)\n\n"); inventory.takeItem(weaponsrange.I_TOME_, EquipmentMenu); @@ -1241,12 +1227,12 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Sky Poison Pearl!)\n\n"); inventory.takeItem(consumables.SPPEARL, EquipmentMenu); } - + public function AddEnigmanium():void { outputText("\n\n(Gained 1 Enigmanium!)\n\n"); inventory.takeItem(consumables.ENIGMANIUM, EquipmentMenu); } - + public function AddLightAyoArmor():void { outputText("\n\n(Gained 1 Light Ayo Armor!)\n\n"); inventory.takeItem(armors.LAYOARM, EquipmentMenu); diff --git a/classes/classes/StatusEffects.as b/classes/classes/StatusEffects.as index de02e5e5df..222d4b0e27 100644 --- a/classes/classes/StatusEffects.as +++ b/classes/classes/StatusEffects.as @@ -38,12 +38,8 @@ import classes.StatusEffects.VampireThirstEffect; public static const CampAnemoneTrigger:StatusEffectType = mk("Camp Anemone Trigger"); public static const CampMarble:StatusEffectType = mk("Camp Marble"); public static const CampRathazul:StatusEffectType = mk("Camp Rathazul"); - public static const CampLunaMishaps1:StatusEffectType = mk("Camp Luna Mishaps 1"); - public static const CampLunaMishaps2:StatusEffectType = mk("Camp Luna Mishaps 2"); - public static const CampLunaMishaps3:StatusEffectType = mk("Camp Luna Mishaps 3"); public static const CampSparingNpcsTimers1:StatusEffectType = mk("Camp Sparing Npc's Timers 1"); public static const CampSparingNpcsTimers2:StatusEffectType = mk("Camp Sparing Npc's Timers 2"); - public static const CampSparingNpcsTimers3:StatusEffectType = mk("Camp Sparing Npc's Timers 3"); public static const ClaraCombatRounds:StatusEffectType = mk("Clara Combat Rounds"); public static const ClaraFoughtInCamp:StatusEffectType = mk("Clara Fought In Camp"); public static const CockPumped:StatusEffectType = mk("Cock Pumped"); @@ -601,6 +597,7 @@ import classes.StatusEffects.VampireThirstEffect; public static const CooldownCompellingAria:StatusEffectType = mkCombat("Cooldown Compelling Aria"); public static const CooldownCumCannon:StatusEffectType = mkCombat("Cooldown Cum Cannon"); + public static const CooldownCursedRiddle:StatusEffectType = mkCombat("Cooldown Cursed Riddle"); public static const CooldownEarthStance:StatusEffectType = mkCombat("Cooldown Earth Stance"); public static const CooldownEAspectAir:StatusEffectType = mkCombat("Cooldown Elemental Aspect Air"); public static const CooldownEAspectEarth:StatusEffectType = mkCombat("Cooldown Elemental Aspect Earth"); diff --git a/content/coc/NPC/diva.xml b/content/coc/NPC/diva.xml index 70c7ed8925..e6954579bd 100644 --- a/content/coc/NPC/diva.xml +++ b/content/coc/NPC/diva.xml @@ -669,7 +669,7 @@ Well, this isn’t so bad, the scarf-like look is certainly nice, at the very least. Your neck now sports a collar of fur. - + You yelp as a throbbing pain takes root in the sides of your mouth. You feel your canines grow longer as your throat grow dryer. You could go for some wine right now, with a bloody steak to top it off… maybe just the steak. From 3859a536ecaedf563e20bdafe9bf0f6b0b0b2889 Mon Sep 17 00:00:00 2001 From: Oxdeception <30361731+Oxdeception@users.noreply.github.com> Date: Sun, 11 Mar 2018 11:20:32 -0400 Subject: [PATCH 15/27] Fix duplicated if statement in VampireBlood --- .../classes/Items/Consumables/VampireBlood.as | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/classes/classes/Items/Consumables/VampireBlood.as b/classes/classes/Items/Consumables/VampireBlood.as index f1b9368f0e..b0ff75547d 100644 --- a/classes/classes/Items/Consumables/VampireBlood.as +++ b/classes/classes/Items/Consumables/VampireBlood.as @@ -55,7 +55,7 @@ public class VampireBlood extends Consumable { Check : player.hasGooSkin(), Override: mutations.humanizeSkin }, { - BodyPart: 'ears.Type', + BodyPart: 'ears.type', ChangeTo: pure ? Ears.VAMPIRE : Ears.BAT, Check : pure ? player.ears.type != Ears.HUMAN : false, Override: pure ? mutations.humanizeEars : null @@ -63,7 +63,7 @@ public class VampireBlood extends Consumable { BodyPart: 'eyes.type', ChangeTo: Eyes.VAMPIRE }, { - BodyPart: 'face.Type', + BodyPart: 'faceType', ChangeTo: Face.VAMPIRE } ]; @@ -89,7 +89,7 @@ public class VampireBlood extends Consumable { if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; for each (var tf:Object in tfArr) { if (changes >= changeLimit) break; - if (rand(tf.Chance? tf.Chance : 3) == 0) { + if (trueOnceInN(tf.Chance? tf.Chance : 3)) { doChange(tf); } } @@ -97,28 +97,28 @@ public class VampireBlood extends Consumable { return false; function doChange(tf:Object,count:Boolean=true):void{ - if(tf.ChangeTo != 1){ - if (tf.ChangeTo != -1) { - var keys:Array = tf.BodyPart.split('.'); - var hostObj:Object = player; - var bodyPart:String = tf.BodyPart; - if(keys.length > 1){ - hostObj = player[keys[0]]; - bodyPart = keys[1]; + if (tf.ChangeTo != -1) { + var keys:Array = tf.BodyPart.split('.'); + var hostObj:Object = player; + var bodyPart:String = tf.BodyPart; + if(keys.length > 1){ + hostObj = player[keys[0]]; + bodyPart = keys[1]; + } + if (hostObj[bodyPart] != tf.ChangeTo){ + if (tf.Check) { + tf.Override(); + if(count)changes++; } - if (hostObj[bodyPart] != tf.ChangeTo){ - if (tf.Check) { - tf.Override(); - if(count)changes++; - } - outputText("\n\n"); + outputText("\n\n"); + if(count){ story.display(tf.BodyPart, {$pure: pure}); - hostObj[bodyPart] = tf.ChangeTo; - for each(var extra:Object in tf.Addition){ - doChange(extra,false); - } - if(count) changes++; } + hostObj[bodyPart] = tf.ChangeTo; + for each(var extra:Object in tf.Addition){ + doChange(extra,false); + } + if(count) changes++; } } } From 2b24d8eaaec67f3607453324a331c7c30f0a8076 Mon Sep 17 00:00:00 2001 From: Oxdeception <30361731+Oxdeception@users.noreply.github.com> Date: Sun, 11 Mar 2018 21:04:02 -0400 Subject: [PATCH 16/27] Fix "Full complete Sphinx TF availlable from debug" This partially reverts commit b8c701d --- Corruption-of-Champions-FD-STANDALONE.as3proj | 2 +- classes/classes/Appearance.as | 16 +- classes/classes/BodyParts/Arms.as | 3 +- classes/classes/BodyParts/Ears.as | 1 + classes/classes/BodyParts/Eyes.as | 1 + classes/classes/BodyParts/LowerBody.as | 1 + classes/classes/BodyParts/Tail.as | 3 +- classes/classes/Character.as | 5 +- classes/classes/CoC.as | 4 +- classes/classes/CockTypesEnum.as | 1 + classes/classes/Creature.as | 65 +++++--- classes/classes/Items/Mutations.as | 55 ++++++- classes/classes/Items/MutationsHelper.as | 5 + classes/classes/Items/WeaponLib.as | 4 +- classes/classes/Items/Weapons/FlyWhisk.as | 2 +- classes/classes/Monster.as | 22 ++- classes/classes/PerkLib.as | 21 +-- classes/classes/Player.as | 32 ++-- classes/classes/PlayerAppearance.as | 26 +++- classes/classes/PlayerEvents.as | 83 ++++++---- classes/classes/PlayerInfo.as | 7 + classes/classes/Saves.as | 2 +- classes/classes/Scenes/Areas/HighMountains.as | 42 ++++- .../HighMountains/MinervaPurification.as | 6 +- .../Areas/HighMountains/TempleOfTheDivine.as | 26 ++-- classes/classes/Scenes/Areas/Lake.as | 2 +- .../classes/Scenes/Areas/Lake/FetishZealot.as | 2 +- classes/classes/Scenes/Camp.as | 91 +++++------ classes/classes/Scenes/Camp/CampScenes.as | 4 +- classes/classes/Scenes/Changelog.as | 31 +++- classes/classes/Scenes/Combat/Combat.as | 69 ++++++--- classes/classes/Scenes/Combat/CombatMagic.as | 2 +- .../classes/Scenes/Combat/CombatSoulskills.as | 6 + classes/classes/Scenes/Combat/CombatTeases.as | 4 +- classes/classes/Scenes/Combat/CombatUI.as | 2 +- .../classes/Scenes/Combat/MagicSpecials.as | 45 +++--- .../classes/Scenes/Combat/PhysicalSpecials.as | 29 ++-- classes/classes/Scenes/DebugMenu.as | 2 +- classes/classes/Scenes/Dungeons/AnzuPalace.as | 7 + .../Scenes/Dungeons/AnzuPalace/AnzuScene.as | 2 +- .../Scenes/Dungeons/D3/LethiceScenes.as | 2 +- classes/classes/Scenes/Holidays.as | 2 +- classes/classes/Scenes/Inventory.as | 12 +- classes/classes/Scenes/Metamorph.as | 3 +- classes/classes/Scenes/NPCs/AmilyScene.as | 17 ++- classes/classes/Scenes/NPCs/ChiChiFollower.as | 19 ++- classes/classes/Scenes/NPCs/Diana.as | 28 ++-- classes/classes/Scenes/NPCs/DianaFollower.as | 6 +- classes/classes/Scenes/NPCs/EmberScene.as | 13 ++ classes/classes/Scenes/NPCs/EtnaFollower.as | 15 ++ .../classes/Scenes/NPCs/EvangelineFollower.as | 2 +- classes/classes/Scenes/NPCs/HelFollower.as | 13 +- .../Scenes/NPCs/IsabellaFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/IsabellaScene.as | 2 +- classes/classes/Scenes/NPCs/IzmaScene.as | 14 ++ classes/classes/Scenes/NPCs/JojoScene.as | 12 ++ classes/classes/Scenes/NPCs/JoyScene.as | 4 +- classes/classes/Scenes/NPCs/KihaFollower.as | 105 ++++++------- classes/classes/Scenes/NPCs/KihaScene.as | 19 ++- classes/classes/Scenes/NPCs/LatexGirl.as | 4 +- classes/classes/Scenes/NPCs/Luna.as | 48 +++++- classes/classes/Scenes/NPCs/LunaFollower.as | 143 ++++++++++++++++-- classes/classes/Scenes/NPCs/Rathazul.as | 2 +- .../classes/Scenes/NPCs/ShouldraFollower.as | 2 +- .../Scenes/NPCs/SophieFollowerScene.as | 4 +- classes/classes/Scenes/NPCs/Urta.as | 4 +- classes/classes/Scenes/Places/HeXinDao.as | 38 +++-- .../Places/HeXinDao/JourneyToTheEast.as | 74 ++++++++- .../Scenes/Places/Prison/TrainingFeeding.as | 2 +- classes/classes/Scenes/Places/TelAdre.as | 2 +- classes/classes/Scenes/Places/TelAdre/Rubi.as | 2 +- classes/classes/Scenes/Pregnancy.as | 2 +- classes/classes/Scenes/SceneLib.as | 3 + classes/classes/Scenes/Soulforce.as | 36 +++-- classes/classes/StatusEffects.as | 4 + content/coc/NPC/diva.xml | 2 +- 76 files changed, 1020 insertions(+), 377 deletions(-) diff --git a/Corruption-of-Champions-FD-STANDALONE.as3proj b/Corruption-of-Champions-FD-STANDALONE.as3proj index f56b6cea1a..5170b5ca75 100644 --- a/Corruption-of-Champions-FD-STANDALONE.as3proj +++ b/Corruption-of-Champions-FD-STANDALONE.as3proj @@ -4,7 +4,7 @@ - + diff --git a/classes/classes/Appearance.as b/classes/classes/Appearance.as index 0035080fbf..7ffd76aec8 100644 --- a/classes/classes/Appearance.as +++ b/classes/classes/Appearance.as @@ -2386,6 +2386,7 @@ public class Appearance extends Utils [Skin.DRAGON_SCALES, "dragon scales", "dragon scales", "", true], [Skin.MOSS, "moss", "moss", "", false], [Skin.AQUA_RUBBER_LIKE, "AQUA_RUBBER_LIKE", "slippery rubber-like skin", "", false], + [Skin.FEATHER, "FEATHER", "feather", "", false], [Skin.TATTOED_ONI, "TATTOED_ONI", "tattooed skin", "", false], [Skin.PARTIAL_DRAGON_SCALES, "partial dragon scales", "partial dragon scales", "", true], [Skin.PARTIAL_STONE, "partial stone", "partial stone", "", false], @@ -2494,7 +2495,8 @@ public class Appearance extends Utils [Eyes.ELF, "elf"], [Eyes.RAIJU, "raiju"], [Eyes.GEMSTONES, "gemstones"], - [Eyes.FERAL, "feral"] + [Eyes.FERAL, "feral"], + [Eyes.GRYPHON, "gryphon"] ] ); public static const DEFAULT_EARS_NAMES:Object = createMapFromPairs( @@ -2527,7 +2529,8 @@ public class Appearance extends Utils [Ears.ELVEN, "elven"], [Ears.WEASEL, "weasel"], [Ears.RED_PANDA, "red-panda"], - [Ears.AVIAN, "avian"] + [Ears.AVIAN, "avian"], + [Ears.GRYPHON, "gryphon"] ] ); public static const DEFAULT_HORNS_NAMES:Object = createMapFromPairs( @@ -2585,7 +2588,8 @@ public class Appearance extends Utils [Arms.RAIJU, "raiju"], [Arms.RED_PANDA, "red-panda"], [Arms.CAT, "cat"], - [Arms.AVIAN, "avian"] + [Arms.AVIAN, "avian"], + [Arms.GRYPHON, "gryphon"] ] ); public static const DEFAULT_TAIL_NAMES:Object = createMapFromPairs( @@ -2626,7 +2630,8 @@ public class Appearance extends Utils [Tail.RAIJU, "raiju"], [Tail.RED_PANDA, "red-panda"], [Tail.GARGOYLE_2, "axe-shaped gargoyle"], - [Tail.AVIAN, "avian"] + [Tail.AVIAN, "avian"], + [Tail.GRIFFIN, "griffin"] ] ); public static const DEFAULT_WING_NAMES:Object = createMapFromPairs( @@ -2737,7 +2742,8 @@ public class Appearance extends Utils [LowerBody.ELF, "elf"], [LowerBody.RAIJU, "raiju"], [LowerBody.RED_PANDA, "red-panda"], - [LowerBody.AVIAN, "avian"] + [LowerBody.AVIAN, "avian"], + [LowerBody.GRYPHON, "gryphon"] ] ); // diff --git a/classes/classes/BodyParts/Arms.as b/classes/classes/BodyParts/Arms.as index f6704e560d..f5e6c2c928 100644 --- a/classes/classes/BodyParts/Arms.as +++ b/classes/classes/BodyParts/Arms.as @@ -28,8 +28,9 @@ public class Arms extends BodyPart { public static const GARGOYLE_2:int = 24; public static const CAT:int = 25; public static const AVIAN:int = 26; + public static const GRYPHON:int = 27; public static const SPHINX:int = 28; - + public function Arms() { super(null, null); } diff --git a/classes/classes/BodyParts/Ears.as b/classes/classes/BodyParts/Ears.as index c3fabbbdf4..faa105a0b2 100644 --- a/classes/classes/BodyParts/Ears.as +++ b/classes/classes/BodyParts/Ears.as @@ -32,6 +32,7 @@ public class Ears extends BodyPart { public static const VAMPIRE:int = 28; public static const RED_PANDA:int = 29; public static const AVIAN:int = 30; + public static const GRYPHON:int = 31; public function Ears() { super(null, null); diff --git a/classes/classes/BodyParts/Eyes.as b/classes/classes/BodyParts/Eyes.as index 8308ffcba2..3bd8d3b353 100644 --- a/classes/classes/BodyParts/Eyes.as +++ b/classes/classes/BodyParts/Eyes.as @@ -20,6 +20,7 @@ public class Eyes extends BodyPart { public static const VAMPIRE:int = 15; public static const GEMSTONES:int = 16; public static const FERAL:int = 17; + public static const GRYPHON:int = 18; public var colour:String = "brown"; public function Eyes() { diff --git a/classes/classes/BodyParts/LowerBody.as b/classes/classes/BodyParts/LowerBody.as index 3f391c8047..54b426a5ea 100644 --- a/classes/classes/BodyParts/LowerBody.as +++ b/classes/classes/BodyParts/LowerBody.as @@ -50,6 +50,7 @@ public class LowerBody extends SaveableBodyPart { public static const RED_PANDA:int = 42; public static const GARGOYLE_2:int = 43; public static const AVIAN:int = 44; + public static const GRYPHON:int = 45; override public function set type(value:int):void { super.type = value; diff --git a/classes/classes/BodyParts/Tail.as b/classes/classes/BodyParts/Tail.as index 99003e0516..c6a0da025c 100644 --- a/classes/classes/BodyParts/Tail.as +++ b/classes/classes/BodyParts/Tail.as @@ -50,8 +50,9 @@ public class Tail extends SaveableBodyPart { public static const RED_PANDA:int = 34; public static const GARGOYLE_2:int = 35; public static const AVIAN:int = 36; + public static const GRIFFIN:int = 37; public static const LION:int = 38; - + override public function set type(value:int):void { var old:int = type; super.type = value; diff --git a/classes/classes/Character.as b/classes/classes/Character.as index d20f52be7f..4edb575b9c 100644 --- a/classes/classes/Character.as +++ b/classes/classes/Character.as @@ -607,7 +607,7 @@ import classes.Items.JewelryLib; public override function maxFatigue():Number { - var max:Number = 100; + var max:Number = 150; if (game.player.alicornScore() >= 6) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 20) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); if (game.player.dragonScore() >= 28) max += (100 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL])); @@ -672,6 +672,7 @@ import classes.Items.JewelryLib; if (game.player.alicornScore() >= 6) max += (150 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (game.player.unicornScore() >= 5) max += (50 * (1 + flags[kFLAGS.NEW_GAME_PLUS_LEVEL]));//przenieść do mnożnika? if (hasPerk(PerkLib.DemonicLethicite)) max += Math.round(lib); + if (hasPerk(PerkLib.Metamorph)) max += 50; if (flags[kFLAGS.SOUL_CULTIVATION] >= 2) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 3) max += 25; if (flags[kFLAGS.SOUL_CULTIVATION] >= 4) max += 30; @@ -836,7 +837,7 @@ import classes.Items.JewelryLib; public override function maxMana():Number { - var max:Number = 100; + var max:Number = 200; if (findPerk(PerkLib.ManaAffinityI) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityII) >= 0) max += 35; if (findPerk(PerkLib.ManaAffinityIII) >= 0) max += 35; diff --git a/classes/classes/CoC.as b/classes/classes/CoC.as index af1dda889e..aad7a3f8a8 100644 --- a/classes/classes/CoC.as +++ b/classes/classes/CoC.as @@ -247,8 +247,8 @@ public class CoC extends MovieClip //model.debug = debug; // TODO: Set on model? //Version NUMBER - ver = "1.0.2_mod_Xianxia_0.8i"; - version = ver + " (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes))"; + ver = "1.0.2_mod_Xianxia_0.8i2"; + version = ver + " ()"; this.images = new ImageManager(stage, mainView); this.inputManager = new InputManager(stage, mainView, false); diff --git a/classes/classes/CockTypesEnum.as b/classes/classes/CockTypesEnum.as index 20c33a3842..9546405828 100644 --- a/classes/classes/CockTypesEnum.as +++ b/classes/classes/CockTypesEnum.as @@ -49,6 +49,7 @@ package classes public static const WOLF:CockTypesEnum = new CockTypesEnum("mammal"); public static const STAMEN:CockTypesEnum = new CockTypesEnum("plant"); public static const RED_PANDA:CockTypesEnum = new CockTypesEnum("mammal"); + public static const GRYPHON:CockTypesEnum = new CockTypesEnum("avian"); public static const UNDEFINED:CockTypesEnum = new CockTypesEnum(""); function CockTypesEnum(i_group:String = "") { _group = i_group; } diff --git a/classes/classes/Creature.as b/classes/classes/Creature.as index fb5dd57cd8..0153bb2eec 100644 --- a/classes/classes/Creature.as +++ b/classes/classes/Creature.as @@ -2293,6 +2293,11 @@ public class Creature extends Utils return countCocksOfType(CockTypesEnum.AVIAN); } + public function gryphonCocks():int { //How many gryphoncocks? + return countCocksOfType(CockTypesEnum.GRYPHON); + } + + public function findFirstCockType(ctype:CockTypesEnum):Number { var index:Number = 0; @@ -2458,25 +2463,25 @@ public class Creature extends Utils return false; return canFlyWings.indexOf(wings.type) != -1; } - + public static const canPounceLeg:Array = [ LowerBody.CAT, LowerBody.LION, LowerBody.WOLF, ]; - - public static const canPounceArms:Array = [ + + public static const canPounceArms:Array = [ Arms.CAT, Arms.LION, Arms.SPHINX, Arms.WOLF, ]; - + public function canPounce():Boolean - { + { return canPounceLeg.indexOf(lowerBody) != -1 && canPounceArms.indexOf(arms.type) != -1; } - + //PC can swim underwater? public function canSwimUnderwater():Boolean @@ -2985,34 +2990,38 @@ public class Creature extends Utils public function canOvipositSpider():Boolean { return eggs() >= 10 && findPerk(PerkLib.SpiderOvipositor) >= 0 && isDrider() && tail.type == Tail.SPIDER_ADBOMEN; - } public function canOvipositBee():Boolean { return eggs() >= 10 && findPerk(PerkLib.BeeOvipositor) >= 0 && tail.type == Tail.BEE_ABDOMEN; + } + public function canOvipositMantis():Boolean + { + return eggs() >= 10 && findPerk(PerkLib.MantisOvipositor) >= 0 && tail.type == Tail.MANTIS_ABDOMEN; } public function canOviposit():Boolean { - return canOvipositSpider() || canOvipositBee(); - + return canOvipositSpider() || canOvipositBee() || canOvipositMantis(); } public function eggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv1(PerkLib.SpiderOvipositor); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) return perkv1(PerkLib.BeeOvipositor); + else + return perkv1(PerkLib.MantisOvipositor); } public function addEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3021,18 +3030,24 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else { + else if (findPerk(PerkLib.BeeOvipositor) >= 0) { addPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } + else { + addPerkValue(PerkLib.MantisOvipositor, 1, arg); + if (eggs() > 50) + setPerkValue(PerkLib.MantisOvipositor, 1, 50); + return perkv1(PerkLib.MantisOvipositor); + } } } public function dumpEggs():void { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return; setEggs(0); //Sets fertile eggs = regular eggs (which are 0) @@ -3041,7 +3056,7 @@ public class Creature extends Utils public function setEggs(arg:int = 0):int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else { if (findPerk(PerkLib.SpiderOvipositor) >= 0) { @@ -3050,33 +3065,43 @@ public class Creature extends Utils setPerkValue(PerkLib.SpiderOvipositor, 1, 50); return perkv1(PerkLib.SpiderOvipositor); } - else { + else if (findPerk(PerkLib.BeeOvipositor) >= 0) { setPerkValue(PerkLib.BeeOvipositor, 1, arg); if (eggs() > 50) setPerkValue(PerkLib.BeeOvipositor, 1, 50); return perkv1(PerkLib.BeeOvipositor); } + else { + setPerkValue(PerkLib.MantisOvipositor, 1, arg); + if (eggs() > 50) + setPerkValue(PerkLib.MantisOvipositor, 1, 50); + return perkv1(PerkLib.MantisOvipositor); + } } } public function fertilizedEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) return perkv2(PerkLib.SpiderOvipositor); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) return perkv2(PerkLib.BeeOvipositor); + else + return perkv2(PerkLib.MantisOvipositor); } public function fertilizeEggs():int { - if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0) + if (findPerk(PerkLib.SpiderOvipositor) < 0 && findPerk(PerkLib.BeeOvipositor) < 0 && findPerk(PerkLib.MantisOvipositor) < 0) return -1; else if (findPerk(PerkLib.SpiderOvipositor) >= 0) setPerkValue(PerkLib.SpiderOvipositor, 2, eggs()); - else + else if (findPerk(PerkLib.BeeOvipositor) >= 0) setPerkValue(PerkLib.BeeOvipositor, 2, eggs()); + else + setPerkValue(PerkLib.MantisOvipositor, 2, eggs()); return fertilizedEggs(); } diff --git a/classes/classes/Items/Mutations.as b/classes/classes/Items/Mutations.as index 686f4c36f3..c5f069b17f 100644 --- a/classes/classes/Items/Mutations.as +++ b/classes/classes/Items/Mutations.as @@ -4970,8 +4970,6 @@ public final class Mutations extends MutationsHelper player.refillHunger(20); flags[kFLAGS.TIMES_TRANSFORMED] += changes; } - - public function reptilum(player:Player):void { @@ -6602,6 +6600,8 @@ public final class Mutations extends MutationsHelper //Generic eating text: clearOutput(); if (type == 0) outputText("You crack open the seed easily, and eat the fruit inside. A bit dry, as you expected, but with a sweet and aromatic taste that leaves you wanting another one."); + if (type == 1) outputText("Looking again at the fierce gryphon sculpted on brass and bronze that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); + if (type == 2) outputText("Looking again at the wonderful peacock carved in alabaster and ruby that you found on that strange alcove, your curiosity gets the best of you, and you start examining it. As you do so, the magic stored long ago within the artifact pours out, and starts changing your body!"); //Stats changes //-Speed increase to 100. if (player.spe < 100 && type == 0 && rand(3) == 0 && changes < changeLimit) { @@ -6631,6 +6631,7 @@ public final class Mutations extends MutationsHelper if (player.str < 40) dynStats("str", .5); dynStats("str", .5); } + if (type == 1 || type == 2) changeLimit = 1; if (player.hasPerk(PerkLib.TransformationImmunity)) changeLimit = 0; //Sexual changes if (player.avianCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 0 && rand(3) == 0) { @@ -6651,6 +6652,24 @@ public final class Mutations extends MutationsHelper player.cocks[temp2].cockType = CockTypesEnum.AVIAN; changes++; } + if (player.gryphonCocks() == 0 && player.cockTotal() > 0 && changes < changeLimit && type == 1 && rand(3) == 0) { + for (temp2 = 0; temp2 < player.cocks.length; temp2++) { + if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; + } + outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); + outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); + player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; + changes++; + } + if (player.cockTotal() > 1 && player.gryphonCocks() > 0 && player.cockTotal() > player.gryphonCocks() && type == 1 && rand(3) == 0 && changes < changeLimit) { + for (temp2 = 0; temp2 < player.cocks.length; temp2++) { + if (player.cocks[temp2].cockType != CockTypesEnum.GRYPHON) break; + } + outputText("\n\nThe magic of the statue feels more focused now, as it were to change a small but specific area of your body, and it does, as your nethers tinge under its effect.\n\nGiving them a glimpse, the first thing that becomes obvious if that your " + cockDescript(temp2) + " became a bit ticker, but albeit it retained it’s avian, tapered shape, it’s slightly wavy form became more straight. "); + outputText("It’s reddish-pink color became pink and it’s tip became more conical. Nevertheless, the main chance manifested across its length, where small, soft barbs grew, giving your member an the appearance of an avian-feline hybrid one. You'll have to try around your new gryphon cock to know how’ they’ll feel to use, but you’re sure that it’ll be pleasant both for you and your partners."); + player.cocks[temp2].cockType = CockTypesEnum.GRYPHON; + changes++; + } //Legs if (player.lowerBody != LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.isGoo()) { @@ -6693,6 +6712,13 @@ public final class Mutations extends MutationsHelper player.legCount = 2; changes++; } + if (player.lowerBody != LowerBody.GRYPHON && player.eyes.type == Eyes.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nTaking a seat while you see how the magic within the statue affects you, a familiar numbness reaches your legs. The rough skin covering your lower legs and feet change into more usual, soft skin, and shortly after, it starts sprouting " + player.skin.coat.color2 + " colored fur over them."); + outputText("\n\nYour feet themselves reshape, losing their avian stance and gaining one much more feline, complete with soft pink paw pads. The talons at the end of each toe become retractile feline claws. Albeit walking with those seems initially tricky, you easily gain a hold on how using your new gryphon-like legs."); + setLowerBody(LowerBody.GRYPHON); + player.legCount = 2; + changes++; + } //Tail if (player.tailType != Tail.AVIAN && player.lowerBody == LowerBody.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.tailType > Tail.NONE) { @@ -6713,6 +6739,12 @@ public final class Mutations extends MutationsHelper setTailType(Tail.AVIAN); changes++; } + if (player.tailType != Tail.GRIFFIN && player.lowerBody == LowerBody.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe fan of feathers at your backside reacts under the statue magic effects. An otherworldly magic envelopes it, making the feathers twist and converge in an odd fashion, at the same time that the small bump of your tail elongates until becoming long enough to reach far past your knee."); + outputText("\n\nBefore you notice it, the long feathers have merged into a tuft of " + player.skin.coat.color + " at the end of your now long tail, while the short, downy ones now cover every inch of bare skin that the elongated appendage now have. Well, seems like you gained a griffin-like tail! It’s quite leonine in shape, but its appearance remains a bit avian."); + setTailType(Tail.GRIFFIN); + changes++; + } //Arms if (player.arms.type != Arms.AVIAN && player.tailType == Tail.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.skin.hasChitin()) { @@ -6737,6 +6769,12 @@ public final class Mutations extends MutationsHelper setArmType(Arms.AVIAN); changes++; } + if (player.arms.type != Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe skin on your arms change a bit, as the " + player.skin.coat.color2 + " turning into soft, feline fur. Your palms and fingers acquire pink paw pads, while at the end of each one of your fingers, the talons sharpen and become prehensile, adopting a posture better suited to pounce over a unsuspecting victim."); + outputText("\n\nFrom the fringe on your elbows to your armpits, your " + player.skin.coat.color + " colored plumage remains the same. At the end, you’ve gotten gryphon-like arms!."); + setArmType(Arms.GRYPHON); + changes++; + } //Wings if (player.wings.type != Wings.FEATHERED_AVIAN && player.arms.type == Arms.AVIAN && changes < changeLimit && type == 0 && rand(3) == 0) { if (player.wings.type == Wings.DRACONIC_SMALL || player.wings.type == Wings.DRACONIC_LARGE || player.wings.type == Wings.DRACONIC_HUGE || player.wings.type == Wings.BAT_LIKE_TINY || player.wings.type == Wings.BAT_LIKE_LARGE || player.wings.type == Wings.BAT_LIKE_LARGE_2 || player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) { @@ -6791,6 +6829,12 @@ public final class Mutations extends MutationsHelper setEarType(Ears.AVIAN); changes++; } + if (player.ears.type != Ears.GRYPHON && player.tailType == Tail.GRIFFIN && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nAfter another session under the statue magic, the lingering effects seem to having taken a toll on you, as your ears buzz. The sound turns worse for a second, and then vanish. You hear for a second a light flapping sound, and then, nothing.\n\nWhen everything seems to have finished, you realize that your hearing range has changed, and while your overall sense of hearing remains the same, pinpointing the source of a sounds is much easier. On a nearby reflection you discover the reason: "); + outputText("two triangular ears have sprouted at your head, streamlined to flight and with a gryphon like appearance. A short layer of downy feathers covers them, the tip having a distinctive tuft. Checking that your ears are rightly placed on the new auricles, you smile happily at the sight of your gryphon ears, noting how well they compliment your looks."); + setEarType(Ears.GRYPHON); + changes++; + } //Skin if (!player.hasFeather() && changes < changeLimit && type == 0 && rand(4) == 0) { if (player.hasFur()) { @@ -6827,6 +6871,13 @@ public final class Mutations extends MutationsHelper player.skin.growCoat(Skin.FEATHER,{color:player.skin.coat.color}); changes++; } + //Eyes + if (player.eyes.type != Eyes.GRYPHON && player.arms.type == Arms.GRYPHON && changes < changeLimit && type == 1 && rand(3) == 0) { + outputText("\n\nThe mysterious energy coming from the statue continues adapting your body into a more fierce, strong shape. This time, it has affected you eyesight, as you suddenly notice how the long distances that you once had trouble seeing are clear as if you were in front of them, and that you can perceive even the minimal move even from several miles afar."); + outputText("\n\nChecking your changes on the river, you see clearly how your sclera has acquired a golden-orange coloration, as well as your outer iris, separated from the former by a thin circle of black. Both your pupil and your inner iris, which now has enlarged, are solid black. Now you’ll have a blessed vision due those raptor, gryphon-like eyes."); + setEyeTypeAndColor(Eyes.GRYPHON, "golden-orange"); + changes++; + } if (changes == 0 && type == 0) outputText("\n\nIt seems like the fruit had no effect this time. Maybe it was spoiled, or kept in storage for too much time?"); if (type == 0) player.refillHunger(15); flags[kFLAGS.TIMES_TRANSFORMED] += changes; diff --git a/classes/classes/Items/MutationsHelper.as b/classes/classes/Items/MutationsHelper.as index fba6557316..3d78201379 100644 --- a/classes/classes/Items/MutationsHelper.as +++ b/classes/classes/Items/MutationsHelper.as @@ -302,6 +302,7 @@ import classes.BodyParts.Wings; [Arms.FOX, StatusEffects.UnlockedFoxArms], [Arms.GARGOYLE, null], [Arms.GARGOYLE_2, null], + [Arms.GRYPHON, null], [Arms.HARPY, StatusEffects.UnlockedHarpyArms], [Arms.HUMAN, null], [Arms.KITSUNE, StatusEffects.UnlockedKitsuneArms], @@ -339,6 +340,7 @@ import classes.BodyParts.Wings; [Ears.FERRET, null], [Ears.FOX, StatusEffects.UnlockedFoxEars], [Ears.GOAT, StatusEffects.UnlockedGoatEars], + [Ears.GRYPHON, null], [Ears.HORSE, null], [Ears.HUMAN, null], [Ears.KANGAROO, null], @@ -375,6 +377,7 @@ import classes.BodyParts.Wings; [Eyes.FOX, StatusEffects.UnlockedFoxEyes], [Eyes.GEMSTONES, null], [Eyes.GORGON, StatusEffects.UnlockedGorgonEyes], + [Eyes.GRYPHON, null], [Eyes.HUMAN, null], [Eyes.MANTICORE, null], [Eyes.ONI, StatusEffects.UnlockedOniEyes], @@ -510,6 +513,7 @@ import classes.BodyParts.Wings; [LowerBody.GARGOYLE, null], [LowerBody.GARGOYLE_2, null], [LowerBody.GOO, null], + [LowerBody.GRYPHON, null], [LowerBody.HARPY, StatusEffects.UnlockedHarpyLegs], [LowerBody.HOOFED, StatusEffects.UnlockedHoofedLegs], [LowerBody.HUMAN, null], @@ -598,6 +602,7 @@ import classes.BodyParts.Wings; [Tail.GARGOYLE, null], [Tail.GARGOYLE_2, null], [Tail.GOAT, StatusEffects.UnlockedGoatTail], + [Tail.GRIFFIN, null], [Tail.HARPY, StatusEffects.UnlockedHarpyTail], [Tail.HORSE, null], [Tail.KANGAROO, null], diff --git a/classes/classes/Items/WeaponLib.as b/classes/classes/Items/WeaponLib.as index e6163eb764..069ca220a5 100644 --- a/classes/classes/Items/WeaponLib.as +++ b/classes/classes/Items/WeaponLib.as @@ -82,8 +82,9 @@ package classes.Items public const S_BLADE:Spellblade = new Spellblade(); public const S_GAUNT:Weapon = new Weapon("S.Gaunt","S.Gauntlet","spiked gauntlet","a spiked gauntlet","spiked punch",0,200,"This single metal gauntlet has the knuckles tipped with metal spikes. Though it lacks the damaging potential of other weapons, the sheer pain of its wounds has a chance of stunning your opponent."); public const SCARBLD:Weapon = new ScarredBlade(); - public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); + public const SCECOMM:Weapon = new Weapon("SceComm", "SceptreOfCom", "Sceptre of Command", "a Sceptre of Command", "smack", 4, 600, "This enchanted scepter empowers the abilities and control of summoners over their minions."); public const SCIMITR:Weapon = new Weapon("Scimitr", "Scimitar", "scimitar", "a scimitar", "slash", 15, 600, "This curved sword is made for slashing. No doubt it'll easily cut through flesh."); + public const SCLAYMO:SapphireClaymore = new SapphireClaymore(); public const SESPEAR:SeraphicSpear = new SeraphicSpear(); public const SNAKESW:Weapon = new Weapon("SnakeSw", "SnakeSword", "Snake Sword", "a Snake Sword", "whip-slash", 20, 800, "This unassuming double-edged sword is comprised of segmented pieces which, when swung, will lash out akin to a whip."); public const SPEAR :Spear = new Spear(); @@ -91,6 +92,7 @@ package classes.Items public const TCLAYMO:TopazClaymore = new TopazClaymore(); public const TRASAXE:Weapon = new Weapon("TraSAxe","Train.S.Axe", "training soul axe", "a training soul axe", "cleave", 1, 80, "This axe was specialy forged and enhanted to help novice soul cultivatiors to train their soulforce. Still if situation calls for it it could be used as a normal weapon."); public const TRIDENT:Trident = new Trident(); + public const TRSTSWO:Weapon = new Weapon("TrStSwo","TruestrikeSword", "Truestrike sword", "a Truestrike sword", "slash", 5, 400, "Lia will write desc of it...soon."); public const U_STAFF:UnicornStaff = new UnicornStaff(); public const URTAHLB:Weapon = new Weapon("UrtaHlb","UrtaHlb","halberd","a halberd","slash",30,1200,"Urta's halberd. How did you manage to get this?","Large"); public const VBLADE :Weapon = new Weapon("V.Blade","V.Blade", "V.Blade", "a V.Blade", "slash", 28, 2240, "A peculiar sword. The letter V is engraved into the blade perhaps its former owner name."); diff --git a/classes/classes/Items/Weapons/FlyWhisk.as b/classes/classes/Items/Weapons/FlyWhisk.as index 012ce69696..e5e7cff354 100644 --- a/classes/classes/Items/Weapons/FlyWhisk.as +++ b/classes/classes/Items/Weapons/FlyWhisk.as @@ -12,7 +12,7 @@ package classes.Items.Weapons public function FlyWhisk() { - super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 800, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); + super("FlyWhis", "FlyWhisk", "Fly-Whisk", "a Fly-Whisk", "slash", 0, 400, "This strange Daoist tool is a small wooden rod, with a prominently displayed ‘tail’ of plant fibers attached to the tip. Simply holding it seems to focus your concentration and empower your Soulforce!", "Daoist's Focus", PerkLib.DaoistsFocus, 0.2, 0, 0, 0); } } } \ No newline at end of file diff --git a/classes/classes/Monster.as b/classes/classes/Monster.as index 77c0cda15d..a001005300 100644 --- a/classes/classes/Monster.as +++ b/classes/classes/Monster.as @@ -260,7 +260,7 @@ import flash.utils.getQualifiedClassName; protected override function maxLust_base():Number { //Base lust - var temp:Number = 100 + this.bonusLust; + var temp:Number = 70 + this.bonusLust; //Apply perks if (findPerk(PerkLib.BasicSelfControl) >= 0) temp += 15; if (findPerk(PerkLib.HalfStepToImprovedSelfControl) >= 0) temp += 25; @@ -286,6 +286,11 @@ import flash.utils.getQualifiedClassName; if (findPerk(PerkLib.GclassHeavenTribulationSurvivor) >= 0) temp += (75 * (1 + newGamePlusMod())); //Apply NG+, NG++, NG+++, etc. temp += this.bonusLust * newGamePlusMod(); + temp += this.level * 2; + if (this.level >= 24) temp += (this.level - 23) * 3; + if (this.level >= 42) temp += (this.level - 42) * 5; + if (this.level >= 72) temp += (this.level - 72) * 10; + if (this.level >= 102) temp += (this.level - 102) * 20; return temp; } @@ -345,6 +350,21 @@ import flash.utils.getQualifiedClassName; if (this.level >= 20) temp += 50; if (this.level >= 22) temp += 50; } + if (findPerk(PerkLib.SoulSprite) >= 0) { + if (this.level >= 24) temp += 60; + if (this.level >= 26) temp += 60; + if (this.level >= 28) temp += 60; + } + if (findPerk(PerkLib.SoulScholar) >= 0) { + if (this.level >= 30) temp += 70; + if (this.level >= 32) temp += 70; + if (this.level >= 34) temp += 70; + } + if (findPerk(PerkLib.SoulElder) >= 0) { + if (this.level >= 36) temp += 80; + if (this.level >= 38) temp += 80; + if (this.level >= 40) temp += 80; + } if (findPerk(PerkLib.InsightfulResourcesI) >= 0) temp += Math.round((this.wis*5) * (1 + newGamePlusMod())); if (findPerk(PerkLib.DeityJobMunchkin) >= 0) temp *= 1.1; if (hasPerk(PerkLib.EnemyTrueDemon)) temp = 0; diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index f116fc7994..e387f63273 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -3123,7 +3123,6 @@ public class PerkLib .requireLib(50) .requireStatusEffect(StatusEffects.KnowsArouse, "Arouse spell"); JobCourtesan.requirePerk(JobSeducer) - .requirePerk(Heroism) .requireLib(50) .requireLevel(12); DazzlingDisplay.requirePerk(JobCourtesan) @@ -3231,23 +3230,23 @@ public class PerkLib // CORRUPTION //------------ //Slot 7 - Corrupted Libido - lust raises 10% slower. - CorruptedLibido.requireCor(25); + CorruptedLibido.requireCor(10); CorruptedLibido.defaultValue1 = 20; //Slot 7 - Seduction (Must have seduced Jojo) - Seduction.requireCor(50); + Seduction.requireCor(15); //Slot 7 - Nymphomania - Nymphomania.requireCor(75) + Nymphomania.requireCor(15) .requirePerk(CorruptedLibido); //Slot 7 - UNFINISHED :3 - Acclimation.requireCor(50) + Acclimation.requireCor(15) .requirePerk(CorruptedLibido) .requireMinLust(20); - SenseCorruption.requireCor(75); + SenseCorruption.requireCor(15); //Tier 1 Corruption Perks - acclimation over-rides - Sadist.requireCor(60) + Sadist.requireCor(20) .requirePerk(CorruptedLibido) .requireLevel(6); - ArousingAura.requireCor(70) + ArousingAura.requireCor(25) .requirePerk(CorruptedLibido) .requireLevel(6); //Tier 2 @@ -3367,13 +3366,9 @@ public class PerkLib BlackHeart.requirePerk(DarkCharm).requireCor(90).requireCustomFunction(function (player:Player):Boolean { return player.demonScore() >= 6; }, "Demon race"); - CatlikeNimbleness.requirePerk(Flexibility).requireCustomFunction(function (player:Player):Boolean { - return player.catScore() >= 4 || player.nekomataScore() >= 4 || player.cheshireScore() >= 4 || player.manticoreScore() >= 4 || player.sphinxScore() >= 4; + return player.catScore() >= 4 || player.nekomataScore() >= 4 || player.cheshireScore() >= 4; }, "Any cat race"); - - //CatlikeNimbleness.requirePerk(Flexibility); - DraconicLungs.requirePerk(DragonFireBreath) .requirePerk(DragonIceBreath) .requirePerk(DragonLightningBreath) diff --git a/classes/classes/Player.as b/classes/classes/Player.as index fa39ebfc03..ce7f23138c 100644 --- a/classes/classes/Player.as +++ b/classes/classes/Player.as @@ -700,6 +700,11 @@ use namespace CoC; return _jewelry.value; } + //Shields for Bash + public function isShieldsForShieldBash():Boolean + { + return shield == game.shields.BUCKLER || shield == game.shields.GREATSH || shield == game.shields.KITE_SH || shield == game.shields.TRASBUC || shield == game.shields.TOWERSH || shield == game.shields.DRGNSHL || shield == game.shields.SANCTYN || shield == game.shields.SANCTYL || shield == game.shields.SANCTYD; + } //override public function get shields override public function get shieldName():String { return _shield.name; @@ -3718,7 +3723,7 @@ use namespace CoC; End("Player","racialScore"); return centaurCounter; } - + public function sphinxScore():Number { var sphinxCounter:Number = 0; @@ -3747,7 +3752,7 @@ use namespace CoC; if (tailType == Tail.LION) sphinxCounter++; if (lowerBody == LowerBody.CAT) - sphinxCounter++; + sphinxCounter++; if (faceType == Face.CAT_CANINES) sphinxCounter++; if (wings.type == Wings.FEATHERED_SPHINX) @@ -3763,7 +3768,6 @@ use namespace CoC; return sphinxCounter; } - //Determine Unicorn Rating public function unicornScore():Number { if (horns.type != Horns.UNICORN) @@ -5121,6 +5125,8 @@ use namespace CoC; min += 10; if(eggs() >= 40) min += 10; } + //Werebeast + if (hasPerk(PerkLib.Lycanthropy)) min += perk(findPerk(PerkLib.Lycanthropy)).value1; //Jewelry effects if (jewelryEffectId == JewelryLib.MODIFIER_MINIMUM_LUST) { @@ -5328,7 +5334,7 @@ use namespace CoC; } }//+15(60)((70))(((140))) / 10 - 20(50 - 60)((70 - 80))(((130 - 140))) if (werewolfScore() >= 6) { - if (wolfScore() >= 12) { + if (werewolfScore() >= 12) { maxStr += (100 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (60 * newGamePlusMod); @@ -5366,8 +5372,8 @@ use namespace CoC; } }//+10 / 10 - 20 - - + + if (sphinxScore() >= 5) { if (sphinxScore() >= 14) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); @@ -5377,8 +5383,10 @@ use namespace CoC; maxInt += (100 * newGamePlusMod); maxWis += (40 * newGamePlusMod); } - }//+40/-20/+40/+100/+35 - + }//+50/-20/+40/+100/+40 + + + if (nekomataScore() >= 11) { if (findPerk(PerkLib.Flexibility) > 0) maxSpe += (50 * newGamePlusMod); else maxSpe += (40 * newGamePlusMod); @@ -6164,22 +6172,22 @@ use namespace CoC; } if (findPerk(PerkLib.CarefulButRecklessAimAndShooting) >= 0 && findPerk(PerkLib.ColdAim) < 0) maxTou -= (15 * newGamePlusMod); if (hasPerk(PerkLib.Lycanthropy)) { - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 3)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { maxStr += (10 * newGamePlusMod); maxTou += (10 * newGamePlusMod); maxSpe += (10 * newGamePlusMod); } - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 2)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { maxStr += (20 * newGamePlusMod); maxTou += (20 * newGamePlusMod); maxSpe += (20 * newGamePlusMod); } - if (((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) || (flags[kFLAGS.LUNA_MOON_CYCLE] + 1)) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { maxStr += (30 * newGamePlusMod); maxTou += (30 * newGamePlusMod); maxSpe += (30 * newGamePlusMod); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { maxStr += (40 * newGamePlusMod); maxTou += (40 * newGamePlusMod); maxSpe += (40 * newGamePlusMod); diff --git a/classes/classes/PlayerAppearance.as b/classes/classes/PlayerAppearance.as index 364c8dee72..890e67cb09 100644 --- a/classes/classes/PlayerAppearance.as +++ b/classes/classes/PlayerAppearance.as @@ -1025,6 +1025,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Your " + num2Text(player.legCount) + " legs are equally covered in [skin coat.color] fur, ending on red-panda paws with short claws. They have a nimble and strong build, in case you need to escape from something."); else if (player.lowerBody == LowerBody.AVIAN) outputText(" You have strong thighs perfect for launching you into the air which end in slender, bird-like legs, covered with a [skin coat.color] plumage down to your knees and slightly rough, [skin] below. You have digitigrade feet, with toes that end in sharp talons."); + else if (player.lowerBody == LowerBody.GRYPHON) + outputText(" You have strong thighs perfect for launching you into the air ending in furred, feline legs, covered with a coat of soft, [skin coat.color2] fur. Your have digitigrade feet, lion-like, with soft, pink soles and paw pads, with feline toes ending in sharp, retractile claws."); if (player.findPerk(PerkLib.Incorporeality) >= 0) outputText(" Of course, your [legs] are partially transparent due to their ghostly nature."); // isn't goo transparent anyway? } @@ -1156,6 +1158,9 @@ public class PlayerAppearance extends BaseContent { else if (player.tailType == Tail.AVIAN) { outputText(" A tail shaped like a fan of long, [skin coat.color] feathers rests above your " + assDescript() + ", twitching instinctively to help guide you if you were to take flight."); } + else if (player.tailType == Tail.GRIFFIN) { + outputText(" From your backside hangs a long tail, leonine in shape and covered mostly by a layer of [skin coat.color2] fur with a tip made of a tuft of [skin coat.color] colored feathers. It moves sinuously as you walk."); + } } public function describeArms():void { //Wing arms @@ -1218,6 +1223,8 @@ public class PlayerAppearance extends BaseContent { outputText(" Your arms are covered in [skin coat.color] up to your shoulder. They end with a pair of five-toed cat paws armed with lethal claws."); else if (armType == Arms.AVIAN) outputText(" Your arms are covered with [skin coat.color] colored feathers just a bit past your elbow. Your humanoid hands have " + player.skinTone + ", slightly rough skin and end in short claws."); + else if (armType == Arms.GRYPHON) + outputText(" The feathers on your arms reach a bit past your elbows, the fringe of [skin coat.color] plumage leading to your " + player.skinTone + ", slightly rough skinned hands. They end in short, avian claws."); if (player.wings.type == Wings.BAT_ARM ){ outputText(" Your arm bones are thin and light in order to allow flight. You have grown a few extra fingers, which allow you to hold various items even with your abnormal hands, albeit at the cost of preventing flight while doing so."); } @@ -1270,7 +1277,7 @@ public class PlayerAppearance extends BaseContent { outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as a harpy."); if (wingType == Wings.FEATHERED_ALICORN) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an alicorn."); - if (wingType == Wings.FEATHERED_SPHINX) + if (wingType == Wings.FEATHERED_SPHINX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the [haircolor]-colored wings folded close, they can unfurl to allow you to soar as gracefully as an sphinx."); if (wingType == Wings.FEATHERED_PHOENIX) outputText(" A pair of large, feathery wings sprout from your back. Though you usually keep the crimson-colored wings folded close, they can unfurl to allow you to soar as gracefully as a phoenix."); @@ -1480,6 +1487,9 @@ public class PlayerAppearance extends BaseContent { else if(eyeType == Eyes.FERAL){ outputText(" In your eyes sometime dance a green light. It encompass your entire pupil when you let the beast within loose."); } + else if(eyeType == Eyes.GRYPHON){ + outputText(" Your gifted eyes have a bird-like appearance, having an [eyecolor] sclera and a large, black iris. A thin ring of black separates your sclera from your outer iris."); + } else outputText(" Your eyes are [eyecolor]."); } public function describeHairAndEars():void { @@ -1560,6 +1570,9 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" Two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } + if (earType == Ears.GRYPHON){ + outputText(" A duo of triangular, streamlined ears are located at each side of your head, helping you to pinpoint sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); + } // if (player.gills.type == Gills.FISH) { @@ -1644,6 +1657,9 @@ public class PlayerAppearance extends BaseContent { if (earType == Ears.AVIAN){ outputText(" The [hair] atop your head compliments you quite well, and two small holes at each side of your head serve you as ears. Hidden by tufts of feathers, they’re almost unnoticeable."); } + if (earType == Ears.GRYPHON){ + outputText(" Two triangular ears part your [hair] at each side of your head. They’re streamlined and adapted to fly, and are quite useful to locate sounds. They’re covered in soft, [skin coat.color] fur and end in tufts."); + } // if(player.antennae.type == Antennae.MANTIS) { @@ -1991,11 +2007,11 @@ public class PlayerAppearance extends BaseContent { } if (faceType == Face.RED_PANDA) { outputText(" Your face has a distinctive animalistic muzzle, proper from a red-panda, complete with a cute pink nose."); - if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") + if (player.hasFullCoatOfType(Skin.FUR)) outputText(" A coat of soft, [skin coat.color] colored fur covers your head, with patches of white on your muzzle, cheeks and eyebrows.") } if (faceType == Face.AVIAN) { outputText(" Your visage has a bird-like appearance, complete with an avian beak. A couple of small holes on it makes up for your nostrils, while a long, nimble tongue is hidden inside."); - if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat] feathers.") + if (player.hasFullCoatOfType(Skin.FEATHER)) outputText(" The rest of your face is decorated with a coat of [skin coat].") } // } @@ -2028,12 +2044,12 @@ public function RacialScores():void { if (player.bunnyScore() >= 4) outputText("\nBunny-morph: " + player.bunnyScore() + " (+" + (10 * (1 + player.newGamePlusMod())) + " max Spe)"); else if (player.bunnyScore() >= 1 && player.bunnyScore() < 4) outputText("\nBunny-morph: " + player.bunnyScore() + ""); else if (player.bunnyScore() < 1) outputText("\nBunny-morph: 0"); - + //Sphinx if (player.sphinxScore() >= 14) outputText("\nSphinx: " + player.sphinxScore() + " (+" + (50 * (1 + player.newGamePlusMod())) + " max Str, -" + (20 * (1 + player.newGamePlusMod())) + " max Tou, +" + (40 * (1 + player.newGamePlusMod())) + " max Spe, +" + (100 * (1 + player.newGamePlusMod())) + " max Int, +" + (40 * (1 + player.newGamePlusMod())) + " max Wis)"); else if (player.sphinxScore() >= 1 && player.sphinxScore() < 14) outputText("\nSphinx: " + player.sphinxScore() + ""); else if (player.sphinxScore() < 1) outputText("\nSphinx: 0"); - + if (player.catScore() >= 8) { outputText("\nCat-girl/Cat-boy/Cat Morph: " + player.catScore() + " ("); if (player.findPerk(PerkLib.Flexibility) > 0) outputText("+" + (70 * (1 + player.newGamePlusMod())) + " "); diff --git a/classes/classes/PlayerEvents.as b/classes/classes/PlayerEvents.as index 7051e95a3d..2655556c3d 100644 --- a/classes/classes/PlayerEvents.as +++ b/classes/classes/PlayerEvents.as @@ -137,12 +137,21 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers2); } } + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) { + if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, -1); + if (player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 2, -1); + if (player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 3, -1); + if (player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) > 0) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 4, -1); + if (player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv2(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv3(StatusEffects.CampSparingNpcsTimers3) <= 0 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers3) <= 0) { + player.removeStatusEffect(StatusEffects.CampSparingNpcsTimers3); + } + } //Sidonie checks if (flags[kFLAGS.SIDONIE_RECOLLECTION] > 0) flags[kFLAGS.SIDONIE_RECOLLECTION]--; if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { if (flags[kFLAGS.LUNA_JEALOUSY] < 200) flags[kFLAGS.LUNA_JEALOUSY]++; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 10) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; - if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 9) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10 || flags[kFLAGS.LUNA_FOLLOWER] == 12 || flags[kFLAGS.LUNA_FOLLOWER] == 14 || flags[kFLAGS.LUNA_FOLLOWER] == 16) && flags[kFLAGS.LUNA_JEALOUSY] < 50) flags[kFLAGS.LUNA_FOLLOWER]--; + if ((flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 11 || flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 15) && flags[kFLAGS.LUNA_JEALOUSY] >= 50 && (CoC.instance.model.time.hours > 6 && CoC.instance.model.time.hours < 23)) SceneLib.lunaFollower.warrningAboutJelously(); } Begin("PlayerEvents","hourlyCheckRacialPerks"); needNext = hourlyCheckRacialPerks(); @@ -433,7 +442,12 @@ public class PlayerEvents extends BaseContent implements TimeAwareInterface { } if (player.werewolfScore() >= 6 && player.hasPerk(PerkLib.LycanthropyDormant)) { outputText("\nAs you become wolf enough your mind recedes into increasingly animalistic urges. It will only get worse as the moon comes closer to full. Gained Lycanthropy.\n"); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + var bonusStats:Number = 0; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; + player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); player.removePerk(PerkLib.LycanthropyDormant); needNext = true; } @@ -584,47 +598,62 @@ if (CoC.instance.model.time.hours > 23) { //Once per day if (flags[kFLAGS.CHI_CHI_LVL_UP] < 2) flags[kFLAGS.CHI_CHI_LVL_UP] = 2; else flags[kFLAGS.CHI_CHI_LVL_UP]++; } + //Mishaps reset + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.removeStatusEffect(StatusEffects.CampLunaMishaps1); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.removeStatusEffect(StatusEffects.CampLunaMishaps2); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps3)) player.removeStatusEffect(StatusEffects.CampLunaMishaps3); //Full moon if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { flags[kFLAGS.LUNA_MOON_CYCLE]++; + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; if (player.hasPerk(PerkLib.Lycanthropy)) { - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + var changeV:Number = 10 * player.newGamePlusMod(); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 5) { outputText("\nYou can’t help but notice the moon is almost full as it rises up. It seems transfixing like it is calling to you."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,10); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 6) { outputText("\nWhen the almost-full moon appears it causes your heart to race with excitement. You hearing seems better than ever. Every breath brings a rush of smells through your nose that seem much more pronounced than they should."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness.\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,20); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] - 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 7) { outputText("\nYou gaze at the moon and it seems to gaze back into you. Something is coming and it won’t be long now. You feel like you are crawling in your skin. It feels like tear out of your body and be born anew."); - outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + outputText("\n\nYou feel your might increasing as the moon draws closer to fullness. It's almost time.\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,30); } - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0) { - outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + "."); - dynStats("str", (10 * player.newGamePlusMod()), "tou", (10 * player.newGamePlusMod()), "spe", (10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) { + outputText("\nYou are at the peak of your strength, it's a full moon tonight and you feel yourself burning with maddening desire as you go into " + player.mf("rut","heat") + ".\n"); + dynStats("str", changeV, "tou", changeV, "spe", changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,40); if (player.hasCock() || (player.gender == 3 && rand(2) == 0)) player.goIntoRut(false); else if (player.hasVagina()) player.goIntoHeat(false); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 1) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1) { + outputText("\nThe moon is waning, you are feeling less powerful.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,30); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 2) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2) { + outputText("\nThe moon is waning, you are feeling less powerful.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,20); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 3) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nThe moon is waning, you are feeling less powerful."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3) { + outputText("\nThe moon is waning, you are feeling less powerful.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,10); } - if ((flags[kFLAGS.LUNA_MOON_CYCLE] + 4) == (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0)) { - outputText("\nIt's a new moon tonight, you feel somewhat weak."); - dynStats("str", -(10 * player.newGamePlusMod()), "tou", -(10 * player.newGamePlusMod()), "spe", -(10 * player.newGamePlusMod())); + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 4) { + outputText("\nIt's a new moon tonight, you feel somewhat weak.\n"); + dynStats("str", -changeV, "tou", -changeV, "spe", -changeV); + player.setPerkValue(PerkLib.Lycanthropy,1,0); } + needNext = true; } } } diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index d0d3cd8619..48a3c3cbc0 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -557,6 +557,13 @@ public class PlayerInfo extends BaseContent { if (flags[kFLAGS.LUNA_FOLLOWER] > 3) { interpersonStats += "Luna Affection: " + Math.round(flags[kFLAGS.LUNA_AFFECTION]) + "%\n"; interpersonStats += "Luna Jealousy: " + Math.round(flags[kFLAGS.LUNA_JEALOUSY]) + "%\n"; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE] + " (FULL MOON)"; + else interpersonStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; + interpersonStats += "\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 3) interpersonStats += "Luna lvl: 27\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 2) interpersonStats += "Luna lvl: 21\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 1) interpersonStats += "Luna lvl: 15\n"; + if (flags[kFLAGS.LUNA_LVL_UP] == 0) interpersonStats += "Luna lvl: 9\n"; } if (flags[kFLAGS.OWCAS_ATTITUDE] > 0) interpersonStats += "Owca's Attitude: " + flags[kFLAGS.OWCAS_ATTITUDE] + "\n"; diff --git a/classes/classes/Saves.as b/classes/classes/Saves.as index 4e7cfaff2c..a574dc0c17 100644 --- a/classes/classes/Saves.as +++ b/classes/classes/Saves.as @@ -358,7 +358,7 @@ public function saveLoad(e:MouseEvent = null):void clearOutput(); outputText("Where are my saves located?\n"); - outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); + outputText("In Windows Vista/7 (IE/FireFox/Other):
Users/{username}/Appdata/Roaming/Macromedia/Flash Player/#Shared Objects/{GIBBERISH}/
\n\n"); outputText("In Windows Vista/7 (Chrome):
Users/{username}/AppData/Local/Google/Chrome/User Data/Default/Pepper Data/Shockwave Flash/WritableRoot/#SharedObjects/{GIBBERISH}/
\n\n"); outputText("Inside that folder it will saved in a folder corresponding to where it was played from. If you saved the CoC.swf to your HDD, then it will be in a folder called localhost. If you played from my website, it will be in fenoxo.com. The save files will be labelled CoC_1.sol, CoC_2.sol, CoC_3.sol, etc.
\n\n"); outputText("Why do my saves disappear all the time?\nThere are numerous things that will wipe out flash local shared files. If your browser or player is set to delete flash cookies or data, that will do it. CCleaner will also remove them. CoC or its updates will never remove your savegames - if they disappear something else is wiping them out.\n\n"); diff --git a/classes/classes/Scenes/Areas/HighMountains.as b/classes/classes/Scenes/Areas/HighMountains.as index 3ceeaa64fe..1c1dd89704 100644 --- a/classes/classes/Scenes/Areas/HighMountains.as +++ b/classes/classes/Scenes/Areas/HighMountains.as @@ -106,6 +106,10 @@ use namespace CoC; phoenixScene.encounterPhoenix1(); return; } + if ((player.hasKeyItem("Gryphon Statuette") < 0 || player.hasKeyItem("Peacock Statuette") < 0) && rand(4) == 0) { + caveScene(); + return; + } //10% chance to mino encounter rate if addicted if (flags[kFLAGS.MINOTAUR_CUM_ADDICTION_STATE] > 0 && rand(10) == 0) { spriteSelect(44); @@ -178,6 +182,7 @@ use namespace CoC; return; } } + //\"Chicken Harpy\" by Jay Gatsby and not Savin he didn't do ANYTHING //Initial Intro public function chickenHarpy():void @@ -210,7 +215,6 @@ use namespace CoC; if (player.hasItem(consumables.OVIELIX, 3)) addButton(1, "Give Three", giveThreeOviElix); addButton(4, "Leave", leaveChickenx); } - //If Give Two public function giveTwoOviElix():void { @@ -228,7 +232,6 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.PURPLEG); addButton(5, "White", getHarpyEgg, consumables.WHITEEG); } - //If Give Three public function giveThreeOviElix():void { @@ -245,7 +248,6 @@ use namespace CoC; addButton(4, "Purple", getHarpyEgg, consumables.L_PRPEG); addButton(5, "White", getHarpyEgg, consumables.L_WHTEG); } - //All Text public function getHarpyEgg(itype:ItemType):void { @@ -255,7 +257,6 @@ use namespace CoC; outputText("You take " + itype.longName + ", and the harpy nods in regards to your decision. Prepping her cart back up for the road, she gives you a final wave goodbye before heading back down through the mountains.\n\n"); inventory.takeItem(itype, chickenHarpy); } - //If No public function leaveChickenx():void { @@ -265,5 +266,38 @@ use namespace CoC; outputText("\n\nYou decide to take your own path, heading back to camp while you can."); doNext(camp.returnToCampUseOneHour); } + + public function caveScene():void { + clearOutput(); + outputText("Wandering once more around the rocky cliffs on the higher area of the mountains, you find yourself increasingly bores, as you spend the most of the hour tossing aside pebbles and rocks that fell on the path, or crushing the solidified snow with your footwear.\n\n"); + outputText("On the middle of your careless, and surprisingly peaceful stroll, you happen to find an alcove carved on the cliff’s stone. It’s not very big, maybe three or four feet tall, five feet wide and two feet deep, resting one feet above the path ground, so you’re forced to get on your knees to examine it better.\n\n"); + outputText("The alcove itself is seemingly empty, though after a better examination, the back has engraved on the cliff rock a long, detailed inscription. Sadly, you can’t get a word from it, since it’s written in a strange, old language that’s doesn’t barely resemble anything that you’ve found in Mareth. Carved on each side there area stylized figures of avian creatures, "); + outputText("the most noticeable ones being a gryphon with the wings spread, and in the other side, a peacock doing the same with its tail. As you put your hands on them, you notice a that a shape vaguely resembling a hand forming in the floor of the alcove.\n\n"); + outputText("Tentatively you put one hand on place"); + if (player.avianScore() < 9) { + outputText(", but absolutely nothing happens. Maybe the magic or whatever that thing was supposed to do stopped working long ago? In any case, you had enough looking for a while, and since you’re not getting anything useful from there, you resume your walk.\n\n"); + doNext(camp.returnToCampUseOneHour); + } + else { + outputText(" and gasp in surprise as the figures depicting the creatures at the sides of the alcove recede as you do so, leaving in place two smaller alcoves with two statuettes on them.\n\n"); + outputText("The first one, made on brass and bronze, depicts a fierce looking gryphon in an assault stance. Every bit of the artifact emanates an unnatural strength. On the other side, a statue made of alabaster and ruby gemstones is shaped as a graceful peacock. Strangely, besides being pretty, the way it’s crafted gives you a weird, mystic feel.\n\n"); + outputText("You try to grab both, but as soon as you put your hands in one of them, the alcove with the other starts closing. Seems like you’ll have only one choice here.\n\n"); + menu(); + addButton(0, "Gryphon", caveSceneGryphon); + addButton(1, "Peacock", caveScenePeacock); + } + } + public function caveSceneGryphon():void { + outputText("Picking the brass-forged statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); + outputText("With nothing useful left to you here, you resume your walk and return to your camp with the gryphon idol on your bag.\n\n"); + player.createKeyItem("Gryphon Statuette", 0, 0, 0, 0); + doNext(camp.returnToCampUseOneHour); + } + public function caveScenePeacock():void { + outputText("Picking the alabaster statuette, you immediately feel how its energy rushes through your avian body, invigorating it with an unknown force. Carefully putting it on your bag, you see how the other one is stored away by the hidden mechanism.\n\n"); + outputText("With nothing useful left to you here, you resume your walk and return to your camp with the peacock idol on your bag.\n\n"); + player.createKeyItem("Peacock Statuette", 0, 0, 0, 0); + doNext(camp.returnToCampUseOneHour); + } } } diff --git a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as index ceec9b80eb..4a424f9620 100644 --- a/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as +++ b/classes/classes/Scenes/Areas/HighMountains/MinervaPurification.as @@ -589,7 +589,7 @@ public class MinervaPurification extends BaseContent outputText("Giving me these daughters is the greatest gift you could have given me...
\" she says softly as she holds you gently, bulge pressed gently against bulge, her hands stroking your stomach as you caress hers."); outputText("\n\nThe two of you lay here against the tree cuddling together as a pair of expecting parents"); if (flags[kFLAGS.MINERVA_CHILDREN] > 0) outputText(", your daughters curled up with you and Minerva; they seem very happy, as if they all know that they are going to be getting more sisters soon"); - outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?"); + outputText(". After some time Minerva finally speaks, her golden eyes locking with yours. \"So, my sweet darling, since you're taking time out of your championing to visit me all the way up here, how shall we spend our time together?\""); } else { //Not pregnant or pregnant with something else. outputText("You can't help wondering if anything has changed since you had been with her last. If her body was any hint at how fertile she now is, it was likely very easy for her to get pregnant. It's not hard to spot her; the golden siren is sitting on the edge of the spring with her feet in the water, gently splashing the water as she softly sings to herself. When you get closer, though, you realize that she is not really singing to herself but to her round pregnant belly. From where you are you can clearly tell she is stroking her pregnancy gently with her hands as she sings softly to her unborn babies."); @@ -1652,7 +1652,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } @@ -1664,7 +1664,7 @@ if (CoC.instance.inCombat) cleanupAfterCombat(); outputText("\n\nFalling onto her back, Minerva takes you with her, laying with you as she holds you tightly, her hands stroking you tenderly. \"My one and only, my special prime-mate, we are going to have a big beautiful family together. I'll give you all the beautiful, sweet little girls you want, I'll never say no to you lover.\" She says with a great grin on her face before leaning up and kissing you tenderly on the lips. The two of you just lay there for a while, holding each other, kissing and stroking each other. Minerva's hands slowly stroking your belly from time to time."); - outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.<\i>\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); + outputText("\n\nGiving you one final kiss on the lips before finally disentangling herself from you and helping you up, her face brightened by her blush, that grin on her face seemingly unable to be removed. \"Thank you for spending this time with me my love, spending that time with you was very important to me, even now words fail me, I can't tell you happy I am.\" she strokes your cheek softly, holding you there for a moment. \"I know you have to go, back to your important champion duties I know, but... just make sure you come back soon, I wouldn't want to miss the birth of our baby, or babies by the looks of it.\" she says with a very happy tone, clearly overjoyed at the idea of having more than one growing inside you. Giving you one final long tongue filled kiss she lets you go so that you can head back to your camp, but not before giving your [ass] a firm, playful spank."); doNext(camp.returnToCampUseOneHour); } diff --git a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as index 3004463f23..94bb8ff32d 100644 --- a/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as +++ b/classes/classes/Scenes/Areas/HighMountains/TempleOfTheDivine.as @@ -81,6 +81,8 @@ use namespace CoC; mainmenu(); } private function mainmenu():void { + outputText("\n\nGargoyle Quest progress: " + flags[kFLAGS.GARGOYLE_QUEST] + ""); + outputText("\n\nTemple Repair progress: " + flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] + ""); menu(); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 1) { addButton(0, "Pray", PlayerPrayAtTemple).hint("Offer your prayer to one of the temple altar."); @@ -261,11 +263,11 @@ use namespace CoC; if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 150) addButton(1, "Statue of Marae", rebuildStatueOfMarae).hint("Repair the statue."); else addButtonDisabled(1, "Statue of Marae", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) { - if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Repairing the gargoyles on the walls", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); - else addButtonDisabled(2, "Repairing the gargoyles on the walls", "You not have enough stones."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) { + if (flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] >= 500) addButton(2, "Gargoyles", repairGargoylesOnTheWalls).hint("Repair some of the decorative gargoyles."); + else addButtonDisabled(2, "Gargoyles", "You not have enough stones."); } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 18) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7 && flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 17) { if (flags[kFLAGS.CAMP_CABIN_WOOD_RESOURCES] >= 50 && flags[kFLAGS.CAMP_CABIN_NAILS_RESOURCES] >= 10) addButton(3, "Prayer Bench", makeNewPrayerBenches).hint("Repair some of the temple banches."); else addButtonDisabled(3, "Prayer Bench", "You not have enough wood or/and nails."); } @@ -338,7 +340,7 @@ use namespace CoC; }*/ public function rebuildStatueOfMarae():void { clearOutput(); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 4) outputText("You work for the entire day sculpting stone and repairing the statue of Marae. It looks slightly better but it is far from finished."); else outputText("You work for the entire day sculpting stone and repairing the statue of Marae. By the time you're done you can feel divine power radiate from it empowering the entire temple."); flags[kFLAGS.CAMP_CABIN_STONE_RESOURCES] -= 150; flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS]++; @@ -377,11 +379,11 @@ use namespace CoC; if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] < 1) outputText("broken altar of Fera. You believe it was damaged way before the demons came in, likely by the priesthood tending the temple."); if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_FENRIR] == 1) outputText("Altar of Fera. An aura of depraved lust rise from it, inviting you to unknown pleasure. This altar radiate a clearly demonic aura and dims the sanctity of the temple like an idol."); outputText("\n\nMarae's statue "); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 6) outputText("lies on the ground, its head shattered to pieces"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 6) outputText("in the background awaits the worshippers with its serene and compassionate expression"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 5) outputText("lies on the ground, its head shattered to pieces"); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 5) outputText("in the background awaits the worshippers with its serene and compassionate expression"); outputText(". Lining both walls"); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 8) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] < 7) outputText(" are the destroyed remains of the many gargoyles who fought to defend this place. Sadly, of all the guardians, only Sapphire remains now."); + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 7) { outputText(", many decorative gargoyles are displayed."); if (flags[kFLAGS.ONYX_PATH] < 1) outputText(" While Sapphire is the last living stony guardian of the temple, this still gives off the illusion of a platoon of guardians watching faithfully over this divine place."); if (player.isGargoyle()) outputText(" Your own pedestal stands right next to Sapphire's, allowing you to keep close to her when you need to rest (using your pedestal allows you to sleep with Sapphire if your relation is high enough)."); @@ -392,7 +394,7 @@ use namespace CoC; outputText(" is looking at you expectantly."); } } - if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 9) { + if (flags[kFLAGS.TEMPLE_OF_THE_DIVINE_PROGRESS] >= 8) { outputText(" There are " + player.statusEffectv1(StatusEffects.TempleOfTheDivineTracker) + " benches in the temple for the worshipers to sit upon."); } doNext(TempleAltairsRebuildMenu); @@ -1206,11 +1208,11 @@ use namespace CoC; outputText(".\n\nIt's arms "); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with a set of bestial four fingered sharp stone claws"); if (player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("ends with very human fist"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be sculpted"); outputText(". It's legs "); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("ends with clawed bestial feets with three toe at the front and one at the back"); if (player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("are human like"); - if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv4(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); + if (!player.hasStatusEffect(StatusEffects.GargoyleTFSettingTracker1) || player.statusEffectv3(StatusEffects.GargoyleTFSettingTracker1) == 0) outputText("have yet to be defined"); outputText(". Its "); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 1) outputText("mace like"); if (player.statusEffectv2(StatusEffects.GargoyleTFSettingTracker1) == 2) outputText("axe like"); diff --git a/classes/classes/Scenes/Areas/Lake.as b/classes/classes/Scenes/Areas/Lake.as index 7f5f062142..e954514c0d 100644 --- a/classes/classes/Scenes/Areas/Lake.as +++ b/classes/classes/Scenes/Areas/Lake.as @@ -43,7 +43,7 @@ use namespace CoC; return; } //Diana - if (flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(4) == 0) { + if (player.level >= 3 && flags[kFLAGS.DIANA_FOLLOWER] < 6 && player.statusEffectv4(StatusEffects.CampSparingNpcsTimers2) < 1 && rand(10) == 0) { SceneLib.dianaScene.repeatLakeEnc(); return; } diff --git a/classes/classes/Scenes/Areas/Lake/FetishZealot.as b/classes/classes/Scenes/Areas/Lake/FetishZealot.as index 00c4f47940..f4d2d5716d 100644 --- a/classes/classes/Scenes/Areas/Lake/FetishZealot.as +++ b/classes/classes/Scenes/Areas/Lake/FetishZealot.as @@ -82,7 +82,7 @@ public class FetishZealot extends Monster //A pirate costume; if(armorName == PIRATE_CLOTHES) { //You are faced with one of the strangest things you have ever seen in your life. A stereotypical pirate, who has not replaced his hand with a hook, but rather a collection of sex toys. You can see at least two dildos, a fleshlight, and numerous other toys that you're incapable of recognizing. - outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); + outputText("The zealot turns to the side holding his prosthetic towards you and doing something that sends the devices spinning and clicking. So that's how that would work... you find yourself thinking for a few moments before realizing that he had both distracted and aroused you."); } //Military attire; if(armorName == MILITARY_CLOTHES) { diff --git a/classes/classes/Scenes/Camp.as b/classes/classes/Scenes/Camp.as index f8b0d5bdc9..0c37d5522b 100644 --- a/classes/classes/Scenes/Camp.as +++ b/classes/classes/Scenes/Camp.as @@ -860,7 +860,8 @@ CoC.instance.saves.saveGame(player.slotName); if (slavesCount() > 0) addButton(7, "Slaves", campSlavesMenu).hint("Check up on any slaves you have received and interact with them."); addButton(8, "Camp Actions", campActions).hint("Interact with the camp surroundings and also read your codex or questlog."); if (flags[kFLAGS.CAMP_CABIN_PROGRESS] >= 10 || flags[kFLAGS.CAMP_BUILT_CABIN] >= 1) addButton(9, "Enter Cabin", cabinProgress.initiateCabin).hint("Enter your cabin."); //Enter cabin for furnish. - if (player.findPerk(PerkLib.JobSoulCultivator) >= 0 || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); + if (player.hasPerk(PerkLib.JobSoulCultivator) || debug) addButton(10, "Soulforce", soulforce.accessSoulforceMenu).hint("Spend some time on the cultivation or spend some of the soulforce."); + else if (!player.hasPerk(PerkLib.JobSoulCultivator) && player.hasPerk(PerkLib.Metamorph)) addButton(10, "Metamorf", SceneLib.metamorph.accessMetamorphMenu).hint("Use your soulforce to mold freely your body."); var canFap:Boolean = !player.hasStatusEffect(StatusEffects.Dysfunction) && (flags[kFLAGS.UNABLE_TO_MASTURBATE_BECAUSE_CENTAUR] == 0 && !player.isTaur()); if (player.lust >= 30) { addButton(11, "Masturbate", SceneLib.masturbation.masturbateMenu); @@ -1001,6 +1002,7 @@ public function loversHotBathCount():Number { if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.DIANA_FOLLOWER] > 5) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) counter++; if (followerHel()) counter++; if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; @@ -1023,6 +1025,7 @@ public function sparableCampMembersCount():Number { if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) counter++; if (flags[kFLAGS.CEANI_FOLLOWER] > 0) counter++; if (flags[kFLAGS.ETNA_FOLLOWER] > 0) counter++; + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) counter++; if (followerHel()) counter++; if (isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) counter++; if (followerKiha()) counter++; @@ -1075,7 +1078,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { break; } outputText(".\n\n"); - buttons.add("Amily", amilyScene.amilyFollowerEncounter); + buttons.add("Amily", amilyScene.amilyFollowerEncounter2).disableIf(player.statusEffectv1(StatusEffects.CampLunaMishaps1) > 0,"Hurt foot."); } //Amily out freaking Urta? else if(flags[kFLAGS.AMILY_VISITING_URTA] == 1 || flags[kFLAGS.AMILY_VISITING_URTA] == 2) { @@ -1096,7 +1099,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Chi Chi if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) { outputText("You can see Chi Chi not so far from Jojo. She’s busy practicing her many combos on a dummy. Said dummy will more than likely have to be replaced within twenty four hours.\n\n"); - buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu); + /*if (player.statusEffectv4(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); + else */buttons.add( "Chi Chi", SceneLib.chichiScene.ChiChiCampMainMenu2); } //Diana if (flags[kFLAGS.DIANA_FOLLOWER] > 5) { @@ -1106,7 +1110,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { //Etna if (flags[kFLAGS.ETNA_FOLLOWER] > 0) { outputText("Etna is resting lazily on a rug in a very cat-like manner. She’s looking at you always with this adorable expression of hers, her tail wagging expectantly at your approach.\n\n"); - buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Sleeping."); + else */buttons.add( "Etna", SceneLib.etnaScene.etnaCampMenu2).disableIf(player.statusEffectv4(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //Helia if(SceneLib.helScene.followerHel()) { @@ -1129,7 +1134,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("You see the salamander Helia pacing around camp, anxiously awaiting your departure to the harpy roost. Seeing you looking her way, she perks up, obviously ready to get underway.\n\n"); } } - buttons.add( "Helia", helFollower.heliaFollowerMenu); + buttons.add( "Helia", helFollower.heliaFollowerMenu2).disableIf(player.statusEffectv3(StatusEffects.CampLunaMishaps2) > 0,"Sleeping."); } //Isabella if(isabellaFollower() && flags[kFLAGS.FOLLOWER_AT_FARM_ISABELLA] == 0) { @@ -1222,7 +1227,7 @@ public function campLoversMenu(descOnly:Boolean = false):void { case 2: outputText("Izma is lying on her back near her bedroll. You wonder at first just why she isn't using her bed, but as you look closer you notice all the water pooled beneath her and the few droplets running down her arm, evidence that she's just returned from the stream."); break; } outputText("\n\n"); - buttons.add( "Izma", izmaScene.izmaFollowerMenu); + buttons.add( "Izma", izmaScene.izmaFollowerMenu2).disableIf(player.statusEffectv4(StatusEffects.CampLunaMishaps1) > 0,"Fish smell."); } } //Kiha! @@ -1248,7 +1253,8 @@ public function campLoversMenu(descOnly:Boolean = false):void { outputText("Most of them are on fire.\n\n"); } } - buttons.add( "Kiha", kihaScene.encounterKiha).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); + /*if (player.statusEffectv1(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Cleaning burnt meat."); + else */buttons.add( "Kiha", kihaScene.encounterKiha2).disableIf(player.statusEffectv3(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } //MARBLE if(player.hasStatusEffect(StatusEffects.CampMarble) && flags[kFLAGS.FOLLOWER_AT_FARM_MARBLE] == 0) { @@ -1428,9 +1434,10 @@ public function campFollowers(descOnly:Boolean = false):void { //Ember if(emberScene.followerEmber()) { emberScene.emberCampDesc(); - buttons.add( + /*if (player.statusEffectv2(StatusEffects.CampLunaMishaps2) > 0) buttons.disable("Wet."); + else */buttons.add( "Ember", - emberScene.emberCampMenu + emberScene.emberCampMenu2 ).hint("Check up on Ember the dragon-" + (flags[kFLAGS.EMBER_ROUNDFACE] == 0 ? "morph" : flags[kFLAGS.EMBER_GENDER] == 1 ? "boy" : "girl" ) + "" ).disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers1) > 0,"Training."); } @@ -1471,7 +1478,7 @@ public function campFollowers(descOnly:Boolean = false):void { if (flags[kFLAGS.CAMP_BUILT_CABIN] > 0) outputText(" cabin"); if (!(model.time.hours > 4 && model.time.hours < 23)) outputText(" and the mouse is sleeping on it right now.\n\n"); else outputText(", though the mouse is probably hanging around the camp's perimeter.\n\n"); - buttons.add( "Jojo", jojoScene.jojoCamp).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty."); + buttons.add( "Jojo", jojoScene.jojoCamp2).hint("Go find Jojo around the edges of your camp and meditate with him or talk about watch duty.").disableIf(player.statusEffectv2(StatusEffects.CampLunaMishaps1) > 0,"Annoyed."); } } //Celess @@ -1605,9 +1612,9 @@ public function campFollowers(descOnly:Boolean = false):void { //Luna if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("Luna wanders around the camp, doing her chores as usual."); - if (flags[kFLAGS.LUNA_JEALOUSY] >= 25) outputText(" She looks at you from time to time, as if expecting you to notice her."); + if (flags[kFLAGS.LUNA_JEALOUSY] >= 50) outputText(" She looks at you from time to time, as if expecting you to notice her."); outputText("\n\n"); - buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna."); + buttons.add( "Luna", SceneLib.lunaFollower.mainLunaMenu).hint("Visit Luna.").disableIf(player.statusEffectv1(StatusEffects.CampSparingNpcsTimers3) > 0,"Training."); } for each(var npc:XXCNPC in _campFollowers){ npc.campDescription(buttons,XXCNPC.FOLLOWER); @@ -1639,7 +1646,7 @@ private function campActions():void { addButton(5, "Build", campBuildingSim).hint("Check your camp build options."); if (player.hasPerk(PerkLib.JobElementalConjurer) >= 0 || player.hasPerk(PerkLib.JobGolemancer) >= 0) addButton(6, "Winions", campWinionsArmySim).hint("Check your options for making some Winions."); else addButtonDisabled(6, "Winions", "You need to be able to make some minions that fight for you to use this option like elementals or golems..."); - if (player.hasStatusEffect(StatusEffects.KnowsHeal)) addButton(7, "Heal", spellHealcamp).hint("Heal will attempt to use white magic to instantly close your wounds and restore your body. \n\nMana Cost: 30"); + //addButton(7, "Heal", spellHealcamp).hint("Heal. \n\nMana Cost: 30"); //addButton(8, "Craft", kGAMECLASS.crafting.accessCraftingMenu).hint("Craft some items."); if (flags[kFLAGS.CAMP_UPGRADES_FISHERY] >= 1) addButton(8, "Fishery", VisitFishery).hint("Visit Fishery."); addButton(9, "Questlog", questlog.accessQuestlogMainMenu).hint("Check your questlog."); @@ -1732,39 +1739,6 @@ private function RetrieveStack():void { } } -public function spellHealcamp():void { - clearOutput(); - if(player.mana < 30) { - outputText("Your mana is too low to cast this spell."); - doNext(campActions); - return; - } - useMana(30); - var healing:int = combat.scalingBonusIntelligence(); - //healing *= spellMod(); - if (player.unicornScore() >= 5) healing *= ((player.unicornScore() - 4) * 0.5); - if (player.alicornScore() >= 6) healing *= ((player.alicornScore() - 5) * 0.5); - if (player.armorName == "skimpy nurse's outfit") healing *= 1.2; - //Determine if critical heal! - var crit:Boolean = false; - var critHeal:int = 5; - if (player.findPerk(PerkLib.Tactician) >= 0 && player.inte >= 50) critHeal += (player.inte - 50) / 5; - if (rand(100) < critHeal) { - crit = true; - healing *= 1.75; - } - healing = Math.round(healing); - outputText("You chant a magical song of healing and recovery and your wounds start knitting themselves shut in response. (+" + healing + ")."); - if (crit == true) outputText(" *Critical Heal!*"); - HPChange(healing,false); - outputText("\n\n"); - statScreenRefresh(); - flags[kFLAGS.SPELLS_CAST]++; - //spellPerkUnlock(); - doNext(doCamp); - cheatTime(1/12); -} - private function swimInStream():void { var izmaJoinsStream:Boolean = false; var marbleJoinsStream:Boolean = false; @@ -2232,7 +2206,7 @@ CoC.instance.saves.saveGame(player.slotName); return; } //Full Moon - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] < 9 && flags[kFLAGS.LUNA_AFFECTION] >= 50 && flags[kFLAGS.SLEEP_WITH] == "Luna" && player.gender > 0) { SceneLib.lunaFollower.fullMoonEvent(); sleepRecovery(false); return; @@ -2262,7 +2236,7 @@ CoC.instance.saves.saveGame(player.slotName); } else if(flags[kFLAGS.SLEEP_WITH] == "Luna" && flags[kFLAGS.LUNA_FOLLOWER] >= 4) { outputText("You head to bed, Luna following you. "); - if (flags[kFLAGS.LUNA_MOON_CYCLE] % 7 == 0 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8 && flags[kFLAGS.LUNA_FOLLOWER] >= 9) { SceneLib.lunaFollower.sleepingFullMoon(); return; } @@ -3459,8 +3433,13 @@ private function promptSaveUpdate():void { } /* if (flags[kFLAGS.MOD_SAVE_VERSION] == 20) { flags[kFLAGS.MOD_SAVE_VERSION] = 21; + if (player.hasPerk(PerkLib.Lycanthropy)) { + player.skin.coverage = Skin.COVERAGE_LOW; + player.coatColor = player.hairColor; + } + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; clearOutput(); - outputText("Text."); + outputText("Time to defur our werewolfs... no worry it will be only partial deffuring."); doNext(doCamp); return; } @@ -3471,6 +3450,20 @@ private function promptSaveUpdate():void { doNext(doCamp); return; } + if (flags[kFLAGS.MOD_SAVE_VERSION] == 22) { + flags[kFLAGS.MOD_SAVE_VERSION] = 23; + clearOutput(); + outputText("Text."); + doNext(doCamp); + return; + } + if (flags[kFLAGS.MOD_SAVE_VERSION] == 23) { + flags[kFLAGS.MOD_SAVE_VERSION] = 24; + clearOutput(); + outputText("Text."); + doNext(doCamp); + return; + } */ doCamp(); } diff --git a/classes/classes/Scenes/Camp/CampScenes.as b/classes/classes/Scenes/Camp/CampScenes.as index 5f84239f84..e4094b97d5 100644 --- a/classes/classes/Scenes/Camp/CampScenes.as +++ b/classes/classes/Scenes/Camp/CampScenes.as @@ -125,7 +125,7 @@ public function PeepingTom3():void { // outputText("As a naga, Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (arianScene.arianFollower() && flags[kFLAGS.ARIAN_VAGINA] > 0 && flags[kFLAGS.ARIAN_COCK_SIZE] == 0) outputText("Arian while formerly a male seems to get along with the other girls.\n\n"); if (flags[kFLAGS.SIDONIE_FOLLOWER] >= 1) { outputText("Sitting on a side of the spring that is spacious enough to accommodate his larger frame, Sidonie lies relaxed, among the girls. Most of them give her not-so subtle glances, some of them at her hefty bosom, but the most directed at the thick equine member dangling from the legs. Not caring too much about their looks, she simply lies and enjoy the bath.\n\n"); @@ -178,7 +178,7 @@ public function HaveAGirlBath():void { // outputText("As a naga Samira take a lot of space in the bath. You're glad you made it big enough to hold as many people as necessary.\n\n");//Samira if (flags[kFLAGS.DIANA_FOLLOWER] > 5) outputText("Diana is resting next to a set of medicinal and aromatic oils she regularly spray in the bath. Can’t say this is not welcome.\n\n"); //Michiko - if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_MOON_CYCLE] > 7 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] >= 4) outputText("Luna is enjoying a break relaxing for once as she is not on duty" + (flags[kFLAGS.LUNA_FOLLOWER] > 6 ? ", though for a few split second you imagined her doing doggy paddle in the water" : "") + ".\n\n"); if (flags[kFLAGS.IZMA_FOLLOWER_STATUS] == 1 && flags[kFLAGS.FOLLOWER_AT_FARM_IZMA] == 0) { if (flags[kFLAGS.IZMA_NO_COCK] == 0) outputText("While not entirely a girl, Izma is womanly enough that she was still accepted in the bath, her crotch well hidden behind a cloth.\n\n"); else outputText("While she was not always a girl, Izma is womanly enough that she was still accepted in the bath.\n\n"); diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 2bf325152f..6c53a2bbd2 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -39,7 +39,7 @@ package classes.Scenes outputText("-Kindra archery training would progress 2x faster.\n"); outputText("-Manual that Chi Chi drops after beating PC in second fight unlock Soul Blast soulskill (15 turns CD, chance to stun for 3 turns and dmg scale with PC current str, int and wis)\n"); outputText("-Fixed bugs: Softlocks on few enemy bind specials (like Izumi or Ceraph), Wrath specials correctly list needed resource, option to send Izma to fishery before it's built, many other small fixes\n\n"); - outputText("Version 0.8i:\n\n"); + outputText("Version 0.8i (Project 8 (Part 2: Luna, Diana, Sidonie), Avian TF, few new weapons, Healer path, small fixes):\n\n"); outputText("-New tier 0 misc lvl-up perk: Tough Hide. Req. Job: Beast Warrior perk and 30+ tou. Effect: Increase natural armor by 2 so long as PC have scale chitin fur or other natural armor.\n"); outputText("-New tier 1 misc lvl-up perk: Feral Armor. Req. Tough Hide perk and 60+ tou. Effect: Gain extra armor based on PC toughness so long as PC is naked, +20 to max wrath. (Similar to agility but PC must be naked and have natural armor)\n"); outputText("-New tier 1 misc lvl-up perk: Job: Healer. Req. 30+ int and 30+ wis. Effect: +5 to max Int and Wis (scalable), +30 to max Mana, +10% to spellpower when using healing spells\n"); @@ -57,7 +57,6 @@ package classes.Scenes outputText("-Having natural claws add toggle in combat menu to switch between normal or feral combat style. Only when PC not use any weapon (after few special exceptions) can benefit from feral combat style - when PC can attack more than once a turn fatigue costs will be halfed.\n"); outputText("-New melee weapon: Claws - obtainable by buying in weapon shop in He'Xin'Dao. 0 atk, 10% to cause bleed, 100 gems, is one of special exception weapons, which could be used without loosing benefits from using feral combat style.\n"); outputText("-All bleed effects not req. to lower enemy armor below 10. Also previous 50% chance for bleed effect was lowered to 25% for hooked gaunlets.\n"); - //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-First gaunlet repeatable reward was lowered to 15 spirit stones to keep in theme of 5 SS for each enemy defeated in gaunlet challanges.\n"); outputText("-Perk Rage give 50 more to max wrath and perk Anger 100 more to max wrath. To perk Job: Warlord req. was added option to use perk Feral Whirlwind instead of Whirlwind or Whipping. Other req. stay the same.\n"); outputText("-Beast Warrior PC's can use their own version of Whirlwind that req. only to have natural claws or weapons that can substitude natural claws. Almost all rest is similar to Whirlwind performed with any non-large/large weapon.\n"); @@ -74,7 +73,6 @@ package classes.Scenes outputText("-New body part - face: Avain Face. No prereq.\n"); outputText("-New body part - ears: Avain Ears. No prereq.\n"); outputText("-New body part - skin: Feathers. No prereq.\n"); - //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); outputText("-New melee weapon (by Shamanknight): Halberd - buyable in weapons shop in Tel'Adre. Cost 1200 gems. Base atk is 6 increased by 9 when PC have 50+ str and another 15 more atk when having 100+ str. Attacks ignore 40% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Guan Dao - buyable in weapons shop in He'Xin'Dao. Cost 100 spirit stones. Base atk is 6 increased by 8 when PC have 50+ str and another 11 more atk when having 100+ str. Attacks ignore 60% of target armor.\n"); outputText("-New melee weapon (by Shamanknight): Fly-Whisk - buyable in weapons shop in He'Xin'Dao. Cost 80 spirit stones. Base atk is 0, increase magical soulskills power by 20%.\n"); @@ -92,14 +90,33 @@ package classes.Scenes outputText("-Tease and few other lust dealing attacks scalling was changed to use libido scaling instead lvl based one + in case of alraune it will have toughness scaling too.\n"); outputText("-Giacomo was added to possible encounters in Soul Sense menu. Also Lumi Lab after first time visiting it would be moved to Dungeons submenu (since it should been like Sean shop inside one of dungeons).\n"); outputText("-Celess related events in forest would be temporaly unaccesable (not affecting anything if PC already have Celess in camp).\n"); - outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n\n\n\n\n");/*ostatni punkt changelogu - outputText("-Added in current version race effects to Metamorph perk: \n"); + outputText("-Fixed bugs: Patchouli not leading PC to Wonderland from camp, Sidewinder not having daily cooldown counter, Anzu missing from his palace, Chi Chi not dropping M.Gloves after first/second fight on soul arena, missing option to buy Taoth statue in Jewelery shop in Tel'Adre\n\n"); + outputText("Version 0.8i2:\n\n"); outputText("-\n"); outputText("-\n"); + outputText("-\n"); + outputText("-Diana later stages stats adjusted. Also added req. of min. lvl 3 to meet her at lake, lowered encounter chance.\n"); + outputText("-Luna can be spared when PC accept her (by loosing in fight or just accepting). In case of simple accepting there would be new option showing up in talk menu after talking with her on Lycantrophy after accpting her that allow voluntary been biten by her. After sparing she can lvl up up to lvl 27.\n"); + outputText("-Ice Fist and Fire Punch req. uing bare first or gaunlets. Punishing Kick req. to have bipedal or taur lower body.\n"); + outputText("-Visiting Journey to the East inn after 5 pm give 25% to encounter drunk Chi Chi that may lead to drunken sex.\n"); + outputText("-Added new info when PC have Luna in camp: Moon Cycle. Will show which day of it is currently and when night of full moon will be approaching will be red colored instead of norma black.\n"); + outputText("-New Gaunlet challange on Soul Arena. Containt 4 fights that will or reward with Sceptre of Command or 20 spirit stones after winning. Req. finishing at least once Gaunlet 1 on soul arena.\n"); + outputText("-New melee weapon: Sceptre of Command - won as reward for first time beating Gaunlet 2 on Soul Arena. Cost 600 gems and base atk 4. Increase by 50% damage of elementals and golems.\n"); + outputText("-Beast Warrior Crinos Shape bonuses was increased from 5/10/15/20% of current str/tou/spe to 20/40/80/160%.\n"); + outputText("-Metamorph perk would grant increase max soulforce by 50 and grant access to Metamorph option even if PC not yet have perk Job: Soul Cultivator.\n"); + outputText("-Starting mana cap rised from 100 to 200 and starting fatigue cap from 100 to 150. Feral Whirlwind base dmg increased by 50%. Archery base accuracy increased form 30% to 40%. Fly-Whisk price lowered by half. Shield Bash req. not proper type of shield not just any item in shield slot like mana bracer.\n"); + outputText("-Attacks using intelligence and wisdom scalling would now use scalling used by attack using str/tou/spe, which mean at stat values above 100 it would be weaker effect.\n"); + outputText("-Req. for perks form corruption tree lowered: Corrupted Libido, Seduction, Nymphomania, Acclimation, Sense Corruption, Sadist, Arousing Aura\n"); + outputText("-Monsters base lust cap lowered from 100 to 70. Also now they will get a few points to max cap each lvl (at begining 2, then 5, 10, 20).\n"); + outputText("-Fixed bugs: Werewolf full fur instead of partial, Luna bugs fixed, Raiju lust nukes nerfed, Temple of the Divine rebulding bugfixing, removed req. of Herism perk for perk Job: Countresan, missing Anzu in his Palace\n\n\n\n\n");/*ostatni punkt changelogu + //outputText("-New tier lvl-up perk: . Req. . Effect: \n"); + //outputText("-New range weapon: Hodr's Bow - obtained by . 22 atk, costing 2200 gems, -5% accuracy, Artifact Bow, each arrow can apply blind debuff on enemy.\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Pure Celess to purify. (item properties desc).\n"); outputText("-New range weapon (by Liadri): - obtainable by giving to Corrupted Celess to corrupt. (item properties desc).\n"); outputText("-New event perk: Gargoyle. Gained in ritual to become gargoyle by picking own blood. Effects: \n"); outputText("-New event perk: Corrupted Gargoyle. Gained in ritual to become gargoyle by picking minotaur blood. Effects: \n"); + outputText("-Added in current version race effects to Metamorph perk: \n"); + outputText("-\n"); outputText("-\n"); outputText("-\n"); outputText("-\n"); @@ -107,12 +124,14 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); outputText("-Added in current version race effects to Metamorph perk: \n");, Goo, Siren, Bat, Vampire, Cat, Cheshire cat outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); outputText("\n"); + outputText("\n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Dedication. Req.: Using Five-colored Elemental Pearl, which can be found after beating 2nd boss of Hidden Cave dungeon. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Dedication perk.\n"); outputText("-New tier 8 intelligence lvl-up perk: Trance. Req. Prestige Job: Seer perk and 200+. Effect: \n"); outputText("-New event related perk: Elemental Conjurer Mind and Body Sacrifice. Req.: Using xxx, which can be found xxx. Effect: It'll neutralize negative effects on max Str/Tou/Spe due to picking Elemental Conjurer Sacrifice perk.\n"); @@ -154,8 +173,6 @@ package classes.Scenes outputText("\n"); outputText("\n"); outputText("\n"); - outputText("\n"); - outputText("\n"); outputText("\n");*/ outputText("\n\n\n"); outputText("Plans for future builds (I know some of them are HUGE ones but without dreams to chase how can one change?):\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index a8c6d8d56f..aad6d3e7d0 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -804,6 +804,7 @@ public function baseelementalattacks(elementType:int = -1):void { if (summonedElementals >= 8 && manaCost > 45 && player.hasPerk(PerkLib.StrongestElementalBond)) manaCost -= 40; if (player.mana < manaCost) { outputText("Your mana is too low to fuel your elemental attack!\n\n"); + flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] = 1; doNext(combatMenu); } else { @@ -829,6 +830,7 @@ public function elementalattacks(elementType:int, summonedElementals:int):void { if (player.hasPerk(PerkLib.ElementalConjurerResolve)) elementalamplification += 0.1 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerDedication)) elementalamplification += 0.2 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; if (player.hasPerk(PerkLib.ElementalConjurerSacrifice)) elementalamplification += 0.3 * flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; + if (player.weapon == weapons.SCECOMM) elementalamplification += 0.5; elementalDamage *= elementalamplification; //Determine if critical hit! var crit:Boolean = false; @@ -1253,8 +1255,13 @@ internal function wait():void { } } +public function meleeAccuracy():Number { + var accmod:Number = 200; + return accmod; +} + public function arrowsAccuracy():Number { - var accmod:Number = 60; + var accmod:Number = 80; if (player.hasPerk(PerkLib.HistoryScout) || player.hasPerk(PerkLib.PastLifeScout)) accmod += 40; if (player.hasPerk(PerkLib.Accuracy1)) { accmod += player.perkv1(PerkLib.Accuracy1); @@ -2340,7 +2347,6 @@ public function attack():void { return; } - var damage:Number = 0; //Determine if dodged! if ((player.hasStatusEffect(StatusEffects.Blind) && rand(2) == 0) || (monster.spe - player.spe > 0 && int(Math.random() * (((monster.spe - player.spe) / 4) + 80)) > 80)) { //Akbal dodges special education @@ -2379,6 +2385,17 @@ public function attack():void { enemyAI(); return; } + meleeDamageAcc(); +} + +public function meleeDamageAcc():void { + var accMelee:Number = 0; + accMelee += (meleeAccuracy() / 2); + if (flags[kFLAGS.ATTACKS_ACCURACY] > 0) accMelee -= flags[kFLAGS.ATTACKS_ACCURACY]; + if (player.weaponName == "Truestrike sword") accMelee = 100; +// fatigue(oneArrowTotalCost()); + if (rand(100) < accMelee) { + var damage:Number = 0; //------------ // DAMAGE //------------ @@ -2780,16 +2797,19 @@ public function attack():void { dynStats("lus", 25); } - outputText("\n"); checkAchievementDamage(damage); WrathWeaponsProc(); heroBaneProc(damage); + } + else { + + } if(monster.HP <= 0){doNext(endHpVictory); return;} if(monster.lust >= monster.maxLust()){doNext(endLustVictory); return;} if (flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] >= 2){ flags[kFLAGS.MULTIPLE_ATTACKS_STYLE]--; - // flags[kFLAGS.ATTACKS_ACCURACY] += 5; + // flags[kFLAGS.ATTACKS_ACCURACY] += 15; attack(); return; } @@ -5328,6 +5348,13 @@ public function clawsRend():void { outputText("\n\n"); enemyAI(); } +public function PussyLeggoMyEggo():void { + clearOutput(); + outputText("You let your opponent free ending your embrace."); + outputText("\n\n"); + monster.removeStatusEffect(StatusEffects.Pounce); + enemyAI(); +} public function runAway(callHook:Boolean = true):void { if (callHook && monster.onPcRunAttempt != null){ @@ -5780,7 +5807,7 @@ public function soulskillMagicalMod():Number { public function soulskillcostmulti():Number { var multiss:Number = 1; - if (soulskillMod() > 1) multiss += Math.round(soulskillMod() - 1) * 10;/* + if (soulskillMod() > 1) multiss += (soulskillMod() - 1) * 0.1;/* if (player.hasPerk(PerkLib.SoulPersonage)) multiss += 1; if (player.hasPerk(PerkLib.SoulWarrior)) multiss += 1; if (player.hasPerk(PerkLib.SoulSprite)) multiss += 1; @@ -5814,28 +5841,16 @@ public function soulskillCost():Number { for(var i:int = 20; (i <= 80) && (i <= stat); i += 20){ scale += stat - i; } - for(i = 100; (i <= 1200) && (i <= stat); i += 50){ + for(i = 100; (i <= 2000) && (i <= stat); i += 50){ scale += stat - i; } return scale; } - public function scalingBonusToughness():Number { - return touSpeStrScale(player.tou); - } - - public function scalingBonusSpeed():Number { - return touSpeStrScale(player.spe); - } - - public function scalingBonusStrength():Number { - return touSpeStrScale(player.str); - } - private function inteWisLibScale(stat:int):Number{ var scale:Number = 6.75; var changeBy:Number = 0.50; - if(stat <= 1200){ + if(stat <= 2000){ if(stat <= 100){ scale = (2/6) + ((int(stat/100)/20) * (1/6)); changeBy = 0.25; @@ -5846,12 +5861,24 @@ public function soulskillCost():Number { return (stat * scale) + rand(stat * (scale + changeBy)); } + public function scalingBonusToughness():Number { + return touSpeStrScale(player.tou); + } + + public function scalingBonusSpeed():Number { + return touSpeStrScale(player.spe); + } + + public function scalingBonusStrength():Number { + return touSpeStrScale(player.str); + } + public function scalingBonusWisdom():Number { - return inteWisLibScale(player.wis); + return touSpeStrScale(player.wis); } public function scalingBonusIntelligence():Number { - return inteWisLibScale(player.inte); + return touSpeStrScale(player.inte); } public function scalingBonusLibido():Number { diff --git a/classes/classes/Scenes/Combat/CombatMagic.as b/classes/classes/Scenes/Combat/CombatMagic.as index 85597129cc..6099d08834 100644 --- a/classes/classes/Scenes/Combat/CombatMagic.as +++ b/classes/classes/Scenes/Combat/CombatMagic.as @@ -2053,7 +2053,7 @@ public class CombatMagic extends BaseCombatContent { if (monster.hasPerk(PerkLib.DarknessVulnerability)) damage *= 0.5; if (monster.hasPerk(PerkLib.LightningNature)) damage *= 0.2; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); damage = Math.round(damage); //if (monster.short == "goo-girl") damage = Math.round(damage * 1.5); - pomyśleć czy bdą dostawać bonusowe obrażenia //if (monster.short == "tentacle beast") damage = Math.round(damage * 1.2); - tak samo przemyśleć czy bedą dodatkowo ranione diff --git a/classes/classes/Scenes/Combat/CombatSoulskills.as b/classes/classes/Scenes/Combat/CombatSoulskills.as index 7f0d942710..4ebe47fba0 100644 --- a/classes/classes/Scenes/Combat/CombatSoulskills.as +++ b/classes/classes/Scenes/Combat/CombatSoulskills.as @@ -25,6 +25,8 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Ice Fist", IceFist).hint("A chilling strike that can freeze an opponent solid, leaving it vulnerable to shattering soul art and hindering its movement. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.findPerk(PerkLib.FireAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to fire."); + } else if (!player.isFistOrFistWeapon()) { + bd.disable("Your current used weapon not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } @@ -33,6 +35,8 @@ public class CombatSoulskills extends BaseCombatContent { bd = buttons.add("Fire Punch", FirePunch).hint("Ignite your opponents dealing fire damage and setting them ablaze. \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); + } else if (!player.isFistOrFistWeapon()) { + bd.disable("Your current used weapon not allow to use this technique."); } else if (player.findPerk(PerkLib.ColdAffinity) >= 0) { bd.disable("Try as you want, you can’t call on the power of this technique due to your close affinity to cold."); } @@ -57,6 +61,8 @@ public class CombatSoulskills extends BaseCombatContent { buttons.add("Punishing Kick", PunishingKick).hint("A vicious kick that can daze an opponent, reducing its damage for a while. \n\nWould go into cooldown after use for: 10 rounds \n\nSoulforce cost: " + 30 * soulskillCost() * soulskillcostmulti()); if (player.hasStatusEffect(StatusEffects.CooldownPunishingKick)) { bd.disable("You need more time before you can use Punishing Kick again."); + } else if (!player.isBiped() || !player.isTaur()) { + bd.disable("Your legs not allow to use this technique."); } else if (player.soulforce < 30 * soulskillCost() * soulskillcostmulti()) { bd.disable("Your current soulforce is too low."); } diff --git a/classes/classes/Scenes/Combat/CombatTeases.as b/classes/classes/Scenes/Combat/CombatTeases.as index de139f03f7..130bd92292 100644 --- a/classes/classes/Scenes/Combat/CombatTeases.as +++ b/classes/classes/Scenes/Combat/CombatTeases.as @@ -1462,8 +1462,8 @@ public class CombatTeases extends BaseCombatContent { damage *= .7; bonusDamage *= .7; if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - damage *= (1 + player.lust100); - bonusDamage *= (1 + player.lust100); + damage *= (1 + (player.lust100 * 0.01)); + bonusDamage *= (1 + (player.lust100 * 0.01)); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { damage *= 1.15; diff --git a/classes/classes/Scenes/Combat/CombatUI.as b/classes/classes/Scenes/Combat/CombatUI.as index 29d50a87cf..42ddc3f323 100644 --- a/classes/classes/Scenes/Combat/CombatUI.as +++ b/classes/classes/Scenes/Combat/CombatUI.as @@ -187,7 +187,7 @@ public class CombatUI extends BaseCombatContent { if (player.fatigueLeft() <= combat.physicalCost(20)) { button(0).disable("You are too tired to bite " + monster.a + " " + monster.short + "."); } - //addButton(4, "Release", combat.GooLeggoMyEggo); + //addButton(4, "Release", combat.PussyLeggoMyEggo); } else if (player.hasPerk(PerkLib.FirstAttackElementals) && flags[kFLAGS.ELEMENTAL_CONJUER_SUMMONS] == 3 && flags[kFLAGS.IN_COMBAT_PLAYER_ELEMENTAL_ATTACKED] != 1) { menu(); if (player.hasStatusEffect(StatusEffects.SummonedElementalsAir)) addButton(0, "Air", combat.baseelementalattacks, Combat.AIR); diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index 6992fae145..b94ef48c2f 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -37,7 +37,7 @@ public class MagicSpecials extends BaseCombatContent { bd.disable("You need more time before you can use Compelling Aria again.\n\n"); } } - + if (player.sphinxScore() >= 14) { bd = buttons.add("Cursed Riddle", CursedRiddle, "Weave a curse in the form of a magical riddle. If the victims fails to answer it, it will be immediately struck by the curse. Intelligence determines the odds and damage."); bd.requireFatigue(spellCost(50)); @@ -45,7 +45,7 @@ public class MagicSpecials extends BaseCombatContent { bd.disable("You need some time to think of a new riddle.\n\n"); } } - + if (player.hasPerk(PerkLib.Incorporeality)) { buttons.add("Possess", possess).hint("Attempt to temporarily possess a foe and force them to raise their own lusts."); } @@ -60,7 +60,6 @@ public class MagicSpecials extends BaseCombatContent { bd.disable("You cannot focus to use this ability while you're having so much difficult breathing."); } } - if (player.hasPerk(PerkLib.CorruptedKitsune) && player.tailType == Tail.FOX && player.tailCount >= 7) { // Corrupt Fox Fire bd = buttons.add("C.FoxFire", corruptedFoxFire,"Unleash a corrupted purple flame at your opponent for high damage. Less effective against corrupted enemies. \n"); @@ -705,7 +704,7 @@ public class MagicSpecials extends BaseCombatContent { } if (player.findPerk(PerkLib.SluttySimplicity) >= 0 && player.armorName == "nothing") lustDmgF *= (1 + ((10 + rand(11)) / 100)); if (player.findPerk(PerkLib.ElectrifiedDesire) >= 0) { - lustDmgF *= (1 + player.lust100); + lustDmgF *= (1 + (player.lust100 * 0.01)); } if (player.findPerk(PerkLib.HistoryWhore) >= 0 || player.findPerk(PerkLib.PastLifeWhore) >= 0) { lustDmgF *= 1.15; @@ -1137,7 +1136,7 @@ public class MagicSpecials extends BaseCombatContent { if (monster.hasPerk(PerkLib.LightningVulnerability)) damage *= 2; if (monster.hasPerk(PerkLib.DarknessNature)) damage *= 5; if (player.hasPerk(PerkLib.LightningAffinity)) damage *= 2; - if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + player.lust100); + if (player.hasPerk(PerkLib.ElectrifiedDesire)) damage *= (1 + (player.lust100 * 0.01)); damage = Math.round(damage); //Shell if(monster.hasStatusEffect(StatusEffects.Shell)) { @@ -1723,26 +1722,26 @@ public class MagicSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.ImprovedCrinosShape)) { if (player.hasPerk(PerkLib.GreaterCrinosShape)) { if (player.hasPerk(PerkLib.MasterCrinosShape)) { - temp1 += player.str * 0.2; - temp2 += player.tou * 0.2; - temp3 += player.spe * 0.2; + temp1 += player.str * 1.6; + temp2 += player.tou * 1.6; + temp3 += player.spe * 1.6; } else { - temp1 += player.str * 0.15; - temp2 += player.tou * 0.15; - temp3 += player.spe * 0.15; + temp1 += player.str * 0.8; + temp2 += player.tou * 0.8; + temp3 += player.spe * 0.8; } } else { - temp1 += player.str * 0.1; - temp2 += player.tou * 0.1; - temp3 += player.spe * 0.1; + temp1 += player.str * 0.4; + temp2 += player.tou * 0.4; + temp3 += player.spe * 0.4; } } else { - temp1 += player.str * 0.05; - temp2 += player.tou * 0.05; - temp3 += player.spe * 0.05; + temp1 += player.str * 0.2; + temp2 += player.tou * 0.2; + temp3 += player.spe * 0.2; } temp1 = Math.round(temp1); temp2 = Math.round(temp2); @@ -1766,7 +1765,7 @@ public class MagicSpecials extends BaseCombatContent { } public function returnToNormalShape():void { clearOutput(); - outputText("Gathering all you willpower you forcefully subduing your inner beast and retunrning to your normal shape."); + outputText("Gathering all you willpower you forcefully subduing your inner beast and returning to your normal shape."); player.dynStats("str", -player.statusEffectv1(StatusEffects.CrinosShape)); player.dynStats("tou", -player.statusEffectv2(StatusEffects.CrinosShape)); player.dynStats("spe", -player.statusEffectv3(StatusEffects.CrinosShape)); @@ -2500,18 +2499,18 @@ public class MagicSpecials extends BaseCombatContent { if(monster.lust >= monster.maxLust()) doNext(endLustVictory); } } - + //cursed riddle public function CursedRiddle():void { clearOutput(); player.createStatusEffect(StatusEffects.CooldownCursedRiddle, 0, 0, 0, 0); outputText("You stop fighting for a second and speak aloud a magical riddle. " + monster.a + monster.short + " gives you a troubled look, everyone knows of the terrifying power of a sphinx riddle used as a curse. You give " + monster.a + monster.short + " some time crossing your forepaws in anticipation. "); - + //odds of success - var baseInteReq:Number = 200 + var baseInteReq:Number = 200 var chance:Number = Math.max(player.inte/baseInteReq, 0.05) + 25 chance = Math.min(chance, 0.80); - + if (Math.random() < chance){ outputText("\n\n" + monster.a + monster.short + " hazard an answer and your smirk as you respond, “Sadly incorrect!” Your curse smiting your foe for its mistake, leaving it stunned by pain and pleasure."); //damage dealth @@ -2531,7 +2530,7 @@ public class MagicSpecials extends BaseCombatContent { damage = Math.round(damage); damage = doDamage(damage); outputText("(" + damage + ")"); - + //Lust damage dealth if (monster.lustVuln > 0) { outputText(" "); diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 101ae17f04..0ea379695a 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -78,12 +78,10 @@ public class PhysicalSpecials extends BaseCombatContent { if ((player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Embrace", vampireEmbrace).hint("Embrace an opponent in your wings."); } - //Pounce if (player.canPounce() && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Pounce", catPounce).hint("Pounce and rend your enemy using your claws, this initiate a grapple combo."); } - //Kick attackuuuu if (player.isTaur() || player.lowerBody == LowerBody.HOOFED || player.lowerBody == LowerBody.BUNNY || player.lowerBody == LowerBody.KANGAROO) { bd = buttons.add("Kick", kick).hint("Attempt to kick an enemy using your powerful lower body."); @@ -225,7 +223,7 @@ public class PhysicalSpecials extends BaseCombatContent { bd.disable("Your golems can't attack flying targets. (Only golems made by grand-master golem maker can do this)"); } } - if (player.shield != ShieldLib.NOTHING) { + if (player.isShieldsForShieldBash()) { bd = buttons.add("Shield Bash", shieldBash).hint("Bash your opponent with a shield. Has a chance to stun. Bypasses stun immunity. \n\nThe more you stun your opponent, the harder it is to stun them again."); bd.requireFatigue(physicalCost(20)); } @@ -283,19 +281,18 @@ public class PhysicalSpecials extends BaseCombatContent { internal function buildMenuForFlying(buttons:ButtonDataList):void { var bd:ButtonData; buttons.add("Great Dive", combat.greatDive).hint("Make a Great Dive to deal TONS of damage!"); - //Embrace if ((player.wings.type == Wings.BAT_ARM || player.wings.type == Wings.VAMPIRE) && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Embrace", vampireEmbrace).hint("Embrace an opponent in your wings."); } - + //Sky Pounce if (player.canPounce() && player.canFly() && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Skyrend", skyPounce).hint("Crash into your enemy and initiate a grapple combo. End flight."); - } - + } + //Tornado Strike - if (player.couatlScore() >= 11) { + if (player.vouivreScore() >= 11) { bd = buttons.add("Tornado Strike", TornadoStrike).hint("Use wind to forcefully lift a foe in the air and deal damage. \n\nWould go into cooldown after use for: 8 rounds"); bd.requireFatigue(physicalCost(60)); if (player.hasStatusEffect(StatusEffects.CooldownTornadoStrike)) { @@ -839,9 +836,9 @@ public class PhysicalSpecials extends BaseCombatContent { } fatigue(50, USEFATG_PHYSICAL); var damage:Number = 0; - damage += (scalingBonusStrength() * 0.2) + player.str + unarmedAttack(); - if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.1) + ((player.str + unarmedAttack()) * 0.5); - if (damage < 10) damage = 10; + damage += (scalingBonusStrength() * 0.3) + ((player.str + unarmedAttack()) * 1.5); + if (player.hasPerk(PerkLib.WhirlwindFeral)) damage += (scalingBonusStrength() * 0.15) + ((player.str + unarmedAttack()) * 0.75); + if (damage < 15) damage = 15; //weapon bonus if (player.weaponAttack < 101) damage *= (1 + (player.weaponAttack * 0.02)); else if (player.weaponAttack >= 101 && player.weaponAttack < 201) damage *= (2 + ((player.weaponAttack - 100) * 0.015)); @@ -1152,6 +1149,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1205,6 +1203,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1259,6 +1258,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GolemArmyMajor)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyColonel)) dmgamp += 0.1; if (player.hasPerk(PerkLib.GolemArmyGeneral)) dmgamp += 0.1; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1300,6 +1300,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1335,6 +1336,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1370,6 +1372,7 @@ public class PhysicalSpecials extends BaseCombatContent { if (player.hasPerk(PerkLib.GrandMasterGolemMaker)) dmgamp += 0.1; if (player.hasPerk(PerkLib.EpicGolemMaker)) dmgamp += 0.25; if (player.hasPerk(PerkLib.LegendaryGolemMaker)) dmgamp += 0.65; + if (player.weapon == weapons.SCECOMM) dmgamp += 0.5; damage *= dmgamp; damage = Math.round(damage); damage = doDamage(damage); @@ -1861,8 +1864,8 @@ public class PhysicalSpecials extends BaseCombatContent { outputText("\n\n"); enemyAI(); } - - + + public function skyPounce():void { flags[kFLAGS.LAST_ATTACK_TYPE] = 4; clearOutput(); diff --git a/classes/classes/Scenes/DebugMenu.as b/classes/classes/Scenes/DebugMenu.as index 6308bb4bfd..ec21b20d7f 100644 --- a/classes/classes/Scenes/DebugMenu.as +++ b/classes/classes/Scenes/DebugMenu.as @@ -627,7 +627,7 @@ public class DebugMenu extends BaseContent } displayHeader("Color picker"); outputText('\nCurrent color:'); - outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); + outputText("\nHue:\t\t\t"+h+' / 360\t(0: red, 120: green, 240: blue)'); outputText("\nSaturation:\t\t"+s+' / 100\t(0: greyscale, 100: bright color)'); outputText("\nLuminosity:\t"+l+' / 100\t(0: black, 50: bright color, 100: white)'); outputText('\n\nCurrent mode: '+pickerMode+' color.'); diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace.as b/classes/classes/Scenes/Dungeons/AnzuPalace.as index d61458f1e5..2228124af4 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace.as @@ -135,6 +135,7 @@ use namespace CoC; outputText("\n\nComfortable armchairs, with soft cushions, covered in red velvet provide a good place to rest. On the left part of the room, are several shelves containing books about the story of Mittani and other similar things."); outputText("\n\nTo the east is the hall which connects the rest of the rooms in this floor. In a corner, on the end of the room, leading to the north, a door leads to the baths."); dungeons.setDungeonButtons(roomBathroom, null, null, roomFoyer); + if ((model.time.hours >= 10 && model.time.hours < 13) || model.time.hours == 19) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomBathroom():void { dungeonLoc = 91; @@ -144,6 +145,7 @@ use namespace CoC; outputText("\n\nThe rest of the room is covered with light brown tiles on the floor and the lower part of the walls, and a pattern of golden tiles and gold inlaids on the upper walls, separated by a band of mosaics displaying fish in exotic colors, sea serpents and aquatic monsters of a kind that you can’t recognize."); outputText("\n\nSome lamps around the room keep the bath well illuminated, and a door to the south leads back to living room."); dungeons.setDungeonButtons(null, roomLivingRoom, null, null); + if (model.time.hours == 22) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomDiningRoom():void { dungeonLoc = 92; @@ -153,6 +155,7 @@ use namespace CoC; outputText("\n\nDecorating the corners are vases with violets, whose smell perfumes the air. The columns in golden marble and the colorful decorations in silk hanging from them complete the room atmosphere."); outputText("\n\nTo the north, there is a door that leads to the kitchen. Another, leading to the west, goes back to the principal hall."); dungeons.setDungeonButtons(roomKitchen, null, roomFoyer, null); + if (model.time.hours == 9 || model.time.hours == 14 || model.time.hours == 21) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomKitchen():void { dungeonLoc = 93; @@ -162,6 +165,7 @@ use namespace CoC; outputText("\n\nIn the back of the room, a wooden door leads to the place where Anzu stores food. Inside are grains, bread, cheese, several crates containing wine, and in some containers, wrapped inside snow and ice, are big pieces of meat."); outputText("\n\nThe constant heat from the oven and the stove makes this room as warm as the bedroom or the living room."); dungeons.setDungeonButtons(null, roomDiningRoom, null, null); + if (model.time.hours == 8 || model.time.hours == 13 || model.time.hours == 20) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Floor 2 public function roomHallFloor2():void { @@ -184,6 +188,7 @@ use namespace CoC; outputText("\n\nAnzu’s bed is huge, even for Marethian standards. Soft cushions and linen sheets cover the mattress. The bed itself releases an aromatic smell. You have the temptation of climb in and sleep on it all day."); outputText("\n\nAnother fireplace, smaller than the one in the living room, warms the place atmosphere."); dungeons.setDungeonButtons(null, null, null, roomHallFloor2); + if (model.time.hours <= 7 || model.time.hours >= 23) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomLibrary():void { dungeonLoc = 96; @@ -193,6 +198,7 @@ use namespace CoC; outputText("\n\nOn the end of the place, is Anzu’s private study. A desk, a chair, some bookcases next to it. Nothing extraordinary."); outputText("\n\nTo the south is the exit to the hall, that connects all rooms in the third floor."); dungeons.setDungeonButtons(null, roomHallFloor2, null, null); + if (model.time.hours >= 15 && model.time.hours < 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } public function roomMultiuse():void { dungeonLoc = 97; @@ -243,6 +249,7 @@ use namespace CoC; outputText("\n\nThe forest and the snow covered hills extend as far as the eye can see. The fresh air, though cold, bring you a peace which takes you away from the corruption and the horrors of this land for a moment."); dungeons.setDungeonButtons(null, null, null, null); addButton(7, "Downstairs", roomHallFloor3); + if (model.time.hours == 18) addButton(0, "Anzu", anzuScene.anzuMenus).hint("Interact with Anzu the avian deity."); } //Basement public function roomBasement():void { diff --git a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as index 3ca1310290..0eb4b7601a 100644 --- a/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as +++ b/classes/classes/Scenes/Dungeons/AnzuPalace/AnzuScene.as @@ -210,7 +210,7 @@ use namespace CoC; outputText("\n\n\"I think that even after we are friends and all, and the fact of we don’t mind…em...relieving pressure, together…\""); outputText("\n\nOh, you’re understanding the way of he’s going. After a few doubts, he puts his hand on yours and finally says:"); outputText("\n\n\"I think… I now think of you as more than a friend. You see…despite being a god, sometimes I could be a little unsure, and explaining this kind of thing is difficult for me, but…I think, no, I’m sure what I feel about you is not only friendship, because, [name], I think that I’ve fallen in love with you. "); - outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me."); + outputText("\n\nI know how things are, if you don’t feel that, or if I’m being too pushy…I’ll understand it. But please, say to me what you feel about me.\""); flags[kFLAGS.ANZU_RELATIONSHIP_LEVEL] = 4; doYesNo(anzuRelatLvl4Sex, anzuRelatLvl4Dont); return; diff --git a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as index 84227e4eb7..78479adbc5 100644 --- a/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as +++ b/classes/classes/Scenes/Dungeons/D3/LethiceScenes.as @@ -777,7 +777,7 @@ public class LethiceScenes extends BaseContent outputText("\n\nThe girl blinks, the rage on her face replaced by confusion. “W-what are you talking about, demon?” she murmurs, looking up for the first time. You glance down at her from your place at Mistress’s side, really looking at this... this “Champion” for the first time. You feel a vague sense of recognition when you look at her, even as dirty and cum-slathered as she is, though you can’t place her. You squint, but trying to think more about it just makes your head hurt, and so you instead look down at those perky tits of hers, letting yourself get hard again at the thought of grabbing onto them and fucking her as your next bitch."); outputText("\n\n“You’re lucky,” Mistress smirks, standing. “"); - if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines."); + if (player.hasStatusEffect(StatusEffects.DungeonShutDown)) outputText("Your predecessor destroyed our welcoming facility. Otherwise I’m sure a certain imp would have revealed the truth to you long ago, before joining you with our breeding machines.\""); else { outputText("How did you escape from the factory, I wonder? And so clean and pure, too... you’re belly’s not yet swollen with imps, and your breasts are so small. Did you slip through"); diff --git a/classes/classes/Scenes/Holidays.as b/classes/classes/Scenes/Holidays.as index 9dda10232f..0627d34c71 100644 --- a/classes/classes/Scenes/Holidays.as +++ b/classes/classes/Scenes/Holidays.as @@ -1677,7 +1677,7 @@ public class Holidays { if (player.hasVagina()) EngineCore.addButton(3, "Pussy", pastieValentineIntro, "vag"); } else { - EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover."); + EngineCore.outputText("\n\nYou tell Pastie that, regrettably, you only have what she sees. She nods and says, \"Too bad. I think I'll better get going, then. It's been somewhat fun, and I finally get a chance to go to sleep sober and wake up without a hangover.\""); EngineCore.doNext(SceneLib.camp.returnToCampUseTwoHours); } } diff --git a/classes/classes/Scenes/Inventory.as b/classes/classes/Scenes/Inventory.as index 7b77536180..7c30754c5a 100644 --- a/classes/classes/Scenes/Inventory.as +++ b/classes/classes/Scenes/Inventory.as @@ -102,6 +102,8 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (miscNieve || miscHolli || player.hasKeyItem("Dragon Egg") >= 0 + || player.hasKeyItem("Gryphon Statuette") >= 0 + || player.hasKeyItem("Peacock Statuette") >= 0 || flags[kFLAGS.ANEMONE_KID] > 0 || flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (miscNieve) { @@ -173,7 +175,15 @@ if (!CoC.instance.inCombat && inDungeon == false && inRoomedDungeon == false && if (flags[kFLAGS.ALRAUNE_SEEDS] > 0) { if (model.time.hours >= 6) addButton(5, "Garden", Gardening.manageuyourgarden).hint("Visit your plant offspring"); } - addButton(14, "Back", inventoryMenu); + /* if (player.hasKeyItem("Gryphon Statuette") >= 0) { + addButton(6, "Gryphon", SceneLib.mutationsTable.skybornSeed(1)); + foundItem = true; + } + if (player.hasKeyItem("Peacock Statuette") >= 0) { + addButton(6, "Peacock", SceneLib.mutationsTable.skybornSeed(2)); + foundItem = true; + } + */ addButton(14, "Back", inventoryMenu); } public function BagOfCosmosMenu():void { diff --git a/classes/classes/Scenes/Metamorph.as b/classes/classes/Scenes/Metamorph.as index 59161ed796..729017e4fc 100644 --- a/classes/classes/Scenes/Metamorph.as +++ b/classes/classes/Scenes/Metamorph.as @@ -40,7 +40,8 @@ public function accessMetamorphMenu():void { addButton(11, "Page 2", accessPage2MetamorphMenu); // addButton(12, "Page 3", accessPage3MetamorphMenu); // addButton(13, "Page 4", accessPage4MetamorphMenu); - addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); + if (player.hasPerk(PerkLib.JobSoulCultivator)) addButton(14, "Back", SceneLib.soulforce.accessSoulforceMenu); + else addButton(14, "Back", playerMenu); } private function accessPage1MetamorphMenu():void { diff --git a/classes/classes/Scenes/NPCs/AmilyScene.as b/classes/classes/Scenes/NPCs/AmilyScene.as index 82b6f63814..dbc851dd57 100644 --- a/classes/classes/Scenes/NPCs/AmilyScene.as +++ b/classes/classes/Scenes/NPCs/AmilyScene.as @@ -2548,6 +2548,11 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface //----------=============================------------ //Approach Amily: // EVENT 2427 + public function amilyFollowerEncounter2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaAmily(); + else amilyFollowerEncounter(); + } + public function amilyFollowerEncounter():void { if(!amilyCorrupt() && player.eggs() >= 20 && player.canOviposit() && flags[kFLAGS.AMILY_OVIPOSITION_UNLOCKED] == 0) { amilyEggStuff(); @@ -2702,7 +2707,7 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface private function amilyCorruptSexMenu():void { amilySprite(); if(player.gender > 0) { - outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?"); + outputText("Amily asks, \"How would " + player.mf("master","mistress") + " like to use " + player.mf("his","her") + " cum-bucket today?\""); menu(); if (player.hasCock()) { addButton(0, "Anal", corruptAmilyBuckFutter).hint("Fuck Amily in the ass!"); @@ -8293,5 +8298,15 @@ public class AmilyScene extends NPCAwareContent implements TimeAwareInterface amilyPreggoChance(); doNext(camp.returnToCampUseOneHour); } + + public function mishapsLunaAmily():void { + clearOutput(); + outputText("You check on Amily and notice the mouse is holding her foot visibly in pain.\n\n"); + outputText("\"Gah how did I step on these " + (silly() ? "Lego" : "rocks") + "!? I should’ve paid more attention. Sorry [name], we’ll talk again later.\"\n\n"); + outputText("You think you notice Luna watching from a distance, but surely it's just your imagination.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 1, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 1, 0, 0, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/ChiChiFollower.as b/classes/classes/Scenes/NPCs/ChiChiFollower.as index adec4177a1..0cc0a71aa5 100644 --- a/classes/classes/Scenes/NPCs/ChiChiFollower.as +++ b/classes/classes/Scenes/NPCs/ChiChiFollower.as @@ -73,7 +73,7 @@ public function WonSecondFight():void { public function WonSecondFightNo():void { outputText("Likely the proud master would rather have her opponent leave her be than be dishonored any further. You head back toward your camp to rest after this well earned victory, pocketing the scroll you found on Chi Chi at the same time, as you fail to notice the blood beginning to slowly create a small pool under her.\n\n"); outputText("A peasant runs to you, stopping you from leaving for a moment.\n\n"); - outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\n\n"); + outputText("\"I’m sorry to tell you this, but your master took a fatal wound to the head. We will bury her in the town graveyard, so if you would like to, you can visit her grave from time to time. Again my most sincere condolences.\"\n\n"); outputText("You are somewhat shocked to learn that Chi Chi died, did she go all out in this battle to the point it cost her life? You head back to camp trying to figure how such a tragic incident happened in a training session.\n\n"); flags[kFLAGS.CHI_CHI_FOLLOWER] = 2; inventory.takeItem(weapons.MASTGLO, WonSecondFightNo2); @@ -421,6 +421,11 @@ public function SoulskilsManualsShopPunishingKick2():void { doNext(camp.returnToCampUseFourHours); } +public function ChiChiCampMainMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaChiChi(); + else ChiChiCampMainMenu(); +} + public function ChiChiCampMainMenu():void { clearOutput(); outputText("You go over to Chi Chi who pauses her training to head to you once you are close."); @@ -518,5 +523,17 @@ public function chichiSparring():void { startCombat(new ChiChi()); } +public function mishapsLunaChiChi():void { + clearOutput(); + outputText("As you go to visit Chi Chi you hear her scream. Running over to check whats going on you notice the fire mouse is now a sobbing mess, wet with water. You don’t recall her crying before so this must be serious.\n\n"); + outputText("\"Why why? Why would someone put a bucket right above my bedroll now I’m all wet and my fire will take hours to rise again!\"\n\n"); + outputText("She notice you checking her and panic.\n\n"); + outputText("\"Eep go away [name]! D..don’t look at me!! The last thing I need is you looking at me right now.\"\n\n"); + outputText("That’s quite the surprise. Does the proud fighter she normaly is turn into an awkward village girl the moment shes wet? Well regardless you guess you will have to visit her later because there’s no way she’s letting you approach her right now.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 4, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 0, 1); + doNext(playerMenu); +} + } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/Diana.as b/classes/classes/Scenes/NPCs/Diana.as index 956a2dc1ea..275830179e 100644 --- a/classes/classes/Scenes/NPCs/Diana.as +++ b/classes/classes/Scenes/NPCs/Diana.as @@ -34,6 +34,8 @@ package classes.Scenes.NPCs var cost:Number = 30; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 3; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 4.5; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 5; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -41,6 +43,8 @@ package classes.Scenes.NPCs var cost:Number = 50; cost *= spellCostMultiplier(); if (findPerk(PerkLib.NaturalHealingMinor) >= 0) cost -= 5; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) cost -= 7.5; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) cost -= 10; if (findPerk(PerkLib.WisenedHealer) >= 0) cost *= 2; return cost; } @@ -54,6 +58,8 @@ package classes.Scenes.NPCs if (findPerk(PerkLib.WizardsFocus) >= 0) mod1 += .4; if (findPerk(PerkLib.SpellpowerHealing) >= 0) mod1 += .2; if (findPerk(PerkLib.NaturalHealingMinor) >= 0) mod1 += .3; + if (findPerk(PerkLib.NaturalHealingMajor) >= 0) mod1 += .4; + if (findPerk(PerkLib.NaturalHealingEpic) >= 0) mod1 += .5; return mod1; } public function SpellMod():Number { @@ -260,8 +266,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 18; - this.bonusHP = 725; - this.bonusMana = 265; + this.bonusHP = 730; + this.bonusMana = 285; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -275,8 +281,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 21; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 785; + this.bonusMana = 310; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -290,8 +296,8 @@ package classes.Scenes.NPCs this.weaponAttack = 6; this.armorDef = 9; this.level = 24; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 790; + this.bonusMana = 330; this.gems = rand(5) + 10; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -305,8 +311,8 @@ package classes.Scenes.NPCs this.weaponAttack = 9; this.armorDef = 12; this.level = 27; - this.bonusHP = 220; - this.bonusMana = 120; + this.bonusHP = 845; + this.bonusMana = 355; this.gems = rand(5) + 15; this.drop = new ChainedDrop(). add(weapons.W_STAFF,1/10). @@ -415,13 +421,13 @@ package classes.Scenes.NPCs this.createPerk(PerkLib.NaturalHealingMinor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 6) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.NaturalHealingMajor, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 7) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.SoulSprite, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_LVL_UP] >= 8) { - //this.createPerk(PerkLib.SoulWarrior, 0, 0, 0, 0); + this.createPerk(PerkLib.NaturalHealingEpic, 0, 0, 0, 0); } if (flags[kFLAGS.DIANA_FOLLOWER] == 3 || flags[kFLAGS.DIANA_FOLLOWER] == 4) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 81d0c624e2..6850a3f379 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -225,7 +225,7 @@ public function wonOverDianaOralM():void { if (flags[kFLAGS.DIANA_FOLLOWER] >= 2) { outputText("You don’t really even have to tell her, she’s already practically drooling. She quickly grabs your "); if (player.cockTotal() > 1) outputText("largest "); - outputText("cock. , before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); + outputText("cock, before lovingly running her tongue down your shaft as well as planting some loving kisses across it, showering it with her devotion. She eventually moves her mouth back up the length, reaching the head and planting another loving kiss on it.\n\n"); outputText("Pleased you start pushing your "); if (player.cockTotal() > 1) outputText("largest "); outputText("[cock] into her eager mouth, "); @@ -440,7 +440,7 @@ public function wonOverDianaRape():void { outputText("Grunting, and with a huge amount of self control, you pull yourself out of her, spraying your load over her back. Satisfied, you climb off her, leaving her to hang off the " + object() + ", crying softly to herself, while you dress yourself and leave.\n\n"); } //if (player.isAlraune()) x; - if (flags[kFLAGS.DIANA_LVL_UP] < 2) flags[kFLAGS.DIANA_FOLLOWER] = 3; + if (flags[kFLAGS.DIANA_LVL_UP] < 3) flags[kFLAGS.DIANA_FOLLOWER] = 3; else flags[kFLAGS.DIANA_FOLLOWER] = 4; player.orgasm(); cleanupAfterCombat(); @@ -459,7 +459,7 @@ public function wonOverDianaSpare():void { flags[kFLAGS.DIANA_DEFEATS_COUNTER]++; if (flags[kFLAGS.DIANA_DEFEATS_COUNTER] == 1 && flags[kFLAGS.DIANA_LVL_UP] == 0) { if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers2)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers2, 4, 18); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 0, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers2, 0, 0, 0, 18); flags[kFLAGS.DIANA_DEFEATS_COUNTER] = 0; flags[kFLAGS.DIANA_LVL_UP] = 1; } diff --git a/classes/classes/Scenes/NPCs/EmberScene.as b/classes/classes/Scenes/NPCs/EmberScene.as index 697edddec3..701e6fcfe3 100644 --- a/classes/classes/Scenes/NPCs/EmberScene.as +++ b/classes/classes/Scenes/NPCs/EmberScene.as @@ -209,6 +209,11 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface } //Approaching Ember (Z) + public function emberCampMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEmber(); + else emberCampMenu(); + } + public function emberCampMenu():void { clearOutput(); @@ -4615,5 +4620,13 @@ public class EmberScene extends NPCAwareContent implements TimeAwareInterface outputText("\n\nYou look about, but see no sign of the dragon... " + emberMF("he", "she") + "'s probably gone to get breakfast." + player.clothedOrNaked(".. looking to the side, you spot your [armorName] neatly folded beside the nest.") + " Smiling to yourself, you " + player.clothedOrNaked("put on your [armorName] and ") + "get ready for another day..."); doNext(playerMenu); } + + public function mishapsLunaEmber():void { + clearOutput(); + outputText("As you call for Ember the dragon simply does not show up. You can see " + emberMF("him", "her") + " in the sky searching angrily for something and even hear " + emberMF("him", "her") + " swear in the distance. Whatever made Ember so mad you don’t want to know. You decide to call " + emberMF("him", "her") + " later so to avoid getting yourself burned as " + emberMF("he", "she") + " indeed start to torch the landscape at random.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 2, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 1, 0, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/EtnaFollower.as b/classes/classes/Scenes/NPCs/EtnaFollower.as index 89c187fb86..a398186a8b 100644 --- a/classes/classes/Scenes/NPCs/EtnaFollower.as +++ b/classes/classes/Scenes/NPCs/EtnaFollower.as @@ -419,6 +419,11 @@ public function etnaRapeIntro2():void addButton(2, "No", etnaRapeNo); } +public function etnaCampMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaEtna(); + else etnaCampMenu(); +} + public function etnaCampMenu():void { spriteSelect(SpriteDb.s_etna); @@ -571,6 +576,16 @@ public function etnaSparsWithPC():void startCombat(new Etna()); } +public function mishapsLunaEtna():void { + clearOutput(); + outputText("You go check on Etna but find her sleeping in broad daylight. She acknowledge you for a second only.\n\n"); + outputText("\"Yawn... Sorry [name] since I found those weird herbs next to my carpet I just feel so drowsy. We will talk again later okay?\"\n\n"); + outputText("Well, guess you will come back later then, but herbs? Now that you look at them these herbs indeed look like catnip. You remove them from Etna direct environment for now. Still who would actually do this kind of prank?\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 1, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 1, 0, 0, 0); + doNext(playerMenu); +} + } } \ No newline at end of file diff --git a/classes/classes/Scenes/NPCs/EvangelineFollower.as b/classes/classes/Scenes/NPCs/EvangelineFollower.as index 753de6c789..756c7c6b4e 100644 --- a/classes/classes/Scenes/NPCs/EvangelineFollower.as +++ b/classes/classes/Scenes/NPCs/EvangelineFollower.as @@ -703,7 +703,7 @@ private function recivingCraftedSoulGem():void { clearOutput(); outputText("As you check on Evangeline she hands a purplish crystal to you.\n\n"); outputText("\"Here's your soul gem. Please use this responsibly, they are very hard to craft, and quite dangerous.\"\n\n"); - outputText("Acquired Soul Gem"); + outputText("Acquired Soul Gem\n\n"); if (flags[kFLAGS.GARGOYLE_QUEST] == 3) flags[kFLAGS.GARGOYLE_QUEST]++; player.removeStatusEffect(StatusEffects.SoulGemCrafting); inventory.takeItem(useables.SOULGEM, meetEvangeline); diff --git a/classes/classes/Scenes/NPCs/HelFollower.as b/classes/classes/Scenes/NPCs/HelFollower.as index f969c8100d..59a240b163 100644 --- a/classes/classes/Scenes/NPCs/HelFollower.as +++ b/classes/classes/Scenes/NPCs/HelFollower.as @@ -475,7 +475,10 @@ public function angryHelAndIzzyCampHelHereFirst():void { doNext(camp.returnToCampUseOneHour); } - +public function heliaFollowerMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaHel(); + else heliaFollowerMenu(); +} //Introduction -- Followers -> Helia public function heliaFollowerMenu(display:Boolean = true):void { @@ -2429,5 +2432,13 @@ outputText("\n\nYour hand slides across Sophie’s stomach to squeeze one of her menu(); doNext(camp.returnToCampUseOneHour); } + +public function mishapsLunaHel():void { + clearOutput(); + outputText("Helia is currently sleeping on her mats holding a bottle of firewater. You smell the bottle up and find clear sign of soporifics inside. Whoever did this wanted to get rid of her for a few hours. Regardless the result is the same and no matter what you do the lizard girl won’t wake up, might as well try again later.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps2)) player.addStatusValue(StatusEffects.CampLunaMishaps2, 3, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps2, 0, 0, 1, 0); + doNext(playerMenu); +} } } diff --git a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as index 4f9fe5bc03..8753264117 100644 --- a/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaFollowerScene.as @@ -346,7 +346,7 @@ private function isabellasAccentCoaching():void { clearOutput(); //Cooldown rejection if(flags[kFLAGS.ISABELLA_ACCENT_TRAINING_COOLDOWN] > 1) { - outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); + outputText("Isabella shakes her head and says, \"Nein. I do not vish to spend time on zis now.\""); //Back to follower menu! doNext(callForFollowerIsabella); return; @@ -983,7 +983,7 @@ public function angryMurble():void { clearOutput(); outputText("You come to Isabella's part of the camp with Marble in tow, supposing now is as good a time as ever to introduce the two. Marble greats Isabella warmly but immediately starts bombarding her with questions about her origin. From her persistence, it seems she is interested in meeting another cow-girl. Though a little overwhelmed, Isabella recovers quickly, explaining her origins and the impurity of her cow-girl nature. Marble is visibly disappointed.\n\n"); - outputText("\"The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); + outputText("The topic of conversation gradually shifts to the reason why Marble has come to the camp. Marble seems to be happy to meet your friend, and is eager to spend some more time with her in the future. Isabella, on the other hand, seems a little off-put regarding Marble's actions. Only time will tell how the two take to each other."); flags[kFLAGS.ISABELLA_MURBLE_BLEH] = 2; doNext(playerMenu); } diff --git a/classes/classes/Scenes/NPCs/IsabellaScene.as b/classes/classes/Scenes/NPCs/IsabellaScene.as index a9d2865332..50cbb3947b 100644 --- a/classes/classes/Scenes/NPCs/IsabellaScene.as +++ b/classes/classes/Scenes/NPCs/IsabellaScene.as @@ -258,7 +258,7 @@ public function unwelcomeFightCowGal():void { public function fightIsabella():void { clearOutput(); if(!isabellaFollower()) isabellaFollowerScene.isabellaAffection(-5); - outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); + outputText("You smirk at Isabella, and ready your [weapon], telling her you intend to have you way with her. She turns beet red and grabs her shield, announcing, \"You von't find me such easy prey, and I vill punish you for being so naughty!\""); startCombat(new Isabella()); flags[kFLAGS.ISABELLA_ANGRY_AT_PC_COUNTER] += 72; spriteSelect(31); diff --git a/classes/classes/Scenes/NPCs/IzmaScene.as b/classes/classes/Scenes/NPCs/IzmaScene.as index 30dfbd9e67..95648750a7 100644 --- a/classes/classes/Scenes/NPCs/IzmaScene.as +++ b/classes/classes/Scenes/NPCs/IzmaScene.as @@ -1654,6 +1654,11 @@ private function submitToLakeIzma():void { doNext(camp.returnToCampUseOneHour); } +public function izmaFollowerMenu2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaIzma(); + else izmaFollowerMenu(); +} + //9999 CAMP FOLLOWER // tion camp //[Follower options] @@ -3582,5 +3587,14 @@ private function izmaValeriaToggle():void { addButton(4,"Back",izmaValeriaSubmenu); } +public function mishapsLunaIzma():void { + clearOutput(); + outputText("You pass by Izma’s spot and to your surprise, the smell of fish assaults your nose. For some weird reason, the entire area around Izma bedroll now smells of fish and, heck, it smells so much you decide to keep your distance until it’s gone.\n\n"); + outputText("Perhaps someone dropped fish oil around here, but who?\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 4, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 0, 1); + doNext(playerMenu); +} + } } diff --git a/classes/classes/Scenes/NPCs/JojoScene.as b/classes/classes/Scenes/NPCs/JojoScene.as index 49692b445b..69547dd6cf 100644 --- a/classes/classes/Scenes/NPCs/JojoScene.as +++ b/classes/classes/Scenes/NPCs/JojoScene.as @@ -2440,6 +2440,11 @@ public function refuseOfferOfHelp():void jojoCampMenu(); } +public function jojoCamp2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaJojo(); + else jojoCamp(); +} + public function jojoCamp():void { clearOutput(); jojoSprite(); @@ -3307,6 +3312,13 @@ private function suckJojosCock():void { doNext(camp.returnToCampUseOneHour); } +public function mishapsLunaJojo():void { + clearOutput(); + outputText("Jojo is looking at the ground in front of his training area in annoyance. Seems someone has drawn an ugly imp in the dirt using red paint and the imp happens to be jerking a 10 foot long cock. You spot Luna in the distance, cleaning the area with a smile. Surely it couldn’t have been her.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 2, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 1, 0, 0); + doNext(playerMenu); +} } } diff --git a/classes/classes/Scenes/NPCs/JoyScene.as b/classes/classes/Scenes/NPCs/JoyScene.as index c3dd4f52d6..ec6e52bf8e 100644 --- a/classes/classes/Scenes/NPCs/JoyScene.as +++ b/classes/classes/Scenes/NPCs/JoyScene.as @@ -581,7 +581,7 @@ import classes.lists.Gender; outputText("...Well, you're not really anything. And it's not really a lot of fun... can't you turn into a boy or a girl?"); } //Corruption and perk check - outputText("\n\nNext, Joy closes her eyes and focuses on your aura."); + outputText("\"\n\nNext, Joy closes her eyes and focuses on your aura."); if (player.cor < 5) { //Pure outputText("\n\n\"Your aura's, like, super shiny white - I can't remember seeing anyone as clean and pretty as you!\""); } @@ -1186,7 +1186,7 @@ import classes.lists.Gender; outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this will make my funstick bigger. Are you sure you want that [name]?\""); } else { - outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); + outputText("\n\nShe sniffs it and squints her eyes at it. \"Like, I think this could help me get my funstick back. Are you sure you want that [name]?\""); } doYesNo(giveJoyAnIncubiDraftForReal, dontGiveJoyAnIncubiDraft); } diff --git a/classes/classes/Scenes/NPCs/KihaFollower.as b/classes/classes/Scenes/NPCs/KihaFollower.as index 7cc966cb47..eb7014af40 100644 --- a/classes/classes/Scenes/NPCs/KihaFollower.as +++ b/classes/classes/Scenes/NPCs/KihaFollower.as @@ -413,11 +413,8 @@ internal function winSparWithKiha():void { outputText("[pg]\"W-what are you doing!?\" she starts, pushing away. \"You - you dumbass!\" Face as red as her scales, she storms off to the other side of camp."); outputText("[pg]You sigh and head back towards your stuff."); kihaAffection(20); - /*if(flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - }*/ } + lvlUpCheckup(); cleanupAfterCombat(); } //Spar with Friendly Kiha - Kiha Wins (Z) @@ -1853,54 +1850,7 @@ internal function pcLosesDomFight():void { //[PC wins the fight] internal function pcWinsDomFight():void { clearOutput(); - if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { - if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; - else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 1; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 2; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 3; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 4; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 5; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 6; - } - if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { - if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); - else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); - flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; - flags[kFLAGS.KIHA_LVL_UP] = 7; - } - } + lvlUpCheckup(); outputText(images.showImage("kiha-dom-win")); spriteSelect(72); var x:Number = player.cockThatFits(67); @@ -2085,6 +2035,57 @@ private function guardMyCampKiha():void { addButton(0,"Next",warmLoverKihaIntro); } +private function lvlUpCheckup():void { + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.KIHA_FOLLOWER] == 1) { + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.KIHA_DEFEATS_COUNTER]++; + else flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.KIHA_LVL_UP] < 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 24, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 1; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 5 && flags[kFLAGS.KIHA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 30); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 30, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 2; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 6 && flags[kFLAGS.KIHA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 36); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 36, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 3; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 7 && flags[kFLAGS.KIHA_LVL_UP] == 3) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 42); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 42, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 4; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 8 && flags[kFLAGS.KIHA_LVL_UP] == 4) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 48); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 48, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 5; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 9 && flags[kFLAGS.KIHA_LVL_UP] == 5) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 54); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 54, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 6; + } + if (flags[kFLAGS.KIHA_DEFEATS_COUNTER] == 10 && flags[kFLAGS.KIHA_LVL_UP] == 6) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers1)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers1, 3, 60); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers1, 0, 0, 60, 0); + flags[kFLAGS.KIHA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.KIHA_LVL_UP] = 7; + } + } +} + private function giveKihaUndergarmentsPrompt():void { clearOutput(); outputText("You ask Kiha if she's willing to wear something to cover that nether regions of hers. She could use a bit of modesty after all. "); diff --git a/classes/classes/Scenes/NPCs/KihaScene.as b/classes/classes/Scenes/NPCs/KihaScene.as index 8b76e7d794..d138799d56 100644 --- a/classes/classes/Scenes/NPCs/KihaScene.as +++ b/classes/classes/Scenes/NPCs/KihaScene.as @@ -21,7 +21,12 @@ public class KihaScene extends NPCAwareContent { //const PC_WIN_LAST_KIHA_FIGHT:int = 345; //const KIHA_CHOKED_OUT_PC:int = 432; -//Encounter Dragon-Gal +//Encounter Dragon-Gal +public function encounterKiha2():void { + if ((flags[kFLAGS.LUNA_JEALOUSY] > 100 && rand(10) < 4) || (flags[kFLAGS.LUNA_JEALOUSY] > 150 && rand(10) < 8)) mishapsLunaKiha(); + else encounterKiha(); +} + public function encounterKiha():void { var temp:Function; clearOutput(); @@ -901,5 +906,17 @@ private function analRapuzulaKiha():void { flags[kFLAGS.GOTTEN_INQUISITOR_ARMOR] = 2; inventory.takeItem(weaponsrange.I_TOME_, camp.returnToCampUseOneHour); } + + public function mishapsLunaKiha():void { + clearOutput(); + outputText("As you walk up to Kiha, you notice the dragon girl appears to be having a tantrum.\n\n"); + outputText("\"[name], are you the asshole that left all that burnt meat right next to my sleep area? What's the message behind this, you don’t like my cooking?!\"\n\n"); + outputText("You swear it's not you. Besides, you don’t hunt for food, so where would you even find the meat?\n\n"); + outputText("\"Umph! Whatever. Come back later, doofus, I need to clean up this mess!\"\n\n"); + outputText("You walk away and notice Luna in the distance cooking today’s meal with a satisfied smile.\n\n"); + if (player.hasStatusEffect(StatusEffects.CampLunaMishaps1)) player.addStatusValue(StatusEffects.CampLunaMishaps1, 3, 1); + else player.createStatusEffect(StatusEffects.CampLunaMishaps1, 0, 0, 1, 0); + doNext(playerMenu); + } } } diff --git a/classes/classes/Scenes/NPCs/LatexGirl.as b/classes/classes/Scenes/NPCs/LatexGirl.as index 930730e237..3859ca1e85 100644 --- a/classes/classes/Scenes/NPCs/LatexGirl.as +++ b/classes/classes/Scenes/NPCs/LatexGirl.as @@ -645,7 +645,7 @@ private function changeGooDick():void { else outputText("I want you to order me to shift it often. "); outputText("Changing myself further, twisting my body into a sexual playground for you... that would be the ultimate thrill!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"I'll need something masculine if you want me to grow a cock, [Master]. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She shudders and closes her eyes, imagining herself with a rigid equine pole. Your goo must have a bit of a fetish."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was."); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " pulls a hand away from her pussy and says, \"What kind of penis would please you most? I could probably do the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, or demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, [Master]. I'm not as flexible as I once was.\""); } //High Happiness + Whatever Obedience(F) else if(gooHappiness() >= 70) { @@ -654,7 +654,7 @@ private function changeGooDick():void { else outputText("she'd like to change what kind of dick she has."); outputText(" She beams and titters, \"Omigod, I loved growing penises back before I changed! It was so much fun to see how surprised it would make people and to make new shapes to see how they'd feel. Let's do it!\""); if(flags[kFLAGS.GOO_DICK_LENGTH] == 0) outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I'll need something masculine if you want me to grow a cock. An incubi draft would work, or some minotaur blood, though the blood might make it a horsecock...\" She smiles wickedly."); - else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was."); + else outputText("\n\n" + flags[kFLAGS.GOO_NAME] + " taps her chin and says, \"I can probably make almost any kind of penis, though I only really like the human ones, dog dicks, horse cocks, cat pricks, tentacle wangs, and demon dongs.\" She gives a little shudder at the last one and licks her lips. \"You'll need to have an appropriate item to assist me though, I'm not as flexible as I once was.\""); } //Low Obedience(F) else { diff --git a/classes/classes/Scenes/NPCs/Luna.as b/classes/classes/Scenes/NPCs/Luna.as index aea648bbe2..1ecdc4fd2b 100644 --- a/classes/classes/Scenes/NPCs/Luna.as +++ b/classes/classes/Scenes/NPCs/Luna.as @@ -8,6 +8,7 @@ package classes.Scenes.NPCs import classes.BodyParts.Butt; import classes.BodyParts.Hips; import classes.Scenes.SceneLib; + import classes.GlobalFlags.kFLAGS; import classes.internals.*; use namespace CoC; @@ -51,12 +52,14 @@ package classes.Scenes.NPCs override public function defeated(hpVictory:Boolean):void { - SceneLib.lunaFollower.fullMoonEventResistWin(); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaWon(); + else SceneLib.lunaFollower.fullMoonEventResistWin(); } override public function won(hpVictory:Boolean, pcCameWorms:Boolean):void { - SceneLib.lunaFollower.fullMoonEventResistDefat(); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) SceneLib.lunaFollower.sparLunaLost(); + else SceneLib.lunaFollower.fullMoonEventResistDefeat(); } public function Luna() @@ -77,23 +80,52 @@ package classes.Scenes.NPCs this.skin.growFur({color:"ashen"}); this.hairColor = "ashen"; this.hairLength = 8; - initStrTouSpeInte(40, 60, 40, 50); - initWisLibSensCor(50, 80, 40, 75); + if (flags[kFLAGS.LUNA_LVL_UP] == 0) { + initStrTouSpeInte(30, 90, 40, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 800; + this.level = 9; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 1) { + initStrTouSpeInte(30, 95, 45, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 800; + this.level = 15; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 2) { + initStrTouSpeInte(35, 100, 50, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 850; + this.level = 21; + } + if (flags[kFLAGS.LUNA_LVL_UP] == 3) { + initStrTouSpeInte(35, 100, 55, 50); + initWisLibSensCor(50, 80, 40, 75); + this.weaponAttack = 37; + this.armorDef = 200; + this.bonusHP = 900; + this.level = 27; + } this.weaponName = "paws"; this.weaponVerb="paw-slash"; - this.weaponAttack = 37; this.armorName = "fur"; - this.armorDef = 2000; - this.bonusHP = 800; this.bonusLust = 10; this.lust = 10; this.lustVuln = 0; this.temperment = TEMPERMENT_LUSTY_GRAPPLES; - this.level = 10; this.gems = 5 + rand(5); this.drop = NO_DROP; this.createPerk(PerkLib.MonsterRegeneration, 5, 0, 0, 0); this.createPerk(PerkLib.EnemyBeastOrAnimalMorphType, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 1) this.createPerk(PerkLib.RefinedBodyI, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 2) this.createPerk(PerkLib.TankI, 0, 0, 0, 0); + if (flags[kFLAGS.LUNA_LVL_UP] >= 3) this.createPerk(PerkLib.EnemyBossType, 0, 0, 0, 0); checkMonster(); } diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index de93b53e4d..6fd9624784 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -29,7 +29,7 @@ package classes.Scenes.NPCs { } - //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted + //luna foll 2 - kicked post moon event, 3 seen her dead in forest, 4,5 - pre full moon event, 6 jelly pre full moon, 7,8 - post moon unchained, 9,10 - post moon chained, 11,12 - unchained post moon accepted (PC no WW), 13,14 - unchained post moon accepted and talked about lycantrophy (PC no WW), 15,16 - unchained post moon accepted (PC WW) public function lunaAffection(changes:Number = 0):Number { @@ -121,7 +121,10 @@ package classes.Scenes.NPCs if (flags[kFLAGS.SLEEP_WITH] != "Luna") addButton(5, "Sleep With", lunaSleepToggle); else addButton(5, "Sleep Alone", lunaSleepToggle); } - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(6, "Sex", sexMenuMain); + if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { + if (flags[kFLAGS.CAMP_UPGRADES_SPARING_RING] >= 2) addButton(2, "Spar", sparLuna); + addButton(6, "Sex", sexMenuMain); + } if (flags[kFLAGS.LUNA_FOLLOWER] == 9 || flags[kFLAGS.LUNA_FOLLOWER] == 10) addButton(7, "Unchain", lunaChainToggle).hint("Unchain Luna and see what happens."); if (flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 8) addButton(7, "Chain", lunaChainToggle).hint("Chain Luna."); addButton(14, "Leave", camp.campFollowers); @@ -153,6 +156,7 @@ package classes.Scenes.NPCs addButton(3, "Camp", talkMenuLunaCampThoughts); if (flags[kFLAGS.LUNA_FOLLOWER] > 6) addButton(4, "Lycanthropy", talkMenuLunaLycanthropy); else addButtonDisabled(4, "???", "You need to know her better for this."); + if ((flags[kFLAGS.LUNA_FOLLOWER] == 13 || flags[kFLAGS.LUNA_FOLLOWER] == 14) && (!player.hasPerk(PerkLib.Lycanthropy) || !player.hasPerk(PerkLib.LycanthropyDormant))) addButton(9, "Bite Me", talkMenuBiteMe); addButton(14, "Back", mainLunaMenu); } public function talkMenuLunaHer():void { @@ -210,10 +214,117 @@ package classes.Scenes.NPCs outputText("\"Well, my hormonal system is totally messed up as the lunar cycle causes me to go into heat.The closer we lycanthropes get to the full moon, the hornier we get, until we all turn into sex crazed beasts willing to go so far as to rape innocent people for a good fuck. That said, sex is not all there is to it. We are all gifted with the ability to change form at will, and I know for a fact that we’re also faster, "); outputText("stronger, and sturdier than any normal morph or human. There is no known permanent cure to lycanthropy. The truth is that, while I could change into something different using transformatives, I think that so long as whatever I transform into is an animal I would still go mad during a full moon. Even worse, my bite can turn about anyone into a lycanthrope the same as me.\"\n\n"); outputText("Guess she really is more than just a cute pup.\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 13; + else flags[kFLAGS.LUNA_FOLLOWER] = 14; lunaJealousy(-50); lunaAffection(2); doNext(camp.returnToCampUseOneHour); } + public function talkMenuBiteMe():void { + clearOutput(); + outputText("It occurs to you that you could gain the same kind of powers as Luna if you asked her. That said, is that what you truly want?\n\n"); + menu(); + addButton(0, "Yes", talkMenuBiteMeYes); + addButton(1, "No", talkMenuLuna); + } + public function talkMenuBiteMeYes():void { + outputText("You ask Luna the one thing she likely never expected, would she mind biting you? Luna almost panics the moment you request it, though she also blushes.\n\n"); + outputText("\"" + player.mf("Master","Mistress") + " I...This is a very important choice you are making here, did you truly think it through? I mean once you are cursed there's no removing it, you will truly be just like me.\"\n\n"); + outputText("You don’t mind it, truthfully if this can tie the both of you together better, you will do it all the more. Luna nods and undresses as she changes shape. You hold your arm before her and she lose all form of restraint biting you with just the required strength to draw blood. At first it hurts like crazy but then the pain recedes, replaced with spreading pleasure as the wounds begin to throb. "); + outputText("Your" + (player.hasCock() ? " [cock] goes fully erect" : "") + "" + (player.gender == 3 ? " and your" : "") + "" + (player.hasVagina() ? " pussy starts moistening" : "") + " from this weird feeling, something's not right.\n\n"); + outputText("" + (player.humanScore() < 30 ? "Your body starts changing, and to your surprise, its features warp back to their former human features. You begin to think she may have purged you of the transformations that afflicted you, but that's not exactly it. " : "") + "Heat begins to spread from your wound and you start panting, trying to vent out the pleasure and the hot feeling in your body as something fundamental about you changes.\n\n"); + outputText("Fur begins to grow on various point of your body, namely your arms and legs. Your nails sharpen and curve, turning into a full set of claws as your hands and feet reshape into 5 digit paws. You groan in pleasure, revealing your forming canines as your spine extends into a furry tail while your ears migrate to the top of your head, covering in fur and changing into triangular points like those of a wolf. You pant in pleasure at the change, revealing a moist dog like tongue"); + if (player.hasCock()) outputText(" as you feel a tightness near the base of your cock where your skin seems to be bunching up. A canine-looking sheath begins forming around your cock’s base, tightening and pulling your penis inside its depths. A hot feeling envelops your member as it surges out and starts throbbing, the crown now a point. The sensations are too much for you. You throw back your head and howl as the transformation completes, your pointed shaft erupting with intense force"); + outputText(".\n\n"); + player.lowerBody = LowerBody.WOLF; + if (player.legCount != 2) player.legCount = 2; + player.tailType = Tail.WOLF; + if (player.tailCount != 1) player.tailCount = 1; + player.rearBody.type = RearBody.WOLF_COLLAR; + player.arms.type = Arms.WOLF; + player.faceType = Face.WOLF_FANGS; + player.ears.type = Ears.WOLF; + player.eyes.type = Eyes.FERAL; + player.tongue.type = Tongue.DOG; + player.wings.type = Wings.NONE; + player.antennae.type = Antennae.NONE; + player.horns.type = Horns.NONE; + player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); + if (player.hasCock() && player.wolfCocks() < 1) { + var selectedCockValue:int = -1; + for (var indexI:int = 0; indexI < player.cocks.length; indexI++) + { + if (player.cocks[indexI].cockType != CockTypesEnum.WOLF) + { + selectedCockValue = indexI; + break; + } + } + if (selectedCockValue != -1) { + player.cocks[selectedCockValue].cockType = CockTypesEnum.WOLF; + player.cocks[selectedCockValue].knotMultiplier = 1.1; + player.cocks[selectedCockValue].thickenCock(2); + } + } + var bonusStats:Number = 0; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 3 || flags[kFLAGS.LUNA_MOON_CYCLE] == 5) bonusStats += 10; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 2 || flags[kFLAGS.LUNA_MOON_CYCLE] == 6) bonusStats += 20; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 1 || flags[kFLAGS.LUNA_MOON_CYCLE] == 7) bonusStats += 30; + if (flags[kFLAGS.LUNA_MOON_CYCLE] == 8) bonusStats += 40; + player.createPerk(PerkLib.Lycanthropy,bonusStats,0,0,0); + player.dynStats("str", (bonusStats * player.newGamePlusMod()), "tou", (bonusStats * player.newGamePlusMod()), "spe", (bonusStats * player.newGamePlusMod()), "cor", 20); + statScreenRefresh(); + outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); + doNext(sexMenuDominateHer); + } + + public function sparLuna():void { + clearOutput(); + outputText("You ask Luna if she wouldn’t mind sparring with you.\n\n"); + outputText("\"" + player.mf("Master", "Mistress") + ", we both know it is best not to awaken my instincts during the day. I am a pitiful woman.\"\n\n"); + outputText("Well it's exactly because she is both strong and dangerous that you need her help to become so yourself.\n\n"); + outputText("\"If this is the " + player.mf("Master's", "Mistress'") + " wish, I will comply.\"\n\n"); + outputText("You both head to the ring and get ready for a brawl. She removes her dress and gets stark naked before you " + (camp.companionsCount() >= 2 ? "to the consternation of everyone who’s looking, " : "") + "before starting to pant as she changes shape. You recognise the green glow of crazed desire in her eyes now and almost regret your choice. Losing to her will likely result into you both having sex whether you like it or not.\n\n"); + startCombat(new Luna()); + } + public function sparLunaWon():void { + clearOutput(); + outputText("Luna sit down like a good well behaved dog to admit defeat.\n\n"); + outputText("\"I yield " + player.mf("Master", "Mistress") + ". You win this one. I hope this warm up was worth your time.\"\n\n"); + outputText("You thank Luna for helping you with your training and give her freedom to resume duty which she gladly do.\n\n"); + if (flags[kFLAGS.SPARRABLE_NPCS_TRAINING] == 2) { + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] >= 1) flags[kFLAGS.LUNA_DEFEATS_COUNTER]++; + else flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 1; + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 2 && flags[kFLAGS.LUNA_LVL_UP] == 0) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 12); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 12, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 1; + } + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 3 && flags[kFLAGS.LUNA_LVL_UP] == 1) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 18); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 18, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 2; + } + if (flags[kFLAGS.LUNA_DEFEATS_COUNTER] == 4 && flags[kFLAGS.LUNA_LVL_UP] == 2) { + if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers3)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers3, 1, 24); + else player.createStatusEffect(StatusEffects.CampSparingNpcsTimers3, 24, 0, 0, 0); + flags[kFLAGS.LUNA_DEFEATS_COUNTER] = 0; + flags[kFLAGS.LUNA_LVL_UP] = 3; + } + } + cleanupAfterCombat(); + doNext(camp.returnToCampUseOneHour); + } + public function sparLunaLost():void { + clearOutput(); + outputText("Luna pounces on you with a hungry growl. Guess you had it coming when you asked her to spar you.\n\n"); + outputText("\"You lost " + player.mf("Master", "Mistress") + ", therefore I’m entitled to do whatever I want with you. Well I don’t care what it is as long as we do it now.\"\n\n"); + monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); + cleanupAfterCombat(); + doNext(sexMenuDominateHer); + } public function mealLuna():void { clearOutput(); @@ -248,10 +359,10 @@ package classes.Scenes.NPCs lunaAffection(5); HPChange(Math.round(player.maxHP() * .5), true); if (flags[kFLAGS.LUNA_FOLLOWER] > 10) { - outputText(" Luna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); + outputText("\nLuna is giving a knowing smile, likely hoping you will jump at the opportunity, maybe she even did it on purpose. Do you take her here and now?\n\n"); menu(); - if (flags[kFLAGS.LUNA_FOLLOWER] > 10) addButton(0, "Yes", sexMenuMain); - addButton(0, "No", nurseLunaEnd); + addButton(0, "Yes", sexMenuMain); + addButton(1, "No", nurseLunaEnd); } else doNext(camp.returnToCampUseFourHours); } @@ -306,7 +417,9 @@ package classes.Scenes.NPCs if (flags[kFLAGS.LUNA_FOLLOWER] == 5) flags[kFLAGS.LUNA_FOLLOWER] = 6; else if (flags[kFLAGS.LUNA_FOLLOWER] == 7) flags[kFLAGS.LUNA_FOLLOWER] = 8; else if (flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 10; - else flags[kFLAGS.LUNA_FOLLOWER] = 12; + else if (flags[kFLAGS.LUNA_FOLLOWER] == 11) flags[kFLAGS.LUNA_FOLLOWER] = 12; + else if (flags[kFLAGS.LUNA_FOLLOWER] == 13) flags[kFLAGS.LUNA_FOLLOWER] = 14; + else flags[kFLAGS.LUNA_FOLLOWER] = 16; outputText("Luna come over to you.\n\n"); outputText("\"" + player.mf("Master","Mistress") + " you haven’t been using my services in some time. I came to remind you that should you need anything, and by that I truly mean anything you desire, all you need to do is call me. It is always my greatest pleasure to serve you.\"\n\n"); outputText("She walk away to prepare today's food and clean which reminds you that you indeed hadn’t had her food in a while.\n\n"); @@ -342,6 +455,8 @@ package classes.Scenes.NPCs outputText("Well of course. Had she made her needs clear in the first place you would have helped her with them. There was no need for her to hide her desires. That aside, you already thought of her as more than just a maid. You just didn’t know how to tell her. You don’t care if she thinks she is a monster. From your point of view, even in this form she remains cute. To her utter surprise you"); if (!player.isNaked()) outputText(" get rid of your own clothes and"); outputText(" display your naked body, telling her she will get exactly what she wants.\n\n"); + if (flags[kFLAGS.LUNA_FOLLOWER] == 5 || flags[kFLAGS.LUNA_FOLLOWER] == 7 || flags[kFLAGS.LUNA_FOLLOWER] == 9) flags[kFLAGS.LUNA_FOLLOWER] = 11; + if (flags[kFLAGS.LUNA_FOLLOWER] == 6 || flags[kFLAGS.LUNA_FOLLOWER] == 8 || flags[kFLAGS.LUNA_FOLLOWER] == 10) flags[kFLAGS.LUNA_FOLLOWER] = 12; flags[kFLAGS.LUNA_MOONING] = 2; doNext(sexMenuVaginal); } @@ -395,7 +510,7 @@ package classes.Scenes.NPCs CoC.instance.timeQ += 6; doNext(camp.sleepWrapper); } - public function fullMoonEventResistDefat():void { + public function fullMoonEventResistDefeat():void { clearOutput(); outputText("You are too weak to keep fighting and Luna senses it. Before you can react she pounces on you. You’re back to the position you were in earlier and this time you are in no way capable of putting up a fight.\n\n"); outputText("\"It's ok, [name], the pain will only last for a few seconds and then...\"\n\n"); @@ -417,7 +532,7 @@ package classes.Scenes.NPCs player.wings.type = Wings.NONE; player.antennae.type = Antennae.NONE; player.horns.type = Horns.NONE; - player.skin.growCoat(Skin.FUR, Skin.COVERAGE_MEDIUM); + player.skin.growCoat(Skin.FUR, {color:player.hairColor}, Skin.COVERAGE_LOW); if (player.hasCock() && player.wolfCocks() < 1) { var selectedCockValue:int = -1; for (var indexI:int = 0; indexI < player.cocks.length; indexI++) @@ -434,8 +549,9 @@ package classes.Scenes.NPCs player.cocks[selectedCockValue].thickenCock(2); } } + player.createPerk(PerkLib.Lycanthropy,40,0,0,0); player.dynStats("str", (40 * player.newGamePlusMod()), "tou", (40 * player.newGamePlusMod()), "spe", (40 * player.newGamePlusMod()), "cor", 20); - player.createPerk(PerkLib.Lycanthropy,0,0,0,0); + statScreenRefresh(); outputText("Barely satiated your eyes now focus back on Luna, lust overwhelming your cursed body. You must have her... NOW!\n\n"); monster.createPerk(PerkLib.NoGemsLost, 0, 0, 0, 0); cleanupAfterCombat(); @@ -458,8 +574,8 @@ package classes.Scenes.NPCs else addButtonDisabled(6, "???", "Req. Ayane in camp and 100 affection."); } } - if (player.cor < 33) addButton(10, "Headpat", sexMenuHeadpat); - else addButtonDisabled(10, "Headpat", "You're too corrupted for that!"); + if (player.cor >= 30) addButton(10, "Headpat", sexMenuHeadpat); + else addButtonDisabled(10, "Headpat", "You're too pure for that!"); addButton(14, "Back", mainLunaMenu); } public function sexMenuHeadpat():void { @@ -510,7 +626,6 @@ package classes.Scenes.NPCs lunaJealousy(-50); lunaAffection(2); player.orgasm(); - if (flags[kFLAGS.LUNA_FOLLOWER] < 7) flags[kFLAGS.LUNA_FOLLOWER] = 11; if (flags[kFLAGS.LUNA_MOONING] == 2) { flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -635,7 +750,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 11; + flags[kFLAGS.LUNA_FOLLOWER] = 15; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; @@ -664,7 +779,7 @@ package classes.Scenes.NPCs outputText("\"I knew you had it in you [name] please just make sure to use me regularly.\"\n\n"); if (flags[kFLAGS.LUNA_FOLLOWER] < 7 && player.werewolfScore() > 6) { outputText("Yes for sure! You're going to make sure to use her as often as necessary to imprint your scent on her from now on. She’s your beta and no one else’s."); - flags[kFLAGS.LUNA_FOLLOWER] = 11; + flags[kFLAGS.LUNA_FOLLOWER] = 15; } flags[kFLAGS.LUNA_MOONING] = 1; if (model.time.hours >= 21) CoC.instance.timeQ = 24 - model.time.hours; diff --git a/classes/classes/Scenes/NPCs/Rathazul.as b/classes/classes/Scenes/NPCs/Rathazul.as index c4e6c9c64c..6452220460 100644 --- a/classes/classes/Scenes/NPCs/Rathazul.as +++ b/classes/classes/Scenes/NPCs/Rathazul.as @@ -863,7 +863,7 @@ private function growLethiciteDefenseYesYesYes():void { private function growLethiciteDefenseGuessNot():void { spriteSelect(49); clearOutput(); - outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power."); + outputText("Rathazul nods sagely, \"That may be wise. Perhaps there will be another use for this power.\""); doNext(returnToRathazulMenu); } diff --git a/classes/classes/Scenes/NPCs/ShouldraFollower.as b/classes/classes/Scenes/NPCs/ShouldraFollower.as index eb90436416..bf8059132a 100644 --- a/classes/classes/Scenes/NPCs/ShouldraFollower.as +++ b/classes/classes/Scenes/NPCs/ShouldraFollower.as @@ -1950,7 +1950,7 @@ private function goAlongWIthShouldrasEatingSpree():void { outputText("\n\nYou struggle forward in your seat and resume grazing on a stack of donuts, though you are hindered somewhat by both the ghost girl's pussy worship and your cramped stomach. The bloated orb has by now pushed your shirt up around your [fullChest] and left your skirt in tatters; it rests between your thighs, your legs having been forced to part under its growing weight. An ominous gurgle erupts from your overtaxed gut; perhaps you've overestimated yourself? You massage the complaining flesh with one hand to ease the pressure while continuing to sate your insatiable appetite with the other, heavenly gouts of angel cake dropping into your abyss of a stomach. Shouldra smiles as the churning and gurgling continues; her fucksucking lips slip off your drooling pussy-flesh and ascend, trailing supersized kisses across your crotch and up to your navel. She nuzzles your bloated belly like a pillow, her hands digging gently into the flesh and kneading with equal parts care and roughness. Your free hand stops massaging and cradles her head, and in a moment of impishness you shove a slice of something gooey and triple-layered into her unsuspecting candied maw. She swallows, surprise turning quickly to a grin of friendly vengeance. \"So that's how we're playing it, big girl?\" Shouldra snickers, before giving your sensitive stomach a hearty slap."); outputText("\n\nYou wince slightly before returning a sloppy food-filled grin... Wait. You're not feeding yourself. What the fuck? The ghost girl answers your confusion with a profiterole that soars into your slack mouth. Damned ghoul, that's just playing dirty! You both devolve into a fierce stuffing contest; your desperate hands snag anything they can from the spread and cram them into the ghost's gullet, while waves of pastries ram themselves into your own defenseless mouth. The combination of the adrenaline-fueled force-feeding frenzy and the increasing pressure of your swelling gut on your button forms a familiar sensation; prickling loins, skipped heartbeats, an intense heat in your flushed cheeks. As you feel the giddy euphoria of an oncoming food coma, Shouldra seizes the moment and dives down into your crotch, lapping and licking every oh-so-sensitive inch she can, teasing and tickling, probing your wet cunt with her jellied tongue."); outputText("\n\nA guttural moan escapes your icing-caked lips as you sink into a creamy smooth orgasm, like sliding into a hot bath. [if (isSquiter = true) \"Hot streams of liquid lust spurt across Maddie's face, drizzling her with your copious fem-spunk. \"][if (isLactating = true) \"Droplets of milk form on your [nipples], soon forming rivers of cream that cascade down your fiery-hot flesh. \"]After a moment of rest, Shouldra squeezes out from under the table, licking your girl-cum from her lips with a satisfied slurp, and helps you to your feet; a task made seriously annoying by your titanic tummy digging in to the edge of the counter. The other patrons remain blissfully unaware of the whole act, including your current nudity. Speaking of which..."); - outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!"); + outputText("\n\n\"Oh, don't worry, Champ,\" Shouldra says, having returned to your head, \"No permanent damage intended. Here ya go!\" You feel slightly woozy as your abdomen collapses inwards, soon returning to its original, non-bloated state. A moment later and you are once again clad in your [armor]. \"Well, enough shenanigans for now, right? Though you do look pretty cute with a pot belly... Heh, just teasing,\" laughs the ghost, \"Now c'mon, let's blow this joint!\""); outputText("\n\nYou leave the bakery and head back to camp, leaving behind a very confused Maddie."); player.orgasm(); doNext(camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/NPCs/SophieFollowerScene.as b/classes/classes/Scenes/NPCs/SophieFollowerScene.as index f95017ba29..19a75beddd 100644 --- a/classes/classes/Scenes/NPCs/SophieFollowerScene.as +++ b/classes/classes/Scenes/NPCs/SophieFollowerScene.as @@ -1092,9 +1092,9 @@ internal function sophieIncestInHerCooterOrSomethingIDunno():void { outputText("\n\nUnable to resist the feeling of her achingly hard nipples being pressed against you so tightly, you reach out for your daughter's big, creamy udders and grab her hard nipples. You pull your stacked daughter's sensitive buds before you pinch and squeeze them. Not quite done with her, you let go of her nipples, letting your hands sink into the supple flesh of her enormous breasts before grabbing them harder, starting to knead and massage the soft, pliant jugs. The rough and passionate touching of her body only seems to excite and arouse your firstborn further. She's clearly enjoying the groping and teasing of her sensitive breasts, and you draw needy, birdlike coos and cries from her pouty lips. "); - if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); + if(flags[kFLAGS.DAUGHTER_ONE_BIMBO] > 0 && flags[kFLAGS.SOPHIES_DAUGHTERS_DEBIMBOED] == 0) outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! L-like, I can't take so much teasing! Please, Gimme your h-haaard cock, " + player.mf("Dad","Mom") + "!\""); //[normal speech: - else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); + else outputText("\n\n\"Ohhh, oooohhhh! " + player.mf("D-Daddy","M-Mommy") + "! Nnnnn... I can't take so much teasing! Please, please give it to me, fuck me as hard as you can, " + player.mf("Daddy","Mommy") + "!\""); } //second daughter: else if(daughterCap == 1) { diff --git a/classes/classes/Scenes/NPCs/Urta.as b/classes/classes/Scenes/NPCs/Urta.as index fb96c5da07..1f043b9be6 100644 --- a/classes/classes/Scenes/NPCs/Urta.as +++ b/classes/classes/Scenes/NPCs/Urta.as @@ -2604,7 +2604,7 @@ private function tellUrtaNoMoreScylla():void { flags[kFLAGS.UNKNOWN_FLAG_NUMBER_00147] = 1; outputText("You let Urta know that you're willing to overlook this, but that Scylla is a slippery slope that's best avoided. She nods, a sober expression on her vulpine face. Once you finish, she replies, \"I understand, but you need to know – when 'it' gets too much for me to handle... if you aren't around to help I'm going to see Edryn. S-she helps... if it wasn't for her I probably would've given up and done something stupid a long time ago. What we have is more important, but unless we can get together every couple days I'll NEED to visit her. "); if(urtaLove()) outputText("Just please, don't doubt my love for you. "); - outputText("Do I need to stop drinking too?"); + outputText("Do I need to stop drinking too?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } @@ -2615,7 +2615,7 @@ private function tellUrtaMoreScyllaIsFine():void { outputText("You give Urta a raunchy, lewd smile and let her know that you're okay with her 'helping' Scylla, and vice-versa, so long as they don't mind you popping in. She smiles and gives you a wink, but her expression darkens after a moment of thought. Urta interrupts to mention, \"There's something else. If I can't find you or Scylla and I NEED to cum, I'll have to visit Edryn. She's probably the only thing that's kept me sane, and if you aren't around to help with my needs I'll visit her. "); if(urtaLove()) outputText("Just remember that YOU'RE the one I love, not her. "); else outputText("Me and her, we've been partners in the guard for a long time, but the sex is just mechanical, to sate us. You don't have to worry about her stealing me away. "); - outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); + outputText("But what about my drinking or how I get when I'm drunk? It doesn't bother you, does it?"); //[Drink More] [Drink Less] [No Change] [Leave Her] simpleChoices("Drink More", tellUrtaToBeADrunkenHussy, "Drink Less", tellUrtaToStopBeingALush, "No Change", tellUrtaToStayTheSame, "Leave Her", leaveUrtaAfterScyllaConfrontation, "", null); } diff --git a/classes/classes/Scenes/Places/HeXinDao.as b/classes/classes/Scenes/Places/HeXinDao.as index 57cda75a63..549cf0653f 100644 --- a/classes/classes/Scenes/Places/HeXinDao.as +++ b/classes/classes/Scenes/Places/HeXinDao.as @@ -232,6 +232,7 @@ public class HeXinDao extends BaseContent addButton(1, "DryTent", buyItem,consumables.DRYTENT,sayLine(consumables.DRYTENT,"anemone"),onBuyString).hint("Buy a shriveled tentacle."); addButton(2, "EctoPls", buyItem,consumables.ECTOPLS,sayLine(consumables.ECTOPLS,"ghost"),onBuyString).hint("Buy a bottle of ectoplasm."); addButton(3, "TrapOil", buyItem,consumables.TRAPOIL,sayLine(consumables.TRAPOIL,"sand trap"),onBuyString).hint("Buy a vial of trap oil."); + addButton(4, "Icicle", buyItem,consumables.ICICLE_,sayLine(consumables.ICICLE_,"ice shard"),onBuyString).hint("Buy an icicle."); addButton(14, "Back", mogahenmerchant); statScreenRefresh(); } @@ -484,7 +485,7 @@ public function soularena():void { outputText("Picking the one in the middle prepared for challanges you enter there and looking around checking who if there is currently anyone up for a challange."); menu(); addButton(0, "Gaunlet 1", gaunletchallange1fight1).hint("Fight 3 diff enemies one after another."); - //if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); + if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] == 1) addButton(1, "Gaunlet 2", gaunletchallange2fight1).hint("Fight 4 diff enemies one after another."); //addButton(2, "Gaunlet 3", gaunletchallange3).hint("Fight 5 diff enemies one after another."); //addButton(3, "Gaunlet 4", gaunletchallange4).hint("Fight 6 diff enemies one after another."); //addButton(4, "Gaunlet 5", gaunletchallange5).hint("Fight 7 diff enemies one after another."); @@ -506,6 +507,11 @@ public function soularena():void { monster.createStatusEffect(StatusEffects.NoLoot, 0, 0, 0, 0); monster.XP = Math.round(monster.XP / 2); } + public function gaunletsinbetween():void { + cleanupAfterCombat(); + player.createStatusEffect(StatusEffects.SoulArena, 0, 0, 0, 0); + player.createStatusEffect(StatusEffects.SoulArenaGaunlet, 0, 0, 0, 0); + } public function gaunletchallange1fight1():void { clearOutput(); outputText("You register for the gauntlet challenge then when called, move out beyond the arena gate to face your opponent. The crowd is big, you sure will have quite the audience. A man with a necktie and a weird stick screams across the area.\n\n"); @@ -520,14 +526,16 @@ public function soularena():void { } public function gaunletchallange1fight2():void { clearOutput(); - outputText("As the last of the golem falls down, the commentator resumes.\n\n"); + gaunletsinbetween(); + outputText("As the last of the golem falls down, the commentator resumes.\n\n"); outputText("\"This one is straight from the woods. Freshly caught and horny to boot. Can our champion’s strength overcome the beast’s lust? LET'S FIND OUT!!\"\n\n"); outputText("A shadow moves out behind the gate, revealing the shape of a fluid starved tentacle beast.\n\n"); startCombat(new TentacleBeast()); } public function gaunletchallange1fight3():void { clearOutput(); - outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); + gaunletsinbetween(); + outputText("As the tentacle beast whimpers and crawls away, the crowd cheers for you. Here comes the final round.\n\n"); outputText("\"This contestant is smaller than the last two... Smarter too, and most of all extremely deadly. She’s paid a handsome sack of gems daily to kick the ass of anyone who reach this stage, yet is by far the deadliest combatant of her division. She’s your favorite and an expert huntress. Here she comes... Merisiel the dark elf!!!\"\n\n"); outputText("A woman with dark skin walks by the entrance of the arena with only a bow for a weapon. She sure does look like an elf, however. She’s nothing like the gentle creature from your childhood stories as she observes you with a cruel, calculative gaze. The dark elf readies her bow, smirking.\n\n"); startCombat(new DarkElfScout()); @@ -559,6 +567,7 @@ public function soularena():void { } public function gaunletchallange2fight2():void { clearOutput(); + gaunletsinbetween(); outputText("As the goblin falls unconscious to the ground the crowd cheer for you.\n\n"); outputText("\"It would seems the hero squashed that midget good but were only beginning. If I may the next contestant has been sex starved for two consecutive month and is desperate to sow his seed hence now we release... THE HOUND!!!\"\n\n"); outputText("A massive hellhound of proportion larger than normal rush out of an opening gate. Its eye burns with lust.\n\n"); @@ -566,27 +575,36 @@ public function soularena():void { } public function gaunletchallange2fight3():void { clearOutput(); - outputText("Placeholder.\n\n"); - outputText("Placeholder.\n\n"); + gaunletsinbetween(); + outputText("The mutt fall defeated to the floor as the crowd scream your name. The announcer announce the next contestant.\n\n"); + outputText("\"The next opponent is a fighter known and loved by the public. You have heard her name told in shallow whispers for the next opponent is an expert of the terrible art known as BDSM. Yes you have all been waiting for her so cheer up for Malady the drider!!!\"\n\n"); + outputText("A drider in bondage suit comes out of the gate and eyes you amused.\n\n"); + outputText("\"You are my opponent uh? Doesn’t look like much. Little pet, by the time I’m done binding you, you will seldom call me mistress!\"\n\n"); startCombat(new CorruptedDrider()); } public function gaunletchallange2fight4():void { clearOutput(); - outputText("Placeholder.\n\n"); + gaunletsinbetween(); + outputText("As the drider falls defeated the crowd cheer to your victory. That said the battle is far from over yet. A large amount of shadows mass behind the opposite gate and already you can guess what's coming up for you.\n\n"); + outputText("\"The final contestant is both a new opponent and a test! The town golemancer has been working extra shifts on these thing she calls her babies!! Using the traditional gargoyle model but deprived of soul so for the purpose of mass production these living weapons will mercilessly beat the hell out of the contestant. Who do you think will win the living or the artificial creation? LEEEEETS FIND OUT!!!!!!\"\n\n"); + outputText("A full squad of stone gargoyle pour out of the gate their mace like tail trailing in the sands. Their claws are sharp and their soulless gaze tells you it will end poorly should you lose.\n\n"); startCombat(new BossGolems()); } public function gaunletchallange2postfight():void { clearOutput(); - outputText("Placeholder.\n\n"); + outputText("The last gargoyle crumble to rubble and you hold its head up toward the public in victory.\n\n"); + outputText("\"The challenger defeated all of his opponent what a miracle! Challenger you may now exit the arena and claim your prize, well done!\"\n\n"); + outputText("You make your way toward the exit and to your surprise meet face to face with the town golemancer. She grudgingly handle you your reward.\n\n"); + outputText("\"I’m supposed to reward you "); if (flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] >= 2) { - outputText("\"Good show, champion. As a reward for your performance, please accept these 20 spirit stones. Please do come back again and maybe next time you could even try the harder challenge.\"\n\n"); + outputText("a full chest of soulstone. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); flags[kFLAGS.SPIRIT_STONES] += 20; cleanupAfterCombat(); } else { - outputText("Placeholder.\n\n"); + outputText("with this scepter. Tsk I guess my golems were not ready yet. Next time if you do show up be ready because my future creation will definitely make a bloody mess out of you.\"\n\n"); flags[kFLAGS.SOUL_ARENA_FINISHED_GAUNLETS] = 2; - inventory.takeItem(weaponsrange.BOWGUID, cleanupAfterCombat); + inventory.takeItem(weapons.SCECOMM, cleanupAfterCombat); } } public function restaurantShiraOfTheEast():void { diff --git a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as index d6c72c2252..4796f32ff3 100644 --- a/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as +++ b/classes/classes/Scenes/Places/HeXinDao/JourneyToTheEast.as @@ -7,6 +7,7 @@ package classes.Scenes.Places.HeXinDao import classes.*; import classes.GlobalFlags.kFLAGS; import classes.Scenes.SceneLib; + import classes.BodyParts.Tail; public class JourneyToTheEast extends HeXinDaoAbstractContent { @@ -19,6 +20,10 @@ package classes.Scenes.Places.HeXinDao outputText("You enter the town local Inn ‘Journey to the East’ and look around. "); } outputText("You can see many people enjoying a meal or drink in the dining hall, a barman standing by ready to serve drinks."); + if (model.time.hours >= 18 && rand(4) == 0) { + ChiChiDrunkSex(); + return; + } menu(); addButton(0, "Drink", drinkAlcohol); //addButton(4, "", );mission giving npc @@ -39,15 +44,17 @@ package classes.Scenes.Places.HeXinDao addButton(2, "NoceLiq", buyDrink, consumables.NOCELIQ); addButton(3, "OniSake", buyDrink, consumables.ONISAKE); addButton(4, "SalamFW", buyDrink, consumables.SALAMFW); + addButton(12, "BimboL", buyDrink, consumables.BIMBOLQ); + addButton(13, "BroBrew", buyDrink, consumables.BROBREW); addButton(14, "Back", notThirsty); } - + //drink list (to be expanded) fire mouse TF, some generic nonTF beers private function notThirsty():void { clearOutput(); outputText("In the end you realise you are not thirsty after all and wave a goodbye before leaving.\n\n"); doNext(curry(enteringInn,false)); } - + private function buyDrink(drink:ItemType):void{ var cost:int = drink.value * 3; if(player.gems < cost){ @@ -60,7 +67,66 @@ package classes.Scenes.Places.HeXinDao outputText("\n\nThe barman hands over the drink you ordered."); inventory.takeItem(drink, drinkAlcohol); } - //drink list (to be expanded) - //MANUP_B, GOB_ALE, NOCELIQ, ONISAKE, SALAMFW, fire mouse TF, some generic nonTF beers + + public function ChiChiDrunkSex():void { + clearOutput(); + outputText("As you enter the bar you hear a feminine laughter swiftly spotting what seems to be "); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] >= 20) outputText("Chi Chi"); + else if (flags[kFLAGS.CHI_CHI_FOLLOWER] >= 1 && flags[kFLAGS.CHI_CHI_AFFECTION] < 20) outputText("Chi Chi the waitress from the exotic food restaurant"); + else outputText("a blazing mouse girl"); + outputText(" sitting on one of the stool drinking sake.\n\n"); + outputText("\"Yeah, and after I told it I was the top girl here I punched it in the face, Woooooooo!\""); + outputText("The barman sighs, pretending not to notice the drunken mouse, aside for when he has to serve her a new drink. Just as you are about to order something she realises you are there and engages in conversation.\n\n"); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2) outputText("\"Gaaaaah, [name], why do you hang around all those girls. Worse why do you fuck with them and not me?! Its like you are a " + player.mf("go go boy","cheap whore") + " selling your body to everyone and thish drives me mad! Yeaaa, I’m going to prove them all I’m the top shlut!\""); + else if (flags[kFLAGS.CHI_CHI_FOLLOWER] == 1) outputText("\"Hey... you’re that so called champ who lost in the arena?! Well I like you. I like you so much I’d want you as my " + player.mf("boy","girl") + "friend but waaaah I’m way too shy to tell you that right! Well don’t go tell [name] I like " + player.mf("him","her") + " got it? Yeah who cares about that! Barman a round for [name] the best person I met woooo. Now let’s have sex!\""); + else outputText("\"Hey you... yesh you, the tall person over there! Think you can fight?! Well I’m pretty sure nobody in this village hash the guts to anyway. If you dare show up in the arena I will beat you to death like I do everyone. Now that I think of it, there are other kinds of battle I can beat people in. Bet you're the kind who fucks every demon you meet. Well not tonight, letsh bang!\""); + outputText("Wait, what? You barely have the time to mutter a reply before the red cheeked mousette pushes you on the nearest table and climbs over you. The barman pulls a curtain around your table, he must be used to this.\n\n"); + outputText("\"Yeshh you heard me you big idiot. I’m going to fuck with you here and now! So don’t you dare try to run away because I will get very mad if you do.\""); + outputText("Do you let her?\n\n"); + menu(); + addButton(0, "Let Her", drunksex,true); + addButton(1, "Refuse", drunksex,false); + } + private function drunksex(selected:Boolean):void { + if (!selected) { + outputText("" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 0 ? "Chi Chi" : "The mouse") + " is clearly out of it. Better stop her now before she does something she will regret later. You shove her to the side and run for the exit of the bar. Hearing her swear in background. Once outside you head back to camp."); + doNext(camp.returnToCampUseOneHour); + } + else { + outputText("You would have to be an idiot indeed to refuse this free fuck. The drunken mouse girl licks her lips in anticipation, grabbing your clothes and begins to removing them one-by-one. Unsurprisingly, her own clothes barely takes a second to remove. She is so close now you can feel her breath on your neck."); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) { + outputText(" The mousette introduces herself.\n\n"); + outputText("\"My name’s Chi Chi by the way, but... oh why does it matter? What's important is that we are about to have a lot of fun.\""); + } + //post marriage + if (player.hasCock()) { + outputText("Chi Chi initiates with a wet but warm kiss; Her tongue dancing tango with yours. While small in stature, she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how her burning tail and fur isn't actually setting everything on fire around her, especially you. You inquire on this matter.\n\n"); + outputText("\"That’sh because I’m burning with passion for you big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait, I'll set both of our body aflame with desire. Your cock will be as hot as my embers.\"\n\n"); + outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore, you slowly tease the entrance of her warm canal with your [cock]. If anything, despite being wet you can already feel how hot her oven is from the outside and can’t help but hope you won’t end up burned. Chi Chi however has no such concern and out of impatience starts stroking your dick with her embery tail.\n\n"); + outputText("\"Come on, I know you want to put it in. What are you waiting for dumbassh?! I’m positively burning here.\"\n\n"); + outputText("You're surprised by the direct contact with her fiery tail, even more so by the fact that it didn’t leave your dick with a third degree burn. Deciding to give the hot mouse what she wants, you put it in. Her vagina immediately starts milking you as if it was a thirsty mouth seeking water, and the frantic moving of her hips up down doesn’t help it.\n\n"); + outputText("\"Gah doushe me! Don’t you shee how much I’m burning! Put that fire out with your manwater!\"\n\n"); + outputText("Her pussy starts heating even more and before you know it, it actually transfers to you. Wow, your urethra is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, only the cool passage of cum can free you from this heat! You begin to piston in and out of Chi Chi desperate for a cooling release.\n\n"); + outputText("Both desperate for a way to get rid of the heat, the two of you manage to cum together, your jizz filling Chi Chi to the brim before slowly dripping on the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good boyfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); + outputText("She finally passes out, which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeds to also get the sleeping inferno-mouse out with the help of a bouncer.\n\n"); + } + else { + outputText("Chi Chi initiates with a wet but warm kiss her tongue dancing tango with yours. While small in stature she displays an uncommon level of strength rarely seen even among animal morphs. What’s more concerning is that you aren't sure how come her burning tail and fur isn't actually setting on fire everything around her starting with you. You inquire on this matter.\n\n"); + outputText("\"Thatsh because I’m burning with passion for you, big idiot! My flamesh won’t burn anything I wish not to. Or maybe they will. I never recalled how that one inn caught fire. Just you wait I'll set both of our body aflame with desire. Your pussy will be as hot as my embers.\"\n\n"); + outputText("Well it's too late to back down anyway and, even if you did, the drunken megamouse is clearly going to keep you pinned down. Not to make your partner wait anymore you begin to grind your pussy lips against hers making her gasp in surprise at your initiative.\n\n"); + outputText("\"Oh?! Finally fighting back? Good I love a girl that tries.\"\n\n"); + outputText("Chi Chi begins to grind herself in response, making you both coo. For a drunk she clearly knows what she’s doing, almost like if drunken sex was an expertise of hers. You’re swiftly forced out back to reality as your blazing partner accelerates the tempo, causing you to moan in pleasure. Well now there's no way you going to simply lose this! You get the mouse ears with your hands and start caressing them. Chi Chi has a positive reaction and you are clearly getting to her however "); + outputText("that's counting without her hidden weapon. Her burning tail lashes out like a whip and slides between you, aiming for your cunt. Before you can stop it you already have 15 inch of hot mouse tail in your [pussy] and Chi Chi uses it to fuck your brain out. The fuck isn't all that happens it seems her very heat start to spread on to you. Wow your cunt is indeed as if possessed by some kind of angry efreeti. It's so hot you can’t think straight anymore, "); + outputText("only the cool passage of your girl-juices can free you from this heat! Meanwhile she grinds against her own tail bump but you have decided not to let her get off at her own pace. You swiftly slide " + (player.tailType > Tail.NONE ? "your tail" : "a pair of finger") + " in the smoking hot hinezumi cunt and retaliate with a set of rapid movement of your own.\n\n"); + outputText("Both desperate for a way to get rid of the heat and unable to fully outpace her, the two of you still manage to cum together your girl juices melding together and staining the ground. Chi Chi sighs in relief and exhaustion falling limp on the table.\n\n"); + outputText("\"" + (flags[kFLAGS.CHI_CHI_FOLLOWER] > 2 ? "You're the besht [name] you know that? Let'sh do thish again sometimes, I jusht can’t get enough of it." : "You're a good girlfriend you know that? Let'sh do thish again sometimes.") + "\"\n\n"); + outputText("She finally pass out which is a good thing because, even if you're as tired as her, you think it'd be wise if you headed back to camp before she came back to her senses" + (flags[kFLAGS.CHI_CHI_FOLLOWER] == 2 ? ", especially because you're pretty sure she will beat you to death if she discovers the two of you had sex while she was drunk" : "") + ". You exit the establishment under the somewhat relieved gaze of the barman who gently proceeded to also get the sleeping mouse out with the help of a bouncer.\n\n"); + } + player.orgasm(); + if (flags[kFLAGS.CHI_CHI_FOLLOWER] < 1) flags[kFLAGS.CHI_CHI_FOLLOWER] = 1; + doNext(camp.returnToCampUseOneHour); + } + } } } \ No newline at end of file diff --git a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as index a93ffe8377..69fb7e1fbb 100644 --- a/classes/classes/Scenes/Places/Prison/TrainingFeeding.as +++ b/classes/classes/Scenes/Places/Prison/TrainingFeeding.as @@ -387,7 +387,7 @@ package classes.Scenes.Places.Prison break; case 4: default: - outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead. "); + outputText("\"Can you last any longer, slave? I don't think you can. Your knees are shaking. You're screaming loud enough to wake the dead.\" "); if(player.hasVagina()) { outputText("Your gaping pussy has lubricated me well enough to comfortably fuck an entire harem of dry, virgin assholes."); diff --git a/classes/classes/Scenes/Places/TelAdre.as b/classes/classes/Scenes/Places/TelAdre.as index beb760270e..45a6902011 100644 --- a/classes/classes/Scenes/Places/TelAdre.as +++ b/classes/classes/Scenes/Places/TelAdre.as @@ -184,7 +184,7 @@ public function telAdreMenu():void { if (flags[kFLAGS.LUNA_FOLLOWER] < 2 && rand(10) == 0) { if (flags[kFLAGS.LUNA_FOLLOWER] == 1) SceneLib.lunaFollower.meetingLunaRepated(); else SceneLib.lunaFollower.meetingLunaFirstTime(); - return + return; } spriteSelect(-1); outputText(images.showImage("location-teladre")); diff --git a/classes/classes/Scenes/Places/TelAdre/Rubi.as b/classes/classes/Scenes/Places/TelAdre/Rubi.as index 412a8c441d..b8cee7efff 100644 --- a/classes/classes/Scenes/Places/TelAdre/Rubi.as +++ b/classes/classes/Scenes/Places/TelAdre/Rubi.as @@ -2079,7 +2079,7 @@ private function iceCreamDate():void { outputText("\n\nYour parfaits are not infinite, however, and once you've depleted your layered frozen treats it seems it's time to head back. The two of you clasp hands once more and head out of the shop, heading back to Rubi's place in silence, content to be in each other's presence."); - outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); + outputText("\n\nOnce you're back in the house, Rubi sprawls out on the couch, a devilish grin on [rubi eir] face. \"So, you plan on giving me a good \"kiss\" good night?\""); //[Go to Sex menu] rubiSexMenu(); addButton(14,"Leave",camp.returnToCampUseOneHour); diff --git a/classes/classes/Scenes/Pregnancy.as b/classes/classes/Scenes/Pregnancy.as index e2e8a8cea8..71347044c1 100644 --- a/classes/classes/Scenes/Pregnancy.as +++ b/classes/classes/Scenes/Pregnancy.as @@ -1798,7 +1798,7 @@ public class Pregnancy extends NPCAwareContent { if (flags[kFLAGS.MARBLE_BOYS] == 0) //has Marble had male kids before? { - EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me."); + EngineCore.outputText("You notice that Marble seems to be deep in thought, and you ask her what is wrong. She starts after a moment and says, \"Oh sweetie, no, it's nothing really. I just never thought that I'd actually be able to father a son is all. The thought never occurred to me.\""); } //Add to marble-kids: flags[kFLAGS.MARBLE_KIDS]++; diff --git a/classes/classes/Scenes/SceneLib.as b/classes/classes/Scenes/SceneLib.as index c6af555150..625ee7828c 100644 --- a/classes/classes/Scenes/SceneLib.as +++ b/classes/classes/Scenes/SceneLib.as @@ -1,5 +1,6 @@ package classes.Scenes { import classes.CoC; +import classes.Items.Mutations; import classes.Scenes.Areas.*; import classes.Scenes.Areas.Forest.KitsuneScene; import classes.Scenes.Combat.Combat; @@ -27,6 +28,8 @@ public class SceneLib { public static var masturbation:Masturbation = new Masturbation(); + public static var mutationsTable:Mutations = new Mutations(); + public static var beach:Beach = new Beach(); public static var blightridge:BlightRidge = new BlightRidge(); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index 56c8465168..a56a8fe05c 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -208,20 +208,24 @@ use namespace CoC; addButton(7, "RevertCabin", RevertCabinProgress).hint("Revert cabin flag back to value 2 (for bug fix test)"); addButton(8, "Gargoyle", GargoyleMenu).hint("To Be or Not To Be Gargoyle that is a question."); addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); - addButton(10, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); - addButton(11, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); + addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); addButton(12, "DERP", AddEnigmanium).hint("DERP."); - if (player.hasPerk(PerkLib.JobBarbarian)) addButton(12, "BarbToSword", replacingBarbsWithsSowrds).hint("Replacing Job: Barbarian with Job: Swordsman to keep integrity of test saves."); - //addButton(13, "13", ); + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) addButton(12, "MoonCycleAdj", moonCycleAdjusting).hint("Adjusting wild moon cycle to pokeba... norm."); + if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); addButton(14, "Back", accessSoulforceMenu); } public function celessIntroForced():void { clearOutput(); CelessScene.instance.birthScene(); } -public function replacingBarbsWithsSowrds():void { - player.removePerk(PerkLib.JobBarbarian); - player.createPerk(PerkLib.JobSwordsman, 0, 0, 0, 0); +public function moonCycleAdjusting():void { + if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) flags[kFLAGS.LUNA_MOON_CYCLE] = 1; + doNext(SoulforceCheats); +} +public function fixingWerewolfFur():void { + player.skin.coverage = Skin.COVERAGE_LOW; + player.coatColor = player.hairColor; doNext(SoulforceCheats); } public function LvLUPDiana():void { @@ -694,8 +698,10 @@ public function FightNightmare():void { addButton(8, "NineTailWhip", AddNineTailWhip).hint("Add 1 Nine Tail Whip."); addButton(9, "Hodr's Bow", AddHodrsBow).hint("Add 1 Hodr's Bow."); // addButton(9, "L Ayo Arm", AddLightAyoArmor).hint("Add 1 Light Ayo Armor for testing purposes."); - addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); - addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); + // addButton(10, "SeerHairpin", AddTheSeerHairpin).hint("Add 1 Seer's Hairpin."); + addButton(10, "TruestriekSword", AddTruestrikeSword).hint("Add 1 Truestrike Sword."); + // addButton(11, "D.Scythe", AddTheDemonicScythe).hint("Add 1 Demonic Scythe."); + addButton(11, "ScepterComm", AddSceptreOfCommand).hint("Add 1 Sceptre of Command."); addButton(12, "CatONIneTWhip", AddCatONineTailWhip).hint("Add 1 Bastet Whip."); addButton(13, "InqTome", AddTheInquisitorsTome).hint("Add 1 Inquisitor's Tome."); addButton(14, "Back", SoulforceCheats); @@ -883,10 +889,18 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Seer's Hairpin!)\n\n"); inventory.takeItem(jewelries.SEERPIN, EquipmentMenu); } + public function AddTruestrikeSword():void { + outputText("\n\n(Gained 1 Truestrike Sword!)\n\n"); + inventory.takeItem(weapons.TRSTSWO, EquipmentMenu); + } public function AddTheDemonicScythe():void { outputText("\n\n(Gained 1 Demonic Scythe!)\n\n"); inventory.takeItem(weapons.DEMSCYT, EquipmentMenu); } + public function AddSceptreOfCommand():void { + outputText("\n\n(Gained 1 Sceptre of Command!)\n\n"); + inventory.takeItem(weapons.SCECOMM, EquipmentMenu); + } public function AddTheInquisitorsTome():void { outputText("\n\n(Gained 1 Inquisitor's Tome!)\n\n"); inventory.takeItem(weaponsrange.I_TOME_, EquipmentMenu); @@ -1227,12 +1241,12 @@ public function FightNightmare():void { outputText("\n\n(Gained 1 Sky Poison Pearl!)\n\n"); inventory.takeItem(consumables.SPPEARL, EquipmentMenu); } - + public function AddEnigmanium():void { outputText("\n\n(Gained 1 Enigmanium!)\n\n"); inventory.takeItem(consumables.ENIGMANIUM, EquipmentMenu); } - + public function AddLightAyoArmor():void { outputText("\n\n(Gained 1 Light Ayo Armor!)\n\n"); inventory.takeItem(armors.LAYOARM, EquipmentMenu); diff --git a/classes/classes/StatusEffects.as b/classes/classes/StatusEffects.as index 222d4b0e27..244ac62b30 100644 --- a/classes/classes/StatusEffects.as +++ b/classes/classes/StatusEffects.as @@ -38,8 +38,12 @@ import classes.StatusEffects.VampireThirstEffect; public static const CampAnemoneTrigger:StatusEffectType = mk("Camp Anemone Trigger"); public static const CampMarble:StatusEffectType = mk("Camp Marble"); public static const CampRathazul:StatusEffectType = mk("Camp Rathazul"); + public static const CampLunaMishaps1:StatusEffectType = mk("Camp Luna Mishaps 1"); + public static const CampLunaMishaps2:StatusEffectType = mk("Camp Luna Mishaps 2"); + public static const CampLunaMishaps3:StatusEffectType = mk("Camp Luna Mishaps 3"); public static const CampSparingNpcsTimers1:StatusEffectType = mk("Camp Sparing Npc's Timers 1"); public static const CampSparingNpcsTimers2:StatusEffectType = mk("Camp Sparing Npc's Timers 2"); + public static const CampSparingNpcsTimers3:StatusEffectType = mk("Camp Sparing Npc's Timers 3"); public static const ClaraCombatRounds:StatusEffectType = mk("Clara Combat Rounds"); public static const ClaraFoughtInCamp:StatusEffectType = mk("Clara Fought In Camp"); public static const CockPumped:StatusEffectType = mk("Cock Pumped"); diff --git a/content/coc/NPC/diva.xml b/content/coc/NPC/diva.xml index e6954579bd..70c7ed8925 100644 --- a/content/coc/NPC/diva.xml +++ b/content/coc/NPC/diva.xml @@ -669,7 +669,7 @@ Well, this isn’t so bad, the scarf-like look is certainly nice, at the very least. Your neck now sports a collar of fur. - + You yelp as a throbbing pain takes root in the sides of your mouth. You feel your canines grow longer as your throat grow dryer. You could go for some wine right now, with a bloody steak to top it off… maybe just the steak. From 5f15886db0e8219280f0c31f01f5fdad1ace9ceb Mon Sep 17 00:00:00 2001 From: Liadri Date: Mon, 12 Mar 2018 14:41:54 -0400 Subject: [PATCH 17/27] Skyrend now deals damage Skyrend now deals damage --- .../classes/Scenes/Combat/PhysicalSpecials.as | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index 101ae17f04..6d6ff0ff45 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -290,8 +290,8 @@ public class PhysicalSpecials extends BaseCombatContent { } //Sky Pounce - if (player.canPounce() && player.canFly() && !monster.hasPerk(PerkLib.EnemyGroupType)) { - buttons.add("Skyrend", skyPounce).hint("Crash into your enemy and initiate a grapple combo. End flight."); + if (player.canPounce() && !monster.hasPerk(PerkLib.EnemyGroupType)) { + buttons.add("Skyrend", skyPounce).hint("Land into your enemy dealing damage and initiate a grapple combo. End flight."); } //Tornado Strike @@ -1876,7 +1876,7 @@ public class PhysicalSpecials extends BaseCombatContent { } if(monster.short == "pod") { clearOutput(); - outputText("You can't crash into something you're trapped inside of!"); + outputText("You can't land into something you're trapped inside of!"); //Gone menuLoc = 1; menu(); addButton(0, "Next", combatMenu, false); @@ -1891,8 +1891,59 @@ public class PhysicalSpecials extends BaseCombatContent { return; } //WRAP IT UPPP - if(40 + rand(player.spe) > monster.spe) { - outputText("You growl menacingly, and fold your wings, as you dive into " + monster.a + monster.short + " clawing at its/her/his body and leaving deep bleeding wounds. You’re now grappling with your target ready to tear it to shreds."); + if (40 + rand(player.spe) > monster.spe) { + var damage:Number = 0; + //str bonuses + damage += player.str; + damage += scalingBonusStrength() * 0.5; + //tou bonuses + damage += player.spe; + damage += scalingBonusSpeed() * 0.5; + //addictive bonuses + if (player.hasPerk(PerkLib.IronFistsI)) damage += 10; + if (player.hasPerk(PerkLib.IronFistsII)) damage += 10; + if (player.hasPerk(PerkLib.IronFistsIII)) damage += 10; + if (player.hasPerk(PerkLib.IronFistsIV)) damage += 10; + if (player.hasPerk(PerkLib.IronFistsV)) damage += 10; + if (player.hasPerk(PerkLib.IronFistsVI)) damage += 10; + if (player.hasPerk(PerkLib.JobBrawler)) damage += (5 * (1 + player.newGamePlusMod())); + if (player.hasPerk(PerkLib.JobMonk)) damage += (10 * (1 + player.newGamePlusMod())); + if (player.hasStatusEffect(StatusEffects.Berzerking)) damage += (30 + (15 * player.newGamePlusMod())); + if (player.hasStatusEffect(StatusEffects.Lustzerking)) damage += (30 + (15 * player.newGamePlusMod())); + //multiplicative bonuses + if (player.hasPerk(PerkLib.HoldWithBothHands)) damage *= 1.2; + if (player.hasPerk(PerkLib.ThunderousStrikes) && player.str >= 80) damage *= 1.2; + if (player.hasPerk(PerkLib.HistoryFighter) || player.hasPerk(PerkLib.PastLifeFighter)) damage *= 1.1; + if (player.hasPerk(PerkLib.JobWarrior)) damage *= 1.05; + if (player.hasPerk(PerkLib.Heroism) && (monster.hasPerk(PerkLib.EnemyBossType) || monster.hasPerk(PerkLib.EnemyGigantType))) damage *= 2; + //Determine if critical hit! + var crit:Boolean = false; + var critChance:int = 5; + if (player.hasPerk(PerkLib.Tactician) && player.inte >= 50) { + if (player.inte <= 100) critChance += (player.inte - 50) / 5; + if (player.inte > 100) critChance += 10; + } + if (player.hasPerk(PerkLib.Blademaster)) critChance += 5; + if (player.hasStatusEffect(StatusEffects.Rage)) critChance += player.statusEffectv1(StatusEffects.Rage); + if (monster.isImmuneToCrits() && !player.hasPerk(PerkLib.EnableCriticals)) critChance = 0; + if (rand(100) < critChance) { + crit = true; + damage *= 1.75; + } + damage = Math.round(damage); + damage = doDamage(damage); + outputText("You growl menacingly, and fold your wings, as you dive into " + monster.a + monster.short + " clawing at its/her/his body and leaving deep bleeding wounds dealing " + damage + " damage!. You’re now grappling with your target ready to tear it to shreds."); + if (crit == true) { + outputText(" *Critical Hit!*"); + if (player.hasStatusEffect(StatusEffects.Rage)) player.removeStatusEffect(StatusEffects.Rage); + } + if (crit == false && player.hasPerk(PerkLib.Rage) && (player.hasStatusEffect(StatusEffects.Berzerking) || player.hasStatusEffect(StatusEffects.Lustzerking))) { + if (player.hasStatusEffect(StatusEffects.Rage) && player.statusEffectv1(StatusEffects.Rage) > 5 && player.statusEffectv1(StatusEffects.Rage) < 50) player.addStatusValue(StatusEffects.Rage, 1, 10); + else player.createStatusEffect(StatusEffects.Rage, 10, 0, 0, 0); + } + checkAchievementDamage(damage); + outputText("\n\n"); + combat.heroBaneProc(damage); monster.createStatusEffect(StatusEffects.Pounce, 4 + rand(2), 0, 0, 0); player.removeStatusEffect(StatusEffects.Flying); if (player.hasStatusEffect(StatusEffects.FlyingNoStun)) { From 589c0f6ddff7e81fef31164c2d3c1e3dbb9a2ef2 Mon Sep 17 00:00:00 2001 From: Liadri Date: Mon, 12 Mar 2018 14:46:28 -0400 Subject: [PATCH 18/27] Skyrend fix --- classes/classes/Scenes/Combat/PhysicalSpecials.as | 7 ------- 1 file changed, 7 deletions(-) diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index ab8290c13d..d223380397 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -287,17 +287,10 @@ public class PhysicalSpecials extends BaseCombatContent { } //Sky Pounce -<<<<<<< HEAD if (player.canPounce() && !monster.hasPerk(PerkLib.EnemyGroupType)) { buttons.add("Skyrend", skyPounce).hint("Land into your enemy dealing damage and initiate a grapple combo. End flight."); } -======= - if (player.canPounce() && player.canFly() && !monster.hasPerk(PerkLib.EnemyGroupType)) { - buttons.add("Skyrend", skyPounce).hint("Crash into your enemy and initiate a grapple combo. End flight."); - } - ->>>>>>> 529b53e89563b36776f14914bbdcafa319a2232e //Tornado Strike if (player.vouivreScore() >= 11) { bd = buttons.add("Tornado Strike", TornadoStrike).hint("Use wind to forcefully lift a foe in the air and deal damage. \n\nWould go into cooldown after use for: 8 rounds"); From b6ee50d2741d0e6b52fc07294116e3176e36d5f8 Mon Sep 17 00:00:00 2001 From: Liadri Date: Wed, 14 Mar 2018 19:10:18 -0400 Subject: [PATCH 19/27] Fixed Sphinx Horsecock ref x --- classes/classes/Items/Consumables/Enigmanium.as | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/classes/classes/Items/Consumables/Enigmanium.as b/classes/classes/Items/Consumables/Enigmanium.as index dea72ace63..ad84270e73 100644 --- a/classes/classes/Items/Consumables/Enigmanium.as +++ b/classes/classes/Items/Consumables/Enigmanium.as @@ -291,20 +291,23 @@ public class Enigmanium extends Consumable{ if (player.cocks[0].cockType != CockTypesEnum.CAT) { if (player.cocks[0].cockType == CockTypesEnum.HUMAN) { outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); - temp = player.addHorseCock(); + player.cocks[i].cockType = CockTypesEnum.CAT; + player.cocks[i].knotMultiplier = 1; temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; dynStats("lib", 5, "sen", 4, "lus", 35); } if (player.cocks[0].cockType == CockTypesEnum.DOG) { - temp = player.addHorseCock(); + player.cocks[i].cockType = CockTypesEnum.CAT; + player.cocks[i].knotMultiplier = 1; outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; dynStats("lib", 5, "sen", 4, "lus", 35); } if (player.cocks[0].cockType == CockTypesEnum.TENTACLE) { - temp = player.addHorseCock(); + player.cocks[i].cockType = CockTypesEnum.CAT; + player.cocks[i].knotMultiplier = 1; outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; @@ -312,7 +315,8 @@ public class Enigmanium extends Consumable{ } if (player.cocks[0].cockType.Index > 4) { outputText("\n\nYour [cock] swells up with near-painful arousal and begins to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum."); - temp = player.addHorseCock(); + player.cocks[i].cockType = CockTypesEnum.CAT; + player.cocks[i].knotMultiplier = 1; temp2 = player.increaseCock(temp, rand(4) + 4); temp3 = 1; dynStats("lib", 5, "sen", 4, "lus", 35); @@ -323,7 +327,8 @@ public class Enigmanium extends Consumable{ //MULTICOCK else { dynStats("lib", 5, "sen", 4, "lus", 35); - temp = player.addHorseCock(); + player.cocks[i].cockType = CockTypesEnum.CAT; + player.cocks[i].knotMultiplier = 1; outputText("\n\nOne of your penises begins to feel strange. You pull down your clothes to take a look and see your [cock] swells up with near-painful arousal and begin to transform. It turns pink and begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible. Your new feline dong throbs powerfully and spurts a few droplets of cum.."); if (temp == -1) { CoC_Settings.error(""); @@ -331,7 +336,7 @@ public class Enigmanium extends Consumable{ outputText("FUKKKK ERROR NO COCK XFORMED"); } //Already have a sheath - if (player.horseCocks() > 1 || player.dogCocks() > 0) outputText(" Your sheath tingles and begins growing larger as the cock's base shifts to lie inside it."); + if (player.catCocks() > 1 || player.dogCocks() > 0) outputText(" Your sheath tingles and begins growing larger as the cock's base shifts to lie inside it."); else outputText(" You feel a tightness near the base where your skin seems to be bunching up. A sheath begins forming around your " + player.cockDescript(temp) + "'s root, tightening and pulling your " + player.cockDescript(temp) + " inside its depths."); temp2 = player.increaseCock(temp, rand(4) + 4); outputText(" The shaft suddenly explodes with movement, growing longer and turning pink as it begins to narrow until the tip is barely wide enough to accommodate your urethra. Barbs begin to sprout from its flesh, if you can call the small, fleshy nubs barbs. They start out thick around the base of your " + Appearance.cockNoun(CockTypesEnum.HUMAN) + " and shrink towards the tip. The smallest are barely visible."); From 7fb630ef91dae686e02078205d385bcb9aedf2bc Mon Sep 17 00:00:00 2001 From: Ormael Date: Thu, 15 Mar 2018 23:04:43 +0100 Subject: [PATCH 20/27] 0.8i2.09-10 - Tornado Strike special correction, new perk for enemies, Diana changes, saving setting flags and cleaning up slot 6-10 during ascension --- classes/classes/CharCreation.as | 24 ++++++++++++++++--- .../classes/Items/Consumables/Enigmanium.as | 2 +- classes/classes/PerkLib.as | 1 + classes/classes/Scenes/Combat/Combat.as | 4 ++-- .../classes/Scenes/Combat/PhysicalSpecials.as | 2 +- classes/classes/Scenes/NPCs/Diana.as | 15 ++++++------ classes/classes/Scenes/NPCs/DianaFollower.as | 19 ++++++++------- classes/classes/Scenes/Soulforce.as | 4 ++-- 8 files changed, 47 insertions(+), 24 deletions(-) diff --git a/classes/classes/CharCreation.as b/classes/classes/CharCreation.as index 205fa70223..14a66a79fa 100644 --- a/classes/classes/CharCreation.as +++ b/classes/classes/CharCreation.as @@ -231,6 +231,16 @@ import coc.view.MainView; player.itemSlot4.emptySlot(); player.itemSlot5.unlocked = false; player.itemSlot5.emptySlot(); + player.itemSlot6.unlocked = false; + player.itemSlot6.emptySlot(); + player.itemSlot7.unlocked = false; + player.itemSlot7.emptySlot(); + player.itemSlot8.unlocked = false; + player.itemSlot8.emptySlot(); + player.itemSlot9.unlocked = false; + player.itemSlot9.emptySlot(); + player.itemSlot10.unlocked = false; + player.itemSlot10.emptySlot(); } //PIERCINGS player.nipplesPierced = 0; @@ -367,12 +377,19 @@ import coc.view.MainView; } } //player.perkPoints = player.level - 1; + var newFlags:DefaultDict = new DefaultDict(); + if (flags[kFLAGS.NEW_GAME_PLUS_LEVEL] > 0) { + for each(var flag:int in [kFLAGS.NEW_GAME_PLUS_LEVEL, kFLAGS.HUNGER_ENABLED, kFLAGS.HARDCORE_MODE, kFLAGS.GAME_DIFFICULTY, kFLAGS.EASY_MODE_ENABLE_FLAG, kFLAGS.SFW_MODE, kFLAGS.WATERSPORTS_ENABLED, kFLAGS.SILLY_MODE_ENABLE_FLAG, kFLAGS.LOW_STANDARDS_FOR_ALL, kFLAGS.HYPER_HAPPY, kFLAGS.STAT_GAIN_MODE]) { + newFlags[flag] = flags[flag]; + } + } + /* if (flags[kFLAGS.NEW_GAME_PLUS_LEVEL] > 0) { var newGamePlusLevel:int = flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; var gameMode:Number = flags[kFLAGS.HUNGER_ENABLED]; var hardcoreMode:int = flags[kFLAGS.HARDCORE_MODE]; var hardcoreSlot:String = flags[kFLAGS.HARDCORE_SLOT]; - } + }*/ //Clear plot storage array! CoC.instance.flags = new DefaultDict(); var countersStorage:CountersStorage = kCOUNTERS.create(); @@ -380,12 +397,13 @@ import coc.view.MainView; CoC.instance.counters = new RootCounters(countersStorage); CoC.instance.saves.loadPermObject(); //Carry over data if new game plus. - if (newGamePlusLevel > 0) { + if (flags[kFLAGS.NEW_GAME_PLUS_LEVEL] > 0) CoC.instance.flags = newFlags; + /*if (newGamePlusLevel > 0) { flags[kFLAGS.NEW_GAME_PLUS_LEVEL] = newGamePlusLevel; flags[kFLAGS.HUNGER_ENABLED] = gameMode; flags[kFLAGS.HARDCORE_MODE] = hardcoreMode; flags[kFLAGS.HARDCORE_SLOT] = hardcoreSlot; - } + }*/ //Set that jojo debug doesn't need to run flags[kFLAGS.UNKNOWN_FLAG_NUMBER_02999] = 3; //Time reset diff --git a/classes/classes/Items/Consumables/Enigmanium.as b/classes/classes/Items/Consumables/Enigmanium.as index dea72ace63..d51564410e 100644 --- a/classes/classes/Items/Consumables/Enigmanium.as +++ b/classes/classes/Items/Consumables/Enigmanium.as @@ -448,7 +448,7 @@ public class Enigmanium extends Consumable{ } //DA Mouth - if (player.faceType != Face.CAT_CANINES) { + if (player.faceType != Face.CAT_CANINES && player.ears.type == Ears.LION && rand(4) == 0 && changes < changeLimit) { if (player.faceType != Face.HUMAN) { outputText("\n\nYour face suddenly mold back into its former human shape. However you feel your canine changing elongating into sharp dagger-like teeth capable of causing severe injuries. "); } else { outputText("\n\nYou feel your canines changing, elongating into sharp dagger-like teeth capable of causing severe injuries. Funnily, your face remained relatively human even after the change. You purr at the change it gives you a cute look. Your mouth is now filled with Cat-like canines."); diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index e387f63273..a5bba4b1a6 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -1944,6 +1944,7 @@ public class PerkLib // Monster perks public static const Acid:PerkType = mk("Acid", "Acid", ""); + public static const AlwaysSuccesfullRunaway:PerkType = mk("Always Succesfull Runaway", "Always Succesfull Runaway", ""); public static const DarknessNature:PerkType = mk("Darkness Nature", "Darkness Nature", ""); public static const DarknessVulnerability:PerkType = mk("Darkness Vulnerability", "Darkness Vulnerability", ""); public static const EnemyBeastOrAnimalMorphType:PerkType = mk("Beast or Animal-morph enemy type", "Beast or Animal-morph enemy type", ""); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index aad6d3e7d0..9b1d744a98 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -5581,7 +5581,7 @@ public function runAway(callHook:Boolean = true):void { return; } //SUCCESSFUL FLEE - if (player.spe > rand(monster.spe + escapeMod)) { + if ((player.spe > rand(monster.spe + escapeMod)) || monster.hasPerk(PerkLib.AlwaysSuccesfullRunaway)) { //Escape prison if (prison.inPrison) { outputText("You quickly bolt out of the main entrance and after hiding for a good while, there's no sign of [monster a] [monster name]. You sneak back inside to retrieve whatever you had before you were captured. "); @@ -5704,7 +5704,7 @@ public function greatDive():void { } doNext(combatMenu); //This is now automatic - newRound arg defaults to true: menuLoc = 0; - fatigue(50, USEFATG_MAGIC); + fatigue(50, USEFATG_PHYSICAL); var damage:Number = unarmedAttack(); damage += player.str; damage += player.spe * 2; diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index d223380397..5e299a08eb 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -292,7 +292,7 @@ public class PhysicalSpecials extends BaseCombatContent { } //Tornado Strike - if (player.vouivreScore() >= 11) { + if (player.couatlScore() >= 11) { bd = buttons.add("Tornado Strike", TornadoStrike).hint("Use wind to forcefully lift a foe in the air and deal damage. \n\nWould go into cooldown after use for: 8 rounds"); bd.requireFatigue(physicalCost(60)); if (player.hasStatusEffect(StatusEffects.CooldownTornadoStrike)) { diff --git a/classes/classes/Scenes/NPCs/Diana.as b/classes/classes/Scenes/NPCs/Diana.as index 275830179e..6e1385e933 100644 --- a/classes/classes/Scenes/NPCs/Diana.as +++ b/classes/classes/Scenes/NPCs/Diana.as @@ -123,11 +123,11 @@ package classes.Scenes.NPCs if (HPRatio() < .2 && (mana >= spellCostHeal())) usingHealSpell(); else if (flags[kFLAGS.DIANA_LVL_UP] >= 5 && flags[kFLAGS.DIANA_LVL_UP] < 8) { var choice3:Number = rand(6); - if (choice3 < 2) { + if (choice3 < 3) { if ((soulforce >= soulskillCostManyBirds()) && rand(2) == 0) usingManyBirdsSoulskill(); else eAttack(); } - if (choice3 > 1 && choice3 < 5) { + if (choice3 > 2 && choice3 < 5) { if (HPRatio() < .6 && rand(2) == 0 && (mana >= spellCostHeal())) usingHealSpell(); else if (HPRatio() < .6 && rand(2) == 0 && !hasStatusEffect(StatusEffects.MonsterRegen2) && (mana >= spellCostRegenerate())) usingRegenerateSpell(); else if (rand(2) == 0 && (mana < (this.maxMana() - 300))) usingARC(); @@ -140,11 +140,11 @@ package classes.Scenes.NPCs } else if (flags[kFLAGS.DIANA_LVL_UP] >= 2 && flags[kFLAGS.DIANA_LVL_UP] < 5) { var choice2:Number = rand(6); - if (choice2 < 2) { + if (choice2 < 3) { if ((soulforce >= soulskillCostManyBirds()) && rand(2) == 0) usingManyBirdsSoulskill(); else eAttack(); } - if (choice2 > 1 && choice2 < 5) { + if (choice2 > 2 && choice2 < 5) { if (HPRatio() < .6 && rand(2) == 0 && (mana >= spellCostHeal())) usingHealSpell(); else if (rand(2) == 0 && (mana < (this.maxMana() - 80))) usingARC(); else eAttack(); @@ -156,8 +156,8 @@ package classes.Scenes.NPCs } else { var choice1:Number = rand(6); - if (choice1 == 0) eAttack(); - if (choice1 > 0 && choice1 < 5) { + if (choice1 < 3) eAttack(); + if (choice1 > 2 && choice1 < 5) { if (HPRatio() < .5 && rand(2) == 0 && (mana >= spellCostHeal())) usingHealSpell(); else if (rand(2) == 0 && (mana < (this.maxMana() - 40))) usingARC(); else eAttack(); @@ -332,7 +332,7 @@ package classes.Scenes.NPCs this.butt.type = Butt.RATING_LARGE; this.hairLength = 12; } - if (flags[kFLAGS.DIANA_LVL_UP] >= 1 && flags[kFLAGS.DIANA_FOLLOWER] == 3) { + if (flags[kFLAGS.DIANA_LVL_UP] >= 0 && flags[kFLAGS.DIANA_FOLLOWER] == 3) { this.a = "the "; this.short = "horse morph"; this.imageName = "whitemare"; @@ -395,6 +395,7 @@ package classes.Scenes.NPCs this.faceType = Face.HORSE; this.tailType = Tail.HORSE; this.createPerk(PerkLib.EnemyBeastOrAnimalMorphType, 0, 0, 0, 0); + this.createPerk(PerkLib.AlwaysSuccesfullRunaway, 0, 0, 0, 0); this.createPerk(PerkLib.WizardsFocus, 0, 0, 0, 0); if (flags[kFLAGS.DIANA_LVL_UP] >= 1) { this.createPerk(PerkLib.JobHealer, 0, 0, 0, 0); diff --git a/classes/classes/Scenes/NPCs/DianaFollower.as b/classes/classes/Scenes/NPCs/DianaFollower.as index 6850a3f379..568f01fda3 100644 --- a/classes/classes/Scenes/NPCs/DianaFollower.as +++ b/classes/classes/Scenes/NPCs/DianaFollower.as @@ -92,6 +92,7 @@ public function wonOverDiana():void { clearOutput(); outputText("The horse morph kneels down defeated. Seems you can do whatever you want with her now. So, what will it be?\n\n"); menu(); + levelingHerself(); if (player.lust >= 33) addButton(1, "Rape", wonOverDianaSex); addButton(0, "Spare", wonOverDianaSpare); } @@ -456,6 +457,16 @@ public function wonOverDianaSpare():void { outputText("You tell the girl you will let her go. You have no business with her.\n\n"); outputText("At first she looks at you in confusion, then nods before running off in the forest. Maybe next time the two of you could meet on more friendly dispositions.\n\n"); } + cleanupAfterCombat(); + return; +} +public function lostToDiana():void { + clearOutput(); + outputText("The horse morph kicks you in the face, knocking you unconscious. When you wake up, you realise she got away with some of your gems. Guess that's not the worst thing that could happen, right?\n\n"); + cleanupAfterCombat(); + return; +} +private function levelingHerself():void { flags[kFLAGS.DIANA_DEFEATS_COUNTER]++; if (flags[kFLAGS.DIANA_DEFEATS_COUNTER] == 1 && flags[kFLAGS.DIANA_LVL_UP] == 0) { if (player.hasStatusEffect(StatusEffects.CampSparingNpcsTimers2)) player.addStatusValue(StatusEffects.CampSparingNpcsTimers2, 4, 18); @@ -506,14 +517,6 @@ public function wonOverDianaSpare():void { flags[kFLAGS.DIANA_LVL_UP] = 8; } dianaAffection(5); - cleanupAfterCombat(); - return; -} -public function lostToDiana():void { - clearOutput(); - outputText("The horse morph kicks you in the face, knocking you unconscious. When you wake up, you realise she got away with some of your gems. Guess that's not the worst thing that could happen, right?\n\n"); - cleanupAfterCombat(); - return; } public function beMyStallion():void { clearOutput(); diff --git a/classes/classes/Scenes/Soulforce.as b/classes/classes/Scenes/Soulforce.as index a56a8fe05c..fc17ee4008 100644 --- a/classes/classes/Scenes/Soulforce.as +++ b/classes/classes/Scenes/Soulforce.as @@ -210,7 +210,6 @@ use namespace CoC; addButton(9, "Camp NPC's", FasterOrInstantCampNPCRecruitment).hint("Menu to speed up recruitment of camp npc's due to testing needs."); addButton(10, "BodyPartEditor", SceneLib.debugMenu.bodyPartEditorRoot); addButton(11, "Celess", celessIntroForced).hint("Due to hard time getting her intro here it's."); - addButton(12, "DERP", AddEnigmanium).hint("DERP."); if (flags[kFLAGS.LUNA_MOON_CYCLE] > 8) addButton(12, "MoonCycleAdj", moonCycleAdjusting).hint("Adjusting wild moon cycle to pokeba... norm."); if (player.hasPerk(PerkLib.Lycanthropy) && player.skin.coverage != Skin.COVERAGE_LOW) addButton(13, "WWFurFix", fixingWerewolfFur).hint("Fixing full to partial werewolf fur."); addButton(14, "Back", accessSoulforceMenu); @@ -715,6 +714,7 @@ public function FightNightmare():void { addButton(4, "SkybornSeed", AddSkybornSeed).hint("Add 1 Skyborn Seed."); //addButton(4, "AbyssalInk", "Not yet ready for test and just for future use put here already ^^ (Add 1 Abyssal Ink.)"); addButton(5, "Naga Oils", AddGorgonOil).hint("Add 1 vial of Gorgon, Vouivre and Couatl Oil."); + addButton(6, "Enigmanium", AddEnigmanium).hint("Add 1 Enigmanium."); //addButton(7, "V.D.ARC", AddVeryDilutedArcaneRegenConcotion).hint("Add 1 very diluted Arcane Regen Concotion."); //addButton(8, "D.ARC", AddDilutedArcaneRegenConcotion).hint("Add 1 diluted Arcane Regen Concotion."); addButton(9, "SBMan", AddSoulBlastManual).hint("Add 1 Soul Blast manual."); @@ -1244,7 +1244,7 @@ public function FightNightmare():void { public function AddEnigmanium():void { outputText("\n\n(Gained 1 Enigmanium!)\n\n"); - inventory.takeItem(consumables.ENIGMANIUM, EquipmentMenu); + inventory.takeItem(consumables.ENIGMANIUM, NonEquipmentMenu); } public function AddLightAyoArmor():void { From 3971073cc9e5acccc64f515669754d7fa9cec834 Mon Sep 17 00:00:00 2001 From: Liadri Date: Thu, 15 Mar 2018 20:58:59 -0400 Subject: [PATCH 21/27] Added riddle to the sphinx --- .../classes/Scenes/Combat/MagicSpecials.as | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/classes/classes/Scenes/Combat/MagicSpecials.as b/classes/classes/Scenes/Combat/MagicSpecials.as index b94ef48c2f..cb4ba92c20 100644 --- a/classes/classes/Scenes/Combat/MagicSpecials.as +++ b/classes/classes/Scenes/Combat/MagicSpecials.as @@ -2504,7 +2504,24 @@ public class MagicSpecials extends BaseCombatContent { public function CursedRiddle():void { clearOutput(); player.createStatusEffect(StatusEffects.CooldownCursedRiddle, 0, 0, 0, 0); - outputText("You stop fighting for a second and speak aloud a magical riddle. " + monster.a + monster.short + " gives you a troubled look, everyone knows of the terrifying power of a sphinx riddle used as a curse. You give " + monster.a + monster.short + " some time crossing your forepaws in anticipation. "); + outputText("You stop fighting for a second and speak aloud a magical riddle.\n\n"); + var chosen:String = randomChoice( + "\"If you speak my name, you destroy me. Who am I?\"\n\n", + "\"It belongs to me, but both my friends and enemies use it more than me. What is it?\"\n\n", + "\"What is the part of the bird that is not in the sky, which can swim in the ocean and always stay dry.\"\n\n", + "\"What comes once in a minute, twice in a moment, but never in a thousand years?\"\n\n", + "\"The more you take, the more you leave behind. What am I?\"\n\n", + "\"I reach for the sky, but clutch to the ground; sometimes I leave, but I am always around. What am I?\"\n\n", + "\"I am a path situated between high natural masses. Remove my first letter & you have a path situated between man-made masses. What am I?\"\n\n", + "\"I am two-faced but bear only one, I have no legs but travel widely. Men spill much blood over me, kings leave there imprint on me. I have greatest power when given away, yet lust for me keeps me locked away. What am I?\"\n\n", + "\"I always follow you around, everywhere you go at night. I look very bright to people, but I can make the sun dark. I can be in many different forms and shapes. What am I?\"\n\n", + "\"I have hundreds of legs but I can only lean. You make me feel dirty so you feel clean. What am I?\"\n\n", + "\"My tail is long, my coat is brown, I like the country, I like the town. I can live in a house or live in a shed, and I come out to play when you are in bed. What am I?\"\n\n", + "\"I welcome the day with a show of light, I steathily came here in the night. I bathe the earthy stuff at dawn, But by the noon, alas! I'm gone. What am I?\"\n\n", + "\"Which creature in the morning goes on four feet, at noon on two, and in the evening upon three?\"\n\n" + ); + outputText(chosen); + outputText("Startled by your query, " + monster.a + monster.short + " gives you a troubled look, everyone knows of the terrifying power of a sphinx riddle used as a curse. You give " + monster.a + monster.short + " some time crossing your forepaws in anticipation. "); //odds of success var baseInteReq:Number = 200 From d1d77bbd904fdfb4488d9bef774a0574012b6622 Mon Sep 17 00:00:00 2001 From: aimozg Date: Fri, 16 Mar 2018 09:44:29 +0600 Subject: [PATCH 22/27] Fixed spred crashing due to empty charview layer 'antennae' --- res/model.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/model.xml b/res/model.xml index ac1e7e6a28..8da2f07ef6 100644 --- a/res/model.xml +++ b/res/model.xml @@ -344,7 +344,7 @@ - + @@ -474,13 +474,13 @@ - + - + - + From 6451cec51b9929c8cfa42ee353a967e68ac5f610 Mon Sep 17 00:00:00 2001 From: aimozg Date: Fri, 16 Mar 2018 10:28:14 +0600 Subject: [PATCH 23/27] Demon horns and cat-taur (by Liadri) --- res/charview/basic.png | Bin 14442 -> 14060 bytes res/charview/beasts.png | Bin 15950 -> 18231 bytes res/model.xml | 21 +++++++++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/res/charview/basic.png b/res/charview/basic.png index 7f95a253cd66c2804330406579ee9139ad8dc28c..a6d2e011b8cccdcacc9a3b1baae5fc7dcb74524f 100644 GIT binary patch literal 14060 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 literal 14442 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

y&f$kuHE?aMw`<3JJuK} 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 P00000NkvXXu0mjfdv7G< literal 15950 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 ]> - + @@ -318,6 +318,8 @@ + + @@ -487,7 +489,7 @@ - + @@ -901,7 +903,7 @@ - + @@ -909,7 +911,18 @@ - + + + + + + + + + + + + From 4d68964eaf42acbfe4f69a174829d44acb988399 Mon Sep 17 00:00:00 2001 From: aimozg Date: Fri, 16 Mar 2018 11:22:37 +0600 Subject: [PATCH 24/27] Charview bugfixes --- res/model.xml | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/res/model.xml b/res/model.xml index 43c1981277..ca1cb2b371 100644 --- a/res/model.xml +++ b/res/model.xml @@ -167,18 +167,17 @@ #101728 #dddfe4 - - - - - - - - + + + + + + + #f2e8e3 - + #f2e8e3 @@ -247,11 +246,11 @@ --> - - + + - + @@ -282,7 +281,7 @@ - + @@ -304,7 +303,7 @@ - + @@ -319,7 +318,7 @@ - + @@ -370,7 +369,7 @@ - + @@ -962,7 +961,6 @@ - @@ -982,7 +980,7 @@ - + @@ -1011,7 +1009,7 @@ - + @@ -1040,9 +1038,6 @@ - - - @@ -1132,7 +1127,7 @@ - + From fd6f0fa6ae9ba62c229cb931b2ce879c633d3f8d Mon Sep 17 00:00:00 2001 From: aimozg Date: Fri, 16 Mar 2018 11:23:01 +0600 Subject: [PATCH 25/27] Charview bugfixes --- res/charview/scales.png | Bin 11531 -> 11297 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/res/charview/scales.png b/res/charview/scales.png index 3601ff6c17126606e4fb0a8f55bb0245561f7c95..0de91d5c107bf723b3abd9ac22e884b21fa51bee 100644 GIT binary patch literal 11297 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

$CvOD^6LC13D)m(C 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 K$kn)d|9=77c+t-Q From d364b6f8c9157e3b38744f271edff7eaeb453d60 Mon Sep 17 00:00:00 2001 From: Ormael Date: Fri, 16 Mar 2018 22:58:03 +0100 Subject: [PATCH 26/27] 0.8i2.10 --- classes/classes/CharCreation.as | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/classes/classes/CharCreation.as b/classes/classes/CharCreation.as index 14a66a79fa..aafe6a86b1 100644 --- a/classes/classes/CharCreation.as +++ b/classes/classes/CharCreation.as @@ -383,13 +383,6 @@ import coc.view.MainView; newFlags[flag] = flags[flag]; } } - /* - if (flags[kFLAGS.NEW_GAME_PLUS_LEVEL] > 0) { - var newGamePlusLevel:int = flags[kFLAGS.NEW_GAME_PLUS_LEVEL]; - var gameMode:Number = flags[kFLAGS.HUNGER_ENABLED]; - var hardcoreMode:int = flags[kFLAGS.HARDCORE_MODE]; - var hardcoreSlot:String = flags[kFLAGS.HARDCORE_SLOT]; - }*/ //Clear plot storage array! CoC.instance.flags = new DefaultDict(); var countersStorage:CountersStorage = kCOUNTERS.create(); @@ -398,12 +391,6 @@ import coc.view.MainView; CoC.instance.saves.loadPermObject(); //Carry over data if new game plus. if (flags[kFLAGS.NEW_GAME_PLUS_LEVEL] > 0) CoC.instance.flags = newFlags; - /*if (newGamePlusLevel > 0) { - flags[kFLAGS.NEW_GAME_PLUS_LEVEL] = newGamePlusLevel; - flags[kFLAGS.HUNGER_ENABLED] = gameMode; - flags[kFLAGS.HARDCORE_MODE] = hardcoreMode; - flags[kFLAGS.HARDCORE_SLOT] = hardcoreSlot; - }*/ //Set that jojo debug doesn't need to run flags[kFLAGS.UNKNOWN_FLAG_NUMBER_02999] = 3; //Time reset From 7abdee651cf61943ec41d4e9fe59651668b0f5ce Mon Sep 17 00:00:00 2001 From: aimozg Date: Wed, 21 Mar 2018 20:55:05 +0600 Subject: [PATCH 27/27] Charview update: * Most of sprites were toned one shade darker * New sprite parts: cow tail and horns, fairy wings (by Liadri) * Fixed goat and fox ears * Removed obsolete Revamp compatibility layer items --- classes/classes/Scenes/DebugMenu.as | 6 + classes/coc/view/charview/CharViewContext.as | 365 +------------------ res/charview/alraune.png | Bin 13016 -> 13234 bytes res/charview/basic.png | Bin 14060 -> 15771 bytes res/charview/beasts.png | Bin 18231 -> 18233 bytes res/charview/chitin.png | Bin 7843 -> 7146 bytes res/charview/manticore.png | Bin 8179 -> 29378 bytes res/charview/orca.png | Bin 4526 -> 4092 bytes res/charview/scales.png | Bin 11297 -> 11276 bytes res/model.xml | 42 +-- 10 files changed, 27 insertions(+), 386 deletions(-) diff --git a/classes/classes/Scenes/DebugMenu.as b/classes/classes/Scenes/DebugMenu.as index ec21b20d7f..16afb980eb 100644 --- a/classes/classes/Scenes/DebugMenu.as +++ b/classes/classes/Scenes/DebugMenu.as @@ -1290,6 +1290,12 @@ public class DebugMenu extends BaseContent [Wings.PLANT, "21 PLANT"], [Wings.MANTICORE_LIKE_SMALL, "22 MANTICORE_LIKE_SMALL"], [Wings.MANTICORE_LIKE_LARGE, "23 MANTICORE_LIKE_LARGE"], + [Wings.BAT_ARM, "24 BAT_ARM"], + [Wings.VAMPIRE, "25 VAMPIRE"], + [Wings.FEY_DRAGON_WINGS, "26 FEY_DRAGON_WINGS"], + [Wings.FEATHERED_AVIAN, "27 FEATHERED_AVIAN"], + [Wings.NIGHTMARE, "28 NIGHTMARE"], + [Wings.FEATHERED_SPHINX, "29 FEATHERED_SPHINX"], ]; private static const WING_DESC_CONSTANTS:Array = [ "(none)","non-existant","tiny hidden","huge","small", diff --git a/classes/coc/view/charview/CharViewContext.as b/classes/coc/view/charview/CharViewContext.as index 780b4fb94c..94251ee521 100644 --- a/classes/coc/view/charview/CharViewContext.as +++ b/classes/coc/view/charview/CharViewContext.as @@ -64,259 +64,9 @@ public class CharViewContext extends ExecContext { } } +import classes.BodyParts.Skin; + // Revamp compatibility layer -class Antennae { - public static const NONE:int = classes.BodyParts.Antennae.NONE; - public static const MANTIS:int = classes.BodyParts.Antennae.MANTIS; - public static const BEE:int = classes.BodyParts.Antennae.BEE; -} -class Arms { - public static const HUMAN:int = classes.BodyParts.Arms.HUMAN; - public static const HARPY:int = classes.BodyParts.Arms.HARPY; - public static const SPIDER:int = classes.BodyParts.Arms.SPIDER; - public static const MANTIS:int = classes.BodyParts.Arms.MANTIS; - public static const BEE:int = classes.BodyParts.Arms.BEE; - public static const SALAMANDER:int = classes.BodyParts.Arms.SALAMANDER; - public static const PHOENIX:int = classes.BodyParts.Arms.PHOENIX; - public static const PLANT:int = classes.BodyParts.Arms.PLANT; - public static const SHARK:int = classes.BodyParts.Arms.SHARK; - public static const GARGOYLE:int = classes.BodyParts.Arms.GARGOYLE; - public static const WOLF:int = classes.BodyParts.Arms.WOLF; - public static const LION:int = classes.BodyParts.Arms.LION; - public static const KITSUNE:int = classes.BodyParts.Arms.KITSUNE; - public static const FOX:int = classes.BodyParts.Arms.FOX; - public static const LIZARD:int = classes.BodyParts.Arms.LIZARD; - public static const DRAGON:int = classes.BodyParts.Arms.DRAGON; - public static const YETI:int = classes.BodyParts.Arms.YETI; - public static const ORCA:int = classes.BodyParts.Arms.ORCA; - public static const PLANT2:int = classes.BodyParts.Arms.PLANT2; - public static const DEVIL:int = classes.BodyParts.Arms.DEVIL; - public static const ONI:int = classes.BodyParts.Arms.ONI; - public static const ELF:int = classes.BodyParts.Arms.ELF; - public static const RAIJU:int = classes.BodyParts.Arms.RAIJU; -} -class Beard { - public static const NORMAL:int = classes.BodyParts.Beard.NORMAL; - public static const GOATEE:int = classes.BodyParts.Beard.GOATEE; - public static const CLEANCUT:int = classes.BodyParts.Beard.CLEANCUT; - public static const MOUNTAINMAN:int = classes.BodyParts.Beard.MOUNTAINMAN; -} -class BreastCup { - public static const FLAT:int = classes.lists.BreastCup.FLAT; - public static const A:int = classes.lists.BreastCup.A; - public static const B:int = classes.lists.BreastCup.B; - public static const C:int = classes.lists.BreastCup.C; - public static const D:int = classes.lists.BreastCup.D; - public static const DD:int = classes.lists.BreastCup.DD; - public static const DD_BIG:int = classes.lists.BreastCup.DD_BIG; - public static const E:int = classes.lists.BreastCup.E; - public static const E_BIG:int = classes.lists.BreastCup.E_BIG; - public static const EE:int = classes.lists.BreastCup.EE; - public static const EE_BIG:int = classes.lists.BreastCup.EE_BIG; - public static const F:int = classes.lists.BreastCup.F; - public static const F_BIG:int = classes.lists.BreastCup.F_BIG; - public static const FF:int = classes.lists.BreastCup.FF; - public static const FF_BIG:int = classes.lists.BreastCup.FF_BIG; - public static const G:int = classes.lists.BreastCup.G; -} -class Butt { - public static const RATING_BUTTLESS:int = classes.BodyParts.Butt.RATING_BUTTLESS; - public static const RATING_TIGHT:int = classes.BodyParts.Butt.RATING_TIGHT; - public static const RATING_AVERAGE:int = classes.BodyParts.Butt.RATING_AVERAGE; - public static const RATING_NOTICEABLE:int = classes.BodyParts.Butt.RATING_NOTICEABLE; - public static const RATING_LARGE:int = classes.BodyParts.Butt.RATING_LARGE; - public static const RATING_JIGGLY:int = classes.BodyParts.Butt.RATING_JIGGLY; - public static const RATING_EXPANSIVE:int = classes.BodyParts.Butt.RATING_EXPANSIVE; - public static const RATING_HUGE:int = classes.BodyParts.Butt.RATING_HUGE; - public static const RATING_INCONCEIVABLY_BIG:int = classes.BodyParts.Butt.RATING_INCONCEIVABLY_BIG; -} -class Claws { - public static const NORMAL:int = classes.BodyParts.Claws.NORMAL; - public static const LIZARD:int = classes.BodyParts.Claws.LIZARD; - public static const DRAGON:int = classes.BodyParts.Claws.DRAGON; - public static const SALAMANDER:int = classes.BodyParts.Claws.SALAMANDER; - public static const CAT:int = classes.BodyParts.Claws.CAT; - public static const DOG:int = classes.BodyParts.Claws.DOG; - public static const RAPTOR:int = classes.BodyParts.Claws.RAPTOR; - public static const MANTIS:int = classes.BodyParts.Claws.MANTIS; -} -class Ears { - public static const HUMAN:int = classes.BodyParts.Ears.HUMAN; - public static const HORSE:int = classes.BodyParts.Ears.HORSE; - public static const DOG:int = classes.BodyParts.Ears.DOG; - public static const COW:int = classes.BodyParts.Ears.COW; - public static const ELFIN:int = classes.BodyParts.Ears.ELFIN; - public static const CAT:int = classes.BodyParts.Ears.CAT; - public static const LIZARD:int = classes.BodyParts.Ears.LIZARD; - public static const BUNNY:int = classes.BodyParts.Ears.BUNNY; - public static const KANGAROO:int = classes.BodyParts.Ears.KANGAROO; - public static const FOX:int = classes.BodyParts.Ears.FOX; - public static const DRAGON:int = classes.BodyParts.Ears.DRAGON; - public static const RACCOON:int = classes.BodyParts.Ears.RACCOON; - public static const MOUSE:int = classes.BodyParts.Ears.MOUSE; - public static const FERRET:int = classes.BodyParts.Ears.FERRET; - public static const PIG:int = classes.BodyParts.Ears.PIG; - public static const RHINO:int = classes.BodyParts.Ears.RHINO; - public static const ECHIDNA:int = classes.BodyParts.Ears.ECHIDNA; - public static const DEER:int = classes.BodyParts.Ears.DEER; - public static const WOLF:int = classes.BodyParts.Ears.WOLF; - public static const LION:int = classes.BodyParts.Ears.LION; - public static const YETI:int = classes.BodyParts.Ears.YETI; - public static const ORCA:int = classes.BodyParts.Ears.ORCA; - public static const SNAKE:int = classes.BodyParts.Ears.SNAKE; - public static const GOAT:int = classes.BodyParts.Ears.GOAT; - public static const ONI:int = classes.BodyParts.Ears.ONI; - public static const ELVEN:int = classes.BodyParts.Ears.ELVEN; - public static const WEASEL:int = classes.BodyParts.Ears.WEASEL; - public static const BAT:int = classes.BodyParts.Ears.BAT; - public static const VAMPIRE:int = classes.BodyParts.Ears.VAMPIRE; -} -class Eyes { - public static const HUMAN:int = classes.BodyParts.Eyes.HUMAN; - public static const FOUR_SPIDER_EYES:int = classes.BodyParts.Eyes.FOUR_SPIDER_EYES; - public static const BLACK_EYES_SAND_TRAP:int = classes.BodyParts.Eyes.BLACK_EYES_SAND_TRAP; - public static const CAT_SLITS:int = classes.BodyParts.Eyes.CAT_SLITS; - public static const GORGON:int = classes.BodyParts.Eyes.GORGON; - public static const FENRIR:int = classes.BodyParts.Eyes.FENRIR; - public static const MANTICORE:int = classes.BodyParts.Eyes.MANTICORE; - public static const FOX:int = classes.BodyParts.Eyes.FOX; - public static const REPTILIAN:int = classes.BodyParts.Eyes.REPTILIAN; - public static const SNAKE:int = classes.BodyParts.Eyes.SNAKE; - public static const DRAGON:int = classes.BodyParts.Eyes.DRAGON; - public static const DEVIL:int = classes.BodyParts.Eyes.DEVIL; - public static const ONI:int = classes.BodyParts.Eyes.ONI; - public static const ELF:int = classes.BodyParts.Eyes.ELF; - public static const RAIJU:int = classes.BodyParts.Eyes.RAIJU; - public static const VAMPIRE:int = classes.BodyParts.Eyes.VAMPIRE; -} -class Face { - public static const HUMAN:int = classes.BodyParts.Face.HUMAN; - public static const HORSE:int = classes.BodyParts.Face.HORSE; - public static const DOG:int = classes.BodyParts.Face.DOG; - public static const COW_MINOTAUR:int = classes.BodyParts.Face.COW_MINOTAUR; - public static const SHARK_TEETH:int = classes.BodyParts.Face.SHARK_TEETH; - public static const SNAKE_FANGS:int = classes.BodyParts.Face.SNAKE_FANGS; - public static const CAT:int = classes.BodyParts.Face.CAT; - public static const LIZARD:int = classes.BodyParts.Face.LIZARD; - public static const BUNNY:int = classes.BodyParts.Face.BUNNY; - public static const KANGAROO:int = classes.BodyParts.Face.KANGAROO; - public static const SPIDER_FANGS:int = classes.BodyParts.Face.SPIDER_FANGS; - public static const FOX:int = classes.BodyParts.Face.FOX; - public static const DRAGON:int = classes.BodyParts.Face.DRAGON; - public static const RACCOON_MASK:int = classes.BodyParts.Face.RACCOON_MASK; - public static const RACCOON:int = classes.BodyParts.Face.RACCOON; - public static const BUCKTEETH:int = classes.BodyParts.Face.BUCKTEETH; - public static const MOUSE:int = classes.BodyParts.Face.MOUSE; - public static const FERRET_MASK:int = classes.BodyParts.Face.FERRET_MASK; - public static const FERRET:int = classes.BodyParts.Face.FERRET; - public static const PIG:int = classes.BodyParts.Face.PIG; - public static const BOAR:int = classes.BodyParts.Face.BOAR; - public static const RHINO:int = classes.BodyParts.Face.RHINO; - public static const ECHIDNA:int = classes.BodyParts.Face.ECHIDNA; - public static const DEER:int = classes.BodyParts.Face.DEER; - public static const WOLF:int = classes.BodyParts.Face.WOLF; - public static const MANTICORE:int = classes.BodyParts.Face.MANTICORE; - public static const SALAMANDER_FANGS:int = classes.BodyParts.Face.SALAMANDER_FANGS; - public static const YETI_FANGS:int = classes.BodyParts.Face.YETI_FANGS; - public static const ORCA:int = classes.BodyParts.Face.ORCA; - public static const PLANT_DRAGON:int = classes.BodyParts.Face.PLANT_DRAGON; - public static const DRAGON_FANGS:int = classes.BodyParts.Face.DRAGON_FANGS; - public static const DEVIL_FANGS:int = classes.BodyParts.Face.DEVIL_FANGS; - public static const ONI_TEETH:int = classes.BodyParts.Face.ONI_TEETH; - public static const RAIJU_FANGS:int = classes.BodyParts.Face.RAIJU_FANGS; - public static const VAMPIRE:int = classes.BodyParts.Face.VAMPIRE; -} -class Gender { - public static const NONE:int = classes.lists.Gender.GENDER_NONE; - public static const MALE:int = classes.lists.Gender.GENDER_MALE; - public static const FEMALE:int = classes.lists.Gender.GENDER_FEMALE; - public static const HERM:int = classes.lists.Gender.GENDER_HERM; -} -class Gills { - public static const NONE:int = classes.BodyParts.Gills.NONE; - public static const ANEMONE:int = classes.BodyParts.Gills.ANEMONE; - public static const FISH:int = classes.BodyParts.Gills.FISH; - public static const IN_TENTACLE_LEGS:int = classes.BodyParts.Gills.GILLS_IN_TENTACLE_LEGS; -} -class Hair { - public static const NORMAL:int = classes.BodyParts.Hair.NORMAL; - public static const FEATHER:int = classes.BodyParts.Hair.FEATHER; - public static const GHOST:int = classes.BodyParts.Hair.GHOST; - public static const GOO:int = classes.BodyParts.Hair.GOO; - public static const ANEMONE:int = classes.BodyParts.Hair.ANEMONE; - public static const QUILL:int = classes.BodyParts.Hair.QUILL; - public static const GORGON:int = classes.BodyParts.Hair.GORGON; - public static const LEAF:int = classes.BodyParts.Hair.LEAF; - public static const FLUFFY:int = classes.BodyParts.Hair.FLUFFY; - public static const GRASS:int = classes.BodyParts.Hair.GRASS; - public static const SILKEN:int = classes.BodyParts.Hair.SILKEN; - public static const STORM:int = classes.BodyParts.Hair.STORM; -} -class Hips { - public static const RATING_BOYISH:int = classes.BodyParts.Hips.RATING_BOYISH; - public static const RATING_SLENDER:int = classes.BodyParts.Hips.RATING_SLENDER; - public static const RATING_AVERAGE:int = classes.BodyParts.Hips.RATING_AVERAGE; - public static const RATING_AMPLE:int = classes.BodyParts.Hips.RATING_AMPLE; - public static const RATING_CURVY:int = classes.BodyParts.Hips.RATING_CURVY; - public static const RATING_FERTILE:int = classes.BodyParts.Hips.RATING_FERTILE; - public static const RATING_INHUMANLY_WIDE:int = classes.BodyParts.Hips.RATING_INHUMANLY_WIDE; -} -class Horns { - public static const NONE:int = classes.BodyParts.Horns.NONE; - public static const DEMON:int = classes.BodyParts.Horns.DEMON; - public static const COW_MINOTAUR:int = classes.BodyParts.Horns.COW_MINOTAUR; - public static const DRACONIC_X2:int = classes.BodyParts.Horns.DRACONIC_X2; - public static const DRACONIC_X4_12_INCH_LONG:int = classes.BodyParts.Horns.DRACONIC_X4_12_INCH_LONG; - public static const ANTLERS:int = classes.BodyParts.Horns.ANTLERS; - public static const GOAT:int = classes.BodyParts.Horns.GOAT; - public static const UNICORN:int = classes.BodyParts.Horns.UNICORN; - public static const RHINO:int = classes.BodyParts.Horns.RHINO; - public static const OAK:int = classes.BodyParts.Horns.OAK; - public static const GARGOYLE:int = classes.BodyParts.Horns.GARGOYLE; - public static const ORCHID:int = classes.BodyParts.Horns.ORCHID; - public static const ONI_X2:int = classes.BodyParts.Horns.ONI_X2; - public static const ONI:int = classes.BodyParts.Horns.ONI; -} -class LowerBody { - public static const HUMAN:int = classes.BodyParts.LowerBody.HUMAN; - public static const HOOFED:int = classes.BodyParts.LowerBody.HOOFED; - public static const DOG:int = classes.BodyParts.LowerBody.DOG; - public static const NAGA:int = classes.BodyParts.LowerBody.NAGA; - public static const DEMONIC_HIGH_HEELS:int = classes.BodyParts.LowerBody.DEMONIC_HIGH_HEELS; - public static const DEMONIC_CLAWS:int = classes.BodyParts.LowerBody.DEMONIC_CLAWS; - public static const BEE:int = classes.BodyParts.LowerBody.BEE; - public static const GOO:int = classes.BodyParts.LowerBody.GOO; - public static const CAT:int = classes.BodyParts.LowerBody.CAT; - public static const LIZARD:int = classes.BodyParts.LowerBody.LIZARD; - public static const PONY:int = classes.BodyParts.LowerBody.PONY; - public static const BUNNY:int = classes.BodyParts.LowerBody.BUNNY; - public static const HARPY:int = classes.BodyParts.LowerBody.HARPY; - public static const KANGAROO:int = classes.BodyParts.LowerBody.KANGAROO; - public static const CHITINOUS_SPIDER_LEGS:int = classes.BodyParts.LowerBody.CHITINOUS_SPIDER_LEGS; - public static const DRIDER_LOWER_BODY:int = classes.BodyParts.LowerBody.DRIDER; - public static const FOX:int = classes.BodyParts.LowerBody.FOX; - public static const DRAGON:int = classes.BodyParts.LowerBody.DRAGON; - public static const RACCOON:int = classes.BodyParts.LowerBody.RACCOON; - public static const FERRET:int = classes.BodyParts.LowerBody.FERRET; - public static const CLOVEN_HOOFED:int = classes.BodyParts.LowerBody.CLOVEN_HOOFED; - public static const ECHIDNA:int = classes.BodyParts.LowerBody.ECHIDNA; - public static const SALAMANDER:int = classes.BodyParts.LowerBody.SALAMANDER; - public static const SCYLLA:int = classes.BodyParts.LowerBody.SCYLLA; - public static const MANTIS:int = classes.BodyParts.LowerBody.MANTIS; - public static const SHARK:int = classes.BodyParts.LowerBody.SHARK; - public static const GARGOYLE:int = classes.BodyParts.LowerBody.GARGOYLE; - public static const PLANT_HIGH_HEELS:int = classes.BodyParts.LowerBody.PLANT_HIGH_HEELS; - public static const PLANT_ROOT_CLAWS:int = classes.BodyParts.LowerBody.PLANT_ROOT_CLAWS; - public static const WOLF:int = classes.BodyParts.LowerBody.WOLF; - public static const PLANT_FLOWER:int = classes.BodyParts.LowerBody.PLANT_FLOWER; - public static const LION:int = classes.BodyParts.LowerBody.LION; - public static const YETI:int = classes.BodyParts.LowerBody.YETI; - public static const ORCA:int = classes.BodyParts.LowerBody.ORCA; - public static const YGG_ROOT_CLAWS:int = classes.BodyParts.LowerBody.YGG_ROOT_CLAWS; - public static const ONI:int = classes.BodyParts.LowerBody.ONI; - public static const ELF:int = classes.BodyParts.LowerBody.ELF; - public static const RAIJU:int = classes.BodyParts.LowerBody.RAIJU; -} class Neck { } @@ -330,117 +80,6 @@ class Pattern { public static const SPOTTED:int = classes.BodyParts.Skin.PATTERN_SPOTTED; public static const LIGHTNING_SHAPED_TATTOO:int = classes.BodyParts.Skin.PATTERN_LIGHTNING_SHAPED_TATTOO; } -class Piercing { - public static const NONE:int = classes.BodyParts.Piercing.NONE; - public static const STUD:int = classes.BodyParts.Piercing.STUD; - public static const RING:int = classes.BodyParts.Piercing.RING; - public static const LADDER:int = classes.BodyParts.Piercing.LADDER; - public static const HOOP:int = classes.BodyParts.Piercing.HOOP; - public static const CHAIN:int = classes.BodyParts.Piercing.CHAIN; -} -class RearBody { - public static const NONE:int = classes.BodyParts.RearBody.NONE; - public static const DRACONIC_MANE:int = classes.BodyParts.RearBody.DRACONIC_MANE; - public static const DRACONIC_SPIKES:int = classes.BodyParts.RearBody.DRACONIC_SPIKES; - public static const FENRIR_ICE_SPIKES:int = classes.BodyParts.RearBody.FENRIR_ICE_SPIKES; - public static const LION_MANE:int = classes.BodyParts.RearBody.LION_MANE; - public static const BEHEMOTH:int = classes.BodyParts.RearBody.BEHEMOTH; - public static const SHARK_FIN:int = classes.BodyParts.RearBody.SHARK_FIN; - public static const ORCA_BLOWHOLE:int = classes.BodyParts.RearBody.ORCA_BLOWHOLE; - public static const RAIJU_MANE:int = classes.BodyParts.RearBody.RAIJU_MANE; - public static const BAT_COLLAR:int = classes.BodyParts.RearBody.BAT_COLLAR; -} -class Skin { - public static const COVERAGE_NONE:int = 0; - public static const COVERAGE_LOW:int = 1; - public static const COVERAGE_MEDIUM:int = 2; - public static const COVERAGE_HIGH:int = 3; - public static const COVERAGE_COMPLETE:int = 4; - public static const PLAIN:int = classes.BodyParts.Skin.PLAIN; - public static const FUR:int = classes.BodyParts.Skin.FUR; - public static const SCALES:int = classes.BodyParts.Skin.SCALES; - public static const GOO:int = classes.BodyParts.Skin.GOO; - public static const CHITIN:int = classes.BodyParts.Skin.CHITIN; - public static const BARK:int = classes.BodyParts.Skin.BARK; - public static const STONE:int = classes.BodyParts.Skin.STONE; - public static const TATTOED:int = classes.BodyParts.Skin.TATTOED; - public static const AQUA_SCALES:int = classes.BodyParts.Skin.AQUA_SCALES; - public static const DRAGON_SCALES:int = classes.BodyParts.Skin.DRAGON_SCALES; - public static const MOSS:int = classes.BodyParts.Skin.MOSS; - public static const AQUA_RUBBER_LIKE:int = classes.BodyParts.Skin.AQUA_RUBBER_LIKE; -} -class Tail { - public static const NONE:int = classes.BodyParts.Tail.NONE; - public static const HORSE:int = classes.BodyParts.Tail.HORSE; - public static const DOG:int = classes.BodyParts.Tail.DOG; - public static const DEMONIC:int = classes.BodyParts.Tail.DEMONIC; - public static const COW:int = classes.BodyParts.Tail.COW; - public static const SPIDER_ADBOMEN:int = classes.BodyParts.Tail.SPIDER_ADBOMEN; - public static const BEE_ABDOMEN:int = classes.BodyParts.Tail.BEE_ABDOMEN; - public static const SHARK:int = classes.BodyParts.Tail.SHARK; - public static const CAT:int = classes.BodyParts.Tail.CAT; - public static const LIZARD:int = classes.BodyParts.Tail.LIZARD; - public static const RABBIT:int = classes.BodyParts.Tail.RABBIT; - public static const HARPY:int = classes.BodyParts.Tail.HARPY; - public static const KANGAROO:int = classes.BodyParts.Tail.KANGAROO; - public static const FOX:int = classes.BodyParts.Tail.FOX; - public static const DRACONIC:int = classes.BodyParts.Tail.DRACONIC; - public static const RACCOON:int = classes.BodyParts.Tail.RACCOON; - public static const MOUSE:int = classes.BodyParts.Tail.MOUSE; - public static const FERRET:int = classes.BodyParts.Tail.FERRET; - public static const BEHEMOTH:int = classes.BodyParts.Tail.BEHEMOTH; - public static const PIG:int = classes.BodyParts.Tail.PIG; - public static const SCORPION:int = classes.BodyParts.Tail.SCORPION; - public static const GOAT:int = classes.BodyParts.Tail.GOAT; - public static const RHINO:int = classes.BodyParts.Tail.RHINO; - public static const ECHIDNA:int = classes.BodyParts.Tail.ECHIDNA; - public static const DEER:int = classes.BodyParts.Tail.DEER; - public static const SALAMANDER:int = classes.BodyParts.Tail.SALAMANDER; - public static const KITSHOO:int = classes.BodyParts.Tail.KITSHOO; - public static const MANTIS_ABDOMEN:int = classes.BodyParts.Tail.MANTIS_ABDOMEN; - public static const MANTICORE_PUSSYTAIL:int = classes.BodyParts.Tail.MANTICORE_PUSSYTAIL; - public static const WOLF:int = classes.BodyParts.Tail.WOLF; - public static const GARGOYLE:int = classes.BodyParts.Tail.GARGOYLE; - public static const ORCA:int = classes.BodyParts.Tail.ORCA; - public static const YGGDRASIL:int = classes.BodyParts.Tail.YGGDRASIL; - public static const RAIJU:int = classes.BodyParts.Tail.RAIJU; -} -class Tongue { - public static const HUMAN:int = classes.BodyParts.Tongue.HUMAN; - public static const SNAKE:int = classes.BodyParts.Tongue.SNAKE; - public static const DEMONIC:int = classes.BodyParts.Tongue.DEMONIC; - public static const DRACONIC:int = classes.BodyParts.Tongue.DRACONIC; - public static const ECHIDNA:int = classes.BodyParts.Tongue.ECHIDNA; - public static const CAT:int = classes.BodyParts.Tongue.CAT; - public static const ELF:int = classes.BodyParts.Tongue.ELF; -} class UnderBody { } -class Wings { - public static const NONE:int = classes.BodyParts.Wings.NONE; - public static const BEE_LIKE_SMALL:int = classes.BodyParts.Wings.BEE_LIKE_SMALL; - public static const BEE_LIKE_LARGE:int = classes.BodyParts.Wings.BEE_LIKE_LARGE; - public static const HARPY:int = classes.BodyParts.Wings.HARPY; - public static const IMP:int = classes.BodyParts.Wings.IMP; - public static const BAT_LIKE_TINY:int = classes.BodyParts.Wings.BAT_LIKE_TINY; - public static const BAT_LIKE_LARGE:int = classes.BodyParts.Wings.BAT_LIKE_LARGE; - public static const SHARK_FIN:int = classes.BodyParts.Wings.SHARK_FIN; - public static const FEATHERED_LARGE:int = classes.BodyParts.Wings.FEATHERED_LARGE; - public static const DRACONIC_SMALL:int = classes.BodyParts.Wings.DRACONIC_SMALL; - public static const DRACONIC_LARGE:int = classes.BodyParts.Wings.DRACONIC_LARGE; - public static const GIANT_DRAGONFLY:int = classes.BodyParts.Wings.GIANT_DRAGONFLY; - public static const BAT_LIKE_LARGE_2:int = classes.BodyParts.Wings.BAT_LIKE_LARGE_2; - public static const DRACONIC_HUGE:int = classes.BodyParts.Wings.DRACONIC_HUGE; - public static const FEATHERED_PHOENIX:int = classes.BodyParts.Wings.FEATHERED_PHOENIX; - public static const FEATHERED_ALICORN:int = classes.BodyParts.Wings.FEATHERED_ALICORN; - public static const MANTIS_LIKE_SMALL:int = classes.BodyParts.Wings.MANTIS_LIKE_SMALL; - public static const MANTIS_LIKE_LARGE:int = classes.BodyParts.Wings.MANTIS_LIKE_LARGE; - public static const MANTIS_LIKE_LARGE_2:int = classes.BodyParts.Wings.MANTIS_LIKE_LARGE_2; - public static const GARGOYLE_LIKE_LARGE:int = classes.BodyParts.Wings.GARGOYLE_LIKE_LARGE; - public static const PLANT:int = classes.BodyParts.Wings.PLANT; - public static const MANTICORE_LIKE_SMALL:int = classes.BodyParts.Wings.MANTICORE_LIKE_SMALL; - public static const MANTICORE_LIKE_LARGE:int = classes.BodyParts.Wings.MANTICORE_LIKE_LARGE; - public static const BAT_ARM:int = classes.BodyParts.Wings.BAT_ARM; - public static const VAMPIRE:int = classes.BodyParts.Wings.VAMPIRE; -} diff --git a/res/charview/alraune.png b/res/charview/alraune.png index b644fdf49a1a36e67fd9f75e0ef8ac028dad3991..dc199331f6e085983bc5d1e701ef159497950284 100644 GIT binary patch literal 13234 zcma*O1yEc~5H7m7FBV{d4Z67d65JsHf&>k^XmI!7?!h5QfMCHwaCaxTySq!!g~wm7 z>eapX-6wTwPS4Dd?(>aw&vc&%6=gXbOfpOW0Dz+)FRk`U2LJ$scy!d)+|eb+?^l8f z`yeL`c=_-6(OQ)FT7%&ruj32=0Nejd2v8Jt$ZI8 zE%C`?@g&RJ<;`5yUVDAhXWU>21p#hQFg`~>4BG_a_jz$nH_pKkQ`@ti!I1^i*}?UN zEK|hM^x9E+XKq0uQQEO=qmT5*$O(5niRq?kIv+O&&7)0B0&SzKzR;47eBPus5hox( z&y{Ppda+zN{XC;Fqp|Ye(S9cQZhY)lMN`fr9PWEN%Z4g08=;V5)(2u~T(j+WWT{;{ z=GeydBl|e~`py=+&&b^|44GW?&0pH@o|CM?Xo#%3KW-f)K-XD&wg)zBW8t&^oqhdE zJ}^VTC%OOfkU~P#M9S~{ie!F3K`fZ{sC;@9kJGH|H zoqk_Cp?*Z{a-;WB^Q<1p?wfL|>Z)>E()7fsgHTp3)T3zUw4d0|FChUuXq8dWKZa_9 z->@+l3#FIcG?7S^3e1W`i5!u?iQzYNaNwLfUXmt5uCi=!Mx)KpP1cqr5OI>I+@G{rTmM!JqoT zp^@T#-<$I}@XB+>*Ut%@h$SsyPIx4HRImc(l67RfD?(frcRtwl1lGYRfg-lSu6Hzq zr1iOnhc!JD%XsXSnTLqW=!9*Q14u+}h~^!@=&|Edp>&IrmdWJ{4V9HEvXGGg<7P)H zA(GRf+R;(2^Za@88CU6}1z9X5JiUeAqjc9gV3r|mDNbuJL|fJ&Ja;ArjiT>0jk196 zhh#EG1xM&lUZG89!gbUMzky_%3QJESnY~KXA%5Xc-Bo35kNcY)L7}Z*9GVFetubFC zmU)(Qk_azI4+{v+5_H>aUFyGZDYH0QyQ7Tiwe_OBfVtG-dfsw z8RIwRxWOA%6;B}FFw<+zwm~HDtiEFCC?On`tDp_5A3Uszo6GU&Qx%7%fg@j=Bf;39 zBAInaBGWFOv=8bbZ?@ZNfKh$tfoxxMkGBR~v!m`3LWIagaK1^L-dQo-uWswS;KEb2 zVnipvMaUx(y~w1c%uSwhI6ruMpP@^0xWvb$4=Rq_aT4GD%gqx=JN4Ltr&e+mjpOZo zse8EcA8M_g1ALEl`|rSmX4JEZ9tlJr(h6pHq8icM30+;83^)Cq954uQ0W^}EwT`j8 z7T80Iz#+v_gk2#Cfk5dp2i1mT8M$x*gPP9KKLxWhJ_|{@&I=rlly`N#Re1PzrH|@= zwy6B>Q~h+D{Cysm*4#|N(k!ZV?%Yu(+(0RR#+^MJdP;JZ9%g#0uX{pk zj%8AKMXBLhw>#F0jby-#32Q>C`y_Izs?YzmS``qJ^R?&3Ip=yX%9v15e3? zi0}eSuc$a<*q0sNFk~C+8jV{qPym8UK_oVKgzJ)uJgOhC2!0uPBI5xu-0>^fW`EdO zZh{%Pb~&bZD!gP6M2!X{qbu+ov8Z5M9EH7PJ*dPfZKdRA%?B9{j)25%ZZt04)BaK? zYmS!Jk=E<-_=@9XVcR$i$PSRM%D^xzL-<9c1Q;tfr{QN`1N1JcfV3(Fk3gVXHL|`9_nf`$I z4HG$>9mK5BerX@^BK#|>#aU$;Gh#NAWmTO7_NzI?z;BbZPjYN%Q`D*vCq&m1yUHVo zKck$b!Zd-{szlt;dw}j;a8sbhzCt7nK?2L+7mSFp=l#D2x`tmEXmnM79;%&ky)Ave zwitxVH_8V%;qftUM$$hU{j#|E=*@reqyy37y&wST#>6q~+2QC9ZLaw@JP0$zQKzso zdJV(F$3h6sT!p|k3{#42p1lLMBy`EW?cZ3>?Br0@B%5-VA$H6=a8&&#t@38&CXpab5ZH1sa4`lQC;yk{CQ3aTg!g<*X z@=(t6`fJVb-d+NgBUx$AZi(518$m?{O||k<(2&|e3B^#YUZ;(u z?^#l>-BjdMmG}j9KtvA{-4MQF?XVvbXnrHrNle_oH~`ZZ!LQDvYHNmwJzIaA z_81opha@6J(Nx1&l=TGnUCQiTUzpISlND_~HlibJHXxRNowqy$U`ROE4dc&Gtl_*M@MqD0(82tZC2oNM` z@Tu-om+bt+X~fZi1PGhKnGGK)S7xIDOpykwc2MbCBWhWJL5Mixo1s*eZ|LzY3fKX6 z@P|yi6~9ct1up~)oKQM;NO>Lqcwl7o5W}QQLMl3Zs|cK>3R&fy)y;$)pu|6%&x%8H zR3b(AXYw-cjx=bFS@X*DS7NT+b=_P&K2j|xyjWjs673ol{TpzAt^J3X#O`r6r_L40 zNkTf*wD?q`@7{+G(xAgElWkGnzv_k&i$NJiG{*w({TXila$!#kV<^Bu;pL zQ8S;W257nYE7p5*Ko8jV6H0$w@WnyB0ib9Ta^x6n##N#dz;0zE>Q8Dh5+n38}B1983xUiYf_tgY2f z(7`A`EG9HZEU>3a7gM%^9S=FQ2c8_nJ@r;<5LtG-%R=(q83U0!FwdXX^eQ#%8X-Q2 z+c^*1Y`&J#bB3Ni@Ug6oIM3(jPXHH+-1z#~`+Su1zHJL0Vw7VCv6Wwm$#8xT4hc0$ zU>=%W|8DF^3{&?}k@sgl$~`aDL{*B8MEF!|`Ot|4IR#2>9Fc_Dw*P+CdhFk~uR1i~ zpNhAp2%CMH6%?>urEugzXjQ5{)5v0mIi-ACx0@}52cbKrqNW1@M!IvYq;*w<1@c%8 zv+hfY{;YzTO9_c*9L~?)U1_l-tW{f18Gi;6it+2l<1qr=wnIQ@s(TchgJYP$s(#;+ znaRhQiaZpJx|}MkSO}yu0%&T{T+!T+i>o+b|5k1;g7bWv%kB7v4mT$IHWz>$u!0Rv7)+I`*iHyeD zF^693X|G^>3CK^QQzH7^g_!4gF6Cfmxx;s{m7=)F6F|T%`Vm=)0%1aAfZD!6u5We0 zEFKi{$y~3OZSd;^5)3)?gb-h0)`*`g?C)_wH*&ZP75Czw(ZSsFp;eXP@hmB1*;Rxp zFQZnxIuB9;@iYY+*gu|tZ#s3+Kds+x!{o2u6nw&sAog_dOkn?~yh-`iZtsRSyAU&p z1i(~+oF?tBvPBz?fk(h6uC@X2B>3n>kDE)tJ4ghC6}r1g;ht)eP`k4P;0?zxG}6uo z>}4-z&8=DYJDw+eAf)nq7jTcrO1V_^2gfOn#ublE{?Cap<%nr#g%|@HG z=q=K(?X%X&!yx8VuE3rn|8qjE#^{a4A~)-I5t>L2lREDL-$tHkoh5!-DiQl$`CDyz z%$X_!4EfNVcZb_|cbM*#xC$<3iQTujC^17B^XL+cKIKgmDy!M31enQd|z& zpBDV7oCBx^U0fNqL~{t&RIMwtr+ogzZUPda-+JY?Rb?-lHdDvL=Y$`;z3D(!N!l2O zjy9O@e}4Y{IGH7t%SH5>3~92+%7V~phv4+Quh7mCoS-N1w^yUA>)VlNB4*mpt6;U@ zZpK-G#N*urtfwauj_;9M&Tn-DoRV$+wO-}UY41r@a`A!l`?n$Bq%v>T9<`j2f;b;d z(dVwH5i6u>+Gv6;*VgmkcKT3Vi?!qK7q5f%ZMw?w$Cync>(^(iQVf?Ftaqp(xbM)# zJeNgML@#v~tYl>0mRd|2+B`6|-SnQ2Zg661^vpfOramV6-4DcEuj5gxp3&|=D3F7f z+EWs>1A1&|w~PjEq(U`v^m-(!2m%FFhlsm1)bN9~Y2GOFE-L=WSOL1@x84rlNEv(_ZGBk575-t_Q&vg85Po9gAR9~5m0+E& z{np@1NbxHe1B{PXhLQZwA48p0 zqIXdp!$-2U@qtwnf7-}GytflrNF`v%krNix81=rF1D_Q*%b;j~doTTiOarA|($bUJ z3ds^R+l;4;;KTNiml1yR8yB4N+b_1&kEU9ECNLBNpd7sx^+ILfr>g&2r13eMUR|U? zHE+@Ik{UV-N8W^uyBMS!^^$Uvq4mf5HVGr-bn&&^qgS8e#--a7Yh#LpvqSSky{7g4iC z57QI-DL>!KM0FVd!3DoIzc?l$z9>*`?8c6FnqTLEO=PY)G3RV)&2~_5gc#+zi>Zu!r_&y9vkwuk1L32TiMQ+@?jEI0tB9D(fk57k3ox-eOUBam`sCXsc z-p{>{Qyfk~p*d1!)0u3N)s!=AKHc()7S!c_ZQP+u;g*K!;{LVMgevga|86qj`HZ}tBXn6j8{R3!6P)Jf!u7G9xm-hSoweJeE;UJVuzo@il&;h``Jq~u&aAc}(E-}iS9Y_Y zC>Yq3oAIjGM-CGj8YsOyQyv5ZyF-9o-tgLa<~^^#5lHT#?6>kDQnrObzeEF+VPLwT zrY?_X@7GNfWM-7+Wr^7KbDE>qUUSdfVACad;}-W?RyQmzcwSB@njQ8ckvX{e*Kg?Y zEkgXfFAZzC@!$2+?V(a7b>p~1v?O8C`uO7P(MRF#5&lU<2N2(#URF;m=fJ35%=R~M z&xmQi;(dtfmU@`F=Ee^u%5AEOq#4kXBCah;?Dnn5M#WLrf9&!Dx(U#FPLZb-T?f%Q zxjg4w(ikwEqcN-W5g~DtQAH<#K^0B3o}y@uH0gicxoC2z$0p@OS=1xyrKMOg$(@jr zKlK2+hKmi}i}y})(2XL?uWtAC71n=DM`cksO);tVJc%p{m@fYP`3kr70^hZv+U@h{ zl%4QI@qQpvWD(EqdkSXG_(;|sr)ux;{6`m;SHrp?T&vLe)rgjtpmual_~3v?wGENU z;Q1B_L36Z5`bpY~j2^KZ1fVwCqd-P`HQbYb>WL&MUs~qpeRCm*kYpu@0OU%EzuNPV z|I@7he<1&@7SQotZ~ni?a?$n)F360QcJE&BFk~BuI=8lAuvF5IK~Lz$t|W z6`~%*CL{iPVR=u8-#raA^v4B=DkQQh3Ik6>o;yJ8u%m$jk0mAvP{q#2i$gMW9)>F> z5x-3y??X4^mffRwD`@}tXJI!8H0^PEF&W%zh^-PYpY4Dr05H}XGw-(_JZiIXTQ@?* zG4O8T&6H-QhsuWx;z!*tKfVn!LGzD~@ouT+M6;S}x!$7?F$`v-vD_4iOI1c&uP4MV zmni+G(%kCZBG~@hG9dR>R~0}w6#w(=2V_Nvdd7T@iVLxObj(AUZks{}scVDt1SAnf zj^2orkf2uRToWY8dJB~sr(r}^kf?E)QtPgBcq-V+#_eWJ_0%CxyrCah$hOyZOwRh( z-}`bY|1Ya^&)~P8A+~d-&2S4nD$0yig*`v~#vtscWd-B1tM|q2yupYgccY@}E|pi} zlC(wDiV}8Lg}!~VvUas~wsNga5ef;0RYNsi-l|SL_M8r+oFo}RF-Iffpqd^5aB3f$ zmzQa5qu1vL##)~mrirYCUx?u{P+$B?G$n$O25fi~7X$`(Uo_@G)!jzuNB#)4OfHfr z$@5!agb~{W63=pk`XMI%c~3c1`h=mqt4Y7+?B~q;c6Y7Mp+6Jq#nJDu3!6@)PBlaO zhC8Upq3RBfCUA?*%$lQeA4b*$IdVc4Z|3FSY|(N7I%3)!0UhP#>bznCjcte@NMzQp zs4?Uf=nw8ukpOP+tZ|cHhg{jW&l7kvJ}ja5oK@#{~9`vR=NSCGiqok$D9TrY3kE zH45No*PuTXdUgbTAild8oFR(rSz&1m-vRd=(;&R<1TG;g$^->0PGXiz>Hv&og$Uvu zNEYroRy=NkDRUY{Fv~~(#hM|M8K_oxJatx~XJ`owGXNXJrnyh3V5hn4SGqbnwE0&x zwJb$^ppJ{ixA$3`7TYxUPPj@W3%OHMODJ-v42|uAk-wZsn}I0jLc_I*7g;a7(T9WB zhIcl}MS4BTCRl=nU|EGTnUei{`wN}^t_)?r-N_ewDL5}9mrXX_HDL& z_V}I}2-6&wK0TdY$}b*qeBJNgujPbbL_#Re`|jj56`G(0v^i7RlsE|cIhIsY=mY{K zEqd*wJ+KZBZCU7M>zdhP9!`b{gkJ| z*j+7oEb_gJv|F!pU)!#3ojvZmds5V%YxIO?P%(v zc^c&>=LnEW!@=IKoy!4e*QB%u9lv?$+~j^|wfYW3h*xj>;uE>bUY@XxZqt_%;Yzdj zP8GA&kEExc!2uAir-tfq1jp+xCO%GkCS#_gsN)B{S|1admyL@T6`j{9)8pFE?zc~; zv7o&;aR-$1^bK%09"xVM+^IgBjwZvLQeus)TwoCf8+jt_V%z)4PA^+g#4oc=By ztd*!5?JZ)L83tN0O-cdd=(Sl%~w!2$9s|y(EZKy%}tYd>^|ddm^-yJBM#RIjQu)tkRGbWnP$MSm9QF zbd`vnDdnb+?8xKCvYP;Yr%Et}8UzQAE#fgr!|%rw!ug4q7X?W48oqs%C}sG!2@kdp z=|Y@KM-6F=a)9pEDoS`jB0m%nR9x(gef&2q-&9aSkAhpu3xnYkl;Wu4B+MU?Hzw+c z+r+KW?W6_LiGu^B-)crwaQ%m7nbZdvftjD<%tts>!cq(JcP996cyd$Ic(h~Bu&DUJ zdM08%g7+`(vC93wI1F4(A78&BG2R7yC|)rY73s!rPn{Wblxr{JVsRa6A#bD7)r4+Q=*Ab*V%>zl`#9RluI}$)=D4XCUrerBcs@{UoZ%Taar=FRgy&HO zUB~rXo_>vleUhFFuJ4H)wevSc&xp@tb<5GEL}buNbzq z(yH%`vCG(?w_)%6RlGAyZrg904?Gnpy4mtOyYl`@EH6trFia>d^O1c=jQs1lx|a3u z0~FAiyDq*Tuo0U1bDoN8L?U{2LqppRAqBqSb>)Y2``ieGz(c}ll!X2YMv`IDI*O0J z6-4y&LC}3Z%5K@Cfr+ZA`GXo2s5?0m2gJyn@Il1J3ZZJslxHe#ocnGmGN=lg8mue~ zLlHAdij700IGlm^UlbcVx+EqLd%kTEac^M5)a($GV1W=5qTwhpZj3PPsw$ICwB|Os z58u^|Jm8vky`L6_tQIJR%)H~ETx{M?XlFk%%bou13vMt9@d)sKj?)>?Mc1%0*6iGa zMNn(kF^CGPETm*)>r?3NJdJ*A7XCU~+Z#G-7rBpIJ@|@<4*p z-^-G=M9&a9ausQ4q~!M->Z*Ko1>cY36wn^m$=9u-Zm{VfoC$ilay|l-B)0nPWO?s~ z&9-)W4C*nzy&Z4Se?t!11w#PS3L5)yYc(srG5$PO*SeKNiz2(cb3{D~nfnfZLVkk! z#kt>wYwhe_q{Cbj68=g!xkiP4iQ=@FO51F#e<|soMw~bIYL(>6$e{JhK(B49c?-bv z^%YnZYa|0W>?I)SFgyXUOHHg8CWe=s9I?wybdM7Wsu86}a~&f!m!1X-F1P;xB$4Fa zh``izg7Lik8@oiJXYVmHo_q$D?f2S+K2u$f=6XEW5HoTR8M#Q6J+^tZxBRw^*m;r? zg;duZCBfClbq#WSmK#i)oW|Muzfgq;>ul_~(>^_&20K4>A}rsdq1BML%t-Y8Xk1H+ z3d(?&X&O-b)@={9{Ke%TuK)T6C5BDO84>vSiVZOjsr1w58d4}wtjDz1lNGHVhmG|+JQO50QZjNS zrD>mO3@f~0n3r*I*keSeLd`$T5TEy0mc>2k`Ab=74xB!@(@;fB;3u)Z;fcAdUHe2w zIcBX|G5WRbD&qj_ypd>Zg&&7f11D{bC4cAE{b&2fGpF^u_&z-*nKZLEWa$W9>;J4| zl^t)w+8Lz&A+S0c1|9f4oyi<9H&JWq6yPRWA%!fIz9r6KDCmx71E)02X&;1W>s6jpE@>lPZ(kH$HBDUx0-12G2R@pu4E><0E$ntOhoK?8Vsp-m?>U&O@Q$> z>*JW^m>O=bi!zwC#L4Cnsgl3Cpy6{GtnokfIkGW;3ARJf6_Mnqq=|`)@$t(O^!7cK zL7|_xa+4z9P%6O?3Kw`p5=Qjms^II(gPPWG@_%7yH+6>GW-WcoE*8R&YkRdipl(ns zSyc^$EMV1ia+%J}jd(}FtI8epD*pYQfm1P98?Da32r&LIgK{}?NSdMWn6yBo?XuSO zGb+>fM6pw=8czzboaIzcOpGN-Uy8lS)55?pzKZAJUiPF6bBoZUIKQ}(pO7OS(cj&V zdk!BuvaFNh1xKVi=y#{I$ol~32y8x_TJ2xycEPomiYuC9jK0Jbs?Tvdiy;Cw1fznz zvXt3lXO-AP002Us|6&31_9}XtBqMD7ElZA!3>TfjG_)#C2Rmi#i@)s-v*rcv+D>my z-gd_JNRB9L2H3O}h}ZQGqZ40z-Imlr%(J_;l5-52u9(=N`QGOUNHXa1KFR|AuZ&K$Fc=d}NzknPKnf!M^(tEjfSg z%9_~tLVwB;fi`|^aO6w>F0dEQo@ur0*4W>bfdcU7k_7JX58hvvBNyj_*XyLYGswL%4mI_)3H9ZwzBJfZwK#bS ziZ=d2BtT*w@;`gtM`gAeRuQTs!(GAG@Hs8OEvUI5W8rGnXHQ^5ry21&&E+$CykxPr z(BPan6dn)+BloahaHUrIdXkM^b7!6^k*?g2TBoh8_xIH%@`^pe_bPTXrw;>Q^cIc; zKoRkppC~b8nTomK)CE$)H?SQYl1eT;kbLI%0c{vgp(mR1!=oYaX`| zsA=H@bD<-5wO%o1<}@#CYKa!jaa^KjH6cvd@T-m2;-jG;J2e3kM65f#-it`&q)LU- z3$=-rp=Oz>hO9N^za2s>?N#ks-}-$joG22O>?1+fp=thR;6Ek;A6n@91wQHf74%RI z4P;YJz}C0xxKtFMIw4v19b*xO{On8sSNY3THzN%`>bg^&fDkXzniv#8^|Sr2RH38> zbF;t5T4Tpx=_`>T(ASN(Q{y+0@W%m!KZud4X%_tT;|YtZ(U~&1(oWd82nqhQDE_+` z8m+_;eH&NSIVPf^m#1|8y6%~aa`m%M4J^2gG+MT z2-s{&={y*7?6L85Z;+_+gfdT2ly8bI!_P#-Sngkx>U)WDqJoT#dAazV`f?t=JT>MP znnB0EDo$8lHS$`~LwD=ym?`{R?ta@oa(=Z-rl-=)&6=$hD`1|hjOqog3sj|k4N6bl zyp`xW;YlgvGhon?VoF&`YP|6Jk>H9aIxkRfi%LA(`@2dobjrSL7C|br1rj3$Qt#5+M4Zx%=c@5n+NP{FDhE{)z{9v0Y6FKoBb&1eYhays2l+g zy+`0ITr<>EE>Ur@d5Qz~44UfgM{vKj5ehcAe`ogiVb{lc+4N_Xb)LB1K1+^%#>+_vsu-r{n!;ukX;ot88 z-V~3Jye-w^mA213j)ph)wHQVBztM`;pvnqf0cw{c?1V<>mND*}q4J+X$5QXqpX6tp zecRnkBo)Tie-lRql`YtPj$8Bab6-sCX^;U~4UnO~bXT+?HsGlz_NOo~I*YO5b+A z86JZN4{QdYW?l&&LeB)!O?YU)sd8w6dp|XXEu>;(L@$T2cg-eG=sygcxA3P zpkv0l)#JwA&$h&0h1pZyfS%>@{NS=#3jnCr993+qJN+nHu*5jpDiFR9LzL!hjY3w~ zr>ft19{1voUTtxIvA+1e#ZNVGZS42UPEW*Y1B}^DKYJg4j6%Vu-+Lv$IJ*mgs+a+m z&Ym=y5!Hf;rl%330jMTL@n262!9k^KG|yfFCbaJ%I$SWAOJ= zBBFk40Ej~0dO^wH9{aUM*WQ(}(JXvQ|r=;Ky z^A6v+eKhM!+l*`H7Z#4**f8#1RV<(29QO_~*2IyT>4_}f@%=F}_FB%hPs8|^^L+oj z0rFz+A9rR7C1fCt{hIci=&hX0urV;bWOeXyuHLMyjxSo8%h~``y%$DQ$u}DZ8|8)H zw2+x_@yg^WKw~M(`ukH&^%_7SVtDr!0!E)Wej82}j`@`F#i1^Xpw zSKltMl>&OId~9KVcD~J7FkO53&*js8YB{ zEAzDeB7(yFbbe0?`vwB3``Wn#Q+LgNBj>Hg$Np?y}G7YK$ z)eH?eZf|ctGrza>;T9nlyEo@ZSuV|tS%RNZK`4R|qP1^SOon-rG#)xYQgcG^a2Zq9mS$yqZbxx;aBJ+jHa3r4 zxulYQqq+7?gjsFcyM?fia8=4*Rwj3Iwmd|@KZOTliNMQ?LBe>r>;B6_Z&Fa2%Izcm z0N45_PZ(v>DrrZc#?+)_D-N6bx|S=HGLy2mpp(&@H8WzpyYzh0@CDJeUNhg#T;|ew z`RyOosm1$Hhd0*jutAB3hljKRybq|W@I7_yd(WL4%)du=Az*do%p)OJlmtUWLa%d{ z{)!(?R&?}A>187<>>2=2e?YfMxQv-%YXM@u@eey+oQE;`!uXN)W+ewsvq|rpE+rZH zIS+3(Dka2C+J=V-^ujTv_Eor#A4uyL!&c8#^|^&%QzkMJ;E809_DT0J1^rJuI|eFl z^~nCu_T_2Pg{hJe+|w7h=13-i?2HHYMOw5;C0MnibH!e-1A9m*3 zj+yEb8IlS&!`}UM#wRoEB|kT;I=HDD%^+A2GM(EkFyU#6yoU<8j=SgjYFAM5HDgsf z*`O)<<8goQ_l%szd7%uKBt!UD%nDrG>8%G(cmQ-lM7f=E?(O)|X|(k&vTP%nmZ_JB z70KVu%q4PF9rcK-uu;bK^$dPLvR{Y4{=AEmN)6?7a04J&pmBQm#!Hsz{nD;Vy8!>% zMN3^@4!8m}i<&=pe-~hra$$|^tNRiU35~=IC9E`@_}Z>X?VtKl5Pax#81u~aX-)&A zS>b`S6Y)^gz8t4uVW#MPld|poudXi%qv_W*^Ly6r%d_3385XvyxjFb?k%|rvM)S*V zYDW8QUouO>^F==s$#F~Q5lQ9N{X^ESlSHQ>GrjJQD2YZS~q7-w`(z>sK~rSS4`k^zF>`Bt5ri7 zyjgYp3_ckuiQ_7-0y^8-BLnnA9r3??*Wzt2byH>wWyk4cxX0VTLWsZo{&T5(n9`sx zIT7CA!aZ~M&=lry6X@h{e9o~p0UqbhVDz|Yx%r^9S67$kw5aD2hC2S$60d0WRLVwz z@F{AKWwqWziATA`?M=TS93Yb0^H;v_OgG&JJ{e)1VPxuje{`WG)^U#xWC58ywVAO)EcS@X4@auL2C$|S- z_gAU#=#Xl6d;rdH(GTPMHz!|9FO7@c8A){=H9l$ma2kT>wY%V8on~ZTaW%|3>u=bM zFa#(JO|kaxY&+6G^$dFdsMFHYD(dqaJRcBwTs5xIyd&=HnsLpDc?x>5@P(IC1g#ak}cf0A{cEbrW@vwcg6OT21GDlWoA&hxWDX4`$4ZGt<^*FrD zQA$g3hG(mwUo8^Ts8Dodw=cz*9a+$m$OHV%$j!Irvp2?bP=Vib^uC_M zwATI=LV3tRH8ZCuLARV78qpSoZ+p%!tpZ}0PRx{N&>%6;XtOE8A9;|YQ)@S@awI3y zZm@Ixhbe{+d#el#u~-@$AEX#=xavJeSs^3i3NuLd5{B3!>%cMyk^UB!z4xSp36u3d zdGF=tHDTBDYB3-%m0p{ip45KHIXh{?puZn~7+<;DcVM`y-PT8|++6;=hfm70Hq6tv z{i}(2#6T3QzM{B0rgW>p>lrnz=lA+4={$V;^EOpMMo@7o&Zfh@LKz$l5g{F8PD`3* zF_vJQad60(P8%Eh+XVXN1hi>Qi4HD+)(`jz*r-tBapr~?0wx^16!_m!)Vg3JCL<&% zF>eV4?rZa=Cpo7kK`=yfa5o&%)*0zuW1O`<97$3$p!Gu(5^7_QCdXK%Siu?%GYoAt zz&36%->VhFtvVd%23!Py!Kp|8^(SySRt74EUjIzRa|_%Kv1eyAi!3AiWEs zbVX2#Y~1~Kw*0%Zvzf`f%(?C4ymQa_?)h%Afu1G>DGMnG1ftMFsTtv)Lm&`16Gnvp zwfjS)8vh{iLssLQ7&sB*F+42ijNJ2&Cg^6x^lUka&@cobs0pCX{=W^mb2OBkKgn^ z`J%2P^6Rgg>8{zYiiWaxO{<45`<5#XzQ4ODUAdNr=@{5&_y(X`V z36+ybzOOi?SiU~r&Be;-MgUd_MbJ})z4JDIcUYB5_yhU^4hBBO!tTcL>&=mw5J5H3 z_0sCMUv;1H0q!8Ro|-rA6f6X3mE8X4Xfk{!qQXM~3H4V0N>Emh3qKU0h5Rg00Y;}n z0|uWAf1(M~F zCf6u0^;|5s?!57aKC@z;HJJN(zQ~2ww^bL#95jLiW}R7dlN1qjC*sYo$BOiky5D{7 zDAaCEgL7KUFt}l{)v_$=|3i@bgOppvjEd9b()=I+*3hL z5n>rAOFd2TQ~Cd@Bu;9z6khi`N9#O{>zV&kv%c&Ew%4quDOH7GRhi>w+Z{ZqEZH}V z&PKi&3YHpVP}J$o?aIPSkxiZw_~k5$2kCd(3`q9_oldw!`_2Lt;D=1Ld*h~q-&Q60eQmn!_6uJ~5GT zV9c_8*Bgik1kz$P$}N?a=ykp(tCU*ze+IjJSTT#OUY2caRYy+2V7?3rwCEB^1L>5Y z)1QxDdJm!)!2TrI71{D2TaUu`e@AWrR;umEF4T~X4UZM4%8lR+blq-MqvGG<0>PJ?syiKlQ;0z+m1<-ah*kEJL=C3`Vi(^~FtP{S!R4<8&xR?>eP{%)mpjN!aQ29d%<<;OgOg-o~?U$YtB zj+Ep9Yk>h!rY=GcWdBu}MghY|8ZXDGiZtSc$wfTYMT8Knk7H0zd%a>`_)&9!|lnVMT6U7VHuLpx1q$ z8}F6to|F1Y^f{(WXa{0=LsnS@m6F%u22zfQ6495ub_0+CPsVjavQ!Rzc=fon=wLY2 z`82IBy561?g}1}HSiJy1*a@zHa5?nYfYP+0tII-ZZ^q?Ad#um7g$gBPv(=GoCCWyB zDtYxFSrZ@qd2F>ng;LL)8_7^eHn#qh@dr$8MairQE#64FrgPnTnNR{)qz(Ydh9J?? zEk#;|$oOAz{FMxZD?%Ey6$;NmJ)gNe7Wp6WL9(GhgtS+tGj&d;1tE>}rc(WOGKGL= z)e?w%QL$fNY^TBr0JNalsq-glu^{yC9>$}C_w>x8AcmY-@789>`4@LU!viN;S+>8}!LI-S-+~`V3QofX_Y!Z{@v3D{>-I3rBu~TJ&UgSQViS#+>T;*U zp`Dz%E6lx`0lJ-4Et|Fg-%1UZx1*CmFs7xJB_un%JQM*QZ+RJ#6gX3C_KX zf}x(R8%P;6?A72!Pc#Y;2rmZv809B;wd+BU`@hc!2@3Cr?ss)CQlT0FF5p`V2F%Un z&x)l+jO^=6n?U>0C>&$58ivDElP^kL-Y_(8E;!cC`!sAUFaRkZCNFFQ6sEsP{6Qg? z(34IFd#tlvkRJo#gOYC)@3T}v`wZDwRtNoxscG<@$z;Y#FJgRDi?v0vb$6HM!|;J{ zJ^1Z&2u)s*L8`oE{&DTK+}hht56u~GuWRzsqkP;x!S706Fe#K(bS$PA)5&A zGkG!)29_)cY|(F?B{6hcdg`~+V#Q8})?BlCXjhM(hjwQrKE}Q}aI;y)O5XJ>f9Vc> z?%~_@RZ}qe>LP*FT69b90(#K*V)*s3DnfJ>TOC{J*u;nmIOcstpPC`a)N1@a5!;o6110w@}{Gg*P3GGWA$=w z!_VwS3^aJF%29&;Yij7!Xc&E>Z2-fL&-YTYMWCitp4ubSLN3#6Wh@Y&F9vkBO(tj+ zq!C>b3tdHGgoh)>9id_8D@|$1>uz;>X=`IzYFI-Bx!2YGoH`%maO2Uh`01S)mR76A z0MaBuTs1z%k%EVjY#wPVC`ajM71^-}W&;>1PUiWZ)jUam+Q17xa~$)Ifxz1GfC`eP zJF91&CtpPp#}vPTV1ZB7YeS{>A9^hs%QP&-R;+_jj~65OiOm z2xWC2~r*i;hKavY~MB#i-f~-vUVg{__hU#&w^;MpU-Xp&^|wNohq?AhODT0 zRnpe1x#RpWnPP9nV-a6t3Ve3`9^GtWA|-D}5X1`0QPDnsW``aji}ydNJclvyAWy`}MI!l|PVV+{R#*T_D+s$T`f-^^dIcQzQH#UH4fZTRG|=aER=i(`Zy6N8mk6-XD#U zmJKj)O--cakr8!z`z2#H49>&cuPv=TA8H8i=O=0<%equ)4SB5;f(F{ zg`G#;)`)I)xeo)l<`q$v2Neknq_+KQfTfTc;c_3<4H1j$g~4yW^Qo$SP3A(6wFY8^1>z_H^$iGP|2-vl$h&Z&kKd@1{vNH^k8cQ$IbJ|iZpVCvfU!KIe+2;75sTo7LR*^hSU+dli!2jdQFvkMf_COQ5&Ct@6^!Ql z_^?DA?=tnNn8=XZFp?4^{EPjg?bz>sCNOuc=F!#$IxNi{tDYJdRor2Ab1KX{d%D*- zC8&JmsGDklIpQKL7nNZXr_ytW{?y$RktlLESjotui?ZOm&{wUEbc#2+v$hyG`Kq zH9$=%!iI*U+<4z* z7`J`>XN88YVp5PJvreHRS7}?>blM6T#uSbWld0F^)@Zp8MX1Lf`BhVxQxR7&*o##E zh;b<_8ROVvwiUpGJFfK#U>hu!=WI+(4Auf+r;i@ng16w+G?ch_>7b`|0dL$Gh~=_h zLkp#*1;B=Kc|XzBsJSzauu@cD$s#P*Yl z$<$`x!q=dsg0})!-TmS}%+B7$L~3Pa?uZg1t=j-@Hrm$Yg?$5M;YoxfG9r*Kf&k+zqiRcC^PL##Xj;&AX?Td96gGdS%mwgP&-r(qOw>oX+O7;) zj;1|nuB7r!*5bD1+6tYu`d%ef&`s9QfJKHV3Ff&C^IOekF++}2r8|N@` z+^&ceUo>cV5_80RJ*_yaJ-)$<&z?{~gDjxICwU>H8fn4rVaxS)V%sW*z|GmDVPVLP z0)@v_e=`bIj8d>-01aDx5qOGzRd>ms^R%eNdbS8Nrx zZ&yV+e-SseYtQ7T*=o252~vG%io>U|-kk{H_V@VU=3y()?mfxs9Z>hG_Fo=!5cJkQg$=&Fjp&CBj?>L(#=^;?kgsB?{-lzGk91ODD4=NqemC36>$Rx1omH9 zj2ddbjb}KK;W3>PP&zkPPeeN=$is!tt3ffc%i>8^p&!%d1Mo1_qz)w;T#;?dPYZ{r z$lw>S&nlLM_b4M_$)x`tMi8xclF0Vf+J9(yhD&I-U{4vzFM));h;ZB6Ge6XhrDNIzO(r(0Pg##`u zH^E|@+7h%AU)Byeqn>9rQy{Vio|Gp(-H~c-6e{yxNd`|iW;pRNXvQ`t;0=O@{@LVk zJxOi34qVw{?Lurm^T)7*tUa^?Yo$vKV zlQj{9geh#CXWqDr52_Zv7WUB0^V#P)GBsk{a#}XAs?ekRQ&JeW8DO{YT3-^IfZ3LX zQ_{3jE^(UQSm}@0*&>IksJ9#wydmYDbgNCrpWNme9ID}P0^(6Iz^tI05AY#)+8FR` zJA{2POm|2d@F4r*)o;%*8gcQ#BN?b6BW@LXhJloM#~)))Urw7(vqoP8X=aNdrS?D^ z5n^?*M??@Kc2o*NfAAxfYTAn`lBX*@W7^JO{*7t=+P=DS1CqqJeo z`CMucdg~Y0mo3sAPWbU`QFK&Lgu!WJ=lPkZdqy7vFp|3A#%l=plWKCK_6F>khCOgH z5=081``Y~`zY}x6e2L7mUc))Ozo~TkZ0pyn-?X!G_G28J$`}2j&psqf(P*m_S!e_4 zy#{P1B*frJP@#F0QqLbb!pvlP<4m$c0}L2C)VcB{G0O(1Vn5zoVOD8lig=lTl6ko<@ZftMmr z+7ISe?bLr>voXT34`qr8%{t&3#XUqOx?ug zLJB37OUU1T^tw-Vfc_~n2Kcii`7l^kxUJniUcO;mWXr;1BbbRdQ|b_*-JP|;6!#x0 z50-Ui4a_%t^Kn0%5+YjwF^ayiyO2GidgbtH5^ThFwPUzGvdG8KDLc|N@hC@Cap|_L z9d2()8m;~_!0~z|&<&K7PQ(?0lj*qqtJNwowp!-Vtmt9_@9D}e`5Nfxqikr7oEw)v z88PFqET+FH-ym1FwoNfU&W4)x^xS{79DXMB`TBq*g_JPr{BK92O!{Wy~tXqx;%U5QC4YFumzv@rn*-AY!z8w8)3 zRk;u76I$*B7m8}5GeuS@oF9@M*CZgr+%mSpVqNX_`lqe6>&UR5X~I;COl5h5Kjago zh>)){$vsktRzo@<|IYvJkVtUN7X#YfzAhJcKS0fIRvg-D{OS<|Z_Fha-({J{pzrsp zsyq1jfiN%D{3vQCmb3;Xa)Zxpg(UeOZc~b=hkrLWKc0!J4Xi% z?VVT!ySbAR9)meno84s+JCz=WZy0HnX1^a+Y?-OgwL%3v{a6KEixbox8trd!)hshN z47d|vm%F1Y-2qB2!;rGMF){app*a-22>#4}Jkt3`%!2ug;vlAwUS7?LKbt}=Srsz% zXK2vj+DD;{fK2JrR#+%b-GLr8P_exQ)*4ALVtHumk~KGJu?*_ze$DxY<$x9;pi!5$(imMU6rsCkQ*%F5A^RA4 zQcH~EVYU@6LP=a4`S=_nem?CdPn~!$8P^`QQdS8Wc0#lu>oqFye}+-}EoI7#uQ!M)Y~j zMRz6nk;`9j1SBL(9JKSgW;NIH*ALtDerWVDn~I(DUvs2=tV+zg{s;Wf|L6=S+R?$b zwNcin>c4B=MguNv?2#5gPgj&P>W4i4C|`7gRok(^FtK+ZjAwdwfEogv-Px>mwee~Jk zawK}*u{ApMGYwPw2VIS;S9>1duIDZJ+pGNWdon-KOyh`T^cuTn`{u*P$TyYcj8$%+ z$ri<@%a*@F^=QcgFWp)$qfcUIwsD5-AM}VQO@WxEhjK=A#NAyxG*no2K8D*o28q!* z;)`g($e{PR((gd5(tmT#Epc^$;d0+%w{U$wE~&%*_E>|^$x1@KPkV&JRV{qkQQ{&S z4veHMb_m!{6pOhu@3gHX1{2EGkmaCRQ~y`MRBqQCF`OxSlhrHupf+dT9&`K@|i zb={pTjQOrwDex$U@whH=9JL`FZ0oJ~^Ie<;dklGfdf9?PZXNj$n{KXg+RFz`hV-a@ zT^pg!1V(73bZBIY4Ra$zd)Ym{nH;HUg9@v*AI5D3ys^T zBcuBV8P~s@>V>sK^t|Qm-IClOh66mep2jM4mCY#M@Ju-FUKI)8#114UkoENGBX%TD zqviSRVtkr)EISTn_P|qD5z2e3Bdvi=>^o9X;11~Kn}*lFtJi9eD1x>n@Md|>?}H2dLUg2*5y#f+MZOau?F?iTj}35C?9^z*(7H&bN=!KJ?)Gr~08z2>d&1_hoSC zDW^H$tlvKzsJS~hM(?-Fwh#evP@<$o)^a%^85HgqLebf$#~}2Jk-(a3-}z-QNamMW z-Lav7OxuY~MZpI;L`pb(6bbo!ia#2Hdo;8O@cTREX%JqNe7NY9SV*GQV^4%CoUJxC zCu_;+W+9@fcI~8rQ^FaN=z+@0v<;B|d7a$ZgR#G_ZxErGdZ?>IJ83e>2{*oc&FjFu z%3l_c_JhM6krB5(sI&H!-GMssN4P4mw^H^E6Q;bgEeoDF(AzS72JJ&qOc{q$KF|yh z^;^hr^yQ#6BE{mC1-BB68X;QZ>CM)|H1N$Li>b`26?xPYnw(3^8h-%$8GNt?0BnGf zguE3`y70R%f0aM@1>;5HNPLN)NooPs32sXZk|?B+Pn{JPZlBs zg#3j(UTFAil{R#@+=a_xn9alfTeQRTm$d*B1KO>>wCNdP`>H`x1Spu5kic=cVfC-#SL2c1Hh#VL5BTNSde$i-r&xo{PL5fZl7!jr{ImeJ^0?zgESJ&AF(Cu77dZo6%V`= zr8tj=IWCUeM0}pvm6IVJXXajU=|Zx(ko5&eA@v;m-+Xxm^KOxU$tnbaXw3iJ1rW}C zjFV&B?&bl7-|5nS*_qOo&Gtz5Ru4g)YHjCYSRYT`mh_@)6B%~qo~MI8+(TxL#QLUG zXU%BP6Eit3YI5S(Ir^#0A4T{0)dO46#``bk0= zESKPhwAeh5Vcn`l@kKeM#i9XECGm7*Cb8M$^*(hl0T;OYujpmC9jHr2pL1Jxl>NXb z7>89uC%=v(N7;37CW){&y)L6~Ez~E#mqJGBn(Z9#(qU`mUY~_S5eczJpJNox|I{|m zcKVND?lT?zhDsc|@R9xH^Le$i5WIbYkV zYS!ttKIB4oldNwDqQ#NvJq{s?>q5e0+TR+VHjO6<7i~>xS(91`AzaA(B-!vs<{e1* z_Ir3-_xfg_hp%(_?n#|%Pwn7*Silwi^s3pL`Q_@!zes^kO#R?KD#tu zom5Sw3t|8<+<+x=|K9SAFpLZ=_32z1zqe;fP)O9H2Y9vpTnrWRm7W2ZAzz-Zo;bV% z1A5N1JTj?0)vQCYO{YZ{OB9f766Bohriq+i?I+x))`iXUuL7=WPRQuvys~By1G)-@ zs9su}vC8D1><8Y`)pfs0c2TJt&84rDPY3<{$FCw-sC|$^8-h&v+7{AR$}3 z=L@eWzC>xlS?$_ik$kytt<+ML;NN^@amoLPj7;bgGitx~rh}A<);GiQylry_?Qo{s zgA}1P7V@kaVPA*?J~)?qVTF~LpD%)bM;&$4k(rV`I66m9NZntP6%C1o?Y=xnQxUKB z;>p?-FL$B3kvZ9Lga6%_`c;FXO`ZZPC^J&x83pkh{fsM$LorF<;r8S1uV+jL+tir| zOvy7P!p*OGJ*Qt+Q+vAz3gZJ#mVM+~70>hb4%=iIUKJ3Ja>_GCE=RKJ`2ES|Jd3KN zy?3#?GPil}j|nr;Mf>k<-;e<=)R!FRv^6H_NIU}}a(0IS<$PC+bTrVAlbl;nZP9(7 zjmqO|(`HpCi`{8el-K?9pf4N>DdTs|CF%zMIJU#vAOm_rQxyrdB-+~G($+wtf$5CF zC$9IJpvB(zsG`s76hU1Folo$^5x>Q&<=%wva_T!iXX_J5l|yLxQ+;)OEhPTz(FUva zN^0cw&3?&}_wReA{c5r*=|wzCz|6+RsT;L6OA5E+jEQ;PpbNGnR_6WfXonJLAHe0i zau=cw8lNlq(?3|gvNZ2{tIJr151fW%SURQaV5)a~=YEG%5at&(j)BMD^yv!DZox^& zasxFZ_x=>Mj#86Gh+drTINtS5>-POC5vB1+V<3HxBet=Z=i}bbeo=ncrbQ8(!N0wS ztOwba{jZ?nb?@MtI+wq9zUw_-uujG+Bt|~f8IIH=g%Dlz$b=Rrkrg|K5^M9Ba#wqB zsSt3rU7hgy*m8Rx{^4=;_gEBzWU~Rc#ok0e=gkc6JXD{7avpRz#0J;L>&!JYB1IU$32~){RH!d*ha_j8pz9iGk(^z&(BlrW=CL@H!_(` z6PTo@GA=rtC{a4;oCLF~GLbvAw=!#oAG7R-Gug4l-x7q zOC(ZhK9h^V(E9rHm$L7dv`fkk`bT|rhPr%pIPQtM98?qu2!uXY3S$nx5lxpW(zhxV z@4Q^q>XM=I%U}_w28}0*{Y(IPvrGeqfJ-BC)x^SnLunC%I z9=Vh7qqVl+1~6}w)C^I3Cn%Jg_LHr_080)JVsML7~ksu8^qO6B} z8+9*PAI$*wE>B?Ol(6RMCp@g&p9#1n&)=@Dkb!nCFF)#Yw;kP*j*Rk{cMg;1uC!sI zkKEJMRBW>o5zZ*xgxDw5dw$hy#dgNjz}fS=ir)d>-w;nmG((NcF8yVu(Khl?Bx@4B z-8}bC>UV}qy{1rOHt$7GZ5BJsmYM_D35!TY{q2GUM~#WZm=#~@lPC55(5MgEnPBs6 z8u~j9ng6l3>z{Und0;LYpv#dmxV^dZG|Pg~^T*xEU1dADz1UTewJ)uciGiWL{3hd1 z2*R&EO8$@B=jD1K(WKlyKcM z!=R9lcx*s^vrC3Y5l}C=aEdGHf(Rcm-myF?-*nE3!vmGYSf7&eW4Myf$ftI zgaNBPMqvtFa+;N|M4-C4rr2aMhOV4l&E3{k|CVp0D)!V3WICI*U3XqGKG0q5)dP|m z30|ImRu6kH8N&*m`my3XExKqa2k#k~$q(ChS4w|*RA8?`=|eS?&0WZ-z*skdtMr0lmeTHF<15`dcsKmaAC%wicdPC?>^#Mm1bk(vPJ(o?z@=+ zU-j9Nb_6uP&QA2BnUX(al(F_}PCmkn*!sJiPvvM7tJ-WiJa&5%1h`D}nA5s2WHrZ{ zRRvK2)Y=+f`~ObB$bUVwp_jM&WqGEXun|UdGv6kK@MU%tJ53u8khmqF6MB6hBd7}?o3)Q> zclKoi*_~<0zOa602CMlL?Dn$qx4NsbWgb8NGgNj93X1ww$G8FYwlLg%C;Ln$&vKgK%yb#H z>3Gfb;9zKiRF~mrO?hWLS-iP?U2jdzo<9&r8y!wD-Bw0s>~nL|r^xE=Yd=g95!LsDm@gMmgY2>P>q^LhB5l=igWXce_urR9$I$>$g1GM@bi158JbAD z7wAoEkjs~ivj+&#ocIn*)}Q8@D9`M1{hzHCRNbPWk5U;Pwf_+8J;?) z;DF!MJKWW9PNoXv{mLU=FG5JYvrkr36xO_^)KSDf+F45jDKrQOJ+BCh z@fN1ILCmD_U|%K*Iq*57FJW_e>4SKRYKr@)Ytfm5bO32UmUSj>?U#;?8#|xeWaKMG zy9`FsfD5`eGR>^MuSSELDTd=mRH@nP_0WKsRoCW4E zUnH=xa{VSTac(bgeB3z~j-3c^`#H9ozE?-T+QRv^kzI3lg0^P=NyqB+q9%_7Q}-X* zS^tyH41kTCHa&>Q0jlR?FU%|0eDgrkG?qr!#;;BoUgYX7oJl3?7xq(Gx4i-q2a-5E zQ0p$?HqkvDwF~{b23F(lC19e3faCuK1@Pj%u+h^iW2qWA&){}h2+wO_GpSi7O9DhE zf^+k08ZPqge#I6Ze!lR=*QW}Zi)oYoMk>8owj_ZecO!EQ4XjdYNjTUfJY-0esNxyv!spG=6mA!S@WyA zOZxnoWY_M`&84h5HzjAUbaay1cZG17oZOd6pD``YfnotRbQ$qqBJ?@9*I~R;ChOXZ zB=vg-+HRadFZY#Q16}Ec#v5{Fsz@=jz6Do(BnLb6&KZJ`o{&}qpwkg0-Pn0VsdA;P zYiZ(Bs?$F(gPZmHHg{tz;yy#%11{ZXtoh1He|+Q)E+#N=DA-q_odn*?)Xbsw3$o3i z(JDtxnOJk_dDfTtXm%oAX*NSTri0{DPCAk3B`e=2C2n7-X)z4qaZXO6M{Bs@5DRvBK%=#-qb!JFys6_^sD7R+Prd}(?Cmvo5{**iq}Zo{2Ls9FUe1o^?VmO)C&;K0 z#lr1QSZD=M7JzHW%l@@AWltn8{i~oT#q%olDlI-dw;2+CI3Cl<6s|rQY&vyGkSFOR z*Uf`WwOFLOLwM(hEP_sXX5Vy3V5GbGypSpTc@(G5GfSGYv;B%$uCO+@ur-FL=4+6s z#HW?oRx-{#H`VIZFdhb|vLL@m*PNxJXt>>-$`FczvVD&e?QZK^HQ$otV5mlj;ff=U z{rv{m{$eG%^B!INdLs?_k5-B3&ee~NsrN)V>^d1aR*yt|tCiwglP`NOLzO{b`&1=BK;n9~(Cb z$XA#o>ahlYuKKYsLpl;da2Df^N7i0q&!VEcXe{v;%+<2n{8Xwz%#a_iR{!B$BtK1@ zk$4A`-Z<&2TiEE5$jg?v$~xQWk0hv5`{S<{V&9%5KSQ=yi4kz3E1uo|4|@Oq t()!=H|G580D}Gu0m4W{g$L|im=1et|kB>ZfX$!)CwAA&~Dpl^s{TFTK5|{u0 diff --git a/res/charview/basic.png b/res/charview/basic.png index a6d2e011b8cccdcacc9a3b1baae5fc7dcb74524f..1af7bc5b375a4f0c6a43d80a0cbf61ecb46cb573 100644 GIT binary patch literal 15771 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 literal 14060 zcmXwf1yoes_x7c`r5gho5D*2Vb3~97h8Y@^Zlrr?X;2AKQgY~#92z8~Q94Bh1f;va zJMZuREf$M4hq>pTv-h*>**jWWQ-y+*g%kh)3e{)IF8}}+0RT8j#Dw6=Yf+AL@DJh3 z=PJs;4fZFerRW{FLgM<&z#RZ6E3v;gZZt~U;3AQSss@zk7aldv10a`#q7?wR099oL zJ)haFh2S{0wZNsl9rxzX7QK08ETcMkj$~fkD)D26%^Jph=)`zUSNwX&tqxa;Ds$v4 z&*&_Hapx#5j^)?jn&(WR0G=RZ7N_|72U8@EUgRi?q_{MR0+&Br5qBj~l7?RmlU{Tu z)klS+C;Y zPt96677aO(;W*(VGnI}!iEYIv<4>qJCzp{>A0jqUC>?mObWsgD07+MDJrgZx{GJR^ zzu-0Z_2YSY{o;#z+hl;PrwvEVElOOfY_h5my=2!EFQc&wTmU!~s1H3_{pix4IKIdj zCPWx=zo2IOBsno4oFP(ZiKnCo7pT!#i6|8oSbwu56d*mS4a_!?(>ecW`4=nz0IRr@ zixtnmF={MQ*|u{{pTQ3w*02HXU+b?2J3UsMKFh_ zKfuZ-B{*3=E%K-nrjwimZRatksUk)=Cf*PKZH|LeVo=7RT_U|uhqi9f$zFOnS z7iq_=KlovO1gSCV?!TxTsvDih=yb$Hd>UFQh$d@x2{o(e3B#uKcfrI8NxyK@x9A($yO${=6$n^?Gwmlb6uhrGK zSeQxm41&EiLpy_s-r$!FhokbBXlkSn&!2BePwEw`owF;Dk#O^$8>BMUsE6}^?tqZX zXsyn#B_l>-hzgs5_l#w$FE|)0rc@Of)LK=XMxI$s>UhV=7f=ymA{-6H#hZwu?qb&b zzaMSA7gUTNX%)7N!0EGO%w0tvWW5XDG1yXxe-S!)--bs`+I)qe^yQ8ehB(>2zn)j` zo-xdqP2fA-1m}@PRH>h=bkyBmSxSi$=KZ$&J^arLVZ`w6HsLs)We7`Bzt5dljjOHW zK;u$>=0&6f&mH>H_MA|w5zGn)5&t8Bm8GSB7A)%Fcdn=cA&7|m(rcS%S}e?_+ULR) z9sR=7#-?vULH9rq5(E7EpN@BeJ(d{v)KZ-ZN^Muvc4VFskl_p9>PO+~e~M~h;Wj$e^?EgaYV@I#o6eC!p3mv9MH+^p7Iu-$d z%_x*O=U|o4{V^_p%K*HmClBQk(t`#w?i|Nn3pR6Ha|*Ho#0Wr=m+#I>L`6+6W1!fEyBjBN#}&}j~64+3fuQ4%l8jR2o;1k67PlT9Iky^ zUASO-Lm8*#r_NNRXI7HXoQ9K5ieMFz<9ILAJF&X|mQC6Zl}e?H%Yfrxmc-|OUG+Ng zuDQgmDi0g#dqc$IzGcfF!tn*#b!JV%VVy7!=EoBDwf?3Z3c|!Ffw0Jbkx&D5@@ID3 zeAi9+y;E$@8eMY-e$f2TAovU_3*FeP9NRlvqYO**94CKj(YH|=v~kW$P<>tO5-`!T z`L^ocX>{SiE>d;My8HGg^sA*P@& z*3RMgAaEUmCen4D!=12#EWyr&epr^U;|i?d{B!Fb9R!X-6%bTrV2HbrF!u)gme^5c zZ`06&Y|!3&ho^@jJ9y_gA9lWN*T5xaH3J(^kB1{wBi6 zHdC*k47tJ}UzsFx(cfHCZZS#KWYSj2o9DEA$`K`W*z9CQdoIU+56<8C&8n68rDfQ~ zau0NtA2l?uE-59B4x|kI1G>2^yG5Y)nut7|iGVwn(KX{N`jvHp&D^gqY?MudRh5+s z<&MWXmm%wW88Cq@WhZn@0dp0k=qmW(%}liC^^XEZjV&TI#|j%(LkwF) z_D=7G(U^o?Tn)oHU}Lf6o6O}1`f}3`J^}AKinm<}fMU(kP?#vw1asLhoDxSk_i}$A zEKDb}1HzHiua72%13w9ctZDAaYCp1t5$m%R=7M(O$6&#-kOSjJJdAZ+TJ2;iOUP-l zt<;Cf&bVLx%&lWn*Bd(4)A#AWkh!FlyKj?8v@TF%YQJVSvxEoy%lFLDNzS}o%}Y>{ zucr5**W=He_@@5vkf+dNPI{RGKe_z6{0VSi55m&<`WIlxC|j7$NOD1+w8HCw{3>ah}yzCZ10EYKZ{w6dMAws zkblS{`RO?dIY{SN`gOVZn8}|6i6ofj90WpHk?F4F45No$@LO|yb7~Fj9(;Ymgahhx zA;)tjAzo+%}-_c}?2)S)3!^1w4woF@o zpzpECS|yC-9pw<@R>@`19cZ|*da z+>yd~r9%byLICop&&TUk*`_!9c&$4PuIph~|6dXg3J)3<15Uaqabe-@ zl3n*1pR+x#a#-Pv-w&Df=y`Z-Ru$~nFo%j;Fw4Yk7+aLd& zq<49S68ka$b=5I0-Vix2E*=0>;0vU8-NAig(O3NuXrB&wI&=2XefKXP)E|8?^5eYY zsa6b+y61ZNyUPzX_hWf@&|GA{=lnVwb#W5@Py+Ya$`r@UQx2Ir88E0xLB%i?jvcny z3WXN0UNecn*^eBrrZ7wuov4&(Bq4Pb0EF`!sFxYipph)N48J2Xl#J5Ei3xF3L;k!KF)4ol~aiH@OIs1jVj6;wqVHK$3(PIKHjsy?bx_-5>q%*@pc&dv# zT8>F*`#P2ovS0n=q(w1rN`0{12KYWt_0vd{BBJ6Ofv~D zf9L$_Er}s4_G#!RQ00au5jU#dXPN9saFef`nzCQm0{y$#~zKy`FecQA?AuJO>2 zc->6tyPudZAB~yxGAMpdUVEW5$7)tdc*}Gxqlsv!X4#nlrEbo`S&<83Gv0+Na#q%^ z#dzLJqeU!U`b79Jot)M{0oBv~z1At>7(M90n0*K)0E28F)+VABmfoubLSVa{p#rX# z{2mF(f{Jq(q5~9MD9%(I{Yh+;-iW(udQv7`JjmYCR-#5!4WEZGmBfd>D!tK~)AZey zaYo~03WWX(NfT>D0I7izGvQ#k@&g?H;o6OqH+_LrS+0`J+TD=hM(`s!2lHQ|M<@gm zPW&31NlDWA*%FM?R=q_@nEcH`Z%KF^d5)%x(@#Wi^9`U7nStzpBKucuf`QabDGMs7 z_bER2$Q(;Vgo;_^tKKXxJ)f!2;XHxKAgH4 z`XzCpov_DuB8k+U_IJA2Qxd{FK~tVciBYQ(A$MdkUM#2+->o%JU&BZ6Al%8#@ z6R&=ExPGcBv(D$W@op=*{%U;hT*WLZmmDvRABkVaW?xtDQZyV_XI)S$Ua4fMQgjYk zgjyZMiE&c>NSa(66u6V$Ajs0wwPwkaqmr1DeJK7jOU)!)45p3IAIkNE{R|r@+>?*& zF>CyO)PoSf)v=MafrOXU{GfB|TuUGj5S`PFyQ%J7-KU)>%?I+%`%|dDN4Tk7>11!v zTMU&_r;Oi49O6$_WbLwK_^SSs>UdRhWQWSr6&{@S+aJ{Y^lzsB=v%Ql{W@fj!m7K+ zqOm4(5?!&!Zj+p8>T{FPV=fwmwn=XYM`rfG!`<$O&zLi zao|kduFnlY7Qpr(9970MnhtX$UzOf!_Su{FsFCaOn4jyQ|H^10u*PQer z0OhZ0oiJ!4Yq}6)O`9IzL#>P2bXMc-B%>2nuk}JZ`vD8*(Mhi-h z?|9HNRG5xI|Ni#sStFSv-Ga8GADKsR^P`?M@R;W&BWqdF_imM&VoS#VauN;CEs`a0 zkF)vttqX{OXShU84Qe4o$wG<%$)MqV6wL_+k?1%0R9WUK`2LymS5H;VaRI$syT<FszQPttW!gk<2m zkObI$(F}MC%lL#CJOJnaFM=`QjiBt45J6e+)Mqimgq=+P`}WWKl#fYsNZ52(TVHTE zZuaLL9T&#zK(U%H8Qr3*{Np@jkzxfHJ|%ETByFNB73fN!(iAifz?@c<&($oN?iI!g zbAk&uVK$p9cSMBm&}VFdv8Hm_6#@1spS`n5}!o;Wb% zMq8!(2)e3OPk9wfv~vHqP*b0|Zz>O$B{H6y>^jmg*_m^0a{BdU4P-Rb0)wF2n-^>N zUx>-@c^9|{zf!CcmefaqfJ$_BB~240CIqXoxHm+FHFGhG^S$r^Upyqllm#( z)fdpTcXjH3aPCcX@B?w7K$pvdxq};p*5k>Onr(5PtzfUZg<^9YiYS2}1Kh?q#gB}m z-vm4){v)^GWwd?u`-F^B3#+a-y8ZvIuqj7QX=~kKi`z@TgYx=6vDI^Lw^uec;}7$T)$G86cl8ZF)3Gn01JF(%NVe#!DW-%w|BgM7{-l8ImAWK{#u;;(Uw3 zvf4^!ba+6EF1?FM0I0feeD`X;_DG)JQLgQ?yQEG>-UXFl&PAfR)q&)TAzbhP@>M*x zU`z(M5HvNQZdJx6h#5yGp5@s8Zlr0z)}hoW`+&vp2UtW*5|q~A#%%Cg{qh}+M|8Za zR=PV_Fki`A^8jan-M+3UG==-eTZ`J(jZy_+bEzX?#M!JEemQLi0AiTLEG2g#hU8#2v8rHMy?-k)E{vIb;3eBP zc0hmxUc>tuT54!iTt0(YhTh zuQ?Rvur|Uc6>OM0Q&%`wWj;zfQ(_zO8_jg;Ouy4aT;kk8pjS@}uZxHkn~c&n;Vgv+>NrgQtD=?Zq$COat_}xnq$lv>29UTnq~dJiLrD243Zt z#}owxb=yhL9h(HJjiJvpcy<&6ip_)^{<-zz?YDCX7l=Vb7z_9;0hrqy|eIC-_lO>$9L8l zhC7WNY}}=eq7Dfs;y9&|uA=UiK>>FD5&$uLuWcDdSbTQoA!|ubVaVqC9tj&DTJ0AW zrioO4K-Bl0^N8-o#X%yRA3W+na*pV)Q8K~3bK~&B1e5NERpyV4e)AJH&d1Lzk4mr*Ja&8b0lZFAP}t;fz2h^;{u8ra)0Dt0D<%EK-}|NxiVU;DAW^yd05L|o5VR#F zF6M9t;;qiWqC!B16qkZ8xI&Lmk%0jNurl;qXj=O2O9CT)#2vRM)mlX)|A_T#aM5+~ zntC;zkV)0flm|ZCz+?KS@j;94DfGqkDg!=3nPB_t>#agZ%zg}>*iMw^6&}zgg{uu!hZOcJ!-)?QyKt+a44Z5AbG2zeUnP>;exi0 zcD1lxFPgW%6U*XYJ!WnD(8^s2pF_ROP4f2rOb5D&`)~}&N8$(fZ0s?USEONUFgLIJrLiq-JwuLaSTA~zzY1%5|(?jxmg3O>om6gGmJpiNi%+& zjM&0kBq$rIPYWB$zKWiVH2Bl115$Xz`j5r0li&Q&d#eGfRMe{mYy+j4%Y15?oz-ug zdJ4ew|Ibm{VcLs7t$VI@&378P`8g{5X7J|g#~)y+mKU44E7d>-6~0)RirIN>L?$Nt zRc3Hef|r}GltO(z$G5=M`XDX;RMX^(p01Q{G4G<=;p^4FCwSckZDe!^xjhB(JxV!k z@1MoAWzrJWVj+~2aUBpu3oXru>uD9M^H-b?(w^{3GswH6!ozvEQGJ1%#Bf2#cS_F| z292nG;+3BSndFE(&I(EnnF6u2w79FraJ&RuU^(U(_(zGbILXNvy6>BP>u$?JY-CMR zZDaEt&`rJ-v^(K7#_7@;douVnhbMU2z7 z`L5N?m;gT+kM8$N03(??#3i3|+oQ?Xqm-l+jz~%(Hx{)t!YO2z#(eKEm zqO9`f*KRIr#q=o~#}hA?-S%q#Fsk6wE|EZU!%*|QZ+J8ke!b=O_}=q=vG5&FFun+R z1;w=}%xrb6g0QHrW}$#9P``PhX42xNQDNG2Pghr$@%@XoR z+LJ#+WG?+ZJ(21f8qqJ*-oFqL6)g~}ulw_THpAG^=-mvfEYslPu7Xe~Hk>Y_x~Y@u zw(aVt=n2u2T`R{&+?L%Y24-pE*UNBwt1UF90du?;Tk0^!!@~%lD)XbHVrvqorZEWg z7CpUayYQcxpTAY`-qFcrAmzx@pv?~k-jry^$uW+Tj!=jb`wpaM2dZzlqFkXL)_Z!3 zLfEbsl>t<9krwU?BKjW4`3=do%2o-qD;`l3=|59S>7&F%} zbY%C-lMhoqO^x1eI7&5=^Zhd!xLNIYhSuF#CtDNhn>Z>JdGzQu56>pNvcG4wFe4*_ zMXo-jcHj%YLmF&00t5_2IKOTON_DLLMUA4KcQM}=Sv#CTFKAt6ozmp^xZcYT_Wu4x zV&dX1j5LiaJ*;H`oZ%Ct^@7cJ=jQw$5vIJz^U}(u#}7Hc0b_hSnIIv*t^(irG%B}e z9BrJX_j9(+!|m+X>G^j1E-O?y$k%RYcKgdz&|Zddlh*_CSaeIv19+v$yG?~0W#s@$ zeeQ%Xg7%C|(`I|^6HVcNk^3?^jcf^>&YhAyuF(3*!ul3SC>Mf$ro?=P0gc6&>viQw z>N@N zO`YZ3dDhM5!A^AF#hoDZ$-+zs&qA?jG&WJ<;fbg67(w5UMGfxEn%40N!WcH+9w{0x zeSn^B^6=ENp`F?Ese?IoDk}OX9Hu0_+s#2RBkuG4ODC206lAr=Vx^$Ac8{B^^M;D; zN!6Ewtc-J)FHz1<4hLYHJr)|raa;Q3b#-;`-#D5Xn`{nxiPe4-Ydj6a8GW7dwI2BK z=b*X-GyQ(om3&!eL`nQ|w(?uZg2Hd2!a~8Bn&GCXlxJ*yH5Y7km_wFGdV%ilIWlBu z$8$LQtCm^Hm!6kbJX>G+5|2exXN8SCkrn6~S^tuF2xF7%@yRm&pWTQZ$z8sdxh6{zEsCYP1O z=Vy=OI`f%BO)^BWsmh;GF0!T@b+}Fd`;z6kZ$t-3b6M&zNHslJeEpld7VYJGThdgO zFXdJiZt`BvN$~iwpNo@Iyb_G53`7M=y#v5 z6ih@P1$ukJLd}0wz4$#(-`Kiv>{n^lBqp0?jxcF@eYEk!gQg02EQnwhVeSBQU**O8 z>pQqE-1%~_pOwAs@KWUT+=H#AD#p_{Ffd?lV`X4}xZwF@MC#^LCDxo916E>;TVF#f zj9Vnf%K4;vdqJDyGCnJ;*hndXBt5Vg96z7f3&1@2tZi9zv9&M(^94@>iqqK%YU|){ zR99CYR=(vlv$&{99t+~G3NhBP1?_?*v-{5R64s?SH;wPj`aGUCQT}sWvtyIINhE+6 zNm3 zK95vNF6g8x>sl&6FGU&Kcl3VAQ_u;#`~WVa!gGf;)WTEAWr$OcA-w6cBT1X@Ba+xw zSwa2kPMjU^fvo4md^wXQSKU}!jlD=;Sid9x-I(?weA9vL9owR;B zC+MWYyv0E3-7J|>x=T%A&^E>VWZ_*F>6Au&sP5sl6aI|I2(-vwSm<)KMR1QR_3)f` z9xl4O_oNC101QspS%44b9{z1BqZFuI-Cqq2ZB<^GB#3Za1XGnXsZkG}eljH7xjtt& z!I;F>K`nl3i@wpGn<67Pct5z&rYP? zQ`DSxLUY*bK)RhEyY;RBu_PTjZ^rALny|M`Dpz#oX9)~@-#q0(g>PBAzC*48q}l~ zUmPAwdi}9m(9?({Oe?6>W#{!sxGt}8fABr!%{}c7TsDQ3{>x#V`U^V+1~t#Soe6ck z+PM^ZRme!a5>uLr!x|l(yqInW+&k5Ep|yMazh_;N!c?@X4?^nIqxd@wB@9yDgS2Yv zp&fiE=SQ-=dAlE7)hBY8LE>%K5Z4Gv@Ln%}KHe%mm|THH(wl_;*UzMY-wR{Wo`ZMN zE`)hTl;)#ChwU^R;Wb9Zj`VlSUqI{MoBF>mIgFU-lB_3cuhHj6coOEi&ggwH{{lAo z_m04ZWo=aH-{B&mz!jw`dnL2;7-nw}Awc+aE+K1+%FsoUxFOd_U zlmf5L*({P;`gQRg4(593y684(Ng;Rs^|_}^;p*((;O+A_mr=IjFln}MIl7vDg3>(h ziCSmqQkM!`G5;OTfcQO41I54l;+8U)xAXKzoqs(WcRJ{JctkSjKN!u-h>bhCn0c!5 z8pm6EUsH7%e&2bE={A-#w;oG+g?`)l^LTZ(!1n&DeVp0xex|a*-e(hgC+b-N;;rgp z&u_d$KF_ouZ}aSf!wPS~5&^q2U44|ge%i0#xq7g1C-yooG-bSdsz?5~uv6>QyV&-O zmt69s{8Qg$pz#<^tA(flKjJKJXoG(C?7JeE=9S@NI_|s7>&@=GOEvQ(p9G5qqA{F4 z4MIu9R5_{e{0fOo;Fd)7ZYw+VNgb92{54nX+@OX^ZG16-61k49*4-vpM=L}pMQGxe zp*m38y=f$2Zj!mr>RF!l?du{ez9)-9WmssvtncXG@ceX7vzW;gkXrL=3wV6=Bu7<0 z6VjWi1i8bW#xI#E%cl($!f>mfJd7K7Z8oz3JKVFAI{Wb@R>a-X)Rd`ZvBVWR#kE{E zyhTvlpFx^Ru?(qvNl#%=I3>=4Ce{mjC~6*fzl)0>2z1`|Ivb$G=l4o2MlVp;j5Q*y z+^g&*iC5Vlkt~qG4F)Kis0I?~{&fl{dZDgcE5e3%xZ&7VvN6#$ql&o>iAvx(N^P-L040H2kc*}N{$s2l9YU`aRFPq0GWsE+F1{Lf86w2SF6r^ip;2ZX zCTVf-t>{L(RcOT1PlfEp)W4I?(HzE@`wgOxD9?LIz#486u4)o7mff{kT3Q-Cpo)5u zvK~Z^J>VzQ%atu-4bU(%KIS$gIN{t!?U7D)d@j<{|BG$V<*1MHu?`c%s`$dA-(2pV zF;1jy-#AubFesC65Zba%Hxt3_aOOX8JW+;yC|jC#ZSlK29oskYC9_sGdEZwQt71mj z1SED__NJy@#n)LqA(r8@47^!iJ1$o-g)e(=-#oQ8e{NXVA@;>uYMcV`59#aFA9RmR z%1hvh_x7i$IW5MlSFrN9j{ee@A1HMz2>9jm4eyq2ObY<=qL~uvVVkeYo;WIbE2Ta= zPcN%+rN3SRoqQ8f8z{C+7cCUr>xYv!#&{mA zykV7Eh<|HJa}oW}98E;EQU4tV1awI@At-o_+|Pja zn5bM-NZzyTGSfm&mJXS>JjwW9sgfslp|6E0@cAzcE;HQH3G*`wN$kDlmFs$! zH&z=njg~l6!Olk~0Ml&u=pMbn1evV@mk1an}QLgK1cT8)?m$@AANhSi+$;;I(g|#?ICI$;n7LIrltJYGWuU8DX(7{|H6;of9y_^$Z;42vrIm9GG1Cs=yVv; z&Y%O?Cmgk`A_T-7^+*iHvNa+~3zvABGr+#`eRi~Rf8ysnzX*}s(z5&w`h_qg=P$EU z@wBw*Uh1k(;`9q|4mufFrLq0zKV&0(KA=iSw5xPxr%QLeAO?UoMU-9fh?oYz8kREL z?lr7JjGZ>hSXMh}#oqfxm${#HrrVxhs%hFMDR0f`3iKG1*yFKrc}2x)mh$um7>JI}sDi5xx#G$n0cr(8NoYH!if~idt_D-TPgO_g@xu zlDOl5jp+Py5c4Qb*_%8yQutW535kIQ5m@|z?C_`?e94#ZP1Z|Za-BU?YUvlkIdaMH z|AwIo6yL|1L;%OXlN5$tB}vIQynahTpKor(6mH{MH3T+Y>qhbf&|L%|2dz%pL~-*Q z-a4cJm3hmELT^9+`74%aFfW#x%hoq{fLG5fDI(`t1ImF}KAG#UKNC4WqPYa1YPl&K zDQ2N$ikVL6oOJF)EATgK!Um|sT(T|t_Sa=@WxUPAi*Vb!2u+A8E1NSWH{Ww<{W$Qv zmg?8m%ZNA>!>pgy1#J~T-HaT}f$~qgP?P&)3UqRLBa;YhqXaM%TU7c*E~f8QmP}o@ zeNQJBGzrLn$KY_3T7f5>m)$DEgg{eftFPPAjb0s=$yZTiP#E9<#}N%Iuh?1tq-oZRAT30$`!7w6FMlfrxp?-OsD~$kpok(VHYIl7Uj}KF`7akdPw7 zrVSN_3yq{RyFh$9+M$z z4BTYYxggomz2DitKGUrad1?Tw5#vY1qKh5LL_HYA;x zuj-uSP(|5;3{aJ++4)9ol-c_!j-auOBUQ{5omOz2Zsqf2;a;S77uya8d2JxM6fT4L z7$d)6gy7SFqh+CgM*4FTdAlyXVP@Yk=a7HrpY5#`8eY0e;gGqe|9Y|U^3#KqvQx*$;7{elFJwS6=W7yV@V*m55)D_hlEoK41M7c0w7N84Rx5 zA}JQa#44V{V2SW<^^R1C!#OJ zKSE(H*T^z!y2?;Tcudi`>a^GhX7qPf=D zvoxkMwoG=_c3ktjQ<&+uo!JjYa_yh}5+-Ai;Deaf`mOSg+)ryF3IzKWNJ`1~U3+$&aYSsRX@dbn6{`6Dv#5@fnOk%hdAwYxD2XB7Aqv&?-+@bLXQw@il zp;Rtet*a{=mJm8JMv>37R^W3XM&3Dh+L@{XbrJ_=H?9F!$-y@dCfg#DV1Ham*%-<0 zCy0|H3-KkhB|s+Ft(Q|K<>|XkU7y^EskYRkeo`$=?qJVW_tV}4cCz72sUjaa`1|n( zh!)Jmv=DTyUK6$Q9d>LL#BLmCQE)%xyW&bG=oebGxdS9?dCP-inaf3Zi#-D$d(Ej_^( zAzJa3E?_6CvQ5}8FyLx_B=}+L^-}QVm%SsGn>1dm{}czu%f3F8`#+ca?8;#1`0p@U zS^rd(RH866GkS#qdzUA7Idbyq|MRpGd7Sc$xN1^Ara3 z+ifXgLItyW(Wjqy|LD|P^ozeazVQ>?{}FXkG5pWuruXDu zCfnZJNr11&D4GNS9Kl(u6iO0s#ER78xDp0I+~aWBZ@eQbOe`75M1<|6x7)$2Deetf zTQY#%`M&`TC=mx?KHKOwpH9aY1r(X%d*F;C*@^Sb-WMPGj(W3vLUmUFV1AVIsMa}l zagp;VVh#vwOLx!BovVb5bB(x52g^Dz){J1N z0=DtX<3`6hk9xUF$w1B`MZ!4DMSYM({Zq%Oy(Po)#bUkp)v#1AoJyra&g=5@&t}&g zJ@7N!;@dm26PBeZQIXiHzar_-X#wo{#SfL~DGg*uNlfUnp-e3gnmI%Q1v~$q(SW=Z zP=gd~^}jMN6}aqG}BT& z_g&^&*QSDj=?4f&r3>TmsN27*hPO>*1fqJU5(oCidv#yq0}WR9L*kSz1y@d%cV=0C zR>&NH92OxMn!!3PXlW;}-o}$A0}&a$hTaLmqP3mwwm4jhBMHp*>RJEDxT0h5j9lrF%BpwJ&9S2MlMD%wY)qVO!$xPJj>n|= zMkBG7@%+G6GT!`CO^N$9Sk<3Tjc7_|fp>5fx0GP3=xnEpEX#L=-C>KcfRJ15S)FpA z&_SAH7MK&EFz{RQ1L#og$sNKDt|t$qLLi1)YW{JRysZf%xPu?*naa)G1VQ;oe}@Oc z^5+Ek*&;%~Ds$yGQ<-$Z2=sJ(xld*|p%SX~{Pd`@=*GmF1{avm^T)6a*wCah)1}-> z@JOYTqwxw!>K5pHi?s_mrBpmH|1<39_X~KeccgNK-dYZ5SKE+`yWzYR{EAfuS}}cv z*MECwSo0&XqJ__QVimiExaHS*1DhfXw;NS3%|pI2;^Hc(avKk~i`>Sxq-eiD?b%DZVWi_cqw+dUS#(7wG&l_KxPM zH4W((VjRFUGC_JP{OwD;E{&m>vLcyuD1sLBQOJ*ezj~){n`K4ajTvV7gWVQji2*?> z#kfo)2!g4bb4!C=`et~s!+0cnsp)!p<~LoUO_CGD< z)S9A)-=GjnPRqkRJjC)eq5K?!lTwqg{^Ztk1hX8zQRLpr}HXGFI`R>mR(I zW~nS9&t7hIfIAAHt8j{^TL!w^Y{qD3%&PR{S*oToS^!zE<{Q$x=qv*v3yVw6I#K+57aW>De@B0TR;&BZ< zHW&e}PXn6uzK_iuaL`>zY*k0y{z9Cna*vE7JN-#|kcc8y&6i1H{=)?Z;RYk0``jOj zm%cR!zl%-u0R2+;NiM9gxt`CezWWfk2Ko~B|3NjtJRs2Rmc-4^UuP|wa^$s7qT)8v>NPRPD{ zjbHbFD2rn=7-@Fx7U+w1O%XMP$bJ^yS*w{7eA@Zq@Gva)b05{`N54yLb{cJ7$}oZB zuDi2eg3oQ7qv#fr(&@iH4QlK09Kr%kdLMerbKle_c zL2o?Co{klf0lP}gp`x_O@5=wJk&ZN9eC?H`y%X`-%*61W_hKMiw3eK1#OhKWs|%!9 zi`TNoT^>3dRb^5FaOS8AmidKH0;@@8j>}b-fiFulGHhMX{&dKB{n;f?Mjp;ah#Q$j z#xJ9W4Z=#+crM3ndZ$#@mS&n{B{>^g#do)&e|!JWi|j%yBR*xzycry|I@nhR=ZAn@ z>g9fydp7@53^6Q|T-S5tKgE;^B~+?N-E7BQx?T=T=}vu&rvZR3{n@djpVz)08H9rg t2X+byv>+_-fK0GD0f0d=+fe6=8$8-oww2wxpos#2DpXUsLeV_*{{fR-N0$Hq diff --git a/res/charview/beasts.png b/res/charview/beasts.png index cbe17dbcdb287662d9793cde3109854066255c1e..76f8e7e13f1b1ce55b3d1d888ffd39b8b220a806 100644 GIT binary patch delta 17756 zcmXtfby!s2_w@in3k)Sl4g)IPEzJF(d~ zeV_La9v<$!XWw)8*=L=#*WT1eqcujO#cILHF=A|`dpjee3CN|mO*=lT)E{+}LeqAFM>@2l1;Q;#(u!?}M$eGL5O zZ2w^AU?*)S!;5Z)CD+wzb691xrQLt|A%&PYS2$5sUA^ChGvC(RTQqXJje@iOi=ncP z)1!`9GunYxf`Bx1YvJ=4d$OxFhE%YfIf3_Q%H=>EKpsbIFijY)GzcgSP;}6)k&xYg zhRD*f;dKmRt7tG~=We?_Xx0yNV1VNwvam3qSm=*xm{=(e-~Y)}8z+yP6S}y}8}X;g zfY#AKguz;cYGXArDuzRp77>)i^9L0E|53chj*}0NT_ywvf)yDYs0W%4+rFoZy4wPS z{^%OU`EYwRqej(oMv?m&3;@J!G$-;?jE7}DVM|M!(pKR%%eyU( zR<$}h?EC_FN>#Du{=3Ud!`APc{TJ!IyX2veaD~PQZ_mYZ5~awtU6K06ru6#61Acj_ zU$l>B#g%nIMI=p$J#M)})xUAb_6a)b3ZZl*RRwnz8fAKY1KEHVrZf6g&G$*)MnJ-Vowp5iKMpHl%a; znx_2tGM=ArUoRVb>3QiF{pOj|*8&j`VU!=ezakX6xAow+*-doaJ(!Vp8}p_wFkWC& z`o}HxcQnbt$>fLU^V19R7*szw-D~jc;T@LN1={;`b=*?lL(dLwCLd%mZwTS<+9&Am zYlQv@RNp7^EEKB%%LU9oP4^{ERe4eNP$4W-J2C0TqT{1~%CBR5;kf7Em*oS0icpit zlVx`K7jG!zI7@whiSr7>bdp#ioNcK3l$6eA?0shY6fIc%!$*XIVA4CmB*hTO>bKDV zEER0*ltcIaK!`VmEYNnrY~4Xy*V)zv7$*+>^>H1RdXW%ThSsH}O=03jY~(v8XSQP0 z(cj{${k#{0dRzLxzeuE_XcBoEzO&85kquw*;FQpvRwd){(rc-Wsv`WfLIRODuCf2p zZW9E7FBz!AtQ|)LeYWaI8OFmIn>)f(Ro*+=5#gmcBw&XAlc+9E@CCj?cdAUt14_U% zh#zjF0SoyL8o&Q4=7>W#WFSruQ(dE#`?0WPz~6z<4?#Z^94oWM&8@Ew(&lBpe4*4| zZFV4tt^FER?q%%O{Axxq=QC5BbRM&q3_W(qvA6?>yWy5wFt6D*clCZ!+QJ%bn-z_u zx4JG);=`if*AC*_00vqp7zb}n80rL16nTdp8WHt|B|F|4Blhd&JkNAAym0CB{@o$f zzF53H#@noSvMXziZO~8erP5nUm(~C0uM=4<=03?PK+=jEGz7h|?oQGl7qAkdXlv zx(sn=E@9X}aXEt#rTQvy_fI;-;Ung%ODHayuztX+8px}}` zD@T7ZJl929kw3t&lB~brxQ|;PJIb2OL0~oR*%FD*kL*y`p4(17MT|Ihfq$&ti`^9=n4Y;0~Ghx(SwVSofujM4Anx}u1VmN+>w~ds=288Kyv{&fGA}xd1{&@ z(B5h$%I5iU^^!u7gPjMY*iJDP3#_4XR73^QHrA42=6?Z+n*52jWei`Zx)}B|{mig> z{=O%*0gc42q(E8UVk;RtE@w|#)`>|QGrtO-ZWCgMvh20qmK7!*i!n%#0s2I(ZpfTp=LhAaprj{f3;Db;(pt|d%<~!0z>}6sW>Kft^jkB z2i>%*$EZL>;{a7O2y5!(Pt6zWmF7N1*9CIxN$2);9EXPG|BdN|4LC4lqiM2;^&s^v zV+vz>ngMd!;Nok#q7OX(igQDDZ(kKuxsAv?K|OULA-SExF;IcK zH)C+{#n9?fnEz1*SJZ>g*g2ckquHa-E^eMfvM_~i*QGl4v+wt!_n)IQo6p80(;RjO zEf&TnAU^2u>7S7@-7f<^{e9GTqq|p={6|u!>JGNMfHNli=R6^9z%43@r4YZR0&z2e zh@rq!Z=dng7JeqoNO8=;E<|xDn$d~F5KA5fW_~S(il#Q~j@Y~iMcN7s+h2SO<0~=? z-V4@J7}NO&+oD+fANcsq2+|6qdIZTgsvTT*i|pX{NmEyiq;uAXSLrmrv6Sp~6LJ77 z%Bize=_hCy*nh}WYw;kj>i?^DaNz6_NUFV*;Sg6ebN_JurFC^H$@;kkt4*87~wXmyJZaY17oUA8?`o9 zztW`O;e(Jc?Nz1qFK#SyWkIPP28xg_`xdN^gI~QT^FJk@SF3y`YdXvZ*2eM9E56tl zkTP`yXasMYRDEP0;L{EBY>o{Epif~CCttlTLY=&6n;j=h&m;6?2jvL{PWq*%o#qtN zw7ji@7QBkUBxcP~wWmXkx}6JB>pui-BW(rX`K_-f-LJa9dlqRGw3teY)RPsAXw71k zy2&N)#4F3cIIiR_`%-AS`-BDE;^Kj(A{T@E{mxyoh6aJr)r2lR~i zUHypUP$UBpe;n_@dc>v0S&tzS`<7=uFM9!^zJ;0u;%hYqOsMLWbhKr!uh1k*X3~Vh z<>>fbv<%&AL-iJOaScGT2y^)>69Xg(xiD-+R%7rJ)91^N0bw`^kb^a%gO=mM(w6g~ z$B&K87%aQ|Q0t(0x2fB6{3E zT!h^;v~CQg@ELeA(}w+iOGa#ngG7T%XN-D!j}!u+Zgz!_x1?N|9DM1uzSk#XRWbCE zpWGi3IMs4?wB#E^6PcRgKJ{eDGc!;?bi>#SufnRGMIBjoTkK}}nz)#j60#Vl3TsF+92|mA^Em(|h8BK3c+r947F#AI_fK zee!|(TU_^EcAP4MpaHwJ0Q~U5c|NNd9-Qy(8(mDP4cO8~VK2qviQ$!3Zx)>WXM#kD z$K1K)6D{=RzlQPV=sw($KRSbHAS^-wvUJGUdRM^P-8FsmPK;4K+!03g&LxGprBERy zuydpFRN`SYC~iWV!dF55D<#|_S`1G#DV#GZDc(>M_B*czD_`hWO)}j2?785r)^!aP zlRLR+67{O*Dv#l`|4J5+^Azq7UX8BWNUDm71_RL@+*)wlOJ!$Ff1)vH={HH$fnAkRES53j-aub3m{Q{&sbZZb5!?@Ig$F0nNuC`?+hb-ul(}{l`qFGVzR}UNJ_%v}nh#x6zm30>a9}97|JJsxzAl_QjqmMGWoc%ROG&!u+{2~EMUsqPUZnDb-W zlD`n{kUjUK*m+Sz=Lz@xo&TShpl4XS)`=s}=M0`cX2u*`28#`h7{h>H$5jyiri zYOMR}>~us2ZaX^q4364c{eH^5_ks9a@hm#%HXvt$Xa)ZIjsGhAoEXO!DGhbI>)AW& zzFY|}Sj?RFp5eH>830(!hK7Y%Hq6OZ zGE2O(rWMke&v7kqt70&F3ytDJ^VzG3i?|d?T2?7^xkDK!XjYi`1>IN!k(`i`V?6_x zU$gX;=j32+aOjYiebM3Bs|ayYg1x~7VAia}RR9hwZrabrsLDzes~-!KUj}Pxmd1PJ zy3EI7KLif@QDEoD#coV}Qclh?ErSKks{ZXJ3 z#Oe?Z9o{vlfkn=3d%OQ*c%JJ{B;qO^!Djlf*GzB05Ph6^DM@2A=MqM9doWgY*q%9~ zWu0poS3r0@+Vw`IR5u5Y#;o#TE7?TQ^YrTWok(mSJg-WoAYGGMmnV#rtVC*MC$wJW zE|rC=(tdZ)ZsAWo=OsgA_u6fLjMW|KqJ=Ak*$uxUTg5f`O=!#xw)Q<;0j~|d7{8$B za0nDaxBcc`E%t+C78+?xTKw(Rbo~V>@z{yQj0k#w|!oXNBwIhwszj{Lrtz>&uq4F_BX9 zn-U~}19i)FJpD)vbP?LVm^2bG=v+aOIkIOPir39}NNW#<_AT{?3|aNq`eZL)#MY_l zR``s;xb%RZGljl6?l?9&mC%9S)#e|W^)=-^55S|VI0%w`r4;rvK3yT`W!D-4Kka+M z8;~G;b}aXNaj|DXT3F1olSe3lbB$i`{mhT_$_L(bwDH^wJ~H2nz|$fe2(j(#_Z50A zHz)0@#4!@lkA%}OeI-k+b^YXnAus&I4c z5zIr(L$lj_w?cwVQ~lBYT*d)pwGT;!gfiW5#`C(Eir%a;X0=lpD&;L27-%fe!obns z*G{S3o6+jWGDo#7JCrI2X46(Q$yJ@3X zs2!)|>!nNFZ>f4x&=-D(f7*-g?p_raBTg0HcQ40^-jCow3~mgHCJw)f;5cVxKZ6rh z{r97rQT|dIdiKZhz(T(+0DC%S$e*kIy!^grR^(zw{ZZ316))fEV9`s|<3Wr=?`PK8 zS<*<9Q*{3*XvdV;!|BH_m> zK+M;$=fi&RjJC_o@3lV`*6+MAI>z)ow_)Z~VG)L595`2GqR=(*MpJis)$y@Ix?J)Z zLs=-rxZd4L_PLg%>#_dCN(`;|^ilJlu+4FOUa^vY8+~Z;m<`{`kPpX!xo|?yMDe#~ zGUA#|lYg*U@pA`4TeFiQkCwPdUZ#;>^=0}q-u^q;P;sNC&wSG#O(PQjr!FKI-+pg; zY3|z@zX!ePT0?Pm%P!}*%|Zw3ya-kgYfzY{xW&UkZ2SxBsr*m!t-BYIa@o2hcmLfU znrF8B8`NA$Ii#1&@cWE9m>uCNoT;h_AbeRom)-x*N-sFXwm;Z-t2=e!9;L6C;D0zwe~jSBp~cr zNH(@`Y#ScSnG1fI2#A}M9Y6>GvZ50Uf29oW(B_0@!2t2+)$rlTSmPnR*gDx@=8K)3 zceh^_5P(=`#Q`vy7!`W_&!Y}Lw0cZ5uoHDT;4SiV%+Ah^&ZK-{Vc{{SR4l$!7Er1y zA43U~U_+It!Xc0em`@05DasB&mj=Pmq-1~&I;RhE!5#S0pmp5XCJg4%V;Wlwig5^t z<_%e3i&-TPJY=fyVf(*-??!JFdhUHMV)kj25ZH!9Kx~4SMrdij2-@!6Xn}P0Uq6&H z14<;YaS-4EG;jgH9&gp_wh`z=%6v0vCAjrro&prEj6wBP{0+l27uQ-U2&gX%G70_A zoT&e65PIFBLu>%OueXPg0pKD?z?BS~AL>jXW^u;t4Uw0nY(9Tz@qF^NIR-AK(HE&G544x zjGAo;w}tD^HMQc{)E&JN>A3s{uTV)8Jl)?aF~TJT-Q;b;q2xb;xHd#q2>^n91nJbl zM5o6gBmNLq;EQCC1$q!8N{H>QMZmLUumSxLZ2k{&XdO3SL+Ik@j)#AH`e)B)WSaK} za`(-4`n2)iTso-Vv(UC|DgUy36hexU=%h5w8Mfm%W{U$$*a=x!-#BIN@w$@;{RI;aJI-QG9<)kjFa~770CTM`z*nm zLIuOp+A`rc1sMMLJTMLiiYG2f>iG!9i9qMBIKpAq^#l>0W3AmDx!ZVB50I$}c$ZTF zfQT$xq(&c)=(*vi_KDGu0kInMu`9v=DG)FXoQ)pBDAofoPEi5bMB=khgP+m+k~~UT zAfVWZ14cON9y{RpEtzk;|5=d}GIe8TLM1h{ci2V&aN|N4$mTn~G#)-8iz)xvB6&0M z3kWAC5D*B)L6l8GDbSx@fa%1L3s)xCEwNDrfKcMBUZS2a-NlzEYej4+Fpg5)CcUhO zaRPpvmX4~j85$S_>Nb*=7~f`%6^{y8t8=H)9npK zMYCRhM{Vtc+?7A=aATe*fh=hk8}=vvn(l6vEepdM2#l!T&h688-vr3;XY{RBvCzjRldaB(_U3C(=^s8Ns8Vsm9e{mO@0z_X=I&_8xow1DfY>@T zCNe157NaZ_GnNXBkars(q`F(f3*{NGmP+vPEt=cK3f2?i28BAq(AO_OC}%|Nu-KBQ z``<41MQX;R8hk;A+W!b^i2~9;eCJSdm#$+q`=?;-koVKbn;?D(d(7S^Y+J_kxuzaR zU_U%EV(U0L`z6?LvP_UP@2BB1&Hxg=#-Qj`8_#-k0^i$_VEi3wKVeMnhFvM2RE>D zofoC##||PeaErye#2%(K&H)7DFIr)q10}M`u?L4Fm0HmvU6hj0vjm3pj1Q6G6vGDbq zfs-&_;{V{B_b?Do3ODo-icW;8|O=42f9varhKwOrx?bkGS>V%E7M z#UkBVFP$!HE|sr?Fg0dtttB+)H#Xh5t~yMV*8ie_7r*d&a65^-gdHi9mHH!u2#QJ) z3g$j1_K@o=arO;=@6tRYyE)iQnX%1;9 zf6Q2+OBMN{5i=ja-&1YK5}2CLZg=9U@;(q>vaHA6aQhvwUkC z?dk#lOmsM)T0v}$o34NXto&2 z1r-)EME6znJX(3^U=Ya1LyCgdWqQ!fX=qx+izg1(_A$ujF;lV7tF!^X-RXU>hTXHW zaAGKK?fTLE6l2LmGFZ1y0VC2R)tAYhj-05CO$_ynVK*iWzyYFx--cbbRToPy$Uxl~ zAYw9@4{%FuEMqS%ID~nc-q;V0%L^5A{vOVX@sGg zsd*%btYnNlmvSRzE#5L0^mak=P3JO=1KBSM@0=QBfW_=M5hmp-AFr_rTF&r2@J}YU zw9=!`rNj>;>|-_-0zTp0r2DVTzMOHRzk>U-hVO7KxS<#wK#`+*FdzH9suL=hT_<=& z!-@*Xj>UCwws`)Xm-V|0jC8sCkV5}HM@K#SZM=+m0K>R&r9R^sx4G)VmR`lJug0o3 ztqY^rkEfOX%?vd*B0uun_pua)MLQoA{|*(_p?gMlLB;$3E64?+w1x1owZ-zQi#`{3 zh!X<{7yzrN#u)u-`9j|dS9f7vz=Mw=x;LnW17z6oZW^J#orEb@{3S-lq~QYtKr=-` zulcjDxJ!(Hu$v9{%DLEJEWYrGe8P7uldcdcjapHk19pI>5Y!MOhfT$;e|2G~Q#?@_ zXJ1(U=r0W^ClE2N$q4Tc)FYysJntCi&)RyZkOQm-VVzPTje?3<|2Ctfk?#I=u`k^W z?)+Q%)bt2v1`t^$QVRWduLEq(XQ)r^sJ*$XyMV#Sa5II=*y24O9Vf8FFuTA7TPlk; z5Q1&JM76t$=kL`|5_8-+TsKViqtuP=q}JJb{s;ZM3{}ZTUwHq`EVuG z$M6kc{L|~MpuHmbw$J6fKfgr_98z{Yl$fP0%52+AS~wk@l8z3gMxUrK$i!J^6_0s@ zS;v?;pbj6hqlOc$npV0Mufxi1twVp?v+&hBA52k*#GTb|{CrXz~i=dALPA z$aMm1Wp({`cjw5)y8UZ!s-w>(V|?Ez@64mc7TAskgpXu99Tvy-yL@Ij#<3|oW18;R zm~XW!msqdTZ2k;js+P)ob^`*SVNTKSFJ$z3mQ7ZOlV?*T8=h9WK2}FtpxZ;T-`7W$!<#JcaC^XRI#B`nM@_YNg{{lhlS!*Y;f@rbk>PSF&{Y2rzT(U;I*A zA(EjgvI7ot)s+iRYsFBoaIAF*IN0ZzGzdTvs`b}lD_*Ch%2{mc1CgS%hOey(-cT_b ztpiRJi)%ng7|ukT>=WfXK$ps%4<^%rt04FgsJVp8Dmvyln`o$^_CQ{#C{-=bAWc>v z_=!>Cpi6-pP|01EAR3T#Z>o}aTv>1zIc^ATJUEO>Zx7Qra>7HYSKl; z|NC`be1PT5KOl=T2@vaqNq-|CBtW1>*?#rS{*s}Gy4>*xj$+biV4G=khD0u)v=i8g z@PC~U$^ZbR^l`+06WcNMKeJ$A9WkBZ8mA$6YEph@eT0RnRj3?nsOb@PVxar?ZV68O z;XV6+$ZF_t_CEGAdu+QKt{C%wi2wqM-{%T6$`)jjs9B&Xf?$j8hW?f_l!{l6{W$UR zzXF9X;e&It1SDr;)J1L8J*}adW7FjZuZ^^HXejSwp=TGb1x34Y04UzC1cTr8kD8p_ zw)>6E<@7h+4RgM4utuoepS3b7kYGTmutAe5YYmPJ(bz)h`DH=a?LKpU?ap^9MQcX> zmK3Tg=585P)?jpORQ64#S84CJ@!IijU0D*2>15vxafO>b65LQ5igs7~Rr+*K9j|+oew7O2caR(pd_= z(4>F46BrbX8kvnAFz{F7H#t*|m=VtZGKk^TBR#*R@v1|j)`#ThymB9&CIc_>T9e@K z@Dppg4e>($eTx-=uZTo3dIVL0n5RnlN*YCnepxh-5QsRsTa`#$mmnls;lzvay18u^ zzEUrIIINaCxy-z+Wn=RIQ$Bqh%y6V?5}OVRrFcAXkR-;Tn=;`CN`v^-w~Uq)-c4Z= zytBqY`Ljf??SN4*tOJfB^(g3n%5dyOy)2_n+R;$S6u77sRGdQqWSc}a#t3LwU;zF4 z8E~k6Tjq4mPT$u}<=D{=!)EHukI^>Z7$~YQP4`!?!G({QI9>e2^WdTwT`oVtYMLJp z@?WX%XQWKMq1e6+kZr*3|wwIrCN7YHyYB zSO>e&^E`tDqbACnD&KiuJtEdmeB+_%0&%G~AVv8O74`m28NKX~nLVhD_TfzM_0P@K(+nF7bPx_LXPY4y_i4 zB<5?#N{x1U>83kg?1a8n{k`qk3>GS=GjAt-vk^Je}@-UoUW${{Ia{Hdfxd#Rv7h(gU@c!+tW*6CDODhYCI6-32+7iJH%G}UWmw9?FZuzIFSbrtltLkVdIBbJZ!f@FwM zJz-``w_l!m!fG(X9Hn##a!3^%P9Hy!NU4B$ih*Hd@Cb|q;%R6asLTvOg)sNe!sX;? z2s0AyMYG`93M1vxDz$njfnWFy`j2s>#$b<<=60~4%c^Yf6VTmJJ+0kpZLzmiI6Tq; z%alJyHg0CP@Am$brTfr`MTNTUUZgKbjTAetw`}xoRb6E15T6`DI{3c+N0WZ_Re;OU z(lESDwG7unyw<;v6nb?_j1L8Xn5l{pk?e#~A#6f1A6$gQ)j~rl(D9`-CHOt5BE`F( zTX>k$HzpqXzHS`Gr4wr?ct*UGczEY67j|@L`lBzOxb>%mw;8swO}Y61XG1DeMOCZQ z#->-`s||g%>(d`yt{mNKX;vBfdCdjQj-qfLoi^63k4gr=Z;xEm^2@X>2H9kUR!)0b z_6(*PBh)hV`Orf>4^6!|Uk$Z=)PB$5uk}5a-XSN$YcoyGW6`-^Vb|r&$7f_YJspq= z|NeFgyQ1O-Vr?lTVPw^xuO?P1qjju)`CKN|SfRLdD7!!uLNt&t@ubvnA|po+|G+QB zq`Ab;0km{&;!O{z3Gr--nTJi@i>V~K*X%MeEh_$~CgAiEf9JLkw&z^9F0axV0{2uE zsI@Zq2mGj2=Vil2=cK)mr_)w)lFTMeLsi9DB%nX@2az?0bm`g_cB>ss^ZTCqgYkKg zGHWDJBQPb^HlyMQIbJ^Cfkxx)2_N_yJ0v1ck;7)9rOq~WYKLx_J}PTQJ*MUL+uZNJ zQxnU|whOm4EvEuZH+uwN{v$X;^^uk$RwA`_hG2KA;!gtxS;9h^Oe`N8)`-fd^i!e3)Sn3 zOVufcE(*GqvQyhllQ}1Y1M!cNl-zxK**>rL56KkVNo5B&>~rtAxJqk1o^N(VJfmA} zUjPtM%*0{GD+Wa-$Y7=D<-M_@@C^1=3k%z>CbZDkxe}HUQNPgvL5l_#iZ%6VD0%sJ zOH@=QkCBtY`mw)$Pc#LZ8d03W&EpS9)MX)mKs$N3qg3N3HeItqR(C6J9T&cSh+G!&*xF zMgYa%O_p*g87&(RT^D?}SA4mTb>eivNX?gGur0m3`lJ}Tw#(`H!;l>sdo~W!emL#~ zAH-v4>G6bj4ZOsRhCmDUMit-O9wXJq$IODfz(2Jwj;*ZE4S^kxG8Kf&R;yuP6yGiUOhBNMhF_ zShM>)By{_8kB_bbW+(9e?^ePV92&;ywsU{K;(x~uSj~bJ)O<*Q8+pY}!z}pd3aHbe=XnPP^KUqRnNo_0>A4xJ5yNu%Eknl_0#dMX<8FyWWnL zLX%3$beBg{ms)kMX1DI+v@ww45vdvC>GL(}mU+!cP#fe{tekn`vSaI5@{ESA&Eb5Z zcv#{uGj{y$fX8*9vU67pB^w?N=Tsxn@sB|zqu;Gt>v)LK<4sl~(gO83yzM#0n2GMo zWn1567|BAz$?CUR(o*>DoY!mF_FsQ}Q^1$WO~=b-XM+dieLHMd_)YFBp-%Jym?;t%6y|ANf#^~RudMiAN13bu8qG2HGMlUxnn-JGjCg9~P7ezk`7 z^W4O?E>*CdKKQ?bE{iE~?Lol!8=~*XY7~80?(D^sYDzIM{xT!*VQNRhjkVivJ*je# zVI5OlJ4B{T58i;~{e5L!O>5DZ9Q(@WAU=l-+wR-6ddzs>qURw`WriHjq~>1yXyoW+ z=d=C|Y>IT>?2n{|>-*Z|SeZ!8Wc$%fv!jqA5*tFGj5i8g&>-#YRi-J^4298BBrCec)&$ID+uS9WJrtGdR zCT4lIbNzOG?O8;k>pLOKnu12ps1^kBeVys|)T@;-j9}}}6@{~XOzce;o$MDj621)R z3=MgjYHbH*mMgCcnj}x!y`mP#jSKMP#_D2PTy(U_JXzU#|H&N5pXmje?z$>`TrR!t zl)Dr2J%pE=Wuo}adG)C_c1jCbC{A<}#@A0J7qS1d)i*S`Nq2I~T;O=shVuQ;&I=G+ z>+Y~cNzT~&PyP>C+r8;>N&O2xo_9=Hz1tF+@0QOFAV(;kC)DTiv~p!eI}%tSOR)z ze#OvHf51C~h9F5|dN6atx>Ob~$Ee?=>eaPf!Z=^ga5lQUm=$x(>7LY9IT?I+*IW$G z0j*tuxdOm`+A2@bvh;I}v(WF;tTV;Z<7z^AFg8M&h7(#b_oZm(ga6R;Kw?)XIB>v*4@%hEL;u2nsMaBBEaiJh~VYP(UHSE z3QIR^zY1EE-};1|{9&U`GD{lm=f`4kbVw7mvigjLmlt zhVdK_G||81vB3k*9+|82-Kb6;WgC4-&VhYA_wJ7h63@>|lx{a8#0=!>Gb2OIdh zpDKW_MhKavz&iC>nw`>j(U0{l>9&%~&&QcO`NbQqM*fiJOtWAmX>`8ive@=9T$s!h zi&l`JxHfLii&ohv#Xr-|d#*iN=(*(bJ=<`3EbphLl1YdXW5^Y)e|v;f>fr)^*sqrj zWFa^!aMVV%0~~c|!kHQtQS3wKu!-e9mBM@jP`uaL*RGpXQ~t&U_v%C#Ji#+m!jzgU zE^&5aF!+LG{e%+(G7Yei8O@{&C`5#gxNjebNXjR8n>9Y+i7ARWf~wM&mxL~jKRd-u z_}-;TnCbSoJo^vtG;7`E8Fg4NFnnij)S%vobMG(c_%j?#DNMQPzXOiN4wdw>)tU}& zY~7`z)YWxzp3`0Idk&M}W+5?z%`h~97R;W%r5_xD3CZUVw7Tv`{5e#O+w*q2#5cPg zn)&_c!1oZI;%fbx_bo?!1#J!?x^ z!}T}~c_|b8vi*UVm1Y?b&T{l6SYhb^&lrT z0H;$OdZ`=VRq}@UcGpp@ze@gw;LX9eEp}tS{T-FyAlvVColH>9>oWuOVf-9-AVnt2 z+Y=;10XvNGShe-n8_nV zYY*;Wc`5F8yPeCLQcZQ)s;LKey`l8GIU#?Gm8Vr0W1iXOD_4$8(9+@sKE1kXGEudu zbZ12760)E++GEV`_O`t4fuFE25!SU`}i4h218PtPUe?Mz4mW% zDj3Nr{&}-6eKx&zzRX_Wti1Kc(MN+)cxpX!aW7o@pZ`=;=N4sW_P^ud6T@+MX(HS% zp-xqg4#W_e_bv-cFJ?@1ubY`-Xp+dgvQmk7TeXJK`K~ z<&?efDMvfmwNtmM;+LWzn1?^*I>|~@75g9&F<&1tPsg^caAFl$&<@D31ea4(?>DLL zw-2k;pCY5)yd?2?y))Eoo$DD_CFw;DToTiLJz9p#JM`(rXnO*Ni2IFVvh6Ob1vdcV z7-M^6%CWp@A@9WUx*^qHYi6O8ncIA;xCy@aj+`JlXDul+s^wHy1g^R;LbvL^?ykUD zGT(eGGu0IF3ei)CMQ>Uw4NUpjX<>UmGF&(G6Mq1<6t{6}MwM4|>tHO{w#E~Y%$MST z894Nru38irz)vHp3i!&>Q1b8vshQqmYyw$?Ik554oPcXkl9kytmtkX?j(Y`F6k{B! z`SQCOu$(#Askq`69?H5>O*L^X9J@``t6OQj)HG+gz&g?NUmMqQSJHPIa&gXKQ!0rD z6yFrzq_eMJJft$}GYfvkS<^IlOIc9Sy?Qt+)eYNRO(mxdlQoP{6-g2BFJKSfqJsGK zqLCQ=x%itc8&<;cS66VcZ~eo&^$@62v1G$~AXFEBq!cU$N9jx#v&%uJ(WT!v#U@*~ z$cc?da@Yu`sDBRIcwF7bAND`Vqx4?uaWRo}^epT}&*w(E?D+ovt7^qgGNWU~<%~G! zWhiL>iwF#edJRYP63`u05bN zaN7^k$MJ+ap~RkA#ZO|N-5HuXNFWWf(XpEXF#jKrTFpyjbxk5tQw}qb>vr#S!PjDN zC`Cf*_2}2aK9o9@<>&8f7$hu?OB^-$-v5&f3?yUI{Y6~Tz2AN17M{KI5nV-^!S%wZ-Sq zKyWot!1PVpzN^u%bW|tF`)o?YP|1k)poJc>;o^C7`|Z>ys8zDk-h%QpLql*w3Log|1D--^ZBZq3_e_=$StHr8*NAUez_v(t4m{ZOuyM^$pa77PHgxMAE zBDPByRP+TYW7aA6C6u)xY~{E&Is^W29SQXe&P;vTqSxvd=hk*5JhbNvY`y zi{9&T)Q@p781K&Q*Df_47A9}f=bj|r=SH_5F8aBQyvT{;aEMYwI<6cCTK8b3OgFdL#XZ20qEI}8e`dle70wEw={ zN~$SQNnw|eTCJ`vINvS(2SN*wdJ2pDw*rGk?k2FMhS7V6$9`0b?lm)Vedv2$`WS6| zvpF$6nk&q@%>PQ!_)huUaL=$rZ-jG30JR`Pt{g3QrR;FKyq{Tv8zhG2e=sR@_!}C^ zdO1b|&G&>=CftiEgosR=UT9mPG{0A#N67ekRp$Nq2O8JFlA)8HRdH_2NtALL#<@3q z(ZYMzW|!hH)_S58*3i~$IPJAzpD;*L_-+nGMxO|2M1C0>s7SMy#IQ$i?tH&y>(^RT!!p8j3VT$CZCU0Eet*)E5|;;L^aeU@J^B?#2wtTZ_fOBhgXQ%PNn z1xV918Ia+f`9fWiuKoa<$GZY;{74;|t2_EFq5~!OQu?h&U~oA$ zj%!$oV1P9?WSnd)op4)s(+~7YPIy&EC8(_UgzCD_hIi)s)~#X+nH)0Av@AL;&sB~k z%Gy5dSUcjSPM8JRVr9kNS#?QwDeO5P-9t*P-BTWy;wxPyVNzxPqhy0{rAcvy;ej%%;&#m zK^0@U$aeJ;Z{e078+F|8vY);*AHOp{y|cIOhb$*iDH~T~b=G`efnB}lqeY=j{9ZL? zQ$+mYbRpYTOEs2MmOO6f%X_3LoG(NrZV-WY&}Q^gd#U8~BIU5L#7xE*GyAK6smex~ zOL|EKs!IZK)3wz;d{wwJ6M-CWL*}>&K8a;=MplX*%ydseIb{rsWcO-~=A=2OZVy{b_oT5M0}m`*CVfnTVh!7VZMeLEj1ZNaYhl}82OkDab&BYg1bjJHjx4!L|t zNr|F;UFmC-@m6~-;_@>3&B2voePu-sXx<$iED)5dIs)v>pX=OsB3-v5{D)f0=P+^o zJYmW2HWo?`t*KaUX;g(@FBLz3dleFl1JL9VuFxN&^@HxTIpQgT4Cl!Wul$hv$`<^8 z7tRuEP@(hc(hXh?OdFi@D7k_>Fszad)F$CM&Rh_dJ zC5KmSqF@0u2x>v`I7O|BP%H48M>g^MpR*f5IC-$x@kJi0bi_O~U3ky74p`)+nm~&s z5$etz1pu%rp8oILDD)phm|5jX{z6HZ$~%gh9*ihs1e}n(UKa@zZCS3aC>cbcguu}c zNY;t*x&j{^o%!(sA+scODJ4WGtI^A#PNu24l8ZR916+i%4e)huGePIhdG+bk@}bD|?OnTj=p+g8&qRkB~bhkm?XcRCW8sa8(Y?9v=KkBz`^;lW| zUd0&1lUXJib(#BO$VUsn#UT=zO?gSISo|vz-0+LB;mBnZ-(K4t&SkimKPr-15a2A% zb=?R%|EZ-d1>@r{8q~dHPaaF60N?_M7LIAN8M-Fk7fYi8khW6}+auGb1x2g&{k`_z zFr@GZYLl%;lisZqtc*5OELtoiJ5HfXp?5NxHx26KOuVfMeg1R|<5w~tU2uMP5iCEB zPr>`eA-j-9Bm>t0x%HFIMEtkGTxeT3eK>sJvwblcMZ|f+O>-=!Vj>Lw*LyM^uT8TaEdN)Vr3`B+k7x zC80d>py%n3#d@o>8fX#T#c+g#R6w_LQEJKrtG6Nih43IAXN7p{`nl8fDg~<94ad ze%NB{T4BM~ts1QGf*c6Q>qNVqn#mY372^V?dK(0I4OFM~;;<&cS;A_~)Wf{!iHFLOfbFr2V$`TlQ*?xpGUMBKA`7gQeK z<#Q&|^=Fta!xBfwUm$-3foq`V?ltoNzg#)La-aC=JKJPdOW5W|e=IDWR^vPK!lY`M zus}x#uGI+#`W7w^?z#}bI^F-z{F(AAnz#ioW-0;up0ffA47X05a@F9?j6Z$0 z{`u+6-?QGrx907((U<)+TT;#?c+<#)}A zm3;|p(9FEksaW#VwX}BQ6nzFEg9+iRlho=PnGY`AdGKgBuoqgrE&F$|Pxv~mjyA3I z>0V9iEuO@lk6fd3qHoi>Ppl3?OrDnyHa@tt=0VVwIkCsK{+L!Qx_4Pj_&S}S#udAA z7$;0(uH~4)Aj6@j$u@makfp`cBVQKS+*|gl3phCZe&0(LS-ENT>tAU_GpHm%l(A0_ zsDJ8{VjuAdIAL1yDRr~<)~oLMZxSlM``PH1{)}6}(eg$xebz(E$<7Z&@l9^Z*wnWOW~ri>=J$2t6CTwcocqi6eE+ zqzQ+b6uK3Xqi1goym#xFz$ppfIteMI!XvvS96qHnU#sPZYE7MR(^BfA-t+TM7bq>W zV&I)(2%NLOpz$f#yZ?)MAafQB{AD$0Mj#_{^3JGS%Z%}d)Md-lqgFC}K-*90ss zyhvbsIL}!iWZ?y%C%_AGfNLaRYja@CCeQ@F!itVrCKCkidMN_gFeJ6|Kfg`<0k^B{ RI^_&N;OXk;vd$@?2>>I(f7}27 delta 17688 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 Bf}#Kb literal 7843 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≤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 literal 8179 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 diff --git a/res/charview/scales.png b/res/charview/scales.png index 0de91d5c107bf723b3abd9ac22e884b21fa51bee..ca27e7480b572ba9973c73a5e5e59587ae86c388 100644 GIT binary patch literal 11276 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

$CvOD^6LC13D)m(C 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 #3d3529 #35c073 - #f7976e + #efcbbd #bb7c35 #789097 #69ce76 @@ -277,6 +277,7 @@ + @@ -294,6 +295,8 @@ + + @@ -367,6 +370,8 @@ + + @@ -491,23 +496,8 @@ - - - - - - - - - - - - - - - - - + + @@ -529,6 +519,7 @@ + @@ -545,10 +536,8 @@ - - - - + + @@ -1020,15 +1009,22 @@ + + + + - + + + +