Files
pgs/Assets/Scripts/GameData/MonsterInfo.cs
2026-02-21 16:58:22 -08:00

944 lines
34 KiB
C#

using System.Collections;
using UnityEngine;
public class Lottery {
private Hashtable lottery; // Hashtable<ItemSubType, int>. Maps item subtype to relative chance of getting the item.
int sum;
public Lottery(Hashtable _lottery) {
this.lottery = _lottery;
sum = 0;
foreach (DictionaryEntry KV in lottery) {
sum += (int)KV.Value;
}
}
public static Item generateItem(ItemSubType subType, int minMoney = 1, int maxMoney = 1) {
if (subType == ItemSubType.MONEY) {
Item item = new Item(null, subType);
int amount = Random.Range(minMoney, maxMoney);
if (amount > 999) {
item.subType = ItemSubType.MONEY3;
} else if (amount > 99) {
item.subType = ItemSubType.MONEY2;
}
item.count = amount;
return item;
} else {
return new Item((ItemData)ItemData.itemData[subType], subType, minMoney);
}
}
public Item Roll(int minMoney, int maxMoney) {
int ticket = Random.Range(0, sum + 1);
int currentBucket = 0;
foreach (DictionaryEntry KV in lottery) {
if (currentBucket < ticket && ticket < currentBucket + (int)KV.Value) {
// You win!
if (KV.Key == null || (ItemSubType)KV.Key == ItemSubType.NONE) {
return null;
}
if ((ItemSubType)KV.Key == ItemSubType.MONEY ||
(ItemSubType)KV.Key == ItemSubType.MONEY2 ||
(ItemSubType)KV.Key == ItemSubType.MONEY3) {
return generateItem((ItemSubType)KV.Key, minMoney, maxMoney);
}
return generateItem((ItemSubType)KV.Key);
}
currentBucket += (int)KV.Value;
}
return null;
}
}
public class MonsterInfo {
public string name;
public int level;
public long maxHP;
public int exp;
public int attack;
public float defense;
public float defenseMultiplier;
public int numLotteryRuns;
public int minMoney;
public int maxMoney;
// TODO: Add monster power per skill (bosses have multiple, hard monsters have multiple)
// probably can just be a List<int>
public MonsterInfo(string name,
int level,
long maxHP,
int exp,
int attack,
float defense,
float mul,
int numRuns,
int min,
int max) {
this.name = name;
this.level = level;
this.maxHP = maxHP;
this.exp = exp;
this.attack = attack;
this.defense = defense;
this.defenseMultiplier = mul;
this.numLotteryRuns = numRuns;
this.minMoney = min;
this.maxMoney = max;
}
public enum MonsterID {
// Dangerous Valley
BROWN_MUSHROOM,
BLUE_MUSHROOM,
RED_MUSHROOM,
SLIME,
RED_FOX,
BROWN_SQUIRREL,
WHITE_FOX,
WHITE_SQUIRREL,
HARPY_F,
HALFLING_ROGUE,
HALFLING_SWORDWIELDER,
HARPY_F_2,
HALFLING_ARCHER,
HALFLING_ROGUE_2,
HARPY_M,
HALFLING_ARCHER_2,
HALFLING_SWORDWIELDER_2,
HARPY_M_2,
HALFLING_ROGUE_3,
HALFLING_ARCHER_3,
HALFLING_SWORDWIELDER_3,
HALFLING_LEADER,
// Dense Forest
POSSESSED_FAIRY,
POSSESSED_FLOWER,
LOST_SOUL,
POSSESSED_FAIRY_2,
POSSESSED_MUSHROOM,
POSSESSED_FAIRY_3,
LOST_SOUL_2,
POSSESSED_FLOWER_2,
VAMPIRE,
POSSESSED_FAIRY_4,
LOST_SOUL_3,
VAMPIRE_2,
LOST_SOUL_4,
LOST_SOUL_5,
HUNTER,
}
public static readonly Hashtable MonsterInfoMap = new Hashtable() {
{ MonsterID.BROWN_MUSHROOM,
new MonsterInfo(
/*name=*/ "Brown Mushroom",
/*level=*/ 1,
/*hp=*/ 1000,
/*exp=*/ 6,
/*attack=*/ 20,
/*def=*/ 20,
/*defMul=*/ 1f,
/*rolls=*/ 1,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.BLUE_MUSHROOM,
new MonsterInfo(
/*name=*/ "Red Mushroom",
/*level=*/ 2,
/*hp=*/ 1500,
/*exp=*/ 8,
/*attack=*/ 30,
/*def=*/ 30,
/*defMul=*/ 1f,
/*rolls=*/ 1,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.RED_MUSHROOM,
new MonsterInfo(
/*name=*/ "Red Mushroom",
/*level=*/ 3,
/*hp=*/ 2000,
/*exp=*/ 8,
/*attack=*/ 30,
/*def=*/ 30,
/*defMul=*/ 1f,
/*rolls=*/ 1,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.SLIME,
new MonsterInfo(
/*name=*/ "Slime",
/*level=*/ 3,
/*hp=*/ 2500,
/*exp=*/ 15,
/*attack=*/ 35,
/*def=*/ 20,
/*defMul=*/ 1f,
/*rolls=*/ 2,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.RED_FOX,
new MonsterInfo(
/*name=*/ "Red Fox",
/*level=*/ 5,
/*hp=*/ 5000,
/*exp=*/ 30,
/*attack=*/ 80,
/*def=*/ 50,
/*defMul=*/ 0.98f,
/*rolls=*/ 2,
/*minMoney=*/ 2,
/*maxMoney=*/ 5) },
{ MonsterID.BROWN_SQUIRREL,
new MonsterInfo(
/*name=*/ "Brown Squirrel",
/*level=*/ 6,
/*hp=*/ 6250,
/*exp=*/ 32,
/*attack=*/ 90,
/*def=*/ 55,
/*defMul=*/ 0.98f,
/*rolls=*/ 2,
/*minMoney=*/ 2,
/*maxMoney=*/ 7) },
{ MonsterID.WHITE_FOX,
new MonsterInfo(
/*name=*/ "White Fox",
/*level=*/ 7,
/*hp=*/ 6800,
/*exp=*/ 34,
/*attack=*/ 100,
/*def=*/ 50,
/*defMul=*/ 0.98f,
/*rolls=*/ 2,
/*minMoney=*/ 2,
/*maxMoney=*/ 5) },
{ MonsterID.WHITE_SQUIRREL,
new MonsterInfo(
/*name=*/ "White Squirrel",
/*level=*/ 8,
/*hp=*/ 9000,
/*exp=*/ 38,
/*attack=*/ 100,
/*def=*/ 60,
/*defMul=*/ 0.98f,
/*rolls=*/ 2,
/*minMoney=*/ 2,
/*maxMoney=*/ 7) },
{ MonsterID.HARPY_F,
new MonsterInfo(
/*name=*/ "Harpy (F)",
/*level=*/ 8,
/*hp=*/ 5000,
/*exp=*/ 40,
/*attack=*/ 90,
/*def=*/ 60,
/*defMul=*/ 0.96f,
/*rolls=*/ 2,
/*minMoney=*/ 2,
/*maxMoney=*/ 7) },
{ MonsterID.HALFLING_ROGUE,
new MonsterInfo(
/*name=*/ "Halfling Rogue",
/*level=*/ 9,
/*hp=*/ 6500,
/*exp=*/ 60,
/*attack=*/ 150,
/*def=*/ 50,
/*defMul=*/ 0.90f,
/*rolls=*/ 3,
/*minMoney=*/ 8,
/*maxMoney=*/ 15) },
{ MonsterID.HALFLING_SWORDWIELDER,
new MonsterInfo(
/*name=*/ "Halfling Swordwielder",
/*level=*/ 10,
/*hp=*/ 7500,
/*exp=*/ 75,
/*attack=*/ 180,
/*def=*/ 100,
/*defMul=*/ 0.90f,
/*rolls=*/ 3,
/*minMoney=*/ 5,
/*maxMoney=*/ 10) },
{ MonsterID.HARPY_F_2,
new MonsterInfo(
/*name=*/ "Angry Harpy (F)",
/*level=*/ 11,
/*hp=*/ 6000,
/*exp=*/ 65,
/*attack=*/ 130,
/*def=*/ 60,
/*defMul=*/ 0.95f,
/*rolls=*/ 3,
/*minMoney=*/ 3,
/*maxMoney=*/ 10) },
{ MonsterID.HALFLING_ARCHER,
new MonsterInfo(
/*name=*/ "Halfling Archer",
/*level=*/ 12,
/*hp=*/ 7000,
/*exp=*/ 75,
/*attack=*/ 150,
/*def=*/ 80,
/*defMul=*/ 0.90f,
/*rolls=*/ 3,
/*minMoney=*/ 5,
/*maxMoney=*/ 10) },
{ MonsterID.HALFLING_ROGUE_2,
new MonsterInfo(
/*name=*/ "Sneaky Halfling Rogue",
/*level=*/ 13,
/*hp=*/ 7000,
/*exp=*/ 85,
/*attack=*/ 200,
/*def=*/ 100,
/*defMul=*/ 0.90f,
/*rolls=*/ 3,
/*minMoney=*/ 10,
/*maxMoney=*/ 20) },
{ MonsterID.HARPY_M,
new MonsterInfo(
/*name=*/ "Harpy (M)",
/*level=*/ 14,
/*hp=*/ 8000,
/*exp=*/ 95,
/*attack=*/ 250,
/*def=*/ 120,
/*defMul=*/ 0.95f,
/*rolls=*/ 3,
/*minMoney=*/ 5,
/*maxMoney=*/ 15) },
{ MonsterID.HALFLING_ARCHER_2,
new MonsterInfo(
/*name=*/ "Decorated Halfling Archer",
/*level=*/ 15,
/*hp=*/ 10000,
/*exp=*/ 100,
/*attack=*/ 250,
/*def=*/ 150,
/*defMul=*/ 0.90f,
/*rolls=*/ 3,
/*minMoney=*/ 5,
/*maxMoney=*/ 15) },
{ MonsterID.HALFLING_SWORDWIELDER_2,
new MonsterInfo(
/*name=*/ "Burly Halfling Swordwielder",
/*level=*/ 16,
/*hp=*/ 13000,
/*exp=*/ 150,
/*attack=*/ 350,
/*def=*/ 200,
/*defMul=*/ 0.90f,
/*rolls=*/ 3,
/*minMoney=*/ 10,
/*maxMoney=*/ 25) },
{ MonsterID.HARPY_M_2,
new MonsterInfo(
/*name=*/ "Angry Harpy (M)",
/*level=*/ 16,
/*hp=*/ 9000,
/*exp=*/ 115,
/*attack=*/ 300,
/*def=*/ 140,
/*defMul=*/ 0.92f,
/*rolls=*/ 3,
/*minMoney=*/ 10,
/*maxMoney=*/ 25) },
{ MonsterID.HALFLING_ROGUE_3,
new MonsterInfo(
/*name=*/ "Shadowy Halfling Rogue",
/*level=*/ 17,
/*hp=*/ 10000,
/*exp=*/ 165,
/*attack=*/ 300,
/*def=*/ 150,
/*defMul=*/ 0.90f,
/*rolls=*/ 4,
/*minMoney=*/ 20,
/*maxMoney=*/ 40) },
{ MonsterID.HALFLING_ARCHER_3,
new MonsterInfo(
/*name=*/ "Expert Halfling Archer",
/*level=*/ 18,
/*hp=*/ 10500,
/*exp=*/ 200,
/*attack=*/ 400,
/*def=*/ 150,
/*defMul=*/ 0.90f,
/*rolls=*/ 44,
/*minMoney=*/ 10,
/*maxMoney=*/ 25) },
{ MonsterID.HALFLING_SWORDWIELDER_3,
new MonsterInfo(
/*name=*/ "Master Halfling Swordwielder",
/*level=*/ 19,
/*hp=*/ 15000,
/*exp=*/ 250,
/*attack=*/ 500,
/*def=*/ 300,
/*defMul=*/ 0.90f,
/*rolls=*/ 4,
/*minMoney=*/ 15,
/*maxMoney=*/ 40) },
{ MonsterID.HALFLING_LEADER,
new MonsterInfo(
/*name=*/ "Halfling Bandit Leader",
/*level=*/ 20,
/*hp=*/ 500000,
/*exp=*/ 2000,
/*attack=*/ 1000,
/*def=*/ 500,
/*defMul=*/ 0.85f,
/*rolls=*/ 10,
/*minMoney=*/ 50,
/*maxMoney=*/ 100) },
// Dense Forest
{ MonsterID.POSSESSED_FAIRY,
new MonsterInfo(
/*name=*/ "Possessed Fairy",
/*level=*/ 17,
/*hp=*/ 30000,
/*exp=*/ 300,
/*attack=*/ 1000,
/*def=*/ 300,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 20,
/*maxMoney=*/ 40) },
{ MonsterID.POSSESSED_FLOWER,
new MonsterInfo(
/*name=*/ "Possessed Flower",
/*level=*/ 18,
/*hp=*/ 30000,
/*exp=*/ 150,
/*attack=*/ 500,
/*def=*/ 300,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 10,
/*maxMoney=*/ 20) },
{ MonsterID.LOST_SOUL,
new MonsterInfo(
/*name=*/ "Lost Soul",
/*level=*/ 19,
/*hp=*/ 40000,
/*exp=*/ 230,
/*attack=*/ 900,
/*def=*/ 500,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.POSSESSED_FAIRY_2,
new MonsterInfo(
/*name=*/ "Skittish Possessed Fairy",
/*level=*/ 20,
/*hp=*/ 80000,
/*exp=*/ 400,
/*attack=*/ 1500,
/*def=*/ 500,
/*defMul=*/ 0.85f,
/*rolls=*/ 3,
/*minMoney=*/ 20,
/*maxMoney=*/ 50) },
{ MonsterID.POSSESSED_MUSHROOM,
new MonsterInfo(
/*name=*/ "Possessed Mushroom",
/*level=*/ 21,
/*hp=*/ 40000,
/*exp=*/ 200,
/*attack=*/ 700,
/*def=*/ 400,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 10,
/*maxMoney=*/ 25) },
{ MonsterID.POSSESSED_FAIRY_3,
new MonsterInfo(
/*name=*/ "Territorial Possessed Fairy",
/*level=*/ 22,
/*hp=*/ 100000,
/*exp=*/ 550,
/*attack=*/ 2000,
/*def=*/ 600,
/*defMul=*/ 0.85f,
/*rolls=*/ 3,
/*minMoney=*/ 30,
/*maxMoney=*/ 60) },
{ MonsterID.LOST_SOUL_2,
new MonsterInfo(
/*name=*/ "Berating Lost Soul",
/*level=*/ 23,
/*hp=*/ 60000,
/*exp=*/ 300,
/*attack=*/ 1200,
/*def=*/ 500,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.POSSESSED_FLOWER_2,
new MonsterInfo(
/*name=*/ "Poisonous Possessed Flower",
/*level=*/ 24,
/*hp=*/ 70000,
/*exp=*/ 350,
/*attack=*/ 1400,
/*def=*/ 550,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 10,
/*maxMoney=*/ 20) },
{ MonsterID.VAMPIRE,
new MonsterInfo(
/*name=*/ "Possessed Vampire",
/*level=*/ 25,
/*hp=*/ 100000,
/*exp=*/ 500,
/*attack=*/ 1800,
/*def=*/ 800,
/*defMul=*/ 0.85f,
/*rolls=*/ 3,
/*minMoney=*/ 40,
/*maxMoney=*/ 65) },
{ MonsterID.POSSESSED_FAIRY_4,
new MonsterInfo(
/*name=*/ "Furious Possessed Fairy",
/*level=*/ 23,
/*hp=*/ 150000,
/*exp=*/ 800,
/*attack=*/ 3000,
/*def=*/ 1000,
/*defMul=*/ 0.80f,
/*rolls=*/ 4,
/*minMoney=*/ 50,
/*maxMoney=*/ 70) },
{ MonsterID.LOST_SOUL_3,
new MonsterInfo(
/*name=*/ "Fiery Lost Soul",
/*level=*/ 24,
/*hp=*/ 80000,
/*exp=*/ 400,
/*attack=*/ 1800,
/*def=*/ 600,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.VAMPIRE_2,
new MonsterInfo(
/*name=*/ "Bloody Possessed Vampire",
/*level=*/ 25,
/*hp=*/ 120000,
/*exp=*/ 600,
/*attack=*/ 2000,
/*def=*/ 800,
/*defMul=*/ 0.85f,
/*rolls=*/ 3,
/*minMoney=*/ 40,
/*maxMoney=*/ 65) },
{ MonsterID.LOST_SOUL_4,
new MonsterInfo(
/*name=*/ "Fiery Lost Soul",
/*level=*/ 26,
/*hp=*/ 90000,
/*exp=*/ 450,
/*attack=*/ 2000,
/*def=*/ 600,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.LOST_SOUL_5,
new MonsterInfo(
/*name=*/ "Fiery Lost Soul",
/*level=*/ 27,
/*hp=*/ 100000,
/*exp=*/ 500,
/*attack=*/ 2200,
/*def=*/ 600,
/*defMul=*/ 0.85f,
/*rolls=*/ 2,
/*minMoney=*/ 0,
/*maxMoney=*/ 0) },
{ MonsterID.HUNTER,
new MonsterInfo(
/*name=*/ "Hunter",
/*level=*/ 28,
/*hp=*/ 5000000,
/*exp=*/ 5000,
/*attack=*/ 4000,
/*def=*/ 1000,
/*defMul=*/ 0.50f,
/*rolls=*/ 10,
/*minMoney=*/ 100,
/*maxMoney=*/ 150) },
// Grand Star Tower
// Rocky Valley
// Ryothe City Outskirts
// Magician's Academy
// Mountain Foot
// Mountainside
// Dead Horizon
};
public static readonly Hashtable LotteryMap = new Hashtable() {
// Valley
{ MonsterID.BROWN_MUSHROOM, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 50 },
{ ItemSubType.ARCHER_TUNIC, 200 },
{ ItemSubType.ARCHER_GLOVES, 200 },
{ ItemSubType.ARCHER_BOW, 200 },
{ ItemSubType.ARCHER_BOOTS, 200 },
{ ItemSubType.BANDIT_OUTFIT, 200 },
{ ItemSubType.BANDIT_GLOVES, 200 },
{ ItemSubType.BANDIT_BOW, 200 },
{ ItemSubType.BANDIT_BOOTS, 200 },
{ ItemSubType.GREEN_MUSHROOM_SAMPLE, 200 },
{ ItemSubType.SPIRIT_WATER, 50 },
{ ItemSubType.ENHANCE, 10 },
}) },
{ MonsterID.BLUE_MUSHROOM, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 100 },
{ ItemSubType.GREEN_MUSHROOM_SAMPLE, 200 },
{ ItemSubType.SPIRIT_WATER, 50 },
{ ItemSubType.ENHANCE, 10 },
}) },
{ MonsterID.RED_MUSHROOM, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.RED_MUSHROOM_SAMPLE, 200 },
{ ItemSubType.SPIRIT_WATER, 50 },
{ ItemSubType.ENHANCE, 10 },
}) },
{ MonsterID.SLIME, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.BRANCH, 200 },
{ ItemSubType.ENHANCE, 10 },
}) },
{ MonsterID.RED_FOX, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.FOX_FUR, 200 },
{ ItemSubType.ENHANCE, 10 },
{ ItemSubType.ARCHER_TUNIC, 3 },
{ ItemSubType.ARCHER_BOOTS, 6 },
}) },
{ MonsterID.BROWN_SQUIRREL, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.SQUIRREL_FUR, 200 },
{ ItemSubType.ENHANCE, 10 },
{ ItemSubType.ARCHER_TUNIC, 3 },
{ ItemSubType.ARCHER_BOOTS, 6 },
}) },
{ MonsterID.WHITE_FOX, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.FOX_FUR, 200 },
{ ItemSubType.ENHANCE, 10 },
{ ItemSubType.ARCHER_TUNIC, 3 },
{ ItemSubType.ARCHER_BOOTS, 8 },
}) },
{ MonsterID.WHITE_SQUIRREL, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.SQUIRREL_FUR, 200 },
{ ItemSubType.ENHANCE, 10 },
{ ItemSubType.ARCHER_TUNIC, 3 },
{ ItemSubType.ARCHER_BOOTS, 8 },
}) },
{ MonsterID.HARPY_F, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.HARPY_FEATHER, 200 },
{ ItemSubType.ENHANCE, 3 },
{ ItemSubType.ARCHER_TUNIC, 6 },
}) },
{ MonsterID.HALFLING_ROGUE, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.FUZZY_SCARF, 200 },
{ ItemSubType.ENHANCE, 20 },
{ ItemSubType.BREAD_LOAF, 10 },
{ ItemSubType.MUSHROOM_SOUP, 10 },
{ ItemSubType.BANDIT_BOOTS, 4 },
{ ItemSubType.BANDIT_OUTFIT, 5 },
}) },
{ MonsterID.HALFLING_SWORDWIELDER, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SOFT_FABRIC, 200 },
{ ItemSubType.ENHANCE, 20 },
{ ItemSubType.BREAD_LOAF, 10 },
{ ItemSubType.MUSHROOM_SOUP, 10 },
{ ItemSubType.BANDIT_BOOTS, 5 },
{ ItemSubType.BANDIT_OUTFIT, 4 },
{ ItemSubType.GODDESS_BOW, 4000 },
{ ItemSubType.GODDESS_DRESS, 4000 },
{ ItemSubType.GODDESS_SANDALS, 4000 },
{ ItemSubType.GODDESS_CUFFS, 4000 },
}) },
{ MonsterID.HARPY_F_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.HARPY_FEATHER, 200 },
{ ItemSubType.ENHANCE, 25 },
{ ItemSubType.ARCHER_TUNIC, 8 },
}) },
{ MonsterID.HALFLING_ARCHER, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 600 },
{ ItemSubType.BREASTPLATE, 200 },
{ ItemSubType.ENHANCE, 20 },
{ ItemSubType.BREAD_LOAF, 10 },
{ ItemSubType.MUSHROOM_SOUP, 10 },
{ ItemSubType.BANDIT_BOOTS, 7 },
{ ItemSubType.BANDIT_OUTFIT, 6 },
{ ItemSubType.BANDIT_BOW, 5 },
}) },
{ MonsterID.HALFLING_ROGUE_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.FUZZY_SCARF, 200 },
{ ItemSubType.ENHANCE, 30 },
{ ItemSubType.BREAD_LOAF, 15 },
{ ItemSubType.MUSHROOM_SOUP, 15 },
{ ItemSubType.BANDIT_BOOTS, 7 },
{ ItemSubType.BANDIT_OUTFIT, 4 },
{ ItemSubType.BANDIT_BOW, 1 },
}) },
{ MonsterID.HARPY_M, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.LARGE_HARPY_FEATHER, 200 },
{ ItemSubType.HARPY_FEATHER, 100 },
{ ItemSubType.ENHANCE, 30 },
{ ItemSubType.BREAD_LOAF, 15 },
{ ItemSubType.MUSHROOM_SOUP, 15 },
{ ItemSubType.ARCHER_TUNIC, 10 },
}) },
{ MonsterID.HALFLING_ARCHER_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 600 },
{ ItemSubType.BREASTPLATE, 200 },
{ ItemSubType.ENHANCE, 30 },
{ ItemSubType.BREAD_LOAF, 15 },
{ ItemSubType.MUSHROOM_SOUP, 15 },
{ ItemSubType.BANDIT_BOOTS, 4 },
{ ItemSubType.BANDIT_OUTFIT, 4 },
{ ItemSubType.BANDIT_BOW, 8 },
}) },
{ MonsterID.HALFLING_SWORDWIELDER_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SOFT_FABRIC, 200 },
{ ItemSubType.ENHANCE, 35 },
{ ItemSubType.BREAD_LOAF, 25 },
{ ItemSubType.MUSHROOM_SOUP, 25 },
{ ItemSubType.BANDIT_BOOTS, 7 },
{ ItemSubType.BANDIT_OUTFIT, 7 },
}) },
{ MonsterID.HARPY_M_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.LARGE_HARPY_FEATHER, 300 },
{ ItemSubType.HARPY_FEATHER, 100 },
{ ItemSubType.ENHANCE, 40 },
{ ItemSubType.BREAD_LOAF, 15 },
{ ItemSubType.MUSHROOM_SOUP, 15 },
{ ItemSubType.ARCHER_TUNIC, 10 },
}) },
{ MonsterID.HALFLING_ROGUE_3, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 700 },
{ ItemSubType.FUZZY_SCARF, 200 },
{ ItemSubType.ENHANCE, 35 },
{ ItemSubType.BREAD_LOAF, 15 },
{ ItemSubType.MUSHROOM_SOUP, 15 },
{ ItemSubType.BANDIT_BOOTS, 10 },
{ ItemSubType.BANDIT_GLOVES, 2 },
}) },
{ MonsterID.HALFLING_ARCHER_3, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 600 },
{ ItemSubType.BREASTPLATE, 200 },
{ ItemSubType.ENHANCE, 35 },
{ ItemSubType.BREAD_LOAF, 20 },
{ ItemSubType.MUSHROOM_SOUP, 20 },
{ ItemSubType.BANDIT_BOW, 10 },
{ ItemSubType.BANDIT_GLOVES, 2 },
}) },
{ MonsterID.HALFLING_SWORDWIELDER_3, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SOFT_FABRIC, 200 },
{ ItemSubType.ENHANCE, 35 },
{ ItemSubType.BREAD_LOAF, 25 },
{ ItemSubType.MUSHROOM_SOUP, 25 },
{ ItemSubType.BANDIT_OUTFIT, 10 },
{ ItemSubType.BANDIT_GLOVES, 2 },
}) },
{ MonsterID.HALFLING_LEADER, new Lottery(new Hashtable() {
{ ItemSubType.MONEY, 1000 },
{ ItemSubType.SOFT_FABRIC, 200 },
{ ItemSubType.BREASTPLATE, 200 },
{ ItemSubType.FUZZY_SCARF, 200 },
{ ItemSubType.ENHANCE, 200 },
{ ItemSubType.BREAD_LOAF, 200 },
{ ItemSubType.MUSHROOM_SOUP, 200 },
{ ItemSubType.BANDIT_OUTFIT, 200 },
{ ItemSubType.BANDIT_BOOTS, 200 },
{ ItemSubType.BANDIT_BOW, 50 },
{ ItemSubType.BANDIT_GLOVES, 5 },
{ ItemSubType.SPECIAL_FEATHER_PIN, 1 },
}) },
// Dense Forest
{ MonsterID.POSSESSED_FAIRY, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.FAIRY_DUST, 200 },
{ ItemSubType.ENHANCE, 40 },
{ ItemSubType.APPLE, 25 },
{ ItemSubType.SMALL_SPIRIT, 10 },
{ ItemSubType.MUSHROOM_SOUP, 5 },
{ ItemSubType.FAIRY_DRESS, 2 },
{ ItemSubType.FAIRY_SANDALS, 2 },
}) },
{ MonsterID.POSSESSED_FLOWER, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SPIRIT_WATER, 80 },
{ ItemSubType.ENHANCE, 40 },
{ ItemSubType.SMALL_SPIRIT, 10 },
}) },
{ MonsterID.LOST_SOUL, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SMALL_SPIRIT, 200 },
{ ItemSubType.ENHANCE, 40 },
}) },
{ MonsterID.POSSESSED_FAIRY_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.FAIRY_DUST, 200 },
{ ItemSubType.ENHANCE, 50 },
{ ItemSubType.APPLE, 30 },
{ ItemSubType.SMALL_SPIRIT, 10 },
{ ItemSubType.MUSHROOM_SOUP, 5 },
{ ItemSubType.FAIRY_DRESS, 3 },
{ ItemSubType.FAIRY_SANDALS, 3 },
}) },
{ MonsterID.POSSESSED_MUSHROOM, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SPIRIT_WATER, 80 },
{ ItemSubType.ENHANCE, 50 },
{ ItemSubType.SMALL_SPIRIT, 10 },
}) },
{ MonsterID.POSSESSED_FAIRY_3, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.FAIRY_DUST, 200 },
{ ItemSubType.ENHANCE, 50 },
{ ItemSubType.APPLE, 35 },
{ ItemSubType.SMALL_SPIRIT, 10 },
{ ItemSubType.MUSHROOM_SOUP, 5 },
{ ItemSubType.FAIRY_DRESS, 5 },
{ ItemSubType.FAIRY_SANDALS, 5 },
{ ItemSubType.FAIRY_BOW, 3 },
{ ItemSubType.SPECIAL_FAIRY, 1 },
}) },
{ MonsterID.LOST_SOUL_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SMALL_SPIRIT, 200 },
{ ItemSubType.ENHANCE, 45 },
}) },
{ MonsterID.POSSESSED_FLOWER_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.ENHANCE, 50 },
{ ItemSubType.SMALL_SPIRIT, 50 },
}) },
{ MonsterID.VAMPIRE, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.BLOOD_VIAL, 200 },
{ ItemSubType.ENHANCE, 50 },
{ ItemSubType.SMALL_SPIRIT, 50 },
{ ItemSubType.APPLE, 35 },
{ ItemSubType.BREAD_LOAF, 35 },
{ ItemSubType.MUSHROOM_SOUP, 5 },
}) },
{ MonsterID.POSSESSED_FAIRY_4, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.FAIRY_DUST, 200 },
{ ItemSubType.ENHANCE, 70 },
{ ItemSubType.APPLE, 50 },
{ ItemSubType.SMALL_SPIRIT, 10 },
{ ItemSubType.FAIRY_DRESS, 6 },
{ ItemSubType.FAIRY_SANDALS, 6 },
{ ItemSubType.FAIRY_BOW, 3 },
{ ItemSubType.SPECIAL_FAIRY, 1 },
}) },
{ MonsterID.LOST_SOUL_3, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SMALL_SPIRIT, 200 },
{ ItemSubType.ENHANCE, 50 },
}) },
{ MonsterID.VAMPIRE_2, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.BLOOD_VIAL, 200 },
{ ItemSubType.ENHANCE, 60 },
{ ItemSubType.SMALL_SPIRIT, 50 },
{ ItemSubType.APPLE, 40 },
{ ItemSubType.BREAD_LOAF, 40 },
{ ItemSubType.MUSHROOM_SOUP, 20 },
{ ItemSubType.SPECIAL_FAIRY, 1 },
}) },
{ MonsterID.LOST_SOUL_4, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SMALL_SPIRIT, 200 },
{ ItemSubType.ENHANCE, 60 },
}) },
{ MonsterID.LOST_SOUL_5, new Lottery(new Hashtable() {
{ ItemSubType.NONE, 500 },
{ ItemSubType.MONEY, 500 },
{ ItemSubType.SMALL_SPIRIT, 200 },
{ ItemSubType.ENHANCE, 60 },
}) },
{ MonsterID.HUNTER, new Lottery(new Hashtable() {
{ ItemSubType.MONEY, 1000 },
{ ItemSubType.SMALL_SPIRIT, 200 },
{ ItemSubType.BLOOD_VIAL, 200 },
{ ItemSubType.FAIRY_DUST, 200 },
{ ItemSubType.ENHANCE, 200 },
{ ItemSubType.FAIRY_DRESS, 200 },
{ ItemSubType.FAIRY_SANDALS, 200 },
{ ItemSubType.FAIRY_BOW, 50 },
{ ItemSubType.SPECIAL_FAIRY_DUST, 2 },
{ ItemSubType.SPECIAL_FAIRY, 1 },
}) },
// Grand Star Tower
// Rocky Valley
// Ryothe City Outskirts
// Magician's Academy
// Mountain Foot
// Mountainside
// Dead Horizon
};
}