INSERT OR IGNORE INTO locations (id, slug, name, description) VALUES
  (1, 'ember-wastes', 'The Ember Wastes', 'A scorched frontier surrounding a buried citadel.'),
  (2, 'crown-caldera', 'The Crown Caldera', 'A volcanic basin surrounding the stronghold of the Ember Crown.');

INSERT OR IGNORE INTO dungeons
  (id, location_id, slug, name, recommended_level, content_type, party_size, completion_item_level, experience_reward, description)
VALUES
  (1, 1, 'ashen-halls', 'The Ashen Halls', 1, 'dungeon', 6, NULL, 125, 'Break the cinder cult before the old furnace awakens.'),
  (2, 2, 'citadel-of-the-ember-crown', 'Citadel of the Ember Crown', 1, 'raid', 18, 10, 175, 'Lead eighteen allies through the caldera and break the Ember Crown across three phases.');

UPDATE dungeons
SET slug = 'bulldrome-hunting-ground',
    name = 'Bulldrome Hunting Ground',
    location_id = 1,
    recommended_level = 1,
    content_type = 'dungeon',
    party_size = 6,
    completion_item_level = NULL,
    experience_reward = 125,
    description = 'A three-boss hunt featuring Bulldrome, Yian Kut-Ku, and Rathian.'
WHERE id = 1;
UPDATE dungeons SET party_size = 18, completion_item_level = NULL, experience_reward = 175
WHERE slug = 'citadel-of-the-ember-crown';

INSERT OR IGNORE INTO difficulties
  (id, slug, name, dropped_item_level, unlock_level, health_multiplier, damage_multiplier, experience_multiplier, description)
VALUES
  (1, 'initiate', 'Initiate', 5, 1, 1.0, 1.0, 1.0, 'Entry-level dungeon difficulty.'),
  (2, 'veteran', 'Veteran', 10, 5, 1.35, 1.2, 1.5, 'Enemies deal more damage and drop stronger gear.'),
  (3, 'champion', 'Champion', 15, 10, 1.7, 1.45, 2.2, 'Demanding encounters for developed characters.'),
  (4, 'mythic', 'Mythic', 20, 15, 2.1, 1.75, 3.0, 'Endgame dungeon difficulty.'),
  (5, 'ascendant', 'Ascendant', 25, 20, 2.6, 2.1, 4.0, 'The current pinnacle difficulty.'),
  (101, 'raid-normal', 'Normal', 7, 1, 1.0, 1.0, 1.25, 'The opening raid difficulty, tuned for an eighteen-player party.');

UPDATE difficulties SET
  dropped_item_level = CASE slug
    WHEN 'raid-normal' THEN 10 ELSE dropped_item_level END,
  unlock_level = CASE slug
    WHEN 'initiate' THEN 1 WHEN 'veteran' THEN 5 WHEN 'champion' THEN 10
    WHEN 'mythic' THEN 15 WHEN 'ascendant' THEN 20 ELSE unlock_level END,
  health_multiplier = CASE slug
    WHEN 'initiate' THEN 1.0 WHEN 'veteran' THEN 1.35 WHEN 'champion' THEN 1.7
    WHEN 'mythic' THEN 2.1 WHEN 'ascendant' THEN 2.6 ELSE health_multiplier END,
  damage_multiplier = CASE slug
    WHEN 'initiate' THEN 1.0 WHEN 'veteran' THEN 1.2 WHEN 'champion' THEN 1.45
    WHEN 'mythic' THEN 1.75 WHEN 'ascendant' THEN 2.1 ELSE damage_multiplier END,
  experience_multiplier = CASE slug
    WHEN 'initiate' THEN 1.0 WHEN 'veteran' THEN 1.5 WHEN 'champion' THEN 2.2
    WHEN 'mythic' THEN 3.0 WHEN 'ascendant' THEN 4.0 ELSE experience_multiplier END;

INSERT OR IGNORE INTO dungeon_difficulties (dungeon_id, difficulty_id) VALUES
  (1, 1),
  (1, 2),
  (1, 3),
  (1, 4),
  (1, 5),
  (2, 101);

INSERT OR IGNORE INTO encounters
  (id, dungeon_id, sequence, slug, name, encounter_type, max_health, base_damage, tank_damage, party_damage, description)
VALUES
  (1, 1, 1, 'ashfang-pack', 'Ashfang Pack', 'trash', 390, 13, 7, 24, 'Three beasts snap at random party members.'),
  (2, 1, 2, 'cinder-adepts', 'Cinder Adepts', 'trash', 470, 16, 10, 25, 'Cultists pressure the tank and throw embers into the group.'),
  (3, 1, 3, 'bulldrome', 'Bulldrome', 'boss', 820, 18, 13, 27, 'A charging wyvern tests the party with heavy tusk strikes.'),
  (10, 1, 4, 'sootborn-guard', 'Sootborn Guard', 'trash', 420, 14, 8, 24, 'A hulking guard forged from living soot.'),
  (11, 1, 5, 'ember-channelers', 'Ember Channelers', 'trash', 500, 17, 11, 25, 'Cultists channelling raw ember energy.'),
  (12, 1, 6, 'yian-kut-ku', 'Yian Kut-Ku', 'boss', 880, 20, 14, 28, 'A frantic bird wyvern scatters flame and wingbeats through the party.'),
  (20, 1, 7, 'cinder-colossus', 'Cinder Colossus', 'trash', 460, 15, 9, 25, 'An enormous construct of slag and anger.'),
  (21, 1, 8, 'flame-wardens', 'Flame Wardens', 'trash', 530, 18, 12, 26, 'Elite guards of the furnace sanctum.'),
  (22, 1, 9, 'rathian', 'Rathian', 'boss', 950, 22, 16, 30, 'The queen of the land punishes mistakes with poison and crushing sweeps.'),
  (100, 2, 1, 'scorched-vanguard', 'Scorched Vanguard', 'trash', 1050, 17, 10, 48, 'The citadel vanguard splits its assault across the raid.'),
  (101, 2, 2, 'pyrebinders', 'Pyrebinders', 'trash', 1220, 19, 12, 50, 'Battle-mages bind living flame to random allies.'),
  (102, 2, 3, 'gatekeeper-arkon', 'Gatekeeper Arkon', 'boss', 2150, 22, 15, 53, 'Arkon seals the caldera gate behind waves of burning force.'),
  (103, 2, 4, 'molten-behemoths', 'Molten Behemoths', 'trash', 1160, 18, 11, 49, 'Two molten beasts batter both tanks and trample the raid.'),
  (104, 2, 5, 'crown-zealots', 'Crown Zealots', 'trash', 1320, 20, 13, 51, 'Fanatics ignite themselves to empower their allies.'),
  (105, 2, 6, 'high-inquisitor-vael', 'High Inquisitor Vael', 'boss', 2320, 24, 16, 55, 'Vael brands the unworthy and calls down columns of fire.'),
  (106, 2, 7, 'emberwing-brood', 'Emberwing Brood', 'trash', 1260, 19, 12, 51, 'A flock of emberwings dives through the raid in sequence.'),
  (107, 2, 8, 'crownforged-sentinels', 'Crownforged Sentinels', 'trash', 1420, 21, 14, 53, 'Ancient sentinels awaken to defend the crown chamber.'),
  (108, 2, 9, 'the-ember-crown', 'The Ember Crown', 'boss', 2550, 26, 18, 57, 'The living crown burns above its throne, demanding perfect coordination.');

UPDATE encounters
SET slug = 'bulldrome',
    name = 'Bulldrome',
    description = 'A charging wyvern tests the party with heavy tusk strikes.',
    image_url = COALESCE(NULLIF(image_url, ''), '/boss-placeholder.svg')
WHERE id = 3;

UPDATE encounters
SET slug = 'yian-kut-ku',
    name = 'Yian Kut-Ku',
    description = 'A frantic bird wyvern scatters flame and wingbeats through the party.',
    image_url = COALESCE(NULLIF(image_url, ''), '/boss-placeholder.svg')
WHERE id = 12;

UPDATE encounters
SET slug = 'rathian',
    name = 'Rathian',
    description = 'The queen of the land punishes mistakes with poison and crushing sweeps.',
    image_url = COALESCE(NULLIF(image_url, ''), '/boss-placeholder.svg')
WHERE id = 22;

INSERT OR IGNORE INTO mechanics
  (id, encounter_id, name, mechanic_type, interval_seconds, power, description)
VALUES
  (1, 3, 'Cinder Pulse', 'party_damage', 4.9, 12, 'Deals damage to the full party.'),
  (2, 3, 'Searing Mark', 'dispellable_dot', 7.7, 7, 'Marks one target with recurring damage until cleansed.'),
  (10, 12, 'Ember Wave', 'party_damage', 5.6, 14, 'A wave of ember energy hits the entire party.'),
  (11, 12, 'Brand of Sacrifice', 'dispellable_dot', 8.4, 9, 'Brands a target with burning sigils.'),
  (20, 22, 'Furnace Blast', 'party_damage', 6.3, 16, 'The furnace vents superheated air across the party.'),
  (21, 22, 'Melting Touch', 'dispellable_dot', 9.1, 11, 'A target begins to melt from intense heat.'),
  (100, 102, 'Caldera Shockwave', 'party_damage', 5.6, 14, 'A shockwave rolls across all eighteen raiders.'),
  (101, 102, 'Gatebrand', 'dispellable_dot', 8.2, 9, 'Brands one raider with a seal of living fire.'),
  (102, 105, 'Pillar of Judgment', 'party_damage', 5.2, 16, 'Columns of flame erupt beneath the raid.'),
  (103, 105, 'Inquisitor''s Brand', 'dispellable_dot', 7.8, 10, 'A burning brand persists until cleansed.'),
  (104, 108, 'Crownflare', 'party_damage', 4.9, 18, 'The Ember Crown releases a raid-wide flare.'),
  (105, 108, 'Royal Decree', 'dispellable_dot', 7.1, 12, 'A lethal decree marks one raider for cleansing.');

INSERT OR IGNORE INTO classes
  (id, slug, name, resource_name, max_resource, theme_color, description)
VALUES
  (1, 'dawnweaver', 'Dawnweaver', 'Mana', 100, '#e5b95f', 'A reactive healer using radiant restoration and protective wards.'),
  (2, 'lifebinder', 'Lifebinder', 'Bloom', 100, '#4fb978', 'A patient healer who grows powerful restorative effects over time.'),
  (3, 'runesage', 'Runesage', 'Focus', 100, '#708bd6', 'A tactical healer who prepares runes, barriers, and delayed recovery.');

INSERT OR IGNORE INTO spells
  (id, class_id, slug, name, spell_type, resource_cost, cooldown_seconds, power, unlock_level, glyph, description)
VALUES
  (1, 1, 'mend', 'Mend', 'direct_heal', 5, 0.5, 30, 1, '+', 'A fast, efficient single-target heal.'),
  (2, 1, 'renew', 'Renew', 'heal_over_time', 7, 0.5, 12, 1, '~', 'Heals now and continues healing over time.'),
  (3, 1, 'radiance', 'Radiance', 'party_heal', 12, 8, 18, 1, '*', 'Restores health to every living party member.'),
  (4, 1, 'sun-ward', 'Sun Ward', 'absorb', 8, 7, 36, 1, 'O', 'Places a damage-absorbing shield on your target.'),
  (5, 1, 'purify', 'Purify', 'cleanse', 5, 5, 10, 1, 'x', 'Removes a harmful effect and restores health.'),
  (6, 1, 'dawn-burst', 'Dawn Burst', 'party_heal', 16, 12, 28, 5, 'D', 'A brilliant wave of healing for the entire party.'),
  (7, 1, 'guardian-light', 'Guardian Light', 'absorb', 13, 14, 55, 10, 'G', 'A powerful ward reserved for moments of extreme danger.'),
  (8, 1, 'second-sun', 'Second Sun', 'direct_heal', 20, 20, 85, 15, 'S', 'Calls down a delayed surge of restorative light.'),
  (9, 1, 'daybreak', 'Daybreak', 'party_heal', 23, 30, 48, 20, 'A', 'Floods the party with the full strength of dawn.'),
  (20, 2, 'verdant-touch', 'Verdant Touch', 'direct_heal', 5, 0.5, 28, 1, '+', 'A quick pulse of living energy.'),
  (21, 2, 'seed-of-life', 'Seed of Life', 'heal_over_time', 7, 0.5, 11, 1, 's', 'Plants a restorative seed that blooms over time.'),
  (22, 2, 'wild-bloom', 'Wild Bloom', 'party_heal', 12, 8, 17, 1, '*', 'Restorative growth spreads through the party.'),
  (23, 2, 'barkskin', 'Barkskin', 'absorb', 8, 7, 34, 1, 'B', 'Wraps an ally in protective living bark.'),
  (24, 2, 'purging-sap', 'Purging Sap', 'cleanse', 5, 5, 10, 1, 'p', 'Draws a harmful effect out through enchanted sap.'),
  (25, 2, 'ancient-grove', 'Ancient Grove', 'party_heal', 17, 12, 31, 5, 'T', 'Briefly summons the shelter of an ancient grove.'),
  (30, 3, 'etched-mend', 'Etched Mend', 'direct_heal', 5, 0.5, 29, 1, '+', 'Completes a simple rune of restoration.'),
  (31, 3, 'echo-rune', 'Echo Rune', 'heal_over_time', 7, 0.5, 12, 1, 'e', 'Repeats a restorative rune over several moments.'),
  (32, 3, 'concordance', 'Concordance', 'party_heal', 12, 8, 18, 1, '*', 'Links the party through a shared healing pattern.'),
  (33, 3, 'aegis-script', 'Aegis Script', 'absorb', 8, 7, 35, 1, 'O', 'Writes a temporary barrier around an ally.'),
  (34, 3, 'unravel', 'Unravel', 'cleanse', 5, 5, 10, 1, 'u', 'Unravels a hostile magical pattern.'),
  (35, 3, 'grand-design', 'Grand Design', 'party_heal', 16, 12, 30, 5, 'R', 'Activates a prepared network of restorative runes.');

UPDATE spells SET resource_cost = CASE slug
  WHEN 'mend' THEN 5
  WHEN 'renew' THEN 7
  WHEN 'radiance' THEN 12
  WHEN 'sun-ward' THEN 8
  WHEN 'purify' THEN 5
  WHEN 'dawn-burst' THEN 16
  WHEN 'guardian-light' THEN 13
  WHEN 'second-sun' THEN 20
  WHEN 'daybreak' THEN 23
  WHEN 'verdant-touch' THEN 5
  WHEN 'seed-of-life' THEN 7
  WHEN 'wild-bloom' THEN 12
  WHEN 'barkskin' THEN 8
  WHEN 'purging-sap' THEN 5
  WHEN 'ancient-grove' THEN 17
  WHEN 'etched-mend' THEN 5
  WHEN 'echo-rune' THEN 7
  WHEN 'concordance' THEN 12
  WHEN 'aegis-script' THEN 8
  WHEN 'unravel' THEN 5
  WHEN 'grand-design' THEN 16
  ELSE resource_cost
END;

UPDATE spells SET unlock_level = 1, glyph = '+' WHERE slug = 'mend';
UPDATE spells SET unlock_level = 1, glyph = '~' WHERE slug = 'renew';
UPDATE spells SET unlock_level = 1, glyph = '*' WHERE slug = 'radiance';
UPDATE spells SET unlock_level = 1, glyph = 'O' WHERE slug = 'sun-ward';
UPDATE spells SET unlock_level = 1, glyph = 'x' WHERE slug = 'purify';
UPDATE spells SET cooldown_seconds = 0.5
WHERE slug IN ('mend', 'renew', 'verdant-touch', 'seed-of-life', 'etched-mend', 'echo-rune');
UPDATE spells SET unlock_level = 5 WHERE slug IN ('dawn-burst', 'ancient-grove', 'grand-design');
UPDATE spells SET unlock_level = 10 WHERE slug = 'guardian-light';
UPDATE spells SET unlock_level = 15 WHERE slug = 'second-sun';
UPDATE spells SET unlock_level = 20 WHERE slug = 'daybreak';

INSERT OR IGNORE INTO items
  (id, slug, name, slot, rarity, item_level, healing_power, max_resource_bonus, glyph, description)
VALUES
  (1, 'emberglass-sigil', 'Emberglass Sigil', 'ring', 'rare', 5, 4, 5, 'o', 'Warm light moves inside the cracked glass.'),
  (2, 'wardens-cinderwrap', 'Warden''s Cinderwrap', 'chest', 'uncommon', 5, 3, 0, 'C', 'Robes threaded with fire-resistant fibers.'),
  (3, 'ashwood-crook', 'Ashwood Crook', 'weapon', 'uncommon', 5, 5, 0, '/', 'A healer''s staff carved from fire-hardened wood.'),
  (4, 'cinderstep-boots', 'Cinderstep Boots', 'boots', 'uncommon', 5, 3, 0, 'b', 'Light boots made for crossing burning ground.'),
  (5, 'adepts-hood', 'Adept''s Hood', 'helmet', 'uncommon', 5, 3, 4, '^', 'The inner cloth is covered in careful annotations.'),
  (6, 'furnace-tenders-wraps', 'Furnace Tender''s Wraps', 'gloves', 'uncommon', 5, 3, 2, 'g', 'Heat-scored gloves that still hum with careful magic.'),
  (7, 'warden-ember', 'Warden''s Ember', 'trinket', 'rare', 5, 4, 4, '*', 'A coal from the old furnace that refuses to cool.'),
  (201, 'tempered-emberglass-sigil', 'Tempered Emberglass Sigil', 'ring', 'rare', 10, 7, 9, 'o', 'The glass has been tempered by Veteran flame.'),
  (202, 'tempered-cinderwrap', 'Tempered Cinderwrap', 'chest', 'uncommon', 10, 7, 2, 'C', 'Reinforced robes woven for Veteran expeditions.'),
  (203, 'tempered-ashwood-crook', 'Tempered Ashwood Crook', 'weapon', 'uncommon', 10, 10, 2, '/', 'A fire-hardened staff balanced for Veteran healers.'),
  (204, 'tempered-cinderstep-boots', 'Tempered Cinderstep Boots', 'boots', 'uncommon', 10, 6, 5, 'b', 'Sturdy boots for crossing hotter ground.'),
  (205, 'tempered-adepts-hood', 'Tempered Adept''s Hood', 'helmet', 'uncommon', 10, 6, 6, '^', 'Its annotations glow when danger approaches.'),
  (206, 'tempered-furnace-wraps', 'Tempered Furnace Wraps', 'gloves', 'uncommon', 10, 7, 4, 'g', 'Veteran wraps stitched with ember-resistant thread.'),
  (207, 'tempered-warden-ember', 'Tempered Warden''s Ember', 'trinket', 'rare', 10, 8, 7, '*', 'A stable ember pulsing with restorative heat.'),
  (301, 'runed-emberglass-sigil', 'Runed Emberglass Sigil', 'ring', 'rare', 15, 10, 13, 'o', 'Champion runes swim beneath the emberglass.'),
  (302, 'runed-cinderwrap', 'Runed Cinderwrap', 'chest', 'rare', 15, 11, 3, 'C', 'Champion robes covered in protective script.'),
  (303, 'runed-ashwood-crook', 'Runed Ashwood Crook', 'weapon', 'rare', 15, 15, 3, '/', 'A Champion focus carved with radiant channels.'),
  (304, 'runed-cinderstep-boots', 'Runed Cinderstep Boots', 'boots', 'rare', 15, 9, 8, 'b', 'Each step leaves a fading restorative rune.'),
  (305, 'runed-adepts-hood', 'Runed Adept''s Hood', 'helmet', 'rare', 15, 9, 9, '^', 'A Champion hood that sharpens restorative focus.'),
  (306, 'runed-furnace-wraps', 'Runed Furnace Wraps', 'gloves', 'rare', 15, 11, 6, 'g', 'Runes brighten as healing magic passes through them.'),
  (307, 'runed-warden-ember', 'Runed Warden''s Ember', 'trinket', 'rare', 15, 12, 10, '*', 'A Champion ember bound by concentric runes.'),
  (401, 'mythic-emberglass-sigil', 'Mythic Emberglass Sigil', 'ring', 'epic', 20, 14, 17, 'o', 'A flawless sigil carrying the furnace''s true name.'),
  (402, 'mythic-cinderwrap', 'Mythic Cinderwrap', 'chest', 'epic', 20, 15, 4, 'C', 'Mythic vestments untouched by ordinary flame.'),
  (403, 'mythic-ashwood-crook', 'Mythic Ashwood Crook', 'weapon', 'epic', 20, 20, 4, '/', 'A Mythic focus cut from the oldest ashwood.'),
  (404, 'mythic-cinderstep-boots', 'Mythic Cinderstep Boots', 'boots', 'epic', 20, 12, 11, 'b', 'The wearer walks safely across living fire.'),
  (405, 'mythic-adepts-hood', 'Mythic Adept''s Hood', 'helmet', 'epic', 20, 12, 12, '^', 'A Mythic hood filled with whispered formulae.'),
  (406, 'mythic-furnace-wraps', 'Mythic Furnace Wraps', 'gloves', 'epic', 20, 15, 8, 'g', 'Mythic gloves that shape healing into precise patterns.'),
  (407, 'mythic-warden-ember', 'Mythic Warden''s Ember', 'trinket', 'epic', 20, 16, 13, '*', 'The furnace heart answers this ember.'),
  (501, 'ascendant-emberglass-sigil', 'Ascendant Emberglass Sigil', 'ring', 'epic', 25, 18, 21, 'o', 'An Ascendant sigil radiant with contained dawn.'),
  (502, 'ascendant-cinderwrap', 'Ascendant Cinderwrap', 'chest', 'epic', 25, 19, 5, 'C', 'Ascendant robes woven from fire and light.'),
  (503, 'ascendant-ashwood-crook', 'Ascendant Ashwood Crook', 'weapon', 'epic', 25, 25, 5, '/', 'An Ascendant staff bearing an unending ember.'),
  (504, 'ascendant-cinderstep-boots', 'Ascendant Cinderstep Boots', 'boots', 'epic', 25, 15, 14, 'b', 'The ground cools before each Ascendant step.'),
  (505, 'ascendant-adepts-hood', 'Ascendant Adept''s Hood', 'helmet', 'epic', 25, 15, 15, '^', 'Every healing pattern appears obvious beneath this hood.'),
  (506, 'ascendant-furnace-wraps', 'Ascendant Furnace Wraps', 'gloves', 'epic', 25, 19, 10, 'g', 'Ascendant gloves threaded with concentrated daylight.'),
  (507, 'ascendant-warden-ember', 'Ascendant Warden''s Ember', 'trinket', 'epic', 25, 20, 16, '*', 'A perfect ember from the heart of the Ashen Halls.'),
  (701, 'caldera-signet', 'Caldera Signet', 'ring', 'rare', 7, 5, 6, 'o', 'A raid-forged signet warm with caldera light.'),
  (702, 'vanguard-mantle', 'Vanguard Mantle', 'chest', 'rare', 7, 5, 1, 'C', 'A reinforced mantle taken from the citadel vanguard.'),
  (703, 'pyrebinder-crook', 'Pyrebinder Crook', 'weapon', 'rare', 7, 7, 1, '/', 'A focus used to bend living flame toward restoration.'),
  (704, 'emberstep-treads', 'Emberstep Treads', 'boots', 'rare', 7, 4, 5, 'b', 'Raid treads made for crossing unstable volcanic stone.'),
  (705, 'gatekeeper-cowl', 'Gatekeeper Cowl', 'helmet', 'rare', 7, 4, 6, '^', 'A cowl inscribed with the wards of the outer gate.'),
  (706, 'crownward-wraps', 'Crownward Wraps', 'gloves', 'rare', 7, 5, 3, 'g', 'Precise wraps worn by the healers of the Ember Crown.'),
  (707, 'living-coal-charm', 'Living Coal Charm', 'trinket', 'rare', 7, 6, 5, '*', 'A coal that pulses in time with nearby heartbeats.'),
  (710, 'royal-caldera-signet', 'Royal Caldera Signet', 'ring', 'epic', 10, 8, 9, 'o', 'A royal signet claimed after breaking the Ember Crown.'),
  (711, 'ember-crown-vestment', 'Ember Crown Vestment', 'chest', 'epic', 10, 8, 2, 'C', 'The ceremonial vestment of the fallen crown court.'),
  (712, 'crownshard-crook', 'Crownshard Crook', 'weapon', 'epic', 10, 11, 2, '/', 'A healing focus set with a cooled shard of the crown.'),
  (713, 'caldera-walkers', 'Caldera Walkers', 'boots', 'epic', 10, 7, 8, 'b', 'Boots that remain cool even at the caldera''s heart.'),
  (714, 'inquisitors-cowl', 'Inquisitor''s Cowl', 'helmet', 'epic', 10, 7, 9, '^', 'The cowl of an inquisitor, stripped of its cruel sigils.'),
  (715, 'royal-flame-wraps', 'Royal Flame Wraps', 'gloves', 'epic', 10, 8, 6, 'g', 'Royal wraps that shape flame into restorative patterns.'),
  (716, 'extinguished-crown', 'Extinguished Crown', 'trinket', 'epic', 10, 9, 8, '*', 'A harmless fragment of the once-living Ember Crown.'),
  (100, 'novice-crook', 'Novice Crook', 'weapon', 'common', 1, 1, 0, '/', 'A simple focus carried by every new healer.'),
  (101, 'novice-cowl', 'Novice Cowl', 'helmet', 'common', 1, 0, 1, '^', 'Plain cloth that helps steady a beginner''s thoughts.'),
  (102, 'novice-vestment', 'Novice Vestment', 'chest', 'common', 1, 1, 0, 'C', 'Unadorned robes issued to apprentice healers.'),
  (103, 'novice-wraps', 'Novice Wraps', 'gloves', 'common', 1, 1, 0, 'g', 'Soft wraps that leave the fingers free for spellwork.'),
  (104, 'novice-slippers', 'Novice Slippers', 'boots', 'common', 1, 0, 1, 'b', 'Comfortable enough for a first expedition.'),
  (105, 'novice-band', 'Novice Band', 'ring', 'common', 1, 0, 1, 'o', 'A copper band etched with a minor restorative rune.'),
  (106, 'novice-token', 'Novice Token', 'trinket', 'common', 1, 1, 0, '*', 'A small charm commemorating the healer''s oath.'),
  (107, 'novice-wand', 'Novice Wand', 'weapon', 'common', 1, 0, 2, '!', 'A spare focus that favors a deeper resource pool.'),
  (600, 'minor-component', 'Minor Component', 'component', 'common', 1, 0, 0, '◆', 'A basic crafting component.'),
  (601, 'basic-component', 'Basic Component', 'component', 'common', 5, 0, 0, '◇', 'A standard crafting component.'),
  (602, 'refined-component', 'Refined Component', 'component', 'common', 10, 0, 0, '◈', 'A refined crafting component.'),
  (603, 'advanced-component', 'Advanced Component', 'component', 'common', 15, 0, 0, '◉', 'An advanced crafting component.'),
  (604, 'superior-component', 'Superior Component', 'component', 'common', 20, 0, 0, '◎', 'A superior crafting component.'),
  (605, 'primal-component', 'Primal Component', 'component', 'common', 25, 0, 0, '✦', 'A primal crafting component.');

INSERT OR IGNORE INTO items
  (id, slug, name, slot, rarity, item_level, healing_power, max_resource_bonus, glyph, description)
VALUES
  (8, 'ashwalker-legwraps', 'Ashwalker Legwraps', 'pants', 'uncommon', 5, 3, 3, 'P', 'Layered legwraps brushed clean of furnace ash.'),
  (9, 'sootglass-pendant', 'Sootglass Pendant', 'necklace', 'rare', 5, 4, 4, 'n', 'A pendant made from glass cooled in living soot.'),
  (208, 'tempered-ashwalker-legwraps', 'Tempered Ashwalker Legwraps', 'pants', 'uncommon', 10, 6, 6, 'P', 'Veteran legwraps stitched with tempered ember thread.'),
  (209, 'tempered-sootglass-pendant', 'Tempered Sootglass Pendant', 'necklace', 'rare', 10, 8, 7, 'n', 'The sootglass holds a steadier restorative glow.'),
  (308, 'runed-ashwalker-legwraps', 'Runed Ashwalker Legwraps', 'pants', 'rare', 15, 9, 9, 'P', 'Champion runes keep each step measured and sure.'),
  (309, 'runed-sootglass-pendant', 'Runed Sootglass Pendant', 'necklace', 'rare', 15, 12, 10, 'n', 'Fine runes circle the sootglass pendant.'),
  (408, 'mythic-ashwalker-legwraps', 'Mythic Ashwalker Legwraps', 'pants', 'epic', 20, 12, 12, 'P', 'Mythic legwraps that shed molten grit.'),
  (409, 'mythic-sootglass-pendant', 'Mythic Sootglass Pendant', 'necklace', 'epic', 20, 16, 13, 'n', 'A flawless pendant carrying furnace-born warmth.'),
  (508, 'ascendant-ashwalker-legwraps', 'Ascendant Ashwalker Legwraps', 'pants', 'epic', 25, 15, 15, 'P', 'Ascendant legwraps woven from fireproof daylight.'),
  (509, 'ascendant-sootglass-pendant', 'Ascendant Sootglass Pendant', 'necklace', 'epic', 25, 20, 16, 'n', 'The sootglass burns with a contained dawn.'),
  (708, 'caldera-legwraps', 'Caldera Legwraps', 'pants', 'rare', 7, 4, 6, 'P', 'Raid legwraps made for unstable volcanic stone.'),
  (709, 'gateflame-pendant', 'Gateflame Pendant', 'necklace', 'rare', 7, 6, 5, 'n', 'A pendant bearing a cooled mote of gateflame.'),
  (717, 'royal-caldera-legwraps', 'Royal Caldera Legwraps', 'pants', 'epic', 10, 7, 9, 'P', 'Royal legwraps recovered from the Ember Crown court.'),
  (718, 'ember-crown-pendant', 'Ember Crown Pendant', 'necklace', 'epic', 10, 9, 8, 'n', 'A pendant set with a harmless shard of the Ember Crown.'),
  (108, 'novice-trousers', 'Novice Trousers', 'pants', 'common', 1, 0, 1, 'P', 'Plain trousers for a first expedition.'),
  (109, 'novice-pendant', 'Novice Pendant', 'necklace', 'common', 1, 1, 0, 'n', 'A simple charm worn by apprentice healers.'),
  (800, 'ashen-cowl-pattern', 'Ashen Cowl Pattern', 'component', 'common', 5, 0, 0, 'H', 'A Warden Vhal pattern used to craft helmets.'),
  (801, 'ashen-vestment-pattern', 'Ashen Vestment Pattern', 'component', 'common', 5, 0, 0, 'C', 'A Warden Vhal pattern used to craft chest pieces.'),
  (802, 'ashen-wrap-pattern', 'Ashen Wrap Pattern', 'component', 'common', 5, 0, 0, 'G', 'A Warden Vhal pattern used to craft gloves.'),
  (803, 'cinderstep-pattern', 'Cinderstep Pattern', 'component', 'common', 5, 0, 0, 'B', 'A Forge-Priestess Haela pattern used to craft boots.'),
  (804, 'emberglass-setting', 'Emberglass Setting', 'component', 'common', 5, 0, 0, 'R', 'A Forge-Priestess Haela setting used to craft rings.'),
  (805, 'warden-ember-core', 'Warden Ember Core', 'component', 'common', 5, 0, 0, 'T', 'A Forge-Priestess Haela core used to craft trinkets.'),
  (806, 'ashwood-focus-pattern', 'Ashwood Focus Pattern', 'component', 'common', 5, 0, 0, 'W', 'An Old Furnace pattern used to craft weapons.'),
  (807, 'furnace-legwrap-pattern', 'Furnace Legwrap Pattern', 'component', 'common', 5, 0, 0, 'L', 'An Old Furnace pattern used to craft pants.'),
  (808, 'sootglass-pendant-pattern', 'Sootglass Pendant Pattern', 'component', 'common', 5, 0, 0, 'N', 'An Old Furnace pattern used to craft necklaces.'),
  (820, 'vhal-emberplate', 'Vhal Emberplate', 'component', 'uncommon', 5, 0, 0, 'V', 'A boss material from Warden Vhal.'),
  (821, 'haela-forgebrand', 'Haela Forgebrand', 'component', 'uncommon', 5, 0, 0, 'F', 'A boss material from Forge-Priestess Haela.'),
  (822, 'old-furnace-heartshard', 'Old Furnace Heartshard', 'component', 'uncommon', 5, 0, 0, 'O', 'A boss material from the Old Furnace.'),
  (830, 'gatekeeper-cowl-pattern', 'Gatekeeper Cowl Pattern', 'component', 'rare', 10, 0, 0, 'H', 'A Gatekeeper Arkon pattern used to craft raid helmets.'),
  (831, 'crownward-vestment-pattern', 'Crownward Vestment Pattern', 'component', 'rare', 10, 0, 0, 'C', 'A Gatekeeper Arkon pattern used to craft raid chest pieces.'),
  (832, 'crownward-wrap-pattern', 'Crownward Wrap Pattern', 'component', 'rare', 10, 0, 0, 'G', 'A Gatekeeper Arkon pattern used to craft raid gloves.'),
  (833, 'caldera-tread-pattern', 'Caldera Tread Pattern', 'component', 'rare', 10, 0, 0, 'B', 'A High Inquisitor Vael pattern used to craft raid boots.'),
  (834, 'royal-signet-setting', 'Royal Signet Setting', 'component', 'rare', 10, 0, 0, 'R', 'A High Inquisitor Vael setting used to craft raid rings.'),
  (835, 'living-coal-vessel', 'Living Coal Vessel', 'component', 'rare', 10, 0, 0, 'T', 'A High Inquisitor Vael vessel used to craft raid trinkets.'),
  (836, 'crownshard-focus-pattern', 'Crownshard Focus Pattern', 'component', 'rare', 10, 0, 0, 'W', 'An Ember Crown pattern used to craft raid weapons.'),
  (837, 'inquisitor-legwrap-pattern', 'Inquisitor Legwrap Pattern', 'component', 'rare', 10, 0, 0, 'L', 'An Ember Crown pattern used to craft raid pants.'),
  (838, 'crown-pendant-pattern', 'Crown Pendant Pattern', 'component', 'rare', 10, 0, 0, 'N', 'An Ember Crown pattern used to craft raid necklaces.'),
  (850, 'arkon-gate-sigil', 'Arkon Gate Sigil', 'component', 'rare', 10, 0, 0, 'A', 'A raid boss material from Gatekeeper Arkon.'),
  (851, 'vael-brandseal', 'Vael Brandseal', 'component', 'rare', 10, 0, 0, 'I', 'A raid boss material from High Inquisitor Vael.'),
  (852, 'ember-crown-shard', 'Ember Crown Shard', 'component', 'rare', 10, 0, 0, 'E', 'A raid boss material from the Ember Crown.'),
  (860, 'bulldrome-hide', 'Bulldrome Hide', 'component', 'uncommon', 5, 0, 0, 'H', 'A rugged hide from Bulldrome.'),
  (861, 'bullfango-head', 'Bullfango Head', 'component', 'rare', 5, 0, 0, 'F', 'A rare head taken from a Bullfango.'),
  (862, 'bulldrome-tusk', 'Bulldrome Tusk', 'component', 'uncommon', 5, 0, 0, 'T', 'A heavy tusk from Bulldrome.'),
  (863, 'giant-bone', 'Giant Bone', 'component', 'uncommon', 5, 0, 0, 'B', 'A giant bone used in sturdy crafting.'),
  (864, 'kut-ku-webbing', 'Kut-Ku Webbing', 'component', 'uncommon', 5, 0, 0, 'W', 'Flexible webbing from Yian Kut-Ku.'),
  (865, 'kut-ku-shell', 'Kut-Ku Shell', 'component', 'uncommon', 5, 0, 0, 'S', 'A bright shell from Yian Kut-Ku.'),
  (866, 'kut-ku-scale', 'Kut-Ku Scale', 'component', 'uncommon', 5, 0, 0, 'K', 'A scale from Yian Kut-Ku.'),
  (867, 'giant-beak', 'Giant Beak', 'component', 'rare', 5, 0, 0, 'G', 'A rare giant beak from Yian Kut-Ku.'),
  (868, 'rathian-shell', 'Rathian Shell', 'component', 'uncommon', 5, 0, 0, 'R', 'A durable shell from Rathian.'),
  (869, 'rathian-scale-x2', 'Rathian Scale x2', 'component', 'uncommon', 5, 0, 0, '2', 'A paired Rathian scale reward.'),
  (870, 'rathian-spike', 'Rathian Spike', 'component', 'rare', 5, 0, 0, 'P', 'A sharp spike from Rathian.'),
  (871, 'rathian-plate', 'Rathian Plate', 'component', 'epic', 5, 0, 0, '*', 'A prized Rathian plate.');

UPDATE items SET slot = 'ring', item_level = 5 WHERE slug = 'emberglass-sigil';
UPDATE items SET item_level = 5 WHERE slug = 'wardens-cinderwrap';
UPDATE items SET glyph = 'o' WHERE slug = 'emberglass-sigil';
UPDATE items SET glyph = 'C' WHERE slug = 'wardens-cinderwrap';
UPDATE items SET glyph = '/' WHERE slug = 'ashwood-crook';
UPDATE items SET glyph = 'b' WHERE slug = 'cinderstep-boots';
UPDATE items SET glyph = '^' WHERE slug = 'adepts-hood';

DELETE FROM encounter_loot;

INSERT INTO encounter_loot
  (encounter_id, item_id, difficulty_id, drop_weight, drop_chance)
VALUES
  (3, 860, 1, 50, 1.0), (3, 861, 1, 5, 1.0), (3, 862, 1, 15, 1.0), (3, 863, 1, 30, 1.0),
  (3, 860, 2, 50, 1.0), (3, 861, 2, 5, 1.0), (3, 862, 2, 15, 1.0), (3, 863, 2, 30, 1.0),
  (3, 860, 3, 50, 1.0), (3, 861, 3, 5, 1.0), (3, 862, 3, 15, 1.0), (3, 863, 3, 30, 1.0),
  (3, 860, 4, 50, 1.0), (3, 861, 4, 5, 1.0), (3, 862, 4, 15, 1.0), (3, 863, 4, 30, 1.0),
  (3, 860, 5, 50, 1.0), (3, 861, 5, 5, 1.0), (3, 862, 5, 15, 1.0), (3, 863, 5, 30, 1.0),
  (12, 864, 1, 32, 1.0), (12, 865, 1, 50, 1.0), (12, 866, 1, 13, 1.0), (12, 867, 1, 5, 1.0),
  (12, 864, 2, 32, 1.0), (12, 865, 2, 50, 1.0), (12, 866, 2, 13, 1.0), (12, 867, 2, 5, 1.0),
  (12, 864, 3, 32, 1.0), (12, 865, 3, 50, 1.0), (12, 866, 3, 13, 1.0), (12, 867, 3, 5, 1.0),
  (12, 864, 4, 32, 1.0), (12, 865, 4, 50, 1.0), (12, 866, 4, 13, 1.0), (12, 867, 4, 5, 1.0),
  (12, 864, 5, 32, 1.0), (12, 865, 5, 50, 1.0), (12, 866, 5, 13, 1.0), (12, 867, 5, 5, 1.0),
  (22, 868, 1, 36, 1.0), (22, 869, 1, 52, 1.0), (22, 870, 1, 10, 1.0), (22, 871, 1, 2, 1.0),
  (22, 868, 2, 36, 1.0), (22, 869, 2, 52, 1.0), (22, 870, 2, 10, 1.0), (22, 871, 2, 2, 1.0),
  (22, 868, 3, 36, 1.0), (22, 869, 3, 52, 1.0), (22, 870, 3, 10, 1.0), (22, 871, 3, 2, 1.0),
  (22, 868, 4, 36, 1.0), (22, 869, 4, 52, 1.0), (22, 870, 4, 10, 1.0), (22, 871, 4, 2, 1.0),
  (22, 868, 5, 36, 1.0), (22, 869, 5, 52, 1.0), (22, 870, 5, 10, 1.0), (22, 871, 5, 2, 1.0),
  (102, 602, 101, 24, 1.0), (102, 850, 101, 22, 1.0), (102, 830, 101, 18, 1.0), (102, 831, 101, 18, 1.0), (102, 832, 101, 18, 1.0),
  (105, 602, 101, 24, 1.0), (105, 851, 101, 22, 1.0), (105, 833, 101, 18, 1.0), (105, 834, 101, 18, 1.0), (105, 835, 101, 18, 1.0),
  (108, 602, 101, 24, 1.0), (108, 852, 101, 22, 1.0), (108, 836, 101, 18, 1.0), (108, 837, 101, 18, 1.0), (108, 838, 101, 18, 1.0);

DELETE FROM crafting_recipe_components;
DELETE FROM crafting_recipes;

INSERT INTO crafting_recipes
  (id, item_id, difficulty_id, source_dungeon_id, source_encounter_id)
VALUES
  (1001, 5, 1, 1, 3), (1002, 2, 1, 1, 3), (1003, 6, 1, 1, 3),
  (1004, 4, 1, 1, 12), (1005, 1, 1, 1, 12), (1006, 7, 1, 1, 12),
  (1007, 3, 1, 1, 22), (1008, 8, 1, 1, 22), (1009, 9, 1, 1, 22),
  (1101, 205, 2, 1, 3), (1102, 202, 2, 1, 3), (1103, 206, 2, 1, 3),
  (1104, 204, 2, 1, 12), (1105, 201, 2, 1, 12), (1106, 207, 2, 1, 12),
  (1107, 203, 2, 1, 22), (1108, 208, 2, 1, 22), (1109, 209, 2, 1, 22),
  (1201, 305, 3, 1, 3), (1202, 302, 3, 1, 3), (1203, 306, 3, 1, 3),
  (1204, 304, 3, 1, 12), (1205, 301, 3, 1, 12), (1206, 307, 3, 1, 12),
  (1207, 303, 3, 1, 22), (1208, 308, 3, 1, 22), (1209, 309, 3, 1, 22),
  (1301, 405, 4, 1, 3), (1302, 402, 4, 1, 3), (1303, 406, 4, 1, 3),
  (1304, 404, 4, 1, 12), (1305, 401, 4, 1, 12), (1306, 407, 4, 1, 12),
  (1307, 403, 4, 1, 22), (1308, 408, 4, 1, 22), (1309, 409, 4, 1, 22),
  (1401, 505, 5, 1, 3), (1402, 502, 5, 1, 3), (1403, 506, 5, 1, 3),
  (1404, 504, 5, 1, 12), (1405, 501, 5, 1, 12), (1406, 507, 5, 1, 12),
  (1407, 503, 5, 1, 22), (1408, 508, 5, 1, 22), (1409, 509, 5, 1, 22),
  (2001, 714, 101, 2, 102), (2002, 711, 101, 2, 102), (2003, 715, 101, 2, 102),
  (2004, 713, 101, 2, 105), (2005, 710, 101, 2, 105), (2006, 716, 101, 2, 105),
  (2007, 712, 101, 2, 108), (2008, 717, 101, 2, 108), (2009, 718, 101, 2, 108);

WITH recipe_requirements(recipe_id, tier_component_id, tier_qty, boss_component_id, pattern_component_id) AS (
  VALUES
    (1001, 601, 1, 820, 800), (1002, 601, 1, 820, 801), (1003, 601, 1, 820, 802),
    (1004, 601, 1, 821, 803), (1005, 601, 1, 821, 804), (1006, 601, 1, 821, 805),
    (1007, 601, 1, 822, 806), (1008, 601, 1, 822, 807), (1009, 601, 1, 822, 808),
    (1101, 602, 2, 820, 800), (1102, 602, 2, 820, 801), (1103, 602, 2, 820, 802),
    (1104, 602, 2, 821, 803), (1105, 602, 2, 821, 804), (1106, 602, 2, 821, 805),
    (1107, 602, 2, 822, 806), (1108, 602, 2, 822, 807), (1109, 602, 2, 822, 808),
    (1201, 603, 3, 820, 800), (1202, 603, 3, 820, 801), (1203, 603, 3, 820, 802),
    (1204, 603, 3, 821, 803), (1205, 603, 3, 821, 804), (1206, 603, 3, 821, 805),
    (1207, 603, 3, 822, 806), (1208, 603, 3, 822, 807), (1209, 603, 3, 822, 808),
    (1301, 604, 4, 820, 800), (1302, 604, 4, 820, 801), (1303, 604, 4, 820, 802),
    (1304, 604, 4, 821, 803), (1305, 604, 4, 821, 804), (1306, 604, 4, 821, 805),
    (1307, 604, 4, 822, 806), (1308, 604, 4, 822, 807), (1309, 604, 4, 822, 808),
    (1401, 605, 5, 820, 800), (1402, 605, 5, 820, 801), (1403, 605, 5, 820, 802),
    (1404, 605, 5, 821, 803), (1405, 605, 5, 821, 804), (1406, 605, 5, 821, 805),
    (1407, 605, 5, 822, 806), (1408, 605, 5, 822, 807), (1409, 605, 5, 822, 808),
    (2001, 602, 3, 850, 830), (2002, 602, 3, 850, 831), (2003, 602, 3, 850, 832),
    (2004, 602, 3, 851, 833), (2005, 602, 3, 851, 834), (2006, 602, 3, 851, 835),
    (2007, 602, 3, 852, 836), (2008, 602, 3, 852, 837), (2009, 602, 3, 852, 838)
)
INSERT INTO crafting_recipe_components (recipe_id, item_id, quantity)
SELECT recipe_id, tier_component_id, tier_qty FROM recipe_requirements
UNION ALL
SELECT recipe_id, boss_component_id, 1 FROM recipe_requirements
UNION ALL
SELECT recipe_id, pattern_component_id, 1 FROM recipe_requirements;

DELETE FROM item_set_bonuses;
DELETE FROM item_set_items;
DELETE FROM item_sets;

INSERT INTO item_sets (id, slug, name, description) VALUES
  (1, 'ember-crown-regalia', 'Ember Crown Regalia', 'A raid set crafted from Citadel of the Ember Crown materials.');

INSERT INTO item_set_items (set_id, item_id) VALUES
  (1, 710), (1, 711), (1, 712), (1, 713), (1, 714), (1, 715), (1, 716), (1, 717), (1, 718);

INSERT INTO item_set_bonuses
  (id, set_id, required_pieces, effect_type, description)
VALUES
  (1, 1, 2, 'mend_extra_target', 'Mend heals 1 additional target.'),
  (2, 1, 4, 'renew_extra_target', 'Renew is applied to 1 additional target.'),
  (3, 1, 7, 'mend_applies_renew', 'Casting Mend on a target applies Renew.');

DELETE FROM dungeon_completion_loot;

INSERT OR IGNORE INTO characters (id, class_id, name, level, experience) VALUES
  (1, 1, 'Mira', 1, 0),
  (2, 2, 'Mira', 1, 0),
  (3, 3, 'Mira', 1, 0);

INSERT OR IGNORE INTO character_ability_slots (character_id, slot_number, spell_id) VALUES
  (1, 1, 1), (1, 2, 2), (1, 3, 3), (1, 4, 4), (1, 5, 5), (1, 6, NULL),
  (2, 1, 20), (2, 2, 21), (2, 3, 22), (2, 4, 23), (2, 5, 24), (2, 6, NULL),
  (3, 1, 30), (3, 2, 31), (3, 3, 32), (3, 4, 33), (3, 5, 34), (3, 6, NULL);

INSERT OR IGNORE INTO character_inventory (character_id, item_id, quantity, equipped) VALUES
  (1, 100, 1, 1), (1, 101, 1, 1), (1, 102, 1, 1), (1, 103, 1, 1),
  (1, 104, 1, 1), (1, 108, 1, 1), (1, 105, 1, 1), (1, 109, 1, 1), (1, 106, 1, 1), (1, 107, 1, 0),
  (2, 100, 1, 1), (2, 101, 1, 1), (2, 102, 1, 1), (2, 103, 1, 1),
  (2, 104, 1, 1), (2, 108, 1, 1), (2, 105, 1, 1), (2, 109, 1, 1), (2, 106, 1, 1), (2, 107, 1, 0),
  (3, 100, 1, 1), (3, 101, 1, 1), (3, 102, 1, 1), (3, 103, 1, 1),
  (3, 104, 1, 1), (3, 108, 1, 1), (3, 105, 1, 1), (3, 109, 1, 1), (3, 106, 1, 1), (3, 107, 1, 0);

INSERT OR IGNORE INTO talents
  (id, class_id, slug, name, max_rank, tier, branch, prerequisite_talent_id, prerequisite_rank, effect_type, effect_value_per_rank, glyph, description)
VALUES
  (1, 1, 'bright-reserves', 'Bright Reserves', 5, 1, 1, NULL, 0, 'max_resource', 2, 'M', 'Increases maximum Mana by 2 per rank.'),
  (2, 1, 'gentle-dawn', 'Gentle Dawn', 5, 1, 2, NULL, 0, 'hot_power_percent', 2, '~', 'Increases healing-over-time power by 2% per rank.'),
  (10, 1, 'steady-hands', 'Steady Hands', 5, 1, 3, NULL, 0, 'direct_heal_percent', 2, '+', 'Increases direct healing by 2% per rank.'),
  (11, 1, 'overflowing-light', 'Overflowing Light', 5, 2, 1, 1, 3, 'resource_regen_percent', 2, 'O', 'Improves Mana regeneration by 2% per rank. Requires Bright Reserves rank 3.'),
  (12, 1, 'lingering-rays', 'Lingering Rays', 5, 2, 2, 2, 3, 'hot_duration_percent', 4, 'L', 'Extends healing-over-time duration by 4% per rank. Requires Gentle Dawn rank 3.'),
  (13, 1, 'radiant-precision', 'Radiant Precision', 5, 2, 3, 10, 3, 'critical_heal_percent', 1, '!', 'Adds 1% healing critical chance per rank. Requires Steady Hands rank 3.'),
  (14, 1, 'sunlit-aegis', 'Sunlit Aegis', 3, 3, 1, 11, 5, 'absorb_power_percent', 5, 'A', 'Strengthens absorb effects by 5% per rank. Requires Overflowing Light rank 5.'),
  (15, 1, 'shared-dawn', 'Shared Dawn', 3, 3, 2, 12, 5, 'party_heal_percent', 5, '*', 'Increases party-wide healing by 5% per rank. Requires Lingering Rays rank 5.'),
  (16, 1, 'miracle-worker', 'Miracle Worker', 1, 4, 2, 15, 3, 'cooldown_reduction_percent', 10, 'S', 'Reduces major healing cooldowns by 10%. Requires Shared Dawn rank 3.'),

  (3, 2, 'deep-roots', 'Deep Roots', 5, 1, 1, NULL, 0, 'max_resource', 2, 'R', 'Increases maximum Bloom by 2 per rank.'),
  (20, 2, 'patient-growth', 'Patient Growth', 5, 1, 2, NULL, 0, 'hot_power_percent', 2, 's', 'Increases healing-over-time power by 2% per rank.'),
  (21, 2, 'living-bark', 'Living Bark', 5, 1, 3, NULL, 0, 'absorb_power_percent', 2, 'B', 'Strengthens protective effects by 2% per rank.'),
  (22, 2, 'spring-rain', 'Spring Rain', 5, 2, 1, 3, 3, 'resource_regen_percent', 2, 'r', 'Improves Bloom regeneration by 2% per rank. Requires Deep Roots rank 3.'),
  (23, 2, 'perennial', 'Perennial', 5, 2, 2, 20, 3, 'hot_duration_percent', 4, 'P', 'Extends healing-over-time duration by 4% per rank. Requires Patient Growth rank 3.'),
  (24, 2, 'sheltering-canopy', 'Sheltering Canopy', 5, 2, 3, 21, 3, 'party_heal_percent', 2, 'C', 'Improves healing on injured allies by 2% per rank. Requires Living Bark rank 3.'),
  (25, 2, 'old-growth', 'Old Growth', 3, 3, 1, 22, 5, 'direct_heal_percent', 5, 'T', 'Strengthens direct healing by 5% per rank. Requires Spring Rain rank 5.'),
  (26, 2, 'endless-season', 'Endless Season', 3, 3, 2, 23, 5, 'hot_power_percent', 5, 'E', 'Further improves periodic healing by 5% per rank. Requires Perennial rank 5.'),
  (27, 2, 'heart-of-the-grove', 'Heart of the Grove', 1, 4, 2, 26, 3, 'cooldown_reduction_percent', 10, 'H', 'Reduces major healing cooldowns by 10%. Requires Endless Season rank 3.'),

  (4, 3, 'precise-script', 'Precise Script', 5, 1, 1, NULL, 0, 'direct_heal_percent', 2, '+', 'Increases direct healing by 2% per rank.'),
  (40, 3, 'deep-focus', 'Deep Focus', 5, 1, 2, NULL, 0, 'max_resource', 2, 'F', 'Increases maximum Focus by 2 per rank.'),
  (41, 3, 'reinforced-runes', 'Reinforced Runes', 5, 1, 3, NULL, 0, 'absorb_power_percent', 2, 'O', 'Strengthens barriers by 2% per rank.'),
  (42, 3, 'efficient-lines', 'Efficient Lines', 5, 2, 1, 4, 3, 'resource_cost_percent', -2, 'E', 'Reduces ability costs by 2% per rank. Requires Precise Script rank 3.'),
  (43, 3, 'resonant-pattern', 'Resonant Pattern', 5, 2, 2, 40, 3, 'party_heal_percent', 2, '*', 'Increases linked party healing by 2% per rank. Requires Deep Focus rank 3.'),
  (44, 3, 'layered-aegis', 'Layered Aegis', 5, 2, 3, 41, 3, 'absorb_power_percent', 3, 'A', 'Further improves barriers by 3% per rank. Requires Reinforced Runes rank 3.'),
  (45, 3, 'perfect-notation', 'Perfect Notation', 3, 3, 1, 42, 5, 'critical_heal_percent', 2, '!', 'Adds 2% healing critical chance per rank. Requires Efficient Lines rank 5.'),
  (46, 3, 'grand-concordance', 'Grand Concordance', 3, 3, 2, 43, 5, 'party_heal_percent', 5, 'G', 'Improves party-wide healing by 5% per rank. Requires Resonant Pattern rank 5.'),
  (47, 3, 'masterwork', 'Masterwork', 1, 4, 2, 46, 3, 'cooldown_reduction_percent', 10, 'M', 'Reduces major healing cooldowns by 10%. Requires Grand Concordance rank 3.');

UPDATE talents SET
  branch = CASE slug
    WHEN 'bright-reserves' THEN 1
    WHEN 'gentle-dawn' THEN 2
    WHEN 'deep-roots' THEN 1
    WHEN 'precise-script' THEN 1
    ELSE branch
  END,
  effect_type = CASE slug
    WHEN 'bright-reserves' THEN 'max_resource'
    WHEN 'gentle-dawn' THEN 'hot_power_percent'
    WHEN 'deep-roots' THEN 'max_resource'
    WHEN 'precise-script' THEN 'direct_heal_percent'
    ELSE effect_type
  END,
  effect_value_per_rank = 2,
  glyph = CASE slug
    WHEN 'bright-reserves' THEN 'M'
    WHEN 'gentle-dawn' THEN '~'
    WHEN 'deep-roots' THEN 'R'
    WHEN 'precise-script' THEN '+'
    ELSE glyph
  END
WHERE slug IN ('bright-reserves', 'gentle-dawn', 'deep-roots', 'precise-script');

UPDATE talents SET description = 'Increases maximum Mana by 2 per rank.'
WHERE slug = 'bright-reserves';
UPDATE talents SET description = 'Increases healing-over-time power by 2% per rank.'
WHERE slug = 'gentle-dawn';
UPDATE talents SET description = 'Increases maximum Bloom by 2 per rank.'
WHERE slug = 'deep-roots';
UPDATE talents SET description = 'Increases direct healing by 2% per rank.'
WHERE slug = 'precise-script';

INSERT INTO game_settings (key, value) VALUES
  ('max_level', '25'),
  ('max_talent_points', '25'),
  ('max_ability_slots', '6')
ON CONFLICT(key) DO UPDATE SET value = excluded.value;

DELETE FROM level_progression WHERE level > 25;

WITH RECURSIVE levels(level) AS (
  SELECT 1
  UNION ALL
  SELECT level + 1 FROM levels WHERE level < 25
)
INSERT OR IGNORE INTO level_progression (level, experience_required, talent_points_total)
SELECT level, (level - 1) * (level - 1) * 100, level
FROM levels;

UPDATE characters
SET
  level = MIN(level, 25),
  experience = MIN(
    experience,
    (SELECT experience_required FROM level_progression WHERE level = 25)
  ),
  talent_points = MIN(talent_points, 25);

UPDATE character_ability_slots
SET spell_id = NULL
WHERE spell_id IN (
  SELECT spells.id
  FROM spells
  JOIN characters ON characters.id = character_ability_slots.character_id
  WHERE spells.unlock_level > characters.level
);

-- Generated monster-part loot tiers. Dungeon 1 remains authored by hand above.
CREATE TEMP TABLE IF NOT EXISTS generated_loot_tiers (
  item_level INTEGER PRIMARY KEY,
  dungeon_id INTEGER NOT NULL,
  raid_id INTEGER NOT NULL,
  dungeon_difficulty_id INTEGER NOT NULL,
  raid_difficulty_id INTEGER NOT NULL,
  recipe_base INTEGER NOT NULL,
  craft_quantity INTEGER NOT NULL
);

DELETE FROM generated_loot_tiers;
INSERT INTO generated_loot_tiers
  (item_level, dungeon_id, raid_id, dungeon_difficulty_id, raid_difficulty_id, recipe_base, craft_quantity)
VALUES
  (10, 3, 2, 2, 101, 1100, 2),
  (15, 4, 5, 3, 103, 1200, 3),
  (20, 6, 7, 4, 104, 1300, 4),
  (25, 8, 9, 5, 105, 1400, 5);

CREATE TEMP TABLE IF NOT EXISTS generated_bosses (
  item_level INTEGER NOT NULL,
  boss_index INTEGER NOT NULL,
  boss_global_index INTEGER NOT NULL,
  boss_name TEXT NOT NULL,
  boss_slug TEXT NOT NULL,
  PRIMARY KEY (item_level, boss_index)
);

DELETE FROM generated_bosses;
INSERT INTO generated_bosses
  (item_level, boss_index, boss_global_index, boss_name, boss_slug)
VALUES
  (10, 0, 0, 'Tigrex', 'tigrex'),
  (10, 1, 1, 'Rathalos', 'rathalos'),
  (10, 2, 2, 'Gypceros', 'gypceros'),
  (15, 0, 3, 'Nargacuga', 'nargacuga'),
  (15, 1, 4, 'Azuros', 'azuros'),
  (15, 2, 5, 'Diablos', 'diablos'),
  (20, 0, 6, 'Barroth', 'barroth'),
  (20, 1, 7, 'Tobi Kadachi', 'tobi-kadachi'),
  (20, 2, 8, 'Monoblos', 'monoblos'),
  (25, 0, 9, 'Anjanath', 'anjanath'),
  (25, 1, 10, 'Bazelgeuse', 'bazelgeuse'),
  (25, 2, 11, 'Odogaron', 'odogaron');

CREATE TEMP TABLE IF NOT EXISTS generated_drop_patterns (
  boss_index INTEGER NOT NULL,
  drop_index INTEGER NOT NULL,
  drop_weight INTEGER NOT NULL,
  rarity TEXT NOT NULL,
  PRIMARY KEY (boss_index, drop_index)
);

DELETE FROM generated_drop_patterns;
INSERT INTO generated_drop_patterns
  (boss_index, drop_index, drop_weight, rarity)
VALUES
  (0, 1, 50, 'uncommon'),
  (0, 2, 5, 'rare'),
  (0, 3, 15, 'uncommon'),
  (0, 4, 30, 'uncommon'),
  (1, 1, 32, 'uncommon'),
  (1, 2, 50, 'uncommon'),
  (1, 3, 13, 'uncommon'),
  (1, 4, 5, 'rare'),
  (2, 1, 36, 'uncommon'),
  (2, 2, 52, 'uncommon'),
  (2, 3, 10, 'rare'),
  (2, 4, 2, 'epic');

INSERT OR IGNORE INTO locations (id, slug, name, description) VALUES
  (3, 'monster-frontier', 'The Monster Frontier', 'Hunting grounds used for tiered monster-part progression.');

UPDATE dungeons
SET slug = 'tigrex-raid',
    name = 'Tigrex Raid',
    location_id = 3,
    recommended_level = 5,
    content_type = 'raid',
    party_size = 18,
    completion_item_level = NULL,
    experience_reward = 275,
    description = 'A raid-scale hunt against Tigrex, Rathalos, and Gypceros.'
WHERE id = 2;

INSERT OR IGNORE INTO dungeons
  (id, location_id, slug, name, recommended_level, content_type, party_size, completion_item_level, experience_reward, description)
VALUES
  (3, 3, 'tigrex-hunting-ground', 'Tigrex Hunting Ground', 5, 'dungeon', 6, NULL, 205, 'A three-boss hunt featuring Tigrex, Rathalos, and Gypceros.'),
  (4, 3, 'nargacuga-hunting-ground', 'Nargacuga Hunting Ground', 10, 'dungeon', 6, NULL, 245, 'A three-boss hunt featuring Nargacuga, Azuros, and Diablos.'),
  (5, 3, 'nargacuga-raid', 'Nargacuga Raid', 10, 'raid', 18, NULL, 325, 'A raid-scale hunt against Nargacuga, Azuros, and Diablos.'),
  (6, 3, 'barroth-hunting-ground', 'Barroth Hunting Ground', 15, 'dungeon', 6, NULL, 285, 'A three-boss hunt featuring Barroth, Tobi Kadachi, and Monoblos.'),
  (7, 3, 'barroth-raid', 'Barroth Raid', 15, 'raid', 18, NULL, 375, 'A raid-scale hunt against Barroth, Tobi Kadachi, and Monoblos.'),
  (8, 3, 'anjanath-hunting-ground', 'Anjanath Hunting Ground', 20, 'dungeon', 6, NULL, 325, 'A three-boss hunt featuring Anjanath, Bazelgeuse, and Odogaron.'),
  (9, 3, 'anjanath-raid', 'Anjanath Raid', 20, 'raid', 18, NULL, 425, 'A raid-scale hunt against Anjanath, Bazelgeuse, and Odogaron.');

UPDATE difficulties
SET dropped_item_level = 10,
    unlock_level = 5,
    health_multiplier = 1.35,
    damage_multiplier = 1.2,
    experience_multiplier = 1.75,
    description = 'Veteran raid difficulty with extra monster-part drops.'
WHERE id = 101;

INSERT OR IGNORE INTO difficulties
  (id, slug, name, dropped_item_level, unlock_level, health_multiplier, damage_multiplier, experience_multiplier, description)
VALUES
  (103, 'raid-champion', 'Champion Raid', 15, 10, 1.7, 1.45, 2.4, 'Champion raid difficulty with extra monster-part drops.'),
  (104, 'raid-mythic', 'Mythic Raid', 20, 15, 2.1, 1.75, 3.2, 'Mythic raid difficulty with extra monster-part drops.'),
  (105, 'raid-ascendant', 'Ascendant Raid', 25, 20, 2.6, 2.1, 4.2, 'Ascendant raid difficulty with extra monster-part drops.');

DELETE FROM dungeon_difficulties WHERE dungeon_id = 2 AND difficulty_id <> 101;

INSERT OR IGNORE INTO dungeon_difficulties (dungeon_id, difficulty_id)
SELECT dungeon_id, dungeon_difficulty_id FROM generated_loot_tiers
UNION ALL
SELECT raid_id, raid_difficulty_id FROM generated_loot_tiers;

UPDATE encounters
SET slug = CASE id
      WHEN 100 THEN 'tigrex-raid-approach'
      WHEN 101 THEN 'tigrex-raid-guardians'
      WHEN 102 THEN 'tigrex-raid'
      WHEN 103 THEN 'rathalos-raid-approach'
      WHEN 104 THEN 'rathalos-raid-guardians'
      WHEN 105 THEN 'rathalos-raid'
      WHEN 106 THEN 'gypceros-raid-approach'
      WHEN 107 THEN 'gypceros-raid-guardians'
      WHEN 108 THEN 'gypceros-raid'
      ELSE slug
    END,
    name = CASE id
      WHEN 100 THEN 'Tigrex Approach'
      WHEN 101 THEN 'Tigrex Guardians'
      WHEN 102 THEN 'Tigrex'
      WHEN 103 THEN 'Rathalos Approach'
      WHEN 104 THEN 'Rathalos Guardians'
      WHEN 105 THEN 'Rathalos'
      WHEN 106 THEN 'Gypceros Approach'
      WHEN 107 THEN 'Gypceros Guardians'
      WHEN 108 THEN 'Gypceros'
      ELSE name
    END,
    encounter_type = CASE WHEN id IN (102, 105, 108) THEN 'boss' ELSE 'trash' END,
    description = CASE id
      WHEN 102 THEN 'Tigrex drops monster parts for item level 10 crafting.'
      WHEN 105 THEN 'Rathalos drops monster parts for item level 10 crafting.'
      WHEN 108 THEN 'Gypceros drops monster parts for item level 10 crafting.'
      ELSE 'Hunters clear the raid path.'
    END
WHERE id BETWEEN 100 AND 108;

INSERT OR IGNORE INTO encounters
  (id, dungeon_id, sequence, slug, name, encounter_type, max_health, base_damage, tank_damage, party_damage, description)
SELECT
  generated_loot_tiers.dungeon_id * 100 + generated_bosses.boss_index * 3 + offset.value,
  generated_loot_tiers.dungeon_id,
  generated_bosses.boss_index * 3 + offset.value,
  generated_bosses.boss_slug || '-dungeon-' || offset.slug,
  CASE offset.encounter_type
    WHEN 'boss' THEN generated_bosses.boss_name
    ELSE generated_bosses.boss_name || ' ' || offset.name
  END,
  offset.encounter_type,
  offset.health + generated_loot_tiers.item_level * 45 + generated_bosses.boss_index * 120,
  offset.damage + generated_bosses.boss_index * 2 + generated_loot_tiers.item_level / 5,
  offset.tank_damage + generated_bosses.boss_index * 2 + generated_loot_tiers.item_level / 8,
  offset.party_damage + generated_bosses.boss_index * 3,
  CASE offset.encounter_type
    WHEN 'boss' THEN generated_bosses.boss_name || ' drops monster parts for item level ' || generated_loot_tiers.item_level || ' crafting.'
    ELSE 'Hunters clear the path before ' || generated_bosses.boss_name || '.'
  END
FROM generated_loot_tiers
JOIN generated_bosses ON generated_bosses.item_level = generated_loot_tiers.item_level
JOIN (
  SELECT 1 AS value, 'approach' AS slug, 'Approach' AS name, 'trash' AS encounter_type, 650 AS health, 15 AS damage, 9 AS tank_damage, 28 AS party_damage
  UNION ALL SELECT 2, 'guardians', 'Guardians', 'trash', 720, 16, 10, 30
  UNION ALL SELECT 3, 'boss', '', 'boss', 980, 20, 14, 34
) AS offset;

INSERT OR IGNORE INTO encounters
  (id, dungeon_id, sequence, slug, name, encounter_type, max_health, base_damage, tank_damage, party_damage, description)
SELECT
  generated_loot_tiers.raid_id * 100 + generated_bosses.boss_index * 3 + offset.value,
  generated_loot_tiers.raid_id,
  generated_bosses.boss_index * 3 + offset.value,
  generated_bosses.boss_slug || '-raid-' || offset.slug,
  CASE offset.encounter_type
    WHEN 'boss' THEN generated_bosses.boss_name
    ELSE generated_bosses.boss_name || ' ' || offset.name
  END,
  offset.encounter_type,
  offset.health + generated_loot_tiers.item_level * 45 + generated_bosses.boss_index * 120 + 900,
  offset.damage + generated_bosses.boss_index * 2 + generated_loot_tiers.item_level / 5,
  offset.tank_damage + generated_bosses.boss_index * 2 + generated_loot_tiers.item_level / 8,
  offset.party_damage + generated_bosses.boss_index * 3 + 24,
  CASE offset.encounter_type
    WHEN 'boss' THEN generated_bosses.boss_name || ' drops monster parts for item level ' || generated_loot_tiers.item_level || ' crafting.'
    ELSE 'Hunters clear the raid path before ' || generated_bosses.boss_name || '.'
  END
FROM generated_loot_tiers
JOIN generated_bosses ON generated_bosses.item_level = generated_loot_tiers.item_level
JOIN (
  SELECT 1 AS value, 'approach' AS slug, 'Approach' AS name, 'trash' AS encounter_type, 650 AS health, 15 AS damage, 9 AS tank_damage, 28 AS party_damage
  UNION ALL SELECT 2, 'guardians', 'Guardians', 'trash', 720, 16, 10, 30
  UNION ALL SELECT 3, 'boss', '', 'boss', 980, 20, 14, 34
) AS offset
WHERE generated_loot_tiers.raid_id <> 2;

INSERT OR IGNORE INTO items
  (id, slug, name, slot, rarity, item_level, healing_power, max_resource_bonus, glyph, description)
SELECT
  3000 + generated_loot_tiers.item_level * 10 + generated_bosses.boss_global_index * 10 + generated_drop_patterns.drop_index,
  generated_bosses.boss_slug || '-drop-' || generated_drop_patterns.drop_index || '-ilvl-' || generated_loot_tiers.item_level,
  generated_bosses.boss_name || ' Drop ' || generated_drop_patterns.drop_index,
  'component',
  generated_drop_patterns.rarity,
  generated_loot_tiers.item_level,
  0,
  0,
  CAST(generated_drop_patterns.drop_index AS TEXT),
  'A monster part from ' || generated_bosses.boss_name || '.'
FROM generated_loot_tiers
JOIN generated_bosses ON generated_bosses.item_level = generated_loot_tiers.item_level
JOIN generated_drop_patterns ON generated_drop_patterns.boss_index = generated_bosses.boss_index;

DELETE FROM encounter_loot WHERE encounter_id NOT IN (3, 12, 22);
DELETE FROM encounter_loot WHERE item_id IN (SELECT id FROM items WHERE slot <> 'component');

INSERT OR IGNORE INTO encounter_loot (encounter_id, item_id, difficulty_id, drop_weight, drop_chance)
SELECT
  generated_loot_tiers.dungeon_id * 100 + generated_bosses.boss_index * 3 + 3,
  3000 + generated_loot_tiers.item_level * 10 + generated_bosses.boss_global_index * 10 + generated_drop_patterns.drop_index,
  generated_loot_tiers.dungeon_difficulty_id,
  generated_drop_patterns.drop_weight,
  1.0
FROM generated_loot_tiers
JOIN generated_bosses ON generated_bosses.item_level = generated_loot_tiers.item_level
JOIN generated_drop_patterns ON generated_drop_patterns.boss_index = generated_bosses.boss_index;

INSERT OR IGNORE INTO encounter_loot (encounter_id, item_id, difficulty_id, drop_weight, drop_chance)
SELECT
  CASE generated_loot_tiers.raid_id
    WHEN 2 THEN 102 + generated_bosses.boss_index * 3
    ELSE generated_loot_tiers.raid_id * 100 + generated_bosses.boss_index * 3 + 3
  END,
  3000 + generated_loot_tiers.item_level * 10 + generated_bosses.boss_global_index * 10 + generated_drop_patterns.drop_index,
  generated_loot_tiers.raid_difficulty_id,
  generated_drop_patterns.drop_weight,
  1.0
FROM generated_loot_tiers
JOIN generated_bosses ON generated_bosses.item_level = generated_loot_tiers.item_level
JOIN generated_drop_patterns ON generated_drop_patterns.boss_index = generated_bosses.boss_index;

CREATE TEMP TABLE IF NOT EXISTS generated_recipe_offsets (
  recipe_offset INTEGER PRIMARY KEY,
  boss_index INTEGER NOT NULL
);

DELETE FROM generated_recipe_offsets;
INSERT INTO generated_recipe_offsets (recipe_offset, boss_index) VALUES
  (1, 0), (2, 0), (3, 0),
  (4, 1), (5, 1), (6, 1),
  (7, 2), (8, 2), (9, 2);

UPDATE crafting_recipes
SET source_dungeon_id = (
      SELECT generated_loot_tiers.dungeon_id
      FROM generated_loot_tiers
      WHERE crafting_recipes.id BETWEEN generated_loot_tiers.recipe_base + 1 AND generated_loot_tiers.recipe_base + 9
    ),
    source_encounter_id = (
      SELECT generated_loot_tiers.dungeon_id * 100 + generated_recipe_offsets.boss_index * 3 + 3
      FROM generated_loot_tiers
      JOIN generated_recipe_offsets
        ON crafting_recipes.id = generated_loot_tiers.recipe_base + generated_recipe_offsets.recipe_offset
    )
WHERE id BETWEEN 1101 AND 1409;

UPDATE crafting_recipes
SET source_dungeon_id = 2,
    source_encounter_id = 102 + (
      SELECT generated_recipe_offsets.boss_index * 3
      FROM generated_recipe_offsets
      WHERE crafting_recipes.id = 2000 + generated_recipe_offsets.recipe_offset
    )
WHERE id BETWEEN 2001 AND 2009;

DELETE FROM crafting_recipe_components
WHERE recipe_id BETWEEN 1101 AND 1409
  OR recipe_id BETWEEN 2001 AND 2009;

INSERT OR IGNORE INTO crafting_recipe_components (recipe_id, item_id, quantity)
SELECT
  generated_loot_tiers.recipe_base + generated_recipe_offsets.recipe_offset,
  3000 + generated_loot_tiers.item_level * 10 + generated_bosses.boss_global_index * 10 + component.drop_index,
  CASE component.drop_index
    WHEN 1 THEN 5
    WHEN 2 THEN 3
    WHEN 4 THEN 1
  END
FROM generated_loot_tiers
JOIN generated_recipe_offsets
JOIN generated_bosses
  ON generated_bosses.item_level = generated_loot_tiers.item_level
  AND generated_bosses.boss_index = generated_recipe_offsets.boss_index
JOIN (
  SELECT 1 AS drop_index
  UNION ALL SELECT 2
  UNION ALL SELECT 4
) AS component;

INSERT OR IGNORE INTO crafting_recipe_components (recipe_id, item_id, quantity)
SELECT
  2000 + generated_recipe_offsets.recipe_offset,
  3000 + generated_loot_tiers.item_level * 10 + generated_bosses.boss_global_index * 10 + component.drop_index,
  CASE component.drop_index
    WHEN 1 THEN 5
    WHEN 2 THEN 3
    WHEN 4 THEN 1
  END
FROM generated_loot_tiers
JOIN generated_recipe_offsets
JOIN generated_bosses
  ON generated_bosses.item_level = generated_loot_tiers.item_level
  AND generated_bosses.boss_index = generated_recipe_offsets.boss_index
JOIN (
  SELECT 1 AS drop_index
  UNION ALL SELECT 2
  UNION ALL SELECT 4
) AS component
WHERE generated_loot_tiers.item_level = 10;

UPDATE items
SET name = CASE id
    WHEN 5 THEN 'Bulldrome Helmet'
    WHEN 2 THEN 'Bulldrome Chest'
    WHEN 6 THEN 'Bulldrome Gloves'
    WHEN 4 THEN 'Yian Kut-Ku Boots'
    WHEN 1 THEN 'Yian Kut-Ku Ring'
    WHEN 7 THEN 'Yian Kut-Ku Trinket'
    WHEN 3 THEN 'Rathian Weapon'
    WHEN 8 THEN 'Rathian Pants'
    WHEN 9 THEN 'Rathian Necklace'
    WHEN 205 THEN 'Tempered Tigrex Helmet'
    WHEN 202 THEN 'Tempered Tigrex Chest'
    WHEN 206 THEN 'Tempered Tigrex Gloves'
    WHEN 204 THEN 'Tempered Rathalos Boots'
    WHEN 201 THEN 'Tempered Rathalos Ring'
    WHEN 207 THEN 'Tempered Rathalos Trinket'
    WHEN 203 THEN 'Tempered Gypceros Weapon'
    WHEN 208 THEN 'Tempered Gypceros Pants'
    WHEN 209 THEN 'Tempered Gypceros Necklace'
    WHEN 305 THEN 'Runed Nargacuga Helmet'
    WHEN 302 THEN 'Runed Nargacuga Chest'
    WHEN 306 THEN 'Runed Nargacuga Gloves'
    WHEN 304 THEN 'Runed Azuros Boots'
    WHEN 301 THEN 'Runed Azuros Ring'
    WHEN 307 THEN 'Runed Azuros Trinket'
    WHEN 303 THEN 'Runed Diablos Weapon'
    WHEN 308 THEN 'Runed Diablos Pants'
    WHEN 309 THEN 'Runed Diablos Necklace'
    WHEN 405 THEN 'Mythic Barroth Helmet'
    WHEN 402 THEN 'Mythic Barroth Chest'
    WHEN 406 THEN 'Mythic Barroth Gloves'
    WHEN 404 THEN 'Mythic Tobi Kadachi Boots'
    WHEN 401 THEN 'Mythic Tobi Kadachi Ring'
    WHEN 407 THEN 'Mythic Tobi Kadachi Trinket'
    WHEN 403 THEN 'Mythic Monoblos Weapon'
    WHEN 408 THEN 'Mythic Monoblos Pants'
    WHEN 409 THEN 'Mythic Monoblos Necklace'
    WHEN 505 THEN 'Ascendant Anjanath Helmet'
    WHEN 502 THEN 'Ascendant Anjanath Chest'
    WHEN 506 THEN 'Ascendant Anjanath Gloves'
    WHEN 504 THEN 'Ascendant Bazelgeuse Boots'
    WHEN 501 THEN 'Ascendant Bazelgeuse Ring'
    WHEN 507 THEN 'Ascendant Bazelgeuse Trinket'
    WHEN 503 THEN 'Ascendant Odogaron Weapon'
    WHEN 508 THEN 'Ascendant Odogaron Pants'
    WHEN 509 THEN 'Ascendant Odogaron Necklace'
    WHEN 714 THEN 'Raid Tigrex Helmet'
    WHEN 711 THEN 'Raid Tigrex Chest'
    WHEN 715 THEN 'Raid Tigrex Gloves'
    WHEN 713 THEN 'Raid Rathalos Boots'
    WHEN 710 THEN 'Raid Rathalos Ring'
    WHEN 716 THEN 'Raid Rathalos Trinket'
    WHEN 712 THEN 'Raid Gypceros Weapon'
    WHEN 717 THEN 'Raid Gypceros Pants'
    WHEN 718 THEN 'Raid Gypceros Necklace'
    ELSE name
  END,
  description = CASE id
    WHEN 5 THEN 'Crafted from Bulldrome monster parts.'
    WHEN 2 THEN 'Crafted from Bulldrome monster parts.'
    WHEN 6 THEN 'Crafted from Bulldrome monster parts.'
    WHEN 4 THEN 'Crafted from Yian Kut-Ku monster parts.'
    WHEN 1 THEN 'Crafted from Yian Kut-Ku monster parts.'
    WHEN 7 THEN 'Crafted from Yian Kut-Ku monster parts.'
    WHEN 3 THEN 'Crafted from Rathian monster parts.'
    WHEN 8 THEN 'Crafted from Rathian monster parts.'
    WHEN 9 THEN 'Crafted from Rathian monster parts.'
    ELSE description
  END
WHERE id IN (
  1, 2, 3, 4, 5, 6, 7, 8, 9,
  201, 202, 203, 204, 205, 206, 207, 208, 209,
  301, 302, 303, 304, 305, 306, 307, 308, 309,
  401, 402, 403, 404, 405, 406, 407, 408, 409,
  501, 502, 503, 504, 505, 506, 507, 508, 509,
  710, 711, 712, 713, 714, 715, 716, 717, 718
);

UPDATE items
SET slug = CASE id
    WHEN 860 THEN 'bulldrome-drop-1'
    WHEN 861 THEN 'bulldrome-drop-2'
    WHEN 862 THEN 'bulldrome-drop-3'
    WHEN 863 THEN 'bulldrome-drop-4'
    WHEN 864 THEN 'yian-kut-ku-drop-1'
    WHEN 865 THEN 'yian-kut-ku-drop-2'
    WHEN 866 THEN 'yian-kut-ku-drop-3'
    WHEN 867 THEN 'yian-kut-ku-drop-4'
    WHEN 868 THEN 'rathian-drop-1'
    WHEN 869 THEN 'rathian-drop-2'
    WHEN 870 THEN 'rathian-drop-3'
    WHEN 871 THEN 'rathian-drop-4'
    ELSE slug
  END,
  name = CASE id
    WHEN 860 THEN 'Bulldrome Drop 1'
    WHEN 861 THEN 'Bulldrome Drop 2'
    WHEN 862 THEN 'Bulldrome Drop 3'
    WHEN 863 THEN 'Bulldrome Drop 4'
    WHEN 864 THEN 'Yian Kut-Ku Drop 1'
    WHEN 865 THEN 'Yian Kut-Ku Drop 2'
    WHEN 866 THEN 'Yian Kut-Ku Drop 3'
    WHEN 867 THEN 'Yian Kut-Ku Drop 4'
    WHEN 868 THEN 'Rathian Drop 1'
    WHEN 869 THEN 'Rathian Drop 2'
    WHEN 870 THEN 'Rathian Drop 3'
    WHEN 871 THEN 'Rathian Drop 4'
    ELSE name
  END,
  glyph = CASE id
    WHEN 860 THEN '1'
    WHEN 861 THEN '2'
    WHEN 862 THEN '3'
    WHEN 863 THEN '4'
    WHEN 864 THEN '1'
    WHEN 865 THEN '2'
    WHEN 866 THEN '3'
    WHEN 867 THEN '4'
    WHEN 868 THEN '1'
    WHEN 869 THEN '2'
    WHEN 870 THEN '3'
    WHEN 871 THEN '4'
    ELSE glyph
  END,
  description = CASE
    WHEN id BETWEEN 860 AND 863 THEN 'A monster part from Bulldrome.'
    WHEN id BETWEEN 864 AND 867 THEN 'A monster part from Yian Kut-Ku.'
    WHEN id BETWEEN 868 AND 871 THEN 'A monster part from Rathian.'
    ELSE description
  END
WHERE id BETWEEN 860 AND 871;

DELETE FROM crafting_recipe_components WHERE recipe_id BETWEEN 1001 AND 1009;

INSERT OR IGNORE INTO crafting_recipe_components (recipe_id, item_id, quantity) VALUES
  (1001, 860, 5), (1001, 861, 3), (1001, 863, 1),
  (1002, 860, 5), (1002, 861, 3), (1002, 863, 1),
  (1003, 860, 5), (1003, 861, 3), (1003, 863, 1),
  (1004, 864, 5), (1004, 865, 3), (1004, 867, 1),
  (1005, 864, 5), (1005, 865, 3), (1005, 867, 1),
  (1006, 864, 5), (1006, 865, 3), (1006, 867, 1),
  (1007, 868, 5), (1007, 869, 3), (1007, 871, 1),
  (1008, 868, 5), (1008, 869, 3), (1008, 871, 1),
  (1009, 868, 5), (1009, 869, 3), (1009, 871, 1);
