Files
i-want-to-heal/db/seed.sql
T
Warren H 3a8d5ad8c5 changes
2026-06-18 22:28:04 -04:00

1325 lines
71 KiB
SQL

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);
-- Coin gearing override: every boss/difficulty drops one boss coin, and each
-- craft costs the target item level in that source boss coin.
UPDATE crafting_recipes
SET source_dungeon_id = 1,
source_encounter_id = 3
WHERE id BETWEEN 1001 AND 1409
AND item_id IN (SELECT id FROM items WHERE slot IN ('helmet', 'chest', 'gloves'));
UPDATE crafting_recipes
SET source_dungeon_id = 1,
source_encounter_id = 12
WHERE id BETWEEN 1001 AND 1409
AND item_id IN (SELECT id FROM items WHERE slot IN ('boots', 'ring', 'trinket'));
UPDATE crafting_recipes
SET source_dungeon_id = 1,
source_encounter_id = 22
WHERE id BETWEEN 1001 AND 1409
AND item_id IN (SELECT id FROM items WHERE slot IN ('weapon', 'pants', 'necklace'));
UPDATE crafting_recipes
SET difficulty_id = CASE
(SELECT item_level FROM items WHERE items.id = crafting_recipes.item_id)
WHEN 5 THEN 1
WHEN 10 THEN 2
WHEN 15 THEN 3
WHEN 20 THEN 4
WHEN 25 THEN 5
ELSE difficulty_id
END
WHERE id BETWEEN 1001 AND 1409;
UPDATE items
SET rarity = CASE item_level
WHEN 5 THEN 'common'
WHEN 10 THEN 'uncommon'
WHEN 15 THEN 'rare'
WHEN 20 THEN 'epic'
WHEN 25 THEN 'legendary'
ELSE rarity
END
WHERE id IN (SELECT item_id FROM crafting_recipes);
UPDATE items
SET name = (
SELECT
CASE items.item_level
WHEN 5 THEN ''
WHEN 10 THEN 'Green '
WHEN 15 THEN 'Blue '
WHEN 20 THEN 'Purple '
WHEN 25 THEN 'Orange '
ELSE ''
END
|| encounters.name || ' '
|| CASE items.slot
WHEN 'weapon' THEN 'Weapon'
WHEN 'helmet' THEN 'Helmet'
WHEN 'chest' THEN 'Chest'
WHEN 'gloves' THEN 'Gloves'
WHEN 'boots' THEN 'Boots'
WHEN 'pants' THEN 'Pants'
WHEN 'ring' THEN 'Ring'
WHEN 'necklace' THEN 'Necklace'
WHEN 'trinket' THEN 'Trinket'
ELSE items.name
END
FROM crafting_recipes
JOIN encounters ON encounters.id = crafting_recipes.source_encounter_id
WHERE crafting_recipes.item_id = items.id
LIMIT 1
),
description = (
SELECT 'Crafted with ' || encounters.name || ' coins.'
FROM crafting_recipes
JOIN encounters ON encounters.id = crafting_recipes.source_encounter_id
WHERE crafting_recipes.item_id = items.id
LIMIT 1
)
WHERE id IN (SELECT item_id FROM crafting_recipes);
CREATE TEMP TABLE IF NOT EXISTS coin_sources (
item_id INTEGER PRIMARY KEY,
encounter_id INTEGER NOT NULL,
difficulty_id INTEGER NOT NULL,
item_level INTEGER NOT NULL,
slug TEXT NOT NULL,
name TEXT NOT NULL,
rarity TEXT NOT NULL,
glyph TEXT NOT NULL,
description TEXT NOT NULL
);
DELETE FROM coin_sources;
INSERT INTO coin_sources
SELECT
280000 + encounters.id * 100 + difficulties.dropped_item_level,
encounters.id,
difficulties.id,
difficulties.dropped_item_level,
encounters.slug || '-coin-ilvl-' || difficulties.dropped_item_level,
CASE difficulties.dropped_item_level
WHEN 5 THEN ''
WHEN 10 THEN 'Green '
WHEN 15 THEN 'Blue '
WHEN 20 THEN 'Purple '
WHEN 25 THEN 'Orange '
ELSE ''
END || encounters.name || ' Coin',
CASE difficulties.dropped_item_level
WHEN 5 THEN 'common'
WHEN 10 THEN 'uncommon'
WHEN 15 THEN 'rare'
WHEN 20 THEN 'epic'
WHEN 25 THEN 'legendary'
ELSE 'common'
END,
'$',
'A boss coin from ' || encounters.name || ' used for item level '
|| difficulties.dropped_item_level || ' crafting.'
FROM encounters
JOIN dungeon_difficulties ON dungeon_difficulties.dungeon_id = encounters.dungeon_id
JOIN difficulties ON difficulties.id = dungeon_difficulties.difficulty_id
WHERE encounters.encounter_type = 'boss';
INSERT OR IGNORE INTO items
(id, slug, name, slot, rarity, item_level, healing_power, max_resource_bonus, glyph, description)
SELECT item_id, slug, name, 'component', rarity, item_level, 0, 0, glyph, description
FROM coin_sources;
UPDATE items
SET slug = (SELECT slug FROM coin_sources WHERE coin_sources.item_id = items.id),
name = (SELECT name FROM coin_sources WHERE coin_sources.item_id = items.id),
slot = 'component',
rarity = (SELECT rarity FROM coin_sources WHERE coin_sources.item_id = items.id),
item_level = (SELECT item_level FROM coin_sources WHERE coin_sources.item_id = items.id),
healing_power = 0,
max_resource_bonus = 0,
glyph = (SELECT glyph FROM coin_sources WHERE coin_sources.item_id = items.id),
description = (SELECT description FROM coin_sources WHERE coin_sources.item_id = items.id)
WHERE id IN (SELECT item_id FROM coin_sources);
DELETE FROM encounter_loot;
INSERT INTO encounter_loot (encounter_id, item_id, difficulty_id, drop_weight, drop_chance)
SELECT encounter_id, item_id, difficulty_id, 100, 1.0
FROM coin_sources;
DELETE FROM crafting_recipe_components;
INSERT INTO crafting_recipe_components (recipe_id, item_id, quantity)
SELECT
crafting_recipes.id,
coin_sources.item_id,
items.item_level
FROM crafting_recipes
JOIN items ON items.id = crafting_recipes.item_id
JOIN coin_sources
ON coin_sources.encounter_id = crafting_recipes.source_encounter_id
AND coin_sources.difficulty_id = crafting_recipes.difficulty_id;
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 boss coins for item level 10 crafting.'
WHEN 105 THEN 'Rathalos drops boss coins for item level 10 crafting.'
WHEN 108 THEN 'Gypceros drops boss coins 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 boss coins 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 boss coins 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);
-- Final coin gearing override. Keep this after legacy loot edits.
UPDATE crafting_recipes
SET source_dungeon_id = 1,
source_encounter_id = 3
WHERE id BETWEEN 1001 AND 1409
AND item_id IN (SELECT id FROM items WHERE slot IN ('helmet', 'chest', 'gloves'));
UPDATE crafting_recipes
SET source_dungeon_id = 1,
source_encounter_id = 12
WHERE id BETWEEN 1001 AND 1409
AND item_id IN (SELECT id FROM items WHERE slot IN ('boots', 'ring', 'trinket'));
UPDATE crafting_recipes
SET source_dungeon_id = 1,
source_encounter_id = 22
WHERE id BETWEEN 1001 AND 1409
AND item_id IN (SELECT id FROM items WHERE slot IN ('weapon', 'pants', 'necklace'));
UPDATE crafting_recipes
SET difficulty_id = CASE
(SELECT item_level FROM items WHERE items.id = crafting_recipes.item_id)
WHEN 5 THEN 1
WHEN 10 THEN 2
WHEN 15 THEN 3
WHEN 20 THEN 4
WHEN 25 THEN 5
ELSE difficulty_id
END
WHERE id BETWEEN 1001 AND 1409;
UPDATE items
SET rarity = CASE item_level
WHEN 5 THEN 'common'
WHEN 10 THEN 'uncommon'
WHEN 15 THEN 'rare'
WHEN 20 THEN 'epic'
WHEN 25 THEN 'legendary'
ELSE rarity
END
WHERE id IN (SELECT item_id FROM crafting_recipes);
UPDATE items
SET name = (
SELECT
CASE items.item_level
WHEN 5 THEN ''
WHEN 10 THEN 'Green '
WHEN 15 THEN 'Blue '
WHEN 20 THEN 'Purple '
WHEN 25 THEN 'Orange '
ELSE ''
END
|| encounters.name || ' '
|| CASE items.slot
WHEN 'weapon' THEN 'Weapon'
WHEN 'helmet' THEN 'Helmet'
WHEN 'chest' THEN 'Chest'
WHEN 'gloves' THEN 'Gloves'
WHEN 'boots' THEN 'Boots'
WHEN 'pants' THEN 'Pants'
WHEN 'ring' THEN 'Ring'
WHEN 'necklace' THEN 'Necklace'
WHEN 'trinket' THEN 'Trinket'
ELSE items.name
END
FROM crafting_recipes
JOIN encounters ON encounters.id = crafting_recipes.source_encounter_id
WHERE crafting_recipes.item_id = items.id
LIMIT 1
),
description = (
SELECT 'Crafted with ' || encounters.name || ' coins.'
FROM crafting_recipes
JOIN encounters ON encounters.id = crafting_recipes.source_encounter_id
WHERE crafting_recipes.item_id = items.id
LIMIT 1
)
WHERE id IN (SELECT item_id FROM crafting_recipes);
DELETE FROM coin_sources;
INSERT INTO coin_sources
SELECT
280000 + encounters.id * 100 + difficulties.dropped_item_level,
encounters.id,
difficulties.id,
difficulties.dropped_item_level,
encounters.slug || '-coin-ilvl-' || difficulties.dropped_item_level,
CASE difficulties.dropped_item_level
WHEN 5 THEN ''
WHEN 10 THEN 'Green '
WHEN 15 THEN 'Blue '
WHEN 20 THEN 'Purple '
WHEN 25 THEN 'Orange '
ELSE ''
END || encounters.name || ' Coin',
CASE difficulties.dropped_item_level
WHEN 5 THEN 'common'
WHEN 10 THEN 'uncommon'
WHEN 15 THEN 'rare'
WHEN 20 THEN 'epic'
WHEN 25 THEN 'legendary'
ELSE 'common'
END,
'$',
'A boss coin from ' || encounters.name || ' used for item level '
|| difficulties.dropped_item_level || ' crafting.'
FROM encounters
JOIN dungeon_difficulties ON dungeon_difficulties.dungeon_id = encounters.dungeon_id
JOIN difficulties ON difficulties.id = dungeon_difficulties.difficulty_id
WHERE encounters.encounter_type = 'boss';
INSERT OR IGNORE INTO items
(id, slug, name, slot, rarity, item_level, healing_power, max_resource_bonus, glyph, description)
SELECT item_id, slug, name, 'component', rarity, item_level, 0, 0, glyph, description
FROM coin_sources;
UPDATE items
SET slug = (SELECT slug FROM coin_sources WHERE coin_sources.item_id = items.id),
name = (SELECT name FROM coin_sources WHERE coin_sources.item_id = items.id),
slot = 'component',
rarity = (SELECT rarity FROM coin_sources WHERE coin_sources.item_id = items.id),
item_level = (SELECT item_level FROM coin_sources WHERE coin_sources.item_id = items.id),
healing_power = 0,
max_resource_bonus = 0,
glyph = (SELECT glyph FROM coin_sources WHERE coin_sources.item_id = items.id),
description = (SELECT description FROM coin_sources WHERE coin_sources.item_id = items.id)
WHERE id IN (SELECT item_id FROM coin_sources);
DELETE FROM encounter_loot;
INSERT INTO encounter_loot (encounter_id, item_id, difficulty_id, drop_weight, drop_chance)
SELECT encounter_id, item_id, difficulty_id, 100, 1.0
FROM coin_sources;
DELETE FROM crafting_recipe_components;
INSERT INTO crafting_recipe_components (recipe_id, item_id, quantity)
SELECT
crafting_recipes.id,
coin_sources.item_id,
items.item_level
FROM crafting_recipes
JOIN items ON items.id = crafting_recipes.item_id
JOIN coin_sources
ON coin_sources.encounter_id = crafting_recipes.source_encounter_id
AND coin_sources.difficulty_id = crafting_recipes.difficulty_id;