New RNG, eliminate item ID collisions, start working on Anchor Stone
[18plus-7leafadventure.git] / src / org / sevenchan / dongs / screens / SuperStoreScreen.as
blobd20e8b644300a23fa251a1fa2281e87c70996830
1 package org.sevenchan.dongs.screens
3 import flash.utils.*;
4 import org.sevenchan.AdventureController;
5 import org.sevenchan.dongs.ActionNode;
6 import org.sevenchan.dongs.bodyparts.Arm;
7 import org.sevenchan.dongs.bodyparts.Breast;
8 import org.sevenchan.dongs.bodyparts.Hair;
9 import org.sevenchan.dongs.bodyparts.IBodyPart;
10 import org.sevenchan.dongs.bodyparts.Penis;
11 import org.sevenchan.dongs.Creature;
12 import org.sevenchan.dongs.enchantment.Corruption;
13 import org.sevenchan.dongs.enchantment.Hunger;
14 import org.sevenchan.dongs.enchantment.Paralyze;
15 import org.sevenchan.dongs.enchantment.WindBlessing;
16 import org.sevenchan.dongs.INode;
17 import org.sevenchan.dongs.Item;
18 import org.sevenchan.dongs.items.GoldPotion;
19 import org.sevenchan.dongs.items.PinkPotion;
20 import org.sevenchan.dongs.items.Potion;
21 import org.sevenchan.dongs.items.SpiderEgg;
22 import org.sevenchan.dongs.MenuNode;
23 import org.sevenchan.dongs.Screen;
25 /**
26 * ...
27 * @author Harbinger
29 public class SuperStoreScreen extends Encounter
31 private var title:String = "";
32 private var priceoffset:Number = 0;
33 private var dickincrement:Number = 0;
34 private var type:int = 0;
35 private var inventory:Array = [];
37 public static function push():void
39 AdventureController.screenQueue.write(new SuperStoreScreen());
42 public function SuperStoreScreen()
44 super(null);
45 setup(0, 6, "WelMart");
46 inventory = [];
47 for each (var item:Item in Item.Registry)
49 var i:Item = item.copy();
50 i.amount = 100;
51 inventory.push(i);
54 currentItem.clearChildren();
55 // Buy:
56 // Body Parts:
57 // Transformations:
58 // Items:
59 // Enchantments:
60 // Pregnancies:
61 // Leave
63 var BuyMenu:MenuNode = currentItem.pushMenu("Buy", "Buy anything. Literally.");
64 var BuyBodyParts:MenuNode = BuyMenu.pushMenu("BodyParts", "Buy any kind of body part under the sun.");
66 var ArmsMenu:MenuNode = BuyBodyParts.pushMenu("Arms", "");
67 var AssholesMenu:MenuNode = BuyBodyParts.pushMenu("Assholes", "");
68 var BreastsMenu:MenuNode = BuyBodyParts.pushMenu("Breasts", "");
69 var EyesMenu:MenuNode = BuyBodyParts.pushMenu("Eyes", "");
70 var HairMenu:MenuNode = BuyBodyParts.pushMenu("Hair", "");
71 var LegsMenu:MenuNode = BuyBodyParts.pushMenu("Legs", "");
72 var PenisMenu:MenuNode = BuyBodyParts.pushMenu("Penis", "");
73 var SkinMenu:MenuNode = BuyBodyParts.pushMenu("Skin", "");
74 var TesticleMenu:MenuNode = BuyBodyParts.pushMenu("Testicle", "");
75 var VaginaMenu:MenuNode = BuyBodyParts.pushMenu("Vagina", "");
76 var WingMenu:MenuNode = BuyBodyParts.pushMenu("Wing", "");
78 for each (var name:XML in describeType(BodyPartRegistry)..accessor.@name)
80 var partname:String = name.toString();
81 var bpo:* = BodyPartRegistry[partname];
82 if (bpo is IBodyPart)
84 var bp:IBodyPart = (bpo as IBodyPart);
85 trace(bp, bp.category);
86 switch (bp.category)
88 case "arms":
89 ArmsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
91 ply.arms.push(o as IBodyPart);
92 return true;
93 }, bp);
94 break;
95 case "assholes":
96 AssholesMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
98 ply.assholes.push(o as IBodyPart);
99 return true;
100 }, bp);
101 break;
102 case "breasts":
103 BreastsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
105 ply.breasts.push(o as IBodyPart);
106 return true;
107 }, bp);
108 break;
109 case "hair":
110 HairMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
112 ply.hair = bp as Hair;
113 return true;
114 }, bp);
115 break;
116 case "legs":
117 LegsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
119 ply.legs.push(o as IBodyPart);
120 return true;
121 }, bp);
122 break;
123 case "dicks":
124 PenisMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
126 ply.dicks.push(o as IBodyPart);
127 return true;
128 }, bp);
129 break;
130 case "balls":
131 TesticleMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
133 ply.balls.push(o as IBodyPart);
134 return true;
135 }, bp);
136 break;
137 case "vaginas":
138 VaginaMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
140 ply.vaginas.push(o as IBodyPart);
141 return true;
142 }, bp);
143 break;
144 case "wings":
145 WingMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean
147 ply.wings.push(o as IBodyPart);
148 return true;
149 }, bp);
150 break;
155 var BuyEnchantments:MenuNode = BuyMenu.pushMenu("Enchant", "Buy any enchantment or curse possible.");
158 BuyEnchantments.pushAction("Corruption", 0, "Add +10 Corruption", function(ply:Creature, node:ActionNode, o:*):Boolean
160 ply.addEnchantment(new Corruption(10));
161 return true;
163 BuyEnchantments.pushAction("Hunger(Egg)", 0, "Add hunger for Harpy Eggs.", function(ply:Creature, node:ActionNode, o:*):Boolean
165 ply.addEnchantment(new Hunger(ItemRegistry.DARK_HARPY_EGG.id, 1));
166 return true;
169 BuyEnchantments.pushAction("Hunger(Gonad)", 0, "Add hunger for gonad.", function(ply:Creature, node:ActionNode, o:*):Boolean
171 ply.addEnchantment(new Hunger(ItemRegistry.SPIDER_GONAD.id, 2));
172 return true;
175 BuyEnchantments.pushAction("Paralyze", 0, "Duh, 5 turns", function(ply:Creature, node:ActionNode, o:*):Boolean
177 ply.addEnchantment(new Paralyze());
178 return true;
181 BuyEnchantments.pushAction("WindBless", 1500, "Add wind blessing", function(ply:Creature, node:ActionNode, o:*):Boolean
183 ply.addEnchantment(new WindBlessing());
184 return true;
187 var BuyItems:MenuNode = BuyMenu.pushMenu("Items", "Any materialistic item you could dream of.");
188 for each (var item:Item in Item.Registry)
190 BuyItems.pushAction(item.name, item.value, item.descr, function(ply:Creature, node:ActionNode, o:*):Boolean
192 ply.addToInventory(o as Item);
193 return true;
194 }, item);
196 var BuyTransformations:MenuNode = BuyMenu.pushMenu("Preg", "Order up any kind of pregnancy.", needsOriface);
200 public function needsOriface(ply:Creature, node:MenuNode):Boolean
202 return ply.assholes.length > 0 || ply.vaginas.length > 0;
205 private function setup(po:Number, i:Number, t:String):void
207 this.title = t;
208 this.priceoffset = po;
209 this.dickincrement = i;
212 override public function processButtonPress(id:int):Boolean
214 clearButtons();
215 if (abort)
217 return true;
219 switch (id)
221 case-1:
222 onStartupScreen();
223 appendMenu();
224 updateScreen();
225 return false;
226 break;
227 case 0:
228 if (currentItem.parent == null)
230 onLeaving();
231 return true;
233 else
235 currentItem = currentItem.parent;
236 text = currentItem.content;
237 appendMenu();
238 updateScreen();
239 return false;
241 break;
242 default:
243 var nci:INode = currentItem.children[id - 1];
244 var ret:Boolean = false;
245 if (nci is ActionNode)
247 ret = (ActionNode(nci)).invoke(this, this.main.player, (nci as ActionNode).arg);
249 else
251 if ((MenuNode(nci)).canSwitchTo(main.player, subject, this))
253 currentItem = nci;
256 if (!abort)
257 text = nci.content;
258 if (!ret && !abort)
260 appendMenu();
262 updateScreen();
263 return ret;
265 return false;
268 override public function getScreenText():String
270 return text;