From 9faed23105610592ec764fbfc2d8a0aaddc33d26 Mon Sep 17 00:00:00 2001 From: Harbinger Date: Mon, 11 Jun 2012 18:03:13 -0700 Subject: [PATCH] New RNG, eliminate item ID collisions, start working on Anchor Stone --- src/ItemRegistry.as | 21 ++++---- src/MathUtils.as | 35 ++++++++++++- src/org/sevenchan/dongs/Item.as | 59 ++++++++++++++-------- src/org/sevenchan/dongs/ability/Tornado.as | 12 +++-- .../sevenchan/dongs/screens/SuperStoreScreen.as | 32 ++++++------ 5 files changed, 105 insertions(+), 54 deletions(-) diff --git a/src/ItemRegistry.as b/src/ItemRegistry.as index 3636f2b..09b55a8 100644 --- a/src/ItemRegistry.as +++ b/src/ItemRegistry.as @@ -7,16 +7,17 @@ package */ public class ItemRegistry { - public static var BERRY_WHITE:WhiteBerries = new WhiteBerries(1); - public static var HARPY_TINCTURE:HarpyTincture = new HarpyTincture(1); - public static var SPIDER_VENOM:SpiderVenomSac = new SpiderVenomSac(1); - public static var DARK_HARPY_EGG:DarkHarpyEgg = new DarkHarpyEgg(1); - public static var POTION_PINK:PinkPotion = new PinkPotion(1); - public static var POTION_GOLD:GoldPotion = new GoldPotion(1); - public static var SPIDER_EGG:SpiderEgg = new SpiderEgg(1); - public static var GAS_MASK:GasMask = new GasMask(1); - public static var MILK:Milk = new Milk(1); - public static var SPIDER_GONAD:SpiderGonad = new SpiderGonad(1); + public static var BERRY_WHITE:WhiteBerries = new WhiteBerries(1); //0 + public static var HARPY_TINCTURE:HarpyTincture = new HarpyTincture(1); //1 + public static var SPIDER_VENOM:SpiderVenomSac = new SpiderVenomSac(1); //2 + public static var DARK_HARPY_EGG:DarkHarpyEgg = new DarkHarpyEgg(1); //3 + public static var POTION_PINK:PinkPotion = new PinkPotion(1); //4 + public static var POTION_GOLD:GoldPotion = new GoldPotion(1); //5 + public static var SPIDER_EGG:SpiderEgg = new SpiderEgg(1); //6 + public static var GAS_MASK:GasMask = new GasMask(1); //7 + public static var MILK:Milk = new Milk(1); //8 + public static var SPIDER_GONAD:SpiderGonad = new SpiderGonad(1); //9 + public static var ANCHOR_STONE:AnchorStone = new AnchorStone(1); //10 } } \ No newline at end of file diff --git a/src/MathUtils.as b/src/MathUtils.as index e62b6bb..ef3e666 100644 --- a/src/MathUtils.as +++ b/src/MathUtils.as @@ -1,4 +1,6 @@ package { + + import flash.utils.getTimer; public class MathUtils { public static function lerp(value:Number, a:Number, b:Number):Number { @@ -34,8 +36,37 @@ package { return out; } - public static function rand(from:Number, to:Number, round:Boolean=true):Number { - var o:Number = (Math.random() * (to - from)) + from; + //http://blog.controul.com/2009/04/true-random-numbers-in-flash-clock-drift/ (Heavily modified) + public static function random ( bits : uint = 32 ) : Number + { + if ( bits > 32 ) + bits = 32; + var r : uint = 0, + i : uint = 0, + t : uint = getTimer (); + for ( ;; ) + { + if ( t != ( t = getTimer () ) ) + { + if ( i & 1 ) + r |= 1; + bits --; + if ( bits > 0 ) + { + i = 0; + r <<= 1; + } + else + break; + } + i ++; + } + return Number(r) / Number(uint.MAX_VALUE); + } + public static function rand(from:Number, to:Number, round:Boolean = true):Number { + var rnd:Number = random(); + trace("RNG Sample: ", rnd.toFixed(5)); + var o:Number = (rnd * (to - from)) + from; if (round) o = Math.round(o); return o; diff --git a/src/org/sevenchan/dongs/Item.as b/src/org/sevenchan/dongs/Item.as index 93e61b5..d7dcfcb 100644 --- a/src/org/sevenchan/dongs/Item.as +++ b/src/org/sevenchan/dongs/Item.as @@ -1,15 +1,16 @@ -package org.sevenchan.dongs +package org.sevenchan.dongs { + import adobe.utils.CustomActions; import org.sevenchan.dongs.items.*; import org.sevenchan.dongs.screens.InfoScreen; + /** * ... * @author Harbinger */ - public class Item + public class Item { - public static var Registry:Object = { }; - + public static var Registry:Object = {}; public var id:int = 0; public var name:String = ""; @@ -18,39 +19,55 @@ package org.sevenchan.dongs public var amount:uint = 0; public var isSexuallyTransmitted:Boolean = false; - public function Item(num:uint=0) { + public function Item(num:uint = 0) + { amount = num; } - public function copy():Item { + public function copy():Item + { return null; } - public static function fillRegistry():void { - Registry={ - berry_white: new WhiteBerries(), - harpy_tincture: new HarpyTincture(), + public static function fillRegistry():void + { + Registry = { + berry_white: new WhiteBerries(), + harpy_tincture: new HarpyTincture(), spider_venom: new SpiderVenomSac(), darkharpyegg: new DarkHarpyEgg(), - potion_pink: new PinkPotion(), - potion_gold:new GoldPotion(), - spider_egg:new SpiderEgg(), - gas_mask:new GasMask(), - milk:new Milk(), - spider_gonad:new SpiderGonad() - }; + potion_pink: new PinkPotion(), + potion_gold: new GoldPotion(), + spider_egg: new SpiderEgg(), + gas_mask: new GasMask(), + milk: new Milk(), + spider_gonad: new SpiderGonad(), + anchor_stone: new AnchorStone() + }; + var ids:Array = new Array(); + for each (var i:Item in Registry) + { + trace(i.name+"\t"+i.id); + if (ids[i.id] != null) + throw new Error(i.name + " has duplicate ID! Conflicts with " + (ids[i.id] as Item).name); + ids[i.id] = i; + } } - public static function findByID(id:int):Item { + public static function findByID(id:int):Item + { trace("Asked to find", id); - for each(var item:Item in Registry) { + for each (var item:Item in Registry) + { trace(item.name, item.id); - if (item.id == id) return item.copy(); + if (item.id == id) + return item.copy(); } return null; } - public function Use(host:Creature):Boolean { + public function Use(host:Creature):Boolean + { InfoScreen.push("

Use Item

Nothing happens.

"); return false; } diff --git a/src/org/sevenchan/dongs/ability/Tornado.as b/src/org/sevenchan/dongs/ability/Tornado.as index 0e632a9..af1fcbe 100644 --- a/src/org/sevenchan/dongs/ability/Tornado.as +++ b/src/org/sevenchan/dongs/ability/Tornado.as @@ -1,4 +1,4 @@ -package org.sevenchan.dongs.ability +package org.sevenchan.dongs.ability { import org.sevenchan.dongs.Ability; import org.sevenchan.dongs.Creature; @@ -8,10 +8,10 @@ package org.sevenchan.dongs.ability * ... * @author Harbinger */ - public class Tornado extends Ability + public class Tornado extends Ability { - public function Tornado() + public function Tornado() { this.manaCost = 75; this.description = "Summons a tornado to return player to barn."; @@ -20,8 +20,10 @@ package org.sevenchan.dongs.ability this.cannotBeRestrainedToUse = false; } - override public function activate(activator:Creature, rapee:Creature):Boolean + override public function activate(activator:Creature, rapee:Creature):Boolean { + if (rapee.hasItem(ItemRegistry.ANCHOR_STONE.id)) + return false; var text:String = "

Tornado

"; text += "

The ghastly spirit's face splits in two as it bares its enormous, foot-long "; text += "shark-like teeth. Strands of ethereal saliva bridge the gaps, and a foul odor "; @@ -37,7 +39,7 @@ package org.sevenchan.dongs.ability rapee.HP = 0; return true; } - + } } \ No newline at end of file diff --git a/src/org/sevenchan/dongs/screens/SuperStoreScreen.as b/src/org/sevenchan/dongs/screens/SuperStoreScreen.as index 36c8de8..d20e8b6 100644 --- a/src/org/sevenchan/dongs/screens/SuperStoreScreen.as +++ b/src/org/sevenchan/dongs/screens/SuperStoreScreen.as @@ -86,63 +86,63 @@ package org.sevenchan.dongs.screens switch (bp.category) { case "arms": - ArmsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + ArmsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.arms.push(o as IBodyPart); return true; }, bp); break; case "assholes": - AssholesMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + AssholesMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.assholes.push(o as IBodyPart); return true; }, bp); break; case "breasts": - BreastsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + BreastsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.breasts.push(o as IBodyPart); return true; }, bp); break; case "hair": - HairMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + HairMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.hair = bp as Hair; return true; }, bp); break; case "legs": - LegsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + LegsMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.legs.push(o as IBodyPart); return true; }, bp); break; case "dicks": - PenisMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + PenisMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.dicks.push(o as IBodyPart); return true; }, bp); break; case "balls": - TesticleMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + TesticleMenu.pushAction(bp.name, 100, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.balls.push(o as IBodyPart); return true; }, bp); break; case "vaginas": - VaginaMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + VaginaMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.vaginas.push(o as IBodyPart); return true; }, bp); break; case "wings": - WingMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*) + WingMenu.pushAction(bp.name, 250, bp.getShortDescr(), function(ply:Creature, node:ActionNode, o:*):Boolean { ply.wings.push(o as IBodyPart); return true; @@ -155,30 +155,30 @@ package org.sevenchan.dongs.screens var BuyEnchantments:MenuNode = BuyMenu.pushMenu("Enchant", "Buy any enchantment or curse possible."); { - BuyEnchantments.pushAction("Corruption", 0, "Add +10 Corruption", function(ply:Creature, node:ActionNode) + BuyEnchantments.pushAction("Corruption", 0, "Add +10 Corruption", function(ply:Creature, node:ActionNode, o:*):Boolean { ply.addEnchantment(new Corruption(10)); return true; }); - BuyEnchantments.pushAction("Hunger(Egg)", 0, "Add hunger for Harpy Eggs.", function(ply:Creature, node:ActionNode) + BuyEnchantments.pushAction("Hunger(Egg)", 0, "Add hunger for Harpy Eggs.", function(ply:Creature, node:ActionNode, o:*):Boolean { ply.addEnchantment(new Hunger(ItemRegistry.DARK_HARPY_EGG.id, 1)); return true; }); - BuyEnchantments.pushAction("Hunger(Gonad)", 0, "Add hunger for gonad.", function(ply:Creature, node:ActionNode) + BuyEnchantments.pushAction("Hunger(Gonad)", 0, "Add hunger for gonad.", function(ply:Creature, node:ActionNode, o:*):Boolean { ply.addEnchantment(new Hunger(ItemRegistry.SPIDER_GONAD.id, 2)); return true; }); - BuyEnchantments.pushAction("Paralyze", 0, "Duh, 5 turns", function(ply:Creature, node:ActionNode) + BuyEnchantments.pushAction("Paralyze", 0, "Duh, 5 turns", function(ply:Creature, node:ActionNode, o:*):Boolean { ply.addEnchantment(new Paralyze()); return true; }); - BuyEnchantments.pushAction("WindBless", 1500, "Add wind blessing", function(ply:Creature, node:ActionNode) + BuyEnchantments.pushAction("WindBless", 1500, "Add wind blessing", function(ply:Creature, node:ActionNode, o:*):Boolean { ply.addEnchantment(new WindBlessing()); return true; @@ -187,10 +187,10 @@ package org.sevenchan.dongs.screens var BuyItems:MenuNode = BuyMenu.pushMenu("Items", "Any materialistic item you could dream of."); for each (var item:Item in Item.Registry) { - BuyItems.pushAction(item.name, item.value, item.descr, function(ply:Creature, node:ActionNode, o:*) + BuyItems.pushAction(item.name, item.value, item.descr, function(ply:Creature, node:ActionNode, o:*):Boolean { ply.addToInventory(o as Item); - + return true; }, item); } var BuyTransformations:MenuNode = BuyMenu.pushMenu("Preg", "Order up any kind of pregnancy.", needsOriface); -- 2.11.4.GIT