1 package org
.sevenchan
.dongs
.creature
3 import org
.sevenchan
.AdventureController
;
4 import com
.adobe
.serialization
.json
.*;
5 import flash
.events
.Event;
7 import org
.sevenchan
.dongs
.ability
.Instawin
;
8 import org
.sevenchan
.dongs
.bodyparts
.*;
9 import org
.sevenchan
.dongs
.*;
11 import org
.sevenchan
.dongs
.creature
.npc
.NPC
;
12 import org
.sevenchan
.dongs
.enchantment
.Enchantment
;
13 import org
.sevenchan
.dongs
.screens
.CombatScreen
;
19 public class Player
extends Creature
21 private var f
:FileReference = new FileReference();
22 private var baseType
:Creature
= new Human
();
23 private var saveFile
:FileReference = null;
24 private var waitingForLoad
:Boolean = false;
25 private var cancelled
:Boolean = false;
26 public var currentTown
:Town
= Town
.knownTowns
["barn"];
28 public function Player
(main
:AdventureController
)
31 //trace("Player.init()");
35 override public function addBreast
():Breast
37 return baseType
.addBreast
();
40 override public function addDick
(type
:String = "default"):Penis
42 return baseType
.addDick
(type
);
45 public function changeTo
(t
:Creature
):void
47 var tmp
:Creature
= baseType
;
49 baseType
._speed
= tmp
._speed
;
50 baseType
._strength
= tmp
._strength
;
51 baseType
.abilities
= tmp
.abilities
;
52 baseType
.enchantments
= tmp
.enchantments
;
53 baseType
.explored
= tmp
.explored
;
54 baseType
.gender
= tmp
.gender
;
55 baseType
.gold
= tmp
.gold
;
56 baseType
.height
= tmp
.height
;
57 baseType
.HP
= tmp
.maxHP
;
58 baseType
.ownName
= tmp
.ownName
;
59 baseType
.sensitivity
= tmp
.sensitivity
;
60 baseType
.sexualPreference
= tmp
.sexualPreference
;
61 baseType
.inventory
= tmp
.inventory
;
63 baseType
.performConversion
(tmp
);
66 override public function getExplored
(loc
:String):Boolean
68 for (var i
:int = 0; i
< baseType
.explored
.length
; i
++)
70 if (baseType
.explored
[i
] == loc
)
76 override public function setExplored
(loc
:String):void
80 baseType
.explored
.push
(loc
);
83 public function save
(slot
:int = -1):void
87 var ba
:ByteArray = new ByteArray();
89 currentTown
: currentTown
.ID
,
93 ba
.objectEncoding
= ObjectEncoding.AMF3
;
94 var f
:FileReference = new FileReference();
95 f
.save
(ba
, "save.dat");
99 var so
:SharedObject = SharedObject.getLocal
("7la_slot" + slot
.toString
());
100 so
.data
.currentTown
= currentTown
.ID
;
101 so
.data
.body
= baseType
;
102 so
.data
.npcs
= NPC
.instances
;
107 public function load
(slot
:int = -1):Boolean
111 waitingForLoad
= true;
112 f
.addEventListener
(Event.SELECT
, onFileSelected
);
113 f
.addEventListener
(Event.CANCEL
, onFileCancelled
);
114 if (!f
.browse
([new FileFilter("Saves", "*.dat")]))
120 var so
:SharedObject = SharedObject.getLocal
("7la_slot" + slot
.toString
());
121 currentTown
= Town
.knownTowns
[so
.data
.currentTown
];
122 baseType
= so
.data
.body
;
127 // Slot 1: Level 150 Bova in Horus's Spine
128 // [HP: 50, Lust: 50]
129 public static function previewSlot
(slot
:int):String
132 var so
:SharedObject = SharedObject.getLocal
("7la_slot" + slot
.toString
());
134 if (so
== null || so
.data
== null)
137 var t
:Town
= Town
.knownTowns
[so
.data
.currentTown
];
138 var c
:Creature
= so
.data
.body
;
139 if (t
== null || c
== null)
141 var o
:String = "Slot " + slot
+ ": Level " + c
.level
+ " " + c
.getTypeName
() + " at " + t
.name
+ "<br />";
142 o
+= "[HP: " + c
.HP
+ ", Lust: " + c
.lust
+ "]";
145 trace
(e
.message
+ ": " + e
.getStackTrace
());
146 return "Slot "+slot
+": Corrupt/Outdated!";
151 private function onFileSelected
(e
:Event):void
153 f
.addEventListener
(Event.COMPLETE
, onFileLoaded
);
157 private function onFileLoaded
(e
:Event):void
159 var saveData
:Object = f
.data
.readObject
();
160 this.currentTown
= Town
.knownTowns
[saveData
.currentTown
];
161 this.baseType
= saveData
.body
;
162 if (saveData
.hasOwnProperty
("npcs"))
164 for(var k
:Object in saveData
.npcs
){
165 NPC
.instances
[k
] = saveData
.npcs
[k
];
168 main
.onPlayerLoaded
();
171 private function onFileCancelled
(e
:Event):void
175 override public function initialGenderSetup
():void
177 baseType
.initialGenderSetup
();
180 override public function yourMove
(cs
:CombatScreen
, ply
:Creature
):void
184 public override function getDescription
():String
186 var descr
:String = "<h2>Appearance</h2>";
187 // You, Charles Cockhammer, are a gay human male of average height and build. You also possess a long, flowing mane of golden hair,
188 // which contrasts nicely with your blue eyes and light skin.
190 // In the equipment department, you're not too odd. You have two human testicles swinging between your legs, paired with
191 // a single, 5.5" human schlong. Your breasts are flat, but well-sculpted human pecs, and you have a standard-issue male
192 // ass with a standard-issue virgin male asshole between its buns. You've got two human arms, two human legs.
194 // In other words, you're an average human, which probably won't last long down here.
196 descr
+= "<p>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
();
198 if (baseType
.hair
== Hair
.BALD
)
199 descr
+= ", your glistening scalp distracting from your ";
201 descr
+= ", which constrasts nicely with your ";
202 if (baseType
.eyes
.length
== 0)
203 descr
+= " complete lack of eyes (<b>and resulting blindness</b>)";
205 descr
+= baseType
.getEyesDescr
();
207 descr
+= " and " + baseType
.skin
.getDescr
(0, this);
210 descr
+= "<p>In the equipment department, ";
211 //if (baseType.customized)
212 // descr += "you're a bit different from the average bear. ";
214 // descr += "you're not too odd, compared to other "+baseType.getTypeName()+"s. ";
215 var haveBalls
:Boolean = (baseType
.balls
.length
> 0);
216 var haveDicks
:Boolean = (baseType
.dicks
.length
> 0);
217 var haveVags
:Boolean = (baseType
.vaginas
.length
> 0);
218 if (haveBalls
&& haveDicks
)
219 descr
+= "You have " + baseType
.getTesticleDescr
() + " swinging between your legs, paired with " + baseType
.getDickDescr
() + ".";
220 if (!haveBalls
&& haveDicks
)
221 descr
+= "No testicles rub between your thighs when you walk, but you do have " + baseType
.getDickDescr
() + ".";
222 if (haveBalls
&& !haveDicks
)
223 descr
+= "You don't have a dick, but you do have " + baseType
.getTesticleDescr
() + ". <b>Because of a lack of an outlet for semen, you cannot masturbate, so your balls fill with semen, out of control.</b>";
226 descr
+= "Your body possesses " + baseType
.getVagDescr
() + ".";
228 if (!haveBalls
&& !haveDicks
&& !haveVags
)
229 descr
+= "You don't have any sexual organs, so you can't masturbate. On the bright side, you won't get horny, either.";
231 if (baseType
.breasts
.length
> 0)
232 descr
+= "You have " + baseType
.getBreastDescr
() + ", and you wear ";
234 descr
+= "You don't have any breasts, but you do have ";
235 descr
+= baseType
.getAssDescr
() + ".";
237 if (baseType
.arms
.length
> 0)
238 descr
+= "You have " + baseType
.getArmsDescr
() + ", ";
240 descr
+= "You don't have any arms (<b>and therefore can't attack</b>), ";
242 if (baseType
.legs
.length
> 0)
244 if (baseType
.arms
.length
== 0)
245 descr
+= "but you DO have ";
248 descr
+= baseType
.getLegsDescr
() + ".";
251 descr
+= "and no legs (<b>so you can't dodge attacks</b>).";
254 return baseType
.gender
.doReplace
(descr
);
257 override public function getTypeName
():String
259 return baseType
.getTypeName
();
262 override public function levelUp
(firstTime
:Boolean = false):void
264 baseType
.levelUp
(firstTime
);
267 public function setBaseType
(base
:Creature
):void
270 baseType
.abilities
["instawin"] = new Instawin
();
274 override public function hasEnchantment(name:String):Boolean {
275 return baseType.hasEnchantment(name);
278 override public function addEnchantment(ench:Enchantment):String
280 return baseType.addEnchantment(ench);
282 override public function notifyEnchantments(e:*):Boolean
284 return baseType.notifyEnchantments(e);
287 override public function get assholes
():Vector
.<Asshole
>
289 return baseType
._assholes
;
292 override public function set assholes
(balls
:Vector
.<Asshole
>):void
294 baseType
._assholes
= balls
;
298 override public function get breasts
():Vector
.<Breast
>
300 return baseType
._breasts
;
303 override public function set breasts
(balls
:Vector
.<Breast
>):void
305 baseType
._breasts
= balls
;
309 override public function get eyes
():Vector
.<Eye
>
311 return baseType
._eyes
;
314 override public function set eyes
(balls
:Vector
.<Eye
>):void
316 baseType
._eyes
= balls
;
320 override public function get vaginas
():Vector
.<Vagina
>
322 return baseType
._vaginas
;
325 override public function set vaginas
(balls
:Vector
.<Vagina
>):void
327 baseType
._vaginas
= balls
;
331 override public function get arms
():Vector
.<Arm
>
333 return baseType
._arms
;
336 override public function set arms
(arr
:Vector
.<Arm
>):void
338 baseType
._arms
= arr
;
342 override public function get legs
():Vector
.<Leg
>
344 return baseType
._legs
;
347 override public function set legs
(arr
:Vector
.<Leg
>):void
349 baseType
._legs
= arr
;
353 override public function get wings
():Vector
.<Wing
>
355 return baseType
._wings
;
358 override public function set wings
(arr
:Vector
.<Wing
>):void
360 baseType
._wings
= arr
;
364 override public function get balls
():Vector
.<Testicle
>
366 return baseType
._balls
;
369 override public function set balls
(balls
:Vector
.<Testicle
>):void
371 baseType
._balls
= balls
;
375 override public function get dicks
():Vector
.<Penis
>
377 return baseType
._dicks
;
380 override public function set dicks
(balls
:Vector
.<Penis
>):void
382 baseType
._dicks
= balls
;
386 public override function get strength
():int
388 return baseType
.strength
;
391 public override function set strength
(value
:int):void
393 baseType
.strength
= value
;
396 public override function get mana
():int
398 return baseType
.mana
;
401 public override function set mana
(value
:int):void
403 baseType
.mana
= value
;
406 public override function get speed
():int
408 return baseType
.speed
;
411 public override function set speed
(value
:int):void
413 baseType
.speed
= value
;
416 public override function get intellect
():int
418 return baseType
.intellect
;
421 public override function set intellect
(value
:int):void
423 baseType
.intellect
= value
;
426 public override function get sensitivity
():int
428 return baseType
.sensitivity
;
431 public override function set sensitivity
(value
:int):void
433 baseType
.sensitivity
= value
;
436 public override function get abilities
():Object
438 return baseType
.abilities
;
441 public override function set abilities
(arr
:Object):void
443 baseType
.abilities
= arr
;
446 public override function get gender
():Gender
448 return baseType
.gender
;
451 public override function set gender
(arr
:Gender
):void
453 baseType
.gender
= arr
;
456 public override function get level
():int
458 return baseType
.level
;
461 public override function get HP
():int
466 public override function get maxHP
():int
468 return baseType
.maxHP
;
471 public override function get maxMana
():int
473 return baseType
.maxMana
;
476 public override function set HP
(value
:int):void
482 public override function get XP
():int
487 public override function get maxXP
():int
489 trace
("maxXP", baseType
.maxXP
);
490 return baseType
.maxXP
;
493 public override function set XP
(value
:int):void
499 override public function get gold
():int
501 return baseType
.gold
;
504 override public function set gold
(value
:int):void
506 baseType
.gold
= value
;