diff --git a/.github/semantic.yml b/.github/semantic.yml
index e50f0e805370..6459711854f5 100644
--- a/.github/semantic.yml
+++ b/.github/semantic.yml
@@ -63,6 +63,7 @@ scopes:
- mods/innawoods
- mods/limit_fungal_growth
- mods/magiclysm
+ - mods/Magical_Nights
- mods/manualbionicinstall
- mods/modular_turrets
- mods/more_classes_scenarios
diff --git a/LICENSE.txt b/LICENSE.txt
index 9de6bc08f88b..de291c6db5f2 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,5 +1,7 @@
Cataclysm is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
+The mod Magical Nights is licensed under the Creative Commons Attribution-ShareAlike 4.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
+
Documentation site (doc/*, excluding doc/src/content/docs/*) is licensed under the AGPL 3.0-only license, see doc/LICENSE for text of license.
Scripts (scripts/*) are licensed under the AGPL 3.0-only license, see doc/LICENSE for text of license.
diff --git a/build-scripts/mod_test_blacklist b/build-scripts/mod_test_blacklist
index 1616fcb993f3..88800208f61c 100644
--- a/build-scripts/mod_test_blacklist
+++ b/build-scripts/mod_test_blacklist
@@ -1,3 +1,4 @@
+magiclysm
no_hope
crt_expansion
Graphical_Overmap
diff --git a/data/mods/Magical_Nights/MagicalNights_Items.png b/data/mods/Magical_Nights/MagicalNights_Items.png
new file mode 100644
index 000000000000..6b85b4c13a3e
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_Items.png differ
diff --git a/data/mods/Magical_Nights/MagicalNights_Misc.png b/data/mods/Magical_Nights/MagicalNights_Misc.png
new file mode 100644
index 000000000000..f32f1cdd4c5a
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_Misc.png differ
diff --git a/data/mods/Magical_Nights/MagicalNights_Monsters.png b/data/mods/Magical_Nights/MagicalNights_Monsters.png
new file mode 100644
index 000000000000..1a5cbfcd3056
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_Monsters.png differ
diff --git a/data/mods/Magical_Nights/MagicalNights_Tiles.png b/data/mods/Magical_Nights/MagicalNights_Tiles.png
new file mode 100644
index 000000000000..f7f2ea29af41
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_Tiles.png differ
diff --git a/data/mods/Magical_Nights/MagicalNights_huge.png b/data/mods/Magical_Nights/MagicalNights_huge.png
new file mode 100644
index 000000000000..c213446af942
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_huge.png differ
diff --git a/data/mods/Magical_Nights/MagicalNights_large.png b/data/mods/Magical_Nights/MagicalNights_large.png
new file mode 100644
index 000000000000..46965979c4ba
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_large.png differ
diff --git a/data/mods/Magical_Nights/MagicalNights_normal_offset.png b/data/mods/Magical_Nights/MagicalNights_normal_offset.png
new file mode 100644
index 000000000000..835fcb91896e
Binary files /dev/null and b/data/mods/Magical_Nights/MagicalNights_normal_offset.png differ
diff --git a/data/mods/Magical_Nights/Spells/animist.json b/data/mods/Magical_Nights/Spells/animist.json
new file mode 100644
index 000000000000..bf1b35d0f069
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/animist.json
@@ -0,0 +1,314 @@
+[
+ {
+ "id": "bless",
+ "type": "SPELL",
+ "name": { "str": "Bless" },
+ "description": "A spell of blessing that gives you energy and boosts your abilities.",
+ "valid_targets": [ "self", "ally" ],
+ "flags": [ "VERBAL", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "effect": "target_attack",
+ "effect_str": "bless",
+ "affected_body_parts": [ "torso" ],
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "spell_class": "ANIMIST",
+ "difficulty": 1,
+ "max_level": 30,
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 0.25,
+ "min_range": 8,
+ "max_range": 23,
+ "range_increment": 0.75,
+ "//": "duration is in moves",
+ "min_duration": 12000,
+ "max_duration": 36000,
+ "duration_increment": 400,
+ "//2": "Something doesn't add up with that increment, but it's not like it really messes with anything"
+ },
+ {
+ "id": "holy_blade",
+ "type": "SPELL",
+ "name": { "str": "Holy Blade" },
+ "description": "This blade of light will cut through any evil it makes contact with!",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_LEGS", "CONCENTRATE", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "longsword",
+ "base_casting_time": 350,
+ "base_energy_cost": 375,
+ "min_duration": 480000,
+ "max_duration": 660000,
+ "duration_increment": 6000,
+ "difficulty": 5,
+ "max_level": 30,
+ "spell_class": "ANIMIST",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "spirit_armor",
+ "type": "SPELL",
+ "name": { "str": "Spiritual Armor" },
+ "description": "Evil will not make it through your defenses if your faith is strong enough!",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC", "NO_EXPLOSION_VFX" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "armor_lightplate",
+ "spell_class": "ANIMIST",
+ "energy_source": "MANA",
+ "difficulty": 5,
+ "max_level": 30,
+ "base_casting_time": 350,
+ "base_energy_cost": 375,
+ "min_duration": 480000,
+ "max_duration": 660000,
+ "duration_increment": 6000
+ },
+ {
+ "id": "smite",
+ "type": "SPELL",
+ "name": { "str": "Smite" },
+ "description": "Evil has become pervasive throughout the world. Let your power be the light that shines in the darkness!",
+ "valid_targets": [ "hostile" ],
+ "min_damage": 92,
+ "max_damage": 382,
+ "damage_increment": 15,
+ "min_range": 1,
+ "max_range": 1,
+ "effect": "target_attack",
+ "base_casting_time": 85,
+ "base_energy_cost": 250,
+ "damage_type": "none",
+ "spell_class": "ANIMIST",
+ "difficulty": 8,
+ "max_level": 22,
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ],
+ "energy_source": "MANA"
+ },
+ {
+ "id": "recover_mana",
+ "type": "SPELL",
+ "name": { "str": "Life Conversion" },
+ "description": "You channel your life force itself into your spiritual energy. You spend hp to regain mana.",
+ "valid_targets": [ "self" ],
+ "min_damage": 90,
+ "damage_increment": 15,
+ "max_damage": 1000,
+ "max_level": 50,
+ "effect": "recover_energy",
+ "effect_str": "MANA",
+ "spell_class": "ANIMIST",
+ "energy_source": "HP",
+ "base_casting_time": 500,
+ "base_energy_cost": 5,
+ "energy_increment": 1,
+ "final_energy_cost": 60,
+ "flags": [ "SOMATIC", "NO_HANDS", "SILENT", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "difficulty": 3
+ },
+ {
+ "id": "recover_pain",
+ "type": "SPELL",
+ "name": { "str": "Mind over Pain" },
+ "description": "With an intense ritual that resembles crossfit, you manage to put some of your pain at bay.",
+ "valid_targets": [ "self" ],
+ "min_damage": 10,
+ "max_damage": 150,
+ "damage_increment": 2,
+ "max_level": 67,
+ "spell_class": "ANIMIST",
+ "effect": "recover_energy",
+ "effect_str": "PAIN",
+ "energy_source": "STAMINA",
+ "base_casting_time": 50000,
+ "base_energy_cost": 5000,
+ "energy_increment": 500,
+ "flags": [ "SOMATIC", "VERBAL", "PAIN_NORESIST", "NO_EXPLOSION_VFX" ],
+ "final_energy_cost": 15000
+ },
+ {
+ "id": "summon_zombie",
+ "type": "SPELL",
+ "name": { "str": "Summon Zombie" },
+ "description": "An ethereal-looking zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
+ "valid_targets": [ "ground" ],
+ "min_damage": 1,
+ "max_damage": 5,
+ "//": "level 20 will max out your number of summons",
+ "damage_increment": 0.1,
+ "max_level": 45,
+ "difficulty": 2,
+ "spell_class": "ANIMIST",
+ "effect": "summon",
+ "effect_str": "mon_summoned_zombie",
+ "energy_source": "HP",
+ "base_energy_cost": 6,
+ "//2": "one minute",
+ "base_casting_time": 6000,
+ "min_range": 3,
+ "max_range": 3,
+ "min_aoe": 2,
+ "max_aoe": 2,
+ "flags": [ "SOMATIC", "NO_HANDS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "min_duration": 240000,
+ "max_duration": 420000,
+ "duration_increment": 4000
+ },
+ {
+ "id": "summon_skeleton",
+ "type": "SPELL",
+ "name": { "str": "Summon Skeleton" },
+ "description": "A ghostly skeleton rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
+ "valid_targets": [ "ground" ],
+ "min_damage": 1,
+ "max_damage": 5,
+ "//": "level 20 will max out your number of summons",
+ "damage_increment": 0.1,
+ "max_level": 45,
+ "difficulty": 5,
+ "spell_class": "ANIMIST",
+ "effect": "summon",
+ "effect_str": "mon_summoned_skeleton",
+ "energy_source": "HP",
+ "base_energy_cost": 14,
+ "//2": "one minute",
+ "base_casting_time": 6000,
+ "min_range": 3,
+ "max_range": 3,
+ "min_aoe": 2,
+ "max_aoe": 2,
+ "flags": [ "SOMATIC", "NO_HANDS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "min_duration": 240000,
+ "max_duration": 420000,
+ "duration_increment": 4000
+ },
+ {
+ "id": "summon_decayed_pouncer",
+ "type": "SPELL",
+ "name": { "str": "Summon Decayed Pouncer" },
+ "description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
+ "valid_targets": [ "ground" ],
+ "min_damage": 1,
+ "max_damage": 5,
+ "//": "level 20 will max out your number of summons",
+ "damage_increment": 0.1,
+ "max_level": 45,
+ "difficulty": 12,
+ "spell_class": "ANIMIST",
+ "effect": "summon",
+ "effect_str": "mon_summoned_zougar",
+ "energy_source": "HP",
+ "base_energy_cost": 30,
+ "//2": "one minute",
+ "base_casting_time": 6000,
+ "min_range": 3,
+ "max_range": 3,
+ "min_aoe": 2,
+ "max_aoe": 2,
+ "flags": [ "SOMATIC", "NO_HANDS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "min_duration": 240000,
+ "max_duration": 420000,
+ "duration_increment": 4000
+ },
+ {
+ "id": "necrotic_gaze",
+ "type": "SPELL",
+ "name": { "str": "Necrotic Gaze" },
+ "description": "You use the power of your own blood to imbue necrotic energy into your gaze, damaging the target you look at.",
+ "valid_targets": [ "hostile" ],
+ "effect": "target_attack",
+ "spell_class": "ANIMIST",
+ "energy_source": "HP",
+ "flags": [ "NO_LEGS", "NO_HANDS", "CONCENTRATE", "SOMATIC" ],
+ "min_damage": 60,
+ "max_damage": 180,
+ "damage_increment": 6,
+ "min_range": 5,
+ "max_range": 15,
+ "range_increment": 0.5,
+ "max_level": 20,
+ "difficulty": 3,
+ "base_casting_time": 100,
+ "base_energy_cost": 2,
+ "damage_type": "bio"
+ },
+ {
+ "id": "create_rune_animist",
+ "type": "SPELL",
+ "name": { "str": "Animist Rune" },
+ "description": "This ritual creates a small pebble attuned to Animists. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_animist",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "ANIMIST",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "summon_wisps",
+ "type": "SPELL",
+ "name": { "str": "Ignus Fatuus" },
+ "description": "Summons ghostly foxfire worked from living marsh vapor, to lead your enemies astray. With more experience, this spell can conjure multiple ghost lights.",
+ "valid_targets": [ "ground" ],
+ "effect": "summon",
+ "effect_str": "mon_wisp",
+ "flags": [ "LOUD", "SOMATIC", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "energy_source": "MANA",
+ "spell_class": "ANIMIST",
+ "difficulty": 2,
+ "base_casting_time": 250,
+ "base_energy_cost": 300,
+ "max_level": 37,
+ "min_damage": 5,
+ "max_damage": 17,
+ "damage_increment": 0.28,
+ "min_aoe": 3,
+ "max_aoe": 3,
+ "min_range": 6,
+ "max_range": 14,
+ "range_increment": 0.16,
+ "min_duration": 50000,
+ "max_duration": 129550,
+ "duration_increment": 2150
+ },
+ {
+ "id": "summon_decaying_boneclub",
+ "type": "SPELL",
+ "name": { "str": "Decaying Boneclub" },
+ "description": "This spell links your live blood to the dead blood & bones, creating a club hungry for the flesh of the living.",
+ "effect": "spawn_item",
+ "effect_str": "decaying_boneclub",
+ "valid_targets": [ "self" ],
+ "flags": [ "SOMATIC", "CONCENTRATE", "VERBAL", "NO_HANDS" ],
+ "components": "spell_components_decayingboneclub",
+ "max_level": 15,
+ "min_damage": 1,
+ "max_damage": 1,
+ "min_duration": 52500,
+ "max_duration": 142500,
+ "duration_increment": 6000,
+ "spell_class": "ANIMIST",
+ "base_casting_time": 400,
+ "base_energy_cost": 6,
+ "energy_source": "HP",
+ "difficulty": 6
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/biomancer.json b/data/mods/Magical_Nights/Spells/biomancer.json
new file mode 100644
index 000000000000..2c497783c0d4
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/biomancer.json
@@ -0,0 +1,372 @@
+[
+ {
+ "id": "light_healing",
+ "type": "SPELL",
+ "name": { "str": "Cure Light Wounds" },
+ "description": "Heals a little bit of damage on the target.",
+ "valid_targets": [ "self", "ally" ],
+ "min_damage": -8,
+ "max_damage": -30,
+ "damage_increment": -1,
+ "max_level": 22,
+ "min_range": 9,
+ "max_range": 17,
+ "range_increment": 0.75,
+ "effect": "target_attack",
+ "base_casting_time": 300,
+ "base_energy_cost": 800,
+ "flags": [ "SOMATIC", "NO_LEGS" ],
+ "spell_class": "BIOMANCER",
+ "difficulty": 2,
+ "energy_source": "MANA"
+ },
+ {
+ "id": "pain_split",
+ "type": "SPELL",
+ "name": { "str": "Pain Split" },
+ "description": "Evens out damage among your limbs.",
+ "valid_targets": [ "self" ],
+ "effect": "pain_split",
+ "base_casting_time": 100,
+ "base_energy_cost": 800,
+ "energy_source": "MANA",
+ "flags": [ "SOMATIC", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "spell_class": "BIOMANCER",
+ "difficulty": 4,
+ "max_level": 1
+ },
+ {
+ "id": "vicious_tentacle",
+ "type": "SPELL",
+ "name": { "str": "Vicious Tentacle" },
+ "description": "This spell extrudes a long nasty whiplike tentacle of sharp bones and oozing acid from your body, it has a long reach attack and vicious damage.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "tentacle_whip",
+ "base_casting_time": 250,
+ "base_energy_cost": 550,
+ "min_duration": 750000,
+ "max_duration": 1650000,
+ "duration_increment": 30000,
+ "difficulty": 6,
+ "max_level": 30,
+ "flags": [ "SOMATIC", "LOUD", "NO_EXPLOSION_VFX" ],
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "bio_grotesque",
+ "type": "SPELL",
+ "name": { "str": "Grotesque Enhancement" },
+ "description": "A spell that warps your body in alien ways to increase your physical abilities and strength.",
+ "valid_targets": [ "self" ],
+ "effect": "target_attack",
+ "effect_str": "bio_boost",
+ "base_casting_time": 200,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "spell_class": "BIOMANCER",
+ "difficulty": 6,
+ "max_level": 30,
+ "flags": [ "SOMATIC", "LOUD", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "//": "duration is in moves",
+ "min_duration": 150000,
+ "max_duration": 240000,
+ "duration_increment": 3000
+ },
+ {
+ "id": "bio_acidicspray",
+ "type": "SPELL",
+ "name": { "str": "Acidic Spray" },
+ "description": "When cast, the mage opens his mouth and sprays acid in a wide cone to dissolve his foes into goo. Just imagine what he'll do with the goo.",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "effect": "cone_attack",
+ "effect_str": "bio_acidburn",
+ "base_casting_time": 200,
+ "base_energy_cost": 200,
+ "energy_source": "MANA",
+ "spell_class": "BIOMANCER",
+ "difficulty": 2,
+ "max_level": 30,
+ "min_damage": 19,
+ "max_damage": 139,
+ "damage_increment": 4,
+ "damage_type": "acid",
+ "min_range": 5,
+ "max_range": 10,
+ "flags": [ "VERBAL", "NO_HANDS", "NO_LEGS" ],
+ "range_increment": 0.25,
+ "min_aoe": 62,
+ "max_aoe": 127,
+ "aoe_increment": 5
+ },
+ {
+ "id": "bio_fleshpouch",
+ "type": "SPELL",
+ "name": { "str": "Flesh Pouch" },
+ "description": "This spell grows a large pouch out of your skin on your back, allowing you to store your gear in it.",
+ "valid_targets": [ "none" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "fleshpouch",
+ "base_casting_time": 250,
+ "base_energy_cost": 300,
+ "min_duration": 2850000,
+ "max_duration": 7350000,
+ "duration_increment": 150000,
+ "difficulty": 4,
+ "max_level": 30,
+ "flags": [ "NO_HANDS", "NO_LEGS", "SOMATIC", "NO_EXPLOSION_VFX" ],
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "bio_bonespear",
+ "type": "SPELL",
+ "name": { "str": "Conjure Bonespear" },
+ "description": "This spell creates a long shaft of bone with a wicked point and blades along its length.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "bonespear",
+ "base_casting_time": 300,
+ "base_energy_cost": 350,
+ "min_duration": 750000,
+ "max_duration": 1650000,
+ "duration_increment": 30000,
+ "difficulty": 14,
+ "max_level": 30,
+ "flags": [ "LOUD", "SOMATIC", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "create_rune_biomancer",
+ "type": "SPELL",
+ "name": { "str": "Biomancer Rune" },
+ "description": "This ritual creates a small pebble attuned to Biomancers. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_biomancer",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "biomancer_paralytic_dart",
+ "type": "SPELL",
+ "name": { "str": "Paralytic Dart" },
+ "description": "Spits a warped needle of sinew and bone, carrying with it a sting that slows your victim.",
+ "valid_targets": [ "ally", "hostile" ],
+ "effect": "projectile_attack",
+ "effect_str": "biomancer_dart_venom",
+ "flags": [ "VERBAL", "NO_HANDS", "NO_LEGS" ],
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "base_casting_time": 100,
+ "base_energy_cost": 80,
+ "max_level": 22,
+ "min_damage": 13,
+ "max_damage": 51,
+ "damage_increment": 1.6,
+ "damage_type": "stab",
+ "min_range": 5,
+ "max_range": 15,
+ "range_increment": 0.4,
+ "min_duration": 9120,
+ "max_duration": 25920,
+ "duration_increment": 720
+ },
+ {
+ "id": "biomancer_visceral_projection",
+ "type": "SPELL",
+ "name": { "str": "Visceral Projection" },
+ "description": "Projects a spray of acrid blood and gore all around you, growing to ensnare your prey in in a field of twitching poisonous tendrils.",
+ "sprite": "fd_gibs_flesh",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "effect": "target_attack",
+ "effect_str": "badpoison",
+ "extra_effects": [ { "id": "biomancer_visceral_paralyze" }, { "id": "biomancer_visceral_backlash", "hit_self": true } ],
+ "flags": [ "VERBAL", "NO_HANDS", "NO_LEGS" ],
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "base_casting_time": 200,
+ "base_energy_cost": 150,
+ "max_level": 30,
+ "min_damage": 5,
+ "max_damage": 19,
+ "damage_increment": 0.45,
+ "damage_type": "bio",
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 0.2,
+ "field_id": "fd_blood",
+ "field_chance": 1,
+ "min_field_intensity": 3,
+ "max_field_intensity": 5,
+ "field_intensity_increment": 0.1
+ },
+ {
+ "id": "biomancer_visceral_paralyze",
+ "type": "SPELL",
+ "name": { "str": "Visceral Paralysis" },
+ "description": "Paralytic side effect of Projection.",
+ "valid_targets": [ "ally", "hostile" ],
+ "effect": "target_attack",
+ "effect_str": "biomancer_dart_venom",
+ "flags": [ "SILENT", "NO_EXPLOSION_VFX" ],
+ "max_level": 30,
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 0.2,
+ "min_duration": 12750,
+ "max_duration": 33750,
+ "duration_increment": 450,
+ "field_id": "fd_gibs_flesh",
+ "field_chance": 1,
+ "min_field_intensity": 3,
+ "max_field_intensity": 5,
+ "field_intensity_increment": 0.1
+ },
+ {
+ "id": "biomancer_visceral_backlash",
+ "type": "SPELL",
+ "name": { "str": "Visceral Backlash" },
+ "description": "Hits the user with side effects too.",
+ "valid_targets": [ "self" ],
+ "effect": "target_attack",
+ "effect_str": "biomancer_visceral_side_effects",
+ "flags": [ "VERBAL", "NO_EXPLOSION_VFX" ],
+ "min_duration": 600,
+ "max_duration": 600
+ },
+ {
+ "id": "biomancer_coagulant_weave",
+ "type": "SPELL",
+ "name": { "str": "Coagulant Weave" },
+ "description": "Turns your biological mastery inwards, medically enhancing your flesh. Rather than strength of healing, it staves off blood loss and purges wounds before they can turn septic, at the cost of increased hunger and thirst.",
+ "valid_targets": [ "self" ],
+ "effect": "target_attack",
+ "effect_str": "bio_weave",
+ "flags": [ "SOMATIC", "NO_EXPLOSION_VFX", "NO_HANDS", "NO_LEGS" ],
+ "energy_source": "MANA",
+ "spell_class": "BIOMANCER",
+ "difficulty": 5,
+ "base_casting_time": 400,
+ "base_energy_cost": 150,
+ "max_level": 30,
+ "min_duration": 105000,
+ "max_duration": 195000,
+ "duration_increment": 3000
+ },
+ {
+ "id": "bio_create_acid",
+ "type": "SPELL",
+ "name": { "str": "Create Hydrochloric Acid" },
+ "description": "Produces usable hydrochloric acid (aka muriatc acid) using magic.",
+ "valid_targets": [ "self" ],
+ "effect": "spawn_item",
+ "effect_str": "chem_muriatic_acid",
+ "flags": [ "SOMATIC", "PERMANENT", "NO_LEGS" ],
+ "energy_source": "MANA",
+ "spell_class": "BIOMANCER",
+ "difficulty": 4,
+ "base_casting_time": 25000,
+ "base_energy_cost": 300,
+ "min_damage": 1,
+ "max_damage": 1
+ },
+ {
+ "id": "acid_bolt",
+ "type": "SPELL",
+ "name": { "str": "Acid Bolt" },
+ "description": "An acid bolt that only damages your foes.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "SOMATIC", "NO_LEGS" ],
+ "min_damage": 45,
+ "damage_increment": 1,
+ "damage_type": "acid",
+ "max_damage": 65,
+ "min_range": 10,
+ "range_increment": 0.5,
+ "max_range": 20,
+ "base_energy_cost": 150,
+ "spell_class": "BIOMANCER",
+ "difficulty": 4,
+ "max_level": 20,
+ "base_casting_time": 200,
+ "energy_source": "MANA",
+ "effect": "projectile_attack",
+ "effect_str": "bio_acidburn"
+ },
+ {
+ "id": "acid_bomb",
+ "type": "SPELL",
+ "name": { "str": "Acid Bomb" },
+ "description": "An acid bomb that spreads caustic acid pools around its blast radius.",
+ "valid_targets": [ "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS" ],
+ "min_damage": 50,
+ "damage_increment": 2,
+ "damage_type": "acid",
+ "max_damage": 110,
+ "min_range": 5,
+ "range_increment": 0.5,
+ "max_range": 15,
+ "base_energy_cost": 400,
+ "spell_class": "BIOMANCER",
+ "difficulty": 8,
+ "max_level": 30,
+ "base_casting_time": 200,
+ "energy_source": "MANA",
+ "effect": "projectile_attack",
+ "effect_str": "bio_acidburn",
+ "min_aoe": 2,
+ "max_aoe": 5,
+ "aoe_increment": 0.1,
+ "field_id": "fd_acid",
+ "min_field_intensity": 1,
+ "max_field_intensity": 2
+ },
+ {
+ "id": "acid_storm",
+ "type": "SPELL",
+ "name": { "str": "Acid Storm" },
+ "description": "Several acid spheres fire from your finger tips to strike the target.",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "flags": [ "CONCENTRATE", "SOMATIC", "NO_LEGS" ],
+ "min_aoe": 1,
+ "max_aoe": 3,
+ "aoe_increment": 0.05,
+ "max_level": 52,
+ "min_damage": 41,
+ "max_damage": 249,
+ "min_range": 8,
+ "max_range": 14,
+ "range_increment": 0.1,
+ "damage_increment": 4,
+ "difficulty": 20,
+ "spell_class": "BIOMANCER",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 300,
+ "damage_type": "acid",
+ "effect": "projectile_attack",
+ "extra_effects": [ { "id": "acid_bomb" }, { "id": "acid_bomb" }, { "id": "acid_bomb" } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/classless.json b/data/mods/Magical_Nights/Spells/classless.json
new file mode 100644
index 000000000000..eaaf57b6a79f
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/classless.json
@@ -0,0 +1,281 @@
+[
+ {
+ "id": "crystallize_mana",
+ "type": "SPELL",
+ "name": { "str": "Crystallize Mana" },
+ "description": "Crystallizes mana into solid form",
+ "valid_targets": [ "self" ],
+ "spell_class": "NONE",
+ "flags": [ "PERMANENT", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "difficulty": 3,
+ "min_damage": 1,
+ "max_damage": 1,
+ "duration_increment": 1,
+ "effect": "spawn_item",
+ "effect_str": "crystallized_mana",
+ "energy_source": "MANA",
+ "base_energy_cost": 1000,
+ "final_energy_cost": 1000,
+ "base_casting_time": 720000,
+ "final_casting_time": 720000,
+ "extra_effects": [ { "id": "mana_fatigue" } ]
+ },
+ {
+ "id": "mana_fatigue",
+ "type": "SPELL",
+ "name": { "str": "Mana Fatigue" },
+ "description": "Secondary effect of Crystallize Mana",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "mana_fatigue",
+ "max_level": 1,
+ "min_duration": 6000,
+ "max_duration": 6000,
+ "//": "actual fatigue gained is 1/100th duration, at 6000 you get 60 fatigue."
+ },
+ {
+ "id": "dark_sight",
+ "type": "SPELL",
+ "name": { "str": "Dark Sight" },
+ "description": "Gives you the power to see in the dark",
+ "message": "Your eyes glow green for a moment. Now your sight can pierce the darkest shadows.",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "dark_sight",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 500,
+ "energy_source": "MANA",
+ "difficulty": 6,
+ "max_level": 30,
+ "min_duration": 1300000,
+ "max_duration": 1900000,
+ "duration_increment": 20000
+ },
+ {
+ "id": "megablast",
+ "type": "SPELL",
+ "name": { "str": "Megablast" },
+ "description": "You always wanted to fire energy beams like in the animes you watched as a kid. Now you can!",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "effect": "line_attack",
+ "damage_type": "fire",
+ "base_casting_time": 200,
+ "base_energy_cost": 8000,
+ "energy_source": "STAMINA",
+ "spell_class": "NONE",
+ "flags": [ "LOUD", "SOMATIC" ],
+ "difficulty": 10,
+ "max_level": 30,
+ "min_damage": 57,
+ "max_damage": 177,
+ "damage_increment": 3.5,
+ "min_range": 7,
+ "max_range": 22,
+ "range_increment": 0.45,
+ "min_aoe": 2,
+ "max_aoe": 9,
+ "aoe_increment": 0.2
+ },
+ {
+ "id": "create_atomic_light",
+ "type": "SPELL",
+ "name": { "str": "Magical Light" },
+ "description": "Creates a magical light.",
+ "valid_targets": [ "none" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "magic_light",
+ "energy_source": "MANA",
+ "flags": [ "VERBAL", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX", "PERMANENT" ],
+ "difficulty": 1,
+ "base_casting_time": 1000,
+ "base_energy_cost": 200,
+ "duration_increment": 42
+ },
+ {
+ "id": "blinding_flash",
+ "type": "SPELL",
+ "name": { "str": "Blinding Flash" },
+ "description": "Blind enemies for a short time with a sudden, dazzling light. Higher levels deal slightly higher damage.",
+ "effect": "target_attack",
+ "effect_str": "blind",
+ "affected_body_parts": [ "eyes" ],
+ "valid_targets": [ "hostile" ],
+ "max_level": 30,
+ "min_damage": 5,
+ "max_damage": 19,
+ "damage_increment": 0.5,
+ "min_aoe": 1,
+ "max_aoe": 6,
+ "aoe_increment": 0.15,
+ "min_range": 8,
+ "max_range": 28,
+ "range_increment": 0.6,
+ "min_duration": 2500,
+ "max_duration": 6000,
+ "duration_increment": 100,
+ "spell_class": "NONE",
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "base_casting_time": 200,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "damage_type": "none"
+ },
+ {
+ "id": "ethereal_grasp",
+ "type": "SPELL",
+ "name": { "str": "Ethereal Grasp" },
+ "description": "A mass of spectral hands emerge from the ground, slowing everything in range. Higher levels allow a bigger AoE, and longer effect.",
+ "effect": "target_attack",
+ "effect_str": "effect_ethereal_grasp",
+ "affected_body_parts": [ "foot_l", "foot_r" ],
+ "valid_targets": [ "hostile" ],
+ "max_level": 30,
+ "min_damage": 17,
+ "max_damage": 52,
+ "damage_increment": 1,
+ "min_aoe": 6,
+ "max_aoe": 34,
+ "aoe_increment": 0.5,
+ "min_range": 20,
+ "max_range": 45,
+ "range_increment": 2,
+ "min_duration": 4000,
+ "max_duration": 10500,
+ "duration_increment": 200,
+ "spell_class": "NONE",
+ "flags": [ "SOMATIC", "NO_HANDS" ],
+ "base_casting_time": 200,
+ "base_energy_cost": 400,
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "damage_type": "bash"
+ },
+ {
+ "id": "obfuscated_body",
+ "type": "SPELL",
+ "name": { "str": "Obfuscated Body" },
+ "description": "A magical aura distorts light around your body, increasing the amount of attacks you might dodge in a given turn.",
+ "valid_targets": [ "self" ],
+ "effect": "spawn_item",
+ "effect_str": "obfuscating_aura",
+ "energy_source": "MANA",
+ "spell_class": "NONE",
+ "flags": [ "CONCENTRATE", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "difficulty": 4,
+ "max_level": 22,
+ "base_casting_time": 200,
+ "base_energy_cost": 400,
+ "min_duration": 705000,
+ "max_duration": 1695000,
+ "duration_increment": 45000
+ },
+ {
+ "id": "protection_aura",
+ "type": "SPELL",
+ "name": { "str": "Aura of Protection" },
+ "description": "Encases your whole body in a magical aura that protects you from the environment.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "protect_env",
+ "energy_source": "MANA",
+ "difficulty": 1,
+ "max_level": 30,
+ "flags": [ "CONCENTRATE", "VERBAL", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "base_casting_time": 350,
+ "base_energy_cost": 375,
+ "min_duration": 550000,
+ "max_duration": 1450000,
+ "duration_increment": 30000
+ },
+ {
+ "id": "translocate_self",
+ "type": "SPELL",
+ "name": { "str": "Translocate Self" },
+ "description": "Translocates the user to an attuned gate.",
+ "valid_targets": [ "self" ],
+ "effect": "translocate",
+ "difficulty": 15,
+ "max_level": 35,
+ "base_casting_time": 6000,
+ "base_energy_cost": 675,
+ "energy_source": "MANA",
+ "spell_class": "NONE"
+ },
+ {
+ "id": "acid_resistance",
+ "type": "SPELL",
+ "name": { "str": "Acid Resistance" },
+ "description": "Protects the user from acid.",
+ "valid_targets": [ "none" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "acid_res_aura",
+ "energy_source": "MANA",
+ "spell_class": "NONE",
+ "flags": [ "CONCENTRATE", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "difficulty": 4,
+ "max_level": 22,
+ "base_casting_time": 200,
+ "base_energy_cost": 150,
+ "min_duration": 2864000,
+ "max_duration": 6912000,
+ "duration_increment": 184000,
+ "learn_spells": { "acid_resistance_greater": 15 }
+ },
+ {
+ "id": "acid_resistance_greater",
+ "type": "SPELL",
+ "name": { "str": "Greater Acid Resistance" },
+ "description": "Protects the user from acid.",
+ "valid_targets": [ "none" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "acid_res_aura_greater",
+ "energy_source": "MANA",
+ "spell_class": "NONE",
+ "flags": [ "CONCENTRATE", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "difficulty": 7,
+ "max_level": 1,
+ "base_casting_time": 200,
+ "base_energy_cost": 250,
+ "min_duration": 1800000
+ },
+ {
+ "id": "summon_lemon",
+ "type": "SPELL",
+ "name": { "str": "Summon… Lemon?" },
+ "description": "While at first this spell may appear to be \"Summon Demon\", in reality it appears to be a spell to summon a lemon. Cursive truly is the bane of your existence.",
+ "valid_targets": [ "none" ],
+ "effect": "spawn_item",
+ "effect_str": "lemon",
+ "energy_source": "MANA",
+ "spell_class": "NONE",
+ "flags": [ "CONCENTRATE", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "difficulty": 3,
+ "max_level": 10,
+ "base_casting_time": 250,
+ "base_energy_cost": 300,
+ "min_duration": 6000,
+ "max_duration": 360000,
+ "duration_increment": 35400,
+ "min_damage": 1,
+ "max_damage": 1
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/debug.json b/data/mods/Magical_Nights/Spells/debug.json
new file mode 100644
index 000000000000..a7576fb33988
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/debug.json
@@ -0,0 +1,234 @@
+[
+ {
+ "//": "This spell exists in json as a template for contributors to see the possible values of the spell",
+ "id": "example_template",
+ "type": "SPELL",
+ "name": "Template Spell",
+ "description": "This is a template to show off all the available values",
+ "message": "As you cast %s, your ears pops!",
+ "//2": "The 'message' will replace 'You cast %s!' message when you cast this spell",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "//3": "effect is only limited by what is coded.",
+ "effect": "none",
+ "//4": "base_casting_time is in moves",
+ "base_casting_time": 100,
+ "base_energy_cost": 10,
+ "//5": "Available energy sourcese are: MANA, STAMINA, HP, BIONIC, NONE",
+ "energy_source": "MANA",
+ "difficulty": 12,
+ "max_level": 10,
+ "min_damage": 0,
+ "max_damage": 100,
+ "damage_increment": 2.5,
+ "min_aoe": 0,
+ "max_aoe": 5,
+ "aoe_increment": 0.1,
+ "min_range": 1,
+ "max_range": 10,
+ "range_increment": 2,
+ "min_dot": 0,
+ "max_dot": 2,
+ "dot_increment": 0.1,
+ "//6": "duration is in moves",
+ "min_duration": 0,
+ "max_duration": 1000,
+ "duration_increment": 4,
+ "min_pierce": 0,
+ "max_pierce": 1,
+ "pierce_increment": 0.1,
+ "//7": "Learn spells by adding map of 'spell_id': 'level' ",
+ "learn_spells": { "create_atomic_light": 1, "megablast": 2 }
+ },
+ {
+ "id": "spawn_debug_monster",
+ "type": "SPELL",
+ "name": "Spawn Debug Monsters",
+ "description": "Set level to number of monsters spawned.",
+ "message": "Debug spell %s cast.",
+ "valid_targets": [ "ground" ],
+ "effect": "summon",
+ "effect_str": "debug_mon",
+ "base_casting_time": 100,
+ "max_level": 30,
+ "min_aoe": 10,
+ "max_aoe": 10,
+ "min_damage": 1,
+ "max_damage": 30,
+ "damage_increment": 1,
+ "min_range": 20,
+ "max_range": 20,
+ "min_duration": 1000,
+ "max_duration": 1000,
+ "energy_source": "NONE"
+ },
+ {
+ "id": "debug_stamina",
+ "type": "SPELL",
+ "name": "Debug Stamina Spell",
+ "description": "Uses a little stamina",
+ "message": "Debug spell [ %s ] has no effect. Debug warning is expected.",
+ "valid_targets": [ "self" ],
+ "effect": "none",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "STAMINA"
+ },
+ {
+ "id": "debug_fatigue",
+ "type": "SPELL",
+ "name": "Debug Fatigue Spell",
+ "description": "Uses a little fatigue",
+ "message": "Debug spell %s cast.",
+ "valid_targets": [ "self" ],
+ "effect": "none",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "FATIGUE"
+ },
+ {
+ "id": "debug_hp",
+ "type": "SPELL",
+ "name": "Debug HP Spell",
+ "description": "Uses a little HP",
+ "message": "Debug spell %s cast.",
+ "valid_targets": [ "self" ],
+ "effect": "none",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 30,
+ "energy_source": "HP"
+ },
+ {
+ "id": "debug_bionic",
+ "type": "SPELL",
+ "name": "Debug Bionic Spell",
+ "description": "Uses a little Bionic Power",
+ "message": "Debug spell %s cast.",
+ "valid_targets": [ "self" ],
+ "effect": "none",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "energy_source": "BIONIC"
+ },
+ {
+ "id": "debug_effect",
+ "type": "SPELL",
+ "name": "Debug effect spell",
+ "description": "Adds an effect to the target",
+ "message": "Debug spell %s cast.",
+ "valid_targets": [ "self", "hostile", "ally" ],
+ "effect": "target_attack",
+ "effect_str": "dazed",
+ "min_range": 12,
+ "max_range": 12,
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "min_duration": 500,
+ "max_duration": 500,
+ "energy_source": "MANA"
+ },
+ {
+ "id": "test_area_pull_all",
+ "type": "SPELL",
+ "name": "Test Area Pull",
+ "description": "Pulls all objects inside.",
+ "message": "Debug spell %s cast.",
+ "effect": "area_pull",
+ "effect_filter": [ "ally", "hostile", "item", "fd_fire", "fd_blood" ],
+ "valid_targets": [ "self", "ally", "hostile", "ground" ],
+ "min_range": 5,
+ "max_range": 15,
+ "range_increment": 2.5,
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 1,
+ "max_level": 20,
+ "difficulty": 1,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "base_energy_cost": 100
+ },
+ {
+ "id": "test_area_pull_field",
+ "type": "SPELL",
+ "name": "Test Area Pull (Field)",
+ "description": "Pulls field contents tiles inside.",
+ "message": "Debug spell %s cast.",
+ "effect": "area_pull",
+ "effect_filter": [ "fd_fire", "fd_blood" ],
+ "valid_targets": [ "self", "ally", "hostile", "ground" ],
+ "min_range": 5,
+ "max_range": 15,
+ "range_increment": 2.5,
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 1,
+ "max_level": 20,
+ "difficulty": 1,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "base_energy_cost": 100
+ },
+ {
+ "id": "test_area_push",
+ "type": "SPELL",
+ "name": "Test Area Push",
+ "description": "Pushes all objects outside.",
+ "message": "Debug spell %s cast.",
+ "effect": "area_push",
+ "effect_filter": [ "ally", "hostile", "item" ],
+ "valid_targets": [ "self", "ally", "hostile", "ground" ],
+ "min_range": 5,
+ "max_range": 15,
+ "range_increment": 2.5,
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 1,
+ "max_level": 20,
+ "difficulty": 1,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "base_energy_cost": 100
+ },
+ {
+ "id": "debug_full_protection",
+ "type": "SPELL",
+ "name": "Debug Full Protection",
+ "description": "You can not be harmed by anything.",
+ "message": "You are invulnerable, nothing can harm you!",
+ "valid_targets": [ "self" ],
+ "effect": "target_attack",
+ "effect_str": "debug_full_protection",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "min_duration": 100000,
+ "max_duration": 100000
+ },
+ {
+ "id": "debug_fall_protection",
+ "type": "SPELL",
+ "name": "Debug Feather Falling",
+ "description": "You are light as a feather and fall like.",
+ "message": "You eat a feather!",
+ "valid_targets": [ "self" ],
+ "effect": "target_attack",
+ "effect_str": "debug_feather_fall",
+ "min_range": 1,
+ "max_range": 1,
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "min_duration": 400,
+ "max_duration": 400
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/dragonbreath.json b/data/mods/Magical_Nights/Spells/dragonbreath.json
new file mode 100644
index 000000000000..0d6525cd5d3b
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/dragonbreath.json
@@ -0,0 +1,24 @@
+[
+ {
+ "type": "SPELL",
+ "id": "dragon_breath_black",
+ "name": { "str": "Black Dragons' Breath" },
+ "description": "Spews a line of acid from your mouth.",
+ "valid_targets": [ "hostile", "ally", "ground" ],
+ "damage_type": "acid",
+ "max_level": 40,
+ "min_damage": 6,
+ "max_damage": 240,
+ "damage_increment": 6,
+ "min_range": 8,
+ "max_range": 12,
+ "range_increment": 0.1,
+ "effect": "line_attack",
+ "field_id": "fd_acid",
+ "min_field_intensity": 1,
+ "max_field_intensity": 4,
+ "field_chance": 2,
+ "field_intensity_increment": 0.1,
+ "flags": [ "VERBAL", "NO_HANDS", "NO_LEGS" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/druid.json b/data/mods/Magical_Nights/Spells/druid.json
new file mode 100644
index 000000000000..b6c78124167f
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/druid.json
@@ -0,0 +1,301 @@
+[
+ {
+ "id": "druid_veggrasp",
+ "type": "SPELL",
+ "name": { "str": "Vegetative Grasp" },
+ "description": "This spell causes roots and vines to burst forth from the ground and grab your foes, slowing them and doing a small amount of damage as they dig in.",
+ "sprite": "fd_gibs_veggy",
+ "valid_targets": [ "hostile", "ground" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "effect": "target_attack",
+ "effect_str": "entangled",
+ "spell_class": "DRUID",
+ "base_casting_time": 100,
+ "base_energy_cost": 175,
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "max_level": 30,
+ "min_damage": 8,
+ "max_damage": 37,
+ "damage_increment": 1,
+ "min_aoe": 11,
+ "max_aoe": 29,
+ "aoe_increment": 1,
+ "min_range": 10,
+ "max_range": 17,
+ "range_increment": 1,
+ "min_dot": 1,
+ "max_dot": 4,
+ "dot_increment": 0.1,
+ "min_duration": 8500,
+ "max_duration": 22500,
+ "duration_increment": 500,
+ "min_pierce": 3,
+ "max_pierce": 10,
+ "pierce_increment": 0.25,
+ "damage_type": "stab"
+ },
+ {
+ "id": "druid_rootstrike",
+ "type": "SPELL",
+ "name": { "str": "Root Strike" },
+ "description": "This spell causes roots to spear out the ground and stab into your foes in an arc, impaling them.",
+ "valid_targets": [ "hostile", "ground" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_LEGS" ],
+ "effect": "cone_attack",
+ "effect_str": "root_impale",
+ "spell_class": "DRUID",
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "max_level": 30,
+ "min_damage": 17,
+ "max_damage": 92,
+ "damage_increment": 2.5,
+ "min_aoe": 32,
+ "max_aoe": 72,
+ "aoe_increment": 1,
+ "min_range": 8,
+ "max_range": 19,
+ "range_increment": 0.5,
+ "min_dot": 2,
+ "max_dot": 4,
+ "dot_increment": 0.1,
+ "min_duration": 8500,
+ "max_duration": 22500,
+ "duration_increment": 500,
+ "min_pierce": 14,
+ "max_pierce": 34,
+ "pierce_increment": 0.5,
+ "damage_type": "stab"
+ },
+ {
+ "id": "druid_woodshaft",
+ "type": "SPELL",
+ "name": { "str": "Wooden Shaft" },
+ "description": "This spell creates a projectile of hardwood that shoots forth from the caster's hand at high speed to stab into an enemy.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_LEGS" ],
+ "effect": "projectile_attack",
+ "spell_class": "DRUID",
+ "base_casting_time": 100,
+ "base_energy_cost": 50,
+ "energy_source": "MANA",
+ "difficulty": 1,
+ "max_level": 30,
+ "min_damage": 13,
+ "max_damage": 49,
+ "damage_increment": 1.5,
+ "min_range": 10,
+ "max_range": 27,
+ "range_increment": 0.75,
+ "min_pierce": 5,
+ "max_pierce": 12,
+ "pierce_increment": 0.5,
+ "damage_type": "bash"
+ },
+ {
+ "id": "druid_naturebow1",
+ "type": "SPELL",
+ "name": { "str": "Nature's Bow" },
+ "description": "This spell conjures a magical wooden recurve bow that fires endless arrows for as long as it lasts.",
+ "valid_targets": [ "none" ],
+ "flags": [ "CONCENTRATE", "SOMATIC", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "druid_recurve",
+ "base_casting_time": 200,
+ "base_energy_cost": 250,
+ "min_duration": 250000,
+ "max_duration": 550000,
+ "duration_increment": 10000,
+ "difficulty": 6,
+ "max_level": 30,
+ "spell_class": "DRUID",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "recover_fatigue",
+ "type": "SPELL",
+ "name": { "str": "Nature's Trance" },
+ "description": "Your connection to living things allows you to go into a magical trance. This allows you to recover fatige quickly in exchange for mana.",
+ "valid_targets": [ "self" ],
+ "flags": [ "CONCENTRATE", "SILENT", "NO_HANDS", "NO_EXPLOSION_VFX", "NO_LEGS" ],
+ "spell_class": "DRUID",
+ "energy_source": "MANA",
+ "effect": "recover_energy",
+ "effect_str": "FATIGUE",
+ "base_casting_time": 10000,
+ "min_damage": 50,
+ "damage_increment": 10,
+ "max_damage": 450,
+ "max_level": 35,
+ "base_energy_cost": 500,
+ "energy_increment": 25,
+ "final_energy_cost": 1685,
+ "difficulty": 4
+ },
+ {
+ "id": "summon_cats",
+ "type": "SPELL",
+ "name": { "str": "Bag of Cats" },
+ "description": "Are you the crazy cat lady?",
+ "valid_targets": [ "ground" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_EXPLOSION_VFX" ],
+ "min_damage": 1,
+ "max_damage": 18,
+ "damage_increment": 1,
+ "min_range": 17,
+ "range_increment": 0.8,
+ "max_range": 24,
+ "min_aoe": 3,
+ "max_aoe": 3,
+ "spell_class": "DRUID",
+ "base_casting_time": 250,
+ "energy_source": "MANA",
+ "max_level": 35,
+ "min_duration": 235000,
+ "max_duration": 585000,
+ "duration_increment": 10000,
+ "difficulty": 1,
+ "base_energy_cost": 265,
+ "effect": "summon",
+ "effect_str": "mon_cat"
+ },
+ {
+ "id": "summon_bear",
+ "type": "SPELL",
+ "name": { "str": "Cause Bear" },
+ "description": "This spell appears to be very smudged. You're fairly sure the name should be Cause Fear, but you're also fairly sure it won't have the desired effect because the instructions are hardly legible. No time like the Cataclysm to find out, though!",
+ "valid_targets": [ "ground" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "min_range": 6,
+ "max_range": 11,
+ "spell_class": "DRUID",
+ "base_casting_time": 500,
+ "energy_source": "MANA",
+ "max_level": 35,
+ "difficulty": 10,
+ "min_duration": 255000,
+ "max_duration": 645000,
+ "base_energy_cost": 675,
+ "final_energy_cost": 425,
+ "energy_increment": -5,
+ "flags": [ "HOSTILE_50", "CONCENTRATE", "SOMATIC", "VERBAL", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "effect": "summon",
+ "effect_str": "mon_bear"
+ },
+ {
+ "id": "fungicide",
+ "type": "SPELL",
+ "name": { "str": "Kill Fungus" },
+ "description": "Kills fungus affected areas",
+ "valid_targets": [ "ground", "hostile" ],
+ "effect": "ter_transform",
+ "effect_str": "fungicide",
+ "min_aoe": 20,
+ "max_aoe": 50,
+ "aoe_increment": 1,
+ "max_level": 30,
+ "difficulty": 4,
+ "energy_source": "MANA",
+ "base_energy_cost": 175,
+ "base_casting_time": 550,
+ "flags": [ "CONCENTRATE", "SOMATIC", "NO_LEGS", "NO_HANDS" ]
+ },
+ {
+ "id": "create_rune_druid",
+ "type": "SPELL",
+ "name": { "str": "Druid Rune" },
+ "description": "This ritual creates a small pebble attuned to Druids. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_druid",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "DRUID",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "purify_seed",
+ "type": "SPELL",
+ "name": { "str": "Purification Seed" },
+ "description": "You summon a gift of the earth which will purify water. Rapidly degrades if not utilized.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "druid_seed",
+ "base_casting_time": 30000,
+ "final_casting_time": 6000,
+ "casting_time_increment": -1200,
+ "base_energy_cost": 1000,
+ "final_energy_cost": 1000,
+ "min_duration": 6000,
+ "max_duration": 6000,
+ "difficulty": 6,
+ "max_level": 20,
+ "spell_class": "DRUID",
+ "energy_source": "MANA",
+ "flags": [ "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ]
+ },
+ {
+ "id": "druidic_regrowth",
+ "type": "SPELL",
+ "name": { "str": "Sacrificial Regrowth" },
+ "description": "Through giving of one's own life force, you restore withered and barren plant life nearby. What remains will need time to regrow its full strength.",
+ "valid_targets": [ "ground" ],
+ "effect": "ter_transform",
+ "effect_str": "druidic_renewal",
+ "flags": [ "CONCENTRATE", "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "spell_class": "DRUID",
+ "energy_source": "HP",
+ "difficulty": 6,
+ "base_casting_time": 600,
+ "base_energy_cost": 25,
+ "max_level": 30,
+ "min_aoe": 4,
+ "max_aoe": 11,
+ "aoe_increment": 0.2,
+ "min_range": 8,
+ "max_range": 14,
+ "range_increment": 0.3
+ },
+ {
+ "id": "druidic_healing",
+ "type": "SPELL",
+ "name": { "str": "Sacrificial Healing" },
+ "description": "Channels some of the user's own life force into healing energy, for the sake of ones allies.",
+ "valid_targets": [ "ally" ],
+ "effect": "target_attack",
+ "flags": [ "CONCENTRATE", "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "spell_class": "DRUID",
+ "energy_source": "HP",
+ "difficulty": 5,
+ "base_casting_time": 400,
+ "base_energy_cost": 35,
+ "final_energy_cost": 10,
+ "energy_increment": -1.5,
+ "max_level": 15,
+ "min_damage": -4,
+ "max_damage": -18,
+ "damage_increment": -0.8,
+ "min_aoe": 0,
+ "max_aoe": 3,
+ "aoe_increment": 0.2,
+ "min_range": 2,
+ "max_range": 6,
+ "range_increment": 0.2
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/earthshaper.json b/data/mods/Magical_Nights/Spells/earthshaper.json
new file mode 100644
index 000000000000..566b5f546a63
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/earthshaper.json
@@ -0,0 +1,390 @@
+[
+ {
+ "id": "stonefist",
+ "type": "SPELL",
+ "name": { "str": "Stonefist" },
+ "description": "Encases your arms and hands in a sheath of magical stone, you can punch and defend yourself with it in melee combat.",
+ "valid_targets": [ "self" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_EXPLOSION_VFX", "NO_LEGS" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "stonefist",
+ "spell_class": "EARTHSHAPER",
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "max_level": 30,
+ "base_casting_time": 200,
+ "base_energy_cost": 100,
+ "min_duration": 400000,
+ "max_duration": 1000000,
+ "duration_increment": 20000
+ },
+ {
+ "id": "seismic_stomp",
+ "type": "SPELL",
+ "name": { "str": "Seismic Stomp" },
+ "description": "Focusing mana into your leg, you stomp your foot and send out a shockwave, knocking enemies around you onto the ground.",
+ "sprite": "fd_rubble",
+ "effect": "target_attack",
+ "effect_str": "downed",
+ "valid_targets": [ "hostile", "ground", "none" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ],
+ "max_level": 15,
+ "min_damage": 5,
+ "max_damage": 18,
+ "damage_increment": 0.8,
+ "min_aoe": 7,
+ "max_aoe": 22,
+ "aoe_increment": 1,
+ "min_duration": 4750,
+ "max_duration": 12750,
+ "duration_increment": 500,
+ "spell_class": "EARTHSHAPER",
+ "base_casting_time": 100,
+ "base_energy_cost": 250,
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "damage_type": "bash"
+ },
+ {
+ "id": "recover_stamina",
+ "type": "SPELL",
+ "name": { "str": "Stone's Endurance" },
+ "description": "You focus on the stones beneath you and draw from their agelessness. Your mana is converted to stamina.",
+ "effect": "recover_energy",
+ "effect_str": "STAMINA",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_HANDS", "CONCENTRATE", "SILENT", "NO_EXPLOSION_VFX", "SOMATIC" ],
+ "min_damage": 1500,
+ "max_damage": 15000,
+ "damage_increment": 750,
+ "max_level": 18,
+ "spell_class": "EARTHSHAPER",
+ "base_casting_time": 500,
+ "final_casting_time": 198,
+ "casting_time_increment": -17,
+ "energy_source": "MANA",
+ "base_energy_cost": 150,
+ "energy_increment": 75,
+ "final_energy_cost": 1500,
+ "difficulty": 5
+ },
+ {
+ "id": "eshaper_shardspray",
+ "type": "SPELL",
+ "name": { "str": "Shardspray" },
+ "description": "This spell projects a wide spray of sharp metal shards, cutting into your foes and friends alike.",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_LEGS", "NO_HANDS" ],
+ "effect": "cone_attack",
+ "spell_class": "EARTHSHAPER",
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "max_level": 30,
+ "min_damage": 24,
+ "max_damage": 99,
+ "damage_increment": 2.5,
+ "damage_type": "cut",
+ "min_aoe": 62,
+ "max_aoe": 127,
+ "aoe_increment": 5,
+ "min_range": 6,
+ "max_range": 18,
+ "range_increment": 0.5,
+ "min_pierce": 3,
+ "max_pierce": 11,
+ "pierce_increment": 0.4
+ },
+ {
+ "id": "eshaper_piercing_bolt",
+ "type": "SPELL",
+ "name": { "str": "Piercing Bolt" },
+ "description": "This spell projects a piercing rod of conjured iron at those that dare oppose you.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_LEGS" ],
+ "effect": "projectile_attack",
+ "spell_class": "EARTHSHAPER",
+ "energy_source": "MANA",
+ "base_casting_time": 100,
+ "base_energy_cost": 115,
+ "difficulty": 2,
+ "max_level": 30,
+ "min_damage": 42,
+ "max_damage": 97,
+ "damage_increment": 3,
+ "damage_type": "stab",
+ "min_range": 19,
+ "max_range": 50,
+ "range_increment": 1.5
+ },
+ {
+ "id": "eshaper_shardstorm",
+ "type": "SPELL",
+ "name": { "str": "Shardstorm" },
+ "description": "Creates an omnidirectional spray of razor sharp metal shards all around you.",
+ "valid_targets": [ "hostile", "ally", "ground" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS", "NO_LEGS" ],
+ "min_damage": 17,
+ "max_damage": 92,
+ "damage_increment": 2.5,
+ "damage_type": "cut",
+ "min_aoe": 3,
+ "max_aoe": 11,
+ "aoe_increment": 0.25,
+ "base_energy_cost": 200,
+ "spell_class": "EARTHSHAPER",
+ "difficulty": 4,
+ "max_level": 30,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "effect": "target_attack"
+ },
+ {
+ "id": "eshaper_rockbolt",
+ "type": "SPELL",
+ "name": { "str": "Rockbolt" },
+ "description": "Fires a conjured stone projectile at high velocity.",
+ "valid_targets": [ "hostile", "ally" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ],
+ "min_damage": 17,
+ "damage_increment": 1.5,
+ "damage_type": "bash",
+ "max_damage": 51,
+ "min_range": 9,
+ "range_increment": 0.5,
+ "max_range": 27,
+ "base_energy_cost": 50,
+ "spell_class": "EARTHSHAPER",
+ "difficulty": 1,
+ "max_level": 30,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "effect": "projectile_attack"
+ },
+ {
+ "id": "move_earth",
+ "type": "SPELL",
+ "name": { "str": "Move Earth" },
+ "description": "Your essense flows around you, and the earth follows.",
+ "valid_targets": [ "hostile", "ally", "ground", "self" ],
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ],
+ "min_aoe": 1,
+ "max_aoe": 2,
+ "min_damage": 100,
+ "max_damage": 1,
+ "damage_increment": -5,
+ "aoe_increment": 0.25,
+ "base_energy_cost": 200,
+ "spell_class": "EARTHSHAPER",
+ "difficulty": 4,
+ "max_level": 20,
+ "min_range": 5,
+ "max_range": 5,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "effect": "ter_transform",
+ "effect_str": "move_earth"
+ },
+ {
+ "id": "create_rune_earthshaper",
+ "type": "SPELL",
+ "name": { "str": "Earthshaper Rune" },
+ "description": "This ritual creates a small pebble attuned to Earthshapers. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_earthshaper",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "EARTHSHAPER",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "lava_bomb_shrapnel",
+ "type": "SPELL",
+ "name": { "str": "Lava Bomb Shrapnel" },
+ "description": "This is a sub spell for the Lava Bomb spell.",
+ "effect": "projectile_attack",
+ "valid_targets": [ "hostile", "ally", "self", "ground" ],
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "damage_type": "cut",
+ "max_level": 45,
+ "min_damage": 27,
+ "max_damage": 120,
+ "damage_increment": 2,
+ "min_aoe": 2,
+ "max_aoe": 8,
+ "aoe_increment": 0.1
+ },
+ {
+ "id": "lava_bomb_heat",
+ "type": "SPELL",
+ "name": { "str": "Lava Bomb Heat" },
+ "description": "This is a sub spell for the Lava Bomb spell.",
+ "effect": "projectile_attack",
+ "valid_targets": [ "hostile", "ally", "self", "ground" ],
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "damage_type": "fire",
+ "max_level": 45,
+ "min_damage": 36,
+ "max_damage": 161,
+ "damage_increment": 2.25,
+ "min_aoe": 4,
+ "max_aoe": 8,
+ "aoe_increment": 0.1
+ },
+ {
+ "id": "lava_bomb_ter",
+ "type": "SPELL",
+ "name": { "str": "Lava Bomb Terrain" },
+ "description": "This is a sub spell for the Lava Bomb spell.",
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "effect": "ter_transform",
+ "effect_str": "lava_bomb",
+ "max_level": 45,
+ "min_aoe": 0,
+ "max_aoe": 3,
+ "aoe_increment": 0.15,
+ "valid_targets": [ "hostile", "ally", "self", "ground" ]
+ },
+ {
+ "id": "lava_bomb_main",
+ "//": "The main part of the spell that causes all of the side effects.",
+ "type": "SPELL",
+ "name": { "str": "Lava Bomb" },
+ "description": "You tear up the ground beneath you to fire a lava bomb: a globe of lava surrounded by hot, solid rock. It shatters upon impact, spraying shards of rock and lava everywhere.",
+ "effect": "projectile_attack",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "damage_type": "bash",
+ "max_level": 45,
+ "difficulty": 12,
+ "min_damage": 65,
+ "max_damage": 255,
+ "damage_increment": 4,
+ "min_range": 9,
+ "max_range": 18,
+ "range_increment": 0.2,
+ "base_casting_time": 350,
+ "base_energy_cost": 1000,
+ "energy_source": "MANA",
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ],
+ "extra_effects": [ { "id": "lava_bomb_shrapnel" }, { "id": "lava_bomb_heat" }, { "id": "lava_bomb_ter" } ]
+ },
+ {
+ "id": "earthshaper_stoneskin",
+ "type": "SPELL",
+ "name": { "str": "Stoneskin" },
+ "description": "Envelops your entire body in armor formed from living rock, encumbering yet protective.",
+ "valid_targets": [ "self" ],
+ "effect": "spawn_item",
+ "effect_str": "aura_stoneskin",
+ "flags": [ "SOMATIC", "LOUD", "NO_EXPLOSION_VFX" ],
+ "spell_class": "EARTHSHAPER",
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "base_casting_time": 200,
+ "base_energy_cost": 200,
+ "max_level": 30,
+ "min_damage": 1,
+ "max_damage": 1,
+ "min_duration": 400000,
+ "max_duration": 1000000,
+ "duration_increment": 20000
+ },
+ {
+ "id": "earthshaper_pillar",
+ "type": "SPELL",
+ "name": { "str": "Pillar of Stone" },
+ "description": "Drawing upon the surrounding earth, you form a pillar of solid rock. Experience will make the task easier, and less disruptive to the surrounding area.",
+ "valid_targets": [ "ground" ],
+ "effect": "ter_transform",
+ "effect_str": "earthshaper_pillar",
+ "extra_effects": [ { "id": "earthshaper_pillar_side_effect" } ],
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ],
+ "spell_class": "EARTHSHAPER",
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "base_casting_time": 30000,
+ "final_casting_time": 6000,
+ "casting_time_increment": -2400,
+ "base_energy_cost": 500,
+ "max_level": 10,
+ "min_range": 5,
+ "max_range": 8,
+ "range_increment": 0.3
+ },
+ {
+ "id": "earthshaper_pillar_side_effect",
+ "type": "SPELL",
+ "name": { "str": "Pillar Side Effect" },
+ "description": "Bash effect that follows, levels reduce damage and AoE.",
+ "valid_targets": [ "ground" ],
+ "effect": "bash",
+ "flags": [ "IGNORE_WALLS", "SILENT", "NO_EXPLOSION_VFX" ],
+ "max_level": 10,
+ "min_damage": 80,
+ "max_damage": 20,
+ "damage_increment": -6,
+ "min_aoe": 6,
+ "max_aoe": 1,
+ "aoe_increment": -0.5
+ },
+ {
+ "id": "rock_tomb",
+ "type": "SPELL",
+ "name": { "str": "Rock Tomb" },
+ "description": "You tear up the ground beneath you to throw a medium boulder. It shatters upon impact, scattering rocks and debris everywhere.",
+ "effect": "projectile_attack",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "damage_type": "bash",
+ "max_level": 27,
+ "difficulty": 6,
+ "min_damage": 51,
+ "max_damage": 105,
+ "damage_increment": 2,
+ "min_range": 9,
+ "max_range": 18,
+ "range_increment": 0.3,
+ "min_aoe": 1,
+ "max_aoe": 4,
+ "aoe_increment": 0.5,
+ "base_casting_time": 300,
+ "base_energy_cost": 600,
+ "energy_source": "MANA",
+ "flags": [ "SOMATIC", "LOUD", "NO_HANDS" ]
+ },
+ {
+ "id": "meteor",
+ "type": "SPELL",
+ "name": { "str": "Meteor" },
+ "description": "You summon a small meteorite to fall down on your foes.",
+ "effect": "projectile_attack",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "damage_type": "bash",
+ "max_level": 50,
+ "difficulty": 20,
+ "min_damage": 100,
+ "max_damage": 600,
+ "damage_increment": 5,
+ "min_range": 10,
+ "max_range": 60,
+ "range_increment": 1,
+ "min_aoe": 5,
+ "max_aoe": 30,
+ "aoe_increment": 0.5,
+ "base_casting_time": 1000,
+ "base_energy_cost": 2000,
+ "energy_source": "MANA",
+ "flags": [ "CONCENTRATE", "SOMATIC", "LOUD", "NO_HANDS" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/item_only.json b/data/mods/Magical_Nights/Spells/item_only.json
new file mode 100644
index 000000000000..4efb824ec4da
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/item_only.json
@@ -0,0 +1,108 @@
+[
+ {
+ "id": "twisted_restore",
+ "type": "SPELL",
+ "name": { "str": "Twisted Restoration" },
+ "//": "Used for potion of Twisted Restoration, not castable",
+ "description": "This spell overclocks your heart, generating new flesh and muscle. It is unwise to use this in immediate danger, and may be fatal if done in critical condition.",
+ "valid_targets": [ "self" ],
+ "flags": [ "SILENT", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "max_level": 1,
+ "min_damage": 10,
+ "max_damage": 10,
+ "damage_increment": 0,
+ "damage_type": "bio",
+ "difficulty": 0,
+ "spell_class": "NONE",
+ "effect": "target_attack",
+ "energy_source": "HP",
+ "base_casting_time": 30000,
+ "base_energy_cost": 2,
+ "extra_effects": [
+ { "id": "light_healing" },
+ { "id": "pain_damage" },
+ { "id": "pain_damage" },
+ { "id": "stamina_damage" },
+ { "id": "stamina_damage" },
+ { "id": "stamina_damage" }
+ ]
+ },
+ {
+ "id": "twisted_restore_improved",
+ "type": "SPELL",
+ "name": { "str": "Improved Twisted Restoration" },
+ "//": "Used for Animist-exclusive potion, not castable",
+ "description": "This spell overclocks your heart, generating new flesh and muscle. It is unwise to use this in immediate danger, and may be fatal if done in critical condition. Improved brewing mitigates the strain of the spell.",
+ "valid_targets": [ "self" ],
+ "flags": [ "SILENT", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "max_level": 1,
+ "min_damage": 8,
+ "max_damage": 8,
+ "damage_increment": 0,
+ "damage_type": "bio",
+ "difficulty": 0,
+ "spell_class": "NONE",
+ "effect": "target_attack",
+ "energy_source": "HP",
+ "base_casting_time": 12000,
+ "base_energy_cost": 2,
+ "extra_effects": [ { "id": "light_healing" }, { "id": "pain_damage" }, { "id": "stamina_damage" }, { "id": "stamina_damage" } ]
+ },
+ {
+ "id": "conj_throwing_blade1",
+ "type": "SPELL",
+ "name": { "str": "Conjure Throwing Blade I" },
+ "description": "conjures 3 throwing knives",
+ "valid_targets": [ "self" ],
+ "effect": "spawn_item",
+ "effect_str": "throwing_knife",
+ "message": "You activate your ring and three throwing knives appear, ready to throw!",
+ "spell_class": "NONE",
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "max_level": 1,
+ "min_damage": 3,
+ "max_damage": 3,
+ "min_duration": 1500,
+ "max_duration": 1500,
+ "base_casting_time": 20
+ },
+ {
+ "id": "potion_recover_mana",
+ "type": "SPELL",
+ "name": { "str": "Recover Mana" },
+ "description": "You regain mana.",
+ "valid_targets": [ "self" ],
+ "min_damage": 250,
+ "damage_increment": 50,
+ "max_damage": 3000,
+ "max_level": 53,
+ "effect": "recover_energy",
+ "effect_str": "MANA",
+ "spell_class": "NONE",
+ "message": "You start regenerating mana!",
+ "energy_source": "MANA",
+ "base_energy_cost": 0,
+ "energy_increment": 0,
+ "final_energy_cost": 0,
+ "flags": [ "SILENT", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "difficulty": 3
+ },
+ {
+ "id": "mana_doping",
+ "type": "SPELL",
+ "name": { "str": "Pain" },
+ "description": "Increases pain",
+ "valid_targets": [ "self" ],
+ "flags": [ "SILENT", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "//": "Listed as a recover energy effect with a negative modifier that decreases with each level of the spell, which makes it cause damage instead.",
+ "min_damage": -25,
+ "max_damage": -225,
+ "damage_increment": -50,
+ "max_level": 10,
+ "effect": "recover_energy",
+ "effect_str": "PAIN",
+ "spell_class": "NONE",
+ "message": "Your veins feel like they are on fire!\nYou start regenerating mana!",
+ "extra_effects": [ { "id": "potion_recover_mana" } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/kelvinist.json b/data/mods/Magical_Nights/Spells/kelvinist.json
new file mode 100644
index 000000000000..48e7f68d2ffb
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/kelvinist.json
@@ -0,0 +1,411 @@
+[
+ {
+ "id": "point_flare",
+ "type": "SPELL",
+ "name": { "str": "Point Flare" },
+ "description": "Causes an intense heat at the location, damaging the target.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "CONCENTRATE", "SOMATIC", "LOUD", "NO_LEGS" ],
+ "effect": "target_attack",
+ "damage_type": "fire",
+ "min_damage": 38,
+ "damage_increment": 4,
+ "max_damage": 142,
+ "min_range": 6,
+ "range_increment": 0.5,
+ "max_range": 20,
+ "base_energy_cost": 75,
+ "spell_class": "KELVINIST",
+ "difficulty": 4,
+ "max_level": 22,
+ "base_casting_time": 300,
+ "energy_source": "MANA"
+ },
+ {
+ "id": "create_lighter",
+ "type": "SPELL",
+ "name": { "str": "Finger Firelighter" },
+ "description": "Summons a small flame that does not burn you, but you can use it to light things on fire. It seems to need you to have some intent to light things on fire, because you are able to put it in your pocket with no issue.",
+ "valid_targets": [ "self" ],
+ "flags": [ "PERMANENT", "NO_LEGS", "CONCENTRATE" ],
+ "effect": "spawn_item",
+ "effect_str": "finger_firelighter",
+ "min_damage": 1,
+ "max_damage": 1,
+ "duration_increment": 1,
+ "spell_class": "KELVINIST",
+ "energy_source": "MANA",
+ "base_casting_time": 250,
+ "base_energy_cost": 65,
+ "difficulty": 0
+ },
+ {
+ "id": "ice_spike",
+ "type": "SPELL",
+ "name": { "str": "Ice Spike" },
+ "description": "Causes jagged icicles to form in the air above the target, falling and damaging it.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "CONCENTRATE", "SOMATIC", "LOUD", "NO_LEGS" ],
+ "effect": "target_attack",
+ "damage_type": "cold",
+ "min_damage": 57,
+ "max_damage": 177,
+ "damage_increment": 3.5,
+ "min_range": 8,
+ "max_range": 22,
+ "range_increment": 0.6,
+ "max_level": 30,
+ "difficulty": 6,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 200,
+ "energy_source": "MANA",
+ "base_energy_cost": 100
+ },
+ {
+ "id": "fireball",
+ "type": "SPELL",
+ "name": { "str": "Fireball" },
+ "description": "You hurl a pea-sized glowing orb that when reaches its target or an obstacle produces a pressure-less blast of searing heat.",
+ "effect": "projectile_attack",
+ "valid_targets": [ "self", "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS" ],
+ "max_level": 30,
+ "min_damage": 20,
+ "max_damage": 80,
+ "damage_increment": 2,
+ "min_aoe": 4,
+ "max_aoe": 8,
+ "aoe_increment": 0.1,
+ "min_range": 13,
+ "max_range": 37,
+ "range_increment": 1,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 200,
+ "base_energy_cost": 350,
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "damage_type": "fire"
+ },
+ {
+ "id": "cone_cold",
+ "type": "SPELL",
+ "name": { "str": "Cone of Cold" },
+ "description": "You blast a cone of frigid air toward the target.",
+ "effect": "cone_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_HANDS", "NO_LEGS" ],
+ "max_level": 30,
+ "min_damage": 20,
+ "max_damage": 80,
+ "damage_increment": 2,
+ "min_aoe": 40,
+ "max_aoe": 100,
+ "aoe_increment": 1.4,
+ "min_range": 13,
+ "max_range": 37,
+ "range_increment": 1,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 200,
+ "base_energy_cost": 350,
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "field_id": "fd_cold_air2",
+ "min_field_intensity": 2,
+ "max_field_intensity": 6,
+ "//": "Look, this isn't technically using the same system as the rest of the stat adjustments, but field intensity is something I probably shouldn't fuck with too much.",
+ "field_intensity_increment": 0.5,
+ "damage_type": "cold"
+ },
+ {
+ "id": "burning_hands",
+ "type": "SPELL",
+ "name": { "str": "Burning Hands" },
+ "description": "You're pretty sure you saw this in a game somewhere. You fire a short-range cone of fire.",
+ "effect": "cone_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_HANDS", "NO_LEGS" ],
+ "max_level": 30,
+ "min_damage": 20,
+ "max_damage": 140,
+ "damage_increment": 4,
+ "min_range": 5,
+ "max_range": 10,
+ "range_increment": 0.25,
+ "min_aoe": 62,
+ "max_aoe": 127,
+ "aoe_increment": 5,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "damage_type": "fire"
+ },
+ {
+ "id": "frost_spray",
+ "type": "SPELL",
+ "name": { "str": "Frost Spray" },
+ "description": "You're pretty sure you saw this in a game somewhere. You fire a short-range cone of ice and cold.",
+ "effect": "cone_attack",
+ "effect_str": "cold",
+ "affected_body_parts": [ "torso" ],
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_HANDS", "NO_LEGS" ],
+ "max_level": 30,
+ "min_damage": 20,
+ "max_damage": 140,
+ "damage_increment": 4,
+ "min_range": 5,
+ "max_range": 10,
+ "range_increment": 0.25,
+ "min_aoe": 62,
+ "max_aoe": 127,
+ "aoe_increment": 5,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "damage_type": "cold"
+ },
+ {
+ "id": "chilling_touch",
+ "type": "SPELL",
+ "name": { "str": "Chilling Touch" },
+ "description": "Freezes the touched target with intense cold.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "effect": "target_attack",
+ "effect_str": "cold",
+ "affected_body_parts": [ "torso" ],
+ "damage_type": "cold",
+ "min_damage": 18,
+ "damage_increment": 4,
+ "max_damage": 75,
+ "min_range": 1,
+ "max_range": 1,
+ "base_energy_cost": 50,
+ "spell_class": "KELVINIST",
+ "difficulty": 1,
+ "max_level": 15,
+ "base_casting_time": 100,
+ "energy_source": "MANA"
+ },
+ {
+ "id": "glide_ice",
+ "type": "SPELL",
+ "name": { "str": "Glide on Ice" },
+ "description": "Encases your feet in a magical coating of ice, allowing you to glide along smooth surfaces faster.",
+ "valid_targets": [ "none" ],
+ "flags": [ "VERBAL", "NO_HANDS", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "ice_gliders",
+ "energy_source": "MANA",
+ "spell_class": "KELVINIST",
+ "difficulty": 2,
+ "max_level": 30,
+ "base_casting_time": 650,
+ "base_energy_cost": 100,
+ "min_duration": 400000,
+ "max_duration": 1000000,
+ "duration_increment": 20000
+ },
+ {
+ "id": "hoary_blast",
+ "type": "SPELL",
+ "name": { "str": "Hoary Blast" },
+ "description": "You project a glowing white crystal of ice and it explodes on impact into a blossom of shattering cold.",
+ "effect": "projectile_attack",
+ "effect_str": "cold",
+ "affected_body_parts": [ "torso" ],
+ "valid_targets": [ "self", "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS" ],
+ "max_level": 30,
+ "min_damage": 20,
+ "max_damage": 80,
+ "damage_increment": 2,
+ "min_aoe": 4,
+ "max_aoe": 9,
+ "aoe_increment": 0.1,
+ "min_range": 13,
+ "max_range": 37,
+ "range_increment": 1,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 200,
+ "base_energy_cost": 350,
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "damage_type": "cold"
+ },
+ {
+ "id": "ice_shield",
+ "type": "SPELL",
+ "name": { "str": "Ice Shield" },
+ "description": "Creates a magical shield of ice on your arm, you can defend yourself with it in melee combat and use it to bash.",
+ "valid_targets": [ "none" ],
+ "flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "shield_ice",
+ "energy_source": "MANA",
+ "spell_class": "KELVINIST",
+ "difficulty": 2,
+ "max_level": 30,
+ "base_casting_time": 150,
+ "base_energy_cost": 100,
+ "min_duration": 550000,
+ "max_duration": 1450000,
+ "duration_increment": 30000
+ },
+ {
+ "id": "frost_armor",
+ "type": "SPELL",
+ "name": { "str": "Frost Armor" },
+ "description": "Covers you in a thin layer of magical ice to protect you from harm.",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC", "NO_EXPLOSION_VFX" ],
+ "effect": "spawn_item",
+ "effect_str": "armor_frost",
+ "affected_body_parts": [ "head", "torso", "leg_l", "leg_r", "arm_r", "arm_l" ],
+ "energy_source": "MANA",
+ "spell_class": "KELVINIST",
+ "difficulty": 3,
+ "max_level": 30,
+ "base_casting_time": 200,
+ "base_energy_cost": 550,
+ "min_duration": 550000,
+ "max_duration": 1450000,
+ "duration_increment": 30000
+ },
+ {
+ "id": "create_rune_kelvinist",
+ "type": "SPELL",
+ "name": { "str": "Kelvinist Rune" },
+ "description": "This ritual creates a small pebble attuned to Kelvinists. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_kelvinist",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "KELVINIST",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "create_flamesword",
+ "type": "SPELL",
+ "name": "Flamesword",
+ "description": "This spell ignites a wooden sword, creating a flaming blade able to burn, bruise, and chop.",
+ "valid_targets": [ "none" ],
+ "flags": [ "NO_LEGS", "SOMATIC" ],
+ "effect": "spawn_item",
+ "effect_str": "flamesword",
+ "components": "spell_components_flamesword",
+ "min_damage": 1,
+ "max_damage": 1,
+ "min_duration": 45000,
+ "max_duration": 105000,
+ "duration_increment": 6000,
+ "max_level": 10,
+ "spell_class": "KELVINIST",
+ "energy_source": "MANA",
+ "base_casting_time": 250,
+ "base_energy_cost": 300,
+ "difficulty": 4
+ },
+ {
+ "id": "flamebreath",
+ "type": "SPELL",
+ "name": { "str": "Flamebreath" },
+ "description": "This spell ignites dust scattered in the air, creating a cone of flame. The hot ashes can cling to targets, causing additional burns over time.",
+ "effect": "cone_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "CONCENTRATE", "NO_HANDS", "NO_LEGS" ],
+ "//": "missing flag: IGNITE_FLAMMABLE",
+ "components": "spell_components_flamebreath",
+ "max_level": 10,
+ "min_damage": 20,
+ "max_damage": 40,
+ "damage_increment": 2,
+ "min_dot": 2,
+ "max_dot": 5,
+ "dot_increment": 0.3,
+ "min_duration": 550,
+ "max_duration": 1150,
+ "duration_increment": 60,
+ "min_range": 8,
+ "max_range": 13,
+ "range_increment": 0.2,
+ "min_aoe": 38,
+ "max_aoe": 53,
+ "aoe_increment": 5,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "difficulty": 5,
+ "damage_type": "fire"
+ },
+ {
+ "id": "fire_storm",
+ "type": "SPELL",
+ "name": { "str": "Fire Storm" },
+ "description": "You call the power of the scorching summer to roast the earth. Several fireballs fly from your finger tips to strike the target.",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "flags": [ "CONCENTRATE", "LOUD", "SOMATIC", "NO_LEGS" ],
+ "min_aoe": 1,
+ "max_aoe": 3,
+ "aoe_increment": 0.05,
+ "max_level": 52,
+ "min_damage": 41,
+ "max_damage": 249,
+ "min_range": 8,
+ "max_range": 14,
+ "range_increment": 0.1,
+ "damage_increment": 4,
+ "difficulty": 20,
+ "spell_class": "KELVINIST",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 300,
+ "damage_type": "fire",
+ "effect": "projectile_attack",
+ "extra_effects": [ { "id": "fireball" }, { "id": "fireball" }, { "id": "fireball" } ]
+ },
+ {
+ "id": "ice_storm",
+ "type": "SPELL",
+ "name": { "str": "Ice Storm" },
+ "description": "You call the power of the frigid winter to freeze the earth. Several ice crystals fly from your finger tips to strike the target.",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "flags": [ "CONCENTRATE", "LOUD", "SOMATIC", "NO_LEGS" ],
+ "min_aoe": 1,
+ "max_aoe": 3,
+ "aoe_increment": 0.05,
+ "max_level": 52,
+ "min_damage": 41,
+ "max_damage": 249,
+ "min_range": 8,
+ "max_range": 14,
+ "range_increment": 0.1,
+ "damage_increment": 4,
+ "difficulty": 20,
+ "spell_class": "KELVINIST",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 300,
+ "damage_type": "cold",
+ "effect": "projectile_attack",
+ "extra_effects": [ { "id": "hoary_blast" }, { "id": "hoary_blast" }, { "id": "hoary_blast" } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/lizardfolk_shaman.json b/data/mods/Magical_Nights/Spells/lizardfolk_shaman.json
new file mode 100644
index 000000000000..3138872569dc
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/lizardfolk_shaman.json
@@ -0,0 +1,41 @@
+[
+ {
+ "type": "SPELL",
+ "id": "spell_summon_crocodile",
+ "name": "Summon Crocodile",
+ "description": "Summons a permanent crocodile.",
+ "flags": [ "HOSTILE_SUMMON", "PERMANENT", "NO_EXPLOSION_VFX" ],
+ "valid_targets": [ "ground" ],
+ "base_casting_time": 200,
+ "min_damage": 1,
+ "max_damage": 1,
+ "min_aoe": 2,
+ "max_aoe": 2,
+ "message": "The shaman summons a crocodile!",
+ "effect": "summon",
+ "effect_str": "mon_crocodile"
+ },
+ {
+ "type": "SPELL",
+ "id": "spell_shaman_base",
+ "name": "an ancient reptilian spell",
+ "description": "Causes one of the shaman spells to be cast.",
+ "valid_targets": [ "hostile", "ground" ],
+ "effect": "none",
+ "base_casting_time": 100,
+ "flags": [ "WONDER", "NO_EXPLOSION_VFX" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "message": "",
+ "extra_effects": [
+ { "id": "druid_veggrasp" },
+ { "id": "druid_veggrasp" },
+ { "id": "druid_veggrasp" },
+ { "id": "druid_veggrasp" },
+ { "id": "light_healing", "hit_self": true },
+ { "id": "light_healing", "hit_self": true },
+ { "id": "light_healing", "hit_self": true },
+ { "id": "spell_summon_crocodile" }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/magus.json b/data/mods/Magical_Nights/Spells/magus.json
new file mode 100644
index 000000000000..98ece8225988
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/magus.json
@@ -0,0 +1,278 @@
+[
+ {
+ "id": "magic_missile",
+ "type": "SPELL",
+ "name": { "str": "Magic Missile" },
+ "description": "I cast Magic Missile at the darkness!",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "SILENT" ],
+ "min_damage": 10,
+ "damage_increment": 1.5,
+ "damage_type": "none",
+ "max_damage": 39,
+ "min_range": 13,
+ "range_increment": 0.8,
+ "max_range": 35,
+ "base_energy_cost": 50,
+ "spell_class": "MAGUS",
+ "difficulty": 1,
+ "max_level": 22,
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "effect": "target_attack"
+ },
+ {
+ "id": "phase_door",
+ "type": "SPELL",
+ "name": { "str": "Phase Door" },
+ "description": "Teleports you in a random direction a short distance.",
+ "effect": "teleport_random",
+ "valid_targets": [ "none" ],
+ "flags": [ "SOMATIC", "SILENT", "NO_LEGS", "NO_HANDS" ],
+ "min_range": 4,
+ "max_range": 7,
+ "range_increment": 0.1,
+ "min_aoe": 4,
+ "max_aoe": 8,
+ "aoe_increment": 0.2,
+ "max_level": 15,
+ "difficulty": 2,
+ "spell_class": "MAGUS",
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "base_energy_cost": 100
+ },
+ {
+ "id": "gravity_well",
+ "type": "SPELL",
+ "name": { "str": "Gravity Well" },
+ "description": "Summons a well of gravity with the epicenter at the location. Deals bashing damage to all creatures in the affected area.",
+ "effect": "target_attack",
+ "valid_targets": [ "self", "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "CONCENTRATE" ],
+ "min_damage": 14,
+ "max_damage": 90,
+ "damage_increment": 2.5,
+ "damage_type": "bash",
+ "min_range": 9,
+ "max_range": 26,
+ "range_increment": 0.5,
+ "min_aoe": 3,
+ "max_aoe": 11,
+ "aoe_increment": 0.25,
+ "max_level": 30,
+ "difficulty": 8,
+ "spell_class": "MAGUS",
+ "base_casting_time": 600,
+ "energy_source": "MANA",
+ "base_energy_cost": 350
+ },
+ {
+ "id": "magus_mana_blast",
+ "type": "SPELL",
+ "name": { "str": "Mana Blast" },
+ "description": "A blast of concentrated magical power that obliterates a large area.",
+ "valid_targets": [ "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "effect": "projectile_attack",
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_casting_time": 150,
+ "base_energy_cost": 200,
+ "difficulty": 5,
+ "max_level": 30,
+ "min_damage": 21,
+ "max_damage": 111,
+ "damage_increment": 3,
+ "damage_type": "none",
+ "min_aoe": 3,
+ "max_aoe": 7,
+ "aoe_increment": 0.25,
+ "min_range": 12,
+ "max_range": 37,
+ "range_increment": 1
+ },
+ {
+ "id": "magus_mana_bolt",
+ "type": "SPELL",
+ "name": { "str": "Mana Bolt" },
+ "description": "A bolt of magical power that only damages your foes.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "SOMATIC", "NO_LEGS" ],
+ "effect": "projectile_attack",
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "difficulty": 5,
+ "max_level": 30,
+ "min_damage": 57,
+ "max_damage": 217,
+ "damage_increment": 5,
+ "damage_type": "none",
+ "min_range": 17,
+ "max_range": 57,
+ "range_increment": 1.5
+ },
+ {
+ "id": "magus_haste",
+ "type": "SPELL",
+ "name": { "str": "Haste" },
+ "description": "This spell gives you an enormous boost of speed lasting a short period of time.",
+ "valid_targets": [ "self" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "effect": "target_attack",
+ "effect_str": "haste",
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "base_casting_time": 200,
+ "base_energy_cost": 300,
+ "max_level": 30,
+ "min_duration": 96000,
+ "max_duration": 276000,
+ "duration_increment": 6000
+ },
+ {
+ "id": "magus_mana_beam",
+ "type": "SPELL",
+ "name": { "str": "Mana Beam" },
+ "description": "A beam of focused magical power that damages any foes in its path.",
+ "valid_targets": [ "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "LOUD" ],
+ "effect": "line_attack",
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_casting_time": 150,
+ "base_energy_cost": 200,
+ "difficulty": 4,
+ "max_level": 30,
+ "min_damage": 18,
+ "max_damage": 108,
+ "damage_increment": 3,
+ "damage_type": "none",
+ "min_aoe": 1,
+ "max_aoe": 1,
+ "min_range": 12,
+ "max_range": 37,
+ "range_increment": 1
+ },
+ {
+ "id": "magus_escape",
+ "type": "SPELL",
+ "name": { "str": "Escape" },
+ "description": "Teleports you in a random direction a medium distance, to help escape your foes in dangerous situations.",
+ "effect": "teleport_random",
+ "valid_targets": [ "none" ],
+ "flags": [ "SOMATIC", "SILENT", "NO_LEGS", "NO_HANDS" ],
+ "min_aoe": 9,
+ "max_aoe": 19,
+ "aoe_increment": 0.25,
+ "min_range": 33,
+ "max_range": 60,
+ "range_increment": 0.5,
+ "max_level": 30,
+ "difficulty": 5,
+ "spell_class": "MAGUS",
+ "base_casting_time": 100,
+ "energy_source": "MANA",
+ "base_energy_cost": 250
+ },
+ {
+ "id": "create_rune_magus",
+ "type": "SPELL",
+ "name": { "str": "Magus Rune" },
+ "description": "This ritual creates a small pebble attuned to Magi. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_magus",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "cats_grace",
+ "type": "SPELL",
+ "name": { "str": "Cat's Grace" },
+ "description": "You become more graceful, agile, and coordinated.",
+ "valid_targets": [ "self" ],
+ "min_duration": 1410000,
+ "max_duration": 4110000,
+ "duration_increment": 60000,
+ "max_level": 45,
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 1000,
+ "difficulty": 5,
+ "flags": [ "NO_HANDS", "SOMATIC", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "cats_grace"
+ },
+ {
+ "id": "eagles_sight",
+ "type": "SPELL",
+ "name": { "str": "Eagle's Sight" },
+ "description": "You gain the perception of an eagle.",
+ "valid_targets": [ "self" ],
+ "min_duration": 1410000,
+ "max_duration": 4110000,
+ "duration_increment": 60000,
+ "max_level": 45,
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 1000,
+ "difficulty": 5,
+ "flags": [ "NO_HANDS", "SOMATIC", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "eagles_sight"
+ },
+ {
+ "id": "ogres_strength",
+ "type": "SPELL",
+ "name": { "str": "Ogre's Strength" },
+ "description": "You gain the strength of an ogre.",
+ "valid_targets": [ "self" ],
+ "min_duration": 1410000,
+ "max_duration": 4110000,
+ "duration_increment": 60000,
+ "max_level": 45,
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 1000,
+ "difficulty": 5,
+ "flags": [ "NO_HANDS", "SOMATIC", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "ogres_strength"
+ },
+ {
+ "id": "foxs_cunning",
+ "type": "SPELL",
+ "name": { "str": "Fox's Cunning" },
+ "description": "You become wily like a fox.",
+ "valid_targets": [ "self" ],
+ "min_duration": 1410000,
+ "max_duration": 4110000,
+ "duration_increment": 60000,
+ "max_level": 45,
+ "spell_class": "MAGUS",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 1000,
+ "difficulty": 5,
+ "flags": [ "NO_HANDS", "SOMATIC", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "foxs_cunning"
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/manatouched.json b/data/mods/Magical_Nights/Spells/manatouched.json
new file mode 100644
index 000000000000..d29e751fc2fa
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/manatouched.json
@@ -0,0 +1,47 @@
+[
+ {
+ "id": "manatouched_crystal",
+ "type": "SPELL",
+ "name": { "str": "Crystallize Mana" },
+ "description": "Crystallizes mana into solid form. Your physiological changes have made this spell much more efficient and easier to cast.",
+ "valid_targets": [ "self" ],
+ "spell_class": "MANA_CRYST_MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "CONCENTRATE", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "max_level": 5,
+ "difficulty": 3,
+ "min_damage": 4,
+ "max_damage": 4,
+ "duration_increment": 1,
+ "effect": "spawn_item",
+ "effect_str": "crystallized_mana",
+ "energy_source": "MANA",
+ "base_energy_cost": 1000,
+ "final_energy_cost": 1000,
+ "base_casting_time": 600000,
+ "final_casting_time": 600000,
+ "extra_effects": [ { "id": "mana_fatigue" } ]
+ },
+ {
+ "id": "manatouched_seeker_bolts",
+ "type": "SPELL",
+ "name": { "str": "Seeker Bolts" },
+ "effect": "projectile_attack",
+ "description": "Fires bolts of mana from your fingertips that home in on randomly selected targets in range.",
+ "valid_targets": [ "hostile" ],
+ "spell_class": "MANA_SEEKER_BOLTS",
+ "min_damage": 15,
+ "max_damage": 36,
+ "damage_increment": 1,
+ "max_level": 18,
+ "min_range": 11,
+ "max_range": 23,
+ "range_increment": 0.5,
+ "energy_source": "MANA",
+ "base_energy_cost": 250,
+ "base_casting_time": 85,
+ "final_casting_time": 85,
+ "sound_description": "a zing",
+ "flags": [ "RANDOM_TARGET", "SOMATIC", "NO_LEGS" ],
+ "extra_effects": [ { "id": "magic_missile" }, { "id": "magic_missile" }, { "id": "magic_missile" }, { "id": "magic_missile" } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/monsterspells.json b/data/mods/Magical_Nights/Spells/monsterspells.json
new file mode 100644
index 000000000000..e0a9d2368449
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/monsterspells.json
@@ -0,0 +1,193 @@
+[
+ {
+ "id": "blood_suck",
+ "type": "SPELL",
+ "name": { "str": "Blood Suck" },
+ "description": "Sucks blood from one foe.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "damage_type": "stab",
+ "min_damage": 5,
+ "max_damage": 10,
+ "damage_increment": 1,
+ "max_level": 5,
+ "min_range": 1,
+ "max_range": 2,
+ "range_increment": 0.2,
+ "effect": "projectile_attack",
+ "extra_effects": [ { "id": "light_healing", "hit_self": true } ]
+ },
+ {
+ "id": "bear_trap",
+ "type": "SPELL",
+ "name": "Bear Trap",
+ "description": "A trap that summons bears! Not what you were expecting, is it?",
+ "valid_targets": [ "ground" ],
+ "flags": [ "HOSTILE_SUMMON", "LOUD", "NO_EXPLOSION_VFX" ],
+ "min_damage": 3,
+ "max_damage": 3,
+ "min_aoe": 5,
+ "max_aoe": 5,
+ "sound_description": "\"It's a trap!\"",
+ "min_duration": 30000,
+ "max_duration": 30000,
+ "sound_type": "speech",
+ "effect": "summon",
+ "effect_str": "mon_bear"
+ },
+ {
+ "id": "rocket_punch",
+ "type": "SPELL",
+ "name": "Rocket Punch",
+ "description": "Ejects giant fist from arm.",
+ "valid_targets": [ "hostile" ],
+ "flags": [ "NO_LEGS" ],
+ "damage_type": "bash",
+ "min_damage": 30,
+ "max_damage": 40,
+ "damage_increment": 2,
+ "max_level": 5,
+ "min_range": 1,
+ "max_range": 2,
+ "range_increment": 0.2,
+ "effect": "projectile_attack"
+ },
+ {
+ "id": "gas_attack",
+ "type": "SPELL",
+ "name": "Gas Attack",
+ "description": "Spreads toxic gas around itself.",
+ "valid_targets": [ "self", "hostile", "ground" ],
+ "flags": [ "NO_HANDS", "NO_LEGS" ],
+ "damage_type": "bio",
+ "min_damage": 1,
+ "max_damage": 1,
+ "max_level": 5,
+ "min_range": 1,
+ "max_range": 3,
+ "range_increment": 0.2,
+ "effect": "target_attack",
+ "field_id": "fd_toxic_gas",
+ "field_chance": 10,
+ "min_field_intensity": 1,
+ "max_field_intensity": 1,
+ "min_duration": 1000,
+ "max_duration": 6000,
+ "duration_increment": 1000,
+ "min_aoe": 1,
+ "max_aoe": 2,
+ "aoe_increment": 0.2
+ },
+ {
+ "type": "SPELL",
+ "id": "mon_demon_fireball",
+ "name": "Demon Fireball",
+ "description": "This is a monster only spell.",
+ "valid_targets": [ "hostile", "ground", "ally", "self" ],
+ "min_damage": 15,
+ "max_damage": 15,
+ "min_range": 12,
+ "max_range": 12,
+ "min_aoe": 2,
+ "max_aoe": 2,
+ "base_casting_time": 120,
+ "effect": "projectile_attack",
+ "damage_type": "fire"
+ },
+ {
+ "type": "SPELL",
+ "id": "mon_summon_demon_spiderlings",
+ "name": "Summon Demon Spiderlings",
+ "description": "Summons 4 permanent demon spiderlings.",
+ "flags": [ "HOSTILE_SUMMON", "PERMANENT", "NO_EXPLOSION_VFX" ],
+ "valid_targets": [ "ground" ],
+ "min_damage": 4,
+ "max_damage": 4,
+ "min_range": 5,
+ "max_range": 5,
+ "min_aoe": 3,
+ "max_aoe": 3,
+ "base_casting_time": 160,
+ "effect": "summon",
+ "effect_str": "mon_demon_spiderling"
+ },
+ {
+ "id": "monster_burning_hands",
+ "type": "SPELL",
+ "name": { "str": "Burning Hands" },
+ "description": "Separated from the player burning hands, because I'm not trying to accidentally buff Demon Spiders again.",
+ "effect": "cone_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "VERBAL" ],
+ "max_level": 20,
+ "min_damage": 8,
+ "max_damage": 65,
+ "damage_increment": 4,
+ "min_range": 3,
+ "max_range": 5,
+ "range_increment": 0.25,
+ "min_aoe": 25,
+ "max_aoe": 60,
+ "aoe_increment": 5,
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "damage_type": "fire"
+ },
+ {
+ "id": "krab_gaze",
+ "type": "SPELL",
+ "name": { "str": "Krabgek Gaze" },
+ "description": "Carcinization ray, go! (Krabgek version of Necrotic Gaze for balance purposes)",
+ "valid_targets": [ "hostile" ],
+ "effect": "target_attack",
+ "energy_source": "HP",
+ "flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC" ],
+ "min_damage": 20,
+ "max_damage": 310,
+ "damage_increment": 6,
+ "min_range": 5,
+ "max_range": 10,
+ "range_increment": 0.1,
+ "max_level": 37,
+ "base_casting_time": 100,
+ "base_energy_cost": 2,
+ "damage_type": "bio"
+ },
+ {
+ "id": "ooze_acidicspray",
+ "type": "SPELL",
+ "name": { "str": "Ooze Acidic Spray" },
+ "description": "Someone's pudding recipe has gone *very* awry… (Monster Spell)",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "effect": "cone_attack",
+ "effect_str": "bio_acidburn",
+ "base_casting_time": 200,
+ "base_energy_cost": 200,
+ "energy_source": "MANA",
+ "max_level": 30,
+ "min_damage": 34,
+ "max_damage": 123,
+ "damage_increment": 4,
+ "damage_type": "acid",
+ "min_range": 7,
+ "max_range": 12,
+ "flags": [ "VERBAL", "NO_HANDS" ],
+ "range_increment": 0.25,
+ "min_aoe": 100,
+ "max_aoe": 165,
+ "aoe_increment": 5
+ },
+ {
+ "id": "monster_pain_split",
+ "type": "SPELL",
+ "name": { "str": "Monster Pain Split" },
+ "description": "Perfect for evening out damage on breath attacks",
+ "valid_targets": [ "self", "hostile" ],
+ "effect": "pain_split",
+ "energy_source": "MANA",
+ "flags": [ "SOMATIC", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX", "NO_HANDS" ],
+ "difficulty": 4,
+ "max_level": 1
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/stormshaper.json b/data/mods/Magical_Nights/Spells/stormshaper.json
new file mode 100644
index 000000000000..ee49468ee48f
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/stormshaper.json
@@ -0,0 +1,321 @@
+[
+ {
+ "id": "jolt",
+ "type": "SPELL",
+ "name": { "str": "Jolt" },
+ "description": "A short-ranged fan of electricity shoots from your fingers.",
+ "effect": "cone_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_LEGS" ],
+ "max_level": 30,
+ "min_damage": 19,
+ "max_damage": 139,
+ "damage_increment": 4,
+ "min_range": 5,
+ "max_range": 10,
+ "range_increment": 0.25,
+ "min_aoe": 30,
+ "max_aoe": 90,
+ "aoe_increment": 2,
+ "spell_class": "STORMSHAPER",
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "sound_description": "a crackle",
+ "damage_type": "electric"
+ },
+ {
+ "id": "lightning_bolt",
+ "type": "SPELL",
+ "name": { "str": "Lightning Bolt" },
+ "description": "The goto spell for many Stormshapers, this iconic spell does just what you expect: you shoot lightning from your fingertips. However, this lightning is more directed than most lightning, and travels in a line through most non-solid targets.",
+ "effect": "line_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_LEGS" ],
+ "max_level": 50,
+ "damage_increment": 6,
+ "min_damage": 44,
+ "max_damage": 344,
+ "min_range": 10,
+ "max_range": 18,
+ "range_increment": 0.25,
+ "difficulty": 6,
+ "min_aoe": 1,
+ "max_aoe": 1,
+ "spell_class": "STORMSHAPER",
+ "base_casting_time": 200,
+ "final_casting_time": 50,
+ "casting_time_increment": -5,
+ "base_energy_cost": 140,
+ "field_id": "fd_electricity",
+ "min_field_intensity": 1,
+ "max_field_intensity": 1,
+ "field_chance": 1,
+ "damage_type": "electric",
+ "sound_description": "a crackle",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "windstrike",
+ "type": "SPELL",
+ "name": { "str": "Windstrike" },
+ "description": "A powerful blast of wind slams into anything in front of your outstretched hand.",
+ "sprite": "fd_insecticidal_gas",
+ "effect": "cone_attack",
+ "effect_str": "downed",
+ "affected_body_parts": [ "leg_l", "leg_r" ],
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "max_level": 30,
+ "min_damage": 20,
+ "max_damage": 86,
+ "damage_increment": 2.2,
+ "min_aoe": 40,
+ "max_aoe": 100,
+ "aoe_increment": 1.4,
+ "min_range": 13,
+ "max_range": 37,
+ "range_increment": 0.85,
+ "min_duration": 1700,
+ "max_duration": 4000,
+ "duration_increment": 100,
+ "base_casting_time": 125,
+ "base_energy_cost": 285,
+ "spell_class": "STORMSHAPER",
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "sound_description": "a whoosh",
+ "damage_type": "bash"
+ },
+ {
+ "id": "windrun",
+ "type": "SPELL",
+ "name": { "str": "Windrunning" },
+ "description": "A magical wind pushes you forward as you move, easing your movements and increasing speed.",
+ "base_casting_time": 125,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "spell_class": "STORMSHAPER",
+ "difficulty": 2,
+ "effect": "spawn_item",
+ "effect_str": "windrunning_aura",
+ "affected_body_parts": [ "torso" ],
+ "valid_targets": [ "ally", "self" ],
+ "flags": [ "CONCENTRATE", "SILENT", "SOMATIC", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "max_level": 15,
+ "min_duration": 96000,
+ "max_duration": 276000,
+ "duration_increment": 6000,
+ "min_range": 9,
+ "max_range": 38,
+ "range_increment": 1
+ },
+ {
+ "id": "storm_hammer",
+ "type": "SPELL",
+ "name": { "str": "Call Stormhammer" },
+ "description": "Creates a crackling magical warhammer full of lightning to smite your foes with, and of course, smash things to bits!",
+ "valid_targets": [ "self" ],
+ "flags": [ "CONCENTRATE", "LOUD", "VERBAL", "NO_LEGS", "NO_EXPLOSION_VFX" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "stormhammer",
+ "energy_source": "MANA",
+ "spell_class": "STORMSHAPER",
+ "difficulty": 3,
+ "max_level": 30,
+ "base_casting_time": 150,
+ "base_energy_cost": 100,
+ "min_duration": 400000,
+ "max_duration": 1000000,
+ "duration_increment": 20000
+ },
+ {
+ "id": "create_rune_stormshaper",
+ "type": "SPELL",
+ "name": { "str": "Stormshaper Rune" },
+ "description": "This ritual creates a small pebble attuned to Stormshapers. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_stormshaper",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "STORMSHAPER",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "lightning_blast",
+ "type": "SPELL",
+ "name": { "str": "Lightning Blast" },
+ "description": "You fire a small concentrated ball of lightning at the target. The electricity diffuses quickly, so it doesn't do much damage, but you're able to fire off several quick ones in a row.",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "flags": [ "LOUD", "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "min_aoe": 2,
+ "max_aoe": 4,
+ "aoe_increment": 0.05,
+ "max_level": 50,
+ "min_damage": 28,
+ "max_damage": 178,
+ "min_range": 9,
+ "max_range": 21,
+ "range_increment": 0.2,
+ "damage_increment": 3,
+ "difficulty": 10,
+ "spell_class": "STORMSHAPER",
+ "energy_source": "MANA",
+ "base_casting_time": 120,
+ "final_casting_time": 25,
+ "casting_time_increment": -5,
+ "base_energy_cost": 55,
+ "damage_type": "electric",
+ "sound_description": "a crackle",
+ "effect": "projectile_attack"
+ },
+ {
+ "id": "lightning_storm",
+ "type": "SPELL",
+ "name": { "str": "Lightning Storm" },
+ "description": "You call the power of the sky to strike the earth. Several lightning blasts fire from your finger tips to strike the target.",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "flags": [ "CONCENTRATE", "LOUD", "SOMATIC", "NO_LEGS" ],
+ "min_aoe": 1,
+ "max_aoe": 3,
+ "aoe_increment": 0.05,
+ "max_level": 52,
+ "min_damage": 41,
+ "max_damage": 249,
+ "min_range": 8,
+ "max_range": 14,
+ "range_increment": 0.1,
+ "damage_increment": 4,
+ "difficulty": 20,
+ "spell_class": "STORMSHAPER",
+ "energy_source": "MANA",
+ "base_energy_cost": 500,
+ "base_casting_time": 300,
+ "damage_type": "electric",
+ "effect": "projectile_attack",
+ "extra_effects": [ { "id": "lightning_blast" }, { "id": "lightning_blast" }, { "id": "lightning_blast" } ]
+ },
+ {
+ "id": "stormshaper_ionization",
+ "type": "SPELL",
+ "name": { "str": "Ionization" },
+ "description": "By manipulating the charge in the air, you can conjure a sharp snap of lightning over a wide area. While its destructive potential is a far cry from natural lightning, the light and thunderclap produced will leave your foes reeling.",
+ "sprite": "fd_electricity",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "effect": "target_attack",
+ "extra_effects": [ { "id": "stormshaper_ionization_thunderclap" } ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "energy_source": "MANA",
+ "spell_class": "STORMSHAPER",
+ "difficulty": 8,
+ "base_casting_time": 350,
+ "final_casting_time": 140,
+ "casting_time_increment": -5,
+ "base_energy_cost": 300,
+ "max_level": 45,
+ "min_damage": 16,
+ "max_damage": 84,
+ "damage_increment": 1.5,
+ "damage_type": "electric",
+ "min_aoe": 7,
+ "max_aoe": 7,
+ "min_range": 16,
+ "max_range": 40,
+ "range_increment": 0.4,
+ "field_id": "fd_electricity",
+ "field_chance": 3,
+ "min_field_intensity": 1,
+ "max_field_intensity": 3,
+ "field_intensity_increment": 0.1,
+ "field_intensity_variance": 0.5
+ },
+ {
+ "type": "SPELL",
+ "id": "stormshaper_ionization_thunderclap",
+ "name": { "str": "Ionization Thunderclap" },
+ "description": "Adds the actual flashbang effect.",
+ "valid_targets": [ "hostile", "ground", "self", "ally" ],
+ "effect": "flashbang",
+ "flags": [ "LOUD", "NO_EXPLOSION_VFX" ],
+ "max_level": 45,
+ "min_range": 16,
+ "max_range": 40,
+ "range_increment": 0.4
+ },
+ {
+ "id": "stormshaper_wall_of_fog",
+ "type": "SPELL",
+ "name": { "str": "Wall of Fog" },
+ "description": "Draws forth a broad wall of thick fog. While the sudden force of air pressure will floor any enemies caught in it, the conjuration is otherwise harmless.",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "effect": "line_attack",
+ "effect_str": "downed",
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS" ],
+ "energy_source": "MANA",
+ "spell_class": "STORMSHAPER",
+ "difficulty": 2,
+ "base_casting_time": 125,
+ "base_energy_cost": 150,
+ "max_level": 15,
+ "min_aoe": 9,
+ "max_aoe": 19,
+ "aoe_increment": 0.5,
+ "min_range": 4,
+ "max_range": 8,
+ "range_increment": 0.2,
+ "min_duration": 650,
+ "max_duration": 1650,
+ "duration_increment": 60,
+ "field_id": "fd_fog",
+ "field_chance": 1,
+ "min_field_intensity": 3,
+ "max_field_intensity": 3,
+ "field_intensity_variance": 1
+ },
+ {
+ "id": "storm_condense_water",
+ "type": "SPELL",
+ "name": { "str": "Condense Water" },
+ "description": "Draws water forth from the air then condenses it down into usable water. Handy in situations where you just don't have reliable access to water, but have access to a method of cleaning it.",
+ "valid_targets": [ "self" ],
+ "effect": "spawn_item",
+ "effect_str": "water",
+ "flags": [ "SOMATIC", "PERMANENT", "NO_LEGS" ],
+ "energy_source": "MANA",
+ "spell_class": "STORMSHAPER",
+ "difficulty": 3,
+ "base_casting_time": 20000,
+ "base_energy_cost": 200,
+ "min_damage": 1,
+ "max_damage": 1
+ },
+ {
+ "id": "storm_condense_clean_water",
+ "type": "SPELL",
+ "name": { "str": "Condense Clean Water" },
+ "description": "Draws water forth from the air then condenses it into fully cleaned water. Takes more finesse than simply condensing normal water, but that's to be expected.",
+ "valid_targets": [ "self" ],
+ "effect": "spawn_item",
+ "effect_str": "water_clean",
+ "flags": [ "SOMATIC", "PERMANENT", "NO_LEGS" ],
+ "energy_source": "MANA",
+ "spell_class": "STORMSHAPER",
+ "difficulty": 6,
+ "base_casting_time": 45000,
+ "base_energy_cost": 450,
+ "min_damage": 1,
+ "max_damage": 1
+ }
+]
diff --git a/data/mods/Magical_Nights/Spells/technomancer.json b/data/mods/Magical_Nights/Spells/technomancer.json
new file mode 100644
index 000000000000..1c9cc93034d6
--- /dev/null
+++ b/data/mods/Magical_Nights/Spells/technomancer.json
@@ -0,0 +1,342 @@
+[
+ {
+ "id": "invisibility",
+ "type": "SPELL",
+ "name": { "str": "Invisibility" },
+ "description": "Creates a magical field that hides your visual presence to others. Colloquially known as invisibility, but without all the science mumbo jumbo.",
+ "message": "To the outside world, your body fades away and you cease to exist!",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_EXPLOSION_VFX", "NO_HANDS", "NO_LEGS", "SOMATIC" ],
+ "effect": "target_attack",
+ "effect_str": "invisibility",
+ "spell_class": "TECHNOMANCER",
+ "difficulty": 4,
+ "base_casting_time": 100,
+ "base_energy_cost": 400,
+ "energy_source": "MANA",
+ "min_duration": 50000,
+ "max_duration": 125000,
+ "duration_increment": 2500,
+ "max_level": 30
+ },
+ {
+ "id": "create_atomic_lamp",
+ "type": "SPELL",
+ "name": { "str": "Lamp" },
+ "description": "Creates a magical lamp.",
+ "valid_targets": [ "none" ],
+ "flags": [ "NO_HANDS", "NO_LEGS", "CONCENTRATE", "NO_EXPLOSION_VFX", "PERMANENT" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "magic_lamp",
+ "energy_source": "MANA",
+ "spell_class": "TECHNOMANCER",
+ "difficulty": 2,
+ "base_casting_time": 200,
+ "base_energy_cost": 750,
+ "duration_increment": 42
+ },
+ {
+ "id": "recover_bionic_power",
+ "type": "SPELL",
+ "name": { "str": "Manatricity" },
+ "description": "You have found a way to convert your spiritual energy into power you can use for your bionics.",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_LEGS", "NO_HANDS", "SOMATIC", "SILENT", "NO_EXPLOSION_VFX" ],
+ "min_damage": 250,
+ "damage_increment": 50,
+ "max_damage": 22500,
+ "base_energy_cost": 250,
+ "energy_increment": 50,
+ "final_energy_cost": 22500,
+ "max_level": 37,
+ "spell_class": "TECHNOMANCER",
+ "effect": "recover_energy",
+ "effect_str": "BIONIC",
+ "energy_source": "MANA",
+ "difficulty": 6,
+ "base_casting_time": 1000
+ },
+ {
+ "id": "create_rune_technomancer",
+ "type": "SPELL",
+ "name": { "str": "Technomancer Rune" },
+ "description": "This ritual creates a small pebble attuned to Technomancers. You can use the rune as a catalyst for recipes.",
+ "valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "rune_technomancer",
+ "base_casting_time": 5000,
+ "base_energy_cost": 5,
+ "min_duration": 1,
+ "max_duration": 2,
+ "duration_increment": 1,
+ "difficulty": 0,
+ "max_level": 0,
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "flags": [ "PERMANENT", "NO_LEGS", "NO_EXPLOSION_VFX", "NO_FAIL", "NO_HANDS" ]
+ },
+ {
+ "id": "taze",
+ "type": "SPELL",
+ "name": { "str": "Taze" },
+ "description": "This spell creates a very short range bolt of electricity to shock your foes.",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "flags": [ "NO_LEGS", "LOUD", "SOMATIC" ],
+ "effect": "projectile_attack",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "BIONIC",
+ "difficulty": 1,
+ "base_casting_time": 100,
+ "casting_time_increment": -1,
+ "final_casting_time": 70,
+ "base_energy_cost": 50,
+ "energy_increment": -1,
+ "final_energy_cost": 20,
+ "max_level": 30,
+ "damage_type": "electric",
+ "min_damage": 17,
+ "max_damage": 52,
+ "damage_increment": 1,
+ "min_range": 2,
+ "max_range": 7,
+ "range_increment": 0.2
+ },
+ {
+ "id": "quantum_tunnel_lesser",
+ "type": "SPELL",
+ "name": { "str": "Lesser Quantum Tunnel" },
+ "description": "This spell manipulates some quantum something or other to tunnel you through a short distance of space, and even matter, unfortunately there's that whole uncertainty thing as to where you come out. It leaves you a little dazed on the other side as you reorient yourself.",
+ "valid_targets": [ "none" ],
+ "flags": [ "NO_LEGS", "NO_HANDS", "SILENT", "SOMATIC" ],
+ "effect": "teleport_random",
+ "effect_str": "dazed",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "max_level": 30,
+ "base_casting_time": 100,
+ "casting_time_increment": -1,
+ "final_casting_time": 70,
+ "base_energy_cost": 100,
+ "energy_increment": -1,
+ "final_energy_cost": 70,
+ "min_aoe": 4,
+ "max_aoe": 1,
+ "aoe_increment": -0.25,
+ "min_range": 9,
+ "max_range": 19,
+ "range_increment": 0.25,
+ "min_duration": 100,
+ "max_duration": 100
+ },
+ {
+ "id": "synaptic_stimulation",
+ "type": "SPELL",
+ "name": { "str": "Synaptic Stimulation" },
+ "description": "This spell stimulates the synapses in your brain beyond normal processing speeds, giving you a large boost in mental processing capability, including enhancing your reflexes, speed, and raw intellectual power. Use responsibly!",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "effect_str": "synaptic_stim",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 5,
+ "max_level": 30,
+ "base_casting_time": 500,
+ "casting_time_increment": -2.5,
+ "final_casting_time": 425,
+ "base_energy_cost": 500,
+ "energy_increment": -5,
+ "final_energy_cost": 350,
+ "min_duration": 3300000,
+ "max_duration": 6300000,
+ "duration_increment": 100000
+ },
+ {
+ "id": "laze",
+ "type": "SPELL",
+ "name": { "str": "Laze" },
+ "description": "You concentrate and release a focused beam of photons at a target, also known as a laser.",
+ "valid_targets": [ "hostile", "ground", "ally" ],
+ "flags": [ "NO_LEGS", "LOUD", "SOMATIC" ],
+ "effect": "target_attack",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "BIONIC",
+ "difficulty": 3,
+ "max_level": 30,
+ "base_casting_time": 100,
+ "casting_time_increment": -1,
+ "final_casting_time": 70,
+ "base_energy_cost": 150,
+ "energy_increment": -2,
+ "final_energy_cost": 90,
+ "min_damage": 34,
+ "max_damage": 109,
+ "damage_increment": 2.5,
+ "damage_type": "fire",
+ "min_range": 17,
+ "max_range": 42,
+ "range_increment": 1
+ },
+ {
+ "id": "animated_blade",
+ "type": "SPELL",
+ "name": { "str": "Animated Blade" },
+ "description": "This spell conjures flying animated blades that will cut your enemies down to size. Into small pieces that is.",
+ "valid_targets": [ "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "summon",
+ "effect_str": "mon_animated_blade",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 6,
+ "max_level": 30,
+ "base_casting_time": 200,
+ "casting_time_increment": -2,
+ "final_casting_time": 140,
+ "base_energy_cost": 350,
+ "energy_increment": -2,
+ "final_energy_cost": 290,
+ "min_damage": 1,
+ "max_damage": 3,
+ "damage_increment": 0.15,
+ "min_range": 1,
+ "max_range": 7,
+ "range_increment": 0.25,
+ "min_aoe": 3,
+ "max_aoe": 3,
+ "min_duration": 400000,
+ "max_duration": 1000000,
+ "duration_increment": 20000
+ },
+ {
+ "id": "mirror_image",
+ "type": "SPELL",
+ "name": { "str": "Mirror Image" },
+ "description": "This spell manipulates light into barely tangible duplicates of a living being, a magical hologram in short.",
+ "valid_targets": [ "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "summon",
+ "effect_str": "mon_mirror_image",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 4,
+ "max_level": 30,
+ "base_casting_time": 150,
+ "casting_time_increment": -1,
+ "final_casting_time": 120,
+ "base_energy_cost": 200,
+ "energy_increment": -2,
+ "final_energy_cost": 140,
+ "min_damage": 1,
+ "max_damage": 8,
+ "damage_increment": 0.5,
+ "min_range": 8,
+ "max_range": 23,
+ "range_increment": 0.5,
+ "min_aoe": 3,
+ "max_aoe": 3,
+ "min_duration": 60000,
+ "max_duration": 120000,
+ "duration_increment": 2000
+ },
+ {
+ "id": "holographic_transposition",
+ "type": "SPELL",
+ "name": { "str": "Holographic Transposition" },
+ "description": "Allows you to swap places with a previously existing holographic image of yourself. If the universe itself can't tell you apart, who could?",
+ "valid_targets": [ "hostile", "ally" ],
+ "targeted_monster_ids": [ "mon_mirror_image", "mon_hologram" ],
+ "flags": [ "NO_LEGS", "LOUD", "NO_HANDS", "SOMATIC", "SWAP_POS", "NO_EXPLOSION_VFX" ],
+ "effect": "target_attack",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "difficulty": 3,
+ "max_level": 30,
+ "base_casting_time": 100,
+ "casting_time_increment": -1,
+ "final_casting_time": 70,
+ "base_energy_cost": 150,
+ "energy_increment": -2,
+ "final_energy_cost": 80,
+ "min_range": 35,
+ "max_range": 60,
+ "range_increment": 1
+ },
+ {
+ "id": "summon_floating_disk",
+ "type": "SPELL",
+ "name": { "str": "Summon floating disk" },
+ "description": "Summons a floating disk that is sworn to carry your burdens.",
+ "valid_targets": [ "ground" ],
+ "flags": [ "SOMATIC", "NO_LEGS", "NO_HANDS", "CONCENTRATE", "NO_EXPLOSION_VFX" ],
+ "effect": "summon_vehicle",
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "MANA",
+ "effect_str": "floating_disk",
+ "difficulty": 5,
+ "max_level": 30,
+ "base_casting_time": 120,
+ "base_energy_cost": 500,
+ "min_range": 16,
+ "max_range": 30,
+ "range_increment": 1,
+ "min_duration": 4030000,
+ "max_duration": 10030000,
+ "duration_increment": 200000
+ },
+ {
+ "id": "overcharge_burn",
+ "type": "SPELL",
+ "name": { "str": "Overcharge Burn" },
+ "description": "The side effects of casting the overcharge spell.",
+ "message": "",
+ "effect": "spawn_item",
+ "effect_str": "overcharge_burn_scar",
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "min_damage": 1,
+ "max_damage": 1,
+ "min_duration": 500,
+ "duration_increment": -10,
+ "max_duration": 50,
+ "max_level": 45,
+ "valid_targets": [ "none" ]
+ },
+ {
+ "id": "overcharge_eyes",
+ "type": "SPELL",
+ "name": { "str": "Optical Sneeze Beam" },
+ "description": "You overcharge your internal batteries to send a semi-directed beam from your face. The inventor of this spell must have had some weird sense of humor.",
+ "message": "You overcharge your bionic energy through what ley lines you have left, and channel it through the center of your face.",
+ "sound_description": "bzzzzzzt!",
+ "sound_ambient": true,
+ "effect": "cone_attack",
+ "extra_effects": [ { "id": "overcharge_burn", "hit_self": true } ],
+ "min_damage": 147,
+ "damage_increment": 5,
+ "max_damage": 357,
+ "min_range": 12,
+ "range_increment": 0.35,
+ "max_range": 34,
+ "min_aoe": 12,
+ "aoe_increment": 0.17,
+ "max_aoe": 24,
+ "base_energy_cost": 500,
+ "final_energy_cost": 500,
+ "spell_class": "TECHNOMANCER",
+ "energy_source": "BIONIC",
+ "damage_type": "cut",
+ "difficulty": 1,
+ "max_level": 45,
+ "base_casting_time": 120,
+ "final_casting_time": 120,
+ "valid_targets": [ "hostile", "ground" ],
+ "flags": [ "LOUD", "VERBAL", "NO_HANDS", "NO_LEGS" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/bionics.json b/data/mods/Magical_Nights/bionics.json
new file mode 100644
index 000000000000..037b5f82165b
--- /dev/null
+++ b/data/mods/Magical_Nights/bionics.json
@@ -0,0 +1,13 @@
+[
+ {
+ "id": "bio_sneeze_beam",
+ "type": "bionic",
+ "name": { "str": "Crystallized Mana Nose Replacement" },
+ "description": "A large gem made with crystallized mana and some other stabilizing metals. Comes with a specially designed power pack (installed into the skull) that does not interfere with your normal facial functions. WARNING: for Technophile use only. By using this spell you are waiving all liability of Frikken Laser Beams Inc. and its subsidiaries.",
+ "occupied_bodyparts": [ [ "head", 10 ], [ "mouth", 1 ] ],
+ "capacity": "500 kJ",
+ "learned_spells": [ [ "overcharge_eyes", 4 ] ],
+ "enchantments": [ "ench_bio_sneeze_beam" ],
+ "flags": [ "BIONIC_SHOCKPROOF" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/clothing_mods.json b/data/mods/Magical_Nights/clothing_mods.json
new file mode 100644
index 000000000000..b7b8cd6851e2
--- /dev/null
+++ b/data/mods/Magical_Nights/clothing_mods.json
@@ -0,0 +1,43 @@
+[
+ {
+ "type": "clothing_mod",
+ "id": "owlbear_furred",
+ "flag": "owlbear_furred",
+ "item": "owlbear_fur",
+ "implement_prompt": "Line it with owlbear fur",
+ "destroy_prompt": "Destroy owlbear fur lining",
+ "mod_value": [
+ { "type": "encumbrance", "value": 1 },
+ { "type": "encumbrance", "value": 4, "proportion": [ "coverage" ] },
+ { "type": "warmth", "value": 75, "proportion": [ "coverage" ] }
+ ]
+ },
+ {
+ "type": "clothing_mod",
+ "id": "demonchitin_padded",
+ "flag": "demonchitin_padded",
+ "item": "demon_chitin_piece",
+ "implement_prompt": "Pad with demon chitin",
+ "destroy_prompt": "Destroy demon chitin padding",
+ "mod_value": [
+ { "type": "cut", "value": 1.75, "proportion": [ "thickness" ] },
+ { "type": "bullet", "value": 1.75, "proportion": [ "thickness" ] },
+ { "type": "fire", "value": 60, "proportion": [ "coverage" ] },
+ { "type": "encumbrance", "value": 2, "round_up": true, "proportion": [ "thickness", "coverage" ] }
+ ]
+ },
+ {
+ "type": "clothing_mod",
+ "id": "blackdragon_coated",
+ "flag": "blackdragon_coated",
+ "item": "dragon_black_scale",
+ "implement_prompt": "Add black dragon scale coating",
+ "destroy_prompt": "Destroy black dragon scale coating",
+ "mod_value": [
+ { "type": "cut", "value": 1.8, "proportion": [ "thickness" ] },
+ { "type": "bullet", "value": 1.8, "proportion": [ "thickness" ] },
+ { "type": "acid", "value": 40, "proportion": [ "coverage" ] },
+ { "type": "encumbrance", "value": 2, "round_up": true, "proportion": [ "thickness", "coverage" ] }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/construction_group.json b/data/mods/Magical_Nights/construction_group.json
new file mode 100644
index 000000000000..9540877f60c7
--- /dev/null
+++ b/data/mods/Magical_Nights/construction_group.json
@@ -0,0 +1,7 @@
+[
+ {
+ "type": "construction_group",
+ "id": "build_translocator_gate",
+ "name": "Build Translocator Gate"
+ }
+]
diff --git a/data/mods/Magical_Nights/cooking_components.json b/data/mods/Magical_Nights/cooking_components.json
new file mode 100644
index 000000000000..4ac666e0decb
--- /dev/null
+++ b/data/mods/Magical_Nights/cooking_components.json
@@ -0,0 +1,21 @@
+[
+ {
+ "id": "eggs_bird",
+ "type": "requirement",
+ "components": [
+ [
+ [ "egg_bird", 1 ],
+ [ "egg_bird_unfert", 1 ],
+ [ "egg_chicken", 1 ],
+ [ "egg_grouse", 1 ],
+ [ "egg_crow", 1 ],
+ [ "egg_duck", 1 ],
+ [ "egg_goose_canadian", 1 ],
+ [ "egg_turkey", 1 ],
+ [ "egg_pheasant", 1 ],
+ [ "egg_cockatrice", 1 ],
+ [ "egg_owlbear", 1 ]
+ ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/effects/effects.json b/data/mods/Magical_Nights/effects/effects.json
new file mode 100644
index 000000000000..1085e3e9c89c
--- /dev/null
+++ b/data/mods/Magical_Nights/effects/effects.json
@@ -0,0 +1,267 @@
+[
+ {
+ "type": "effect_type",
+ "id": "mana_fatigue",
+ "name": [ "Mana Fatigue" ],
+ "desc": [ "You are exhausted from channeling a lot of mana." ],
+ "apply_message": "Channeling so much mana is making you tired",
+ "remove_message": "The burden of mana fatigue has faded",
+ "rating": "bad",
+ "base_mods": { "fatigue_amount": [ 1 ], "fatigue_min": [ 1 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "enchant_windrun",
+ "name": [ "Windrunning" ],
+ "desc": [ "You are bolstered and pushed along by the power of the wind." ],
+ "apply_message": "You are bolstered and pushed along by the power of the wind",
+ "remove_message": "The wind at your back dies down.",
+ "rating": "good",
+ "base_mods": { "stamina_min": [ 20 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "dark_sight",
+ "name": [ "Dark Sight" ],
+ "desc": [ "You can see in the dark." ],
+ "apply_message": "Your sight adjusts to the darkness.",
+ "remove_message": "The darkness loses its shape.",
+ "rating": "good",
+ "flags": [ "EFFECT_NIGHT_VISION" ]
+ },
+ {
+ "type": "effect_type",
+ "id": "effect_ethereal_grasp",
+ "name": [ "Ethereal Hold" ],
+ "desc": [ "Ghostly arms are trying to hold you in place!" ],
+ "max_intensity": 4,
+ "int_add_val": 1,
+ "apply_message": "Ethereal arms shoot out of the ground and grab onto you!",
+ "remove_message": "The ghostly arms fade away.",
+ "base_mods": { "speed_mod": [ -40 ] },
+ "scaling_mods": { "speed_mod": [ -10 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "invisibility",
+ "name": [ "Invisibility" ],
+ "desc": [ "Nothing can see you." ],
+ "apply_message": "You fade away.",
+ "remove_message": "You can see your hands again.",
+ "flags": [ "EFFECT_INVISIBLE" ]
+ },
+ {
+ "type": "effect_type",
+ "id": "bless",
+ "name": [ "Blessed" ],
+ "desc": [ "You are filled with energy that improves everything you do." ],
+ "apply_message": "You are filled with energy that improves everything you do!",
+ "remove_message": "Your energy fades.",
+ "rating": "good",
+ "base_mods": { "per_mod": [ 2 ], "dex_mod": [ 2 ], "str_mod": [ 2, 2 ], "speed_mod": [ 20 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "bio_boost",
+ "name": [ "Grotesque Enhancement" ],
+ "desc": [ "Your body ripples with writhing alien muscles, your limbs lengthen, and your eyes glow with a faint green." ],
+ "apply_message": "Your body ripples with writhing alien muscles, your limbs lengthen, and your eyes glow with a faint green.",
+ "remove_message": "Your body rapidly returns to normal.",
+ "rating": "good",
+ "max_intensity": 4,
+ "int_add_val": 1,
+ "base_mods": { "per_mod": [ 1, 3 ], "dex_mod": [ 1, 3 ], "str_mod": [ 1, 5 ], "speed_mod": [ 5, 10 ] },
+ "scaling_mods": { "per_mod": [ 1, 3 ], "dex_mod": [ 1, 3 ], "str_mod": [ 1, 3 ], "speed_mod": [ 5, 10 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "entangled",
+ "name": [ "Vegetative Grasp" ],
+ "desc": [ "Roots and vines entangle your foes." ],
+ "max_intensity": 4,
+ "int_add_val": 1,
+ "apply_message": "Roots and vines entangle your foes to slow them!",
+ "remove_message": "The roots and vines wither up and die.",
+ "base_mods": { "speed_mod": [ -60 ] },
+ "scaling_mods": { "speed_mod": [ -10 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "root_impale",
+ "name": [ "Root Impale" ],
+ "desc": [ "Roots and vines entangle your foes." ],
+ "max_intensity": 4,
+ "int_add_val": 1,
+ "apply_message": "Roots rip out from the ground and impale your enemies!",
+ "remove_message": "The roots wither up and die.",
+ "base_mods": { "speed_mod": [ -30 ] },
+ "scaling_mods": { "speed_mod": [ -10 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "bio_acidburn",
+ "name": [ "Acidic burn" ],
+ "desc": [ "Burned with acid" ],
+ "max_intensity": 4,
+ "int_add_val": 1,
+ "base_mods": { "speed_mod": [ -20 ] },
+ "scaling_mods": { "speed_mod": [ -10 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "haste",
+ "name": [ "Hasted" ],
+ "desc": [ "Your speed is boosted enormously." ],
+ "apply_message": "Your speed is boosted to superhuman levels!",
+ "remove_message": "You return to your normal speed.",
+ "rating": "good",
+ "base_mods": { "dex_mod": [ 2 ], "speed_mod": [ 150 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "synaptic_stim",
+ "name": [ "Synaptic Stimulation" ],
+ "desc": [ "Your mental processing is increased." ],
+ "apply_message": "Your mind accelerates.",
+ "remove_message": "Your mind returns to normal speed.",
+ "rating": "good",
+ "base_mods": { "dex_mod": [ 4 ], "int_mod": [ 4 ], "speed_mod": [ 5 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "ogres_strength",
+ "name": [ "Ogre's Strength" ],
+ "desc": [ "You have the strength of an Ogre!" ],
+ "apply_message": "You feel strong!",
+ "remove_message": "Your strength deflates.",
+ "rating": "good",
+ "base_mods": { "str_mod": [ 4 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "eagles_sight",
+ "name": [ "Eagle's Sight" ],
+ "desc": [ "You have the perception of an Eagle!" ],
+ "apply_message": "You notice small details!",
+ "remove_message": "Your vision returns to normal.",
+ "rating": "good",
+ "base_mods": { "per_mod": [ 4 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "cats_grace",
+ "name": [ "Cat's Grace" ],
+ "desc": [ "You have the dexterity of a cat!" ],
+ "apply_message": "Your reflexes are heightened!",
+ "remove_message": "Your reflexes return to normal.",
+ "rating": "good",
+ "base_mods": { "dex_mod": [ 4 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "foxs_cunning",
+ "name": [ "Fox's Cunning" ],
+ "desc": [ "You have the cunning of a Fox!" ],
+ "apply_message": "Your intelligence is heightened!",
+ "remove_message": "Your intelligence returns to normal.",
+ "rating": "good",
+ "base_mods": { "int_mod": [ 4 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "debug_full_protection",
+ "name": [ "Debug Full Protection" ],
+ "desc": [ "You can not be harmed by anything." ],
+ "apply_message": "Your skin tingle with the power of the Devs!",
+ "remove_message": "Your skin stops tingling, your life is empty and meaningless again.",
+ "rating": "good",
+ "flags": [
+ "EFFECT_ELECTRIC_IMMUNE",
+ "EFFECT_BIO_IMMUNE",
+ "EFFECT_BASH_IMMUNE",
+ "EFFECT_CUT_IMMUNE",
+ "EFFECT_ACID_IMMUNE",
+ "EFFECT_STAB_IMMUNE",
+ "EFFECT_HEAT_IMMUNE",
+ "EFFECT_COLD_IMMUNE"
+ ]
+ },
+ {
+ "type": "effect_type",
+ "id": "debug_feather_fall",
+ "name": [ "Debug Feather Fall" ],
+ "desc": [ "You are light as a feather and fall like one." ],
+ "apply_message": "Your body feels light as a feather.",
+ "remove_message": "The earth pulls you down hard.",
+ "rating": "good",
+ "flags": [ "EFFECT_FEATHER_FALL" ]
+ },
+ {
+ "type": "effect_type",
+ "id": "eff_frightful_presence",
+ "name": [ "Scared", "Frightened", "Terrified" ],
+ "max_intensity": 3,
+ "desc": [ "Your knees are shaking, your heart beats fast, and your stomach rebels." ],
+ "apply_message": "You are afraid!",
+ "remove_message": "Your fear dissipates.",
+ "rating": "bad",
+ "base_mods": { "stim_amount": [ 12, 20, 45 ], "vomit_chance": [ 2, 5, 20 ], "speed_mod": [ -2, -5, -10 ] }
+ },
+ {
+ "type": "effect_type",
+ "id": "biomancer_visceral_side_effects",
+ "name": [ "Visceral Overexertion" ],
+ "desc": [ "You feel sickened from overtaxing your body, having extended your influence over such a wide area." ],
+ "rating": "bad",
+ "max_duration": "1 m",
+ "base_mods": {
+ "fatigue_min": [ 1 ],
+ "fatigue_chance": [ 5 ],
+ "health_min": [ -3 ],
+ "health_chance": [ 5 ],
+ "pain_min": [ 1 ],
+ "pain_chance": [ 4 ],
+ "vomit_chance": [ 20 ]
+ }
+ },
+ {
+ "type": "effect_type",
+ "id": "bio_weave",
+ "name": [ "Coagulant Weave" ],
+ "desc": [ "Immunity to bleeding and bites, increased stamina regeneration, increased hunger and thirst gain." ],
+ "remove_message": "The tension running through your flesh fades.",
+ "blocks_effects": [ "bleed", "bite" ],
+ "rating": "good",
+ "max_duration": "5 m",
+ "base_mods": {
+ "hunger_min": [ 1 ],
+ "hunger_chance": [ 12 ],
+ "thirst_min": [ 1 ],
+ "thirst_chance": [ 12 ],
+ "health_min": [ 1 ],
+ "health_chance": [ 4 ],
+ "stamina_min": [ 40 ],
+ "stamina_chance": [ 2 ]
+ }
+ },
+ {
+ "type": "effect_type",
+ "id": "biomancer_dart_venom",
+ "//": "Basically just paralyze poison set to work in a manner useful for spells.",
+ "name": [ "Biomantic Venom" ],
+ "desc": [ "You feel sluggish and weak, from magically-induced poisoning." ],
+ "rating": "bad",
+ "max_intensity": 20,
+ "int_dur_factor": "30 s",
+ "base_mods": { "str_mod": [ -1 ], "dex_mod": [ -0.17 ], "speed_mod": [ -3 ] },
+ "scaling_mods": { "str_mod": [ -0.07 ], "dex_mod": [ -0.17 ], "speed_mod": [ -3 ] }
+ },
+ {
+ "id": "burn_scar",
+ "type": "effect_type",
+ "desc": [ "This burn really hurts!" ],
+ "max_duration": "10 second",
+ "rating": "bad",
+ "base_mods": { "pain_amount": [ 20 ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/effects/enchantments.json b/data/mods/Magical_Nights/effects/enchantments.json
new file mode 100644
index 000000000000..1278466f867e
--- /dev/null
+++ b/data/mods/Magical_Nights/effects/enchantments.json
@@ -0,0 +1,14 @@
+[
+ {
+ "id": "ench_overcharge_burn_scar",
+ "type": "enchantment",
+ "ench_effects": [ { "effect": "burn_scar", "intensity": 1 } ]
+ },
+ {
+ "id": "ench_windrun",
+ "type": "enchantment",
+ "has": "WORN",
+ "ench_effects": [ { "effect": "enchant_windrun", "intensity": 1 } ],
+ "values": [ { "value": "MOVE_COST", "multiply": -0.5 } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/flags.json b/data/mods/Magical_Nights/flags.json
new file mode 100644
index 000000000000..f81c979dcd6d
--- /dev/null
+++ b/data/mods/Magical_Nights/flags.json
@@ -0,0 +1,20 @@
+[
+ {
+ "id": "owlbear_furred",
+ "type": "json_flag",
+ "context": [ "ARMOR", "TOOL_ARMOR" ],
+ "info": "This clothing has an owlbear fur lining sewn into it to greatly increase its overall warmth."
+ },
+ {
+ "id": "demonchitin_padded",
+ "type": "json_flag",
+ "context": [ "ARMOR", "TOOL_ARMOR" ],
+ "info": "This clothing has a demon chitin padding sewn into it to greatly increase its overall fire resistance."
+ },
+ {
+ "id": "blackdragon_coated",
+ "type": "json_flag",
+ "context": [ "ARMOR", "TOOL_ARMOR" ],
+ "info": "This clothing has a coating of black dragon scales applied to it in order to greatly increase its overall acid resistance."
+ }
+]
diff --git a/data/mods/Magical_Nights/furniture.json b/data/mods/Magical_Nights/furniture.json
new file mode 100644
index 000000000000..a5a7e0647812
--- /dev/null
+++ b/data/mods/Magical_Nights/furniture.json
@@ -0,0 +1,226 @@
+[
+ {
+ "type": "furniture",
+ "id": "f_magiclysm_translocator_gate",
+ "name": "Translocator Gate",
+ "move_cost_mod": 0,
+ "symbol": "X",
+ "description": "A gate for translocation. Cast the translocation spell or use a translocator to choose this gate as a destination.",
+ "color": "light_gray",
+ "required_str": 25,
+ "flags": [ "TRANSLOCATOR", "MOUNTABLE", "ALLOW_FIELD_EFFECT" ],
+ "examine_action": "translocator"
+ },
+ {
+ "type": "furniture",
+ "id": "f_magic_circle",
+ "name": "Magic Circle",
+ "move_cost_mod": 0,
+ "symbol": "O",
+ "color": "red",
+ "required_str": -1,
+ "flags": [ "ALLOW_FIELD_EFFECT" ],
+ "description": "This is a rough magic circle, carved into the ground and decorated with blood, candles, and other small knick-knacks."
+ },
+ {
+ "type": "furniture",
+ "id": "f_glow_boulder",
+ "looks_like": "f_boulder_large",
+ "name": "large glowing boulder",
+ "description": "Something about this doesn't look right.",
+ "symbol": "O",
+ "color": "green",
+ "move_cost_mod": -1,
+ "coverage": 65,
+ "required_str": 32,
+ "flags": [ "NOITEM", "MINEABLE", "BASHABLE", "BLOCK_WIND" ],
+ "bash": {
+ "str_min": 64,
+ "str_max": 160,
+ "sound": "smash!",
+ "sound_fail": "thump.",
+ "items": [
+ { "item": "rock", "count": [ 10, 22 ] },
+ { "item": "sharp_rock", "count": [ 3, 7 ] },
+ { "item": "material_limestone", "charges": [ 2, 5 ], "prob": 30 },
+ { "item": "material_rocksalt", "count": [ 0, 1 ], "prob": 10 },
+ { "item": "material_rhodonite", "count": [ 0, 1 ], "prob": 1 },
+ { "item": "material_zincite", "count": [ 0, 5 ], "prob": 2 },
+ { "item": "orichalcum_lump", "count": [ 0, 2 ] },
+ { "item": "orichalcum_sliver", "count": [ 4, 10 ] }
+ ]
+ }
+ },
+ {
+ "type": "furniture",
+ "id": "f_magic_bench",
+ "name": "enchanter's workbench",
+ "looks_like": "f_table",
+ "description": "An ornate oak cabinet topped by a durable resin countertop resistant to most alchemical spills and burns. It has wired in electrical and gas fittings, and has been decorated with several protection runes - mostly ornamental.",
+ "symbol": "0",
+ "bgcolor": "white",
+ "move_cost_mod": 2,
+ "coverage": 60,
+ "required_str": -1,
+ "flags": [ "TRANSPARENT", "PLACE_ITEM", "MOUNTABLE", "FLAT_SURF" ],
+ "deconstruct": {
+ "items": [
+ { "item": "pipe", "count": [ 6, 12 ] },
+ { "item": "cu_pipe", "count": [ 1, 4 ] },
+ { "item": "cable", "charges": [ 1, 4 ] },
+ { "item": "plastic_chunk", "count": [ 50, 75 ] },
+ { "item": "wood_panel", "count": [ 1, 2 ] },
+ { "item": "2x4", "count": [ 3, 4 ] }
+ ]
+ },
+ "max_volume": "1750 L",
+ "bash": {
+ "str_min": 35,
+ "str_max": 80,
+ "sound": "metal screeching!",
+ "sound_fail": "clang!",
+ "items": [
+ { "item": "splinter", "count": [ 2, 8 ] },
+ { "item": "2x4", "count": [ 0, 2 ] },
+ { "item": "wood_panel", "count": [ 0, 1 ] },
+ { "item": "plastic_chunk", "count": [ 30, 50 ] },
+ { "item": "pipe", "count": 1 },
+ { "item": "cable", "charges": [ 1, 3 ] },
+ { "item": "cu_pipe", "count": 1 }
+ ]
+ },
+ "examine_action": "workbench",
+ "workbench": { "multiplier": 1.15, "mass": "300 kg", "volume": "100L" }
+ },
+ {
+ "type": "furniture",
+ "id": "f_alembic",
+ "name": "standing alembic",
+ "looks_like": "f_still",
+ "description": "A large glass and copper alembic for distilling alchemical concoctions. It consists of a copper pot with rising spires of twisted glass draining into various removable bottles.",
+ "symbol": "&",
+ "color": "light_blue",
+ "move_cost_mod": -1,
+ "coverage": 40,
+ "required_str": -1,
+ "crafting_pseudo_item": "still_lab",
+ "flags": [ "TRANSPARENT", "NOITEM" ],
+ "deconstruct": {
+ "items": [
+ { "item": "pot_copper", "count": 1 },
+ { "item": "pipe_glass", "count": [ 1, 4 ] },
+ { "item": "glass_tube_small", "charges": [ 5, 10 ] },
+ { "item": "flask_glass", "count": [ 1, 3 ] }
+ ]
+ },
+ "max_volume": "1750 L",
+ "bash": {
+ "str_min": 4,
+ "str_max": 10,
+ "sound": "glass breaking!",
+ "sound_fail": "clang!",
+ "items": [ { "item": "scrap_copper", "count": [ 10, 20 ] }, { "item": "glass_shard", "count": [ 2, 4 ] } ]
+ }
+ },
+ {
+ "type": "furniture",
+ "id": "f_orrery",
+ "name": "orrery",
+ "looks_like": "f_statue",
+ "description": "This is a beautiful, non-scale model of the solar system. A complex series of gears allows the relative motions of the planets to be studied at the turn of a crank. This more modern version also has bluetooth and could have been controlled with an app, if there was any power anymore.",
+ "symbol": "@",
+ "color": "brown",
+ "move_cost_mod": -1,
+ "coverage": 40,
+ "required_str": -1,
+ "flags": [ "TRANSPARENT", "NOITEM" ],
+ "deconstruct": {
+ "items": [
+ { "item": "clockworks", "count": [ 10, 30 ] },
+ { "item": "scrap", "count": [ 10, 20 ] },
+ { "item": "pipe", "charges": 9 },
+ { "item": "wire", "count": [ 10, 20 ] },
+ { "item": "hinge", "count": [ 1, 3 ] }
+ ]
+ },
+ "max_volume": "1750 L",
+ "bash": {
+ "str_min": 20,
+ "str_max": 60,
+ "sound": "metal screeching!",
+ "sound_fail": "clang!",
+ "items": [
+ { "item": "scrap", "count": [ 10, 100 ] },
+ { "item": "pipe", "count": [ 1, 5 ] },
+ { "item": "wire", "count": [ 3, 10 ] }
+ ]
+ }
+ },
+ {
+ "type": "furniture",
+ "id": "f_huge_mana_crystal",
+ "name": "huge mana crystal",
+ "description": "This is a mana crystal that juts from the ground as if it had sprouted up like a weed. It pulses with a delicate yellow energy, occasionally bursting with flashes of pent-up light.",
+ "symbol": "]",
+ "color": "white_yellow",
+ "move_cost_mod": -1,
+ "coverage": 75,
+ "required_str": -1,
+ "looks_like": "f_boulder_large",
+ "flags": [ "TRANSPARENT", "EMITTER" ],
+ "emissions": [ "emit_glimmer" ],
+ "light_emitted": 12,
+ "bash": {
+ "str_min": 25,
+ "str_max": 35,
+ "sound": "glass shattering!",
+ "sound_fail": "mana crackling!",
+ "items": [
+ { "item": "crystallized_mana", "charges": [ 0, 100 ] },
+ { "item": "small_mana_crystal", "count": [ 0, 3 ] },
+ { "item": "glass_shard", "count": [ 1, 3 ] }
+ ]
+ }
+ },
+ {
+ "type": "furniture",
+ "id": "f_altar",
+ "name": "stone altar",
+ "move_cost_mod": 10,
+ "symbol": "H",
+ "color": "light_gray",
+ "coverage": 40,
+ "required_str": 30,
+ "flags": [ "BASHABLE" ],
+ "description": "This is big stone altar. Most commonly used in morally questionable rituals.",
+ "bash": {
+ "str_min": 30,
+ "str_max": 160,
+ "sound": "smash!",
+ "sound_fail": "thump.",
+ "items": [ { "item": "rock", "count": [ 5, 15 ] }, { "item": "sharp_rock", "count": [ 3, 5 ] } ]
+ }
+ },
+ {
+ "type": "furniture",
+ "id": "f_demon_forge",
+ "name": "demon forge",
+ "description": "This is a forge made of the chitin of a huge, red spider that has a penchant for flames. Custom made to withstand the heat from alumentum, this forge can resmelt the magical metals into their workable, ingot form.",
+ "symbol": "^",
+ "color": "red",
+ "move_cost_mod": -1,
+ "coverage": 40,
+ "required_str": -1,
+ "crafting_pseudo_item": "demon_forge",
+ "flags": [ "SEALED", "CONTAINER", "NOITEM", "EASY_DECONSTRUCT", "MINEABLE" ],
+ "deconstruct": { "items": [ { "item": "demon_chitin_plate", "count": 14 }, { "item": "char_forge", "count": 1 } ] },
+ "examine_action": "reload_furniture",
+ "bash": {
+ "str_min": 20,
+ "str_max": 50,
+ "sound": "crash!",
+ "sound_fail": "whump.",
+ "items": [ { "item": "demon_chitin_piece", "count": [ 20, 30 ] } ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/harvest.json b/data/mods/Magical_Nights/harvest.json
new file mode 100644
index 000000000000..b4e13c46680a
--- /dev/null
+++ b/data/mods/Magical_Nights/harvest.json
@@ -0,0 +1,297 @@
+[
+ {
+ "id": "owlbear",
+ "//": "identical to mammal_large_fur except that half the fur has been replaced with feathers",
+ "type": "harvest",
+ "entries": [
+ { "drop": "mutant_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "mutant_meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "mutant_meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "owlbear_stone", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_owlbear_fur", "type": "skin", "mass_ratio": 0.015 },
+ { "drop": "mutant_fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "feather", "type": "skin", "mass_ratio": 0.005 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "owlbear_cub",
+ "//": "drops regular stomach",
+ "type": "harvest",
+ "entries": [
+ { "drop": "mutant_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "mutant_meat", "type": "flesh", "mass_ratio": 0.3 },
+ { "drop": "mutant_meat_scrap", "type": "flesh", "mass_ratio": 0.03 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "owlbear_stone", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_owlbear_fur", "type": "skin", "mass_ratio": 0.015 },
+ { "drop": "mutant_fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "feather", "type": "skin", "mass_ratio": 0.005 }
+ ]
+ },
+ {
+ "id": "bulette",
+ "//": "drops large stomach",
+ "type": "harvest",
+ "entries": [
+ { "drop": "mutant_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bulette_plate", "scale_num": [ 2, 5 ], "max": 1, "type": "skin" },
+ { "drop": "bulette_pearl", "scale_num": [ 1, 4 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_leather", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "demon_spider",
+ "type": "harvest",
+ "entries": [
+ { "drop": "blood_tainted", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.05 },
+ { "drop": "demon_chitin_piece", "type": "bone", "mass_ratio": 0.04 },
+ { "drop": "demon_chitin_plate", "type": "skin", "mass_ratio": 0.01 },
+ { "drop": "demon_spider_fang", "base_num": [ 0, 0 ], "scale_num": [ 0.1, 0.6 ], "max": 2, "type": "flesh" }
+ ]
+ },
+ {
+ "id": "mammal_small_fur",
+ "//": "override of vanilla harvest, includes hairballs",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.28 },
+ { "drop": "meat_scrap", "type": "flesh", "mass_ratio": 0.05 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_fur", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "hairball", "type": "bionic", "max": 3 }
+ ]
+ },
+ {
+ "id": "mammal_large_fur",
+ "//": "vanilla override, includes adrenal gland",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_fur", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "mammal_large_leather",
+ "//": "vanilla override, includes adrenal gland",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_leather", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "mutant_mammal_large_leather",
+ "//": "drops large stomach",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "mutant_meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "mutant_meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone_heavy", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_leather", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "mutant_fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "mammal_large_wool",
+ "//": "drops large stomach",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "wool_staple", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "human_large_leather",
+ "type": "harvest",
+ "entries": [
+ { "drop": "mutant_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "mutant_human_flesh", "type": "flesh", "mass_ratio": 0.34 },
+ { "drop": "hstomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "raw_leather", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "mutant_human_fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "animal_large_noskin",
+ "//": "for those vertebrates that don't have something you can skin off of them",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "mutant_animal_large_noskin",
+ "//": "for those vertebrates that don't have something you can skin off of them",
+ "type": "harvest",
+ "entries": [
+ { "drop": "animal_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "mutant_meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "mutant_meat_scrap", "type": "flesh", "mass_ratio": 0.01 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "sweetbread", "type": "flesh", "mass_ratio": 0.002 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" },
+ { "drop": "bone_heavy", "type": "bone", "mass_ratio": 0.15 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.001 },
+ { "drop": "mutant_fat", "type": "flesh", "mass_ratio": 0.07 },
+ { "drop": "adrenal_gland_large", "type": "bionic", "max": 2 }
+ ]
+ },
+ {
+ "id": "dragon_black",
+ "type": "harvest",
+ "entries": [
+ { "drop": "dragon_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat_dragon", "type": "flesh", "mass_ratio": 0.19 },
+ { "drop": "dragon_black_scale", "type": "skin", "mass_ratio": 0.05 },
+ { "drop": "black_dragon_hide_raw", "type": "skin", "mass_ratio": 0.1 },
+ { "drop": "dragon_bone", "type": "bone", "mass_ratio": 0.1 }
+ ]
+ },
+ {
+ "id": "stirge",
+ "//": "mainly arachnid drops with leather and proboscis",
+ "type": "harvest",
+ "entries": [
+ { "drop": "mutant_blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "mutant_meat", "type": "flesh", "mass_ratio": 0.33 },
+ { "drop": "mutant_fat", "type": "flesh", "mass_ratio": 0.1 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.01 },
+ { "drop": "raw_leather", "type": "skin", "mass_ratio": 0.01 },
+ { "drop": "stirge_proboscis", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" }
+ ]
+ },
+ {
+ "id": "shrieker",
+ "//": "mainly fungaloid drops with scream mushroom.",
+ "type": "harvest",
+ "entries": [
+ { "drop": "veggy", "type": "flesh", "mass_ratio": 0.4 },
+ { "drop": "plant_sac", "type": "offal", "mass_ratio": 0.2 },
+ { "drop": "stick_fiber", "type": "bone", "mass_ratio": 0.1 },
+ { "drop": "scream_mush", "scale_num": [ 0.1, 0.3 ], "max": 10, "type": "offal" }
+ ]
+ },
+ {
+ "id": "lemure",
+ "//": "nothing much aside from big pile of meat and maybe demon blood in future. But for now, tainted will do.",
+ "type": "harvest",
+ "entries": [
+ { "drop": "blood_tainted", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.4 }
+ ]
+ },
+ {
+ "id": "lizardfolk",
+ "type": "harvest",
+ "entries": [
+ { "drop": "blood", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.32 },
+ { "drop": "lung", "type": "flesh", "mass_ratio": 0.0035 },
+ { "drop": "liver", "type": "offal", "mass_ratio": 0.01 },
+ { "drop": "brain", "type": "flesh", "mass_ratio": 0.005 },
+ { "drop": "kidney", "type": "offal", "mass_ratio": 0.002 },
+ { "drop": "raw_leather", "type": "skin", "mass_ratio": 0.02 },
+ { "drop": "sinew", "type": "bone", "mass_ratio": 0.00035 },
+ { "drop": "bone", "type": "bone", "mass_ratio": 0.1 }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/itemgroups/itemgroups.json b/data/mods/Magical_Nights/itemgroups/itemgroups.json
new file mode 100755
index 000000000000..3a0ab60172a7
--- /dev/null
+++ b/data/mods/Magical_Nights/itemgroups/itemgroups.json
@@ -0,0 +1,998 @@
+[
+ {
+ "type": "item_group",
+ "id": "dragon_books",
+ "//": "puts all the dragon books in one group, so it's easy to add more later",
+ "items": [ [ "black_dragons", 10 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_religious_books",
+ "//": "Magic-related religious books, split from normal itemgroup because otherwise they show up in places I do not want them.",
+ "items": [ [ "priest_beginner", 1 ], [ "priest_advanced", 1 ], [ "druid_spellbook", 1 ], [ "summon_undead_spellbook", 1 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "mansion_books",
+ "items": [
+ { "group": "magic_recipe_basic", "prob": 6 },
+ { "group": "magic_recipe_advanced", "prob": 2 },
+ { "group": "dragon_books", "prob": 5 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "exotic_books",
+ "items": [ { "group": "magic_recipe_basic", "prob": 3 }, { "group": "dragon_books", "prob": 2 } ]
+ },
+ {
+ "type": "item_group",
+ "id": "guns_pistol_rare",
+ "items": [ { "item": "m47a1", "prob": 25, "charges-min": 0, "charges-max": 6 } ]
+ },
+ {
+ "type": "item_group",
+ "id": "displays",
+ "items": [ [ "wizard_hat", 5 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_shop_books",
+ "items": [
+ { "group": "spellbook_loot_1", "prob": 60 },
+ { "group": "spell_scroll_tier_0", "prob": 80 },
+ { "group": "spell_scroll_tier_1", "prob": 60 },
+ { "group": "spell_scroll_tier_2", "prob": 30 },
+ { "group": "magic_recipe_basic", "prob": 50 },
+ { "group": "magic_recipe_advanced", "prob": 15 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_shop_wands",
+ "items": [
+ { "item": "wand_magic_missile_minor", "prob": 35, "charges-min": 12, "charges-max": 34 },
+ { "item": "wand_fireball_minor", "prob": 25, "charges-min": 3, "charges-max": 24 }
+ ]
+ },
+ {
+ "id": "potions_common",
+ "type": "item_group",
+ "items": [
+ [ "mana_potion_lesser", 90 ],
+ [ "mana_potion", 20 ],
+ [ "mana_potion_greater", 1 ],
+ [ "ogres_strength_potion", 10 ],
+ [ "foxs_cunning_potion", 10 ],
+ [ "eagles_sight_potion", 10 ],
+ [ "cats_grace_potion", 10 ],
+ [ "manatouched_serum", 1 ]
+ ]
+ },
+ {
+ "id": "magic_shop_potions",
+ "type": "item_group",
+ "items": [
+ { "group": "potions_common", "prob": 80 },
+ { "group": "alchemy_items", "prob": 30 },
+ { "group": "magical_reagents", "prob": 20 },
+ [ "crystallized_mana", 55 ],
+ { "item": "small_mana_crystal", "prob": 40, "charges-min": 5, "charges-max": 50 }
+ ]
+ },
+ {
+ "id": "alchemy_items",
+ "type": "item_group",
+ "items": [
+ [ "owlbear_stone", 10 ],
+ { "item": "stone_shell", "prob": 10, "count-min": 1, "count-max": 3 },
+ [ "egg_owlbear_rock", 5 ],
+ [ "glow_light_off", 1 ],
+ [ "bulette_plate", 10 ],
+ { "item": "bulette_pearl", "prob": 8, "count-min": 1, "count-max": 2 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_tools_and_loot",
+ "//": "Stuff you would find in an average wizard's workshop or other place where someone stores magical goodies.",
+ "subtype": "collection",
+ "items": [
+ { "group": "tools_common", "prob": 60 },
+ { "group": "jewelry_safe", "prob": 10 },
+ { "group": "jewelry_front", "prob": 8 },
+ { "group": "potions_common", "prob": 15 },
+ { "group": "magical_reagents", "prob": 20 },
+ {
+ "distribution": [
+ { "group": "enchanted_wands_lesser", "prob": 15 },
+ { "group": "spellbook_loot_1", "prob": 35, "count": [ 1, 3 ] },
+ { "group": "enchanted_rings_common", "prob": 20 },
+ { "group": "enchanted_rings_uncommon", "prob": 5 },
+ { "group": "enchanted_combat_items", "prob": 10 },
+ { "group": "enchanted_belts", "prob": 2 }
+ ],
+ "prob": 15
+ },
+ { "item": "bone_human", "prob": 60, "count-min": 1, "count-max": 5 },
+ [ "toolbox", 10 ]
+ ]
+ },
+ {
+ "id": "demon_spider_lair_treasure",
+ "type": "item_group",
+ "items": [
+ { "group": "potions_common", "prob": 20 },
+ { "group": "enchanted_wands_lesser", "prob": 15 },
+ { "group": "spellbook_loot_1", "prob": 35, "count": [ 1, 3 ] },
+ { "group": "enchanted_rings_common", "prob": 20 },
+ { "group": "enchanted_rings_uncommon", "prob": 5 },
+ { "group": "enchanted_combat_items", "prob": 10 },
+ { "group": "enchanted_belts", "prob": 2 },
+ { "group": "magical_reagents", "prob": 8 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_shop_clothes",
+ "items": [ [ "cloak", 3 ], [ "cloak_wool", 5 ], [ "jedi_cloak", 3 ], [ "robe", 5 ], [ "tophat", 5 ], [ "leathersandals", 6 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "wisp_death",
+ "items": [ [ "glow_dust", 1 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "basement_utility_closet",
+ "//": "Stuff you would find in someone's basement closet.",
+ "items": [
+ { "group": "tools_common", "prob": 60 },
+ { "group": "paint", "prob": 20 },
+ { "group": "supplies_fuel", "prob": 35 },
+ [ "toolbox", 10 ],
+ [ "mop", 100 ],
+ [ "broom", 100 ],
+ [ "battery_car", 35 ]
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_CBM",
+ "items": [ [ "bio_sneeze_beam", 10 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "lair_loot_generic",
+ "//": "Stuff you would find in any dragon lair, gold, jewelry, etc.",
+ "items": [
+ { "group": "jewelry_safe", "prob": 30 },
+ { "group": "jewelry_front", "prob": 8 },
+ { "item": "bone_human", "prob": 60, "count-min": 1, "count-max": 5 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "lair_black_dragon",
+ "//": "Stuff you would find in any dragon deeper lair level. Gold, jewelry, weapons etc. Should require a bit of a fight or risk to access.",
+ "items": [
+ { "item": "bone_human", "prob": 30, "count-min": 1, "count-max": 5 },
+ { "group": "archery", "prob": 1 },
+ { "group": "jewelry_safe", "prob": 2 },
+ { "group": "jewelry_front", "prob": 2 },
+ { "group": "corpses", "prob": 20 },
+ { "group": "remains_human_generic", "prob": 5, "count-min": 1, "count-max": 2 },
+ { "group": "archery_ammo", "prob": 2, "count-min": 1, "count-max": 4 },
+ { "group": "medieval", "prob": 1, "count-min": 1, "count-max": 2 },
+ { "group": "medieval", "prob": 1, "count-min": 1, "count-max": 2 },
+ { "group": "magical_reagents", "prob": 2 },
+ { "group": "enchanted_combat_items", "prob": 1 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "lair_black_dragon_treasure",
+ "//": "Stuff you would find in any dragon treasure room or from a boss fight. Should require exceptional risk to access. Includes lower tier group, plus the best magic items.",
+ "items": [
+ { "group": "lair_loot_generic", "prob": 80, "count": [ 2, 6 ] },
+ { "item": "dragon_black_scale", "count": [ 48, 120 ] },
+ { "group": "enchanted_tokens_weapon", "prob": 30 },
+ { "group": "enchanted_rings_common", "prob": 40 },
+ { "group": "enchanted_rings_uncommon", "prob": 30 },
+ { "group": "enchanted_rings_unusual", "prob": 20 },
+ { "group": "enchanted_rings_rare", "prob": 10 },
+ { "group": "enchanted_melee_weapons_plus1", "prob": 30 },
+ { "group": "enchanted_melee_weapons_plus2", "prob": 10 },
+ { "group": "enchanted_wands_minor", "prob": 40 },
+ { "group": "enchanted_wands_lesser", "prob": 20 },
+ { "group": "enchanted_wands_greater", "prob": 10 },
+ { "group": "enchanted_masks", "prob": 10 },
+ { "group": "enchanted_bracers_lesser", "prob": 20 },
+ { "group": "enchanted_bracers_greater", "prob": 10 },
+ { "group": "enchanted_boots", "prob": 15 },
+ { "group": "enchanted_belts", "prob": 15 },
+ { "group": "spellbook_loot_2", "prob": 20 }
+ ]
+ },
+ {
+ "id": "enchanted_misc",
+ "type": "item_group",
+ "//": "all enchanted miscellanious items",
+ "subtype": "collection",
+ "items": [
+ { "item": "heat_cube", "prob": 10 },
+ { "item": "mkey_opening", "prob": 10 },
+ { "item": "mtorch_everburning", "prob": 10 },
+ { "item": "mflask_hip_whiskey", "prob": 10 },
+ { "item": "mtailors_kit", "prob": 10 },
+ { "item": "mspider_box", "prob": 10 },
+ { "item": "cauldron_demon_chitin", "prob": 2 }
+ ]
+ },
+ {
+ "id": "enchanted_tokens_weapon",
+ "type": "item_group",
+ "//": "all the melee weapon tokens",
+ "subtype": "collection",
+ "items": [
+ { "item": "mtoken_longsword", "prob": 10 },
+ { "item": "mtoken_arming_sword", "prob": 10 },
+ { "item": "mtoken_broadsword", "prob": 10 },
+ { "item": "mtoken_battleaxe", "prob": 10 },
+ { "item": "mtoken_pike", "prob": 10 },
+ { "item": "mtoken_mace", "prob": 10 },
+ { "item": "mtoken_q_staff", "prob": 10 }
+ ]
+ },
+ {
+ "id": "enchanted_tokens_tool",
+ "type": "item_group",
+ "//": "all the tool tokens",
+ "subtype": "collection",
+ "items": [
+ { "item": "mtoken_toolbox", "prob": 5 },
+ { "item": "mtoken_hammer", "prob": 20 },
+ { "item": "mtoken_screwdriver_set", "prob": 30 },
+ { "item": "mtoken_crowbar", "prob": 20 }
+ ]
+ },
+ {
+ "id": "enchanted_rings_common",
+ "type": "item_group",
+ "//": "all the common enchanted rings",
+ "subtype": "collection",
+ "items": [
+ { "item": "mring_blades_lesser", "prob": 5 },
+ { "item": "mring_strength_1", "prob": 10 },
+ { "item": "mring_dexterity_1", "prob": 10 },
+ { "item": "mring_intelligence_1", "prob": 10 },
+ { "item": "mring_perception_1", "prob": 10 },
+ { "item": "mring_speed_3", "prob": 10 },
+ { "item": "mring_protection_2", "prob": 10 }
+ ]
+ },
+ {
+ "id": "enchanted_rings_uncommon",
+ "type": "item_group",
+ "//": "all the uncommon enchanted rings",
+ "subtype": "collection",
+ "items": [
+ { "item": "mring_strength_2", "prob": 10 },
+ { "item": "mring_dexterity_2", "prob": 10 },
+ { "item": "mring_intelligence_2", "prob": 10 },
+ { "item": "mring_dodge_bonus_1", "prob": 10 },
+ { "item": "mring_perception_2", "prob": 10 },
+ { "item": "mring_speed_5", "prob": 10 },
+ { "item": "mring_protection_4", "prob": 10 }
+ ]
+ },
+ {
+ "id": "enchanted_rings_unusual",
+ "type": "item_group",
+ "//": "all the unusual enchanted rings",
+ "subtype": "collection",
+ "items": [
+ { "item": "mring_strength_3", "prob": 10 },
+ { "item": "mring_dexterity_3", "prob": 10 },
+ { "item": "mring_dodge_bonus_2", "prob": 10 },
+ { "item": "mring_intelligence_3", "prob": 10 },
+ { "item": "mring_perception_3", "prob": 10 },
+ { "item": "mring_speed_7", "prob": 10 },
+ { "item": "mring_protection_6", "prob": 10 }
+ ]
+ },
+ {
+ "id": "enchanted_rings_rare",
+ "type": "item_group",
+ "//": "all the rare enchanted rings. High end loot for boss fights, treasure rooms, etc.",
+ "subtype": "collection",
+ "items": [
+ { "item": "mring_strength_4", "prob": 10 },
+ { "item": "mring_dexterity_4", "prob": 10 },
+ { "item": "mring_intelligence_4", "prob": 10 },
+ { "item": "mring_perception_4", "prob": 10 },
+ { "item": "mring_speed_10", "prob": 10 },
+ { "item": "mring_protection_8", "prob": 10 }
+ ]
+ },
+ {
+ "id": "enchanted_wands_minor",
+ "type": "item_group",
+ "//": "minor enchanted wands",
+ "subtype": "collection",
+ "items": [
+ { "item": "wand_magic_missile_minor", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_fireball_minor", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_mana_beam_minor", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_point_flare_minor", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_disp_hoaryblast_minor", "prob": 20, "charges-min": 3, "charges-max": 20 },
+ { "item": "wand_disp_cone_cold_minor", "prob": 20, "charges-min": 3, "charges-max": 20 }
+ ]
+ },
+ {
+ "id": "enchanted_wands_lesser",
+ "type": "item_group",
+ "//": "lesser enchanted wands",
+ "subtype": "collection",
+ "items": [
+ { "item": "wand_magic_missile_lesser", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_fireball_lesser", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_mana_beam_lesser", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_point_flare_lesser", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_disp_hoaryblast_lesser", "prob": 20, "charges-min": 3, "charges-max": 20 },
+ { "item": "wand_disp_cone_cold_lesser", "prob": 20, "charges-min": 3, "charges-max": 20 }
+ ]
+ },
+ {
+ "id": "enchanted_wands_greater",
+ "type": "item_group",
+ "//": "rare enchanted wands. High end loot for boss fights, treasure rooms, etc.",
+ "subtype": "collection",
+ "items": [
+ { "item": "wand_magic_missile_greater", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_fireball_greater", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_mana_beam_greater", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_point_flare_greater", "prob": 10, "charges-min": 3, "charges-max": 24 },
+ { "item": "wand_disp_hoaryblast_greater", "prob": 20, "charges-min": 3, "charges-max": 20 },
+ { "item": "wand_disp_cone_cold_greater", "prob": 20, "charges-min": 3, "charges-max": 20 }
+ ]
+ },
+ {
+ "id": "enchanted_masks",
+ "type": "item_group",
+ "//": "all enchanted masks. High end loot for boss fights, treasure rooms, etc.",
+ "subtype": "collection",
+ "items": [ { "item": "mmask_disappearance", "prob": 5 }, { "item": "mmask_vision", "prob": 10 } ]
+ },
+ {
+ "id": "enchanted_bracers_lesser",
+ "type": "item_group",
+ "//": "lesser enchanted bracers",
+ "subtype": "collection",
+ "items": [ { "item": "mbracer_defense_lesser", "prob": 10 }, { "item": "mbracer_lightning_lesser", "prob": 10 } ]
+ },
+ {
+ "id": "enchanted_bracers_greater",
+ "type": "item_group",
+ "//": "greater enchanted bracers",
+ "subtype": "collection",
+ "items": [ { "item": "mbracer_defense_greater", "prob": 10 }, { "item": "mbracer_lightning_greater", "prob": 10 } ]
+ },
+ {
+ "id": "enchanted_boots",
+ "type": "item_group",
+ "//": "all enchanted boots",
+ "subtype": "collection",
+ "items": [
+ { "item": "mboots_haste", "prob": 10 },
+ { "item": "mboots_sevenleague", "prob": 10 },
+ { "item": "mboots_escape", "prob": 10 },
+ { "item": "mboots_grounding", "prob": 10 }
+ ]
+ },
+ {
+ "id": "enchanted_belts",
+ "type": "item_group",
+ "//": "all enchanted belts",
+ "subtype": "collection",
+ "items": [
+ { "item": "magi_staff_minor", "prob": 10 },
+ { "item": "magi_staff_lesser", "prob": 5 },
+ { "item": "magi_staff_greater", "prob": 1 },
+ { "item": "wizard_hat", "prob": 20 },
+ { "item": "mbelt_haste", "prob": 5 },
+ { "item": "mbelt_thor", "prob": 1 },
+ { "item": "mbelt_pockets_lesser", "prob": 10 },
+ { "item": "mbelt_pockets_greater", "prob": 5 },
+ { "item": "mbelt_weaponry", "prob": 10 },
+ { "item": "mbelt_technomancer_toolbelt", "prob": 5 },
+ { "item": "mbelt_iron_whip", "prob": 5 }
+ ]
+ },
+ {
+ "id": "enchanted_melee_weapons_plus1",
+ "type": "item_group",
+ "//": "plus 1 enchanted melee weapons",
+ "items": [
+ { "item": "cudgel_plus_one", "prob": 10 },
+ { "item": "q_staff_plus_one", "prob": 10 },
+ { "item": "i_staff_plus_one", "prob": 10 },
+ { "item": "longsword_plus_one", "prob": 5 },
+ { "item": "sledge_plus_one", "prob": 8 },
+ { "item": "warhammer_plus_one", "prob": 8 },
+ { "item": "bat_plus_one", "prob": 10 },
+ { "item": "bat_metal_plus_one", "prob": 8 },
+ { "item": "spear_steel_plus_one", "prob": 8 },
+ { "item": "qiang_plus_one", "prob": 8 },
+ { "item": "halberd_plus_one", "prob": 8 },
+ { "item": "glaive_plus_one", "prob": 8 },
+ { "item": "naginata_plus_one", "prob": 5 },
+ { "item": "mace_plus_one", "prob": 5 },
+ { "item": "morningstar_plus_one", "prob": 5 },
+ { "item": "jian_plus_one", "prob": 5 },
+ { "item": "scimitar_plus_one", "prob": 5 },
+ { "item": "estoc_plus_one", "prob": 5 },
+ { "item": "arming_sword_plus_one", "prob": 5 },
+ { "item": "broadsword_plus_one", "prob": 5 },
+ { "item": "battleaxe_plus_one", "prob": 5 },
+ { "item": "cavalry_sabre_plus_one", "prob": 5 },
+ { "item": "crowbar_plus_one", "prob": 10 },
+ { "item": "cutlass_plus_one", "prob": 5 },
+ { "item": "fire_ax_plus_one", "prob": 8 },
+ { "item": "katana_plus_one", "prob": 5 },
+ { "item": "knife_combat_plus_one", "prob": 8 },
+ { "item": "knife_hunting_plus_one", "prob": 8 },
+ { "item": "knife_rambo_plus_one", "prob": 5 },
+ { "item": "knife_trench_plus_one", "prob": 5 },
+ { "item": "kris_plus_one", "prob": 5 },
+ { "item": "kukri_plus_one", "prob": 5 },
+ { "item": "nodachi_plus_one", "prob": 5 },
+ { "item": "pickaxe_plus_one", "prob": 8 },
+ { "item": "pike_plus_one", "prob": 5 },
+ { "item": "rapier_plus_one", "prob": 5 },
+ { "item": "tanto_plus_one", "prob": 5 },
+ { "item": "wakizashi_plus_one", "prob": 5 },
+ { "item": "zweihander_plus_one", "prob": 5 },
+ { "item": "khopesh_plus_one", "prob": 5 },
+ { "item": "sword_xiphos_plus_one", "prob": 5 },
+ { "item": "dao_plus_one", "prob": 5 },
+ { "item": "gunblade", "prob": 5 }
+ ]
+ },
+ {
+ "id": "enchanted_melee_weapons_plus2",
+ "type": "item_group",
+ "//": "plus 2 enchanted melee weapons. High end loot for boss fights, treasure rooms, etc.",
+ "items": [
+ { "item": "cudgel_plus_two", "prob": 10 },
+ { "item": "q_staff_plus_two", "prob": 10 },
+ { "item": "i_staff_plus_two", "prob": 10 },
+ { "item": "longsword_plus_two", "prob": 5 },
+ { "item": "sledge_plus_two", "prob": 8 },
+ { "item": "warhammer_plus_two", "prob": 8 },
+ { "item": "bat_plus_two", "prob": 10 },
+ { "item": "bat_metal_plus_two", "prob": 8 },
+ { "item": "spear_steel_plus_two", "prob": 8 },
+ { "item": "qiang_plus_two", "prob": 8 },
+ { "item": "halberd_plus_two", "prob": 8 },
+ { "item": "glaive_plus_two", "prob": 8 },
+ { "item": "naginata_plus_two", "prob": 5 },
+ { "item": "mace_plus_two", "prob": 5 },
+ { "item": "morningstar_plus_two", "prob": 5 },
+ { "item": "jian_plus_two", "prob": 5 },
+ { "item": "scimitar_plus_two", "prob": 5 },
+ { "item": "estoc_plus_two", "prob": 5 },
+ { "item": "arming_sword_plus_two", "prob": 5 },
+ { "item": "broadsword_plus_two", "prob": 5 },
+ { "item": "battleaxe_plus_two", "prob": 5 },
+ { "item": "cavalry_sabre_plus_two", "prob": 5 },
+ { "item": "crowbar_plus_two", "prob": 10 },
+ { "item": "cutlass_plus_two", "prob": 5 },
+ { "item": "fire_ax_plus_two", "prob": 8 },
+ { "item": "katana_plus_two", "prob": 5 },
+ { "item": "knife_combat_plus_two", "prob": 8 },
+ { "item": "knife_hunting_plus_two", "prob": 8 },
+ { "item": "knife_rambo_plus_two", "prob": 5 },
+ { "item": "knife_trench_plus_two", "prob": 5 },
+ { "item": "kris_plus_two", "prob": 5 },
+ { "item": "kukri_plus_two", "prob": 5 },
+ { "item": "nodachi_plus_two", "prob": 5 },
+ { "item": "pickaxe_plus_two", "prob": 8 },
+ { "item": "pike_plus_two", "prob": 5 },
+ { "item": "rapier_plus_two", "prob": 5 },
+ { "item": "tanto_plus_two", "prob": 5 },
+ { "item": "wakizashi_plus_two", "prob": 5 },
+ { "item": "zweihander_plus_two", "prob": 5 },
+ { "item": "khopesh_plus_two", "prob": 5 },
+ { "item": "sword_xiphos_plus_two", "prob": 5 },
+ { "item": "dao_plus_two", "prob": 5 }
+ ]
+ },
+ {
+ "id": "enchanted_small_items",
+ "//": "A distribution of small magical items for general loot areas like desks, shelves, personal items.",
+ "type": "item_group",
+ "subtype": "distribution",
+ "items": [
+ { "group": "enchanted_tokens_tool", "prob": 30 },
+ { "group": "enchanted_tokens_weapon", "prob": 3 },
+ { "group": "enchanted_rings_common", "prob": 20 },
+ { "group": "enchanted_rings_uncommon", "prob": 5 },
+ { "group": "enchanted_wands_minor", "prob": 10 },
+ { "group": "enchanted_masks", "prob": 2 },
+ { "group": "magic_shop_potions", "prob": 40 },
+ { "group": "spellbook_loot_1", "prob": 30 },
+ { "group": "magic_CBM", "prob": 2 },
+ { "item": "lair_map", "prob": 20 },
+ { "item": "retreat_map", "prob": 30 },
+ [ "crystallized_mana", 50 ],
+ { "item": "small_mana_crystal", "prob": 40, "charges-min": 5, "charges-max": 50 }
+ ]
+ },
+ {
+ "id": "enchanted_worn_items",
+ "//": "A distribution of wearable magical items for loot areas like dressers, wardrobes, coat racks.",
+ "type": "item_group",
+ "subtype": "distribution",
+ "items": [
+ { "group": "enchanted_bracers_lesser", "prob": 25 },
+ { "group": "enchanted_boots", "prob": 7 },
+ { "group": "enchanted_belts", "prob": 7 }
+ ]
+ },
+ {
+ "id": "enchanted_combat_items",
+ "//": "A distribution of magical items for combat loot.",
+ "type": "item_group",
+ "subtype": "distribution",
+ "items": [
+ { "group": "enchanted_bracers_lesser", "prob": 25 },
+ { "group": "enchanted_worn_items", "prob": 15 },
+ { "group": "enchanted_melee_weapons_plus1", "prob": 3 },
+ { "group": "enchanted_small_items", "prob": 1 }
+ ]
+ },
+ {
+ "id": "boss_treasure_items",
+ "//": "A distribution of rare magical items treasure rooms.",
+ "type": "item_group",
+ "subtype": "distribution",
+ "items": [
+ { "group": "enchanted_combat_items", "prob": 40 },
+ { "group": "enchanted_misc", "prob": 50 },
+ { "group": "enchanted_rings_unusual", "prob": 20 },
+ { "group": "enchanted_rings_rare", "prob": 30 },
+ { "group": "enchanted_wands_greater", "prob": 30 },
+ { "group": "enchanted_wands_lesser", "prob": 20 }
+ ]
+ },
+ {
+ "id": "stormshaper_items",
+ "//": "A distribution of magical items for stormshaper themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "spell_scroll_stormshaper_wall_of_fog", "prob": 50 },
+ { "item": "spell_scroll_lightning_blast", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "spell_scroll_jolt", "prob": 50 },
+ { "item": "spell_scroll_lightning_bolt", "prob": 50 },
+ { "item": "spell_scroll_windstrike", "prob": 50 },
+ { "item": "spell_scroll_windrun", "prob": 50 }
+ ],
+ "prob": 40
+ },
+ {
+ "distribution": [
+ { "item": "tome_of_storms", "prob": 5 },
+ { "item": "spell_scroll_storm_hammer", "prob": 50 },
+ { "item": "spell_scroll_stormshaper_ionization", "prob": 50 },
+ { "item": "lightning_storm_scroll", "prob": 10 }
+ ],
+ "prob": 10
+ }
+ ]
+ },
+ {
+ "id": "magical_reagents",
+ "//": "Reagents you'd use in crafting a wide variety of things, including alchemy and rituals.",
+ "type": "item_group",
+ "subtype": "distribution",
+ "items": [ { "item": "mercury", "prob": 15, "charges-min": 50 } ]
+ },
+ {
+ "id": "science",
+ "type": "item_group",
+ "items": [ { "group": "magical_reagents", "prob": 18 } ]
+ },
+ {
+ "id": "magus_items",
+ "//": "A distribution of magical items for magus themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "wizard_beginner", "prob": 30 },
+ { "item": "wizard_utility", "prob": 20 },
+ { "item": "spell_scroll_magic_missile", "prob": 70 },
+ { "item": "spell_scroll_phase_door", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "wizard_advanced", "prob": 20 },
+ { "item": "spell_scroll_magus_mana_bolt", "prob": 50 },
+ { "item": "spell_scroll_magus_haste", "prob": 50 },
+ { "item": "spell_scroll_magus_mana_beam", "prob": 50 },
+ { "item": "spell_scroll_magus_escape", "prob": 50 },
+ { "item": "spell_scroll_cats_grace", "prob": 50 },
+ { "item": "spell_scroll_eagles_sight", "prob": 50 },
+ { "item": "spell_scroll_ogres_strength", "prob": 50 },
+ { "item": "spell_scroll_foxs_cunning", "prob": 50 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "magus_spellbook_move", "prob": 25 },
+ { "item": "magus_spellbook", "prob": 25 },
+ { "item": "spell_scroll_magus_mana_blast", "prob": 50 }
+ ],
+ "prob": 10
+ },
+ {
+ "distribution": [ { "item": "recovery_spellbook", "prob": 10 }, { "item": "spell_scroll_invisibility", "prob": 50 } ],
+ "prob": 5
+ }
+ ]
+ },
+ {
+ "id": "animist_items",
+ "//": "A distribution of magical items for animist themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "spell_scroll_smite", "prob": 50 },
+ { "item": "spell_scroll_summon_zombie", "prob": 50 },
+ { "item": "spell_scroll_necrotic_gaze", "prob": 50 },
+ { "item": "spell_scroll_summon_wisps", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [ { "item": "priest_advanced", "prob": 10 }, { "item": "spell_scroll_summon_skeleton", "prob": 50 } ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "recovery_spellbook", "prob": 5 },
+ { "item": "winter_grasp", "prob": 10 },
+ { "item": "spell_scroll_recover_mana", "prob": 50 },
+ { "item": "spell_scroll_summon_decayed_pouncer", "prob": 50 },
+ { "item": "spell_scroll_recover_pain", "prob": 50 }
+ ],
+ "prob": 10
+ },
+ {
+ "distribution": [
+ { "item": "animist_doll_skeleton", "prob": 10 },
+ { "item": "animist_doll_zombie", "prob": 20 },
+ { "item": "animist_doll_decayed_pouncer", "prob": 3 }
+ ],
+ "prob": 20
+ }
+ ]
+ },
+ {
+ "id": "kelvinist_items",
+ "//": "A distribution of magical items for kelvinist themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [ { "item": "spell_scroll_create_lighter", "prob": 50 }, { "item": "spell_scroll_chilling_touch", "prob": 50 } ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "wizard_utility", "prob": 10 },
+ { "item": "spell_scroll_point_flare", "prob": 50 },
+ { "item": "spell_scroll_ice_spike", "prob": 50 },
+ { "item": "spell_scroll_burning_hands", "prob": 50 },
+ { "item": "spell_scroll_frost_spray", "prob": 50 },
+ { "item": "spell_scroll_glide_ice", "prob": 50 },
+ { "item": "spell_scroll_ice_shield", "prob": 50 },
+ { "item": "spell_scroll_frost_armor", "prob": 50 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "wizard_advanced", "prob": 5 },
+ { "item": "pyro", "prob": 5 },
+ { "item": "spell_scroll_fireball", "prob": 10 },
+ { "item": "spell_scroll_recover_bionic_power", "prob": 50 },
+ { "item": "spell_scroll_cone_cold", "prob": 50 },
+ { "item": "spell_scroll_hoary_blast", "prob": 50 }
+ ],
+ "prob": 10
+ }
+ ]
+ },
+ {
+ "id": "technomancer_items",
+ "//": "A distribution of magical items for technomancer themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "priest_beginner", "prob": 20 },
+ { "item": "techno_idiots", "prob": 20 },
+ { "item": "spell_scroll_bless", "prob": 50 },
+ { "item": "spell_scroll_create_atomic_lamp", "prob": 50 },
+ { "item": "spell_scroll_taze", "prob": 50 },
+ { "item": "spell_scroll_laze", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "priest_advanced", "prob": 20 },
+ { "item": "techno_fundamentals", "prob": 20 },
+ { "item": "spell_scroll_quantum_tunnel_lesser", "prob": 50 },
+ { "item": "spell_scroll_holy_blade", "prob": 50 },
+ { "item": "spell_scroll_spirit_armor", "prob": 50 },
+ { "item": "spell_scroll_synaptic_stimulation", "prob": 50 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "techno_em", "prob": 5 },
+ { "item": "spell_scroll_holographic_transposition", "prob": 10 },
+ { "item": "spell_scroll_recover_bionic_power", "prob": 50 },
+ { "item": "spell_scroll_animated_blade", "prob": 50 },
+ { "item": "spell_scroll_mirror_image", "prob": 50 }
+ ],
+ "prob": 10
+ },
+ {
+ "distribution": [ { "item": "recovery_spellbook", "prob": 10 }, { "item": "spell_scroll_invisibility", "prob": 50 } ],
+ "prob": 5
+ },
+ { "group": "magic_CBM", "prob": 2 }
+ ]
+ },
+ {
+ "id": "earthshaper_items",
+ "//": "A distribution of magical items for earthshaper themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "spell_scroll_stonefist", "prob": 50 },
+ { "item": "spell_scroll_eshaper_piercing_bolt", "prob": 50 },
+ { "item": "spell_scroll_eshaper_rockbolt", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "spell_scroll_seismic_stomp", "prob": 50 },
+ { "item": "spell_scroll_eshaper_shardspray", "prob": 50 },
+ { "item": "spell_scroll_earthshaper_stoneskin", "prob": 50 },
+ { "item": "spell_scroll_earthshaper_pillar", "prob": 50 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "recovery_spellbook", "prob": 5 },
+ { "item": "eshaper_spellbook", "prob": 10 },
+ { "item": "spell_scroll_recover_stamina", "prob": 50 },
+ { "item": "spell_scroll_eshaper_shardstorm", "prob": 50 },
+ { "item": "spell_scroll_lava_bomb", "prob": 50 }
+ ],
+ "prob": 10
+ }
+ ]
+ },
+ {
+ "id": "biomancer_items",
+ "//": "A distribution of magical items for biomancer themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "priest_beginner", "prob": 30 },
+ { "item": "spell_scroll_light_healing", "prob": 50 },
+ { "item": "spell_scroll_bio_acidicspray", "prob": 50 },
+ { "item": "spell_scroll_biomancer_paralytic_dart", "prob": 50 },
+ { "item": "spell_scroll_biomancer_visceral_projection", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "wizard_utility", "prob": 20 },
+ { "item": "spell_scroll_pain_split", "prob": 50 },
+ { "item": "spell_scroll_bio_grotesque", "prob": 50 },
+ { "item": "spell_scroll_biomancer_coagulant_weave", "prob": 50 },
+ { "item": "spell_scroll_bio_fleshpouch", "prob": 50 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "wizard_advanced", "prob": 10 },
+ { "item": "biomancer_spellbook", "prob": 10 },
+ { "item": "spell_scroll_vicious_tentacle", "prob": 50 },
+ { "item": "spell_scroll_bio_bonespear", "prob": 50 }
+ ],
+ "prob": 10
+ }
+ ]
+ },
+ {
+ "id": "druid_items",
+ "//": "A distribution of magical items for druid themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "spell_scroll_druid_woodshaft", "prob": 30 },
+ { "item": "summon_scroll_smudged", "prob": 2 },
+ { "item": "spell_scroll_summon_cats", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "druid_spellbook", "prob": 20 },
+ { "item": "spell_scroll_druid_veggrasp", "prob": 100 },
+ { "item": "spell_scroll_druid_naturebow1", "prob": 100 },
+ { "item": "spell_scroll_druid_rootstrike", "prob": 100 },
+ { "item": "spell_scroll_purification_seed", "prob": 100 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "recovery_spellbook", "prob": 10 },
+ { "item": "spell_scroll_recover_fatigue", "prob": 100 },
+ { "item": "spell_scroll_druidic_regrowth", "prob": 100 },
+ { "item": "spell_scroll_druidic_healing", "prob": 100 }
+ ],
+ "prob": 10
+ }
+ ]
+ },
+ {
+ "id": "technomancer_items",
+ "//": "A distribution of magical items for technomancer themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ {
+ "distribution": [
+ { "item": "priest_beginner", "prob": 20 },
+ { "item": "techno_idiots", "prob": 20 },
+ { "item": "spell_scroll_bless", "prob": 50 },
+ { "item": "spell_scroll_create_atomic_lamp", "prob": 50 },
+ { "item": "spell_scroll_taze", "prob": 50 },
+ { "item": "spell_scroll_laze", "prob": 50 }
+ ],
+ "prob": 45
+ },
+ {
+ "distribution": [
+ { "item": "priest_advanced", "prob": 20 },
+ { "item": "techno_fundamentals", "prob": 20 },
+ { "item": "spell_scroll_quantum_tunnel_lesser", "prob": 50 },
+ { "item": "spell_scroll_holy_blade", "prob": 50 },
+ { "item": "spell_scroll_spirit_armor", "prob": 50 },
+ { "item": "spell_scroll_synaptic_stimulation", "prob": 50 }
+ ],
+ "prob": 35
+ },
+ {
+ "distribution": [
+ { "item": "techno_em", "prob": 5 },
+ { "item": "spell_scroll_holographic_transposition", "prob": 10 },
+ { "item": "spell_scroll_recover_bionic_power", "prob": 50 },
+ { "item": "spell_scroll_animated_blade", "prob": 50 },
+ { "item": "spell_scroll_mirror_image", "prob": 50 }
+ ],
+ "prob": 10
+ },
+ {
+ "distribution": [ { "item": "recovery_spellbook", "prob": 10 }, { "item": "spell_scroll_invisibility", "prob": 50 } ],
+ "prob": 5
+ },
+ { "group": "magic_CBM", "prob": 2 }
+ ]
+ },
+ {
+ "id": "classless_items",
+ "//": "A distribution of magical items for classless themed spaces.",
+ "type": "item_group",
+ "subtype": "collection",
+ "items": [
+ { "group": "enchanted_tokens_tool", "prob": 15 },
+ { "group": "enchanted_tokens_weapon", "prob": 5 },
+ { "group": "potions_common", "prob": 35 },
+ {
+ "distribution": [
+ { "group": "enchanted_wands_lesser", "prob": 15 },
+ { "group": "enchanted_combat_items", "prob": 5 },
+ { "group": "enchanted_worn_items", "prob": 2 }
+ ],
+ "prob": 15
+ },
+ {
+ "distribution": [
+ { "item": "priest_beginner", "prob": 20 },
+ { "item": "wizard_beginner", "prob": 20 },
+ { "item": "spell_scroll_create_atomic_light", "prob": 50 },
+ { "item": "spell_scroll_ethereal_grasp", "prob": 50 },
+ { "item": "spell_scroll_crystallize_mana", "prob": 50 },
+ { "item": "spell_scroll_blinding_flash", "prob": 50 }
+ ],
+ "prob": 50
+ },
+ {
+ "distribution": [
+ { "item": "wizard_utility", "prob": 10 },
+ { "item": "spell_scroll_protection_aura", "prob": 50 },
+ { "item": "spell_scroll_dark_sight", "prob": 30 },
+ { "item": "spell_scroll_megablast", "prob": 30 }
+ ],
+ "prob": 40
+ },
+ {
+ "distribution": [
+ { "item": "light_manipulation_spellbook", "prob": 5 },
+ { "item": "translocate_spellbook", "prob": 2 },
+ { "item": "spell_scroll_obfuscated_body", "prob": 50 }
+ ],
+ "prob": 10
+ },
+ {
+ "distribution": [ { "group": "enchanted_rings_common", "prob": 30 }, { "group": "enchanted_rings_uncommon", "prob": 10 } ],
+ "prob": 40
+ },
+ [ "crystallized_mana", 50 ],
+ [ "copper_circlet", 10 ],
+ { "item": "small_mana_crystal", "prob": 40, "charges-min": 5, "charges-max": 50 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "id": "academy_lore",
+ "items": [ [ "retreat_map", 100 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "magic_basement_photo",
+ "items": [ [ "wizard_photo", 100 ] ]
+ },
+ {
+ "type": "item_group",
+ "id": "forest_tomb_spellbook",
+ "items": [ [ "summon_undead_spellbook", 100 ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/itemgroups/recipe_books.json b/data/mods/Magical_Nights/itemgroups/recipe_books.json
new file mode 100644
index 000000000000..d522903b1937
--- /dev/null
+++ b/data/mods/Magical_Nights/itemgroups/recipe_books.json
@@ -0,0 +1,21 @@
+[
+ {
+ "id": "magic_recipe_basic",
+ "type": "item_group",
+ "//": "Lower tier recipes, many of which can be done with the alchemist rune. Usually has at least one recipe requiring related school rune or rune weapon",
+ "items": [
+ [ "alchemy_basic", 30 ],
+ [ "necro_basic", 30 ],
+ [ "techno_basic", 30 ],
+ [ "book_mythological", 10 ],
+ [ "cooking_poison", 15 ],
+ [ "metal_legends", 5 ]
+ ]
+ },
+ {
+ "id": "magic_recipe_advanced",
+ "type": "item_group",
+ "//": "Higher tier recipes, where most school-related recipes require their rune or rune weapon.",
+ "items": [ [ "magic_armormaking", 30 ], [ "weapon_enchanting_guide", 30 ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/itemgroups/spellbooks.json b/data/mods/Magical_Nights/itemgroups/spellbooks.json
new file mode 100644
index 000000000000..c6f24873ccfc
--- /dev/null
+++ b/data/mods/Magical_Nights/itemgroups/spellbooks.json
@@ -0,0 +1,216 @@
+[
+ {
+ "id": "spell_scroll_tier_0",
+ "type": "item_group",
+ "items": [
+ [ "summon_scroll_smudged", 10 ],
+ [ "spell_scroll_summon_lemon", 20 ],
+ [ "spell_scroll_smite", 40 ],
+ [ "spell_scroll_summon_zombie", 25 ],
+ [ "spell_scroll_light_healing", 50 ],
+ [ "spell_scroll_bio_acidicspray", 35 ],
+ [ "spell_scroll_create_atomic_light", 50 ],
+ [ "spell_scroll_blinding_flash", 50 ],
+ [ "spell_scroll_ethereal_grasp", 50 ],
+ [ "spell_scroll_druid_woodshaft", 50 ],
+ [ "spell_scroll_summon_cats", 65 ],
+ [ "spell_scroll_stonefist", 20 ],
+ [ "spell_scroll_eshaper_piercing_bolt", 40 ],
+ [ "spell_scroll_eshaper_rockbolt", 50 ],
+ [ "spell_scroll_create_lighter", 50 ],
+ [ "spell_scroll_chilling_touch", 50 ],
+ [ "spell_scroll_magic_missile", 50 ],
+ [ "spell_scroll_bless", 25 ],
+ [ "spell_scroll_create_atomic_lamp", 25 ],
+ [ "spell_scroll_taze", 25 ],
+ [ "spell_scroll_laze", 25 ],
+ [ "spell_scroll_lightning_blast", 20 ],
+ [ "spell_scroll_necrotic_gaze", 50 ],
+ [ "spell_scroll_crystallize_mana", 20 ],
+ [ "spell_scroll_biomancer_paralytic_dart", 40 ],
+ [ "spell_scroll_biomancer_visceral_projection", 40 ],
+ [ "spell_scroll_summon_wisps", 30 ],
+ [ "spell_scroll_stormshaper_wall_of_fog", 35 ]
+ ]
+ },
+ {
+ "id": "spell_scroll_tier_1",
+ "type": "item_group",
+ "items": [
+ [ "spell_scroll_summon_skeleton", 35 ],
+ [ "spell_scroll_pain_split", 25 ],
+ [ "spell_scroll_bio_grotesque", 40 ],
+ [ "spell_scroll_bio_fleshpouch", 30 ],
+ [ "spell_scroll_protection_aura", 50 ],
+ [ "spell_scroll_druid_veggrasp", 35 ],
+ [ "spell_scroll_druid_rootstrike", 40 ],
+ [ "spell_scroll_druid_naturebow1", 20 ],
+ [ "spell_scroll_seismic_stomp", 20 ],
+ [ "spell_scroll_eshaper_shardspray", 25 ],
+ [ "spell_scroll_point_flare", 50 ],
+ [ "spell_scroll_ice_spike", 50 ],
+ [ "spell_scroll_burning_hands", 50 ],
+ [ "spell_scroll_frost_spray", 50 ],
+ [ "spell_scroll_glide_ice", 25 ],
+ [ "spell_scroll_ice_shield", 25 ],
+ [ "spell_scroll_frost_armor", 35 ],
+ [ "spell_scroll_phase_door", 50 ],
+ [ "spell_scroll_jolt", 50 ],
+ [ "spell_scroll_lightning_bolt", 35 ],
+ [ "spell_scroll_windstrike", 50 ],
+ [ "spell_scroll_windrun", 35 ],
+ [ "spell_scroll_holy_blade", 25 ],
+ [ "spell_scroll_spirit_armor", 25 ],
+ [ "spell_scroll_quantum_tunnel_lesser", 50 ],
+ [ "spell_scroll_synaptic_stimulation", 20 ],
+ [ "spell_scroll_purification_seed", 40 ],
+ [ "spell_scroll_crystallize_mana", 50 ],
+ [ "spell_scroll_earthshaper_stoneskin", 30 ],
+ [ "spell_scroll_earthshaper_pillar", 35 ],
+ [ "spell_scroll_biomancer_coagulant_weave", 30 ],
+ [ "spell_scroll_condense_water", 45 ],
+ [ "spell_scroll_acid_bolt", 35 ]
+ ]
+ },
+ {
+ "id": "spell_scroll_tier_2",
+ "type": "item_group",
+ "items": [
+ [ "spell_scroll_recover_mana", 25 ],
+ [ "spell_scroll_recover_pain", 25 ],
+ [ "spell_scroll_recover_fatigue", 25 ],
+ [ "spell_scroll_recover_stamina", 25 ],
+ [ "spell_scroll_recover_bionic_power", 25 ],
+ [ "spell_scroll_summon_decayed_pouncer", 35 ],
+ [ "spell_scroll_summon_floating_disk", 25 ],
+ [ "spell_scroll_vicious_tentacle", 40 ],
+ [ "spell_scroll_bio_bonespear", 20 ],
+ [ "spell_scroll_megablast", 10 ],
+ [ "spell_scroll_eshaper_shardstorm", 50 ],
+ [ "spell_scroll_fireball", 50 ],
+ [ "spell_scroll_cone_cold", 50 ],
+ [ "spell_scroll_hoary_blast", 50 ],
+ [ "spell_scroll_gravity_well", 35 ],
+ [ "spell_scroll_magus_mana_bolt", 35 ],
+ [ "spell_scroll_magus_haste", 50 ],
+ [ "spell_scroll_magus_mana_beam", 35 ],
+ [ "spell_scroll_magus_escape", 50 ],
+ [ "spell_scroll_cats_grace", 50 ],
+ [ "spell_scroll_eagles_sight", 50 ],
+ [ "spell_scroll_ogres_strength", 50 ],
+ [ "spell_scroll_foxs_cunning", 50 ],
+ [ "spell_scroll_storm_hammer", 35 ],
+ [ "spell_scroll_animated_blade", 35 ],
+ [ "spell_scroll_mirror_image", 15 ],
+ [ "spell_scroll_holographic_transposition", 15 ],
+ [ "spell_scroll_dark_sight", 30 ],
+ [ "spell_scroll_druidic_regrowth", 20 ],
+ [ "spell_scroll_stormshaper_ionization", 40 ],
+ [ "spell_scroll_create_acid", 35 ],
+ [ "spell_scroll_condense_clean_water", 35 ],
+ [ "spell_scroll_rock_tomb", 50 ],
+ [ "spell_scroll_acid_bomb", 25 ]
+ ]
+ },
+ {
+ "id": "spell_scroll_tier_3",
+ "type": "item_group",
+ "items": [
+ [ "spell_scroll_magus_mana_blast", 50 ],
+ [ "lightning_storm_scroll", 50 ],
+ [ "spell_scroll_invisibility", 10 ],
+ [ "spell_scroll_obfuscated_body", 10 ],
+ [ "spell_scroll_lava_bomb", 5 ],
+ [ "spell_scroll_druidic_healing", 20 ],
+ [ "bio_sneeze_beam", 50 ],
+ [ "spell_scroll_fire_storm", 50 ],
+ [ "spell_scroll_ice_storm", 50 ],
+ [ "spell_scroll_meteor", 10 ],
+ [ "spell_scroll_acid_storm", 20 ]
+ ]
+ },
+ {
+ "id": "spellbook_tier_0",
+ "type": "item_group",
+ "//": "These are spellbooks that a beginner would have, or scrolls that would have this tier or one tier higher of spells.",
+ "items": [
+ [ "wizard_beginner", 30 ],
+ [ "priest_beginner", 30 ],
+ [ "techno_idiots", 30 ],
+ [ "novice_techno_spellbook", 30 ],
+ [ "novice_storm_spellbook", 30 ],
+ [ "novice_earth_spellbook", 30 ],
+ [ "novice_kelvin_spellbook", 30 ]
+ ]
+ },
+ {
+ "id": "spellbook_tier_1",
+ "type": "item_group",
+ "items": [ [ "wizard_utility", 50 ], [ "priest_advanced", 50 ], [ "techno_fundamentals", 50 ], [ "stat_up_spellbook", 45 ] ]
+ },
+ {
+ "id": "spellbook_tier_2",
+ "type": "item_group",
+ "items": [
+ [ "winter_grasp", 60 ],
+ [ "tome_of_storms", 60 ],
+ [ "biomancer_spellbook", 60 ],
+ [ "druid_spellbook", 60 ],
+ [ "pyro", 60 ],
+ [ "eshaper_spellbook", 60 ],
+ [ "techno_em", 60 ],
+ [ "wizard_advanced", 60 ],
+ [ "stat_up_spellbook", 45 ]
+ ]
+ },
+ {
+ "id": "spellbook_tier_3",
+ "type": "item_group",
+ "items": [
+ [ "magus_spellbook", 15 ],
+ [ "magus_spellbook_move", 30 ],
+ [ "translocate_spellbook", 20 ],
+ [ "light_manipulation_spellbook", 5 ],
+ [ "recovery_spellbook", 30 ]
+ ]
+ },
+ {
+ "id": "spellbook_loot_0",
+ "type": "item_group",
+ "//": "the difference between tiers and loot are that loot should be easy to",
+ "//2": "drop into an itemgroup or mapgen without having multiple entries for higher tier spellbooks.",
+ "//3": "and loot tiers will not always have the lower tier spellbook tiers.",
+ "items": [
+ { "group": "spellbook_tier_0", "prob": 60 },
+ { "group": "spellbook_tier_1", "prob": 30 },
+ { "group": "spellbook_tier_2", "prob": 9 },
+ { "group": "spellbook_tier_3", "prob": 1 },
+ { "group": "spell_scroll_tier_0", "prob": 300 },
+ { "group": "spell_scroll_tier_1", "prob": 100 }
+ ]
+ },
+ {
+ "id": "spellbook_loot_1",
+ "type": "item_group",
+ "items": [
+ { "group": "spellbook_tier_0", "prob": 30 },
+ { "group": "spellbook_tier_1", "prob": 50 },
+ { "group": "spellbook_tier_2", "prob": 18 },
+ { "group": "spellbook_tier_3", "prob": 2 },
+ { "group": "spell_scroll_tier_1", "prob": 300 },
+ { "group": "spell_scroll_tier_2", "prob": 100 }
+ ]
+ },
+ {
+ "id": "spellbook_loot_2",
+ "type": "item_group",
+ "items": [
+ { "group": "spellbook_tier_0", "prob": 5 },
+ { "group": "spellbook_tier_1", "prob": 30 },
+ { "group": "spellbook_tier_2", "prob": 50 },
+ { "group": "spellbook_tier_3", "prob": 15 },
+ { "group": "spell_scroll_tier_2", "prob": 300 },
+ { "group": "spell_scroll_tier_3", "prob": 100 }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/alchemy_items.json b/data/mods/Magical_Nights/items/alchemy_items.json
new file mode 100644
index 000000000000..a3fda74bb1ae
--- /dev/null
+++ b/data/mods/Magical_Nights/items/alchemy_items.json
@@ -0,0 +1,151 @@
+[
+ {
+ "id": "owlbear_stone",
+ "type": "TOOL",
+ "name": "owlbear gastrolith",
+ "description": "This strangely shaped rock was once a part of an owlbear's complex digestive system, creating a link between owl throat and bear stomach. It is possible that it could serve a similar purpose in alchemy, helping to bind together two disparate halves.",
+ "weight": "2 kg",
+ "volume": "750 ml",
+ "price": 0,
+ "bashing": 9,
+ "to_hit": -1,
+ "material": "stone",
+ "symbol": ";",
+ "color": "light_gray",
+ "qualities": [ [ "HAMMER", 2 ] ],
+ "use_action": "HAMMER",
+ "//": "In terms of alchemy the gastrolith could serve to combie different effects, such as safely mixing together potions, or it could be used as an element of change, such as for shapechanging potions."
+ },
+ {
+ "id": "stone_shell",
+ "type": "GENERIC",
+ "symbol": "*",
+ "color": "light_gray",
+ "name": "stone shell",
+ "description": "The broken fragment of an owlbear egg. With luck it might still contain some of its former power, though if nothing else it's still a bit sharp.",
+ "material": "stone",
+ "weight": "250 g",
+ "volume": "150 ml",
+ "bashing": 5,
+ "cutting": 3,
+ "to_hit": -2,
+ "qualities": [ [ "BUTCHER", -50 ] ],
+ "//": "Potion recipes that require a full owlbear egg could also instead require larger amounts of stone shell. Since 1 egg gives 3 shells, you could perhaps have 1 egg be equivalent to 5 or more shells when making potions."
+ },
+ {
+ "id": "potion_starter",
+ "copy-from": "mixed_alcohol_strong",
+ "type": "COMESTIBLE",
+ "name": "potion starter",
+ "description": "Strong alcohol, infused with mana and concentrated into a liquid that can stabilize spells into liquid form. You can still drink it, if you want."
+ },
+ {
+ "id": "potion_starter_superior",
+ "copy-from": "chem_ethanol",
+ "type": "COMESTIBLE",
+ "name": "superior potion starter",
+ "description": "Pure ethanol saturated with magical energy. The sheer power concentrated within causes the surface of the potion to ripple continuously."
+ },
+ {
+ "id": "adrenal_gland_large",
+ "copy-from": "meat",
+ "type": "COMESTIBLE",
+ "name": { "str": "large adrenal gland" },
+ "description": "An organ located above the kidneys responsible for secretion of adrenaline, cortisol, and aldosterone. This one is huge, whether by nature or mutation.",
+ "delete": { "flags": [ "SMOKABLE" ] },
+ "price": "20 USD"
+ },
+ {
+ "id": "glow_dust",
+ "type": "GENERIC",
+ "symbol": "*",
+ "color": "yellow",
+ "name": "glow dust",
+ "description": "The powdered remains of a will-o-wisps's phsyical form. It seems to still possess an otherworldly glow.",
+ "material": "powder",
+ "weight": "5 g",
+ "volume": "250 ml"
+ },
+ {
+ "id": "bulette_pearl",
+ "type": "GENERIC",
+ "symbol": "*",
+ "color": "red",
+ "name": "bulette pearl",
+ "description": "As a bulette burrows through the earth its gills collect minute amounts of precious metals and gems which slowly aggregate into lustrous gemstones prized for their beauty and power.",
+ "material": "stone",
+ "weight": "120 g",
+ "volume": "250 ml"
+ },
+ {
+ "id": "dragon_essence",
+ "type": "COMESTIBLE",
+ "symbol": "~",
+ "color": "light_red",
+ "name": "dragon essence",
+ "description": "This is the magical essence from a dragon, distilled into a concentrated form.",
+ "volume": "250 ml",
+ "weight": "300 g",
+ "flags": [ "TRADER_AVOID", "INEDIBLE" ],
+ "container": "flask_glass",
+ "charges": 1,
+ "phase": "liquid"
+ },
+ {
+ "id": "stirge_proboscis",
+ "type": "GENERIC",
+ "name": { "str": "stirge proboscis", "str_pl": "stirge proboscises" },
+ "description": "A long sucking apparatus harvested from stirge corpse. Makes a poor melee weapon.",
+ "volume": "100 ml",
+ "weight": "100 g",
+ "price": "20 USD",
+ "symbol": ",",
+ "color": "red",
+ "to_hit": -1,
+ "material": [ "flesh" ],
+ "cutting": 7,
+ "flags": [ "STAB", "SHEATH_KNIFE" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "demon_spider_fang",
+ "name": "demon spider fang",
+ "description": "A fang from a demon spider. It seems to still drip with poison; you might be able to use this in some alchemical recipe?",
+ "weight": "270 g",
+ "to_hit": -2,
+ "color": "green",
+ "symbol": ",",
+ "material": [ "flesh" ],
+ "volume": "250 ml",
+ "cutting": 8,
+ "flags": [ "STAB", "SHEATH_KNIFE" ],
+ "price": "15 USD"
+ },
+ {
+ "type": "AMMO",
+ "id": "alumentum",
+ "category": "spare_parts",
+ "price": "9 USD",
+ "name": { "str_sp": "alumentum" },
+ "symbol": "=",
+ "color": "light_blue",
+ "description": "Alumentum is magically processed coal or charcoal. It burns as hot as magnesium, and for a significantly longer period of time. This makes it quite a useful material to produce for many mages.",
+ "phase": "solid",
+ "volume": "250 ml",
+ "weight": "11 g",
+ "ammo_type": "alumentum",
+ "count": 50,
+ "stack_size": 10,
+ "fuel": { "energy": 3 }
+ },
+ {
+ "id": "mana_dust",
+ "type": "GENERIC",
+ "symbol": "*",
+ "color": "blue",
+ "name": "mana dust",
+ "description": "Crystallized mana in powdered form. It faintly pulses with arcane energy.",
+ "material": "powder",
+ "volume": "100 ml"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/ammo_types.json b/data/mods/Magical_Nights/items/ammo_types.json
new file mode 100644
index 000000000000..904a98d47c0f
--- /dev/null
+++ b/data/mods/Magical_Nights/items/ammo_types.json
@@ -0,0 +1,44 @@
+[
+ {
+ "type": "ammunition_type",
+ "id": "dragon_blood",
+ "name": "dragon blood",
+ "default": "dragon_blood"
+ },
+ {
+ "type": "ammunition_type",
+ "id": "tainted_blood",
+ "name": "tainted blood",
+ "default": "blood_tainted"
+ },
+ {
+ "type": "ammunition_type",
+ "id": "blood",
+ "name": "blood",
+ "default": "blood"
+ },
+ {
+ "type": "ammunition_type",
+ "id": "mana_infused_blood",
+ "name": "mana infused blood",
+ "default": "mana_infused_blood"
+ },
+ {
+ "type": "ammunition_type",
+ "id": "arrow_orichalcum",
+ "name": "orichalcum arrow",
+ "default": "arrow_odin"
+ },
+ {
+ "type": "ammunition_type",
+ "id": "alumentum",
+ "name": "alumentum",
+ "default": "alumentum"
+ },
+ {
+ "type": "ammunition_type",
+ "id": "mercury",
+ "name": "mercury",
+ "default": "mercury"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/archery.json b/data/mods/Magical_Nights/items/archery.json
new file mode 100644
index 000000000000..60e920ee531a
--- /dev/null
+++ b/data/mods/Magical_Nights/items/archery.json
@@ -0,0 +1,51 @@
+[
+ {
+ "id": "ichaival",
+ "type": "GUN",
+ "looks_like": "compositebow",
+ "symbol": "(",
+ "color": "white",
+ "name": { "str": "Ichaival" },
+ "description": "Ichaival, the bow of Odin. Rumored to fire 10 arrows with every pull of the string. It has gold and silver ornaments on it, as well as an ornate Raven.",
+ "price": "1600 USD",
+ "material": [ "orichalcum_metal", "gold", "wood" ],
+ "flags": [ "FIRE_TWOHAND", "STR_DRAW", "RELOAD_AND_SHOOT", "PRIMITIVE_RANGED_WEAPON", "BELTED", "COMPACT", "WATER_FRIENDLY" ],
+ "skill": "archery",
+ "min_strength": 8,
+ "ammo": [ "arrow_orichalcum", "arrow" ],
+ "weight": "740 g",
+ "volume": "5 L",
+ "bashing": 14,
+ "armor_data": { "covers": [ "torso" ], "encumbrance": 14 },
+ "reload_noise_volume": 2,
+ "loudness": 5,
+ "ranged_damage": { "damage_type": "stab", "amount": 40 },
+ "range": 20,
+ "dispersion": 95,
+ "durability": 6,
+ "clip_size": 1,
+ "reload": 40,
+ "valid_mod_locations": [ [ "underbarrel", 1 ], [ "sights", 1 ], [ "accessories", 2 ], [ "stabilizer", 1 ], [ "dampening", 1 ] ]
+ },
+ {
+ "type": "AMMO",
+ "id": "arrow_odin",
+ "price": "35 USD",
+ "name": "orichalcum arrow",
+ "symbol": "=",
+ "color": "white",
+ "description": "An arrow composed of a sliver of orichalcum. The arrow has a mysterious glow. Has a very high chance of staying intact when fired, however can only be fired from Ichaival.",
+ "material": [ "wood", "orichalcum_metal" ],
+ "ammo_type": "arrow_orichalcum",
+ "volume": "145 ml",
+ "weight": "30 g",
+ "bashing": 12,
+ "damage": { "damage_type": "stab", "damage_multiplier": 1.95, "armor_penetration": 20 },
+ "dispersion": 35,
+ "loudness": 0,
+ "range": 7,
+ "count": 15,
+ "stack_size": 15,
+ "dont_recover_one_in": 65
+ }
+]
diff --git a/data/mods/Magical_Nights/items/armor.json b/data/mods/Magical_Nights/items/armor.json
new file mode 100644
index 000000000000..58cbfe228219
--- /dev/null
+++ b/data/mods/Magical_Nights/items/armor.json
@@ -0,0 +1,108 @@
+[
+ {
+ "id": "quiver",
+ "name": "quiver",
+ "copy-from": "quiver",
+ "type": "ARMOR",
+ "use_action": { "type": "bandolier", "capacity": 20, "ammo": [ "arrow", "bolt", "arrow_orichalcum" ], "draw_cost": 20 }
+ },
+ {
+ "id": "quiver_large",
+ "name": "large quiver",
+ "copy-from": "quiver_large",
+ "type": "ARMOR",
+ "use_action": { "type": "bandolier", "capacity": 60, "ammo": [ "arrow", "bolt", "arrow_orichalcum" ], "draw_cost": 20 }
+ },
+ {
+ "id": "quiver_birchbark",
+ "name": { "str": "birchbark quiver" },
+ "copy-from": "quiver_birchbark",
+ "type": "ARMOR",
+ "use_action": { "type": "bandolier", "capacity": 20, "ammo": [ "arrow", "bolt", "arrow_orichalcum" ], "draw_cost": 20 }
+ },
+ {
+ "id": "quiver_large_birchbark",
+ "name": "large birchbark quiver",
+ "copy-from": "quiver_large_birchbark",
+ "type": "ARMOR",
+ "use_action": { "type": "bandolier", "capacity": 60, "ammo": [ "arrow", "bolt", "arrow_orichalcum" ], "draw_cost": 20 }
+ },
+ {
+ "id": "armguard_demonchitin",
+ "copy-from": "armguard_chitin",
+ "type": "ARMOR",
+ "name": { "str": "pair of demon chitin arm guards", "str_pl": "pairs of demon chitin arm guards" },
+ "description": "A pair of arm guards crafted from the carefully cleaned and pruned red exoskeletons of demon spiders. Fire-resistant and very durable.",
+ "material": [ "demon_chitin" ],
+ "proportional": { "weight": 0.9, "encumbrance": 0.9, "price": 10, "warmth": 2 },
+ "environmental_protection": 8
+ },
+ {
+ "id": "armor_demonchitin",
+ "copy-from": "armor_chitin",
+ "type": "ARMOR",
+ "name": { "str": "demon chitin armor" },
+ "description": "Leg and body armor crafted from the carefully cleaned and pruned red exoskeletons of demon spiders. Fire-resistant and very durable.",
+ "material": [ "demon_chitin" ],
+ "proportional": { "weight": 0.9, "encumbrance": 0.9, "price": 10, "warmth": 2 },
+ "environmental_protection": 8
+ },
+ {
+ "id": "helmet_demonchitin",
+ "copy-from": "helmet_chitin",
+ "type": "ARMOR",
+ "name": { "str": "demon chitin helmet" },
+ "description": "A helmet crafted from the carefully cleaned and pruned red exoskeletons of demon spiders. Covers the entire head; fire-resistant and very durable.",
+ "material": [ "demon_chitin" ],
+ "proportional": { "weight": 0.9, "encumbrance": 0.9, "price": 10, "warmth": 2 },
+ "environmental_protection": 8
+ },
+ {
+ "id": "gauntlets_demonchitin",
+ "copy-from": "gauntlets_chitin",
+ "type": "ARMOR",
+ "name": { "str": "pair of demon chitin gauntlets", "str_pl": "pairs of demon chitin gauntlets" },
+ "description": "Gauntlets crafted from the carefully cleaned and pruned red exoskeletons of demon spiders. Fire-resistant and very durable.",
+ "material": [ "demon_chitin" ],
+ "proportional": { "weight": 0.9, "encumbrance": 0.9, "price": 10, "warmth": 2 },
+ "environmental_protection": 8
+ },
+ {
+ "id": "boots_demonchitin",
+ "copy-from": "boots_chitin",
+ "type": "ARMOR",
+ "name": { "str": "pair of demon chitin boots", "str_pl": "pairs of demon chitin boots" },
+ "description": "Boots crafted from carefully cleaned and pruned pruned red exoskeletons of demon spiders. Fire-resistant and very durable.",
+ "material": [ "demon_chitin" ],
+ "proportional": { "weight": 0.9, "encumbrance": 0.9, "price": 10, "warmth": 2 },
+ "environmental_protection": 8
+ },
+ {
+ "type": "PET_ARMOR",
+ "id": "demonchitin_harness_dog",
+ "copy-from": "kevlar_armor_small_quadruped",
+ "color": "red",
+ "name": { "str": "demon chitin dog mesh harness", "str_pl": "demon chitin dog mesh harnesses" },
+ "description": "A makeshift harness of demon chitin fitted to a thin mesh protecting the neck to flank of canines. You could put this on a friendly dog.",
+ "price": "500 USD",
+ "price_postapoc": "50 USD",
+ "material": [ "demon_chitin" ],
+ "weight": "4862 g",
+ "environmental_protection": 8
+ },
+ {
+ "type": "PET_ARMOR",
+ "id": "demonchitin_armor_horse",
+ "copy-from": "medium_quadruped_armor",
+ "color": "green",
+ "name": { "str": "demon chitin horse armor" },
+ "description": "A makeshift assembly of criniere, peytral and croupiere made from demon chitin fitted to a thin mesh. You could put this on a friendly horse.",
+ "price": "1200 USD",
+ "price_postapoc": "120 USD",
+ "material": [ "demon_chitin", "steel" ],
+ "weight": "31500 g",
+ "volume": "150 L",
+ "material_thickness": 6,
+ "environmental_protection": 8
+ }
+]
diff --git a/data/mods/Magical_Nights/items/bionics.json b/data/mods/Magical_Nights/items/bionics.json
new file mode 100644
index 000000000000..a24a613afca0
--- /dev/null
+++ b/data/mods/Magical_Nights/items/bionics.json
@@ -0,0 +1,18 @@
+[
+ {
+ "type": "enchantment",
+ "id": "ench_bio_sneeze_beam",
+ "values": [ { "value": "MANA_CAP", "add": 500 } ]
+ },
+ {
+ "id": "bio_sneeze_beam",
+ "copy-from": "bionic_general",
+ "type": "BIONIC_ITEM",
+ "name": { "str": "Crystallized Mana Nose Replacement" },
+ "description": "A large gem made with crystallized mana and some other stabilizing metals. Comes with a specially designed power pack (installed into the skull) that does not interfere with your normal facial functions. WARNING: for Technophile use only. By using this spell you are waiving all liability of Frikken Laser Beams Inc. and its subsidiaries.",
+ "price": "4500 USD",
+ "weight": "750 g",
+ "volume": "177 ml",
+ "difficulty": 8
+ }
+]
diff --git a/data/mods/Magical_Nights/items/black_dragon_items.json b/data/mods/Magical_Nights/items/black_dragon_items.json
new file mode 100644
index 000000000000..d3222e504560
--- /dev/null
+++ b/data/mods/Magical_Nights/items/black_dragon_items.json
@@ -0,0 +1,381 @@
+[
+ {
+ "type": "GENERIC",
+ "id": "dragon_black_scale",
+ "category": "spare_parts",
+ "symbol": "o",
+ "color": "black_white",
+ "name": "black dragon scale",
+ "price": "25 USD",
+ "material": "black_dragon_hide",
+ "weight": "380 g",
+ "volume": "75 ml",
+ "bashing": 0,
+ "to_hit": -4,
+ "description": "A scale from a black dragon. It still has its magical properties and acid resistance."
+ },
+ {
+ "type": "COMESTIBLE",
+ "id": "black_dragon_hide_raw",
+ "category": "spare_parts",
+ "name": "raw black dragon hide",
+ "weight": "2500 g",
+ "color": "black_white",
+ "spoils_in": "3 day",
+ "comestible_type": "FOOD",
+ "symbol": ",",
+ "description": "A carefully folded raw hide harvested from a black dragon. It is a large enough piece that it is workable to make armor, and with enough scales you could make scale mail.",
+ "price": "500 USD",
+ "material": [ "black_dragon_hide", "flesh" ],
+ "flags": [ "NO_SALVAGE", "TRADER_AVOID" ],
+ "vitamins": [ ],
+ "volume": "4 L",
+ "stack_size": 1
+ },
+ {
+ "id": "black_dragon_tanning_hide",
+ "type": "TOOL",
+ "category": "spare_parts",
+ "name": "tanning black dragon hide",
+ "description": "A treated black dragon hide which is undergoing the chemical processes required to become workable. You will be able to activate it to unroll and make use of it when it is done.",
+ "weight": "2500 g",
+ "volume": "4 L",
+ "price": "0 cent",
+ "to_hit": -2,
+ "material": [ "flesh", "black_dragon_hide" ],
+ "symbol": ",",
+ "color": "black_white",
+ "use_action": {
+ "target": "black_dragon_tanned_hide",
+ "msg": "You carefully unfold the black dragon hide and shake it clean.",
+ "moves": 150,
+ "type": "delayed_transform",
+ "transform_age": 28800,
+ "not_ready_msg": "The black dragon hide isn't done yet.",
+ "//": "2 days"
+ },
+ "flags": [ "NO_SALVAGE" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "black_dragon_tanned_hide",
+ "symbol": ",",
+ "color": "black_white",
+ "name": "black dragon hide",
+ "description": "Prepared hide from a black dragon. Hard, acid-resistant, and with more scales could make a suit of armor as hard as steel and half as heavy.",
+ "price": "500 USD",
+ "material": [ "black_dragon_hide" ],
+ "weight": "2500 g",
+ "volume": "4 L",
+ "category": "spare_parts",
+ "to_hit": -1
+ },
+ {
+ "id": "boots_black_dragon_scale",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str": "pair of black dragonscale boots", "str_pl": "pairs of black dragonscale boots" },
+ "description": "Boots made of black dragonscale. Very protective, and surprisingly light.",
+ "weight": "945 g",
+ "volume": "3250 ml",
+ "price": "750 USD",
+ "to_hit": -2,
+ "bashing": 7,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "feet" ],
+ "coverage": 100,
+ "encumbrance": 30,
+ "warmth": 20,
+ "material_thickness": 4,
+ "environmental_protection": 3,
+ "flags": [ "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "boots_black_dragon_hide",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str": "pair of black dragonhide boots", "str_pl": "pairs of black dragonhide boots" },
+ "description": "Boots made of black dragonhide. Very protective, and surprisingly light.",
+ "weight": "655 g",
+ "volume": "3250 ml",
+ "price": "500 USD",
+ "to_hit": -2,
+ "bashing": 7,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "feet" ],
+ "coverage": 100,
+ "encumbrance": 18,
+ "warmth": 20,
+ "material_thickness": 2,
+ "environmental_protection": 3,
+ "flags": [ "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "helmet_black_dragon_scale",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": "black dragonscale helmet",
+ "description": "A helmet made from black dragonscale, held together with black dragonhide. It comes equipped with a full face visor.",
+ "weight": "856 g",
+ "volume": "2500 ml",
+ "price": "580 USD",
+ "to_hit": -1,
+ "bashing": 10,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "head", "eyes", "mouth" ],
+ "coverage": 100,
+ "encumbrance": 32,
+ "warmth": 15,
+ "material_thickness": 6,
+ "environmental_protection": 3,
+ "techniques": [ "WBLOCK_1" ],
+ "flags": [ "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "helmet_black_dragon_hide",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": "black dragonhide helmet",
+ "description": "A helmet made from black dragonhide. It protects your head well, and doesn't cover your face.",
+ "weight": "585 g",
+ "volume": "2500 ml",
+ "price": "580 USD",
+ "to_hit": -1,
+ "bashing": 10,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "head" ],
+ "coverage": 100,
+ "encumbrance": 32,
+ "warmth": 15,
+ "material_thickness": 2,
+ "environmental_protection": 1,
+ "techniques": [ "WBLOCK_1" ],
+ "flags": [ "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "suit_black_dragon_scale",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": "black dragonscale armor",
+ "description": "A full suit of black dragon scale mail. It comes with all the accoutrements that cover your torso, legs, and arms, with the benefit of being very light and flexible.",
+ "weight": "4250 g",
+ "volume": "12 L",
+ "price": "20 kUSD",
+ "to_hit": -3,
+ "bashing": 6,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "legs", "torso", "arms" ],
+ "coverage": 100,
+ "encumbrance": 25,
+ "warmth": 15,
+ "material_thickness": 4,
+ "environmental_protection": 2,
+ "flags": [ "VARSIZE", "WATERPROOF", "RAINPROOF", "STURDY" ]
+ },
+ {
+ "id": "suit_black_dragon_hide",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": "black dragonhide armor",
+ "description": "A full suit of black dragonhide armor. It comes with all the accoutrements that cover your torso, legs, and arms, with the benefit of being very light and flexible.",
+ "weight": "3 kg",
+ "volume": "12 L",
+ "price": "20 kUSD",
+ "to_hit": -3,
+ "bashing": 6,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "legs", "torso", "arms" ],
+ "coverage": 100,
+ "encumbrance": 18,
+ "warmth": 15,
+ "material_thickness": 4,
+ "environmental_protection": 1,
+ "flags": [ "VARSIZE", "WATERPROOF", "RAINPROOF", "STURDY" ]
+ },
+ {
+ "id": "gauntlets_black_dragon_scale",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str": "pair of black dragonscale gauntlets", "str_pl": "pairs of black dragonscale gauntlets" },
+ "description": "A pair of heavy-duty gauntlets made of black dragonscale that covers your hands.",
+ "weight": "380 g",
+ "volume": "1 L",
+ "price": "1800 USD",
+ "to_hit": 2,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "hands" ],
+ "coverage": 100,
+ "encumbrance": 20,
+ "warmth": 15,
+ "material_thickness": 3,
+ "environmental_protection": 3,
+ "flags": [ "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "gloves_black_dragon_hide",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str": "pair of black dragonhide gloves", "str_pl": "pairs of black dragonhide gloves" },
+ "description": "A pair of customized, Kevlar armored leather gloves, modified to be easy to wear while providing maximum protection under extreme conditions.",
+ "weight": "230 g",
+ "volume": "750 ml",
+ "price": "1800 USD",
+ "to_hit": 2,
+ "material": [ "black_dragon_hide" ],
+ "symbol": "[",
+ "color": "black_white",
+ "covers": [ "hands" ],
+ "coverage": 100,
+ "encumbrance": 8,
+ "warmth": 15,
+ "material_thickness": 2,
+ "environmental_protection": 1,
+ "flags": [ "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "boots_xlblack_dragon_scale",
+ "copy-from": "boots_black_dragon_scale",
+ "type": "ARMOR",
+ "name": { "str": "pair of XL black dragonscale boots", "str_pl": "pairs of XL black dragonscale boots" },
+ "description": "Massive boots made of black dragonscale, modified to fit even the strangest of bodies. Very protective, and surprisingly light.",
+ "weight": "1545 g",
+ "volume": "6250 ml",
+ "encumbrance": 40,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "boots_xlblack_dragon_hide",
+ "copy-from": "boots_black_dragon_hide",
+ "type": "ARMOR",
+ "name": { "str": "pair of XL black dragonhide boots", "str_pl": "pairs of XL black dragonhide boots" },
+ "description": "Massive boots made of black dragonhide, modified to fit even the strangest of bodies. Very protective, and surprisingly light.",
+ "weight": "955 g",
+ "volume": "6250 ml",
+ "encumbrance": 28,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "gauntlets_xlblack_dragon_scale",
+ "copy-from": "gauntlets_black_dragon_scale",
+ "type": "ARMOR",
+ "name": { "str": "pair of XL black dragonscale gauntlets", "str_pl": "pairs of XL black dragonscale gauntlets" },
+ "description": "A pair of heavy-duty gauntlets made of black dragonscale that covers your hands, or whatever you use as hands.",
+ "weight": "680 g",
+ "volume": "2 L",
+ "encumbrance": 30,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "gloves_xlblack_dragon_hide",
+ "copy-from": "gloves_black_dragon_hide",
+ "type": "ARMOR",
+ "name": { "str": "pair of XL black dragonhide gloves", "str_pl": "pairs of XL black dragonhide gloves" },
+ "description": "A pair of customized, Kevlar armored leather gloves, modified to be easy to wear while providing maximum protection under extreme conditions. Sized to fit even the strangest of anatomy.",
+ "weight": "430 g",
+ "volume": "1500 ml",
+ "encumbrance": 18,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "boots_xlblack_dragon_scale",
+ "copy-from": "boots_black_dragon_scale",
+ "type": "ARMOR",
+ "name": { "str": "pair of XL black dragonscale boots", "str_pl": "pairs of XL black dragonscale boots" },
+ "description": "Massive boots made of black dragonscale, modified to fit even the strangest of bodies. Very protective, and surprisingly light.",
+ "weight": "1545 g",
+ "volume": "6250 ml",
+ "encumbrance": 40,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "boots_xlblack_dragon_hide",
+ "copy-from": "boots_black_dragon_hide",
+ "type": "ARMOR",
+ "name": { "str": "pair of XL black dragonhide boots", "str_pl": "pairs of XL black dragonhide boots" },
+ "description": "Massive boots made of black dragonhide, modified to fit even the strangest of bodies. Very protective, and surprisingly light.",
+ "weight": "955 g",
+ "volume": "6250 ml",
+ "encumbrance": 28,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "helmet_xlblack_dragon_scale",
+ "copy-from": "helmet_black_dragon_scale",
+ "type": "ARMOR",
+ "name": { "str": "XL black dragonscale helmet" },
+ "description": "A massive helmet made from black dragonscale, held together with black dragonhide. It comes equipped with a full face visor and is large enough to fit even the strangest of heads.",
+ "weight": "1256 g",
+ "volume": "4500 ml",
+ "encumbrance": 42,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "helmet_xlblack_dragon_hide",
+ "copy-from": "helmet_black_dragon_hide",
+ "type": "ARMOR",
+ "name": { "str": "XL black dragonhide helmet" },
+ "description": "A massive helmet made from black dragonhide. It protects your head well, and doesn't cover your face, but is large enough to fit even the strangest of heads.",
+ "weight": "815 g",
+ "volume": "4500 ml",
+ "encumbrance": 42,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "helmet_xlblack_dragon_scale",
+ "copy-from": "helmet_black_dragon_scale",
+ "type": "ARMOR",
+ "name": { "str": "XL black dragonscale helmet" },
+ "description": "A massive helmet made from black dragonscale, held together with black dragonhide. It comes equipped with a full face visor and is large enough to fit even the strangest of heads.",
+ "weight": "1256 g",
+ "volume": "4500 ml",
+ "encumbrance": 42,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "helmet_xlblack_dragon_hide",
+ "copy-from": "helmet_black_dragon_hide",
+ "type": "ARMOR",
+ "name": { "str": "XL black dragonhide helmet" },
+ "description": "A massive helmet made from black dragonhide. It protects your head well, and doesn't cover your face, but is large enough to fit even the strangest of heads.",
+ "weight": "815 g",
+ "volume": "4500 ml",
+ "encumbrance": 42,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "suit_xlblack_dragon_scale",
+ "copy-from": "suit_black_dragon_scale",
+ "type": "ARMOR",
+ "name": { "str": "XL black dragonscale armor" },
+ "description": "A massive full suit of black dragon scale mail. It comes with all the accoutrements that cover your torso, legs, and arms; sized to fit even the strangest of bodies.",
+ "weight": "6250 g",
+ "volume": "18 L",
+ "encumbrance": 35,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "RAINPROOF", "STURDY" ]
+ },
+ {
+ "id": "suit_xlblack_dragon_hide",
+ "copy-from": "suit_black_dragon_hide",
+ "type": "ARMOR",
+ "name": { "str": "XL black dragonhide armor" },
+ "description": "A massive full suit of black dragonhide armor. It comes with all the accoutrements that cover your torso, legs, and arms; sized to fit even the strangest of bodies.",
+ "weight": "5500 g",
+ "volume": "18 L",
+ "encumbrance": 28,
+ "flags": [ "OVERSIZE", "VARSIZE", "WATERPROOF", "RAINPROOF", "STURDY" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/books_lore.json b/data/mods/Magical_Nights/items/books_lore.json
new file mode 100644
index 000000000000..6c7f66c8ce8d
--- /dev/null
+++ b/data/mods/Magical_Nights/items/books_lore.json
@@ -0,0 +1,50 @@
+[
+ {
+ "id": "retreat_map",
+ "copy-from": "abstractmap",
+ "type": "GENERIC",
+ "name": "vacation brochure",
+ "description": "This is a glossy brochure encouraging students to book vactaions at a lake retreat or remote cabin. The brochure includes lush photographs of a tower on an island and a remote looking cabin in the woods. It includes a map of the areas.",
+ "color": "white",
+ "use_action": {
+ "type": "reveal_map",
+ "radius": 185,
+ "terrain": [ "lake_retreat_ground", "magic_cabin" ],
+ "message": "You add the locations to your map."
+ }
+ },
+ {
+ "id": "lair_map",
+ "copy-from": "abstractmap",
+ "type": "GENERIC",
+ "name": "lair map",
+ "description": "This is an well worn map. It has pictures of fantastical beasts embellishing the carefully drawn map markers.",
+ "color": "white",
+ "use_action": {
+ "type": "reveal_map",
+ "radius": 185,
+ "terrain": [
+ "demon_spider_lair",
+ "black_dragon_lair_z-0_NW",
+ "black_dragon_lair_z-0_NE",
+ "black_dragon_lair_z-0_SW",
+ "black_dragon_lair_z-0_SE"
+ ],
+ "message": "You add the locations to your map."
+ }
+ },
+ {
+ "id": "wizard_photo",
+ "type": "GENERIC",
+ "//": "Unique item for magic_basement.",
+ "category": "other",
+ "name": "old photo",
+ "description": "A photo of a jovial, old wizard, he seems to be dancing with a coat rack in this basement. There is a stack of suitcases in the background.",
+ "weight": "1 g",
+ "volume": "0 ml",
+ "price": "8 USD",
+ "material": [ "paper" ],
+ "symbol": "*",
+ "color": "light_gray"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/class_items.json b/data/mods/Magical_Nights/items/class_items.json
new file mode 100644
index 000000000000..c5140d9c9709
--- /dev/null
+++ b/data/mods/Magical_Nights/items/class_items.json
@@ -0,0 +1,302 @@
+[
+ {
+ "id": "rune_biomancer",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "pink",
+ "name": { "str": "Biomancer rune" },
+ "description": "This magical pebble has an insignia of rended flesh and bones on it. It is necessary for Biomancers to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_technomancer",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "blue",
+ "name": { "str": "Technomancer rune" },
+ "description": "This magical pebble has an insignia of clockwork and gears on it. It is necessary for Technomancers to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_magus",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "magenta",
+ "name": { "str": "Magus rune", "str_pl": "Magi runes" },
+ "description": "This magical pebble has an insignia of crystal and mana orbs on it. It is necessary for Magi to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_earthshaper",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "green",
+ "name": { "str": "Earthshaper rune" },
+ "description": "This magical pebble has an insignia of steel and rocks on it. It is necessary for Earthshapers to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_kelvinist",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "red",
+ "name": { "str": "Kelvinist rune" },
+ "description": "This magical pebble has an insignia of ice and flames on it. It is necessary for Kelvinists to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_stormshaper",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "yellow",
+ "name": { "str": "Stormshaper rune" },
+ "description": "This magical pebble has an insignia of lightning and storm clouds on it. It is necessary for Stormshapers to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_druid",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "brown",
+ "name": { "str": "Druid rune" },
+ "description": "This magical pebble has an insignia of nature and trees on it. It is necessary for Druids to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_animist",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "light_red",
+ "name": { "str": "Animist rune" },
+ "description": "This magical pebble has an insignia of summoners on it. It is necessary for Animists to channel magic into their crafts.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_alchemist",
+ "type": "TOOL",
+ "symbol": "=",
+ "color": "black",
+ "name": { "str": "alchemist rune" },
+ "description": "This magical pebble has an insignia of alchemy and potions on it. While versatile in use, the lack of attunement to any school prevents creation of more advanced recipes.",
+ "volume": "5ml",
+ "weight": "1 g",
+ "material": "stone",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "rune_biomancer_weapon",
+ "type": "GENERIC",
+ "weapon_category": [ "SPEARS" ],
+ "name": { "str": "Biomancer spear" },
+ "//": "Effectively a durable stone spear +1 with IMPALE tech. based off Wicked Bonespear. Lorewise, it would make sense for novice Biomancers to be developing their skills in spears so they can adequately use the Bonespear(No whips/REACH3 for you!) once they're proficient enough to summon one. Should be weaker than other school weapons DPSwise due to reach.",
+ "description": "A grotesque bone spearhead on a stout wooden pole. There is a Biomancer rune embedded at the base of the head.",
+ "weight": "988 g",
+ "volume": "1250 ml",
+ "price": "39 USD",
+ "to_hit": 2,
+ "bashing": 6,
+ "cutting": 15,
+ "material": [ "wood", "bone" ],
+ "symbol": "/",
+ "color": "light_gray",
+ "techniques": [ "WBLOCK_1", "IMPALE" ],
+ "qualities": [ [ "COOK", 1 ] ],
+ "flags": [ "SPEAR", "STAB", "REACH_ATTACK", "DURABLE_MELEE", "SHEATH_SPEAR", "TRADER_AVOID", "MAGIC_FOCUS" ]
+ },
+ {
+ "id": "rune_technomancer_weapon",
+ "type": "GENERIC",
+ "weapon_category": [ "BATONS" ],
+ "name": { "str": "Technomancer toolbar" },
+ "//": "Combat stats based off crowbar +1, techniques off Halligan bar(closest non-magical substitute), weight based on 75% of hammer & wrench(since their handles aren't included) + 100% crowbar with benefit from +1 enchantment",
+ "description": "This staff incorporates a sturdy cresent wrench on top of a prybar and a hammer on the other in a convienent package. There is a Technomancer rune embedded in the hammerhead.",
+ "weight": "1536 g",
+ "volume": "1750 ml",
+ "price": "39 USD",
+ "to_hit": 1,
+ "bashing": 15,
+ "cutting": 1,
+ "material": [ "steel" ],
+ "symbol": "/",
+ "color": "light_gray",
+ "techniques": [ "WBLOCK_1", "BRUTAL", "SWEEP" ],
+ "qualities": [ [ "PRY", 3 ], [ "HAMMER", 3 ], [ "HAMMER_FINE", 1 ], [ "WRENCH", 2 ], [ "WRENCH_FINE", 2 ] ],
+ "flags": [ "DURABLE_MELEE", "BELT_CLIP", "TRADER_AVOID", "MAGIC_FOCUS" ]
+ },
+ {
+ "id": "rune_magus_weapon",
+ "type": "GENERIC",
+ "weapon_category": [ "QUARTERSTAVES" ],
+ "name": { "str": "Magus staff", "str_pl": "Magus staves" },
+ "//": "The classical vision of the wizard gets a classic weapon. DPS Stats are between the regular and ironshod versions. Stats are slightly worse than the QS+1 due to the glass weight slowing attack speed.",
+ "description": "A quarterstaff with runes carved into it and two glass jars, heat-tempered and infused with mana for durability, to act as mana receptacles. There are two Magi runes embedded at the tips.",
+ "weight": "1530 g",
+ "volume": "1500 ml",
+ "price": "39 USD",
+ "to_hit": 2,
+ "bashing": 20,
+ "material": [ "wood", "diamond" ],
+ "symbol": "/",
+ "color": "brown",
+ "techniques": [ "WBLOCK_2", "RAPID", "SWEEP" ],
+ "flags": [ "DURABLE_MELEE", "SHEATH_SPEAR", "TRADER_AVOID", "MAGIC_FOCUS" ]
+ },
+ {
+ "id": "rune_kelvinist_weapon",
+ "type": "GENERIC",
+ "name": { "str": "Kelvinist flamberge" },
+ "weapon_category": [ "1H_SWORDS" ],
+ "//": "Flame-bladed sword covers half of Kelvinist's heat-cold theme. Combat stats equivalent to cutlass +1 with BRUTAL technique.",
+ "description": "A sword with an undulating blade, reminiscent of a flame. There is a Kelvinist rune embedded in the pommel.",
+ "weight": "1530 g",
+ "volume": "1250 ml",
+ "price": 3900,
+ "to_hit": 3,
+ "bashing": 7,
+ "cutting": 29,
+ "material": [ "wood", "steel" ],
+ "symbol": "/",
+ "color": "light_gray",
+ "techniques": [ "WBLOCK_2", "BRUTAL" ],
+ "qualities": [ [ "CUT", 1 ], [ "BUTCHER", 9 ] ],
+ "use_action": "WEATHER_TOOL",
+ "flags": [ "DURABLE_MELEE", "SHEATH_SWORD", "TRADER_AVOID", "MAGIC_FOCUS", "THERMOMETER" ]
+ },
+ {
+ "id": "rune_stormshaper_weapon",
+ "type": "GENERIC",
+ "name": { "str": "Stormshaper axe" },
+ "weapon_category": [ "1H_AXES" ],
+ "//": "Equivalent to copper ax +1, with volume reduction so it can be sheathed like the other school weapons. Metals chosen for being two most conductive metals + balancing reasons",
+ "description": "A forged copper axe with silver trimmings and a wooden handle. There is a Stormshaper rune embedded in the eye.",
+ "weight": "3330 g",
+ "volume": "2 L",
+ "price": 3900,
+ "to_hit": 3,
+ "bashing": 19,
+ "cutting": 13,
+ "material": [ "wood", "copper", "silver" ],
+ "symbol": "/",
+ "color": "brown",
+ "techniques": [ "WBLOCK_1", "BRUTAL", "SWEEP" ],
+ "qualities": [ [ "AXE", 1 ], [ "BUTCHER", -20 ] ],
+ "use_action": "WEATHER_TOOL",
+ "flags": [ "DURABLE_MELEE", "BELT_CLIP", "TRADER_AVOID", "MAGIC_FOCUS", "HYGROMETER", "BAROMETER" ]
+ },
+ {
+ "id": "rune_animist_weapon",
+ "type": "GENERIC",
+ "name": { "str": "Animist athame" },
+ "weapon_category": [ "KNIVES" ],
+ "//": "Tool qualities equivalent to steak knife, combat equiv. to copper knife + 1 w/ RAPID and BLOCK1, size/weight off combat knife +1",
+ "description": "A steel ritual knife used by Animists to draw blood for summoning. Their school rune is embedded in the crossguard.",
+ "weight": "504 g",
+ "volume": "500 ml",
+ "price": "30 USD",
+ "bashing": 2,
+ "cutting": 13,
+ "material": [ "wood", "steel" ],
+ "symbol": ";",
+ "color": "light_gray",
+ "techniques": [ "WBLOCK_1", "PRECISE" ],
+ "qualities": [ [ "CUT", 1 ], [ "CUT_FINE", 1 ], [ "BUTCHER", 11 ] ],
+ "flags": [ "STAB", "SHEATH_KNIFE", "MAGIC_FOCUS", "TRADER_AVOID" ]
+ },
+ {
+ "type": "ARMOR",
+ "id": "mbelt_technomancer_toolbelt",
+ "name": { "str": "technomancer's toolbelt" },
+ "weight": "2000 g",
+ "color": "brown",
+ "covers": [ "torso" ],
+ "storage": "1 L",
+ "symbol": "[",
+ "description": "A custom-built leather utility belt that instantly creates any tool that you reach for. Activate to sheathe/draw a weapon.",
+ "price": 500000,
+ "material": [ "leather", "steel" ],
+ "volume": "4 L",
+ "flags": [ "VARSIZE", "WATER_FRIENDLY", "STURDY", "WAIST", "OVERSIZE" ],
+ "coverage": 10,
+ "encumbrance": 4,
+ "material_thickness": 4,
+ "use_action": [
+ {
+ "type": "holster",
+ "holster_prompt": "Sheath blade",
+ "holster_msg": "You sheath your %s",
+ "min_volume": "250 ml",
+ "max_volume": "1 L",
+ "flags": [ "SHEATH_KNIFE", "SHEATH_SWORD" ]
+ },
+ "CROWBAR"
+ ],
+ "qualities": [
+ [ "HAMMER", 3 ],
+ [ "PRY", 1 ],
+ [ "SAW_M", 2 ],
+ [ "SAW_W", 2 ],
+ [ "WRENCH", 2 ],
+ [ "AXE", 1 ],
+ [ "SCREW", 1 ],
+ [ "HAMMER_FINE", 1 ],
+ [ "SAW_M_FINE", 1 ],
+ [ "WRENCH_FINE", 1 ],
+ [ "SCREW_FINE", 1 ]
+ ]
+ },
+ {
+ "id": "rune_druid_weapon",
+ "copy-from": "compositebow",
+ "type": "GUN",
+ "color": "yellow",
+ "name": { "str": "Druid composite bow" },
+ "//": "Equivalent to composite bow for dispersion/reload/weight/range/encumb/bash, with two mod slots added equivalent to other weapons getting techniques",
+ "description": "A bow made of multiple materials to maximize energy efficiency. There are two Druid runes embedded at the tips.",
+ "price": "320 USD",
+ "min_strength": 10,
+ "armor_data": { "covers": [ "torso" ], "coverage": 5, "material_thickness": 1, "encumbrance": 13 },
+ "extend": { "flags": [ "TRADER_AVOID", "MAGIC_FOCUS", "DURABLE_MELEE" ], "valid_mod_locations": [ [ "accessories", 2 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "rune_earthshaper_weapon",
+ "weapon_category": [ "FIST_WEAPONS" ],
+ "symbol": "3",
+ "color": "light_gray",
+ "name": { "str": "Earthshaper cestus", "str_pl": "Earthshaper cesti" },
+ "//": "Equivalent to cestus +1 with BRUTAL and WBLOCK1",
+ "description": "A stone battle glove with carved runes encasing the hand, protecting it while increasing striking power. There is an Earthshaper rune embedded in the palm.",
+ "material": [ "stone", "leather", "steel" ],
+ "volume": "500 ml",
+ "weight": "873 g",
+ "bashing": 24,
+ "to_hit": 2,
+ "qualities": [ [ "HAMMER", 1 ] ],
+ "techniques": [ "WBLOCK_1", "BRUTAL" ],
+ "flags": [ "UNARMED_WEAPON", "DURABLE_MELEE", "TRADER_AVOID", "MAGIC_FOCUS" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/comestibles.json b/data/mods/Magical_Nights/items/comestibles.json
new file mode 100644
index 000000000000..8099931e0252
--- /dev/null
+++ b/data/mods/Magical_Nights/items/comestibles.json
@@ -0,0 +1,87 @@
+[
+ {
+ "type": "COMESTIBLE",
+ "id": "egg_owlbear_rock",
+ "name": "owlbear egg",
+ "weight": "2395 g",
+ "color": "light_gray",
+ "spoils_in": "14 days",
+ "comestible_type": "FOOD",
+ "symbol": "0",
+ "quench": 128,
+ "healthy": 3,
+ "calories": 3200,
+ "description": "This egg laid by an owlbear seems almost indistinguishable from a large rock until you touch it and can feel the warm glow of potential life energy from within. It's hard to believe that an owlbear could grow so quickly from something so small. Perhaps you could carefully crack it open to get at the liquid golden goodness inside.",
+ "price": "3 kUSD",
+ "material": [ "egg", "stone" ],
+ "volume": "2500 ml",
+ "stack_size": 1,
+ "fun": -18,
+ "rot_spawn": "GROUP_EGG_OWLBEAR",
+ "vitamins": [ [ "vitA", 360 ], [ "calcium", 120 ], [ "iron", 160 ], [ "vitB", 840 ] ],
+ "rot_spawn_chance": 80,
+ "//": "Alchemically speaking, I see this egg as having the elements of Growth, Stone, and Egg. Growth would make things grow faster, the simplest example being a magical liquid fertilizer. Stone would be a defensive element, used in creating something like a potion of stoneskin. Egg would be interesting though. What if instead of being imbibed there were potions that instead functioned similarly to the sourdough items, or the blob vehicle parts, in that they take a gestation period and then you could activate them and have a new item pop out. Creatures sure but especially biomancers could have temporarily-lived tools, weapons, and armor."
+ },
+ {
+ "type": "COMESTIBLE",
+ "id": "egg_owlbear",
+ "name": "owlbear egg yolk",
+ "copy-from": "egg_chicken",
+ "phase": "liquid",
+ "healthy": 3,
+ "color": "yellow",
+ "description": "The liquid innards of an owlbear egg. Good eating."
+ },
+ {
+ "id": "hairball",
+ "type": "COMESTIBLE",
+ "comestible_type": "MED",
+ "healthy": -1,
+ "stack_size": 1,
+ "material": [ "fur", "water" ],
+ "primary_material": "fur",
+ "volume": "350ml",
+ "weight": "15 g",
+ "color": "brown",
+ "symbol": "0",
+ "name": { "str": "hairball" },
+ "description": "A big, ugly ball of animal spit and licked-off hairs. Don't swallow it.",
+ "price": "0 cent",
+ "flags": [ "TRADER_AVOID" ],
+ "fun": -20
+ },
+ {
+ "id": "meat_dragon",
+ "type": "COMESTIBLE",
+ "copy-from": "meat",
+ "name": { "str_sp": "dragon meat" },
+ "description": "The meat from a slain dragon. It does not seem to respond to cooking the same way as other meat, making it obvious that it still retains some magical properties.",
+ "parasites": 0
+ },
+ {
+ "id": "scream_mush",
+ "type": "COMESTIBLE",
+ "copy-from": "mushroom",
+ "name": "scream mushroom",
+ "description": "The mushrooms harvested from a dead shrieker. Could be used in potions.",
+ "price": "14 USD"
+ },
+ {
+ "id": "purified_meat",
+ "type": "COMESTIBLE",
+ "flags": "NUTRIENT_OVERRIDE",
+ "copy-from": "meat",
+ "name": "purified meat",
+ "description": "Indistinguishable from pre-Cataclysm lab grown beef. It should be excellent but somehow it's just edible.",
+ "price": "4 USD"
+ },
+ {
+ "id": "impure_meat",
+ "type": "COMESTIBLE",
+ "flags": "NUTRIENT_OVERRIDE",
+ "copy-from": "mutant_meat",
+ "name": "impure meat",
+ "description": "Not as tainted as previously and tastes like the real thing. You do not want to cook this for your friends, though if you do they won't know the difference for a while.",
+ "price": "1 USD"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/constructs.json b/data/mods/Magical_Nights/items/constructs.json
new file mode 100644
index 000000000000..a33adbcfc8c1
--- /dev/null
+++ b/data/mods/Magical_Nights/items/constructs.json
@@ -0,0 +1,120 @@
+[
+ {
+ "type": "GENERIC",
+ "id": "broken_claygolem",
+ "symbol": "x",
+ "color": "brown",
+ "name": "broken clay golem",
+ "category": "other",
+ "description": "A broken clay golem, looking like a piece of post-modern art. Could be smashed for clay.",
+ "price": "100 USD",
+ "material": [ "clay" ],
+ "weight": "122 kg",
+ "volume": "120 L",
+ "bashing": 4,
+ "cutting": 4,
+ "to_hit": -3,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "broken_plasticgolem",
+ "symbol": "x",
+ "color": "light_gray",
+ "name": "broken plastic golem",
+ "category": "other",
+ "description": "A broken plastic golem, like a giant action figure chewed up by an equally giant puppy. You could smash it up into recycled plastic bits.",
+ "price": "1 USD",
+ "material": [ "plastic" ],
+ "weight": "70 kg",
+ "volume": "150 L",
+ "bashing": 4,
+ "cutting": 4,
+ "to_hit": -3,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "broken_stonegolem",
+ "symbol": "x",
+ "color": "light_gray",
+ "name": "broken stone golem",
+ "category": "other",
+ "description": "A broken stone golem, not that much different from big boulder. Could be smashed for stone.",
+ "price": "100 USD",
+ "material": [ "stone" ],
+ "weight": "162 kg",
+ "volume": "120 L",
+ "bashing": 4,
+ "cutting": 4,
+ "to_hit": -3,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "broken_irongolem",
+ "symbol": "x",
+ "color": "dark_gray",
+ "name": "broken iron golem",
+ "category": "other",
+ "description": "A broken iron golem, with all iron you would possibly ever need. Could be smashed for iron.",
+ "price": "1 kUSD",
+ "material": [ "iron" ],
+ "weight": "945 kg",
+ "volume": "120 L",
+ "bashing": 30,
+ "to_hit": -5,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "broken_resingolem_fresh",
+ "symbol": "x",
+ "color": "green",
+ "name": "broken fresh resin golem",
+ "category": "other",
+ "description": "A broken resin golem, slowly becoming more and more of a puddle. You could recover some small amount of materials from it, but it'll be difficult considering how liquid it is.",
+ "price": "1 USD",
+ "material": [ "plastic" ],
+ "weight": "70 kg",
+ "volume": "80 L",
+ "bashing": 4,
+ "cutting": 4,
+ "to_hit": -3,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "broken_resingolem_half",
+ "symbol": "x",
+ "color": "blue",
+ "name": "broken semi-cured resin golem",
+ "category": "other",
+ "description": "A broken resin golem, looking a bit like a big pile of toffee. You can recover some materials from it, but some wastage will definitely happen.",
+ "price": "1 USD",
+ "material": [ "plastic" ],
+ "weight": "70 kg",
+ "volume": "125 L",
+ "bashing": 4,
+ "cutting": 4,
+ "to_hit": -3,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "broken_resingolem_cured",
+ "symbol": "x",
+ "color": "red",
+ "name": "broken cured resin golem",
+ "category": "other",
+ "description": "A broken resin golem, now reduced to a pile of rubble. You could recover some materials from it if you were to work at it for a while.",
+ "price": "1 USD",
+ "material": [ "plastic" ],
+ "weight": "70 kg",
+ "volume": "150 L",
+ "bashing": 4,
+ "cutting": 4,
+ "to_hit": -3,
+ "flags": [ "TRADER_AVOID", "NO_REPAIR" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted.json b/data/mods/Magical_Nights/items/enchanted/enchanted.json
new file mode 100644
index 000000000000..7783e4212a5c
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted.json
@@ -0,0 +1,102 @@
+[
+ {
+ "id": "magi_staff_minor",
+ "type": "GENERIC",
+ "symbol": "/",
+ "color": "brown",
+ "name": { "str": "minor staff of the magi", "str_pl": "minor staves of the magi" },
+ "description": "A simple carved staff, made of wood. It faintly glows with magic when you cast spells. Wielding it slightly increases your mana capacity",
+ "price": "100 USD",
+ "material": [ "wood" ],
+ "weapon_category": [ "QUARTERSTAVES" ],
+ "flags": [ "SHEATH_SPEAR", "ALWAYS_TWOHAND", "FRAGILE_MELEE", "MAGIC_FOCUS" ],
+ "relic_data": {
+ "passive_effects": [ { "has": "WIELD", "condition": "ALWAYS", "values": [ { "value": "MANA_CAP", "multiply": 0.5 } ] } ]
+ },
+ "weight": "1400 g",
+ "volume": "3 L",
+ "category": "weapons",
+ "to_hit": 3,
+ "bashing": 17
+ },
+ {
+ "id": "magi_staff_lesser",
+ "type": "GENERIC",
+ "symbol": "/",
+ "color": "brown",
+ "looks_like": "magi_staff_minor",
+ "name": { "str": "lesser staff of the magi", "str_pl": "lesser staves of the magi" },
+ "description": "A beautifully carved staff, made of enchanted wood and mithril. It faintly glows with magic when you cast spells, but it is not a sturdy melee weapon.",
+ "price": "400 USD",
+ "material": "wood",
+ "flags": [ "SHEATH_SPEAR", "ALWAYS_TWOHAND", "FRAGILE_MELEE", "MAGIC_FOCUS" ],
+ "relic_data": {
+ "passive_effects": [ { "has": "WIELD", "condition": "ALWAYS", "values": [ { "value": "MANA_CAP", "multiply": 1.25 } ] } ]
+ },
+ "weight": "1400 g",
+ "volume": "3 L",
+ "bashing": 19,
+ "category": "weapons",
+ "to_hit": 3
+ },
+ {
+ "id": "magi_staff_greater",
+ "type": "GENERIC",
+ "symbol": "/",
+ "color": "brown",
+ "looks_like": "magi_staff_minor",
+ "name": { "str": "greater staff of the magi", "str_pl": "greater staves of the magi" },
+ "description": "A beautifully carved staff, made of enchanted wood and mithril. It faintly glows with magic when you cast spells, but it is not a sturdy melee weapon. Wielding it greatly increases your mana capacity.",
+ "price": "10 kUSD",
+ "material": [ "wood", "mithril_metal" ],
+ "weapon_category": [ "QUARTERSTAVES" ],
+ "flags": [ "SHEATH_SPEAR", "ALWAYS_TWOHAND", "FRAGILE_MELEE", "MAGIC_FOCUS" ],
+ "relic_data": {
+ "passive_effects": [ { "has": "WIELD", "condition": "ALWAYS", "values": [ { "value": "MANA_CAP", "multiply": 2 } ] } ]
+ },
+ "weight": "1400 g",
+ "volume": "3 L",
+ "category": "weapons",
+ "to_hit": 3,
+ "bashing": 21
+ },
+ {
+ "id": "wizard_hat",
+ "type": "ARMOR",
+ "name": "wizard hat",
+ "description": "A blue pointed hat with stars stiched into it. Wearing it increases your mana regeneration.",
+ "weight": "390 g",
+ "volume": "2 L",
+ "price": "95 USD",
+ "material": [ "cotton" ],
+ "symbol": "^",
+ "color": "light_blue",
+ "covers": [ "head" ],
+ "coverage": 50,
+ "encumbrance": 12,
+ "warmth": 7,
+ "material_thickness": 2,
+ "environmental_protection": 2,
+ "relic_data": {
+ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "MANA_REGEN", "multiply": 1 } ] } ]
+ },
+ "flags": [ "VARSIZE" ]
+ },
+ {
+ "id": "debug_fireball_hammer",
+ "type": "GENERIC",
+ "name": "fireball hammer",
+ "copy-from": "magi_staff_minor",
+ "description": "Use with caution! Flammable! Explosive!",
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WIELD",
+ "condition": "ALWAYS",
+ "hit_you_effect": [ { "id": "fireball" } ],
+ "hit_me_effect": [ { "id": "light_healing" } ]
+ }
+ ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_belts.json b/data/mods/Magical_Nights/items/enchanted/enchanted_belts.json
new file mode 100644
index 000000000000..677f89889858
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_belts.json
@@ -0,0 +1,157 @@
+[
+ {
+ "abstract": "mbelt_leather",
+ "type": "TOOL_ARMOR",
+ "name": "magic leather belt",
+ "description": "A leather belt. Useful for making your pair of pants fit.",
+ "weight": "102 g",
+ "volume": "250 ml",
+ "price": "900 USD",
+ "bashing": 5,
+ "material": [ "leather" ],
+ "symbol": "[",
+ "color": "brown",
+ "covers": [ "torso" ],
+ "coverage": 5,
+ "material_thickness": 2,
+ "use_action": {
+ "type": "holster",
+ "holster_prompt": "Stick what into your belt",
+ "holster_msg": "You tuck your %s into your %s",
+ "max_volume": "500 ml",
+ "max_weight": "400 g",
+ "flags": [ "BELT_CLIP" ]
+ },
+ "flags": [ "WAIST", "WATER_FRIENDLY", "STURDY" ]
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "copy-from": "mbelt_leather",
+ "id": "mbelt_haste",
+ "name": { "str": "Belt of Haste", "str_pl": "Belts of Haste" },
+ "relic_data": {
+ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "SPEED", "multiply": 0.15, "add": 5 } ] } ]
+ }
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "copy-from": "mbelt_leather",
+ "id": "mbelt_thor",
+ "name": { "str_sp": "Megingjörð" },
+ "description": "The mythical belt of Thor, god of thunder. Or at least so it appears. It doubles the wearer's base strength.",
+ "material": [ "superalloy" ],
+ "material_thickness": 10,
+ "environmental_protection": 20,
+ "weight_capacity_bonus": "50 kg",
+ "relic_data": {
+ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "STRENGTH", "multiply": 1 } ] } ]
+ }
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "copy-from": "mbelt_leather",
+ "id": "mbelt_pockets_lesser",
+ "name": { "str": "Lesser Girdle of Pockets", "str_pl": "Lesser Girdles of Pockets" },
+ "description": "A wide girdle that fits around your waist, coverd in numerous small pouches that hold a lot more than they should, and the weight of their contents is greatly reduced.",
+ "coverage": 10,
+ "encumbrance": 4,
+ "weight_capacity_bonus": "5 kg",
+ "storage": "10 L"
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "copy-from": "mbelt_leather",
+ "id": "mbelt_pockets_greater",
+ "name": { "str": "Greater Girdle of Pockets", "str_pl": "Greater Girdles of Pockets" },
+ "description": "A wide girdle that fits around your waist, coverd in numerous small pouches that hold a lot more than they should, and the weight of their contents is greatly reduced.",
+ "coverage": 10,
+ "encumbrance": 6,
+ "weight_capacity_bonus": "10 kg",
+ "storage": "15 L"
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "copy-from": "mbelt_leather",
+ "id": "mbelt_weaponry",
+ "name": { "str": "Belt of Weaponry", "str_pl": "Belts of Weaponry" },
+ "description": "A wide girdle that fits around your waist, you can sheath or holster any weapon into it in the blink of an eye, and it seemingly stores them somewhere else.",
+ "coverage": 10,
+ "encumbrance": 3,
+ "weight_capacity_bonus": "10 kg",
+ "use_action": {
+ "type": "holster",
+ "holster_prompt": "Stick what into your belt",
+ "holster_msg": "You tuck your %s into your %s",
+ "min_volume": "1 ml",
+ "max_volume": "4 L",
+ "max_weight": "5 kg",
+ "multi": 4,
+ "skills": [
+ "pistol",
+ "shotgun",
+ "cutting",
+ "archery",
+ "bashing",
+ "launcher",
+ "melee",
+ "rifle",
+ "smg",
+ "stabbing",
+ "throw",
+ "ALL",
+ "gun",
+ "unarmed"
+ ],
+ "flags": [ "SHEATH_KNIFE", "SHEATH_SWORD", "BELT_CLIP", "SHEATH_SPEAR" ]
+ }
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "copy-from": "mbelt_leather",
+ "id": "mbelt_iron_whip",
+ "name": { "str": "Belt of The Iron Whip", "str_pl": "Belts of the Iron Whip" },
+ "volume": "1 L",
+ "material": [ "steel" ],
+ "description": "A braided but flexible belt seemingly made of metal. You can activate it to transform it into a whip and flay your enemies.",
+ "material_thickness": 4,
+ "flags": [ "STURDY" ],
+ "use_action": {
+ "type": "transform",
+ "target": "mwhip_iron",
+ "active": true,
+ "moves": 20,
+ "msg": "You grab the belt and it uncoils to become a flexible metal whip in your hand!"
+ }
+ },
+ {
+ "id": "mwhip_iron",
+ "type": "GENERIC",
+ "category": "weapons",
+ "symbol": "/",
+ "color": "light_gray",
+ "name": { "str": "The Iron Whip", "str_pl": "Iron Whips" },
+ "description": "A long braided flexible steel bullwhip that narrows into a sharp blade at the end. Easily capable of slicing and dicing anything that comes at you. It transforms back into a belt.",
+ "weight": "2154 g",
+ "volume": "2 L",
+ "price": "3500 USD",
+ "material": [ "steel" ],
+ "flags": [ "REACH_ATTACK", "REACH3", "WHIP", "UNBREAKABLE_MELEE" ],
+ "techniques": [ "WBLOCK_1", "SWEEP", "WHIP_DISARM", "WRAP" ],
+ "cutting": 16,
+ "bashing": 8,
+ "use_action": {
+ "type": "transform",
+ "target": "mbelt_iron_whip",
+ "active": false,
+ "moves": 20,
+ "msg": "You loop the whip in your hand and it coils back into a belt form in an instant."
+ }
+ },
+ {
+ "id": "belt_str",
+ "copy-from": "mbelt_leather",
+ "type": "ARMOR",
+ "name": { "str": "belt of strength +2", "str_pl": "belts of strength +2" },
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "STRENGTH", "add": 2 } ] } ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_boots.json b/data/mods/Magical_Nights/items/enchanted/enchanted_boots.json
new file mode 100644
index 000000000000..ebe454afdcd4
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_boots.json
@@ -0,0 +1,67 @@
+[
+ {
+ "id": "mboots_sevenleague",
+ "type": "ARMOR",
+ "copy-from": "boots_hiking",
+ "name": { "str": "seven league boots", "str_pl": "pairs of seven league boots" },
+ "looks_like": "boots_hiking",
+ "description": "Rugged yet extremely comfortable and well fitting boots of worn leather and steel, they look like they've seen a lot of use and will likely see a lot more. They make your movement a lot less work.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "MOVE_COST", "add": -30 } ] } ] },
+ "encumbrance": 8,
+ "warmth": 30,
+ "material_thickness": 3,
+ "environmental_protection": 3,
+ "flags": [ "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "mboots_haste",
+ "type": "ARMOR",
+ "copy-from": "boots_hiking",
+ "name": { "str": "boots of haste", "str_pl": "pairs of boots of haste" },
+ "looks_like": "boots_hiking",
+ "description": "Rugged yet extremely comfortable and well fitting boots of worn leather and steel, they look like they've seen a lot of use and will likely see a lot more. They make your movement a lot less work.",
+ "relic_data": {
+ "passive_effects": [
+ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "MOVE_COST", "add": -20 } ] },
+ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "SPEED", "add": 10 } ] }
+ ]
+ },
+ "encumbrance": 8,
+ "warmth": 30,
+ "material_thickness": 3,
+ "environmental_protection": 3,
+ "flags": [ "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "mboots_escape",
+ "type": "TOOL_ARMOR",
+ "copy-from": "boots_hiking",
+ "name": { "str_sp": "escape boots" },
+ "looks_like": "boots_hiking",
+ "description": "Rugged yet extremely comfortable and well fitting boots of worn leather and steel, these boots can be activated once a day to escape from nasty situations, teleporting you a good distance in a random direction.",
+ "initial_charges": 24,
+ "max_charges": 24,
+ "charges_per_use": 24,
+ "artifact_data": { "charge_type": "ARTC_TIME" },
+ "use_action": { "type": "cast_spell", "spell_id": "magus_escape", "no_fail": true, "level": 10, "need_worn": true },
+ "encumbrance": 8,
+ "warmth": 30,
+ "material_thickness": 3,
+ "environmental_protection": 3,
+ "flags": [ "WATERPROOF", "STURDY" ]
+ },
+ {
+ "id": "mboots_grounding",
+ "type": "ARMOR",
+ "copy-from": "boots_hiking",
+ "name": { "str": "boots of grounding", "str_pl": "pairs of boots of grounding" },
+ "looks_like": "boots_hiking",
+ "description": "Rugged yet extremely comfortable and well fitting boots of leather with small engraved runes seemingly filled with rubber. When worn, you are immune to damage from electricity.",
+ "encumbrance": 8,
+ "warmth": 30,
+ "material_thickness": 3,
+ "environmental_protection": 3,
+ "flags": [ "WATERPROOF", "STURDY" ],
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "ARMOR_ELEC", "add": -20 } ] } ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_bracers.json b/data/mods/Magical_Nights/items/enchanted/enchanted_bracers.json
new file mode 100644
index 000000000000..9a0285cddb03
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_bracers.json
@@ -0,0 +1,95 @@
+[
+ {
+ "id": "mbracer_steel_pair",
+ "type": "TOOL_ARMOR",
+ "category": "armor",
+ "name": { "str": "pair of steel bracers", "str_pl": "pairs of steel bracers" },
+ "description": "A full assembly of medieval arm protection.",
+ "weight": "1520 g",
+ "volume": "2500 ml",
+ "price": "200 USD",
+ "to_hit": -1,
+ "material": [ "steel", "leather" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "covers": [ "arms" ],
+ "coverage": 45,
+ "encumbrance": 10,
+ "warmth": 10,
+ "material_thickness": 5,
+ "flags": [ "BELTED", "STURDY", "BLOCK_WHILE_WORN", "WATER_FRIENDLY" ]
+ },
+ {
+ "copy-from": "mbracer_steel_pair",
+ "type": "TOOL_ARMOR",
+ "id": "mbracer_steel_single",
+ "name": { "str": "steel bracer" },
+ "weight": "770 g",
+ "volume": "1250 ml",
+ "covers": [ "arm_either" ]
+ },
+ {
+ "copy-from": "mbracer_steel_single",
+ "type": "TOOL_ARMOR",
+ "id": "mbracer_defense_lesser",
+ "name": { "str": "bracer of lesser defense", "str_pl": "bracers of lesser defense" },
+ "description": "A light but extremely sturdy steel bracer with an ornate shield engraved on the top, silver accentuates the intricate design. It protects your body with a light aura to reduce damage you take.",
+ "material_thickness": 6,
+ "flags": [ "BELTED", "STURDY", "BLOCK_WHILE_WORN" ],
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WORN",
+ "condition": "ALWAYS",
+ "values": [ { "value": "ARMOR_CUT", "add": -2 }, { "value": "ARMOR_BASH", "add": -2 }, { "value": "ARMOR_STAB", "add": -2 } ]
+ }
+ ]
+ }
+ },
+ {
+ "copy-from": "mbracer_steel_single",
+ "type": "TOOL_ARMOR",
+ "id": "mbracer_defense_greater",
+ "name": { "str": "bracer of greater defense", "str_pl": "bracers of greater defense" },
+ "description": "A light but extremely sturdy steel bracer with an ornate shield engraved on the top, gold accentuates the intricate design. It protects your body with a strong aura to reduce damage you take.",
+ "material_thickness": 6,
+ "flags": [ "BELTED", "STURDY", "BLOCK_WHILE_WORN" ],
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WORN",
+ "condition": "ALWAYS",
+ "values": [ { "value": "ARMOR_CUT", "add": -4 }, { "value": "ARMOR_BASH", "add": -4 }, { "value": "ARMOR_STAB", "add": -4 } ]
+ }
+ ]
+ }
+ },
+ {
+ "copy-from": "mbracer_steel_single",
+ "type": "TOOL_ARMOR",
+ "id": "mbracer_lightning_lesser",
+ "name": { "str": "lesser bracer of lightning", "str_pl": "lesser bracers of lightning" },
+ "description": "A light but extremely sturdy steel bracer with an ornate bundle of lightning bolts engraved on the top, silver accentuates the intricate design. It protects your body with a light aura to reduce electrical damage you take, as well as being able to release a Jolt spell 3 times a day.",
+ "initial_charges": 72,
+ "max_charges": 72,
+ "charges_per_use": 24,
+ "artifact_data": { "charge_type": "ARTC_TIME" },
+ "flags": [ "BELTED", "STURDY", "BLOCK_WHILE_WORN" ],
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "ARMOR_ELEC", "add": -5 } ] } ] },
+ "use_action": { "type": "cast_spell", "spell_id": "jolt", "no_fail": true, "level": 15, "need_worn": true }
+ },
+ {
+ "copy-from": "mbracer_steel_single",
+ "type": "TOOL_ARMOR",
+ "id": "mbracer_lightning_greater",
+ "name": { "str": "greater bracer of lightning", "str_pl": "greater bracers of lightning" },
+ "description": "A light but extremely sturdy steel bracer with an ornate bundle of lightning bolts engraved on the top, gold accentuates the intricate design. It protects your body with a strong aura to reduce electrical damage you take, as well as being able to release a Lightning Bolt spell 3 times a day.",
+ "initial_charges": 72,
+ "max_charges": 72,
+ "charges_per_use": 24,
+ "artifact_data": { "charge_type": "ARTC_TIME" },
+ "flags": [ "BELTED", "STURDY", "BLOCK_WHILE_WORN" ],
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "ARMOR_ELEC", "add": -10 } ] } ] },
+ "use_action": { "type": "cast_spell", "spell_id": "lightning_bolt", "no_fail": true, "level": 15, "need_worn": true }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_gunmods.json b/data/mods/Magical_Nights/items/enchanted/enchanted_gunmods.json
new file mode 100644
index 000000000000..9139d66f47c7
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_gunmods.json
@@ -0,0 +1,123 @@
+[
+ {
+ "id": "magic_suppressor",
+ "type": "GUNMOD",
+ "name": { "str": "'Silent Winds' suppressor" },
+ "//": "Combination of the doubled best stats of the homemade & solvent trap suppressors w/ +1 enchantment & volume reduction to half",
+ "description": "Rather than using purely wipe media, an additional localized silence spell in this tube quiets gunshots going through to hearing-safe levels.",
+ "weight": "804 g",
+ "volume": "375 ml",
+ "price": "770 USD",
+ "to_hit": 2,
+ "bashing": 3,
+ "material": [ "steel" ],
+ "symbol": ":",
+ "color": "white",
+ "location": "muzzle",
+ "mod_target_category": [ [ "PISTOLS" ], [ "REVOLVERS" ], [ "SUBMACHINE_GUNS" ], [ "RIFLES" ], [ "MACHINE_GUNS" ], [ "GATLING_GUNS" ] ],
+ "//install_time": "20 s",
+ "handling_modifier": 2,
+ "consume_chance": 220,
+ "consume_divisor": 242,
+ "loudness_modifier": -33,
+ "flags": [ "CONSUMABLE" ]
+ },
+ {
+ "id": "mana_laser_rail",
+ "type": "GUNMOD",
+ "name": { "str": "mana laser sight (rail)", "str_pl": "mana laser sights (rail)" },
+ "description": "A small visible-light laser using light shown through a mana crystal that mounts on a firearm's accessory rail to enhance ease and speed of target acquisition. Aside from increased weight, there are no drawbacks. You can rotate the attachment rail to fit under the barrel.",
+ "weight": "108 g",
+ "volume": "250 ml",
+ "integral_volume": "0 ml",
+ "price": "360 USD",
+ "material": [ "plastic", "steel" ],
+ "symbol": ":",
+ "color": "dark_gray",
+ "location": "rail",
+ "mod_target_category": [
+ [ "PISTOLS" ],
+ [ "REVOLVERS" ],
+ [ "SUBMACHINE_GUNS" ],
+ [ "RIFLES" ],
+ [ "MACHINE_GUNS" ],
+ [ "GATLING_GUNS" ],
+ [ "SHOTGUNS" ],
+ [ "S_XBOWS" ],
+ [ "M_XBOWS" ],
+ [ "GRENADE_LAUNCHERS" ],
+ [ "ROCKET_LAUNCHERS" ],
+ [ "FLAMETHROWERS" ]
+ ],
+ "sight_dispersion": 27,
+ "aim_speed": 9,
+ "min_skills": [ [ "weapon", 2 ], [ "gun", 2 ] ],
+ "use_action": { "menu_text": "Rotate", "type": "transform", "target": "mana_laser_under", "msg": "You rotate the laser sight." }
+ },
+ {
+ "id": "mana_laser_under",
+ "type": "GUNMOD",
+ "name": { "str": "mana laser sight (underbarrel)", "str_pl": "mana laser sights (underbarrel)" },
+ "description": "A small visible-light laser using light shown through a mana crystal that mounts on a firearm's accessory rail to enhance ease and speed of target acquisition. Aside from increased weight, there are no drawbacks. You can rotate the attachment rail to fit on the rail.",
+ "weight": "108 g",
+ "volume": "250 ml",
+ "integral_volume": "0 ml",
+ "price": "360 USD",
+ "material": [ "plastic", "steel" ],
+ "symbol": ":",
+ "color": "dark_gray",
+ "location": "underbarrel",
+ "mod_target_category": [
+ [ "PISTOLS" ],
+ [ "REVOLVERS" ],
+ [ "SUBMACHINE_GUNS" ],
+ [ "RIFLES" ],
+ [ "MACHINE_GUNS" ],
+ [ "GATLING_GUNS" ],
+ [ "SHOTGUNS" ],
+ [ "S_XBOWS" ],
+ [ "M_XBOWS" ],
+ [ "BOWS" ],
+ [ "GRENADE_LAUNCHERS" ],
+ [ "ROCKET_LAUNCHERS" ],
+ [ "FLAMETHROWERS" ]
+ ],
+ "sight_dispersion": 27,
+ "aim_speed": 9,
+ "min_skills": [ [ "weapon", 2 ], [ "gun", 2 ] ],
+ "use_action": { "menu_text": "Rotate", "type": "transform", "target": "mana_laser_rail", "msg": "You rotate the laser sight." },
+ "flags": [ "PUMP_RAIL_COMPATIBLE" ]
+ },
+ {
+ "id": "mana_dot_sight",
+ "type": "GUNMOD",
+ "name": "mana dot sight",
+ "description": "Adds a blue dot optic made from crystallized mana to the top of your gun, replacing the iron sights. Increases accuracy and weight.",
+ "weight": "270 g",
+ "volume": "250 ml",
+ "integral_volume": "0 ml",
+ "price": "680 USD",
+ "material": [ "plastic", "steel" ],
+ "symbol": ":",
+ "color": "dark_gray",
+ "location": "sights",
+ "mod_target_category": [
+ [ "PISTOLS" ],
+ [ "REVOLVERS" ],
+ [ "SUBMACHINE_GUNS" ],
+ [ "RIFLES" ],
+ [ "MACHINE_GUNS" ],
+ [ "GATLING_GUNS" ],
+ [ "SHOTGUNS" ],
+ [ "S_XBOWS" ],
+ [ "M_XBOWS" ],
+ [ "GRENADE_LAUNCHERS" ],
+ [ "ROCKET_LAUNCHERS" ],
+ [ "FLAMETHROWERS" ]
+ ],
+ "sight_dispersion": 21,
+ "aim_speed": 7,
+ "min_skills": [ [ "weapon", 2 ], [ "gun", 2 ] ],
+ "flags": [ "DISABLE_SIGHTS" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_masks.json b/data/mods/Magical_Nights/items/enchanted/enchanted_masks.json
new file mode 100644
index 000000000000..c3a5867031d2
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_masks.json
@@ -0,0 +1,51 @@
+[
+ {
+ "abstract": "mmask",
+ "type": "TOOL_ARMOR",
+ "category": "armor",
+ "name": "magic mask",
+ "description": "A generic magic mask.",
+ "weight": "442 g",
+ "volume": "750 ml",
+ "price": "2 kUSD",
+ "to_hit": -3,
+ "material": [ "steel", "leather" ],
+ "symbol": "[",
+ "color": "dark_gray",
+ "covers": [ "mouth", "eyes" ],
+ "coverage": 95,
+ "encumbrance": 10,
+ "warmth": 10,
+ "material_thickness": 2,
+ "environmental_protection": 1,
+ "flags": [ "WATER_FRIENDLY", "STURDY" ]
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "id": "mmask_disappearance",
+ "name": { "str": "mask of disappearance", "str_pl": "masks of disappearance" },
+ "description": "A mask with no facial features at all, just eye and mouth holes, upon activation it makes everything ignore your presence for a while.",
+ "copy-from": "mmask",
+ "initial_charges": 12,
+ "max_charges": 12,
+ "charges_per_use": 12,
+ "use_action": { "type": "cast_spell", "spell_id": "invisibility", "no_fail": true, "level": 15, "need_worn": true },
+ "artifact_data": { "charge_type": "ARTC_TIME" }
+ },
+ {
+ "type": "TOOL_ARMOR",
+ "id": "mmask_vision",
+ "name": { "str": "mask of perfect vision", "str_pl": "masks of perfect vision" },
+ "description": "A decidedly steampunk-looking half mask that covers the eye area of the face, it has large lenses that correct and greatly enhance the vision of the wearer.",
+ "copy-from": "mmask",
+ "covers": [ "eyes" ],
+ "coverage": 100,
+ "encumbrance": 5,
+ "environmental_protection": 6,
+ "flags": [ "FANCY", "WATER_FRIENDLY", "SUN_GLASSES", "FIX_NEARSIGHT", "FIX_FARSIGHT", "ZOOM" ],
+ "qualities": [ [ "GLARE", 2 ] ],
+ "relic_data": {
+ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "PERCEPTION", "multiply": 0.25 } ] } ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_melee.json b/data/mods/Magical_Nights/items/enchanted/enchanted_melee.json
new file mode 100644
index 000000000000..c25495395c6b
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_melee.json
@@ -0,0 +1,842 @@
+[
+ {
+ "type": "GENERIC",
+ "id": "cudgel_plus_one",
+ "copy-from": "cudgel",
+ "looks_like": "cudgel",
+ "name": "cudgel +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "cudgel_plus_two",
+ "copy-from": "cudgel",
+ "looks_like": "cudgel",
+ "name": "cudgel +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "q_staff_plus_one",
+ "copy-from": "q_staff",
+ "looks_like": "q_staff",
+ "name": "quarterstaff +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "q_staff_plus_two",
+ "copy-from": "q_staff",
+ "looks_like": "q_staff",
+ "name": "quarterstaff +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "i_staff_plus_one",
+ "copy-from": "i_staff",
+ "looks_like": "i_staff",
+ "name": "ironshod quarterstaff +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "i_staff_plus_two",
+ "copy-from": "i_staff",
+ "looks_like": "i_staff",
+ "name": "ironshod quarterstaff +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "longsword_plus_one",
+ "copy-from": "longsword",
+ "looks_like": "longsword",
+ "name": "longsword +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "longsword_plus_two",
+ "copy-from": "longsword",
+ "looks_like": "longsword",
+ "name": "longsword +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "sledge_plus_one",
+ "copy-from": "hammer_sledge",
+ "looks_like": "hammer_sledge",
+ "name": "sledge hammer +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "sledge_plus_two",
+ "copy-from": "hammer_sledge",
+ "looks_like": "hammer_sledge",
+ "name": "sledge hammer +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "sledge_heavy_plus_one",
+ "copy-from": "hammer_sledge_heavy",
+ "name": { "str": "heavy sledge hammer +1", "str_pl": "heavy sledge hammers +1" },
+ "proportional": { "price": 15, "price_postapoc": 30, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "sledge_heavy_plus_two",
+ "copy-from": "hammer_sledge_heavy",
+ "name": { "str": "heavy sledge hammer +2", "str_pl": "heavy sledge hammers +2" },
+ "proportional": { "price": 18, "price_postapoc": 36, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "warhammer_plus_one",
+ "copy-from": "warhammer",
+ "looks_like": "warhammer",
+ "name": "warhammer +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "warhammer_plus_two",
+ "copy-from": "warhammer",
+ "looks_like": "warhammer",
+ "name": "warhammer +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "bat_plus_one",
+ "copy-from": "bat",
+ "looks_like": "bat",
+ "name": { "str": "bat +1" },
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "bat_plus_two",
+ "copy-from": "bat",
+ "looks_like": "bat",
+ "name": { "str": "bat +2" },
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "bat_metal_plus_one",
+ "copy-from": "bat_metal",
+ "looks_like": "bat_metal",
+ "name": { "str": "aluminum bat +1" },
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "bat_metal_plus_two",
+ "copy-from": "bat_metal",
+ "looks_like": "bat_metal",
+ "name": { "str": "aluminum bat +2" },
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "spear_steel_plus_one",
+ "copy-from": "spear_steel",
+ "looks_like": "spear_steel",
+ "name": "steel spear +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "spear_steel_plus_two",
+ "copy-from": "spear_steel",
+ "looks_like": "spear_steel",
+ "name": "steel spear +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "qiang_plus_one",
+ "copy-from": "qiang",
+ "looks_like": "qiang",
+ "name": "qiang +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "qiang_plus_two",
+ "copy-from": "qiang",
+ "looks_like": "qiang",
+ "name": "qiang +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "halberd_plus_one",
+ "copy-from": "halberd",
+ "looks_like": "halberd",
+ "name": "halberd +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "halberd_plus_two",
+ "copy-from": "halberd",
+ "looks_like": "halberd",
+ "name": "halberd +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "glaive_plus_one",
+ "copy-from": "glaive",
+ "looks_like": "glaive",
+ "name": "glaive +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "glaive_plus_two",
+ "copy-from": "glaive",
+ "looks_like": "glaive",
+ "name": "glaive +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "naginata_plus_one",
+ "copy-from": "naginata",
+ "looks_like": "naginata",
+ "name": "naginata +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "naginata_plus_two",
+ "copy-from": "naginata",
+ "looks_like": "naginata",
+ "name": "naginata +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "mace_plus_one",
+ "copy-from": "mace",
+ "looks_like": "mace",
+ "name": "mace +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "mace_plus_two",
+ "copy-from": "mace",
+ "looks_like": "mace",
+ "name": "mace +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "morningstar_plus_one",
+ "copy-from": "morningstar",
+ "looks_like": "morningstar",
+ "name": "morningstar +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "morningstar_plus_two",
+ "copy-from": "morningstar",
+ "looks_like": "morningstar",
+ "name": "morningstar +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "jian_plus_one",
+ "copy-from": "jian",
+ "looks_like": "jian",
+ "name": "jian +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "jian_plus_two",
+ "copy-from": "jian",
+ "looks_like": "jian",
+ "name": "jian +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "scimitar_plus_one",
+ "copy-from": "scimitar",
+ "looks_like": "scimitar",
+ "name": "scimitar +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "scimitar_plus_two",
+ "copy-from": "scimitar",
+ "looks_like": "scimitar",
+ "name": "scimitar +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "estoc_plus_one",
+ "copy-from": "estoc",
+ "looks_like": "estoc",
+ "name": "estoc +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "estoc_plus_two",
+ "copy-from": "estoc",
+ "looks_like": "estoc",
+ "name": "estoc +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "arming_sword_plus_one",
+ "copy-from": "arming_sword",
+ "looks_like": "arming_sword",
+ "name": { "str": "arming sword +1" },
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "arming_sword_plus_two",
+ "copy-from": "arming_sword",
+ "looks_like": "arming_sword",
+ "name": { "str": "arming sword +2" },
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "broadsword_plus_one",
+ "copy-from": "broadsword",
+ "looks_like": "broadsword",
+ "name": "broadsword +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "broadsword_plus_two",
+ "copy-from": "broadsword",
+ "looks_like": "broadsword",
+ "name": "broadsword +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "battleaxe_plus_one",
+ "copy-from": "battleaxe",
+ "looks_like": "battleaxe",
+ "name": { "str": "battle axe +1" },
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "battleaxe_plus_two",
+ "copy-from": "battleaxe",
+ "looks_like": "battleaxe",
+ "name": { "str": "battle axe +2" },
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "cavalry_sabre_plus_one",
+ "copy-from": "cavalry_sabre",
+ "looks_like": "cavalry_sabre",
+ "name": "cavalry sabre +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "cavalry_sabre_plus_two",
+ "copy-from": "cavalry_sabre",
+ "looks_like": "cavalry_sabre",
+ "name": "cavalry sabre +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "crowbar_plus_one",
+ "copy-from": "crowbar",
+ "looks_like": "crowbar",
+ "name": "crowbar +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "crowbar_plus_two",
+ "copy-from": "crowbar",
+ "looks_like": "crowbar",
+ "name": "crowbar +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "cutlass_plus_one",
+ "copy-from": "cutlass",
+ "looks_like": "cutlass",
+ "name": "cutlass +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "cutlass_plus_two",
+ "copy-from": "cutlass",
+ "looks_like": "cutlass",
+ "name": "cutlass +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "fire_ax_plus_one",
+ "copy-from": "fire_ax",
+ "looks_like": "fire_ax",
+ "name": "fire axe +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "fire_ax_plus_two",
+ "copy-from": "fire_ax",
+ "looks_like": "fire_ax",
+ "name": "fire axe +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "katana_plus_one",
+ "copy-from": "katana",
+ "looks_like": "katana",
+ "name": "katana +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "katana_plus_two",
+ "copy-from": "katana",
+ "looks_like": "katana",
+ "name": "katana +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_combat_plus_one",
+ "copy-from": "knife_combat",
+ "looks_like": "knife_combat",
+ "name": "combat knife +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_combat_plus_two",
+ "copy-from": "knife_combat",
+ "looks_like": "knife_combat",
+ "name": "combat knife +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_hunting_plus_one",
+ "copy-from": "knife_hunting",
+ "looks_like": "knife_hunting",
+ "name": "hunting knife +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_hunting_plus_two",
+ "copy-from": "knife_hunting",
+ "looks_like": "knife_hunting",
+ "name": "hunting knife +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_rambo_plus_one",
+ "copy-from": "knife_rambo",
+ "looks_like": "knife_rambo",
+ "name": "survival knife +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_rambo_plus_two",
+ "copy-from": "knife_rambo",
+ "looks_like": "knife_rambo",
+ "name": "survival knife +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_trench_plus_one",
+ "copy-from": "knife_trench",
+ "looks_like": "knife_trench",
+ "name": "trench knife +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_trench_plus_two",
+ "copy-from": "knife_trench",
+ "looks_like": "knife_trench",
+ "name": "trench knife +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "kris_plus_one",
+ "copy-from": "kris",
+ "looks_like": "kris",
+ "name": "kris +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "kris_plus_two",
+ "copy-from": "kris",
+ "looks_like": "kris",
+ "name": "kris +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "kukri_plus_one",
+ "copy-from": "kukri",
+ "looks_like": "kukri",
+ "name": "kukri +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "kukri_plus_two",
+ "copy-from": "kukri",
+ "looks_like": "kukri",
+ "name": "kukri +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "nodachi_plus_one",
+ "copy-from": "nodachi",
+ "looks_like": "nodachi",
+ "name": "nodachi +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "nodachi_plus_two",
+ "copy-from": "nodachi",
+ "looks_like": "nodachi",
+ "name": "nodachi +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "pickaxe_plus_one",
+ "copy-from": "pickaxe",
+ "looks_like": "pickaxe",
+ "name": "pickaxe +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "pickaxe_plus_two",
+ "copy-from": "pickaxe",
+ "looks_like": "pickaxe",
+ "name": "pickaxe +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "pike_plus_one",
+ "copy-from": "pike",
+ "looks_like": "pike",
+ "name": "pike +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "pike_plus_two",
+ "copy-from": "pike",
+ "looks_like": "pike",
+ "name": "pike +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "rapier_plus_one",
+ "copy-from": "rapier",
+ "looks_like": "rapier",
+ "name": "rapier +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "rapier_plus_two",
+ "copy-from": "rapier",
+ "looks_like": "rapier",
+ "name": "rapier +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "tanto_plus_one",
+ "copy-from": "tanto",
+ "looks_like": "tanto",
+ "name": "tanto +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "tanto_plus_two",
+ "copy-from": "tanto",
+ "looks_like": "tanto",
+ "name": "tanto +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "wakizashi_plus_one",
+ "copy-from": "wakizashi",
+ "looks_like": "wakizashi",
+ "name": "wakizashi +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "wakizashi_plus_two",
+ "copy-from": "wakizashi",
+ "looks_like": "wakizashi",
+ "name": "wakizashi +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "zweihander_plus_one",
+ "copy-from": "zweihander",
+ "looks_like": "zweihander",
+ "name": "zweihänder +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "zweihander_plus_two",
+ "copy-from": "zweihander",
+ "looks_like": "zweihander",
+ "name": "zweihänder +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "khopesh_plus_one",
+ "copy-from": "khopesh",
+ "looks_like": "khopesh",
+ "name": "khopesh +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "khopesh_plus_two",
+ "copy-from": "khopesh",
+ "looks_like": "khopesh",
+ "name": "khopesh +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "sword_xiphos_plus_one",
+ "copy-from": "sword_xiphos",
+ "looks_like": "sword_xiphos",
+ "name": "xiphos +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "sword_xiphos_plus_two",
+ "copy-from": "sword_xiphos",
+ "looks_like": "sword_xiphos",
+ "name": "xiphos +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "dao_plus_one",
+ "copy-from": "dao",
+ "looks_like": "dao",
+ "name": "dao +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "dao_plus_two",
+ "copy-from": "dao",
+ "looks_like": "dao",
+ "name": "dao +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "lucerne_plus_one",
+ "copy-from": "lucern_hammer",
+ "name": { "str": "lucerne hammer +1", "str_pl": "lucerne hammers +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "lucerne_plus_two",
+ "copy-from": "lucern_hammer",
+ "name": { "str": "lucerne hammer +2", "str_pl": "lucerne hammers +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "springstaff-retracted",
+ "category": "weapons",
+ "weapon_category": [ "BATONS" ],
+ "name": { "str": "springstaff(baton)", "str_pl": "springstaves(baton)" },
+ "description": "This versatile weapon uses Technomancy-enhanced springs to keep the staff tips retracted while in baton configuration. Activate to extend.",
+ "weight": "1800 g",
+ "to_hit": 2,
+ "color": "dark_gray",
+ "symbol": "/",
+ "material": [ "steel", "plastic" ],
+ "techniques": [ "WBLOCK_1", "RAPID" ],
+ "flags": [ "DURABLE_MELEE", "BELT_CLIP" ],
+ "use_action": {
+ "menu_text": "Extend to staff",
+ "type": "transform",
+ "target": "springstaff-extended",
+ "msg": "You snap open your springstaff into staff mode.",
+ "moves": 50,
+ "need_wielding": true
+ },
+ "volume": "750 ml",
+ "bashing": 12,
+ "price": "340 USD"
+ },
+ {
+ "type": "GENERIC",
+ "id": "springstaff-extended",
+ "category": "weapons",
+ "weapon_category": [ "QUARTERSTAVES" ],
+ "name": { "str": "springstaff(staff)", "str_pl": "springstaves(staff)" },
+ "description": "This versatile weapon uses Technomancy-enhanced springs to keep the staff tips from retracting while in staff configuration. Activate to extend.",
+ "weight": "1800 g",
+ "to_hit": 3,
+ "color": "dark_gray",
+ "symbol": "/",
+ "material": [ "steel", "plastic" ],
+ "techniques": [ "WBLOCK_2", "RAPID", "SWEEP" ],
+ "flags": [ "DURABLE_MELEE", "SHEATH_SPEAR" ],
+ "use_action": {
+ "menu_text": "Retract to baton",
+ "type": "transform",
+ "target": "springstaff-retracted",
+ "msg": "You collapse your springstaff into baton mode.",
+ "moves": 200,
+ "need_wielding": true
+ },
+ "volume": "3 L",
+ "bashing": 19,
+ "price": "340 USD"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_misc.json b/data/mods/Magical_Nights/items/enchanted/enchanted_misc.json
new file mode 100644
index 000000000000..e035862acb42
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_misc.json
@@ -0,0 +1,224 @@
+[
+ {
+ "type": "TOOL",
+ "id": "heat_cube",
+ "symbol": "#",
+ "color": "light_gray",
+ "name": "heat cube",
+ "description": "A smooth steel cube the size of your fist. Several buttons on the sides activate the powers of the cube.",
+ "price": 200000,
+ "price_postapoc": 500000,
+ "material": "steel",
+ "weight": "500 g",
+ "volume": "450 ml",
+ "bashing": 8,
+ "to_hit": -1,
+ "qualities": [ [ "HAMMER", 1 ] ],
+ "flags": [ "ALLOWS_REMOTE_USE", "FIRE" ],
+ "initial_charges": 60,
+ "max_charges": 60,
+ "charges_per_use": 1,
+ "sub": "hotplate",
+ "artifact_data": { "charge_type": "ARTC_TIME" },
+ "use_action": [
+ "HOTPLATE",
+ "HEAT_FOOD",
+ {
+ "type": "transform",
+ "target": "heat_cube_torch_on",
+ "active": true,
+ "msg": "You push the torch button and the cube emits a large flame from the top, one that does radiate heat, but won't burn anything.",
+ "menu_text": "Activate torch mode",
+ "moves": 150
+ },
+ { "type": "firestarter" },
+ { "flame": false, "type": "cauterize" }
+ ]
+ },
+ {
+ "id": "heat_cube_torch_on",
+ "copy-from": "heat_cube",
+ "type": "TOOL",
+ "name": { "str": "heat cube (torch on)", "str_pl": "heat cubes (torch on)" },
+ "description": "The heat cube in the torch configuration, where it emits warmth and a bright flame that does not burn.",
+ "turns_per_charge": 360,
+ "revert_to": "heat_cube",
+ "use_action": { "target": "heat_cube", "msg": "The torch flame is extinguished.", "menu_text": "Turn off", "type": "transform" },
+ "emits": [ "emit_hot_air2_stream" ],
+ "flags": [ "LIGHT_15", "TRADER_AVOID", "ALLOWS_REMOTE_USE" ]
+ },
+ {
+ "id": "mkey_opening",
+ "type": "TOOL",
+ "name": { "str": "skeleton key of opening", "str_pl": "skeleton keys of opening" },
+ "description": "A small gold skeleton key. You can activate it to unlock locked things.",
+ "weight": "20 g",
+ "volume": "0 ml",
+ "price": "5 kUSD",
+ "material": [ "gold" ],
+ "symbol": "[",
+ "color": "yellow",
+ "initial_charges": 5,
+ "max_charges": 5,
+ "charges_per_use": 1,
+ "qualities": [ [ "LOCKPICK", 50 ] ],
+ "flags": [ "PERFECT_LOCKPICK" ]
+ },
+ {
+ "id": "mtorch_everburning",
+ "type": "TOOL",
+ "name": { "str": "everburning torch", "str_pl": "everburning torches" },
+ "description": "This is a high quality engraved wooden torch. On command, the tip bursts into flame and produces a fair amount of light. It will burn forever.",
+ "weight": "831 g",
+ "volume": "750 ml",
+ "price": "0 cent",
+ "to_hit": 1,
+ "bashing": 8,
+ "material": "wood",
+ "symbol": "/",
+ "color": "brown",
+ "techniques": [ "WBLOCK_1" ],
+ "flags": [ "STURDY" ],
+ "use_action": {
+ "target": "mtorch_everburning_lit",
+ "msg": "You light the torch.",
+ "active": true,
+ "menu_text": "Light torch",
+ "type": "transform"
+ }
+ },
+ {
+ "id": "mtorch_everburning_lit",
+ "type": "TOOL",
+ "name": { "str": "everburning torch", "str_pl": "everburning torches" },
+ "copy-from": "mtorch_everburning",
+ "revert_to": "mtorch_everburning",
+ "sub": "fire",
+ "use_action": [
+ { "type": "firestarter", "moves": 30 },
+ {
+ "target": "mtorch_everburning",
+ "msg": "The torch is extinguished.",
+ "active": false,
+ "menu_text": "Extinguish",
+ "type": "transform"
+ }
+ ],
+ "techniques": [ "WBLOCK_1" ],
+ "flags": [ "FIRE", "LIGHT_240", "FLAMING", "TRADER_AVOID", "WATER_EXTINGUISH", "STURDY" ]
+ },
+ {
+ "name": { "str": "endless flask" },
+ "id": "mflask_hip_whiskey",
+ "type": "CONTAINER",
+ "copy-from": "flask_hip",
+ "category": "clothing",
+ "use_action": {
+ "target": "whiskey",
+ "msg": "You open the flask and discover it full of sweet, sweet, whiskey!",
+ "container": "mflask_hip_whiskey",
+ "target_charges": 7,
+ "moves": 50,
+ "type": "delayed_transform",
+ "transform_age": 14400,
+ "not_ready_msg": "The flask isn't done refilling yet.",
+ "//": "24 hours"
+ }
+ },
+ {
+ "id": "mtailors_kit",
+ "type": "TOOL",
+ "copy-from": "tailors_kit",
+ "name": "enchanted tailor's kit",
+ "description": "This is a high quality, engraved steel kit with a variety of needles, some plastic spools for thread, some small scissors, even a small heating element for melting and joining plastic. Use a tailor's kit to customize your clothing and armor. This uses your tailoring skill. It also contains one of those magic spiders that constantly, if slowly, makes new thread.",
+ "price": 100000,
+ "material": [ "steel" ],
+ "initial_charges": 500,
+ "max_charges": 1000,
+ "charges_per_use": 1,
+ "relic_data": { "recharge_scheme": [ { "type": "time", "req": "none", "interval": "1 h", "rate": 1 } ] },
+ "sub": "sewing_kit",
+ "use_action": [
+ {
+ "type": "repair_item",
+ "item_action_type": "repair_fabric",
+ "materials": [
+ "cotton",
+ "leather",
+ "wool",
+ "fur",
+ "faux_fur",
+ "nomex",
+ "kevlar",
+ "neoprene",
+ "gutskin",
+ "black_dragon_hide",
+ "demon_chitin"
+ ],
+ "skill": "tailor",
+ "tool_quality": 1,
+ "cost_scaling": 0.1,
+ "move_cost": 500
+ },
+ {
+ "type": "sew_advanced",
+ "materials": [ "cotton", "leather", "wool", "fur", "faux_fur", "nomex", "kevlar", "neoprene", "gutskin", "plastic", "kevlar_rigid" ],
+ "skill": "tailor",
+ "clothing_mods": [ "leather_padded", "steel_padded", "kevlar_padded", "furred", "wooled" ]
+ }
+ ],
+ "flags": [ "ALLOWS_REMOTE_USE" ]
+ },
+ {
+ "id": "mspider_box",
+ "type": "TOOL",
+ "name": { "str": "spider box", "str_pl": "spider boxes" },
+ "description": "This is a small glass box that contains a spider that diligently works day and night to produce silk thread that it stores in a reservoir you can open and retrieve it from.",
+ "weight": "100 g",
+ "volume": "100 ml",
+ "price": "1 kUSD",
+ "to_hit": -2,
+ "material": [ "glass" ],
+ "symbol": ";",
+ "color": "red",
+ "ammo": "thread",
+ "initial_charges": 500,
+ "max_charges": 1000,
+ "relic_data": { "recharge_scheme": [ { "type": "time", "req": "none", "interval": "1 h", "rate": 1 } ] }
+ },
+ {
+ "id": "glow_light_off",
+ "type": "GENERIC",
+ "category": "tools",
+ "name": { "str": "magical reading light (covered)", "str_pl": "magical reading lights (covered)" },
+ "description": "Powered by the magic of glow powder and lesser mana potions, this extremely expensive little light will provide just enough light to read by for at least a decade. The cover is closed. Use it to open the cover and show the light.",
+ "weight": "270 g",
+ "volume": "250 ml",
+ "price": "1250 USD",
+ "material": "glass",
+ "symbol": ",",
+ "color": "light_blue",
+ "use_action": { "target": "glow_light", "msg": "You open the nightlight's cover.", "menu_text": "Open cover", "type": "transform" },
+ "flags": [ "ALLOWS_REMOTE_USE" ]
+ },
+ {
+ "id": "glow_light",
+ "type": "GENERIC",
+ "category": "tools",
+ "name": "magical reading light",
+ "description": "Powered by the magic of glow powder and lesser mana potions, this extremely expensive little light will provide just enough light to read by for at least a decade. Use it to close the cover and hide the light.",
+ "weight": "270 g",
+ "volume": "250 ml",
+ "price": "1250 USD",
+ "material": "glass",
+ "symbol": ",",
+ "color": "light_blue",
+ "use_action": {
+ "target": "glow_light_off",
+ "msg": "You close the nightlight's cover.",
+ "menu_text": "Close cover",
+ "type": "transform"
+ },
+ "flags": [ "LIGHT_5", "ALLOWS_REMOTE_USE" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_ranged.json b/data/mods/Magical_Nights/items/enchanted/enchanted_ranged.json
new file mode 100644
index 000000000000..7df25d09f38e
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_ranged.json
@@ -0,0 +1,68 @@
+[
+ {
+ "id": "m47a1",
+ "copy-from": "pistol_revolver",
+ "type": "GUN",
+ "name": { "str": "M47A1 Techno-Medusa", "str_pl": "M47A1 Techno-Medusae" },
+ "description": "A magically-enhanced update to the Phillips & Rodgers' M47 Medusa, a multi-caliber revolver aimed at survivalists. While Technomancy improves the reliability with smaller cartridges, it is not as accurate as dedicated caliber revolvers due to freebore.",
+ "weight": "1333 g",
+ "volume": "750 ml",
+ "price": "740 USD",
+ "to_hit": -1,
+ "bashing": 9,
+ "material": [ "steel", "wood" ],
+ "symbol": "(",
+ "color": "dark_gray",
+ "ammo": [ "9mm", "9x18", "380", "357mag", "38" ],
+ "ranged_damage": { "damage_type": "bullet", "amount": 0 },
+ "dispersion": 558,
+ "durability": 7,
+ "blackpowder_tolerance": 66,
+ "loudness": 23,
+ "clip_size": 6,
+ "valid_mod_locations": [
+ [ "accessories", 1 ],
+ [ "mechanism", 1 ],
+ [ "barrel", 1 ],
+ [ "grip", 1 ],
+ [ "rail mount", 1 ],
+ [ "sights", 1 ],
+ [ "stock mount", 1 ],
+ [ "underbarrel mount", 1 ]
+ ],
+ "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ]
+ },
+ {
+ "id": "gunblade",
+ "type": "GUN",
+ "name": "gunblade",
+ "weapon_category": [ "MANUAL_ACTION", "1H_SWORDS" ],
+ "description": "Constructed similarly to a falcata, this forward-sloping blade has a short-barrel pump shotgun attached to the blade's spine for finishing blows or a first strike.",
+ "weight": "1539 g",
+ "volume": "1750 ml",
+ "price": "80 USD",
+ "to_hit": 2,
+ "bashing": 10,
+ "cutting": 22,
+ "material": [ "steel" ],
+ "symbol": "/",
+ "color": "dark_gray",
+ "techniques": [ "WBLOCK_2" ],
+ "qualities": [ [ "CUT", 1 ], [ "BUTCHER", 20 ] ],
+ "skill": "shotgun",
+ "ranged_damage": { "damage_type": "bullet", "amount": 1 },
+ "dispersion": 600,
+ "durability": 6,
+ "blackpowder_tolerance": 66,
+ "clip_size": 3,
+ "range": -4,
+ "modes": [ [ "DEFAULT", "single", 1 ] ],
+ "ammo": "shot",
+ "reload": 200,
+ "barrel_length": "500 ml",
+ "valid_mod_locations": [ [ "mechanism", 1 ] ],
+ "reload_noise": "chuk chuk.",
+ "flags": [ "RELOAD_ONE", "PUMP_ACTION", "DURABLE_MELEE", "SHEATH_SWORD" ],
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_rings.json b/data/mods/Magical_Nights/items/enchanted/enchanted_rings.json
new file mode 100644
index 000000000000..e1a92739b2bf
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_rings.json
@@ -0,0 +1,318 @@
+[
+ {
+ "abstract": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "name": "copper magic ring",
+ "description": "A generic copper magic ring.",
+ "weight": "4 g",
+ "volume": "0 ml",
+ "price": "50 USD",
+ "material": [ "copper" ],
+ "symbol": "[",
+ "color": "light_red",
+ "covers": [ "hand_either" ],
+ "coverage": 0,
+ "warmth": 0,
+ "flags": [ "WATER_FRIENDLY", "ALLOWS_NATURAL_ATTACKS", "FANCY", "ONLY_ONE", "SKINTIGHT", "POWERARMOR_COMPATIBLE", "COMPACT" ]
+ },
+ {
+ "abstract": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "name": "magic ring",
+ "description": "A generic silver magic ring.",
+ "weight": "5 g",
+ "volume": "0 ml",
+ "price": "50 USD",
+ "material": [ "silver" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "covers": [ "hand_either" ],
+ "coverage": 0,
+ "warmth": 0,
+ "flags": [ "WATER_FRIENDLY", "ALLOWS_NATURAL_ATTACKS", "FANCY", "ONLY_ONE", "SKINTIGHT", "POWERARMOR_COMPATIBLE", "COMPACT" ]
+ },
+ {
+ "abstract": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "name": "magic ring",
+ "description": "A generic gold magic ring.",
+ "weight": "9 g",
+ "volume": "0 ml",
+ "price": "50 USD",
+ "material": [ "gold" ],
+ "symbol": "[",
+ "color": "yellow",
+ "covers": [ "hand_either" ],
+ "coverage": 0,
+ "warmth": 0,
+ "flags": [ "WATER_FRIENDLY", "ALLOWS_NATURAL_ATTACKS", "FANCY", "ONLY_ONE", "SKINTIGHT", "POWERARMOR_COMPATIBLE", "COMPACT" ]
+ },
+ {
+ "abstract": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "name": "magic ring",
+ "description": "A generic platinum magic ring.",
+ "weight": "11 g",
+ "volume": "0 ml",
+ "price": "50 USD",
+ "material": [ "platinum" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "covers": [ "hand_either" ],
+ "coverage": 0,
+ "warmth": 0,
+ "flags": [ "WATER_FRIENDLY", "ALLOWS_NATURAL_ATTACKS", "FANCY", "ONLY_ONE", "SKINTIGHT", "POWERARMOR_COMPATIBLE", "COMPACT" ]
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_blades_lesser",
+ "name": { "str": "ring of blades", "str_pl": "rings of blades" },
+ "description": "An ornate silver ring engraved with daggers that conjures a near perfect throwing knife into your hand on activation.",
+ "use_action": { "type": "cast_spell", "spell_id": "conj_throwing_blade1", "no_fail": true, "level": 1, "need_worn": true },
+ "initial_charges": 5,
+ "max_charges": 5,
+ "charges_per_use": 1,
+ "artifact_data": { "charge_type": "ARTC_TIME" }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_dodge_bonus_1",
+ "name": "eel ring",
+ "description": "A thin silver band ring, depicting an eel coiled on itself. Allows you to dodge an extra attack per turn.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "BONUS_DODGE", "add": 1 } ] } ] }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_dodge_bonus_2",
+ "name": { "str": "bicephalous eel ring" },
+ "description": "A thin gold band ring, depicting a bicephalous eel coiled on itself. Allows you to dodge two extra attacks per turn.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "BONUS_DODGE", "add": 2 } ] } ] }
+ },
+ {
+ "copy-from": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "id": "mring_strength_1",
+ "name": { "str": "ring of strength +1", "str_pl": "rings of strength +1" },
+ "description": "A copper ring that makes you a little stronger when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "STRENGTH", "add": 1 } ] } ] }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_strength_2",
+ "name": { "str": "ring of strength +2", "str_pl": "rings of strength +2" },
+ "description": "A silver ring that makes you a good bit stronger when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "STRENGTH", "add": 2 } ] } ] }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_strength_3",
+ "name": { "str": "ring of strength +3", "str_pl": "rings of strength +3" },
+ "description": "A golden ring that makes you surprisingly stronger when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "STRENGTH", "add": 3 } ] } ] }
+ },
+ {
+ "copy-from": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "id": "mring_strength_4",
+ "name": { "str": "ring of strength +4", "str_pl": "rings of strength +4" },
+ "description": "A platinum ring that makes you much stronger when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "STRENGTH", "add": 4 } ] } ] }
+ },
+ {
+ "copy-from": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "id": "mring_dexterity_1",
+ "name": { "str": "ring of dexterity +1", "str_pl": "rings of dexterity +1" },
+ "description": "A copper ring that makes you a little more agile when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "DEXTERITY", "add": 1 } ] } ] }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_dexterity_2",
+ "name": { "str": "ring of dexterity +2", "str_pl": "rings of dexterity +2" },
+ "description": "A silver ring that makes you a good bit more agile when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "DEXTERITY", "add": 2 } ] } ] }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_dexterity_3",
+ "name": { "str": "ring of dexterity +3", "str_pl": "rings of dexterity +3" },
+ "description": "A golden ring that makes you surprisingly more agile when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "DEXTERITY", "add": 3 } ] } ] }
+ },
+ {
+ "copy-from": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "id": "mring_dexterity_4",
+ "name": { "str": "ring of dexterity +4", "str_pl": "rings of dexterity +4" },
+ "description": "A platinum ring that makes you much more agile when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "DEXTERITY", "add": 4 } ] } ] }
+ },
+ {
+ "copy-from": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "id": "mring_intelligence_1",
+ "name": { "str": "ring of intelligence +1", "str_pl": "rings of intelligence +1" },
+ "description": "A copper ring that makes you a little more intelligent when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "INTELLIGENCE", "add": 1 } ] } ] }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_intelligence_2",
+ "name": { "str": "ring of intelligence +2", "str_pl": "rings of intelligence +2" },
+ "description": "A silver ring that makes you a good bit more intelligent when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "INTELLIGENCE", "add": 2 } ] } ] }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_intelligence_3",
+ "name": { "str": "ring of intelligence +3", "str_pl": "rings of intelligence +3" },
+ "description": "A golden ring that makes you surprisingly more intelligent when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "INTELLIGENCE", "add": 3 } ] } ] }
+ },
+ {
+ "copy-from": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "id": "mring_intelligence_4",
+ "name": { "str": "ring of intelligence +4", "str_pl": "rings of intelligence +4" },
+ "description": "A platinum ring that makes you much more intelligent when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "INTELLIGENCE", "add": 4 } ] } ] }
+ },
+ {
+ "copy-from": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "id": "mring_perception_1",
+ "name": { "str": "ring of perception +1", "str_pl": "rings of perception +1" },
+ "description": "A copper ring that makes you a little more perceptive when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "PERCEPTION", "add": 1 } ] } ] }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_perception_2",
+ "name": { "str": "ring of perception +2", "str_pl": "rings of perception +2" },
+ "description": "A silver ring that makes you a good bit more perceptive when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "PERCEPTION", "add": 2 } ] } ] }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_perception_3",
+ "name": { "str": "ring of perception +3", "str_pl": "rings of perception +3" },
+ "description": "A golden ring that makes you eye-openingly more perceptive when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "PERCEPTION", "add": 3 } ] } ] }
+ },
+ {
+ "copy-from": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "id": "mring_perception_4",
+ "name": { "str": "ring of perception +4", "str_pl": "rings of perception +4" },
+ "description": "A platinum ring that makes you much more perceptive when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "PERCEPTION", "add": 4 } ] } ] }
+ },
+ {
+ "copy-from": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "id": "mring_speed_3",
+ "name": { "str": "ring of speed +3", "str_pl": "rings of speed +3" },
+ "description": "A copper ring that makes you a little faster when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "SPEED", "add": 3 } ] } ] }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_speed_5",
+ "name": { "str": "ring of speed +5", "str_pl": "rings of speed +5" },
+ "description": "A silver ring that makes you a good bit faster when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "SPEED", "add": 5 } ] } ] }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_speed_7",
+ "name": { "str": "ring of speed +7", "str_pl": "rings of speed +7" },
+ "description": "A golden ring that makes you quite hasty when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "SPEED", "add": 7 } ] } ] }
+ },
+ {
+ "copy-from": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "id": "mring_speed_10",
+ "name": { "str": "ring of speed +10", "str_pl": "rings of speed +10" },
+ "description": "A platinum ring that makes you much faster when you wear it.",
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "SPEED", "add": 10 } ] } ] }
+ },
+ {
+ "copy-from": "mring_copper",
+ "type": "TOOL_ARMOR",
+ "id": "mring_protection_2",
+ "name": { "str": "ring of protection +2", "str_pl": "rings of protection +2" },
+ "description": "A copper ring that reduces some of the force of damage you take when you wear it.",
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WORN",
+ "condition": "ALWAYS",
+ "values": [ { "value": "ARMOR_CUT", "add": -2 }, { "value": "ARMOR_BASH", "add": -2 }, { "value": "ARMOR_STAB", "add": -2 } ]
+ }
+ ]
+ }
+ },
+ {
+ "copy-from": "mring_silver",
+ "type": "TOOL_ARMOR",
+ "id": "mring_protection_4",
+ "name": { "str": "ring of protection +4", "str_pl": "rings of protection +4" },
+ "description": "A silver ring that appreciably reduces some of the force of damage you take when you wear it.",
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WORN",
+ "condition": "ALWAYS",
+ "values": [ { "value": "ARMOR_CUT", "add": -4 }, { "value": "ARMOR_BASH", "add": -4 }, { "value": "ARMOR_STAB", "add": -4 } ]
+ }
+ ]
+ }
+ },
+ {
+ "copy-from": "mring_gold",
+ "type": "TOOL_ARMOR",
+ "id": "mring_protection_6",
+ "name": { "str": "ring of protection +6", "str_pl": "rings of protection +6" },
+ "description": "A golden ring that greatly reduces some of the force of damage you take when you wear it.",
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WORN",
+ "condition": "ALWAYS",
+ "values": [ { "value": "ARMOR_CUT", "add": -6 }, { "value": "ARMOR_BASH", "add": -6 }, { "value": "ARMOR_STAB", "add": -6 } ]
+ }
+ ]
+ }
+ },
+ {
+ "copy-from": "mring_platinum",
+ "type": "TOOL_ARMOR",
+ "id": "mring_protection_8",
+ "name": { "str": "ring of protection +8", "str_pl": "rings of protection +8" },
+ "description": "A platinum ring that vastly reduces some of the force of damage you take when you wear it.",
+ "relic_data": {
+ "passive_effects": [
+ {
+ "has": "WORN",
+ "condition": "ALWAYS",
+ "values": [ { "value": "ARMOR_CUT", "add": -8 }, { "value": "ARMOR_BASH", "add": -8 }, { "value": "ARMOR_STAB", "add": -8 } ]
+ }
+ ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_tokens.json b/data/mods/Magical_Nights/items/enchanted/enchanted_tokens.json
new file mode 100644
index 000000000000..08ad80125739
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_tokens.json
@@ -0,0 +1,168 @@
+[
+ {
+ "abstract": "mtoken",
+ "name": "magic token",
+ "type": "GENERIC",
+ "category": "other",
+ "weight": "8 g",
+ "volume": "1 ml",
+ "price": "250 USD",
+ "material": [ "silver" ],
+ "symbol": "o",
+ "color": "light_gray"
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_longsword",
+ "name": "longsword token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a longsword.",
+ "use_action": {
+ "type": "transform",
+ "target": "longsword",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine longsword!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_arming_sword",
+ "name": { "str": "arming sword token" },
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case an arming sword.",
+ "use_action": {
+ "type": "transform",
+ "target": "arming_sword",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine arming sword!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_broadsword",
+ "name": "broadsword token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a broadsword.",
+ "use_action": {
+ "type": "transform",
+ "target": "broadsword",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine broadsword!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_battleaxe",
+ "name": { "str": "battleaxe token" },
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a battle axe.",
+ "use_action": {
+ "type": "transform",
+ "target": "battleaxe",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine battle axe!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_pike",
+ "name": "pike token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a pike.",
+ "use_action": {
+ "type": "transform",
+ "target": "pike",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine pike!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_mace",
+ "name": "mace token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a mace.",
+ "use_action": {
+ "type": "transform",
+ "target": "mace",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine mace!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_q_staff",
+ "name": "quarterstaff token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a quarterstaff.",
+ "use_action": {
+ "type": "transform",
+ "target": "q_staff",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a pristine quarterstaff!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_hammer",
+ "name": "hammer token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a hammer.",
+ "use_action": {
+ "type": "transform",
+ "target": "hammer",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine hammer!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_screwdriver_set",
+ "name": "screwdriver set token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a screwdriver.",
+ "use_action": {
+ "type": "transform",
+ "target": "screwdriver_set",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine screwdriver set!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_toolbox",
+ "name": "toolbox token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a toolbox.",
+ "use_action": {
+ "type": "transform",
+ "target": "toolbox",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine toolbox!"
+ }
+ },
+ {
+ "copy-from": "mtoken",
+ "type": "GENERIC",
+ "id": "mtoken_crowbar",
+ "name": "crowbar token",
+ "description": "A large silver coin that, when activated by uttering the word on the back, turns into the item pictured on the front, in this case a crowbar.",
+ "use_action": {
+ "type": "transform",
+ "target": "crowbar",
+ "active": false,
+ "moves": 200,
+ "msg": "You say the command word engraved on the token, and it rapidly grows and morphs into a shiny pristine crowbar!"
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_tools.json b/data/mods/Magical_Nights/items/enchanted/enchanted_tools.json
new file mode 100644
index 000000000000..db40ab4114d9
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_tools.json
@@ -0,0 +1,134 @@
+[
+ {
+ "type": "GENERIC",
+ "id": "crowbar_plus_one",
+ "copy-from": "crowbar",
+ "name": { "str": "crowbar +1", "str_pl": "crowbars +1" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "relative": { "to_hit": 1 },
+ "extend": { "qualities": [ [ "PRY", 4 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "crowbar_plus_two",
+ "copy-from": "crowbar",
+ "name": { "str": "crowbar +2", "str_pl": "crowbars +2" },
+ "proportional": { "price": 9, "price_postapoc": 9, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "relative": { "to_hit": 2 },
+ "extend": { "qualities": [ [ "PRY", 5 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_hunting_plus_one",
+ "copy-from": "knife_hunting",
+ "name": { "str": "hunting knife +1", "str_pl": "hunting knives +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "relative": { "to_hit": 1 },
+ "extend": { "qualities": [ [ "BUTCHER", 33 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_hunting_plus_two",
+ "copy-from": "knife_hunting",
+ "name": { "str": "hunting knife +2", "str_pl": "hunting knives +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "relative": { "to_hit": 2 },
+ "extend": { "qualities": [ [ "BUTCHER", 36 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "jack_plus_one",
+ "copy-from": "jack",
+ "name": { "str": "bottle jack +1", "str_pl": "bottle jacks +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "extend": { "qualities": [ [ "JACK", 18 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "jack_plus_two",
+ "copy-from": "jack",
+ "name": { "str": "bottle jack +2", "str_pl": "bottle jacks +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "extend": { "qualities": [ [ "JACK", 20 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "scalpel_plus_one",
+ "copy-from": "scalpel",
+ "name": { "str": "scalpel +1", "str_pl": "scalpels +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "extend": { "qualities": [ [ "CUT_FINE", 4 ], [ "BUTCHER", 9 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "scalpel_plus_two",
+ "copy-from": "scalpel",
+ "name": { "str": "scalpel +2", "str_pl": "scalpels +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "extend": { "qualities": [ [ "CUT_FINE", 5 ], [ "BUTCHER", 10 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_butcher_plus_one",
+ "copy-from": "knife_butcher",
+ "name": { "str": "butcher knife +1", "str_pl": "butcher knives +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "extend": { "qualities": [ [ "BUTCHER", 28 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_butcher_plus_two",
+ "copy-from": "knife_butcher",
+ "name": { "str": "butcher knife +2", "str_pl": "butcher knives +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "extend": { "qualities": [ [ "BUTCHER", 30 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_meat_cleaver_plus_one",
+ "copy-from": "knife_meat_cleaver",
+ "name": { "str": "meat cleaver +1", "str_pl": "meat cleavers +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "extend": { "qualities": [ [ "BUTCHER", 28 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_meat_cleaver_plus_two",
+ "copy-from": "knife_meat_cleaver",
+ "name": { "str": "meat cleaver +2", "str_pl": "meat cleavers +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "extend": { "qualities": [ [ "BUTCHER", 30 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_carving_plus_one",
+ "copy-from": "knife_carving",
+ "name": { "str": "carving knife +1", "str_pl": "carving knives +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "extend": { "qualities": [ [ "BUTCHER", 24 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "knife_carving_plus_two",
+ "copy-from": "knife_carving",
+ "name": { "str": "carving knife +2", "str_pl": "carving knives +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "extend": { "qualities": [ [ "BUTCHER", 26 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "butchering_kit_plus_one",
+ "copy-from": "butchering_kit",
+ "name": { "str": "butchering kit +1", "str_pl": "butchering kits +1" },
+ "proportional": { "price": 3, "price_postapoc": 3, "weight": 0.9, "bashing": 1.1, "cutting": 1.1 },
+ "extend": { "qualities": [ [ "BUTCHER", 41 ] ] }
+ },
+ {
+ "type": "GENERIC",
+ "id": "butchering_kit_plus_two",
+ "copy-from": "butchering_kit",
+ "name": { "str": "butchering kit +2", "str_pl": "butchering kits +2" },
+ "proportional": { "price": 6, "price_postapoc": 6, "weight": 0.8, "bashing": 1.2, "cutting": 1.2 },
+ "extend": { "qualities": [ [ "BUTCHER", 45 ] ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_unarmed.json b/data/mods/Magical_Nights/items/enchanted/enchanted_unarmed.json
new file mode 100644
index 000000000000..56e28323d29d
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_unarmed.json
@@ -0,0 +1,99 @@
+[
+ {
+ "type": "GENERIC",
+ "id": "cestus_plus_one",
+ "copy-from": "cestus",
+ "looks_like": "cestus",
+ "name": "cestus +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "cestus_plus_two",
+ "copy-from": "cestus",
+ "looks_like": "cestus",
+ "name": "cestus +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "flaming_fist",
+ "weapon_category": [ "FIST_WEAPONS" ],
+ "symbol": "3",
+ "color": "red",
+ "name": { "str": "flaming fist" },
+ "description": "A heavy metal guard that covers the fist and increases striking power, with stout padding underneath to protect the wearers hand. It has been enchanted to emit dark magical flames that only harm enemies.",
+ "looks_like": "cestus",
+ "material": [ "steel", "leather" ],
+ "volume": "500 ml",
+ "weight": "970 g",
+ "to_hit": 2,
+ "bashing": 12,
+ "qualities": [ [ "HAMMER", 1 ] ],
+ "flags": [ "UNARMED_WEAPON", "DURABLE_MELEE", "NONCONDUCTIVE", "FLAMING" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "flaming_fist_plus_one",
+ "copy-from": "flaming_fist",
+ "looks_like": "flaming_fist",
+ "name": "flaming fist +1",
+ "proportional": { "price": 3, "bashing": 1.1, "cutting": 1.1, "weight": 0.9 },
+ "relative": { "to_hit": 1 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "flaming_fist_plus_two",
+ "copy-from": "flaming_fist",
+ "looks_like": "flaming_fist",
+ "name": "flaming fist +2",
+ "proportional": { "price": 6, "bashing": 1.2, "cutting": 1.2, "weight": 0.8 },
+ "relative": { "to_hit": 2 }
+ },
+ {
+ "type": "GENERIC",
+ "id": "gauntlet_pounding",
+ "weapon_category": [ "FIST_WEAPONS" ],
+ "symbol": "3",
+ "color": "light_gray",
+ "name": { "str": "gauntlet of pounding", "str_pl": "gauntlets of pounding" },
+ "description": "A large gleaming metal gauntlet covered in magical symbols that allows you to land astoundingly powerful blows.",
+ "material": [ "superalloy" ],
+ "volume": "1 L",
+ "weight": "981 g",
+ "bashing": 34,
+ "to_hit": 3,
+ "qualities": [ [ "HAMMER", 2 ] ],
+ "techniques": [ "WBLOCK_1", "BRUTAL" ],
+ "flags": [ "UNARMED_WEAPON", "DURABLE_MELEE", "NONCONDUCTIVE", "OVERSIZE", "MESSY" ]
+ },
+ {
+ "id": "shotcestus",
+ "copy-from": "shotgun_base",
+ "weapon_category": [ "AUTOLOADING", "FIST_WEAPONS" ],
+ "type": "GUN",
+ "name": { "str": "shotcestus", "str_pl": "shotcesti" },
+ "description": "A sawn-off double-barrel shotgun mounted on a metal cestus. The lack of a stock to absorb recoil means some strength is required to fire.",
+ "weight": "1566 g",
+ "volume": "1500 ml",
+ "price": "200 USD",
+ "bashing": 12,
+ "material": [ "steel" ],
+ "techniques": [ "WBLOCK_1", "BRUTAL" ],
+ "min_strength": 7,
+ "ranged_damage": { "damage_type": "bullet", "amount": 1 },
+ "dispersion": 855,
+ "durability": 6,
+ "blackpowder_tolerance": 66,
+ "clip_size": 2,
+ "range": -8,
+ "modes": [ [ "DEFAULT", "single", 1 ], [ "DOUBLE", "double", 2 ] ],
+ "reload": 200,
+ "barrel_length": "500 ml",
+ "valid_mod_locations": [ [ "mechanism", 1 ] ],
+ "flags": [ "UNARMED_WEAPON", "DURABLE_MELEE", "NEVER_JAMS", "RELOAD_EJECT", "RELOAD_ONE" ],
+ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/enchanted/enchanted_wands.json b/data/mods/Magical_Nights/items/enchanted/enchanted_wands.json
new file mode 100644
index 000000000000..b59025a0ad1c
--- /dev/null
+++ b/data/mods/Magical_Nights/items/enchanted/enchanted_wands.json
@@ -0,0 +1,349 @@
+[
+ {
+ "abstract": "spell_wand",
+ "name": { "str": "Magic Wand" },
+ "type": "TOOL",
+ "weight": "230 g",
+ "volume": "500 ml",
+ "price": "100 USD",
+ "bashing": 3,
+ "to_hit": 1,
+ "material": [ "wood" ],
+ "symbol": "|",
+ "color": "brown",
+ "flags": [ "BELT_CLIP", "NONCONDUCTIVE" ],
+ "charges_per_use": 1,
+ "ammo": "crystallized_mana",
+ "magazines": [ [ "crystallized_mana", [ "small_mana_crystal" ] ] ],
+ "magazine_well": "250 ml"
+ },
+ {
+ "abstract": "disp_wand",
+ "name": { "str": "Disposable Wand" },
+ "type": "TOOL",
+ "weight": "230 g",
+ "volume": "500 ml",
+ "price": "100 USD",
+ "bashing": 3,
+ "to_hit": 1,
+ "material": [ "wood" ],
+ "symbol": "|",
+ "color": "brown",
+ "flags": [ "BELT_CLIP", "NONCONDUCTIVE" ],
+ "initial_charges": 20,
+ "max_charges": 20,
+ "charges_per_use": 1
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_magic_missile_minor",
+ "name": { "str": "minor wand of magic missile", "str_pl": "minor wands of magic missile" },
+ "copy-from": "spell_wand",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts magic missile.",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_magic_missile_lesser",
+ "name": { "str": "lesser wand of magic missile", "str_pl": "lesser wands of magic missile" },
+ "copy-from": "spell_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts magic missile.",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_magic_missile_greater",
+ "name": { "str": "greater wand of magic missile", "str_pl": "greater wands of magic missile" },
+ "copy-from": "spell_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts magic missile.",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_fireball_minor",
+ "name": { "str": "minor wand of fireball", "str_pl": "minor wands of fireball" },
+ "copy-from": "spell_wand",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts fireball.",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_fireball_lesser",
+ "name": { "str": "lesser wand of fireball", "str_pl": "lesser wands of fireball" },
+ "copy-from": "spell_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts fireball.",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_fireball_greater",
+ "name": { "str": "greater wand of fireball", "str_pl": "greater wands of fireball" },
+ "copy-from": "spell_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts fireball.",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_mana_beam_minor",
+ "name": { "str": "minor wand of mana beam", "str_pl": "minor wands of mana beam" },
+ "copy-from": "spell_wand",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts mana beam.",
+ "use_action": { "type": "cast_spell", "spell_id": "magus_mana_beam", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_mana_beam_lesser",
+ "name": { "str": "lesser wand of mana beam", "str_pl": "lesser wands of mana beam" },
+ "copy-from": "spell_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts mana beam.",
+ "use_action": { "type": "cast_spell", "spell_id": "magus_mana_beam", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_mana_beam_greater",
+ "name": { "str": "greater wand of mana beam", "str_pl": "greater wands of mana beam" },
+ "copy-from": "spell_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts mana beam.",
+ "use_action": { "type": "cast_spell", "spell_id": "magus_mana_beam", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_point_flare_minor",
+ "name": { "str": "minor wand of point flare", "str_pl": "minor wands of point flare" },
+ "copy-from": "spell_wand",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts point flare.",
+ "use_action": { "type": "cast_spell", "spell_id": "point_flare", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_point_flare_lesser",
+ "name": { "str": "lesser wand of point flare", "str_pl": "lesser wands of point flare" },
+ "copy-from": "spell_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts point flare.",
+ "use_action": { "type": "cast_spell", "spell_id": "point_flare", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_point_flare_greater",
+ "name": { "str": "greater wand of point flare", "str_pl": "greater wands of point flare" },
+ "copy-from": "spell_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts point flare.",
+ "use_action": { "type": "cast_spell", "spell_id": "point_flare", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_hoaryblast_minor",
+ "name": { "str": "minor wand of hoary blast", "str_pl": "minor wands of hoary blast" },
+ "copy-from": "spell_wand",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts hoary blast.",
+ "use_action": { "type": "cast_spell", "spell_id": "hoary_blast", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_hoaryblast_lesser",
+ "name": { "str": "lesser wand of hoary blast", "str_pl": "lesser wands of hoary blast" },
+ "copy-from": "spell_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts hoary blast.",
+ "use_action": { "type": "cast_spell", "spell_id": "hoary_blast", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_hoaryblast_greater",
+ "name": { "str": "greater wand of hoary blast", "str_pl": "greater wands of hoary blast" },
+ "copy-from": "spell_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts hoary blast.",
+ "use_action": { "type": "cast_spell", "spell_id": "hoary_blast", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_cone_cold_minor",
+ "name": { "str": "minor wand of cone of cold", "str_pl": "minor wands of cone of cold" },
+ "copy-from": "spell_wand",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts cone of cold.",
+ "use_action": { "type": "cast_spell", "spell_id": "cone_cold", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_cone_cold_lesser",
+ "name": { "str": "lesser wand of cone of cold", "str_pl": "lesser wands of cone of cold" },
+ "copy-from": "spell_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts cone of cold.",
+ "use_action": { "type": "cast_spell", "spell_id": "cone_cold", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_cone_cold_greater",
+ "name": { "str": "greater wand of cone of cold", "str_pl": "greater wands of cone of cold" },
+ "copy-from": "spell_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with a mana crystal socket at the base that casts a spell when activated. This wand casts cone of cold.",
+ "use_action": { "type": "cast_spell", "spell_id": "cone_cold", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_magic_missile_minor",
+ "name": { "str": "disposable minor wand of magic missile", "str_pl": "disposable minor wands of magic missile" },
+ "copy-from": "disp_wand",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts magic missile.",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_magic_missile_lesser",
+ "name": { "str": "disposable lesser wand of magic missile", "str_pl": "disposable lesser wands of magic missile" },
+ "copy-from": "disp_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts magic missile.",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_magic_missile_greater",
+ "name": { "str": "disposable greater wand of magic missile", "str_pl": "disposable greater wands of magic missile" },
+ "copy-from": "disp_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts magic missile.",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_fireball_minor",
+ "name": { "str": "disposable minor wand of fireball", "str_pl": "disposable minor wands of fireball" },
+ "copy-from": "disp_wand",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts fireball.",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_fireball_lesser",
+ "name": { "str": "disposable lesser wand of fireball", "str_pl": "disposable lesser wands of fireball" },
+ "copy-from": "disp_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts fireball.",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_fireball_greater",
+ "name": { "str": "disposable greater wand of fireball", "str_pl": "disposable greater wands of fireball" },
+ "copy-from": "disp_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts fireball.",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_mana_beam_minor",
+ "name": { "str": "disposable minor wand of mana beam", "str_pl": "disposable minor wands of mana beam" },
+ "copy-from": "disp_wand",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts mana beam.",
+ "use_action": { "type": "cast_spell", "spell_id": "magus_mana_beam", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_mana_beam_lesser",
+ "name": { "str": "disposable lesser wand of mana beam", "str_pl": "disposable lesser wands of mana beam" },
+ "copy-from": "disp_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts mana beam.",
+ "use_action": { "type": "cast_spell", "spell_id": "magus_mana_beam", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_mana_beam_greater",
+ "name": { "str": "disposable greater wand of mana beam", "str_pl": "disposable greater wands of mana beam" },
+ "copy-from": "disp_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts mana beam.",
+ "use_action": { "type": "cast_spell", "spell_id": "magus_mana_beam", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_point_flare_minor",
+ "name": { "str": "disposable minor wand of point flare", "str_pl": "disposable minor wands of point flare" },
+ "copy-from": "disp_wand",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts point flare.",
+ "use_action": { "type": "cast_spell", "spell_id": "point_flare", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_point_flare_lesser",
+ "name": { "str": "disposable lesser wand of point flare", "str_pl": "disposable lesser wands of point flare" },
+ "copy-from": "disp_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts point flare.",
+ "use_action": { "type": "cast_spell", "spell_id": "point_flare", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_point_flare_greater",
+ "name": { "str": "disposable greater wand of point flare", "str_pl": "disposable greater wands of point flare" },
+ "copy-from": "disp_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts point flare.",
+ "use_action": { "type": "cast_spell", "spell_id": "point_flare", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_hoaryblast_minor",
+ "name": { "str": "disposable minor wand of hoary blast", "str_pl": "disposable minor wands of hoary blast" },
+ "copy-from": "disp_wand",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts hoary blast.",
+ "use_action": { "type": "cast_spell", "spell_id": "hoary_blast", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_hoaryblast_lesser",
+ "name": { "str": "disposable lesser wand of hoary blast", "str_pl": "disposable lesser wands of hoary blast" },
+ "copy-from": "disp_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts hoary blast.",
+ "use_action": { "type": "cast_spell", "spell_id": "hoary_blast", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_hoaryblast_greater",
+ "name": { "str": "disposable greater wand of hoary blast", "str_pl": "disposable greater wands of hoary blast" },
+ "copy-from": "disp_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts hoary blast.",
+ "use_action": { "type": "cast_spell", "spell_id": "hoary_blast", "no_fail": true, "level": 15, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_cone_cold_minor",
+ "name": { "str": "disposable minor wand of cone of cold", "str_pl": "disposable minor wands of cone of cold" },
+ "copy-from": "disp_wand",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts cone of cold.",
+ "use_action": { "type": "cast_spell", "spell_id": "cone_cold", "no_fail": true, "level": 5, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_cone_cold_lesser",
+ "name": { "str": "disposable lesser wand of cone of cold", "str_pl": "disposable lesser wands of cone of cold" },
+ "copy-from": "disp_wand",
+ "price": "200 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts cone of cold.",
+ "use_action": { "type": "cast_spell", "spell_id": "cone_cold", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "type": "TOOL",
+ "id": "wand_disp_cone_cold_greater",
+ "name": { "str": "disposable greater wand of cone of cold", "str_pl": "disposable greater wands of cone of cold" },
+ "copy-from": "disp_wand",
+ "price": "300 USD",
+ "description": "A slender wooden wand with an embedded mana crystal at the base that casts a spell when activated. This wand casts cone of cold.",
+ "use_action": { "type": "cast_spell", "spell_id": "cone_cold", "no_fail": true, "level": 15, "need_wielding": true }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/ethereal_items.json b/data/mods/Magical_Nights/items/ethereal_items.json
new file mode 100644
index 000000000000..daf147ba4d2a
--- /dev/null
+++ b/data/mods/Magical_Nights/items/ethereal_items.json
@@ -0,0 +1,608 @@
+[
+ {
+ "id": "stonefist",
+ "type": "GENERIC",
+ "weapon_category": [ "FIST_WEAPONS" ],
+ "name": { "str": "pair of magical armored stone gauntlets", "str_pl": "pairs of magical armored stone gauntlets" },
+ "description": "A magical flexible stonelike substance for protection and attack.",
+ "weight": "600 g",
+ "volume": "250 ml",
+ "price": "1 cent",
+ "to_hit": 1,
+ "bashing": 20,
+ "material": [ "superalloy" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "qualities": [ [ "HAMMER", 1 ] ],
+ "flags": [ "STURDY", "UNARMED_WEAPON", "DURABLE_MELEE", "NONCONDUCTIVE", "MAGIC_FOCUS" ],
+ "techniques": [ "WBLOCK_3" ]
+ },
+ {
+ "id": "finger_firelighter",
+ "type": "TOOL",
+ "name": "finger firelighter",
+ "material": "concentrated_mana",
+ "description": "This is a small flame you can hold in your hand. With a thought, you can cause it to light something on fire.",
+ "weight": "1 g",
+ "volume": "1 ml",
+ "price": 0,
+ "symbol": ",",
+ "color": "yellow",
+ "use_action": [
+ { "type": "firestarter", "moves": 20 },
+ { "type": "transform", "msg": "You dim the flame.", "target": "finger_firelighter_off" }
+ ],
+ "flags": [ "TRADER_AVOID", "FIRESTARTER", "LIGHT_8", "FLAMING", "WATER_EXTINGUISH" ]
+ },
+ {
+ "id": "finger_firelighter_off",
+ "copy-from": "finger_firelighter",
+ "type": "TOOL",
+ "name": "finger firelighter (dimmed)",
+ "description": "This is a small flame you can hold in your hand. With a thought, you can cause it to light something on fire, though it is currently dimmed.",
+ "use_action": [
+ { "type": "firestarter", "moves": 20 },
+ { "type": "transform", "msg": "You brighten the flame.", "target": "finger_firelighter" }
+ ],
+ "flags": [ "TRADER_AVOID", "FIRESTARTER", "FLAMING", "WATER_EXTINGUISH" ]
+ },
+ {
+ "id": "magic_lamp",
+ "type": "ARMOR",
+ "category": "tools",
+ "name": "magic lamp",
+ "description": "a magical light source that will light up a small area.",
+ "weight": "1 g",
+ "volume": "250 ml",
+ "material": "concentrated_mana",
+ "price": "1 cent",
+ "to_hit": -2,
+ "bashing": 1,
+ "symbol": ",",
+ "color": "light_green",
+ "flags": [ "LIGHT_30", "AURA", "SEMITANGIBLE", "POWERARMOR_COMPATIBLE" ],
+ "use_action": { "type": "transform", "msg": "You dim your spell until it's dark.", "target": "magic_lamp_off" }
+ },
+ {
+ "id": "magic_lamp_off",
+ "type": "ARMOR",
+ "category": "tools",
+ "name": "magic lamp (dimmed)",
+ "description": "a magical aura that you know can be brightened into a powerful light.",
+ "weight": "1 g",
+ "volume": "250 ml",
+ "material": "concentrated_mana",
+ "price": "1 cent",
+ "to_hit": -2,
+ "bashing": 1,
+ "symbol": ",",
+ "color": "light_green",
+ "flags": [ "AURA", "SEMITANGIBLE", "POWERARMOR_COMPATIBLE" ],
+ "use_action": { "type": "transform", "msg": "You return your spell to full brightness.", "target": "magic_lamp" }
+ },
+ {
+ "id": "magic_light",
+ "type": "ARMOR",
+ "category": "tools",
+ "name": "magic light",
+ "description": "A small magical light that you can read by.",
+ "weight": "0 kg",
+ "volume": "0 ml",
+ "material": "concentrated_mana",
+ "price": "0 cent",
+ "symbol": ",",
+ "color": "light_green",
+ "flags": [ "LIGHT_10", "AURA", "SEMITANGIBLE", "POWERARMOR_COMPATIBLE" ],
+ "use_action": { "type": "transform", "msg": "You dim your spell until it's dark.", "target": "magic_light_off" }
+ },
+ {
+ "id": "magic_light_off",
+ "type": "ARMOR",
+ "category": "tools",
+ "name": "magic light (dimmed)",
+ "description": "A magical aura which you know can be brightened for reading light.",
+ "weight": "0 kg",
+ "volume": "0 ml",
+ "material": "concentrated_mana",
+ "price": "0 cent",
+ "symbol": ",",
+ "color": "light_green",
+ "flags": [ "AURA", "SEMITANGIBLE", "POWERARMOR_COMPATIBLE" ],
+ "use_action": { "type": "transform", "msg": "You return your spell to full brightness.", "target": "magic_light" }
+ },
+ {
+ "id": "shield_ice",
+ "type": "ARMOR",
+ "name": { "str": "large shield of magical ice", "str_pl": "large shields of magical ice" },
+ "category": "armor",
+ "description": "A lightweight but tough shield crafted entirely of magical ice.",
+ "weight": "1 kg",
+ "volume": "5 L",
+ "price": "1 cent",
+ "to_hit": 1,
+ "bashing": 14,
+ "material": [ "steel" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "covers": [ "arm_either", "hand_either" ],
+ "coverage": 70,
+ "encumbrance": 15,
+ "material_thickness": 3,
+ "techniques": [ "WBLOCK_3" ],
+ "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "BLOCK_WHILE_WORN", "POWERARMOR_COMPATIBLE" ]
+ },
+ {
+ "id": "ice_gliders",
+ "type": "ARMOR",
+ "name": { "str_sp": "slick icy coatings" },
+ "description": "A magical slick icy coating on your feet. While quite fast on flat floors, they make it difficult to move on rough terrain.",
+ "weight": "1 g",
+ "volume": "250 ml",
+ "price": "1 cent",
+ "to_hit": -2,
+ "bashing": 6,
+ "material": [ "steel" ],
+ "symbol": "[",
+ "color": "brown",
+ "covers": [ "feet" ],
+ "coverage": 100,
+ "encumbrance": 0,
+ "warmth": 30,
+ "material_thickness": 1,
+ "environmental_protection": 2,
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "MOVE_COST", "add": -5 } ] } ] },
+ "flags": [ "WATERPROOF", "ROLLER_QUAD", "BELTED", "POWERARMOR_COMPATIBLE" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "stormhammer",
+ "name": { "str": "The Stormhammer" },
+ "weapon_category": [ "1H_HAMMERS" ],
+ "description": "A crackling magical warhammer full of lightning to smite your foes with, and of course, smash things to bits!",
+ "weight": "1337 g",
+ "to_hit": 2,
+ "color": "brown",
+ "symbol": "/",
+ "material": [ "superalloy" ],
+ "techniques": [ "WBLOCK_2", "BRUTAL", "SWEEP" ],
+ "flags": [
+ "NONCONDUCTIVE",
+ "BELT_CLIP",
+ "LIGHT_15",
+ "TRADER_AVOID",
+ "UNBREAKABLE_MELEE",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "MAGIC_FOCUS"
+ ],
+ "volume": "1250 ml",
+ "bashing": 30,
+ "//electric": 15,
+ "price": "0 cent",
+ "qualities": [ [ "HAMMER", 1 ] ]
+ },
+ {
+ "id": "stormfist",
+ "type": "SPELL",
+ "name": "Stormfist",
+ "description": "Encases your arm and hand in a sheath of crackling magical lightning, you can punch and defend yourself with it in melee combat.",
+ "valid_targets": [ "self" ],
+ "flags": [ "NO_EXPLOSION_VFX" ],
+ "min_damage": 0,
+ "max_damage": 0,
+ "effect": "spawn_item",
+ "effect_str": "stormglove",
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "max_level": 20,
+ "base_casting_time": 200,
+ "base_energy_cost": 100,
+ "min_duration": 10000,
+ "max_duration": 100000,
+ "duration_increment": 2000
+ },
+ {
+ "type": "GENERIC",
+ "id": "stormglove",
+ "weapon_category": "FIST_WEAPONS",
+ "symbol": "3",
+ "color": "light_gray",
+ "name": { "str": "Stormfist" },
+ "description": "Encases your arm and hand in a sheath of crackling magical lightning, you can punch and defend yourself with it in melee combat.",
+ "material": [ "superalloy" ],
+ "volume": "250 ml",
+ "weight": "1 g",
+ "bashing": 10,
+ "//electric": 15,
+ "flags": [
+ "UNARMED_WEAPON",
+ "UNBREAKABLE_MELEE",
+ "NONCONDUCTIVE",
+ "LIGHT_5",
+ "TRADER_AVOID",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "MAGIC_FOCUS",
+ "POWERARMOR_COMPATIBLE"
+ ]
+ },
+ {
+ "id": "tentacle_whip",
+ "type": "GENERIC",
+ "weapon_category": [ "WHIPS" ],
+ "symbol": "/",
+ "color": "brown",
+ "name": "vicious tentacle whip",
+ "description": "A long, writhing, tentacle covered in sharp bonelike blades and spikey protrusions.",
+ "weight": "2460 g",
+ "volume": "1500 ml",
+ "material": [ "iron", "leather" ],
+ "techniques": [ "PRECISE", "RAPID", "WBLOCK_2" ],
+ "flags": [
+ "REACH_ATTACK",
+ "REACH3",
+ "WHIP",
+ "STURDY",
+ "TRADER_AVOID",
+ "UNARMED_WEAPON",
+ "UNBREAKABLE_MELEE",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "MAGIC_FOCUS"
+ ],
+ "cutting": 30,
+ "category": "weapons"
+ },
+ {
+ "id": "fleshpouch",
+ "type": "ARMOR",
+ "name": { "str": "flesh pouch", "str_pl": "flesh pouches" },
+ "description": "A large pouch of tough flesh on your back, filled with tiny tentacles that grasp and hold anything you place inside. It shifts and adjusts itself to minimize encumbrance.",
+ "weight": "0 kg",
+ "volume": "0 ml",
+ "price": "0 cent",
+ "material": [ "flesh" ],
+ "symbol": "[",
+ "color": "green",
+ "covers": [ "torso" ],
+ "coverage": 40,
+ "encumbrance": 10,
+ "storage": "25 L",
+ "material_thickness": 3,
+ "flags": [
+ "BELTED",
+ "COMPACT",
+ "TRADER_AVOID",
+ "WATERPROOF",
+ "STURDY",
+ "NO_UNWIELD",
+ "ONLY_ONE",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "POWERARMOR_COMPATIBLE"
+ ]
+ },
+ {
+ "id": "bonespear",
+ "type": "GENERIC",
+ "weapon_category": [ "SPEARS" ],
+ "symbol": "/",
+ "color": "light_gray",
+ "name": { "str": "Wicked Bonespear" },
+ "description": "This is a wicked spear/halberd hybrid entirely created of bone.",
+ "material": [ "bone" ],
+ "flags": [
+ "UNBREAKABLE_MELEE",
+ "REACH_ATTACK",
+ "SPEAR",
+ "STAB",
+ "NONCONDUCTIVE",
+ "SHEATH_SPEAR",
+ "ONLY_ONE",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "MAGIC_FOCUS"
+ ],
+ "techniques": [ "WBLOCK_2", "WIDE", "SWEEP", "BRUTAL" ],
+ "weight": "2175 g",
+ "volume": "2500 ml",
+ "bashing": 16,
+ "cutting": 36,
+ "to_hit": 2
+ },
+ {
+ "id": "druid_recurve",
+ "//": "Not using copy-from 'reflexbow', since wearability causes druid bow not to be wielded, and ammo / clip type causes it to require real arrows",
+ "type": "GUN",
+ "weapon_category": [ "BOWS", "ELASTIC" ],
+ "symbol": "(",
+ "color": "yellow",
+ "looks_like": "longbow",
+ "name": { "str": "Woodbow" },
+ "description": "A magically conjured ornate recurve bow of solid flexible wood. A matching conjured wooden arrow appears when you draw the string back for firing.",
+ "flags": [
+ "FIRE_TWOHAND",
+ "STR_DRAW",
+ "PRIMITIVE_RANGED_WEAPON",
+ "BELTED",
+ "COMPACT",
+ "UNBREAKABLE_MELEE",
+ "NONCONDUCTIVE",
+ "ONLY_ONE",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "NO_UNLOAD"
+ ],
+ "skill": "archery",
+ "min_strength": 9,
+ "weight": "540 g",
+ "bashing": 12,
+ "to_hit": 1,
+ "reload_noise_volume": 3,
+ "loudness": 6,
+ "ranged_damage": { "damage_type": "stab", "amount": 29 },
+ "range": 12,
+ "dispersion": 950,
+ "durability": 6,
+ "volume": "2500 ml"
+ },
+ {
+ "type": "TOOL",
+ "id": "druid_seed",
+ "name": { "str": "seed of purification", "str_pl": "seeds of purification" },
+ "weight": "1 g",
+ "color": "white",
+ "use_action": {
+ "type": "transform",
+ "target": "druid_dust",
+ "msg": "You squeeze the seed in your palm, and it begins to turn to a fine dust.",
+ "target_charges": 15,
+ "menu_text": "Squeeze seed"
+ },
+ "symbol": "!",
+ "description": "A magical seed that can be squeezed to release purifying dust, which can then be used to purify up to a gallon of water",
+ "volume": "250 ml",
+ "flags": [ "TRADER_AVOID" ]
+ },
+ {
+ "id": "druid_dust",
+ "type": "TOOL",
+ "name": "faintly glowing dust",
+ "description": "This fine dust glows with a growing intensity",
+ "weight": "1 g",
+ "volume": "30 ml",
+ "price": 0,
+ "symbol": "!",
+ "color": "white",
+ "initial_charges": 15,
+ "max_charges": 15,
+ "use_action": "WATER_PURIFIER"
+ },
+ {
+ "id": "obfuscating_aura",
+ "type": "ARMOR",
+ "name": "obfuscating aura",
+ "description": "An all-encompassing, invisible layer of magic distorts light around your body. Allows you to dodge two extra attacks in a given turn.",
+ "weight": "1g",
+ "volume": "1ml",
+ "material": "concentrated_mana",
+ "price": "3646 cent",
+ "symbol": "o",
+ "color": "white",
+ "covers": [ "legs", "torso", "arms", "hands", "head", "feet", "mouth", "eyes" ],
+ "flags": [
+ "AURA",
+ "SEMITANGIBLE",
+ "OVERSIZE",
+ "ONLY_ONE",
+ "TRADER_AVOID",
+ "NO_TAKEOFF",
+ "NONCONDUCTIVE",
+ "POWERARMOR_COMPATIBLE"
+ ],
+ "relic_data": { "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "BONUS_DODGE", "add": 2 } ] } ] }
+ },
+ {
+ "id": "acid_res_aura",
+ "type": "ARMOR",
+ "name": { "str": "acid resistance aura" },
+ "description": "An all-encompassing, invisible layer of protection against acid.",
+ "material": "concentrated_mana",
+ "weight": "1g",
+ "volume": "1ml",
+ "price": "3646 cent",
+ "symbol": "o",
+ "color": "green",
+ "covers": [ "legs", "torso", "arms", "hands", "head", "feet", "mouth", "eyes" ],
+ "flags": [
+ "AURA",
+ "SEMITANGIBLE",
+ "OVERSIZE",
+ "ONLY_ONE",
+ "TRADER_AVOID",
+ "NO_TAKEOFF",
+ "NONCONDUCTIVE",
+ "POWERARMOR_COMPATIBLE"
+ ],
+ "relic_data": {
+ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "ARMOR_ACID", "multiply": -0.25 } ] } ]
+ }
+ },
+ {
+ "id": "acid_res_aura_greater",
+ "type": "ARMOR",
+ "name": "greater acid resistance aura",
+ "description": "An all-encompassing, invisible layer of protection against acid.",
+ "material": "concentrated_mana",
+ "weight": "1g",
+ "volume": "1ml",
+ "price": "3646 cent",
+ "symbol": "o",
+ "color": "green",
+ "covers": [ "legs", "torso", "arms", "hands", "head", "feet", "mouth", "eyes" ],
+ "flags": [
+ "AURA",
+ "SEMITANGIBLE",
+ "OVERSIZE",
+ "ONLY_ONE",
+ "TRADER_AVOID",
+ "NO_TAKEOFF",
+ "NONCONDUCTIVE",
+ "POWERARMOR_COMPATIBLE"
+ ],
+ "relic_data": {
+ "passive_effects": [ { "has": "WORN", "condition": "ALWAYS", "values": [ { "value": "ARMOR_ACID", "multiply": -0.6 } ] } ]
+ }
+ },
+ {
+ "id": "armor_frost",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str_sp": "frost armor" },
+ "description": "A thin layer of magical ice, covering the entire body.",
+ "weight": "5000 g",
+ "volume": "5 L",
+ "material": [ "steel" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "covers": [ "head", "mouth", "eyes", "torso", "arms", "hands", "legs", "feet" ],
+ "coverage": 100,
+ "encumbrance": 10,
+ "warmth": 0,
+ "material_thickness": 2,
+ "environmental_protection": 2,
+ "flags": [ "ONLY_ONE", "OVERSIZE", "PERSONAL", "STURDY", "POWERARMOR_COMPATIBLE" ]
+ },
+ {
+ "id": "aura_stoneskin",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str_sp": "stoneskin coating" },
+ "description": "A thin layer of shifting, almost fluid living rock, covering the entire body.",
+ "weight": "10200 g",
+ "volume": "25 L",
+ "material": [ "stone" ],
+ "symbol": "[",
+ "color": "light_gray",
+ "covers": [ "head", "mouth", "eyes", "torso", "arms", "hands", "legs", "feet" ],
+ "coverage": 100,
+ "encumbrance": 20,
+ "warmth": 5,
+ "material_thickness": 2,
+ "environmental_protection": 2,
+ "flags": [ "ONLY_ONE", "OVERSIZE", "PERSONAL", "STURDY", "POWERARMOR_COMPATIBLE" ]
+ },
+ {
+ "id": "overcharge_burn_scar",
+ "type": "ARMOR",
+ "name": { "str": "overcharge burn" },
+ "description": "Ouch, this really smarts! It'll go away soon, maybe?",
+ "weight": "1 g",
+ "volume": "1 ml",
+ "symbol": "~",
+ "color": "light_red",
+ "covers": [ "eyes", "mouth" ],
+ "encumbrance": 18,
+ "relic_data": { "passive_effects": [ { "id": "ench_overcharge_burn_scar" } ] },
+ "flags": [ "NO_TAKEOFF", "TRADER_AVOID", "BLIND", "POWERARMOR_COMPATIBLE" ]
+ },
+ {
+ "id": "protect_env",
+ "type": "ARMOR",
+ "name": { "str": "aura of protection", "str_pl": "auras of protection" },
+ "material": "concentrated_mana",
+ "description": "An all-encompassing, invisible layer of magical aura that protects you from the environment.",
+ "weight": "1 g",
+ "volume": "1 ml",
+ "symbol": "o",
+ "color": "blue",
+ "environmental_protection": 15,
+ "covers": [ "legs", "torso", "arms", "hands", "head", "feet", "mouth", "eyes" ],
+ "flags": [
+ "AURA",
+ "SEMITANGIBLE",
+ "OVERSIZE",
+ "ONLY_ONE",
+ "TRADER_AVOID",
+ "NO_TAKEOFF",
+ "NONCONDUCTIVE",
+ "POWERARMOR_COMPATIBLE"
+ ]
+ },
+ {
+ "id": "flamesword",
+ "type": "GENERIC",
+ "symbol": "/",
+ "color": "light_gray",
+ "looks_like": "sword_wood",
+ "name": { "str": "Flamesword" },
+ "description": "This wooden sword is ablaze! It seems to be safe-ish to hold, but will burn up soon.",
+ "material": [ "wood" ],
+ "flags": [ "UNBREAKABLE_MELEE", "NONCONDUCTIVE", "NO_REPAIR", "NO_SALVAGE", "MAGIC_FOCUS", "LIGHT_10", "FIRESTARTER", "FIRE" ],
+ "techniques": [ "WBLOCK_1", "WIDE", "BRUTAL" ],
+ "weight": "1 kg",
+ "volume": "1 L",
+ "bashing": 12,
+ "cutting": 2,
+ "to_hit": 2,
+ "use_action": { "type": "firestarter", "moves": 50 },
+ "relic_data": {
+ "passive_effects": [ { "has": "WIELD", "condition": "ALWAYS", "values": [ { "value": "ITEM_DAMAGE_CUT", "add": 8 } ] } ]
+ },
+ "//": "ITEM_DAMAGE_HEAT is not implemented yet, so ITEM_DAMAGE_CUT instead"
+ },
+ {
+ "id": "decaying_boneclub",
+ "type": "GENERIC",
+ "symbol": "/",
+ "color": "light_gray",
+ "looks_like": "bone",
+ "name": { "str": "decaying boneclub" },
+ "description": "A pulsating club made of bone, stained with an ever-moving blood coating eager to absorb the living.",
+ "material": [ "bone", "flesh" ],
+ "weapon_category": [ "BATONS" ],
+ "flags": [
+ "UNBREAKABLE_MELEE",
+ "NONCONDUCTIVE",
+ "ONLY_ONE",
+ "NO_REPAIR",
+ "NO_SALVAGE",
+ "MAGIC_FOCUS",
+ "BELT_CLIP",
+ "TRADER_AVOID"
+ ],
+ "techniques": [ "WBLOCK_2", "RAPID", "PRECISE" ],
+ "weight": "700 g",
+ "volume": "800 ml",
+ "to_hit": 3,
+ "relic_data": {
+ "passive_effects": [ { "has": "WIELD", "condition": "ALWAYS", "values": [ { "value": "ITEM_DAMAGE_BASH", "add": 8 } ] } ]
+ },
+ "//": "ITEM_DAMAGE_BIO is not implemented yet, so ITEM_DAMAGE_BASH instead",
+ "bashing": 12
+ },
+ {
+ "id": "windrunning_aura",
+ "type": "ARMOR",
+ "name": "windrunning aura",
+ "description": "The wind at your back helping to ease your travel.",
+ "weight": "1g",
+ "volume": "1ml",
+ "material": "concentrated_mana",
+ "price": "3646 cent",
+ "symbol": "o",
+ "color": "light_gray",
+ "covers": [ "legs", "torso", "arms", "hands", "head", "feet", "mouth", "eyes" ],
+ "flags": [
+ "AURA",
+ "SEMITANGIBLE",
+ "OVERSIZE",
+ "ONLY_ONE",
+ "TRADER_AVOID",
+ "NO_TAKEOFF",
+ "NONCONDUCTIVE",
+ "POWERARMOR_COMPATIBLE"
+ ],
+ "relic_data": { "passive_effects": [ { "id": "ench_windrun" } ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/fuel.json b/data/mods/Magical_Nights/items/fuel.json
new file mode 100644
index 000000000000..84cf25a5e5aa
--- /dev/null
+++ b/data/mods/Magical_Nights/items/fuel.json
@@ -0,0 +1,44 @@
+[
+ {
+ "type": "AMMO",
+ "id": "dragon_blood",
+ "name": { "str_sp": "dragon blood" },
+ "weight": "2 g",
+ "color": "red",
+ "container": "flask_glass",
+ "symbol": "~",
+ "description": "Blood of a dragon, it radiates warmth and looking at it you see moving patterns form and disappear in it as if looking at an actual fire.",
+ "price": "1 kUSD",
+ "material": "flesh",
+ "volume": "1 ml",
+ "phase": "liquid",
+ "category": "fuel",
+ "ammo_type": "dragon_blood",
+ "damage": { "damage_type": "stab", "amount": 5, "armor_penetration": 5 },
+ "range": 4,
+ "effects": [ "FLAME", "STREAM", "INCENDIARY", "NEVER_MISFIRES" ],
+ "fuel": {
+ "energy": 50,
+ "explosion_data": { "chance_hot": 20, "chance_cold": 1000, "factor": 0.2, "fiery": true, "size_factor": 0.1 }
+ }
+ },
+ {
+ "id": "mana_infused_blood",
+ "type": "COMESTIBLE",
+ "comestible_type": "MED",
+ "name": { "str": "mana infused blood", "str_pl": "mana_infused_blood" },
+ "description": "Blood that is filled to the brim with arcane energy. It releases a faint blue glow.",
+ "weight": "265 g",
+ "volume": "250 ml",
+ "price": "0 cent",
+ "symbol": "~",
+ "color": "light_blue",
+ "phase": "liquid",
+ "container": "flask_glass",
+ "tool": "syringe",
+ "quench": 50,
+ "ammo_data": { "ammo_type": "mana_infused_blood" },
+ "flags": [ "NO_INGEST" ],
+ "use_action": { "type": "cast_spell", "spell_id": "mana_doping", "no_fail": true, "level": 0 }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/mana_crystals.json b/data/mods/Magical_Nights/items/mana_crystals.json
new file mode 100644
index 000000000000..a375a02a818f
--- /dev/null
+++ b/data/mods/Magical_Nights/items/mana_crystals.json
@@ -0,0 +1,40 @@
+[
+ {
+ "type": "ammunition_type",
+ "id": "crystallized_mana",
+ "name": "crystallized mana",
+ "default": "crystallized_mana"
+ },
+ {
+ "type": "AMMO",
+ "id": "crystallized_mana",
+ "category": "spare_parts",
+ "price": "10 USD",
+ "name": { "str_sp": "crystallized mana" },
+ "symbol": "=",
+ "color": "yellow",
+ "description": "Some crystallized mana. This can be reloaded into rechargable mana crystals, but can never be unloaded.",
+ "flags": [ "TRADER_AVOID" ],
+ "volume": "100 ml",
+ "ammo_type": "crystallized_mana",
+ "count": 100,
+ "looks_like": "battery",
+ "fuel": { "energy": 1 }
+ },
+ {
+ "id": "small_mana_crystal",
+ "type": "MAGAZINE",
+ "category": "spare_parts",
+ "name": { "str": "small mana crystal" },
+ "description": "This is a small mana crystal specifically designed to be attached to wand tips.",
+ "weight": "5 g",
+ "volume": "250 ml",
+ "price": "15 USD",
+ "symbol": "=",
+ "color": "yellow",
+ "ammo_type": "crystallized_mana",
+ "capacity": 50,
+ "looks_like": "battery",
+ "flags": [ "NO_SALVAGE", "NO_UNLOAD" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/materials.json b/data/mods/Magical_Nights/items/materials.json
new file mode 100644
index 000000000000..13b24bd257e3
--- /dev/null
+++ b/data/mods/Magical_Nights/items/materials.json
@@ -0,0 +1,229 @@
+[
+ {
+ "type": "COMESTIBLE",
+ "id": "raw_owlbear_fur",
+ "category": "spare_parts",
+ "name": "raw owlbear pelt",
+ "weight": "114 g",
+ "volume": "170 ml",
+ "color": "brown",
+ "spoils_in": "1 day 12 hours",
+ "comestible_type": "FOOD",
+ "symbol": ",",
+ "quench": -20,
+ "healthy": -10,
+ "calories": 550,
+ "description": "A carefully folded raw skin harvested from an owlbear. It still has the fur attached. You can cure it for storage and tanning, or eat it if you're desperate enough.",
+ "price": "330 cent",
+ "price_postapoc": "1 USD",
+ "material": [ "fur", "flesh" ],
+ "flags": [ "NO_SALVAGE", "TRADER_AVOID" ],
+ "stack_size": 1,
+ "fun": -24
+ },
+ {
+ "type": "GENERIC",
+ "id": "cured_owlbear_pelt",
+ "symbol": ",",
+ "color": "brown",
+ "name": { "str": "cured owlbear pelt" },
+ "description": "A rolled up owlbear hide which has been scraped of extraneous hair and flesh and treated to prevent decay. It could be tanned and transformed into usable fur pelts.",
+ "price": "2 USD",
+ "price_postapoc": "0 cent",
+ "material": [ "fur", "flesh" ],
+ "flags": [ "NO_SALVAGE" ],
+ "weight": "114 g",
+ "volume": "170 ml",
+ "category": "spare_parts",
+ "to_hit": -1
+ },
+ {
+ "type": "GENERIC",
+ "id": "owlbear_fur",
+ "symbol": ",",
+ "color": "brown",
+ "name": { "str": "owlbear fur pelt" },
+ "description": "A small bolt of fur from an owlbear. Can be used for VERY warm clothing.",
+ "price": "10 USD",
+ "price_postapoc": "10 cent",
+ "material": [ "fur", "leather" ],
+ "flags": [ "NO_SALVAGE" ],
+ "weight": "114 g",
+ "volume": "250 ml",
+ "category": "spare_parts"
+ },
+ {
+ "type": "GENERIC",
+ "id": "dragon_bone",
+ "looks_like": "bone",
+ "category": "spare_parts",
+ "name": { "str": "dragon bone" },
+ "weight": "450 g",
+ "color": "white",
+ "symbol": "%",
+ "description": "A bone from a dragon! Even on its own, these bones make an excellent material for weapons. However, something tells you that the bones hide more secrets than just that.",
+ "price": "0 cent",
+ "price_postapoc": "50 cent",
+ "material": "dragon_bone",
+ "volume": "500 ml"
+ },
+ {
+ "type": "GENERIC",
+ "id": "shard_dragon_bone",
+ "looks_like": "skewer_bone",
+ "symbol": ",",
+ "color": "white",
+ "name": { "str": "dragon bone shard" },
+ "description": "A small shard of dragon bone, shaped almost like a shard of porcelain.",
+ "category": "other",
+ "material": "dragon_bone",
+ "flags": [ "NO_SALVAGE", "TRADER_AVOID" ],
+ "weight": "10 g",
+ "volume": "25 ml",
+ "to_hit": -5
+ },
+ {
+ "id": "bulette_plate",
+ "type": "GENERIC",
+ "symbol": ")",
+ "color": "light_gray",
+ "name": "bulette plate",
+ "description": "The great plates from behind a bulette's head have always been prized for use in shield and armor making.",
+ "material": "arcane_skin",
+ "weight": "30 kg",
+ "volume": "3 L"
+ },
+ {
+ "type": "GENERIC",
+ "id": "demon_chitin_piece",
+ "category": "spare_parts",
+ "symbol": ",",
+ "color": "red",
+ "name": { "str": "chunk of demon chitin", "str_pl": "chunks of demon chitin" },
+ "description": "A piece of demon spider exoskeleton. It is light and very durable, and probably has some magical properties.",
+ "price": "0 cent",
+ "material": "demon_chitin",
+ "weight": "89 g",
+ "volume": "250 ml",
+ "bashing": 1,
+ "flags": [ "TRADER_AVOID" ],
+ "to_hit": -2
+ },
+ {
+ "type": "GENERIC",
+ "id": "demon_chitin_plate",
+ "category": "spare_parts",
+ "symbol": "/",
+ "color": "red",
+ "name": "demon chitin plate",
+ "price": "15225 cent",
+ "material": "demon_chitin",
+ "weight": "10 kg",
+ "volume": "4 L",
+ "bashing": 12,
+ "to_hit": -4,
+ "description": "A large piece of demon spider exoskeleton, painstakingly cut from the corpse of an adult demon spider. A plate of this size can be used to create armor plating."
+ },
+ {
+ "id": "orichalcum_lump",
+ "type": "AMMO",
+ "category": "spare_parts",
+ "name": { "str": "lump of orichalcum", "str_pl": "lumps of orichalcum" },
+ "description": "A lump of raw orichalcum. Needs to be reformed into an ingot to be useful.",
+ "weight": "1000 g",
+ "volume": "250 ml",
+ "price": "25 USD",
+ "bashing": 12,
+ "to_hit": -4,
+ "stack_size": 2,
+ "//": "Density 7.60g/cmÂł ~ 1.9kg/250ml @ 1000g/unit ~ stack 2 and formed as a solid ingot so 100% of this",
+ "material": "orichalcum_metal",
+ "symbol": ",",
+ "color": "light_green",
+ "ammo_type": "components",
+ "qualities": [ [ "HAMMER", 1 ] ]
+ },
+ {
+ "id": "orichalcum_sliver",
+ "type": "AMMO",
+ "category": "spare_parts",
+ "name": { "str": "sliver of orichalcum", "str_pl": "slivers of orichalcum" },
+ "description": "A sliver of orichalcum broken from a larger piece. Needs to be reformed into an ingot to be useful.",
+ "weight": "250 g",
+ "volume": "250 ml",
+ "price": "10 USD",
+ "bashing": 8,
+ "to_hit": -2,
+ "stack_size": 4,
+ "//": "Density 7.60g/cmÂł ~ 1.9kg/250ml @ 250g/unit ~ stack 8 but mishapen so only 50% of this",
+ "material": "orichalcum_metal",
+ "symbol": ",",
+ "color": "light_green",
+ "ammo_type": "components",
+ "qualities": [ [ "CUT", 1 ] ]
+ },
+ {
+ "id": "orichalcum_ingot",
+ "type": "GENERIC",
+ "category": "spare_parts",
+ "name": "orichalcum ingot",
+ "description": "An ingot of orichalcum. About 3 cm by 7 cm by 12 cm in size, ready to be used for various blacksmithing tasks.",
+ "//": "Density the same as steel.",
+ "weight": "2 kg",
+ "volume": "253 ml",
+ "price": "6399 cent",
+ "bashing": 6,
+ "to_hit": -3,
+ "material": "orichalcum_metal",
+ "symbol": "=",
+ "color": "light_green"
+ },
+ {
+ "id": "mercury",
+ "type": "AMMO",
+ "category": "spare_parts",
+ "name": { "str_sp": "liquid mercury" },
+ "ammo_type": "mercury",
+ "description": "Elemental liquid mercury. Known for its use in thermometers.",
+ "volume": "1 ml",
+ "phase": "liquid",
+ "container": "flask_glass",
+ "color": "light_gray",
+ "symbol": "~",
+ "weight": "1356 mg"
+ },
+ {
+ "id": "mithril_lump",
+ "type": "AMMO",
+ "category": "spare_parts",
+ "name": { "str": "lump of mithril", "str_pl": "lumps of mithril" },
+ "description": "A lump of raw mithril. Needs to be reformed into an ingot to be useful.",
+ "weight": "675 g",
+ "volume": "250 ml",
+ "price": "25 USD",
+ "to_hit": -4,
+ "stack_size": 2,
+ "material": [ "mithril_metal" ],
+ "symbol": ",",
+ "color": "light_blue",
+ "ammo_type": "components",
+ "qualities": [ [ "HAMMER", 1 ] ],
+ "bashing": 12
+ },
+ {
+ "id": "mithril_ingot",
+ "type": "GENERIC",
+ "category": "spare_parts",
+ "name": "mithril ingot",
+ "description": "An ingot of mithril. About 3cm by 7cm by 12cm in size, ready to be used for various blacksmithing tasks.",
+ "//": "density of aluminum",
+ "weight": "683 g",
+ "volume": "253 ml",
+ "price": "63 USD 99 cent",
+ "to_hit": -3,
+ "material": [ "mithril_metal" ],
+ "symbol": "=",
+ "color": "light_blue",
+ "bashing": 12
+ }
+]
diff --git a/data/mods/Magical_Nights/items/melee.json b/data/mods/Magical_Nights/items/melee.json
new file mode 100644
index 000000000000..103b904ac3dc
--- /dev/null
+++ b/data/mods/Magical_Nights/items/melee.json
@@ -0,0 +1,178 @@
+[
+ {
+ "id": "mjolnir",
+ "copy-from": "warhammer",
+ "type": "GENERIC",
+ "name": { "str": "Mjölnir" },
+ "description": "Mjölnir, the legendary hammer of Thor. It is rumored to be able to level mountains with a single blow. You feel the power of Asgard coursing through the hammer.",
+ "weight": "1731 g",
+ "color": "light_gray",
+ "material": [ "orichalcum_metal", "wood", "gold" ],
+ "techniques": [ "WBLOCK_2", "BRUTAL" ],
+ "volume": "3750 ml",
+ "bashing": 45,
+ "price": "2 kUSD"
+ },
+ {
+ "id": "gungnir",
+ "copy-from": "spear_steel",
+ "type": "GENERIC",
+ "name": { "str": "Gungnir" },
+ "description": "Gungnir, the spear of Odin. It is rumored to be the perfect spear, perfectly hitting any target regardless of the wielder's strength or skill. If feels like Odin's protecting you.",
+ "weight": "1854 g",
+ "material": [ "orichalcum_metal", "wood", "gold" ],
+ "techniques": [ "WBLOCK_1", "IMPALE", "SWEEP" ],
+ "volume": "3250 ml",
+ "bashing": 10,
+ "cutting": 35,
+ "price": "2 kUSD"
+ },
+ {
+ "id": "gram",
+ "copy-from": "jian",
+ "type": "GENERIC",
+ "name": { "str": "Gram" },
+ "description": "Gram, the sword of Sigurd. It is rumored to be the sword that slayed the legendary dragon, Fafnir. Once said to have cleaved Regin's anvil in half, the edge is impeccable.",
+ "weight": "1132 g",
+ "material": [ "orichalcum_metal", "steel", "leather" ],
+ "techniques": [ "WBLOCK_2", "PRECISE", "VORPAL" ],
+ "volume": "2500 ml",
+ "cutting": 45,
+ "price": "2 kUSD"
+ },
+ {
+ "id": "laevateinn",
+ "copy-from": "i_staff",
+ "type": "GENERIC",
+ "name": { "str": "Laevateinn" },
+ "description": "Laevateinn, the staff of Loki. Said to have been plucked from the gates of Hel by Loki. Imbued with a mysterious magic, the magic of the trickster god himself.",
+ "price": "1600 USD",
+ "material": [ "steel", "gold", "orichalcum_metal" ],
+ "flags": [ "MAGIC_FOCUS" ],
+ "techniques": [ "WBLOCK_2", "SPIN", "RAPID", "SWEEP" ],
+ "weight": "1860 g",
+ "bashing": 20,
+ "cutting": 35,
+ "use_action": { "type": "cast_spell", "spell_id": "ethereal_grasp", "no_fail": true, "level": 10, "need_wielding": true }
+ },
+ {
+ "copy-from": "knife_combat",
+ "type": "TOOL",
+ "id": "orich_knife_combat",
+ "name": { "str": "orichalcum combat knife", "str_pl": "orichalcum combat knives" },
+ "description": "A variant of the combat knife that is made of orichalcum instead of steel. Sharper and easier to maintain than steel while just as dense, this knife also has a thinner blade, which shaves off some weight.",
+ "material": [ "orichalcum_metal" ],
+ "proportional": { "cutting": 1.1, "price": 5, "weight": 0.99 },
+ "color": "yellow"
+ },
+ {
+ "copy-from": "longsword",
+ "type": "TOOL",
+ "id": "orich_longsword",
+ "name": { "str": "orichalcum longsword" },
+ "description": "A variant of the longsword that is made of orichalcum instead of steel. Sharper and easier to maintain than steel while just as dense, this longsword also has a thinner blade, which shaves off some weight.",
+ "material": [ "orichalcum_metal" ],
+ "proportional": { "cutting": 1.1, "price": 5, "weight": 0.99 },
+ "color": "yellow"
+ },
+ {
+ "copy-from": "fire_ax",
+ "type": "TOOL",
+ "id": "orich_fire_ax",
+ "name": { "str": "orichalcum fire axe" },
+ "description": "A fire axe made with orichalcum instead of steel. This makes it possible to chop through harder materials, and in the very well-funded fire stations is preferred.",
+ "material": [ "orichalcum_metal" ],
+ "proportional": { "cutting": 1.1, "price": 5 },
+ "color": "yellow"
+ },
+ {
+ "copy-from": "longsword",
+ "type": "TOOL",
+ "id": "dbone_longsword",
+ "name": { "str": "dragonbone longsword" },
+ "description": "A variant of the longsword that is made of dragonbone. This makes for a very powerful blade without sacrificing durability. Even better than orichalcum, and you can sense that this isn't even its final form.",
+ "material": [ "dragon_bone" ],
+ "proportional": { "cutting": 1.3, "price": 10, "weight": 0.8 },
+ "color": "white"
+ },
+ {
+ "copy-from": "battleaxe",
+ "type": "TOOL",
+ "id": "dbone_battleaxe",
+ "name": { "str": "dragonbone battleaxe" },
+ "description": "A variant of the battleaxe that is made of dragonbone. This makes for a very powerful blade without sacrificing durability. Even better than orichalcum, and you can sense that this isn't even its final form.",
+ "material": [ "dragon_bone" ],
+ "proportional": { "cutting": 1.3, "price": 10, "weight": 0.8 },
+ "color": "white"
+ },
+ {
+ "copy-from": "qiang",
+ "type": "TOOL",
+ "id": "dbone_qiang",
+ "name": { "str": "dragonbone qiang" },
+ "description": "A variant of the qiang that is made of dragonbone. This makes for a very powerful blade without sacrificing durability. Even better than orichalcum, and you can sense that this isn't even its final form.",
+ "material": [ "dragon_bone" ],
+ "proportional": { "cutting": 1.3, "price": 10, "weight": 0.8 },
+ "color": "white"
+ },
+ {
+ "copy-from": "katana",
+ "type": "TOOL",
+ "id": "dbone_tachi",
+ "name": { "str": "dragonbone tachi" },
+ "description": "A variant of the tachi that is made of dragonbone. This makes for a very powerful blade without sacrificing durability. Even better than orichalcum, and you can sense that this isn't even its final form.",
+ "material": [ "dragon_bone" ],
+ "proportional": { "cutting": 1.3, "price": 10, "weight": 0.8 },
+ "color": "white"
+ },
+ {
+ "copy-from": "warhammer",
+ "type": "TOOL",
+ "id": "gaul_maraz",
+ "name": { "str": "Gaul Maraz" },
+ "description": "An impressively ornate golden warhammer with a sapphire and a ruby embedded within. The engraved words on it appear to be in some strange mix of ancient French and German. You can sense a faint magic aura being emitted by it, and picking up the weapon gives you the distinct impression that there's even more power within laying dormant. If only you could harness that power and awaken it once more…",
+ "material": [ "orichalcum_metal" ],
+ "proportional": { "bashing": 1.4, "price": 15, "weight": 1.05 },
+ "color": "yellow"
+ },
+ {
+ "copy-from": "dbone_longsword",
+ "type": "TOOL",
+ "id": "black_dbone_longsword",
+ "name": { "str": "acid-infused dragonbone longsword" },
+ "description": "A variant of the longsword that is made of dragonbone, now with the acidic ire of a black dragon imbued within.",
+ "proportional": { "cutting": 1.2, "price": 10 },
+ "extend": { "flags": [ "ACIDIC" ] },
+ "color": "green"
+ },
+ {
+ "copy-from": "dbone_battleaxe",
+ "type": "TOOL",
+ "id": "black_dbone_battleaxe",
+ "name": { "str": "acid-infused dragonbone battleaxe" },
+ "description": "A variant of the battleaxe that is made of dragonbone, now with the acidic ire of a black dragon imbued within.",
+ "proportional": { "cutting": 1.2, "price": 10 },
+ "extend": { "flags": [ "ACIDIC" ] },
+ "color": "green"
+ },
+ {
+ "copy-from": "dbone_qiang",
+ "type": "TOOL",
+ "id": "black_dbone_qiang",
+ "name": { "str": "acid-infused dragonbone qiang" },
+ "description": "A variant of the qiang that is made of dragonbone, now with the acidic ire of a black dragon imbued within.",
+ "proportional": { "cutting": 1.2, "price": 10 },
+ "extend": { "flags": [ "ACIDIC" ] },
+ "color": "green"
+ },
+ {
+ "copy-from": "dbone_tachi",
+ "type": "TOOL",
+ "id": "black_dbone_tachi",
+ "name": { "str": "acid-infused dragonbone tachi" },
+ "description": "A variant of the tachi that is made of dragonbone, now with the acidic ire of a black dragon imbued within.",
+ "proportional": { "cutting": 1.2, "price": 10 },
+ "extend": { "flags": [ "ACIDIC" ] },
+ "color": "green"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/monster_weapons.json b/data/mods/Magical_Nights/items/monster_weapons.json
new file mode 100644
index 000000000000..2f23fe559e87
--- /dev/null
+++ b/data/mods/Magical_Nights/items/monster_weapons.json
@@ -0,0 +1,56 @@
+[
+ {
+ "id": "lizardfolk_club",
+ "type": "GENERIC",
+ "name": "greatclub",
+ "category": "weapons",
+ "copy-from": "shillelagh",
+ "//": "A heavier version of the standard shillelagh (from melee.json) with a different description to match the lizardfolk lore. Not craftable, but wieldable if discovered.",
+ "description": "A stout knotty club with a large knob at the top. While it's very heavy, it's a very effective weapon in the hands of a strong opponent.",
+ "weight": "10 kg",
+ "volume": "8 L",
+ "price": "50 USD",
+ "flags": [ "UNBREAKABLE_MELEE", "ALWAYS_TWOHAND", "TRADER_AVOID", "SLOW_WIELD", "FIREWOOD", "NO_REPAIR" ],
+ "bashing": 22,
+ "to_hit": 1
+ },
+ {
+ "id": "lizardfolk_trident",
+ "type": "GENERIC",
+ "name": "wood trident",
+ "copy-from": "spear_forked",
+ "description": "A wooden melee weapon with a hand-forged steel forked spearhead attached to the end. It can be used for stabbing opponents either in close-range or as a thrown weapon, and in the right hands can also readily disarm opponents.",
+ "weight": "1650 g",
+ "to_hit": 2,
+ "techniques": [ "WBLOCK_2", "DEF_DISARM", "IMPALE" ],
+ "volume": "3 L",
+ "cutting": 29,
+ "flags": [ "SPEAR", "STAB", "REACH_ATTACK", "NONCONDUCTIVE", "DURABLE_MELEE", "SHEATH_SPEAR" ],
+ "price": "150 USD"
+ },
+ {
+ "id": "lizardfolk_javelin",
+ "type": "GENERIC",
+ "name": { "str": "barbed javelin" },
+ "category": "weapons",
+ "copy-from": "javelin",
+ "//": "A barbed version of the standard javelin (from spears_and_polearms.json) with a different description to match the lizardfolk lore. Not craftable, but wieldable if discovered.",
+ "description": "This weapon measures about 3 feet in length and is fletched like an arrow for better accuracy. The business end of the javelin has wicked-looking barbs which could cause significant bleeding.",
+ "weight": "2500 g",
+ "volume": "2830 ml",
+ "flags": [ "STAB", "SHEATH_SPEAR", "JAVELIN", "TRADER_AVOID", "NO_REPAIR" ]
+ },
+ {
+ "id": "lizardfolk_javelin_gun",
+ "type": "GUN",
+ "copy-from": "fake_item",
+ "name": { "str": "barbed javelin" },
+ "description": "Fake gun that fires barbed javelins.",
+ "flags": [ "NEVER_JAMS", "NONCONDUCTIVE", "NO_REPAIR", "WATERPROOF_GUN", "NO_SALVAGE", "NO_UNLOAD" ],
+ "skill": "rifle",
+ "durability": 10,
+ "range": 10,
+ "dispersion": 10,
+ "ranged_damage": [ { "damage_type": "stab", "amount": 5 } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/mutagen.json b/data/mods/Magical_Nights/items/mutagen.json
new file mode 100644
index 000000000000..2ca5586f3439
--- /dev/null
+++ b/data/mods/Magical_Nights/items/mutagen.json
@@ -0,0 +1,25 @@
+[
+ {
+ "type": "COMESTIBLE",
+ "id": "manatouched_serum",
+ "name": "concentrated mana serum",
+ "weight": "250 g",
+ "color": "light_blue",
+ "addiction_type": "mutagen",
+ "stim": -20,
+ "container": "flask_glass",
+ "comestible_type": "DRINK",
+ "symbol": "~",
+ "healthy": -10,
+ "addiction_potential": 5,
+ "calories": 26,
+ "description": "A very concentrated form of mana potion. You aren't quite sure of the effects this will have…",
+ "price": "10 USD",
+ "volume": "500 ml",
+ "phase": "liquid",
+ "charges": 2,
+ "use_action": { "type": "mutagen_iv", "mutation_category": "MANATOUCHED" },
+ "flags": [ "EATEN_COLD", "NUTRIENT_OVERRIDE" ],
+ "fun": -15
+ }
+]
diff --git a/data/mods/Magical_Nights/items/necromancy.json b/data/mods/Magical_Nights/items/necromancy.json
new file mode 100644
index 000000000000..87c29e0cf787
--- /dev/null
+++ b/data/mods/Magical_Nights/items/necromancy.json
@@ -0,0 +1,38 @@
+[
+ {
+ "id": "animist_doll_zombie",
+ "name": "zombie voodoo doll",
+ "description": "A remarkably accurate effigy of an undead human, including pieces of bone and organs. Necromantic magic delays immediate rot, but it won't last forever. Piercing it with the attached needle could compel it to serve you.",
+ "use_action": { "type": "cast_spell", "spell_id": "summon_zombie", "no_fail": true, "level": 12 },
+ "type": "COMESTIBLE",
+ "comestible_type": "FOOD",
+ "category": "weapons",
+ "material": [ "leather", "flesh", "bone" ],
+ "weight": "225 g",
+ "volume": "700ml",
+ "symbol": "t",
+ "color": "pink",
+ "stack_size": 1,
+ "spoils_in": "4 days",
+ "flags": [ "TRADER_AVOID", "INEDIBLE", "NUTRIENT_OVERRIDE" ]
+ },
+ {
+ "id": "animist_doll_skeleton",
+ "name": "ossified voodoo doll",
+ "description": "A remarkably accurate effigy of an undead human covered with bone, including pieces of organs. Necromantic magic delays immediate rot, but it won't last forever. Piercing it with the attached needle could compel it to serve you.",
+ "use_action": { "type": "cast_spell", "spell_id": "summon_skeleton", "no_fail": true, "level": 10 },
+ "type": "COMESTIBLE",
+ "category": "weapons",
+ "copy-from": "animist_doll_zombie"
+ },
+ {
+ "id": "animist_doll_decayed_pouncer",
+ "name": "cougar voodoo doll",
+ "description": "A remarkably accurate effigy of an undead cougar, complete with fur, bones, and organs. Necromantic magic delays immediate rot, but it won't last forever. Piercing it with the attached needle could compel it to serve you.",
+ "use_action": { "type": "cast_spell", "spell_id": "summon_decayed_pouncer", "no_fail": true, "level": 13 },
+ "type": "COMESTIBLE",
+ "category": "weapons",
+ "material": [ "fur", "flesh", "bone" ],
+ "copy-from": "animist_doll_skeleton"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/obsolete.json b/data/mods/Magical_Nights/items/obsolete.json
new file mode 100644
index 000000000000..982dc85eb7ea
--- /dev/null
+++ b/data/mods/Magical_Nights/items/obsolete.json
@@ -0,0 +1,50 @@
+[
+ {
+ "id": "wand_fireball",
+ "name": { "str": "wand of fireballs", "str_pl": "wands of fireballs" },
+ "description": "A classic, this wand shoots fireballs without fail. A more skilled Kelvinist could cast them more efficiently, though.",
+ "type": "TOOL",
+ "weight": "230 g",
+ "volume": "500 ml",
+ "price": "100 USD",
+ "bashing": 3,
+ "to_hit": 2,
+ "material": [ "wood" ],
+ "symbol": "|",
+ "color": "brown",
+ "charges_per_use": 1,
+ "ammo": "crystallized_mana",
+ "use_action": { "type": "cast_spell", "spell_id": "fireball", "no_fail": true, "level": 5, "need_wielding": true },
+ "magazines": [ [ "crystallized_mana", [ "small_mana_crystal" ] ] ],
+ "magazine_well": "250 ml"
+ },
+ {
+ "id": "wand_magic_missile",
+ "name": { "str": "wand of magic missiles", "str_pl": "wands of magic missiles" },
+ "description": "A classic, this wand shoots magic missiles without fail. A more skilled Magus could cast them more efficiently, though.",
+ "type": "TOOL",
+ "weight": "230 g",
+ "volume": "500 ml",
+ "price": "100 USD",
+ "bashing": 3,
+ "to_hit": 2,
+ "material": [ "wood" ],
+ "symbol": "|",
+ "color": "brown",
+ "charges_per_use": 1,
+ "ammo": "crystallized_mana",
+ "use_action": { "type": "cast_spell", "spell_id": "magic_missile", "no_fail": true, "level": 10, "need_wielding": true },
+ "magazines": [ [ "crystallized_mana", [ "small_mana_crystal" ] ] ],
+ "magazine_well": "250 ml"
+ },
+ {
+ "id": "bio_fuel_cell_blood",
+ "copy-from": "bionic_general",
+ "type": "BIONIC_ITEM",
+ "name": { "str": "OBSOLETE! Blood Power Generator CBM" },
+ "description": "OBSOLETE ITEM! Only exists for save integrity",
+ "price": "4500 USD",
+ "weight": "500 g",
+ "difficulty": 8
+ }
+]
diff --git a/data/mods/Magical_Nights/items/potions.json b/data/mods/Magical_Nights/items/potions.json
new file mode 100644
index 000000000000..59fda53c8a60
--- /dev/null
+++ b/data/mods/Magical_Nights/items/potions.json
@@ -0,0 +1,113 @@
+[
+ {
+ "id": "mana_potion_lesser",
+ "name": { "str": "lesser mana potion" },
+ "description": "You can't buy these, so you need to save them until the last boss! Actually, don't even use them there!",
+ "use_action": { "type": "cast_spell", "spell_id": "potion_recover_mana", "no_fail": true, "level": 0 },
+ "type": "COMESTIBLE",
+ "weight": "265 g",
+ "quench": 10,
+ "calories": 75,
+ "volume": "250ml",
+ "charges": 1,
+ "fun": -1,
+ "healthy": 1,
+ "symbol": "~",
+ "container": "flask_glass",
+ "color": "light_blue",
+ "comestible_type": "DRINK",
+ "flags": [ "EATEN_COLD", "NUTRIENT_OVERRIDE" ],
+ "phase": "liquid",
+ "price": "25 USD"
+ },
+ {
+ "id": "mana_potion",
+ "type": "COMESTIBLE",
+ "name": { "str": "mana potion" },
+ "copy-from": "mana_potion_lesser",
+ "use_action": { "type": "cast_spell", "spell_id": "potion_recover_mana", "no_fail": true, "level": 5 },
+ "price": "100 USD"
+ },
+ {
+ "id": "mana_potion_greater",
+ "type": "COMESTIBLE",
+ "name": { "str": "greater mana potion" },
+ "copy-from": "mana_potion_lesser",
+ "use_action": { "type": "cast_spell", "spell_id": "potion_recover_mana", "no_fail": true, "level": 15 },
+ "price": "300 USD"
+ },
+ {
+ "id": "cats_grace_potion",
+ "name": { "str": "potion of Cat's Grace", "str_pl": "potions of Cat's Grace" },
+ "description": "This is a potion of Cat's Grace. It will increase your dexterity for 10 minutes.",
+ "use_action": { "type": "cast_spell", "spell_id": "cats_grace", "no_fail": true, "level": 9 },
+ "type": "COMESTIBLE",
+ "weight": "265 g",
+ "quench": 10,
+ "calories": 75,
+ "volume": "250ml",
+ "charges": 1,
+ "fun": -1,
+ "symbol": "~",
+ "container": "flask_glass",
+ "color": "yellow",
+ "comestible_type": "DRINK",
+ "flags": [ "EATEN_COLD", "NUTRIENT_OVERRIDE" ],
+ "phase": "liquid",
+ "price": "30 USD"
+ },
+ {
+ "id": "ogres_strength_potion",
+ "name": { "str": "potion of Ogre's Strength", "str_pl": "potions of Ogre's Strength" },
+ "description": "This is a potion of Ogre's Strength. It will increase your strength for 10 minutes.",
+ "use_action": { "type": "cast_spell", "spell_id": "ogres_strength", "no_fail": true, "level": 9 },
+ "type": "COMESTIBLE",
+ "copy-from": "cats_grace_potion"
+ },
+ {
+ "id": "eagles_sight_potion",
+ "name": { "str": "potion of Eagle's Sight", "str_pl": "potions of Eagle's Sight" },
+ "description": "This is a potion of Eagle's Sight. It will increase your perception for 10 minutes.",
+ "use_action": { "type": "cast_spell", "spell_id": "eagles_sight", "no_fail": true, "level": 9 },
+ "type": "COMESTIBLE",
+ "copy-from": "cats_grace_potion"
+ },
+ {
+ "id": "foxs_cunning_potion",
+ "name": { "str": "potion of Fox's Cunning", "str_pl": "potions of Fox's Cunning" },
+ "description": "This is a potion of Fox's Cunning. It will increase your intelligence for 10 minutes.",
+ "use_action": { "type": "cast_spell", "spell_id": "foxs_cunning", "no_fail": true, "level": 9 },
+ "type": "COMESTIBLE",
+ "copy-from": "cats_grace_potion"
+ },
+ {
+ "id": "twisted_restore_potion",
+ "name": { "str": "potion of Twisted Restoration", "str_pl": "potions of Twisted Restoration" },
+ "description": "This foul-smelling liquid simulates undead regeneration by accelerating your heart to dangerous levels. Drinking this in danger or at critical condition may be lethal.",
+ "use_action": { "type": "cast_spell", "spell_id": "twisted_restore", "no_fail": true, "level": 1 },
+ "type": "COMESTIBLE",
+ "weight": "265 g",
+ "quench": -30,
+ "calories": 100,
+ "volume": "250ml",
+ "charges": 5,
+ "fun": -5,
+ "healthy": -1,
+ "symbol": "~",
+ "container": "flask_glass",
+ "color": "brown",
+ "spoils_in": "5 days",
+ "comestible_type": "DRINK",
+ "flags": [ "TRADER_AVOID", "NUTRIENT_OVERRIDE" ],
+ "phase": "liquid",
+ "price": "25 USD"
+ },
+ {
+ "id": "twisted_restore_potion_improved",
+ "name": { "str": "potion of Improved Twisted Restoration", "str_pl": "potions of Improved Twisted Restoration" },
+ "description": "This foul-smelling liquid simulates undead regeneration by accelerating your heart to dangerous levels. Drinking this in danger or at critical condition may be lethal. Improved infusion techniques lessen the strain of the process.",
+ "use_action": { "type": "cast_spell", "spell_id": "twisted_restore_improved", "no_fail": true, "level": 1 },
+ "type": "COMESTIBLE",
+ "copy-from": "twisted_restore_potion"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/recipe_books.json b/data/mods/Magical_Nights/items/recipe_books.json
new file mode 100644
index 000000000000..89962ceab242
--- /dev/null
+++ b/data/mods/Magical_Nights/items/recipe_books.json
@@ -0,0 +1,176 @@
+[
+ {
+ "id": "black_dragons",
+ "type": "BOOK",
+ "name": { "str": "Black Dragons: Swamp Ruins", "str_pl": "copies of Black Dragons: Swamp Ruins" },
+ "description": "This book details black dragons: The most evil of dragons, who live in ruins generally in swamps. Immune to acid and breathe acid. The book also details how to prepare its hide and craft various armors that make use of some of its acid resistance.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "black_white",
+ "skill": "spellcraft",
+ "required_level": 1,
+ "max_level": 3,
+ "intelligence": 10,
+ "time": "32 m",
+ "fun": 1
+ },
+ {
+ "id": "alchemy_basic",
+ "type": "BOOK",
+ "name": { "str": "A Beginner's Guide to Alchemy", "str_pl": "copies of A Beginner's Guide to Alchemy" },
+ "description": "A paperback tome for the art of liquid magic, alcohol not included.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "white",
+ "skill": "cooking",
+ "required_level": 3,
+ "max_level": 5,
+ "intelligence": 9,
+ "time": "20 m",
+ "fun": 1
+ },
+ {
+ "id": "necro_basic",
+ "type": "BOOK",
+ "name": { "str": "A Soulbinder's Guide to Necromancy", "str_pl": "copies of A Soulbinder's Guide to Necromancy" },
+ "description": "A paperback tome for the art of binding undead creatures' souls to dolls, along with emulating their healing factor.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "black",
+ "looks_like": "summon_undead_spellbook",
+ "skill": "tailor",
+ "required_level": 4,
+ "max_level": 6,
+ "intelligence": 9,
+ "time": "20 m",
+ "fun": -2,
+ "flags": [ "MORBID" ]
+ },
+ {
+ "id": "techno_basic",
+ "type": "BOOK",
+ "name": { "str": "Magitek Illustrated", "str_pl": "copies of Magitek Illustrated" },
+ "description": "A paperback tome for the art of combining modern technology with magic. There is a disclaimer on the back: `Cannith Industries bears no responsibility for malfunctions or accidents for any products mentioned herein`.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "black",
+ "looks_like": "manual_gun",
+ "skill": "mechanics",
+ "required_level": 3,
+ "max_level": 5,
+ "intelligence": 9,
+ "time": "20 m",
+ "fun": 1
+ },
+ {
+ "id": "book_mythological",
+ "type": "BOOK",
+ "name": { "str": "The Weapons of Asgard and Beyond", "str_pl": "copies of The Weapons of Asgard and Beyond" },
+ "max_level": 10,
+ "description": "An ornate book which appears to be written in Norse runes. Based on the detailed illustrations, it appears to contain information about crafting numerous weapons used by various Gods.",
+ "weight": "654 g",
+ "color": "light_blue",
+ "intelligence": 9,
+ "symbol": "?",
+ "material": [ "paper" ],
+ "volume": "1250 ml",
+ "time": 60,
+ "fun": 0,
+ "skill": "fabrication",
+ "price": "300 USD",
+ "required_level": 8
+ },
+ {
+ "id": "cooking_poison",
+ "type": "BOOK",
+ "name": { "str": "Cooking with Poison", "str_pl": "copies of Cooking with Poison" },
+ "description": "A leatherbound book with an embossed cauldron on the cover. Inside it describes ways to purify food magically.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "white",
+ "skill": "cooking",
+ "required_level": 4,
+ "max_level": 6,
+ "intelligence": 9,
+ "time": "20 m",
+ "fun": 1
+ },
+ {
+ "id": "metal_legends",
+ "type": "BOOK",
+ "name": { "str": "Metals of Legend", "str_pl": "copies of Metals of Legend" },
+ "description": "A book with a brass coverplate. It professes to teach one how to make magical metals such as Orichalcum. It is dry reading even for an alchemical tome.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "white",
+ "skill": "fabrication",
+ "required_level": 4,
+ "max_level": 6,
+ "intelligence": 9,
+ "time": "20 m",
+ "fun": -1
+ },
+ {
+ "id": "magic_armormaking",
+ "type": "BOOK",
+ "name": { "str": "Protection from Magical Beasts", "str_pl": "copies of Protection from Magical Beasts" },
+ "description": "A leatherbound book with a picture of a shield holding back dragonfire on the cover. There are many ways to turn monster skins and hides into protective equipment inside.",
+ "weight": "1 kg",
+ "volume": "750 ml",
+ "price": "79 USD",
+ "bashing": 5,
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "white",
+ "skill": "tailor",
+ "required_level": 6,
+ "max_level": 8,
+ "intelligence": 10,
+ "time": "25 m",
+ "fun": -1
+ },
+ {
+ "id": "weapon_enchanting_guide",
+ "type": "BOOK",
+ "looks_like": "welding_book",
+ "name": { "str": "Enchanter's Guidebook", "str_pl": "copies of Enchanter's Guidebooks" },
+ "description": "A hefty textbook on the theory and practice of magically strengthening weapons and tools.",
+ "weight": "750 g",
+ "volume": "1250 ml",
+ "price": "94 USD",
+ "price_postapoc": "4250 cent",
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "blue",
+ "skill": "fabrication",
+ "required_level": 5,
+ "max_level": 6,
+ "intelligence": 10,
+ "time": "60 m",
+ "fun": -1
+ }
+]
diff --git a/data/mods/Magical_Nights/items/spell_scrolls.json b/data/mods/Magical_Nights/items/spell_scrolls.json
new file mode 100644
index 000000000000..b63a682dda6a
--- /dev/null
+++ b/data/mods/Magical_Nights/items/spell_scrolls.json
@@ -0,0 +1,962 @@
+[
+ {
+ "abstract": "spell_scroll",
+ "name": { "str": "Spell Scroll" },
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "weight": "475 g",
+ "volume": "500 ml",
+ "price": "40 USD",
+ "material": [ "paper" ],
+ "symbol": "?",
+ "color": "white"
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_crystallize_mana",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Crystallize Mana", "str_pl": "Scrolls of Crystallize Mana" },
+ "description": "A proper wizard is always prepared, crystallize your mana for the future!",
+ "use_action": { "type": "learn_spell", "spells": [ "crystallize_mana" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_dark_sight",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Dark Sight", "str_pl": "Scrolls of Dark Sight" },
+ "description": "The darkness holds no secrets for the arcane. Adjust your sight to see in perfect darkness!",
+ "use_action": { "type": "learn_spell", "spells": [ "dark_sight" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_invisibility",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Invisibility", "str_pl": "Scrolls of Invisibility" },
+ "description": "The light can not interact with you unless you want it to. Become invisible!",
+ "use_action": { "type": "learn_spell", "spells": [ "invisibility" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_obfuscated_body",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Obfuscated Body", "str_pl": "Scrolls of Obfuscated Body" },
+ "description": "A magical aura distorts light around your body, making it easier to dodge enemy attacks.",
+ "use_action": { "type": "learn_spell", "spells": [ "obfuscated_body" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_holographic_transposition",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Holographic Transposition", "str_pl": "Scrolls of Holographic Transposition" },
+ "description": "Allows you to swap places with a previously existing holographic image of yourself. If the universe itself can't tell you apart, who could?",
+ "use_action": { "type": "learn_spell", "spells": [ "holographic_transposition" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_smite",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Smite", "str_pl": "Scrolls of Smite" },
+ "description": "Evil has become pervasive throughout the world. Let your power be the light that shines in the darkness!",
+ "use_action": { "type": "learn_spell", "spells": [ "smite" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_recover_mana",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Life Conversion", "str_pl": "Scrolls of Life Conversion" },
+ "description": "You channel your life force itself into your spiritual energy. You spend hp to regain mana.",
+ "use_action": { "type": "learn_spell", "spells": [ "recover_mana" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_recover_pain",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Mind Over Pain", "str_pl": "Scrolls of Mind Over Pain" },
+ "description": "With an intense ritual that resembles crossfit, you manage to put some of your pain at bay.",
+ "use_action": { "type": "learn_spell", "spells": [ "recover_pain" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_zombie",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Summon Zombie", "str_pl": "Scrolls of Summon Zombie" },
+ "description": "An ethereal-looking zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_zombie" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_skeleton",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Summon Skeleton", "str_pl": "Scrolls of Summon Skeleton" },
+ "description": "A ghostly skeleton rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_skeleton" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_floating_disk",
+ "name": { "str": "Scroll of Summon Floating Disk", "str_pl": "Scrolls of Summon Floating Disk" },
+ "description": "Summons a floating disk that is sworn to carry your burdens.",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_floating_disk" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_decayed_pouncer",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Summon Decayed Pouncer", "str_pl": "Scrolls of Summon Decayed Pouncer" },
+ "description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_decayed_pouncer" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_light_healing",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Cure Light Wounds", "str_pl": "Scrolls of Cure Light Wounds" },
+ "description": "Heals a little bit of damage on the target.",
+ "use_action": { "type": "learn_spell", "spells": [ "light_healing" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_pain_split",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Pain Split", "str_pl": "Scrolls of Pain Split" },
+ "description": "Evens out damage among your limbs.",
+ "use_action": { "type": "learn_spell", "spells": [ "pain_split" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_vicious_tentacle",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Vicious Tentacle", "str_pl": "Scrolls of Vicious Tentacle" },
+ "description": "This spell extrudes a long nasty whiplike tentacle of sharp bones and oozing acid from your body, it has a long reach attack and vicious damage.",
+ "use_action": { "type": "learn_spell", "spells": [ "vicious_tentacle" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_bio_grotesque",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Grotesque Enhancement", "str_pl": "Scrolls of Grotesque Enhancement" },
+ "description": "A spell that warps your body in alien ways to increase your physical abilities and strength.",
+ "use_action": { "type": "learn_spell", "spells": [ "bio_grotesque" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_bio_acidicspray",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Acidic Spray", "str_pl": "Scrolls of Acidic Spray" },
+ "description": "When cast, the mage opens his mouth and sprays acid in a wide cone to dissolve his foes into goo. Just imagine what he'll do with the goo.",
+ "use_action": { "type": "learn_spell", "spells": [ "bio_acidicspray" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_bio_fleshpouch",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Flesh Pouch", "str_pl": "Scrolls of Flesh Pouch" },
+ "description": "This spell grows a large pouch out of your skin on your back, allowing you to store your gear in it.",
+ "use_action": { "type": "learn_spell", "spells": [ "bio_fleshpouch" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_bio_bonespear",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Conjure Bonespear", "str_pl": "Scrolls of Conjure Bonespear" },
+ "description": "This spell creates a long shaft of bone with a wicked point and blades along its length.",
+ "use_action": { "type": "learn_spell", "spells": [ "bio_bonespear" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_megablast",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Megablast", "str_pl": "Scrolls of Megablast" },
+ "description": "You always wanted to fire energy beams like in the animes you watched as a kid. Now you can!",
+ "use_action": { "type": "learn_spell", "spells": [ "megablast" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_create_atomic_light",
+ "//": "Classless spell1",
+ "name": { "str": "Scroll of Magical Light", "str_pl": "Scrolls of Magical Light" },
+ "description": "Creates a magical light.",
+ "use_action": { "type": "learn_spell", "spells": [ "create_atomic_light" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_blinding_flash",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Blinding Flash", "str_pl": "Scrolls of Blinding Flash" },
+ "description": "Blind enemies for a short time with a sudden, dazzling light. Higher levels deal slightly higher damage.",
+ "use_action": { "type": "learn_spell", "spells": [ "blinding_flash" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_ethereal_grasp",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Ethereal Grasp", "str_pl": "Scrolls of Ethereal Grasp" },
+ "description": "A mass of spectral hands emerge from the ground, slowing everything in range. Higher levels allow a bigger AoE, and longer effect.",
+ "use_action": { "type": "learn_spell", "spells": [ "ethereal_grasp" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_protection_aura",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Aura of Protection", "str_pl": "Scrolls of Aura of Protection" },
+ "description": "Encases your whole body in a magical aura that protects you from the environment.",
+ "use_action": { "type": "learn_spell", "spells": [ "protection_aura" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_druid_veggrasp",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Vegetative Grasp", "str_pl": "Scrolls of Vegetative Grasp" },
+ "description": "This spell causes roots and vines to burst forth from the ground and grab your foes, slowing them and doing a small amount of damage as they dig in.",
+ "use_action": { "type": "learn_spell", "spells": [ "druid_veggrasp" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_druid_rootstrike",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Root Strike", "str_pl": "Scrolls of Root Strike" },
+ "description": "This spell causes roots to spear out the ground and stab into your foes in an arc, impaling them.",
+ "use_action": { "type": "learn_spell", "spells": [ "druid_rootstrike" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_druid_woodshaft",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Wooden Shaft", "str_pl": "Scrolls of Wooden Shaft" },
+ "description": "This spell creates a projectile of hardwood that shoots forth from the caster's hand at high speed to stab into an enemy.",
+ "use_action": { "type": "learn_spell", "spells": [ "druid_woodshaft" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_druid_naturebow1",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Nature's Bow", "str_pl": "Scrolls of Nature's Bow" },
+ "description": "This spell conjures a magical wooden recurve bow that fires endless arrows for as long as it lasts.",
+ "use_action": { "type": "learn_spell", "spells": [ "druid_naturebow1" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_recover_fatigue",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Nature's Trance", "str_pl": "Scrolls of Nature's Trance" },
+ "description": "Your connection to living things allows you to go into a magical trance. This allows you to recover fatige quickly in exchange for mana.",
+ "use_action": { "type": "learn_spell", "spells": [ "recover_fatigue" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_cats",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Bag of Cats", "str_pl": "Scrolls of Bag of Cats" },
+ "description": "Are you the crazy cat lady?",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_cats" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_stonefist",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Stonefist", "str_pl": "Scrolls of Stonefist" },
+ "description": "Encases your arms and hands in a sheath of magical stone, you can punch and defend yourself with it in melee combat.",
+ "use_action": { "type": "learn_spell", "spells": [ "stonefist" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_seismic_stomp",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Seismic Stomp", "str_pl": "Scrolls of Seismic Stomp" },
+ "description": "Focusing mana into your leg, you stomp your foot and send out a shockwave, knocking enemies around you onto the ground.",
+ "use_action": { "type": "learn_spell", "spells": [ "seismic_stomp" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_recover_stamina",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Stone's Endurance", "str_pl": "Scrolls of Stone's Endurance" },
+ "description": "You focus on the stones beneath you and draw from their agelessness. Your mana is converted to stamina.",
+ "use_action": { "type": "learn_spell", "spells": [ "recover_stamina" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_eshaper_shardspray",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Shardspray", "str_pl": "Scrolls of Shardspray" },
+ "description": "This spell projects a wide spray of sharp metal shards, cutting into your foes and friends alike.",
+ "use_action": { "type": "learn_spell", "spells": [ "eshaper_shardspray" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_eshaper_piercing_bolt",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Piercing Bolt", "str_pl": "Scrolls of Piercing Bolt" },
+ "description": "This spell projects a piercing rod of conjured iron at those that dare oppose you.",
+ "use_action": { "type": "learn_spell", "spells": [ "eshaper_piercing_bolt" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_eshaper_shardstorm",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Shardstorm", "str_pl": "Scrolls of Shardstorm" },
+ "description": "Creates an omnidirectional spray of razor sharp metal shards all around you.",
+ "use_action": { "type": "learn_spell", "spells": [ "eshaper_shardstorm" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_eshaper_rockbolt",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Rockbolt", "str_pl": "Scrolls of Rockbolt" },
+ "description": "Fires a conjured stone projectile at high velocity.",
+ "use_action": { "type": "learn_spell", "spells": [ "eshaper_rockbolt" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_point_flare",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Point Flare", "str_pl": "Scrolls of Point Flare" },
+ "description": "Causes an intense heat at the location, damaging the target.",
+ "use_action": { "type": "learn_spell", "spells": [ "point_flare" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_create_lighter",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Finger Firelighter", "str_pl": "Scrolls of Finger Firelighter" },
+ "description": "Summons a small flame that does not burn you, but you can use it to light things on fire. It seems to need you to have some intent to light things on fire, because you are able to put it in your pocket with no issue.",
+ "use_action": { "type": "learn_spell", "spells": [ "create_lighter" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_ice_spike",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Ice Spike", "str_pl": "Scrolls of Ice Spike" },
+ "description": "Causes jagged icicles to form in the air above the target, falling and damaging it.",
+ "use_action": { "type": "learn_spell", "spells": [ "ice_spike" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_fireball",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Fireball", "str_pl": "Scrolls of Fireball" },
+ "description": "You hurl a pea-sized glowing orb that when reaches its target or an obstacle produces a pressure-less blast of searing heat.",
+ "use_action": { "type": "learn_spell", "spells": [ "fireball" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_cone_cold",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Cone of Cold", "str_pl": "Scrolls of Cone of Cold" },
+ "description": "You blast a cone of frigid air toward the target.",
+ "use_action": { "type": "learn_spell", "spells": [ "cone_cold" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_burning_hands",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Burning Hands", "str_pl": "Scrolls of Burning Hands" },
+ "description": "You're pretty sure you saw this in a game somewhere. You fire a short-range cone of fire.",
+ "use_action": { "type": "learn_spell", "spells": [ "burning_hands" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_frost_spray",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Frost Spray", "str_pl": "Scrolls of Frost Spray" },
+ "description": "You're pretty sure you saw this in a game somewhere. You fire a short-range cone of ice and cold.",
+ "use_action": { "type": "learn_spell", "spells": [ "frost_spray" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_chilling_touch",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Chilling Touch", "str_pl": "Scrolls of Chilling Touch" },
+ "description": "Freezes the touched target with intense cold.",
+ "use_action": { "type": "learn_spell", "spells": [ "chilling_touch" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_glide_ice",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Glide on Ice", "str_pl": "Scrolls of Glide on Ice" },
+ "description": "Encases your feet in a magical coating of ice, allowing you to glide along smooth surfaces faster.",
+ "use_action": { "type": "learn_spell", "spells": [ "glide_ice" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_hoary_blast",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Hoary Blast", "str_pl": "Scrolls of Hoary Blast" },
+ "description": "You project a glowing white crystal of ice and it explodes on impact into a blossom of shattering cold.",
+ "use_action": { "type": "learn_spell", "spells": [ "hoary_blast" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_ice_shield",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Ice Shield", "str_pl": "Scrolls of Ice Shield" },
+ "description": "Creates a magical shield of ice on your arm, you can defend yourself with it in melee combat and use it to bash.",
+ "use_action": { "type": "learn_spell", "spells": [ "ice_shield" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_frost_armor",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Frost Armor", "str_pl": "Scrolls of Frost Armor" },
+ "description": "Covers you in a thin layer of magical ice to protect you from harm.",
+ "use_action": { "type": "learn_spell", "spells": [ "frost_armor" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_magic_missile",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Magic Missile", "str_pl": "Scrolls of Magic Missile" },
+ "description": "I cast Magic Missile at the darkness!",
+ "use_action": { "type": "learn_spell", "spells": [ "magic_missile" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_phase_door",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Phase Door", "str_pl": "Scrolls of Phase Door" },
+ "description": "Teleports you in a random direction a short distance.",
+ "use_action": { "type": "learn_spell", "spells": [ "phase_door" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_gravity_well",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Gravity Well", "str_pl": "Scrolls of Gravity Well" },
+ "description": "Summons a well of gravity with the epicenter at the location. Deals bashing damage to all creatures in the affected area.",
+ "use_action": { "type": "learn_spell", "spells": [ "gravity_well" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_magus_mana_blast",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Mana Blast", "str_pl": "Scrolls of Mana Blast" },
+ "description": "A blast of concentrated magical power that obliterates a large area.",
+ "use_action": { "type": "learn_spell", "spells": [ "magus_mana_blast" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_magus_mana_bolt",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Mana Bolt", "str_pl": "Scrolls of Mana Bolt" },
+ "description": "A bolt of magical power that only damages your foes.",
+ "use_action": { "type": "learn_spell", "spells": [ "magus_mana_bolt" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_magus_haste",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Haste", "str_pl": "Scrolls of Haste" },
+ "description": "This spell gives you an enormous boost of speed lasting a short period of time.",
+ "use_action": { "type": "learn_spell", "spells": [ "magus_haste" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_magus_mana_beam",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Mana Beam", "str_pl": "Scrolls of Mana Beam" },
+ "description": "A beam of focused magical power that damages any foes in its path.",
+ "use_action": { "type": "learn_spell", "spells": [ "magus_mana_beam" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_magus_escape",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Escape", "str_pl": "Scrolls of Escape" },
+ "description": "Teleports you in a random direction a medium distance, to help escape your foes in dangerous situations.",
+ "use_action": { "type": "learn_spell", "spells": [ "magus_escape" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_cats_grace",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Cat's Grace", "str_pl": "Scrolls of Cat's Grace" },
+ "description": "You become more graceful, agile, and coordinated.",
+ "use_action": { "type": "learn_spell", "spells": [ "cats_grace" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_eagles_sight",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Eagle's Sight", "str_pl": "Scrolls of Eagle's Sight" },
+ "description": "You gain the perception of an eagle.",
+ "use_action": { "type": "learn_spell", "spells": [ "eagles_sight" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_ogres_strength",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Ogre's Strength", "str_pl": "Scrolls of Ogre's Strength" },
+ "description": "You gain the strength of an ogre.",
+ "use_action": { "type": "learn_spell", "spells": [ "ogres_strength" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_foxs_cunning",
+ "//": "Magus spell",
+ "name": { "str": "Scroll of Fox's Cunning", "str_pl": "Scrolls of Fox's Cunning" },
+ "description": "You become wily like a fox.",
+ "use_action": { "type": "learn_spell", "spells": [ "foxs_cunning" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_jolt",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Jolt", "str_pl": "Scrolls of Jolt" },
+ "description": "A short-ranged fan of electricity shoots from your fingers.",
+ "use_action": { "type": "learn_spell", "spells": [ "jolt" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_lightning_bolt",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Lightning Bolt", "str_pl": "Scrolls of Lightning Bolt" },
+ "description": "The goto spell for many Stormshapers, this iconic spell does just what you expect: you shoot lightning from your fingertips. However, this lightning is more directed than most lightning, and travels in a line through most non-solid targets.",
+ "use_action": { "type": "learn_spell", "spells": [ "lightning_bolt" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_windstrike",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Windstrike", "str_pl": "Scrolls of Windstrike" },
+ "description": "A powerful blast of wind slams into anything in front of your outstretched hand.",
+ "use_action": { "type": "learn_spell", "spells": [ "windstrike" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_windrun",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Windrunning", "str_pl": "Scrolls of Windrunning" },
+ "description": "A magical wind pushes you forward as you move, easing your movements and increasing speed.",
+ "use_action": { "type": "learn_spell", "spells": [ "windrun" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_storm_hammer",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Call Stormhammer", "str_pl": "Scrolls of Call Stormhammer" },
+ "description": "Creates a crackling magical warhammer full of lightning to smite your foes with, and of course, smash things to bits!",
+ "use_action": { "type": "learn_spell", "spells": [ "storm_hammer" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_bless",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Bless", "str_pl": "Scrolls of Bless" },
+ "description": "A spell of blessing that gives you energy and boosts your abilities.",
+ "use_action": { "type": "learn_spell", "spells": [ "bless" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_holy_blade",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Holy Blade", "str_pl": "Scrolls of Holy Blade" },
+ "description": "This blade of light will cut through any evil it makes contact with!",
+ "use_action": { "type": "learn_spell", "spells": [ "holy_blade" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_spirit_armor",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Spiritual Armor", "str_pl": "Scrolls of Spiritual Armor" },
+ "description": "Evil will not make it through your defenses if your faith is strong enough!",
+ "use_action": { "type": "learn_spell", "spells": [ "spirit_armor" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_create_atomic_lamp",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Lamp", "str_pl": "Scrolls of Lamp" },
+ "description": "Creates a magical lamp.",
+ "use_action": { "type": "learn_spell", "spells": [ "create_atomic_lamp" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_recover_bionic_power",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Manatricity", "str_pl": "Scrolls of Manatricity" },
+ "description": "You have found a way to convert your spiritual energy into power you can use for your bionics.",
+ "use_action": { "type": "learn_spell", "spells": [ "recover_bionic_power" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_taze",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Taze", "str_pl": "Scrolls of Taze" },
+ "description": "This spell creates a very short range bolt of electricity to shock your foes.",
+ "use_action": { "type": "learn_spell", "spells": [ "taze" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_quantum_tunnel_lesser",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Lesser Quantum Tunnel", "str_pl": "Scrolls of Lesser Quantum Tunnel" },
+ "description": "This spell manipulates some quantum something or other to tunnel you through a short distance of space, and even matter, unfortunately there's that whole uncertainty thing as to where you come out. It leaves you a little dazed on the other side as you reorient yourself.",
+ "use_action": { "type": "learn_spell", "spells": [ "quantum_tunnel_lesser" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_synaptic_stimulation",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Synaptic Stimulation", "str_pl": "Scrolls of Synaptic Stimulation" },
+ "description": "This spell stimulates the synapses in your brain beyond normal processing speeds, giving you a large boost in mental processing capability, including enhancing your reflexes, speed, and raw intellectual power. Use responsibly!",
+ "use_action": { "type": "learn_spell", "spells": [ "synaptic_stimulation" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_laze",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Laze", "str_pl": "Scrolls of Laze" },
+ "description": "You concentrate and release a focused beam of photons at a target, also known as a laser.",
+ "use_action": { "type": "learn_spell", "spells": [ "laze" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_animated_blade",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Animated Blade", "str_pl": "Scrolls of Animated Blade" },
+ "description": "This spell conjures flying animated blades that will cut your enemies down to size. Into small pieces that is.",
+ "use_action": { "type": "learn_spell", "spells": [ "animated_blade" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_mirror_image",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Mirror Image", "str_pl": "Scrolls of Mirror Image" },
+ "description": "This spell manipulates light into barely tangible duplicates of a living being, a magical hologram in short.",
+ "use_action": { "type": "learn_spell", "spells": [ "mirror_image" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_lightning_blast",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Lightning Blast", "str_pl": "Scrolls of Lightning Blast" },
+ "description": "You fire a small concentrated ball of lightning at the target. The electricity diffuses quickly, so it doesn't do much damage, but you're able to fire off several quick ones in a row.",
+ "use_action": { "type": "learn_spell", "spells": [ "lightning_blast" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_necrotic_gaze",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Necrotic Gaze", "str_pl": "Scrolls of Necrotic Gaze" },
+ "description": "You use the power of your own blood to imbue necrotic energy into your gaze, damaging the target you look at.",
+ "use_action": { "type": "learn_spell", "spells": [ "necrotic_gaze" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_purification_seed",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Purification Seed", "str_pl": "Scrolls of Purification Seed" },
+ "description": "You summon a gift of the earth which will purify water. Greater levels yield greater numbers of seeds.",
+ "use_action": { "type": "learn_spell", "spells": [ "purify_seed" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_overcharge_eyes",
+ "//": "Technomancer spell",
+ "name": { "str": "Scroll of Optical Sneeze Beam", "str_pl": "Scrolls of Optical Sneeze Beam" },
+ "description": "You overcharge your internal batteries to send a semi-directed beam from your face.",
+ "use_action": { "type": "learn_spell", "spells": [ "overcharge_eyes" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_lava_bomb",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Lava Bomb", "str_pl": "Scrolls of Lava Bomb" },
+ "description": "You tear up the ground beneath you to fire a lava bomb: a globe of lava surrounded by hot, solid rock. It shatters upon impact, spraying shards of rock and lava everywhere.",
+ "use_action": { "type": "learn_spell", "spells": [ "lava_bomb_main" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_acid_resistance",
+ "//": "Classless spell, black dragon books",
+ "name": { "str": "Scroll of Acid Resistance", "str_pl": "Scrolls of Acid Resistance" },
+ "description": "This spell creates an invisible aura to protect you from acid.",
+ "use_action": { "type": "learn_spell", "spells": [ "acid_resistance" ] }
+ },
+ {
+ "id": "lightning_storm_scroll",
+ "type": "GENERIC",
+ "name": { "str": "Scroll of Lightning Storm", "str_pl": "Scrolls of Lightning Storm" },
+ "//": "Stormshaper spell",
+ "description": "This scroll details how a spell called 'Lightning Blast' which is commonly used among Stormshapers can be altered to become much more powerful, at a much higher mana cost.",
+ "weight": "129 g",
+ "volume": "500 ml",
+ "price": "250 USD",
+ "symbol": "?",
+ "color": "light_blue",
+ "use_action": { "type": "learn_spell", "spells": [ "lightning_storm" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_druidic_regrowth",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Sacrificial Regrowth", "str_pl": "Scrolls of Sacrificial Regrowth" },
+ "description": "Through giving of one's own life force, you restore withered and barren plant life nearby. What remains will need time to regrow its full strength.",
+ "use_action": { "type": "learn_spell", "spells": [ "druidic_regrowth" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_druidic_healing",
+ "//": "Druid spell",
+ "name": { "str": "Scroll of Sacrificial Healing", "str_pl": "Scrolls of Sacrificial Healing" },
+ "description": "Channels some of the user's own life force into healing energy, for the sake of ones allies.",
+ "use_action": { "type": "learn_spell", "spells": [ "druidic_healing" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_earthshaper_stoneskin",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Stoneskin", "str_pl": "Scrolls of Stoneskin" },
+ "description": "Envelops your entire body in armor formed from living rock, encumbering yet protective.",
+ "use_action": { "type": "learn_spell", "spells": [ "earthshaper_stoneskin" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_earthshaper_pillar",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Pillar of Stone", "str_pl": "Scrolls of Pillar of Stone" },
+ "description": "Drawing upon the surrounding earth, you form a pillar of solid rock. Experience will make the task easier, and less disruptive to the surrounding area.",
+ "use_action": { "type": "learn_spell", "spells": [ "earthshaper_pillar" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_biomancer_paralytic_dart",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Paralytic Dart", "str_pl": "Scrolls of Paralytic Dart" },
+ "description": "Spits a warped needle of sinew and bone, carrying with it a sting that slows your victim.",
+ "use_action": { "type": "learn_spell", "spells": [ "biomancer_paralytic_dart" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_biomancer_visceral_projection",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Visceral Projection", "str_pl": "Scrolls of Visceral Projection" },
+ "description": "Projects a spray of acrid blood and gore all around you, growing to ensnare your prey in in a field of twitching poisonous tendrils.",
+ "use_action": { "type": "learn_spell", "spells": [ "biomancer_visceral_projection" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_biomancer_coagulant_weave",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Coagulant Weave", "str_pl": "Scrolls of Coagulant Weave" },
+ "description": "Turns your biological mastery inwards, medically enhancing your flesh. Rather than strength of healing, it staves off blood loss and purges wounds before they can turn septic, at the cost of increased hunger and thirst.",
+ "use_action": { "type": "learn_spell", "spells": [ "biomancer_coagulant_weave" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_stormshaper_ionization",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Ionization", "str_pl": "Scrolls of Ionization" },
+ "description": "By manipulating the charge in the air, you can conjure a sharp snap of lightning over a wide area. While its destructive potential is a far cry from natural lightning, the light and thunderclap produced will leave your foes reeling.",
+ "use_action": { "type": "learn_spell", "spells": [ "stormshaper_ionization" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_wisps",
+ "//": "Animist spell",
+ "name": { "str": "Scroll of Ignus Fatuus", "str_pl": "Scrolls of Ignus Fatuus" },
+ "description": "Summons ghostly foxfire worked from living marsh vapor, to lead your enemies astray. With more experience, this spell can conjure multiple ghost lights.",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_wisps" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_stormshaper_wall_of_fog",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Wall of Fog", "str_pl": "Scrolls of Wall of Fog" },
+ "description": "Draws forth a broad wall of thick fog. While the sudden force of air pressure will floor any enemies caught in it, the conjuration is otherwise harmless.",
+ "use_action": { "type": "learn_spell", "spells": [ "stormshaper_wall_of_fog" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_condense_water",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Condense Water", "str_pl": "Scrolls of Condense Water" },
+ "description": "Allows you to condense water from the air around you.",
+ "use_action": { "type": "learn_spell", "spells": [ "storm_condense_water" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_condense_clean_water",
+ "//": "Stormshaper spell",
+ "name": { "str": "Scroll of Condense Clean Water", "str_pl": "Scrolls of Condense Clean Water" },
+ "description": "Allows you to condense clean water from the air around you.",
+ "use_action": { "type": "learn_spell", "spells": [ "storm_condense_clean_water" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_create_acid",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Create Hydrochloric Acid", "str_pl": "Scrolls of Create Hydrochloric Acid" },
+ "description": "Produces usable Hydrochloric Acid for you.",
+ "use_action": { "type": "learn_spell", "spells": [ "bio_create_acid" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_summon_lemon",
+ "//": "Classless spell",
+ "name": { "str": "Scroll of Summon… Demon(?)", "str_pl": "Scrolls of Summon… Demon(?)" },
+ "description": "You can tell this is an authentic magic scroll by all the cursive writing. It does make it a bit hard to read, though…",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_lemon" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_fire_storm",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Fire Storm", "str_pl": "Scrolls of Fire Storm" },
+ "description": "This scroll details how a spell called 'Fireball' which is commonly used among Kelvinists can be altered to become much more powerful, at a much higher mana cost.",
+ "use_action": { "type": "learn_spell", "spells": [ "fire_storm" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_ice_storm",
+ "//": "Kelvinist spell",
+ "name": { "str": "Scroll of Ice Storm", "str_pl": "Scrolls of Ice Storm" },
+ "description": "This scroll details how a spell called 'Hoary Blast' which is commonly used among Kelvinists can be altered to become much more powerful, at a much higher mana cost.",
+ "use_action": { "type": "learn_spell", "spells": [ "ice_storm" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_rock_tomb",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Rock Tomb", "str_pl": "Scrolls of Rock Tomb" },
+ "description": "This scroll details how to tear up the ground beneath you to throw a medium boulder.",
+ "use_action": { "type": "learn_spell", "spells": [ "rock_tomb" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_meteor",
+ "//": "Earthshaper spell",
+ "name": { "str": "Scroll of Meteor", "str_pl": "Scrolls of Meteor" },
+ "description": "This scroll contains a powerful spell to call down a meteor from high in the sky. With this cataclysm, maybe another dinosaur-killer would be a good thing.",
+ "use_action": { "type": "learn_spell", "spells": [ "meteor" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_acid_bolt",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Acid Bolt", "str_pl": "Scrolls of Acid Bolt" },
+ "description": "This scroll details how to throw acid at someone.",
+ "use_action": { "type": "learn_spell", "spells": [ "acid_bolt" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_acid_bomb",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Acid Bomb", "str_pl": "Scrolls of Acid Bomb" },
+ "description": "This scroll contains details on how to shape acid into a compressed spherical shape.",
+ "use_action": { "type": "learn_spell", "spells": [ "acid_bomb" ] }
+ },
+ {
+ "type": "GENERIC",
+ "copy-from": "spell_scroll",
+ "id": "spell_scroll_acid_storm",
+ "//": "Biomancer spell",
+ "name": { "str": "Scroll of Acid Storm", "str_pl": "Scrolls of Acid Storm" },
+ "description": "This scroll details how a spell called 'Acid Bomb' can be altered to become much more powerful, at a much higher mana cost.",
+ "use_action": { "type": "learn_spell", "spells": [ "acid_storm" ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/spellbooks.json b/data/mods/Magical_Nights/items/spellbooks.json
new file mode 100644
index 000000000000..fa200afe8b6b
--- /dev/null
+++ b/data/mods/Magical_Nights/items/spellbooks.json
@@ -0,0 +1,432 @@
+[
+ {
+ "id": "DEBUG_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "A Technomancer's Guide to Debugging C:DDA", "str_pl": "copies of A Technomancer's Guide to Debugging C:DDA" },
+ "description": "static std::string description( spell sp ) const;",
+ "weight": "1 g",
+ "volume": "1 ml",
+ "symbol": "?",
+ "color": "magenta",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [
+ "debug_hp",
+ "debug_stamina",
+ "example_template",
+ "debug_bionic",
+ "pain_split",
+ "fireball",
+ "gravity_well",
+ "cone_cold",
+ "megablast",
+ "test_area_push",
+ "test_area_pull_field",
+ "test_area_pull_all"
+ ]
+ }
+ },
+ {
+ "id": "wizard_beginner",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "A Beginner's Guide to Magic", "str_pl": "copies of A Beginner's Guide to Magic" },
+ "//": "2 Magus, 1 classless spell",
+ "description": "Looks just like a typical pamphlet claiming to teach people magic. Yet, for some reason you can't quite put your finger on, you get the feeling that there's a little more truth than usual to this one…",
+ "weight": "585 g",
+ "volume": "250 ml",
+ "price": "50 USD",
+ "symbol": "?",
+ "color": "light_red",
+ "use_action": { "type": "learn_spell", "spells": [ "magic_missile", "phase_door", "create_atomic_light" ] }
+ },
+ {
+ "id": "wizard_utility",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Wizarding Guide to Backpacking", "str_pl": "copies of Wizarding Guide to Backpacking" },
+ "//": "1 Magus, 1 Biomancer, 1, Kelvinist, 1 Stormshaper, 1 classless spell",
+ "description": "This appears to be the spell version of a guide for what things to take with you when backpacking. It's a little bulky, but will certainly prove useful.",
+ "weight": "1 kg",
+ "volume": "1250 ml",
+ "price": "350 USD",
+ "symbol": "?",
+ "color": "red",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [ "phase_door", "create_lighter", "pain_split", "protection_aura", "storm_condense_water" ]
+ }
+ },
+ {
+ "id": "pyro",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Pyromancy for Heretics", "str_pl": "copies of Pyromancy for Heretics" },
+ "//": "4 Kelvinist spells",
+ "description": "This charred husk of a book still contains many ways to light things aflame.",
+ "weight": "450 g",
+ "volume": "1 L",
+ "price": "1904 cent",
+ "symbol": "?",
+ "color": "light_red",
+ "use_action": { "type": "learn_spell", "spells": [ "point_flare", "fireball", "burning_hands", "create_lighter" ] }
+ },
+ {
+ "id": "wizard_advanced",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "//": "1 Magus, 1 biomancer, 2 kelvinist spells",
+ "name": { "str": "A Treatise on Magical Elements", "str_pl": "copies of A Treatise on Magical Elements" },
+ "description": "This details complex diagrams, rituals, and choreography that describes various spells.",
+ "weight": "920 g",
+ "volume": "750 ml",
+ "price": "300 USD",
+ "symbol": "?",
+ "color": "light_red",
+ "use_action": { "type": "learn_spell", "spells": [ "point_flare", "ice_spike", "gravity_well", "pain_split" ] }
+ },
+ {
+ "id": "priest_beginner",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Introduction to the Divine", "str_pl": "copies of Introduction to the Divine" },
+ "//": "1 technomancer, 1 biomancer, 1 classless spells",
+ "description": "This appears to mostly be a religious text, but it does have some notes on healing.",
+ "weight": "585 g",
+ "volume": "500 ml",
+ "price": "50 USD",
+ "symbol": "?",
+ "color": "light_green",
+ "use_action": { "type": "learn_spell", "spells": [ "light_healing", "blinding_flash", "bless" ] }
+ },
+ {
+ "id": "priest_advanced",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": {
+ "str": "The Paladin's Guide to Modern Spellcasting",
+ "str_pl": "copies of The Paladin's Guide to Modern Spellcasting"
+ },
+ "//": " 3 animist spells. Like it SHOULD be.",
+ "description": "Despite the title, this seems to be written in Middle English. A little obtuse, but you can make out most of the words well enough.",
+ "weight": "830 g",
+ "volume": "750 ml",
+ "price": "300 USD",
+ "symbol": "?",
+ "color": "green",
+ "use_action": { "type": "learn_spell", "spells": [ "smite", "holy_blade", "spirit_armor" ] }
+ },
+ {
+ "id": "winter_grasp",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Winter's Eternal Grasp", "str_pl": "copies of Winter's Eternal Grasp" },
+ "//": "5 Kelvinist spells",
+ "description": "This slim book almost seems to be made from ice, it's cold to the touch.",
+ "weight": "450 g",
+ "volume": "1 L",
+ "price": "1904 cent",
+ "symbol": "?",
+ "color": "light_blue",
+ "use_action": { "type": "learn_spell", "spells": [ "cone_cold", "ice_spike", "hoary_blast", "chilling_touch", "frost_spray" ] }
+ },
+ {
+ "id": "tome_of_storms",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "//": "8 Stormshaper spells",
+ "name": { "str": "The Tome of The Oncoming Storm", "str_pl": "copies of The Tome of The Oncoming Storm" },
+ "description": "A large book embossed with crossed lightning bolts and storm clouds, it tingles to the touch.",
+ "weight": "430 g",
+ "volume": "750 ml",
+ "price": "50 USD",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [
+ "jolt",
+ "windstrike",
+ "windrun",
+ "storm_hammer",
+ "lightning_bolt",
+ "lightning_blast",
+ "storm_condense_water",
+ "storm_condense_clean_water"
+ ]
+ }
+ },
+ {
+ "id": "generic_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Nondescript Spellbook", "str_pl": "copies of Nondescript Spellbook" },
+ "//": "1 technomancer, 1 earthshaper, 1 classless spell",
+ "description": "A small composition notebook, containing spells created by a novice magician.",
+ "weight": "355 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "magenta",
+ "use_action": { "type": "learn_spell", "spells": [ "seismic_stomp", "create_atomic_lamp", "ethereal_grasp" ] }
+ },
+ {
+ "id": "light_manipulation_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Of Light and Falsehoods", "str_pl": "copies of Of Light and Falsehoods" },
+ "//": "3 technomancer, 4 classless spell",
+ "description": "A small white book, it subtly amplifies the ambient light around it.",
+ "weight": "430 g",
+ "volume": "750 ml",
+ "price": "50 USD",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [
+ "dark_sight",
+ "blinding_flash",
+ "obfuscated_body",
+ "create_atomic_light",
+ "mirror_image",
+ "invisibility",
+ "holographic_transposition"
+ ]
+ }
+ },
+ {
+ "id": "biomancer_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Tome of Flesh", "str_pl": "copies of The Tome of Flesh" },
+ "//": "6 Biomancer spells",
+ "description": "A small tome, seemingly covered in tanned human skin.",
+ "weight": "355 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "red",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [ "vicious_tentacle", "bio_grotesque", "bio_acidicspray", "bio_fleshpouch", "bio_bonespear", "bio_create_acid" ]
+ }
+ },
+ {
+ "id": "druid_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Book of Trees", "str_pl": "copies of The Book of Trees" },
+ "//": "4 Druid spells",
+ "description": "A bark covered book.",
+ "weight": "355 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "green",
+ "use_action": { "type": "learn_spell", "spells": [ "druid_woodshaft", "druid_veggrasp", "druid_rootstrike", "druid_naturebow1" ] }
+ },
+ {
+ "id": "recovery_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Utility of Mana as an Energy Source", "str_pl": "copies of The Utility of Mana as an Energy Source" },
+ "description": "This book details spells that use your mana to recover various physiological effects.",
+ "//": "1 technomancer, 2 animist, 1 druid, 1 earthshaper spell",
+ "weight": "728 g",
+ "volume": "3 L",
+ "symbol": "?",
+ "color": "light_blue",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [ "recover_mana", "recover_bionic_power", "recover_pain", "recover_fatigue", "recover_stamina" ]
+ }
+ },
+ {
+ "id": "magus_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Tome of The Battle Mage", "str_pl": "copies of The Tome of The Battle Mage" },
+ "//": "3 Magus spells",
+ "description": "Your standard wizardy looking spellbook, filled with Magus combat spells. You sure lucked out!",
+ "weight": "434 g",
+ "volume": "750 ml",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "magus_mana_beam", "magus_mana_bolt", "magus_mana_blast" ] }
+ },
+ {
+ "id": "eshaper_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Tome of the Hollow Earth", "str_pl": "copies of The Tome of the Hollow Earth" },
+ "//": "4 earthshaper spells",
+ "description": "This large dusty spellbook seems perpetually, well, dusty. It contains the power of the earth.",
+ "weight": "483 g",
+ "volume": "825 ml",
+ "symbol": "?",
+ "color": "brown",
+ "use_action": {
+ "type": "learn_spell",
+ "spells": [ "eshaper_rockbolt", "eshaper_shardspray", "eshaper_piercing_bolt", "eshaper_shardstorm" ]
+ }
+ },
+ {
+ "id": "magus_spellbook_move",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Tome of Magical Movement", "str_pl": "copies of The Tome of Magical Movement" },
+ "//": "3 Magus spells",
+ "description": "This small lightweight book seems to almost not entirely exist, let's say it 97% does. It contains Magus spells focused on movement.",
+ "weight": "231 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "phase_door", "magus_escape", "magus_haste" ] }
+ },
+ {
+ "id": "summon_scroll_smudged",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Smudged Scroll" },
+ "//": "Druid spell",
+ "description": "This looks like someone was designing a new spell, but spilled a mug of coffee on it and crumpled it up in anger. You can tell that it will definitely cast something, but you can't be sure that it will work very well.",
+ "weight": "129 g",
+ "volume": "100 ml",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_bear" ] }
+ },
+ {
+ "id": "summon_undead_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Necromantic Minions for Dummies", "str_pl": "copies of Necromantic Minions for Dummies" },
+ "//": "3 Animist spells",
+ "description": "This book details various ways of summoning an undead minion to fight for you. They all appear to disappear after a short time, crumbling to dust.",
+ "weight": "788 g",
+ "volume": "2250 ml",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "summon_zombie", "summon_skeleton", "summon_decayed_pouncer" ] }
+ },
+ {
+ "id": "techno_fundamentals",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Fundamentals of Technomancy", "str_pl": "copies of Fundamentals of Technomancy" },
+ "//": "3 Technomancer spells",
+ "description": "This thick manual instructs the spellcaster on manipulating and empowering various forms of matter and energy.",
+ "weight": "258 g",
+ "volume": "750 ml",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "synaptic_stimulation", "animated_blade", "mirror_image" ] }
+ },
+ {
+ "id": "techno_idiots",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Complete Idiot's Guide to Technomancy", "str_pl": "copies of Complete Idiot's Guide to Technomancy" },
+ "description": "This colorful guide, full of diagrams and cartoons, teaches a couple of very basic Technomancy spells for the not-so-bright pupils.",
+ "//": "2 Technomancer spells",
+ "weight": "211 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "taze", "quantum_tunnel_lesser" ] }
+ },
+ {
+ "id": "techno_em",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": {
+ "str": "Technomancy and the Electromagnetic Spectrum",
+ "str_pl": "copies of Technomancy and the Electromagnetic Spectrum"
+ },
+ "//": "2 Technomancer spells",
+ "description": "This lab reference material book is thick and overflowing with information on combining magic with EM radiation.",
+ "weight": "284 g",
+ "volume": "1 L",
+ "symbol": "?",
+ "color": "light_gray",
+ "use_action": { "type": "learn_spell", "spells": [ "taze", "laze" ] }
+ },
+ {
+ "id": "translocate_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Geospatial Systems: The Lie Of Linearity", "str_pl": "copies of Geospatial Systems: The Lie Of Linearity" },
+ "//": "1 classless spell",
+ "description": "This book outlines in great detail how time and space are wibbly-wobbly and non-Euclidean. It also appears to have a dozen different coordinate systems that it uses nearly interchangeably, which makes it hard to follow. There's lots of jargon, but with intense study you can probably learn a thing or two about portals.",
+ "weight": "1200 g",
+ "volume": "2500 ml",
+ "symbol": "?",
+ "color": "light_blue",
+ "use_action": { "type": "learn_spell", "spells": [ "translocate_self" ] }
+ },
+ {
+ "id": "stat_up_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "Transcendence of the Human Condition", "str_pl": "copies of Transcendence of the Human Condition" },
+ "//": "4 Magus spells",
+ "description": "The Human is the only creature that seeks to improve himself. This study examines different spells that can heighten various senses temporarily, in hopes to discover a more permanent solution.",
+ "weight": "1300 g",
+ "volume": "2500 ml",
+ "symbol": "?",
+ "color": "yellow",
+ "use_action": { "type": "learn_spell", "spells": [ "cats_grace", "ogres_strength", "foxs_cunning", "eagles_sight" ] }
+ },
+ {
+ "id": "novice_techno_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Novice Technomancer's Spellbook", "str_pl": "copies of The Novice Technomancer's Spellbook" },
+ "//": "2 basic technomancer spells",
+ "description": "A fairly simplistic looking technomancer's spellbook containing just a couple simple technomancy spells.",
+ "weight": "256 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "green",
+ "use_action": { "type": "learn_spell", "spells": [ "synaptic_stimulation", "taze" ] },
+ "looks_like": "techno_idiots"
+ },
+ {
+ "id": "novice_storm_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Novice Stormshaper's Spellbook", "str_pl": "copies of The Novice Stormshaper's Spellbook" },
+ "//": "2 basic stormshaper spells",
+ "description": "A fairly simplistic looking stormshaper's spellbook containing just a couple simple stormshaping spells.",
+ "weight": "256 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "blue",
+ "use_action": { "type": "learn_spell", "spells": [ "windrun", "jolt" ] }
+ },
+ {
+ "id": "novice_earth_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Novice Earthshaper's Spellbook", "str_pl": "copies of The Novice Earthshaper's Spellbook" },
+ "//": "2 basic earthshaper spells",
+ "description": "A fairly simplistic looking earthshaper's spellbook containing just a couple simple earthshaping spells.",
+ "weight": "256 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "brown",
+ "use_action": { "type": "learn_spell", "spells": [ "stonefist", "eshaper_rockbolt" ] }
+ },
+ {
+ "id": "novice_kelvin_spellbook",
+ "type": "GENERIC",
+ "category": "spellbooks",
+ "name": { "str": "The Novice Kelvinist's Spellbook", "str_pl": "copies of The Novice Kelvinist's Spellbook" },
+ "//": "4 basic kelvinist spells: 2 ice and 2 fire",
+ "description": "A fairly simplistic looking kelvinist's spellbook containing just a couple simple spells from both fire and ice.",
+ "weight": "260 g",
+ "volume": "500 ml",
+ "symbol": "?",
+ "color": "light_blue",
+ "use_action": { "type": "learn_spell", "spells": [ "chilling_touch", "glide_ice", "create_lighter", "point_flare" ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/items/tools.json b/data/mods/Magical_Nights/items/tools.json
new file mode 100644
index 000000000000..6b4a91dc2c05
--- /dev/null
+++ b/data/mods/Magical_Nights/items/tools.json
@@ -0,0 +1,178 @@
+[
+ {
+ "id": "cauldron_demon_chitin",
+ "type": "CONTAINER",
+ "category": "other",
+ "name": { "str": "cauldron of purification", "str_pl": "cauldrons of purification" },
+ "description": "This cauldron made of demon spider chitin seems to absorb the light. It will hold 16 liters of material and will absorb poisons from it. It may have other properties that require discovery.",
+ "weight": "1424 g",
+ "volume": "20 L",
+ "price": 2000,
+ "to_hit": -1,
+ "looks_like": "clay_hydria",
+ "bashing": 1,
+ "material": "demon_chitin",
+ "symbol": ")",
+ "color": "red",
+ "contains": "16 L",
+ "//": "I went ahead and gave this a level of 2 for when magical mutagens become a thing as I figured dragonblood for instance should need different tools than making alpha mutagen.",
+ "watertight": true,
+ "qualities": [ [ "COOK", 3 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ], [ "MAGIC_MUTAGEN", 2 ] ],
+ "use_action": "HEAT_FOOD"
+ },
+ {
+ "id": "demon_forge",
+ "type": "TOOL",
+ "name": { "str": "demon forge" },
+ "description": "This is a portable version of the charcoal forge that is magically enhanced and fortified with demon spider chitin in order to be able to resmelt magical metals into their workable ingot form.",
+ "weight": "10 kg",
+ "volume": "8 L",
+ "price": "2 kUSD",
+ "to_hit": -2,
+ "bashing": 9,
+ "material": "demon_chitin",
+ "symbol": ";",
+ "color": "red",
+ "ammo": "alumentum",
+ "sub": "forge",
+ "max_charges": 500,
+ "flags": [ "ALLOWS_REMOTE_USE" ]
+ },
+ {
+ "type": "GENERIC",
+ "id": "fireproof_mortar",
+ "symbol": "%",
+ "color": "light_red",
+ "name": { "str_sp": "fireproof mortar" },
+ "description": "Some alchemical mortar, ready to be used in building projects expecting temperatures on par with dragonbreath.",
+ "category": "spare_parts",
+ "container": "bag_canvas",
+ "price": "5 kUSD",
+ "material": "powder_nonflam",
+ "weight": "2340 g",
+ "volume": "1 L",
+ "bashing": 4
+ },
+ {
+ "id": "copper_infuser",
+ "copy-from": "copper_bracelet",
+ "type": "ARMOR",
+ "qualities": [ [ "MANA_INFUSE", 1 ] ],
+ "name": { "str": "copper infusion bracelet" },
+ "description": "This bracelet has runes engraved on it. You sense a faint air of mysticism when you look at it. It would be useful for imbuing mana into material."
+ },
+ {
+ "id": "silver_infuser",
+ "copy-from": "silver_bracelet",
+ "type": "ARMOR",
+ "qualities": [ [ "MANA_INFUSE", 2 ] ],
+ "name": { "str": "silver infusion bracelet" },
+ "description": "This bracelet has runes engraved on it. You sense a faint air of mysticism when you look at it. It would be useful for imbuing mana into material."
+ },
+ {
+ "id": "copper_circlet",
+ "type": "ARMOR",
+ "category": "armor",
+ "name": { "str": "copper circlet" },
+ "description": "A wooden band with copper trimmings to be worn on the head. Touching your temples with it on makes you feel very calm.",
+ "weight": "700 g",
+ "volume": "600ml",
+ "price": "15 USD",
+ "price_postapoc": "1 USD",
+ "material": [ "copper", "wood" ],
+ "symbol": "[",
+ "color": "brown",
+ "covers": [ "head" ],
+ "coverage": 5,
+ "encumbrance": 1,
+ "warmth": 0,
+ "material_thickness": 1,
+ "flags": [ "SKINTIGHT", "ONLY_ONE", "COMPACT", "POWERARMOR_COMPATIBLE" ],
+ "qualities": [ [ "MANA_FOCUS", 1 ] ]
+ },
+ {
+ "id": "sewing_kit",
+ "name": "sewing kit",
+ "copy-from": "sewing_kit",
+ "type": "TOOL",
+ "use_action": {
+ "type": "repair_item",
+ "item_action_type": "repair_fabric",
+ "materials": [
+ "cotton",
+ "leather",
+ "nylon",
+ "wool",
+ "fur",
+ "faux_fur",
+ "nomex",
+ "kevlar",
+ "gutskin",
+ "demon_chitin",
+ "black_dragon_hide"
+ ],
+ "skill": "tailor",
+ "tool_quality": 0,
+ "cost_scaling": 0.1,
+ "move_cost": 1000
+ }
+ },
+ {
+ "id": "tailors_kit",
+ "name": "tailor's kit",
+ "copy-from": "tailors_kit",
+ "type": "TOOL",
+ "use_action": [
+ {
+ "type": "repair_item",
+ "item_action_type": "repair_fabric",
+ "materials": [
+ "cotton",
+ "leather",
+ "nylon",
+ "wool",
+ "fur",
+ "faux_fur",
+ "nomex",
+ "kevlar",
+ "neoprene",
+ "gutskin",
+ "black_dragon_hide",
+ "demon_chitin"
+ ],
+ "skill": "tailor",
+ "tool_quality": 1,
+ "cost_scaling": 0.1,
+ "move_cost": 800
+ },
+ {
+ "type": "sew_advanced",
+ "materials": [
+ "cotton",
+ "leather",
+ "nylon",
+ "wool",
+ "fur",
+ "faux_fur",
+ "nomex",
+ "kevlar",
+ "neoprene",
+ "gutskin",
+ "plastic",
+ "kevlar_rigid"
+ ],
+ "skill": "tailor",
+ "clothing_mods": [
+ "leather_padded",
+ "steel_padded",
+ "kevlar_padded",
+ "furred",
+ "wooled",
+ "owlbear_furred",
+ "demonchitin_padded",
+ "blackdragon_coated"
+ ]
+ }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/items/vehicle/frames.json b/data/mods/Magical_Nights/items/vehicle/frames.json
new file mode 100644
index 000000000000..f0b8edf73350
--- /dev/null
+++ b/data/mods/Magical_Nights/items/vehicle/frames.json
@@ -0,0 +1,25 @@
+[
+ {
+ "type": "GENERIC",
+ "id": "fold_orichalcum_frame",
+ "name": "foldable orichalcum frame",
+ "copy-from": "foldframe",
+ "description": "A folding frame made of orichalcum pipes. Not as light as aluminum, but significantly sturdier.",
+ "weight": "10 kg",
+ "color": "yellow",
+ "material": [ "orichalcum_metal" ],
+ "price": "100 USD"
+ },
+ {
+ "type": "GENERIC",
+ "id": "orichalcum_frame",
+ "name": "orichalcum frame",
+ "symbol": "]",
+ "description": "A frame made of orichalcum. Significantly sturdier than steel, but also much more expensive.",
+ "volume": "20 L",
+ "weight": "100 kg",
+ "color": "yellow",
+ "material": [ "orichalcum_metal" ],
+ "price": "8 kUSD"
+ }
+]
diff --git a/data/mods/Magical_Nights/items/vehicle/vehicle_parts.json b/data/mods/Magical_Nights/items/vehicle/vehicle_parts.json
new file mode 100644
index 000000000000..05a71fac804e
--- /dev/null
+++ b/data/mods/Magical_Nights/items/vehicle/vehicle_parts.json
@@ -0,0 +1,18 @@
+[
+ {
+ "type": "vehicle_part",
+ "id": "bulette_plate",
+ "name": "bulette plating",
+ "symbol": ")",
+ "color": "light_gray",
+ "broken_symbol": ")",
+ "broken_color": "light_gray",
+ "durability": 800,
+ "item": "bulette_plate",
+ "location": "armor",
+ "flags": [ "ARMOR" ],
+ "breaks_into": [ { "item": "leather", "count": [ 1, 2 ] } ],
+ "damage_reduction": { "all": 12 },
+ "requirements": { "install": { "skills": [ [ "mechanics", 0 ] ], "time": "1600 s", "using": [ [ "rope_natural", 2 ] ] } }
+ }
+]
diff --git a/data/mods/Magical_Nights/lore.md b/data/mods/Magical_Nights/lore.md
new file mode 100644
index 000000000000..80deec470f09
--- /dev/null
+++ b/data/mods/Magical_Nights/lore.md
@@ -0,0 +1,35 @@
+# History
+Magic has been around for longer than written word, though of course it was a major boon to it. Magic, to an extent, even predates language itself. However, naturally, it was only with the development of language that magic began to refine itself past its most base levels.
+
+Throughout much of ancient history, magic was present and powerful. The ancient Greeks oft saw magic all around them, and not just metaphorically. The term magic itself, alongside the idea of mages, comes from Latin. The ancient Sumerians had their rituals, and so did the Egyptians. Japan has its many Kamis and yokai, China has its Wuism. Magic was everywhere.
+
+However, there is of course one major period that one thinks of when they think of magic. Unfortunately, this was also the last great period of magic historically. The Medeival Era was one of the greatest heights that magic reached, and yet also the great Cataclysmic downfall of it. It contains such wonderous figures as Merlin himself, and it is the time period that so many stories about our art take place in. Magic was capable of accomplishing so much. Yet the end of the Middle Ages also brought with it the end of widespread magic. Persecution against our art reached new heights. The Church condemned us, brought on the witch hunts. So much was lost, including the strength of magic itself. Any surviving mages either went in seclusion themselves, or hid their practicing of the arts carefully. However, the stronger of them felt the very strength of magic slipping away and waning.
+
+Following the medieval era, magic was a pale ghost of its former self. With mages being so secretive, advancements came slower than had been seen in centuries. What could once be accomplished with ease now took immense strength and control over mana. The New World, it was hoped, might finally bring freedom and safety from persecution. In a land of new opportunities, surely there would be new opportunities for magic users!
+
+Our hopes were brutally smashed against a rock, then set alight while they were gasping due to their collapsed lungs, and then tossed in a hole to suffer and wish for death to take them already while crows pecked at their eyes and dogs gnawed at what remained of their flesh.
+
+Yet, once the dust had settled from Salem, some brave souls remained despite the deaths of their peers. Some came over on the ships carrying filthy masses from the Old to the New. Our hopes would not come to fruition for a couple centuries, but we were more than willing to wait. Especially those of us who had seen what the world was like a few centuries ago.
+
+In the modern era, we have finally in a sense achieved our goal. The smolder of the Church has long since cooled to less menacing embers. More importantly, the Neopagans have revived many of the long-dead and dormant traditions, though naturally with their own flair and some misconceptions/innacuracies from filling in the spots that were burned out. There has been a sort of resurgence of practicing magic amongst some, namely the Wiccans. Especially important is the fact that the Church simply hasn't as much a sway over the common people's lives as it once held, especially given the rise of non-believers.
+
+Now, we come to present-day. Something has gone royally wrong with the veil between worlds. Demons and netherspawn certainly came across in the olden days, but not in **these numbers**. *Something* has infected and taken over a majority of humans. Fortunately, this world is not entirely lost. For with this apparent tearing of the veil, **an incredible resurgence of the magic itself has arisen!** Magic has returned in all of its glory, leaving any who has the potential with a very powerful tool to defend themselves against the horrors of this world. Including the appearance of magical fauna once thought extinct, or merely fantastical. Only time will tell whether this is a sign of a new golden age of magic, but I certainly hope it is.
+
+# Practice
+
+The ability to practice magic has always been uncommon. Even during the Middle Ages, it was impressive and uncommon to have any real ability for magic. A truly powerful mage, rather than a hedge mage, was something a family was proud of. Mages were very often highly respected members of society, whether they were awed or feared. Mages have only gotten rarer, though there seemed to be a bit of an uptick around the time of Neopagan revivals.
+
+Magic practitioners were and still are often divided into distinct classes and schools. Especially in the olden times, many mages specialized in but a single school of magic. However, as time has gone on magic users have gotten to be more and more jack-of-all-trades in their repetoires. It is notable, however, that naturally the lesser in ability a mage was, the more likely they were to not specialize in a single school. Jack-of-all-trades being a master of none is irrelevant when one couldn't be a master of anything anyway. Better to be well-rounded in your lesser spells when they are all you can learn.
+
+Naturally, mages desired companionship by other mages, especially so following persecution. Druid Circles and Covens are natural examples, of course. These groups also often helped contribute to magical advancements that would simply be infeasible to be made on one's own. And, of course, for casting certain spells.
+
+### Class Characteristics
+
+- Magus: Force and Waves. This can be described as Time, Light, Gravity, and Force. Magus spells are the most versatile of the classes, and it also usually has the more difficult to learn spells.
+- Animist: Spirits. As Magus is the physical universe, animist is the metaphysical. Usually misunderstood and as such has a bit of a stigma throughout history as necromancers. This class also features blood magic, which is another reason it has a stigma.
+- Kelvinist: Heat and Cold spells. Can also produce light to a lesser degree.
+- Stormshaper: Wind, weather, and electricity. Most of these spells are really loud.
+- Technomancer: Invention. This usually manifests as spells that summon arms and armor, holograms, tools, and buffs that focus on the human condition. The Technomancer rune is also uniquely versatile, allowing for much wider ability for magic to work with mundane inventions. Technomancer became a lot more popular with the invention of electricity, as it has a finer control of electricity than stormshaper, though it does not have the power.
+- Earthshaper: Stone, dirt, geography, things to do with the earth. The spells often focus on melee and defense. Lava is a high-tier earthshaper thing as well. This class features spells that use stamina as their energy source.
+- Biomancer: Flesh mage. Manipulating the caster's flesh is easier but higher tier spells can manipulate others' flesh. Features Acid.
+- Druid: Plant mage. Communes with nature. The typical "druid" of old is usually a combination of this class and Earthshaper. Has a slight secondary affinity with water.
diff --git a/data/mods/Magical_Nights/magic_balance.md b/data/mods/Magical_Nights/magic_balance.md
new file mode 100644
index 000000000000..3dee978fb674
--- /dev/null
+++ b/data/mods/Magical_Nights/magic_balance.md
@@ -0,0 +1,57 @@
+# Spells
+Spells are incredibly versatile, and can range wildly depending on the JSON values that are assigned to them. As such, spells can be said to reside in various "tiers" that are based on their stats. The tier of spell is not listed in game, but can be derived based on several factors.
+
+### Difficulty
+This is the most obvious way to determine a spell's tier, but not in the way you might expect. A spell with a lower difficulty means the spell is easier to cast, indirectly making it more powerful. Most of the time the difficulty should scale with the tier of the spell, making this rubric a little moot, but it is important to remember that difficulty is a major factor in the spell's failure chance.
+
+### Max Level
+Max level both enables the spell difficulty to continue to reduce at higher levels and benefit from continued scaling. A spell with a very small max level (below 10) would have its tier negatively impacted. Max levels above 30 will require significant training in order to reach, and only grows exponentially from there, so be wary of what you expect from a player's spell level.
+
+### Attack Stats
+The higher the damage a spell can deal, the higher its tier. This is true for area of effect, duration and range. Most tier 0 and 1 spells don't ever deal more than 150 damage at max level without severe costs.
+
+### Effect
+The effect is the main part of the spell, and should be treated as such when balancing it. Entwined with that is the effect_str, which directly affects the effect in various ways. For attack spells, no effect_str wouldn't have an effect on the tier, while adding a "dazed" effect causes the spell's power to skyrocket.
+
+### Energy Source
+Energy source is generally related to the class that is assigned to the spell. Stamina would be the type of thing that increases the spell's tier by a significant margin, due to the ease of recovering stamina. Bionic power is relegated to Technomancer, and HP is featured in the Animist class. If spells with spell classes that are not Animist use HP, their tier is automatically higher than if they were to use Mana, which is the normal energy source for spells.
+
+### Casting Time
+There are several different ranges of casting times. These include: Fast combat spell (0 - 300 moves) Slow combat spell (300 - 1000 moves) and noncombat spell (longer than 1000 moves) The tier of a spell is quite heavily dependant on its ability to be used quickly in high-pressure situations; so the longer it takes to cast, the more relaxed the tier of the spell can be. A spell would be a very high tier indeed if it took no time to cast; do not do this unless it has severe restrictions.
+
+### Energy Cost
+Mana pools can vary, but it is good to balance around the idea that the caster has about 2000 mana to work with. In Magiclysm, spells should be a supplement to your other combat options. This means that at low levels and low tiers, a mage will spend all or nearly all of his mana to deal with low threats: 2-3 zombies or a fat zombie, etc. The tier of a spell will be a good guide to what kind of a threat a mage can conquer at a given level of spell.
+
+### Fields
+Fields are currently not very flexible; their duration is fixed, and they do not drift unless they are coded to do so. Most fields would bump the tier level, depending on the field, chance, intensity, etc. Some fields may not bump the tier as they are mostly aesthetic (blood, gore, minor heat, etc)
+
+### Damage Type
+damage type is a key factor in attack spells. Spells that do force damage ignore all armor, and spells that deal cutting, bashing or piercing get blocked by armor. The other damage types get blocked by their associated damage resistance. Until I rewrite the damage function, heat damage also catches the target on fire, cold gets blocked by fire resistance, and the NOBREATHE flag blocks bio damage.
+
+### Valid targets
+if your spell is an attack spell and it ignores yourself or allies, it is automatically better than one that does not. If you can target the ground with an attack spell that has aoe, it means you can target out of line of sight.
+
+## Tier Examples:
+
+### Tier 0
+Any spell a novice mage would learn as he is learning magic.
+Magic missile: low damage, caps out at 20. however, is force damage so ignores armor, and is target_attack so goes through walls. Has a respectable range and a quick casting time.
+Finger firelighter: Useful utility spell, but doesn't really do anything other than allow you to light a fire for the duration of the spell. Lights your square, but has a fairly short duration so does not allow you to read anything with it.
+Necrotic Gaze: Does bio damage, which zombies are immune to, and is fairly short range. however, has a fairly high damage at higher levels. Also uses hp to cast, and is fairly cheap.
+
+### Tier 1
+A mage is starting to come into his own and use more difficult spells.
+Point Flare: somewhat slow for an attack spell, it makes up for its large single-point damage and ability to target through walls. Its casting cost is also fairly low for its damage.
+Phase Door: A very useful spell to get you out of immediate danger, but can backfire because it teleports you randomly. Has a fairly high difficulty so its failure chance is high at low levels. Has a quick casting speed so it's able to be used in dire situations, but won't get you very far.
+Lightning Bolt: This spell deals damage to all targets in a line, and a good amount of it, too. Its range is fairly short for a ranged spell, but it is quite cheap for a damaging spell. This spell has the rare attribute of having its casting time decrease as its spell level goes up, but has the drawback of being a difficulty of 6 and the LOUD flag. Even though its max damage is quite high, the level required to get there is also quite high.
+
+### Tier 2
+These spells are fairly specialized, even in their own class.
+Cat's Grace: Along with other similar stat-boosting magus spells, this spell boosts your dexterity stat by 4 for a fairly good duration. It makes up for it by being a slow spell to cast, as you can't really cast it in combat without some preparation. It is also a concentration spell, so focus is a key factor in its failure chance, in addition to being a difficulty 5 spell. The spell can only be cast on the caster, but its max duration is quite high.
+Animated Blade: This is a summon spell, and summon spells are generally more powerful than their direct attack cousins by the mere fact that they not only deal damage but absorb damage incoming from monsters. This spell features the animated blade monster, which dishes out a lot of damage; and higher levels in the spell can summon more of them. The spell is very cheap and fast for something that could summon monsters like this, so its difficulty and tier are much higher, and its duration suffers.
+Fireball: This is an iconic spell from many Fantasies, but it earns its place at tier 2 by having a large area of effect and a good damage output. Its casting time is just on the edge of being able to be cast easily in combat, and its energy cost is fairly low, even while its damage is quite good in combination with its area of effect. The range of this spell is also quite high, making this spell a favorite of kelvinist mages, even as its difficulty is only 4.
+
+### Tier 3
+These spells are even more fantastic or highly specialized.
+Translocate Self: This spell has a very niche but powerful spell effect. Even though its casting time precludes it from being cast in combat, its effect allows you to teleport anywhere you created a translocator gate, making it a very useful utility spell. In addition, it is classless, making it even more versatile, useful, and powerful.
+Mana Blast: This spell is like fireball, but its damage is even higher, and in addition does force damage and as such ignores armor. That puts this spell squarely in tier 3 alone.
diff --git a/data/mods/Magical_Nights/martialarts.json b/data/mods/Magical_Nights/martialarts.json
new file mode 100644
index 000000000000..9dadb0da2e96
--- /dev/null
+++ b/data/mods/Magical_Nights/martialarts.json
@@ -0,0 +1,51 @@
+[
+ {
+ "id": "style_eskrima",
+ "copy-from": "style_eskrima",
+ "type": "martial_art",
+ "name": "Eskrima",
+ "extend": { "weapons": [ "mjolnir", "gram" ] }
+ },
+ {
+ "id": "style_fencing",
+ "copy-from": "style_fencing",
+ "type": "martial_art",
+ "name": "Fencing",
+ "extend": { "weapons": [ "cavalry_sabre_plus_one", "cavalry_sabre_plus_two", "broadsword_plus_one", "broadsword_plus_two" ] }
+ },
+ {
+ "id": "style_medievalpole",
+ "copy-from": "style_medievalpole",
+ "type": "martial_art",
+ "name": "Fior Di Battaglia",
+ "extend": { "weapons": [ "rune_technomancer_weapon" ] }
+ },
+ {
+ "id": "style_krav_maga",
+ "copy-from": "style_krav_maga",
+ "type": "martial_art",
+ "name": "Krav Maga",
+ "extend": { "weapons": [ "gram" ] }
+ },
+ {
+ "id": "style_swordsmanship",
+ "copy-from": "style_swordsmanship",
+ "type": "martial_art",
+ "name": "Medieval Swordsmanship",
+ "extend": { "weapons": [ "rune_kelvinist_weapon", "gunblade", "gram" ] }
+ },
+ {
+ "id": "style_ninjutsu",
+ "copy-from": "style_ninjutsu",
+ "type": "martial_art",
+ "name": "Ninjutsu",
+ "extend": { "weapons": [ "nodachi_plus_one", "nodachi_plus_two", "gunblade" ] }
+ },
+ {
+ "id": "style_silat",
+ "copy-from": "style_silat",
+ "type": "martial_art",
+ "name": "Silat",
+ "extend": { "weapons": [ "scimitar", "scimitar_plus_one", "scimitar_plus_two" ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/materials.json b/data/mods/Magical_Nights/materials.json
new file mode 100644
index 000000000000..c93ec0196645
--- /dev/null
+++ b/data/mods/Magical_Nights/materials.json
@@ -0,0 +1,151 @@
+[
+ {
+ "type": "material",
+ "id": "arcane_skin",
+ "name": "Arcane Skin",
+ "density": 38,
+ "specific_heat_liquid": 0.82,
+ "specific_heat_solid": 0.45,
+ "latent_heat": 273,
+ "soft": true,
+ "reinforces": true,
+ "bash_resist": 14,
+ "cut_resist": 18,
+ "bullet_resist": 14,
+ "acid_resist": 4,
+ "fire_resist": 20,
+ "elec_resist": 2,
+ "chip_resist": 15,
+ "dmg_adj": [ "scratched", "cut", "shredded", "tattered" ],
+ "bash_dmg_verb": "ripped",
+ "cut_dmg_verb": "sliced"
+ },
+ {
+ "type": "material",
+ "id": "black_dragon_hide",
+ "name": "Black Dragon Hide",
+ "density": 20,
+ "specific_heat_liquid": 4.186,
+ "specific_heat_solid": 2.108,
+ "latent_heat": 333,
+ "bash_resist": 5,
+ "cut_resist": 8,
+ "bullet_resist": 6,
+ "acid_resist": 40,
+ "fire_resist": 1,
+ "elec_resist": 1,
+ "chip_resist": 30,
+ "reinforces": true,
+ "repaired_with": "dragon_black_scale",
+ "dmg_adj": [ "scratched", "cut", "cracked", "shattered" ],
+ "bash_dmg_verb": "cracked",
+ "cut_dmg_verb": "chipped"
+ },
+ {
+ "type": "material",
+ "id": "demon_chitin",
+ "name": "Demon Chitin",
+ "density": 15,
+ "specific_heat_liquid": 4.186,
+ "specific_heat_solid": 2.108,
+ "latent_heat": 333,
+ "bash_resist": 1,
+ "cut_resist": 10,
+ "bullet_resist": 8,
+ "acid_resist": 3,
+ "fire_resist": 18,
+ "elec_resist": 2,
+ "chip_resist": 10,
+ "repaired_with": "demon_chitin_piece",
+ "salvaged_into": "demon_chitin_piece",
+ "dmg_adj": [ "scratched", "cut", "cracked", "shattered" ],
+ "bash_dmg_verb": "cracked",
+ "cut_dmg_verb": "chipped",
+ "burn_data": [
+ { "fuel": 0, "smoke": 1, "burn": 1, "volume_per_turn": "1250 ml" },
+ { "fuel": 1, "smoke": 3, "burn": 1 },
+ { "fuel": 1, "smoke": 5, "burn": 5 }
+ ]
+ },
+ {
+ "type": "material",
+ "id": "orichalcum_metal",
+ "name": "Orichalcum",
+ "density": 40,
+ "bash_resist": 13,
+ "specific_heat_liquid": 0.82,
+ "specific_heat_solid": 0.45,
+ "latent_heat": 273,
+ "cut_resist": 20,
+ "bullet_resist": 16,
+ "acid_resist": 7,
+ "fire_resist": 3,
+ "elec_resist": 0,
+ "chip_resist": 40,
+ "repaired_with": "orichalcum_ingot",
+ "dmg_adj": [ "marked", "dented", "smashed", "shattered" ],
+ "bash_dmg_verb": "dented",
+ "cut_dmg_verb": "scratched",
+ "burn_products": [ [ "scrap_bronze", 1 ] ],
+ "compacts_into": [ "orichalcum_lump", "orichalcum_sliver" ]
+ },
+ {
+ "type": "material",
+ "id": "concentrated_mana",
+ "name": "Concentrated Mana",
+ "density": 2,
+ "bash_resist": 8,
+ "cut_resist": 13,
+ "bullet_resist": 7,
+ "acid_resist": 12,
+ "fire_resist": 20,
+ "elec_resist": 20,
+ "chip_resist": 15,
+ "dmg_adj": [ "scratched", "cut", "shredded", "tattered" ],
+ "bash_dmg_verb": "ripped",
+ "cut_dmg_verb": "sliced"
+ },
+ {
+ "type": "material",
+ "id": "dragon_bone",
+ "name": "Dragon Bone",
+ "density": 7,
+ "specific_heat_liquid": 1.2,
+ "specific_heat_solid": 1.2,
+ "latent_heat": 200,
+ "reinforces": true,
+ "bash_resist": 12,
+ "cut_resist": 14,
+ "bullet_resist": 12,
+ "acid_resist": 10,
+ "fire_resist": 8,
+ "elec_resist": 2,
+ "chip_resist": 10,
+ "wind_resist": 90,
+ "repaired_with": "dragon_bone",
+ "salvaged_into": "shard_dragon_bone",
+ "dmg_adj": [ "scratched", "cut", "cracked", "shattered" ],
+ "bash_dmg_verb": "cracked",
+ "cut_dmg_verb": "chipped"
+ },
+ {
+ "type": "material",
+ "id": "mithril_metal",
+ "name": "Mithril",
+ "density": 13,
+ "specific_heat_liquid": 0.82,
+ "specific_heat_solid": 0.45,
+ "latent_heat": 273,
+ "chip_resist": 40,
+ "repaired_with": "mithril_ingot",
+ "dmg_adj": [ "marked", "dented", "smashed", "shattered" ],
+ "bash_dmg_verb": "dented",
+ "cut_dmg_verb": "scratched",
+ "bash_resist": 13,
+ "cut_resist": 20,
+ "acid_resist": 10,
+ "fire_resist": 10,
+ "bullet_resist": 16,
+ "elec_resist": 10
+ }
+]
diff --git a/data/mods/Magical_Nights/mod_tileset.json b/data/mods/Magical_Nights/mod_tileset.json
new file mode 100644
index 000000000000..0c04e68c8f2f
--- /dev/null
+++ b/data/mods/Magical_Nights/mod_tileset.json
@@ -0,0 +1,1478 @@
+[
+ {
+ "type": "mod_tileset",
+ "compatibility": [ "UNDEAD_PEOPLE_BASE", "UNDEAD_PEOPLE", "MshockRealXotto", "MSX++DEAD_PEOPLE" ],
+ "tiles-new": [
+ {
+ "file": "MagicalNights_Misc.png",
+ "tiles": [
+ { "id": "bg_shadow_frog", "fg": 1, "rotates": false },
+ { "id": "bg_shadow_goblin", "fg": 2, "rotates": false },
+ { "id": "bg_shadow_item", "fg": 3, "rotates": false },
+ { "id": "bg_shadow_normal", "fg": 4, "rotates": false },
+ { "id": "overlay_mutation_bio_sneeze_beam", "fg": 5, "rotates": false },
+ { "id": "overlay_mutation_DRAGON_FEET", "fg": 6 },
+ { "id": "overlay_mutation_DRAGON_MAW_BLACK", "fg": 7 },
+ { "id": "overlay_female_mutation_DRAGON_SCALES_BLACK", "fg": 8 },
+ { "id": "overlay_male_mutation_DRAGON_SCALES_BLACK", "fg": 9 },
+ { "id": "overlay_mutation_DRAGON_TAIL", "fg": 10 },
+ { "id": "overlay_mutation_DRAGON_TAIL_SCALED", "fg": 11 },
+ { "id": "overlay_mutation_DRAGON_TALONS_BLACK", "fg": 12, "rotates": false },
+ { "id": "overlay_mutation_DRAGON_WINGS_BLACK", "fg": 13 },
+ { "id": "overlay_mutation_MUZZLE_DRAGON", "fg": 14 },
+ { "id": "overlay_mutation_SCALED_HANDS", "fg": 15, "rotates": false },
+ { "id": "f_null", "fg": 16, "rotates": false },
+ { "id": "mon_null", "fg": 16, "rotates": false },
+ { "id": "null", "fg": 16, "rotates": false },
+ { "id": "t_null", "fg": 16, "rotates": false },
+ { "id": "vp_null", "fg": 16, "rotates": false },
+ { "id": "fd_clairvoyant", "fg": 16, "rotates": false },
+ { "id": "fd_darkness", "fg": 16, "rotates": false },
+ { "id": "fd_fright", "fg": 16, "rotates": false },
+ { "id": "fd_vault_atmosphere", "fg": 16, "rotates": false },
+ { "id": "soul_burn_item", "fg": 16, "rotates": false },
+ {
+ "id": "vp_folding_orichalcum_frame",
+ "fg": 17,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 18 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_cover",
+ "fg": 19,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 20 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_cross",
+ "fg": 21,
+ "rotates": true,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 22 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_horizontal",
+ "fg": 23,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 24 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_horizontal_2",
+ "fg": 25,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 26 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_ne",
+ "fg": 27,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 28 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_nw",
+ "fg": 29,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 30 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_se",
+ "fg": 31,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 32 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_sw",
+ "fg": 33,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 34 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_vertical",
+ "fg": 35,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 36 } ]
+ },
+ {
+ "id": "vp_frame_orichalcum_vertical_2",
+ "fg": 37,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [ { "id": "broken", "fg": 38 } ]
+ }
+ ],
+ "//": "range 1 to 256",
+ "sprite_width": 32,
+ "sprite_height": 32,
+ "sprite_offset_x": 0,
+ "sprite_offset_y": 0
+ },
+ {
+ "file": "MagicalNights_Tiles.png",
+ "tiles": [
+ {
+ "id": "t_dirtfloor",
+ "fg": [
+ { "weight": 1, "sprite": 258 },
+ { "weight": 1, "sprite": 259 },
+ { "weight": 1, "sprite": 260 },
+ { "weight": 1, "sprite": 261 },
+ { "weight": 1, "sprite": 262 }
+ ],
+ "rotates": false
+ },
+ { "id": "f_altar", "fg": 263, "rotates": false },
+ { "id": "f_attunement_altar", "fg": 264, "rotates": false },
+ { "id": "f_demon_forge", "fg": 265 },
+ { "id": "f_magiclysm_translocator_gate", "fg": 266 },
+ {
+ "id": "f_magic_bench",
+ "fg": 267,
+ "rotates": true,
+ "multitile": true,
+ "additional_tiles": [
+ { "id": "center", "fg": 268 },
+ { "id": "corner", "fg": [ 269, 270, 271, 272 ] },
+ { "id": "edge", "fg": [ 273, 274 ] },
+ { "id": "end_piece", "fg": [ 275, 276, 277, 278 ] },
+ { "id": "t_connection", "fg": [ 279, 280, 281, 282 ] },
+ { "id": "unconnected", "fg": [ 283, 283, 283, 283 ] }
+ ]
+ },
+ { "id": "f_magic_circle", "fg": 284, "rotates": false },
+ {
+ "id": [
+ "attunement_altar_NW",
+ "attunement_altar_NE",
+ "attunement_altar_SW",
+ "attunement_altar_SE",
+ "attunement_altar_NW_roof",
+ "attunement_altar_NE_roof",
+ "attunement_altar_SW_roof",
+ "attunement_altar_SE_roof"
+ ],
+ "fg": 285,
+ "rotates": false
+ },
+ {
+ "id": [ "black_dragon_lair_z-0_NW", "black_dragon_lair_z-0_NE", "black_dragon_lair_z-0_SW", "black_dragon_lair_z-0_SE" ],
+ "fg": 286,
+ "rotates": false
+ },
+ {
+ "id": [
+ "black_dragon_lair_z-1_NW",
+ "black_dragon_lair_z-1_NE",
+ "black_dragon_lair_z-1_SW",
+ "black_dragon_lair_z-1_SE",
+ "black_dragon_lair_z-2_NW",
+ "black_dragon_lair_z-2_NE",
+ "black_dragon_lair_z-2_SW",
+ "black_dragon_lair_z-2_SE",
+ "black_dragon_lair_z-3_NW",
+ "black_dragon_lair_z-3_NE",
+ "black_dragon_lair_z-3_SW",
+ "black_dragon_lair_z-3_SE",
+ "black_dragon_lair_z-4_NW",
+ "black_dragon_lair_z-4_NE",
+ "black_dragon_lair_z-4_SW",
+ "black_dragon_lair_z-4_SE"
+ ],
+ "fg": 287,
+ "rotates": false
+ },
+ { "id": [ "demon_spider_lair" ], "fg": 288, "rotates": false },
+ { "id": [ "forest_tomb", "forest_tomb_roof" ], "fg": 289, "rotates": false },
+ { "id": [ "forest_tomb_bottom" ], "fg": 290, "rotates": false },
+ {
+ "id": [
+ "forge_1A",
+ "forge_2A",
+ "forge_3A",
+ "forge_4A",
+ "forge_5A",
+ "forge_1B",
+ "forge_2B",
+ "forge_3B",
+ "forge_4B",
+ "forge_5B"
+ ],
+ "fg": 291,
+ "rotates": false
+ },
+ { "id": [ "goblin_camp" ], "fg": 292, "rotates": false },
+ { "id": [ "magic_cabin" ], "fg": 293, "rotates": false },
+ { "id": [ "magic_shop", "magic_shop_2ndfloor", "magic_shop_roof" ], "fg": 294, "rotates": false },
+ { "id": [ "orc_camp" ], "fg": 295, "rotates": false },
+ { "id": "wizardtower1_ground", "fg": 296, "rotates": false },
+ {
+ "id": "t_dirt_barren",
+ "fg": [
+ { "weight": 40, "sprite": 297 },
+ { "weight": 40, "sprite": 298 },
+ { "weight": 40, "sprite": 299 },
+ { "weight": 40, "sprite": 300 },
+ { "weight": 1, "sprite": 301 }
+ ],
+ "rotates": false
+ },
+ { "id": "t_magiconc_floor", "fg": 302, "rotates": false },
+ { "id": "t_webbed_corpse", "fg": 303, "rotates": false },
+ {
+ "id": "t_demon_web_wall",
+ "fg": 304,
+ "bg": 257,
+ "rotates": true,
+ "multitile": true,
+ "additional_tiles": [
+ { "id": "center", "fg": 305, "bg": 257 },
+ { "id": "corner", "fg": [ 306, 307, 308, 309 ], "bg": 257 },
+ { "id": "edge", "fg": [ 310, 311 ], "bg": 257 },
+ { "id": "end_piece", "fg": [ 312, 313, 314, 315 ], "bg": 257 },
+ { "id": "t_connection", "fg": [ 316, 317, 318, 319 ], "bg": 257 },
+ { "id": "unconnected", "fg": 320, "bg": 257 }
+ ]
+ },
+ { "id": "tr_magic_door", "fg": 321, "rotates": false },
+ { "id": "tr_bear", "fg": 322, "rotates": false },
+ { "id": "tr_forge_vault", "fg": 323, "rotates": false }
+ ],
+ "//": "range 257 to 512",
+ "sprite_width": 32,
+ "sprite_height": 32,
+ "sprite_offset_x": 0,
+ "sprite_offset_y": 0
+ },
+ {
+ "file": "MagicalNights_Items.png",
+ "tiles": [
+ { "id": "bio_fuel_cell_blood", "fg": 513, "bg": 3, "rotates": false },
+ { "id": "overlay_wielded_bio_fuel_cell_blood", "fg": 513, "rotates": false },
+ { "id": "bio_sneeze_beam", "fg": 514, "bg": 3, "rotates": false },
+ { "id": "overlay_wielded_bio_sneeze_beam", "fg": 514, "rotates": false },
+ { "id": "adrenal_gland_large", "fg": 515, "rotates": false },
+ { "id": "overlay_wielded_adrenal_gland_large", "fg": 515, "rotates": false },
+ { "id": "alumentum", "fg": 516, "rotates": false },
+ { "id": "overlay_wielded_alumentum", "fg": 516, "rotates": false },
+ { "id": "bulette_pearl", "fg": 517, "rotates": false },
+ { "id": "overlay_wielded_bulette_pearl", "fg": 517, "rotates": false },
+ { "id": "bulette_plate", "fg": 518, "rotates": false },
+ { "id": "overlay_wielded_bulette_plate", "fg": 518, "rotates": false },
+ { "id": "vp_bulette_plate", "fg": 519, "rotates": false },
+ { "id": "copper_circlet", "fg": 520, "rotates": false },
+ { "id": "overlay_wielded_copper_circlet", "fg": 520, "rotates": false },
+ { "id": "overlay_worn_copper_circlet", "fg": 521, "rotates": false },
+ { "id": "copper_infuser", "fg": 522, "rotates": false },
+ { "id": "overlay_wielded_copper_infuser", "fg": 522, "rotates": false },
+ { "id": "overlay_worn_copper_infuser", "fg": 523, "rotates": false },
+ { "id": "demon_chitin_piece", "fg": 524, "rotates": false },
+ { "id": "overlay_wielded_demon_chitin_piece", "fg": 524, "rotates": false },
+ { "id": "demon_chitin_plate", "fg": 525, "rotates": false },
+ { "id": "overlay_wielded_demon_chitin_plate", "fg": 525, "rotates": false },
+ { "id": "demon_spider_fang", "fg": 526, "rotates": false },
+ { "id": "overlay_wielded_demon_spider_fang", "fg": 526, "rotates": false },
+ { "id": "dragon_essence", "fg": 527, "rotates": false },
+ { "id": "overlay_wielded_dragon_essence", "fg": 527, "rotates": false },
+ { "id": "glow_dust", "fg": 528 },
+ { "id": "overlay_wielded_glow_dust", "fg": 528 },
+ { "id": "glow_light", "fg": 529, "rotates": false },
+ { "id": "overlay_wielded_glow_light", "fg": 529, "rotates": false },
+ { "id": "glow_light_off", "fg": 530, "rotates": false },
+ { "id": "overlay_wielded_glow_light_off", "fg": 530, "rotates": false },
+ { "id": "overlay_wielded_owlbear_stone", "fg": 531 },
+ { "id": "owlbear_stone", "fg": 531 },
+ { "id": "overlay_wielded_potion_starter", "fg": 532 },
+ { "id": "potion_starter", "fg": 532 },
+ { "id": "overlay_wielded_silver_infuser", "fg": 533, "rotates": false },
+ { "id": "silver_infuser", "fg": 533, "rotates": false },
+ { "id": "overlay_worn_silver_infuser", "fg": 534, "rotates": false },
+ { "id": "overlay_wielded_stirge_proboscis", "fg": 535, "rotates": false },
+ { "id": "stirge_proboscis", "fg": 535, "rotates": false },
+ { "id": "overlay_wielded_stone_shell", "fg": 536 },
+ { "id": "stone_shell", "fg": 536 },
+ { "id": "blood", "fg": 537, "rotates": false },
+ { "id": "overlay_wielded_blood", "fg": 537, "rotates": false },
+ { "id": "dragon_blood", "fg": 538, "rotates": false },
+ { "id": "overlay_wielded_dragon_blood", "fg": 538, "rotates": false },
+ { "id": "overlay_wielded_tainted_blood", "fg": 539, "rotates": false },
+ { "id": "tainted_blood", "fg": 539, "rotates": false },
+ { "id": "arrow_odin", "fg": 540, "rotates": false },
+ { "id": "overlay_wielded_arrow_odin", "fg": 540, "rotates": false },
+ { "id": "ichaival", "fg": 541, "rotates": false },
+ { "id": "overlay_wielded_ichaival", "fg": 542, "rotates": false },
+ { "id": "overlay_wielded_quiver", "fg": 543, "rotates": false },
+ { "id": "quiver", "fg": 543, "bg": 3, "rotates": false },
+ { "id": "overlay_worn_quiver", "fg": 544, "rotates": false },
+ { "id": "overlay_wielded_quiver_birchbark", "fg": 545, "rotates": false },
+ { "id": "quiver_birchbark", "fg": 545, "bg": 3, "rotates": false },
+ { "id": "overlay_worn_quiver_birchbark", "fg": 546, "rotates": false },
+ { "id": "overlay_wielded_quiver_large_birchbark", "fg": 547, "rotates": false },
+ { "id": "quiver_large_birchbark", "fg": 547, "bg": 3, "rotates": false },
+ { "id": "overlay_worn_quiver_large_birchbark", "fg": 548, "rotates": false },
+ { "id": "black_dragon_hide_raw", "fg": 549, "rotates": false },
+ { "id": "overlay_wielded_black_dragon_hide_raw", "fg": 549, "rotates": false },
+ { "id": "black_dragon_tanned_hide", "fg": 550, "rotates": false },
+ { "id": "overlay_wielded_black_dragon_tanned_hide", "fg": 550, "rotates": false },
+ { "id": "black_dragon_tanning_hide", "fg": 551, "rotates": false },
+ { "id": "overlay_wielded_black_dragon_tanning_hide", "fg": 551, "rotates": false },
+ { "id": "boots_black_dragon_hide", "fg": 552, "rotates": false },
+ { "id": "overlay_wielded_boots_black_dragon_hide", "fg": 552, "rotates": false },
+ { "id": "overlay_worn_boots_black_dragon_hide", "fg": 553, "rotates": false },
+ { "id": "boots_black_dragon_scale", "fg": 554, "rotates": false },
+ { "id": "overlay_wielded_boots_black_dragon_scale", "fg": 554, "rotates": false },
+ { "id": "overlay_worn_boots_black_dragon_scale", "fg": 555, "rotates": false },
+ { "id": "boots_xlblack_dragon_hide", "fg": 556, "rotates": false },
+ { "id": "overlay_wielded_boots_xlblack_dragon_hide", "fg": 556, "rotates": false },
+ { "id": "boots_xlblack_dragon_scale", "fg": 557, "rotates": false },
+ { "id": "overlay_wielded_boots_xlblack_dragon_scale", "fg": 557, "rotates": false },
+ { "id": "dragon_black_scale", "fg": 558, "rotates": false },
+ { "id": "overlay_wielded_dragon_black_scale", "fg": 559, "rotates": false },
+ { "id": "gauntlets_black_dragon_scale", "fg": 559, "rotates": false },
+ { "id": "overlay_wielded_gauntlets_black_dragon_scale", "fg": 559, "rotates": false },
+ { "id": "overlay_worn_gauntlets_black_dragon_scale", "fg": 560, "rotates": false },
+ { "id": "gauntlets_xlblack_dragon_scale", "fg": 561, "rotates": false },
+ { "id": "overlay_wielded_gauntlets_xlblack_dragon_scale", "fg": 561, "rotates": false },
+ { "id": "gloves_black_dragon_hide", "fg": 562, "rotates": false },
+ { "id": "overlay_wielded_gloves_black_dragon_hide", "fg": 562, "rotates": false },
+ { "id": "overlay_worn_gloves_black_dragon_hide", "fg": 564, "rotates": false },
+ { "id": "gloves_xlblack_dragon_hide", "fg": 564, "rotates": false },
+ { "id": "overlay_wielded_gloves_xlblack_dragon_hide", "fg": 564, "rotates": false },
+ { "id": "helmet_black_dragon_hide", "fg": 565, "rotates": false },
+ { "id": "overlay_wielded_helmet_black_dragon_hide", "fg": 565, "rotates": false },
+ { "id": "overlay_worn_helmet_black_dragon_hide", "fg": 566, "rotates": false },
+ { "id": "helmet_black_dragon_scale", "fg": 567, "rotates": false },
+ { "id": "overlay_wielded_helmet_black_dragon_scale", "fg": 567, "rotates": false },
+ { "id": "overlay_worn_helmet_black_dragon_scale", "fg": 568, "rotates": false },
+ { "id": "helmet_xlblack_dragon_hide", "fg": 569, "rotates": false },
+ { "id": "overlay_wielded_helmet_xlblack_dragon_hide", "fg": 569, "rotates": false },
+ { "id": "helmet_xlblack_dragon_scale", "fg": 570, "rotates": false },
+ { "id": "overlay_wielded_helmet_xlblack_dragon_scale", "fg": 570, "rotates": false },
+ { "id": "overlay_wielded_suit_black_dragon_hide", "fg": 571, "rotates": false },
+ { "id": "suit_black_dragon_hide", "fg": 571, "rotates": false },
+ { "id": "overlay_worn_suit_black_dragon_hide", "fg": 572, "rotates": false },
+ { "id": "overlay_wielded_suit_black_dragon_scale", "fg": 573, "rotates": false },
+ { "id": "suit_black_dragon_scale", "fg": 573, "rotates": false },
+ { "id": "overlay_worn_suit_black_dragon_scale", "fg": 574, "rotates": false },
+ { "id": "overlay_wielded_suit_xlblack_dragon_hide", "fg": 755, "rotates": false },
+ { "id": "suit_xlblack_dragon_hide", "fg": 575, "rotates": false },
+ { "id": "overlay_wielded_suit_xlblack_dragon_scale", "fg": 756, "rotates": false },
+ { "id": "suit_xlblack_dragon_scale", "fg": 576, "rotates": false },
+ { "id": "lair_map", "fg": 577, "rotates": false },
+ { "id": "overlay_wielded_lair_map", "fg": 577, "rotates": false },
+ { "id": "overlay_wielded_retreat_map", "fg": 578, "rotates": false },
+ { "id": "retreat_map", "fg": 578, "rotates": false },
+ { "id": "overlay_wielded_wizard_photo", "fg": 579, "rotates": false },
+ { "id": "wizard_photo", "fg": 579, "rotates": false },
+ { "id": "animist_doll_decayed_pouncer", "fg": 580, "rotates": false },
+ { "id": "overlay_wielded_animist_doll_decayed_pouncer", "fg": 581, "rotates": false },
+ { "id": "animist_doll_skeleton", "fg": 582, "rotates": false },
+ { "id": "overlay_wielded_animist_doll_skeleton", "fg": 583, "rotates": false },
+ { "id": "animist_doll_zombie", "fg": 584, "rotates": false },
+ { "id": "overlay_wielded_animist_doll_zombie", "fg": 585, "rotates": false },
+ { "id": "cats_grace_potion", "fg": 586 },
+ { "id": "overlay_wielded_cats_grace_potion", "fg": 586 },
+ { "id": "eagles_sight_potion", "fg": 587 },
+ { "id": "overlay_wielded_eagles_sight_potion", "fg": 587 },
+ { "id": "foxs_cunning_potion", "fg": 588 },
+ { "id": "overlay_wielded_foxs_cunning_potion", "fg": 588 },
+ { "id": "mana_potion", "fg": 589, "rotates": false },
+ { "id": "overlay_wielded_mana_potion", "fg": 589, "rotates": false },
+ { "id": "mana_potion_greater", "fg": 590, "rotates": false },
+ { "id": "overlay_wielded_mana_potion_greater", "fg": 590, "rotates": false },
+ { "id": "mana_potion_lesser", "fg": 591, "rotates": false },
+ { "id": "overlay_wielded_mana_potion_lesser", "fg": 591, "rotates": false },
+ { "id": "ogres_strength_potion", "fg": 592 },
+ { "id": "overlay_wielded_ogres_strength_potion", "fg": 592 },
+ { "id": "overlay_wielded_twisted_restore_potion", "fg": 593, "rotates": false },
+ { "id": "twisted_restore_potion", "fg": 593, "rotates": false },
+ { "id": "overlay_wielded_twisted_restore_potion_improved", "fg": 594, "rotates": false },
+ { "id": "twisted_restore_potion_improved", "fg": 594, "rotates": false },
+ { "id": "overlay_wielded_rune_alchemist", "fg": 595 },
+ { "id": "rune_alchemist", "fg": 595 },
+ { "id": "overlay_wielded_rune_animist", "fg": 596 },
+ { "id": "rune_animist", "fg": 596 },
+ { "id": "overlay_wielded_rune_biomancer", "fg": 597 },
+ { "id": "rune_biomancer", "fg": 597 },
+ { "id": "overlay_wielded_rune_druid", "fg": 598 },
+ { "id": "rune_druid", "fg": 598 },
+ { "id": "overlay_wielded_rune_earthshaper", "fg": 599 },
+ { "id": "rune_earthshaper", "fg": 599 },
+ { "id": "overlay_wielded_rune_kelvinist", "fg": 600 },
+ { "id": "rune_kelvinist", "fg": 600 },
+ { "id": "overlay_wielded_rune_magus", "fg": 601 },
+ { "id": "rune_magus", "fg": 601 },
+ { "id": "overlay_wielded_rune_stormshaper", "fg": 602 },
+ { "id": "rune_stormshaper", "fg": 602 },
+ { "id": "overlay_wielded_rune_technomancer", "fg": 603 },
+ { "id": "rune_technomancer", "fg": 603 },
+ { "id": "egg_owlbear", "fg": 604 },
+ { "id": "overlay_wielded_egg_owlbear", "fg": 604 },
+ { "id": "egg_owlbear_rock", "fg": 605 },
+ { "id": "overlay_wielded_egg_owlbear_rock", "fg": 605 },
+ { "id": "hairball", "fg": 606, "rotates": false },
+ { "id": "overlay_wielded_hairball", "fg": 606, "rotates": false },
+ { "id": "impure_meat", "fg": 607, "rotates": false },
+ { "id": "overlay_wielded_impure_meat", "fg": 607, "rotates": false },
+ { "id": "meat_dragon", "fg": 608, "rotates": false },
+ { "id": "overlay_wielded_meat_dragon", "fg": 608, "rotates": false },
+ { "id": "overlay_wielded_purified_meat", "fg": 609, "rotates": false },
+ { "id": "purified_meat", "fg": 609, "rotates": false },
+ { "id": "overlay_wielded_scream_mush", "fg": 610, "rotates": false },
+ { "id": "scream_mush", "fg": 610, "rotates": false },
+ { "id": "lizardfolk_trident", "fg": 611, "rotates": false },
+ { "id": "overlay_wielded_lizardfolk_trident", "fg": 612, "rotates": false },
+ { "id": "overlay_wielded_skewer", "fg": 613, "rotates": false },
+ { "id": "skewer", "fg": 613, "bg": 3, "rotates": false },
+ { "id": "fungicide", "fg": 614, "bg": 3, "rotates": false },
+ { "id": "bag_holding_1", "fg": 615, "rotates": false },
+ { "id": "overlay_wielded_bag_holding_1", "fg": 616, "rotates": false },
+ { "id": "overlay_female_worn_bag_holding_1", "fg": 617, "rotates": false },
+ { "id": "overlay_male_worn_bag_holding_1", "fg": 618, "rotates": false },
+ { "id": "bag_holding_2", "fg": 619, "rotates": false },
+ { "id": "overlay_wielded_bag_holding_2", "fg": 620, "rotates": false },
+ { "id": "overlay_female_worn_bag_holding_2", "fg": 621, "rotates": false },
+ { "id": "overlay_male_worn_bag_holding_2", "fg": 622, "rotates": false },
+ { "id": "bag_holding_3", "fg": 623, "rotates": false },
+ { "id": "overlay_wielded_bag_holding_3", "fg": 624, "rotates": false },
+ { "id": "overlay_female_worn_bag_holding_3", "fg": 625, "rotates": false },
+ { "id": "overlay_male_worn_bag_holding_3", "fg": 626, "rotates": false },
+ { "id": "belt_haste", "fg": 627, "rotates": false },
+ { "id": "overlay_wielded_belt_haste", "fg": 627, "rotates": false },
+ { "id": "overlay_worn_belt_haste", "fg": 628, "rotates": false },
+ { "id": "belt_str", "fg": 629, "rotates": false },
+ { "id": "overlay_wielded_belt_str", "fg": 630, "rotates": false },
+ { "id": "overlay_worn_belt_str", "fg": 630, "rotates": false },
+ { "id": "debug_fireball_hammer", "fg": 631, "rotates": false },
+ { "id": "overlay_wielded_debug_fireball_hammer", "fg": 632, "rotates": false },
+ { "id": "magi_staff_minor", "fg": 633, "rotates": false },
+ { "id": "overlay_wielded_magi_staff_minor", "fg": 634, "rotates": false },
+ { "id": "overlay_wielded_wizard_hat", "fg": 635, "rotates": false },
+ { "id": "wizard_hat", "fg": 635, "rotates": false },
+ { "id": "mbelt_haste", "fg": 636, "rotates": false },
+ { "id": "overlay_wielded_mbelt_haste", "fg": 636, "rotates": false },
+ { "id": "overlay_worn_mbelt_haste", "fg": 637, "rotates": false },
+ { "id": "mbelt_iron_whip", "fg": 638, "rotates": false },
+ { "id": "overlay_wielded_mbelt_iron_whip", "fg": 638, "rotates": false },
+ { "id": "overlay_worn_mbelt_iron_whip", "fg": 639, "rotates": false },
+ { "id": "mbelt_pockets_greater", "fg": 640, "rotates": false },
+ { "id": "overlay_wielded_mbelt_pockets_greater", "fg": 640, "rotates": false },
+ { "id": "overlay_worn_mbelt_pockets_greater", "fg": 641, "rotates": false },
+ { "id": "mbelt_pockets_lesser", "fg": 642, "rotates": false },
+ { "id": "overlay_wielded_mbelt_pockets_lesser", "fg": 642, "rotates": false },
+ { "id": "overlay_worn_mbelt_pockets_lesser", "fg": 643, "rotates": false },
+ { "id": "mbelt_technomancer_toolbelt", "fg": 644, "rotates": false },
+ { "id": "overlay_wielded_mbelt_technomancer_toolbelt", "fg": 644, "rotates": false },
+ { "id": "overlay_worn_mbelt_technomancer_toolbelt", "fg": 645, "rotates": false },
+ { "id": "mbelt_thor", "fg": 646, "rotates": false },
+ { "id": "overlay_wielded_mbelt_thor", "fg": 646, "rotates": false },
+ { "id": "overlay_worn_mbelt_thor", "fg": 647, "rotates": false },
+ { "id": "mbelt_weaponry", "fg": 648, "rotates": false },
+ { "id": "overlay_wielded_mbelt_weaponry", "fg": 648, "rotates": false },
+ { "id": "overlay_worn_mbelt_weaponry", "fg": 649, "rotates": false },
+ { "id": "mwhip_iron", "fg": 650, "rotates": false },
+ { "id": "overlay_wielded_mwhip_iron", "fg": 651, "rotates": false },
+ { "id": "mboots_escape", "fg": 652, "rotates": false },
+ { "id": "overlay_wielded_mboots_escape", "fg": 652, "rotates": false },
+ { "id": "overlay_worn_mboots_escape", "fg": 653, "rotates": false },
+ { "id": "mboots_grounding", "fg": 654, "rotates": false },
+ { "id": "overlay_wielded_mboots_grounding", "fg": 654, "rotates": false },
+ { "id": "overlay_worn_mboots_grounding", "fg": 655, "rotates": false },
+ { "id": "mboots_haste", "fg": 656, "rotates": false },
+ { "id": "overlay_wielded_mboots_haste", "fg": 656, "rotates": false },
+ { "id": "overlay_worn_mboots_haste", "fg": 657, "rotates": false },
+ { "id": "mboots_sevenleague", "fg": 658, "rotates": false },
+ { "id": "overlay_wielded_mboots_sevenleague", "fg": 658, "rotates": false },
+ { "id": "overlay_worn_mboots_sevenleague", "fg": 659, "rotates": false },
+ { "id": "mbracer_defense_greater", "fg": 660, "rotates": false },
+ { "id": "overlay_wielded_mbracer_defense_greater", "fg": 660, "rotates": false },
+ { "id": "overlay_worn_mbracer_defense_greater", "fg": 661, "rotates": false },
+ { "id": "mbracer_defense_lesser", "fg": 662, "rotates": false },
+ { "id": "overlay_wielded_mbracer_defense_lesser", "fg": 662, "rotates": false },
+ { "id": "overlay_worn_mbracer_defense_lesser", "fg": 663, "rotates": false },
+ { "id": "mbracer_lightning_greater", "fg": 664, "rotates": false },
+ { "id": "overlay_wielded_mbracer_lightning_greater", "fg": 664, "rotates": false },
+ { "id": "overlay_worn_mbracer_lightning_greater", "fg": 665, "rotates": false },
+ { "id": "mbracer_lightning_lesser", "fg": 666, "rotates": false },
+ { "id": "overlay_wielded_mbracer_lightning_lesser", "fg": 666, "rotates": false },
+ { "id": "overlay_worn_mbracer_lightning_lesser", "fg": 667, "rotates": false },
+ { "id": "mbracer_steel_pair", "fg": 668, "rotates": false },
+ { "id": "overlay_wielded_mbracer_steel_pair", "fg": 668, "rotates": false },
+ { "id": "overlay_worn_mbracer_steel_pair", "fg": 669, "rotates": false },
+ { "id": "mbracer_steel_single", "fg": 670, "rotates": false },
+ { "id": "overlay_wielded_mbracer_steel_single", "fg": 670, "rotates": false },
+ { "id": "overlay_worn_mbracer_steel_single", "fg": 671, "rotates": false },
+ { "id": "magic_suppressor", "fg": 672, "rotates": false },
+ { "id": "overlay_wielded_magic_suppressor", "fg": 672, "rotates": false },
+ { "id": "mana_dot_sight", "fg": 673, "rotates": false },
+ { "id": "overlay_wielded_mana_dot_sight", "fg": 673, "rotates": false },
+ { "id": "mana_laser_rail", "fg": 673, "rotates": false },
+ { "id": "overlay_wielded_mana_laser_rail", "fg": 673, "rotates": false },
+ { "id": "mana_laser_under", "fg": 673, "rotates": false },
+ { "id": "overlay_wielded_mana_laser_under", "fg": 673, "rotates": false },
+ { "id": "mmask_disappearance", "fg": 674, "rotates": false },
+ { "id": "overlay_wielded_mmask_disappearance", "fg": 674, "rotates": false },
+ { "id": "overlay_female_worn_mmask_disappearance", "fg": 685, "rotates": false },
+ { "id": "overlay_male_worn_mmask_disappearance", "fg": 686, "rotates": false },
+ { "id": "mmask_vision", "fg": 687, "rotates": false },
+ { "id": "overlay_wielded_mmask_vision", "fg": 687, "rotates": false },
+ { "id": "overlay_female_worn_mmask_vision", "fg": 688, "rotates": false },
+ { "id": "overlay_male_worn_mmask_vision", "fg": 689, "rotates": false },
+ { "id": "rune_animist_weapon", "fg": 690, "rotates": false },
+ { "id": "overlay_wielded_rune_animist_weapon", "fg": 690, "rotates": false },
+ { "id": "rune_biomancer_weapon", "fg": 691, "rotates": false },
+ { "id": "overlay_wielded_rune_biomancer_weapon", "fg": 691, "rotates": false },
+ { "id": "rune_kelvinist_weapon", "fg": 692, "rotates": false },
+ { "id": "overlay_wielded_rune_kelvinist_weapon", "fg": 692, "rotates": false },
+ { "id": "rune_magus_weapon", "fg": 693, "rotates": false },
+ { "id": "overlay_wielded_rune_magus_weapon", "fg": 693, "rotates": false },
+ { "id": "rune_stormshaper_weapon", "fg": 694, "rotates": false },
+ { "id": "overlay_wielded_rune_stormshaper_weapon", "fg": 694, "rotates": false },
+ { "id": "rune_technomancer_weapon", "fg": 695, "rotates": false },
+ { "id": "overlay_wielded_rune_technomancer_weapon", "fg": 695, "rotates": false },
+ { "id": "springstaff-extended", "fg": 696, "rotates": false },
+ { "id": "overlay_wielded_springstaff-extended", "fg": 696, "rotates": false },
+ { "id": "springstaff-retracted", "fg": 697, "rotates": false },
+ { "id": "overlay_wielded_springstaff-retracted", "fg": 697, "rotates": false },
+ { "id": "heat_cube", "fg": 698, "rotates": false },
+ { "id": "overlay_wielded_heat_cube", "fg": 698, "rotates": false },
+ { "id": "heat_cube_torch_on", "fg": 699, "rotates": false },
+ { "id": "overlay_wielded_heat_cube_torch_on", "fg": 699, "rotates": false },
+ { "id": "mflask_hip_whiskey", "fg": 700, "rotates": false },
+ { "id": "overlay_wielded_mflask_hip_whiskey", "fg": 701, "rotates": false },
+ { "id": "overlay_worn_mflask_hip_whiskey", "fg": 702, "rotates": false },
+ { "id": "mkey_opening", "fg": 703, "rotates": false },
+ { "id": "overlay_wielded_mkey_opening", "fg": 703, "rotates": false },
+ { "id": "mspider_box", "fg": 704, "rotates": false },
+ { "id": "overlay_wielded_mspider_box", "fg": 704, "rotates": false },
+ { "id": "mtailors_kit", "fg": 705, "rotates": false },
+ { "id": "overlay_wielded_mtailors_kit", "fg": 705, "rotates": false },
+ { "id": "mtorch_everburning", "fg": 706, "rotates": false },
+ { "id": "overlay_wielded_mtorch_everburning", "fg": 707, "rotates": false },
+ { "id": "mtorch_everburning_lit", "fg": 708, "rotates": false },
+ { "id": "overlay_wielded_mtorch_everburning_lit", "fg": 709, "rotates": false },
+ { "id": "gunblade", "fg": 710, "rotates": false },
+ { "id": "overlay_wielded_gunblade", "fg": 711, "rotates": false },
+ { "id": "m47a1", "fg": 712, "rotates": false },
+ { "id": "overlay_wielded_m47a1", "fg": 713, "rotates": false },
+ { "id": "rune_druid_weapon", "fg": 714, "rotates": false },
+ { "id": "overlay_wielded_rune_druid_weapon", "fg": 715, "rotates": false },
+ { "id": "mring_blades_lesser", "fg": 716, "rotates": false },
+ { "id": "overlay_wielded_mring_blades_lesser", "fg": 716, "rotates": false },
+ { "id": "mring_copper", "fg": 717, "rotates": false },
+ { "id": "overlay_wielded_mring_copper", "fg": 717, "rotates": false },
+ { "id": "mring_dexterity_1", "fg": 718, "rotates": false },
+ { "id": "overlay_wielded_mring_dexterity_1", "fg": 718, "rotates": false },
+ { "id": "mring_dexterity_2", "fg": 719, "rotates": false },
+ { "id": "overlay_wielded_mring_dexterity_2", "fg": 719, "rotates": false },
+ { "id": "mring_dexterity_3", "fg": 720, "rotates": false },
+ { "id": "overlay_wielded_mring_dexterity_3", "fg": 720, "rotates": false },
+ { "id": "mring_dexterity_4", "fg": 721, "rotates": false },
+ { "id": "overlay_wielded_mring_dexterity_4", "fg": 721, "rotates": false },
+ { "id": "mring_dodge_bonus_1", "fg": 722, "rotates": false },
+ { "id": "overlay_wielded_mring_dodge_bonus_1", "fg": 722, "rotates": false },
+ { "id": "mring_dodge_bonus_2", "fg": 723, "rotates": false },
+ { "id": "overlay_wielded_mring_dodge_bonus_2", "fg": 723, "rotates": false },
+ { "id": "mring_gold", "fg": 724, "rotates": false },
+ { "id": "overlay_wielded_mring_gold", "fg": 724, "rotates": false },
+ { "id": "mring_intelligence_1", "fg": 725, "rotates": false },
+ { "id": "overlay_wielded_mring_intelligence_1", "fg": 725, "rotates": false },
+ { "id": "mring_intelligence_2", "fg": 726, "rotates": false },
+ { "id": "overlay_wielded_mring_intelligence_2", "fg": 726, "rotates": false },
+ { "id": "mring_intelligence_3", "fg": 727, "rotates": false },
+ { "id": "overlay_wielded_mring_intelligence_3", "fg": 727, "rotates": false },
+ { "id": "mring_intelligence_4", "fg": 728, "rotates": false },
+ { "id": "overlay_wielded_mring_intelligence_4", "fg": 728, "rotates": false },
+ { "id": "mring_perception_1", "fg": 729, "rotates": false },
+ { "id": "overlay_wielded_mring_perception_1", "fg": 729, "rotates": false },
+ { "id": "mring_perception_2", "fg": 730, "rotates": false },
+ { "id": "overlay_wielded_mring_perception_2", "fg": 730, "rotates": false },
+ { "id": "mring_perception_3", "fg": 731, "rotates": false },
+ { "id": "overlay_wielded_mring_perception_3", "fg": 731, "rotates": false },
+ { "id": "mring_perception_4", "fg": 732, "rotates": false },
+ { "id": "overlay_wielded_mring_perception_4", "fg": 732, "rotates": false },
+ { "id": "mring_platinum", "fg": 733, "rotates": false },
+ { "id": "overlay_wielded_mring_platinum", "fg": 733, "rotates": false },
+ { "id": "mring_protection_2", "fg": 734, "rotates": false },
+ { "id": "overlay_wielded_mring_protection_2", "fg": 734, "rotates": false },
+ { "id": "mring_protection_4", "fg": 735, "rotates": false },
+ { "id": "overlay_wielded_mring_protection_4", "fg": 735, "rotates": false },
+ { "id": "mring_protection_6", "fg": 736, "rotates": false },
+ { "id": "overlay_wielded_mring_protection_6", "fg": 736, "rotates": false },
+ { "id": "mring_protection_8", "fg": 737, "rotates": false },
+ { "id": "overlay_wielded_mring_protection_8", "fg": 737, "rotates": false },
+ { "id": "mring_silver", "fg": 738, "rotates": false },
+ { "id": "overlay_wielded_mring_silver", "fg": 738, "rotates": false },
+ { "id": "mring_speed_10", "fg": 739, "rotates": false },
+ { "id": "overlay_wielded_mring_speed_10", "fg": 739, "rotates": false },
+ { "id": "mring_speed_3", "fg": 740, "rotates": false },
+ { "id": "overlay_wielded_mring_speed_3", "fg": 740, "rotates": false },
+ { "id": "mring_speed_5", "fg": 741, "rotates": false },
+ { "id": "overlay_wielded_mring_speed_5", "fg": 741, "rotates": false },
+ { "id": "mring_speed_7", "fg": 742, "rotates": false },
+ { "id": "overlay_wielded_mring_speed_7", "fg": 742, "rotates": false },
+ { "id": "mring_strength_1", "fg": 743, "rotates": false },
+ { "id": "overlay_wielded_mring_strength_1", "fg": 743, "rotates": false },
+ { "id": "mring_strength_2", "fg": 744, "rotates": false },
+ { "id": "overlay_wielded_mring_strength_2", "fg": 744, "rotates": false },
+ { "id": "mring_strength_3", "fg": 745, "rotates": false },
+ { "id": "overlay_wielded_mring_strength_3", "fg": 745, "rotates": false },
+ { "id": "mring_strength_4", "fg": 746, "rotates": false },
+ { "id": "overlay_wielded_mring_strength_4", "fg": 746, "rotates": false },
+ { "id": "mtoken_arming_sword", "fg": 747, "rotates": false },
+ { "id": "overlay_wielded_mtoken_arming_sword", "fg": 747, "rotates": false },
+ { "id": "mtoken_battleaxe", "fg": 748, "rotates": false },
+ { "id": "overlay_wielded_mtoken_battleaxe", "fg": 748, "rotates": false },
+ { "id": "mtoken_broadsword", "fg": 749, "rotates": false },
+ { "id": "overlay_wielded_mtoken_broadsword", "fg": 749, "rotates": false },
+ { "id": "mtoken_crowbar", "fg": 750, "rotates": false },
+ { "id": "overlay_wielded_mtoken_crowbar", "fg": 750, "rotates": false },
+ { "id": "mtoken_hammer", "fg": 751, "rotates": false },
+ { "id": "overlay_wielded_mtoken_hammer", "fg": 751, "rotates": false },
+ { "id": "mtoken_longsword", "fg": 752, "rotates": false },
+ { "id": "overlay_wielded_mtoken_longsword", "fg": 752, "rotates": false },
+ { "id": "mtoken_mace", "fg": 753, "rotates": false },
+ { "id": "overlay_wielded_mtoken_mace", "fg": 753, "rotates": false },
+ { "id": "mtoken_pike", "fg": 754, "rotates": false },
+ { "id": "overlay_wielded_mtoken_pike", "fg": 754, "rotates": false },
+ { "id": "mtoken_q_staff", "fg": 755, "rotates": false },
+ { "id": "overlay_wielded_mtoken_q_staff", "fg": 755, "rotates": false },
+ { "id": "mtoken_screwdriver_set", "fg": 756, "rotates": false },
+ { "id": "overlay_wielded_mtoken_screwdriver_set", "fg": 756, "rotates": false },
+ { "id": "mtoken_toolbox", "fg": 757, "rotates": false },
+ { "id": "overlay_wielded_mtoken_toolbox", "fg": 757, "rotates": false },
+ { "id": "cestus_plus_one", "fg": 758, "bg": 5 },
+ { "id": "overlay_wielded_cestus_plus_one", "fg": 758 },
+ { "id": "cestus_plus_two", "fg": 759, "bg": 5 },
+ { "id": "overlay_wielded_cestus_plus_two", "fg": 759 },
+ { "id": "flaming_fist", "fg": 760, "rotates": false },
+ { "id": "overlay_wielded_flaming_fist", "fg": 761, "rotates": false },
+ { "id": "flaming_fist_plus_one", "fg": 762, "bg": 282 },
+ { "id": "overlay_wielded_flaming_fist_plus_one", "fg": 761, "rotates": false },
+ { "id": "flaming_fist_plus_two", "fg": 763, "bg": 282 },
+ { "id": "overlay_wielded_flaming_fist_plus_two", "fg": 763 },
+ { "id": "gauntlet_pounding", "fg": 764, "rotates": false },
+ { "id": "overlay_wielded_gauntlet_pounding", "fg": 765, "rotates": false },
+ { "id": "rune_earthshaper_weapon", "fg": 766, "rotates": false },
+ { "id": "overlay_wielded_rune_earthshaper_weapon", "fg": 767, "rotates": false },
+ { "id": "shotcestus", "fg": 768, "rotates": false },
+ { "id": "overlay_wielded_shotcestus", "fg": 769, "rotates": false },
+ { "id": "disp_wand", "fg": 770, "rotates": false },
+ { "id": "overlay_wielded_disp_wand", "fg": 771, "rotates": false },
+ { "id": "spell_wand", "fg": 772, "rotates": false },
+ { "id": "overlay_wielded_spell_wand", "fg": 773, "rotates": false },
+ { "id": "wand_cone_cold_greater", "fg": 774, "rotates": false },
+ { "id": "overlay_wielded_wand_cone_cold_greater", "fg": 775, "rotates": false },
+ { "id": "wand_cone_cold_lesser", "fg": 776, "rotates": false },
+ { "id": "overlay_wielded_wand_cone_cold_lesser", "fg": 777, "rotates": false },
+ { "id": "wand_cone_cold_minor", "fg": 778, "rotates": false },
+ { "id": "overlay_wielded_wand_cone_cold_minor", "fg": 779, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_cone_cold_greater", "fg": 780, "rotates": false },
+ { "id": "wand_disp_cone_cold_greater", "fg": 780, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_cone_cold_lesser", "fg": 781, "rotates": false },
+ { "id": "wand_disp_cone_cold_lesser", "fg": 781, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_cone_cold_minor", "fg": 782, "rotates": false },
+ { "id": "wand_disp_cone_cold_minor", "fg": 782, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_fireball_greater", "fg": 783, "rotates": false },
+ { "id": "wand_disp_fireball_greater", "fg": 783, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_fireball_lesser", "fg": 784, "rotates": false },
+ { "id": "wand_disp_fireball_lesser", "fg": 784, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_fireball_minor", "fg": 785, "rotates": false },
+ { "id": "wand_disp_fireball_minor", "fg": 785, "rotates": false },
+ { "id": "wand_disp_hoaryblast_greater", "fg": 786, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_hoaryblast_greater", "fg": 787, "rotates": false },
+ { "id": "wand_disp_hoaryblast_lesser", "fg": 788, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_hoaryblast_lesser", "fg": 789, "rotates": false },
+ { "id": "wand_disp_hoaryblast_minor", "fg": 790, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_hoaryblast_minor", "fg": 791, "rotates": false },
+ { "id": "wand_disp_magic_missile_greater", "fg": 792, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_magic_missile_greater", "fg": 793, "rotates": false },
+ { "id": "wand_disp_magic_missile_lesser", "fg": 794, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_magic_missile_lesser", "fg": 795, "rotates": false },
+ { "id": "wand_disp_magic_missile_minor", "fg": 796, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_magic_missile_minor", "fg": 797, "rotates": false },
+ { "id": "wand_disp_mana_beam_greater", "fg": 798, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_mana_beam_greater", "fg": 799, "rotates": false },
+ { "id": "wand_disp_mana_beam_lesser", "fg": 800, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_mana_beam_lesser", "fg": 801, "rotates": false },
+ { "id": "wand_disp_mana_beam_minor", "fg": 802, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_mana_beam_minor", "fg": 803, "rotates": false },
+ { "id": "wand_disp_point_flare_greater", "fg": 804, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_point_flare_greater", "fg": 805, "rotates": false },
+ { "id": "wand_disp_point_flare_lesser", "fg": 806, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_point_flare_lesser", "fg": 807, "rotates": false },
+ { "id": "wand_disp_point_flare_minor", "fg": 808, "rotates": false },
+ { "id": "overlay_wielded_wand_disp_point_flare_minor", "fg": 809, "rotates": false },
+ { "id": "wand_fireball_greater", "fg": 810, "rotates": false },
+ { "id": "overlay_wielded_wand_fireball_greater", "fg": 811, "rotates": false },
+ { "id": "wand_fireball_lesser", "fg": 812, "rotates": false },
+ { "id": "overlay_wielded_wand_fireball_lesser", "fg": 813, "rotates": false },
+ { "id": "wand_fireball_minor", "fg": 814, "rotates": false },
+ { "id": "overlay_wielded_wand_fireball_minor", "fg": 815, "rotates": false },
+ { "id": "wand_hoaryblast_greater", "fg": 816, "rotates": false },
+ { "id": "overlay_wielded_wand_hoaryblast_greater", "fg": 817, "rotates": false },
+ { "id": "wand_hoaryblast_lesser", "fg": 818, "rotates": false },
+ { "id": "overlay_wielded_wand_hoaryblast_lesser", "fg": 819, "rotates": false },
+ { "id": "wand_hoaryblast_minor", "fg": 820, "rotates": false },
+ { "id": "overlay_wielded_wand_hoaryblast_minor", "fg": 821, "rotates": false },
+ { "id": "wand_magic_missile_greater", "fg": 822, "rotates": false },
+ { "id": "overlay_wielded_wand_magic_missile_greater", "fg": 823, "rotates": false },
+ { "id": "wand_magic_missile_lesser", "fg": 824, "rotates": false },
+ { "id": "overlay_wielded_wand_magic_missile_lesser", "fg": 825, "rotates": false },
+ { "id": "wand_magic_missile_minor", "fg": 826, "rotates": false },
+ { "id": "overlay_wielded_wand_magic_missile_minor", "fg": 827, "rotates": false },
+ { "id": "wand_mana_beam_greater", "fg": 828, "rotates": false },
+ { "id": "overlay_wielded_wand_mana_beam_greater", "fg": 829, "rotates": false },
+ { "id": "wand_mana_beam_lesser", "fg": 830, "rotates": false },
+ { "id": "overlay_wielded_wand_mana_beam_lesser", "fg": 831, "rotates": false },
+ { "id": "wand_mana_beam_minor", "fg": 832, "rotates": false },
+ { "id": "overlay_wielded_wand_mana_beam_minor", "fg": 833, "rotates": false },
+ { "id": "wand_point_flare_greater", "fg": 834, "rotates": false },
+ { "id": "overlay_wielded_wand_point_flare_greater", "fg": 835, "rotates": false },
+ { "id": "wand_point_flare_lesser", "fg": 836, "rotates": false },
+ { "id": "overlay_wielded_wand_point_flare_lesser", "fg": 837, "rotates": false },
+ { "id": "wand_point_flare_minor", "fg": 838, "rotates": false },
+ { "id": "overlay_wielded_wand_point_flare_minor", "fg": 839, "rotates": false },
+ { "id": "acid_res_aura", "fg": 3, "rotates": false },
+ { "id": "overlay_wielded_acid_res_aura", "fg": 3, "rotates": false },
+ { "id": "acid_res_aura_greater", "fg": 3, "rotates": false },
+ { "id": "overlay_wielded_acid_res_aura_greater", "fg": 3, "rotates": false },
+ { "id": "aura_stoneskin", "fg": 842, "rotates": false },
+ { "id": "overlay_wielded_aura_stoneskin", "fg": 842, "rotates": false },
+ { "id": "overlay_female_worn_aura_stoneskin", "fg": 843, "rotates": false },
+ { "id": "overlay_male_worn_aura_stoneskin", "fg": 844, "rotates": false },
+ { "id": "bonespear", "fg": 845, "rotates": true },
+ { "id": "overlay_wielded_bonespear", "fg": 846, "rotates": true },
+ { "id": "dragon_shell_black", "fg": 847, "rotates": false },
+ { "id": "overlay_wielded_dragon_shell_black", "fg": 847, "rotates": false },
+ {
+ "id": "overlay_worn_dragon_shell_black",
+ "fg": [
+ { "weight": 30, "sprite": 848 },
+ { "weight": 30, "sprite": 849 },
+ { "weight": 30, "sprite": 850 },
+ { "weight": 30, "sprite": 851 }
+ ],
+ "animated": true,
+ "rotates": false
+ },
+ { "id": "druid_dust", "fg": 852, "rotates": false },
+ { "id": "overlay_wielded_druid_dust", "fg": 852, "rotates": false },
+ { "id": "druid_recurve", "fg": 853, "rotates": true },
+ { "id": "overlay_wielded_druid_recurve", "fg": 854, "rotates": true },
+ { "id": "druid_seed", "fg": 855, "rotates": false },
+ { "id": "overlay_wielded_druid_seed", "fg": 855, "rotates": false },
+ { "id": "finger_firelighter", "fg": 856 },
+ { "id": "overlay_wielded_finger_firelighter", "fg": 857 },
+ { "id": "fleshpouch", "fg": 858, "rotates": true },
+ { "id": "overlay_wielded_fleshpouch", "fg": 858, "rotates": true },
+ { "id": "overlay_worn_fleshpouch", "fg": 859, "rotates": true },
+ { "id": "ice_gliders", "fg": 860, "rotates": false },
+ { "id": "overlay_wielded_ice_gliders", "fg": 860, "rotates": false },
+ { "id": "overlay_worn_ice_gliders", "fg": 861, "rotates": false },
+ { "id": "magic_lamp", "fg": 862, "rotates": false },
+ { "id": "magic_light", "fg": 863, "rotates": false },
+ { "id": "obfuscating_aura", "fg": 864, "rotates": false },
+ { "id": "overlay_wielded_obfuscating_aura", "fg": 864, "rotates": false },
+ { "id": "overlay_wielded_shield_ice", "fg": 865, "rotates": false },
+ { "id": "shield_ice", "fg": 865, "rotates": false },
+ { "id": "overlay_worn_shield_ice", "fg": 866, "rotates": false },
+ { "id": "stonefist", "fg": 867, "rotates": false },
+ { "id": "overlay_wielded_stonefist", "fg": 868, "rotates": false },
+ { "id": "stormglove", "fg": 869, "rotates": false },
+ { "id": "overlay_wielded_stormglove", "fg": 870, "rotates": false },
+ { "id": "stormhammer", "fg": 871, "rotates": false },
+ { "id": "overlay_wielded_stormhammer", "fg": 872, "rotates": false },
+ { "id": "tentacle_whip", "fg": 873, "rotates": true },
+ { "id": "overlay_wielded_tentacle_whip", "fg": 874, "rotates": true },
+ { "id": "crystallized_mana", "fg": 875, "rotates": false },
+ { "id": "overlay_wielded_crystallized_mana", "fg": 875, "rotates": false },
+ { "id": "overlay_wielded_small_mana_crystal", "fg": 876, "rotates": false },
+ { "id": "small_mana_crystal", "fg": 876, "rotates": false },
+ { "id": "gram", "fg": 877, "rotates": false },
+ { "id": "overlay_wielded_gram", "fg": 878, "rotates": false },
+ { "id": "gungnir", "fg": 879, "rotates": false },
+ { "id": "laevateinn", "fg": 880, "rotates": false },
+ { "id": "overlay_wielded_laevateinn", "fg": 881, "rotates": false },
+ { "id": "mjolnir", "fg": 882, "bg": 3, "rotates": false },
+ { "id": "overlay_wielded_mjolnir", "fg": 883, "rotates": false },
+ { "id": "mithril_ingot", "fg": 884, "rotates": false },
+ { "id": "overlay_wielded_mithril_ingot", "fg": 884, "rotates": false },
+ { "id": "mithril_lump", "fg": 885, "rotates": false },
+ { "id": "overlay_wielded_mithril_lump", "fg": 885, "rotates": false },
+ { "id": "orichalcum_ingot", "fg": 886, "rotates": false },
+ { "id": "overlay_wielded_orichalcum_ingot", "fg": 886, "rotates": false },
+ { "id": "orichalcum_lump", "fg": 887, "rotates": false },
+ { "id": "overlay_wielded_orichalcum_lump", "fg": 887, "rotates": false },
+ { "id": "orichalcum_sliver", "fg": 888, "rotates": false },
+ { "id": "overlay_wielded_orichalcum_sliver", "fg": 888, "rotates": false },
+ { "id": "iv_black_dragon", "fg": 890, "rotates": false },
+ { "id": "overlay_wielded_iv_black_dragon", "fg": 890, "rotates": false },
+ { "id": "manatouched_serum", "fg": 889, "rotates": false },
+ { "id": "overlay_wielded_manatouched_serum", "fg": 889, "rotates": false },
+ { "id": "mutagen_black_dragon", "fg": 890, "rotates": false },
+ { "id": "overlay_wielded_mutagen_black_dragon", "fg": 890, "rotates": false },
+ { "id": "wand_fireball", "fg": 891, "rotates": false },
+ { "id": "overlay_wielded_wand_fireball", "fg": 892, "rotates": false },
+ { "id": "wand_magic_missile", "fg": 893, "rotates": false },
+ { "id": "overlay_wielded_wand_magic_missile", "fg": 894, "rotates": false },
+ { "id": "alchemy_basic", "fg": 895, "rotates": false },
+ { "id": "overlay_wielded_alchemy_basic", "fg": 895, "rotates": false },
+ { "id": "black_dragons", "fg": 896, "rotates": false },
+ { "id": "overlay_wielded_black_dragons", "fg": 896, "rotates": false },
+ { "id": "black_dragons_historical", "fg": 897, "rotates": false },
+ { "id": "overlay_wielded_black_dragons_historical", "fg": 897, "rotates": false },
+ { "id": "book_mythological", "fg": 898, "rotates": false },
+ { "id": "overlay_wielded_book_mythological", "fg": 898, "rotates": false },
+ { "id": "cooking_poison", "fg": 899, "rotates": false },
+ { "id": "overlay_wielded_cooking_poison", "fg": 899, "rotates": false },
+ { "id": "enchantment_basic", "fg": 900, "rotates": false },
+ { "id": "overlay_wielded_enchantment_basic", "fg": 900, "rotates": false },
+ { "id": "magic_armormaking", "fg": 901, "rotates": false },
+ { "id": "overlay_wielded_magic_armormaking", "fg": 901, "rotates": false },
+ { "id": "metal_legends", "fg": 902, "rotates": false },
+ { "id": "overlay_wielded_metal_legends", "fg": 902, "rotates": false },
+ { "id": "necro_basic", "fg": 903, "rotates": false },
+ { "id": "overlay_wielded_necro_basic", "fg": 903, "rotates": false },
+ { "id": "overlay_wielded_techno_basic", "fg": 904, "rotates": false },
+ { "id": "techno_basic", "fg": 904, "rotates": false },
+ { "id": "biomancer_spellbook", "fg": 905, "rotates": true },
+ { "id": "overlay_wielded_biomancer_spellbook", "fg": 905, "rotates": true },
+ { "id": "DEBUG_spellbook", "fg": 906, "rotates": false },
+ { "id": "overlay_wielded_DEBUG_spellbook", "fg": 906, "rotates": false },
+ { "id": "druid_spellbook", "fg": 907, "rotates": true },
+ { "id": "overlay_wielded_druid_spellbook", "fg": 907, "rotates": true },
+ { "id": "eshaper_spellbook", "fg": 908 },
+ { "id": "overlay_wielded_eshaper_spellbook", "fg": 908 },
+ { "id": "generic_spellbook", "fg": 909, "rotates": false },
+ { "id": "overlay_wielded_generic_spellbook", "fg": 909, "rotates": false },
+ { "id": "light_manipulation_spellbook", "fg": 910, "rotates": false },
+ { "id": "overlay_wielded_light_manipulation_spellbook", "fg": 910, "rotates": false },
+ { "id": "magus_spellbook", "fg": 911 },
+ { "id": "overlay_wielded_magus_spellbook", "fg": 911 },
+ { "id": "magus_spellbook_move", "fg": 912 },
+ { "id": "overlay_wielded_magus_spellbook_move", "fg": 912 },
+ { "id": "novice_stormshaper_book", "fg": 913, "rotates": false },
+ { "id": "overlay_wielded_novice_stormshaper_book", "fg": 913, "rotates": false },
+ { "id": "overlay_wielded_priest_advanced", "fg": 914, "rotates": false },
+ { "id": "priest_advanced", "fg": 914, "rotates": false },
+ { "id": "overlay_wielded_priest_beginner", "fg": 915, "rotates": false },
+ { "id": "priest_beginner", "fg": 915, "rotates": false },
+ { "id": "overlay_wielded_pyro", "fg": 916, "rotates": false },
+ { "id": "pyro", "fg": 916, "rotates": false },
+ { "id": "overlay_wielded_recovery_spellbook", "fg": 917, "rotates": false },
+ { "id": "recovery_spellbook", "fg": 917, "rotates": false },
+ { "id": "overlay_wielded_stat_up_spellbook", "fg": 918 },
+ { "id": "stat_up_spellbook", "fg": 918 },
+ { "id": "overlay_wielded_summon_scroll_smudged", "fg": 919 },
+ { "id": "summon_scroll_smudged", "fg": 919 },
+ { "id": "overlay_wielded_summon_undead_spellbook", "fg": 920 },
+ { "id": "summon_undead_spellbook", "fg": 920 },
+ { "id": "overlay_wielded_techno_em", "fg": 921 },
+ { "id": "techno_em", "fg": 921 },
+ { "id": "overlay_wielded_techno_fundamentals", "fg": 922 },
+ { "id": "techno_fundamentals", "fg": 922 },
+ { "id": "overlay_wielded_techno_idiots", "fg": 923 },
+ { "id": "techno_idiots", "fg": 923 },
+ { "id": "overlay_wielded_tome_of_storms", "fg": 924, "rotates": false },
+ { "id": "tome_of_storms", "fg": 924, "rotates": false },
+ { "id": "overlay_wielded_translocate_spellbook", "fg": 925 },
+ { "id": "translocate_spellbook", "fg": 925 },
+ { "id": "overlay_wielded_winter_grasp", "fg": 926, "rotates": true },
+ { "id": "winter_grasp", "fg": 926, "rotates": true },
+ { "id": "overlay_wielded_wizard_advanced", "fg": 927, "rotates": true },
+ { "id": "wizard_advanced", "fg": 927, "rotates": true },
+ { "id": "overlay_wielded_wizard_beginner", "fg": 928, "rotates": true },
+ { "id": "wizard_beginner", "fg": 928, "rotates": true },
+ { "id": "overlay_wielded_wizard_utility", "fg": 929, "rotates": true },
+ { "id": "wizard_utility", "fg": 929, "rotates": true },
+ { "id": "lightning_storm_scroll", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_lightning_storm_scroll", "fg": 930, "rotates": false },
+ {
+ "id": [
+ "overlay_wielded_spell_scroll",
+ "overlay_wielded_spell_scroll_baleful_polymorph",
+ "overlay_wielded_spell_scroll_boneclub",
+ "overlay_wielded_spell_scroll_caustic_aura",
+ "overlay_wielded_spell_scroll_feralform",
+ "overlay_wielded_spell_scroll_flamebreath",
+ "overlay_wielded_spell_scroll_flamesword",
+ "overlay_wielded_spell_scroll_impactsling",
+ "overlay_wielded_spell_scroll_improved_knock",
+ "overlay_wielded_spell_scroll_knifeshot",
+ "overlay_wielded_spell_scroll_knock",
+ "overlay_wielded_spell_scroll_overcharge_eyes",
+ "overlay_wielded_spell_scroll_repelling_arc",
+ "overlay_wielded_spell_scroll_summon_floating_disk",
+ "overlay_wielded_spell_scroll_tornskin"
+ ],
+ "fg": 930,
+ "rotates": false
+ },
+ {
+ "id": [
+ "spell_scroll",
+ "spell_scroll_baleful_polymorph",
+ "spell_scroll_boneclub",
+ "spell_scroll_caustic_aura",
+ "spell_scroll_feralform",
+ "spell_scroll_flamebreath",
+ "spell_scroll_flamesword",
+ "spell_scroll_impactsling",
+ "spell_scroll_improved_knock",
+ "spell_scroll_knifeshot",
+ "spell_scroll_knock",
+ "spell_scroll_overcharge_eyes",
+ "spell_scroll_repelling_arc",
+ "spell_scroll_summon_floating_disk",
+ "spell_scroll_tornskin"
+ ],
+ "fg": 930,
+ "rotates": false
+ },
+ { "id": "overlay_wielded_spell_scroll_acid_resistance", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_acid_resistance", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_animated_blade", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_animated_blade", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_biomancer_coagulant_weave", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_biomancer_coagulant_weave", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_biomancer_paralytic_dart", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_biomancer_paralytic_dart", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_biomancer_visceral_projection", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_biomancer_visceral_projection", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_bio_acidicspray", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_bio_acidicspray", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_bio_bonespear", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_bio_bonespear", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_bio_fleshpouch", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_bio_fleshpouch", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_bio_grotesque", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_bio_grotesque", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_bless", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_bless", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_blinding_flash", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_blinding_flash", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_burning_hands", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_burning_hands", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_cats_grace", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_cats_grace", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_chilling_touch", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_chilling_touch", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_clairvoyance", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_clairvoyance", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_cone_cold", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_cone_cold", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_create_atomic_lamp", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_create_atomic_lamp", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_create_atomic_light", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_create_atomic_light", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_create_lighter", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_create_lighter", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_crystallize_mana", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_crystallize_mana", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_dark_sight", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_dark_sight", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_druidic_healing", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_druidic_healing", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_druidic_regrowth", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_druidic_regrowth", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_druid_naturebow1", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_druid_naturebow1", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_druid_rootstrike", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_druid_rootstrike", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_druid_veggrasp", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_druid_veggrasp", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_druid_woodshaft", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_druid_woodshaft", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_eagles_sight", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_eagles_sight", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_earthshaper_pillar", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_earthshaper_pillar", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_earthshaper_stoneskin", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_earthshaper_stoneskin", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_eshaper_piercing_bolt", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_eshaper_piercing_bolt", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_eshaper_rockbolt", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_eshaper_rockbolt", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_eshaper_shardspray", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_eshaper_shardspray", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_eshaper_shardstorm", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_eshaper_shardstorm", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_ethereal_grasp", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_ethereal_grasp", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_fireball", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_fireball", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_foxs_cunning", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_foxs_cunning", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_freezing_touch", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_freezing_touch", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_frost_armor", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_frost_armor", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_frost_spray", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_frost_spray", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_glide_ice", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_glide_ice", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_gravity_well", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_gravity_well", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_hoary_blast", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_hoary_blast", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_holographic_transposition", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_holographic_transposition", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_holy_blade", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_holy_blade", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_ice_shield", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_ice_shield", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_ice_spike", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_ice_spike", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_invisibility", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_invisibility", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_jolt", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_jolt", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_lava_bomb", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_lava_bomb", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_laze", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_laze", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_lightning_blast", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_lightning_blast", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_lightning_bolt", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_lightning_bolt", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_light_healing", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_light_healing", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_magic_missile", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_magic_missile", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_magus_escape", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_magus_escape", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_magus_haste", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_magus_haste", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_magus_mana_beam", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_magus_mana_beam", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_magus_mana_blast", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_magus_mana_blast", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_magus_mana_bolt", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_magus_mana_bolt", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_megablast", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_megablast", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_mirror_image", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_mirror_image", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_necrotic_gaze", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_necrotic_gaze", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_nova_flare", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_nova_flare", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_obfuscated_body", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_obfuscated_body", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_ogres_strength", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_ogres_strength", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_pain_split", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_pain_split", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_phase_door", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_phase_door", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_point_flare", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_point_flare", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_protection_aura", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_protection_aura", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_purification_seed", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_purification_seed", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_quantum_tunnel_lesser", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_quantum_tunnel_lesser", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_recover_bionic_power", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_recover_bionic_power", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_recover_fatigue", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_recover_fatigue", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_recover_mana", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_recover_mana", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_recover_pain", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_recover_pain", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_recover_stamina", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_recover_stamina", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_seismic_stomp", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_seismic_stomp", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_animated_blade", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_animated_blade", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_magic_motorcycle", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_magic_motorcycle", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_smite", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_smite", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_spirit_armor", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_spirit_armor", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_stonefist", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_stonefist", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_stormshaper_ionization", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_stormshaper_ionization", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_stormshaper_wall_of_fog", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_stormshaper_wall_of_fog", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_storm_hammer", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_storm_hammer", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_cats", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_cats", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_decayed_pouncer", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_decayed_pouncer", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_bio_bonespear", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_bio_bonespear", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_skeleton", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_skeleton", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_wisps", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_wisps", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_wolf", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_wolf", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_summon_zombie", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_summon_zombie", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_synaptic_stimulation", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_synaptic_stimulation", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_taze", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_taze", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_vicious_tentacle", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_vicious_tentacle", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_windrun", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_windrun", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_windstrike", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_windstrike", "fg": 930, "rotates": false },
+ { "id": "overlay_wielded_spell_scroll_x-ray", "fg": 930, "rotates": false },
+ { "id": "spell_scroll_x-ray", "fg": 930, "rotates": false },
+ { "id": "cauldron_demon_chitin", "fg": 931, "rotates": false },
+ { "id": "overlay_wielded_cauldron_demon_chitin", "fg": 932, "rotates": false },
+ { "id": "cauldron_orichalcum", "fg": 933, "rotates": false },
+ { "id": "overlay_wielded_cauldron_orichalcum", "fg": 934, "rotates": false },
+ { "id": "demon_forge", "fg": 935, "rotates": false },
+ { "id": "overlay_wielded_demon_forge", "fg": 936, "rotates": false },
+ { "id": "overlay_wielded_sewing_kit", "fg": 937, "rotates": false },
+ { "id": "sewing_kit", "fg": 937, "rotates": false },
+ { "id": "overlay_wielded_tailors_kit", "fg": 938 },
+ { "id": "tailors_kit", "fg": 938 },
+ { "id": "fold_orichalcum_frame", "fg": 939, "rotates": false },
+ { "id": "overlay_wielded_fold_orichalcum_frame", "fg": 940, "rotates": false },
+ { "id": "orichalcum_frame", "fg": 941, "rotates": false },
+ { "id": "overlay_wielded_orichalcum_frame", "fg": 942, "rotates": false },
+ { "id": "lizardfolk_club", "fg": 943, "rotates": false },
+ { "id": "overlay_wielded_lizardfolk_club", "fg": 944, "rotates": false },
+ { "id": "lizardfolk_javelin", "fg": 945, "rotates": false },
+ { "id": "overlay_wielded_lizardfolk_javelin", "fg": 946, "rotates": false },
+ { "id": "lizardfolk_javelin_gun", "fg": 947, "rotates": false },
+ { "id": "overlay_wielded_lizardfolk_javelin_gun", "fg": 947, "rotates": false },
+ { "id": "novice_kelvin_spellbook", "fg": 948, "rotates": false },
+ { "id": "novice_earth_spellbook", "fg": 949, "rotates": false },
+ { "id": "novice_storm_spellbook", "fg": 950, "rotates": false },
+ { "id": "cestus", "fg": 951, "bg": 3, "rotates": false },
+ { "id": "mana", "fg": 952, "rotates": false },
+ { "id": "overlay_wielded_mana", "fg": 952, "rotates": false },
+ { "id": "gaul_maraz", "fg": 953, "rotates": false },
+ { "id": "overlay_wielded_gaul_maraz", "fg": 954, "rotates": false },
+ { "id": "true_gaul_maraz", "fg": 955, "rotates": false },
+ { "id": "overlay_wielded_true_gaul_maraz", "fg": 956, "rotates": false },
+ { "id": "dbone_longsword", "fg": 957, "rotates": false },
+ { "id": "dbone_battleaxe", "fg": 958, "rotates": false },
+ { "id": "dbone_qiang", "fg": 959, "rotates": false },
+ { "id": "dbone_tachi", "fg": 960, "rotates": false },
+ { "id": "overlay_wielded_dbone_longsword", "fg": 961, "rotates": false },
+ { "id": "overlay_wielded_dbone_battleaxe", "fg": 962, "rotates": false },
+ { "id": "overlay_wielded_dbone_qiang", "fg": 963, "rotates": false },
+ { "id": "overlay_wielded_dbone_tachi", "fg": 964, "rotates": false },
+ { "id": "black_dbone_longsword", "fg": 965, "rotates": false },
+ { "id": "black_dbone_battleaxe", "fg": 966, "rotates": false },
+ { "id": "black_dbone_qiang", "fg": 967, "rotates": false },
+ { "id": "black_dbone_tachi", "fg": 968, "rotates": false },
+ { "id": "overlay_wielded_black_dbone_longsword", "fg": 969, "rotates": false },
+ { "id": "overlay_wielded_black_dbone_battleaxe", "fg": 970, "rotates": false },
+ { "id": "overlay_wielded_black_dbone_qiang", "fg": 971, "rotates": false },
+ { "id": "overlay_wielded_black_dbone_tachi", "fg": 972, "rotates": false }
+ ],
+ "//": "range 513 to 1280",
+ "sprite_width": 32,
+ "sprite_height": 32,
+ "sprite_offset_x": 0,
+ "sprite_offset_y": 0
+ },
+ {
+ "file": "MagicalNights_Monsters.png",
+ "tiles": [
+ { "id": "mon_demon_spider", "fg": 1281, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_demon_spider", "fg": 1282, "rotates": false },
+ { "id": "mon_demon_spiderling", "fg": 1283, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_demon_spiderling", "fg": 1284, "rotates": false },
+ { "id": "mon_dragon_black_wyrmling", "fg": 1285, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_dragon_black_wyrmling", "fg": 1286, "rotates": false },
+ { "id": "mon_forgedemons", "fg": 1287, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_forgedemons", "fg": 1288, "rotates": false },
+ {
+ "id": "mon_forgedwarves",
+ "fg": [
+ { "weight": 3, "sprite": 1289 },
+ { "weight": 3, "sprite": 1290 },
+ { "weight": 3, "sprite": 1291 },
+ { "weight": 3, "sprite": 1292 },
+ { "weight": 3, "sprite": 1296 },
+ { "weight": 3, "sprite": 1297 },
+ { "weight": 3, "sprite": 1298 },
+ { "weight": 3, "sprite": 1299 }
+ ],
+ "bg": 2,
+ "rotates": false
+ },
+ { "id": "mon_mirror_image", "fg": 1293 },
+ { "id": "mon_yulecat_cub", "fg": 1294, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_yulecat_cub", "fg": 1295, "rotates": false },
+ { "id": "mon_forgemaster1", "fg": 1296, "bg": 2, "rotates": false },
+ { "id": "corpse_mon_forgedwarves", "fg": 1300, "rotates": false },
+ { "id": "corpse_mon_forgemaster1", "fg": 1300, "rotates": false },
+ {
+ "id": "mon_goblin_chieftain",
+ "fg": [
+ { "weight": 3, "sprite": 1302 },
+ { "weight": 3, "sprite": 1303 },
+ { "weight": 3, "sprite": 1304 },
+ { "weight": 3, "sprite": 1305 },
+ { "weight": 3, "sprite": 1306 },
+ { "weight": 3, "sprite": 1307 }
+ ],
+ "bg": 2,
+ "rotates": false
+ },
+ { "id": "corpse_mon_goblin_chieftain", "fg": 1308, "rotates": false },
+ {
+ "id": "mon_goblin_slinger",
+ "fg": [
+ { "weight": 3, "sprite": 1309 },
+ { "weight": 3, "sprite": 1310 },
+ { "weight": 3, "sprite": 1311 },
+ { "weight": 3, "sprite": 1312 },
+ { "weight": 3, "sprite": 1313 },
+ { "weight": 3, "sprite": 1314 }
+ ],
+ "bg": 2,
+ "rotates": false
+ },
+ { "id": "corpse_mon_goblin_slinger", "fg": 1315, "rotates": false },
+ {
+ "id": "mon_goblin_warrior",
+ "fg": [
+ { "weight": 3, "sprite": 1316 },
+ { "weight": 3, "sprite": 1317 },
+ { "weight": 3, "sprite": 1318 },
+ { "weight": 3, "sprite": 1319 },
+ { "weight": 3, "sprite": 1320 },
+ { "weight": 3, "sprite": 1321 }
+ ],
+ "bg": 2,
+ "rotates": false
+ },
+ { "id": "corpse_mon_goblin_warrior", "fg": 1322, "rotates": false },
+ { "id": "mon_leprechaun", "fg": 1323, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_leprechaun", "fg": 1324, "rotates": false },
+ { "id": "mon_workshop_elf", "fg": 1325, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_workshop_elf", "fg": 1326, "rotates": false },
+ { "id": "mon_crocodile", "fg": 1327, "rotates": false },
+ { "id": "corpse_mon_crocodile", "fg": 1328, "rotates": false },
+ { "id": "mon_baleful_polymorph_frog", "fg": 1329, "bg": 1, "rotates": false },
+ { "id": "corpse_mon_baleful_polymorph_frog", "fg": 1330, "rotates": false },
+ { "id": "mon_black_pudding", "fg": 1331, "rotates": false },
+ { "id": "mon_krabgek", "fg": 1332, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_krabgek", "fg": 1333, "rotates": false },
+ { "id": "mon_lemure", "fg": 1334, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_lemure", "fg": 1335, "rotates": false },
+ { "id": "mon_loup_garou", "fg": 1336, "bg": 4 },
+ { "id": "mon_owlbear", "fg": 1337 },
+ { "id": "corpse_mon_owlbear", "fg": 1338 },
+ { "id": "mon_owlbear_cub", "fg": 1339 },
+ { "id": "corpse_mon_owlbear_cub", "fg": 1340 },
+ { "id": "mon_winter_wolf", "fg": 1341, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_winter_wolf", "fg": 1342, "rotates": false },
+ { "id": "mon_shrieker", "fg": 1343, "bg": 4, "rotates": false },
+ { "id": "corpse_mon_shrieker", "fg": 1344, "rotates": false },
+ { "id": "mon_stirge", "fg": 1345, "rotates": false },
+ { "id": "corpse_mon_stirge", "fg": 1346, "rotates": false },
+ {
+ "id": "mon_wisp",
+ "fg": [
+ { "weight": 3, "sprite": 1347 },
+ { "weight": 3, "sprite": 1348 },
+ { "weight": 3, "sprite": 1349 },
+ { "weight": 3, "sprite": 1350 }
+ ]
+ },
+ { "id": "mon_animated_blade", "fg": 1351 },
+ {
+ "id": "mon_orc_archer",
+ "fg": [
+ { "weight": 3, "sprite": 1352 },
+ { "weight": 3, "sprite": 1353 },
+ { "weight": 3, "sprite": 1354 },
+ { "weight": 3, "sprite": 1355 },
+ { "weight": 3, "sprite": 1356 },
+ { "weight": 3, "sprite": 1357 }
+ ],
+ "bg": 4,
+ "rotates": false
+ },
+ { "id": "corpse_mon_orc_archer", "fg": 1358, "rotates": false },
+ {
+ "id": "mon_orc_blood_warrior",
+ "fg": [
+ { "weight": 3, "sprite": 1359 },
+ { "weight": 3, "sprite": 1360 },
+ { "weight": 3, "sprite": 1361 },
+ { "weight": 3, "sprite": 1362 },
+ { "weight": 3, "sprite": 1363 },
+ { "weight": 3, "sprite": 1364 }
+ ],
+ "bg": 4,
+ "rotates": false
+ },
+ { "id": "corpse_mon_orc_blood_warrior", "fg": 1365, "rotates": false },
+ {
+ "id": "mon_orc_warrior",
+ "fg": [
+ { "weight": 3, "sprite": 1366 },
+ { "weight": 3, "sprite": 1367 },
+ { "weight": 3, "sprite": 1368 },
+ { "weight": 3, "sprite": 1369 },
+ { "weight": 3, "sprite": 1370 },
+ { "weight": 3, "sprite": 1371 }
+ ],
+ "bg": 4,
+ "rotates": false
+ },
+ { "id": "corpse_mon_orc_warrior", "fg": 1372, "rotates": false },
+ { "id": "mon_were_zolf", "fg": 1373, "bg": 4 },
+ { "id": "mon_zorc", "fg": 1374, "bg": 4 },
+ { "id": "corpse_mon_zorc", "fg": 1375, "rotates": false },
+ { "id": "broken_claygolem", "fg": 1376, "rotates": false },
+ { "id": "overlay_wielded_broken_claygolem", "fg": 1376, "rotates": false },
+ { "id": "broken_irongolem", "fg": 1377, "rotates": false },
+ { "id": "overlay_wielded_broken_irongolem", "fg": 1377, "rotates": false },
+ { "id": "broken_plasticgolem", "fg": 1378, "rotates": false },
+ { "id": "overlay_wielded_broken_plasticgolem", "fg": 1378, "rotates": false },
+ { "id": "broken_stonegolem", "fg": 1379, "rotates": false },
+ { "id": "overlay_wielded_broken_stonegolem", "fg": 1379, "rotates": false },
+ { "id": "broken_resingolem_fresh", "fg": 1380, "rotates": false },
+ { "id": "overlay_wielded_broken_resingolem_fresh", "fg": 1380, "rotates": false },
+ { "id": "broken_resingolem_half", "fg": 1381, "rotates": false },
+ { "id": "overlay_wielded_broken_resingolem_half", "fg": 1381, "rotates": false },
+ { "id": "broken_resingolem_cured", "fg": 1382, "rotates": false },
+ { "id": "overlay_wielded_broken_resingolem_cured", "fg": 1382, "rotates": false }
+ ],
+ "//": "range 1281 to 1536",
+ "sprite_width": 32,
+ "sprite_height": 32,
+ "sprite_offset_x": 0,
+ "sprite_offset_y": 0
+ },
+ {
+ "file": "MagicalNights_normal_offset.png",
+ "tiles": [ { "id": "overlay_worn_wizard_hat", "fg": 1537, "rotates": false } ],
+ "//": "range 1537 to 1552",
+ "sprite_width": 32,
+ "sprite_height": 32,
+ "sprite_offset_x": 0,
+ "sprite_offset_y": -16
+ },
+ {
+ "file": "MagicalNights_large.png",
+ "tiles": [
+ { "id": "bg_big_dirt", "fg": 1553, "rotates": false },
+ { "id": "bg_big_golem_shadow", "fg": 1554, "rotates": false },
+ { "id": "bg_big_large_shadow", "fg": 1556, "rotates": false },
+ { "id": "bg_big_normal_shadow", "fg": 1556, "rotates": false },
+ { "id": "bg_big_snow", "fg": 1557, "rotates": false },
+ { "id": "bg_big_tall_shadow", "fg": 1558, "rotates": false },
+ { "id": "f_alembic", "fg": 1559, "rotates": false },
+ {
+ "id": "f_everburning_candelabra",
+ "fg": [ { "weight": 11, "sprite": 1560 }, { "weight": 11, "sprite": 1561 }, { "weight": 11, "sprite": 1562 } ],
+ "rotates": false,
+ "animated": true
+ },
+ { "id": "f_glow_boulder", "fg": 1563, "rotates": false },
+ { "id": "f_glow_boulder_season_autumn", "fg": 1564, "rotates": false },
+ { "id": "f_glow_boulder_season_spring", "fg": 1565, "rotates": false },
+ { "id": "f_glow_boulder_season_summer", "fg": 1566, "rotates": false },
+ { "id": "f_glow_boulder_season_winter", "fg": 1567, "rotates": false },
+ { "id": "f_huge_mana_crystal", "fg": 1568, "rotates": false },
+ { "id": "overlay_worn_magic_lamp", "fg": 1569, "rotates": false },
+ { "id": "overlay_worn_magic_light", "fg": 1570, "rotates": false },
+ { "id": "overlay_wielded_gungnir", "fg": 1571, "rotates": false },
+ {
+ "id": [
+ "magic_academy_ground",
+ "magic_academy_2nd",
+ "magic_academy_3rd",
+ "magic_academy_4th",
+ "magic_academy_5th",
+ "magic_academy_6th",
+ "magic_academy_7th",
+ "magic_academy_8th"
+ ],
+ "fg": 1572,
+ "rotates": false
+ },
+ { "id": "mon_demon_spider_queen", "fg": 1573, "rotates": false },
+ { "id": "corpse_mon_demon_spider_queen", "fg": 1574, "rotates": false },
+ { "id": "mon_dragon_black_young", "fg": 1575, "rotates": false },
+ { "id": "corpse_mon_dragon_black_young", "fg": 1576, "rotates": false },
+ { "id": "mon_forgeborn", "fg": 1577, "bg": 1558, "rotates": false },
+ { "id": "corpse_mon_forgeborn", "fg": 1578, "rotates": false },
+ { "id": "mon_claygolem", "fg": 1579, "bg": 1554, "rotates": false },
+ { "id": "mon_irongolem", "fg": 1580, "bg": 1554, "rotates": false },
+ { "id": "mon_plasticgolem", "fg": 1581, "bg": 1554, "rotates": false },
+ { "id": "mon_stonegolem", "fg": 1582, "bg": 1554, "rotates": false },
+ { "id": "mon_yulecat", "fg": 1583, "bg": 1555, "rotates": false },
+ { "id": "corpse_mon_yulecat", "fg": 1584, "rotates": false },
+ { "id": "mon_lizardfolk_chieftan", "fg": 1585, "rotates": false },
+ { "id": "corpse_mon_lizardfolk_chieftan", "fg": 1586, "rotates": false },
+ { "id": "mon_lizardfolk_hunter", "fg": 1587, "rotates": false },
+ { "id": "corpse_mon_lizardfolk_hunter", "fg": 1588, "rotates": false },
+ { "id": "mon_lizardfolk_shaman", "fg": 1589, "rotates": false },
+ { "id": "corpse_mon_lizardfolk_shaman", "fg": 1590, "rotates": false },
+ { "id": "mon_lizardfolk_warrior", "fg": 1591, "rotates": false },
+ { "id": "corpse_mon_lizardfolk_warrior", "fg": 1592, "rotates": false },
+ { "id": "mon_bulette", "fg": 1593, "rotates": false },
+ { "id": "corpse_mon_bulette", "fg": 1594, "rotates": false },
+ { "id": "mon_ogre", "fg": 1595, "rotates": false },
+ { "id": "corpse_mon_ogre", "fg": 1596, "rotates": false },
+ { "id": "mon_troll", "fg": 1597, "rotates": false },
+ { "id": "corpse_mon_troll", "fg": 1598, "rotates": false },
+ {
+ "id": "t_thconc_floor_echandelier",
+ "fg": [ { "weight": 11, "sprite": 1599 }, { "weight": 11, "sprite": 1600 }, { "weight": 11, "sprite": 1601 } ],
+ "bg": 1602,
+ "rotates": false,
+ "animated": true
+ },
+ { "id": "t_tree_burnt", "fg": 1603, "bg": 1553, "rotates": false },
+ { "id": "t_tree_burnt_season_autumn", "fg": 1604, "bg": 1553, "rotates": false },
+ { "id": "t_tree_burnt_season_spring", "fg": 1605, "bg": 1553, "rotates": false },
+ { "id": "t_tree_burnt_season_summer", "fg": 1606, "bg": 1553, "rotates": false },
+ { "id": "t_tree_burnt_season_winter", "fg": 1607, "bg": 1557, "rotates": false },
+ { "id": "mon_resingolem_fresh", "fg": 1608, "rotates": false },
+ { "id": "mon_resingolem_half", "fg": 1609, "rotates": false },
+ { "id": "mon_resingolem_cured", "fg": 1610, "rotates": false },
+ { "id": "mon_mithrgolem", "fg": 1611, "rotates": false },
+ { "id": "mon_orchigolem", "fg": 1612, "rotates": false }
+ ],
+ "//": "range 1553 to 1680",
+ "sprite_width": 64,
+ "sprite_height": 80,
+ "sprite_offset_x": -16,
+ "sprite_offset_y": -48
+ },
+ {
+ "file": "MagicalNights_huge.png",
+ "tiles": [
+ { "id": "f_orrery", "fg": 1681, "rotates": false },
+ { "id": "mon_dragon_black_adult", "fg": 1682, "rotates": false },
+ { "id": "corpse_mon_dragon_black_adult", "fg": 1683, "rotates": false }
+ ],
+ "//": "range 1681 to 1696",
+ "sprite_width": 160,
+ "sprite_height": 128,
+ "sprite_offset_x": -48,
+ "sprite_offset_y": -48
+ }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/modinfo.json b/data/mods/Magical_Nights/modinfo.json
new file mode 100644
index 000000000000..4b6a671ac4a6
--- /dev/null
+++ b/data/mods/Magical_Nights/modinfo.json
@@ -0,0 +1,20 @@
+[
+ {
+ "type": "MOD_INFO",
+ "id": "MagicalNights",
+ "name": "Magical Nights",
+ "authors": [ "Robbietheneko" ],
+ "maintainers": [ "Robbietheneko" ],
+ "description": "Bright Nights, but with magic! From the ashes of Magiclysm rises a new mod, and a new head at the controls. ",
+ "category": "content",
+ "conflicts": [ "magiclysm" ],
+ "dependencies": [ "bn" ]
+ },
+ {
+ "type": "skill",
+ "id": "spellcraft",
+ "name": { "str": "Spellcraft" },
+ "display_category": "display_ranged",
+ "description": "Your skill in the arcane. Represents magic theory and all that entails. A higher skill increases how quickly you can learn spells, and decreases their spell failure chance. You learn this skill by studying books or spells."
+ }
+]
diff --git a/data/mods/Magical_Nights/monster_attacks.json b/data/mods/Magical_Nights/monster_attacks.json
new file mode 100644
index 000000000000..f2b297a8a459
--- /dev/null
+++ b/data/mods/Magical_Nights/monster_attacks.json
@@ -0,0 +1,30 @@
+[
+ {
+ "type": "monster_attack",
+ "attack_type": "melee",
+ "id": "skewer",
+ "cooldown": 20,
+ "move_cost": 180,
+ "damage_max_instance": [ { "damage_type": "stab", "amount": 15, "armor_penetration": 15, "armor_multiplier": 0.5 } ],
+ "body_parts": [ [ "torso", 1 ] ],
+ "effects": [ { "id": "bleed", "duration": 100, "bp": "torso" }, { "id": "downed", "duration": 3 } ],
+ "hit_dmg_u": "The %1$s impales your %2$s with its trident!",
+ "hit_dmg_npc": "The %1$s impales 's %2$s with its trident!",
+ "no_dmg_msg_u": "The %1$s tries to impale your %2$s with its trident, but fails to penetrate your armor!",
+ "no_dmg_msg_npc": "The %1$s tries to impale 's %2$s with its trident, but fails to penetrate their armor!"
+ },
+ {
+ "type": "monster_attack",
+ "attack_type": "melee",
+ "id": "crush",
+ "cooldown": 20,
+ "move_cost": 180,
+ "damage_max_instance": [ { "damage_type": "bash", "amount": 8 } ],
+ "effects": [ { "id": "downed", "duration": 3 } ],
+ "body_parts": [ [ "head", 3 ], [ "eyes", 2 ], [ "mouth", 1 ], [ "arm_l", 3 ], [ "arm_r", 3 ], [ "torso", 4 ] ],
+ "hit_dmg_u": "The %1$s crushes your %2$s with its greatclub!",
+ "hit_dmg_npc": "The %1$s crushes 's %2$s with its greatclub!",
+ "no_dmg_msg_u": "The %1$s tries to crush your %2$s with its greatclub, but swings wide and stumbles.",
+ "no_dmg_msg_npc": "The %1$s tries to crush 's %2$s with its greatclub, but swings wide and stumbles."
+ }
+]
diff --git a/data/mods/Magical_Nights/monster_factions.json b/data/mods/Magical_Nights/monster_factions.json
new file mode 100755
index 000000000000..ea3c0cdf6a30
--- /dev/null
+++ b/data/mods/Magical_Nights/monster_factions.json
@@ -0,0 +1,31 @@
+[
+ {
+ "type": "MONSTER_FACTION",
+ "name": "magical_beast"
+ },
+ {
+ "type": "MONSTER_FACTION",
+ "name": "dragon_black",
+ "friendly": [ "ooze", "lizardfolk" ]
+ },
+ {
+ "type": "MONSTER_FACTION",
+ "name": "ooze",
+ "friendly": [ "dragon_black", "lizardfolk", "ooze" ]
+ },
+ {
+ "type": "MONSTER_FACTION",
+ "name": "lizardfolk",
+ "friendly": [ "dragon_black", "ooze", "lizardfolk" ]
+ },
+ {
+ "type": "MONSTER_FACTION",
+ "name": "goblins",
+ "friendly": [ "orcs" ]
+ },
+ {
+ "type": "MONSTER_FACTION",
+ "name": "orcs",
+ "friendly": [ "goblins" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monstergroups.json b/data/mods/Magical_Nights/monstergroups.json
new file mode 100644
index 000000000000..631082a74714
--- /dev/null
+++ b/data/mods/Magical_Nights/monstergroups.json
@@ -0,0 +1,130 @@
+[
+ {
+ "type": "monstergroup",
+ "name": "GROUP_NULL",
+ "is_safe": true,
+ "default": "mon_null"
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_FOREST",
+ "default": "mon_null",
+ "is_animal": true,
+ "override": false,
+ "auto_total": true,
+ "monsters": [
+ { "monster": "mon_owlbear", "freq": 7, "cost_multiplier": 10 },
+ { "monster": "mon_wisp", "freq": 3, "cost_multiplier": 10, "conditions": [ "NIGHT" ] },
+ { "monster": "mon_troll", "freq": 3, "cost_multiplier": 10, "conditions": [ "DAY" ] },
+ { "monster": "mon_claygolem", "freq": 8, "cost_multiplier": 3 },
+ { "monster": "mon_stonegolem", "freq": 4, "cost_multiplier": 5 },
+ { "monster": "mon_irongolem", "freq": 2, "cost_multiplier": 8 },
+ { "monster": "mon_demon_spiderling", "freq": 15, "cost_multiplier": 5, "pack_size": [ 3, 7 ] }
+ ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_SWAMP",
+ "default": "mon_null",
+ "is_animal": true,
+ "override": false,
+ "auto_total": true,
+ "monsters": [
+ { "monster": "mon_black_pudding", "freq": 14, "cost_multiplier": 1, "pack_size": [ 4, 6 ] },
+ { "monster": "mon_stirge", "freq": 7, "cost_multiplier": 1, "pack_size": [ 2, 8 ] },
+ { "monster": "mon_wisp", "freq": 5, "cost_multiplier": 10, "conditions": [ "NIGHT" ] },
+ { "monster": "mon_wisp", "freq": 1, "cost_multiplier": 10, "conditions": [ "NIGHT" ], "pack_size": [ 1, 3 ] },
+ { "monster": "mon_dragon_black_wyrmling", "freq": 2, "cost_multiplier": 50 },
+ { "monster": "mon_dragon_black_young", "freq": 1, "cost_multiplier": 65 },
+ { "monster": "mon_lizardfolk_warrior", "freq": 20, "cost_multiplier": 1, "pack_size": [ 2, 4 ] },
+ { "monster": "mon_lizardfolk_hunter", "freq": 30, "cost_multiplier": 4, "pack_size": [ 1, 2 ] },
+ { "monster": "mon_lizardfolk_shaman", "freq": 10, "cost_multiplier": 30 }
+ ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_CAVE",
+ "default": "mon_null",
+ "is_animal": true,
+ "override": false,
+ "auto_total": true,
+ "monsters": [
+ { "monster": "mon_owlbear", "freq": 100, "cost_multiplier": 10, "pack_size": [ 2, 4 ] },
+ { "monster": "mon_shrieker", "freq": 10, "cost_multiplier": 1 },
+ { "monster": "mon_lemure", "freq": 5, "cost_multiplier": 2, "pack_size": [ 1, 4 ] }
+ ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_WORM",
+ "default": "mon_worm",
+ "is_animal": true,
+ "override": false,
+ "auto_total": true,
+ "monsters": [ { "monster": "mon_bulette", "freq": 5, "cost_multiplier": 40 } ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_BLACKDRAGON_LAIR_1",
+ "default": "mon_null",
+ "is_animal": true,
+ "monsters": [
+ { "monster": "mon_black_pudding", "freq": 14, "cost_multiplier": 1, "pack_size": [ 4, 6 ] },
+ { "monster": "mon_wisp", "freq": 5, "cost_multiplier": 10, "conditions": [ "NIGHT" ] },
+ { "monster": "mon_wisp", "freq": 1, "cost_multiplier": 10, "conditions": [ "NIGHT" ], "pack_size": [ 1, 3 ] },
+ { "monster": "mon_bat", "freq": 5, "cost_multiplier": 5, "pack_size": [ 6, 10 ] },
+ { "monster": "mon_rattlesnake", "freq": 5, "cost_multiplier": 1 },
+ { "monster": "mon_rattlesnake_giant", "freq": 5, "cost_multiplier": 2 },
+ { "monster": "mon_black_rat", "freq": 10, "cost_multiplier": 1 },
+ { "monster": "mon_dragon_black_wyrmling", "freq": 2, "cost_multiplier": 50 },
+ { "monster": "mon_lizardfolk_warrior", "freq": 20, "cost_multiplier": 1, "pack_size": [ 2, 4 ] },
+ { "monster": "mon_lizardfolk_hunter", "freq": 30, "cost_multiplier": 4, "pack_size": [ 1, 2 ] },
+ { "monster": "mon_crocodile", "freq": 20, "cost_multiplier": 10, "pack_size": [ 1, 4 ] },
+ { "monster": "mon_lizardfolk_shaman", "freq": 2, "cost_multiplier": 30 },
+ { "monster": "mon_lizardfolk_chieftan", "freq": 1, "cost_multiplier": 50 }
+ ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_BLACKDRAGON_LAIR_2",
+ "default": "mon_lizardfolk_warrior",
+ "is_animal": true,
+ "monsters": [
+ { "monster": "mon_black_pudding", "freq": 14, "cost_multiplier": 1, "pack_size": [ 4, 6 ] },
+ { "monster": "mon_dragon_black_wyrmling", "freq": 2, "cost_multiplier": 50 },
+ { "monster": "mon_dragon_black_young", "freq": 1, "cost_multiplier": 65 },
+ { "monster": "mon_lizardfolk_warrior", "freq": 20, "cost_multiplier": 1, "pack_size": [ 2, 4 ] },
+ { "monster": "mon_lizardfolk_hunter", "freq": 30, "cost_multiplier": 4, "pack_size": [ 1, 2 ] },
+ { "monster": "mon_crocodile", "freq": 30, "cost_multiplier": 30, "pack_size": [ 1, 4 ] },
+ { "monster": "mon_lizardfolk_shaman", "freq": 10, "cost_multiplier": 30 },
+ { "monster": "mon_lizardfolk_chieftan", "freq": 10, "cost_multiplier": 50 }
+ ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_LIZARDFOLK",
+ "default": "mon_lizardfolk_warrior",
+ "//": "A lizard humanoid race, they are allies and servants of the black dragons.",
+ "is_animal": true,
+ "monsters": [
+ { "monster": "mon_lizardfolk_warrior", "freq": 20, "cost_multiplier": 1, "pack_size": [ 2, 4 ] },
+ { "monster": "mon_lizardfolk_hunter", "freq": 30, "cost_multiplier": 4, "pack_size": [ 1, 2 ] },
+ { "monster": "mon_crocodile", "freq": 30, "cost_multiplier": 30, "pack_size": [ 1, 4 ] },
+ { "monster": "mon_lizardfolk_shaman", "freq": 10, "cost_multiplier": 30 },
+ { "monster": "mon_lizardfolk_chieftan", "freq": 10, "cost_multiplier": 50 }
+ ]
+ },
+ {
+ "type": "monstergroup",
+ "name": "GROUP_TOWER_GOLEM",
+ "default": "mon_plasticgolem",
+ "//": "Cheap golems used to defend the average wizard's tower.",
+ "monsters": [
+ { "monster": "mon_plasticgolem", "freq": 60, "cost_multiplier": 1 },
+ { "monster": "mon_resingolem_fresh", "freq": 30, "cost_multiplier": 1 },
+ { "monster": "mon_claygolem", "freq": 20, "cost_multiplier": 1 },
+ { "monster": "mon_stonegolem", "freq": 10, "cost_multiplier": 1 },
+ { "monster": "mon_irongolem", "freq": 5, "cost_multiplier": 1 }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monstergroups_egg.json b/data/mods/Magical_Nights/monstergroups_egg.json
new file mode 100644
index 000000000000..c83689d2b043
--- /dev/null
+++ b/data/mods/Magical_Nights/monstergroups_egg.json
@@ -0,0 +1,7 @@
+[
+ {
+ "name": "GROUP_EGG_OWLBEAR",
+ "type": "monstergroup",
+ "default": "mon_owlbear_cub"
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters.json b/data/mods/Magical_Nights/monsters.json
new file mode 100644
index 000000000000..6995b718c767
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters.json
@@ -0,0 +1,82 @@
+[
+ {
+ "id": "mon_mirror_image",
+ "type": "MONSTER",
+ "name": "hologram",
+ "description": "An image made from light, nearly identical to the real deal.",
+ "looks_like": "player",
+ "default_faction": "factionless",
+ "species": [ "UNKNOWN" ],
+ "volume": "62500 ml",
+ "weight": "81500 g",
+ "hp": 1,
+ "speed": 150,
+ "symbol": "@",
+ "color": "cyan",
+ "aggression": -99,
+ "morale": 2,
+ "luminance": 16,
+ "dodge": 6,
+ "harvest": "exempt",
+ "fear_triggers": [ "PLAYER_CLOSE" ],
+ "special_attacks": [ [ "DISAPPEAR", 200 ] ],
+ "death_function": [ "DISAPPEAR" ],
+ "flags": [ "FLIES", "NO_BREATHE", "NOT_HALLUCINATION", "HARDTOSHOOT" ]
+ },
+ {
+ "id": "mon_animated_blade",
+ "type": "MONSTER",
+ "name": "animated blade",
+ "description": "A conjured glowing longsword that darts and dodges around, slicing and cutting your foes into small pieces.",
+ "looks_like": "longsword",
+ "default_faction": "player",
+ "volume": "62500 ml",
+ "weight": "81500 g",
+ "hp": 30,
+ "speed": 120,
+ "symbol": "/",
+ "color": "white",
+ "aggression": 100,
+ "morale": 100,
+ "melee_skill": 5,
+ "melee_dice": 1,
+ "melee_dice_sides": 10,
+ "melee_cut": 10,
+ "dodge": 6,
+ "luminance": 16,
+ "path_settings": { "max_dist": 10 },
+ "armor_bash": 2,
+ "armor_cut": 2,
+ "armor_bullet": 2,
+ "vision_day": 30,
+ "vision_night": 30,
+ "material": [ "steel" ],
+ "harvest": "exempt",
+ "death_function": [ "MELT" ],
+ "flags": [ "SEES", "HEARS", "NOHEAD", "HARDTOSHOOT", "FLIES", "PRIORITIZE_TARGETS", "NO_BREATHE", "NOGIB" ]
+ },
+ {
+ "id": "mon_summoned_zombie",
+ "type": "MONSTER",
+ "copy-from": "mon_zombie",
+ "name": "Summoned Zombie",
+ "description": "A summoned zombie. Slightly more intelligent than its wild cousins.",
+ "path_settings": { "max_dist": 10 }
+ },
+ {
+ "id": "mon_summoned_skeleton",
+ "type": "MONSTER",
+ "copy-from": "mon_skeleton",
+ "name": "Summoned Skeleton",
+ "description": "A summoned skeleton. Slightly more intelligent than its wild cousins. Seems like it somehow enjoys puns.",
+ "path_settings": { "max_dist": 10 }
+ },
+ {
+ "id": "mon_summoned_zougar",
+ "type": "MONSTER",
+ "copy-from": "mon_zougar",
+ "name": "Summoned Decayed Pouncer",
+ "description": "A summoned zombie cougar. Slightly more intelligent than its wild cousins.",
+ "path_settings": { "max_dist": 10 }
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/demon_spider.json b/data/mods/Magical_Nights/monsters/demon_spider.json
new file mode 100644
index 000000000000..6b4223e5aa45
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/demon_spider.json
@@ -0,0 +1,119 @@
+[
+ {
+ "type": "SPECIES",
+ "id": "DEMON_SPIDER",
+ "name": { "str": "demon spider" },
+ "anger_triggers": [ "FRIEND_DIED", "HURT", "PLAYER_CLOSE", "PLAYER_WEAK" ]
+ },
+ {
+ "id": "demon_spider_queen",
+ "type": "harvest",
+ "//": "separate harvest entry for future special alchemical items",
+ "entries": [
+ { "drop": "blood_tainted", "type": "blood", "mass_ratio": 0.1 },
+ { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.1 },
+ { "drop": "meat", "type": "flesh", "mass_ratio": 0.05 },
+ { "drop": "demon_chitin_piece", "type": "bone", "mass_ratio": 0.04 },
+ { "drop": "demon_chitin_plate", "type": "skin", "mass_ratio": 0.01 },
+ { "drop": "demon_spider_fang", "base_num": [ 0, 0 ], "scale_num": [ 0.1, 0.6 ], "max": 2, "type": "flesh" }
+ ]
+ },
+ {
+ "type": "MONSTER_FACTION",
+ "name": "demon_spider",
+ "base_faction": "spider"
+ },
+ {
+ "id": "mon_demon_spiderling",
+ "type": "MONSTER",
+ "name": "demon spiderling",
+ "description": "Despite it being the size of a small dog, you can tell this is a very young spider. Its red color is why you gave it this name; you have never seen this creature before the Cataclysm. It is quick, and its large fangs drip with venom.",
+ "default_faction": "demon_spider",
+ "bodytype": "spider",
+ "species": [ "DEMON_SPIDER" ],
+ "material": [ "iflesh", "demon_chitin" ],
+ "diff": 2,
+ "volume": "30000 ml",
+ "weight": "40750 g",
+ "hp": 30,
+ "speed": 150,
+ "symbol": "s",
+ "color": "red",
+ "aggression": -10,
+ "morale": 100,
+ "melee_skill": 3,
+ "melee_dice": 1,
+ "melee_dice_sides": 8,
+ "melee_cut": 4,
+ "dodge": 3,
+ "armor_bash": 1,
+ "armor_cut": 8,
+ "armor_stab": 8,
+ "armor_bullet": 8,
+ "armor_acid": 3,
+ "armor_fire": 80,
+ "vision_day": 5,
+ "vision_night": 7,
+ "harvest": "demon_spider",
+ "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT", "STALK", "PLAYER_WEAK", "PLAYER_CLOSE" ],
+ "death_function": [ "NORMAL" ],
+ "flags": [ "SEES", "SMELLS", "HEARS", "VENOM", "WEBWALK", "CLIMBS", "HARDTOSHOOT", "PUSH_MON" ]
+ },
+ {
+ "id": "mon_demon_spider",
+ "type": "MONSTER",
+ "description": "This spider is the size of a car. Its huge compound eyes seem to be infinite pools of blackness that seem to suck the light out of the air. Its maroon carapace is studded with wicked-looking spikes that drip with some kind of viscious black liquid that sizzles when it touches the ground.",
+ "name": "demon spider",
+ "default_faction": "demon_spider",
+ "bodytype": "spider",
+ "species": [ "DEMON_SPIDER" ],
+ "material": [ "iflesh", "demon_chitin" ],
+ "diff": 7,
+ "weight": "125 kg",
+ "//": "monster can't be any bigger because of limits of volume on tiles. if there is a way designed around this, it should be about 3500 L",
+ "volume": "1000 L",
+ "hp": 325,
+ "speed": 95,
+ "symbol": "S",
+ "color": "red",
+ "aggression": 50,
+ "morale": 100,
+ "melee_skill": 5,
+ "melee_dice": 5,
+ "melee_dice_sides": 10,
+ "melee_cut": 12,
+ "dodge": 1,
+ "armor_bash": 5,
+ "armor_cut": 45,
+ "armor_stab": 60,
+ "armor_bullet": 60,
+ "armor_acid": 10,
+ "armor_fire": 80,
+ "vision_day": 6,
+ "vision_night": 12,
+ "harvest": "demon_spider",
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "monster_burning_hands", "min_level": 4 }, "cooldown": 20 } ],
+ "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT", "STALK", "PLAYER_WEAK", "PLAYER_CLOSE" ],
+ "death_function": [ "NORMAL" ],
+ "flags": [ "SEES", "SMELLS", "HEARS", "VENOM", "WEBWALK", "CLIMBS", "HARDTOSHOOT", "PUSH_MON" ]
+ },
+ {
+ "id": "mon_demon_spider_queen",
+ "type": "MONSTER",
+ "name": "demon spider queen",
+ "description": "This gigantic spider is the size of a moving van: you have no idea how it manages to stay together, much less move with that bulk. Its abdomen is huge and swollen-looking, and an evil intelligence burns in its eyes even as magic crackles around its chitinous barbs.",
+ "copy-from": "mon_demon_spider",
+ "weight": "250 kg",
+ "hp": 1400,
+ "speed": 25,
+ "aggression": 100,
+ "melee_skill": 8,
+ "melee_dice_sides": 20,
+ "melee_cut": 30,
+ "vision_day": 12,
+ "vision_night": 18,
+ "harvest": "demon_spider_queen",
+ "flags": [ "SEES", "SMELLS", "HEARS", "VENOM", "WEBWALK", "CLIMBS", "HARDTOSHOOT", "PUSH_MON", "STUN_IMMUNE" ],
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "mon_summon_demon_spiderlings" }, "cooldown": 256 } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/dragon.json b/data/mods/Magical_Nights/monsters/dragon.json
new file mode 100644
index 000000000000..a9bde8a48da6
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/dragon.json
@@ -0,0 +1,156 @@
+[
+ {
+ "id": "fd_fright",
+ "type": "field_type",
+ "intensity_levels": [
+ {
+ "name": "dreadful presense",
+ "sym": "8",
+ "dangerous": true,
+ "effects": [
+ {
+ "effect_id": "eff_frightful_presence",
+ "body_part": "torso",
+ "intensity": 1,
+ "min_duration": "2 seconds",
+ "max_duration": "2 seconds",
+ "is_environmental": false
+ }
+ ]
+ },
+ {
+ "name": "frightful presense",
+ "color": "light_gray",
+ "effects": [
+ {
+ "effect_id": "eff_frightful_presence",
+ "body_part": "torso",
+ "intensity": 2,
+ "min_duration": "2 seconds",
+ "max_duration": "2 seconds",
+ "is_environmental": false
+ }
+ ]
+ },
+ {
+ "name": "terrifying presense",
+ "color": "dark_gray",
+ "effects": [
+ {
+ "effect_id": "eff_frightful_presence",
+ "body_part": "torso",
+ "intensity": 3,
+ "min_duration": "2 seconds",
+ "max_duration": "2 seconds",
+ "is_environmental": false
+ }
+ ]
+ }
+ ],
+ "decay_amount_factor": 5,
+ "gas_absorption_factor": 12,
+ "dirty_transparency_cache": true,
+ "percent_spread": 40,
+ "outdoor_age_speedup": "0 turns",
+ "immunity_data": { "body_part_env_resistance": [ [ "eyes", 12 ] ] },
+ "priority": 8,
+ "half_life": "2 minutes",
+ "phase": "gas",
+ "accelerated_decay": true,
+ "display_field": false
+ },
+ {
+ "id": "emit_dragon_adult_fright",
+ "type": "emit",
+ "field": "fd_fright",
+ "intensity": 2,
+ "qty": 60
+ },
+ {
+ "id": "mon_dragon_black_wyrmling",
+ "type": "MONSTER",
+ "name": "black dragon wyrmling",
+ "description": "This is a small black dragon, less than five years old. Its scales are glossy, and its horns barely peek out of its head. Even from one so young, you see the glint of sadism in its eyes.",
+ "default_faction": "dragon_black",
+ "bodytype": "angel",
+ "species": [ "DRAGON" ],
+ "volume": "80 L",
+ "weight": "65 kg",
+ "hp": 180,
+ "speed": 150,
+ "material": [ "flesh" ],
+ "symbol": "D",
+ "color": "black_white",
+ "aggression": 100,
+ "morale": 100,
+ "melee_skill": 2,
+ "melee_dice": 2,
+ "melee_dice_sides": 4,
+ "melee_cut": 9,
+ "dodge": 5,
+ "armor_bash": 4,
+ "armor_cut": 12,
+ "armor_bullet": 10,
+ "armor_acid": 600,
+ "vision_day": 30,
+ "vision_night": 20,
+ "path_settings": { "//min_dist": 8 },
+ "harvest": "dragon_black",
+ "death_function": [ "NORMAL" ],
+ "special_attacks": [
+ { "type": "bite", "cooldown": 10 },
+ [ "scratch", 7 ],
+ { "type": "spell", "spell_data": { "id": "dragon_breath_black", "min_level": 4 }, "cooldown": 20 }
+ ],
+ "flags": [ "SEES", "HEARS", "SMELLS", "KEENNOSE", "PATH_AVOID_DANGER_2", "WARM", "SWIMS", "ACIDPROOF", "PUSH_MON", "FLIES" ]
+ },
+ {
+ "id": "mon_dragon_black_young",
+ "type": "MONSTER",
+ "name": "young black dragon",
+ "description": "This black dragon appears to still be in the early stages of life. Its eyes have just started to sink in its sockets, and its curved, segmented horns have just begun to darken at the tips. You can tell just by looking at it, this creature is evil to its very core. Even though this dragon is not fully grown, it is the size of a full-grown bull.",
+ "copy-from": "mon_dragon_black_wyrmling",
+ "//": "should be roughly 4000 L, as that's the size of a large cow.",
+ "volume": "1000 L",
+ "weight": "1000 kg",
+ "hp": 1200,
+ "melee_skill": 5,
+ "melee_dice": 3,
+ "melee_dice_sides": 10,
+ "melee_cut": 16,
+ "armor_bash": 12,
+ "armor_cut": 20,
+ "armor_bullet": 16,
+ "special_attacks": [
+ { "type": "bite", "cooldown": 10 },
+ [ "scratch", 3 ],
+ { "type": "spell", "spell_data": { "id": "dragon_breath_black", "min_level": 12 }, "cooldown": 20 }
+ ]
+ },
+ {
+ "id": "mon_dragon_black_adult",
+ "type": "MONSTER",
+ "name": "adult black dragon",
+ "description": "A black-scaled monstrosity with deep-set eye sockets glowing green with evil. Its face and skull appear skeletal, and acid drips from its dagger-like jaws.",
+ "copy-from": "mon_dragon_black_young",
+ "//": "If it were possible, the adult would be about double the size of a young version or so.",
+ "weight": "2200 kg",
+ "hp": 2000,
+ "melee_dice": 4,
+ "melee_dice_sides": 12,
+ "melee_cut": 24,
+ "armor_bash": 20,
+ "armor_cut": 32,
+ "armor_bullet": 24,
+ "dodge": 2,
+ "//2": "Large means powerful, but it does not mean fast.",
+ "speed": 100,
+ "delete": { "flags": [ "PATH_AVOID_DANGER_2" ] },
+ "emit_fields": [ { "emit_id": "emit_dragon_adult_fright", "delay": "1 s" } ],
+ "special_attacks": [
+ { "type": "bite", "cooldown": 10 },
+ [ "scratch", 3 ],
+ { "type": "spell", "spell_data": { "id": "dragon_breath_black", "min_level": 22 }, "cooldown": 30 }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/goblins.json b/data/mods/Magical_Nights/monsters/goblins.json
new file mode 100644
index 000000000000..71c45bf9d78c
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/goblins.json
@@ -0,0 +1,87 @@
+[
+ {
+ "id": "mon_goblin_warrior",
+ "type": "MONSTER",
+ "name": "Goblin",
+ "description": "A short, mischievous green humanoid covered in dirty, slightly-worn clothing. Brandishing a cudgel and with a certain grin on its face, you can tell that it loves causing trouble and likely won't back down from a fight.",
+ "default_faction": "goblins",
+ "bodytype": "human",
+ "species": [ "GOBLIN" ],
+ "volume": "30 L",
+ "weight": "45 kg",
+ "hp": 50,
+ "speed": 115,
+ "material": [ "flesh" ],
+ "symbol": "g",
+ "color": "brown",
+ "aggression": 80,
+ "morale": 80,
+ "vision_day": 25,
+ "vision_night": 10,
+ "melee_skill": 4,
+ "melee_dice": 2,
+ "melee_dice_sides": 4,
+ "dodge": 3,
+ "armor_bash": 6,
+ "armor_cut": 8,
+ "armor_bullet": 5,
+ "armor_stab": 6,
+ "harvest": "human",
+ "//": "We haven't demihuman, so I went with the Troll solution of just going human.",
+ "death_function": [ "NORMAL" ],
+ "death_drops": "goblin_warrior_drops",
+ "special_attacks": [ [ "crush", 5 ], { "type": "bite", "cooldown": 5 } ],
+ "flags": [
+ "SEES",
+ "HEARS",
+ "SMELLS",
+ "PATH_AVOID_DANGER_1",
+ "GROUP_MORALE",
+ "ATTACKMON",
+ "PUSH_MON",
+ "SWARMS",
+ "BONES",
+ "CAN_OPEN_DOORS"
+ ]
+ },
+ {
+ "type": "MONSTER",
+ "id": "mon_goblin_slinger",
+ "name": { "str": "Goblin Slinger" },
+ "description": "A short green humanoid who slings rocks just about as well as it slings insults. They have quite a penchant for taunting, and they're dodgier in more ways than one.",
+ "copy-from": "mon_goblin_warrior",
+ "melee_skill": 2,
+ "dodge": 5,
+ "death_drops": "goblin_slinger_drops",
+ "starting_ammo": { "pebble": 30 },
+ "extend": {
+ "special_attacks": [
+ {
+ "type": "gun",
+ "cooldown": 15,
+ "move_cost": 90,
+ "gun_type": "sling",
+ "ammo_type": "pebble",
+ "fake_skills": [ [ "gun", 4 ], [ "rifle", 4 ] ],
+ "fake_dex": 8,
+ "fake_per": 8,
+ "require_targeting_player": false,
+ "description": "The goblin slings a rock at you!",
+ "ranges": [ [ 2, 10, "DEFAULT" ] ],
+ "no_ammo_sound": "grunting"
+ }
+ ]
+ }
+ },
+ {
+ "id": "mon_goblin_chieftain",
+ "type": "MONSTER",
+ "copy-from": "mon_goblin_warrior",
+ "name": { "str": "Goblin Chieftain" },
+ "description": "An ugly bastard of a goblin who asserted his rule over the rest through liberal application of violence and a little extra cunning. He's much tougher, and he brandishes a weapon that has faint tinges of magic.",
+ "hp": 150,
+ "melee_dice_sides": 8,
+ "melee_damage": [ { "damage_type": "cut", "amount": 4 } ],
+ "death_drops": "goblin_chieftain_drops"
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/golems.json b/data/mods/Magical_Nights/monsters/golems.json
new file mode 100644
index 000000000000..c1824de1d774
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/golems.json
@@ -0,0 +1,293 @@
+[
+ {
+ "id": "mon_claygolem",
+ "type": "MONSTER",
+ "name": "clay golem",
+ "description": "A large, humanoid golem made from clay. Its proportions are off and it seems fragile.",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "diff": 2,
+ "volume": "120 L",
+ "weight": "122 kg",
+ "hp": 100,
+ "speed": 80,
+ "material": [ "clay" ],
+ "symbol": "X",
+ "color": "brown",
+ "aggression": 8,
+ "morale": 100,
+ "melee_skill": 6,
+ "melee_dice": 2,
+ "melee_dice_sides": 10,
+ "melee_cut": 5,
+ "armor_bash": 10,
+ "armor_cut": 10,
+ "armor_bullet": 10,
+ "armor_fire": 4,
+ "dodge": 0,
+ "vision_day": 40,
+ "vision_night": 40,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_plasticgolem",
+ "type": "MONSTER",
+ "name": { "str": "plastic golem" },
+ "description": "Traditionally, making a golem is a months-long process involving hand tools and precision craftsmanship. A stone golem is as much a work of art as it is a magical device. The advent of 3D printing made it easy to get into the golem-making hobby, and plastic golems have soared in popularity.",
+ "default_faction": "robot",
+ "species": [ "ROBOT" ],
+ "volume": "150 L",
+ "weight": "70 kg",
+ "hp": 120,
+ "speed": 90,
+ "material": [ "plastic" ],
+ "symbol": "G",
+ "color": "light_gray",
+ "aggression": 30,
+ "morale": 100,
+ "armor_bash": 18,
+ "armor_cut": 6,
+ "armor_bullet": 5,
+ "melee_skill": 5,
+ "melee_dice": 3,
+ "melee_dice_sides": 6,
+ "melee_cut": 3,
+ "vision_day": 30,
+ "vision_night": 30,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "HEARS", "NO_BREATHE", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_stonegolem",
+ "type": "MONSTER",
+ "name": "stone golem",
+ "description": "A large, humanoid golem made from stone. Its fists look similar to rockets.",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "diff": 2,
+ "volume": "120 L",
+ "weight": "162 kg",
+ "hp": 250,
+ "speed": 60,
+ "material": [ "stone" ],
+ "symbol": "X",
+ "color": "light_gray",
+ "aggression": 8,
+ "morale": 100,
+ "melee_skill": 6,
+ "melee_dice": 3,
+ "melee_dice_sides": 8,
+ "melee_cut": 6,
+ "armor_bash": 20,
+ "armor_cut": 20,
+ "armor_bullet": 16,
+ "armor_fire": 20,
+ "dodge": 0,
+ "vision_day": 40,
+ "vision_night": 40,
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "rocket_punch", "min_level": 5 }, "cooldown": 10 } ],
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_irongolem",
+ "type": "MONSTER",
+ "name": "iron golem",
+ "description": "A large, humanoid golem made from iron. Some sort of noxious gas seems to be seeping from its mouth.",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "diff": 2,
+ "volume": "120 L",
+ "weight": "945 kg",
+ "hp": 400,
+ "speed": 50,
+ "material": [ "iron" ],
+ "symbol": "X",
+ "color": "dark_gray",
+ "aggression": 9,
+ "morale": 100,
+ "melee_skill": 6,
+ "melee_dice": 3,
+ "melee_dice_sides": 10,
+ "melee_cut": 7,
+ "armor_bash": 32,
+ "armor_cut": 32,
+ "armor_bullet": 26,
+ "armor_fire": 32,
+ "dodge": 0,
+ "vision_day": 40,
+ "vision_night": 40,
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "gas_attack", "min_level": 5 }, "cooldown": 60 } ],
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_resingolem_fresh",
+ "type": "MONSTER",
+ "name": { "str": "fresh resin golem" },
+ "description": "Traditionally, creating a golem is a long and arduous process, taking several months for a golem so large as this one. However, the advent of modern materials has allowed for much simpler and quicker to make golems. This golem appears to somehow still be very fresh, almost as if it had only been very recently poured, and it can likely recover from wounds rather quickly",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "volume": "150 L",
+ "weight": "70 kg",
+ "hp": 150,
+ "speed": 90,
+ "material": [ "plastic" ],
+ "symbol": "G",
+ "color": "green",
+ "aggression": 30,
+ "morale": 100,
+ "armor_bash": 12,
+ "armor_cut": 8,
+ "armor_bullet": 7,
+ "melee_skill": 5,
+ "melee_dice": 4,
+ "melee_dice_sides": 6,
+ "melee_cut": 3,
+ "vision_day": 30,
+ "vision_night": 30,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "regenerates": 25,
+ "upgrades": { "into": "mon_resingolem_half", "half_life": 25 },
+ "flags": [ "SEES", "HEARS", "NO_BREATHE", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_resingolem_half",
+ "type": "MONSTER",
+ "name": { "str": "somewhat-cured resin golem" },
+ "description": "Traditionally, creating a golem is a long and arduous process, taking several months for a golem so large as this one. However, the advent of modern materials has allowed for much simpler and quicker to make golems. This golem appears to be partially, but not fully, cured. As such, it can likely recover from small injuries given some time.",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "volume": "150 L",
+ "weight": "70 kg",
+ "hp": 250,
+ "speed": 90,
+ "material": [ "plastic" ],
+ "symbol": "G",
+ "color": "blue",
+ "aggression": 30,
+ "morale": 100,
+ "armor_bash": 20,
+ "armor_cut": 14,
+ "armor_bullet": 14,
+ "melee_skill": 6,
+ "melee_dice": 4,
+ "melee_dice_sides": 8,
+ "melee_cut": 6,
+ "vision_day": 30,
+ "vision_night": 30,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "regenerates": 10,
+ "upgrades": { "into": "mon_resingolem_cured", "half_life": 25 },
+ "flags": [ "SEES", "HEARS", "NO_BREATHE", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_resingolem_cured",
+ "type": "MONSTER",
+ "name": { "str": "hardened resin golem" },
+ "description": "Traditionally, creating a golem is a long and arduous process, taking several months for a golem so large as this one. However, the advent of modern materials has allowed for much simpler and quicker to make golems. This golem appears to be fully cured, meaning it'll be almost like stone. You can't quite tell whether that's just a pattern on it, or if it's something more sinister…",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "volume": "150 L",
+ "weight": "70 kg",
+ "hp": 375,
+ "speed": 90,
+ "material": [ "plastic" ],
+ "symbol": "G",
+ "color": "red",
+ "aggression": 30,
+ "morale": 100,
+ "armor_bash": 30,
+ "armor_cut": 26,
+ "armor_bullet": 24,
+ "melee_skill": 8,
+ "melee_dice": 4,
+ "melee_dice_sides": 10,
+ "melee_cut": 5,
+ "vision_day": 30,
+ "vision_night": 30,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "HEARS", "NO_BREATHE", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_orchigolem",
+ "type": "MONSTER",
+ "name": "orichalcum golem",
+ "description": "A large, humanoid golem made from orichalcum. It's arms are fashioned into sharp blades.",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "diff": 2,
+ "volume": "120 L",
+ "weight": "600 kg",
+ "hp": 600,
+ "speed": 70,
+ "material": [ "orichalcum_metal" ],
+ "symbol": "X",
+ "color": "light_green",
+ "aggression": 9,
+ "morale": 100,
+ "melee_skill": 10,
+ "melee_dice": 5,
+ "melee_dice_sides": 12,
+ "melee_cut": 10,
+ "armor_bash": 40,
+ "armor_cut": 40,
+ "armor_bullet": 35,
+ "armor_fire": 40,
+ "dodge": 0,
+ "vision_day": 40,
+ "vision_night": 40,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ]
+ },
+ {
+ "id": "mon_mithrgolem",
+ "type": "MONSTER",
+ "name": "mithril golem",
+ "description": "A large, humanoid golem made from mithril. This golem is practically invulnerable. Luckily, it is less aggressive",
+ "default_faction": "robot",
+ "bodytype": "human",
+ "species": [ "ROBOT" ],
+ "diff": 2,
+ "volume": "120 L",
+ "weight": "945 kg",
+ "hp": 800,
+ "speed": 80,
+ "material": [ "mithril_metal" ],
+ "symbol": "X",
+ "color": "light_blue",
+ "looks_like": "mon_irongolem",
+ "aggression": 1,
+ "morale": 100,
+ "melee_skill": 8,
+ "melee_dice": 3,
+ "melee_dice_sides": 10,
+ "melee_cut": 7,
+ "armor_bash": 50,
+ "armor_cut": 50,
+ "armor_bullet": 40,
+ "armor_fire": 50,
+ "dodge": 0,
+ "vision_day": 40,
+ "vision_night": 40,
+ "anger_triggers": [ "PLAYER_CLOSE", "HURT" ],
+ "death_function": [ "BROKEN" ],
+ "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/lizardfolk.json b/data/mods/Magical_Nights/monsters/lizardfolk.json
new file mode 100644
index 000000000000..131d566e7bbb
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/lizardfolk.json
@@ -0,0 +1,140 @@
+[
+ {
+ "id": "mon_lizardfolk_warrior",
+ "type": "MONSTER",
+ "name": "lizardfolk warrior",
+ "description": "A tall, powerful, reptilian humanoid with a muscular tail whose skin is covered in dark gray-green scales. They are tribal and tend to be found in caves and near water, especially in areas inhabited by dragons and wyrms. They aren't particularly hostile, though they don't care for outsiders and are highly dangerous when provoked. While they usually prefer to fight with their greatclubs, they are equally ferocious with their sharp teeth and claws.",
+ "default_faction": "lizardfolk",
+ "bodytype": "human",
+ "species": [ "LIZARDFOLK" ],
+ "volume": "80 L",
+ "weight": "100 kg",
+ "hp": 80,
+ "speed": 105,
+ "material": [ "flesh" ],
+ "symbol": "L",
+ "color": "green",
+ "aggression": 80,
+ "morale": 80,
+ "vision_day": 10,
+ "vision_night": 20,
+ "melee_skill": 4,
+ "melee_dice": 2,
+ "melee_dice_sides": 4,
+ "dodge": 1,
+ "armor_bash": 2,
+ "armor_cut": 12,
+ "armor_bullet": 10,
+ "armor_stab": 6,
+ "harvest": "lizardfolk",
+ "death_function": [ "NORMAL" ],
+ "death_drops": [
+ { "item": "lizardfolk_club", "prob": 30 },
+ { "item": "loincloth", "prob": 40 },
+ { "item": "leather_belt", "prob": 20 },
+ { "item": "bone_human", "prob": 10 }
+ ],
+ "special_attacks": [ [ "crush", 5 ], { "type": "bite", "cooldown": 5 } ],
+ "flags": [
+ "SEES",
+ "HEARS",
+ "SMELLS",
+ "KEENNOSE",
+ "PATH_AVOID_DANGER_1",
+ "CLIMBS",
+ "GROUP_MORALE",
+ "LEATHER",
+ "SWIMS",
+ "ATTACKMON",
+ "PUSH_MON",
+ "SWARMS",
+ "BONES",
+ "CAN_OPEN_DOORS",
+ "NO_BREATHE"
+ ]
+ },
+ {
+ "id": "mon_lizardfolk_hunter",
+ "type": "MONSTER",
+ "name": "lizardfolk hunter",
+ "description": "The hunter is a smaller lizardfolk than a warrior, but equally as deadly, with their lithe figures and accurate javelin throws.",
+ "copy-from": "mon_lizardfolk_warrior",
+ "symbol": "L",
+ "dodge": 3,
+ "special_attacks": [
+ {
+ "type": "gun",
+ "cooldown": 5,
+ "move_cost": 150,
+ "gun_type": "lizardfolk_javelin_gun",
+ "fake_skills": [ [ "gun", 8 ], [ "rifle", 8 ] ],
+ "fake_dex": 8,
+ "fake_per": 8,
+ "require_targeting_player": false,
+ "ranges": [ [ 2, 10, "DEFAULT" ] ],
+ "description": "The hunter hurls a barbed javelin at you!"
+ },
+ { "type": "bite", "cooldown": 5 }
+ ],
+ "death_drops": [
+ { "item": "lizardfolk_javelin", "prob": 30 },
+ { "item": "loincloth", "prob": 40 },
+ { "item": "spearsling", "prob": 20 },
+ { "item": "bone_human", "prob": 10 }
+ ]
+ },
+ {
+ "id": "mon_lizardfolk_shaman",
+ "type": "MONSTER",
+ "name": "lizardfolk shaman",
+ "description": "Lizardfolk are very intelligent and cunning, but magical ability is a rare quality. Shamans are chosen from the tribe during childhood, when magical abilities mark the fate of the young tribesman. Not much is known about the initiation ritual they must undergo, but few survive the experience. Shamans are druidic spellcasters that can use the forces of nature to battle enemies, as well as summoning assistance when needed.",
+ "copy-from": "mon_lizardfolk_warrior",
+ "symbol": "L",
+ "hp": 100,
+ "melee_skill": 3,
+ "melee_dice": 2,
+ "melee_dice_sides": 6,
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "spell_shaman_base" }, "cooldown": 5 }, [ "scratch", 5 ] ],
+ "death_drops": {
+ "subtype": "distribution",
+ "items": [
+ { "group": "enchanted_small_items", "prob": 40 },
+ { "group": "enchanted_melee_weapons_plus1", "prob": 20 },
+ { "group": "enchanted_wands_lesser", "prob": 10 },
+ { "item": "robe", "prob": 40 },
+ { "item": "leather_belt", "prob": 20 }
+ ]
+ }
+ },
+ {
+ "id": "mon_lizardfolk_chieftan",
+ "type": "MONSTER",
+ "name": "lizardfolk chieftan",
+ "description": "Among the lizardfolk, ambition is a rare quality. Chieftans earn their place by exhibiting unusually high levels of ambition, often mistaken by outsiders as excessive, brutal violence. This chief is the largest and strongest member of its tribe and carries a fierce trident to compliment its teeth and claws.",
+ "copy-from": "mon_lizardfolk_warrior",
+ "symbol": "L",
+ "hp": 200,
+ "melee_skill": 4,
+ "melee_dice": 3,
+ "melee_dice_sides": 8,
+ "special_attacks": [ [ "skewer", 2 ], { "type": "bite", "cooldown": 5 } ],
+ "death_drops": [
+ { "item": "lizardfolk_trident", "prob": 30 },
+ { "group": "lair_loot_generic", "prob": 40 },
+ { "item": "spearsling", "prob": 20 },
+ { "item": "bone_human", "prob": 10 }
+ ]
+ },
+ {
+ "id": "mon_crocodile",
+ "type": "MONSTER",
+ "name": "crocodile",
+ "copy-from": "mon_gator",
+ "//": "A copy of the standard mon_gator (from reptile_amphibian.json) with a different description to match the lizardfolk lore. Lizardfolk Shamans are able to shapeshift into crocodile form.",
+ "description": "A once-and-future lizardfolk shaman, this large crocodile no longer has any hint of any humanoid characteristics and looks very, very dangerous.",
+ "default_faction": "lizardfolk",
+ "species": [ "LIZARDFOLK" ],
+ "symbol": "C",
+ "harvest": "lizardfolk"
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/monsterdrops.json b/data/mods/Magical_Nights/monsters/monsterdrops.json
new file mode 100755
index 000000000000..c95b718eb155
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/monsterdrops.json
@@ -0,0 +1,77 @@
+[
+ {
+ "type": "item_group",
+ "subtype": "collection",
+ "id": "goblin_warrior_drops",
+ "entries": [
+ { "item": "helmet_scrap", "prob": 40 },
+ { "item": "legguard_scrap", "prob": 40 },
+ { "item": "boots_scrap", "prob": 40 },
+ { "item": "armguard_scrap", "prob": 40 },
+ { "item": "cuirass_scrap", "prob": 40 },
+ { "item": "cudgel", "prob": 95 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "subtype": "collection",
+ "id": "goblin_slinger_drops",
+ "entries": [
+ { "item": "helmet_scrap", "prob": 40 },
+ { "item": "legguard_scrap", "prob": 40 },
+ { "item": "boots_scrap", "prob": 40 },
+ { "item": "armguard_scrap", "prob": 40 },
+ { "item": "cuirass_scrap", "prob": 40 },
+ { "item": "sling", "prob": 95 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "subtype": "collection",
+ "id": "goblin_chieftain_drops",
+ "entries": [
+ { "item": "helmet_scrap", "prob": 40 },
+ { "item": "legguard_scrap", "prob": 40 },
+ { "item": "boots_scrap", "prob": 40 },
+ { "item": "armguard_scrap", "prob": 40 },
+ { "item": "cuirass_scrap", "prob": 40 },
+ { "group": "enchanted_melee_weapons_plus1", "prob": 100 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "subtype": "collection",
+ "id": "orc_warrior_drops",
+ "entries": [
+ { "item": "chainmail_legs", "prob": 40 },
+ { "item": "chainmail_feet", "prob": 40 },
+ { "item": "chainmail_arms", "prob": 40 },
+ { "item": "chainmail_vest", "prob": 40 },
+ { "item": "cutlass", "prob": 95 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "subtype": "collection",
+ "id": "orc_archer_drops",
+ "entries": [
+ { "item": "chainmail_legs", "prob": 40 },
+ { "item": "chainmail_feet", "prob": 40 },
+ { "item": "chainmail_arms", "prob": 40 },
+ { "item": "chainmail_vest", "prob": 40 },
+ { "item": "longbow", "prob": 95 }
+ ]
+ },
+ {
+ "type": "item_group",
+ "subtype": "collection",
+ "id": "orc_blood_warrior_drops",
+ "entries": [
+ { "item": "chainmail_legs", "prob": 40 },
+ { "item": "chainmail_feet", "prob": 40 },
+ { "item": "chainmail_arms", "prob": 40 },
+ { "item": "chainmail_vest", "prob": 40 },
+ { "item": "pike_plus_one", "prob": 95 }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/monsters.json b/data/mods/Magical_Nights/monsters/monsters.json
new file mode 100644
index 000000000000..ba0660b71bb4
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/monsters.json
@@ -0,0 +1,345 @@
+[
+ {
+ "id": "mon_owlbear",
+ "type": "MONSTER",
+ "name": "owlbear",
+ "description": "The horrible owlbear is probably the result of genetic experimentation by some insane wizard. These creatures inhabit the tangled forest regions of every temperate climate, as well as subterranean labyrinths. They are even more easily angered than normal bears, so it's best to keep a distance. Something tells you this isn't exactly a very old species, based on only recently seeing them.",
+ "default_faction": "magical_beast",
+ "bodytype": "bear",
+ "species": [ "MAGICAL_BEAST" ],
+ "volume": "450000 ml",
+ "weight": "450 kg",
+ "hp": 260,
+ "speed": 120,
+ "material": [ "flesh" ],
+ "symbol": "W",
+ "color": "brown",
+ "aggression": 8,
+ "morale": 100,
+ "melee_skill": 6,
+ "melee_dice": 5,
+ "melee_dice_sides": 8,
+ "melee_cut": 8,
+ "dodge": 3,
+ "armor_bash": 5,
+ "armor_cut": 2,
+ "armor_bullet": 2,
+ "vision_night": 20,
+ "anger_triggers": [ "HURT", "PLAYER_NEAR_BABY", "PLAYER_CLOSE" ],
+ "path_settings": { "max_dist": 25 },
+ "harvest": "owlbear",
+ "reproduction": { "baby_egg": "egg_owlbear_rock", "baby_count": 1, "baby_timer": 20 },
+ "baby_flags": [ "SPRING", "SUMMER", "AUTUMN", "WINTER" ],
+ "death_function": [ "NORMAL" ],
+ "special_attacks": [ { "type": "bite", "cooldown": 10 }, [ "GRAB", 7 ], [ "scratch", 7 ] ],
+ "flags": [ "SEES", "HEARS", "SMELLS", "KEENNOSE", "PATH_AVOID_DANGER_1", "WARM", "GRABS", "SWARMS" ]
+ },
+ {
+ "id": "mon_black_pudding",
+ "type": "MONSTER",
+ "name": "black pudding",
+ "description": "Writhing, sticky, black sludge undulates across the ground. A faint sizzling sound comes from the ground beneath it as it lurches toward you.",
+ "default_faction": "ooze",
+ "bodytype": "blob",
+ "symbol": "O",
+ "species": [ "BLOB" ],
+ "diff": 1,
+ "volume": "62500 ml",
+ "weight": "81500 g",
+ "color": "dark_gray",
+ "hp": 100,
+ "speed": 75,
+ "phase": "LIQUID",
+ "aggression": 8,
+ "anger_triggers": [ "HURT", "PLAYER_CLOSE" ],
+ "morale": 100,
+ "melee_skill": 5,
+ "melee_dice": 2,
+ "melee_dice_sides": 4,
+ "melee_cut": 0,
+ "armor_bash": 12,
+ "armor_stab": 14,
+ "armor_bullet": 14,
+ "armor_acid": 15,
+ "harvest": "exempt",
+ "death_function": [ "MELT" ],
+ "special_attacks": [
+ {
+ "type": "spell",
+ "spell_data": { "id": "ooze_acidicspray" },
+ "cooldown": 20,
+ "monster_message": "The black pudding burns %3$s with acid!"
+ }
+ ],
+ "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "POISON", "NO_BREATHE", "ACIDPROOF" ]
+ },
+ {
+ "id": "mon_krabgek",
+ "name": "krabgek",
+ "description": "A large baleful eye peers out from the darkness, its gleam hinting at a weird intelligence and unnerving malevolence. The eye oozes some pinkish liquid, and the weirdly humanoid figure is covered in sharp blue-black triangular plates.",
+ "symbol": "K",
+ "color": "dark_gray",
+ "type": "MONSTER",
+ "flags": [ "SEES", "HEARS", "SMELLS", "KEENNOSE", "PATH_AVOID_DANGER_1", "WARM", "BIOPROOF" ],
+ "harvest": "mutant_human",
+ "material": [ "hflesh" ],
+ "bodytype": "human",
+ "default_faction": "magical_beast",
+ "species": [ "MAGICAL_BEAST", "HUMAN" ],
+ "volume": "62500 ml",
+ "weight": "81500 g",
+ "hp": 60,
+ "speed": 100,
+ "aggression": 30,
+ "morale": 100,
+ "melee_skill": 3,
+ "melee_cut": 20,
+ "melee_dice": 3,
+ "melee_dice_sides": 10,
+ "dodge": 6,
+ "vision_night": 30,
+ "vision_day": 30,
+ "path_settings": { "max_dist": 35 },
+ "death_function": [ "NORMAL" ],
+ "anger_triggers": [ "HURT", "PLAYER_CLOSE", "PLAYER_WEAK" ],
+ "special_attacks": [
+ {
+ "id": "scratch",
+ "cooldown": 1,
+ "damage_max_instance": [ { "damage_type": "cut", "amount": 25, "armor_multiplier": 1.2 } ]
+ },
+ {
+ "type": "spell",
+ "spell_data": { "id": "krab_gaze" },
+ "cooldown": 5,
+ "monster_message": "The krabgek gazes at %3$s!"
+ }
+ ]
+ },
+ {
+ "id": "mon_owlbear_cub",
+ "type": "MONSTER",
+ "name": "owlbear cub",
+ "copy-from": "mon_owlbear",
+ "volume": "112500 ml",
+ "weight": "112500 g",
+ "hp": 75,
+ "speed": 90,
+ "symbol": "w",
+ "color": "yellow",
+ "morale": 40,
+ "melee_skill": 2,
+ "melee_dice": 2,
+ "melee_dice_sides": 4,
+ "melee_cut": 3,
+ "dodge": 2,
+ "harvest": "owlbear_cub",
+ "upgrades": { "age_grow": 20, "into": "mon_owlbear" }
+ },
+ {
+ "id": "mon_bulette",
+ "type": "MONSTER",
+ "name": "bulette",
+ "description": "The bulette (or landshark) was the result of a mad wizard's experimental cross breeding of a snapping turtle and armadillo with infusions of demons' ichor. They range temperate climates feeding on horses, men, and most other flesh. The stupid bulette is irascible and always hungry, and they fear nothing.",
+ "default_faction": "magical_beast",
+ "bodytype": "bear",
+ "species": [ "MAGICAL_BEAST" ],
+ "volume": "850000 ml",
+ "weight": "900 kg",
+ "hp": 320,
+ "speed": 100,
+ "material": [ "arcane_skin" ],
+ "symbol": "U",
+ "color": "light_gray",
+ "aggression": 0,
+ "morale": 60,
+ "melee_skill": 6,
+ "melee_dice": 4,
+ "melee_dice_sides": 3,
+ "melee_damage": [ { "damage_type": "bash", "amount": 20 }, { "damage_type": "cut", "amount": 10 } ],
+ "dodge": 2,
+ "armor_bash": 32,
+ "armor_cut": 30,
+ "armor_bullet": 24,
+ "harvest": "bulette",
+ "anger_triggers": [ "SOUND" ],
+ "death_function": [ "NORMAL" ],
+ "special_attacks": [
+ {
+ "id": "scratch",
+ "cooldown": 4,
+ "damage_max_instance": [ { "damage_type": "cut", "amount": 60, "armor_multiplier": 0.9 } ]
+ },
+ {
+ "id": "slam",
+ "cooldown": 3,
+ "damage_max_instance": [ { "damage_type": "bash", "amount": 80, "armor_multiplier": 0.8 } ]
+ },
+ [ "SMASH", 10 ]
+ ],
+ "flags": [ "SEES", "HEARS", "SMELLS", "PATH_AVOID_DANGER_1", "WARM", "CAN_DIG", "HIT_AND_RUN", "HARDTOSHOOT" ]
+ },
+ {
+ "id": "mon_wisp",
+ "type": "MONSTER",
+ "name": "will-o-wisp",
+ "description": "Will-o’-wisps can be yellow, white, green, or blue. They are easily mistaken for lanterns, especially in the foggy marshes and swamps where they reside.",
+ "default_faction": "magical_beast",
+ "bodytype": "blob",
+ "species": [ "MAGICAL_BEAST" ],
+ "volume": "1500 ml",
+ "weight": "136 g",
+ "hp": 20,
+ "speed": 160,
+ "luminance": 16,
+ "material": [ "powder" ],
+ "symbol": "o",
+ "color": "yellow",
+ "aggression": 5,
+ "morale": 40,
+ "melee_skill": 6,
+ "melee_dice": 1,
+ "melee_dice_sides": 4,
+ "melee_damage": [ { "damage_type": "electric", "amount": 8 } ],
+ "dodge": 9,
+ "vision_day": 20,
+ "vision_night": 20,
+ "harvest": "",
+ "death_drops": "wisp_death",
+ "anger_triggers": [ "PLAYER_CLOSE" ],
+ "death_function": [ "DISINTEGRATE" ],
+ "flags": [
+ "SEES",
+ "HEARS",
+ "FLIES",
+ "PATH_AVOID_DANGER_1",
+ "ELECTRIC",
+ "HARDTOSHOOT",
+ "NOGIB",
+ "NOHEAD",
+ "NO_BREATHE",
+ "SWARMS"
+ ]
+ },
+ {
+ "id": "mon_troll",
+ "type": "MONSTER",
+ "name": "troll",
+ "description": "Monstrous, green-skinned humanoid. Trolls are renowned for their thick hides and natural regenerative ability.",
+ "default_faction": "magical_beast",
+ "bodytype": "human",
+ "species": [ "MAGICAL_BEAST" ],
+ "volume": "875000 ml",
+ "weight": "875 kg",
+ "hp": 480,
+ "speed": 110,
+ "material": [ "flesh" ],
+ "symbol": "T",
+ "color": "light_green",
+ "aggression": 8,
+ "anger_triggers": [ "HURT", "PLAYER_CLOSE" ],
+ "morale": 100,
+ "melee_skill": 5,
+ "melee_dice": 5,
+ "melee_dice_sides": 7,
+ "melee_cut": 12,
+ "dodge": 1,
+ "armor_cut": 16,
+ "armor_bullet": 13,
+ "vision_day": 40,
+ "vision_night": 3,
+ "harvest": "human_large_leather",
+ "death_function": [ "NORMAL" ],
+ "special_attacks": [ { "type": "bite", "cooldown": 30 }, [ "GRAB", 15 ], [ "scratch", 15 ], [ "slam", 10 ], [ "SMASH", 30 ] ],
+ "regenerates": 1,
+ "flags": [ "SEES", "SMELLS", "KEENNOSE", "PATH_AVOID_DANGER_1", "WARM", "GRABS", "BLEED", "FLAMMABLE" ]
+ },
+ {
+ "id": "mon_stirge",
+ "type": "MONSTER",
+ "name": "stirge",
+ "description": "This horrid flying creature looks like a cross between a large bat and oversized mosquito.",
+ "default_faction": "magical_beast",
+ "species": [ "MAGICAL_BEAST" ],
+ "diff": 2,
+ "volume": "1000 ml",
+ "weight": "1250 g",
+ "hp": 20,
+ "speed": 133,
+ "material": [ "iflesh" ],
+ "symbol": "s",
+ "color": "red",
+ "aggression": 10,
+ "morale": 10,
+ "melee_skill": 4,
+ "melee_dice": 1,
+ "melee_dice_sides": 4,
+ "melee_cut": 2,
+ "dodge": 4,
+ "vision_day": 20,
+ "vision_night": 20,
+ "harvest": "stirge",
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "blood_suck", "min_level": 3 }, "cooldown": 3 } ],
+ "anger_triggers": [ "PLAYER_CLOSE" ],
+ "death_function": [ "NORMAL" ],
+ "flags": [ "SEES", "SMELLS", "HEARS", "FLIES", "HIT_AND_RUN", "PATH_AVOID_FIRE", "SWARMS" ]
+ },
+ {
+ "id": "mon_shrieker",
+ "type": "MONSTER",
+ "name": "shrieker",
+ "description": "A shrieker is a human-sized mushroom that emits a piercing screech to drive off creatures that disturb it.",
+ "default_faction": "magical_beast",
+ "species": [ "FUNGUS" ],
+ "diff": 2,
+ "volume": "62500 ml",
+ "weight": "81500 g",
+ "hp": 25,
+ "speed": 100,
+ "material": [ "veggy" ],
+ "symbol": "7",
+ "color": "light_gray",
+ "aggression": 0,
+ "morale": 0,
+ "melee_cut": 0,
+ "dodge": 0,
+ "vision_day": 10,
+ "vision_night": 10,
+ "harvest": "shrieker",
+ "special_attacks": [ [ "SHRIEK_ALERT", 1 ] ],
+ "anger_triggers": [ "PLAYER_CLOSE" ],
+ "death_function": [ "NORMAL" ],
+ "flags": [ "SEES", "NOHEAD", "POISON", "IMMOBILE", "NO_BREATHE", "PACIFIST" ]
+ },
+ {
+ "id": "mon_lemure",
+ "type": "MONSTER",
+ "name": "lemure",
+ "description": "A lemure resembles a molten mass of flesh with a vaguely humanoid head and torso.",
+ "default_faction": "magical_beast",
+ "bodytype": "blob",
+ "species": [ "MAGICAL_BEAST" ],
+ "diff": 2,
+ "volume": "62500 ml",
+ "weight": "45 kg",
+ "hp": 20,
+ "speed": 50,
+ "material": [ "flesh" ],
+ "symbol": "0",
+ "color": "magenta",
+ "aggression": 100,
+ "morale": 100,
+ "melee_skill": 4,
+ "melee_dice": 1,
+ "melee_dice_sides": 4,
+ "melee_cut": 1,
+ "dodge": 2,
+ "vision_day": 40,
+ "vision_night": 40,
+ "harvest": "lemure",
+ "anger_triggers": [ "PLAYER_CLOSE" ],
+ "death_function": [ "NORMAL" ],
+ "regenerates": 1,
+ "flags": [ "SEES", "SMELLS", "HEARS", "STUMBLES", "PATH_AVOID_FIRE", "REVIVES" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/monsters/orcs.json b/data/mods/Magical_Nights/monsters/orcs.json
new file mode 100755
index 000000000000..fccf64f475e3
--- /dev/null
+++ b/data/mods/Magical_Nights/monsters/orcs.json
@@ -0,0 +1,89 @@
+[
+ {
+ "id": "mon_orc_warrior",
+ "type": "MONSTER",
+ "name": "Orc Warrior",
+ "description": "A big, badly behaved brutish humanoid. Armed with a sword and possessing more than enough strength to use it to deadly effect, you don't want to be in the way of one when its angry. It's also well armored, alongside a hide one might slightly exaggerate as being ironlike. Generally less intelligent than goblins, but it's ill advised to mention that.",
+ "default_faction": "orcs",
+ "bodytype": "human",
+ "species": [ "ORC" ],
+ "volume": "90 L",
+ "weight": "120 kg",
+ "hp": 150,
+ "speed": 90,
+ "material": [ "flesh" ],
+ "symbol": "O",
+ "color": "green",
+ "aggression": 90,
+ "morale": 80,
+ "vision_day": 20,
+ "vision_night": 10,
+ "melee_skill": 6,
+ "melee_dice": 3,
+ "melee_dice_sides": 8,
+ "melee_damage": [ { "damage_type": "cut", "amount": 4 } ],
+ "dodge": 1,
+ "armor_bash": 15,
+ "armor_cut": 18,
+ "armor_bullet": 8,
+ "armor_stab": 12,
+ "harvest": "human",
+ "//": "We haven't demihuman, so I went with the Troll solution of just going human.",
+ "death_function": [ "NORMAL" ],
+ "death_drops": "orc_warrior_drops",
+ "special_attacks": [ { "type": "bite", "cooldown": 5 } ],
+ "flags": [
+ "SEES",
+ "HEARS",
+ "SMELLS",
+ "PATH_AVOID_DANGER_1",
+ "GROUP_MORALE",
+ "ATTACKMON",
+ "PUSH_MON",
+ "SWARMS",
+ "BONES",
+ "CAN_OPEN_DOORS"
+ ]
+ },
+ {
+ "type": "MONSTER",
+ "id": "mon_orc_archer",
+ "name": { "str": "Orc 'Arrer" },
+ "description": "A big brute who wields a powerful bow. Not as respected among orc society, but still very effective. It won't hesitate to slam you with the bow if necessary, though.",
+ "copy-from": "mon_orc_warrior",
+ "melee_skill": 3,
+ "dodge": 2,
+ "death_drops": "orc_archer_drops",
+ "starting_ammo": { "arrow_metal_sharpened_fletched": 30 },
+ "extend": {
+ "special_attacks": [
+ {
+ "type": "gun",
+ "cooldown": 15,
+ "move_cost": 120,
+ "gun_type": "longbow",
+ "ammo_type": "arrow_metal_sharpened_fletched",
+ "fake_skills": [ [ "gun", 6 ], [ "rifle", 6 ] ],
+ "fake_dex": 8,
+ "fake_per": 8,
+ "require_targeting_player": false,
+ "description": "The orc fires its bow at you!",
+ "ranges": [ [ 2, 18, "DEFAULT" ] ],
+ "no_ammo_sound": "grunting"
+ }
+ ]
+ }
+ },
+ {
+ "id": "mon_orc_blood_warrior",
+ "type": "MONSTER",
+ "copy-from": "mon_orc_warrior",
+ "name": { "str": "Orc Blood Warrior" },
+ "description": "As a deviation from the normal verdant skin of the orcs, the blood warriors are believed to be blessed by the gods of the orcs. They certainly look the part, and from what you can tell their strength matches up with it. You best be ready for a fight, because they'll certainly give you one.",
+ "hp": 300,
+ "color": "red",
+ "melee_dice_sides": 12,
+ "melee_damage": [ { "damage_type": "cut", "amount": 8 }, { "damage_type": "stab", "amount": 4 } ],
+ "death_drops": "orc_blood_warrior_drops"
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/TALK_HEALER_GREY.json b/data/mods/Magical_Nights/npc/TALK_HEALER_GREY.json
new file mode 100644
index 000000000000..d10254b5097b
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/TALK_HEALER_GREY.json
@@ -0,0 +1,51 @@
+[
+ {
+ "type": "talk_topic",
+ "id": "TALK_HEALER_GREY",
+ "dynamic_line": {
+ "u_has_var": "talked_to_healer_grey",
+ "type": "dialogue",
+ "context": "healer_grey",
+ "value": "yes",
+ "no": "I must purge this land of its curse. Will you help or hinder our mission?",
+ "yes": "Blessed be."
+ },
+ "responses": [
+ {
+ "text": "Hello .",
+ "topic": "TALK_HEALER_GREY_INTRO",
+ "effect": { "u_add_var": "talked_to_HEALER_GREY", "type": "dialogue", "context": "healer_grey", "value": "yes" }
+ },
+ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" },
+ { "text": "Let's trade items.", "topic": "TALK_HEALER_GREY", "effect": "start_trade" },
+ { "text": "Can I do anything for you?", "topic": "TALK_MISSION_LIST" },
+ { "text": "About the mission…", "topic": "TALK_MISSION_INQUIRE", "condition": "has_assigned_mission" },
+ {
+ "text": "About one of those missions…",
+ "topic": "TALK_MISSION_LIST_ASSIGNED",
+ "condition": "has_many_assigned_missions"
+ },
+ { "text": "Goodbye.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "type": "talk_topic",
+ "id": "TALK_HEALER_GREY_INTRO",
+ "dynamic_line": "Blessed be. May you purge that which opposes the calm.",
+ "responses": [
+ { "text": "Why don't you go somewhere else?", "topic": "TALK_HEALER_GREY_LEAVE" },
+ { "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_HEALER_GREY" },
+ { "text": "I'm sorry, I gotta go.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "type": "talk_topic",
+ "id": "TALK_HEALER_GREY_LEAVE",
+ "dynamic_line": "I must purge this place before I can move on.",
+ "responses": [
+ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" },
+ { "text": "What can you sell me?", "topic": "TALK_HEALER_GREY", "effect": "start_trade" },
+ { "text": "I'm sorry, I gotta go.", "topic": "TALK_DONE" }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/TALK_OLD_MAGUS.json b/data/mods/Magical_Nights/npc/TALK_OLD_MAGUS.json
new file mode 100644
index 000000000000..b8467b4120af
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/TALK_OLD_MAGUS.json
@@ -0,0 +1,62 @@
+[
+ {
+ "type": "talk_topic",
+ "id": "TALK_OLD_MAGUS",
+ "dynamic_line": {
+ "u_has_var": "talked_to_old_magus",
+ "type": "dialogue",
+ "context": "old_magus",
+ "value": "yes",
+ "no": "Huh? *mumble mumble* … Who are you?",
+ "yes": "Oh, you again."
+ },
+ "responses": [
+ {
+ "text": "Hello .",
+ "topic": "TALK_OLD_MAGUS_INTRO",
+ "effect": { "u_add_var": "talked_to_old_magus", "type": "dialogue", "context": "old_magus", "value": "yes" }
+ },
+ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" },
+ { "text": "Let's trade items.", "topic": "TALK_OLD_MAGUS", "effect": "start_trade" },
+ {
+ "text": "Can I do anything for you?",
+ "topic": "TALK_MISSION_LIST",
+ "condition": {
+ "and": [
+ { "not": "has_assigned_mission" },
+ {
+ "not": { "npc_has_var": "npc_magus_book_done", "type": "dialogue", "context": "old_magus", "value": "yes" }
+ }
+ ]
+ }
+ },
+ { "text": "About the mission…", "topic": "TALK_MISSION_INQUIRE", "condition": "has_assigned_mission" },
+ {
+ "text": "About one of those missions…",
+ "topic": "TALK_MISSION_LIST_ASSIGNED",
+ "condition": "has_many_assigned_missions"
+ },
+ { "text": "Goodbye.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "type": "talk_topic",
+ "id": "TALK_OLD_MAGUS_INTRO",
+ "dynamic_line": "I'm busy, what is it?",
+ "responses": [
+ { "text": "Why don't you go somewhere else?", "topic": "TALK_OLD_MAGUS_LEAVE" },
+ { "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_OLD_MAGUS" },
+ { "text": "I'm sorry, I gotta go.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "type": "talk_topic",
+ "id": "TALK_OLD_MAGUS_LEAVE",
+ "dynamic_line": "And leave my tower and all my research? I think not.",
+ "responses": [
+ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" },
+ { "text": "What can you sell me?", "topic": "TALK_OLD_MAGUS", "effect": "start_trade" },
+ { "text": "I'm sorry, I gotta go.", "topic": "TALK_DONE" }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/TALK_TECHNO_KID.json b/data/mods/Magical_Nights/npc/TALK_TECHNO_KID.json
new file mode 100644
index 000000000000..cdf6a546a3df
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/TALK_TECHNO_KID.json
@@ -0,0 +1,51 @@
+[
+ {
+ "type": "talk_topic",
+ "id": "TALK_TECHNO_KID",
+ "dynamic_line": {
+ "u_has_var": "talked_to_techno_kid",
+ "type": "dialogue",
+ "context": "techno_kid",
+ "value": "yes",
+ "no": "Do you seek power as well?",
+ "yes": "Ah, hello again."
+ },
+ "responses": [
+ {
+ "text": "Hey .",
+ "topic": "TALK_TECHNO_KID_INTRO",
+ "effect": { "u_add_var": "talked_to_techno_kid", "type": "dialogue", "context": "techno_kid", "value": "yes" }
+ },
+ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" },
+ { "text": "Let's trade items.", "topic": "TALK_TECHNO_KID", "effect": "start_trade" },
+ { "text": "Can I do anything for you?", "topic": "TALK_MISSION_LIST" },
+ { "text": "About the mission…", "topic": "TALK_MISSION_INQUIRE", "condition": "has_assigned_mission" },
+ {
+ "text": "About one of those missions…",
+ "topic": "TALK_MISSION_LIST_ASSIGNED",
+ "condition": "has_many_assigned_missions"
+ },
+ { "text": "Goodbye.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "type": "talk_topic",
+ "id": "TALK_TECHNO_KID_INTRO",
+ "dynamic_line": "Yes, yes… *electrical crackling* Isn't it beautiful?",
+ "responses": [
+ { "text": "Why don't you go somewhere else?", "topic": "TALK_TECHNO_KID_LEAVE" },
+ { "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_TECHNO_KID" },
+ { "text": "I'm sorry, I gotta go.", "topic": "TALK_DONE" }
+ ]
+ },
+ {
+ "type": "talk_topic",
+ "id": "TALK_TECHNO_KID_LEAVE",
+ "dynamic_line": "I must find more power before I can leave.",
+ "responses": [
+ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" },
+ { "text": "What can you sell me?", "topic": "TALK_TECHNO_KID", "effect": "start_trade" },
+ { "text": "I'm sorry, I gotta go.", "topic": "TALK_DONE" }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/classes.json b/data/mods/Magical_Nights/npc/classes.json
new file mode 100644
index 000000000000..ce3354bb46ba
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/classes.json
@@ -0,0 +1,79 @@
+[
+ {
+ "type": "npc_class",
+ "id": "NC_MAGE_TEST",
+ "name": "Mage Test",
+ "job_description": "I'm a wandering debug tester for the arcane arts.",
+ "traits": [
+ { "trait": "STORMSHAPER" },
+ { "group": "BG_survival_story_EVACUEE" },
+ { "group": "NPC_starting_traits" },
+ { "group": "Appearance_demographics" }
+ ],
+ "spells": [ { "id": "lightning_bolt", "level": 6 }, { "id": "windrun", "level": 6 } ]
+ },
+ {
+ "type": "npc_class",
+ "id": "NC_OLD_MAGUS",
+ "name": "Master Magus",
+ "job_description": "I'm an old Magus. Get off my lawn!",
+ "worn_override": "NC_OLD_MAGUS_worn",
+ "traits": [
+ { "trait": "MAGUS" },
+ { "group": "BG_survival_story_RURAL" },
+ { "group": "NPC_starting_traits" },
+ { "group": "Appearance_demographics" }
+ ],
+ "bonus_str": { "rng": [ -4, -1 ] },
+ "bonus_dex": { "rng": [ -2, 0 ] },
+ "bonus_int": { "rng": [ 2, 5 ] },
+ "bonus_per": { "rng": [ -2, -1 ] },
+ "skills": [
+ { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ 0, -2 ] } ] } ] } },
+ { "skill": "spellcraft", "bonus": { "rng": [ 4, 6 ] } }
+ ],
+ "spells": [ { "id": "magic_missile", "level": 18 }, { "id": "gravity_well", "level": 10 }, { "id": "foxs_cunning", "level": 7 } ]
+ },
+ {
+ "type": "npc_class",
+ "id": "NC_TECHNO_KID",
+ "name": "Techno-student",
+ "job_description": "I'm searching for more power.",
+ "traits": [
+ { "trait": "TECHNOMANCER" },
+ { "group": "BG_survival_story_TEENAGER" },
+ { "group": "NPC_starting_traits" },
+ { "group": "Appearance_demographics" }
+ ],
+ "bonus_str": { "rng": [ -2, 1 ] },
+ "bonus_dex": { "rng": [ -1, 1 ] },
+ "bonus_int": { "rng": [ 0, 3 ] },
+ "bonus_per": { "rng": [ -1, 1 ] },
+ "skills": [
+ { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ -1, -4 ] } ] } ] } },
+ { "skill": "spellcraft", "bonus": { "rng": [ 0, 2 ] } }
+ ],
+ "spells": [ { "id": "quantum_tunnel_lesser", "level": 2 }, { "id": "animated_blade", "level": 2 } ]
+ },
+ {
+ "type": "npc_class",
+ "id": "NC_BIO_PRIEST",
+ "name": "Healer",
+ "job_description": "I will purge this land of its curse.",
+ "traits": [
+ { "trait": "BIOMANCER" },
+ { "group": "BG_survival_story_UNIVERSAL" },
+ { "group": "NPC_starting_traits" },
+ { "group": "Appearance_demographics" }
+ ],
+ "bonus_str": { "rng": [ -2, 2 ] },
+ "bonus_dex": { "rng": [ -2, 2 ] },
+ "bonus_int": { "rng": [ 0, 4 ] },
+ "bonus_per": { "rng": [ 0, 3 ] },
+ "skills": [
+ { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "rng": [ 0, -3 ] } ] } ] } },
+ { "skill": "spellcraft", "bonus": { "rng": [ 1, 3 ] } }
+ ],
+ "spells": [ { "id": "light_healing", "level": 3 }, { "id": "bio_bonespear", "level": 6 } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/factions.json b/data/mods/Magical_Nights/npc/factions.json
new file mode 100644
index 000000000000..397dbe5f64a6
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/factions.json
@@ -0,0 +1,123 @@
+[
+ {
+ "type": "faction",
+ "id": "wizards_ancient",
+ "name": "The Ancient Ones",
+ "likes_u": 0,
+ "respects_u": 0,
+ "known_by_u": false,
+ "size": 5,
+ "power": 100,
+ "food_supply": 115200,
+ "wealth": 100000,
+ "currency": "embued_coin",
+ "relations": {
+ "lobby_beggars": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": true,
+ "guard your stuff": true,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "free_merchants": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "old_guard": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "no_faction": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "wasteland_scavengers": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ }
+ },
+ "description": "The spellcrafters of old. Hidden from the world until the cataclysm, they have their own agenda and care little for you or yours."
+ },
+ {
+ "type": "faction",
+ "id": "healers_grey",
+ "name": "The Grey Flame",
+ "likes_u": 10,
+ "respects_u": 10,
+ "known_by_u": false,
+ "size": 50,
+ "power": 50,
+ "food_supply": 11520,
+ "wealth": 1000,
+ "relations": {
+ "lobby_beggars": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": true,
+ "guard your stuff": true,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "free_merchants": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "old_guard": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "no_faction": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ },
+ "wasteland_scavengers": {
+ "kill on sight": false,
+ "watch your back": false,
+ "share my stuff": false,
+ "guard your stuff": false,
+ "lets you in": false,
+ "defends your space": false,
+ "knows your voice": true
+ }
+ },
+ "description": "A collection of those cursed by the cataclysm. They have sworn to rid this world of its curse and will stop at nothing to accomplish their task."
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/items_worn.json b/data/mods/Magical_Nights/npc/items_worn.json
new file mode 100644
index 000000000000..2304f92949ef
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/items_worn.json
@@ -0,0 +1,15 @@
+[
+ {
+ "type": "item_group",
+ "id": "NC_OLD_MAGUS_worn",
+ "subtype": "collection",
+ "items": [
+ { "item": "socks" },
+ { "item": "tunic" },
+ { "item": "long_underpants" },
+ { "item": "undershirt" },
+ { "item": "slippers" },
+ { "item": "robe" }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/missiondef.json b/data/mods/Magical_Nights/npc/missiondef.json
new file mode 100644
index 000000000000..57018db96623
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/missiondef.json
@@ -0,0 +1,101 @@
+[
+ {
+ "id": "MISSION_GET_MAGIC_BOOK",
+ "type": "mission_definition",
+ "name": "Retrieve Magic Book",
+ "goal": "MGOAL_FIND_ITEM",
+ "difficulty": 4,
+ "value": 250000,
+ "item": "magus_spellbook",
+ "start": {
+ "effect": [ { "npc_remove_item_with": "magus_spellbook" }, "assign_guard", { "clear_npc_rule": "investigate_noises" } ]
+ },
+ "end": { "effect": [ { "npc_add_var": "npc_magus_book_done", "type": "dialogue", "context": "old_magus", "value": "yes" } ] },
+ "origins": [ "ORIGIN_SECONDARY" ],
+ "dialogue": {
+ "describe": "Where did I put that blasted…",
+ "offer": "I seem to have misplaced my book, The Tome of The Battle Mage. That worthless apprentice probably stole it. Bring it to me.",
+ "accepted": "…What? Oh you're still here. Go find my book.",
+ "rejected": "Just as useless as that apprentice…",
+ "advice": "You want me to do your job for you? Bah. That apprentice said something about wanting to look around town, you might start there. Oh, and it's called The Tome of The Battle Mage, you can read at least the title, can't you?",
+ "inquire": "Where's my book?",
+ "success": "Finally. Took you long enough.",
+ "success_lie": "Nonsense! Useless! Waste of my time!",
+ "failure": "Ugh, why am I cursed with useless people?"
+ }
+ },
+ {
+ "id": "MISSION_GET_POWER_CBM",
+ "type": "mission_definition",
+ "name": "Find Power Storage CBM",
+ "goal": "MGOAL_FIND_ITEM",
+ "difficulty": 2,
+ "value": 150000,
+ "item": "bio_power_storage",
+ "start": {
+ "effect": [ { "npc_remove_item_with": "bio_power_storage" }, "assign_guard", { "clear_npc_rule": "investigate_noises" } ]
+ },
+ "end": { "effect": [ { "u_buy_item": "techno_fundamentals", "count": 1 } ] },
+ "origins": [ "ORIGIN_SECONDARY" ],
+ "dialogue": {
+ "describe": "More power… moar power… MOAR POWAA!",
+ "offer": "I need more power. Find me more power storage and I'll give you this book.",
+ "accepted": "I don't care where it comes from so long as it's clean.",
+ "rejected": "You want more power too, don't you?",
+ "advice": "Electronic Stores might have what I need. Or you could just cut it out of something.",
+ "inquire": "Find anything?",
+ "success": "Perfect. More power… power…",
+ "success_lie": "I don't understand.",
+ "failure": "I must find more power, this setback is inconvenient."
+ }
+ },
+ {
+ "id": "MISSION_PURGE_50_Z",
+ "type": "mission_definition",
+ "name": "Kill 50 Zombies",
+ "goal": "MGOAL_KILL_MONSTER_SPEC",
+ "monster_species": "ZOMBIE",
+ "monster_kill_goal": 50,
+ "difficulty": 5,
+ "value": 250000,
+ "start": { "effect": "follow_only" },
+ "end": { "effect": "stop_following" },
+ "origins": [ "ORIGIN_SECONDARY" ],
+ "followup": "MISSION_PURGE_150_Z",
+ "dialogue": {
+ "describe": "Will you answer the call?",
+ "offer": "This world has fallen to chaos and death. Remove 50 of the cursed from this world; assist me in purging this curse and you shall be rewarded.",
+ "accepted": "Blessed be. I shall observe your efforts and judge you as one of the many or one of the few.",
+ "rejected": "You will not help purge this curse? Perhaps you are a part of the curse…",
+ "advice": "The awakened congregate in towns and cities, the closer to the center the more you will find.",
+ "inquire": "Blessed be.",
+ "success": "Blessed be. You are one of the few. We shall do great works together.",
+ "success_lie": "Deception is the realm of the cursed. You disappoint me.",
+ "failure": "Was the curse too strong for you?"
+ }
+ },
+ {
+ "id": "MISSION_PURGE_150_Z",
+ "type": "mission_definition",
+ "name": "Kill 150 Zombies",
+ "goal": "MGOAL_KILL_MONSTER_SPEC",
+ "monster_species": "ZOMBIE",
+ "monster_kill_goal": 150,
+ "difficulty": 7,
+ "value": 250000,
+ "start": { "effect": "follow_only" },
+ "end": { "effect": "stop_following" },
+ "origins": [ "ORIGIN_SECONDARY" ],
+ "dialogue": {
+ "describe": "You have proven you are one of the few, will you stand with the few again?",
+ "offer": "We must continue the purge. Remove 150 more of the cursed from this land and you shall be blessed with greatness.",
+ "accepted": "Blessed be. You are a true testament to the few.",
+ "rejected": "I see. Perhaps you will find your way back to us one day.",
+ "advice": "The awakened stir in even the darkest of corners. Seek them out and destroy them.",
+ "inquire": "Blessed be.",
+ "success": "Blessed be. You are a valuable asset to our cause. Perhaps you may even be our salvation.",
+ "success_lie": "You have come so far. Only to fall.",
+ "failure": "The curse of this land infects that which does not seek to purge."
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/npc/npc.json b/data/mods/Magical_Nights/npc/npc.json
new file mode 100644
index 000000000000..a1acec955c06
--- /dev/null
+++ b/data/mods/Magical_Nights/npc/npc.json
@@ -0,0 +1,38 @@
+[
+ {
+ "type": "npc",
+ "id": "magus_old",
+ "//": "old magus in the wizard tower.",
+ "name_suffix": "magus",
+ "class": "NC_OLD_MAGUS",
+ "attitude": 0,
+ "mission": 7,
+ "mission_offered": "MISSION_GET_MAGIC_BOOK",
+ "chat": "TALK_OLD_MAGUS",
+ "faction": "wizards_ancient"
+ },
+ {
+ "type": "npc",
+ "id": "techno_kid",
+ "//": "possibly crazy techno kid",
+ "name_suffix": "technologist",
+ "class": "NC_TECHNO_KID",
+ "attitude": 0,
+ "mission": 7,
+ "mission_offered": "MISSION_GET_POWER_CBM",
+ "chat": "TALK_TECHNO_KID",
+ "faction": "no_faction"
+ },
+ {
+ "type": "npc",
+ "id": "healer_priest",
+ "//": "a priest of the grey flame",
+ "name_suffix": "healer",
+ "class": "NC_BIO_PRIEST",
+ "attitude": 0,
+ "mission": 7,
+ "mission_offered": "MISSION_PURGE_50_Z",
+ "chat": "TALK_HEALER_GREY",
+ "faction": "healers_grey"
+ }
+]
diff --git a/data/mods/Magical_Nights/obsolete.json b/data/mods/Magical_Nights/obsolete.json
new file mode 100644
index 000000000000..3283d55cddb4
--- /dev/null
+++ b/data/mods/Magical_Nights/obsolete.json
@@ -0,0 +1,19 @@
+[
+ {
+ "type": "recipe",
+ "result": "flu_shot",
+ "obsolete": true
+ },
+ {
+ "id": "armor_stonefist",
+ "type": "MIGRATION",
+ "replace": "stonefist"
+ },
+ {
+ "id": "bio_fuel_cell_blood",
+ "type": "bionic",
+ "name": { "str": "Obsolete Blood Power Generator CBM" },
+ "description": "This bionic is obsolete!",
+ "occupied_bodyparts": [ [ "torso", 8 ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/professions.json b/data/mods/Magical_Nights/professions.json
new file mode 100644
index 000000000000..8b4f6fcd9bec
--- /dev/null
+++ b/data/mods/Magical_Nights/professions.json
@@ -0,0 +1,280 @@
+[
+ {
+ "type": "profession",
+ "id": "wizard_novice",
+ "name": "Would-be Wizard",
+ "description": "You found a pamphlet with bright colors claiming you can be a Wizard, oddly serene with the world falling down around you.",
+ "points": 1,
+ "items": {
+ "both": [ "jeans", "tshirt", "gloves_light", "hat_ball", "boots", "socks", "hoodie", "knit_scarf", "wizard_beginner" ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "pyromaniac",
+ "name": "Pyromaniac Kelvinist",
+ "description": "You have loved fire all of your life. You have now discovered your inner fire, and want to exercise that upon the world.",
+ "points": 2,
+ "items": {
+ "both": [ "lighter", "sneakers", "pants", "tshirt", "jacket_light", "pyro" ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ },
+ "traits": [ "PYROMANIA", "KELVINIST" ]
+ },
+ {
+ "type": "profession",
+ "id": "druid",
+ "name": "Druid",
+ "description": "The ancient circle of druids is gone with the Cataclysm. Nature must thrive.",
+ "points": 2,
+ "items": {
+ "both": [ "druid_spellbook", "leathersandals", "robe", "rope_makeshift_30", "hide_bag", "hat_fur", "gloves_wraps_fur" ]
+ },
+ "traits": [ "DRUID" ]
+ },
+ {
+ "type": "profession",
+ "id": "priest_magic2",
+ "name": "Priest",
+ "description": "When the apocalypse struck you did everything you could to protect your parish faithful, but it appears that prayers were not enough. Now that they are all dead, you should probably find something more tangible to protect you.",
+ "points": 0,
+ "flags": [ "SCEN_ONLY" ],
+ "skills": [ { "level": 3, "name": "speech" } ],
+ "items": {
+ "both": {
+ "items": [
+ "pants",
+ "longshirt",
+ "socks",
+ "cassock",
+ "dress_shoes",
+ "holy_symbol",
+ "smart_phone",
+ "holybook_bible1",
+ "priest_beginner"
+ ]
+ },
+ "male": [ "briefs" ],
+ "female": [ "bra", "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "shinto_priest_magic2",
+ "name": "Kannushi",
+ "description": "You were one of the maintainers of a Shinto shrine, performing rituals and sacred tasks. You preferred it when only the spirits of the dead inhabited your shrine, and not their rotting corpses.",
+ "points": 0,
+ "flags": [ "SCEN_ONLY" ],
+ "skills": [ { "level": 1, "name": "fabrication" }, { "level": 1, "name": "tailor" } ],
+ "items": {
+ "both": {
+ "items": [
+ "kariginu",
+ "eboshi",
+ "pants",
+ "smart_phone",
+ "tabi_dress",
+ "geta",
+ "holy_symbol",
+ "holybook_kojiki",
+ "priest_beginner"
+ ]
+ },
+ "male": [ "briefs" ],
+ "female": [ "bra", "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "imam_magic2",
+ "name": { "male": "Imam", "female": "Mourchida" },
+ "description": "You spent much of your time prior to the apocalypse at the local mosque, studying the words of the Prophet and the Quran and guiding your community in prayer. Back then they came from far and wide to listen to you, now they come to eat your brains.",
+ "points": 0,
+ "flags": [ "SCEN_ONLY" ],
+ "//": "No knife, fire, or decent storage/armor. Skill points are countered.",
+ "skills": [ { "level": 2, "name": "speech" }, { "level": 1, "name": "barter" } ],
+ "items": {
+ "both": {
+ "items": [ "pants", "tshirt", "socks", "kufi", "thawb", "lowtops", "holybook_quran", "smart_phone", "priest_beginner" ]
+ },
+ "male": [ "briefs" ],
+ "female": [ "bra", "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "rabbi_magic2",
+ "name": "Rabbi",
+ "description": "You were celebrating with your flock in the temple when the Cataclysm struck. You sure could use a messiah right now!",
+ "points": 0,
+ "flags": [ "SCEN_ONLY" ],
+ "skills": [ { "level": 2, "name": "speech" }, { "level": 1, "name": "firstaid" } ],
+ "items": {
+ "both": {
+ "items": [
+ "pants",
+ "leather_belt",
+ "dress_shirt",
+ "socks",
+ "kittel",
+ "kippah",
+ "dress_shoes",
+ "holy_symbol",
+ "smart_phone",
+ "holybook_talmud",
+ "holybook_tanakh",
+ "priest_beginner"
+ ]
+ },
+ "male": [ "briefs" ],
+ "female": [ "bra", "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "guru_magic2",
+ "name": "Guru",
+ "description": "You spent many years traveling the world, becoming wise and learned. Normally, you can answer any question, but even you are not quite sure what to do about the ravenous undead.",
+ "points": 2,
+ "flags": [ "SCEN_ONLY" ],
+ "//": "1.5 pts skills, cutting implement, and plenty of storage, so lack of fire only goes so far.",
+ "skills": [ { "level": 2, "name": "speech" }, { "level": 1, "name": "survival" } ],
+ "items": {
+ "both": {
+ "items": [
+ "jeans",
+ "tshirt",
+ "socks",
+ "robe",
+ "turban",
+ "waterskin",
+ "pockknife",
+ "mbag",
+ "leathersandals",
+ "holy_symbol",
+ "smart_phone",
+ "wristwatch",
+ "priest_beginner"
+ ]
+ },
+ "male": [ "briefs" ],
+ "female": [ "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "preacher_magic2",
+ "name": "Preacher",
+ "description": "You devoted your life to spreading the good word; always on the road, traveling from town to town. Now everything has gone to hell, you can't host your daily podcast, and the undead listening to your sermons don't seem particularly moved.",
+ "points": 2,
+ "flags": [ "SCEN_ONLY" ],
+ "//": "Storage + 2 points in skills, - no knife or fire.",
+ "skills": [ { "level": 2, "name": "speech" }, { "level": 1, "name": "driving" }, { "level": 1, "name": "computer" } ],
+ "items": {
+ "both": {
+ "items": [
+ "dress_shirt",
+ "pants",
+ "socks",
+ "dress_shoes",
+ "wristwatch",
+ "backpack",
+ "laptop",
+ "flyer",
+ "flyer",
+ "flyer",
+ "smart_phone",
+ "holy_symbol",
+ "priest_beginner"
+ ]
+ },
+ "male": [ "briefs" ],
+ "female": [ "bra", "panties" ]
+ }
+ },
+ {
+ "type": "profession",
+ "id": "novice_necromancer",
+ "name": "Novice Necromancer",
+ "description": "You always had to hide your magic, as it was generally not an acceptable type of magic in the wizarding world, but with the Cataclysm you need to pull every trick out of the book.",
+ "spells": [ { "id": "summon_zombie", "level": 5 }, { "id": "necrotic_gaze", "level": 1 } ],
+ "points": 2,
+ "skills": [ { "level": 1, "name": "spellcraft" } ],
+ "items": {
+ "both": [
+ "jeans",
+ "tshirt",
+ "gloves_light",
+ "hat_ball",
+ "boots",
+ "socks",
+ "hoodie",
+ "knit_scarf",
+ "primitive_knife",
+ "summon_undead_spellbook"
+ ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ },
+ "traits": [ "ANIMIST" ]
+ },
+ {
+ "type": "profession",
+ "id": "novice_stormshaper",
+ "name": "Novice Stormshaper",
+ "description": "The son of a weatherman, you were always interested in the weather. Recently you found it was possible to manipulate the weather yourself through arcane means! Unfortunately you did not have long to enjoy your power, as events unfolded…",
+ "spells": [ { "id": "lightning_bolt", "level": 1 }, { "id": "windrun", "level": 1 } ],
+ "points": 0,
+ "items": {
+ "both": [ "jeans", "tshirt", "hat_ball", "sneakers", "socks", "hoodie", "novice_storm_spellbook" ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ },
+ "traits": [ "STORMSHAPER" ]
+ },
+ {
+ "type": "profession",
+ "id": "novice_earthshaper",
+ "name": "Novice Earthshaper",
+ "description": "You always were tough in a fight. Your coach managed to teach you a trick or two to make you a little tougher.",
+ "spells": [ { "id": "stonefist", "level": 1 }, { "id": "seismic_stomp", "level": 1 } ],
+ "points": 0,
+ "items": {
+ "both": [ "jeans", "tshirt", "boxing_gloves", "hat_ball", "sneakers", "socks", "hoodie", "novice_earth_spellbook" ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ },
+ "traits": [ "EARTHSHAPER" ]
+ },
+ {
+ "type": "profession",
+ "id": "novice_technomancer",
+ "name": "Novice Technomancer",
+ "description": "With the recent Cataclysm, the way you found to cheat on tests may have to find some other use.",
+ "spells": [ { "id": "synaptic_stimulation", "level": 4 } ],
+ "points": 0,
+ "items": {
+ "both": [ "jeans", "tshirt", "gloves_light", "hat_ball", "sneakers", "socks", "hoodie", "novice_techno_spellbook" ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ },
+ "traits": [ "TECHNOMANCER" ]
+ },
+ {
+ "type": "profession",
+ "id": "novice_kelvinist",
+ "name": "Novice Kelvinist",
+ "description": "Even from a young age, you'd always felt drawn to the hot and cold. Fire had always warmed your spirits, and every Winter you were praying for a snow day simply because you loved them so much, even as you got older. It's only natural that you'd find yourself learning the magic to control these primal elements.",
+ "spells": [ { "id": "create_lighter", "level": 1 }, { "id": "chilling_touch", "level": 1 } ],
+ "points": 0,
+ "items": {
+ "both": [ "jeans", "tshirt", "hat_ball", "gloves_light", "sneakers", "socks", "hoodie", "novice_kelvin_spellbook" ],
+ "male": [ "boxer_briefs" ],
+ "female": [ "bra", "panties" ]
+ },
+ "traits": [ "KELVINIST" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/qualities.json b/data/mods/Magical_Nights/qualities.json
new file mode 100644
index 000000000000..d4425faa8100
--- /dev/null
+++ b/data/mods/Magical_Nights/qualities.json
@@ -0,0 +1,34 @@
+[
+ {
+ "type": "recipe_category",
+ "id": "CC_ENCHANTED",
+ "recipe_subcategories": [
+ "CSC_ALL",
+ "CSC_ENCHANTED_MATERIALS",
+ "CSC_ENCHANTED_TOOLS",
+ "CSC_ENCHANTED_WEAPONS",
+ "CSC_ENCHANTED_AMMO",
+ "CSC_ENCHANTED_ARMOR",
+ "CSC_ENCHANTED_POTIONS",
+ "CSC_ENCHANTED_RUNES",
+ "CSC_ENCHANTED_MODS",
+ "CSC_ENCHANTED_OTHER",
+ "CSC_ENCHANTED_ENCHANTING"
+ ]
+ },
+ {
+ "type": "tool_quality",
+ "id": "MANA_FOCUS",
+ "name": "mana focusing"
+ },
+ {
+ "type": "tool_quality",
+ "id": "MANA_INFUSE",
+ "name": "mana infusing"
+ },
+ {
+ "type": "tool_quality",
+ "id": "MANA_WEAVE",
+ "name": "mana weaving"
+ }
+]
diff --git a/data/mods/Magical_Nights/readme.md b/data/mods/Magical_Nights/readme.md
new file mode 100644
index 000000000000..f93807224fb1
--- /dev/null
+++ b/data/mods/Magical_Nights/readme.md
@@ -0,0 +1,12 @@
+# The Ancestry of this Mod
+This mod, Magical Nights, is built off of the version of Magiclysm found in Cataclysm: Bright Nights. As such, some thanks goes to KorGgenT, Aptronym, and LaVeyanFiend for their past work on Magiclysm.
+
+I adopted that version of Magiclysm, becoming its maintainer. I rebalanced Demon Spiders, I rebalanced almost every single spell in the mod, and even added my own content (in the form of my own take on Goblins, some clothing mods (including owlbear fur), and the dragonbone weapons).
+However, I found myself disagreeing fundamentally with much of KorG's original vision for Magiclysm, particularly in the lore. Thus, Magical Nights was born.
+
+# What is the big lore shift you've made?
+I'm glad you asked! Under KorG's vision, the public has basically always known about magic. However, for whatever reason, the public didn't much care for magic compared to technology. As such, Magical Academies could be found in the cities, but it was rare for anyone in the public to actually use (much) magic.
+
+My approach is instead that magic has long been hidden, ever since the immense persecution that it once suffered. You wouldn't find evidence of pre-cataclysm magic in cities aside from the odd basement or appearance in a book store. Instead, magic is more out in the countryside. Mage towers, Magic Academies, and all sorts of magic are located out in the countryside instead.
+
+Due to the influx of magic following the tearing of the veil between worlds, some magic has made its way into cities and towns. However, it will most likely primarily be magical anomalies and threats. Some intriguing uses and aspects of these urban influxes of the arcane may be discoverable by the player, given some effort.
diff --git a/data/mods/Magical_Nights/recipes.json b/data/mods/Magical_Nights/recipes.json
new file mode 100644
index 000000000000..73edd61d6c3e
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes.json
@@ -0,0 +1,33 @@
+[
+ {
+ "type": "recipe",
+ "result": "egg_owlbear",
+ "category": "CC_FOOD",
+ "subcategory": "CSC_FOOD_OTHER",
+ "skill_used": "cooking",
+ "time": "2 m",
+ "autolearn": true,
+ "result_mult": 40,
+ "byproducts": [ [ "stone_shell", 3 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "components": [ [ [ "egg_owlbear_rock", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "glow_light",
+ "category": "CC_ELECTRONIC",
+ "subcategory": "CSC_ELECTRONIC_LIGHTING",
+ "skill_used": "spellcraft",
+ "difficulty": 3,
+ "time": "2 m",
+ "autolearn": true,
+ "components": [
+ [ [ "mana_potion_lesser", 1 ] ],
+ [ [ "flask_glass", 1 ], [ "beaker", 1 ] ],
+ [ [ "glow_dust", 2 ] ],
+ [ [ "diamond", 1 ], [ "bulette_pearl", 1 ] ],
+ [ [ "string_6", 1 ] ],
+ [ [ "rag", 2 ] ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/alchemy.json b/data/mods/Magical_Nights/recipes/alchemy.json
new file mode 100644
index 000000000000..4fadcbe145f5
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/alchemy.json
@@ -0,0 +1,67 @@
+[
+ {
+ "type": "recipe",
+ "result": "dragon_essence",
+ "qualities": [
+ { "id": "CONCENTRATE", "level": 1 },
+ { "id": "FINE_DISTILL", "level": 1 },
+ { "id": "SEPARATE", "level": 1 },
+ { "id": "CONTAIN", "level": 1 },
+ { "id": "MANA_FOCUS", "level": 1 }
+ ],
+ "tools": [ [ [ "food_processor", 40 ] ], [ [ "surface_heat", 20, "LIST" ] ] ],
+ "components": [ [ [ "dragon_scale", 4, "LIST" ], [ "meat_dragon", 40 ] ] ],
+ "time": "2 h",
+ "skill_used": "cooking",
+ "difficulty": 3,
+ "skills_required": [ "spellcraft", 2 ],
+ "book_learn": [ [ "black_dragons", 2 ] ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER"
+ },
+ {
+ "type": "recipe",
+ "result": "spell_scroll_acid_resistance",
+ "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [ [ [ "paint_brush", -1 ] ] ],
+ "components": [
+ [ [ "blood_tainted", 2000 ], [ "blood", 8 ], [ "dragon_blood", 2000 ] ],
+ [ [ "acid", 4 ] ],
+ [ [ "water", 2 ], [ "water_clean", 2 ] ]
+ ],
+ "time": "2 h",
+ "skill_used": "spellcraft",
+ "difficulty": 2,
+ "book_learn": [ [ "black_dragons", 2 ] ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "flags": [ "SECRET" ]
+ },
+ {
+ "type": "recipe",
+ "result": "mana_dust",
+ "qualities": [ { "id": "CONTAIN", "level": 1 } ],
+ "tools": [ [ [ "mortar_pestle", -1 ] ] ],
+ "components": [ [ [ "crystallized_mana", 1 ] ] ],
+ "time": "5 m",
+ "skill_used": "fabrication",
+ "difficulty": 1,
+ "skills_required": [ "spellcraft", 2 ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "autolearn": true
+ },
+ {
+ "type": "recipe",
+ "result": "mana_infused_blood",
+ "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "components": [ [ [ "mana_dust", 1 ] ], [ [ "blood", 1 ] ] ],
+ "time": "30 m",
+ "skill_used": "cooking",
+ "difficulty": 3,
+ "skills_required": [ "spellcraft", 3 ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "autolearn": true
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/armor.json b/data/mods/Magical_Nights/recipes/armor.json
new file mode 100644
index 000000000000..92ab82c9c4eb
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/armor.json
@@ -0,0 +1,122 @@
+[
+ {
+ "result": "helmet_demonchitin",
+ "byproducts": [ [ "demon_chitin_piece", 3 ] ],
+ "qualities": [
+ { "id": "CHISEL", "level": 1 },
+ { "id": "SEW", "level": 3 },
+ { "id": "LEATHER_AWL", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 2 }
+ ],
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 6 ] ],
+ "difficulty": 7,
+ "time": "4 h",
+ "autolearn": true,
+ "book_learn": [ [ "magic_armormaking", 6 ] ],
+ "components": [ [ [ "cordage_superior", 1, "LIST" ] ], [ [ "demon_chitin_plate", 1 ] ], [ [ "demon_chitin_piece", 1 ] ] ]
+ },
+ {
+ "result": "armguard_demonchitin",
+ "byproducts": [ [ "demon_chitin_piece", 8 ] ],
+ "qualities": [
+ { "id": "CHISEL", "level": 1 },
+ { "id": "SEW", "level": 3 },
+ { "id": "LEATHER_AWL", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 2 }
+ ],
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 6 ] ],
+ "difficulty": 6,
+ "time": "2 h",
+ "autolearn": true,
+ "book_learn": [ [ "magic_armormaking", 5 ] ],
+ "components": [ [ [ "cordage_superior", 1, "LIST" ] ], [ [ "demon_chitin_plate", 1 ] ], [ [ "demon_chitin_piece", 2 ] ] ]
+ },
+ {
+ "result": "armor_demonchitin",
+ "qualities": [
+ { "id": "CHISEL", "level": 1 },
+ { "id": "SEW", "level": 3 },
+ { "id": "LEATHER_AWL", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 2 }
+ ],
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 6 ] ],
+ "difficulty": 8,
+ "time": "4 h",
+ "autolearn": true,
+ "book_learn": [ [ "magic_armormaking", 7 ] ],
+ "components": [ [ [ "cordage_superior", 1, "LIST" ] ], [ [ "demon_chitin_plate", 4 ] ], [ [ "demon_chitin_piece", 6 ] ] ]
+ },
+ {
+ "result": "boots_demonchitin",
+ "qualities": [
+ { "id": "CHISEL", "level": 1 },
+ { "id": "SEW", "level": 3 },
+ { "id": "LEATHER_AWL", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 2 }
+ ],
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 6 ] ],
+ "difficulty": 5,
+ "time": "2 h 40 m",
+ "autolearn": true,
+ "book_learn": [ [ "magic_armormaking", 4 ] ],
+ "components": [ [ [ "cordage_superior", 1, "LIST" ] ], [ [ "demon_chitin_plate", 1 ] ], [ [ "demon_chitin_piece", 2 ] ] ]
+ },
+ {
+ "result": "gauntlets_demonchitin",
+ "qualities": [
+ { "id": "CHISEL", "level": 1 },
+ { "id": "SEW", "level": 3 },
+ { "id": "LEATHER_AWL", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 2 }
+ ],
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 6 ] ],
+ "difficulty": 5,
+ "time": "2 h",
+ "autolearn": true,
+ "book_learn": [ [ "magic_armormaking", 4 ] ],
+ "components": [ [ [ "cordage_superior", 1, "LIST" ] ], [ [ "demon_chitin_piece", 10 ] ] ]
+ },
+ {
+ "result": "demonchitin_armor_horse",
+ "type": "recipe",
+ "copy-from": "armor_demonchitin",
+ "category": "CC_ANIMALS",
+ "subcategory": "CSC_ANIMALS_EQUINE ARMOR",
+ "time": "17 h 30 m",
+ "book_learn": [ [ "textbook_tailor", 5 ], [ "tailor_portfolio", 5 ] ],
+ "skills_required": [ [ "spellcraft", 6 ], [ "fabrication", 4 ], [ "survival", 4 ] ],
+ "using": [ [ "cordage", 7 ] ],
+ "components": [ [ [ "demon_chitin_plate", 4 ] ], [ [ "demon_chitin_piece", 20 ] ] ]
+ },
+ {
+ "result": "demonchitin_harness_dog",
+ "type": "recipe",
+ "copy-from": "armor_demonchitin",
+ "category": "CC_ANIMALS",
+ "subcategory": "CSC_ANIMALS_CANINE ARMOR",
+ "skills_required": [ [ "spellcraft", 6 ], [ "fabrication", 4 ], [ "survival", 4 ] ],
+ "time": "5 h",
+ "using": [ [ "cordage", 1 ] ],
+ "components": [ [ [ "demon_chitin_piece", 12 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/blacksmithing.json b/data/mods/Magical_Nights/recipes/blacksmithing.json
new file mode 100644
index 000000000000..56b29c8fa7f6
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/blacksmithing.json
@@ -0,0 +1,80 @@
+[
+ {
+ "result": "orichalcum_ingot",
+ "type": "recipe",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_MATERIALS",
+ "skill_used": "fabrication",
+ "difficulty": 5,
+ "time": "180 m",
+ "batch_time_factors": [ 50, 2 ],
+ "book_learn": [ [ "welding_book", 4 ] ],
+ "tools": [ [ [ "demon_forge", 15 ] ], [ [ "tongs", -1 ] ] ],
+ "components": [ [ [ "orichalcum_sliver", 8 ], [ "orichalcum_lump", 2 ] ], [ [ "mercury", 100 ] ] ]
+ },
+ {
+ "result": "orichalcum_ingot",
+ "id_suffix": "with_bronze",
+ "type": "recipe",
+ "category": "CC_OTHER",
+ "skill_used": "fabrication",
+ "difficulty": 5,
+ "time": "180 m",
+ "batch_time_factors": [ 50, 2 ],
+ "book_learn": [ [ "welding_book", 4 ] ],
+ "tools": [ [ [ "demon_forge", 15 ] ], [ [ "tongs", -1 ] ] ],
+ "components": [ [ [ "scrap_bronze", 9 ] ], [ [ "mercury", 400 ] ] ]
+ },
+ {
+ "result": "mithril_ingot",
+ "type": "recipe",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_MATERIALS",
+ "skill_used": "fabrication",
+ "difficulty": 6,
+ "time": "180 m",
+ "batch_time_factors": [ 50, 2 ],
+ "book_learn": [ [ "welding_book", 5 ] ],
+ "tools": [ [ [ "demon_forge", 15 ] ], [ [ "tongs", -1 ] ] ],
+ "components": [ [ [ "mithril_lump", 2 ] ], [ [ "mercury", 100 ] ] ]
+ },
+ {
+ "result": "mithril_ingot",
+ "id_suffix": "with_silver",
+ "type": "recipe",
+ "category": "CC_OTHER",
+ "skill_used": "fabrication",
+ "difficulty": 6,
+ "time": "180 m",
+ "batch_time_factors": [ 50, 2 ],
+ "book_learn": [ [ "welding_book", 5 ] ],
+ "tools": [ [ [ "demon_forge", 15 ] ], [ [ "tongs", -1 ] ] ],
+ "components": [ [ [ "silver_small", 9 ] ], [ [ "mercury", 400 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "fireproof_mortar",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_OTHER",
+ "skill_used": "fabrication",
+ "difficulty": 2,
+ "time": "20 m",
+ "book_learn": [ [ "metal_legends", 2 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "con_mix", 50 ] ], [ [ "rock_quern", -1 ], [ "clay_quern", -1 ], [ "mortar_pestle", -1 ] ] ],
+ "components": [ [ [ "material_cement", 50 ] ], [ [ "material_sand", 150 ] ], [ [ "demon_chitin_piece", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "alumentum",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_OTHER",
+ "skill_used": "spellcraft",
+ "difficulty": 3,
+ "time": "16 m",
+ "autolearn": true,
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "COOK", "level": 3 }, { "id": "DISTILL", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ],
+ "components": [ [ [ "charcoal", 50 ] ], [ [ "crystallized_mana", 10 ] ], [ [ "denat_alcohol", 10 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/construction.json b/data/mods/Magical_Nights/recipes/construction.json
new file mode 100644
index 000000000000..68f7e7813600
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/construction.json
@@ -0,0 +1,20 @@
+[
+ {
+ "type": "construction",
+ "id": "constr_magiclysm_translocator_gate",
+ "group": "build_translocator_gate",
+ "category": "FURN",
+ "required_skills": [ [ "fabrication", 6 ], [ "spellcraft", 6 ] ],
+ "time": "360 m",
+ "qualities": [ [ { "id": "HAMMER", "level": 2 } ], [ { "id": "SAW_W", "level": 2 } ] ],
+ "components": [
+ [ [ "wood_sheet", 2 ], [ "wood_panel", 4 ] ],
+ [ [ "2x4", 4 ] ],
+ [ [ "nail", 24 ] ],
+ [ [ "teleporter", 1 ] ],
+ [ [ "sheet", 2 ] ]
+ ],
+ "pre_special": "check_empty",
+ "post_furniture": "f_magiclysm_translocator_gate"
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/cooking.json b/data/mods/Magical_Nights/recipes/cooking.json
new file mode 100644
index 000000000000..5b16d46d214c
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/cooking.json
@@ -0,0 +1,33 @@
+[
+ {
+ "type": "recipe",
+ "result": "purified_meat",
+ "category": "CC_FOOD",
+ "subcategory": "CSC_FOOD_MEAT",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 1 ],
+ "difficulty": 3,
+ "book_learn": [ [ "cooking_poison", 2 ] ],
+ "time": "15 m",
+ "batch_time_factors": [ 67, 5 ],
+ "qualities": [ { "id": "COOK", "level": 1 }, { "id": "MAGIC_MUTAGEN", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 7, "LIST" ] ] ],
+ "components": [ [ [ "mutant_meat", 3 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "impure_meat",
+ "category": "CC_FOOD",
+ "subcategory": "CSC_FOOD_MEAT",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 3 ],
+ "difficulty": 5,
+ "book_learn": [ [ "cooking_poison", 2 ] ],
+ "time": "15 m",
+ "autolearn": true,
+ "batch_time_factors": [ 67, 5 ],
+ "qualities": [ { "id": "COOK", "level": 1 }, { "id": "MAGIC_MUTAGEN", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 7, "LIST" ] ] ],
+ "components": [ [ [ "meat_tainted", 4 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/deconstruction.json b/data/mods/Magical_Nights/recipes/deconstruction.json
new file mode 100644
index 000000000000..28167913bdef
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/deconstruction.json
@@ -0,0 +1,69 @@
+[
+ {
+ "result": "broken_claygolem",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 2,
+ "time": "4 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "//": "Balanced based on weight",
+ "components": [ [ [ "clay_lump", 231 ] ] ]
+ },
+ {
+ "result": "broken_stonegolem",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 4,
+ "time": "4 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "components": [ [ [ "rock", 222 ] ], [ [ "sharp_rock", 33 ] ] ]
+ },
+ {
+ "result": "broken_irongolem",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 6,
+ "time": "6 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "SAW_M", "level": 1 } ],
+ "components": [ [ [ "scrap", 800 ] ], [ [ "steel_lump", 200 ] ] ]
+ },
+ {
+ "result": "broken_plasticgolem",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 3,
+ "time": "5 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "components": [ [ [ "plastic_chunk", 1400 ] ] ]
+ },
+ {
+ "result": "broken_resingolem_fresh",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 3,
+ "time": "8 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "//": "Terrible yields on purpose",
+ "components": [ [ [ "plastic_chunk", 200 ] ] ]
+ },
+ {
+ "result": "broken_resingolem_half",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 3,
+ "time": "6 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "//": "Poor yields on purpose",
+ "components": [ [ [ "plastic_chunk", 800 ] ] ]
+ },
+ {
+ "result": "broken_resingolem_cured",
+ "type": "uncraft",
+ "skill_used": "spellcraft",
+ "difficulty": 3,
+ "time": "5 h",
+ "qualities": [ { "id": "HAMMER", "level": 1 } ],
+ "//": "Slightly less than pure plastic to account for differences between resin and plastic, I suppose",
+ "components": [ [ [ "plastic_chunk", 1200 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/dragon_black.json b/data/mods/Magical_Nights/recipes/dragon_black.json
new file mode 100644
index 000000000000..01ef4a4f95ab
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/dragon_black.json
@@ -0,0 +1,248 @@
+[
+ {
+ "type": "recipe",
+ "result": "black_dragon_tanning_hide",
+ "byproducts": [ [ "dragon_black_scale", 20 ] ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_MATERIALS",
+ "skill_used": "survival",
+ "skills_required": [ "spellcraft", 5 ],
+ "difficulty": 3,
+ "time": "48 m",
+ "batch_time_factors": [ 20, 10 ],
+ "qualities": [
+ { "id": "CUT", "level": 1 },
+ { "id": "COOK", "level": 2 },
+ { "id": "BOIL", "level": 1 },
+ { "id": "CONTAIN", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 1 }
+ ],
+ "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ],
+ "book_learn": [ [ "black_dragons", 2 ] ],
+ "components": [ [ [ "dragon_essence", 1 ] ], [ [ "black_dragon_hide_raw", 1 ] ] ]
+ },
+ {
+ "result": "suit_black_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 5,
+ "skills_required": [ "spellcraft", 3 ],
+ "time": "70 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 250 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 40 ] ], [ [ "dragon_black_scale", 150 ] ], [ [ "dragon_essence", 15 ] ] ]
+ },
+ {
+ "result": "suit_black_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "skills_required": [ "spellcraft", 5 ],
+ "time": "340 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 250 ], [ "welding_standard", 50 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 40 ] ], [ [ "dragon_black_scale", 1500 ] ], [ [ "dragon_essence", 15 ] ] ]
+ },
+ {
+ "result": "boots_black_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 5,
+ "skills_required": [ "spellcraft", 3 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 100 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 4 ] ], [ [ "dragon_black_scale", 15 ] ], [ [ "dragon_essence", 2 ] ] ]
+ },
+ {
+ "result": "boots_black_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "skills_required": [ "spellcraft", 5 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 100 ], [ "welding_standard", 10 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 6 ] ], [ [ "dragon_black_scale", 75 ] ], [ [ "dragon_essence", 4 ] ] ]
+ },
+ {
+ "result": "helmet_black_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 5,
+ "skills_required": [ "spellcraft", 3 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 100 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 3 ] ], [ [ "dragon_black_scale", 8 ] ], [ [ "dragon_essence", 2 ] ] ]
+ },
+ {
+ "result": "helmet_black_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "skills_required": [ "spellcraft", 5 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 100 ], [ "welding_standard", 10 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 1 ] ], [ [ "dragon_black_scale", 90 ] ], [ [ "dragon_essence", 4 ] ] ]
+ },
+ {
+ "result": "gloves_black_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 5,
+ "skills_required": [ "spellcraft", 3 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 100 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 3 ] ], [ [ "dragon_black_scale", 10 ] ], [ [ "dragon_essence", 3 ] ] ]
+ },
+ {
+ "result": "gauntlets_black_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "skills_required": [ "spellcraft", 5 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 100 ], [ "welding_standard", 10 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 4 ] ], [ [ "dragon_black_scale", 50 ] ], [ [ "dragon_essence", 5 ] ] ]
+ },
+ {
+ "result": "suit_xlblack_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 6,
+ "skills_required": [ "spellcraft", 4 ],
+ "time": "70 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 350 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 60 ] ], [ [ "dragon_black_scale", 250 ] ], [ [ "dragon_essence", 20 ] ] ]
+ },
+ {
+ "result": "suit_xlblack_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "skills_required": [ "spellcraft", 6 ],
+ "time": "340 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 350 ], [ "welding_standard", 100 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 60 ] ], [ [ "dragon_black_scale", 2250 ] ], [ [ "dragon_essence", 25 ] ] ]
+ },
+ {
+ "result": "boots_xlblack_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 6,
+ "skills_required": [ "spellcraft", 4 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 150 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 6 ] ], [ [ "dragon_black_scale", 20 ] ], [ [ "dragon_essence", 3 ] ] ]
+ },
+ {
+ "result": "boots_xlblack_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "skills_required": [ "spellcraft", 6 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 150 ], [ "welding_standard", 20 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 8 ] ], [ [ "dragon_black_scale", 125 ] ], [ [ "dragon_essence", 6 ] ] ]
+ },
+ {
+ "result": "helmet_xlblack_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 6,
+ "skills_required": [ "spellcraft", 4 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 150 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 4 ] ], [ [ "dragon_black_scale", 12 ] ], [ [ "dragon_essence", 3 ] ] ]
+ },
+ {
+ "result": "helmet_xlblack_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "skills_required": [ "spellcraft", 6 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 150 ], [ "welding_standard", 20 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 2 ] ], [ [ "dragon_black_scale", 140 ] ], [ [ "dragon_essence", 6 ] ] ]
+ },
+ {
+ "result": "gloves_xlblack_dragon_hide",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "tailor",
+ "difficulty": 6,
+ "skills_required": [ "spellcraft", 4 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 5 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 150 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 4 ] ], [ [ "dragon_black_scale", 15 ] ], [ [ "dragon_essence", 4 ] ] ]
+ },
+ {
+ "result": "gauntlets_xlblack_dragon_scale",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ARMOR",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "skills_required": [ "spellcraft", 6 ],
+ "time": "30 h",
+ "book_learn": [ [ "black_dragons", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 }, { "id": "CHISEL", "level": 3 } ],
+ "using": [ [ "sewing_standard", 150 ], [ "welding_standard", 20 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 6 ] ], [ [ "dragon_black_scale", 75 ] ], [ [ "dragon_essence", 7 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/enchanting.json b/data/mods/Magical_Nights/recipes/enchanting.json
new file mode 100644
index 000000000000..40e3779df36d
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/enchanting.json
@@ -0,0 +1,723 @@
+[
+ {
+ "type": "recipe",
+ "result": "cestus_plus_one",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_ENCHANTING",
+ "skill_used": "fabrication",
+ "difficulty": 6,
+ "time": "3 h",
+ "autolearn": false,
+ "reversible": false,
+ "book_learn": [ [ "weapon_enchanting_guide", 6 ] ],
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "components": [ [ [ "cestus", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "cestus_plus_two",
+ "components": [ [ [ "cestus_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "flaming_fist_plus_one",
+ "components": [ [ [ "flaming_fist", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "flaming_fist_plus_two",
+ "components": [ [ [ "flaming_fist_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "crowbar_plus_one",
+ "components": [ [ [ "crowbar", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "crowbar_plus_two",
+ "components": [ [ [ "crowbar_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_hunting_plus_one",
+ "components": [ [ [ "knife_hunting", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_hunting_plus_two",
+ "components": [ [ [ "knife_hunting_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "jack_plus_one",
+ "components": [ [ [ "jack", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "jack_plus_two",
+ "components": [ [ [ "jack_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "scalpel_plus_one",
+ "components": [ [ [ "scalpel", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "scalpel_plus_two",
+ "components": [ [ [ "scalpel_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_butcher_plus_one",
+ "components": [ [ [ "knife_butcher", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_butcher_plus_two",
+ "components": [ [ [ "knife_butcher_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_meat_cleaver_plus_one",
+ "components": [ [ [ "knife_meat_cleaver", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_meat_cleaver_plus_two",
+ "components": [ [ [ "knife_meat_cleaver_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_carving_plus_one",
+ "components": [ [ [ "knife_carving", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_carving_plus_two",
+ "components": [ [ [ "knife_carving_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "cudgel_plus_one",
+ "components": [ [ [ "cudgel", 1 ] ], [ [ "mana_dust", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "cudgel_plus_two",
+ "components": [ [ [ "cudgel_plus_one", 1 ] ], [ [ "mana_dust", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "q_staff_plus_one",
+ "components": [ [ [ "q_staff", 1 ] ], [ [ "mana_dust", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "q_staff_plus_two",
+ "components": [ [ [ "q_staff_plus_one", 1 ] ], [ [ "mana_dust", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "i_staff_plus_one",
+ "components": [ [ [ "i_staff", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "i_staff_plus_two",
+ "components": [ [ [ "i_staff_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "longsword_plus_one",
+ "components": [ [ [ "longsword", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "longsword_plus_two",
+ "components": [ [ [ "longsword_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "sledge_plus_one",
+ "components": [ [ [ "hammer_sledge", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "sledge_plus_two",
+ "components": [ [ [ "sledge_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "sledge_heavy_plus_one",
+ "components": [ [ [ "hammer_sledge_heavy", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "sledge_heavy_plus_two",
+ "components": [ [ [ "sledge_heavy_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "warhammer_plus_one",
+ "components": [ [ [ "warhammer", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "warhammer_plus_two",
+ "components": [ [ [ "warhammer_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "bat_plus_one",
+ "components": [ [ [ "bat", 1 ] ], [ [ "mana_dust", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "bat_plus_two",
+ "components": [ [ [ "bat_plus_one", 1 ] ], [ [ "mana_dust", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "bat_metal_plus_one",
+ "components": [ [ [ "bat_metal", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "bat_metal_plus_two",
+ "components": [ [ [ "bat_metal_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "spear_steel_plus_one",
+ "components": [ [ [ "spear_steel", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "spear_steel_plus_two",
+ "components": [ [ [ "spear_steel_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "qiang_plus_one",
+ "components": [ [ [ "qiang", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "qiang_plus_two",
+ "components": [ [ [ "qiang_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "halberd_plus_one",
+ "components": [ [ [ "halberd", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "halberd_plus_two",
+ "components": [ [ [ "halberd_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "glaive_plus_one",
+ "components": [ [ [ "glaive", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "glaive_plus_two",
+ "components": [ [ [ "glaive_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "naginata_plus_one",
+ "components": [ [ [ "naginata", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "naginata_plus_two",
+ "components": [ [ [ "naginata_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "mace_plus_one",
+ "components": [ [ [ "mace", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "mace_plus_two",
+ "components": [ [ [ "mace_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "morningstar_plus_one",
+ "components": [ [ [ "morningstar", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "morningstar_plus_two",
+ "components": [ [ [ "morningstar_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "jian_plus_one",
+ "components": [ [ [ "jian", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "jian_plus_two",
+ "components": [ [ [ "jian_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "scimitar_plus_one",
+ "components": [ [ [ "scimitar", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "scimitar_plus_two",
+ "components": [ [ [ "scimitar_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "estoc_plus_one",
+ "components": [ [ [ "estoc", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "estoc_plus_two",
+ "components": [ [ [ "estoc_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "arming_sword_plus_one",
+ "components": [ [ [ "arming_sword", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "arming_sword_plus_two",
+ "components": [ [ [ "arming_sword_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "broadsword_plus_one",
+ "components": [ [ [ "broadsword", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "broadsword_plus_two",
+ "components": [ [ [ "broadsword_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "battleaxe_plus_one",
+ "components": [ [ [ "battleaxe", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "battleaxe_plus_two",
+ "components": [ [ [ "battleaxe_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "cavalry_sabre_plus_one",
+ "components": [ [ [ "cavalry_sabre", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "cavalry_sabre_plus_two",
+ "components": [ [ [ "cavalry_sabre_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "cutlass_plus_one",
+ "components": [ [ [ "cutlass", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "cutlass_plus_two",
+ "components": [ [ [ "cutlass_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "fire_ax_plus_one",
+ "components": [ [ [ "fire_ax", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "fire_ax_plus_two",
+ "components": [ [ [ "fire_ax_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "katana_plus_one",
+ "components": [ [ [ "katana", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "katana_plus_two",
+ "components": [ [ [ "katana_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_combat_plus_one",
+ "components": [ [ [ "knife_combat", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_combat_plus_two",
+ "components": [ [ [ "knife_combat_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_rambo_plus_one",
+ "components": [ [ [ "knife_rambo", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_rambo_plus_two",
+ "components": [ [ [ "knife_rambo_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "knife_trench_plus_one",
+ "components": [ [ [ "knife_trench", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "knife_trench_plus_two",
+ "components": [ [ [ "knife_trench_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "kris_plus_one",
+ "components": [ [ [ "kris", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "kris_plus_two",
+ "components": [ [ [ "kris_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "kukri_plus_one",
+ "components": [ [ [ "kukri", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "kukri_plus_two",
+ "components": [ [ [ "kukri_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "nodachi_plus_one",
+ "components": [ [ [ "nodachi", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "nodachi_plus_two",
+ "components": [ [ [ "nodachi_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "pickaxe_plus_one",
+ "components": [ [ [ "pickaxe", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "pickaxe_plus_two",
+ "components": [ [ [ "pickaxe_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "pike_plus_one",
+ "components": [ [ [ "pike", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "pike_plus_two",
+ "components": [ [ [ "pike_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "rapier_plus_one",
+ "components": [ [ [ "rapier", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "rapier_plus_two",
+ "components": [ [ [ "rapier_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "tanto_plus_one",
+ "components": [ [ [ "tanto", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "tanto_plus_two",
+ "components": [ [ [ "tanto_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "wakizashi_plus_one",
+ "components": [ [ [ "wakizashi", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "wakizashi_plus_two",
+ "components": [ [ [ "wakizashi_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "zweihander_plus_one",
+ "components": [ [ [ "zweihander", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "zweihander_plus_two",
+ "components": [ [ [ "zweihander_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "khopesh_plus_one",
+ "components": [ [ [ "khopesh", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "khopesh_plus_two",
+ "components": [ [ [ "khopesh_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "sword_xiphos_plus_one",
+ "components": [ [ [ "sword_xiphos", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "sword_xiphos_plus_two",
+ "components": [ [ [ "sword_xiphos_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "dao_plus_one",
+ "components": [ [ [ "dao", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "dao_plus_two",
+ "components": [ [ [ "dao_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 1 } ],
+ "result": "lucerne_plus_one",
+ "components": [ [ [ "lucern_hammer", 1 ] ], [ [ "mana_dust", 20 ] ], [ [ "mercury", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "copy-from": "cestus_plus_one",
+ "qualities": [ { "id": "MANA_INFUSE", "level": 2 } ],
+ "result": "lucerne_plus_two",
+ "components": [ [ [ "lucerne_plus_one", 1 ] ], [ [ "mana_dust", 40 ] ], [ [ "mercury", 20 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/magic_tools.json b/data/mods/Magical_Nights/recipes/magic_tools.json
new file mode 100644
index 000000000000..74338388e782
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/magic_tools.json
@@ -0,0 +1,127 @@
+[
+ {
+ "type": "recipe",
+ "result": "copper_circlet",
+ "byproducts": [ [ "tinder", 40 ] ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_TOOLS",
+ "skill_used": "fabrication",
+ "skills_required": [ "spellcraft", 2 ],
+ "difficulty": 3,
+ "time": "30 m",
+ "autolearn": true,
+ "qualities": [ { "id": "HAMMER_FINE", "level": 1 }, { "id": "CUT_FINE", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ],
+ "components": [ [ [ "scrap_copper", 1 ], [ "copper", 100 ] ], [ [ "splinter", 3 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "copper_infuser",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_TOOLS",
+ "skill_used": "fabrication",
+ "skills_required": [ "spellcraft", 2 ],
+ "difficulty": 3,
+ "time": "20 m",
+ "book_learn": [ [ "alchemy_basic", 3 ], [ "necro_basic", 4 ], [ "techno_basic", 4 ] ],
+ "qualities": [ { "id": "CHISEL", "level": 1 } ],
+ "components": [ [ [ "copper_bracelet", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "silver_infuser",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_TOOLS",
+ "skill_used": "fabrication",
+ "skills_required": [ "spellcraft", 3 ],
+ "difficulty": 4,
+ "time": "20 m",
+ "book_learn": [ [ "alchemy_basic", 3 ], [ "necro_basic", 4 ], [ "techno_basic", 4 ] ],
+ "qualities": [ { "id": "CHISEL", "level": 1 } ],
+ "components": [ [ [ "silver_bracelet", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_alchemist",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_TOOLS",
+ "skill_used": "fabrication",
+ "skills_required": [ "spellcraft", 6 ],
+ "difficulty": 2,
+ "time": "120m",
+ "autolearn": true,
+ "qualities": [ { "id": "CHISEL", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "components": [ [ [ "pebble", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "cauldron_demon_chitin",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_TOOLS",
+ "skill_used": "fabrication",
+ "skills_required": [ "spellcraft", 3 ],
+ "difficulty": 4,
+ "time": "180 m",
+ "book_learn": [ [ "cooking_poison", 3 ] ],
+ "qualities": [ { "id": "CHISEL", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "components": [ [ [ "demon_chitin_piece", 16 ] ], [ [ "bone_glue", 10 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "demon_forge",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_TOOLS",
+ "skill_used": "fabrication",
+ "skills_required": [ "spellcraft", 3 ],
+ "difficulty": 4,
+ "time": "180 m",
+ "book_learn": [ [ "metal_legends", 3 ] ],
+ "qualities": [
+ { "id": "CHISEL", "level": 2 },
+ { "id": "MANA_INFUSE", "level": 2 },
+ { "id": "HAMMER", "level": 2 },
+ { "id": "SMOOTH", "level": 1 }
+ ],
+ "components": [
+ [ [ "demon_chitin_plate", 24 ] ],
+ [ [ "fireproof_mortar", 30 ] ],
+ [ [ "pilot_light", 1 ] ],
+ [ [ "pipe", 3 ] ],
+ [ [ "crystallized_mana", 80 ] ]
+ ]
+ },
+ {
+ "result": "butchering_kit_plus_one",
+ "type": "recipe",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_TOOLS",
+ "skill_used": "fabrication",
+ "reversible": true,
+ "time": "30 s",
+ "autolearn": true,
+ "components": [
+ [ [ "knife_butcher_plus_one", 1 ] ],
+ [ [ "knife_carving_plus_one", 1 ] ],
+ [ [ "knife_meat_cleaver_plus_one", 1 ] ],
+ [ [ "leather", 2 ], [ "rag", 2 ] ],
+ [ [ "string_6", 2 ], [ "cordage_6", 2 ] ]
+ ]
+ },
+ {
+ "result": "butchering_kit_plus_two",
+ "type": "recipe",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_TOOLS",
+ "skill_used": "fabrication",
+ "reversible": true,
+ "time": "30 s",
+ "autolearn": true,
+ "components": [
+ [ [ "knife_butcher_plus_two", 1 ] ],
+ [ [ "knife_carving_plus_two", 1 ] ],
+ [ [ "knife_meat_cleaver_plus_two", 1 ] ],
+ [ [ "leather", 2 ], [ "rag", 2 ] ],
+ [ [ "string_6", 2 ], [ "cordage_6", 2 ] ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/materials.json b/data/mods/Magical_Nights/recipes/materials.json
new file mode 100644
index 000000000000..85f515544928
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/materials.json
@@ -0,0 +1,93 @@
+[
+ {
+ "type": "recipe",
+ "result": "cured_hide",
+ "id_suffix": "scraped_owlbear",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_MATERIALS",
+ "skill_used": "survival",
+ "difficulty": 1,
+ "time": "5 m",
+ "autolearn": true,
+ "qualities": [ { "id": "CUT", "level": 1 } ],
+ "components": [ [ [ "cured_owlbear_pelt", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "cured_owlbear_pelt",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_MATERIALS",
+ "skill_used": "survival",
+ "difficulty": 1,
+ "time": "10 m",
+ "autolearn": true,
+ "qualities": [ { "id": "CUT", "level": 1 } ],
+ "components": [ [ [ "salt_water", 1 ], [ "saline", 2 ], [ "salt", 2 ] ], [ [ "raw_owlbear_fur", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "cured_owlbear_pelt",
+ "id_suffix": "smoked",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_MATERIALS",
+ "skill_used": "survival",
+ "skills_required": [ "cooking", 2 ],
+ "difficulty": 1,
+ "time": "25 m",
+ "batch_time_factors": [ 80, 1 ],
+ "autolearn": true,
+ "qualities": [ { "id": "CUT", "level": 1 } ],
+ "tools": [ [ [ "char_smoker", 5 ] ] ],
+ "components": [ [ [ "raw_owlbear_fur", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "owlbear_fur",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_MATERIALS",
+ "skill_used": "survival",
+ "difficulty": 3,
+ "time": "12 m",
+ "batch_time_factors": [ 20, 10 ],
+ "autolearn": true,
+ "qualities": [
+ { "id": "CUT", "level": 1 },
+ { "id": "COOK", "level": 2 },
+ { "id": "BOIL", "level": 1 },
+ { "id": "CONTAIN", "level": 1 }
+ ],
+ "tools": [ [ [ "surface_heat", 4, "LIST" ] ] ],
+ "components": [
+ [ [ "water_clean", 1 ], [ "water", 1 ] ],
+ [ [ "tanbark", 1 ], [ "acorns", 1 ], [ "hops", 1 ], [ "pine_bough", 1 ], [ "brain", 1 ] ],
+ [ [ "salt_water", 1 ], [ "saline", 2 ], [ "salt", 2 ] ],
+ [ [ "edible_tallow_lard", 1, "LIST" ], [ "tallow_tainted", 1 ] ],
+ [ [ "cured_owlbear_pelt", 1 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "owlbear_fur",
+ "id_suffix": "modern",
+ "category": "CC_OTHER",
+ "subcategory": "CSC_OTHER_MATERIALS",
+ "skill_used": "survival",
+ "difficulty": 3,
+ "time": "5 m",
+ "batch_time_factors": [ 50, 5 ],
+ "autolearn": true,
+ "book_learn": [ [ "textbook_survival", 2 ], [ "modern_tanner", 2 ] ],
+ "qualities": [
+ { "id": "CHEM", "level": 1 },
+ { "id": "COOK", "level": 3 },
+ { "id": "BOIL", "level": 2 },
+ { "id": "CONTAIN", "level": 1 }
+ ],
+ "tools": [ [ [ "surface_heat", 1, "LIST" ] ] ],
+ "components": [
+ [ [ "water_clean", 1 ], [ "water", 1 ] ],
+ [ [ "lye_powder", 2 ], [ "aspirin", 2 ], [ "chem_phenol", 20 ] ],
+ [ [ "cured_owlbear_pelt", 1 ] ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/mods.json b/data/mods/Magical_Nights/recipes/mods.json
new file mode 100644
index 000000000000..18074f98ab6f
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/mods.json
@@ -0,0 +1,68 @@
+[
+ {
+ "type": "recipe",
+ "result": "magic_suppressor",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_ENCHANTED_MODS",
+ "skill_used": "mechanics",
+ "skills_required": [ [ "spellcraft", 4 ], [ "gun", 4 ] ],
+ "difficulty": 4,
+ "time": "2 m 36 s",
+ "book_learn": [ [ "techno_basic", 4 ] ],
+ "qualities": [ { "id": "SAW_M_FINE", "level": 1 } ],
+ "tools": [ [ [ "rune_technomancer", -1 ], [ "rune_technomancer_weapon", -1 ] ] ],
+ "components": [ [ [ "filter_liquid", 1 ], [ "muffler", 1 ] ], [ [ "pipe", 1 ] ], [ [ "scrap", 2 ] ], [ [ "glow_dust", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "mana_dot_sight",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_MODS",
+ "skill_used": "electronics",
+ "difficulty": 7,
+ "skills_required": [ [ "spellcraft", 7 ], [ "gun", 4 ] ],
+ "time": "3 h",
+ "book_learn": [ [ "techno_basic", 5 ] ],
+ "using": [ [ "soldering_standard", 20 ], [ "surface_heat", 20 ] ],
+ "qualities": [ { "id": "SCREW_FINE", "level": 1 }, { "id": "CHEM", "level": 2 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [
+ [ [ "mold_plastic", -1 ] ],
+ [ [ "rune_alchemist", -1 ], [ "rune_technomancer", -1 ], [ "rune_technomancer_weapon", -1 ] ]
+ ],
+ "components": [
+ [ [ "plastic_chunk", 2 ] ],
+ [ [ "amplifier", 1 ] ],
+ [ [ "power_supply", 1 ] ],
+ [ [ "light_minus_battery_cell", 1 ] ],
+ [ [ "crystallized_mana", 15 ] ],
+ [ [ "silver_small", 10 ] ],
+ [ [ "gold_small", 10 ] ],
+ [ [ "chem_aluminium_powder", 10 ] ],
+ [ [ "chem_chromium_oxide", 10 ] ],
+ [ [ "lens", 2 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "mana_laser_under",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_MODS",
+ "skill_used": "electronics",
+ "difficulty": 4,
+ "skills_required": [ [ "spellcraft", 4 ], [ "gun", 4 ] ],
+ "time": "3 h",
+ "book_learn": [ [ "techno_basic", 4 ] ],
+ "using": [ [ "soldering_standard", 10 ] ],
+ "qualities": [ { "id": "SCREW_FINE", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "rune_technomancer", -1 ], [ "rune_technomancer_weapon", -1 ], [ "rune_alchemist", -1 ] ] ],
+ "components": [
+ [ [ "amplifier", 1 ] ],
+ [ [ "power_supply", 1 ] ],
+ [ [ "lens", 2 ], [ "lens_small", 2 ] ],
+ [ [ "light_minus_battery_cell", 1 ] ],
+ [ [ "scrap", 1 ], [ "plastic_chunk", 1 ] ],
+ [ [ "small_mana_crystal", 1 ] ],
+ [ [ "cable", 5 ] ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/recipe_potions.json b/data/mods/Magical_Nights/recipes/recipe_potions.json
new file mode 100644
index 000000000000..2ef23d114753
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/recipe_potions.json
@@ -0,0 +1,249 @@
+[
+ {
+ "type": "recipe",
+ "result": "potion_starter",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 2 ],
+ "difficulty": 3,
+ "charges": 7,
+ "time": "120 m",
+ "batch_time_factors": [ 75, 4 ],
+ "book_learn": [ [ "alchemy_basic", 3 ], [ "necro_basic", 4 ] ],
+ "qualities": [ { "id": "CHEM", "level": 1 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ],
+ "using": [ [ "hard_liquor", 7 ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "potion_starter_superior",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 4 ],
+ "difficulty": 4,
+ "charges": 7,
+ "time": "120 m",
+ "batch_time_factors": [ 75, 4 ],
+ "book_learn": [ [ "alchemy_basic", 3 ], [ "necro_basic", 4 ] ],
+ "qualities": [ { "id": "CHEM", "level": 1 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ] ],
+ "components": [ [ [ "chem_ethanol", 7 ] ], [ [ "alumentum", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "mana_potion_lesser",
+ "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ] ] ],
+ "components": [ [ [ "lotus", 1 ] ], [ [ "potion_starter", 1 ] ] ],
+ "time": "1 h",
+ "batch_time_factors": [ 75, 4 ],
+ "skill_used": "cooking",
+ "difficulty": 3,
+ "skills_required": [ "spellcraft", 3 ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "autolearn": true
+ },
+ {
+ "type": "recipe",
+ "result": "mana_potion",
+ "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ] ] ],
+ "components": [ [ [ "mana_dust", 1 ] ], [ [ "lotus", 1 ] ], [ [ "potion_starter", 1 ] ] ],
+ "time": "3 h",
+ "batch_time_factors": [ 75, 4 ],
+ "skill_used": "cooking",
+ "difficulty": 4,
+ "skills_required": [ "spellcraft", 4 ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "autolearn": true
+ },
+ {
+ "type": "recipe",
+ "result": "mana_potion_greater",
+ "qualities": [ { "id": "CONTAIN", "level": 1 }, { "id": "MANA_INFUSE", "level": 2 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ] ] ],
+ "components": [ [ [ "glow_dust", 1 ] ], [ [ "lotus", 1 ] ], [ [ "potion_starter_superior", 1 ] ] ],
+ "time": "4 h",
+ "batch_time_factors": [ 75, 4 ],
+ "skill_used": "cooking",
+ "difficulty": 5,
+ "skills_required": [ "spellcraft", 5 ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "autolearn": true
+ },
+ {
+ "type": "recipe",
+ "result": "manatouched_serum",
+ "qualities": [ { "id": "MAGIC_MUTAGEN", "level": 2 }, { "id": "MANA_INFUSE", "level": 2 }, { "id": "CONCENTRATE", "level": 1 } ],
+ "components": [ [ [ "mana_dust", 20 ] ], [ [ "mana_potion", 4 ], [ "mana_potion_greater", 1 ], [ "mana_infused_blood", 6 ] ] ],
+ "skill_used": "cooking",
+ "difficulty": 4,
+ "skills_required": [ "spellcraft", 6 ],
+ "time": "4 h",
+ "batch_time_factors": [ 80, 5 ],
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_OTHER",
+ "autolearn": true
+ },
+ {
+ "type": "recipe",
+ "result": "cats_grace_potion",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 5 ],
+ "difficulty": 5,
+ "time": "60 m",
+ "batch_time_factors": [ 50, 4 ],
+ "book_learn": [ [ "alchemy_basic", 4 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ], [ "rune_magus", -1 ], [ "rune_magus_weapon", -1 ] ] ],
+ "components": [
+ [ [ "potion_starter", 5 ] ],
+ [ [ "hairball", 2 ] ],
+ [
+ [ "catfood", 1 ],
+ [ "fish", 1 ],
+ [ "salted_fish", 1 ],
+ [ "fish_cooked", 1 ],
+ [ "fish_smoked", 1 ],
+ [ "dry_fish", 1 ],
+ [ "rehydrated_fish", 1 ],
+ [ "fish_canned", 1 ],
+ [ "fish_pickled", 1 ],
+ [ "fish_fried", 1 ],
+ [ "lutefisk", 1 ]
+ ],
+ [ [ "adderall", 10 ], [ "meth", 6 ], [ "prozac", 15 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "ogres_strength_potion",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 5 ],
+ "difficulty": 5,
+ "time": "60 m",
+ "batch_time_factors": [ 50, 4 ],
+ "book_learn": [ [ "alchemy_basic", 4 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ], [ "rune_magus", -1 ], [ "rune_magus_weapon", -1 ] ] ],
+ "components": [ [ [ "potion_starter", 5 ] ], [ [ "sinew", 40 ] ], [ [ "adrenal_gland_large", 2 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "eagles_sight_potion",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 5 ],
+ "difficulty": 5,
+ "time": "60 m",
+ "batch_time_factors": [ 50, 4 ],
+ "book_learn": [ [ "alchemy_basic", 4 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ], [ "rune_magus", -1 ], [ "rune_magus_weapon", -1 ] ] ],
+ "components": [
+ [ [ "potion_starter", 5 ] ],
+ [
+ [ "egg_bird", 5 ],
+ [ "egg_bird_unfert", 5 ],
+ [ "egg_grouse", 5 ],
+ [ "egg_duck", 3 ],
+ [ "egg_crow", 5 ],
+ [ "egg_chicken", 5 ],
+ [ "egg_pheasant", 5 ],
+ [ "egg_cockatrice", 5 ],
+ [ "egg_turkey", 3 ],
+ [ "egg_goose_canadian", 2 ]
+ ],
+ [ [ "feather", 20 ], [ "down_feather", 20 ] ],
+ [
+ [ "liver", 3 ],
+ [ "veggy_canned", 3 ],
+ [ "veggy_salted", 5 ],
+ [ "carrot", 3 ],
+ [ "irradiated_carrot", 3 ],
+ [ "pumpkin", 4 ],
+ [ "irradiated_pumpkin", 4 ],
+ [ "raw_dandelion", 6 ],
+ [ "zucchini", 4 ],
+ [ "irradiated_zucchini", 4 ],
+ [ "rose_hips", 6 ]
+ ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "foxs_cunning_potion",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 5 ],
+ "difficulty": 5,
+ "time": "60 m",
+ "batch_time_factors": [ 50, 4 ],
+ "book_learn": [ [ "alchemy_basic", 4 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_alchemist", -1 ], [ "rune_magus", -1 ], [ "rune_magus_weapon", -1 ] ] ],
+ "components": [
+ [ [ "potion_starter", 5 ] ],
+ [ [ "brain", 2 ], [ "brain_cooked", 2 ] ],
+ [
+ [ "adderall", 10 ],
+ [ "caff_gum", 30 ],
+ [ "chaw", 10 ],
+ [ "cig", 20 ],
+ [ "cigar", 5 ],
+ [ "handrolled_cig", 20 ]
+ ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "twisted_restore_potion",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 4 ],
+ "difficulty": 4,
+ "time": "60 m",
+ "result_mult": 5,
+ "batch_time_factors": [ 50, 4 ],
+ "book_learn": [ [ "necro_basic", 3 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [
+ [ [ "surface_heat", 10, "LIST" ] ],
+ [ [ "rune_alchemist", -1 ], [ "rune_animist", -1 ], [ "rune_animist_weapon", -1 ] ]
+ ],
+ "components": [ [ [ "potion_starter", 5 ] ], [ [ "blood", 3 ] ], [ [ "slime_scrap", 4 ], [ "meat_tainted", 12 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "twisted_restore_potion_improved",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_POTIONS",
+ "skill_used": "cooking",
+ "skills_required": [ "spellcraft", 6 ],
+ "difficulty": 6,
+ "time": "60 m",
+ "result_mult": 5,
+ "batch_time_factors": [ 50, 4 ],
+ "book_learn": [ [ "necro_basic", 5 ] ],
+ "qualities": [ { "id": "CHEM", "level": 2 }, { "id": "CONCENTRATE", "level": 1 }, { "id": "MANA_FOCUS", "level": 1 } ],
+ "tools": [ [ [ "surface_heat", 10, "LIST" ] ], [ [ "rune_animist", -1 ], [ "rune_animist_weapon", -1 ] ] ],
+ "components": [
+ [ [ "potion_starter", 5 ] ],
+ [ [ "blood", 5 ] ],
+ [ [ "slime_scrap", 5 ], [ "meat_tainted", 15 ] ],
+ [ [ "bandages", 5 ], [ "bandages_makeshift_bleached", 7 ], [ "bandages_makeshift_boiled", 7 ] ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/recipes/weapons.json b/data/mods/Magical_Nights/recipes/weapons.json
new file mode 100644
index 000000000000..cdf7d7dd4d09
--- /dev/null
+++ b/data/mods/Magical_Nights/recipes/weapons.json
@@ -0,0 +1,501 @@
+[
+ {
+ "type": "recipe",
+ "result": "rune_magus_weapon",
+ "//": "Forging and water included for glass heat-tempering process",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 2 ], [ "bashing", 2 ] ],
+ "difficulty": 4,
+ "time": "360 m",
+ "autolearn": true,
+ "using": [ [ "forging_standard", 2 ] ],
+ "qualities": [ { "id": "CHISEL", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "water", -1 ] ], [ [ "tongs", -1 ] ] ],
+ "components": [
+ [ [ "q_staff", 1 ] ],
+ [ [ "jar_glass", 2 ] ],
+ [ [ "rune_magus", 2 ] ],
+ [ [ "tallow", 2 ], [ "tallow_tainted", 2 ], [ "cooking_oil", 16 ], [ "cooking_oil2", 16 ], [ "lamp_oil", 250 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_biomancer_weapon",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 2 ], [ "stabbing", 2 ] ],
+ "difficulty": 4,
+ "time": "2 m",
+ "autolearn": true,
+ "qualities": [ { "id": "CUT", "level": 1 } ],
+ "tools": [ [ [ "fire", -1 ] ] ],
+ "components": [
+ [ [ "stick_long", 1 ], [ "pool_cue", 1 ] ],
+ [ [ "rag", 1 ], [ "felt_patch", 1 ], [ "leather", 1 ], [ "fur", 1 ] ],
+ [ [ "duct_tape", 20 ], [ "filament", 20, "LIST" ] ],
+ [ [ "bone", 3 ], [ "bone_human", 3 ], [ "bone_tainted", 6 ] ],
+ [ [ "rune_biomancer", 1 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_animist_weapon",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 2 ], [ "stabbing", 2 ] ],
+ "difficulty": 4,
+ "time": "360 m",
+ "autolearn": true,
+ "using": [ [ "forging_standard", 2 ], [ "steel_tiny", 1 ] ],
+ "qualities": [
+ { "id": "ANVIL", "level": 3 },
+ { "id": "HAMMER", "level": 3 },
+ { "id": "CHISEL", "level": 3 },
+ { "id": "MANA_INFUSE", "level": 1 }
+ ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "2x4", 1 ], [ "stick", 1 ] ], [ [ "rune_animist", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_druid_weapon",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 2 ], [ "archery", 2 ] ],
+ "difficulty": 4,
+ "time": "360 m",
+ "autolearn": true,
+ "qualities": [ { "id": "CUT", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "components": [ [ [ "compositebow", 1 ] ], [ [ "rune_druid", 2 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_technomancer_weapon",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "difficulty": 5,
+ "skills_required": [ [ "spellcraft", 2 ], [ "mechanics", 2 ] ],
+ "time": "360 m",
+ "autolearn": true,
+ "using": [ [ "forging_standard", 14 ], [ "steel_standard", 3 ] ],
+ "qualities": [
+ { "id": "ANVIL", "level": 3 },
+ { "id": "HAMMER", "level": 3 },
+ { "id": "CHISEL", "level": 3 },
+ { "id": "MANA_INFUSE", "level": 1 }
+ ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "rune_technomancer", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_stormshaper_weapon",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "difficulty": 4,
+ "skills_required": [ [ "spellcraft", 2 ], [ "bashing", 2 ] ],
+ "time": "360 m",
+ "autolearn": true,
+ "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "using": [ [ "forging_standard", 5 ] ],
+ "components": [
+ [ [ "stick", 1 ], [ "2x4", 1 ] ],
+ [ [ "scrap_copper", 10 ], [ "copper", 1000 ] ],
+ [ [ "silver_small", 100 ] ],
+ [ [ "cordage_short", 2, "LIST" ], [ "filament", 40, "LIST" ], [ "duct_tape", 40 ] ],
+ [ [ "rune_stormshaper", 1 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "rune_earthshaper_weapon",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 2 ], [ "bashing", 2 ] ],
+ "difficulty": 4,
+ "time": "360 m",
+ "autolearn": true,
+ "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_M", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "components": [ [ [ "leather", 4 ] ], [ [ "scrap", 8 ] ], [ [ "rock", 1 ] ], [ [ "rune_earthshaper", 1 ] ] ]
+ },
+ {
+ "result": "rune_kelvinist_weapon",
+ "type": "recipe",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "skills_required": [ [ "spellcraft", 2 ], [ "cutting", 2 ] ],
+ "time": "420 m",
+ "autolearn": true,
+ "using": [ [ "forging_standard", 4 ], [ "steel_standard", 2 ] ],
+ "qualities": [
+ { "id": "ANVIL", "level": 3 },
+ { "id": "HAMMER", "level": 3 },
+ { "id": "CHISEL", "level": 3 },
+ { "id": "MANA_INFUSE", "level": 1 }
+ ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "2x4", 1 ], [ "stick", 2 ] ], [ [ "fur", 2 ], [ "leather", 2 ] ], [ [ "rune_kelvinist", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "animist_doll_zombie",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 4 ] ],
+ "difficulty": 4,
+ "time": "120 m",
+ "result_mult": 3,
+ "book_learn": [ [ "necro_basic", 3 ] ],
+ "qualities": [ { "id": "SEW", "level": 1 }, { "id": "CUT_FINE", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "rune_alchemist", -1 ], [ "rune_animist", -1 ], [ "rune_animist_weapon", -1 ] ] ],
+ "components": [
+ [ [ "brain", 1 ], [ "brain_cooked", 1 ] ],
+ [ [ "lung", 2 ], [ "lung_cooked", 2 ] ],
+ [ [ "stomach", 1 ], [ "hstomach", 1 ] ],
+ [ [ "liver", 1 ], [ "liver_cooked", 1 ] ],
+ [ [ "kidney", 2 ], [ "kidney_cooked", 2 ] ],
+ [ [ "leather", 6 ], [ "tanned_hide", 1 ] ],
+ [ [ "sinew", 60 ] ],
+ [ [ "bone", 1 ], [ "bone_human", 1 ], [ "bone_tainted", 2 ] ],
+ [ [ "needle_bone", 1 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "animist_doll_skeleton",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 5 ] ],
+ "difficulty": 5,
+ "time": "180 m",
+ "result_mult": 3,
+ "book_learn": [ [ "necro_basic", 4 ] ],
+ "qualities": [
+ { "id": "SEW", "level": 1 },
+ { "id": "CUT_FINE", "level": 1 },
+ { "id": "HAMMER_FINE", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 1 }
+ ],
+ "tools": [ [ [ "rune_alchemist", -1 ], [ "rune_animist", -1 ], [ "rune_animist_weapon", -1 ] ] ],
+ "components": [
+ [ [ "brain", 1 ], [ "brain_cooked", 1 ] ],
+ [ [ "lung", 2 ], [ "lung_cooked", 2 ] ],
+ [ [ "stomach", 1 ], [ "hstomach", 1 ] ],
+ [ [ "liver", 1 ], [ "liver_cooked", 1 ] ],
+ [ [ "kidney", 2 ], [ "kidney_cooked", 2 ] ],
+ [ [ "leather", 6 ], [ "tanned_hide", 1 ] ],
+ [ [ "sinew", 60 ] ],
+ [ [ "bone", 4 ], [ "bone_human", 4 ], [ "bone_tainted", 8 ] ],
+ [ [ "needle_bone", 1 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "animist_doll_decayed_pouncer",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "tailor",
+ "skills_required": [ [ "spellcraft", 7 ] ],
+ "difficulty": 7,
+ "time": "210 m",
+ "result_mult": 3,
+ "book_learn": [ [ "necro_basic", 6 ] ],
+ "qualities": [ { "id": "SEW", "level": 1 }, { "id": "CUT_FINE", "level": 1 }, { "id": "MANA_INFUSE", "level": 1 } ],
+ "tools": [ [ [ "rune_animist", -1 ], [ "rune_animist_weapon", -1 ] ] ],
+ "components": [
+ [ [ "brain", 1 ], [ "brain_cooked", 1 ] ],
+ [ [ "lung", 2 ], [ "lung_cooked", 2 ] ],
+ [ [ "stomach", 1 ], [ "hstomach", 1 ] ],
+ [ [ "liver", 1 ], [ "liver_cooked", 1 ] ],
+ [ [ "kidney", 2 ], [ "kidney_cooked", 2 ] ],
+ [ [ "fur", 6 ], [ "tanned_pelt", 1 ] ],
+ [ [ "hairball", 2 ] ],
+ [ [ "sinew", 60 ] ],
+ [ [ "bone", 1 ], [ "bone_human", 1 ], [ "bone_tainted", 2 ] ],
+ [ [ "needle_bone", 1 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "shotcestus",
+ "category": "CC_ENCHANTED",
+ "subcategory": "CSC_ENCHANTED_WEAPONS",
+ "skill_used": "mechanics",
+ "difficulty": 4,
+ "skills_required": [ [ "spellcraft", 4 ], [ "bashing", 2 ], [ "shotgun", 2 ] ],
+ "time": "4 h 30 m",
+ "book_learn": [ [ "techno_basic", 4 ] ],
+ "qualities": [
+ { "id": "HAMMER", "level": 3 },
+ { "id": "CUT_FINE", "level": 1 },
+ { "id": "SAW_M", "level": 2 },
+ { "id": "SAW_M_FINE", "level": 1 },
+ { "id": "SCREW_FINE", "level": 1 },
+ { "id": "MANA_INFUSE", "level": 1 }
+ ],
+ "tools": [ [ [ "rune_technomancer", -1 ], [ "rune_technomancer_weapon", -1 ] ] ],
+ "byproducts": [ [ "splinter", 4 ] ],
+ "//": "Splinters from stock",
+ "components": [ [ [ "leather", 4 ] ], [ [ "pipe_double_shotgun", 1 ], [ "shotgun_d", 1 ] ], [ [ "scrap", 8 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "mjolnir",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_BASHING",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 7 ], [ "bashing", 6 ] ],
+ "difficulty": 10,
+ "time": 480000,
+ "book_learn": [ [ "book_mythological", 10 ] ],
+ "using": [ [ "forging_standard", 3 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 3 }, { "id": "CHISEL", "level": 3 } ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "anvil", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [
+ [ [ "warhammer", 1 ] ],
+ [ [ "gold_small", 1 ] ],
+ [ [ "silver_small", 2 ] ],
+ [ [ "rebar", 1 ] ],
+ [ [ "orichalcum_ingot", 2 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "gungnir",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_PIERCING",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 7 ], [ "stabbing", 6 ] ],
+ "difficulty": 10,
+ "time": 480000,
+ "book_learn": [ [ "book_mythological", 10 ] ],
+ "using": [ [ "forging_standard", 3 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 3 }, { "id": "CHISEL", "level": 3 } ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "anvil", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "spear_steel", 1 ] ], [ [ "gold_small", 1 ] ], [ [ "silver_small", 2 ] ], [ [ "orichalcum_ingot", 2 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "gram",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 7 ], [ "cutting", 6 ] ],
+ "difficulty": 10,
+ "time": 480000,
+ "book_learn": [ [ "book_mythological", 10 ] ],
+ "using": [ [ "forging_standard", 3 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 3 }, { "id": "CHISEL", "level": 3 } ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "anvil", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "jian", 1 ] ], [ [ "gold_small", 1 ] ], [ [ "orichalcum_ingot", 2 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "ichaival",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_RANGED",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 7 ], [ "archery", 6 ] ],
+ "difficulty": 10,
+ "time": 480000,
+ "book_learn": [ [ "book_mythological", 10 ] ],
+ "using": [ [ "forging_standard", 3 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 3 }, { "id": "CHISEL", "level": 3 } ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "anvil", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "compositebow", 1 ] ], [ [ "gold_small", 1 ] ], [ [ "orichalcum_ingot", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "laevateinn",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "spellcraft", 7 ] ],
+ "difficulty": 10,
+ "time": 480000,
+ "book_learn": [ [ "book_mythological", 10 ] ],
+ "using": [ [ "forging_standard", 3 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 3 }, { "id": "CHISEL", "level": 3 } ],
+ "tools": [ [ [ "tongs", -1 ] ], [ [ "anvil", -1 ] ], [ [ "swage", -1 ] ] ],
+ "components": [ [ [ "i_staff", 1 ] ], [ [ "gold_small", 1 ] ], [ [ "orichalcum_ingot", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "arrow_odin",
+ "category": "CC_AMMO",
+ "subcategory": "CSC_AMMO_ARROWS",
+ "skill_used": "fabrication",
+ "skills_required": [ [ "archery", 4 ], [ "spellcraft", 5 ] ],
+ "using": [ [ "forging_standard", 1 ] ],
+ "difficulty": 5,
+ "charges": 4,
+ "time": "30 m",
+ "book_learn": [ [ "book_mythological", 9 ] ],
+ "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "CUT", "level": 1 }, { "id": "ANVIL", "level": 3 } ],
+ "tools": [ [ [ "tongs", -1 ] ] ],
+ "components": [
+ [ [ "orichalcum_ingot", 1 ] ],
+ [ [ "adhesive", 1, "LIST" ], [ "filament", 10, "LIST" ] ],
+ [ [ "stick", 1 ], [ "broom", 1 ], [ "2x4", 1 ] ],
+ [ [ "fletching", 1, "LIST" ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "dbone_battleaxe",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "autolearn": true,
+ "time": "8 h",
+ "book_learn": [ [ "textbook_weapwest", 8 ], [ "recipe_melee", 7 ] ],
+ "using": [ [ "blacksmithing_advanced", 12 ] ],
+ "components": [ [ [ "2x4", 2 ], [ "stick", 4 ] ], [ [ "fabric_hides_any", 2, "LIST" ] ], [ [ "dragon_bone", 12 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "dbone_tachi",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "autolearn": true,
+ "time": "8 h",
+ "book_learn": [ [ "textbook_weapeast", 8 ] ],
+ "using": [ [ "blacksmithing_advanced", 8 ] ],
+ "components": [ [ [ "2x4", 2 ], [ "stick", 4 ] ], [ [ "fabric_hides_any", 2, "LIST" ] ], [ [ "dragon_bone", 8 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "dbone_longsword",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "autolearn": true,
+ "time": "7 h",
+ "book_learn": [ [ "textbook_weapwest", 7 ] ],
+ "using": [ [ "blacksmithing_advanced", 16 ] ],
+ "components": [ [ [ "2x4", 1 ], [ "stick", 2 ] ], [ [ "fabric_hides_any", 1, "LIST" ] ], [ [ "dragon_bone", 16 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "dbone_qiang",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_PIERCING",
+ "skill_used": "fabrication",
+ "difficulty": 7,
+ "autolearn": true,
+ "time": "7 h 40 m",
+ "book_learn": [ [ "textbook_armschina", 6 ] ],
+ "using": [ [ "blacksmithing_advanced", 4 ] ],
+ "components": [
+ [ [ "filament", 100, "LIST" ] ],
+ [ [ "stick_long", 1 ] ],
+ [ [ "fabric_hides_any", 2, "LIST" ] ],
+ [ [ "dragon_bone", 4 ] ]
+ ]
+ },
+ {
+ "type": "recipe",
+ "result": "black_dbone_battleaxe",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "autolearn": true,
+ "time": "8 h",
+ "book_learn": [ [ "textbook_weapwest", 8 ], [ "recipe_melee", 7 ] ],
+ "using": [ [ "blacksmithing_advanced", 12 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 2 ] ], [ [ "dragon_essence", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "black_dbone_tachi",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "autolearn": true,
+ "time": "8 h",
+ "book_learn": [ [ "textbook_weapeast", 7 ] ],
+ "using": [ [ "blacksmithing_advanced", 8 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 1 ] ], [ [ "dragon_essence", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "black_dbone_longsword",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "autolearn": true,
+ "time": "7 h",
+ "book_learn": [ [ "textbook_weapwest", 7 ] ],
+ "using": [ [ "blacksmithing_advanced", 16 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 1 ] ], [ [ "dragon_essence", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "black_dbone_qiang",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_PIERCING",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "autolearn": true,
+ "time": "7 h 40 m",
+ "book_learn": [ [ "textbook_armschina", 6 ] ],
+ "using": [ [ "blacksmithing_advanced", 4 ] ],
+ "components": [ [ [ "black_dragon_tanned_hide", 2 ] ], [ [ "dragon_essence", 1 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "orich_longsword",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 8,
+ "time": "7 h",
+ "book_learn": [ [ "textbook_weapwest", 7 ], [ "scots_cookbook", 9 ] ],
+ "using": [ [ "blacksmithing_advanced", 16 ] ],
+ "components": [ [ [ "orichalcum_ingot", 2 ] ], [ [ "2x4", 1 ], [ "stick", 2 ] ], [ [ "fabric_hides_any", 1, "LIST" ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "orich_fire_ax",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_CUTTING",
+ "skill_used": "fabrication",
+ "difficulty": 9,
+ "time": "7 h",
+ "book_learn": [ [ "textbook_fireman", 8 ], [ "textbook_fabrication", 9 ] ],
+ "using": [ [ "blacksmithing_intermediate", 16 ] ],
+ "tools": [ [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ] ],
+ "components": [ [ [ "orichalcum_ingot", 2 ] ], [ [ "2x4", 2 ], [ "stick", 4 ] ] ]
+ },
+ {
+ "type": "recipe",
+ "result": "orich_knife_combat",
+ "category": "CC_WEAPON",
+ "subcategory": "CSC_WEAPON_PIERCING",
+ "skill_used": "fabrication",
+ "difficulty": 6,
+ "time": "6 h",
+ "using": [ [ "blacksmithing_advanced", 4 ] ],
+ "book_learn": [ [ "manual_knives", 4 ], [ "recipe_melee", 5 ] ],
+ "components": [ [ [ "orichalcum_ingot", 1 ] ], [ [ "fabric_hides_any", 2, "LIST" ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/requirements/alchemy.json b/data/mods/Magical_Nights/requirements/alchemy.json
new file mode 100644
index 000000000000..7956b1b9fe85
--- /dev/null
+++ b/data/mods/Magical_Nights/requirements/alchemy.json
@@ -0,0 +1,8 @@
+[
+ {
+ "id": "dragon_scale",
+ "type": "requirement",
+ "//": "Dragon scales. For when any color is interchangeable.",
+ "components": [ [ [ "dragon_black_scale", 1 ] ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/requirements/cooking_components.json b/data/mods/Magical_Nights/requirements/cooking_components.json
new file mode 100644
index 000000000000..8628d93a98df
--- /dev/null
+++ b/data/mods/Magical_Nights/requirements/cooking_components.json
@@ -0,0 +1,18 @@
+[
+ {
+ "id": "meat_raw_steak",
+ "type": "requirement",
+ "//": "override of vanilla raw steak, includes purified and impure meat",
+ "components": [
+ [
+ [ "meat", 1 ],
+ [ "mutant_meat", 1 ],
+ [ "human_flesh", 1 ],
+ [ "mutant_human_flesh", 1 ],
+ [ "purified_meat", 1 ],
+ [ "impure_meat", 1 ],
+ [ "meat_dragon", 1 ]
+ ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/requirements/spell_requirements.json b/data/mods/Magical_Nights/requirements/spell_requirements.json
new file mode 100644
index 000000000000..faf146ae03d9
--- /dev/null
+++ b/data/mods/Magical_Nights/requirements/spell_requirements.json
@@ -0,0 +1,23 @@
+[
+ {
+ "id": "spell_components_flamesword",
+ "type": "requirement",
+ "//": "Wooden swords usable for the Flamesword spell",
+ "components": [ [ [ "sword_wood", 1 ], [ "sword_nail", 1 ], [ "sword_crude", 1 ] ] ]
+ },
+ {
+ "id": "spell_components_flamebreath",
+ "type": "requirement",
+ "//": "100ml portions of combustible dusts usable for the Flamebreath spell",
+ "components": [ [ [ "sugar", 28 ], [ "flour", 4 ], [ "tinder", 100 ], [ "cinnamon", 40 ], [ "chilly-p", 40 ] ] ]
+ },
+ {
+ "id": "spell_components_decayingboneclub",
+ "type": "requirement",
+ "//": "Weapon materials and 1000 energy from blood suitable for the Decaying Boneclub spell",
+ "components": [
+ [ [ "bone", 3 ], [ "bone_human", 3 ], [ "bone_tainted", 6 ] ],
+ [ [ "blood", 4 ], [ "blood_tainted", 200 ], [ "dragon_blood", 20 ] ]
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/scenarios.json b/data/mods/Magical_Nights/scenarios.json
new file mode 100644
index 000000000000..c7103a00fc86
--- /dev/null
+++ b/data/mods/Magical_Nights/scenarios.json
@@ -0,0 +1,50 @@
+[
+ {
+ "type": "scenario",
+ "id": "lost_faith",
+ "name": "Lost Faith",
+ "flags": [ "LONE_START" ],
+ "surround_groups": [ [ "GROUP_CHURCH_ZOMBIE", 70.0 ] ],
+ "points": 2,
+ "description": "You've been preaching your faith for a long time, but the recent events have begun to make you doubt it. Wandering in your temple, you just found books that may restore your faith or shatter it completely.",
+ "start_name": "Church",
+ "allowed_locs": [ "sloc_church" ],
+ "professions": [ "priest_magic2", "shinto_priest_magic2", "imam_magic2", "rabbi_magic2", "guru_magic2", "preacher_magic2" ]
+ },
+ {
+ "type": "scenario",
+ "id": "magic_basement",
+ "name": "The Wizard's Apprentice",
+ "flags": [ "LONE_START" ],
+ "points": 3,
+ "description": "You have been an apprentice to a wizard for some time now, working on a prototype device that could perhaps be used to escape from the Cataclysm. Something went wrong with the maiden voyage though, and your teacher teleported his insides into his outsides. Now you have to figure out how to survive on your own. At least he left his notebook…",
+ "start_name": "Wizard's Secret Basement Study",
+ "allowed_locs": [ "sloc_magic_basement" ],
+ "professions": [
+ "wizard_novice",
+ "novice_necromancer",
+ "novice_earthshaper",
+ "novice_technomancer",
+ "novice_stormshaper",
+ "novice_kelvinist"
+ ]
+ },
+ {
+ "type": "scenario",
+ "id": "lake_retreat",
+ "name": "The Wizard's Vacation",
+ "flags": [ "LONE_START" ],
+ "points": 6,
+ "description": "You have been an apprentice to a wizard for some time now, you've saved for years for your dream vacation at a secluded wizard tower. Your journey of self-discovery is interrupted by the Cataclysm. Now you have to figure out how to survive on your own.",
+ "start_name": "Wizard's Retreat Vacation",
+ "allowed_locs": [ "sloc_lake_retreat" ],
+ "professions": [
+ "wizard_novice",
+ "novice_necromancer",
+ "novice_earthshaper",
+ "novice_technomancer",
+ "novice_stormshaper",
+ "novice_kelvinist"
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/species.json b/data/mods/Magical_Nights/species.json
new file mode 100755
index 000000000000..d20476d224bf
--- /dev/null
+++ b/data/mods/Magical_Nights/species.json
@@ -0,0 +1,30 @@
+[
+ {
+ "type": "SPECIES",
+ "id": "MAGICAL_BEAST",
+ "name": { "str": "magical beast" }
+ },
+ {
+ "type": "SPECIES",
+ "id": "DRAGON",
+ "name": { "str": "dragon" },
+ "anger_triggers": [ "HURT", "PLAYER_CLOSE", "PLAYER_WEAK", "STALK" ]
+ },
+ {
+ "type": "SPECIES",
+ "id": "LIZARDFOLK",
+ "name": { "str_sp": "lizardfolk" },
+ "anger_triggers": [ "FRIEND_ATTACKED" ],
+ "fear_triggers": [ "FIRE" ]
+ },
+ {
+ "type": "SPECIES",
+ "id": "GOBLIN",
+ "name": { "str": "goblin" }
+ },
+ {
+ "type": "SPECIES",
+ "id": "ORC",
+ "name": { "str": "orc" }
+ }
+]
diff --git a/data/mods/Magical_Nights/start_locations.json b/data/mods/Magical_Nights/start_locations.json
new file mode 100644
index 000000000000..ee7e4741972c
--- /dev/null
+++ b/data/mods/Magical_Nights/start_locations.json
@@ -0,0 +1,14 @@
+[
+ {
+ "type": "start_location",
+ "id": "sloc_magic_basement",
+ "name": "Wizard's Secret Basement Study",
+ "terrain": [ "magic_basement" ]
+ },
+ {
+ "type": "start_location",
+ "id": "sloc_lake_retreat",
+ "name": "Wizard's lake retreat",
+ "terrain": [ "lake_retreat_ground" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/ter_fur_transform/ter_fur_transform.json b/data/mods/Magical_Nights/ter_fur_transform/ter_fur_transform.json
new file mode 100644
index 000000000000..a16ce0995923
--- /dev/null
+++ b/data/mods/Magical_Nights/ter_fur_transform/ter_fur_transform.json
@@ -0,0 +1,139 @@
+[
+ {
+ "type": "ter_furn_transform",
+ "id": "move_earth",
+ "fail_message": "The earth here does not listen to your command to move.",
+ "terrain": [
+ { "result": "t_hole", "valid_terrain": [ "t_pit", "t_slope_down" ], "message": "The pit has deepened further." },
+ {
+ "result": "t_pit",
+ "valid_terrain": [
+ "t_pit_corpsed",
+ "t_pit_covered",
+ "t_pit_glass",
+ "t_pit_glass_covered",
+ "t_pit_spiked",
+ "t_pit_spiked_covered",
+ "t_rootcellar",
+ "t_pit_shallow"
+ ],
+ "message": "More debris shifts out of the pit."
+ },
+ {
+ "result": "t_pit_shallow",
+ "valid_terrain": [
+ "t_grave",
+ "t_dirt",
+ "t_sand",
+ "t_clay",
+ "t_dirtmound",
+ "t_grass",
+ "t_grass_long",
+ "t_grass_tall",
+ "t_grass_dead",
+ "t_grass_white",
+ "t_dirtfloor",
+ "t_fungus_floor_in",
+ "t_fungus_floor_sup",
+ "t_fungus_floor_out",
+ "t_sandbox"
+ ],
+ "message": "The earth moves out of the way for you."
+ },
+ {
+ "result": "t_sand",
+ "valid_terrain": [
+ "t_pavement",
+ "t_pavement_y",
+ "t_sidewalk",
+ "t_concrete",
+ "t_thconc_floor",
+ "t_thconc_floor_olight",
+ "t_strconc_floor",
+ "t_floor",
+ "t_floor_waxed",
+ "t_carpet_red",
+ "t_carpet_yellow",
+ "t_carpet_purple",
+ "t_carpet_green",
+ "t_linoleum_white",
+ "t_linoleum_gray",
+ "t_slope_up",
+ "t_rock_red",
+ "t_rock_blue",
+ "t_floor_red",
+ "t_floor_green",
+ "t_floor_blue",
+ "t_pavement_bg_dp",
+ "t_pavement_y_bg_dp",
+ "t_sidewalk_bg_dp"
+ ],
+ "message": "The rocks here are ground into sand."
+ },
+ { "result": "t_rock_floor", "valid_terrain": [ "t_rock" ], "message": "The rock crumbles to dust." },
+ {
+ "result": "t_hole",
+ "valid_terrain": [ "t_null" ],
+ "message": "All the dust in the air here falls to the ground.",
+ "message_good": false
+ }
+ ]
+ },
+ {
+ "type": "ter_furn_transform",
+ "id": "fungicide",
+ "terrain": [ { "result": "t_dirt_barren", "valid_flags": [ "FUNGUS" ], "message": "The fungus here dies back." } ],
+ "furniture": [ { "result": "f_null", "valid_flags": [ "FUNGUS" ], "message": "The fungus here dies back." } ]
+ },
+ {
+ "type": "ter_furn_transform",
+ "id": "lava_bomb",
+ "terrain": [ { "result": "t_lava", "valid_flags": [ "DIGGABLE" ] } ]
+ },
+ {
+ "type": "ter_furn_transform",
+ "id": "earthshaper_pillar",
+ "//": "Furniture alteration has to be able to reasonably check for most intervening furniture and remove it.",
+ "terrain": [
+ {
+ "result": "t_rock_smooth",
+ "valid_flags": [ "DIGGABLE", "FLAT" ],
+ "message": "The ground shakes, a section of unnaturally smooth stone wall rising up."
+ }
+ ],
+ "furniture": [ { "result": "f_null", "valid_flags": [ "TRANSPARENT", "WALL" ] } ]
+ },
+ {
+ "type": "ter_furn_transform",
+ "id": "druidic_renewal",
+ "//": "TODO: Update the birch and willow transformations if they ever make those trees behave consistent relative to blackjack oak and pine.",
+ "terrain": [
+ {
+ "result": [ [ "t_tree_blackjack_harvested", 10 ], [ "t_tree_harvested", 90 ] ],
+ "valid_terrain": [ "t_tree_dead" ],
+ "message": "The dead tree regrows."
+ },
+ {
+ "result": "t_tree_pine_harvested",
+ "valid_terrain": [ "t_tree_deadpine" ],
+ "message": "The dead tree regrows."
+ },
+ {
+ "result": "t_tree_hickory_harvested",
+ "valid_terrain": [ "t_tree_hickory_dead" ],
+ "message": "The dead tree regrows."
+ },
+ { "result": "t_tree_birch", "valid_terrain": [ "t_tree_birch_harvested" ], "message": "The dead tree regrows." },
+ {
+ "result": "t_tree_willow",
+ "valid_terrain": [ "t_tree_willow_harvested" ],
+ "message": "The dead tree regrows."
+ },
+ {
+ "result": "t_grass",
+ "valid_terrain": [ "t_grass_dead" ],
+ "message": "Life springs anew from the dead grass."
+ }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/terrain.json b/data/mods/Magical_Nights/terrain.json
new file mode 100644
index 000000000000..5d90160216ef
--- /dev/null
+++ b/data/mods/Magical_Nights/terrain.json
@@ -0,0 +1,64 @@
+[
+ {
+ "type": "terrain",
+ "id": "t_tree_burnt",
+ "name": "burnt tree",
+ "description": "This tree looks like it has been burnt badly, but it is somehow still standing.",
+ "symbol": "7",
+ "color": "dark_gray",
+ "move_cost": 0,
+ "coverage": 60,
+ "flags": [ "NOITEM", "SUPPORTS_ROOF", "TREE", "REDUCE_SCENT" ],
+ "bash": {
+ "str_min": 30,
+ "str_max": 180,
+ "sound": "crunch!",
+ "sound_fail": "whack!",
+ "ter_set": "t_dirt",
+ "items": [ { "item": "ash", "count": [ 3, 10 ] } ]
+ }
+ },
+ {
+ "type": "terrain",
+ "id": "t_webbed_corpse",
+ "name": "burnt tree",
+ "description": "This is a large coccoon-like object that looks to be the vague shape of some creature. You don't want to know how long it stayed alive while being sucked dry by these spiders.",
+ "symbol": "7",
+ "color": "light_gray",
+ "move_cost": 0,
+ "coverage": 30,
+ "bash": {
+ "str_min": 30,
+ "str_max": 180,
+ "sound": "crunch!",
+ "sound_fail": "whump!",
+ "ter_set": "t_dirt",
+ "items": [ { "item": "ash", "count": [ 3, 10 ] } ]
+ }
+ },
+ {
+ "type": "terrain",
+ "id": "t_demon_web_wall",
+ "name": "webbing wall",
+ "description": "This wall seems to be made up of a combination of webbing, wood splinters, detritus, and some kind of dark-colored resin.",
+ "symbol": "LINE_OXOX",
+ "color": "dark_gray",
+ "move_cost": 0,
+ "coverage": 100,
+ "roof": "t_flat_roof",
+ "flags": [ "NOITEM", "SUPPORTS_ROOF", "WALL", "AUTO_WALL_SYMBOL", "MINEABLE", "BLOCK_WIND" ],
+ "connects_to": "WALL"
+ },
+ {
+ "type": "terrain",
+ "id": "t_dirt_barren",
+ "name": "barren dirt",
+ "description": "It's dirt. The ground here is infertile. Could also be dug out for construction projects.",
+ "symbol": ".",
+ "color": "brown",
+ "move_cost": 2,
+ "flags": [ "TRANSPARENT", "DIGGABLE", "FLAT" ],
+ "looks_like": "t_dirt",
+ "bash": { "sound": "thump", "ter_set": "t_null", "str_min": 50, "str_max": 100, "str_min_supported": 100, "bash_below": true }
+ }
+]
diff --git a/data/mods/Magical_Nights/tool_qualities.json b/data/mods/Magical_Nights/tool_qualities.json
new file mode 100644
index 000000000000..1c48775418cd
--- /dev/null
+++ b/data/mods/Magical_Nights/tool_qualities.json
@@ -0,0 +1,7 @@
+[
+ {
+ "type": "tool_quality",
+ "id": "MAGIC_MUTAGEN",
+ "name": "magic mutagen mixer"
+ }
+]
diff --git a/data/mods/Magical_Nights/traits/classes.json b/data/mods/Magical_Nights/traits/classes.json
new file mode 100644
index 000000000000..fb056eb14dab
--- /dev/null
+++ b/data/mods/Magical_Nights/traits/classes.json
@@ -0,0 +1,106 @@
+[
+ {
+ "type": "mutation",
+ "id": "MAGUS",
+ "name": "Magus",
+ "points": 0,
+ "description": "A tradition as old as magic, the Magus focuses on binding and shaping the energy of the universe to their will.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_magus", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "ANIMIST",
+ "name": { "str": "Animist" },
+ "points": 0,
+ "description": "The animist tradition is a relatively new school of magical thought, formed through combination of many older ways that focus on harmony and connection to the natural world. This does not mean that animists are passive: the natural world is a savage place.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_animist", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "KELVINIST",
+ "name": "Kelvinist",
+ "points": 0,
+ "description": "Disciples of the great Archwizard Lord Kelvin. Kelvinists focus their magic on manipulation and control of the temperature of their environment, leading to spectacularly powerful explosions or bone-chilling cold.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_kelvinist", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "STORMSHAPER",
+ "name": "Stormshaper",
+ "points": 0,
+ "description": "Stormshapers follow ancient arcane disciplines of meditation and harmony with the winds and tides that shape the planet. Through their deep connection to these forces, they can request powerful changes.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_stormshaper", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "TECHNOMANCER",
+ "name": "Technomancer",
+ "points": 0,
+ "description": "Technomancers are the new breed of modern magician, blending their arcane might with their advanced knowledge of the fundamental nature of the universe. They use technology to enhance their magic and vice versa.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_technomancer", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "EARTHSHAPER",
+ "name": "Earthshaper",
+ "points": 0,
+ "description": "Earthshapers have allowed their minds to sink deep within the stones and metals of the planet, and become one with its secrets. To a master Earthshaper, spells can be as permanent as the stones they are created from, and time is measured in geological eras.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_earthshaper", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "BIOMANCER",
+ "name": { "str": "Biomancer" },
+ "points": 0,
+ "description": "The Biomancer focuses on manipulating and even absorbing flesh; their own, and that of other living or dead things. Most other wizards find their powers gross and disturbing, but no one can question the potency of their abilities, and certainly not their adaptability to any situation.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_biomancer", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ },
+ {
+ "type": "mutation",
+ "id": "DRUID",
+ "name": "Druid",
+ "points": 0,
+ "description": "Druids follow a wild tradition of allegiance and rebirth within the world of nature, especially the cycle of death and rebirth that is the plant world. A powerful Druid is as much a part of that world as the human one.",
+ "starting_trait": false,
+ "purifiable": false,
+ "valid": false,
+ "spells_learned": [ [ "create_rune_druid", 1 ] ],
+ "mana_modifier": 500,
+ "mana_regen_multiplier": 1.2
+ }
+]
diff --git a/data/mods/Magical_Nights/traits/manatouched.json b/data/mods/Magical_Nights/traits/manatouched.json
new file mode 100644
index 000000000000..6aa12a7d9870
--- /dev/null
+++ b/data/mods/Magical_Nights/traits/manatouched.json
@@ -0,0 +1,194 @@
+[
+ {
+ "type": "mutation_category",
+ "id": "MANATOUCHED",
+ "name": "Manatouched",
+ "threshold_mut": "THRESH_MANA",
+ "mutagen_message": "Your ley lines surge with mana.",
+ "iv_message": "A crackle of power comes from within.",
+ "iv_sound": true,
+ "iv_sound_message": "a crackle",
+ "iv_sound_id": "crackle",
+ "iv_noise": 1,
+ "iv_additional_mutations": 0,
+ "memorial_message": "Ascended to the metaphysical."
+ },
+ {
+ "type": "mutation",
+ "id": "THRESH_MANA",
+ "name": { "str": "Manatouched" },
+ "points": 1,
+ "description": "Magic is in you. Magic is you.",
+ "mana_multiplier": 1.5,
+ "valid": false,
+ "purifiable": false,
+ "threshold": true
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_CRYST_MANA",
+ "name": { "str": "Mana Solidification" },
+ "points": 1,
+ "category": [ "MANATOUCHED" ],
+ "threshreq": [ "THRESH_MANA" ],
+ "description": "Your internal ley lines have become much easier for you to control, resulting in you being able to naturally create crystallized mana.",
+ "spells_learned": [ [ "manatouched_crystal", 5 ] ]
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SEEKER_BOLTS",
+ "name": { "str": "Seeker Bolts" },
+ "description": "Your hands glow with mana energy. You can fire seeker bolts from your fingertips.",
+ "points": 2,
+ "mana_modifier": 250,
+ "lumination": [ [ "hand_r", 8 ], [ "hand_l", 8 ] ],
+ "prereqs": [ "MANA_LUM" ],
+ "category": [ "MANATOUCHED" ],
+ "threshreq": [ "THRESH_MANA" ],
+ "spells_learned": [ [ "manatouched_seeker_bolts", 0 ] ]
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SUBTLE_SPELL",
+ "name": { "str": "Subtle Spell" },
+ "description": "You no longer need to move your arms to cast spells, due to your ley lines becoming untethered from your arms. Arm encumbrance no longer applies to spell failure chance.",
+ "points": 3,
+ "lumination": [ [ "arm_r", 4 ], [ "arm_l", 4 ] ],
+ "threshreq": [ "THRESH_MANA" ],
+ "prereqs": [ "MANA_LUM" ],
+ "category": [ "MANATOUCHED" ],
+ "flags": [ "SUBTLE_SPELL" ]
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SILENT_SPELL",
+ "name": { "str": "Silent Spell" },
+ "description": "You no longer need to use your voice to enforce your will upon the world. Mouth encumbrance no longer applies to spell failure chance.",
+ "points": 3,
+ "lumination": [ [ "mouth", 4 ] ],
+ "threshreq": [ "THRESH_MANA" ],
+ "prereqs": [ "MANA_LUM" ],
+ "category": [ "MANATOUCHED" ],
+ "flags": [ "SILENT_SPELL" ]
+ },
+ {
+ "id": "WEAK",
+ "type": "mutation",
+ "name": { "str": "Weak" },
+ "passive_mods": { "str_mod": -2 },
+ "points": -1,
+ "description": "Your body is unnaturally weak. -2 Strength.",
+ "category": [ "MANATOUCHED" ],
+ "cancels": [ "STR_UP_2", "STR_UP_3", "STR_UP_4", "STR_ALPHA" ]
+ },
+ {
+ "id": "STR_UP_2",
+ "type": "mutation",
+ "copy-from": "STR_UP_2",
+ "extend": { "cancels": [ "WEAK" ] }
+ },
+ {
+ "id": "STR_UP_3",
+ "type": "mutation",
+ "copy-from": "STR_UP_3",
+ "extend": { "cancels": [ "WEAK" ] }
+ },
+ {
+ "id": "STR_UP_4",
+ "type": "mutation",
+ "copy-from": "STR_UP_4",
+ "extend": { "cancels": [ "WEAK" ] }
+ },
+ {
+ "id": "STR_UP_ALPHA",
+ "type": "mutation",
+ "copy-from": "STR_UP_ALPHA",
+ "extend": { "cancels": [ "WEAK" ] }
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_LUM",
+ "name": { "str": "Mana Luminance" },
+ "points": 0,
+ "bodytemp_modifiers": [ 100, 100 ],
+ "description": "Your body discards unusable mana as light and heat, making you glow softly.",
+ "category": [ "MANATOUCHED" ],
+ "threshreq": [ "THRESH_MANA" ],
+ "lumination": [ [ "torso", 8 ] ]
+ },
+ {
+ "type": "mutation",
+ "id": "ALBINO",
+ "copy-from": "ALBINO",
+ "extend": { "category": [ "MANATOUCHED" ] }
+ },
+ {
+ "type": "mutation",
+ "id": "ROT2",
+ "copy-from": "ROT2",
+ "extend": { "category": [ "MANATOUCHED" ] }
+ },
+ {
+ "id": "sp_mana_siphon",
+ "type": "SPELL",
+ "name": "Mana Siphon",
+ "description": "This is the spell portion of the mana siphon series of mutations. If you have this spell you probably debugged it in.",
+ "valid_targets": [ "self" ],
+ "min_damage": 5,
+ "damage_increment": 5,
+ "max_damage": 180,
+ "max_level": 35,
+ "effect": "recover_energy",
+ "effect_str": "MANA",
+ "flags": [ "SILENT", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_VFX" ]
+ },
+ {
+ "type": "enchantment",
+ "id": "ench_mana_siphon_1",
+ "hit_you_effect": [ { "id": "sp_mana_siphon", "hit_self": true, "once_in": 5, "message": "You recover some mana." } ]
+ },
+ {
+ "type": "enchantment",
+ "id": "ench_mana_siphon_2",
+ "hit_you_effect": [ { "id": "sp_mana_siphon", "hit_self": true, "min_level": 3, "once_in": 5, "message": "You recover some mana." } ]
+ },
+ {
+ "type": "enchantment",
+ "id": "ench_mana_siphon_3",
+ "hit_you_effect": [ { "id": "sp_mana_siphon", "hit_self": true, "min_level": 6, "once_in": 5, "message": "You recover some mana." } ]
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SIPHON_1",
+ "name": { "str": "Mana Siphon" },
+ "points": 1,
+ "description": "Violence excites your ley lines. Whenever you hit an enemy in melee, you have a chance of regaining some mana.",
+ "category": [ "MANATOUCHED" ],
+ "threshreq": [ "THRESH_MANA" ],
+ "changes_to": [ "MANA_SIPHON_2" ],
+ "enchantments": [ "ench_mana_siphon_1" ]
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SIPHON_2",
+ "name": { "str": "Mana Drain" },
+ "points": 2,
+ "description": "Violence excites your ley lines. Whenever you hit an enemy in melee, you have a chance of regaining some mana.",
+ "category": [ "MANATOUCHED" ],
+ "threshreq": [ "THRESH_MANA" ],
+ "prereqs": [ "MANA_SIPHON_1" ],
+ "changes_to": [ "MANA_SIPHON_3" ],
+ "enchantments": [ "ench_mana_siphon_2" ]
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SIPHON_3",
+ "name": { "str": "Mana Vortex" },
+ "points": 3,
+ "description": "Violence excites your ley lines. Whenever you hit an enemy in melee, you have a chance of regaining some mana.",
+ "category": [ "MANATOUCHED" ],
+ "threshreq": [ "THRESH_MANA" ],
+ "prereqs": [ "MANA_SIPHON_2" ],
+ "enchantments": [ "ench_mana_siphon_3" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/traits/mutation.json b/data/mods/Magical_Nights/traits/mutation.json
new file mode 100755
index 000000000000..db0a23f4449c
--- /dev/null
+++ b/data/mods/Magical_Nights/traits/mutation.json
@@ -0,0 +1,270 @@
+[
+ {
+ "type": "mutation_type",
+ "id": "MANA_ADD"
+ },
+ {
+ "type": "mutation_type",
+ "id": "MANA_MULT"
+ },
+ {
+ "type": "mutation_type",
+ "id": "MANA_REGEN"
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_ADD1",
+ "name": "Lesser Mana Efficiency",
+ "points": 1,
+ "description": "You are able to store a little more mana in your body than usual.",
+ "cancels": [ "MANA_SUB1", "MANA_SUB2", "MANA_SUB3" ],
+ "changes_to": [ "MANA_ADD2" ],
+ "types": [ "MANA_ADD" ],
+ "starting_trait": true,
+ "category": [ "MANATOUCHED" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_modifier": 500
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_ADD2",
+ "name": "Mana Efficiency",
+ "points": 2,
+ "description": "You are able to store more mana in your body than usual.",
+ "cancels": [ "MANA_SUB1", "MANA_SUB2", "MANA_SUB3" ],
+ "changes_to": [ "MANA_ADD3" ],
+ "types": [ "MANA_ADD" ],
+ "starting_trait": true,
+ "category": [ "MANATOUCHED" ],
+ "prereqs": [ "MANA_ADD1" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_modifier": 1000
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_ADD3",
+ "name": "Greater Mana Efficiency",
+ "points": 4,
+ "description": "You are able to store a lot more mana in your body than usual.",
+ "cancels": [ "MANA_SUB1", "MANA_SUB2", "MANA_SUB3" ],
+ "types": [ "MANA_ADD" ],
+ "category": [ "MANATOUCHED" ],
+ "prereqs": [ "MANA_ADD2" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_modifier": 2000
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SUB1",
+ "name": "Lesser Mana Inefficiency",
+ "points": -1,
+ "description": "You are able to store a little less mana in your body than usual.",
+ "cancels": [ "MANA_ADD1", "MANA_ADD2", "MANA_ADD3" ],
+ "changes_to": [ "MANA_SUB2" ],
+ "types": [ "MANA_ADD" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_modifier": -500
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SUB2",
+ "name": "Mana Inefficiency",
+ "points": -2,
+ "description": "You are able to store less mana in your body than usual.",
+ "cancels": [ "MANA_ADD1", "MANA_ADD2", "MANA_ADD3" ],
+ "changes_to": [ "MANA_SUB3" ],
+ "types": [ "MANA_ADD" ],
+ "prereqs": [ "MANA_SUB1" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_modifier": -1000
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_SUB3",
+ "name": "Greater Mana Inefficiency",
+ "points": -3,
+ "description": "You are able to store a lot less mana in your body than usual.",
+ "cancels": [ "MANA_ADD1", "MANA_ADD2", "MANA_ADD3" ],
+ "types": [ "MANA_ADD" ],
+ "prereqs": [ "MANA_SUB2" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_modifier": -2000
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_REGEN1",
+ "name": "Lesser Mana Regeneration",
+ "points": 1,
+ "description": "Your natural mana regeneration is slightly faster than normal.",
+ "cancels": [ "BAD_MANA_REGEN1", "BAD_MANA_REGEN2", "BAD_MANA_REGEN3" ],
+ "changes_to": [ "MANA_REGEN2" ],
+ "types": [ "MANA_REGEN" ],
+ "category": [ "FISH", "ELFA", "ALPHA", "PLANT", "CEPHALOPOD", "MANATOUCHED" ],
+ "starting_trait": true,
+ "flags": [ "NON_THRESH" ],
+ "mana_regen_multiplier": 1.1
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_REGEN2",
+ "name": "Mana Regeneration",
+ "points": 3,
+ "description": "Your natural mana regeneration is faster than normal.",
+ "prereqs": [ "MANA_REGEN1" ],
+ "cancels": [ "BAD_MANA_REGEN1", "BAD_MANA_REGEN2", "BAD_MANA_REGEN3" ],
+ "changes_to": [ "MANA_REGEN3" ],
+ "types": [ "MANA_REGEN" ],
+ "category": [ "FISH", "ELFA", "PLANT", "MANATOUCHED" ],
+ "starting_trait": true,
+ "flags": [ "NON_THRESH" ],
+ "mana_regen_multiplier": 1.25
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_REGEN3",
+ "name": "Greater Mana Regeneration",
+ "points": 8,
+ "description": "Your natural mana regeneration is much faster than normal.",
+ "prereqs": [ "MANA_REGEN2" ],
+ "cancels": [ "BAD_MANA_REGEN1", "BAD_MANA_REGEN2", "BAD_MANA_REGEN3" ],
+ "types": [ "MANA_REGEN" ],
+ "threshreq": [ "THRESH_PLANT", "THRESH_MANA" ],
+ "category": [ "PLANT", "MANATOUCHED" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_regen_multiplier": 1.5
+ },
+ {
+ "type": "mutation",
+ "id": "BAD_MANA_REGEN1",
+ "name": "Poor Mana Regeneration",
+ "points": -1,
+ "description": "Your natural mana regeneration is slightly slower than normal.",
+ "cancels": [ "MANA_REGEN1", "MANA_REGEN2", "MANA_REGEN3" ],
+ "changes_to": [ "BAD_MANA_REGEN2" ],
+ "types": [ "MANA_REGEN" ],
+ "category": [ "LIZARD", "BEAST", "LUPINE", "URSINE", "CATTLE", "SLIME", "MEDICAL", "CHIMERA" ],
+ "starting_trait": true,
+ "flags": [ "NON_THRESH" ],
+ "mana_regen_multiplier": 0.9
+ },
+ {
+ "type": "mutation",
+ "id": "BAD_MANA_REGEN2",
+ "name": "Very Poor Mana Regeneration",
+ "points": -3,
+ "description": "Your natural mana regeneration is slower than normal.",
+ "prereqs": [ "BAD_MANA_REGEN1" ],
+ "cancels": [ "MANA_REGEN1", "MANA_REGEN2", "MANA_REGEN3" ],
+ "changes_to": [ "BAD_MANA_REGEN3" ],
+ "types": [ "MANA_REGEN" ],
+ "category": [ "BEAST", "CATTLE", "SLIME", "MEDICAL", "CHIMERA" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_regen_multiplier": 0.75
+ },
+ {
+ "type": "mutation",
+ "id": "BAD_MANA_REGEN3",
+ "name": { "str": "Abysmal Mana Regeneration" },
+ "points": -6,
+ "description": "Your natural mana regeneration is much slower than normal.",
+ "prereqs": [ "BAD_MANA_REGEN2" ],
+ "cancels": [ "MANA_REGEN1", "MANA_REGEN2", "MANA_REGEN3" ],
+ "types": [ "MANA_REGEN" ],
+ "category": [ "BEAST", "MEDICAL" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_regen_multiplier": 0.5
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_MULT1",
+ "name": "Lesser Mana Sensitivity",
+ "points": 1,
+ "description": "You can sense the mana in your body slightly better than normal, allowing you to tap into more of your reserves.",
+ "cancels": [ "BAD_MANA_MULT1", "BAD_MANA_MULT2", "BAD_MANA_MULT3" ],
+ "changes_to": [ "MANA_MULT2" ],
+ "types": [ "MANA_MULT" ],
+ "category": [ "BIRD", "LIZARD", "SLIME", "FELINE", "CATTLE", "URSINE", "PLANT", "CEPHALOPOD", "ALPHA", "ELFA", "MANATOUCHED" ],
+ "starting_trait": true,
+ "flags": [ "NON_THRESH" ],
+ "mana_multiplier": 1.25
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_MULT2",
+ "name": "Mana Sensitivity",
+ "points": 3,
+ "description": "You can sense the mana in your body better than normal, allowing you to tap into more of your reserves.",
+ "cancels": [ "BAD_MANA_MULT1", "BAD_MANA_MULT2", "BAD_MANA_MULT3" ],
+ "changes_to": [ "MANA_MULT3" ],
+ "types": [ "MANA_MULT" ],
+ "category": [ "BIRD", "SLIME", "CATTLE", "PLANT", "CEPHALOPOD", "ELFA", "MANATOUCHED" ],
+ "starting_trait": true,
+ "prereqs": [ "MANA_MULT1" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_multiplier": 1.9
+ },
+ {
+ "type": "mutation",
+ "id": "MANA_MULT3",
+ "name": "Greater Mana Sensitivity",
+ "points": 8,
+ "description": "You can sense the mana in your body much better than normal, allowing you to tap into more of your reserves.",
+ "cancels": [ "BAD_MANA_MULT1", "BAD_MANA_MULT2", "BAD_MANA_MULT3" ],
+ "types": [ "MANA_MULT" ],
+ "category": [ "SLIME", "CATTLE", "CEPHALOPOD", "MANATOUCHED" ],
+ "prereqs": [ "MANA_MULT2" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_multiplier": 2.5
+ },
+ {
+ "type": "mutation",
+ "id": "BAD_MANA_MULT1",
+ "name": "Poor Mana Sensitivity",
+ "points": -1,
+ "description": "You have a hard time sensing the mana in your body, making less of your reserves available for use.",
+ "cancels": [ "MANA_MULT1", "MANA_MULT2", "MANA_MULT3" ],
+ "changes_to": [ "BAD_MANA_MULT2" ],
+ "types": [ "MANA_MULT" ],
+ "category": [ "BEAST", "FISH", "LUPINE", "INSECT", "TROGLOBITE", "SPIDER", "RAT", "MOUSE", "MEDICAL", "CHIMERA", "RAPTOR" ],
+ "starting_trait": true,
+ "flags": [ "NON_THRESH" ],
+ "mana_multiplier": 0.85
+ },
+ {
+ "type": "mutation",
+ "id": "BAD_MANA_MULT2",
+ "name": "Very Poor Mana Sensitivity",
+ "points": -3,
+ "description": "You have a hard time sensing the mana in your body, making less of your reserves available for use.",
+ "cancels": [ "MANA_MULT1", "MANA_MULT2", "MANA_MULT3" ],
+ "changes_to": [ "BAD_MANA_MULT3" ],
+ "types": [ "MANA_MULT" ],
+ "category": [ "BEAST", "INSECT", "TROGLOBITE", "MOUSE", "MEDICAL", "CHIMERA", "RAPTOR" ],
+ "prereqs": [ "BAD_MANA_MULT1" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_multiplier": 0.65
+ },
+ {
+ "type": "mutation",
+ "id": "BAD_MANA_MULT3",
+ "name": { "str": "Abysmal Mana Sensitivity" },
+ "points": -6,
+ "description": "You have a hard time sensing the mana in your body, making less of your reserves available for use.",
+ "cancels": [ "MANA_MULT1", "MANA_MULT2", "MANA_MULT3" ],
+ "types": [ "MANA_MULT" ],
+ "category": [ "INSECT", "MEDICAL", "CHIMERA" ],
+ "prereqs": [ "BAD_MANA_MULT2" ],
+ "flags": [ "NON_THRESH" ],
+ "mana_multiplier": 0.35
+ },
+ {
+ "type": "mutation",
+ "id": "DEBUG_spell_mutation",
+ "name": "Debug Spell Mutation",
+ "points": 20,
+ "valid": false,
+ "description": "Gives all of the debug spells at max level.",
+ "debug": true,
+ "spells_learned": [ [ "example_template", 10 ], [ "debug_stamina", 0 ], [ "debug_hp", 0 ], [ "debug_bionic", 0 ], [ "debug_effect", 0 ] ]
+ }
+]
diff --git a/data/mods/Magical_Nights/traps.json b/data/mods/Magical_Nights/traps.json
new file mode 100644
index 000000000000..278152784cf3
--- /dev/null
+++ b/data/mods/Magical_Nights/traps.json
@@ -0,0 +1,15 @@
+[
+ {
+ "type": "trap",
+ "id": "tr_bear",
+ "name": "bear trap",
+ "color": "blue",
+ "symbol": "^",
+ "action": "spell",
+ "visibility": 2,
+ "trap_radius": 2,
+ "avoidance": 99,
+ "difficulty": 99,
+ "spell_data": { "id": "bear_trap" }
+ }
+]
diff --git a/data/mods/Magical_Nights/vehicleparts/frames.json b/data/mods/Magical_Nights/vehicleparts/frames.json
new file mode 100644
index 000000000000..5cc54ca28bb7
--- /dev/null
+++ b/data/mods/Magical_Nights/vehicleparts/frames.json
@@ -0,0 +1,99 @@
+[
+ {
+ "id": "folding_orichalcum_frame",
+ "type": "vehicle_part",
+ "name": "foldable orichalcum frame",
+ "item": "fold_orichalcum_frame",
+ "location": "structure",
+ "symbol": "h",
+ "durability": 250,
+ "description": "A light metal framework, designed to fold. Other vehicle components can be mounted on it. If all the frames and components of a vehicle are foldable, the vehicle can be folding into a small package and picked up as a normal item.",
+ "folded_volume": "5 L",
+ "breaks_into": [ { "item": "orichalcum_lump", "count": [ 0, 2 ] } ],
+ "requirements": {
+ "install": { "skills": [ [ "mechanics", 2 ], [ "spellcraft", 1 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] },
+ "removal": { "skills": [ [ "mechanics", 2 ], [ "spellcraft", 1 ] ], "time": "30 m", "using": [ [ "vehicle_weld_removal", 1 ] ] },
+ "repair": { "skills": [ [ "mechanics", 3 ], [ "spellcraft", 1 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }
+ },
+ "flags": [ "INITIAL_PART", "MOUNTABLE", "FOLDABLE" ],
+ "damage_reduction": { "all": 12 }
+ },
+ {
+ "abstract": "orichalcum_frame",
+ "type": "vehicle_part",
+ "name": "orichalcum frame",
+ "item": "orichalcum_frame",
+ "location": "structure",
+ "durability": 2000,
+ "description": "An expensive magical metal framework. Other vehicle components can be mounted on it, and it can be attached to other frames to increase the vehicle's size.",
+ "breaks_into": "orichalcum_frame_break",
+ "requirements": {
+ "install": { "skills": [ [ "mechanics", 2 ] ], "time": "20 m", "using": [ [ "welding_standard", 10 ] ] },
+ "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "10 m", "using": "vehicle_weld_removal" },
+ "repair": { "skills": [ [ "mechanics", 2 ] ], "time": "5 m", "using": [ [ "welding_standard", 5 ] ] }
+ },
+ "flags": [ "MOUNTABLE" ],
+ "damage_reduction": { "all": 78 }
+ },
+ {
+ "id": "frame_orichalcum_cover",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "^"
+ },
+ {
+ "id": "frame_orichalcum_cross",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "c",
+ "extend": { "flags": [ "INITIAL_PART" ] }
+ },
+ {
+ "id": "frame_orichalcum_horizontal",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "h"
+ },
+ {
+ "id": "frame_orichalcum_horizontal_2",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "="
+ },
+ {
+ "id": "frame_orichalcum_ne",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "u"
+ },
+ {
+ "id": "frame_orichalcum_nw",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "y"
+ },
+ {
+ "id": "frame_orichalcum_se",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "n"
+ },
+ {
+ "id": "frame_orichalcum_sw",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "b"
+ },
+ {
+ "id": "frame_orichalcum_vertical",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "j"
+ },
+ {
+ "id": "frame_orichalcum_vertical_2",
+ "copy-from": "orichalcum_frame",
+ "type": "vehicle_part",
+ "symbol": "H"
+ }
+]
diff --git a/data/mods/Magical_Nights/vehicleparts/vehicle_parts.json b/data/mods/Magical_Nights/vehicleparts/vehicle_parts.json
new file mode 100644
index 000000000000..fba26970bd98
--- /dev/null
+++ b/data/mods/Magical_Nights/vehicleparts/vehicle_parts.json
@@ -0,0 +1,8 @@
+[
+ {
+ "type": "item_group",
+ "id": "orichalcum_frame_break",
+ "subtype": "collection",
+ "entries": [ { "item": "orichalcum_lump", "count": [ 4, 6 ] }, { "item": "orichalcum_sliver", "count": [ 4, 6 ] } ]
+ }
+]
diff --git a/data/mods/Magical_Nights/vehicles/summoned_vehicles.json b/data/mods/Magical_Nights/vehicles/summoned_vehicles.json
new file mode 100644
index 000000000000..6c2a1c900358
--- /dev/null
+++ b/data/mods/Magical_Nights/vehicles/summoned_vehicles.json
@@ -0,0 +1,80 @@
+[
+ {
+ "id": "floating_disk",
+ "type": "vehicle",
+ "name": "Floating disk",
+ "blueprint": [ "o" ],
+ "parts": [ { "x": 0, "y": 0, "parts": [ "mana_frame" ] } ]
+ },
+ {
+ "id": "mana_wheel",
+ "category": "veh_parts",
+ "type": "WHEEL",
+ "name": "mana wheel",
+ "description": "A column of mana energy that enables a floating disk to move.",
+ "weight": "500 g",
+ "volume": "500 ml",
+ "price": "1 cent",
+ "bashing": 8,
+ "to_hit": -4,
+ "material": [ "steel" ],
+ "symbol": "]",
+ "color": "light_gray",
+ "diameter": 20,
+ "width": 10
+ },
+ {
+ "type": "vehicle_part",
+ "id": "mana_frame",
+ "name": "mana frame",
+ "symbol": "O",
+ "color": "magenta",
+ "broken_symbol": "M",
+ "broken_color": "red",
+ "damage_modifier": 10,
+ "noise_factor": 1,
+ "fuel_type": "mana",
+ "durability": 20,
+ "item": "mana_wheel",
+ "m2c": 90,
+ "rolling_resistance": 0.45,
+ "wheel_type": "standard",
+ "contact_area": 20,
+ "description": "A shape of pure mana that can float and carry items.",
+ "size": "37500 ml",
+ "power": 200,
+ "location": "structure",
+ "//": "This should not be interactable nor visible as a vehicle part, its part of a summoned magic 'vehicle'",
+ "requirements": {
+ "install": { "skills": [ [ "mechanics", 20 ], [ "spellcraft", 1 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] },
+ "removal": { "skills": [ [ "mechanics", 20 ], [ "spellcraft", 1 ] ], "time": "30 m", "using": [ [ "vehicle_weld_removal", 1 ] ] },
+ "repair": { "skills": [ [ "mechanics", 20 ], [ "spellcraft", 1 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }
+ },
+ "flags": [ "INITIAL_PART", "ENGINE", "STABLE", "E_STARTS_INSTANTLY", "STEERABLE", "WHEEL", "OBSTACLE", "CARGO", "MAGIC_FOLLOW" ],
+ "damage_reduction": { "all": 12 }
+ },
+ {
+ "id": "mana",
+ "name": "mana energy",
+ "default": "mana",
+ "type": "ammunition_type"
+ },
+ {
+ "id": "mana",
+ "type": "AMMO",
+ "category": "chems",
+ "name": "mana core power",
+ "description": "Seeing this is a bug.",
+ "weight": "10 g",
+ "volume": "10 ml",
+ "bashing": 1,
+ "phase": "solid",
+ "material": "flesh",
+ "flags": [ "PSEUDO", "PERPETUAL" ],
+ "fuel": { "energy": 500 },
+ "symbol": "?",
+ "color": "magenta",
+ "count": 1,
+ "ammo_type": "mana"
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/black_dragon_lair.json b/data/mods/Magical_Nights/worldgen/black_dragon_lair.json
new file mode 100644
index 000000000000..1eb1874ffc0a
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/black_dragon_lair.json
@@ -0,0 +1,491 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "//": "ground entrance",
+ "om_terrain": [
+ [ "black_dragon_lair_z-0_NW", "black_dragon_lair_z-0_NE" ],
+ [ "black_dragon_lair_z-0_SW", "black_dragon_lair_z-0_SE" ]
+ ],
+ "object": {
+ "fill_ter": "t_water_sh",
+ "predecessor_mapgen": "forest_water",
+ "rows": [
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "........................~~......................",
+ "......................~1~~......................",
+ "....................~~a~~a2~....................",
+ ".............1......||| |||....................",
+ "..............~~~..~| |~~~.~~1~............",
+ "............~~i~i~.~| ____ |~~~~~~~.~~..........",
+ "..............~~~..e| _>>_ |e~g~~~g~~i~.........",
+ "...................~ _>>_ ~~g~f~g~~~~.........",
+ "...................e| ____ |e~g~~~g~............",
+ ".................1~~| |~~~~~.~~............",
+ "...............~~~~~||| |||~.~i~~..............",
+ "..............~~i~~~~~a~~a~~...~~...............",
+ "...............~~.~~.~~~~1~.....................",
+ ".......................~~.......................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................",
+ "................................................"
+ ],
+ "terrain": {
+ "~": "t_sand",
+ "f": "t_sand",
+ "_": "t_floor_blue",
+ " ": "t_floor_green",
+ "|": "t_rock_smooth",
+ "e": "t_rock_blue",
+ "a": "t_rock_green",
+ ">": "t_slope_down",
+ "<": "t_slope_up",
+ "X": "t_rock",
+ "g": "t_trunk",
+ "i": "t_improvised_shelter",
+ ".": [
+ [ "t_grass_tall", 5 ],
+ [ "t_grass_dead", 4 ],
+ [ "t_stump", 3 ],
+ [ "t_tree_dead", 3 ],
+ [ "t_trunk", 3 ],
+ [ "t_tree_deadpine", 2 ],
+ [ "t_tree_hickory_dead", 2 ],
+ [ "t_grass_long", 5 ],
+ [ "t_water_sh", 25 ],
+ [ "t_swater_sh", 25 ],
+ [ "t_water_dp", 50 ],
+ [ "t_moss", 10 ],
+ [ "t_mud", 10 ],
+ [ "t_underbrush", 3 ],
+ [ "t_dirt", 2 ],
+ "t_shrub"
+ ]
+ },
+ "furniture": {
+ "d": "f_boulder_small",
+ "c": "f_boulder_medium",
+ "b": "f_boulder_large",
+ "f": "f_firering",
+ "1": "f_fog",
+ "2": "f_swamp_gas"
+ },
+ "place_monsters": [
+ { "monster": "GROUP_LIZARDFOLK", "x": [ 4, 19 ], "y": [ 24, 44 ], "density": 0.1, "repeat": [ 1, 3 ] },
+ { "monster": "GROUP_LIZARDFOLK", "x": [ 24, 44 ], "y": [ 24, 44 ], "density": 0.1, "repeat": [ 1, 3 ] },
+ { "monster": "GROUP_LIZARDFOLK", "x": [ 24, 44 ], "y": [ 4, 23 ], "density": 0.1, "repeat": [ 1, 3 ] }
+ ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "//": "z -1, open area entrance",
+ "om_terrain": [
+ [ "black_dragon_lair_z-1_NW", "black_dragon_lair_z-1_NE" ],
+ [ "black_dragon_lair_z-1_SW", "black_dragon_lair_z-1_SE" ]
+ ],
+ "object": {
+ "fill_ter": "t_water_sh",
+ "rows": [
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXX.......XXXX................XXXXXX.......XXXX",
+ "XX..........XX..................XXXX..........XX",
+ "XX....1.....XX.................XXXX.......1...XX",
+ "XXXX.........XX........>>.......XX............XX",
+ "XXXXXX........XX.......>>......XX.......>>....XX",
+ "XXXX..........................XXXX......>>....XX",
+ "XX.............................XX.............XX",
+ "XX......>>.....................XX.............XX",
+ "XX......>>.....................XX.............XX",
+ "XXXX...........................XX.............XX",
+ "XXX.XXXX.............1..........XX..........XXXX",
+ "XXX.XXXXXX.....................XXXX...1...XXXXXX",
+ "XXX..XXXXXXX....................XXXX.....XXXXXXX",
+ "XXX..XXXXXX........................XX.....XXXXXX",
+ "XXXX..XXXX...................1......XX.....XXXXX",
+ "XXXXX.XX.............................XX.....XXXX",
+ "XXXX..........................................XX",
+ "XX............................................XX",
+ "XX........................................>>..XX",
+ "XX........................................>>..XX",
+ "XX..........1......... ....................XX",
+ "XX.................. << ...........1......XX",
+ "XX.................. << ..................XX",
+ "XX.................... ....................XX",
+ "XXXX..........................................XX",
+ "XXXXXX........................................XX",
+ "XXXXXX........................................XX",
+ "XXXX.......1.................................XXX",
+ "XX........................................XXXXXX",
+ "XX..................1....................XXXXXXX",
+ "XX........>>........................XXX.XXX1XXXX",
+ "XX........>>........................XXX.XX...XXX",
+ "XX.................................XXXX......XXX",
+ "XX...............................XXXXXXXXX...XXX",
+ "XXXX............2................XXXXXXXXXX.XXXX",
+ "XXXXXX.........................XXXXXXXXXXXX.XXXX",
+ "XXXXXXXXX...............X......1......XXXXX..XXX",
+ "XXXXXXXXXX.............XX...............XXXX.XXX",
+ "XXXXXXXXXXX.1....XXXXXXXX........>>......XXXXXXX",
+ "XXXXXXX.............XXXXXX.......>>.........XXXX",
+ "XXXXXXX.....2........XXXXX...................XXX",
+ "XXXXXXX............XXXXXXXXX..2..............XXX",
+ "XXXXXXXXX............XXXXXX............XXX...XXX",
+ "XXXXXXXXXX..........XXXXXXXX.....XXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ ],
+ "place_monsters": [
+ { "monster": "GROUP_BLACKDRAGON_LAIR_1", "x": [ 4, 23 ], "y": [ 4, 23 ], "density": 0.1, "repeat": [ 4, 10 ] },
+ {
+ "monster": "GROUP_BLACKDRAGON_LAIR_1",
+ "x": [ 4, 19 ],
+ "y": [ 24, 44 ],
+ "density": 0.1,
+ "repeat": [ 4, 10 ]
+ },
+ {
+ "monster": "GROUP_BLACKDRAGON_LAIR_1",
+ "x": [ 24, 44 ],
+ "y": [ 24, 44 ],
+ "density": 0.1,
+ "repeat": [ 4, 10 ]
+ },
+ {
+ "monster": "GROUP_BLACKDRAGON_LAIR_1",
+ "x": [ 24, 44 ],
+ "y": [ 4, 23 ],
+ "density": 0.1,
+ "repeat": [ 4, 10 ]
+ },
+ {
+ "monster": "GROUP_BLACKDRAGON_LAIR_1",
+ "x": [ 10, 23 ],
+ "y": [ 10, 23 ],
+ "density": 0.1,
+ "repeat": [ 4, 10 ]
+ }
+ ],
+ "terrain": {
+ ">": "t_slope_down",
+ "<": "t_slope_up",
+ "X": "t_rock",
+ " ": "t_sand",
+ "~": "t_water_dp_underground",
+ ".": [
+ [ "t_grass_tall", 5 ],
+ [ "t_stump", 1 ],
+ [ "t_pit_shallow", 2 ],
+ [ "t_pit_corpsed", 2 ],
+ [ "t_pit_spiked", 2 ],
+ [ "t_pit_glass", 2 ],
+ [ "t_grass_long", 5 ],
+ [ "t_water_murky", 25 ],
+ [ "t_water_sh_underground", 25 ],
+ [ "t_swater_sh_underground", 25 ],
+ [ "t_sand_underground", 3 ],
+ [ "t_water_dp_underground", 40 ],
+ [ "t_moss_underground", 10 ],
+ [ "t_underbrush", 3 ],
+ [ "t_dirt_underground", 2 ],
+ [ "t_mud_underground", 2 ],
+ "t_shrub"
+ ]
+ },
+ "furniture": { "a": "f_boulder_small", "c": "f_boulder_medium", "b": "f_boulder_large", "1": "f_fog", "2": "f_swamp_gas" },
+ "items": { ".": [ { "item": "lair_black_dragon", "chance": 5 } ] }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "//": "dragon nests, open to cavern below",
+ "om_terrain": [
+ [ "black_dragon_lair_z-2_NW", "black_dragon_lair_z-2_NE" ],
+ [ "black_dragon_lair_z-2_SW", "black_dragon_lair_z-2_SE" ]
+ ],
+ "object": {
+ "fill_ter": "t_sand",
+ "rows": [
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXX...XX XXXXXXXXXX XXX..XXXXXXXXXX",
+ "XXXXXXXXXXX... XXXXXXX .....XXXXXXXXX",
+ "XXXXX..XXXX...XX XXXXXXX .......XXXXXXXXX",
+ "XXXX....XXXXXXXXXX XXXXXXXXXX X.......XXXXXXXXX",
+ "XXXX....XXXXXXXXXXXXXXX>>XXX XX..XXXXXXXXXXXXX",
+ "XXXX.............XXXXXX<>XXXXXX",
+ "XX.....XXXXXX......XXXXXXXXXX XX..XXXXXX<>XXXXXX....XX.....XXX.....XXXXXXXXXXXXX",
+ "XXX XXX<>XXXX",
+ "XXXXXXX....XXXXX....XXXXXX XX..XXX..XXXXX<>XX .........................XXXXXX",
+ "XXX..XXXXX<>XXXXX....XXXX",
+ "XX.......................XXX XX<": "t_slope_down", "<": "t_slope_up" },
+ "furniture": { "a": "f_boulder_small", "c": "f_boulder_medium", "b": "f_boulder_large" },
+ "items": { " ": [ { "item": "lair_loot_generic", "chance": 10, "repeat": [ 2, 4 ] } ] }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "//": "z -2, reserved for loot/habitat rooms, should be vaulted x2 with dragon entrances from above?",
+ "om_terrain": [
+ [ "black_dragon_lair_z-3_NW", "black_dragon_lair_z-3_NE" ],
+ [ "black_dragon_lair_z-3_SW", "black_dragon_lair_z-3_SE" ]
+ ],
+ "object": {
+ "fill_ter": "t_water_sh",
+ "rows": [
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXX > XXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXX",
+ "XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX.....XXXXXXXXX",
+ "XXXXX..XXXX XXXXXXXXXXXXXXXXXX.......XXXXXXXXX",
+ "XXXX....XXXXXXXXXXXXXXXXXXXXXXXX1.....XXXXXXXXXX",
+ "XXXX.1...XXXXXXXXXXXXXX>>XXXXXXXX..XXXXXXXXXXXXX",
+ "XXXX.............XXXXXX<>XXXXXX",
+ "XX.....XXXXXX......XXXXXXXXXXXXX..XXXXXX<>XXXXXX....XX.....XXX.....XXXXXXXXXXXXX",
+ "XXXXXXXX<>...........XXXXX",
+ "XXXXXXXXXXXXXXXXX...........................XXXX",
+ "XXX > XXXXXXXXXXX............................XXX",
+ "XXX XXXXXXXXXX.........................XXXXXXX",
+ "XXX XXXXXXXXX.........1...............XXXXXXXX",
+ "XXXXXXXXXXXXXX.........................XXXXXXXXX",
+ "XXXXXXXXXXXXXXX....XXXXXXXXX..XXXX....XXXX>>XXXX",
+ "XXXXXXX....XXXXX....XXXXXXXXXX..XXX..XXXXX<>XXXXX.........................XXXXXX",
+ "XXX..XXXXX<>.................XXXX",
+ "XXXXX.XXXXXXXXXXXX...........................XXX",
+ "XXXXX.XXXXXXXXXXXXX.............XXXXX.........XX",
+ "XXXX...XXXXXXXXXXXXXXXX......XXXXXXXXXXXX...XXXX",
+ "XX.......XXXXXXXXXXXX.....XXXXXXXXXXXXXX...XXXXX",
+ "XX....2...XXXX....XXXXXX....XXXXXXXXXXXXX...XXXX",
+ "XXX........................XXXXXX>>XXXXX....XXXX",
+ "XX.......................XXXXXXXX< XX",
+ "XXXXX....XXXXXXXXX....XXXX.........XXXXXXXX XX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....XXXXXXXXXX XX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ ],
+ "place_monsters": [
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 5, "y": 5, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 35, "y": 3, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 20, "y": 14, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 37, "y": 14, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 23, "y": 17, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 20, "y": 32, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 39, "y": 33, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 41, "y": 40, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 5, "y": 40, "density": 0.1, "repeat": [ 4, 10 ] },
+ { "monster": "GROUP_BLACKDRAGON_LAIR_2", "x": 20, "y": 43, "density": 0.1, "repeat": [ 4, 10 ] }
+ ],
+ "terrain": {
+ ">": "t_slope_down",
+ "<": "t_slope_up",
+ "X": "t_rock",
+ " ": "t_sand",
+ "~": "t_water_cube",
+ ".": [
+ [ "t_grass_tall", 5 ],
+ [ "t_stump", 1 ],
+ [ "t_pit_shallow", 2 ],
+ [ "t_pit_corpsed", 2 ],
+ [ "t_pit_spiked", 2 ],
+ [ "t_pit_glass", 2 ],
+ [ "t_grass_long", 5 ],
+ [ "t_water_sh_underground", 25 ],
+ [ "t_swater_sh_underground", 25 ],
+ [ "t_sand_underground", 3 ],
+ [ "t_water_dp_underground", 40 ],
+ [ "t_moss_underground", 10 ],
+ [ "t_underbrush", 3 ],
+ [ "t_dirt_underground", 2 ],
+ "t_shrub"
+ ]
+ },
+ "furniture": { "a": "f_boulder_small", "c": "f_boulder_medium", "b": "f_boulder_large", "1": "f_fog", "2": "f_swamp_gas" },
+ "place_items": [ { "item": "boss_treasure_items", "x": 44, "y": 46, "chance": 100 } ],
+ "items": {
+ ".": [ { "item": "lair_black_dragon", "chance": 15, "repeat": [ 0, 2 ] } ],
+ " ": [
+ { "item": "lair_black_dragon_treasure", "chance": 10, "repeat": [ 0, 2 ] },
+ { "item": "enchanted_small_items", "chance": 10, "repeat": [ 0, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 10, "repeat": [ 0, 2 ] },
+ { "item": "enchanted_melee_weapons_plus2", "chance": 5 },
+ { "item": "spellbook_loot_1", "chance": 50, "repeat": [ 1, 2 ] },
+ { "item": "spellbook_loot_2", "chance": 20, "repeat": [ 1, 2 ] }
+ ]
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "//": "z, -3 underwater passageways up to loot rooms",
+ "om_terrain": [
+ [ "black_dragon_lair_z-4_NW", "black_dragon_lair_z-4_NE" ],
+ [ "black_dragon_lair_z-4_SW", "black_dragon_lair_z-4_SE" ]
+ ],
+ "object": {
+ "fill_ter": "t_water_dp_underground",
+ "rows": [
+ "XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXX < XXXXXXXXXXXXXXXXX XXXXXXX",
+ "XXXX XXXXXXXXXXXXXX XXXXXX",
+ "XXXX XXXXXXX XXXXXXXXXXXXX XXXXX XXXXXX",
+ "XXX XXXXXXXXX XXXXXXXXXXXXXX XXXXXXX XXXXXX",
+ "XXX XXXXXXXXX XXXXXX << XXXXXXXX XXXXX",
+ "X XXXXX XXX XXXXXX << XXXXXXX << XXXX",
+ "X XXXXX XXX XXXXXXXXXXXXXX XX XXX << XXXX",
+ "X XXXX XX XXX XXXXXXXXX XX XXXXX XXX",
+ "X XXX << XX XXX XXXXXX XXX",
+ "X XXX << XX XX XX XXXX XXX",
+ "X XXX XXX XX XX XXX XXXXXXX XX",
+ "X XXXX XXX X XXXX XXX XXXXXX XXX X",
+ "XX XXXX XXXX XXXXXXXX XXXX X",
+ "XXX XXX XXXX XXXXXXXXXXX << XXXXX X",
+ "XXX XXX XX XXXXXXXXXXX XXXXXXXXXXX X",
+ "XXX < XXX XXXXXXXXXXXXX XXXXXXXXXXXXX X",
+ "XXX XXX XXXXX XXXXX XXXXXXXXXXXXX X",
+ "XXXXXXXXX XXXXX XXX XXX XXXXXXXXXXXX X",
+ "XXXXXXX XXXXXX XXXXXXXXXXX XX",
+ "XXXXXX XXXXXXX XXXXX << XXX",
+ "XXXXXX XXXXXXXXXXXXXX XXXX XXXXX XXX << XXX",
+ "XXXXXX XXXXXXXXXXXXXXX XXXXX XXX XXXX XXX",
+ "XXXXXX XXXXXXXXXXXXXX XXXX XXXXX XXXX",
+ "XXXXXX XXXXXXX XXXXX XXXXXXX XXXX",
+ "XXXXXX XXX XXXXXX XXXXXXXX XXXXX XXXX",
+ "XXXXXX XX XX XXXXXXX XXXXXXXX XXXX",
+ "XXXXXX X XXXXXXXXXXX XXXX XXXX",
+ "XXX XXXXXXXXXXXXXXXX XX XXXXX XXXX",
+ "XX XXXXXXXXXXXXXXXXXX XXXXXXX XXXX",
+ "XX XXXXXXXXXXXXXX XXXXXXXXXXXX XXXX",
+ "XX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXX",
+ "XX XXXXX << XXXXXX XXXX XXXXXXXXXXXXXXX XXXX",
+ "XX XXXXX << XXXXXX XXX XXXXX XXX XXXX",
+ "XX XXXXXX XXX << XXXX XXXX",
+ "XX XXXXXX XXX XXX XXXX X XXXX",
+ "XX XXXXXXX XXXXXXXXXXXXXXXX XXXXX XXX XXXX",
+ "XX XXXXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXX XXXX",
+ "XX XXXX XXXX XXXXXXX XXXXXXXXX XXXX",
+ "XX XX XXXX XXX XXX XXX XX XXXXX XXXX",
+ "XX XXXXXXXX XXXX XXX << XXXX",
+ "XX XXXXXXXXX XXXXX XXX << XXXXX",
+ "XX XXXXXXXXXX XXXXXXX XXXXXX XXXXXXXXXXX",
+ "XX XXXXXX XXXXXXX XXXXXXXXXXXXXXXXXX X",
+ "XXX XXXX XXXXX XXXXXXXXXXXXXXX < X",
+ "XXXXXXX XXXXXX XX",
+ "XXXXXXXX XX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ ],
+ "place_monster": [
+ { "monster": "mon_crocodile", "x": 10, "y": 2, "repeat": [ 1, 2 ], "chance": 50 },
+ { "monster": "mon_crocodile", "x": 24, "y": 9, "repeat": [ 1, 2 ], "chance": 50 },
+ { "monster": "mon_crocodile", "x": 20, "y": 19, "repeat": [ 1, 2 ], "chance": 50 },
+ { "monster": "mon_crocodile", "x": 14, "y": 33, "repeat": [ 1, 2 ], "chance": 50 },
+ { "monster": "mon_crocodile", "x": 7, "y": 18, "repeat": [ 1, 2 ], "chance": 50 },
+ { "monster": "mon_crocodile", "x": 20, "y": 45, "repeat": [ 1, 2 ], "chance": 50 }
+ ],
+ "terrain": { "<": "t_slope_up", "X": "t_rock", " ": "t_water_dp_underground" }
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/demon_spider_lair.json b/data/mods/Magical_Nights/worldgen/demon_spider_lair.json
new file mode 100644
index 000000000000..d7eee068a8a9
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/demon_spider_lair.json
@@ -0,0 +1,79 @@
+[
+ {
+ "type": "palette",
+ "id": "demon_spider_lair",
+ "terrain": {
+ "7": [
+ [ "t_tree_burnt", 60 ],
+ "t_tree",
+ "t_tree_apple",
+ "t_tree_peach",
+ "t_tree_pear",
+ "t_tree_hickory",
+ "t_tree_beech",
+ "t_tree_coffee",
+ "t_tree_pine",
+ "t_tree_birch",
+ "t_tree_willow",
+ "t_tree_maple",
+ "t_webbed_corpse"
+ ],
+ "~": [ "t_lava" ],
+ " ": [ [ "t_grass_dead", 2 ], [ "t_dirt", 15 ], [ "t_sand", 10 ], [ "t_dirtmound", 3 ], [ "t_rock_floor_no_roof", 8 ] ],
+ ".": [ "t_dirtfloor" ],
+ "$": [ "t_dirtfloor" ],
+ "S": [ "t_lava" ],
+ "s": [ [ "t_dirtfloor", 6 ], [ "t_dirt", 15 ], [ "t_sand", 10 ], [ "t_dirtmound", 4 ], [ "t_rock_floor_no_roof", 3 ] ],
+ "#": [ [ "t_demon_web_wall", 10 ], "t_tree_burnt" ]
+ },
+ "fields": {
+ " ": { "field": "fd_web", "intensity": 2 },
+ ".": { "field": "fd_web", "intensity": 3 },
+ "s": { "field": "fd_web", "intensity": 3 },
+ "S": { "field": "fd_web", "intensity": 3 },
+ "~": { "field": "fd_web", "intensity": 3 }
+ },
+ "items": { "$": { "item": "demon_spider_lair_treasure", "chance": 90, "repeat": [ 3, 6 ] } },
+ "monster": {
+ "S": { "monster": "mon_demon_spider_queen", "chance": 100 },
+ "s": { "monster": "mon_demon_spider", "chance": 100 },
+ ".": { "monster": "mon_demon_spiderling", "chance": 8 },
+ " ": { "monster": "mon_demon_spiderling", "chance": 1 }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": [ "demon_spider_lair" ],
+ "weight": 100,
+ "object": {
+ "rows": [
+ " 7 ",
+ " 7 7 ",
+ " ### ####7 ",
+ " ########### ",
+ " ############ 7 ",
+ " #####.######## 7 ",
+ " 7 ####..########### ",
+ " ###...........#### ",
+ " ####...$..7...##### ",
+ " ####.............###7 ",
+ " ###..$....s....#######",
+ " #####..........$..#####",
+ " ####.....~S..s..#####",
+ " ####...s..~~......### ",
+ " ######.7...s....####7 ",
+ " ####..........~..#### ",
+ " 7 #####..s........#####",
+ " #######.....7.##### ",
+ " #####7......#### ",
+ " 7 ####....#### ",
+ " 7 ####....#### ",
+ " 7 ####...#### 7 ",
+ " ####..#### 7 ",
+ " ##### .#### "
+ ],
+ "palettes": [ "demon_spider_lair" ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/forest_tomb.json b/data/mods/Magical_Nights/worldgen/forest_tomb.json
new file mode 100644
index 000000000000..9e2e259afeba
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/forest_tomb.json
@@ -0,0 +1,134 @@
+[
+ {
+ "type": "palette",
+ "id": "tomb",
+ "terrain": {
+ ".": "t_rock_floor",
+ " ": [ [ "t_grass_dead", 15 ], [ "t_dirt", 4 ], [ "t_dirtmound", 3 ], [ "t_rock_floor_no_roof", 4 ] ],
+ "T": "t_tree_dead",
+ "R": "t_railroad_rubble",
+ "S": "t_shrub",
+ "<": "t_slope_up",
+ ">": "t_slope_down",
+ "#": "t_rock"
+ },
+ "furniture": { "H": "f_altar", "C": "f_coffin_c" },
+ "items": { "R": { "item": "animist_items", "chance": 25 }, "H": { "item": "forest_tomb_spellbook", "chance": 100 } },
+ "monster": { "x": { "monster": "mon_skeleton", "chance": 50 }, "Z": { "monster": "mon_zombie_necro", "chance": 100 } }
+ },
+ {
+ "type": "palette",
+ "id": "tomb_roof",
+ "terrain": { ".": "t_rock_roof", " ": "t_open_air", ">": "t_slope_down" }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": [ "forest_tomb" ],
+ "//": "Ground level - Z-0.",
+ "weight": 100,
+ "object": {
+ "fill_ter": "t_rock_floor",
+ "rows": [
+ " S ",
+ " S ",
+ " S ",
+ " S ",
+ " S ",
+ " S S ",
+ " ##<############### ",
+ " ################## ",
+ " S ####C.##>>##..C### ",
+ " ###x..........###............... ",
+ " .................. ",
+ " .................. ",
+ " .................> ",
+ " .................. ",
+ " .................. ",
+ " .................. ",
+ " .................. ",
+ " .................. ",
+ " .............>.... ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ],
+ "palettes": [ "tomb_roof" ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/goblin_camp.json b/data/mods/Magical_Nights/worldgen/goblin_camp.json
new file mode 100644
index 000000000000..0e614fee0508
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/goblin_camp.json
@@ -0,0 +1,104 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "goblin_camp",
+ "object": {
+ "rows": [
+ "........................",
+ ".||||||||||^^||||||||||.",
+ ".|.p.p.p.........r___r|.",
+ ".|..............._____|.",
+ ".|...f...........__F__|.",
+ ".|..............._____|.",
+ ".|.C.C...........____r|.",
+ ".|.CC.................|.",
+ ".|%%%%%%%.............|.",
+ ".|%kk`dc%.............|.",
+ ".|%`````%.....#######.|.",
+ ".|%B````(.....#R,R,R#.|.",
+ ".|%s````%.....),,,,,#.|.",
+ ".|%`````%.....#R,R,R#.|.",
+ ".|%%%%%%%.....#######.|.",
+ ".|....................|.",
+ ".|............#######.|.",
+ ".|............#b,b,b#.|.",
+ ".|............),,,,,#.|.",
+ ".|............#b,b,b#.|.",
+ ".|............#######.|.",
+ ".|.t.t.t.t............|.",
+ ".||||||||||^^||||||||||.",
+ "........................"
+ ],
+ "place_loot": [
+ { "item": "water", "x": 3, "y": 2, "repeat": [ 3, 6 ] },
+ { "item": "bum_wine", "x": 5, "y": 2, "repeat": [ 3, 6 ] },
+ { "item": "beer", "x": 7, "y": 2, "repeat": [ 3, 6 ] },
+ { "item": "2x4", "x": 5, "y": 4, "repeat": [ 3, 6 ] }
+ ],
+ "place_monster": [
+ { "monster": "mon_goblin_warrior", "x": [ 3, 20 ], "y": [ 3, 5 ], "repeat": 2 },
+ { "monster": "mon_goblin_slinger", "x": [ 3, 11 ], "y": [ 15, 20 ], "repeat": 2 },
+ { "monster": "mon_goblin_warrior", "x": [ 12, 19 ], "y": [ 9, 21 ], "repeat": 2 },
+ { "monster": "mon_goblin_chieftain", "x": [ 2, 7 ], "y": [ 9, 13 ] }
+ ],
+ "terrain": {
+ ".": [ [ "t_grass", 2 ], [ "t_grass_long", 2 ], [ "t_dirt", 3 ] ],
+ "C": [ [ "t_grass", 2 ], [ "t_grass_long", 2 ], [ "t_dirt", 3 ] ],
+ "K": [ [ "t_grass", 2 ], [ "t_grass_long", 2 ], [ "t_dirt", 3 ] ],
+ "t": [ [ "t_grass", 2 ], [ "t_grass_long", 2 ], [ "t_dirt", 3 ] ],
+ "f": [ [ "t_grass", 2 ], [ "t_grass_long", 2 ], [ "t_dirt", 3 ] ],
+ "p": "t_dirt",
+ "|": "t_wall_log",
+ "^": "t_splitrail_fencegate_c",
+ "_": "t_rock_floor_no_roof",
+ "F": "t_rock_floor_no_roof",
+ "r": "t_rock_floor_no_roof",
+ "#": "t_wall_rammed_earth",
+ ",": "t_dirtfloor_thatchroof",
+ "b": "t_dirtfloor_thatchroof",
+ "R": "t_dirtfloor_thatchroof",
+ "%": "t_wall_wood",
+ "(": "t_door_c",
+ ")": "t_door_makeshift_c",
+ "`": "t_floor",
+ "B": "t_floor",
+ "k": "t_floor",
+ "c": "t_floor",
+ "d": "t_floor",
+ "s": "t_floor"
+ },
+ "furniture": {
+ "F": "f_forge_rock",
+ "R": "f_rack_wood",
+ "C": "f_crate_o",
+ "b": "f_straw_bed",
+ "B": "f_bed",
+ "d": "f_desk",
+ "c": "f_chair",
+ "k": "f_bookcase",
+ "s": "f_safe_l",
+ "t": "f_target",
+ "f": "f_firering",
+ "p": "f_cupboard",
+ "r": "f_rack_coat"
+ },
+ "items": {
+ "s": { "item": "enchanted_rings_common", "chance": 100 },
+ "k": { "item": "magic_shop_books", "chance": 100 },
+ "B": { "item": "bed", "chance": 100, "repeat": [ 1, 2 ] },
+ "C": { "item": "dry_goods", "chance": 100, "repeat": [ 1, 2 ] },
+ "R": [
+ { "item": "tools_earthworking", "chance": 25 },
+ { "item": "tailoring_fabric", "chance": 55 },
+ { "item": "home_hw", "chance": 40 },
+ { "item": "tools_common", "chance": 40 },
+ { "item": "kitchen_counters", "chance": 40 },
+ { "item": "tinware", "chance": 40 },
+ { "item": "supplies_hardware", "chance": 15 }
+ ],
+ "r": [ { "item": "goblin_slinger_drops", "chance": 50 }, { "item": "goblin_warrior_drops", "chance": 50 } ]
+ }
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/lake_retreat.json b/data/mods/Magical_Nights/worldgen/lake_retreat.json
new file mode 100644
index 000000000000..f00ce6f52451
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/lake_retreat.json
@@ -0,0 +1,487 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_ground",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "/%//////................",
+ "//.//.////..............",
+ "......9..//.......9.....",
+ "..9.......//....%...9...",
+ "..........//...%%.......",
+ "....9......//.....9..9..",
+ "...........//...........",
+ "..........|++|......9...",
+ "...9.....|| ||.........",
+ "........||a g||........",
+ ".......|| g||....9..",
+ "......||y X g||......",
+ "..9...|H X Ih k0.....9",
+ "......|t X I C0.9....",
+ "....9.||C g||......",
+ ".......||y g||.....9.",
+ "9...%...|| g||........",
+ ".........||< ||.....9...",
+ "...9......|00|..........",
+ ".......9.........9....9.",
+ "...........9............",
+ "......9...........%.....",
+ "..........9...9.....9...",
+ ".9......................"
+ ],
+ "terrain": {
+ " ": "t_floor",
+ ".": [ [ "t_grass", 5 ], [ "t_grass_long", 2 ], "t_dirt", "t_shrub" ],
+ "%": [ [ "t_grass", 5 ], "t_dirt" ],
+ "/": "t_dirt",
+ "|": "t_rock_red",
+ "<": "t_wood_stairs_up",
+ ">": "t_wood_stairs_down",
+ "0": "t_window_domestic",
+ "+": "t_door_red_c",
+ "9": [
+ "t_tree_blackjack",
+ [ "t_tree_walnut", 5 ],
+ [ "t_tree_chestnut", 5 ],
+ "t_tree_beech",
+ "t_tree_hazelnut",
+ "t_tree_cottonwood",
+ [ "t_tree", 5 ],
+ [ "t_tree_elm", 3 ],
+ "t_tree_dead",
+ "t_tree_apple",
+ "t_tree_pear",
+ "t_tree_cherry",
+ "t_tree_peach",
+ "t_tree_apricot",
+ "t_tree_plum",
+ "t_tree_mulberry",
+ "t_tree_elderberry",
+ [ "t_tree_pine", 5 ],
+ "t_tree_birch",
+ [ "t_tree_willow", 3 ],
+ "t_tree_maple",
+ "t_tree_hickory",
+ "t_tree_almond",
+ "t_tree_pecan"
+ ]
+ },
+ "furniture": {
+ "%": [ [ "f_boulder_medium", 2 ], [ "f_boulder_small", 1 ], [ "f_boulder_large", 3 ] ],
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ],
+ "h": "f_chair",
+ "X": "f_sofa",
+ "t": "f_table",
+ "7": "f_bench",
+ "C": "f_armchair",
+ "a": "f_rack_coat",
+ "g": "f_bookcase",
+ "k": "f_floor_lamp",
+ "I": "f_desk",
+ "H": "f_fireplace"
+ },
+ "items": {
+ "g": [
+ { "item": "homebooks", "chance": 20, "repeat": [ 2, 4 ] },
+ { "item": "magic_shop_books", "chance": 30 },
+ { "item": "novels", "chance": 20, "repeat": [ 2, 4 ] }
+ ],
+ "I": [
+ { "item": "office", "chance": 30, "repeat": [ 2, 4 ] },
+ { "item": "magic_shop_potions", "chance": 20, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_wands", "chance": 15 },
+ { "item": "enchanted_small_items", "chance": 20 }
+ ],
+ "R": { "item": "trash", "chance": 25, "repeat": [ 1, 2 ] },
+ "W": { "item": "stash_wood", "chance": 25, "repeat": [ 1, 2 ] },
+ "t": { "item": "livingroom", "chance": 25, "repeat": [ 1, 2 ] },
+ "a": [
+ { "item": "jackets", "chance": 80, "repeat": [ 1, 2 ] },
+ { "item": "bags", "chance": 60, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_clothes", "chance": 40, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_worn_items", "chance": 20, "repeat": [ 1, 2 ] }
+ ]
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_z1",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "..........|00|..........",
+ ".........||rr||.........",
+ "........||r r||........",
+ ".......|| y||.......",
+ "......||W c ||......",
+ "......0s cu hth 0......",
+ "......0m cu hth 0......",
+ "......||R c ||......",
+ ".......|| C||.......",
+ "........||y a||........",
+ ".........||><||.........",
+ "..........|00|..........",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................"
+ ],
+ "terrain": {
+ " ": "t_floor",
+ ".": "t_open_air",
+ "|": "t_rock_green",
+ "<": "t_wood_stairs_up",
+ ">": "t_wood_stairs_down",
+ "0": "t_window_domestic",
+ "+": "t_door_green_c"
+ },
+ "furniture": {
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ],
+ "h": "f_chair",
+ "t": "f_table",
+ "R": "f_trashcan",
+ "C": "f_armchair",
+ "a": "f_rack_coat",
+ "k": "f_floor_lamp",
+ "r": "f_rack_wood",
+ "s": "f_sink",
+ "u": "f_stool",
+ "W": "f_woodstove",
+ "c": "f_counter",
+ "m": "f_glass_fridge"
+ },
+ "items": {
+ "c": [
+ { "item": "dishes_utility", "chance": 30 },
+ { "item": "condiments", "chance": 40, "repeat": [ 1, 2 ] },
+ { "item": "SUS_knife_drawer", "chance": 20, "repeat": [ 1, 2 ] },
+ { "item": "SUS_junk_drawer", "chance": 10, "repeat": [ 1, 2 ] },
+ { "item": "SUS_cookware", "chance": 20 }
+ ],
+ "s": { "item": "oven", "chance": 20, "repeat": [ 2, 4 ] },
+ "m": { "item": "fridge", "chance": 20, "repeat": [ 2, 4 ] },
+ "R": { "item": "trash", "chance": 25, "repeat": [ 1, 2 ] },
+ "W": { "item": "stash_wood", "chance": 25, "repeat": [ 1, 2 ] },
+ "t": { "item": "condiments", "chance": 25, "repeat": [ 1, 2 ] },
+ "a": { "item": "jackets", "chance": 25, "repeat": [ 1, 2 ] },
+ "r": [
+ { "item": "condiments", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "groce_ingredient", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "groce_bread", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "pantry_liquids", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "dry_goods", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "preserved_food", "chance": 30, "repeat": [ 1, 2 ] }
+ ]
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_z2",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "..........|00|..........",
+ ".........||s&||.........",
+ "........||c ||........",
+ ".......||||+|+|||.......",
+ "......||fy | yg||......",
+ "......0I dd|I d0......",
+ "......0IC dd|Ih d0......",
+ "......||g | f||......",
+ ".......|||+||+|||.......",
+ "........|| ||........",
+ ".........||<>||.........",
+ "..........|00|..........",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................"
+ ],
+ "terrain": {
+ " ": "t_floor",
+ ".": "t_open_air",
+ "|": "t_rock_blue",
+ "<": "t_wood_stairs_up",
+ ">": "t_wood_stairs_down",
+ "0": "t_window_domestic",
+ "+": "t_door_green_c"
+ },
+ "furniture": {
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ],
+ "h": "f_chair",
+ "t": "f_table",
+ "C": "f_armchair",
+ "g": "f_bookcase",
+ "I": "f_desk",
+ "s": "f_sink",
+ "d": "f_bed",
+ "f": "f_wardrobe",
+ "c": "f_shower"
+ },
+ "toilets": { "&": { } },
+ "items": {
+ "g": [
+ { "item": "homebooks", "chance": 50, "repeat": [ 2, 4 ] },
+ { "item": "magic_shop_books", "chance": 20 },
+ { "item": "novels", "chance": 80, "repeat": [ 2, 4 ] }
+ ],
+ "I": [
+ { "item": "bedroom", "chance": 70, "repeat": [ 2, 4 ] },
+ { "item": "magic_shop_potions", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_wands", "chance": 15 },
+ { "item": "enchanted_small_items", "chance": 30, "repeat": [ 1, 2 ] }
+ ],
+ "d": { "item": "bed", "chance": 20, "repeat": [ 2, 4 ] },
+ "s": { "item": "softdrugs", "chance": 20, "repeat": [ 2, 4 ] },
+ "c": { "item": "shower", "chance": 25, "repeat": [ 1, 2 ] },
+ "f": [
+ { "item": "enchanted_worn_items", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 10 },
+ { "item": "magic_shop_clothes", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "pants", "chance": 50, "repeat": [ 1, 2 ] },
+ { "item": "shirts", "chance": 50, "repeat": [ 1, 2 ] },
+ { "item": "bags", "chance": 30, "repeat": [ 1, 2 ] }
+ ]
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_z3",
+ "object": {
+ "fill_ter": "t_concrete",
+ "rows": [
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "..........|00|..........",
+ ".........|| ||.........",
+ "........00 00........",
+ ".......00 MM 00.......",
+ "......|| MMMM ||......",
+ "......0h M$NM h0......",
+ "......0h MNNM h0......",
+ "......|| MMMM ||......",
+ ".......00 MM 00.......",
+ "........00 00........",
+ ".........||><||.........",
+ "..........|00|..........",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................"
+ ],
+ "terrain": {
+ " ": "t_concrete",
+ ".": "t_open_air",
+ "|": "t_rock_green",
+ ">": "t_wood_stairs_down",
+ "<": "t_wood_stairs_up",
+ "0": "t_laminated_glass",
+ "+": "t_door_green_c",
+ "M": "t_water_pool_shallow",
+ "N": [ "t_shrub_lilac", "t_shrub_hydrangea" ],
+ "$": [ "t_tree_apple", "t_tree_pear", "t_tree_cherry", "t_tree_peach", "t_tree_apricot", "t_tree_plum", "t_tree_willow" ]
+ },
+ "furniture": { "h": "f_bench" },
+ "items": { "h": [ { "item": "enchanted_small_items", "chance": 20 }, { "item": "magic_shop_books", "chance": 30 } ] },
+ "place_npcs": [ { "class": "magus_old", "x": 10, "y": 12 } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_z4",
+ "object": {
+ "fill_ter": "t_concrete",
+ "rows": [
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "..........||||..........",
+ ".........|| ||.........",
+ "........|| ||........",
+ ".......|| ||.......",
+ "......|| ||......",
+ "......| |......",
+ "......| |......",
+ "......|| ||......",
+ ".......|| ||.......",
+ "........|| ||........",
+ ".........|||>||.........",
+ "..........||||..........",
+ "........................",
+ "........................",
+ "........................",
+ "........................",
+ "........................"
+ ],
+ "terrain": {
+ " ": "t_glass_roof",
+ ".": "t_open_air",
+ "|": "t_rock_floor_no_roof",
+ ">": "t_wood_stairs_down",
+ "0": "t_laminated_glass"
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_boathouse",
+ "object": {
+ "fill_ter": "t_grass",
+ "rows": [
+ "~~~~~~~--||||||||||...9.",
+ "~~~~~~--dddddd|b |.9...",
+ "~~~~~~~~~~~~~d|b r|...9.",
+ "~~~~~~~~~~~~~d w|9....",
+ "~~~~~~~~~~~~~d w|...9.",
+ "~~~~~~~~~~~~~d|b 0.....",
+ "~-dddddddddddd|b r|...9.",
+ "--.......|||||||+||.9...",
+ "--.............///......",
+ "..........9....///...9..",
+ ".....U.......9.//.9.....",
+ "...M.U........//....9...",
+ ".....U..9....//...9..9..",
+ "............//.9........",
+ "...........//......9...9",
+ "..9........////.........",
+ "...........//////...9...",
+ "................//.....9",
+ "......9.......9..//.....",
+ "..................////..",
+ "...............9..9//.9.",
+ "...9........9......////.",
+ "..........9.......9.9.//",
+ "//............9.......//"
+ ],
+ "place_vehicles": [
+ { "vehicle": "kayak_racing", "x": 11, "y": 2, "rotation": 180, "chance": 30, "status": 0 },
+ { "vehicle": "canoe", "x": 2, "y": 5, "rotation": 180, "chance": 40, "status": 0 }
+ ],
+ "place_loot": [ { "item": "rope_30", "x": 12, "y": 6, "chance": 100 }, { "item": "stepladder", "x": 17, "y": 1, "chance": 100 } ],
+ "terrain": {
+ " ": "t_floor",
+ "b": "t_floor",
+ "r": "t_floor",
+ "w": "t_floor",
+ "*": "t_wall_log_half",
+ "d": "t_dock",
+ "/": "t_dirt",
+ "M": "t_dirt",
+ "U": "t_dirt",
+ "~": "t_water_dp",
+ "-": "t_water_sh",
+ ".": [ [ "t_grass", 5 ], [ "t_grass_long", 2 ], "t_dirt", "t_shrub", "t_fern" ],
+ "|": "t_wall_log",
+ "0": "t_window_domestic",
+ "+": "t_door_c",
+ "9": [
+ "t_tree_blackjack",
+ [ "t_tree_walnut", 5 ],
+ [ "t_tree_chestnut", 5 ],
+ "t_tree_beech",
+ "t_tree_hazelnut",
+ "t_tree_cottonwood",
+ [ "t_tree", 5 ],
+ [ "t_tree_elm", 3 ],
+ "t_tree_dead",
+ "t_tree_apple",
+ "t_tree_pear",
+ "t_tree_cherry",
+ "t_tree_peach",
+ "t_tree_apricot",
+ "t_tree_plum",
+ "t_tree_mulberry",
+ "t_tree_elderberry",
+ [ "t_tree_pine", 5 ],
+ "t_tree_birch",
+ [ "t_tree_willow", 3 ],
+ "t_tree_maple",
+ "t_tree_hickory",
+ "t_tree_almond",
+ "t_tree_pecan"
+ ]
+ },
+ "furniture": { "r": "f_rack", "b": "f_bench", "U": "f_bench", "t": "f_table", "M": "f_firering", "w": "f_workbench" },
+ "items": {
+ "r": { "item": "fishing_items", "chance": 40, "repeat": [ 1, 2 ] },
+ "b": { "item": "fishing_items", "chance": 20, "repeat": [ 1, 2 ] },
+ "d": { "item": "fishing_items", "chance": 5, "repeat": [ 1, 2 ] },
+ "w": { "item": "home_hw", "chance": 30, "repeat": [ 1, 2 ] },
+ "M": { "item": "stash_wood", "chance": 100, "repeat": [ 6, 10 ] }
+ },
+ "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 10, 22 ], "y": [ 15, 22 ], "density": 0.1 } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "lake_retreat_boathouse_roof",
+ "object": {
+ "fill_ter": "t_tar_flat_roof",
+ "rows": [
+ " .......... ",
+ " .......... ",
+ " .......... ",
+ " .......... ",
+ " .......... ",
+ " .......... ",
+ " .......... ",
+ " .......... ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ],
+ "palettes": [ "roof_palette" ],
+ "terrain": { ".": "t_tar_flat_roof" }
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/magic_academy.json b/data/mods/Magical_Nights/worldgen/magic_academy.json
new file mode 100644
index 000000000000..ef36e715bef2
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/magic_academy.json
@@ -0,0 +1,533 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_ground",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ ",.####################.,",
+ ",.#d h&o==jjjj==o%h d#.,",
+ ",.#@@ +========+ @@#.,",
+ ",.########=~~=########.,",
+ ",...#d h0o=~~=o$h d#...,",
+ ",...#@@ +====+ @@#...,",
+ ",...#######==#######...,",
+ ",[...##S +==+ S##..[.,",
+ ",.....#t ##++## t#.....,",
+ ",.....#9##< >##9#..[..,",
+ ",..[..###c c###.....,",
+ ",.....##c E E c##...[.,",
+ ",,,,,,* *,,,,,,",
+ ",,,,,,* HHHH *,,,,,,",
+ "......##c c##......",
+ "...[..###c rr c###......",
+ ".....##<## h ##<##..[..",
+ ".[...#B t##++##t B#.....",
+ "....##B S#==#S B##....",
+ "...####+###==###+####...",
+ "####xxy +======+ yxx####",
+ "#D ) Eoj=~~=joI ) D#",
+ "#@@#HHTR#j====j#IEHH#@@#",
+ "########################"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ],
+ "terrain": {
+ "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ],
+ " ": "t_floor",
+ "#": "t_rock_wall",
+ ",": "t_concrete",
+ "~": "t_water_pool_shallow_outdoors",
+ "=": "t_grass_golf",
+ "j": "t_grass_golf",
+ "}": "t_grass_golf"
+ },
+ "furniture": { ")": "f_beaded_door", "&": "f_desk", "%": "f_desk", "$": "f_desk", "0": "f_desk" },
+ "place_loot": [
+ { "item": "television", "x": 4, "y": 20, "chance": 100 },
+ { "item": "television", "x": 19, "y": 20, "chance": 100 },
+ { "item": "stereo", "x": 18, "y": 20, "chance": 100 },
+ { "item": "stereo", "x": 5, "y": 20, "chance": 100 }
+ ],
+ "items": {
+ "&": [ { "item": "classless_items", "chance": 50 }, { "item": "druid_items", "chance": 70 } ],
+ "%": [ { "item": "classless_items", "chance": 50 }, { "item": "biomancer_items", "chance": 70 } ],
+ "$": [ { "item": "classless_items", "chance": 50 }, { "item": "earthshaper_items", "chance": 70 } ],
+ "0": [ { "item": "classless_items", "chance": 50 }, { "item": "technomancer_items", "chance": 70 } ],
+ "x": { "item": "enchanted_small_items", "chance": 40 },
+ "r": [
+ { "item": "academy_lore", "chance": 100 },
+ { "item": "enchanted_small_items", "chance": 20 },
+ { "item": "enchanted_combat_items", "chance": 20 }
+ ],
+ "d": [
+ { "item": "magic_shop_clothes", "chance": 50, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_worn_items", "chance": 20 },
+ { "item": "enchanted_small_items", "chance": 40 }
+ ],
+ "D": [
+ { "item": "magic_shop_clothes", "chance": 60, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_worn_items", "chance": 20 },
+ { "item": "enchanted_combat_items", "chance": 10 }
+ ],
+ "R": [ { "item": "magic_shop_books", "chance": 40, "repeat": [ 0, 2 ] }, { "item": "spellbook_loot_2", "chance": 10 } ],
+ "j": [
+ { "item": "enchanted_small_items", "chance": 10, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 2 },
+ { "item": "enchanted_misc", "chance": 2 }
+ ]
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_basement",
+ "object": {
+ "fill_ter": "t_thconc_floor",
+ "rows": [
+ "``####################``",
+ "``#@d|vRR H|FFF 666#``",
+ "``#@ ) lH| 6#``",
+ "``###||+|||||4 JA 6###``",
+ "````#H JWWQ|O J n#````",
+ "````#H Z|1 J 5#````",
+ "````##T Z|2 Y##````",
+ "`````##JJy Q|3 7##`````",
+ "``````#|||+|||+||#``````",
+ "``````#qq| < |U#``````",
+ "``````#q + +U#``````",
+ "``````#||||| ||#``````",
+ "``````# #``````",
+ "``````# $ $ ~~~ i#``````",
+ "``````# ~~~ i#``````",
+ "``````# ! ! ~~~ i#``````",
+ "`````## ~~~ ##`````",
+ "`````# % % ~~~ #`````",
+ "````## ~~~ ##````",
+ "```## = = = ~~~~~ ##```",
+ "####i ~~~~~ i####",
+ "#9 |i = = = ~~~~~ i| 9#",
+ "#9 ] ] 9#",
+ "########################"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "traps": { "=": "tr_rollmat" },
+ "terrain": { " ": "t_thconc_floor", "`": "t_rock", "]": "t_door_glass_green_c", "#": "t_rock_blue", "~": "t_water_pool" },
+ "furniture": { ")": "f_beaded_door", "}": "f_huge_mana_crystal", "!": "f_ergometer", "$": "f_treadmill", "%": "f_exercise" },
+ "place_loot": [ { "item": "television", "x": 8, "y": 1, "chance": 100 }, { "item": "stereo", "x": 7, "y": 1, "chance": 100 } ],
+ "items": {
+ "q": [
+ { "item": "alchemy_items", "chance": 45, "repeat": [ 1, 3 ] },
+ { "item": "magic_shop_potions", "chance": 30, "repeat": [ 1, 2 ] }
+ ],
+ "l": { "item": "enchanted_small_items", "chance": 30 },
+ "v": { "item": "boss_treasure_items", "chance": 40, "repeat": [ 1, 3 ] },
+ "d": [
+ { "item": "magic_shop_clothes", "chance": 50, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_worn_items", "chance": 10 },
+ { "item": "enchanted_small_items", "chance": 20 },
+ { "item": "enchanted_combat_items", "chance": 20 }
+ ],
+ "R": [ { "item": "magic_shop_books", "chance": 30 }, { "item": "enchanted_misc", "chance": 2 } ],
+ "i": [ { "item": "enchanted_small_items", "chance": 20 }, { "item": "enchanted_combat_items", "chance": 30 } ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 2, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_2nd",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "__####################__",
+ "__#d h&o,______,o%h d#__",
+ "__#@@ +,,,__,,,+ @@#__",
+ "__########,__,########__",
+ "____#d h0o,__,o$h d#____",
+ "____#@@ +,,,,+ @@#____",
+ "____#######,,#######____",
+ "_____##S +,,+ S##_____",
+ "______#t ##++## t#______",
+ "______#9##> <##9#______",
+ "______### ###______",
+ "______## hhhh ##______",
+ "______)y ffff y)______",
+ "______)y hhhh y)______",
+ "______## ##______",
+ "______### ff ###______",
+ "_____##>## hh ##>##_____",
+ "_____#` v##))##vE`#_____",
+ "____##`E R#__#R `##____",
+ "___###)]))#__#))])###___",
+ "#####,,,===__===,,,#####",
+ "#k ],=}=______=}=,] k#",
+ "#RHH)====______====)HHR#",
+ "########################"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": {
+ "_": "t_open_air",
+ "/": "t_open_air_rooved_outside",
+ ",": "t_concrete",
+ "#": "t_rock_wall",
+ ")": "t_wall_glass",
+ "]": "t_door_glass_c",
+ "=": "t_grass_golf",
+ "j": "t_grass_golf",
+ "}": "t_grass_golf"
+ },
+ "furniture": {
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ],
+ "`": "f_magic_bench",
+ "}": "f_huge_mana_crystal",
+ "&": "f_desk",
+ "%": "f_desk",
+ "$": "f_desk",
+ "0": "f_desk"
+ },
+ "items": {
+ "&": [ { "item": "classless_items", "chance": 50 }, { "item": "kelvinist_items", "chance": 70 } ],
+ "%": [ { "item": "classless_items", "chance": 50 }, { "item": "animist_items", "chance": 70 } ],
+ "$": [ { "item": "classless_items", "chance": 50 }, { "item": "magus_items", "chance": 70 } ],
+ "0": [ { "item": "classless_items", "chance": 50 }, { "item": "stormshaper_items", "chance": 70 } ],
+ "H": [
+ { "item": "magic_shop_clothes", "chance": 10 },
+ { "item": "enchanted_small_items", "chance": 20 },
+ { "item": "magic_shop_books", "chance": 20 }
+ ],
+ "`": [
+ { "item": "alchemy_items", "chance": 35, "repeat": [ 1, 2 ] },
+ { "item": "magic_tools_and_loot", "chance": 50 },
+ { "item": "magic_shop_potions", "chance": 20 }
+ ],
+ "v": { "item": "boss_treasure_items", "chance": 40, "repeat": [ 0, 2 ] },
+ "d": [
+ { "item": "magic_shop_clothes", "chance": 50, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_worn_items", "chance": 20 },
+ { "item": "enchanted_small_items", "chance": 20 }
+ ],
+ "R": [ { "item": "classless_items", "chance": 40 }, { "item": "enchanted_misc", "chance": 2 } ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_3rd",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "__....................__",
+ "__......________......__",
+ "__......________......__",
+ "__........____........__",
+ "____......____......____",
+ "____......____......____",
+ "____.......__.......____",
+ "_____......__......_____",
+ "______...##))##...______",
+ "______..##< >##..______",
+ "______.##))]]))##.______",
+ "______##y ##______",
+ "______)i h h h h )______",
+ "______)i & & & & )______",
+ "______## ##______",
+ "______.##R && R##.______",
+ "_____...## E y##..._____",
+ "_____....##))##...._____",
+ "____......#__#......____",
+ "___........__........___",
+ ".....______________.....",
+ ".....______________.....",
+ ".....______________.....",
+ "........................"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": { "_": "t_open_air", ")": "t_wall_glass", "#": "t_rock_wall", "]": "t_door_glass_c", ".": "t_shingle_flat_roof" },
+ "furniture": { "&": "f_magic_bench" },
+ "items": {
+ "&": [ { "item": "magic_tools_and_loot", "chance": 50, "repeat": [ 1, 2 ] }, { "item": "magic_shop_potions", "chance": 30 } ],
+ "R": [
+ { "item": "magic_shop_books", "chance": 30 },
+ { "item": "magic_recipe_basic", "prob": 50 },
+ { "item": "magic_recipe_advanced", "prob": 15 }
+ ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_4th",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "_________##))##_________",
+ "________##> <##________",
+ "_______##))]]))##_______",
+ "______##y ##______",
+ "______)i h h h h )______",
+ "______)i & & & & )______",
+ "______## ##______",
+ "_______##R && R##_______",
+ "________## E y##________",
+ "_________##))##_________",
+ "__________#__#__________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": { "_": "t_open_air", ")": "t_wall_glass", "#": "t_rock_wall", "]": "t_door_glass_c" },
+ "furniture": { "&": "f_magic_bench" },
+ "items": {
+ "&": [ { "item": "magic_tools_and_loot", "chance": 50 }, { "item": "magic_shop_potions", "chance": 30 } ],
+ "R": [
+ { "item": "magic_shop_books", "chance": 30 },
+ { "item": "magic_recipe_basic", "prob": 50 },
+ { "item": "magic_recipe_advanced", "prob": 15 }
+ ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_5th",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "_________##))##_________",
+ "________##< >##________",
+ "_______##))]]))##_______",
+ "______##Tx y##______",
+ "______)Hl ee lH)______",
+ "______)Hl ee lH)______",
+ "______##y ee T##______",
+ "_______##y y##_______",
+ "________##k Es##________",
+ "_________##))##_________",
+ "__________#__#__________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": { "_": "t_open_air", ")": "t_wall_glass", "#": "t_rock_wall", "]": "t_door_glass_c" },
+ "place_loot": [ { "item": "television", "x": 9, "y": 11, "chance": 100 }, { "item": "stereo", "x": 13, "y": 16, "chance": 100 } ],
+ "items": {
+ "l": { "item": "enchanted_small_items", "chance": 10 },
+ "H": [
+ { "item": "magic_shop_clothes", "chance": 60 },
+ { "item": "enchanted_worn_items", "chance": 20 },
+ { "item": "enchanted_combat_items", "chance": 6 },
+ { "item": "enchanted_small_items", "chance": 10 }
+ ],
+ "s": [ { "item": "enchanted_small_items", "chance": 20 }, { "item": "enchanted_combat_items", "chance": 2 } ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_6th",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "_________##))##_________",
+ "________##> <##________",
+ "_______##))]]))##_______",
+ "______##R R##______",
+ "______)rh RRRR hr)______",
+ "______)rh RRRR hr)______",
+ "______##R R##______",
+ "_______##R hh R##_______",
+ "________##RrrR##________",
+ "_________##))##_________",
+ "__________#__#__________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": { "_": "t_open_air", ")": "t_wall_glass", "#": "t_rock_wall", "]": "t_door_glass_c" },
+ "items": {
+ "r": [
+ { "item": "magic_shop_books", "chance": 20 },
+ { "item": "magic_shop_wands", "chance": 20 },
+ { "item": "enchanted_small_items", "chance": 10 },
+ { "item": "enchanted_combat_items", "chance": 4 }
+ ],
+ "R": [ { "item": "magic_shop_books", "chance": 30 } ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_7th",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "_________##))##_________",
+ "________##< >##________",
+ "_______##))]]))##_______",
+ "______##? ?##______",
+ "______) A= =A )______",
+ "______) A= =A )______",
+ "______##? - - ?##______",
+ "_______##? ?##_______",
+ "________##? ?##________",
+ "_________##))##_________",
+ "__________#__#__________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": { "_": "t_open_air", ")": "t_wall_glass", "#": "t_rock_wall", "-": "t_floor", "]": "t_door_glass_c" },
+ "furniture": { "=": "f_magic_bench", "-": "f_alembic", "?": "f_rack_wood" },
+ "items": {
+ "=": [
+ { "item": "alchemy_items", "chance": 35, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_potions", "chance": 30 },
+ { "item": "magic_recipe_basic", "chance": 40 },
+ { "item": "magic_shop_wands", "chance": 10 },
+ { "item": "magic_recipe_basic", "prob": 25 }
+ ],
+ "?": [ { "item": "alchemy_items", "chance": 45 }, { "item": "magic_shop_potions", "chance": 30 } ]
+ },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_8th",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "_________##))##_________",
+ "________##> <##________",
+ "_______## ##_______",
+ "______## ==== ##______",
+ "______)i ===-== i)______",
+ "______)i ==0=== i)______",
+ "______## ==== ##______",
+ "_______## ##_______",
+ "________## ii ##________",
+ "_________##))##_________",
+ "__________#__#__________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "terrain": {
+ "_": "t_open_air",
+ ")": "t_wall_glass",
+ "#": "t_rock_wall",
+ "]": "t_door_glass_c",
+ "=": "t_grass_golf",
+ "0": "t_grass_golf",
+ "-": "t_grass_golf"
+ },
+ "furniture": { "0": "f_orrery", "-": "f_magic_circle" },
+ "place_monsters": [ { "monster": "GROUP_TOWER_GOLEM", "x": 12, "y": 12, "density": 0.01, "repeat": [ 1, 3 ] } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_academy_roof",
+ "object": {
+ "fill_ter": "t_shingle_flat_roof",
+ "rows": [
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "_________ _________",
+ "________ > ________",
+ "_______ _______",
+ "______ ______",
+ "______ ______",
+ "______ ______",
+ "______ ______",
+ "_______ _______",
+ "________ ________",
+ "_________ _________",
+ "__________ __ __________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________",
+ "________________________"
+ ],
+ "terrain": { ">": "t_stairs_down", "_": "t_open_air" }
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/magic_basement.json b/data/mods/Magical_Nights/worldgen/magic_basement.json
new file mode 100644
index 000000000000..51f943221a70
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/magic_basement.json
@@ -0,0 +1,117 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": [ "magic_basement" ],
+ "weight": 100,
+ "object": {
+ "fill_ter": "t_carpet_green",
+ "rows": [
+ " ",
+ " ||||||||||||||| ",
+ " |gUU|yRRRRRRET| ",
+ " ||||||~~~%........E| ",
+ " ||????|||||........L| ",
+ " ||.......E!|...E....|| ",
+ " |&.........|.yrrr...<| ",
+ " ||...$...Py||||||/|||| ",
+ " ||TIII|||||RRR......| ",
+ " ||||||88S|.....H..x| ",
+ " |~~~/.....H..x| ",
+ " |B~~|.....s..x| ",
+ " |BYt|RRRR.....| ",
+ " ||||||||||||||| ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "place_traps": [ { "trap": "tr_magic_door", "x": 21, "y": 4 } ],
+ "place_item": [ { "item": "television", "x": 21, "y": 10 }, { "item": "wizard_photo", "x": 16, "y": 6 } ],
+ "place_loot": [
+ { "item": "corpse", "x": 2, "y": 6, "chance": 100 },
+ { "item": "translocate_spellbook", "x": 2, "y": 6, "chance": 100 },
+ { "item": "robe", "x": 2, "y": 6, "chance": 100 },
+ { "item": "candle", "x": 3, "y": 5, "chance": 100 },
+ { "item": "candle", "x": 3, "y": 6, "chance": 100 },
+ { "item": "candle", "x": 3, "y": 7, "chance": 100 }
+ ],
+ "terrain": {
+ "~": "t_thconc_floor",
+ "g": "t_thconc_floor",
+ "U": "t_thconc_floor",
+ "8": "t_thconc_floor",
+ "Y": "t_thconc_floor",
+ "B": "t_thconc_floor",
+ "S": "t_thconc_floor",
+ "_": "t_water_pool_shallow",
+ " ": "t_rock",
+ "/": "t_door_green_c",
+ ".": "t_carpet_green",
+ "-": "t_wall_w",
+ "|": "t_wall_metal",
+ "<": "t_wood_stairs_up",
+ "%": "t_secretdoor_metal_c"
+ },
+ "furniture": { "&": "f_magiclysm_translocator_gate", "!": "f_rack_coat", "?": "f_bookcase", "=": "f_bookcase" },
+ "items": {
+ "?": [ { "item": "magic_shop_books", "chance": 40 }, { "item": "magic_shop_potions", "chance": 60 } ],
+ "=": [ { "item": "novels", "chance": 30 }, { "item": "homebooks", "chance": 10 } ],
+ "~": [ { "item": "magic_shop_potions", "chance": 15, "repeat": [ 1, 2 ] } ],
+ "I": [
+ { "item": "magic_shop_potions", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_wands", "chance": 15 },
+ { "item": "enchanted_small_items", "chance": 30, "repeat": [ 1, 2 ] },
+ { "item": "magic_CBM", "chance": 30, "repeat": [ 1, 2 ] }
+ ],
+ "!": [
+ { "item": "enchanted_worn_items", "chance": 20, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 10 },
+ { "item": "magic_shop_clothes", "chance": 30, "repeat": [ 1, 2 ] }
+ ]
+ },
+ "vehicles": { "$": { "vehicle": "swivel_chair", "chance": 100, "status": 0 } },
+ "place_nested": [ { "chunks": [ "magic_door_graffiti_snippet" ], "x": 12, "y": 6 } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "update_mapgen_id": "magic_door_appear",
+ "method": "json",
+ "object": {
+ "place_terrain": [ { "ter": "t_carpet_green", "x": 12, "y": 6 } ],
+ "place_furniture": [ { "furn": "f_beaded_door", "x": 12, "y": 6 } ]
+ }
+ },
+ {
+ "type": "trap",
+ "id": "tr_magic_door",
+ "name": "magic door",
+ "color": "brown",
+ "symbol": "+",
+ "visibility": 99,
+ "avoidance": 99,
+ "difficulty": 99,
+ "action": "map_regen",
+ "map_regen": "magic_door_appear",
+ "benign": true
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "magic_door_graffiti_snippet",
+ "object": { "mapgensize": [ 1, 1 ], "place_graffiti": [ { "snippet": "magic_door_graffiti", "x": 0, "y": 0 } ] }
+ },
+ {
+ "type": "snippet",
+ "category": "magic_door_graffiti",
+ "text": [ "A circle of esoteric symbols etched into the metal wall, they draw your eye with their otherwordly shapes." ]
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/magic_cabin.json b/data/mods/Magical_Nights/worldgen/magic_cabin.json
new file mode 100644
index 000000000000..fccda2169aea
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/magic_cabin.json
@@ -0,0 +1,167 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_cabin",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ ".......spppppppppp9..9..",
+ "9.ppp..sp||o|o|o||......",
+ "..pbp.9sp| NNNNNx||o||.9",
+ "..ppp..ss+ |YDY|..",
+ "9.......||t ttG o..",
+ "....9..||||| B| h o..",
+ ".9....||@@B| B|III|4.",
+ "..|||||Y + B|||||..",
+ "..|Q + By| ||.",
+ "..o S||||||B Y hhho.",
+ "..|& + KKy|R G tGto.",
+ "%^||||| |B Y hhho.",
+ "%.UU|A| @@ + y||.",
+ "%...+Z|x@@D|y VVOVSF||%%",
+ "%.M.||||oo|||+||ooo||..%",
+ "%.......UU.p.s.p.......%",
+ "%............s..111111.%",
+ "%.........ssss9........%",
+ "%.........spbp..222222.%",
+ "%......ssssUUU.........%",
+ "%........9.....9333333.%",
+ "%..........9......9....%",
+ "%.....9.............9..%",
+ "%%%%%%%%%%%%%%%%%%%%%%%%"
+ ],
+ "place_nested": [
+ {
+ "chunks": [ [ "roof_6x6_garden_3", 25 ], [ "roof_6x6_greenhouse_1", 25 ], [ "roof_5x5_coop", 25 ], [ "roof_6x6_garden_2", 25 ] ],
+ "x": 2,
+ "y": 16
+ }
+ ],
+ "place_loot": [ { "item": "television", "x": 10, "y": 6, "chance": 100 }, { "item": "stepladder", "x": 21, "y": 15, "chance": 100 } ],
+ "terrain": {
+ ".": [ [ "t_grass", 5 ], [ "t_grass_long", 2 ] ],
+ "p": "t_grass_long",
+ "M": "t_grass_long",
+ "b": "t_grass_long",
+ "U": "t_grass_long",
+ "|": "t_wall_log",
+ "z": "t_floor_blue",
+ "+": "t_door_locked",
+ "o": "t_window_domestic",
+ "%": "t_privacy_fence",
+ "4": "t_gutter_downspout",
+ "^": "t_privacy_fencegate_c",
+ "s": "t_dirt",
+ "1": "t_shrub_strawberry",
+ "2": "t_shrub_blackberry",
+ "3": "t_shrub_huckleberry",
+ "9": [
+ "t_tree_blackjack",
+ "t_tree_walnut",
+ "t_tree_chestnut",
+ "t_tree_beech",
+ "t_tree_hazelnut",
+ "t_tree_cottonwood",
+ "t_tree",
+ "t_tree_elm",
+ "t_tree_dead",
+ "t_tree_apple",
+ "t_tree_pear",
+ "t_tree_cherry",
+ "t_tree_peach",
+ "t_tree_apricot",
+ "t_tree_plum",
+ "t_tree_mulberry",
+ "t_tree_elderberry",
+ "t_tree_pine",
+ "t_tree_birch",
+ "t_tree_willow",
+ "t_tree_maple",
+ "t_tree_hickory",
+ "t_tree_almond",
+ "t_tree_pecan"
+ ]
+ },
+ "furniture": {
+ "p": [ "f_datura", "f_bluebell", "f_mutpoppy", "f_dahlia", "f_flower_tulip", "f_chamomile", "f_flower_spurge", "f_lily" ],
+ "b": "f_birdbath",
+ "B": "f_bookcase",
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ],
+ "@": "f_bed",
+ "t": "f_table",
+ "Q": "f_shower",
+ "S": "f_sink",
+ "Y": "f_armchair",
+ "R": "f_fireplace",
+ "C": "f_counter",
+ "N": "f_sofa",
+ "D": "f_table",
+ "K": "f_wardrobe",
+ "x": "f_floor_lamp",
+ "G": "f_table",
+ "I": "f_desk",
+ "h": "f_chair",
+ "V": "f_counter",
+ "M": "f_rotary_clothesline",
+ "O": "f_oven",
+ "F": "f_fridge",
+ "U": "f_bench",
+ "A": "f_air_conditioner",
+ "Z": "f_water_heater"
+ },
+ "toilets": { "&": { } },
+ "items": {
+ "I": { "item": "office", "chance": 30 },
+ "Q": { "item": "shower", "chance": 30 },
+ "S": { "item": "softdrugs", "chance": 30 },
+ "@": { "item": "bed", "chance": 20, "repeat": [ 1, 2 ] },
+ "V": { "item": "kitchen_counters", "chance": 20, "repeat": [ 1, 2 ] },
+ "t": { "item": "dishes_dining", "chance": 30 },
+ "D": { "item": "magic_shop_wands", "chance": 30 },
+ "F": { "item": "fridge", "chance": 20, "repeat": [ 1, 2 ] },
+ "G": { "item": "magic_shop_potions", "chance": 30, "repeat": [ 1, 2 ] },
+ "O": { "item": "oven", "chance": 20, "repeat": [ 1, 2 ] },
+ "K": { "item": "allclothes", "chance": 20, "repeat": [ 1, 2 ] },
+ "B": { "item": "magic_shop_books", "chance": 20, "repeat": [ 1, 2 ] }
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_cabin_roof",
+ "object": {
+ "fill_ter": "t_shingle_flat_roof",
+ "rows": [
+ " ",
+ " |22222223 ",
+ " |.......32223 ",
+ " |...........3 ",
+ " ||...&.......3 ",
+ " ||............3 ",
+ " ||.............5 ",
+ " |222|..............3 ",
+ " |..................33 ",
+ " |=..................3 ",
+ " |.........Q.........3 ",
+ " |-|.................3 ",
+ " |................33 ",
+ " |...............33 ",
+ " |---------------3 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ],
+ "palettes": [ "roof_palette" ],
+ "terrain": { ".": "t_shingle_flat_roof" },
+ "furniture": { "Q": "f_chimney" }
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/magic_shop.json b/data/mods/Magical_Nights/worldgen/magic_shop.json
new file mode 100644
index 000000000000..657d5dbe76da
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/magic_shop.json
@@ -0,0 +1,235 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_shop",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "........ss..............",
+ ".....9..ss..p9pMMp9p....",
+ "........ss..............",
+ "..9....pssp||||||o||||||",
+ ".......pssp|<|BBBxBBBBB|",
+ "....9..pssp|+|B*J**J* B|",
+ ".9....||++|| *W**J* B|",
+ ".....|| ****** |",
+ "....||K t t N|",
+ "...||K t t tttt K||",
+ "..|| K|.",
+ "..| HH HH HH ##+##+#|.",
+ "..o #& S#LL|.",
+ "..|y CCCC?CC H|||o|||||.",
+ "..o a H|zzzzzzz%.",
+ "..|yPPPyPP H|z......%.",
+ "..||######+###|z......%.",
+ ".9.||BYx y@@oz......%.",
+ "....||B h +z......%.",
+ ".....||f III yoz......%.",
+ "..9..4||||o||||z......%.",
+ "........%pppMMpz9..b..%.",
+ ".9..9...^zzzzzzz....9.%.",
+ "........%%%%%%%%%%%%%%%."
+ ],
+ "place_nested": [ { "chunks": [ [ "roof_6x6_garden_3", 50 ], [ "roof_6x6_garden_4", 50 ] ], "x": 16, "y": 15 } ],
+ "terrain": {
+ ".": [ [ "t_grass", 5 ], [ "t_grass_long", 2 ], "t_dirt", "t_shrub" ],
+ "p": "t_grass_long",
+ "M": "t_grass_long",
+ "b": "t_grass_long",
+ "U": "t_grass_long",
+ "R": "t_grass_long",
+ "|": "t_rock_wall",
+ "z": "t_floor_blue",
+ "#": "t_wall_b",
+ "+": "t_door_red_c",
+ "o": "t_window_domestic",
+ "J": "t_carpet_green",
+ "W": "t_carpet_green",
+ "*": "t_carpet_green",
+ "%": "t_privacy_fence",
+ "<": "t_stairs_up",
+ "4": "t_gutter_downspout",
+ "^": "t_privacy_fencegate_c",
+ "s": "t_sidewalk",
+ "?": "t_console_broken",
+ "9": [
+ "t_tree_blackjack",
+ "t_tree_walnut",
+ "t_tree_chestnut",
+ "t_tree_beech",
+ "t_tree_hazelnut",
+ "t_tree_cottonwood",
+ "t_tree",
+ "t_tree_elm",
+ "t_tree_dead",
+ "t_tree_apple",
+ "t_tree_pear",
+ "t_tree_cherry",
+ "t_tree_peach",
+ "t_tree_apricot",
+ "t_tree_plum",
+ "t_tree_mulberry",
+ "t_tree_elderberry",
+ "t_tree_pine",
+ "t_tree_birch",
+ "t_tree_willow",
+ "t_tree_maple",
+ "t_tree_hickory",
+ "t_tree_almond",
+ "t_tree_pecan"
+ ]
+ },
+ "furniture": {
+ "p": [ "f_datura", "f_bluebell", "f_mutpoppy", "f_dahlia", "f_flower_tulip", "f_chamomile", "f_flower_spurge", "f_lily" ],
+ "b": "f_birdbath",
+ "B": "f_bookcase",
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ],
+ "f": "f_filing_cabinet",
+ "@": "f_sofa",
+ "Y": "f_armchair",
+ "x": "f_floor_lamp",
+ "N": "f_bigmirror",
+ "I": "f_desk",
+ "K": "f_wardrobe",
+ "M": "f_bench",
+ "L": "f_locker",
+ "h": "f_chair",
+ "J": "f_armchair",
+ "W": "f_table",
+ "C": "f_counter",
+ "a": "f_stool",
+ "t": "f_table",
+ "H": "f_displaycase",
+ "P": "f_glass_cabinet",
+ "S": "f_sink"
+ },
+ "toilets": { "&": { } },
+ "items": {
+ "I": { "item": "office", "chance": 30 },
+ "f": { "item": "office_paper", "chance": 30 },
+ "L": { "item": "cleaning", "chance": 30 },
+ "y": { "item": "trash", "chance": 20, "repeat": [ 2, 4 ] },
+ "B": { "item": "magic_shop_books", "chance": 20, "repeat": [ 1, 2 ] },
+ "K": { "item": "magic_shop_clothes", "chance": 20, "repeat": [ 1, 2 ] },
+ "H": { "item": "magic_shop_wands", "chance": 20, "repeat": [ 1, 2 ] },
+ "P": { "item": "magic_shop_potions", "chance": 20, "repeat": [ 1, 2 ] },
+ "t": { "item": "magic_shop_books", "chance": 20, "repeat": [ 1, 2 ] },
+ "S": { "item": "softdrugs", "chance": 20, "repeat": [ 1, 2 ] }
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_shop_2ndfloor",
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ " ",
+ " ",
+ " ",
+ " |o|##########",
+ " |>|4********#",
+ " |+||********#",
+ " ||oo||.y|********#",
+ " ||y.N.Y..|********#",
+ " ||B..N.t.R|********#",
+ " ||B...N.t.B|*******##",
+ " ||Y........xo*******# ",
+ " |y...hh.....+*******# ",
+ " oC..tttt....o*******# ",
+ " oC...hh....y|######## ",
+ " oC.........I| ",
+ " |CFCOCC...hI| ",
+ " ||%%%%%%+%%%| ",
+ " ||Q.S%....K| ",
+ " ||..+.@@..o ",
+ " ||&%.@@t.| ",
+ " |||ooo||| ",
+ " 4 ",
+ " ",
+ " "
+ ],
+ "terrain": {
+ ".": "t_floor",
+ " ": "t_open_air",
+ "*": "t_tile_flat_roof",
+ "o": "t_window_domestic",
+ "|": "t_rock_wall",
+ "%": "t_wall_b",
+ "+": "t_door_c",
+ ">": "t_stairs_down",
+ "#": "t_glass_railing",
+ "4": "t_gutter_downspout"
+ },
+ "toilets": { "&": { } },
+ "furniture": {
+ "@": "f_bed",
+ "t": "f_table",
+ "Q": "f_shower",
+ "S": "f_sink",
+ "B": "f_bookcase",
+ "Y": "f_armchair",
+ "R": "f_fireplace",
+ "C": "f_counter",
+ "N": "f_sofa",
+ "K": "f_wardrobe",
+ "x": "f_floor_lamp",
+ "I": "f_desk",
+ "h": "f_chair",
+ "O": "f_oven",
+ "F": "f_fridge",
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ]
+ },
+ "items": {
+ "I": { "item": "office", "chance": 30 },
+ "Q": { "item": "shower", "chance": 30 },
+ "S": { "item": "softdrugs", "chance": 30 },
+ "@": { "item": "bed", "chance": 20, "repeat": [ 1, 2 ] },
+ "C": { "item": "kitchen_counters", "chance": 20, "repeat": [ 1, 2 ] },
+ "t": { "item": "dishes_dining", "chance": 30 },
+ "F": { "item": "fridge", "chance": 20, "repeat": [ 1, 2 ] },
+ "O": { "item": "oven", "chance": 20, "repeat": [ 1, 2 ] },
+ "K": { "item": "allclothes", "chance": 20, "repeat": [ 1, 2 ] },
+ "B": { "item": "magic_shop_books", "chance": 20, "repeat": [ 1, 2 ] }
+ },
+ "place_npcs": [ { "class": "healer_priest", "x": 10, "y": 10 } ]
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "magic_shop_roof",
+ "object": {
+ "fill_ter": "t_flat_roof",
+ "rows": [
+ " ",
+ " ",
+ " ",
+ " |23 ",
+ " |.3 ",
+ " |.53 ",
+ " |2222|..3 ",
+ " ||.......3 ",
+ " ||........3 ",
+ " ||.........3 ",
+ " ||..........3 ",
+ " |..A...:....3 ",
+ " |...........3 ",
+ " |...........3 ",
+ " |.......&...3 ",
+ " |...........3 ",
+ " ||..........3 ",
+ " ||...X.....3 ",
+ " ||........3 ",
+ " ||.......3 ",
+ " |5------3 ",
+ " ",
+ " ",
+ " "
+ ],
+ "palettes": [ "roof_palette" ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/multitile_city_buildings.json b/data/mods/Magical_Nights/worldgen/multitile_city_buildings.json
new file mode 100644
index 000000000000..8b3ed8364426
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/multitile_city_buildings.json
@@ -0,0 +1,63 @@
+[
+ {
+ "type": "city_building",
+ "id": "magic_shop",
+ "locations": [ "land" ],
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "magic_shop_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "magic_shop_2ndfloor_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "magic_shop_roof_north" }
+ ]
+ },
+ {
+ "type": "city_building",
+ "id": "wizard_tower_1",
+ "locations": [ "land" ],
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "wizardtower1_ground_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "wizardtower1_living_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "wizardtower1_golems_north" },
+ { "point": [ 0, 0, 3 ], "overmap": "wizardtower1_study_north" },
+ { "point": [ 0, 0, 4 ], "overmap": "wizardtower1_roof_north" }
+ ]
+ },
+ {
+ "type": "city_building",
+ "id": "wizard_tower_2",
+ "locations": [ "land" ],
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "wizardtower2_ground_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "wizardtower2_stairs1_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "wizardtower2_stairs2_north" },
+ { "point": [ 0, 0, 3 ], "overmap": "wizardtower2_study_north" },
+ { "point": [ 0, 0, 4 ], "overmap": "wizardtower2_roof_north" }
+ ]
+ },
+ {
+ "type": "city_building",
+ "id": "house_detatched5",
+ "locations": [ "land" ],
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "house_detatched5_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "house_detatched5_roof_north" },
+ { "point": [ 0, 0, -1 ], "overmap": "magic_basement_north" }
+ ]
+ },
+ {
+ "type": "city_building",
+ "id": "magic_academy",
+ "locations": [ "land" ],
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "magic_academy_ground_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "magic_academy_2nd_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "magic_academy_3rd_north" },
+ { "point": [ 0, 0, 3 ], "overmap": "magic_academy_4th_north" },
+ { "point": [ 0, 0, 4 ], "overmap": "magic_academy_5th_north" },
+ { "point": [ 0, 0, 5 ], "overmap": "magic_academy_6th_north" },
+ { "point": [ 0, 0, 6 ], "overmap": "magic_academy_7th_north" },
+ { "point": [ 0, 0, 7 ], "overmap": "magic_academy_8th_north" },
+ { "point": [ 0, 0, 8 ], "overmap": "magic_academy_roof_north" },
+ { "point": [ 0, 0, -1 ], "overmap": "magic_academy_basement_north" }
+ ]
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/nested_mapgen.json b/data/mods/Magical_Nights/worldgen/nested_mapgen.json
new file mode 100644
index 000000000000..cc50d122b24c
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/nested_mapgen.json
@@ -0,0 +1,270 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "room_6x6_guns_N",
+ "weight": 1000,
+ "//": "a nested map for magiclysm basements. ID allows it to spawn wherever 6x6 gun basements spawn at the same weight.",
+ "object": {
+ "mapgensize": [ 6, 6 ],
+ "rotation": [ 0, 3 ],
+ "rows": [
+ "|||+||",
+ "|RR ?|",
+ "|E &|",
+ "|T h |",
+ "|Y 0!|",
+ "||||||"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "furniture": { "0": "f_magic_bench", "!": "f_alembic", "&": "f_magic_circle", "?": "f_rack_wood" },
+ "items": {
+ "E": { "item": "enchanted_small_items", "chance": 5 },
+ "R": [
+ { "item": "magic_shop_books", "chance": 40, "repeat": [ 0, 2 ] },
+ { "item": "spellbook_loot_2", "chance": 2 },
+ { "item": "academy_lore", "chance": 50 }
+ ],
+ "?": [
+ { "item": "alchemy_items", "chance": 35, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_potions", "chance": 30 },
+ { "item": "magic_tools_and_loot", "chance": 20 },
+ { "item": "magic_shop_wands", "chance": 5 }
+ ],
+ "0": [
+ { "item": "enchanted_small_items", "chance": 5, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 1 },
+ { "item": "enchanted_misc", "chance": 1 },
+ { "item": "classless_items", "chance": 30 }
+ ]
+ },
+ "nested": {
+ "0": {
+ "chunks": [
+ [ "druid_loot_spawn", 40 ],
+ [ "stormshaper_loot_spawn", 40 ],
+ [ "magus_loot_spawn", 40 ],
+ [ "animist_loot_spawn", 40 ],
+ [ "kelvinist_loot_spawn", 40 ],
+ [ "technomancer_loot_spawn", 40 ],
+ [ "earthshaper_loot_spawn", 40 ],
+ [ "biomancer_loot_spawn", 40 ]
+ ]
+ }
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "room_6x6_guns_S",
+ "weight": 1000,
+ "//": "a nested map for magiclysm basements. ID allows it to spawn wherever 6x6 gun basements spawn at the same weight.",
+ "object": {
+ "mapgensize": [ 6, 6 ],
+ "rotation": [ 0, 3 ],
+ "rows": [
+ "||||||",
+ "|yT0!|",
+ "|H h |",
+ "|H &|",
+ "|RR ?|",
+ "|||+||"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "furniture": { "0": "f_magic_bench", "!": "f_alembic", "&": "f_magic_circle", "?": "f_rack_wood" },
+ "items": {
+ "H": { "item": "enchanted_small_items", "chance": 5 },
+ "R": [
+ { "item": "magic_shop_books", "chance": 40 },
+ { "item": "spellbook_loot_2", "chance": 2 },
+ { "item": "academy_lore", "chance": 50 }
+ ],
+ "?": [
+ { "item": "alchemy_items", "chance": 35, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_potions", "chance": 30 },
+ { "item": "magic_tools_and_loot", "chance": 20 },
+ { "item": "magic_shop_wands", "chance": 5 }
+ ],
+ "0": [
+ { "item": "enchanted_small_items", "chance": 5, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 1 },
+ { "item": "enchanted_misc", "chance": 1 },
+ { "item": "classless_items", "chance": 30 }
+ ]
+ },
+ "nested": {
+ "0": {
+ "chunks": [
+ [ "druid_loot_spawn", 40 ],
+ [ "stormshaper_loot_spawn", 40 ],
+ [ "magus_loot_spawn", 40 ],
+ [ "animist_loot_spawn", 40 ],
+ [ "kelvinist_loot_spawn", 40 ],
+ [ "technomancer_loot_spawn", 40 ],
+ [ "earthshaper_loot_spawn", 40 ],
+ [ "biomancer_loot_spawn", 40 ]
+ ]
+ }
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "room_6x6_guns_E",
+ "weight": 1000,
+ "//": "a nested map for magiclysm basements. ID allows it to spawn wherever 6x6 gun basements spawn at the same weight.",
+ "object": {
+ "mapgensize": [ 6, 6 ],
+ "rotation": [ 0, 3 ],
+ "rows": [
+ "||||||",
+ "|RR&?|",
+ "|E +",
+ "|T h |",
+ "|Yy0!|",
+ "||||||"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "furniture": { "0": "f_magic_bench", "!": "f_alembic", "&": "f_magic_circle", "?": "f_rack_wood" },
+ "items": {
+ "E": { "item": "enchanted_small_items", "chance": 5 },
+ "R": [
+ { "item": "magic_shop_books", "chance": 40 },
+ { "item": "spellbook_loot_2", "chance": 2 },
+ { "item": "academy_lore", "chance": 50 }
+ ],
+ "?": [
+ { "item": "alchemy_items", "chance": 35, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_potions", "chance": 30 },
+ { "item": "magic_tools_and_loot", "chance": 20 },
+ { "item": "magic_shop_wands", "chance": 5 }
+ ],
+ "0": [
+ { "item": "enchanted_small_items", "chance": 5, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 1 },
+ { "item": "enchanted_misc", "chance": 1 },
+ { "item": "classless_items", "chance": 30 }
+ ]
+ },
+ "nested": {
+ "0": {
+ "chunks": [
+ [ "druid_loot_spawn", 40 ],
+ [ "stormshaper_loot_spawn", 40 ],
+ [ "magus_loot_spawn", 40 ],
+ [ "animist_loot_spawn", 40 ],
+ [ "kelvinist_loot_spawn", 40 ],
+ [ "technomancer_loot_spawn", 40 ],
+ [ "earthshaper_loot_spawn", 40 ],
+ [ "biomancer_loot_spawn", 40 ]
+ ]
+ }
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "room_6x6_guns_W",
+ "weight": 1000,
+ "//": "a nested map for magiclysm basements. ID allows it to spawn wherever 6x6 gun basements spawn at the same weight.",
+ "object": {
+ "mapgensize": [ 6, 6 ],
+ "rotation": [ 0, 3 ],
+ "rows": [
+ "||||||",
+ "|RRT?|",
+ "+ &|",
+ "| h0|",
+ "|HH !|",
+ "||||||"
+ ],
+ "palettes": [ "standard_domestic_palette" ],
+ "furniture": { "0": "f_magic_bench", "!": "f_alembic", "&": "f_magic_circle", "?": "f_rack_wood" },
+ "items": {
+ "H": { "item": "enchanted_small_items", "chance": 5 },
+ "R": [
+ { "item": "magic_shop_books", "chance": 40 },
+ { "item": "spellbook_loot_2", "chance": 2 },
+ { "item": "academy_lore", "chance": 50 }
+ ],
+ "?": [
+ { "item": "alchemy_items", "chance": 35, "repeat": [ 1, 2 ] },
+ { "item": "magic_shop_potions", "chance": 30 },
+ { "item": "magic_tools_and_loot", "chance": 20 },
+ { "item": "magic_shop_wands", "chance": 5 }
+ ],
+ "0": [
+ { "item": "enchanted_small_items", "chance": 5, "repeat": [ 1, 2 ] },
+ { "item": "enchanted_combat_items", "chance": 1 },
+ { "item": "enchanted_misc", "chance": 1 },
+ { "item": "classless_items", "chance": 30 }
+ ]
+ },
+ "nested": {
+ "0": {
+ "chunks": [
+ [ "druid_loot_spawn", 40 ],
+ [ "stormshaper_loot_spawn", 40 ],
+ [ "magus_loot_spawn", 40 ],
+ [ "animist_loot_spawn", 40 ],
+ [ "kelvinist_loot_spawn", 40 ],
+ [ "technomancer_loot_spawn", 40 ],
+ [ "earthshaper_loot_spawn", 40 ],
+ [ "biomancer_loot_spawn", 40 ]
+ ]
+ }
+ }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "druid_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "druid_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "biomancer_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "biomancer_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "earthshaper_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "earthshaper_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "technomancer_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "technomancer_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "kelvinist_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "kelvinist_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "animist_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "animist_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "magus_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "magus_items", "x": 0, "y": 0, "chance": 70 } ] }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "stormshaper_loot_spawn",
+ "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "stormshaper_items", "x": 0, "y": 0, "chance": 70 } ] }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/orc_camp.json b/data/mods/Magical_Nights/worldgen/orc_camp.json
new file mode 100755
index 000000000000..f199b0b6a627
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/orc_camp.json
@@ -0,0 +1,101 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "orc_camp",
+ "weight": 100,
+ "object": {
+ "fill_ter": "t_null",
+ "rows": [
+ "###########HH###########",
+ "#**********************#",
+ "#*----............----*#",
+ "#*-QG-............-GQ-*#",
+ "#*-GG-............-GG-*#",
+ "#*--=-............-=--*#",
+ "#*.................*..*#",
+ "#*....................I#",
+ "#*%%.....------.......*#",
+ "#*%......-Bold-.......I#",
+ "#*.......WrrrrW.......*#",
+ "H*.......WrrrrW.......*H",
+ "H*.......-rrrr-.......*H",
+ "#*.......--++--.......*#",
+ "#**...................P#",
+ "#**...................*#",
+ "#*....................P#",
+ "#*....................*#",
+ "#*--=-...-=--=-*..-=--*#",
+ "#*-GG-...-GGGG-...-GG-*#",
+ "#*-QG-...-RSSR-...-GQ-*#",
+ "#*----...------...----*#",
+ "#**********************#",
+ "###########HH###########"
+ ],
+ "place_monster": [
+ { "monster": "mon_orc_warrior", "x": [ 3, 20 ], "y": [ 6, 16 ], "repeat": 2 },
+ { "monster": "mon_orc_archer", "x": [ 3, 20 ], "y": [ 6, 16 ], "repeat": 2 },
+ { "monster": "mon_goblin_chieftain", "x": [ 10, 13 ], "y": [ 10, 12 ] }
+ ],
+ "items": {
+ "%": [
+ { "item": "preserved_food", "chance": 75, "repeat": [ 2, 4 ] },
+ { "item": "stash_food", "chance": 66, "repeat": [ 2, 4 ] }
+ ],
+ "B": { "item": "bed", "chance": 80 },
+ "R": [
+ { "item": "camping", "chance": 50, "repeat": [ 1, 3 ] },
+ { "item": "gear_survival", "chance": 30, "repeat": [ 1, 3 ] },
+ { "item": "tools_home", "chance": 50, "repeat": [ 1, 3 ] },
+ { "item": "hand_tools", "chance": 50, "repeat": [ 1, 3 ] }
+ ],
+ "S": [
+ { "item": "supplies_hardware", "chance": 66, "repeat": [ 2, 4 ] },
+ { "item": "supplies_metal", "chance": 50, "repeat": [ 2, 4 ] },
+ { "item": "tailoring_fabric", "chance": 33, "repeat": [ 2, 4 ] }
+ ],
+ "o": [
+ { "item": "enchanted_rings_uncommon", "chance": 100 },
+ { "item": "magic_tools_and_loot", "chance": 95, "repeat": [ 2, 3 ] }
+ ],
+ "d": [ { "item": "spell_scroll_tier_1", "chance": 66, "repeat": [ 2, 3 ] }, { "item": "spellbook_tier_1", "chance": 10 } ]
+ },
+ "furniture": {
+ "%": "f_crate_o",
+ "Q": "f_makeshift_bed",
+ "I": "f_target",
+ "P": "f_punching_bag",
+ "B": "f_bed",
+ "R": [ "f_rack", "f_utility_shelf" ],
+ "S": "f_rack_wood",
+ "o": "f_safe_l",
+ "d": "f_desk",
+ "l": "f_stool",
+ "z": "f_brazier"
+ },
+ "terrain": {
+ "+": [ [ "t_door_c", 3 ], "t_door_locked" ],
+ "#": "t_junk_wall",
+ "=": "t_door_c",
+ "-": "t_wall_log",
+ "%": "t_region_groundcover",
+ "*": [ [ "t_region_groundcover", 15 ], "t_region_shrub" ],
+ ".": [ [ "t_region_groundcover", 4 ], "t_region_groundcover_forest" ],
+ "G": "t_floor",
+ "H": "t_gate_metal_c",
+ "I": "t_region_groundcover",
+ "P": "t_region_groundcover",
+ "Q": "t_floor",
+ "R": "t_floor",
+ "S": "t_floor",
+ "W": "t_window",
+ "o": "t_rock_floor",
+ "r": "t_rock_floor",
+ "d": "t_rock_floor",
+ "~": [ [ "t_region_groundcover_barren", 3 ], "t_region_groundcover" ],
+ "B": "t_rock_floor",
+ "l": "t_rock_floor"
+ }
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/overmap_specials.json b/data/mods/Magical_Nights/worldgen/overmap_specials.json
new file mode 100644
index 000000000000..8fa4d0595bac
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/overmap_specials.json
@@ -0,0 +1,203 @@
+[
+ {
+ "type": "overmap_special",
+ "id": "magic_cabin",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "magic_cabin_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "magic_cabin_roof_north" }
+ ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 5 ],
+ "flags": [ "ELECTRIC_GRID" ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "demon_spider_lair",
+ "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "demon_spider_lair_north" } ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 2 ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "black_dragon_lair",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "black_dragon_lair_z-0_NW_north" },
+ { "point": [ 1, 0, 0 ], "overmap": "black_dragon_lair_z-0_NE_north" },
+ { "point": [ 0, 1, 0 ], "overmap": "black_dragon_lair_z-0_SW_north" },
+ { "point": [ 1, 1, 0 ], "overmap": "black_dragon_lair_z-0_SE_north" },
+ { "point": [ 0, 0, -1 ], "overmap": "black_dragon_lair_z-1_NW_north" },
+ { "point": [ 1, 0, -1 ], "overmap": "black_dragon_lair_z-1_NE_north" },
+ { "point": [ 0, 1, -1 ], "overmap": "black_dragon_lair_z-1_SW_north" },
+ { "point": [ 1, 1, -1 ], "overmap": "black_dragon_lair_z-1_SE_north" },
+ { "point": [ 0, 0, -2 ], "overmap": "black_dragon_lair_z-2_NW_north" },
+ { "point": [ 1, 0, -2 ], "overmap": "black_dragon_lair_z-2_NE_north" },
+ { "point": [ 0, 1, -2 ], "overmap": "black_dragon_lair_z-2_SW_north" },
+ { "point": [ 1, 1, -2 ], "overmap": "black_dragon_lair_z-2_SE_north" },
+ { "point": [ 0, 0, -3 ], "overmap": "black_dragon_lair_z-3_NW_north" },
+ { "point": [ 1, 0, -3 ], "overmap": "black_dragon_lair_z-3_NE_north" },
+ { "point": [ 0, 1, -3 ], "overmap": "black_dragon_lair_z-3_SW_north" },
+ { "point": [ 1, 1, -3 ], "overmap": "black_dragon_lair_z-3_SE_north" },
+ { "point": [ 0, 0, -4 ], "overmap": "black_dragon_lair_z-4_NW_north" },
+ { "point": [ 1, 0, -4 ], "overmap": "black_dragon_lair_z-4_NE_north" },
+ { "point": [ 0, 1, -4 ], "overmap": "black_dragon_lair_z-4_SW_north" },
+ { "point": [ 1, 1, -4 ], "overmap": "black_dragon_lair_z-4_SE_north" }
+ ],
+ "locations": [ "forest_with_swamp" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 1 ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "Lake Retreat",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 2, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 3, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 4, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 5, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 6, 0, 0 ], "overmap": "lake_surface" },
+ { "point": [ 0, 1, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 1, 0 ], "overmap": "lake_surface" },
+ { "point": [ 2, 1, 0 ], "overmap": "lake_shore" },
+ { "point": [ 3, 1, 0 ], "overmap": "lake_shore" },
+ { "point": [ 4, 1, 0 ], "overmap": "lake_shore" },
+ { "point": [ 5, 1, 0 ], "overmap": "lake_shore" },
+ { "point": [ 6, 1, 0 ], "overmap": "lake_surface" },
+ { "point": [ 0, 2, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 2, 0 ], "overmap": "lake_shore" },
+ { "point": [ 2, 2, 0 ], "overmap": "lake_retreat_boathouse_north" },
+ { "point": [ 2, 2, 1 ], "overmap": "lake_retreat_boathouse_roof_north" },
+ { "point": [ 3, 2, 0 ], "overmap": "forest_thick" },
+ { "point": [ 4, 2, 0 ], "overmap": "forest_thick" },
+ { "point": [ 5, 2, 0 ], "overmap": "lake_shore" },
+ { "point": [ 6, 2, 0 ], "overmap": "lake_surface" },
+ { "point": [ 0, 3, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 3, 0 ], "overmap": "lake_shore" },
+ { "point": [ 2, 3, 0 ], "overmap": "forest" },
+ { "point": [ 3, 3, 0 ], "overmap": "lake_retreat_ground_north" },
+ { "point": [ 3, 3, 1 ], "overmap": "lake_retreat_z1_north" },
+ { "point": [ 3, 3, 2 ], "overmap": "lake_retreat_z2_north" },
+ { "point": [ 3, 3, 3 ], "overmap": "lake_retreat_z3_north" },
+ { "point": [ 3, 3, 4 ], "overmap": "lake_retreat_z4_north" },
+ { "point": [ 4, 3, 0 ], "overmap": "forest" },
+ { "point": [ 5, 3, 0 ], "overmap": "lake_shore" },
+ { "point": [ 6, 3, 0 ], "overmap": "lake_surface" },
+ { "point": [ 0, 4, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 4, 0 ], "overmap": "lake_shore" },
+ { "point": [ 2, 4, 0 ], "overmap": "forest_thick" },
+ { "point": [ 3, 4, 0 ], "overmap": "forest_thick" },
+ { "point": [ 4, 4, 0 ], "overmap": "lake_shore" },
+ { "point": [ 5, 4, 0 ], "overmap": "lake_shore" },
+ { "point": [ 6, 4, 0 ], "overmap": "lake_surface" },
+ { "point": [ 0, 5, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 5, 0 ], "overmap": "lake_shore" },
+ { "point": [ 2, 5, 0 ], "overmap": "lake_shore" },
+ { "point": [ 3, 5, 0 ], "overmap": "lake_shore" },
+ { "point": [ 4, 5, 0 ], "overmap": "lake_shore" },
+ { "point": [ 5, 5, 0 ], "overmap": "lake_surface" },
+ { "point": [ 6, 5, 0 ], "overmap": "lake_surface" },
+ { "point": [ 0, 6, 0 ], "overmap": "lake_surface" },
+ { "point": [ 1, 6, 0 ], "overmap": "lake_surface" },
+ { "point": [ 2, 6, 0 ], "overmap": "lake_surface" },
+ { "point": [ 3, 6, 0 ], "overmap": "lake_surface" },
+ { "point": [ 4, 6, 0 ], "overmap": "lake_surface" },
+ { "point": [ 5, 6, 0 ], "overmap": "lake_surface" },
+ { "point": [ 6, 6, 0 ], "overmap": "lake_surface" }
+ ],
+ "locations": [ "lake_surface" ],
+ "city_distance": [ 3, -1 ],
+ "city_sizes": [ 4, 12 ],
+ "occurrences": [ 0, 1 ],
+ "flags": [ "CLASSIC", "LAKE" ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "goblin_camp",
+ "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "goblin_camp_north" } ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 5 ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "orc_camp",
+ "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "orc_camp_north" } ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 2 ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "forest_tomb",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "forest_tomb_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "forest_tomb_roof_north" },
+ { "point": [ 0, 0, -1 ], "overmap": "forest_tomb_bottom_north" }
+ ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 1 ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "wizardtower1",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "wizardtower1_ground_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "wizardtower1_living_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "wizardtower1_golems_north" },
+ { "point": [ 0, 0, 3 ], "overmap": "wizardtower1_study_north" },
+ { "point": [ 0, 0, 4 ], "overmap": "wizardtower1_roof_north" }
+ ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 5 ],
+ "flags": [ "ELECTRIC_GRID" ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "wizardtower2",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "wizardtower2_ground_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "wizardtower2_stairs1_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "wizardtower2_stairs2_north" },
+ { "point": [ 0, 0, 3 ], "overmap": "wizardtower2_study_north" },
+ { "point": [ 0, 0, 4 ], "overmap": "wizardtower2_roof_north" }
+ ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 5 ],
+ "flags": [ "ELECTRIC_GRID" ]
+ },
+ {
+ "type": "overmap_special",
+ "id": "forest_tomb",
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "magic_academy_ground_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "magic_academy_2nd_north" },
+ { "point": [ 0, 0, 2 ], "overmap": "magic_academy_3rd_north" },
+ { "point": [ 0, 0, 3 ], "overmap": "magic_academy_4th_north" },
+ { "point": [ 0, 0, 4 ], "overmap": "magic_academy_5th_north" },
+ { "point": [ 0, 0, 5 ], "overmap": "magic_academy_6th_north" },
+ { "point": [ 0, 0, 6 ], "overmap": "magic_academy_7th_north" },
+ { "point": [ 0, 0, 7 ], "overmap": "magic_academy_8th_north" },
+ { "point": [ 0, 0, 8 ], "overmap": "magic_academy_roof_north" },
+ { "point": [ 0, 0, -1 ], "overmap": "magic_academy_basement_north" }
+ ],
+ "locations": [ "wilderness" ],
+ "city_distance": [ 20, -1 ],
+ "city_sizes": [ 0, 20 ],
+ "occurrences": [ 0, 1 ],
+ "flags": [ "ELECTRIC_GRID" ]
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/overmap_terrain.json b/data/mods/Magical_Nights/worldgen/overmap_terrain.json
new file mode 100644
index 000000000000..3ccea999617d
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/overmap_terrain.json
@@ -0,0 +1,483 @@
+[
+ {
+ "type": "overmap_terrain",
+ "id": "magic_shop",
+ "name": "magic shop",
+ "sym": "M",
+ "color": "red",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2,
+ "flags": [ "SIDEWALK" ]
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_shop_2ndfloor",
+ "name": "magic shop",
+ "sym": "M",
+ "color": "red",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_shop_roof",
+ "name": "magic shop roof",
+ "sym": "M",
+ "color": "red",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_cabin",
+ "name": "cabin",
+ "sym": "F",
+ "color": "green",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_cabin_roof",
+ "name": "cabin",
+ "sym": "F",
+ "color": "green",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "demon_spider_lair",
+ "name": "Demon Spider Nest",
+ "sym": "F",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "used_bookstore",
+ "name": "used bookstore",
+ "sym": "B",
+ "color": "white",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 1,
+ "flags": [ "SIDEWALK" ]
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "used_bookstore_roof",
+ "name": "used bookstore",
+ "sym": "B",
+ "color": "white",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 1
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_basement",
+ "copy-from": "generic_city_house_basement"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-0_NW",
+ "name": "Black Dragon Lair",
+ "sym": "F",
+ "color": "cyan",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-0_NE",
+ "name": "Black Dragon Lair",
+ "sym": "F",
+ "color": "cyan",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-0_SE",
+ "name": "Black Dragon Lair",
+ "sym": "F",
+ "color": "cyan",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-0_SW",
+ "name": "Black Dragon Lair",
+ "sym": "F",
+ "color": "cyan",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-1_NW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-1_NE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-1_SE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-1_SW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-2_NW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-2_NE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-2_SE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-2_SW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-3_NW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-3_NE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-3_SE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-3_SW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-4_NW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-4_NE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-4_SE",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "black_dragon_lair_z-4_SW",
+ "name": "Black Dragon Lair",
+ "sym": "%",
+ "color": "light_gray",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_ground",
+ "name": "Lake Retreat",
+ "sym": "F",
+ "color": "green",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_z1",
+ "name": "Lake Retreat",
+ "sym": ".",
+ "color": "blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_z2",
+ "name": "Lake Retreat",
+ "sym": ".",
+ "color": "blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_z3",
+ "name": "Lake Retreat",
+ "sym": ".",
+ "color": "blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_z4",
+ "name": "Lake Retreat",
+ "sym": ".",
+ "color": "blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_boathouse",
+ "name": "Lake Retreat Boathouse",
+ "sym": "#",
+ "color": "light_blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "lake_retreat_boathouse_roof",
+ "name": "Lake Retreat Boathouse",
+ "sym": ".",
+ "color": "blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower1_ground",
+ "copy-from": "generic_city_building",
+ "sym": "W",
+ "color": "light_blue",
+ "name": "wizard tower"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower1_living",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower1_golems",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower1_study",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower1_roof",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower2_ground",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower2_stairs1",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower2_stairs2",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower2_study",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "wizardtower2_roof",
+ "copy-from": "wizardtower1_ground"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "forest_tomb",
+ "name": "Forest Tomb",
+ "sym": "F",
+ "color": "brown",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "forest_tomb_roof",
+ "copy-from": "forest_tomb"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "forest_tomb_bottom",
+ "copy-from": "forest_tomb"
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_ground",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "see_cost": 5,
+ "mondensity": 2,
+ "flags": [ "SIDEWALK" ]
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_2nd",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_3rd",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_4th",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_5th",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_6th",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_7th",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_8th",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_basement",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "mondensity": 2,
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "magic_academy_roof",
+ "name": "magic academy",
+ "sym": "#",
+ "color": "light_blue",
+ "see_cost": 5
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "goblin_camp",
+ "name": "Goblin Camp",
+ "sym": "G",
+ "color": "green",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2
+ },
+ {
+ "type": "overmap_terrain",
+ "id": "orc_camp",
+ "name": "Orc Camp",
+ "sym": "O",
+ "color": "green",
+ "see_cost": 5,
+ "extras": "build",
+ "mondensity": 2
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/regional_overlay.json b/data/mods/Magical_Nights/worldgen/regional_overlay.json
new file mode 100644
index 000000000000..d0cfa67f5d76
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/regional_overlay.json
@@ -0,0 +1,8 @@
+[
+ {
+ "type": "region_overlay",
+ "regions": [ "all" ],
+ "city": { "shops": { "used_bookstore": 225 } },
+ "field_coverage": { "other": { "f_boulder_large": 0.98, "f_glow_boulder": 0.02 } }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/used_bookstore.json b/data/mods/Magical_Nights/worldgen/used_bookstore.json
new file mode 100644
index 000000000000..f04a7e33bc44
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/used_bookstore.json
@@ -0,0 +1,95 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "used_bookstore",
+ "object": {
+ "rows": [
+ ",.................******",
+ ",#WWW#+###WWW##W##******",
+ ",W cC N cc NN N#******",
+ ",W cC N TT NN N#******",
+ ",W CCC N cc NN N#******",
+ ",# N#******",
+ ",#N NNN NNN N#******",
+ ",#NNN NNNN N N#******",
+ ",#NNN NN$$$$D$#W##******",
+ ",W $M $#d********",
+ ",W NNN$MO $#d********",
+ ",#N ###$MMMM$#d********",
+ ",#N +s&$$$$$$#*********",
+ ",##############********,",
+ ",**********************,",
+ ",**********************,",
+ ",**********************,",
+ ",**********************,",
+ ",**********************,",
+ ",**********************,",
+ ",**********************,",
+ ",,,,,,,,,,,,,,,,,,,,,,,,",
+ ",,,,,,,,,,,,,,,,,,,,,,,,",
+ ",,,,,,,,,,,,,,,,,,,,,,,,"
+ ],
+ "place_vehicles": [ { "vehicle": "car", "x": 4, "y": 17, "chance": 100, "fuel": 20, "status": 33, "rotation": 180 } ],
+ "fill_ter": "t_carpet_yellow",
+ "terrain": {
+ ".": "t_sidewalk",
+ "W": "t_window_domestic",
+ "+": "t_door_white_c",
+ "$": "t_rock_wall",
+ "#": "t_wall_w",
+ "D": "t_door_metal_c",
+ "*": "t_pavement",
+ ",": [ "t_dirt", [ "t_grass", 4 ] ]
+ },
+ "furniture": {
+ "c": "f_chair",
+ "N": "f_bookcase",
+ "M": "f_bookcase",
+ "T": "f_table",
+ "s": "f_sink",
+ "O": "f_magic_circle",
+ "d": "f_dumpster",
+ "C": "f_counter"
+ },
+ "monster": { "O": { "monster": "mon_krabgek", "chance": 100 }, "z": { "monster": "mon_krabgek", "chance": 33 } },
+ "toilets": { "&": { } },
+ "items": { "M": { "item": "spellbook_loot_1", "chance": 60 }, "N": { "item": "novels", "chance": 60, "repeat": [ 1, 3 ] } }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "used_bookstore_roof",
+ "object": {
+ "fill_ter": "t_flat_roof",
+ "rows": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " |2222222 ",
+ " |......5#2223 ",
+ " |....&......3 ",
+ " |...........3 ",
+ " |...........3 ",
+ " |...........52223 ",
+ " |...............3 ",
+ " |...............3 ",
+ " |......A........3 ",
+ " |...............3 ",
+ " |...............3 ",
+ " |...............3 ",
+ " 52222222222222225 ",
+ " "
+ ],
+ "palettes": [ "roof_palette" ]
+ }
+ }
+]
diff --git a/data/mods/Magical_Nights/worldgen/wizard-towers.json b/data/mods/Magical_Nights/worldgen/wizard-towers.json
new file mode 100644
index 000000000000..fb35cda16f02
--- /dev/null
+++ b/data/mods/Magical_Nights/worldgen/wizard-towers.json
@@ -0,0 +1,189 @@
+[
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": [ [ "wizardtower1_ground", "wizardtower1_living", "wizardtower1_golems", "wizardtower1_study", "wizardtower1_roof" ] ],
+ "weight": 100,
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "!!!!!!!!!!!!!!!!!!!#####...................;;;;;........................................................................",
+ "!,,,,,,,,,,,,,,,,,,[[[[#...................;;;;;........................................................................",
+ "!,^,,,,,,######,,,,[[[[#.........#wwww#....;;;;;.........!!!!!!.........................................................",
+ "!,,,,,,###EBB|###,,[[[,!.......###EBBE###..............!!!!!!!!!!.......................................................",
+ "!,,,,#w#aa BB|BB#w#[[[,!.....###aa BB dd###..........!!!!!!!!!!!!!!.....................................................",
+ "!,,,##Ad | ##[[,!....##bb Adb##........!!!!!!!!!!!!!!!!....................................................",
+ "!,,,w bbb|aEb #[[,!....#b b#........!!!!!###ww#!!!!!.............#wwww#..................!!!!!!.........",
+ "!,,##||||+||||||||+##[,!...##||||||HH ||+||##......!!!!!##|V ##!!!!!...........##mm ##................!!!!!!!!........",
+ "!,,#< =[,!...#> <|||+|a uuw......!!!!##>|V 8##!!!!..........##mh F##..............!!!!!!!!!!.......",
+ "!,##< hTTh hhh##!!..##> | uu##....!!!!## |V 08##!!!!........## y c c##............!!!!!!!!!!!!......",
+ "!##|||+| hTTh 123cw,,.;w||||| |& ||#....!!!!#U |V mw!!!!........w 9cL w............!!!!!!!!!!!!......",
+ ",#WD|& | hTTh ow,,.;wH A|A ## |CsC +t#....!!!!#U |## hmw!!!!........w 9##cc w............!!!!!!!!!!!!......",
+ ",# + | hTTh 5w,,.;wH b||| ##+||||+||#....!!!!##M#### mw!!!!........wd 9## w............!!!!!!!!!!!!......",
+ ",#fx|st| 4w,,.;wH + |u t| U#....!!!!#0 # mw!!!!........wdA 99 w............!!!!!!!!!!!!......",
+ ",######## &F##,,.;##H A| |u | U##....!!!!##0 # 0##!!!!........## O ##............!!!!!!!!!!!!......",
+ ",]UUU& + |67| ||#,,,.;;#HHHbb| |u CsC|cc#......!!!!##0 # <##!!!!..........## >##..............!!!!!!!!!!.......",
+ ",] # |||| #,,,.;;##|||||+||+|||||##......!!!!!##0 M ##!!!!!...........## $ ##................!!!!!!!!........",
+ ",] # ||HHHH w,,,.;;;#E + Adw;.......!!!!!######!!!!!.............#wwww#..................!!!!!!.........",
+ ",] # + #,,,.;;;##E|b d##;.......!!!!!!!!!!!!!!!!....................................................",
+ ",] ##|+|b b#,,,.;;;;###b BB #w#;;........!!!!!!!!!!!!!!.....................................................",
+ ",] # |H bw,,,.;;;;;;###EBBE###;;;;..........!!!!!!!!!!.......................................................",
+ ",] -# |H r#,,,.;;;;;;;;#wwww#;;;;;;............!!!!!!.........................................................",
+ ",]MMMMMM]# Y|H A##,,,........;;;;;;;;;;;;;...........................................................................",
+ ",*______-#=##ww#ww##,,,,.........;;;;;;;;;;;............................................................................"
+ ],
+ "palettes": [ "wizardtower1_palette" ],
+ "terrain": { ",": [ [ "t_region_groundcover_forest", 5 ], "t_region_shrub", "t_region_tree" ] }
+ }
+ },
+ {
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": [ [ "wizardtower2_ground", "wizardtower2_stairs1", "wizardtower2_stairs2", "wizardtower2_study", "wizardtower2_roof" ] ],
+ "weight": 100,
+ "object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ ",,,,,,,,,,,,,,,[[,,,,,,,................................................................................................",
+ ",,,,,,,,,,,,,,^[[,,,,,,,................................................................................................",
+ ",,,,,,,[[[[[[[[[[,,,,,,,................................................................................................",
+ ",,,,,,,[[[[[[[[[[,,,,,,,................................................................................................",
+ ",,,,,*#==#w#w#w#w#,,,,,,......!!!!!!!!!!!!..............................................................................",
+ ",,,,*## ##,,,,,.....!!!!!!!!!!!!!!....................................::::::::::..............!!!!!!!!!!.......",
+ ",,,,## bHHHHb ##,,,,....!!!!!!!!!!!!!!!!..................................:: ::............!!!!!!!!!!!!......",
+ ",,,,w ###### w,,,,....!!!!!##ww##!!!!!.............##ww##..............:: ##ww## ::..........!!!!!!!!!!!!!!.....",
+ ",,,,w ## ## w,,,,....!!!!## ##!!!!............## << ##.............: ##0>>0## :..........!!!!!!!!!!!!!!.....",
+ ",,,,#++## ##+##,,,,....!!!## 0##!!!...........##0 ##............: ##9 9## :..........!!!!!!!!!!!!!!.....",
+ ",,,,# # # s#,,,,....!!!# #!!!...........# #............: #9 9# :..........!!!!!!!!!!!!!!.....",
+ ",,,,w + << # t#,,,,....!!!w >> w!!!...........w ## w............: + cc + :..........!!!!!!!!!!!!!!.....",
+ ",,,,w + ## # ,,,,....!!!w ## w!!!...........w ## w............: + cL + :..........!!!!!!!!!!!!!!.....",
+ ",,,,# # # ~#,,,,....!!!# #!!!...........# #............: #y y# :..........!!!!!!!!!!!!!!.....",
+ ",,,,##### ##+##,,,,....!!!##0 ##!!!...........## 0##............: ##9 h 9## :..........!!!!!!!!!!!!!!.....",
+ ",,,,#BBE## ## w,,,,....!!!!## << ##!!!!............## >> ##.............: ##mmmm## :..........!!!!!!!!!!!!!!.....",
+ ",,,,wBB #+#+## hw,,,,....!!!!!##ww##!!!!!.............##ww##..............:: ##ww## ::..........!!!!!!!!!!!!!!.....",
+ ",,,,## h # b##,,,,....!!!!!!!!!!!!!!!!..................................:: ::............!!!!!!!!!!!!......",
+ ",,,,*##dd #BBEBB##*,,,,.....!!!!!!!!!!!!!!....................................::::::::::..............!!!!!!!!!!.......",
+ ",,,,,*#ww###ww#ww#*,,,,,......!!!!!!!!!!!!..............................................................................",
+ ",,,,,,,,,,,,,,,,,,,,,,,,................................................................................................",
+ ",,,,,,,,,,,,,,,,,,,,,,,,................................................................................................",
+ ",,,,,,,,,,,,,,,,,,,,,,,,................................................................................................",
+ ",,,,,,,,,,,,,,,,,,,,,,,,................................................................................................"
+ ],
+ "palettes": [ "wizardtower1_palette" ],
+ "terrain": { ",": [ [ "t_region_groundcover_forest", 5 ], "t_region_shrub", "t_region_tree" ] }
+ }
+ },
+ {
+ "type": "palette",
+ "id": "wizardtower1_palette",
+ "terrain": {
+ ".": "t_open_air",
+ "*": "t_region_shrub_decorative",
+ "_": "t_pavement",
+ ";": "t_tile_flat_roof",
+ "^": "t_region_tree_fruit",
+ "[": "t_sidewalk",
+ "!": "t_privacy_fence",
+ "#": "t_rock_wall",
+ "|": "t_wall_w",
+ ":": "t_railing",
+ "M": "t_door_metal_locked",
+ "+": "t_door_c",
+ "=": "t_door_locked",
+ "w": "t_window_domestic",
+ ">": "t_stairs_down",
+ "<": "t_stairs_up",
+ "-": "t_gates_mech_control",
+ "]": "t_concrete_wall"
+ },
+ "furniture": {
+ "&": "f_trashcan",
+ "a": "f_wardrobe",
+ "A": "f_armchair",
+ "b": "f_bookcase",
+ "B": "f_bed",
+ "c": "f_cupboard",
+ "C": "f_counter",
+ "d": "f_desk",
+ "D": "f_dryer",
+ "e": "f_water_heater",
+ "E": "f_dresser",
+ "f": "f_home_furnace",
+ "F": "f_fridge",
+ "h": "f_chair",
+ "H": "f_sofa",
+ "i": "f_filing_cabinet",
+ "I": "f_dishwasher",
+ "L": "f_alembic",
+ "m": "f_magic_bench",
+ "o": "f_oven",
+ "O": "f_orrery",
+ "r": "f_rack",
+ "R": "f_rack",
+ "s": "f_sink",
+ "t": "f_toilet",
+ "T": "f_table",
+ "u": "f_bathtub",
+ "U": "f_utility_shelf",
+ "V": "f_utility_shelf",
+ "~": "f_shower",
+ "W": "f_washer",
+ "x": "f_water_heater",
+ "y": "f_huge_mana_crystal",
+ "Y": "f_rack_coat",
+ "1": "f_cupboard",
+ "2": "f_cupboard",
+ "3": "f_cupboard",
+ "4": "f_cupboard",
+ "5": "f_sink",
+ "6": "f_cupboard",
+ "7": "f_cupboard",
+ "8": "f_bookcase",
+ "9": "f_bookcase"
+ },
+ "items": {
+ "&": { "item": "trash", "chance": 50, "repeat": [ 1, 2 ] },
+ "a": [
+ { "item": "dresser", "chance": 50, "repeat": [ 1, 8 ] },
+ { "item": "allclothes", "chance": 10, "repeat": [ 1, 3 ] },
+ { "item": "enchanted_misc", "chance": 25 }
+ ],
+ "b": [ { "item": "novels", "chance": 50, "repeat": [ 1, 15 ] }, { "item": "homebooks", "chance": 25, "repeat": [ 1, 5 ] } ],
+ "B": { "item": "bed", "chance": 20 },
+ "c": { "item": "kitchen_counters", "chance": 5, "repeat": [ 1, 3 ] },
+ "C": { "item": "snacks", "chance": 10, "repeat": [ 1, 2 ] },
+ "d": { "item": "SUS_office_desk", "chance": 25 },
+ "D": { "item": "snacks", "chance": 10, "repeat": [ 1, 2 ] },
+ "E": { "item": "dresser", "chance": 50, "repeat": [ 1, 5 ] },
+ "f": [ { "item": "SUS_fridge", "chance": 95 }, { "item": "potions_common", "chance": 25, "repeat": [ 1, 3 ] } ],
+ "i": [ { "item": "SUS_office_filing_cabinet", "chance": 30 }, { "item": "office", "chance": 50, "repeat": [ 1, 4 ] } ],
+ "I": { "item": "SUS_dishwasher", "chance": 50 },
+ "m": { "item": "magic_tools_and_loot", "chance": 60 },
+ "o": { "item": "SUS_oven", "chance": 70 },
+ "r": { "item": "a_television", "chance": 100 },
+ "R": { "item": "shoes", "chance": 20, "repeat": [ 1, 4 ] },
+ "U": [ { "item": "tools_common", "chance": 40, "repeat": [ 1, 3 ] }, { "item": "mischw", "chance": 10 } ],
+ "V": [
+ { "item": "tools_general", "chance": 60, "repeat": [ 1, 3 ] },
+ { "item": "mischw", "chance": 10 },
+ { "item": "magic_tools_and_loot", "chance": 20 }
+ ],
+ "Y": [ { "item": "coat_rack", "chance": 70 }, { "item": "magic_shop_clothes", "chance": 60 } ],
+ "1": [ { "item": "SUS_dishes", "chance": 100 }, { "item": "SUS_silverware", "chance": 100 } ],
+ "2": [ { "item": "SUS_cookware", "chance": 100 }, { "item": "SUS_spice_collection", "chance": 50 } ],
+ "3": [ { "item": "SUS_utensils", "chance": 100 }, { "item": "SUS_knife_drawer", "chance": 100 } ],
+ "4": [ { "item": "SUS_junk_drawer", "chance": 100 }, { "item": "SUS_appliances_cupboard", "chance": 100 } ],
+ "5": { "item": "SUS_kitchen_sink", "chance": 100 },
+ "6": { "item": "SUS_pantry", "chance": 100 },
+ "7": [ { "item": "SUS_breakfast_cupboard", "chance": 50 }, { "item": "SUS_coffee_cupboard", "chance": 50 } ],
+ "8": [ { "item": "homebooks", "chance": 45, "repeat": [ 1, 5 ] }, { "item": "spellbook_loot_1", "chance": 20 } ],
+ "9": [
+ { "item": "homebooks", "chance": 45, "repeat": [ 1, 5 ] },
+ { "item": "spellbook_loot_1", "chance": 40 },
+ { "item": "spellbook_loot_2", "chance": 15 }
+ ]
+ },
+ "monsters": { "0": { "monster": "GROUP_TOWER_GOLEM" } },
+ "monster": { "$": { "monster": "mon_resingolem_half", "chance": 100 } }
+ }
+]
diff --git a/data/mods/Magiclysm/modinfo.json b/data/mods/Magiclysm/modinfo.json
index 003da373fe5e..78aef8e3d81c 100644
--- a/data/mods/Magiclysm/modinfo.json
+++ b/data/mods/Magiclysm/modinfo.json
@@ -5,6 +5,7 @@
"name": "Magiclysm",
"authors": [ "KorGgenT", "Aptronym", "LaVeyanFiend" ],
"maintainers": [ ],
+ "obsolete": true,
"description": "Cataclysm but with magic spells, BN Edition!",
"category": "content",
"dependencies": [ "bn" ]
diff --git a/doc/src/assets/semantic.json b/doc/src/assets/semantic.json
index 43969c00904f..993050369888 100644
--- a/doc/src/assets/semantic.json
+++ b/doc/src/assets/semantic.json
@@ -57,6 +57,7 @@
"mods/innawoods",
"mods/limit_fungal_growth",
"mods/magiclysm",
+ "mods/Magical_Nights",
"mods/manualbionicinstall",
"mods/modular_turrets",
"mods/more_classes_scenarios",
diff --git a/doc/src/content/docs/en/contribute/changelog_guidelines.mdx b/doc/src/content/docs/en/contribute/changelog_guidelines.mdx
index 484a7bd25cbf..f276b2e496e6 100644
--- a/doc/src/content/docs/en/contribute/changelog_guidelines.mdx
+++ b/doc/src/content/docs/en/contribute/changelog_guidelines.mdx
@@ -137,7 +137,7 @@ fix(UI, i18n): recipe names not translated unless learned
Example PR title:
```
-feat(mods/magiclysm, content): add missing owlbear pelts recipe
+feat(mods/Magical_Nights, content): add missing owlbear pelts recipe
fix(mods/no_hope): No Hope doesn't make the world freezing
```