From 62fcea098a3b3b5593ad7c1efbefd00bdae797c2 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 5 Jan 2021 00:07:36 +0100 Subject: [PATCH] 0.8p.04 --- classes/classes/CharSpecial.as | 2 +- classes/classes/Items/JewelryLib.as | 1 + classes/classes/Items/Weapons/AngstDaggers.as | 2 +- classes/classes/Items/Weapons/DualBFSword.as | 60 ++++++++-------- classes/classes/Items/Weapons/DualBFWhip.as | 2 +- classes/classes/Items/Weapons/DualDaggers.as | 2 +- .../Items/Weapons/DualHugeWarhammer.as | 58 +++++++-------- classes/classes/Items/Weapons/DualLargeAxe.as | 2 +- .../classes/Items/Weapons/DualSuccubiWhip.as | 54 +++++++------- classes/classes/Items/Weapons/DualWhip.as | 54 +++++++------- .../Items/Weapons/NorthernerIcePicks.as | 2 +- .../Items/WeaponsRange/TwinDartPistol.as | 2 +- .../Items/WeaponsRange/TwinGrakaturd.as | 2 +- classes/classes/PerkLib.as | 4 +- classes/classes/PlayerInfo.as | 70 +++++++++++------- classes/classes/Scenes/Changelog.as | 19 ++--- classes/classes/Scenes/Combat/Combat.as | 72 +++++++++++++++++-- .../classes/Scenes/Combat/PhysicalSpecials.as | 2 +- classes/classes/Scenes/Explore/Giacomo.as | 23 ++++++ classes/classes/Scenes/NPCs/LunaFollower.as | 2 +- 20 files changed, 277 insertions(+), 158 deletions(-) diff --git a/classes/classes/CharSpecial.as b/classes/classes/CharSpecial.as index 755f74d754..a73d6cb325 100644 --- a/classes/classes/CharSpecial.as +++ b/classes/classes/CharSpecial.as @@ -1680,7 +1680,7 @@ import classes.Items.*; player.setJewelry(jewelries.MSIGNIT); player.setUndergarment(undergarments.C_LOIN); player.createKeyItem("Dark Mage’s Grimoire",0,0,0,0); - if (player.hasKeyItem("Backpack") < 0) player.createKeyItem("Backpack", 3, 0, 0, 0); + if (player.hasKeyItem("Backpack") < 0) player.createKeyItem("Backpack", 4, 0, 0, 0); player.itemSlot1.setItemAndQty(consumables.H_BISCU, 5); if (!player.hasPerk(PerkLib.PastLifeScholar)) player.createPerk(PerkLib.HistoryScholar, 0, 0, 0, 0); diff --git a/classes/classes/Items/JewelryLib.as b/classes/classes/Items/JewelryLib.as index 20fc5f9599..c38a51c6d5 100644 --- a/classes/classes/Items/JewelryLib.as +++ b/classes/classes/Items/JewelryLib.as @@ -86,6 +86,7 @@ package classes.Items public const RINGSTR:RingOfStrength = new RingOfStrength(); public const RINGTOU:RingOfToughness = new RingOfToughness(); public const RINGWIS:RingOfWisdom = new RingOfWisdom(); + public const EZEKIELS:Jewelry = new Jewelry("EzekielS", "EzekielSignet", "Ezekiel's Signet", "an Ezekiel's Signet", 0, 0, 100, "A signet rumored to be blessed by the Ezekiel himself. Is that real one or just another fake signet merchant sold you?","Ring"); //public const RINGWIS:Bullseye = new RingWisdom(); //Normal ring diff --git a/classes/classes/Items/Weapons/AngstDaggers.as b/classes/classes/Items/Weapons/AngstDaggers.as index 68f9b1dd06..5464514357 100644 --- a/classes/classes/Items/Weapons/AngstDaggers.as +++ b/classes/classes/Items/Weapons/AngstDaggers.as @@ -27,7 +27,7 @@ package classes.Items.Weapons } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldSmall) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of weapons! "); return false; } diff --git a/classes/classes/Items/Weapons/DualBFSword.as b/classes/classes/Items/Weapons/DualBFSword.as index 56f1f121fd..ec94d9763b 100644 --- a/classes/classes/Items/Weapons/DualBFSword.as +++ b/classes/classes/Items/Weapons/DualBFSword.as @@ -1,31 +1,31 @@ -/** - * ... - * @author Ormael - */ -package classes.Items.Weapons -{ - import classes.Items.Weapon; - import classes.PerkLib; - import classes.Player; - - public class DualBFSword extends Weapon { - - public function DualBFSword() { - super("DBFSwo", "D.B.F.Sword", "dual big fucking swords", "a pair of big fucking swords", "slash", 50, 4000, "Big Fucking Swords - the best solution for a tiny e-pen complex at this side of the Mareth! This pair of 2H 2,5 meters long swords requires 150 strength to fully unleash it power.", "Dual Large"); - } - - override public function get attack():Number { - var boost:int = 0; - if (game.player.str >= 150) boost += 20; - if (game.player.str >= 100) boost += 15; - if (game.player.str >= 50) boost += 10; - return (5 + boost); - } - - override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldLarge) >= 0) return true; - outputText("You aren't skilled enough to handle this pair of weapons! "); - return false; - } - } +/** + * ... + * @author Ormael + */ +package classes.Items.Weapons +{ + import classes.Items.Weapon; + import classes.PerkLib; + import classes.Player; + + public class DualBFSword extends Weapon { + + public function DualBFSword() { + super("DBFSwo", "D.B.F.Sword", "dual big fucking swords", "a pair of big fucking swords", "slash", 50, 4000, "Big Fucking Swords - the best solution for a tiny e-pen complex at this side of the Mareth! This pair of 2H 2,5 meters long swords requires 150 strength to fully unleash it power.", "Dual Large"); + } + + override public function get attack():Number { + var boost:int = 0; + if (game.player.str >= 150) boost += 20; + if (game.player.str >= 100) boost += 15; + if (game.player.str >= 50) boost += 10; + return (5 + boost); + } + + override public function canUse():Boolean { + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; + outputText("You aren't skilled enough to handle this pair of weapons! "); + return false; + } + } } \ No newline at end of file diff --git a/classes/classes/Items/Weapons/DualBFWhip.as b/classes/classes/Items/Weapons/DualBFWhip.as index 403ca708ed..6f12576b90 100644 --- a/classes/classes/Items/Weapons/DualBFWhip.as +++ b/classes/classes/Items/Weapons/DualBFWhip.as @@ -34,7 +34,7 @@ package classes.Items.Weapons } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldLarge) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of weapons! "); return false; } diff --git a/classes/classes/Items/Weapons/DualDaggers.as b/classes/classes/Items/Weapons/DualDaggers.as index f261810430..98b4b40c91 100644 --- a/classes/classes/Items/Weapons/DualDaggers.as +++ b/classes/classes/Items/Weapons/DualDaggers.as @@ -16,7 +16,7 @@ package classes.Items.Weapons } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldSmall) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of weapons! "); return false; } diff --git a/classes/classes/Items/Weapons/DualHugeWarhammer.as b/classes/classes/Items/Weapons/DualHugeWarhammer.as index f06bfbf564..70770e03f2 100644 --- a/classes/classes/Items/Weapons/DualHugeWarhammer.as +++ b/classes/classes/Items/Weapons/DualHugeWarhammer.as @@ -1,30 +1,30 @@ -/** - * ... - * @author Ormael - */ -package classes.Items.Weapons -{ - import classes.Items.Weapon; - import classes.PerkLib; - import classes.Player; - - public class DualHugeWarhammer extends Weapon { - - public function DualHugeWarhammer() - { - super("D.WHam", "D.WarHam", "dual huge warhammer", "a dual huge warhammer", "smash", 15, 2400, "A pair of huge war-hammers made almost entirely of steel that only the strongest warriors could use. Getting hit with this might stun the victim.", "Dual Large"); - } - - override public function get attack():Number { - var boost:int = 0; - if (game.player.str >= 80) boost += 8; - return (7 + boost); - } - - override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldLarge) >= 0) return true; - outputText("You aren't skilled enough to handle this pair of weapons! "); - return false; - } - } +/** + * ... + * @author Ormael + */ +package classes.Items.Weapons +{ + import classes.Items.Weapon; + import classes.PerkLib; + import classes.Player; + + public class DualHugeWarhammer extends Weapon { + + public function DualHugeWarhammer() + { + super("D.WHam", "D.WarHam", "dual huge warhammer", "a dual huge warhammer", "smash", 15, 2400, "A pair of huge war-hammers made almost entirely of steel that only the strongest warriors could use. Getting hit with this might stun the victim.", "Dual Large"); + } + + override public function get attack():Number { + var boost:int = 0; + if (game.player.str >= 80) boost += 8; + return (7 + boost); + } + + override public function canUse():Boolean { + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; + outputText("You aren't skilled enough to handle this pair of weapons! "); + return false; + } + } } \ No newline at end of file diff --git a/classes/classes/Items/Weapons/DualLargeAxe.as b/classes/classes/Items/Weapons/DualLargeAxe.as index 4144ed5b14..9cd8e86d97 100644 --- a/classes/classes/Items/Weapons/DualLargeAxe.as +++ b/classes/classes/Items/Weapons/DualLargeAxe.as @@ -21,7 +21,7 @@ package classes.Items.Weapons } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldLarge) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of weapons! "); return false; } diff --git a/classes/classes/Items/Weapons/DualSuccubiWhip.as b/classes/classes/Items/Weapons/DualSuccubiWhip.as index 664ca98fa9..6651696477 100644 --- a/classes/classes/Items/Weapons/DualSuccubiWhip.as +++ b/classes/classes/Items/Weapons/DualSuccubiWhip.as @@ -1,25 +1,31 @@ -/** - * ... - * @author Ormael - */ -package classes.Items.Weapons -{ - import classes.PerkLib; - import classes.Player; - import classes.Items.Weapon; - - public class DualSuccubiWhip extends Weapon - { - - public function DualSuccubiWhip() - { - super("PSWhip","P.SucWhip","pair of succubi whips","a pair of succubi whips","sexy whipping",10,800,"This pair of coiled length of midnight-black leather practically exudes lust. Though it looks like it could do a lot of damage, the feel of that slick leather impacting flesh is sure to inspire lust. However, it might slowly warp the mind of wielder."); - } - - override public function get attack():Number { - var boost:int = 0; - if (game.player.findPerk(PerkLib.ArcaneLash) >= 0) boost += 8; - return (10 + boost); - } - } +/** + * ... + * @author Ormael + */ +package classes.Items.Weapons +{ + import classes.PerkLib; + import classes.Player; + import classes.Items.Weapon; + + public class DualSuccubiWhip extends Weapon + { + + public function DualSuccubiWhip() + { + super("PSWhip","P.SucWhip","pair of succubi whips","a pair of succubi whips","sexy whipping",10,800,"This pair of coiled length of midnight-black leather practically exudes lust. Though it looks like it could do a lot of damage, the feel of that slick leather impacting flesh is sure to inspire lust. However, it might slowly warp the mind of wielder."); + } + + override public function get attack():Number { + var boost:int = 0; + if (game.player.findPerk(PerkLib.ArcaneLash) >= 0) boost += 8; + return (10 + boost); + } + + override public function canUse():Boolean { + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; + outputText("You aren't skilled enough to handle this pair of weapons! "); + return false; + } + } } \ No newline at end of file diff --git a/classes/classes/Items/Weapons/DualWhip.as b/classes/classes/Items/Weapons/DualWhip.as index 6239e87fc6..e66d40133d 100644 --- a/classes/classes/Items/Weapons/DualWhip.as +++ b/classes/classes/Items/Weapons/DualWhip.as @@ -1,25 +1,31 @@ -/** - * ... - * @author Ormael - */ -package classes.Items.Weapons -{ - import classes.PerkLib; - import classes.Player; - import classes.Items.Weapon; - - public class DualWhip extends Weapon - { - - public function DualWhip() - { - super("P.Whip ", "P.Whip", "pair of coiled whips", "a pair of coiled whips", "whip-crack", 5, 400, "A pair of coiled length of leather designed to lash your foes into submission. There's a chance the bondage inclined might enjoy it!"); - } - - override public function get attack():Number { - var boost:int = 0; - if (game.player.findPerk(PerkLib.ArcaneLash) >= 0) boost += 2; - return (5 + boost); - } - } +/** + * ... + * @author Ormael + */ +package classes.Items.Weapons +{ + import classes.PerkLib; + import classes.Player; + import classes.Items.Weapon; + + public class DualWhip extends Weapon + { + + public function DualWhip() + { + super("P.Whip ", "P.Whip", "pair of coiled whips", "a pair of coiled whips", "whip-crack", 5, 400, "A pair of coiled length of leather designed to lash your foes into submission. There's a chance the bondage inclined might enjoy it!"); + } + + override public function get attack():Number { + var boost:int = 0; + if (game.player.findPerk(PerkLib.ArcaneLash) >= 0) boost += 2; + return (5 + boost); + } + + override public function canUse():Boolean { + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; + outputText("You aren't skilled enough to handle this pair of weapons! "); + return false; + } + } } \ No newline at end of file diff --git a/classes/classes/Items/Weapons/NorthernerIcePicks.as b/classes/classes/Items/Weapons/NorthernerIcePicks.as index 83b7a4ee22..8d3de906e5 100644 --- a/classes/classes/Items/Weapons/NorthernerIcePicks.as +++ b/classes/classes/Items/Weapons/NorthernerIcePicks.as @@ -16,7 +16,7 @@ package classes.Items.Weapons } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldSmall) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of weapons! "); return false; } diff --git a/classes/classes/Items/WeaponsRange/TwinDartPistol.as b/classes/classes/Items/WeaponsRange/TwinDartPistol.as index 56f3ecba6d..7402896bef 100644 --- a/classes/classes/Items/WeaponsRange/TwinDartPistol.as +++ b/classes/classes/Items/WeaponsRange/TwinDartPistol.as @@ -16,7 +16,7 @@ package classes.Items.WeaponsRange } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldFirearms) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of firearms! "); return false; } diff --git a/classes/classes/Items/WeaponsRange/TwinGrakaturd.as b/classes/classes/Items/WeaponsRange/TwinGrakaturd.as index 8d61763c40..b9d83d5ffc 100644 --- a/classes/classes/Items/WeaponsRange/TwinGrakaturd.as +++ b/classes/classes/Items/WeaponsRange/TwinGrakaturd.as @@ -16,7 +16,7 @@ package classes.Items.WeaponsRange } override public function canUse():Boolean { - if (game.player.findPerk(PerkLib.DualWieldFirearms) >= 0) return true; + if (game.player.findPerk(PerkLib.DualWield) >= 0) return true; outputText("You aren't skilled enough to handle this pair of firearms! "); return false; } diff --git a/classes/classes/PerkLib.as b/classes/classes/PerkLib.as index 1ab32c89b5..fa4ecbf1c7 100644 --- a/classes/classes/PerkLib.as +++ b/classes/classes/PerkLib.as @@ -950,8 +950,8 @@ public class PerkLib "Further increases dragon breath attacks power and allows to combine all 4 basic breath types more often. (+600% to dragon breaths damage, +10% of max core Spe as phantom Spe)", "You've chosen the 'Draconic Lungs (Final Form)' perk. Further increases increases dragon breath attacks power and allows to combine all 4 basic breath types more often.").withBuffs({'spe.mult':0.20}); public static const DualWield:PerkType = mk("Dual Wield", "Dual Wield", - "Allows you to wield two normal sized melee weapons (excluding staffs).", - "You've chosen the 'Dual Wield' perk, training skill of using two melee weapons excluding staffs."); + "Allows you to wield two melee weapons.", + "You've chosen the 'Dual Wield' perk, training skill of using two melee weapons."); public static const DualWieldFirearms:PerkType = mk("Dual Wield (Firearms)", "Dual Wield (Firearms)", "Allows you to wield two firearms (non 2H ones).", "You've chosen the 'Dual Wield (Firearms)' perk, training skill of using two firearms (non 2H ones)."); diff --git a/classes/classes/PlayerInfo.as b/classes/classes/PlayerInfo.as index 6f405b7413..b9c6807807 100644 --- a/classes/classes/PlayerInfo.as +++ b/classes/classes/PlayerInfo.as @@ -210,18 +210,11 @@ public class PlayerInfo extends BaseContent { else miscStats += "Day of the Moon Cycle: " + flags[kFLAGS.LUNA_MOON_CYCLE]; miscStats += "\n"; } - miscStats += "Exp needed to lvl up: "; if (player.level < CoC.instance.levelCap) miscStats += "" + player.requiredXP() + "\n"; else miscStats += "N/A (You already at max lvl)\n"; - if (player.herbalismLevel < player.maxHerbalismLevel()) - miscStats += "Herbalism Skill: " + player.herbalismLevel + " / " + player.maxHerbalismLevel() + " (Exp: " + player.herbalismXP + " / " + player.HerbExpToLevelUp() + ")\n"; - else - miscStats += "Herbalism Skill: " + player.herbalismLevel + " / " + player.maxHerbalismLevel() + " (Exp: MAX)\n"; - miscStats += "Ascension points (curently possesed): " + player.ascensionPerkPoints + "\n"; miscStats += "Ascension points (possible to gain during next ascension): " + camp.possibleToGainAscensionPoints() + "\n"; - if (miscStats != "") outputText("\nMiscellaneous Stats\n" + miscStats); @@ -368,6 +361,7 @@ public class PlayerInfo extends BaseContent { addButton(11, "Combat", displayStatsCombat); addButton(12, "NPC's", displayStatsNpcs); addButton(13, "Children", displayStatsChildren); + addButton(14, "Mastery", displayStatsmastery); } public function displayStatsCombat():void { spriteSelect(-1); @@ -404,15 +398,15 @@ public class PlayerInfo extends BaseContent { combatStats += "Black Heals Cost: " + combat.healCostBlack(100) + "%\n"; combatStats += "\n"; combatStats += "Accuracy (1st melee attack): " + (combat.meleeAccuracy() / 2) + "%\n"; - if (player.findPerk(PerkLib.DoubleAttackSmall) >= 0 || player.findPerk(PerkLib.DoubleAttack) >= 0 || player.findPerk(PerkLib.DoubleAttackLarge) >= 0) combatStats += "Accuracy (2nd melee attack): " + ((combat.meleeAccuracy() / 2) - combat.meleeAccuracyPenalty()) + "%\n"; - if (player.findPerk(PerkLib.TripleAttackSmall) >= 0 || player.findPerk(PerkLib.TripleAttack) >= 0 || player.findPerk(PerkLib.TripleAttackLarge) >= 0) combatStats += "Accuracy (3rd melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 2)) + "%\n"; - if (player.findPerk(PerkLib.QuadrupleAttackSmall) >= 0 || player.findPerk(PerkLib.QuadrupleAttack) >= 0) combatStats += "Accuracy (4th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 3)) + "%\n"; - if (player.findPerk(PerkLib.PentaAttackSmall) >= 0 || player.findPerk(PerkLib.PentaAttack) >= 0) combatStats += "Accuracy (5th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 4)) + "%\n"; - if (player.findPerk(PerkLib.HexaAttackSmall) >= 0 || player.findPerk(PerkLib.HexaAttack) >= 0) combatStats += "Accuracy (6th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 5)) + "%\n"; - if (player.findPerk(PerkLib.HectaAttackSmall) >= 0) combatStats += "Accuracy (7th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 6)) + "%\n"; - if (player.findPerk(PerkLib.OctaAttackSmall) >= 0) combatStats += "Accuracy (8th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 7)) + "%\n"; - if (player.findPerk(PerkLib.NonaAttackSmall) >= 0) combatStats += "Accuracy (9th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 8)) + "%\n"; - if (player.findPerk(PerkLib.DecaAttackSmall) >= 0) combatStats += "Accuracy (10th melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() * 9)) + "%\n"; + if (player.findPerk(PerkLib.DoubleAttackSmall) >= 0 || player.findPerk(PerkLib.DoubleAttack) >= 0 || player.findPerk(PerkLib.DoubleAttackLarge) >= 0) combatStats += "Accuracy (2nd melee attack): " + ((combat.meleeAccuracy() / 2) - (combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty())) + "%\n"; + if (player.findPerk(PerkLib.TripleAttackSmall) >= 0 || player.findPerk(PerkLib.TripleAttack) >= 0 || player.findPerk(PerkLib.TripleAttackLarge) >= 0) combatStats += "Accuracy (3rd melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 2)) + "%\n"; + if (player.findPerk(PerkLib.QuadrupleAttackSmall) >= 0 || player.findPerk(PerkLib.QuadrupleAttack) >= 0) combatStats += "Accuracy (4th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 3)) + "%\n"; + if (player.findPerk(PerkLib.PentaAttackSmall) >= 0 || player.findPerk(PerkLib.PentaAttack) >= 0) combatStats += "Accuracy (5th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 4)) + "%\n"; + if (player.findPerk(PerkLib.HexaAttackSmall) >= 0 || player.findPerk(PerkLib.HexaAttack) >= 0) combatStats += "Accuracy (6th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 5)) + "%\n"; + if (player.findPerk(PerkLib.HectaAttackSmall) >= 0) combatStats += "Accuracy (7th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 6)) + "%\n"; + if (player.findPerk(PerkLib.OctaAttackSmall) >= 0) combatStats += "Accuracy (8th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 7)) + "%\n"; + if (player.findPerk(PerkLib.NonaAttackSmall) >= 0) combatStats += "Accuracy (9th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 8)) + "%\n"; + if (player.findPerk(PerkLib.DecaAttackSmall) >= 0) combatStats += "Accuracy (10th melee attack): " + ((combat.meleeAccuracy() / 2) - ((combat.meleeAccuracyPenalty() + combat.meleeDualWieldAccuracyPenalty()) * 9)) + "%\n"; combatStats += "\n"; if (player.statusEffectv1(StatusEffects.Kelt) > 0) { if (player.statusEffectv1(StatusEffects.Kindra) < 1) @@ -435,9 +429,9 @@ public class PlayerInfo extends BaseContent { if (player.hasPerk(PerkLib.DoubleStrike)) combatStats += "Throwed Weapon Accuracy (2nd range attack): " + ((combat.arrowsAccuracy() / 2) - 15) + "%\n"; if (player.hasPerk(PerkLib.TripleStrike)) combatStats += "Throwed Weapon Accuracy (3rd range attack): " + ((combat.arrowsAccuracy() / 2) - 30) + "%\n"; combatStats += "Firearms Accuracy (1st range attack): " + (combat.firearmsAccuracy() / 2) + "%\n"; - if (player.hasPerk(PerkLib.AmateurGunslinger)) combatStats += "Firearms Accuracy (2nd range attack): " + ((combat.firearmsAccuracy() / 2) - 10) + "%\n"; - if (player.hasPerk(PerkLib.ExpertGunslinger)) combatStats += "Firearms Accuracy (3rd range attack): " + ((combat.firearmsAccuracy() / 2) - 20) + "%\n"; - if (player.hasPerk(PerkLib.MasterGunslinger)) combatStats += "Firearms Accuracy (4th range attack): " + ((combat.firearmsAccuracy() / 2) - 30) + "%\n"; + if (player.hasPerk(PerkLib.AmateurGunslinger)) combatStats += "Firearms Accuracy (2nd range attack): " + ((combat.firearmsAccuracy() / 2) - (combat.firearmsAccuracyPenalty() + combat.firearmsDualWieldAccuracyPenalty())) + "%\n"; + if (player.hasPerk(PerkLib.ExpertGunslinger)) combatStats += "Firearms Accuracy (3rd range attack): " + ((combat.firearmsAccuracy() / 2) - ((combat.firearmsAccuracyPenalty() + combat.firearmsDualWieldAccuracyPenalty()) * 2)) + "%\n"; + if (player.hasPerk(PerkLib.MasterGunslinger)) combatStats += "Firearms Accuracy (4th range attack): " + ((combat.firearmsAccuracy() / 2) - ((combat.firearmsAccuracyPenalty() + combat.firearmsDualWieldAccuracyPenalty()) * 3)) + "%\n"; combatStats += "\n"; combatStats += "Soulskill Effect Multiplier: " + Math.round(100 * combat.soulskillMod()) + "%\n"; combatStats += "Physical Soulskill Effect Multiplier: " + Math.round(100 * combat.soulskillPhysicalMod()) + "%\n"; @@ -445,13 +439,6 @@ public class PlayerInfo extends BaseContent { combatStats += "Soulskill Cost: " + Math.round(100 * combat.soulskillCost()) + "%\n"; combatStats += "\n"; combatStats += "Unarmed: +" + combat.unarmedAttack() + "\n"; - if (flags[kFLAGS.RAPHAEL_RAPIER_TRANING] > 0) combatStats += "Rapier Skill: " + flags[kFLAGS.RAPHAEL_RAPIER_TRANING] + " / 4\n"; - - if (player.teaseLevel < combat.maxTeaseLevel()) - combatStats += "Tease Skill: " + player.teaseLevel + " / " + combat.maxTeaseLevel() + " (Exp: " + player.teaseXP + " / " + combat.teaseExpToLevelUp() + ")\n"; - else - combatStats += "Tease Skill: " + player.teaseLevel + " / " + combat.maxTeaseLevel() + " (Exp: MAX)\n"; - combatStats += "\n"; var mins:Object = player.getAllMinStats(); combatStats += "Strength Cap: " + Math.floor(player.strStat.max) + "\n"; combatStats += "Ghost Strength: +" + Math.floor(combat.ghostStrength()) + "\n"; @@ -515,6 +502,7 @@ public class PlayerInfo extends BaseContent { addButtonDisabled(11, "Combat", "You are currently at this stats page."); addButton(12, "NPC's", displayStatsNpcs); addButton(13, "Children", displayStatsChildren); + addButton(14, "Mastery", displayStatsmastery); } public function displayStatsNpcs():void { spriteSelect(-1); @@ -999,6 +987,7 @@ public class PlayerInfo extends BaseContent { addButton(11, "Combat", displayStatsCombat); addButtonDisabled(12, "NPC's", "You are currently at this stats page."); addButton(13, "Children", displayStatsChildren); + addButton(14, "Mastery", displayStatsmastery); } public function displayStatsChildren():void { spriteSelect(-1); @@ -1154,6 +1143,35 @@ public class PlayerInfo extends BaseContent { addButton(11, "Combat", displayStatsCombat); addButton(12, "NPC's", displayStatsNpcs); addButtonDisabled(13, "Children", "You are currently at this stats page."); + addButton(14, "Mastery", displayStatsmastery); + } + public function displayStatsmastery():void { + spriteSelect(-1); + clearOutput(); + displayHeader("Mastery Stats"); + // Begin Mastery Stats + var masteryStats:String = ""; + if (flags[kFLAGS.RAPHAEL_RAPIER_TRANING] > 0) masteryStats += "Rapier Skill: " + flags[kFLAGS.RAPHAEL_RAPIER_TRANING] + " / 4\n"; + masteryStats += "\n"; + if (player.teaseLevel < combat.maxTeaseLevel()) + masteryStats += "Tease Skill: " + player.teaseLevel + " / " + combat.maxTeaseLevel() + " (Exp: " + player.teaseXP + " / " + combat.teaseExpToLevelUp() + ")\n"; + else + masteryStats += "Tease Skill: " + player.teaseLevel + " / " + combat.maxTeaseLevel() + " (Exp: MAX)\n"; + masteryStats += "\n"; + if (player.herbalismLevel < player.maxHerbalismLevel()) + masteryStats += "Herbalism Skill: " + player.herbalismLevel + " / " + player.maxHerbalismLevel() + " (Exp: " + player.herbalismXP + " / " + player.HerbExpToLevelUp() + ")\n"; + else + masteryStats += "Herbalism Skill: " + player.herbalismLevel + " / " + player.maxHerbalismLevel() + " (Exp: MAX)\n"; + if (masteryStats != "") + outputText("\nMastery\n" + masteryStats); + // End Mastery Stats + menu(); + addButton(0, "Next", playerMenu); + addButton(10, "General", displayStats); + addButton(11, "Combat", displayStatsCombat); + addButton(12, "NPC's", displayStatsNpcs); + addButton(13, "Children", displayStatsChildren); + addButtonDisabled(14, "Mastery", "You are currently at this stats page."); } //------------ diff --git a/classes/classes/Scenes/Changelog.as b/classes/classes/Scenes/Changelog.as index 5612f8e930..bd1362900c 100644 --- a/classes/classes/Scenes/Changelog.as +++ b/classes/classes/Scenes/Changelog.as @@ -88,11 +88,14 @@ package classes.Scenes outputText("-Jtecx many typo corrections.\n"); outputText("-Fixed bugs: Liadri bugfixes, Pyro bugfixes/typo corrections, Cold Fish Soup missing it main intendeed effect (libido lowering), super perk points not reseting on ascension, gremlin tf text error, some of the scenes only looking for correct size of 1st cock ignoring any other PC could have\n\n"); outputText("Version 0.8p:\n\n"); + outputText("-New range weapon/tome (by Ormael): Golemancy Evocation Manuscript - buyable at golemancer shop in He'Xin'Dao. Cost 200 gems. Increase golems damage by 50% of base value.\n"); outputText("-Bit of increased secondary stat bars gains for monsters at milestones to keep them protected from nuking by PC.\n"); outputText("-With too large diff in levels damage reduction will return 1 point of dmg instead of 0. With some effects form items or perks that will still give chance to get few points of dmg even if PC is vastly underleveled compared to enemy.\n"); outputText("-Huge, Gigantic, Colossal type of enemies gained now natural lvl diff bonus (it mean for level difference between PC and enemy they treated as few levels higher enemies than their displayed level). Huge +2, Gigantic +5, Colossal +10.\n"); outputText("-Boost to elementals dmg related to amount of summoned elementals gained another tier after pc summon 13th elemental (currently max amount of diff elementals to summon). Base damage that elemental deal when attacking was increased 2x.\n"); outputText("-Job: Elemental Conjuer now allow to summon 2 elementals.\n"); + outputText("-Added Envocation Tome option to elementals summonig menu - it would allow to read informations about elementals that PC can currently summon. So to give some idea which elemental would be most useful to be summoned in current situation PC is.\n"); + outputText("-Moved Elementals specials and Golems attack options into 2 menus in Other submenu in combat menu.\n"); //outputText("-New shield (by Ormael): Spiked Massive Shield - obtained by . Base block 42, cost 5600 gems. Req. to have 120+ str to reach base block value. \n"); //outputText("-New tier 11 strength lvl-up perk: Too Angry to Die. Req. Fuel for the Fire perk. Effect: . (+600 max Wrath)\n"); //outputText("-New tier 0 misc lvl-up perk: Metamorph (Ex). Req. Metamorph perk. Effect: Opening more options to change PC body. Some would be accesable right away and other will require to unlock them using genetic memory.\n"); @@ -102,14 +105,12 @@ package classes.Scenes //outputText("-Dam can be upgraded 2 times (up to 3rd tier of wood dam) and Fishery once (to allow 2 npc's working at it - it also gonna increase each worker fish production by 20%)\n"); //outputText("-New TF item (by Pyromania): Troll Fig. Dropped by Corrupted Troll enemies.\n");// Using this item will turn PC into troll. Half Panda/Panda bonuses at 5/10 pts in racial score (scalable): +50/100 to max Str, +30/70 to max Tou, -5/20 to max Int. //outputText("-New TF item (by Pyromania): Icy Fig. Dropped by Glacial Troll enemies.\n");// Using this item will turn PC into troll. Half Panda/Panda bonuses at 5/10 pts in racial score (scalable): +50/100 to max Str, +30/70 to max Tou, -5/20 to max Int. - outputText("-Added Envocation Tome option to elementals summonig menu - it would allow to read informations about elementals that PC can currently summon. So to give some idea which elemental would be most useful to be summoned in current situation PC is.\n"); - outputText("-Moved Elementals specials and Golems attack options into 2 menus in Other submenu in combat menu.\n"); - outputText("-New range weapon/tome (by Ormael): Golemancy Evocation Manuscript - buyable at golemancer shop in He'Xin'Dao. Cost 200 gems. Increase golems damage by 50% of base value.\n"); - outputText("-\n"); - outputText("-\n"); - outputText("-\n"); - outputText("-\n"); - outputText("-\n"); + outputText("-New scene for Aiko and PC with kitsune tails by Jtexc.\n"); + outputText("-Revisions/corrections to Luna content by TerraParker.\n"); + outputText("-New range weapon/tome (by Ormael): Elementalist’s Tome - buyable at Giacomo. Cost 200 gems. Increase elementals damage by 50% of base value.\n"); + outputText("-Change to handling dual weapons. No need ot get tons of dual wield perks and only one to rule them all... Dual Wield perk is all what PC would need. Of course now that will mean dual wielding would have penalties: -50% damage and -25% accuracy.");// There would be two ways to offset those: get specific for that type of weapons perk + //outputText("(so current dual wield (type of weapon) perks will have role but not of 'I need it to use this type of weapons) or simply training/using them to gain better mastery of using them.\n"); + outputText("-Jtecx small addition to kitsunes about corruption effects on PC appearance.\n"); outputText("-\n"); outputText("-\n"); outputText("-\n"); @@ -121,7 +122,7 @@ package classes.Scenes outputText("-\n");//, ?Vala?, ?Tamani+her brood?, ?minotaur sons? - for out of camp lvl-ing npc's outputText("-\n");//Motivation (Ex) now req. additionaly Intermediate Leadership perk//Motivation (Su) now req. additionaly Advanced Leadership perk outputText("-\n");//New range weapon (by Liadri): - buyable at Tripxi shop in Tel'Adre after PC find and bring back it parts from area. Cost xx0 gems. Base atk is xx and ammo clip size x. - outputText("-Fixed bugs: choice for getting job perks from past life always appearing during character creation\n");/*ostatni punkt changelogu + outputText("-Fixed bugs: choice for getting job perks from past life always appearing during character creation, missing check for dual wield perk on two whip type weapons\n");/*ostatni punkt changelogu outputText("-\n"); outputText("-\n"); outputText("-\n"); diff --git a/classes/classes/Scenes/Combat/Combat.as b/classes/classes/Scenes/Combat/Combat.as index 88f03224ca..326d4624a8 100644 --- a/classes/classes/Scenes/Combat/Combat.as +++ b/classes/classes/Scenes/Combat/Combat.as @@ -1086,7 +1086,7 @@ public class Combat extends BaseContent { if (SceneLib.urtaQuest.isUrta()) { flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] = 1; } - if (player.weaponPerk != "Large" && player.weaponPerk != "Dual Large" && player.weaponPerk != "Small" && player.weaponPerk != "Dual Small" && player.weaponPerk != "Massive" && player.weaponPerk != "Staff" && !isWieldingRangedWeapon()) { + if ((player.weaponPerk == "" || player.weaponPerk != "Dual") && !isWieldingRangedWeapon()) { if (flags[kFLAGS.DOUBLE_ATTACK_STYLE] >= 0) { if (flags[kFLAGS.DOUBLE_ATTACK_STYLE] == 5) { if (player.hasPerk(PerkLib.HexaAttack)) flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] = 6; @@ -2171,6 +2171,40 @@ public class Combat extends BaseContent { if (accmmodpenalty < 0) accmmodpenalty = 0; return accmmodpenalty; } + + public function meleeDualWieldAccuracyPenalty():Number { + var accmdwmodpenalty:Number = 0; + if (player.weaponPerk == "Dual") { + accmdwmodpenalty -= 25; + } + if (player.weaponPerk == "Dual Large") { + accmdwmodpenalty -= 25; + } + if (player.weaponPerk == "Dual Small") { + accmdwmodpenalty -= 25; + } + if (player.weaponPerk == "Quad") { + accmdwmodpenalty -= 75; + } + return accmdwmodpenalty; + } + + public function meleeDualWieldDamagePenalty():Number { + var dmgmdwmodpenalty:Number = 1; + if (player.weaponPerk == "Dual") { + dmgmdwmodpenalty -= 0.5; + } + if (player.weaponPerk == "Dual Large") { + dmgmdwmodpenalty -= 0.5; + } + if (player.weaponPerk == "Dual Small") { + dmgmdwmodpenalty -= 0.5; + } + if (player.weaponPerk == "Quad") { + dmgmdwmodpenalty -= 0.9; + } + return dmgmdwmodpenalty; + } public function arrowsAccuracy():Number { var accmod:Number = 80; @@ -2223,6 +2257,34 @@ public class Combat extends BaseContent { return faccmod; } + public function firearmsAccuracyPenalty():Number { + var accfmodpenalty:Number = 10; + if (accfmodpenalty < 0) accfmodpenalty = 0; + return accfmodpenalty; + } + + public function firearmsDualWieldAccuracyPenalty():Number { + var accfdwmodpenalty:Number = 0; + if (player.weaponPerk == "Dual Firearms") { + accfdwmodpenalty -= 25; + } + if (player.weaponPerk == "Quad Firearms") { + accfdwmodpenalty -= 75; + } + return accfdwmodpenalty; + } + + public function firearmsDualWieldDamagePenalty():Number { + var dmgfdwmodpenalty:Number = 1; + if (player.weaponPerk == "Dual Firearms") { + dmgfdwmodpenalty -= 0.5; + } + if (player.weaponPerk == "Quad Firearms") { + dmgfdwmodpenalty -= 0.9; + } + return dmgfdwmodpenalty; + } + public function oneArrowTotalCost():Number { var onearrowcost:Number = 25; //additional arrow effects costs @@ -2959,6 +3021,7 @@ public class Combat extends BaseContent { else if (player.weaponRangeAttack >= 151 && player.weaponRangeAttack < 201) damage *= (4.75 + ((player.weaponRangeAttack - 150) * 0.015)); else if (player.weaponRangeAttack >= 201 && player.weaponRangeAttack < 251) damage *= (5.5 + ((player.weaponRangeAttack - 200) * 0.01)); else damage *= (6 + ((player.weaponRangeAttack - 250) * 0.005)); + firearmsDualWieldAccuracyPenalty(); //any aoe effect from firearms if (monster.plural) { if (player.weaponRange == weaponsrange.ADBSCAT) damage *= 2; @@ -3219,7 +3282,8 @@ public class Combat extends BaseContent { if (flags[kFLAGS.MULTIPLE_ARROWS_STYLE] > 1) { if (player.ammo > 0) { flags[kFLAGS.MULTIPLE_ARROWS_STYLE] -= 1; - flags[kFLAGS.ARROWS_ACCURACY] += 10; + flags[kFLAGS.ARROWS_ACCURACY] += firearmsAccuracyPenalty(); + flags[kFLAGS.ATTACKS_ACCURACY] += firearmsDualWieldAccuracyPenalty(); shootWeapon(); } else { outputText("Your firearm clip is empty.\n\n"); @@ -4126,6 +4190,7 @@ public class Combat extends BaseContent { else if (player.weaponAttack >= 101 && player.weaponAttack < 151) damage *= (3.75 + ((player.weaponAttack - 100) * 0.02)); else if (player.weaponAttack >= 151 && player.weaponAttack < 201) damage *= (4.75 + ((player.weaponAttack - 150) * 0.015)); else damage *= (5.5 + ((player.weaponAttack - 200) * 0.01)); + meleeDualWieldDamagePenalty(); //Bonus sand trap damage! if (monster.hasStatusEffect(StatusEffects.Level) && (monster is SandTrap || monster is Alraune)) damage = Math.round(damage * 1.75); //All special weapon effects like...fire/ice @@ -4391,8 +4456,6 @@ public class Combat extends BaseContent { else teaseXP(1); } - - } else if (vbladeeffect) outputText("As you strike, the sword shine with a red glow as somehow you aim straight for [monster a] [monster name] throat. "); else if (MDODialogs) { @@ -4680,6 +4743,7 @@ public class Combat extends BaseContent { if (flags[kFLAGS.MULTIPLE_ATTACKS_STYLE] >= 2) { flags[kFLAGS.MULTIPLE_ATTACKS_STYLE]--; flags[kFLAGS.ATTACKS_ACCURACY] += meleeAccuracyPenalty(); + flags[kFLAGS.ATTACKS_ACCURACY] += meleeDualWieldAccuracyPenalty(); attack2(); return; } diff --git a/classes/classes/Scenes/Combat/PhysicalSpecials.as b/classes/classes/Scenes/Combat/PhysicalSpecials.as index b3d5e9388d..d74aadd2cf 100644 --- a/classes/classes/Scenes/Combat/PhysicalSpecials.as +++ b/classes/classes/Scenes/Combat/PhysicalSpecials.as @@ -5759,4 +5759,4 @@ public class PhysicalSpecials extends BaseCombatContent { public function PhysicalSpecials() { } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/classes/classes/Scenes/Explore/Giacomo.as b/classes/classes/Scenes/Explore/Giacomo.as index 16c11b1db8..d290f8cf01 100644 --- a/classes/classes/Scenes/Explore/Giacomo.as +++ b/classes/classes/Scenes/Explore/Giacomo.as @@ -154,6 +154,7 @@ public class Giacomo extends BaseContent implements TimeAwareInterface { addButton(6, "Black Book", pitchBlackBook); if (player.findPerk(PerkLib.PrestigeJobGreySage) >= 0) addButton(7, "Grey Book", pitchGreyBook); else addButtonDisabled(7, "???", "Req. Prestige Job: Grey Sage"); + addButton(8, "E. Tome", pitchElementalistsTome).hint("Elementalist’s Tome"); if (Holidays.nieveHoliday()) { if (flags[kFLAGS.CHRISTMAS_TREE_LEVEL] == 0) addButton(8, "Mysterious Seed", pitchMysteriousSeed); if (flags[kFLAGS.CHRISTMAS_TREE_LEVEL] == 5) addButton(9, "Decorations", pitchDecorations); @@ -558,6 +559,28 @@ public class Giacomo extends BaseContent implements TimeAwareInterface { } } + private function pitchElementalistsTome():void { + spriteSelect(23); + clearOutput(); + outputText("Giacomo holds up an Elementalist’s Tome. \"While you may not find value in this as a simple tome,\", Giacomo opens, \"you never know what you may learn from it! I will offer the super-cheap price of 200 gem!\""); + doYesNo(buyElementalistsTome, bookMenu); + } + + private function buyElementalistsTome():void { + spriteSelect(23); + clearOutput(); + if (player.gems < 200) { + outputText("\n\nGiacomo sighs, indicating you need 200 gem to purchase this item."); + doNext(bookMenu); + } + else { + outputText("\n\nThe crazy merchant nods satisfied when you hand him over two hundred gems and in exchange gives you an Elementalist’s Tome."); + player.gems -= 200; + statScreenRefresh(); + inventory.takeItem(weaponsrange.E_TOME_, bookMenu); + } + } + private function pitchDildo():void { spriteSelect(23); clearOutput(); diff --git a/classes/classes/Scenes/NPCs/LunaFollower.as b/classes/classes/Scenes/NPCs/LunaFollower.as index f3bcc5be8a..a230c03d5d 100644 --- a/classes/classes/Scenes/NPCs/LunaFollower.as +++ b/classes/classes/Scenes/NPCs/LunaFollower.as @@ -114,7 +114,7 @@ public class LunaFollower extends NPCAwareContent implements SaveableState if (flags[kFLAGS.LUNA_FOLLOWER] > 4) { addButton(3, "Meal", mealLuna); addButton(4, "Nurse", nurseLuna); - button(4).disableIf(player.HP >= player.maxHP() && !player.statStore.hasBuff("Curse"), "You are currently in perfect health."); + button(4).disableIf(player.HP >= player.maxOverHP() && !player.statStore.hasBuff("Curse"), "You are currently in perfect health."); button(4).disableIf(Nursed, "Luna needs time to recharge her Mana before she can heal you again. Try tomorrow."); } if (flags[kFLAGS.LUNA_AFFECTION] >= 50) {