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