Fix hair, dick around with new game screen.
[18plus-7leafadventure.git] / src / org / sevenchan / dongs / creature / Arachnid.as
blob85c301855b64d763af699cce6fdbf4cdfd5d7898
1 package org.sevenchan.dongs.creature
3 import org.sevenchan.AdventureController;
4 import flash.net.*;
5 import org.sevenchan.dongs.*;
6 import org.sevenchan.dongs.bodyparts.*;
7 import org.sevenchan.dongs.items.*;
8 import org.sevenchan.dongs.screens.*;
9 import org.sevenchan.dongs.screens.encounters.ArachnidEncounter;
11 /**
12 * Spiderbitch, spiderbitch, does whatever a spiderbitch does...
13 * Will she suck, on a dick? Goddamnit I dunno.
14 * Watch out, here comes a spiderbitch.
16 * Based off of MGE's Arachne. Loosely, as I cannot read moonspeak.
18 * @author Harbinger
20 public class Arachnid extends Creature
22 // For serialization
23 registerClassAlias("EArachnid", Arachnid);
25 private var isPregnant:Boolean = false;
27 public function Arachnid(pregnant:Boolean)
29 super();
30 isPregnant = pregnant;
31 if (pregnant)
32 gender = Gender.HERM;
33 else
34 gender = Gender.FEMALE;
37 override public function initialGenderSetup():void
39 assholes.push(BodyPartRegistry.arachnid_anus);
40 eyes.push(
41 BodyPartRegistry.arachnid_small_eye,BodyPartRegistry.arachnid_small_eye,
42 BodyPartRegistry.arachnid_small_eye,BodyPartRegistry.arachnid_small_eye,
43 BodyPartRegistry.arachnid_small_eye,BodyPartRegistry.arachnid_small_eye,
44 BodyPartRegistry.arachnid_big_eye,BodyPartRegistry.arachnid_big_eye
46 this.build = Build.AVG;
47 this.legs.push(
48 BodyPartRegistry.arachnid_leg,BodyPartRegistry.arachnid_leg,
49 BodyPartRegistry.arachnid_leg,BodyPartRegistry.arachnid_leg,
50 BodyPartRegistry.arachnid_leg,BodyPartRegistry.arachnid_leg,
51 BodyPartRegistry.arachnid_leg,BodyPartRegistry.arachnid_leg
53 this.arms.push(
54 BodyPartRegistry.human_arm,
55 BodyPartRegistry.human_arm
58 this.hair = new Hair("long, silky, white hair");
59 //this.gender = Gender.FEMALE;
60 this.sexualPreference = SexualPreference.STRAIGHT;
62 if (gender.hasVag)
64 breasts.push(BodyPartRegistry.human_breast, BodyPartRegistry.human_breast);
65 vaginas.push(BodyPartRegistry.arachnid_vagina);
67 inventory = new Vector.<Item>();
68 if (gender.hasDick)
70 addDick("arachnid");
71 balls.push(BodyPartRegistry.arachnid_testicle, BodyPartRegistry.arachnid_testicle);
72 for each (var t:Testicle in balls)
74 t.loadMult = 10;
76 inventory.push(new SpiderEgg(2));
78 inventory.push(new SpiderVenomSac(1));
80 var wangTemplate:Penis = BodyPartRegistry.human_penis;
81 wangTemplate._location = "face as a beard";
82 for (var i:Number = 0; i < 20; i++)
84 dicks.push(wangTemplate);
88 override public function addDick(type:String = "default"):Penis
90 var p:Penis = Penis(BodyPartRegistry.arachnid_penis);
91 p.size = 12 + MathUtils.rand(0, 12);
92 p._location = "vagina";
93 this.dicks.push(p);
94 return p;
97 override public function onEncounter(ply:Creature):Boolean
99 if (getHostile(ply))
100 return false;
101 ArachnidEncounter.push(this);
102 return true;
105 override public function onRape(ply:Creature,rapeEncounter:Rape):void
107 var rapeText:String = "";
108 if (!ply.getExplored("sexedArachnid"))
110 ply.setExplored("sexedArachnid");
112 var amtCum:Number = 0;
113 for (var i:int = 0; i < ply.balls.length; i++)
115 (ply.balls[i] as Testicle).loadMult += 1;
116 var t:Testicle = ply.balls[i];
117 amtCum += t.loadMult * t.normalLoad;
119 rapeText = "<p>The arachnid is positively delighted, bobbing up and and down happily on her giant, plated legs. &quot;";
120 rapeText += "Oh, I cannot tell you how happy this makes me!&quot; She gushes, and hugs you, her naked breasts pressed ";
121 rapeText += "against your body. Her nipples are so stiff that you can count them. You embrace her upper body, as well, ";
122 rapeText += "with an awkwardness you have never felt before in your life.</p>";
124 rapeText += "<p>And then you feel her fangs dig into your neck. <i>Shit.</i> ";
125 rapeText += "&quot;It'sssss all right,&quot; %CSUB% whispers in a thick accent, ";
126 rapeText += "a silky hand stroking your cheek softly. %CSUB% kisses the wound, a blush ";
127 rapeText += "slowly spreading across %POS% face as %SUB% becomes more aroused. ";
128 rapeText += "&quot;You’ll be fffine, do not be worried.&quot;</p>";
130 rapeText += "<p>After stripping you of any clothing, %SUB% pulls webbing from %POS% abdomen ";
131 rapeText += "and wraps you tightly in it, sparing your nose, eyes, and your dick, and ";
132 rapeText += "then anchors you to the floor. Seeing your flaccid dick, %SUB% leans over ";
133 rapeText += "and brushes it between %POS% large breasts and licks it hungrily. When ";
134 rapeText += "it’s satisfiably hard, %SUB% takes a few steps forwards and %POS% body ";
135 rapeText += "descends, your dick disappearing into %POS% wet, needy pussy. Quietly, %SUB% ";
136 rapeText += "begins to repeatedly plunge you into %POS% sticky depths, and you find ";
137 rapeText += "yourself enjoying it, aside from the claustrophobic webbing and poison ";
138 rapeText += "keeping you still.</p>";
140 rapeText += "<p>As soon as the first wave of precum enters %POS% body, %POS% entire abdomen ";
141 rapeText += "begins pulsing, the powerful muscles milking your dick. %CSUB% reaches down ";
142 rapeText += "and pulls you tighter to %POS% body. %CSUB% bites you again, and your balls ";
143 rapeText += "go into overdrive, pumping more semen into %POS% thrusting body. The ";
144 rapeText += "pleasure is unbearable, and %POS% cunt feels amazing, despite how ";
145 rapeText += "terrifying the entire situation is. After a few minutes, the flow stops, ";
146 rapeText += "and %SUB% releases you. &quot;Sssso ssssorry ffffor the trouble,&quot; ";
147 rapeText += "%SUB% apologizes, a clawed foot cutting slits into the webbing around your ";
148 rapeText += "arms, somehow without opening your veins. You realize that she is helping you ";
149 rapeText += "get lose of the webbing once the neurotoxin is gone from your body. &quot; ";
150 rapeText += "Hopeffffully thissss will help...&quot;</p>";
152 rapeText += "<p>%CSUB% slowly moves away. &quot;You will ssssleeep now. I hope you ";
153 rapeText += "ffforgive me, and maybe we will meet again...&quot; %CSUB% vanishes into ";
154 rapeText += "the underbrush, and the world fades to black as you pass out.</p>";
156 rapeText += "<p><b>Your semen output has increased by 1, bringing your total seminal volume to " + MathUtils.fmtMilliLiters(amtCum) + ".</b></p>";
157 rapeText += "<p>You will now gain lust faster.</p>";
160 else
162 // TODO Sex menu if sexedArachnid == true
163 rapeText += "<i>[TODO: Sex menu AFTER getting dateraped by Arachnid. Soz.]</i>";
165 rapeEncounter.setText(rapeText);
168 private var offered:Boolean = false;
170 override public function combatDescr(ply:Creature):String
172 ply.lust += 2;
173 var text:String = "";
174 if (!offered)
176 text += "<p>While exploring the area, you suddenly come across many large spiderwebs. ";
177 text += "You brush through them, when you hear something scuttle through the brush ";
178 text += "behind you. Worried, you slowly turn around, and see a beautiful woman. ";
180 else
182 text += "<p>The Arachnid stands in a ready stance, legs poised to move at a moment's notice, and her front legs and arms ready to lash out. ";
184 text += "Or at least, the top half of one atop the body of a enormous black spider, ";
185 text += "and if women had 8 red, gleaming eyes. ";
186 if (gender.hasDick)
188 text += "Her abdomen seems greatly swollen, bulging with eggs. Her eyes roll crazily ";
189 text += " in her head, as though she has lost control of herself. A strange, sticky fluid drips";
190 text += " from the rear of her abdomen.";
192 else
194 text += "She seems sad about fighting you, considering she offered herself to you. However, she seems determined to win. Her pussy drips on the ground, and her nipples stand erect.";
195 if (ply.getExplored("sexedArachnid"))
196 text += "You aren't fooled by her sorrowful demeanor, considering one of her kind paralyzed you after you gave in to her demands.";
198 text += "</p>";
199 return text;
202 override public function getHostile(subj:Creature):Boolean
204 return (gender.hasDick);
207 override public function getTypeName():String
209 return (isPregnant) ? "Pregnant Arachnid" : "Arachnid";
212 override public function onWin(ply:Creature):Boolean
214 var text:String = "<h2>YOU LOSE</h2>";
216 if (ply.gender.hasDick && gender == Gender.FEMALE)
218 if (ply.getExplored("lostToArachnid"))
219 ply.setExplored("lostToArachnid");
221 var amtCum:Number = 0;
222 for (var i:int = 0; i < ply.balls.length; i++)
224 (ply.balls[i] as Testicle).loadMult += 1;
225 var t:Testicle = ply.balls[i];
226 amtCum += t.loadMult * t.normalLoad;
228 text += "<p>Seeing weakness, the Arachnid surges forward and bites your neck. You ";
229 text += "punch %POS% in %POS% own neck, causing %POS% to break from you, but it’s too ";
230 text += "late. Neurotoxins surge through your veins, and your attacks become ";
231 text += "increasingly feeble as you fight. A sad smile crosses %POS% face as you ";
232 text += "sink to the ground, becoming increasingly numb and %SUB% moves closer, ";
233 text += "pulling you up to %POS% chest to caress your limp body. &quot;Yessss, now ";
234 text += "you see it is uselesssss to fight.&quot; %CSUB% whispers in a thick accent, ";
235 text += "a silky hand stroking your cheek softly. %CSUB% kisses the wound, a blush ";
236 text += "slowly spreading across %POS% face as %SUB% becomes more aroused. ";
237 text += "&quot;You’ll be fffine, do not be worried.&quot;</p>";
239 text += "<p>After stripping you of any clothing, %SUB% pulls webbing from %POS% abdomen ";
240 text += "and wraps you tightly in it, sparing your nose, eyes, and your dick, and ";
241 text += "then anchors you to the floor. Seeing your flaccid dick, %SUB% leans over ";
242 text += "and brushes it between %POS% large breasts and licks it hungrily. When ";
243 text += "it’s satisfiably hard, %SUB% takes a few steps forwards and %POS% body ";
244 text += "descends, your dick disappearing into %POS% wet, needy pussy. Quietly, %SUB% ";
245 text += "begins to repeatedly plunge you into %POS% sticky depths, and you find ";
246 text += "yourself enjoying it, aside from the claustrophobic webbing and poison ";
247 text += "keeping you still.</p>";
249 text += "<p>As soon as the first wave of precum enters %POS% body, %POS% entire abdomen ";
250 text += "begins pulsing, the powerful muscles milking your dick. %CSUB% reaches down ";
251 text += "and pulls you tighter to %POS% body. %CSUB% bites you again, and your balls ";
252 text += "go into overdrive, pumping more semen into %POS% thrusting body. The ";
253 text += "pleasure is unbearable, and %POS% cunt feels amazing, despite how ";
254 text += "terrifying the entire situation is. After a few minutes, the flow stops, ";
255 text += "and %SUB% releases you. &quot;Sssso ssssorry ffffor the trouble,&quot; ";
256 text += "%SUB% apologizes, a clawed foot cutting slits into the webbing around your ";
257 text += "arms, somehow without opening your veins. You realize that she is helping you ";
258 text += "get lose of the webbing once the neurotoxin is gone from your body. &quot; ";
259 text += "Hopeffffully thissss will help...&quot;</p>";
261 text += "<p>%CSUB% slowly moves away. &quot;You will ssssleeep now. I hope you ";
262 text += "ffforgive me, and maybe we will meet again...&quot; %CSUB% vanishes into ";
263 text += "the underbrush, and the world fades to black as you pass out.</p>";
265 text += "<p><b>Your semen output has increased by 1, bringing your total seminal volume to " + MathUtils.fmtMilliLiters(amtCum) + ".</b></p>";
266 text += "<p>You will now gain lust faster.</p>";
267 InfoScreen.push(gender.doReplace(text));
268 return true;
270 else if (gender.hasDick)
272 var rectum:String = (ply.gender.hasVag) ? "birth canal and into your womb" : "rectum";
273 var enchTxt:String = "";
274 var asshole:Boolean = false;
275 text = "<p>You collapse to the ground";
276 text += " once again,";
277 text += " defeated and exhausted. Blood drips from seemingly every part of your body, and you " + "look up at the creature through a single swollen eye. ";
278 if (HP < maxHP)
280 text += "She isn't unscatched herself, gashes and dents mar her exoskeleton and ";
281 text += "humanlike upper body.";
283 else
285 text += "She is completely unscratched, her maniacal grin accentuating her ";
286 text += "complete victory."
288 text += "</p><p>She shivers, arching her thin upper body as a thick, ";
289 text += MathUtils.inchesToFootInches(dicks[0].size) + "-long cock erupts from her ";
290 text += "abdomen and hardens into a throbbing, swollen shaft. You stare at it in ";
291 text += "pure horror. She steps forward, eliciting an immediate flee reaction from ";
292 text += "you. It doesn't last long, as you trip over one of her long legs and are ";
293 text += "then pinned to the ground. You try to struggle, but you're weak and a ";
294 text += "pinprick at the base of your neck halts any movement.</p>";
296 text += "<p>You feel her lower herself down, and try to scream as she roughly slides";
297 text += " her ovipositor deep into your " + rectum + " painfully, getting thicker as it ";
298 text += "intrudes further, spreading you wider and wider until it hilts against her ";
299 text += "swollen abdomen. Her ovpositor begins swelling with eggs passing into your ";
300 text += "body. You can feel the leathery bags being deposited into you.</p>";
302 text += "<p>The pain becomes too much and, mercifully, you pass out.</p>";
303 var idx:int = 0;
304 if (!ply.gender.hasVag)
306 for (idx = 0; idx < ply.assholes.length; idx++)
308 if ((ply.assholes[idx]).pregnantWith == null)
310 ply.assholes[idx].impregnate(balls);
311 text += "<p><b>Your " + ply.assholes[idx].getShortDescr() + " is now ";
312 text += "pregnant.</p></b>";
313 break;
317 else
319 for (idx = 0; idx < ply.vaginas.length; idx++)
321 if ((ply.vaginas[idx]).pregnantWith == null)
323 ply.vaginas[idx].impregnate(balls);
324 text += "<p><b>Your " + ply.vaginas[idx].getShortDescr() + " is now ";
325 text += "pregnant.</p></b>";
326 break;
330 InfoScreen.push(gender.doReplace(text));
332 for (var ii:int = 0; ii < balls.length; ii++)
334 var tt:Testicle = balls[ii];
335 enchTxt += ply.addEnchantment(tt.targetFX) + " ";
337 return true;
339 return false;