Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Restocker : MonoBehaviour
- {
- // Start is called before the first frame update
- void Start()
- {
- print("Press '1' to restock a room. Press '2' to test the treasure roller.");
- }
- void BasicRestocker()
- {
- int restockOutcome = Roll(1, 6);
- if (restockOutcome == 1) { print("Rolled a 1. Room contains a monster."); }
- else if (restockOutcome == 2) { print("Rolled a 2. Room contains a monster and treasure."); }
- else if (restockOutcome >= 3)
- {
- int unguardedTreasureCheck = Roll(1, 6);
- if (unguardedTreasureCheck <= 5) { print("Rolled a 3+. Room is empty."); }
- else if (unguardedTreasureCheck == 6)
- {
- int trapPresenceCheck = Roll(1, 6);
- if (trapPresenceCheck >= 3) { print("Rolled a 3+, then a 6, then a 3+. A trap guards this treasure!"); }
- else { print ("Rolled a 3+, then a 6. Room is empty, but has unguarded treasure."); }
- }
- }
- }
- double TreasureUnitCalculator() //Determine size of treasure unit, then determine base value of the hoard.
- {
- double baseTreasureUnit = Random.Range(800, 999);
- double treasureunit = 0;
- int baseValueMultiplier = Roll(1, 100);
- if (InRangeInclusive(baseValueMultiplier, 1, 1)) { treasureunit = baseTreasureUnit * 0.01; }
- else if (InRangeInclusive(baseValueMultiplier, 2, 3)) { treasureunit = baseTreasureUnit * 0.10; }
- else if (InRangeInclusive(baseValueMultiplier, 4, 8)) { treasureunit = baseTreasureUnit * 0.25; }
- else if (InRangeInclusive(baseValueMultiplier, 9, 14)) { treasureunit = baseTreasureUnit * 0.50; }
- else if (InRangeInclusive(baseValueMultiplier, 15, 24)) { treasureunit = baseTreasureUnit * 0.75; }
- else if (InRangeInclusive(baseValueMultiplier, 25, 76)) { treasureunit = baseTreasureUnit * 1.00; }
- else if (InRangeInclusive(baseValueMultiplier, 77, 86)) { treasureunit = baseTreasureUnit * 1.50; }
- else if (InRangeInclusive(baseValueMultiplier, 78, 92)) { treasureunit = baseTreasureUnit * 2.00; }
- else if (InRangeInclusive(baseValueMultiplier, 93, 97)) { treasureunit = baseTreasureUnit * 3.00; }
- else if (InRangeInclusive(baseValueMultiplier, 98, 99)) { treasureunit = baseTreasureUnit * 5.00; }
- else if (InRangeInclusive(baseValueMultiplier, 100, 100)) { treasureunit = baseTreasureUnit * 10.0; }
- print("Base Treasure Unit is " + baseTreasureUnit + "; value per TU is " + treasureunit + " GP. (x" + treasureunit / baseTreasureUnit + ")");
- return treasureunit;
- }
- void TreasureGenerator()
- {
- //Determine the hoard size (number of total Treasure Units).
- string hoardSizeName = null;
- int hoardSize = Roll(1, 20);
- if (InRangeInclusive(hoardSize, 1, 1)) { hoardSize = 1; hoardSizeName = "Individual Treasure"; }
- else if (InRangeInclusive(hoardSize, 2, 3)) { hoardSize = Roll(1, 3); hoardSizeName = "Small (Unguarded) Hoard"; }
- else if (InRangeInclusive(hoardSize, 4, 7)) { hoardSize = Roll(1, 6) + 1; hoardSizeName = "Small Hoard"; }
- else if (InRangeInclusive(hoardSize, 8, 13)) { hoardSize = Roll(1, 4) + 3; hoardSizeName = "Medium Hoard"; }
- else if (InRangeInclusive(hoardSize, 14, 16)) { hoardSize = Roll(1, 4) + 6; hoardSizeName = "Large Hoard"; }
- else if (InRangeInclusive(hoardSize, 17, 18)) { hoardSize = Roll(1, 4) + Roll(1, 4) + 6; hoardSizeName = "Huge Hoard"; }
- else if (InRangeInclusive(hoardSize, 19, 19)) { hoardSize = Roll(1, 4) + Roll(1, 4) + Roll(1, 4) + 6; hoardSizeName = "Massive Hoard"; }
- else if (InRangeInclusive(hoardSize, 20, 20)) { hoardSize = (Roll(1, 4) + 2) * 4; hoardSizeName = "Gargantuan Hoard"; }
- print("Generating " + hoardSizeName + " of " + hoardSize + " Treasure Units. Total value = " + TreasureUnitCalculator() * hoardSize + " GP.");
- //Assign type of treasure for each Treasure Unit.
- string treasureList = null;
- for (int i = 0; i < hoardSize; i++)
- {
- int treasureType = Roll(1, 20);
- if (InRangeInclusive(treasureType, 1, 1)) { treasureList += "Art - " + ArtDetails() + "\n"; }
- else if (InRangeInclusive(treasureType, 2, 3)) { treasureList += "Jeweled Items\n"; }
- else if (InRangeInclusive(treasureType, 4, 7)) { treasureList += "Goods\n"; }
- else if (InRangeInclusive(treasureType, 8, 13)) { treasureList += "Coins\n"; }
- else if (InRangeInclusive(treasureType, 14, 17)) { treasureList += "Furnishings and Clothing\n"; }
- else if (InRangeInclusive(treasureType, 18, 19)) { treasureList += "Gems\n"; }
- else if (InRangeInclusive(treasureType, 20, 20)) { treasureList += "Special or Magic Items\n"; }
- }
- print(treasureList);
- }
- string ArtDetails()
- {
- int roll;
- string artForm = "";
- string artSubject = "";
- string artArtistRenown = "";
- string artSize = "";
- string artMaterialQuality = "";
- string artWorkQuality = "";
- string artAge = "";
- string artCondition = "";
- int artValue = 0;
- //Roll art's form
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 2)) { artForm = "Paper art (prints, calligraphy, illustrated manuscript)"; }
- else if (InRangeInclusive(roll, 3, 4)) { artForm = "Fabric art (tapestry, embroidery, quilt)"; }
- else if (InRangeInclusive(roll, 5, 6)) { artForm = "Painting (watercolor, oils, acrylics, enamels)"; }
- else if (InRangeInclusive(roll, 7, 8)) { artForm = "Crafts (dollmaking, bookbinding"; }
- else if (InRangeInclusive(roll, 9, 10)) { artForm = "Carving (woodwork, scrimshaw, bone, ivory, scales)"; }
- else if (InRangeInclusive(roll, 11, 12)) { artForm = "Ceramics (pottery, urns, statuary, china)"; }
- else if (InRangeInclusive(roll, 13, 14)) { artForm = "Glasswork (decanters, chandeliers, goblets, pipes, bowls, windows)"; }
- else if (InRangeInclusive(roll, 15, 17)) { artForm = "Stonework (statues, birdbaths, plaques)"; }
- else if (InRangeInclusive(roll, 18, 19)) { artForm = "Metalwork (sculpture, furnishings, decorative)"; }
- else if (InRangeInclusive(roll, 20, 20)) { artForm = "Magical"; }
- //Roll art's subject
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 1)) { artSubject = "Abstract (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 2, 2)) { artSubject = "Monster (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 3, 3)) { artSubject = "Humanoid"; }
- else if (InRangeInclusive(roll, 4, 5)) { artSubject = "Natural"; }
- else if (InRangeInclusive(roll, 6, 6)) { artSubject = "Supernatural"; }
- else if (InRangeInclusive(roll, 7, 9)) { artSubject = "Local"; }
- else if (InRangeInclusive(roll, 10, 12)) { artSubject = "Historical"; }
- else if (InRangeInclusive(roll, 13, 17)) { artSubject = "Religious"; }
- else if (InRangeInclusive(roll, 18, 19)) { artSubject = "Wealthy/Noble (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 20, 20)) { artSubject = "Royalty (+2)"; artValue += 2; }
- //Start rolling optional sub-details
- //Roll artist renown
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 3)) { artArtistRenown = "Unknown (-3)"; artValue -= 3; }
- else if (InRangeInclusive(roll, 4, 6)) { artArtistRenown = "Obscure (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 7, 10)) { artArtistRenown = "Locally known (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 11, 14)) { artArtistRenown = "Regionally known"; }
- else if (InRangeInclusive(roll, 15, 18)) { artArtistRenown = "Nationally known (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 19, 19)) { artArtistRenown = "Continentally known (+2)"; artValue += 2; }
- else if (InRangeInclusive(roll, 20, 20))
- {
- int subRoll = Roll(1, 20);
- if (InRangeInclusive(subRoll, 1, 16)) { artArtistRenown = "World renowned (+3)"; artValue += 3; }
- else if (InRangeInclusive(subRoll, 17, 20)) { artArtistRenown = "Ubiquitous (+4)"; artValue += 4; }
- }
- //Roll art object's size
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 1)) { artSize = "Tiny (+3)"; artValue -= 3; }
- else if (InRangeInclusive(roll, 2, 2)) { artSize = "Very Small (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 3, 5)) { artSize = "Small (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 6, 13)) { artSize = "Average"; }
- else if (InRangeInclusive(roll, 14, 17)) { artSize = "Large (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 18, 18)) { artSize = "Very Large (+2)"; artValue += 2; }
- else if (InRangeInclusive(roll, 19, 19)) { artSize = "Huge (+3)"; artValue += 3; }
- else if (InRangeInclusive(roll, 20, 20))
- {
- int subRoll = Roll(1, 20);
- if (InRangeInclusive(subRoll, 1, 14)) { artSize = "Massive (+4)"; artValue += 4; }
- else if (InRangeInclusive(subRoll, 15, 20)) { artSize = "Gargantuan (+5)"; artValue += 5; }
- }
- //Roll material quality
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 1)) { artMaterialQuality = "Awful (-3)"; artValue -= 3; }
- else if (InRangeInclusive(roll, 2, 2)) { artMaterialQuality = "Poor (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 3, 5)) { artMaterialQuality = "Below Average (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 6, 13)) { artMaterialQuality = "Average"; }
- else if (InRangeInclusive(roll, 14, 17)) { artMaterialQuality = "Above Average (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 18, 18)) { artMaterialQuality = "Good (+2)"; artValue += 2; }
- else if (InRangeInclusive(roll, 19, 19)) { artMaterialQuality = "Excellent (+3)"; artValue += 3; }
- else if (InRangeInclusive(roll, 20, 20))
- {
- int subRoll = Roll(1, 20);
- if (InRangeInclusive(subRoll, 1, 14)) { artMaterialQuality = "Finest (+4)"; artValue += 4; }
- else if (InRangeInclusive(subRoll, 15, 20)) { artMaterialQuality = "Unique (+5)"; artValue += 5; }
- }
- //Roll quality of the work itself
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 1)) { artWorkQuality = "Awful (-3)"; artValue -= 3; }
- else if (InRangeInclusive(roll, 2, 2)) { artWorkQuality = "Poor (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 3, 5)) { artWorkQuality = "Below Average (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 6, 13)) { artWorkQuality = "Average"; }
- else if (InRangeInclusive(roll, 14, 17)) { artWorkQuality = "Above Average (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 18, 18)) { artWorkQuality = "Good (+2)"; artValue += 2; }
- else if (InRangeInclusive(roll, 19, 19)) { artWorkQuality = "Excellent (+3)"; artValue += 3; }
- else if (InRangeInclusive(roll, 20, 20))
- {
- int subRoll = Roll(1, 20);
- if (InRangeInclusive(subRoll, 1, 14)) { artWorkQuality = "Brilliant (+4)"; artValue += 4; }
- else if (InRangeInclusive(subRoll, 15, 20)) { artWorkQuality = "Masterpiece (+5)"; artValue += 5; }
- }
- //Roll art object's age
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 1)) { artAge = "Avant-garde (-3)"; artValue -= 3; }
- else if (InRangeInclusive(roll, 2, 2)) { artAge = "Current (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 3, 5)) { artAge = "Recent (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 6, 13)) { artAge = "Contemporary"; }
- else if (InRangeInclusive(roll, 14, 17)) { artAge = "Modern (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 18, 18)) { artAge = "Old (+2)"; artValue += 2; }
- else if (InRangeInclusive(roll, 19, 19)) { artAge = "Antique (+3)"; artValue += 3; }
- else if (InRangeInclusive(roll, 20, 20))
- {
- int subRoll = Roll(1, 20);
- if (InRangeInclusive(subRoll, 1, 14)) { artAge = "Venerable (+4)"; artValue += 4; }
- else if (InRangeInclusive(subRoll, 15, 19)) { artAge = "Archaic (+5)"; artValue += 5; }
- else if (InRangeInclusive(subRoll, 20, 20))
- {
- int subSubRoll = Roll(1, 20);
- if (InRangeInclusive(subSubRoll, 1, 14)) { artAge = "Antediluvian (+6)"; artValue += 6; }
- else if (InRangeInclusive(subSubRoll, 15, 20)) { artAge = "Primordial (+7)"; artValue += 7; }
- }
- }
- //Roll art object's condition
- roll = Roll(1, 20);
- if (InRangeInclusive(roll, 1, 1)) { artCondition = "Badly Damaged (-3)"; artValue -= 3; }
- else if (InRangeInclusive(roll, 2, 2)) { artCondition = "Damaged (-2)"; artValue -= 2; }
- else if (InRangeInclusive(roll, 3, 5)) { artCondition = "Worn (-1)"; artValue -= 1; }
- else if (InRangeInclusive(roll, 6, 13)) { artCondition = "Average"; }
- else if (InRangeInclusive(roll, 14, 17)) { artCondition = "Good (+1)"; artValue += 1; }
- else if (InRangeInclusive(roll, 18, 18)) { artCondition = "Excellent (+2)"; artValue += 2; }
- else if (InRangeInclusive(roll, 19, 19)) { artCondition = "Near Perfect (+3)"; artValue += 3; }
- else if (InRangeInclusive(roll, 20, 20))
- {
- int subRoll = Roll(1, 20);
- if (InRangeInclusive(subRoll, 1, 14)) { artCondition = "Perfect (+4)"; artValue += 4; }
- else if (InRangeInclusive(subRoll, 15, 20)) { artCondition = "Flawless (+5)"; artValue += 5; }
- }
- //Use artValue to determine supposed value of art object.
- //This is almost CERTAINLY not the right way to do this...
- double AV1 = 0.01; //1 CP
- double AV2 = 0.10; //1 SP
- double AV3 = 0.50; //5 SP
- double AV4 = 1; //1 GP, and so on.
- double AV5 = 10;
- double AV6 = 25;
- double AV7 = 50;
- double AV8 = 75;
- double AV9 = 100;
- double AV10 = 150;
- double AV11 = 200;
- double AV12 = 300;
- double AV13 = 400;
- double AV14 = 500;
- double AV15 = 750;
- double AV16 = 1000;
- double AV17 = 1500;
- double AV18 = 2000;
- double AV19 = 3000;
- double AV20 = 4000;
- double AV21 = 5000;
- double AV22 = 7500;
- double AV23 = 10000;
- double AV24 = 20000;
- double AV25 = 40000;
- double AV26 = 80000;
- double AV27 = 150000;
- double AV28 = 250000;
- double AV29 = 400000;
- double AV30 = 800000;
- double AV31 = 1000000; //technically another category beyond 1,000,000 GP is "Priceless"
- //figure out if treasureunit is higher than a given AV## and lower than the next.
- string output = "Form: " + artForm + " " + "Subject: " + artSubject +
- " " + "\n\tArtist Renown: " + artArtistRenown + " " + "\n\tSize: " + artSize + " " + "\n\tMaterial quality: " +
- artMaterialQuality + " " + "\n\tWork quality: " + artWorkQuality + " " + "\n\tAge: " +
- artAge + " " + "\n\tCondition: " + artCondition + " " + "\n\tFINAL VALUE: " + artValue;
- return (output);
- }
- //Rolls a SINGLE die with an eye toward 1dx+y tabletop dice notation.
- //TODO: Update this with a loop to handle dice pools of xdy+z.
- int Roll(int number, int sides, int modifier = 0)
- {
- return Random.Range(1, sides + 1);
- }
- //Checks if a number--usually a Roll()--is within a certain range. If so, you can produce a given associated chart result.
- static bool InRangeInclusive(int value, int lower, int upper)
- {
- return lower <= value && value <= upper;
- }
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.Alpha1)) { BasicRestocker(); } // Press 1 to run the basic restocker
- else if (Input.GetKeyDown(KeyCode.Alpha2)) { TreasureGenerator(); } // Press 2 to run the treasure generator
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement