diff --git a/world/npcs/blood_wolf.json b/world/npcs/blood_wolf.json
new file mode 100644
index 0000000000000000000000000000000000000000..6544bf54f5293554d970e50f50a9dd51dce5b727
--- /dev/null
+++ b/world/npcs/blood_wolf.json
@@ -0,0 +1,57 @@
+{
+  "name": "blood wolf",
+  "colorName": "blood \u001b[1m\u001b[35mwolf\u001b[0m",
+  "stats": {
+    "strength": 10,
+    "intelligence": 0,
+    "willpower": 0,
+    "aim": 1,
+    "agile": 4,
+    "armorRating": 6,
+    "meleSkill": 16,
+    "currentHealth": 105,
+    "maxHealth": 105,
+    "weaponRatingMax": 15,
+    "weaponRatingMin": 9,
+    "numberOfWeaponRolls": 1,
+    "experience": 10000,
+    "currentMana": 105,
+    "maxMana": 105,
+    "foraging": 0,
+    "inventorySize": 0,
+    "maxEffects": 0
+  },
+  "dieMessage": "a blood \u001b[1m\u001b[35mwolf\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m",
+  "temperament": "PASSIVE",
+  "roamAreas": [
+    "BLOODRIDGE1_ZONE",
+    "BLOODRIDGE2_ZONE"
+  ],
+  "validTriggers": [
+    "b",
+    "blood wolf",
+    "wolf",
+    "w"
+  ],
+  "spawnRules": [
+    {
+      "area": "BLOODRIDGE1_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 48,
+      "maxPerRoom": 6
+    },
+    {
+      "area": "BLOODRIDGE2_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 48,
+      "maxPerRoom": 6
+    }
+  ],
+  "loot": {
+    "items": [],
+    "lootGoldMax": 18,
+    "lootGoldMin": 16
+  }
+}
\ No newline at end of file
diff --git a/world/npcs/demon_cat.json b/world/npcs/demon_cat.json
new file mode 100644
index 0000000000000000000000000000000000000000..03eabb52da723880666daaddc0ee9237cfd8575c
--- /dev/null
+++ b/world/npcs/demon_cat.json
@@ -0,0 +1,51 @@
+{
+  "name": "demon cat",
+  "colorName": "demon \u001b[1m\u001b[35mcat\u001b[0m",
+  "stats": {
+    "strength": 9,
+    "intelligence": 0,
+    "willpower": 0,
+    "aim": 1,
+    "agile": 3,
+    "armorRating": 5,
+    "meleSkill": 10,
+    "currentHealth": 80,
+    "maxHealth": 80,
+    "weaponRatingMax": 12,
+    "weaponRatingMin": 7,
+    "numberOfWeaponRolls": 1,
+    "experience": 5000,
+    "currentMana": 80,
+    "maxMana": 80,
+    "foraging": 0,
+    "inventorySize": 0,
+    "maxEffects": 0
+  },
+  "dieMessage": "a demon \u001b[1m\u001b[35mcat\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m",
+  "temperament": "PASSIVE",
+  "roamAreas": [
+    "NEWBIE_ZONE"
+  ],
+  "validTriggers": [
+    "d",
+    "demon",
+    "demon cat",
+    "c"
+  ],
+  "spawnRules": [
+    {
+      "area": "NEWBIE_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 48,
+      "maxPerRoom": 6
+    }
+  ],
+  "loot": {
+    "items": [
+      "SMALL_HEALTH_POTION"
+    ],
+    "lootGoldMax": 3,
+    "lootGoldMin": 1
+  }
+}
\ No newline at end of file
diff --git a/world/npcs/red-eyed_bear.json b/world/npcs/red-eyed_bear.json
new file mode 100644
index 0000000000000000000000000000000000000000..068528a7c16c998f2b085f27750b9ff1a415cf4a
--- /dev/null
+++ b/world/npcs/red-eyed_bear.json
@@ -0,0 +1,64 @@
+{
+  "name": "red-eyed bear",
+  "colorName": "red-eyed \u001b[1m\u001b[35mbear\u001b[0m",
+  "stats": {
+    "strength": 14,
+    "intelligence": 0,
+    "willpower": 0,
+    "aim": 3,
+    "agile": 10,
+    "armorRating": 20,
+    "meleSkill": 26,
+    "currentHealth": 170,
+    "maxHealth": 175,
+    "weaponRatingMax": 21,
+    "weaponRatingMin": 18,
+    "numberOfWeaponRolls": 1,
+    "experience": 18000,
+    "currentMana": 170,
+    "maxMana": 175,
+    "foraging": 0,
+    "inventorySize": 0,
+    "maxEffects": 0
+  },
+  "dieMessage": "a red-eyed \u001b[1m\u001b[35mbear\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m",
+  "temperament": "AGGRESSIVE",
+  "roamAreas": [
+    "TOFT1_ZONE",
+    "TOFT2_ZONE"
+  ],
+  "validTriggers": [
+    "r",
+    "red-eyed bear",
+    "red",
+    "red-eyed",
+    "b",
+    "bear"
+  ],
+  "spawnRules": [
+    {
+      "area": "TOFT1_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 12,
+      "maxPerRoom": 1
+    },
+    {
+      "area": "TOFT2_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 12,
+      "maxPerRoom": 1
+    }
+  ],
+  "loot": {
+    "items": [
+      "BERSEKER_HELM",
+      "RED_CLAW_BEANIE",
+      "RED_CLAW_HOODIE",
+      "RED_CLAW_PANTS"
+    ],
+    "lootGoldMax": 24,
+    "lootGoldMin": 18
+  }
+}
\ No newline at end of file
diff --git a/world/npcs/swamp_bear.json b/world/npcs/swamp_bear.json
new file mode 100644
index 0000000000000000000000000000000000000000..d67056971a157016f22ea9c1cae48a72f23a8141
--- /dev/null
+++ b/world/npcs/swamp_bear.json
@@ -0,0 +1,61 @@
+{
+  "name": "swamp bear",
+  "colorName": "swamp \u001b[1m\u001b[35mbear\u001b[0m",
+  "stats": {
+    "strength": 13,
+    "intelligence": 0,
+    "willpower": 0,
+    "aim": 3,
+    "agile": 6,
+    "armorRating": 20,
+    "meleSkill": 16,
+    "currentHealth": 175,
+    "maxHealth": 150,
+    "weaponRatingMax": 20,
+    "weaponRatingMin": 14,
+    "numberOfWeaponRolls": 1,
+    "experience": 90000,
+    "currentMana": 105,
+    "maxMana": 105,
+    "foraging": 0,
+    "inventorySize": 0,
+    "maxEffects": 0
+  },
+  "dieMessage": "a swamp \u001b[1m\u001b[35mbear\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m",
+  "temperament": "PASSIVE",
+  "roamAreas": [
+    "TOFT1_ZONE",
+    "TOFT2_ZONE"
+  ],
+  "validTriggers": [
+    "s",
+    "swamp bear",
+    "swamp",
+    "b",
+    "bear"
+  ],
+  "spawnRules": [
+    {
+      "area": "TOFT1_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 12,
+      "maxPerRoom": 1
+    },
+    {
+      "area": "TOFT2_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 12,
+      "maxPerRoom": 1
+    }
+  ],
+  "loot": {
+    "items": [
+      "BERSERKER_BRACERS",
+      "BERSERKER_CHEST"
+    ],
+    "lootGoldMax": 18,
+    "lootGoldMin": 12
+  }
+}
\ No newline at end of file
diff --git a/world/npcs/swamp_berserker.json b/world/npcs/swamp_berserker.json
new file mode 100644
index 0000000000000000000000000000000000000000..d8869852cb614df0027ac80bf0504df338e8c5b3
--- /dev/null
+++ b/world/npcs/swamp_berserker.json
@@ -0,0 +1,51 @@
+{
+  "name": "swamp berserker",
+  "colorName": "swamp \u001b[1m\u001b[35mberserker\u001b[0m",
+  "stats": {
+    "strength": 10,
+    "intelligence": 0,
+    "willpower": 0,
+    "aim": 1,
+    "agile": 4,
+    "armorRating": 6,
+    "meleSkill": 16,
+    "currentHealth": 105,
+    "maxHealth": 105,
+    "weaponRatingMax": 15,
+    "weaponRatingMin": 9,
+    "numberOfWeaponRolls": 1,
+    "experience": 10000,
+    "currentMana": 105,
+    "maxMana": 105,
+    "foraging": 0,
+    "inventorySize": 0,
+    "maxEffects": 0
+  },
+  "dieMessage": "a swamp \u001b[1m\u001b[35mberserker\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m",
+  "temperament": "PASSIVE",
+  "roamAreas": [
+    "NORTH1_ZONE"
+  ],
+  "validTriggers": [
+    "s",
+    "swamp berserker",
+    "berserker",
+    "b"
+  ],
+  "spawnRules": [
+    {
+      "area": "NORTH1_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 24,
+      "maxPerRoom": 6
+    }
+  ],
+  "loot": {
+    "items": [
+      "BERSERKER_BATON"
+    ],
+    "lootGoldMax": 10,
+    "lootGoldMin": 5
+  }
+}
\ No newline at end of file
diff --git a/world/npcs/tree_berserker.json b/world/npcs/tree_berserker.json
new file mode 100644
index 0000000000000000000000000000000000000000..ed5f53e532807f0a98d874ed028c1a0cb780a8e3
--- /dev/null
+++ b/world/npcs/tree_berserker.json
@@ -0,0 +1,54 @@
+{
+  "name": "tree berserker",
+  "colorName": "tree \u001b[1m\u001b[35mberserker\u001b[0m",
+  "stats": {
+    "strength": 15,
+    "intelligence": 0,
+    "willpower": 0,
+    "aim": 1,
+    "agile": 3,
+    "armorRating": 6,
+    "meleSkill": 14,
+    "currentHealth": 120,
+    "maxHealth": 120,
+    "weaponRatingMax": 15,
+    "weaponRatingMin": 7,
+    "numberOfWeaponRolls": 1,
+    "experience": 22500,
+    "currentMana": 120,
+    "maxMana": 120,
+    "foraging": 0,
+    "inventorySize": 0,
+    "maxEffects": 0
+  },
+  "dieMessage": "a tree \u001b[1m\u001b[35mberserker\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m",
+  "temperament": "PASSIVE",
+  "roamAreas": [
+    "NORTH1_ZONE"
+  ],
+  "validTriggers": [
+    "t",
+    "tree",
+    "tree berserker",
+    "berserker",
+    "b"
+  ],
+  "spawnRules": [
+    {
+      "area": "NORTH1_ZONE",
+      "randomChance": 100,
+      "spawnIntervalTicks": 600,
+      "maxInstances": 24,
+      "maxPerRoom": 6
+    }
+  ],
+  "loot": {
+    "items": [
+      "BERSEKER_BOOTS",
+      "BERSEKER_SHORTS",
+      "SMALL_HEALTH_POTION"
+    ],
+    "lootGoldMax": 14,
+    "lootGoldMin": 8
+  }
+}
\ No newline at end of file