From a4d2a79ae0907aeedf0f9d314fe8ba098be2ab26 Mon Sep 17 00:00:00 2001 From: Harbinger Date: Thu, 27 Sep 2012 00:02:54 -0700 Subject: [PATCH] Misc bugfixes * Get rid of superfluous period in asshole descriptions * Bring Build.EATSTRAINS into alignment with the medieval storyline (there's no cars for him to crush) * Fix hair * Standardize penis _location variable, get rid of _loc, fix location text so it's more flexible. * Add location text to testicles, standardize _location. * Pluralize vaginal description if needed * Fix the stacking effect of Demon mutations, coinflip if they get any at all. * Fix Abilities screen exit not triggering screen refresh * Add testing creature for NPC stuff * Missing files. --- src/CreatureRegistry.as | 3 ++ src/org/sevenchan/dongs/bodyparts/Asshole.as | 2 +- src/org/sevenchan/dongs/bodyparts/Build.as | 2 +- src/org/sevenchan/dongs/bodyparts/Hair.as | 7 +-- src/org/sevenchan/dongs/bodyparts/Penis.as | 7 ++- src/org/sevenchan/dongs/bodyparts/Testicle.as | 12 +++-- src/org/sevenchan/dongs/bodyparts/Vagina.as | 2 +- src/org/sevenchan/dongs/creature/Demon.as | 59 +++++++++++++++++++-- src/org/sevenchan/dongs/creature/Player.as | 2 +- src/org/sevenchan/dongs/creature/npc/Gargoyle.as | 46 +++++++++++++++++ src/org/sevenchan/dongs/screens/CombatScreen.as | 3 +- .../dongs/screens/encounters/ArachnidEncounter.as | 57 ++++++++++++++++++++ .../dongs/screens/encounters/GargoyleEncounter.as | 60 ++++++++++++++++++++++ 13 files changed, 240 insertions(+), 22 deletions(-) create mode 100644 src/org/sevenchan/dongs/creature/npc/Gargoyle.as create mode 100644 src/org/sevenchan/dongs/screens/encounters/ArachnidEncounter.as create mode 100644 src/org/sevenchan/dongs/screens/encounters/GargoyleEncounter.as diff --git a/src/CreatureRegistry.as b/src/CreatureRegistry.as index fa7e0c0..8522827 100644 --- a/src/CreatureRegistry.as +++ b/src/CreatureRegistry.as @@ -2,12 +2,15 @@ package { import org.sevenchan.dongs.Creature; import org.sevenchan.dongs.creature.*; + import org.sevenchan.dongs.creature.npc.*; /** * ... * @author Harbinger */ public class CreatureRegistry { + // NPCs + public static function get gargoyle():Creature { return new Gargoyle();} // BOSSDUDES public static function get ala():Creature { return new Ala(); } diff --git a/src/org/sevenchan/dongs/bodyparts/Asshole.as b/src/org/sevenchan/dongs/bodyparts/Asshole.as index 900a3f7..7b21ac4 100644 --- a/src/org/sevenchan/dongs/bodyparts/Asshole.as +++ b/src/org/sevenchan/dongs/bodyparts/Asshole.as @@ -78,7 +78,7 @@ package org.sevenchan.dongs.bodyparts var o:String = ""; if (num > 0) o += num + " "; - return o+tightness+filled+ " "+_name + " asshole"+((num>1)?"s":"")+", "+location+"."+stretched; + return o+tightness+filled+ " "+_name + " asshole"+((num>1)?"s":"")+", "+location+""+stretched; } diff --git a/src/org/sevenchan/dongs/bodyparts/Build.as b/src/org/sevenchan/dongs/bodyparts/Build.as index bcb835c..9baeca4 100644 --- a/src/org/sevenchan/dongs/bodyparts/Build.as +++ b/src/org/sevenchan/dongs/bodyparts/Build.as @@ -14,7 +14,7 @@ package org.sevenchan.dongs.bodyparts public static const CHUBBY:Build = new Build(1.5, -0.5,"is a bit chubby, with a slightly bulging belly and a round face"); public static const MALNOURISHED:Build = new Build(-1.5, -0.5,"is terrifyingly malnourished; Bones poke out in seemingly every direction"); public static const PRETTYSTRONG:Build = new Build(1, 1.5,"has lean muscles rippling across %POS% slim body"); - public static const EATSTRAINS:Build = new Build(1, 1.5, "is covered in a swarm of immense, car-crushing muscles that even ten bucket-fulls of steroids couldn't possibly produce"); + public static const EATSTRAINS:Build = new Build(1, 1.5, "is covered in a swarm of immense muscles that you suspect could crush boulders"); public var weightMultiplier:Number; public var strengthMultiplier:Number; diff --git a/src/org/sevenchan/dongs/bodyparts/Hair.as b/src/org/sevenchan/dongs/bodyparts/Hair.as index db6fc6a..487b4f1 100644 --- a/src/org/sevenchan/dongs/bodyparts/Hair.as +++ b/src/org/sevenchan/dongs/bodyparts/Hair.as @@ -11,17 +11,18 @@ package org.sevenchan.dongs.bodyparts registerClassAlias("P_Hair", Hair); public static const BALD:Hair = new Hair("no hair whatsoever"); - + private var descr:String; private var _value:Number; public function get value():Number { return _value; } - public var descr:String; public function Hair(_descr:String="") { this.descr = _descr; } - public function getDescription():String { return descr; } + public function toString():String { + return descr; + } public function getShortDescr(withModifier:Boolean = false):String { var t:String = "hair"; diff --git a/src/org/sevenchan/dongs/bodyparts/Penis.as b/src/org/sevenchan/dongs/bodyparts/Penis.as index ee768ce..6afc3e4 100644 --- a/src/org/sevenchan/dongs/bodyparts/Penis.as +++ b/src/org/sevenchan/dongs/bodyparts/Penis.as @@ -17,7 +17,6 @@ package org.sevenchan.dongs.bodyparts public var size:Number = 0; public var sizeMult:Number = 1; public var _name:String; - public var _loc:String; private var _value:Number; public var _location:String = ""; @@ -31,7 +30,7 @@ package org.sevenchan.dongs.bodyparts _value = value; size = sz; this._name = name; - _loc = ""; + _location = ""; } public function get name():String @@ -88,8 +87,8 @@ package org.sevenchan.dongs.bodyparts dm = "single "+dm; if (num > 1) dm = num + " " + dm; - if (_loc.length > 0) - dm = dm + " growing out of %POS% " + _loc; + if (_location.length > 0) + dm = dm + " growing out of " + _location; return dm; } diff --git a/src/org/sevenchan/dongs/bodyparts/Testicle.as b/src/org/sevenchan/dongs/bodyparts/Testicle.as index 1dc6a02..85bd370 100644 --- a/src/org/sevenchan/dongs/bodyparts/Testicle.as +++ b/src/org/sevenchan/dongs/bodyparts/Testicle.as @@ -19,15 +19,15 @@ package org.sevenchan.dongs.bodyparts public var targetFX:Enchantment = null; // Enchantment to apply to the target after cumming public var hostFX:Enchantment = null; // Enchantment to apply to the host once the balls are applied, and once every action. public var host:Creature = null; - public var _loc:String = ""; + public var _location:String = ""; private var _value:Number; public function get value():Number { return _value; } - public function get location():String { return _loc; } - public function set location(value:String):void { _loc=value; } + public function get location():String { return _location; } + public function set location(value:String):void { _location=value; } public var TESTICLE_SYNONYMS:Array = [ "ball","nut","knocker","testicle" @@ -40,7 +40,7 @@ package org.sevenchan.dongs.bodyparts public function Testicle(name:String="",load:Number=0,targetEnch:Enchantment=null,hostEnch:Enchantment=null,semenDesc:String="") { this._name = name; - this._loc = ""; + this._location = ""; normalLoad = load; targetFX = targetEnch; hostFX = hostEnch; @@ -64,7 +64,7 @@ package org.sevenchan.dongs.bodyparts sizeDesc = "shrivelled "; } if (loadMult > 100) { - sizeDesc = "canteloped-sized, ballooning "; + sizeDesc = "melon-sized, ballooning "; } if (loadMult < 10) { sizeDesc = "apple-sized, greatly swollen "; @@ -83,6 +83,8 @@ package org.sevenchan.dongs.bodyparts o += num + " "; o += sizeDesc +" "; o += Utils.pluralize(num, name); + if (_location.length > 0) + o = o + " growing out of " + _location; return o; } diff --git a/src/org/sevenchan/dongs/bodyparts/Vagina.as b/src/org/sevenchan/dongs/bodyparts/Vagina.as index fe18081..0245b79 100644 --- a/src/org/sevenchan/dongs/bodyparts/Vagina.as +++ b/src/org/sevenchan/dongs/bodyparts/Vagina.as @@ -37,7 +37,7 @@ package org.sevenchan.dongs.bodyparts var loc:String = "right where it should be, between your legs"; if (location.length > 0) loc = ", " + location; - return num + " " +tightness + filled + " " + getShortDescr(true) + " " + loc; + return num + " " +tightness + filled + " " + name+" "+Utils.pluralize(num,"pussy","pussies") + " " + location; } override public function getShortDescr(withModifier:Boolean = false):String diff --git a/src/org/sevenchan/dongs/creature/Demon.as b/src/org/sevenchan/dongs/creature/Demon.as index 245d5a3..9bbb35b 100644 --- a/src/org/sevenchan/dongs/creature/Demon.as +++ b/src/org/sevenchan/dongs/creature/Demon.as @@ -184,6 +184,10 @@ package org.sevenchan.dongs.creature this.gender = Gender.HERM; break; } + this.balls = new Vector.(); + this._dicks = new Vector.(); + this.breasts = new Vector.(); + this.vaginas = new Vector.(); if(gender.hasDick) { this.balls.push( BodyPartRegistry.demon_testicle, @@ -202,7 +206,9 @@ package org.sevenchan.dongs.creature BodyPartRegistry.demon_breast ); } - doMutations(); + // Cionflip to get mutations or not + if(MathUtils.rand(0,1)==0) + doMutations(); } private function getNewDick():Penis { @@ -211,23 +217,68 @@ package org.sevenchan.dongs.creature return wang; } + private const mutationLocations:Array = new Array( + "a leg", + "%POS% chin", + "", // the normal spot + "an arm", + "%POS% face" + ); private function doMutations():void { var i:int = 0; // Dick & Balls if(gender.hasDick) { for (i = 0; i < MathUtils.rand(0, 2); i++) { - this.dicks.push(getNewDick()); + var p:Penis = null; + switch(MathUtils.rand(0, 2)) + { + case 0: + p = BodyPartRegistry.human_penis; + case 1: + p = BodyPartRegistry.arachnid_penis; + case 2: + p = BodyPartRegistry.demon_penis; + } + p._location = MathUtils.getRandomArrayEntry(mutationLocations); + p.size = MathUtils.rand(1, 24, false); + this.dicks.push(t); } for (i = 0; i < MathUtils.rand(0, 3); i++) { - this.balls.push(BodyPartRegistry.demon_testicle); + var t:Testicle = null; + switch(MathUtils.rand(0, 3)) + { + case 0: + t = BodyPartRegistry.human_testicle; + case 1: + t = BodyPartRegistry.demon_testicle; + case 2: + t = BodyPartRegistry.arachnid_testicle; + case 3: + t = BodyPartRegistry.manticore_testicle; + } + t._location = MathUtils.getRandomArrayEntry(mutationLocations); + t.normalLoad = MathUtils.rand(1, 1000, false); + t.loadMult = MathUtils.rand(1, 200, false); + this.balls.push(t); } } // Vags & Boobs if(gender.hasVag) { for (i = 0; i < MathUtils.rand(0, 2); i++) { - this.vaginas.push(BodyPartRegistry.demon_vagina); + var v:Vagina = null; + switch(MathUtils.rand(0, 2)) + { + case 0: + v = BodyPartRegistry.human_vagina; + case 1: + v = BodyPartRegistry.demon_vagina; + case 2: + v = BodyPartRegistry.arachnid_vagina; + } + v._location = MathUtils.getRandomArrayEntry(mutationLocations); + this.vaginas.push(v); } for (i = 0; i < MathUtils.rand(0, 2); i++) { this.breasts.push(BodyPartRegistry.demon_breast); diff --git a/src/org/sevenchan/dongs/creature/Player.as b/src/org/sevenchan/dongs/creature/Player.as index 015ef4e..a1700e1 100644 --- a/src/org/sevenchan/dongs/creature/Player.as +++ b/src/org/sevenchan/dongs/creature/Player.as @@ -192,7 +192,7 @@ package org.sevenchan.dongs.creature // // In other words, you're an average human, which probably won't last long down here. // - descr += "

You, " + baseType.ownName + ", are " + Utils.A(baseType.gender.label) + " " + baseType.gender.label + " " + baseType.getTypeName() + " whose body " + baseType.build.getDescription() + "." + " You also possess " + baseType.hair.getDescription(); + descr += "

You, " + baseType.ownName + ", are " + Utils.A(baseType.gender.label) + " " + baseType.gender.label + " " + baseType.getTypeName() + " whose body " + baseType.build.getDescription() + "." + " You also possess " + baseType.hair.toString(); if (baseType.hair == Hair.BALD) descr += ", your glistening scalp distracting from your "; diff --git a/src/org/sevenchan/dongs/creature/npc/Gargoyle.as b/src/org/sevenchan/dongs/creature/npc/Gargoyle.as new file mode 100644 index 0000000..6fa3cfb --- /dev/null +++ b/src/org/sevenchan/dongs/creature/npc/Gargoyle.as @@ -0,0 +1,46 @@ +package org.sevenchan.dongs.creature.npc +{ + import org.sevenchan.dongs.Creature; + import org.sevenchan.dongs.screens.encounters.GargoyleEncounter; + /** + * ... + * @author Harbinger + */ + public class Gargoyle extends NPC + { + public var confidence:int = 0; + public function Gargoyle() + { + super("Gargoyle"); + // Defer setup until later. + } + override public function getTypeName():String + { + return "Gargoyle"; + } + override public function onNewNPC():void + { + trace("Gargoyle.onNewNPC()!"); + } + + override public function onLoad(npc:NPC):void + { + trace("Gargoyle.onLoaded()!", npc); + if (npc!=null) + { + confidence = (npc as Gargoyle).confidence; + } + } + override public function onEncounter(ply:Creature):Boolean + { + GargoyleEncounter.push(this); + return true; + } + override public function getHostile(subj:Creature):Boolean + { + return false; + } + + } + +} \ No newline at end of file diff --git a/src/org/sevenchan/dongs/screens/CombatScreen.as b/src/org/sevenchan/dongs/screens/CombatScreen.as index 358f8ce..b4df45f 100644 --- a/src/org/sevenchan/dongs/screens/CombatScreen.as +++ b/src/org/sevenchan/dongs/screens/CombatScreen.as @@ -209,8 +209,7 @@ package org.sevenchan.dongs.screens } if (id == 0) { act = "main"; - updateScreen(); - return false; + return processButtonPress(-1); } else { (ab[id - 1] as Ability).activate(main.player, combatant); main.player.notifyEnchantments(new CombatTurnEvent(this,combatant)); diff --git a/src/org/sevenchan/dongs/screens/encounters/ArachnidEncounter.as b/src/org/sevenchan/dongs/screens/encounters/ArachnidEncounter.as new file mode 100644 index 0000000..7cd0d6a --- /dev/null +++ b/src/org/sevenchan/dongs/screens/encounters/ArachnidEncounter.as @@ -0,0 +1,57 @@ +package org.sevenchan.dongs.screens.encounters +{ + import org.sevenchan.AdventureController; + import org.sevenchan.dongs.ActionNode; + import org.sevenchan.dongs.Creature; + import org.sevenchan.dongs.creature.Arachnid; + import org.sevenchan.dongs.screens.Encounter; + + /** + * ... + * @author Harbinger + */ + public class ArachnidEncounter extends Encounter + { + + public function ArachnidEncounter(target:Creature) + { + super(target); + currentItem.clearChildren(); + currentItem.content = text; + currentItem.pushAction("Accept", -1, "Accept the invitation.", onEncounterAccept); + currentItem.pushAction("Decline", -1, "Tell her to piss off.", onEncounterDecline); + } + + override public function onStartupScreen():void { + text = "

While exploring the area, you suddenly come across many large spiderwebs. "; + text += "You brush through them, when you hear something scuttle through the brush "; + text += "behind you. Worried, you slowly turn around, and see a beautiful woman. "; + text += "Or at least, the top half of one atop the body of a enormous black spider, "; + text += "and if women had 8 red, gleaming eyes.

"; + text += "

She blushes as you stare at her strange, twisted body. "I hope you like"; + text += " what you ssssssee," she hisses awkwardly. "I mussssst mate "; + text += " ssssssoon, and it ssssseems that you are the only... male nearby."; + text += "" She smiles, fondling one of her plump breasts. "I hope you don't"; + text += " mind. Otherwise, I will have to fffffight you."

"; + } + + public static function push(a:Arachnid):void + { + AdventureController.screenQueue.write(new ArachnidEncounter(a)); + } + + private function onEncounterAccept(ply:Creature, node:ActionNode, o:*):Boolean + { + performRape(ply, node); + return true; + } + + private function onEncounterDecline(ply:Creature, node:ActionNode, o:*):Boolean + { + fight(ply, node); + return true; + } + + } + +} \ No newline at end of file diff --git a/src/org/sevenchan/dongs/screens/encounters/GargoyleEncounter.as b/src/org/sevenchan/dongs/screens/encounters/GargoyleEncounter.as new file mode 100644 index 0000000..eb78eb1 --- /dev/null +++ b/src/org/sevenchan/dongs/screens/encounters/GargoyleEncounter.as @@ -0,0 +1,60 @@ +package org.sevenchan.dongs.screens.encounters +{ + import org.sevenchan.AdventureController; + import org.sevenchan.dongs.ActionNode; + import org.sevenchan.dongs.Creature; + import org.sevenchan.dongs.creature.npc.Gargoyle; + import org.sevenchan.dongs.creature.npc.NPC; + import org.sevenchan.dongs.MenuNode; + import org.sevenchan.dongs.screens.Encounter; + + /** + * ... + * @author Harbinger + */ + public class GargoyleEncounter extends Encounter + { + + public static function push(subj:Gargoyle):void + { + AdventureController.screenQueue.write(new GargoyleEncounter(subj)); + } + + public var gargoyle:Gargoyle = new Gargoyle(); + public function GargoyleEncounter(subj:Gargoyle) + { + super(subj); + gargoyle.load(); + currentItem.clearChildren(); + if (!gargoyle.getExplored("PC")) + { + gargoyle.setExplored("PC"); + currentItem.content = "TESTING THE GODDAMN NPC SERIALIZING STUFF"; + var boobs:MenuNode = currentItem.pushMenu("BOOBUSSES", "HOW MANY TITS DOES SHE HAVE") + { + boobs.pushAction("ADD", -1, "GIRL U NEED MORE MEET ON UR BONEZ", function(ply:Creature, node:ActionNode, o:*):Boolean + { + gargoyle.addBreast(); + gargoyle.addBreast(); + gargoyle.save(); + node.content = "The Gargoyle currently has " + gargoyle.breasts.length + " titties."; + return true; + }); + boobs.pushAction("REMOVE", -1, "SHIT GRL U LOOK LIKE A WATARMELON CENTERPEED", function(ply:Creature, node:ActionNode, o:*):Boolean + { + if (gargoyle.breasts.length > 0) { + gargoyle.breasts=gargoyle.breasts.splice(0, 2); + } + gargoyle.save(); + node.content = "The Gargoyle currently has " + gargoyle.breasts.length + " titties."; + return true; + }); + } + } + else { + currentItem.content = "The Gargoyle currently has " + gargoyle.breasts.length + " titties."; + } + } + } + +} \ No newline at end of file -- 2.11.4.GIT