public string toString() { // do some new do with the here do string word = "the"; if (TypeCode > 0) { word = "a"; } string patronInfoText = getTypeCodeText(); if (TypeCode == 1) { int odds_here = Math.Max(diceBag.RollDice("1d8-1"), 1); patronInfoText = $"Regular {getTypeCodeText()} (visiting: {odds_here} in 8)"; } string visible = $"{patronInfoText} : {PublicName} is {word} {TaskDesc}. " + $"They are a {getGenderCodeText()} {Race}; {HeightDesc} and {BuildDesc}. " + $"They are {EyeColor}-eyed, with their {HairColor} hair kept {HairStyle}. "; string socText = ""; if (SexualOrientationText != "-no-") { socText = $"They {SexualOrientationText}. "; } string qpText = ""; if (QuirkPhysical != "-no-") { qpText = $"They have a {QuirkPhysical}. "; } string qeText = ""; if (QuirkEmotional != "-no-") { qeText = $"They {QuirkEmotional}. "; } string quirkText = ""; if ((qpText + qeText).Length > 3) { quirkText = $"(Quirks: {qpText} {qeText})"; } string invisible = $"[GM Notes: {socText} {quirkText} {NotableAttributePositive} {NotableAttributeNegative}]"; string paragraph = $"{visible}\n{invisible}"; return(paragraph); }
} // end method DashLineText // ----- private static void CreateOneRandomPBHouse(DiceBagEngine diceBag, WordWrap ww, int AbsoLooply) { // ---- create an example P3BHouse PBHouse pbh = new PBHouse(); var name = pbh.Name(); var quality_list = pbh.EstablishmentQuality(); // quality, rooms_cost, meals_cost var mood = pbh.Mood(); var lights = pbh.Lighting(); var smells = pbh.Smells(); var size = pbh.Size(); var posted_sign = diceBag.SearchStringForRolls(pbh.PostedSign()); var drinks = diceBag.SearchStringForRolls(pbh.SpecialtyDrink(quality_list.Item1)); var foods = diceBag.SearchStringForRolls(pbh.SpecialtyFood(quality_list.Item1)); var history = diceBag.SearchStringForRolls(pbh.EstablishmentHistory()); var naughty = diceBag.SearchStringForRolls(pbh.RedLightServices()); // --- summary blurb output string FormatedAbsoLooply = String.Format("{0,2:d2}", AbsoLooply); Console.WriteLine(DashLineText($"--[{FormatedAbsoLooply}]--")); Console.WriteLine("\n" + DashLineText("Player Blurb")); var desc_line1 = $" The local Pub and Bed House for travellers is the {name}." + $" The {quality_list.Item1}-quality establishment would be considered {size}." + $" Rooms are {quality_list.Item2} per day, and meals are {quality_list.Item3} per day."; var desc_line2 = $"\n As you enter, you smell {smells}. It seems to be a {mood} place, {lights}." + $" A sign {posted_sign}."; var desc_line3 = "\n The menu has the usual standard fare posted. " + $"The House Specialty Drink is {drinks}, while the House Specialty Meal is {foods}."; Console.WriteLine(ww.doWordWrap(desc_line1, MaxTextWidthCols)); Console.WriteLine(ww.doWordWrap(desc_line2, MaxTextWidthCols)); Console.WriteLine(ww.doWordWrap(desc_line3, MaxTextWidthCols)); // --- new feature; staff and patron NPCs NPCMaker NPC_Owner = new NPCMaker("Staff", "Owner"); NPC_Owner.RandomDetails(); int patronHeadCount = diceBag.RollDice("2d4-6"); Console.WriteLine("\n " + DashLineText("Notable Staff & Patrons")); Console.WriteLine(ww.doWordWrap(NPC_Owner.toString(), MaxTextWidthCols)); if (size.Contains("modest") || size.Contains("large") || size.Contains("massive")) { patronHeadCount++; NPCMaker NPC_Cook = new NPCMaker("Staff", "Cook"); NPC_Cook.RandomDetails(); Console.WriteLine("\n " + ww.doWordWrap(NPC_Cook.toString(), MaxTextWidthCols)); } // "modest", "large", "massive" if (size.Contains("large") || size.Contains("massive")) { patronHeadCount++; NPCMaker NPC_HeadServer = new NPCMaker("Staff", "Head Server"); NPC_HeadServer.RandomDetails(); Console.WriteLine("\n " + ww.doWordWrap(NPC_HeadServer.toString(), MaxTextWidthCols)); } if (size.Contains("massive")) { patronHeadCount++; NPCMaker NPC_Bouncer = new NPCMaker("Staff", "Bouncer"); NPC_Bouncer.RandomDetails(); Console.WriteLine("\n " + ww.doWordWrap(NPC_Bouncer.toString(), MaxTextWidthCols)); } for (int patronLoop = 0; patronLoop < patronHeadCount; patronLoop++) { NPCMaker NPC_Patron = new NPCMaker("Patron", "Random"); NPC_Patron.RandomDetails(); NPC_Patron.TaskDesc = NPC_Patron.getRandomTaskDesc(); Console.WriteLine("\n " + ww.doWordWrap(NPC_Patron.toString(), MaxTextWidthCols)); } Console.WriteLine("\n" + DashLineText("DM Notes")); Console.WriteLine(ww.doWordWrap($"Establishment History: {history}", MaxTextWidthCols)); Console.WriteLine(ww.doWordWrap($"Red Light Services: {naughty}", MaxTextWidthCols)); } // end CreateOneRandomPBHouse
} // end public string Smells() // ----- public string Size() { // use a weighted case/switch ladder to determine size info for the PBHouse // init the blank holder variables string size_description = ""; int table_count = 0; string common_bed_word = ""; int common_bed_count = 0; int private_room_count = 0; // non-linear chance for size int dice_roll = diceBag.RollDice("1d12"); switch (dice_roll) { case 1: size_description = "tiny"; table_count = diceBag.RollDice("2d4"); common_bed_word = "hammocks"; common_bed_count = diceBag.RollDice("1d4"); private_room_count = 0; break; case 2: case 3: case 4: size_description = "small"; table_count = diceBag.RollDice("3d4"); common_bed_word = "bunk-beds"; common_bed_count = diceBag.RollDice("2d4"); private_room_count = diceBag.RollDice("1d4"); break; case 5: case 6: case 7: case 8: size_description = "modest"; table_count = diceBag.RollDice("4d6"); common_bed_word = "single beds"; common_bed_count = diceBag.RollDice("3d6"); private_room_count = diceBag.RollDice("2d6"); break; case 9: case 10: case 11: size_description = "large"; table_count = diceBag.RollDice("5d6"); common_bed_word = "tent-beds"; common_bed_count = diceBag.RollDice("4d6"); private_room_count = diceBag.RollDice("3d6"); break; case 12: size_description = "massive"; table_count = diceBag.RollDice("7d8"); common_bed_word = "tent-beds"; common_bed_count = diceBag.RollDice("6d8"); private_room_count = diceBag.RollDice("4d8"); break; } // end-switch string blurb = $"{size_description}, with {table_count} tables. It has {common_bed_count} {common_bed_word} in the common room and {private_room_count} private rooms"; return(blurb); } //public string Size()