<commit_before>import "../SBURBSim.dart";
import "dart:async";
import 'dart:html';
import '../includes/path_utils.dart';

//handles spawning and maintaining various npcs.
class NPCHandler
{
    Session session;
    //not parsed, but means i only need to do the async thing once.
    static List<String> bigBadsFromFile = new List<String>();

    List<GameEntity> allEntities = new List<GameEntity>();
    List<GameEntity> bigBads = new List<BigBad>();

    static String JACK = "JACK";
    static String PM = "PM"; //done
    static String JS = "JS"; //done
    static String EA = "EA";
    static String HP = "HP";
    static String YD = "YD";//done
    static String MD = "MD";
    static String CI = "CI";
    static String SI = "SI"; //done
    static String SU = "SU"; //done
    static String ME = "ME";
    static String RB = "RB"; //done
    static String GN = "GN"; //done
    static String AC = "AC";
    static String BE = "BE";
    static String MP = "MP";
    static String MK = "MK";
    static String AR = "AR"; //done
    static String PE = "PE"; //done
    static String DP = "DP"; //done
    static String ZC = "ZC";
    static String KB = "KB";
    static String WV = "WV";
    static String PS = "PS";
    static String PI = "PI";
    static String AD = "AD";
    static String HS = "HS";
    static String NB = "NB";
    static String SS = "SS";
    static String CD = "CD";
    static String HB = "HB"; //done
    static String DD = "DD";







    //some carapaces can be specific rewards
    Carapace jack;
    List<Carapace> prospitians = <Carapace>[];
    List<Carapace> dersites = <Carapace>[];


    NPCHandler(Session this.session) {
    }

    void debugNPCs() {
        for(GameEntity g in allEntities) {
            print("$g is active: ${g.active} and is dead: ${g.dead}  has ${g.sylladex.length} items.");
        }
    }

    Carapace getCarapaceWithHandle(String handle) {
        if(handle == JACK) return jack;

        for(GameEntity e in session.activatedNPCS) {
            if(e is Carapace && e.initials == handle) return e;
        }

        if(session.prospit != null){
            for(GameEntity e in session.prospit.associatedEntities) {
                if(e is Carapace && e.initials == handle) return e;
            }
        }

        if(session.derse != null){
            for(GameEntity e in session.derse.associatedEntities) {
                if(e is Carapace && e.initials == handle) return e;
            }
        }
        //couldn't find them. thems the breaks.
        return null;

    }

   void setupNpcs() {
        print("TEST BULLSHIT: setting up ncps");
        setupBigBads();
    }

    static Future<Null> loadBigBads() async {
        print("loading big bads");
        String data = await Loader.getResource("BigBadLists/bigBads.txt");
        bigBadsFromFile = data.split("\n");
    }

    void setupBigBads() {
        session.logger.info("TEST BULLSHIT: setting up big bads from ${bigBadsFromFile.length} data strings");
        for(String line in bigBadsFromFile) {
            BigBad newBB = BigBad.fromDataString(line, session);
            newBB.setStat(Stats.HEALTH, 130);
            newBB.setStat(Stats.POWER, 130);

            print("made a new BB ${newBB}");
            bigBads.add(newBB);
        }
    }

    //each npc has items in their sylladex, at least one of which is legendary
    //TODO each game entity optionally has text for what to say if they are doing
    //TODO DESTROY, CORRUPT, CONTROL or whatever
    //decides their quest rewards and what items MAIL QUESTS can choose from.

    //violent, lucky, charming, cunning
    List<Carapace> getMidnightCrew() {
        List<Carapace> midnightCrew = new List<Carapace>();

       // print ("TEST NPCS: initializing midnight crew");
        jack = (new Carapace("<NAME>", session, Carapace.DERSE, firstNames: <String>["Spades","Septuple","Seven","Skullduggerous"], lastNames: <String>["Slick", "Shanks","Shankmaster","Snake"], ringFirstNames: <String>["Sovereign", "Seven"], ringLastNames: <String>["Slayer", "Shanks","Stabber"])
            ..specibus = new Specibus("Knife", ItemTraitFactory.KNIFE, <ItemTrait>[ ItemTraitFactory.JACKLY])
            ..distractions = <String>["is throwing a tantrum about how huge a bitch the Black Queen is.","is pretending to ride on a horse.","is so mad at paperwork.","is refusing to wear his uniform.","is stabbing some random carapace who said 'hello'.","is sharpening Occam's razor","is actually being a pretty good bureaucrat.","is hiding his scottie dogs candies."]
            ..sylladex.add(new Item("Occam's Razor",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.SMART]))
            ..sylladex.add(new Item("Horse Hitcher",<ItemTrait>[ItemTraitFactory.STICK, ItemTraitFactory.IRONICSHITTYFUNNY]))
            ..sylladex.add(new Item("Terrier Fancy Magazine",<ItemTrait>[ItemTraitFactory.ROMANTIC, ItemTraitFactory.PAPER]))
            ..description = "The Derse Archagent, <NAME> is infamous for his love of scottie dogs, his hatred of the Black Queen and his omnicidal tendencies. He’s also a leader of the Midnight Crew - jazz band which can often be found in the “Liquid Negrocity” bar.  <br><Br>When he gets the ring his omnicidal tendencies are enabled."
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -500, Stats.MAX_LUCK: 10, Stats.SANITY: -100, Stats.HEALTH: 20, Stats.FREE_WILL: -100, Stats.POWER: 30})
            ..makeViolent(1000)
            ..makeCunning(1000)
            ..serializableSceneStrings.addAll(<String>["Be Omnicidal:___ <KEY>","Say Hello:___ N4IgdghgtgpiBcIDKECeACAEjANjg9iADQgBmOEAbvgE4AqMAHgC4IjpIDCAogHLcB9APIB1fgCUBvAIIBZbugDOzCACNF6ZgAsY6dHWniA4tzpS5goZJnykRdAEtmAcg0ArAK7L0W-AHdNHQxFNB9cAgA6YhAVGgBzGGYhMDhEZhoPOBJ0hziEmk58MAATJwcixQAZB0oHMDi2AG1gAB0QBygAB1oVMGYRWmK2+DbeAHppNqJRoTphttIIHEUYKbbIWHmQAElFaRwa1eI2ju6aXuZtvq2ABjaAX3tW9q6eiD6BmiGEUYm1kF4sy2i2WR2m4GgRxGO0U4nexXwUH+pzefSuzC2ACY7iBHuhnijzu9+oMtuNJscAUCfjEMmD1pCtrskLhSMjXkS0dcaTj7gBdaI5PIwApFUrMcpgKrwpoCkgwUikGAAY2YigAYrRqrV6k0CRyLp9vtDsEttP8NlC2pwtO8EkgVBjKYSLrwPFBVCKtgBaACMAGYHnKQAqlaqNVr4YpZbigA"])
            ..sylladex.add(new Item("Scottie Dogs",<ItemTrait>[ItemTraitFactory.CANDY]))

            ..active = true //jack needs to be on for every session
            ..royaltyOpinion = -1000
            ..scenes = <Scene>[new RedMiles(session), new BeDistracted(session),new PassOutRegiswords(session),  new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
        );
        midnightCrew.add(jack);

        //he's lucky and cunning
        midnightCrew.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Cordial","Courtyard","Clubs","Curious", "Cheerful", "Cheery","Chipper","Clutzy","Chaotic"], lastNames: <String>["Deuce","Droll","Dabbler", "Demoman","Dwarf","Dunce"], ringFirstNames: <String>["Crowned","Capering","Chaotic","Collateral"], ringLastNames: <String>["Destroyer","Demigod"])
            ..specibus = new Specibus("Bomb", ItemTraitFactory.GRENADE, <ItemTrait>[ ItemTraitFactory.EXPLODEY])
            ..distractions = <String>["is flipping the fuck out about a bull penis cane. What?","is trading everybody's hats in the session.","is eating black licorice gummy bears.","is collecting just. So many bombs. You don't even know.","is stopping arguments between carapaces.","having a tea party with some nice consorts and underlings."]
            ..description = "One of the Dersite Agents, CD is an incompetent buffoon with a taste for big explosions. He’s really lucky, though. Perhaps that’s why he’s still good at being an agent. He sometimes playing jazz music at the Liquid Negrocity."
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session), new GiveJackScepter(session), new GiveJackRing(session)] //order of scenes is order of priority
            ..serializableSceneStrings.addAll(<String>["Be Incompetant:___ N4IgdghgtgpiBcIBCMAEBJMBjA9lADjAC4RhEgA0IAZgDYQBuOATgCowAe5irAFszgCuAc16oIqas1IBrWgE9UUAJZgAJqgBGOYcNqrhqAM4xmymEdQ5qqGAxhkjFVAGUAwgFEAch4D6AeQB1HwAlXy8AQQBZD3EsLGU1BxJaBS1aHAB3S0F8VFRWCJCAcQ9WcOi-fzDImJcAOldTZSEjBUaATSFUNRwwAHIiW3swVEzSIaIcVB<KEY>"])
            ..sylladex.add(new Item("Licorice Gummy Bears",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 500, Stats.MAX_LUCK: 500, Stats.SANITY: 100, Stats.HEALTH: 20, Stats.FREE_WILL: 100, Stats.POWER: 15})
            ..makeLucky(1000)
            ..sylladex.add(new Item("Black Inches Magazine",<ItemTrait>[ItemTraitFactory.ROMANTIC, ItemTraitFactory.PAPER]))
                        ..activationChance = 0.1
            ..sylladex.add(new Item("Bull Penis Cane",<ItemTrait>[ItemTraitFactory.STICK, ItemTraitFactory.GROSSOUT]))
            ..sylladex.add(new Item("Regisword",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.LEGENDARY, ItemTraitFactory.EDGED, ItemTraitFactory.POINTY]))
            ..makeCunning(1000)
        );

        midnightCrew.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Diamonds","Draconian","Dignified"], lastNames: <String>["Droog","Dignitary","Diplomat"], ringFirstNames: <String>["Dashing","Dartabout","Derelict"], ringLastNames: <String>["Destroyer","Demigod"])
            ..specibus = new Specibus("Knife", ItemTraitFactory.KNIFE, <ItemTrait>[ ItemTraitFactory.EDGED, ItemTraitFactory.CLASSY])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new GiveJackScepter(session), new GiveJackRing(session)] //order of scenes is order of priority
            ..distractions = <String>["is playing classy records. ","is reading the paper. ","is fantasizing about perfectly tailored suits.", "is hiding his swedish fish.","is reading 'classy literature' about grey ladies.","is keeping everyone calm and productive."]
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 100, Stats.SANITY: 500, Stats.HEALTH: 20, Stats.FREE_WILL: 0, Stats.POWER: 20})
            ..makeCharming(1000)
            ..makeCunning(1000)
            ..activationChance = 0.1
            ..serializableSceneStrings.addAll(<String>["Destroy Bad Fashion:___ N4IgdghgtgpiBcIAiMDOAXATgewJ4AIAhCAE3wDEJUALAS2zBABoQAzAGwgDdtMAVGAA90CEAGUAwgFEAclID6AeQDqcgEryZAQQCyU-LVT4IABxMR27GGQjp86ajHwB3CAT5a1AcSl9NuhUUNbT0xAHIjbABXdFZaO3ZsbABrVAA6fAAJJxJsNHtHF152G3xWbl5jMDISNCw8I3iMgBkk1Px2WmSnBxhcMMt8am4e7GN2AGNHKFoALycwGGd8CcTe9PwtauMO7DtsVnw9x0x8DCjWViZ7JLTmEHQITABzGHRFRdEsKLgWLFpnq9MBIGCR4vQwKhmrQuLQwM9RABtYAAHRAtCgJl4jzA6GUvBIaPgaJkAHotGimCTFHwiWjyuxUDBKWjILA6SAAJKoAAKnFwMEwLPRmOxEFxnNxHIADGiAL7XVEirGYHF4gkcskU5jU2kIekWJnCtnM-Vc1BqcW5KDCjEqtWS9AcgAc8sVaLtYtx+MwhLNfAgE2SuGFMhpHIZRp14GgpuJIEyVE56BgUGU8WofEwEHittFqvF6EdMrd+CVnoL3o1Zp52GcgtD4bN31NVJj7P9T1e6DEjyLqC8mBgtkFfGGYB0cNbHvzDqlZtlIDlAF17v9AYKQdVwQwoVakauWDBLjAJuhUOReNDYfCkeXZ4WfX741rjbGOSgMDhcGJcJZSEIeb2oWMhRFAABGDYLvKh4gMerCnuel6YM0VqoAeS5AA","Collect Finely Tailored Suits:___ N<KEY>"])
            ..description = "The most competent of the Midnight Crew, DD is the most classy gentlemen you will meet in your life. Unless you catch him with his gray ladies journal. Oh, and DD is probably the one you should talk to if you want to get rid of a troublesome...entity discreetly.Unless he’s Crowned. In this case, you are already fucked."
            ..sylladex.add(new Item("Swedish Fish",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("Grey Ladies Newspaper",<ItemTrait>[ItemTraitFactory.ROMANTIC, ItemTraitFactory.PAPER]))
            ..sylladex.add(new Item("Finely Tailored Suit",<ItemTrait>[ItemTraitFactory.CLOTH, ItemTraitFactory.CLASSY]))
            ..sylladex.add(new Item("Regisword",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.LEGENDARY, ItemTraitFactory.EDGED, ItemTraitFactory.POINTY]))

            ..sideLoyalty = 1000
        );

        midnightCrew.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Hearts","Hegemonic","Horse","Heavy","Handsome"], lastNames: <String>["Brute","Boxcar","Bartender","Brawler","Beefcake"], ringFirstNames: <String>["Herokilling","Hateful"], ringLastNames: <String>["Beast","Bastard"])
            ..specibus = new Specibus("Fist", ItemTraitFactory.FIST, <ItemTrait>[ ItemTraitFactory.BLUNT])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session), new GiveJackScepter(session), new GiveJackRing(session)] //order of scenes is order of priority
            ..distractions = <String>["is shipping just. All the things.","is reading RED CHEEKS magazine.","is protecting his wax lips candies. ","is updating his shipping grid.","is trying to get his OTP together already.","is demanding that this chump just KISS THE GIRL THIS INSTANT."]
            ..sylladex.add(new Item("Wax Lips",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..serializableSceneStrings.addAll(<String>["Demand You Kiss The Girl:___ N4IgdghgtgpiBcIAiMoTAEwAQE0D2ArlgNICWAzuVgCoAWMWA4qQE4A2IANCAGZsQA3PC2owAHgBcEIAMoBhAKIA5BQH0A8gHUVAJVVKAggFkFWcgQwYYYNgE8sLGBDakAXjCoTaECVhoGdRgVqfWM1dT1DExksMBgYDCp6NgAHLAB3Ui8sLxhWLDY8AQYXHhgAOhp6ey8WPHSc+igsAAoARwIskq6WZzsASixSMAk8LHQscQlrK2wJXuHhgHMsKDwRiCWGYenMBJyxtABrBlzmtcdxlJSnFzAV0ca8liwUxzKWR2w6tBHSAGNXhAWBI4i8JLYbpUuCAJMCthJ1HFpPMCHBuPNSEstiw5OsMFlSOtyAAZUgCZbSADawAAOiBSFAUsI4SNNMIMPT4PSlAB6Az0zg89TULn0njOcgwQX0yCwMUgACS5AMLmKMoZTJZ6AkipGCoADPSAL6cLB0zXMkE69ksTkIHn8jVKEUKiVsKUauXSh1K8gABX4thgLA1jKtrN1+t9RpApvN9PD2rZHIV-vqIedrt9qJ9QvA0B93JA1HhMAkMjhuvIjEcPhDdHQRmGecTWutIz1EkNJoAujDMdiQ3jMITiST0Bhqf3uDAeGV-hJyAAxYRkin3akWpMdiS2+3FnQwfgSIlgci0UgpchewsKuTee4wSs+MPtyNKAhQABGmd9AEYAGZY2NGcQDnBcl1XFgJ0wchpzjIA"])
            ..sylladex.add(new Item("Red Cheeks Magazine",<ItemTrait>[ItemTraitFactory.PAPER, ItemTraitFactory.ROMANTIC]))
            ..description = "A simple carapacian of simple pleasures, HB is one of the strongest melee combatants one can encounter. He’s strong enough to punch through a safe door. That doesn’t mean he doesn’t have a softer side - he’s authored a few romantic novels as HB."
            ..sylladex.add(new Item("Regisword",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.LEGENDARY, ItemTraitFactory.EDGED, ItemTraitFactory.POINTY]))
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 0, Stats.SANITY: 0, Stats.HEALTH: 500, Stats.FREE_WILL: 0, Stats.POWER: 500})
            ..makeViolent(1000)
            ..activationChance = 0.1
            ..makeCharming(1000)
        );

        /*
        midnightCrew.add(new Carapace(null, session, firstNames: <String>[], lastNames: <String>[], ringFirstNames: <String>[], ringLastNames: <String>[])
        ..specibus = new Specibus("Knife", ItemTraitFactory.KNIFE, [ ItemTraitFactory.JACKLY])
        ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -500, Stats.MAX_LUCK: 10, Stats.SANITY: -100, Stats.HEALTH: 20, Stats.FREE_WILL: -100, Stats.POWER: 30})
        );
         */
        return midnightCrew;

    }

    //violent, lucky, charming, cunning
    List<Carapace> getSunshineTeam() {

        List<Carapace> sunshineTeam = new List<Carapace>();

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Parchment","Pedant","Problem","Paramount","Patriotic"], lastNames: <String>["Sleuth","Secretary","Steward"], ringFirstNames: <String>["Paragon","Promised"], ringLastNames: <String>["Sherrif","Savior","Seraph"])
            ..specibus = new Specibus("Tommy gun", ItemTraitFactory.MACHINEGUN, <ItemTrait>[ ItemTraitFactory.SHOOTY])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..distractions = <String>["is reading the gamefaqs for this section of his quest.","is brokering a peace treaty between the clowns, elves and pigs. This has NOTHING to do with SBURB.","is engaging SEPULCHRITU...wait no, never mind. False alarm."]
            ..royaltyOpinion = 10
            ..serializableSceneStrings.addAll(<String>["Activate Sepulchritude:___ <KEY>mK2MNwOh3iPk6QC63Q9b1aHtBxTEdQUgA"])
            ..description = "One of the top agents on Prospit, with numerous solicitations for services. Compensation is surprisingly adequate. "
            ..sideLoyalty = 10
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -100, Stats.MAX_LUCK: 100, Stats.SANITY: -100, Stats.HEALTH: 20, Stats.FREE_WILL: 200, Stats.POWER: 15})
            ..makeCharming(1000)
            ..sylladex.add(new Item("Candy Corn",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("Diversity Mural",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.PRETTY]))
            ..companionChance = 0.1

            ..bureaucraticBullshit = <String>["needs to get their private eye license renewed.","needs to pay off all those mural loans he took out.","has to get this treaty properly ratified."]
            ..makeLucky(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Persistent","Pickle","Persnickety"], lastNames: <String>["Inspector","Innovator","Investegator"], ringFirstNames: <String>["Patient","Peaceful"], ringLastNames: <String>["Idol"])
            ..specibus = new Specibus("Handgun", ItemTraitFactory.PISTOL, <ItemTrait>[ ItemTraitFactory.SHOOTY])
            ..distractions = <String>["is oogling various things. It makes them uncomfortable.","is looking at HUNK RUMP magazine.","is using his high IMAGINATION stat to go on useless adventures.","is fondly regarding creation."]
            ..sideLoyalty = 10
            ..description = "A Prospitian Agent with a disconcerting oggle. There is a small sub-cult on Prospit that worships his high Imagination stat instead of The Genesis Frog, and he finds it to be off-putting."
            ..sylladex.add(new Item("Tootsie Roll",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("Imaginary Fort",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.FAKE, ItemTraitFactory.PLYWOOD]))
            ..companionChance = 0.1
            ..serializableSceneStrings.addAll(<String>["Become GodHead PIckleInspector:___ N4IgdghgtgpiBcIBCMDGB7WACA4ugJgBIwT5YAKAkqgNYA2MlYAzgA5oAu6ATiADQgAZnQgA3HgBUYADw4IQAZQDCAUQByKgPoB5AOoaASprUBBALIqsAIzSYYzLBAcRcBR2DKD0HugE8s3DAA5hDc+M50dFjogliogRAcAJbeAHT8IByhQTAc2mBwiIIQdMxwAhzcSUE53Ere+EnJ3swAMkmiSWBB8gDawAA6IElQrDxZYBy6PPhD8ENqAPQmQ3wL2hJzQ8WlMKtDkLBbIJTMBhAemPvDo+MXHEwcxwCMAMxDAL58WIM3Y9wTKYzY5LFb8dabBDbEpla6HPZQk5nC74K7gv53SaPF4ABhxn2+vxG-0B0zCIOW1zUG2OO1h6Phx1OChgdEE12JmIek2O+JAXx+Q05APuZNmiNBVJpiLpCLW4GgCPmJxMUCU3HQAHcCuL5cLAdjEXyPgBdDKVaq1eoeJopFitFF9M0CGCCQScZgAMR47U63T6RNuIsmYuOCguTV8cMVxyUAAsLjkFFknuj9fc1ABXKA2bgvV5442EoVB0nAxE4KrMDhYVowUS<KEY>"])
            ..bureaucraticBullshit = <String>["has to pay this fine for public oogling.","needs a permit to fondly regard creation.","has a ticket for excess imagination usage this month."]
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -100, Stats.MAX_LUCK: 100, Stats.SANITY: 100, Stats.HEALTH: 1, Stats.FREE_WILL: 500, Stats.POWER: 1})
            ..makeCharming(1000)
            ..makeCunning(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Ace","Audacious","Asshole"], lastNames: <String>["Detective","Dwarf","Dick"], ringFirstNames: <String>["Ascended"], ringLastNames: <String>["Demon","Destroyer"])
            ..specibus = new Specibus("Fist", ItemTraitFactory.FIST, <ItemTrait>[ ItemTraitFactory.BLUNT])
            ..distractions = <String>["is punching various things in the snoot to establish dominance.","is brewing the worlds most perfect hot sauce.","is wearing a wig. You assume he's undercover or something?"]
            ..royaltyOpinion = -10
            ..companionChance = 0.1
            ..description = "A Prospitian Agent with famously shitty imagination. He doesn't even have a female counterpart, as  a result. He is AMAZING at establishing dominance and brewing hot sauce, though. "
            ..sylladex.add(new Item("Gummy Worm",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("5 Alarm Hot Sauce",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.ONFIRE, ItemTraitFactory.SAUCEY]))
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 0, Stats.SANITY: -500, Stats.HEALTH: 100, Stats.FREE_WILL: 100, Stats.POWER: 100})
            ..makeViolent(1000)
            ..serializableSceneStrings.addAll(<String>["Become Fiesta Ace Dick:___ N4IgdghgtgpiBcIBCMDGB7WACAYgSxgGcAXCLAQVRiwBE9UBrEAGhADMAbCAN3QCcAKjAAexBCADKAYQCiAORkB9APIB1BQCVFc8gFkZWAEYwA5njCEsGCwFco5k1gDuEAJ5Zi6dFig3UACyx-dGIsQgg-anMgvEsoCAATLD4bQkD0NiwAB3QnGD4sCDAkiFRiPG4IYiJcAhIyXXQEmABCLBYQUj4TGGJlMDhENggOQjhWYj48Ex6+KXRivHKFwgAZCodxAG1gAB0QPCgcvlIwYlV+BP34fbkAenJ95lvlAWv94dGYJ-3IWHeQABJQgaIoJTA-A5HfinYiAs4AgCMAGZ9gBfZhYPZQ46wi58K4IW4PSFyV4Az5jSF-b5EoEgsEQlj7Q64opwhF0xEABm56Mx2NZMPZ+MJNxA90ezIl5LplNpz3A0Fp4uBEhgHDYkKFJ3Z8OIAL5IAxWJZ0N1Z1FAMlpNl4vl1OVAMB5CgUj4uQGhMVOth+sN6IAuh1JtNZvNFssLKswdtg6wYGw2GhiIQcPx1txNogdma2ZbLgCJEUlq5Hf86VJ-EUehJSAbpb72XI7MY+ACALQo3lGk2C814wt0gAKuXy5ZV+yrNZgdaq2oHzdb465yJ7-NNOOFBYJAMahjwHFLE4B07AtfrC-zxBbUDbSLXvI3-evVrpAAkYCNiP4T5Xq+es6Xo2i5nLe96ruuxoCnm27nEO4pSDYfB8DAZxYJ+36-tKNKngBF7ziB17gSu4rdk+0Gbk2O5ivsGgalUeArP4eBZIQf6IfhQGET6oE3su7Z0l2j69vGICJsmZRphmYKEHGxpAA"])
            ..bureaucraticBullshit = <String>["has to pay this fine for public fiestaing.","has to post bail for public rowdyness."]
            ..makeLucky(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Hysterical","Haunting","Honored"], lastNames: <String>["Dame","Dancer","Debutante"], ringFirstNames: <String>["Hazardous"], ringLastNames: <String>["Demoness"])
            ..specibus = new Specibus("Lipstick Chainsaw", ItemTraitFactory.CHAINSAW, <ItemTrait>[ ItemTraitFactory.EDGED])
            ..distractions = <String>["is threatening everyone around her with a chainsaw.","is completely hysterical.","is making friends with women of ill repute."]
            ..sideLoyalty = 10
            ..description = "A Prospitian Dame who excels at making friends in the most unlikely of situations. Her Hysteria Meter is a formidable attack, though indescriminate in nature."
            ..sylladex.add(new Item("Scale Bodice",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.PRETTY]))
            ..sylladex.add(new Item("Tom<NAME>",<ItemTrait>[ItemTraitFactory.MACHINEGUN, ItemTraitFactory.SHOOTY]))
            ..companionChance = 0.1
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..bureaucraticBullshit = <String>["has to pay this fine for public hysteria.","needs a permit to open up a fine establishment for her new friends.","has to pay a fine for all this public damage."]
            ..serializableSceneStrings.addAll(<String>["Be Hysterical:___ N4IgdghgtgpiBcIBCMAEAJAngZwC4wCcBLAYwgBsQAaEAM3IgDcB7AgFRgA9cEQB5ABaoA5swAmVVAGUAwgFEAcnID6fAOpKASsoUBBALJzURbKgE58xMuQB00gWhLlm2GKYcFUMTG9QQwYqjYAO5EAA6+BP5izFDkmH64qKi4DqhsupoA4nJsOgYqfNp6hlJ21CC4EATCMLh8YHCIuAQArnA0LUTCtQQyzAFEuEQD2AAyRIxEYMK8ANrAADogRFBhrFVguGqsYsvwywoA9LrLVId8bPvLtBSuZ8uQsNcgAJLYuuSTMA8raxv+XCvLYvAAMywAvpIln91gRNttdi9jqdqBcrggbncfmjwNAcQc3thNNFYr9VnCEcDcC8AIwAFkh0OWFIBWx2BD2mJAKN+CkuL1u5HuuKeBOWr10UBkBGYwUaXPOsLZQJB3PBIChqBhrPhgI5XMJAAU5YQ+QLuS12r8xS82NVargpFUgdgsgQYBBLGwBP59NMcUrdVS1YSNRCALoVLo9Qj9QbDUZjaLzKM0GC0WgwEi4bAAMVYEymM3mOv+evZSO5vNF+JewLwEAA0kRyORyeWEQpWlAAEZm9WQtMgDNZnP5wvRbCpzVAA"])
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 500, Stats.MAX_LUCK: 500, Stats.SANITY: 100, Stats.HEALTH: 20, Stats.FREE_WILL: 100, Stats.POWER: 15})
            ..makeCharming(1000)
            ..makeViolent(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Nervous","Naive","Nice"], lastNames: <String>["Broad","Bird","Bartender"], ringFirstNames: <String>["Notorious","Neverending"], ringLastNames: <String>["Bard","Bloodshed"])
            ..specibus = new Specibus("Flamethrower", ItemTraitFactory.PISTOL, <ItemTrait>[ ItemTraitFactory.ONFIRE])
            ..distractions = <String>["is very nervous.","is having a nervous breakdown.","is trying to figure out the difference between a teddy bear and a knife."]
            ..sideLoyalty = 10
            ..sylladex.add(new Item("Teddy Bear",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.ROBOTIC2]))
            ..description = "A Prospitian broad with a famously low Mangrit stat, which is only as low as her Nervousness threshold. Its anybodies guess why the White Queen allows her to go out in public armed with a flamethrower."
            ..sylladex.add(new Item("Paint Stripper",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.ONFIRE]))
            ..companionChance = 0.1

            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..bureaucraticBullshit = <String>["needs a permit for public fainting.","is trying to help out CI with getting an invention permit. "]
            ..serializableSceneStrings.add("Have a Flamethrower:___ N4IgdghgtgpiBcIASEBuMAEEMDEA20MALgBYBOA9gO4xkgA0IAZgahWQCowAeRCIAeRIYA5hQAm9DFRIBPDAEsAzhlK1MSihigBXAMbCmCsphjoysmeoB0GAMoBhAKIA5JwH0BAdTcAldy4AggCyTtIUYADkRBhKRBQADqokmABGOmRgCmAi1nnWDCBEEGQixAJgcIhMEHhKcIxEZAoiZWQOEeIKRAoRSgAyCqjZIvwA2sAAOiAKUAnsxWBEXuzi0-DTLgD0gdP0mwIc69M1dTB705CwxyAAkkqBeEPnDNOz82SLRLdLNwAM0wAvlIpjM5gsIEsVmQ1ghNjsLiAXIcbqd6oiri8NnclL5IeIKFBEe8IUsfkQbgA2IEgt7gz6Q5arG7bXavJEouHMWro9mYm63QJQByUKiVWH7MEfL7k-40jCgkkMqHMrkABWotERyKOXKaOhekv5XI4JTKRDsxW+SgA4iYIERaBwSJDgtlDXTpYzZVyASBAQBdQpNFptDpgLo9Pr9fHjIOMGBMJgwPREJQ4diDYY5caK+lfaGw7GsjGEAVgOIQADSCjweGJ+cZLh0UFSWt9QPjIETydT6cz+KUcf9QA")
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 0, Stats.SANITY: -500, Stats.HEALTH: 1, Stats.FREE_WILL: 100, Stats.POWER: 1})
            ..makeViolent(1000)
            ..makeCunning(1000)
        );

        return sunshineTeam;

    }

    //violent, lucky, charming, cunning
    List<Carapace> getDersites() {

        dersites = new List<Carapace>();
        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Agitated","Authority","Aimless","Authoritarian"], lastNames: <String>["Regulator","Renegade","Radical","Rifleer"], ringFirstNames: <String>["Ascendant"], ringLastNames: <String>["Rioter"])
            ..specibus = new Specibus("Machine Gun", ItemTraitFactory.MACHINEGUN, <ItemTrait>[ ItemTraitFactory.SHOOTY])
            ..sideLoyalty = 20
            ..sylladex.add(new Item("Alarming Pile of Guns and Ammunition",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.SHOOTY]))
            ..description = "He’s just another Dersite who disperse tickets. He hates crimes and will throw the criminals in the slammer. He calls it the slammer when he is extra angry. "
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session)] //order of scenes is order of priority
            ..serializableSceneStrings.add("Declare a Thing Illegal.:___ N4IgdghgtgpiBcIAiMDGAbCAnGACCuAKgBYCWYA5rgJLrowUToB0IANCAGaYBuA9lkIwAHgBcEIAMoBhAKIA5WQH0A8gHVFAJSXyAggFlZuUgGdcABxyjRAT1wmArjlxFdmgOKzCOg8pXa9Q0ljM1I6BiZmFxIYOwcTPAJOLAgwAGt0OLAE63RyKmg+BzBRXD5OXApis1SAE1wRc3Q+E1IeGDNRPnxzJrtRYjxajpgsdvqAK3jRUlQYKPYQUWwKGFEVMDhEUSwHOA4d0gpVrGk+MFrSGfOTABk2-IkAbWAAHRBSKHMBZZK1AVq73g73kAHpdO82CCVIQge9OEwEpD3pBYHCQNQTLo8u1kR8vj9UqJqCV0QAGd4AXzYuDe+O+WF+on+WEBCBB4Lx8hh6IR6CR7BR0Bg6MxmjqfCgeM+DKZJNE6IATFSaXSZYS-gD0WCIYKQNzYeyuIiRXrUabgRjdFBpFg+AB3TZsqH0jXE0lGikgSkAXUWh2OozOFyupButzqzzVBMZRJZbMtOq5PKNfIFLvN6MIKzWmPkfFEKBMOz4Nhgzve6tjJXl5Kpfo4ME4nDQohMADEBPceI9EC9KzGmfHtZyzcLRdllgBpMLoaWDonyBxQABGozr3obICbLdQbc7WAjFxMUYHsrjWqNSbHaKNJOLEAAQs17QBVczz88lJer9ee+vekAA")
            ..bureaucraticBullshit = <String>["needs to stock back up on tickets to give people.","has brought in some roughnecks to be sent to the slammer.","needs an updated list of everything that became illegal in the past day."]
            ..distractions = <String>["flipping the fuck out about how illegal everything is.","being extra angry at crimes.","designing slammers to throw things into. You call it the slammer when you are extra angry at crimes."]
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeViolent(100)
            ..makeLucky(100)
        );

        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Wayward","Wizardly","Warweary","Wandering"], lastNames: <String>["Vagrant","Villain","Vassal","Villager"], ringFirstNames: <String>["Wicked"], ringLastNames: <String>["Villian"])
            ..specibus = new Specibus("Sword", ItemTraitFactory.SWORD, <ItemTrait>[ ItemTraitFactory.EDGED, ItemTraitFactory.METAL])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekScepter(session)] //order of scenes is order of priority
            ..royaltyOpinion = -1000
            ..description = "Not just another carapacian you can meet on the Battlefield. A rogue Dersite pawn, WV wants democracy - or, at the very least, lack of all-destroying monarchy, and is willing to put the work in to get it."
            ..sylladex.add(new Item("Firefly in Amber",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.SENTIENT]))
            ..serializableSceneStrings.add("Deploy Democracy:___ N4IgdghgtgpiBcIAiMAOAbA9gTwAQqkwGMAnCI7EAGhADN0IA3TEgFRgA8AXBEAZQDCAUQByQgPoB5AOpiASuJEBBALJDcAazCYA7gGdcASy4ByA10OxcXTLjkBJPuoCqABVwQA5hENg9XawALGFxCSBIiQOwAOlxcViU5AHEhVkVVCUkFZTU+XECIAwAjGBgwXExGGBIuQJJdMGjqEC4IEk8YLkkwOEQuEgBXOB<KEY>")
            ..distractions = <String>[" WV is distracted eating green objects rather than recruiting for his army. "," WV is distracted planning the civil infrastructure of a city, rather than recruiting for his army."," WV is distracted fantasizing about how great of a mayor he will be. "," WV accidentally tried to recruit carapacians already part of his army. Stupid stupid stupid! "," WV gets distracted freaking out about car safety. "," WV gets distracted freaking out about how evil bad bad bad bad monarchy is. "," WV gets distracted writing a constitution for the new democracy. "]
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeCharming(100)
            ..makeLucky(100)
        );

        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Jazz","Jazzed","Jazzy"], lastNames: <String>["Singer","Songstress","Savant"], ringFirstNames: <String>["Jilted"], ringLastNames: <String>["Seductress"])
            ..specibus = new Specibus("Microphone", ItemTraitFactory.CLUB, <ItemTrait>[ ItemTraitFactory.LOUD, ItemTraitFactory.ZAP])
            ..bureaucraticBullshit = <String>["needs to renew her liquor license.","wants a permit for a public performance.","needs to pay a fine for singing a song with banned words."]
            ..sylladex.add(new Item("Classy Stockings",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.CLASSY]))
            ..description = "A slightly promiscuous Dersite carapacian, JS is performing at the Liquid Negrocity when the Midnight Crew is not there. She’s...an interesting carapace."
            ..distractions = <String>["is singing a sultry tune.","is writing down some new lyrics for her work in progress song.","is flirting with a random carapace."]
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session)] //order of scenes is order of priority
            ..serializableSceneStrings.add("Sing the Truth:___ N4IgdghgtgpiBcIDKBLMBzABAFwBY0wBUAnAVzxABoQAzAGwgDcB7YwmAD2wREP0zop0ubAGdMAExRRKmCGAlyBzMAVEAHZtkHDsmGswDGpUTHErMAKSQA6TEn7YIAazNKJMGOswAjYjAg8WTw1AHcYOjpMZhpMfGJMQ1wUbDRMdEFRbBgwNCwIdAg0LLiYBNFkqFhiAE9Jf1FROz4CGhRiEpoYUMwwLTcYpVEVLDNDCHUCeIEUdVFZXAhSMFSMOQUZulX8vTaO7Fl1FENnPMxSbyyAqDlxCoIfGHRinGZMYiLTUoSWOlJYTChFK4d4QHowKBaFAqGwAHTAAB4-AA+BEAIWIyPhAEFEsRmKFFAZiFB5utFDVmKQ5P5MGkUs1+MM1otxJTqbBRNUUAAvGASBYBRQaNC5NZAvA4CB0AaxZYoRhlUxkmj49BkxUYAJgQwEeSKOjMRWMtQjOIQcQQSSeSYJWDyPKydkAclpolIEg8YDodXdtMGDMwAGk+qEZRJ0A9DY1mKSZq4lPQCWU6WBRCgPJh2Ql8BABeSs1T9J4ooFMJMILq7PCkZja1iwABJMA4fiGfGEp1F8ZgZ16fB0bw+ci9KG61tlwjYgBKAHEAKKEAD6ADlsQBZedLgDy09XG-nSEwpghr18BHGpF0528aRCOA+ad1Chyeh8mUt4nCkTsVBATmISNsG3VQeBoaVTD-bBiCESNiAAYRUKRUhUUQABkFTyHgAG1gFhEBpE0YgnBWAB1VgJHw+B8JXAB6bF8MoGjt0IKj8PAuhTEY-DIFgNiQEbURsUERVuIIqAiJI7Bm2wfiAAZ8IAX1kPDxMk+RsHI4hKIQGj6LElcWP4jiuKoHjoBgfjBOnfVYzEwjWCkmT+IAZgANiUlT8Ic4iNK0nTqJAOiGLMoKjN0-8yEs0LeOiwLBKQCIaHsiTHI05yIoUkBlMwVSfKk-z+OCgzwsCkzoqY8ALKs7EoHgjtVB0yr8vSlZ5KUgBdKCYPQODEIUFJoTTND9RwrrqBgGgukMMQADFWAwxgsMQXDvNS3yyIo-ikDRABVac0UwNDWAq8y+Ii+DFi1JAnFk0KWpWFd-keYh+IARhcrLFPGkBJumuaFv1UQxuyoA")
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeCharming(100)
            ..makeCunning(100)
        );

        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Zipping","Zany","Zephyr"], lastNames: <String>["Coach","Coaster","Coder"], ringFirstNames: <String>["Zero"], ringLastNames: <String>["Casualties"])
            ..specibus = new Specibus("Sword", ItemTraitFactory.SWORD, <ItemTrait>[ ItemTraitFactory.EDGED, ItemTraitFactory.METAL])
            ..sylladex.add(new Item("Postal Code Map",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.PAPER]))
            ..description = "ZC LOVES the mail, not because of letters and packages (how boring), but because of how elegantly designed Derse's Zip Code Map is. You can find anything so quickly, so easily! How did a goverment famous for Red Tap make something so fast?"
            ..scenes = <Scene>[new MailSideQuest(session), new RedMiles(session),new BeDistracted(session)] //order of scenes is order of priority
            ..serializableSceneStrings.add("Win the Races:___ N4IgdghgtgpiBcIDqBLMACALgCxugShAMYwDOIANCAGYA2EAbgPYBOAKjAB6YIjoDKAYQCiAOWEB9APJJx+CaICCAWWHoi2CLVowwAczJZc6dG0X4A4sLYKVkqfKWr+WJugjpqLF<KEY>")
            ..serializableSceneStrings.add("Go Fast:___ N4IgdghgtgpiBcIDiB7ABAMQgZwC4gBoQAzAGwgDcUAnAFRgA99E0BlAYQFEA5TgfQDyAdV4AlPtwCCAWU5oA1mBQB3bGlwALGAE80AYwhg0Ac3TEcuGNQB0aWlt0BXbDHVa0ABxVW0KYm5gAS2o0dmoVI1x0ahgAExhiQLBXTVd4xLBA3ECUIz80bA8YOLQsl1JiW0IQXAhqYxhcAWSEGupHOCJcakDjBup2XNisnLBsABlAiiTjVoBtYAAdEECoL2pasFwhGljl+GXpFAAjQNIs7WWCZe4BWn3l7o6r5chYB5BpbVZa3ABJbBIGIQSx0DSGABqEFIz0Iy1W602-y2HwAjABmAAM2MxywAvgQ0EsVmsaEidtQ9ggbgB6SQvEC3e7UkjQlwMt4wD5-SRQMIROIMhFkwzI3AfXEgAlE+GkjaiilUg6MukMpkfcykdlw8DQLksgGsGAVIVypF-FEsyV4gC61W6vX6gzAw2yuQmhli8ztRASxBgelw2AwNEm0zAs0QC1liIVuw+R1O51wlx1nI+7HBEZgPxBptjW24jigxysaKx2PxPpAfoDQZD1HGnuw3qlQA")
            ..serializableSceneStrings.add("Be in the Speed Zone:___ N4IgdghgtgpiBcIBCMAEBLMqAuALNAygA4wwAmqAWgPZhwA0IAZgDYQBu1ATgCowAe2BCFQEAwgFEAchID6AeQDqMgEqypAQQCyEjAGcc+VEwh7sMM4cwBzVLUNoibOtgB0qVD3wBPVLg5opgDGMGBk5DjUDqIkETR07l4wvkSmBgBGvnhonhoqAOISPOracvJqmjoEkVEAjgCu6EEA1iy+EGGoQRD1emj1YJjmYNjotBAsqGTQENYwriCM2BBcc9jydMImLH2LINhc6NZzXGK0ZOijtHoAMujsNsIA2sAAOiDoUETcyyOK3GR3vB3hJ+CRDqEQu96O8pPIeED3ts+tD3pBYIiQFpvARltgAJJ6fJcGAQcy8fxgABqE3qMFRHy+Pw6BJGmIAjABmAAMvO57wAvvRUG9Gd8uL9sP8uICELCAPQaBlwhFy5gTFGLNHQelqwkaFj3XUwsXMkb4tlq-kgAUAXT2ByOJzOYUuYzAtw6ZGe9sYMCYTBgQWwegAYtw7g8wNZnqLPuLJdLZcCQAAJUksPAM9G6lNiSlzXFkhnxs3YKT1KDpGBcTEAWi5vMFvpA-sDwbDEa9eh9NqAA")
            ..distractions = <String>["is so excited about postal codes!","is telling anyone in earshot about the sheer perfection of the modern postal code!","is zipping around simulating delivering packages in order to train for the real deal."]
            ..bureaucraticBullshit = <String>["needs to pay off this speeding ticket.","needs to deliver a package that's in impound.","needs a copy of the most up to date postal code map."]
            ..stats.setMap(<Stat, num>{Stats.MOBILITY: 500, Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeLucky(100)
            ..makeCharming(100)
        );

        //DP	Philosophy	Deep Philosopher,Drunk Philanthropist, Dance Practitioner	Doom Prophet	Prospit<commit_msg>zc stop racing yourself bro<commit_after>import "../SBURBSim.dart";
import "dart:async";
import 'dart:html';
import '../includes/path_utils.dart';

//handles spawning and maintaining various npcs.
class NPCHandler
{
    Session session;
    //not parsed, but means i only need to do the async thing once.
    static List<String> bigBadsFromFile = new List<String>();

    List<GameEntity> allEntities = new List<GameEntity>();
    List<GameEntity> bigBads = new List<BigBad>();

    static String JACK = "JACK";
    static String PM = "PM"; //done
    static String JS = "JS"; //done
    static String EA = "EA";
    static String HP = "HP";
    static String YD = "YD";//done
    static String MD = "MD";
    static String CI = "CI";
    static String SI = "SI"; //done
    static String SU = "SU"; //done
    static String ME = "ME";
    static String RB = "RB"; //done
    static String GN = "GN"; //done
    static String AC = "AC";
    static String BE = "BE";
    static String MP = "MP";
    static String MK = "MK";
    static String AR = "AR"; //done
    static String PE = "PE"; //done
    static String DP = "DP"; //done
    static String ZC = "ZC";
    static String KB = "KB";
    static String WV = "WV";
    static String PS = "PS";
    static String PI = "PI";
    static String AD = "AD";
    static String HS = "HS";
    static String NB = "NB";
    static String SS = "SS";
    static String CD = "CD";
    static String HB = "HB"; //done
    static String DD = "DD";







    //some carapaces can be specific rewards
    Carapace jack;
    List<Carapace> prospitians = <Carapace>[];
    List<Carapace> dersites = <Carapace>[];


    NPCHandler(Session this.session) {
    }

    void debugNPCs() {
        for(GameEntity g in allEntities) {
            print("$g is active: ${g.active} and is dead: ${g.dead}  has ${g.sylladex.length} items.");
        }
    }

    Carapace getCarapaceWithHandle(String handle) {
        if(handle == JACK) return jack;

        for(GameEntity e in session.activatedNPCS) {
            if(e is Carapace && e.initials == handle) return e;
        }

        if(session.prospit != null){
            for(GameEntity e in session.prospit.associatedEntities) {
                if(e is Carapace && e.initials == handle) return e;
            }
        }

        if(session.derse != null){
            for(GameEntity e in session.derse.associatedEntities) {
                if(e is Carapace && e.initials == handle) return e;
            }
        }
        //couldn't find them. thems the breaks.
        return null;

    }

   void setupNpcs() {
        print("TEST BULLSHIT: setting up ncps");
        setupBigBads();
    }

    static Future<Null> loadBigBads() async {
        print("loading big bads");
        String data = await Loader.getResource("BigBadLists/bigBads.txt");
        bigBadsFromFile = data.split("\n");
    }

    void setupBigBads() {
        session.logger.info("TEST BULLSHIT: setting up big bads from ${bigBadsFromFile.length} data strings");
        for(String line in bigBadsFromFile) {
            BigBad newBB = BigBad.fromDataString(line, session);
            newBB.setStat(Stats.HEALTH, 130);
            newBB.setStat(Stats.POWER, 130);

            print("made a new BB ${newBB}");
            bigBads.add(newBB);
        }
    }

    //each npc has items in their sylladex, at least one of which is legendary
    //TODO each game entity optionally has text for what to say if they are doing
    //TODO DESTROY, CORRUPT, CONTROL or whatever
    //decides their quest rewards and what items MAIL QUESTS can choose from.

    //violent, lucky, charming, cunning
    List<Carapace> getMidnightCrew() {
        List<Carapace> midnightCrew = new List<Carapace>();

       // print ("TEST NPCS: initializing midnight crew");
        jack = (new Carapace("<NAME>", session, Carapace.DERSE, firstNames: <String>["Spades","Septuple","Seven","Skullduggerous"], lastNames: <String>["Slick", "Shanks","Shankmaster","Snake"], ringFirstNames: <String>["Sovereign", "Seven"], ringLastNames: <String>["Slayer", "Shanks","Stabber"])
            ..specibus = new Specibus("Knife", ItemTraitFactory.KNIFE, <ItemTrait>[ ItemTraitFactory.JACKLY])
            ..distractions = <String>["is throwing a tantrum about how huge a bitch the Black Queen is.","is pretending to ride on a horse.","is so mad at paperwork.","is refusing to wear his uniform.","is stabbing some random carapace who said 'hello'.","is sharpening Occam's razor","is actually being a pretty good bureaucrat.","is hiding his scottie dogs candies."]
            ..sylladex.add(new Item("Occam's Razor",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.SMART]))
            ..sylladex.add(new Item("Horse Hitcher",<ItemTrait>[ItemTraitFactory.STICK, ItemTraitFactory.IRONICSHITTYFUNNY]))
            ..sylladex.add(new Item("Terrier Fancy Magazine",<ItemTrait>[ItemTraitFactory.ROMANTIC, ItemTraitFactory.PAPER]))
            ..description = "The Derse Archagent, <NAME> is infamous for his love of scottie dogs, his hatred of the Black Queen and his omnicidal tendencies. He’s also a leader of the Midnight Crew - jazz band which can often be found in the “Liquid Negrocity” bar.  <br><Br>When he gets the ring his omnicidal tendencies are enabled."
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -500, Stats.MAX_LUCK: 10, Stats.SANITY: -100, Stats.HEALTH: 20, Stats.FREE_WILL: -100, Stats.POWER: 30})
            ..makeViolent(1000)
            ..makeCunning(1000)
            ..serializableSceneStrings.addAll(<String>["Be Omnicidal:___ N4IgdghgtgpiBcIBCMAEB5KYCWBjbAJhADYgA0IAZsRAG4D2ATgCowAeALgiAMoDCAUQByAgProA6iIBKooQEEAsgNQAHPAGsAzqlTN50gOIDmcpWPSyFynqlz0oq4jA4xiAT1QQOqRhDAEDqgc9KhaNACuAOYAFq6MAHSo5CAcEIxRLuhgcIgcjBFwFPnYUZmMfPQB2BzYVVoAMti02GBR3ADawAA6INiOTGlgHBJMBL3wvUIA9PK9ZFPozBO9lCRaMPO9kLArIACSWvLEzZvkvf2qg-4c+8N7AAy9AL5kqD19A4xDI2N7M3NziAhEs9mtiBstuBoGdJgctNJ-IEoFDLtdhncOHsAExPECvd4XL4-UaMcYIKazKEg5YU1IFM4LaG7OmHHhuSio4k3TGPF5vD5o743UnkuEA6mgungyFAnaw3r7eRQPiMegAdxy5KZQp+vLpeIJgu5w1FewAChqYIxJbS4flClD5XtmOlMhweGlblpDIwYN5rcwYv5FK1GUSrsKMfcDS8ALopEpla2Vaq1eoNJGdBMUGCUSgwXAcLQAMSYTRabU6xsjJL+dIlcphezuWjSAGlsMRiFzazchBEoAAja18-E5kB5gtF0vlpFabP4oA","Say Hello:___ N4IgdghgtgpiBcIDKECeACAEjANjg9iADQgBmOEAbvgE4AqMAHgC4IjpIDCAogHLcB9APIB1fgCUBvAIIBZbugDOzCACNF6ZgAsY6dHWniA4tzpS5goZJnykRdAEtmAcg0ArAK7L0W-AHdNHQxFNB9cAgA6YhAVGgBzGGYhMDhEZhoPOBJ0hziEmk58MAATJwcixQAZB0oHMDi2AG1gAB0QBygAB1oVMGYRWmK2+DbeAHppNqJRoTphttIIHEUYKbbIWHmQAElFaRwa1eI2ju6aX<KEY>"])
            ..sylladex.add(new Item("Scottie Dogs",<ItemTrait>[ItemTraitFactory.CANDY]))

            ..active = true //jack needs to be on for every session
            ..royaltyOpinion = -1000
            ..scenes = <Scene>[new RedMiles(session), new BeDistracted(session),new PassOutRegiswords(session),  new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
        );
        midnightCrew.add(jack);

        //he's lucky and cunning
        midnightCrew.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Cordial","Courtyard","Clubs","Curious", "Cheerful", "Cheery","Chipper","Clutzy","Chaotic"], lastNames: <String>["Deuce","Droll","Dabbler", "Demoman","Dwarf","Dunce"], ringFirstNames: <String>["Crowned","Capering","Chaotic","Collateral"], ringLastNames: <String>["Destroyer","Demigod"])
            ..specibus = new Specibus("Bomb", ItemTraitFactory.GRENADE, <ItemTrait>[ ItemTraitFactory.EXPLODEY])
            ..distractions = <String>["is flipping the fuck out about a bull penis cane. What?","is trading everybody's hats in the session.","is eating black licorice gummy bears.","is collecting just. So many bombs. You don't even know.","is stopping arguments between carapaces.","having a tea party with some nice consorts and underlings."]
            ..description = "One of the Dersite Agents, CD is an incompetent buffoon with a taste for big explosions. He’s really lucky, though. Perhaps that’s why he’s still good at being an agent. He sometimes playing jazz music at the Liquid Negrocity."
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session), new GiveJackScepter(session), new GiveJackRing(session)] //order of scenes is order of priority
            ..serializableSceneStrings.addAll(<String>["Be Incompetant:___ N4IgdghgtgpiBcIBCMAEBJMBjA9lADjAC4RhEgA0IAZgDYQBuOATgCowAe5irAFszgCuAc16oIqas1IBrWgE9UUAJZgAJqgBGOYcNqrhqAM4xmymEdQ5qqGAxhkjFVAGUAwgFEAch4D6AeQB1HwAlXy8AQQBZD3EsLGU1BxJaBS1aHAB3S0F8VFRWCJCAcQ9WcOi-fzDImJcAOldTZSEjBUaATSFUNRwwAHIiW3swVEzSIaIcVBkwLMbKEBJmYWJ-MDhEImZBOCpt5V1TNz61ZSIWsCMAGWUGAwQQAG1gAB0QZQIWEjJAljV3vB3l4APQRd4UYH+ViA97UCC0EwQ96QWCwkDoCJQNwCTIbAGUd6ffDfCaYIjogAM7wAvgBdRYHI7ME7qc6XG6kNSPF5Er7MH5EP7MAlAkCg8GE8XQ9HwxEwZHgaAKhDvVgQFbEdBGLw4IgAEQs2xw8hgBMhH35gvJVNpzjelpJAomwtFwLBiq8MtVNARSKlqJVYu1IS5eEVxNJZBtPoAbLSGVQYNRqDAsEQjAAxFi3e5gYQ8xMgZOp9NZnNcow8h2R52-f7oiWKwPozBGEhIDKZACq+AjVomXkEUE0pltIHpE6AA"])
            ..sylladex.add(new Item("Licorice Gummy Bears",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 500, Stats.MAX_LUCK: 500, Stats.SANITY: 100, Stats.HEALTH: 20, Stats.FREE_WILL: 100, Stats.POWER: 15})
            ..makeLucky(1000)
            ..sylladex.add(new Item("Black Inches Magazine",<ItemTrait>[ItemTraitFactory.ROMANTIC, ItemTraitFactory.PAPER]))
                        ..activationChance = 0.1
            ..sylladex.add(new Item("Bull Penis Cane",<ItemTrait>[ItemTraitFactory.STICK, ItemTraitFactory.GROSSOUT]))
            ..sylladex.add(new Item("Regisword",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.LEGENDARY, ItemTraitFactory.EDGED, ItemTraitFactory.POINTY]))
            ..makeCunning(1000)
        );

        midnightCrew.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Diamonds","Draconian","Dignified"], lastNames: <String>["Droog","Dignitary","Diplomat"], ringFirstNames: <String>["Dashing","Dartabout","Derelict"], ringLastNames: <String>["Destroyer","Demigod"])
            ..specibus = new Specibus("Knife", ItemTraitFactory.KNIFE, <ItemTrait>[ ItemTraitFactory.EDGED, ItemTraitFactory.CLASSY])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new GiveJackScepter(session), new GiveJackRing(session)] //order of scenes is order of priority
            ..distractions = <String>["is playing classy records. ","is reading the paper. ","is fantasizing about perfectly tailored suits.", "is hiding his swedish fish.","is reading 'classy literature' about grey ladies.","is keeping everyone calm and productive."]
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 100, Stats.SANITY: 500, Stats.HEALTH: 20, Stats.FREE_WILL: 0, Stats.POWER: 20})
            ..makeCharming(1000)
            ..makeCunning(1000)
            ..activationChance = 0.1
            ..serializableSceneStrings.addAll(<String>["Destroy Bad Fashion:___ N4IgdghgtgpiBcIAiMDOAXATgewJ4AIAhCAE3wDEJUALAS2zBABoQAzAGwgDdtMAVGAA90CEAGUAwgFEAclID6AeQDqcgEryZAQQCyU-LVT4IABxMR27GGQjp86ajHwB3CAT5a1AcSl9NuhUUNbT0xAHIjbABXdFZaO3ZsbABrVAA6fAAJJxJsNHtHF152G3xWbl5jMDISNCw8I3iMgBkk1Px2WmSnBxhcMMt8am4e7GN2AGNHKFoALycwGGd8CcTe9PwtauMO7DtsVnw9x0x8DCjWViZ7JLTmEHQITABzGHRFRdEsKLgWLFpnq9MBIGCR4vQwKhmrQuLQwM9RABtYAAHRAtCgJl4jzA6GUvBIaPgaJkAHotGimCTFHwiWjyuxUDBKWjILA6SAAJKoAAKnFwMEwLPRmOxEFxnNxHIADGiAL7XVEirGYHF4gkcskU5jU2kIekWJnCtnM-Vc1BqcW5KDCjEqtWS9AcgAc8sVaLtYtx+MwhLNfAgE2SuGFMhpHIZRp14GgpuJIEyVE56BgUGU8WofEwEHittFqvF6EdMrd+CVnoL3o1Zp52GcgtD4bN31NVJj7P9T1e6DEjyLqC8mBgtkFfGGYB0cNbHvzDqlZtlIDlAF17v9AYKQdVwQwoVakauWDBLjAJuhUOReNDYfCkeXZ4WfX741rjbGOSgMDhcGJcJZSEIeb2oWMhRFAABGDYLvKh4gMerCnuel6YM0VqoAeS5AA","Collect Finely Tailored Suits:___ N<KEY>"])
            ..description = "The most competent of the Midnight Crew, DD is the most classy gentlemen you will meet in your life. Unless you catch him with his gray ladies journal. Oh, and DD is probably the one you should talk to if you want to get rid of a troublesome...entity discreetly.Unless he’s Crowned. In this case, you are already fucked."
            ..sylladex.add(new Item("Swedish Fish",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("Grey Ladies Newspaper",<ItemTrait>[ItemTraitFactory.ROMANTIC, ItemTraitFactory.PAPER]))
            ..sylladex.add(new Item("Finely Tailored Suit",<ItemTrait>[ItemTraitFactory.CLOTH, ItemTraitFactory.CLASSY]))
            ..sylladex.add(new Item("Regisword",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.LEGENDARY, ItemTraitFactory.EDGED, ItemTraitFactory.POINTY]))

            ..sideLoyalty = 1000
        );

        midnightCrew.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Hearts","Hegemonic","Horse","Heavy","Handsome"], lastNames: <String>["Brute","Boxcar","Bartender","Brawler","Beefcake"], ringFirstNames: <String>["Herokilling","Hateful"], ringLastNames: <String>["Beast","Bastard"])
            ..specibus = new Specibus("Fist", ItemTraitFactory.FIST, <ItemTrait>[ ItemTraitFactory.BLUNT])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session), new GiveJackScepter(session), new GiveJackRing(session)] //order of scenes is order of priority
            ..distractions = <String>["is shipping just. All the things.","is reading RED CHEEKS magazine.","is protecting his wax lips candies. ","is updating his shipping grid.","is trying to get his OTP together already.","is demanding that this chump just KISS THE GIRL THIS INSTANT."]
            ..sylladex.add(new Item("Wax Lips",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..serializableSceneStrings.addAll(<String>["Demand You Kiss The Girl:___ N4IgdghgtgpiBcIAiMoTAEwAQE0D2ArlgNIC<KEY>AW<KEY>IAN<KEY>gBcEI<KEY>FWcgQwYYYNgE8sLGB<KEY>gY<KEY>sLxhWLDY8AQYXHhgAOhp6ey8WPHSc+igsAAoARwIskq6WZzsASixSMAk8LHQscQlrK2wJXuHhgHMsKDwRiCWGYenMBJyxtABrBlzmtcdxlJSnFzAV0ca8liwUxzKWR2w6tBHSAGNXhAWBI4i8JLYbpUuCAJMCthJ1HFpPMCHBuPNSEstiw5OsMFlSOtyAAZUgCZbSADawAAOiBSFAUsI4SNNMIMPT4PSlAB6Az0zg89TULn0njOcgwQX0yCwMUgACS5AMLmKMoZTJZ6AkipGCoADPSAL6cLB0zXMkE69ksTkIHn8jVKEUKiVsKUauXSh1K8gABX4thgLA1jKtrN1+t9RpApvN9PD2rZHIV-vqIedrt9qJ9QvA0B93JA1HhMAkMjhuvIjEcPhDdHQRmGecTWutIz1EkNJoAujDMdiQ3jMITiST0Bhqf3uDAeGV-hJyAAxYRkin3akWpMdiS2+3FnQwfgSIlgci0UgpchewsKuTee4wSs+MPtyNKAhQABGmd9AEYAGZY2NGcQDnBcl1XFgJ0wchpzjIA"])
            ..sylladex.add(new Item("Red Cheeks Magazine",<ItemTrait>[ItemTraitFactory.PAPER, ItemTraitFactory.ROMANTIC]))
            ..description = "A simple carapacian of simple pleasures, HB is one of the strongest melee combatants one can encounter. He’s strong enough to punch through a safe door. That doesn’t mean he doesn’t have a softer side - he’s authored a few romantic novels as HB."
            ..sylladex.add(new Item("Regisword",<ItemTrait>[ItemTraitFactory.BLADE, ItemTraitFactory.LEGENDARY, ItemTraitFactory.EDGED, ItemTraitFactory.POINTY]))
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 0, Stats.SANITY: 0, Stats.HEALTH: 500, Stats.FREE_WILL: 0, Stats.POWER: 500})
            ..makeViolent(1000)
            ..activationChance = 0.1
            ..makeCharming(1000)
        );

        /*
        midnightCrew.add(new Carapace(null, session, firstNames: <String>[], lastNames: <String>[], ringFirstNames: <String>[], ringLastNames: <String>[])
        ..specibus = new Specibus("Knife", ItemTraitFactory.KNIFE, [ ItemTraitFactory.JACKLY])
        ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -500, Stats.MAX_LUCK: 10, Stats.SANITY: -100, Stats.HEALTH: 20, Stats.FREE_WILL: -100, Stats.POWER: 30})
        );
         */
        return midnightCrew;

    }

    //violent, lucky, charming, cunning
    List<Carapace> getSunshineTeam() {

        List<Carapace> sunshineTeam = new List<Carapace>();

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Parchment","Pedant","Problem","Paramount","Patriotic"], lastNames: <String>["Sleuth","Secretary","Steward"], ringFirstNames: <String>["Paragon","Promised"], ringLastNames: <String>["Sherrif","Savior","Seraph"])
            ..specibus = new Specibus("Tommy gun", ItemTraitFactory.MACHINEGUN, <ItemTrait>[ ItemTraitFactory.SHOOTY])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..distractions = <String>["is reading the gamefaqs for this section of his quest.","is brokering a peace treaty between the clowns, elves and pigs. This has NOTHING to do with SBURB.","is engaging SEPULCHRITU...wait no, never mind. False alarm."]
            ..royaltyOpinion = 10
            ..serializableSceneStrings.addAll(<String>["Activate Sepulchritude:___ N4IgdghgtgpiBcICCBjALgSwG4TTABAMowAOArgDYoAWAThmmQCZwA0IAZhRFgPa0AVGAA80CEIQDCAUQBy0gPoB5AOryASgtlIAstPwR02XDADORUpRr1GLA2Cb58p6hjBn8AdwbV8aagT0AObUeLxk5hwYtAS8HPg0EPSmUBAAdPgg7GhJQTBoSu7iHBAUpmwgaMF5tJK8DgwY9aYAMthuQeIA2sAAOiAYUCT8OWBoKvxM-fD9sgD0SP2ss0oC0-0lZTBL-ZCw6yAAkqbqEA68UDsDQyNnaIdjBwCMAMz9AL6s+H3Xw7Sj40mB3miyyKzWCA2pXKVz220hRxOZyYFyugz+AIeaGeAAYcR8vj90bcxhNaFMESCrrJVgdNjCweBoPCZojiBQOGibv87liDviQJ9vv1iTzSUDKQtqbSEfT4csmfsEYckFBJLReJ53BSFaLMY8EQL3gBdLKVaowWr1JiNZotZHdU3sGAcDgwdCmABi-DaWA63SJ3IBZIprPUMG4mGarhIplhzIOkmoZzyhBy2MZerusjIUAARpbni88UbCSKg3cQwcdLw8xgKAwAJ7xpWspMpmBp3BcjHZ3MF2hFksE4W-EmA8kHAAKmsLjLhieTYFT6Z745z+bnrNew8FZbHYonof6Ojcg1z+BaZBQAGsWyz+u3l53V5mK2MNwOh3iPk6QC63Q9b1aHtBxTEdQUgA"])
            ..description = "One of the top agents on Prospit, with numerous solicitations for services. Compensation is surprisingly adequate. "
            ..sideLoyalty = 10
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -100, Stats.MAX_LUCK: 100, Stats.SANITY: -100, Stats.HEALTH: 20, Stats.FREE_WILL: 200, Stats.POWER: 15})
            ..makeCharming(1000)
            ..sylladex.add(new Item("Candy Corn",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("Diversity Mural",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.PRETTY]))
            ..companionChance = 0.1

            ..bureaucraticBullshit = <String>["needs to get their private eye license renewed.","needs to pay off all those mural loans he took out.","has to get this treaty properly ratified."]
            ..makeLucky(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Persistent","Pickle","Persnickety"], lastNames: <String>["Inspector","Innovator","Investegator"], ringFirstNames: <String>["Patient","Peaceful"], ringLastNames: <String>["Idol"])
            ..specibus = new Specibus("Handgun", ItemTraitFactory.PISTOL, <ItemTrait>[ ItemTraitFactory.SHOOTY])
            ..distractions = <String>["is oogling various things. It makes them uncomfortable.","is looking at HUNK RUMP magazine.","is using his high IMAGINATION stat to go on useless adventures.","is fondly regarding creation."]
            ..sideLoyalty = 10
            ..description = "A Prospitian Agent with a disconcerting oggle. There is a small sub-cult on Prospit that worships his high Imagination stat instead of The Genesis Frog, and he finds it to be off-putting."
            ..sylladex.add(new Item("Tootsie Roll",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("Imaginary Fort",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.FAKE, ItemTraitFactory.PLYWOOD]))
            ..companionChance = 0.1
            ..serializableSceneStrings.addAll(<String>["Become GodHead PIckleInspector:___ N4IgdghgtgpiBcIBCMDGB7WACA4ugJgBIwT5YAKAkqgNYA2MlYAzgA5oAu6ATiADQgAZnQgA3HgBUYADw4IQAZQDCAUQByKgPoB5AOoaASprUBBALIqsAIzSYYzLBAcRcBR2DKD0HugE8s3DAA5hDc+M50dFjogliogRAcAJbeAHT8IByhQTAc2mBwiIIQdMxwAhzcSUE53Ere+EnJ3swAMkmiSWBB8gDawAA6IElQrDxZYBy6PPhD8ENqAPQmQ3wL2hJzQ8WlMKtDkLBbIJTMBhAemPvDo+MXHEwcxwCMAMxDAL58WIM3Y9wTKYzY5LFb8dabBDbEpla6HPZQk5nC74K7gv53SaPF4ABhxn2+vxG-0B0zCIOW1zUG2OO1h6Phx1OChgdEE12JmIek2O+JAXx+Q05APuZNmiNBVJpiLpCLW4GgCPmJxMUCU3HQAHcCuL5cLAdjEXyPgBdDKVaq1eoeJopFitFF9M0CGCCQScZgAMR47U63T6RNuIsmYuOCguTV8cMVxyUAAsLjkFFknuj9fc1ABXKA2bgvV5442EoVB0nAxE4KrMDhYVowUSs6NHRHxxMwZOJDmljPZ3P5wsEwUY4NA8mIlTSdhVGBgVByg4xlsJ7rtlNdkk9nMwPOIt4D-nF4dlsfKkx0VBxmBQKMMxfK1srjupvXdyZZrc75V7vGDwMbkPlsqChIAAqgYSC1jw84Ks297Lkma5pq+HDvn2u4Fj+-LOiArruqgHBej6KLME6-JAA"])
            ..bureaucraticBullshit = <String>["has to pay this fine for public oogling.","needs a permit to fondly regard creation.","has a ticket for excess imagination usage this month."]
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -100, Stats.MAX_LUCK: 100, Stats.SANITY: 100, Stats.HEALTH: 1, Stats.FREE_WILL: 500, Stats.POWER: 1})
            ..makeCharming(1000)
            ..makeCunning(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Ace","Audacious","Asshole"], lastNames: <String>["Detective","Dwarf","Dick"], ringFirstNames: <String>["Ascended"], ringLastNames: <String>["Demon","Destroyer"])
            ..specibus = new Specibus("Fist", ItemTraitFactory.FIST, <ItemTrait>[ ItemTraitFactory.BLUNT])
            ..distractions = <String>["is punching various things in the snoot to establish dominance.","is brewing the worlds most perfect hot sauce.","is wearing a wig. You assume he's undercover or something?"]
            ..royaltyOpinion = -10
            ..companionChance = 0.1
            ..description = "A Prospitian Agent with famously shitty imagination. He doesn't even have a female counterpart, as  a result. He is AMAZING at establishing dominance and brewing hot sauce, though. "
            ..sylladex.add(new Item("Gummy Worm",<ItemTrait>[ItemTraitFactory.CANDY]))
            ..sylladex.add(new Item("5 Alarm Hot Sauce",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.ONFIRE, ItemTraitFactory.SAUCEY]))
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 0, Stats.SANITY: -500, Stats.HEALTH: 100, Stats.FREE_WILL: 100, Stats.POWER: 100})
            ..makeViolent(1000)
            ..serializableSceneStrings.addAll(<String>["Become Fiesta Ace Dick:___ N<KEY>"])
            ..bureaucraticBullshit = <String>["has to pay this fine for public fiestaing.","has to post bail for public rowdyness."]
            ..makeLucky(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Hysterical","Haunting","Honored"], lastNames: <String>["Dame","Dancer","Debutante"], ringFirstNames: <String>["Hazardous"], ringLastNames: <String>["Demoness"])
            ..specibus = new Specibus("Lipstick Chainsaw", ItemTraitFactory.CHAINSAW, <ItemTrait>[ ItemTraitFactory.EDGED])
            ..distractions = <String>["is threatening everyone around her with a chainsaw.","is completely hysterical.","is making friends with women of ill repute."]
            ..sideLoyalty = 10
            ..description = "A Prospitian Dame who excels at making friends in the most unlikely of situations. Her Hysteria Meter is a formidable attack, though indescriminate in nature."
            ..sylladex.add(new Item("Scale Bodice",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.PRETTY]))
            ..sylladex.add(new Item("Tommy Gun",<ItemTrait>[ItemTraitFactory.MACHINEGUN, ItemTraitFactory.SHOOTY]))
            ..companionChance = 0.1
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..bureaucraticBullshit = <String>["has to pay this fine for public hysteria.","needs a permit to open up a fine establishment for her new friends.","has to pay a fine for all this public damage."]
            ..serializableSceneStrings.addAll(<String>["Be Hysterical:___ N4IgdghgtgpiBcIBCMAEAJAngZwC4wCcBLAYwgBsQAaEAM3IgDcB7AgFRgA9cEQB5ABaoA5swAmVVAGUAwgFEAcnID6fAOpKASsoUBBALJzURbKgE58xMuQB00gWhLlm2GKYcFUMTG9QQwYqjYAO5EAA6+BP5izFDkmH64qKi4DqhsupoA4nJsOgYqfNp6hlJ21CC4EATCMLh8YHCIuAQArnA0LUTCtQQyzAFEuEQD2AAyRIxEYMK8ANrAADogRFBhrFVguGqsYsvwywoA9LrLVId8bPvLtBSuZ8uQsNcgAJLYuuSTMA8raxv+XCvLYvAAMywAvpIln91gRNttdi9jqdqBcrggbncfmjwNAcQc3thNNFYr9VnCEcDcC8AIwAFkh0OWFIBWx2BD2mJAKN+CkuL1u5HuuKeBOWr10UBkBGYwUaXPOsLZQJB3PBIChqBhrPhgI5XMJAAU5YQ+QLuS12r8xS82NVargpFUgdgsgQYBBLGwBP59NMcUrdVS1YSNRCALoVLo9Qj9QbDUZjaLzKM0GC0WgwEi4bAAMVYEymM3mOv+evZSO5vNF+JewLwEAA0kRyORyeWEQpWlAAEZm9WQtMgDNZnP5wvRbCpzVAA"])
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 500, Stats.MAX_LUCK: 500, Stats.SANITY: 100, Stats.HEALTH: 20, Stats.FREE_WILL: 100, Stats.POWER: 15})
            ..makeCharming(1000)
            ..makeViolent(1000)
        );

        sunshineTeam.add(new Carapace(null, session,Carapace.PROSPIT, firstNames: <String>["Nervous","Naive","Nice"], lastNames: <String>["Broad","Bird","Bartender"], ringFirstNames: <String>["Notorious","Neverending"], ringLastNames: <String>["Bard","Bloodshed"])
            ..specibus = new Specibus("Flamethrower", ItemTraitFactory.PISTOL, <ItemTrait>[ ItemTraitFactory.ONFIRE])
            ..distractions = <String>["is very nervous.","is having a nervous breakdown.","is trying to figure out the difference between a teddy bear and a knife."]
            ..sideLoyalty = 10
            ..sylladex.add(new Item("Teddy Bear",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.ROBOTIC2]))
            ..description = "A Prospitian broad with a famously low Mangrit stat, which is only as low as her Nervousness threshold. Its anybodies guess why the White Queen allows her to go out in public armed with a flamethrower."
            ..sylladex.add(new Item("Paint Stripper",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.ONFIRE]))
            ..companionChance = 0.1

            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekRing(session), new SeekScepter(session)] //order of scenes is order of priority
            ..bureaucraticBullshit = <String>["needs a permit for public fainting.","is trying to help out CI with getting an invention permit. "]
            ..serializableSceneStrings.add("Have a Flamethrower:___ N4IgdghgtgpiBcIASEBuMAEEM<KEY>")
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: 0, Stats.MAX_LUCK: 0, Stats.SANITY: -500, Stats.HEALTH: 1, Stats.FREE_WILL: 100, Stats.POWER: 1})
            ..makeViolent(1000)
            ..makeCunning(1000)
        );

        return sunshineTeam;

    }

    //violent, lucky, charming, cunning
    List<Carapace> getDersites() {

        dersites = new List<Carapace>();
        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Agitated","Authority","Aimless","Authoritarian"], lastNames: <String>["Regulator","Renegade","Radical","Rifleer"], ringFirstNames: <String>["Ascendant"], ringLastNames: <String>["Rioter"])
            ..specibus = new Specibus("Machine Gun", ItemTraitFactory.MACHINEGUN, <ItemTrait>[ ItemTraitFactory.SHOOTY])
            ..sideLoyalty = 20
            ..sylladex.add(new Item("Alarming Pile of Guns and Ammunition",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.SHOOTY]))
            ..description = "He’s just another Dersite who disperse tickets. He hates crimes and will throw the criminals in the slammer. He calls it the slammer when he is extra angry. "
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session)] //order of scenes is order of priority
            ..serializableSceneStrings.add("Declare a Thing Illegal.:___ N4IgdghgtgpiBcIAiMDGAbCAnGACCuAKgBYCWYA5rgJLrowUToB0IANCAGaYBuA9lkIwAHgBcEIAMoBhAKIA5WQH0A8gHVFAJSXyAggFlZuUgGdcABxyjRAT1wmArjlxFdmgOKzCOg8pXa9Q0ljM1I6BiZmFxIYOwcTPAJOLAgwAGt0OLAE63RyKmg+BzBRXD5OXApis1SAE1wRc3Q+E1IeGDNRPnxzJrtRYjxajpgsdvqAK3jRUlQYKPYQUWwKGFEVMDhEUSwHOA4d0gpVrGk+MFrSGfOTABk2-IkAbWAAHRBSKHMBZZK1AVq73g73kAHpdO82CCVIQge9OEwEpD3pBYHCQNQTLo8u1kR8vj9UqJqCV0QAG<KEY>")
            ..bureaucraticBullshit = <String>["needs to stock back up on tickets to give people.","has brought in some roughnecks to be sent to the slammer.","needs an updated list of everything that became illegal in the past day."]
            ..distractions = <String>["flipping the fuck out about how illegal everything is.","being extra angry at crimes.","designing slammers to throw things into. You call it the slammer when you are extra angry at crimes."]
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeViolent(100)
            ..makeLucky(100)
        );

        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Wayward","Wizardly","Warweary","Wandering"], lastNames: <String>["Vagrant","Villain","Vassal","Villager"], ringFirstNames: <String>["Wicked"], ringLastNames: <String>["Villian"])
            ..specibus = new Specibus("Sword", ItemTraitFactory.SWORD, <ItemTrait>[ ItemTraitFactory.EDGED, ItemTraitFactory.METAL])
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session), new SeekScepter(session)] //order of scenes is order of priority
            ..royaltyOpinion = -1000
            ..description = "Not just another carapacian you can meet on the Battlefield. A rogue Dersite pawn, WV wants democracy - or, at the very least, lack of all-destroying monarchy, and is willing to put the work in to get it."
            ..sylladex.add(new Item("Firefly in Amber",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.SENTIENT]))
            ..serializableSceneStrings.add("Deploy Democracy:___ N4IgdghgtgpiBcIAiMAOAbA9gTwAQqkwGMAnCI7EAGhADN0IA3TEgFRgA8AXBEAZQDCAUQByQgPoB5AOpiASuJEBBALJDcAazCYA7gGdcASy4ByA10OxcXTLjkBJPuoCqABVwQA5hENg9XawALGFxCSBIiQOwAOlxcViU5AHEhVkVVCUkFZTU+XECIAwAjGBgwXExGGBIuQJJdMGjqEC4IEk8YLkkwOEQuEgBXOBp+w08OkgFMMAATY0NpvQAZQ0ZfT14AbWAAHRBLVBZWsC5pFhm9+D2RAHolPapryVZLvdoIdD0YB73IWFeQPY9Ep0KtvtQ9gcjhATvYTgCAAx7AC+VFwu32UEONRhp3OAKUIgAmj8QCJngD3p9wY9wNBwVdAXoBG0IKhyDTIVjobD4Qg9kiQKj0Vzscc8SQLvyyXdSeSXtKqV9SX8GXsABKFAT1HRgUlQnG8riIlFojEG8VnSUA273CFkinS-pDFX0gFAvgwdC0fXcw1cOHG6WC4Xmv2W-HS21yx2MpWcun-aX2JRQbUNGBS2kW3GBk1CgC6zVG42qU1m80WSxhMy2RZoMFotBgRC4egAYiwVmswBtENtRTyJVLGdH7ar3X5WgBpQzodC+sW4kQDKAlEj55H1kCN5utjtdmt6OtCoA")
            ..distractions = <String>[" WV is distracted eating green objects rather than recruiting for his army. "," WV is distracted planning the civil infrastructure of a city, rather than recruiting for his army."," WV is distracted fantasizing about how great of a mayor he will be. "," WV accidentally tried to recruit carapacians already part of his army. Stupid stupid stupid! "," WV gets distracted freaking out about car safety. "," WV gets distracted freaking out about how evil bad bad bad bad monarchy is. "," WV gets distracted writing a constitution for the new democracy. "]
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeCharming(100)
            ..makeLucky(100)
        );

        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Jazz","Jazzed","Jazzy"], lastNames: <String>["Singer","Songstress","Savant"], ringFirstNames: <String>["Jilted"], ringLastNames: <String>["Seductress"])
            ..specibus = new Specibus("Microphone", ItemTraitFactory.CLUB, <ItemTrait>[ ItemTraitFactory.LOUD, ItemTraitFactory.ZAP])
            ..bureaucraticBullshit = <String>["needs to renew her liquor license.","wants a permit for a public performance.","needs to pay a fine for singing a song with banned words."]
            ..sylladex.add(new Item("Classy Stockings",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.CLASSY]))
            ..description = "A slightly promiscuous Dersite carapacian, JS is performing at the Liquid Negrocity when the Midnight Crew is not there. She’s...an interesting carapace."
            ..distractions = <String>["is singing a sultry tune.","is writing down some new lyrics for her work in progress song.","is flirting with a random carapace."]
            ..scenes = <Scene>[new RedMiles(session),new BeDistracted(session)] //order of scenes is order of priority
            ..serializableSceneStrings.add("Sing the Truth:___ N4IgdghgtgpiBcID<KEY>wBY0wBUAnAVzxABoQAzAGwgDcB7YwmAD2wREP0zop0ubAGdMAExRRKmCGAlyBzMAVEAHZtkHDsmGswDGpUTHErMAKSQA6TEn7YIAazNKJMGOswAjYjAg8WTw1AHcYOjpMZhpMfGJMQ1wUbDRMdEFRbBgwNCwIdAg0LLiYBNFkqFhiAE9Jf1FROz4CGhRiEpoYUMwwLTcYpVEVLDNDCHUCeIEUdVFZXAhSMFSMOQUZulX8vTaO7Fl1FENnPMxSbyyAqDlxCoIfGHRinGZMYiLTUoSWOlJYTChFK4d4QHowKBaFAqGwAHTAAB4-AA+BEAIWIyPhAEFEsRmKFFAZiFB5utFDVmKQ5P5MGkUs1+MM1otxJTqbBRNUUAAvGASBYBRQaNC5NZAvA4CB0AaxZYoRhlUxkmj49BkxUYAJgQwEeSKOjMRWMtQjOIQcQQSSeSYJWDyPKydkAclpolIEg8YDodXdtMG<KEY>")
            ..stats.setMap(<Stat, num>{Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeCharming(100)
            ..makeCunning(100)
        );

        dersites.add(new Carapace(null, session,Carapace.DERSE, firstNames: <String>["Zipping","Zany","Zephyr"], lastNames: <String>["Coach","Coaster","Coder"], ringFirstNames: <String>["Zero"], ringLastNames: <String>["Casualties"])
            ..specibus = new Specibus("Sword", ItemTraitFactory.SWORD, <ItemTrait>[ ItemTraitFactory.EDGED, ItemTraitFactory.METAL])
            ..sylladex.add(new Item("Postal Code Map",<ItemTrait>[ItemTraitFactory.LEGENDARY, ItemTraitFactory.PAPER]))
            ..description = "ZC LOVES the mail, not because of letters and packages (how boring), but because of how elegantly designed Derse's Zip Code Map is. You can find anything so quickly, so easily! How did a goverment famous for Red Tap make something so fast?"
            ..scenes = <Scene>[new MailSideQuest(session), new RedMiles(session),new BeDistracted(session)] //order of scenes is order of priority
            ..serializableSceneStrings..add("Win the Races:___ N4IgdghgtgpiBcIDqBLMACALgCxugShAMYwDOIANCAGYA2EAbgPYBOAKjAB6YIjoDKAYQCiAOWEB9APJJx+CaICCAWWHoi2CLVowwAczJZc6dG0X4A4sLYKVkqfKWr+WJugjpqLFLoAmtAE90FmIYADpTXCCYCFIUQPQAdzQAQhM2KPQ9FAY8HDxTcysbJ3tHOxdSJlh0AAcmNEwYFlJ0KqMYIKIIDF83ACMYTCaWdDAuTCwUWDDKEEwIFgNMKXHeTBYAVzgqDZQ9AxZBJjBfFEwUE9IAGRy0PV4AbWAAHRBp+pYFsEwkVl83vA3qIAPSKN4UYFSNiAt7ULSkGAQt6QWCwkAASVIiloOSRlDeH1Y30wGJ+6IADG8AL4UdCvd5QT4kv4sAEIN7KJ<KEY>")
            ..serializableSceneStrings.add("Go Fast:___ N4IgdghgtgpiBcID<KEY>FRgA99E0BlAYQFEA5TgfQDyAdV4AlPtwCCAWU5oA1mBQB3bGlwALGAE80AYwhg0Ac3TEcuGNQB0aWlt0BXbDHVa0ABxVW0KYm5gAS2o0dmoVI1x0ahgAExhiQLBXTVd4xLBA3ECUIz80bA8YOLQsl1JiW0IQXAhqYxhcAWSEGupHOCJcakDjBup2XNisnLBsABlAiiTjVoBtYAAdEECoL2pasFwhGljl+GXpFAAjQNIs7WWCZe4BWn3l7o6r5chYB5BpbVZa3ABJbBIGIQSx0DSGABqEFIz0Iy1W602-y2HwAjABmAAM2MxywAvgQ0EsVmsaEidtQ9ggbgB6SQvEC3e7UkjQlwMt4wD5-SRQMIROIMhFkwzI3AfXEgAlE+GkjaiilUg6MukMpkfcykdlw8DQLksgGsGAVIVypF-FEsyV4gC61W6vX6gzAw2yuQmhli8ztRASxBgelw2AwNEm0zAs0QC1liIVuw+R1O51wlx1nI+7HBEZgPxBptjW24jigxysaKx2PxPpAfoDQZD1HGnuw3qlQA")
            ..serializableSceneStrings.add("Be in the Speed Zone:___ N4IgdghgtgpiBcIBCMAEBLMqAuALNAygA4wwAmqAWgPZhwA0IAZgDYQBu1ATgCowAe2BCFQEAwgFEAchID6AeQDqMgEqypAQQCyEjAGcc+VEwh7sMM4cwBzVLUNoibOtgB0qVD3wBPVLg5opgDGMGBk5DjUDqIkETR07l4wvkSmBgBGvnhonhoqAOISP<KEY>GLNHQelqwkaFj3XUwsXMkb4tlq-kgAUAXT2ByOJzOYUuYzAtw6ZGe9sYMCYTBgQWwegAYtw7g8wNZnqLPuLJdLZcCQAAJUksPAM9G6lNiSlzXFkhnxs3YKT1KDpGBcTEAWi5vMFvpA-sDwbDEa9eh9NqAA")
            ..distractions = <String>["is so excited about postal codes!","is telling anyone in earshot about the sheer perfection of the modern postal code!","is zipping around simulating delivering packages in order to train for the real deal."]
            ..bureaucraticBullshit = <String>["needs to pay off this speeding ticket.","needs to deliver a package that's in impound.","needs a copy of the most up to date postal code map."]
            ..stats.setMap(<Stat, num>{Stats.MOBILITY: 500, Stats.MIN_LUCK: -10, Stats.MAX_LUCK: 10, Stats.SANITY: 10, Stats.HEALTH: 10, Stats.FREE_WILL: 0, Stats.POWER: 10})
            ..makeLucky(100)
            ..makeCharming(100)
        );

        //DP	Philosophy	Deep Philosopher,Drunk Philanthropist, Dance Practitioner	Doom Prophet	Prospit
{'fraction_non_alphanumeric': 0.10340424375798082, 'fraction_numerical': 0.03315945336484908, 'mean_word_length': 4.695991952955741, 'pattern_counts': {'":': 0, '<': 381, '<?xml version=': 0, '>': 381, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 4, 'sexual_word_list.json': 2, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2541300', 'n_tokens_mistral': 31280, 'n_tokens_neox': 28652, 'n_words': 4900}