/// interface AttributeBearer { getStat (attr : Attribute) : number; setStat (attr : Attribute, value : number) : void; } class Attribute extends PersonStat { public defaultValue : number = 2; public maxValue : number = 5; public constructor (id : string, description? : string | Say | ((value : number) => string | Say), defValue? :number, maxValue?:number) { super(id, description); if (defValue != undefined) { this.defaultValue = defValue; } if (maxValue != undefined) { this.maxValue = maxValue; } Attribute.Attributes[id] = this; } private static Attributes : {[id : string] : Attribute} = {}; public static getAttributes () { let attributes = []; for (let key in Attribute.Attributes) { attributes.push(Attribute.Attributes[key]); } return attributes; } public static getAttribute (id : string) { return Attribute.Attributes[id]; } } module Attributes { export let Strength = new Attribute( "Strength", value => { switch (value) { case 5: return "Hercules' Bigger Cousin"; case 4: return ("Circus Strong" + (( WorldState.player).isMale() ? "man" : "woman")); case 3: return "Beach Bully"; case 2: return ("Average " + (( WorldState.player).isMale() ? "Joe" : "Jane")); case 1: return "Wet Noodle"; default: return "Out of bounds."; } } ); export let Agility = new Attribute( "Agility", value => { switch (value) { case 5: return "Catlike"; case 4: return "Gymnast"; case 3: return "Accurate"; case 2: return "Common"; case 1: return "Accident-prone"; default: return "Out of bounds."; } } ); export let Intelligence = new Attribute( "Intelligence", value => { switch (value) { case 5: return "Genius"; case 4: return "Gifted"; case 3: return "Knowledgeable"; case 2: return "Normal"; case 1: return "Door"; default: return "Out of bounds."; } } ); export let Charm = new Attribute( "Charm", value => { switch (value) { case 5: return (( WorldState.player).isMale() ? "Casanova" : "Seductress"); case 4: return "Diplomat"; case 3: return ("Cheery Sales" + (( WorldState.player).isMale() ? "man" : "woman")); case 2: return "Not even trying"; case 1: return "Unpleasant"; default: return "Out of bounds."; } } ); export let Corruption = new Attribute( "Corruption", value => { return "Not defined" }, 0, 100 ); export let GenderIdentity = new Attribute( "Gender Identity", value => { if (value >= 75) { return "You strongly feel, and act, like a woman."; } else if (value >= 60) { return "You feel, and act, like a woman."; } else if (value >= 40) { return "You don't feel nor act like any particular gender."; } else if (value >= 20) { return "You feel, and act, like a man."; } else { return "You strongly feel, and act, like a man."; } }, 50, 100 ); export let Degeneration = new Attribute( "Degeneration", value => { if (value >= 75) { return "Sex is about the only thing on your mind, and you don't even try to hide it anymore."; } else if (value >= 60) { return "Sometimes you can't hide how naughty you'd like to be."; } else if (value >= 40) { return ""; } else if (value >= 20) { return "Your composure is prudish and calm."; } else { return "You have the composure of a saint."; } }, 30, 100 ); }