1 package org
.sevenchan
.dongs
4 import org
.sevenchan
.dongs
.bodyparts
.*;
5 import org
.sevenchan
.dongs
.creature
.*;
6 import org
.sevenchan
.dongs
.enchantment
.*;
7 import org
.sevenchan
.dongs
.enchantment
.events
.*;
8 import org
.sevenchan
.dongs
.screens
.*;
15 registerClassAlias
("ECreature", Creature
);
18 public var customized
:Boolean = false;
19 public var ownName
:String = "Blah Blah"; // Who am I?
20 public var height
:Number = 0.0; // How tall am I?
21 public var build
:Build
= Build
.AVG
; // How fat am I?
22 public var material
:Material
= Material
.NO_MATERIAL_MODIFIER
; // What am I made of?
23 public var hair
:Hair
= Hair
.BALD
; // His/her/hir hair is...
24 public var skin
:Skin
= new Skin
("human"); // His/her/hir hair is...
25 public var _gender
:Gender
= Gender
.ASEXUAL
; // Boy, Girl, Neither, Both?
26 public var sexualPreference
:SexualPreference
= SexualPreference
.ASEXUAL
; // Straight, Gay, ASexual, Bi?
28 // Stats (CACHED VALUES)
29 public var _level
:uint = 0; // In comparison to standard human being. No attacking rats for 20 levels.
30 private var d_level
:uint = 0; // Delta
31 public var _strength
:int = 1; // Damage caused in case of a successful attack.
32 public var _speed
:uint = 1; // Chance of dodging. defending.speed-attacking.speed = relative chance of dodging.
33 public var _intellect
:uint = 1; // Smartness. Opens dialog trees and gives hints.
34 public var _lust
:uint = 1; // Slowly increases over time, eliminated by masturbation or smecks. Some battles are nonsexual and will not affect lust, others will slightly increase it based on ((number of balls x ball hormone output)+(number of vaginas * vagina hormone output)* sensitivity).
35 public var sensitivity
:Number = 0; // 0-1, 0 being not sensitive
36 public var _HP
:int = 100; //100*(level*0.02)
37 public var _XP
:int = 0; // 50*(level*0.5)
38 public var mana
:uint = 0; // Magic shit, increases over time, especially near relaxing places.
39 public var gold
:uint = 0; // Currency
42 public var _abilities
:Object = new Object(); // What magic/techniques can I use?
43 public var assholes
:Array = new Array(); // How many, and what type of assholes do I possess?
44 public var _arms
:Array = new Array(); // Needed to attack. Tentacles are ok.
45 public var _balls
:Array = new Array(); // Testes (Cum and pregnancy options)
46 public var breasts
:Array = new Array(); // Boobs (fuckable)
47 public var _dicks
:Array = new Array(); // Penises (Pleasure options, testes required for preggo/cum stuff)
48 public var enchantments
:Object = new Object(); // What kinds of effects am I suffering/benefiting from?
49 public var eyes
:Array = new Array(); // How many/what kinds of eyes do I have?
50 public var inventory
:Array = new Array(); // What stuff am I carrying?
51 public var _legs
:Array = new Array(); // Legs or locomotive tentacles or some other propulsion. (NONE = CAN'T MOVE OR DODGE)
52 public var _vaginas
:Array = new Array(); // Places to put babies if the "father" has a penis and doesn't know the FALCON PUNCH. Anal pregnancy is okay but only with dicks with that flag.
53 public var _wings
:Array = new Array(); // For flight.
54 public var explored
:Array = new Array();
56 private var main
:Main
= null;
57 public function Creature
()
59 trace
("Creature.init()");
60 gold
= MathUtils
.rand
(0, 50);
64 public function addEnchantment
(ench
:Enchantment
):String {
65 var story
:String = ench
.onInit
(this);
66 if(!ench
.cancelAddition
)
67 this.enchantments
[ench
.getID
()] = ench
;
71 public function initialGenderSetup
():void { }
73 public function yourMove
(cs
:CombatScreen
, ply
:Creature
):void {
74 if (notifyEnchantments
(new CombatTurnEvent
(ply
))) {
75 InfoScreen
.push
("<p>The " + getTypeName
() + " cannot attack!</p>");
78 if (MathUtils
.lengthOf
(abilities
) > 0 && MathUtils
.rand
(0,1) == 0) {
79 var ab
:Ability
= Ability
(MathUtils
.getRandomObjectEntry
(abilities
));
80 if(ab
.activate
(this, ply
))
83 cs
.tryAttack
(this, ply
);
87 public function addLust
(amt
:Number=1):void {
88 lust
+= (amt
* getLustMult
());
91 private function getLustMult
():Number {
92 var numballs
:Number = balls
.length
;
93 var loadMultSum
:Number = 0;
94 for (var i
:int = 0; i
< balls
.length
; i
++) {
95 loadMultSum
+= (balls
[i
] as Testicle
).loadMult
;
97 return (numballs
* (loadMultSum
/ numballs
))*0.5;
100 public function addToInventory
(item
:Item
):void {
101 for (var i
:int = 0; i
< inventory
.length
; i
++) {
102 if ((inventory
[i
] as Item
).id
== item
.id
) {
103 (inventory
[i
] as Item
).amount
+= item
.amount
;
107 if(inventory
.length
<11) {
108 inventory
.push
(item
);
111 main
.showInventory
(item
);
115 public function combatDescr
(subj
:Creature
):String {
116 if (getInterested
(subj
)) {
119 var o
:String = "<p>" + Utils
.A
(getTypeName
(),true) + " "+getTypeName
()+" leaps from the bushes and attacks!</p><p>Your attacker is ";
120 o
+= getDescription
();
125 public function onEncounter
(ply
:Creature
):Boolean { return false; }
127 public function onWin
(ply
:Creature
):Boolean { return false; }
128 public function onLose
(ply
:Creature
):Boolean { return false; }
130 protected function genName
():void {
131 var firstNames
:Array = [
147 var lastNames
:Array = [
159 ownName
= MathUtils
.getRandomEntry
(firstNames
) + " " + MathUtils
.getRandomEntry
(lastNames
);
165 * @return String Whatever it's called
167 public function getTypeName
():String {
168 return "NOT FUCKING NAMED YET";
171 public function getDescription
():String {
172 var descr
:String = "";
173 // a gay human male of average height and build. He also possesses a long, flowing mane of golden hair,
174 // which contrasts nicely with your blue eyes and light skin.
176 // In the equipment department, you're not too odd. You have two human testicles swinging between your legs, paired with
177 // a single, 5.5" human schlong. Your breasts are flat, but well-sculpted human pecs, and you have a standard-issue male
178 // ass with a standard-issue virgin male asshole between its buns. You've got two human arms, two human legs.
180 // In other words, you're an average human, which probably won't last long down here.
182 descr
= Utils
.A
(sexualPreference
.label
)+" "+sexualPreference
.label
+ " " + gender
.label
+ " " + getTypeName
() + ", who " + build
.getDescription
()
183 +" %CSUB% also possesses " + hair
.getDescription
();
185 if (hair
== Hair
.BALD
)
186 descr
+= ", %POS% glistening scalp distracting from %POS% ";
188 descr
+= ", which constrasts nicely with %POS% ";
190 descr
+= " complete lack of eyes (<b>and resulting blindness</b>)";
192 descr
+= getEyesDescr
();
194 descr
+= " and " + skin
.getDescr
(0, this);
197 descr
+= "<p>In the equipment department, ";
198 var haveBalls
:Boolean = (balls
.length
> 0);
199 var haveDicks
:Boolean = (dicks
.length
> 0);
200 var haveVags
:Boolean = (vaginas
.length
> 0);
201 if (haveBalls
&& haveDicks
)
202 descr
+= "%SUB% has " + getTesticleDescr
() + " swinging between %POS% legs, paired with " + getDickDescr
() + ".";
203 if (!haveBalls
&& haveDicks
)
204 descr
+= "no testicles rub between %POS% thighs when %SUB% walks, but %SUB% does have " + getDickDescr
() + ".";
205 if (haveBalls
&& !haveDicks
)
206 descr
+= "%SUB% doesn't have a dick, but %SUB% does have " + getTesticleDescr
() + ". %SUB% seems to get more horny as time passes.";
209 descr
+= " %CPOS% body possesses " + getVagDescr
() + ".";
211 if (!haveBalls
&& !haveDicks
&& !haveVags
)
212 descr
+= " %CSUB% doesn't have any sexual organs. At least you won't get raped.";
215 if (breasts
.length
> 0)
216 descr
+= " %CSUB% has " + getBreastDescr
() + ", and wears ";
218 descr
+= " %CSUB% doesn't have any breasts, but does have ";
219 descr
+= getAssDescr
() + ".";
222 descr
+= " %CSUB% has "+getArmsDescr
()+", ";
224 descr
+= " %CSUB% doesn't have any arms (<b>and therefore can't attack</b>), ";
226 if (legs
.length
> 0) {
227 if (arms
.length
== 0)
228 descr
+= "but %SUB% DOES have ";
231 descr
+= getLegsDescr
()+".";
233 descr
+= "and no legs (<b>so %SUB% can't dodge attacks</b>).";
235 if (wings
.length
> 0) {
236 descr
+= " %CSUB% also has " + getWingsDescr
() + ".";
240 return gender
.doReplace
(descr
);
243 public function hasEnchantment
(name
:String):Boolean {
244 return Utils
.objHas
(enchantments
,name
);
247 public function levelUp
(firstOne
:Boolean = false):void {
250 InfoScreen
.push
("<h2>Levelled up!</h2><p>You are now level " + level
+ "!</p>");
255 public function onCombatInit
():void {
259 public function get maxHP
():int {
260 return 100 + ((level
-1) * 5);
263 public function get maxXP
():int {
264 trace
("_level", _level
);
265 trace
("_strength", _strength
);
266 return Math.max
(1,50*(_level
* 0.5));
269 public function getExplored
(loc
:String):Boolean {
270 for (var i
:int = 0; i
< explored
.length
; i
++) {
271 if (explored
[i
] == loc
)
277 public function setExplored
(loc
:String):void {
278 if (getExplored
(loc
)) return;
282 public function recalcStrength
():void {
283 //trace("height:", height);
284 var weight
:Number = build
.calculateWeight
(height
, 0.5)
285 //trace("weight:",weight);
286 var A
:Number = Math.ceil
((Math.pow
(level
, 2) * 0.01) - (Math.abs
(17.5 - (weight
* 0.1))) + 8);
289 var B
:Number = Math.ceil
((Math.pow
(level
-1,2) * 0.01) - (Math.abs
(17.5 - (weight
* 0.1))) + 8);
290 _strength
= _strength
+ (A
- B
);
293 public function get strength
():int { return _strength
; }
294 public function set strength
(str
:int):void {
299 public function get speed
():uint { return _speed
; }
300 public function set speed
(spd
:uint):void {
305 public function get lust
():uint { return _lust
; }
306 public function set lust
(lst
:uint):void
313 public function get intellect
():uint { return _intellect
; }
314 public function set intellect
(i
:uint):void
320 public function get arms
():Array { return _arms
; }
321 public function set arms
(arr
:Array):void {
326 public function get legs
():Array { return _legs
; }
327 public function set legs
(arr
:Array):void { _legs
= arr
;
330 public function get wings
():Array { return _wings
; }
331 public function set wings
(arr
:Array):void { _wings
= arr
;
334 public function get balls
():Array { return _balls
; }
335 public function set balls
(balls
:Array):void { _balls
=balls
;
338 public function get vaginas
():Array { return _vaginas
; }
339 public function set vaginas
(balls
:Array):void { _vaginas
=balls
;
342 public function get dicks
():Array { return _dicks
; }
343 public function set dicks
(balls
:Array):void { _dicks
=balls
;
346 public function get abilities
():Object { return _abilities
; }
347 public function set abilities
(arr
:Object):void{ _abilities
=arr
; }
349 public function get gender
():Gender
{ return _gender
; }
350 public function set gender
(value
:Gender
):void { _gender
=value
;
353 public function get HP
():int { return _HP
; }
354 public function set HP
(value
:int):void {
358 public function get XP
():int { return _XP
; }
359 public function set XP
(value
:int):void {
370 public function setMain
(main
:Main
):void {
374 private function doStatsUpdate
():void {
380 public function get level
():int {
384 private function getBodyPartDesc
(collection
:Array, singular
:String):String {
386 if (collection
.length
== 0) {
387 return "no "+singular
+"s";
390 var varying
:Boolean = false;
391 var types
:Object = new Object();
392 var lname
:String = "";
393 var numtypes
:Number = 0;
394 for each (var i
:* in collection
) {
395 var t
:IBodyPart
= i
as IBodyPart
;
400 if(!(lname
in types
)) {
406 for (var k
:String in types
) {
407 trace
(k
+ " = " + types
[k
]);
410 for each (t
in collection
) {
412 return t
.getDescr
(types
[lname
], this);
416 for (var ot
:* in types
) {
417 var gotdescr
:Boolean = false;
418 for each (t
in collection
) {
421 out
+= ", " + t
.getDescr
(types
[ot
] as Number, this);
428 return collection
.length
+ " "+singular
+"s of varying types ("+out
.substr
(2)+")";
433 public function notifyEnchantments
(e
:*):Boolean {
434 var collection
:Array = [];
435 for (var eID
:String in enchantments
) {
436 var ench
:Enchantment
= enchantments
[eID
];
437 if (e
is CombatStartEvent
) {
438 ench
.onCombatInit
(e
.other
);
440 if (e
is CombatEndEvent
) {
441 ench
.onCombatComplete
(e
.won
, e
.other
);
443 if (e
is CombatTurnEvent
) {
444 return ench
.onMyCombatTurn
(e
.other
);
450 public function getTesticleDescr
():String {
451 return getBodyPartDesc
(balls
,"ball");
454 public function getDickDescr
():String {
455 return getBodyPartDesc
(dicks
,"dick");
458 public function getVagDescr
():String {
459 return getBodyPartDesc
(vaginas
,"vag");
462 public function getBreastDescr
():String {
463 return getBodyPartDesc
(breasts
, "boob");
466 public function getAssDescr
():String {
467 return getBodyPartDesc
(assholes
,"asshole");
470 public function getArmsDescr
():String {
471 return getBodyPartDesc
(arms
, "arm");
474 public function getEyesDescr
():String {
475 return getBodyPartDesc
(eyes
, "eye");
478 public function getLegsDescr
():String {
479 return getBodyPartDesc
(legs
, "leg");
482 public function getWingsDescr
():String {
483 return getBodyPartDesc
(wings
, "wing");
491 * +---------------+---+---+
493 * +---------------+---+---+
498 * +---------------+---+---+
500 public function getInterested
(subj
:Creature
):Boolean {
501 return sexualPreference
.isOppositeGender
(gender
, subj
.gender
);
504 public function getHostile
(subj
:Creature
):Boolean {
508 public function performConversion
(oldMe
:Creature
):void {
512 public function changeFrom
(f
:Creature
):void {
513 this._speed
= f
._speed
;
514 this._strength
= f
._strength
;
515 this.abilities
= f
.abilities
;
516 this.enchantments
= f
.enchantments
;
517 this.explored
= f
.explored
;
518 this.gender
= f
.gender
;
520 this.height
= f
.height
;
522 this.ownName
= f
.ownName
;
523 this.sensitivity
= f
.sensitivity
;
524 this.sexualPreference
= f
.sexualPreference
;
525 this.inventory
= f
.inventory
;
527 this.performConversion
(f
);