Add new clothing system
[18plus-7leafadventure.git] / src / org / sevenchan / dongs / creature / Player.as
blobaae3a448435139e44b6165e93a79c288a062423b
1 package org.sevenchan.dongs.creature
3 import org.sevenchan.AdventureController;
4 import com.adobe.serialization.json.*;
5 import flash.events.Event;
6 import flash.net.*;
7 import org.sevenchan.dongs.ability.Instawin;
8 import org.sevenchan.dongs.bodyparts.*;
9 import org.sevenchan.dongs.*;
10 import flash.utils.*;
11 import org.sevenchan.dongs.creature.npc.NPC;
12 import org.sevenchan.dongs.enchantment.Enchantment;
13 import org.sevenchan.dongs.screens.CombatScreen;
15 /**
16 * ...
17 * @author Harbinger
19 public class Player extends Creature
21 private var f:FileReference = new FileReference();
22 public 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)
30 this.main = main;
31 //trace("Player.init()");
32 super();
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;
48 baseType = t;
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)
71 return true;
73 return false;
76 override public function setExplored(loc:String):void
78 if (getExplored(loc))
79 return;
80 baseType.explored.push(loc);
83 public function save(slot:int = -1):void
85 if (slot == -1)
86 { // Export
87 var ba:ByteArray = new ByteArray();
88 ba.writeObject( {
89 currentTown: currentTown.ID,
90 body: baseType,
91 npcs: NPC.instances
92 });
93 ba.objectEncoding = ObjectEncoding.AMF3;
94 var f:FileReference = new FileReference();
95 f.save(ba, "save.dat");
97 else
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;
103 so.flush();
107 public function load(slot:int = -1):Boolean
109 if (slot == -1)
111 waitingForLoad = true;
112 f.addEventListener(Event.SELECT, onFileSelected);
113 f.addEventListener(Event.CANCEL, onFileCancelled);
114 if (!f.browse([new FileFilter("Saves", "*.dat")]))
115 return false;
116 return true;
118 else
120 var so:SharedObject = SharedObject.getLocal("7la_slot" + slot.toString());
121 currentTown = Town.knownTowns[so.data.currentTown];
122 baseType = so.data.body;
123 return true;
127 // Slot 1: Level 150 Bova in Horus's Spine
128 // [HP: 50, Lust: 50]
129 public static function previewSlot(slot:int):String
131 try {
132 var so:SharedObject = SharedObject.getLocal("7la_slot" + slot.toString());
134 if (so == null || so.data == null)
135 return "Empty Slot";
137 var t:Town = Town.knownTowns[so.data.currentTown];
138 var c:Creature = so.data.body;
139 if (t == null || c == null)
140 return "Empty Slot";
141 var o:String = "Slot " + slot + ": Level " + c.level + " " + c.getTypeName() + " at " + t.name + "<br />";
142 o += "[HP: " + c.HP + ", Lust: " + c.lust + "]";
143 return o;
144 } catch (e:Error) {
145 trace(e.message + ": " + e.getStackTrace());
146 return "Slot "+slot+": Corrupt/Outdated!";
148 return "???";
151 private function onFileSelected(e:Event):void
153 f.addEventListener(Event.COMPLETE, onFileLoaded);
154 f.load();
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 ";
200 else
201 descr += ", which constrasts nicely with your ";
202 if (baseType.eyes.length == 0)
203 descr += " complete lack of eyes (<b>and resulting blindness</b>)";
204 else
205 descr += baseType.getEyesDescr();
207 descr += " and " + baseType.skin.getDescr(0, this);
208 descr += "</p>";
210 descr += "<p>In the equipment department, ";
211 //if (baseType.customized)
212 // descr += "you're a bit different from the average bear. ";
213 //else
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>";
225 if (haveVags)
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 ";
233 else
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() + ", ";
239 else
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 ";
246 else
247 descr += "and ";
248 descr += baseType.getLegsDescr() + ".";
250 else
251 descr += "and no legs (<b>so you can't dodge attacks</b>).";
252 descr += "</p>";
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
269 baseType = base;
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;
295 customized = true;
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;
306 customized = true;
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;
317 customized = true;
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;
328 customized = true;
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;
339 customized = true;
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;
350 customized = true;
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;
361 customized = true;
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;
372 customized = true;
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;
383 customized = true;
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
463 return baseType.HP;
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
478 baseType.HP = value;
479 main.refreshStats();
482 public override function get XP():int
484 return baseType.XP;
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
495 baseType.XP = value;
496 main.refreshStats();
499 override public function get gold():int
501 return baseType.gold;
504 override public function set gold(value:int):void
506 baseType.gold = value;