Original open-world wuxia browser RPG: - Graphical 48px tile world (12 locations) with walkable character, NPC interaction, action spots, roaming enemies, travel portals - Tactical 10x7 grid battles: shapes, statuses, internals, 30+ techniques incl. tier-V ultimates & support arts across 6 weapon types - Full equipment: weapon/head/body/feet/2 accessories, 5 tiers, smithing - 6-chapter main story + side jobs board + bounty hunts + tournament - Crafting (smith/alchemy), fishing minigame, gambling, pickpocketing - Companions with chemistry passives, affection, romance, sects - Achievements, monster codex, day/night cycle, endings - 25-test headless smoke suite; no-cache static server included
331 lines
36 KiB
JavaScript
331 lines
36 KiB
JavaScript
'use strict';
|
|
/* ============================================================
|
|
DATA: items, techniques, internal arts, lightness, enemies
|
|
All names & lore are original fiction.
|
|
============================================================ */
|
|
|
|
const ITEMS = {};
|
|
function defItem(id, o) { o.id = id; ITEMS[id] = o; }
|
|
|
|
/* ---------------- ITEMS ---------------- */
|
|
defItem('w_sword_1', { name: 'Rusty Sword', type: 'weapon', slot: 'weapon', wt: 'sword', atk: 6, price: 40, rar: 0, desc: 'A pitted jian passed down too many times.' });
|
|
defItem('w_sword_2', { name: 'Cold-Forged Jian', type: 'weapon', slot: 'weapon', wt: 'sword', atk: 14, price: 220, rar: 1, desc: 'Quenched in mountain snow. Balanced and keen.' });
|
|
defItem('w_sword_3', { name: 'Azure Edge', type: 'weapon', slot: 'weapon', wt: 'sword', atk: 26, price: 900, rar: 2, desc: 'Sect-forged steel with a blue-grey gleam.' });
|
|
defItem('w_sword_4', { name: 'Voice of the River', type: 'weapon', slot: 'weapon', wt: 'sword', atk: 40, crit: 5, price: 2600, rar: 3, desc: 'It hums softly when drawn, like water over stone.' });
|
|
|
|
defItem('w_blade_1', { name: 'Hunting Saber', type: 'weapon', slot: 'weapon', wt: 'blade', atk: 7, price: 45, rar: 0, desc: 'Heavy-backed and honest, made for firewood and wolves.' });
|
|
defItem('w_blade_2', { name: 'Wolf-Fang Dao', type: 'weapon', slot: 'weapon', wt: 'blade', atk: 16, price: 240, rar: 1, desc: 'Notched like fangs. Wolves fear it on sight.' });
|
|
defItem('w_blade_3', { name: 'Autumn Moon Blade', type: 'weapon', slot: 'weapon', wt: 'blade', atk: 28, price: 950, rar: 2, desc: 'Curved like the harvest moon, cold as its light.' });
|
|
defItem('w_blade_4', { name: 'Severing Cloud', type: 'weapon', slot: 'weapon', wt: 'blade', atk: 42, crit: 5, price: 2700, rar: 3, desc: 'Legend says one stroke parted a stormfront.' });
|
|
|
|
defItem('w_spear_1', { name: 'Iron-Tip Spear', type: 'weapon', slot: 'weapon', wt: 'spear', rng: 2, atk: 7, price: 50, rar: 0, desc: 'Reach beats rage, as granthands say.' });
|
|
defItem('w_spear_2', { name: 'Serpent Spear', type: 'weapon', slot: 'weapon', wt: 'spear', rng: 2, atk: 15, price: 250, rar: 1, desc: 'A sinuous shaft that strikes like a viper.' });
|
|
defItem('w_spear_3', { name: 'Dragonhead Lance', type: 'weapon', slot: 'weapon', wt: 'spear', rng: 2, atk: 27, price: 1000, rar: 2, desc: 'Carved dragon muzzles hide a triple-edged point.' });
|
|
defItem('w_spear_4', { name: 'Storm Piercer', type: 'weapon', slot: 'weapon', wt: 'spear', rng: 2, atk: 41, crit: 5, price: 2800, rar: 3, desc: 'Thrust fast enough and the thunder follows.' });
|
|
|
|
defItem('w_staff_1', { name: 'Oak Staff', type: 'weapon', slot: 'weapon', wt: 'staff', atk: 6, mp: 5, price: 35, rar: 0, desc: 'Straight, sturdy, and forgiving to beginners.' });
|
|
defItem('w_staff_2', { name: 'Moonlit Cudgel', type: 'weapon', slot: 'weapon', wt: 'staff', atk: 13, mp: 10, price: 210, rar: 1, desc: 'White as bone under moonlight.' });
|
|
defItem('w_staff_3', { name: 'Demon-Subduing Staff', type: 'weapon', slot: 'weapon', wt: 'staff', atk: 25, mp: 18, price: 920, rar: 2, desc: 'Temple ironwood, blessed a hundred nights.' });
|
|
defItem('w_staff_4', { name: 'Lotus Heart Staff', type: 'weapon', slot: 'weapon', wt: 'staff', atk: 38, mp: 28, price: 2600, rar: 3, desc: 'A lotus seed sits in its hollow core, forever unfalling.' });
|
|
|
|
defItem('w_fist_1', { name: 'Cloth Hand Wraps', type: 'weapon', slot: 'weapon', wt: 'fist', atk: 5, spd: 1, price: 25, rar: 0, desc: 'Simple linen. The knuckles provide the rest.' });
|
|
defItem('w_fist_2', { name: 'Iron Palm Guards', type: 'weapon', slot: 'weapon', wt: 'fist', atk: 12, spd: 1, price: 180, rar: 1, desc: 'Weighted leather that turns fists into hammers.' });
|
|
defItem('w_fist_3', { name: 'Tiger-Bone Knuckles', type: 'weapon', slot: 'weapon', wt: 'fist', atk: 24, spd: 2, price: 850, rar: 2, desc: 'Ground tiger-bone lacquered over iron rings.' });
|
|
defItem('w_fist_4', { name: 'Mountain-Shaking Fists', type: 'weapon', slot: 'weapon', wt: 'fist', atk: 37, spd: 2, crit: 5, price: 2400, rar: 3, desc: 'Old Guo swears the mountain felt these.' });
|
|
|
|
defItem('w_hidden_1', { name: 'Throwing Darts', type: 'weapon', slot: 'weapon', wt: 'hidden', rng: 4, atk: 5, price: 30, rar: 0, desc: 'A sleeve full of sharp arguments.' });
|
|
defItem('w_hidden_2', { name: 'Sleeved Needles', type: 'weapon', slot: 'weapon', wt: 'hidden', rng: 4, atk: 11, price: 200, rar: 1, desc: 'Thin as rain, quiet as regret.' });
|
|
defItem('w_hidden_3', { name: 'Plum-Flower Darts', type: 'weapon', slot: 'weapon', wt: 'hidden', rng: 5, atk: 22, price: 880, rar: 2, desc: 'They bloom in five-pointed patterns mid-flight.' });
|
|
defItem('w_hidden_4', { name: 'Rain of Sanskrit', type: 'weapon', slot: 'weapon', wt: 'hidden', rng: 5, atk: 34, crit: 5, price: 2300, rar: 3, desc: 'Each needle engraved with a single silent word.' });
|
|
|
|
defItem('ar_head_1', { name: 'Straw Hat', type: 'armor', slot: 'head', def: 2, price: 15, rar: 0, desc: 'Keeps off rain and rude glances alike.' });
|
|
defItem('ar_head_2', { name: 'Iron Skullcap', type: 'armor', slot: 'head', def: 5, price: 90, rar: 1, desc: 'Dented, but the dents are on the outside.' });
|
|
defItem('ar_head_3', { name: 'Wind Hood', type: 'armor', slot: 'head', def: 8, spd: 1, price: 320, rar: 2, desc: 'Cut so wind parts around the wearer.' });
|
|
defItem('ar_head_4', { name: 'Crown of Stillness', type: 'armor', slot: 'head', def: 12, mp: 20, price: 1100, rar: 3, desc: 'A meditation band of cold dark iron.' });
|
|
|
|
defItem('ar_body_1', { name: 'Padded Vest', type: 'armor', slot: 'body', def: 3, price: 30, rar: 0, desc: 'Layered rags stitched with hope.' });
|
|
defItem('ar_body_2', { name: 'Leather Cuirass', type: 'armor', slot: 'body', def: 6, price: 140, rar: 1, desc: 'Boiled leather, road-tested.' });
|
|
defItem('ar_body_3', { name: 'Ring Mail', type: 'armor', slot: 'body', def: 11, hp: 20, price: 480, rar: 2, desc: 'A thousand iron whispers woven into cloth.' });
|
|
defItem('ar_body_4', { name: 'Cloud-Silk Robe', type: 'armor', slot: 'body', def: 17, hp: 40, spd: 2, price: 1600, rar: 3, desc: 'Woven by cloud-dwellers; blades slide off like rain.' });
|
|
|
|
defItem('ar_foot_1', { name: 'Straw Sandals', type: 'armor', slot: 'feet', def: 1, spd: 1, price: 12, rar: 0, desc: 'One pair per thousand li.' });
|
|
defItem('ar_foot_2', { name: 'Deer-Hide Boots', type: 'armor', slot: 'feet', def: 3, spd: 2, price: 85, rar: 1, desc: 'Soft, silent, sure-footed.' });
|
|
defItem('ar_foot_3', { name: 'Cloudstep Shoes', type: 'armor', slot: 'feet', def: 5, spd: 3, price: 300, rar: 2, desc: 'The soles are said to barely kiss the ground.' });
|
|
defItem('ar_foot_4', { name: 'Windrunner Greaves', type: 'armor', slot: 'feet', def: 8, spd: 5, price: 1050, rar: 3, desc: 'Shin-guards of layered crane-feather and steel.' });
|
|
|
|
defItem('ac_jade', { name: 'Jade Pendant', type: 'acc', bonus: { cha: 2 }, price: 150, rar: 1, desc: 'Warm to the touch, and to conversation.' });
|
|
defItem('ac_bracer', { name: 'Leather Bracer', type: 'acc', atk: 4, price: 120, rar: 1, desc: 'Studded wrist-guard favored by caravan guards.' });
|
|
defItem('ac_rope', { name: 'Silk Rope Belt', type: 'acc', bonus: { agi: 2 }, price: 180, rar: 1, desc: 'Braided from the silk of a hundred moths.' });
|
|
defItem('ac_scarf', { name: 'Crimson Scarf', type: 'acc', crit: 6, price: 220, rar: 1, desc: 'Red like a duelist\u2019s promise.' });
|
|
defItem('ac_prayer', { name: 'Prayer Beads', type: 'acc', mp: 25, price: 200, rar: 1, desc: 'One bead per dawn prayer, worn smooth.' });
|
|
defItem('ac_eye', { name: 'Amber Eye Amulet', type: 'acc', bonus: { luk: 3 }, price: 350, rar: 2, desc: 'Something ancient watches out for you.' });
|
|
defItem('ac_goldbell', { name: 'Golden Bell', type: 'acc', def: 5, hp: 30, price: 800, rar: 3, desc: 'Its chime scatters killing intent.' });
|
|
defItem('ac_dragonring', { name: 'Dragon-Scale Ring', type: 'acc', atk: 8, crit: 5, price: 1500, rar: 4, desc: 'Taken from the hoard of a river dragon. Allegedly.' });
|
|
|
|
defItem('c_bun', { name: 'Steamed Bun', type: 'use', use: { hp: 25 }, price: 5, rar: 0, desc: 'Fluffy, faintly sweet, endlessly reliable.' });
|
|
defItem('c_fish', { name: 'River Carp', type: 'use', use: { hp: 35 }, price: 15, rar: 0, giftTags: ['drinker', 'kind'], likesVal: 2, desc: 'Fresh from Peach Blossom waters; grill for best effect.' });
|
|
defItem('j_boot', { name: 'Waterlogged Boot', type: 'mat', price: 2, rar: 0, desc: 'Size unknown. Owner unknown. Best not to wonder.' });
|
|
defItem('c_herb_green', { name: 'Green Herb', type: 'use', use: { hp: 40 }, price: 12, rar: 0, desc: 'Chew fresh for minor wounds.' });
|
|
defItem('c_herb_red', { name: 'Red Herb', type: 'use', use: { hp: 90 }, price: 30, rar: 0, desc: 'Bitter root that quickens the blood.' });
|
|
defItem('c_lotus', { name: 'Lotus Herb', type: 'mat', price: 22, rar: 1, desc: 'Grows only in mist. Prized by alchemists and sects.' });
|
|
defItem('c_pill_hp', { name: 'Healing Pill', type: 'use', use: { hp: 170 }, price: 65, rar: 1, desc: 'Alchemist-crafted; smells of licorice and iron.' });
|
|
defItem('c_pill_mp', { name: 'Clear-Mind Pill', type: 'use', use: { mp: 70 }, price: 70, rar: 1, desc: 'Restores inner energy. Tastes of winter air.' });
|
|
defItem('c_antidote', { name: 'Antidote Powder', type: 'use', use: { cure: 'poison' }, price: 35, rar: 1, desc: 'Neutralizes most common venoms.' });
|
|
defItem('c_wine', { name: 'Mulled Wine', type: 'use', use: { hp: 15, mp: 25 }, price: 18, rar: 0, giftTags: ['drinker', 'fighter'], likesVal: 3, desc: 'Spiced and warm even when cold.' });
|
|
defItem('c_elixir_power', { name: 'Battle Elixir', type: 'use', use: { buff: { stat: 'atk', pct: 0.3, dur: 3 }, battle: true }, price: 90, rar: 2, desc: 'Drink in combat: +30% attack for 3 turns.' });
|
|
defItem('c_elixir_swift', { name: 'Swift Elixir', type: 'use', use: { buff: { stat: 'spd', pct: 0.3, dur: 3 }, battle: true }, price: 90, rar: 2, desc: 'Drink in combat: +30% speed for 3 turns.' });
|
|
defItem('c_venom', { name: 'Coat of Venom', type: 'use', use: { coatPoison: true, battle: true }, price: 80, rar: 2, desc: 'Apply in combat: your attacks poison foes for 3 turns.' });
|
|
defItem('c_tonic', { name: 'Vital Tonic', type: 'use', use: { permHp: 8 }, price: 160, rar: 2, desc: 'Permanently raises max health (up to 10 uses).' });
|
|
defItem('c_fragment', { name: 'Ancient Fragment', type: 'use', use: { permWit: 1 }, price: 700, rar: 3, desc: 'A torn page of unknowable script. Permanently +1 Wit (max 3).' });
|
|
|
|
defItem('mat_pelt', { name: 'Wolf Pelt', type: 'mat', price: 14, rar: 0, desc: 'Thick winter fur, still faintly wild-smelling.' });
|
|
defItem('mat_fang', { name: 'Wolf Fang', type: 'mat', price: 10, rar: 0, desc: 'Used in elixirs and lots of tall tales.' });
|
|
defItem('mat_ore_1', { name: 'Iron Ore', type: 'mat', price: 18, rar: 0, desc: 'Common but indispensable.' });
|
|
defItem('mat_ore_2', { name: 'Cold Iron Ore', type: 'mat', price: 55, rar: 1, desc: 'Never warms to the touch. Forged at high altitude.' });
|
|
defItem('mat_ore_3', { name: 'Meteorite Shard', type: 'mat', price: 240, rar: 3, desc: 'Star-metal, humming faintly. Smiths dream of it.' });
|
|
defItem('mat_gall', { name: 'Snake Gallbladder', type: 'mat', price: 40, rar: 1, desc: 'Handle carefully. Alchemists pay well.' });
|
|
defItem('mat_ghost_ink', { name: 'Ghost-Market Ink', type: 'mat', price: 120, rar: 2, desc: 'Writes only by nightlight. Do not read what you sign.' });
|
|
defItem('mat_token', { name: 'Iron Umbrella Token', type: 'mat', key: true, price: 0, rar: 2, desc: 'A black umbrella stamped on lead. Someone powerful issued this.' });
|
|
defItem('mat_ledger', { name: 'The Heaven\u2019s Ledger', type: 'mat', key: true, price: 0, rar: 4, desc: 'Names, dates, bribes \u2014 the whole rotten architecture of a conspiracy.' });
|
|
|
|
defItem('gift_tea', { name: 'Cloud-Mist Tea', type: 'gift', price: 45, rar: 1, giftTags: ['scholar', 'monk'], val: 4, desc: 'Grown where clouds forget to move.' });
|
|
defItem('gift_fan', { name: 'Painted Fan', type: 'gift', price: 60, rar: 1, giftTags: ['scholar', 'noble'], val: 4, desc: 'Mountains in eleven brushstrokes.' });
|
|
defItem('gift_hairpin', { name: 'Jade Hairpin', type: 'gift', price: 130, rar: 2, giftTags: ['romance'], val: 7, desc: 'Carved as a willow leaf. Say something nice when giving it.' });
|
|
defItem('gift_dagger', { name: 'Ornamental Dagger', type: 'gift', price: 90, rar: 1, giftTags: ['fighter'], val: 5, desc: 'Too pretty for work, too sharp for decoration.' });
|
|
defItem('gift_cakes', { name: 'Osmanthus Cakes', type: 'gift', price: 25, rar: 0, giftTags: ['kind', 'youth'], val: 3, desc: 'Sweet, floral, gone in minutes.' });
|
|
defItem('gift_silk', { name: 'Imperial-Green Silk', type: 'gift', price: 160, rar: 2, giftTags: ['noble'], val: 6, desc: 'One bolt, worth a farmer\u2019s year.' });
|
|
defItem('gift_book', { name: 'Annotated Classic', type: 'gift', price: 110, rar: 2, giftTags: ['scholar'], val: 6, desc: 'Margins full of a dead reader\u2019s arguments.' });
|
|
|
|
defItem('m_t_sword_2', { name: 'Manual: Mistfall Sword Art', type: 'manual', teach: 't_sword_2', price: 400, rar: 2, desc: 'Teaches the Mistfall Sword Art.' });
|
|
defItem('m_t_blade_2', { name: 'Manual: Falling Meteor Blade', type: 'manual', teach: 't_blade_2', price: 420, rar: 2, desc: 'Teaches the Falling Meteor Blade.' });
|
|
defItem('m_t_spear_2', { name: 'Manual: Serpent Spear Song', type: 'manual', teach: 't_spear_2', price: 420, rar: 2, desc: 'Teaches the Serpent Spear Song.' });
|
|
defItem('m_t_staff_2', { name: 'Manual: Demon-Subduing Rod', type: 'manual', teach: 't_staff_2', price: 420, rar: 2, desc: 'Teaches the Demon-Subduing Rod method.' });
|
|
defItem('m_t_fist_2', { name: 'Manual: Tiger-Bone Boxing', type: 'manual', teach: 't_fist_2', price: 420, rar: 2, desc: 'Teaches Tiger-Bone Boxing.' });
|
|
defItem('m_t_hidden_2', { name: 'Manual: Sleeved Needle Art', type: 'manual', teach: 't_hidden_2', price: 420, rar: 2, desc: 'Teaches the Sleeved Needle Art.' });
|
|
defItem('m_i_azure', { name: 'Manual: Azure Cloud Canon', type: 'manual', teach: 'i_azure', price: 800, rar: 3, desc: 'Internal art of Azure Cloud Sect.' });
|
|
defItem('m_i_vajra', { name: 'Manual: Vajra Body Sutra', type: 'manual', teach: 'i_vajra', price: 800, rar: 3, desc: 'Temple internal art of iron-like flesh.' });
|
|
defItem('m_i_serpent', { name: 'Manual: Serpent Breath', type: 'manual', teach: 'i_serpent', price: 800, rar: 3, desc: 'Valley internal art; venom answers your call.' });
|
|
defItem('m_l_cloud', { name: 'Manual: Cloud-Chasing Steps', type: 'manual', teach: 'l_cloud', price: 500, rar: 2, desc: 'Lightness skill of the wandering couriers.' });
|
|
defItem('m_l_shadow', { name: 'Manual: Phantom Shadow Trace', type: 'manual', teach: 'l_shadow', price: 1500, rar: 3, desc: 'Walk where shadows thin. Nobody sells this twice.' });
|
|
|
|
/* ---------------- TECHNIQUES ---------------- */
|
|
const TECHNIQUES = {};
|
|
function defTech(id, o) { o.id = id; TECHNIQUES[id] = o; }
|
|
const PROF_REQ = [0, 20, 45, 75];
|
|
// shapes: foe | line | cross | area | self | ally
|
|
|
|
defTech('t_univ_1', { name: 'Breath Control', wt: 'universal', tier: 1, desc: 'Basic breathing every traveler learns.', moves: [
|
|
{ n: 'Focus', mp: 0, p: 0, r: 0, sh: 'self', mpGain: 25 },
|
|
{ n: 'Second Wind', mp: 10, p: 0, r: 0, sh: 'self', healPct: 0.18 },
|
|
{ n: 'Pressure Point', mp: 14, p: 90, r: 1, sh: 'foe', st: { k: 'slow', ch: 0.5, dur: 2 } }
|
|
]});
|
|
defTech('t_sword_1', { name: 'Riverwind Swordplay', wt: 'sword', tier: 1, desc: 'Flowing basics every sword student begins with.', moves: [
|
|
{ n: 'Flowing Thrust', mp: 8, p: 118, r: 1, sh: 'foe' },
|
|
{ n: 'Parting Clouds', mp: 14, p: 132, r: 1, sh: 'line', st: { k: 'bleed', ch: 0.4, dur: 2 } }
|
|
]});
|
|
defTech('t_sword_2', { name: 'Mistfall Sword Art', wt: 'sword', tier: 2, desc: 'Falling-mist footwork feeding whisper-fast cuts.', moves: [
|
|
{ n: 'Cold Ripple', mp: 10, p: 128, r: 1, sh: 'foe' },
|
|
{ n: 'Moonveil', mp: 18, p: 148, r: 1, sh: 'foe', buff: { stat: 'atk', pct: 0.2, dur: 2 } },
|
|
{ n: 'Autumn River', mp: 30, p: 168, r: 1, sh: 'line' }
|
|
]});
|
|
defTech('t_sword_3', { name: 'Azure Cloud Sword Canon', wt: 'sword', tier: 3, desc: 'The sect\u2019s orthodox canon \u2014 sky-wide, cloud-cold.', moves: [
|
|
{ n: 'Cloud Cleave', mp: 16, p: 146, r: 1, sh: 'foe' },
|
|
{ n: 'Windride Step', mp: 20, p: 126, r: 1, sh: 'foe', buff: { stat: 'spd', pct: 0.3, dur: 2 } },
|
|
{ n: 'Nine Skies Slash', mp: 40, p: 205, r: 2, sh: 'foe', cd: 2 }
|
|
]});
|
|
defTech('t_sword_4', { name: 'Swordless Heart', wt: 'sword', tier: 4, desc: 'Beyond technique. The cut arrives before the thought.', moves: [
|
|
{ n: 'Formless Edge', mp: 24, p: 165, r: 1, sh: 'foe', ignoreDef: true },
|
|
{ n: 'Ten-Thousand Sword Rain', mp: 46, p: 95, r: 3, sh: 'area', cd: 3 }
|
|
]});
|
|
defTech('t_blade_1', { name: 'Tiger Fang Dao', wt: 'blade', tier: 1, desc: 'Direct, heavy hacking in the hunters\u2019 style.', moves: [
|
|
{ n: 'Rend', mp: 8, p: 122, r: 1, sh: 'foe' },
|
|
{ n: 'Battle Howl', mp: 10, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.25, dur: 3 } }
|
|
]});
|
|
defTech('t_blade_2', { name: 'Falling Meteor Blade', wt: 'blade', tier: 2, desc: 'Overhead strokes with crushing momentum.', moves: [
|
|
{ n: 'Meteor Crash', mp: 15, p: 145, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.25, dur: 1 } },
|
|
{ n: 'Flame Arc', mp: 22, p: 138, r: 1, sh: 'cross' }
|
|
]});
|
|
defTech('t_blade_3', { name: 'Mountain Splitter', wt: 'blade', tier: 3, desc: 'Split what stands; scare what doesn\u2019t.', moves: [
|
|
{ n: 'Split Stone', mp: 26, p: 175, r: 1, sh: 'foe', cd: 1 },
|
|
{ n: 'Earthshaker', mp: 42, p: 185, r: 1, sh: 'area', cd: 3, st: { k: 'slow', ch: 0.5, dur: 2 } }
|
|
]});
|
|
defTech('t_blade_4', { name: 'Severing Cloud Dao', wt: 'blade', tier: 4, desc: 'One flash, then the thunder. Your body pays the toll.', moves: [
|
|
{ n: 'Cloudsever', mp: 30, p: 198, r: 1, sh: 'foe' },
|
|
{ n: 'One Flash', mp: 34, p: 255, r: 1, sh: 'foe', cd: 4, costHpPct: 0.08 }
|
|
]});
|
|
defTech('t_spear_1', { name: 'Basic Spearwork', wt: 'spear', tier: 1, desc: 'Keep them at the shaft\u2019s end.', moves: [
|
|
{ n: 'Skewer', mp: 8, p: 120, r: 2, sh: 'foe' },
|
|
{ n: 'Backswing', mp: 12, p: 122, r: 2, sh: 'foe', st: { k: 'slow', ch: 0.35, dur: 2 } }
|
|
]});
|
|
defTech('t_spear_2', { name: 'Serpent Spear Song', wt: 'spear', tier: 2, desc: 'Coil, feint, strike. The spear sings in circles.', moves: [
|
|
{ n: 'Snake Strike', mp: 14, p: 138, r: 2, sh: 'foe', st: { k: 'poison', ch: 0.45, dur: 3 } },
|
|
{ n: 'Coil Guard', mp: 16, p: 0, r: 0, sh: 'self', shield: 35, buff: { stat: 'def', pct: 0.25, dur: 2 } }
|
|
]});
|
|
defTech('t_spear_3', { name: 'Dragonhead Doctrine', wt: 'spear', tier: 3, desc: 'Three thrusts where others manage one.', moves: [
|
|
{ n: 'Dragon Flurry', mp: 20, p: 88, r: 2, sh: 'foe', hits: 2 },
|
|
{ n: 'War Roar Thrust', mp: 34, p: 182, r: 2, sh: 'line', cd: 2 }
|
|
]});
|
|
defTech('t_spear_4', { name: 'Storm Piercer Art', wt: 'spear', tier: 4, desc: 'The lance becomes lightning seeking ground.', moves: [
|
|
{ n: 'Thunderbolt', mp: 32, p: 205, r: 3, sh: 'foe', cd: 2 },
|
|
{ n: 'Thousand Rain Falls', mp: 48, p: 108, r: 4, sh: 'area', cd: 4 }
|
|
]});
|
|
defTech('t_staff_1', { name: 'Monk\u2019s Staff Basics', wt: 'staff', tier: 1, desc: 'Sweeping arcs and steady breath.', moves: [
|
|
{ n: 'Low Sweep', mp: 8, p: 112, r: 1, sh: 'cross' },
|
|
{ n: 'Healing Chant', mp: 12, p: 0, r: 4, sh: 'ally', healFlat: 45 }
|
|
]});
|
|
defTech('t_staff_2', { name: 'Demon-Subduing Rod', wt: 'staff', tier: 2, desc: 'Temple forms to humble bullies and demons alike.', moves: [
|
|
{ n: 'Subdue', mp: 15, p: 138, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.35, dur: 1 } },
|
|
{ n: 'Vajra Shield', mp: 18, p: 0, r: 4, sh: 'ally', shield: 45 }
|
|
]});
|
|
defTech('t_staff_3', { name: 'Lotus Heart Sutra Staff', wt: 'staff', tier: 3, desc: 'Compassion with a hardwood edge.', moves: [
|
|
{ n: 'Lotus Burst', mp: 22, p: 152, r: 1, sh: 'area' },
|
|
{ n: 'Merciful Rain', mp: 30, p: 0, r: 4, sh: 'ally', healFlat: 120, stAlly: { k: 'regen', ch: 1, dur: 3 } }
|
|
]});
|
|
defTech('t_staff_4', { name: 'Patriarch\u2019s Cudgel', wt: 'staff', tier: 4, desc: 'Twenty-four founders hammered these forms into legend.', moves: [
|
|
{ n: 'Ocean Collapse', mp: 34, p: 192, r: 1, sh: 'area', cd: 2 },
|
|
{ n: 'World-Holding Palm', mp: 28, p: 0, r: 0, sh: 'self', shield: 90, healPct: 0.15, cd: 3 }
|
|
]});
|
|
defTech('t_fist_1', { name: 'Iron Fist Basics', wt: 'fist', tier: 1, desc: 'Two fists, four knuckles, no complaints.', moves: [
|
|
{ n: 'Straight Punch', mp: 8, p: 122, r: 1, sh: 'foe' },
|
|
{ n: 'Double Jab', mp: 12, p: 92, r: 1, sh: 'foe', hits: 2 }
|
|
]});
|
|
defTech('t_fist_2', { name: 'Tiger-Bone Boxing', wt: 'fist', tier: 2, desc: 'Guild boxing modeled on a hunting tiger.', moves: [
|
|
{ n: 'Tiger Claw', mp: 16, p: 148, r: 1, sh: 'foe', st: { k: 'bleed', ch: 0.5, dur: 2 } },
|
|
{ n: 'Roaring Tiger', mp: 18, p: 132, r: 1, sh: 'foe', buff: { stat: 'atk', pct: 0.35, dur: 2 } }
|
|
]});
|
|
defTech('t_fist_3', { name: 'Mountain-Cracking Palms', wt: 'fist', tier: 3, desc: 'Guild secret art. Palm-strikes like rockfalls.', moves: [
|
|
{ n: 'Crack Palm', mp: 24, p: 172, r: 1, sh: 'foe', cd: 1, st: { k: 'stun', ch: 0.3, dur: 1 } },
|
|
{ n: 'Palm Storm', mp: 38, p: 102, r: 1, sh: 'area', cd: 3 }
|
|
]});
|
|
defTech('t_fist_4', { name: 'Ten Thousand Rivers Palms', wt: 'fist', tier: 4, desc: 'Hong\u2019s beggar-art: ten thousand streams, one sea.', moves: [
|
|
{ n: 'River Turning Palm', mp: 26, p: 178, r: 2, sh: 'foe' },
|
|
{ n: 'Dragon Descends', mp: 52, p: 235, r: 1, sh: 'foe', cd: 4, st: { k: 'stun', ch: 0.5, dur: 1 } }
|
|
]});
|
|
defTech('t_hidden_1', { name: 'Dart Throwing Basics', wt: 'hidden', tier: 1, desc: 'Street tricks with sharpened steel.', moves: [
|
|
{ n: 'Flick', mp: 6, p: 100, r: 4, sh: 'foe' },
|
|
{ n: 'Dusted Dart', mp: 10, p: 95, r: 4, sh: 'foe', st: { k: 'poison', ch: 0.5, dur: 3 } }
|
|
]});
|
|
defTech('t_hidden_2', { name: 'Sleeved Needle Art', wt: 'hidden', tier: 2, desc: 'Valley needle-craft: numbing points, creeping venom.', moves: [
|
|
{ n: 'Needle Spray', mp: 14, p: 86, r: 4, sh: 'area', st: { k: 'poison', ch: 0.4, dur: 2 } },
|
|
{ n: 'Numbling Point', mp: 16, p: 112, r: 4, sh: 'foe', st: { k: 'slow', ch: 0.65, dur: 2 } }
|
|
]});
|
|
defTech('t_hidden_3', { name: 'Plum-Flower Darts', wt: 'hidden', tier: 3, desc: 'Five darts bloom like petals. Each petal bleeds.', moves: [
|
|
{ n: 'Plum Bloom', mp: 20, p: 122, r: 5, sh: 'foe', hits: 2, st: { k: 'bleed', ch: 0.5, dur: 2 }, cd: 1 },
|
|
{ n: 'Seven-Star Rain', mp: 34, p: 82, r: 5, sh: 'area', cd: 3, st: { k: 'poison', ch: 0.6, dur: 3 } }
|
|
]});
|
|
defTech('t_hidden_4', { name: 'Sanskrit Needle Canon', wt: 'hidden', tier: 4, desc: 'The valley\u2019s lost canon \u2014 silence, then sleep.', moves: [
|
|
{ n: 'Silent Requiem', mp: 30, p: 172, r: 5, sh: 'foe', cd: 2, st: { k: 'stun', ch: 0.4, dur: 1 } },
|
|
{ n: 'Sanskrit Rain', mp: 46, p: 96, r: 5, sh: 'area', cd: 3, st: { k: 'poison', ch: 1.0, dur: 3 } }
|
|
]});
|
|
|
|
/* ---------------- INTERNAL ARTS ---------------- */
|
|
const INTERNALS = {};
|
|
function defInt(id, o) { o.id = id; INTERNALS[id] = o; }
|
|
defInt('i_water', { name: 'Still Water Heart', desc: 'A calm basin of qi every wanderer starts with.', hp0: 10, hpL: 12, mp0: 10, mpL: 9, mpRegen: 2, active: { n: 'Clear Waters', desc: 'Cleanse all debuffs from yourself (CD 4)' }, cd: 4 });
|
|
defInt('i_azure', { name: 'Azure Cloud Canon', desc: 'Sword-shaped intent sharpens flesh and spirit.', hp0: 10, hpL: 10, atk0: 2, atkL: 2, critL: 1, spdL: 1, active: { n: 'Sword Qi Wave', desc: 'Cutting qi: 140% power, range 2 (CD 4)' }, cd: 4,
|
|
actMove: { n: 'Sword Qi Wave', mp: 15, p: 140, r: 2, sh: 'foe' } });
|
|
defInt('i_vajra', { name: 'Vajra Body Sutra', desc: 'Temple breathing that makes the body a bell of bronze.', hp0: 20, hpL: 20, def0: 2, defL: 2, active: { n: 'Golden Bell Dome', desc: 'Shield yourself (CD 5)' }, cd: 5,
|
|
actMove: { n: 'Golden Bell Dome', mp: 12, p: 0, r: 0, sh: 'self', shieldFlat: true } });
|
|
defInt('i_serpent', { name: 'Serpent Breath', desc: 'Your qi carries a venomous whisper.', hp0: 10, hpL: 12, atkL: 1, ptouch: true, active: { n: 'Venom Mist', desc: 'Poison all adjacent foes (CD 4)' }, cd: 4,
|
|
actMove: { n: 'Venom Mist', mp: 14, p: 60, r: 1, sh: 'cross', stAll: { k: 'poison', ch: 1.0, dur: 3 } } });
|
|
defInt('i_sun', { name: 'Blazing Sun Manual', desc: 'The lost manual. All rivers run to the sun.', hp0: 25, hpL: 16, mp0: 15, mpL: 10, atkL: 1, defL: 1, spdL: 1, regenHp: true, active: { n: 'Solar Flare', desc: 'Scorching wave: 165% power, range 2 line (CD 5)' }, cd: 5,
|
|
actMove: { n: 'Solar Flare', mp: 20, p: 165, r: 2, sh: 'line' } });
|
|
|
|
/* ---------------- LIGHTNESS ---------------- */
|
|
const LIGHTNESS = {
|
|
l_basic: { name: 'Goose Steps', desc: 'Long strides learned from chasing chickens.', mv: 1, dodge: 3 },
|
|
l_cloud: { name: 'Cloud-Chasing Steps', desc: 'Courier footwork that eats roads whole.', mv: 2, dodge: 6, spd: 1 },
|
|
l_shadow: { name: 'Phantom Shadow Trace', desc: 'You move when eyes blink.', mv: 3, dodge: 10, spd: 2 }
|
|
};
|
|
|
|
/* ---------------- ENEMIES ---------------- */
|
|
const ENEMIES = {};
|
|
function defEnemy(id, o) { o.id = id; ENEMIES[id] = o; }
|
|
defEnemy('e_wolf', { name: 'Grey Wolf', tier: 1, hp: 46, atk: 10, def: 2, spd: 9, mv: 5, rng: 1, silver: [4, 10], exp: 22, loot: [{ id: 'mat_pelt', ch: 0.55, q: 1 }, { id: 'mat_fang', ch: 0.4, q: 1 }], ai: 'brute', glyph: '狼', color: '#7d8471',
|
|
moves: [{ n: 'Bite', mp: 0, p: 112, r: 1, sh: 'foe' }, { n: 'Rending Pull', mp: 6, p: 118, r: 1, sh: 'foe', st: { k: 'bleed', ch: 0.4, dur: 2 } }] });
|
|
defEnemy('e_boar', { name: 'Tusker Boar', tier: 1, hp: 62, atk: 11, def: 5, spd: 6, mv: 4, rng: 1, silver: [5, 12], exp: 24, loot: [], ai: 'brute', glyph: '猪', color: '#8a7360',
|
|
moves: [{ n: 'Tusk Gore', mp: 0, p: 125, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.2, dur: 1 } }] });
|
|
defEnemy('e_snake', { name: 'Green Pit Viper', tier: 1, hp: 38, atk: 9, def: 2, spd: 11, mv: 6, rng: 1, silver: [6, 14], exp: 23, loot: [{ id: 'mat_gall', ch: 0.5, q: 1 }], ai: 'skirmish', glyph: '蛇', color: '#6fa06b',
|
|
moves: [{ n: 'Venom Fang', mp: 0, p: 104, r: 1, sh: 'foe', st: { k: 'poison', ch: 0.6, dur: 3 } }] });
|
|
defEnemy('e_tiger', { name: 'Cloudmist Tiger', tier: 2, hp: 88, atk: 17, def: 5, spd: 12, mv: 6, rng: 1, silver: [15, 30], exp: 48, loot: [{ id: 'mat_pelt', ch: 0.8, q: 2 }], ai: 'brute', glyph: '虎', color: '#c78d3f',
|
|
moves: [{ n: 'Pounce', mp: 8, p: 142, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.3, dur: 1 } }, { n: 'Rake', mp: 6, p: 124, r: 1, sh: 'foe', st: { k: 'bleed', ch: 0.5, dur: 2 } }] });
|
|
defEnemy('e_bear', { name: 'Ridge Bear', tier: 3, hp: 135, atk: 22, def: 9, spd: 7, mv: 4, rng: 1, silver: [25, 45], exp: 85, loot: [{ id: 'c_herb_red', ch: 0.3, q: 1 }], ai: 'brute', glyph: '熊', color: '#7a5c44',
|
|
moves: [{ n: 'Maul', mp: 10, p: 158, r: 1, sh: 'foe' }, { n: 'Terrifying Roar', mp: 12, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.3, dur: 3 } }] });
|
|
defEnemy('e_bandit', { name: 'Road Bandit', tier: 1, hp: 55, atk: 11, def: 3, spd: 8, mv: 4, rng: 1, silver: [12, 22], exp: 25, loot: [{ id: 'c_bun', ch: 0.3, q: 1 }], ai: 'brute', glyph: '匪', color: '#96604a',
|
|
moves: [{ n: 'Slash', mp: 0, p: 120, r: 1, sh: 'foe' }] });
|
|
defEnemy('e_bandit_vet', { name: 'Bandit Veteran', tier: 2, hp: 82, atk: 16, def: 6, spd: 9, mv: 5, rng: 1, silver: [22, 40], exp: 50, loot: [{ id: 'c_wine', ch: 0.25, q: 1 }, { id: 'mat_ore_1', ch: 0.3, q: 1 }], ai: 'brute', glyph: '寇', color: '#8f4d3a',
|
|
moves: [{ n: 'Heavy Slash', mp: 8, p: 145, r: 1, sh: 'foe' }, { n: 'Hurl Dagger', mp: 6, p: 100, r: 3, sh: 'foe' }] });
|
|
defEnemy('e_bandit_chief', { name: 'Bandit Chief', tier: 3, hp: 130, atk: 21, def: 8, spd: 10, mv: 5, rng: 1, silver: [45, 75], exp: 105, loot: [{ id: 'c_wine', ch: 0.5, q: 1 }, { id: 'mat_ore_1', ch: 0.5, q: 2 }], ai: 'boss', glyph: '魁', color: '#a05c46',
|
|
moves: [{ n: 'Cleaving Chop', mp: 12, p: 168, r: 1, sh: 'cross' }, { n: 'Brute Rush', mp: 10, p: 148, r: 1, sh: 'foe', st: { k: 'bleed', ch: 0.5, dur: 2 } }, { n: 'Warlord\u2019s Bellow', mp: 14, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.3, dur: 3 }, cd: 3 }] });
|
|
defEnemy('e_thug', { name: 'Wharf Thug', tier: 1, hp: 52, atk: 10, def: 4, spd: 7, mv: 4, rng: 1, silver: [10, 18], exp: 24, loot: [{ id: 'c_bun', ch: 0.4, q: 1 }], ai: 'brute', glyph: '霸', color: '#77685a',
|
|
moves: [{ n: 'Haymaker', mp: 6, p: 128, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.25, dur: 1 } }] });
|
|
defEnemy('e_guard', { name: 'Garrison Halberdier', tier: 2, hp: 92, atk: 15, def: 10, spd: 8, mv: 4, rng: 2, silver: [20, 35], exp: 52, loot: [], ai: 'guard', glyph: '兵', color: '#5f7d94',
|
|
moves: [{ n: 'Halberd Thrust', mp: 8, p: 140, r: 2, sh: 'foe' }, { n: 'Shield Wall', mp: 10, p: 0, r: 0, sh: 'self', shield: 40, buff: { stat: 'def', pct: 0.25, dur: 2 } }] });
|
|
defEnemy('e_assassin', { name: 'Umbrella Shadow', tier: 3, hp: 96, atk: 24, def: 5, spd: 14, mv: 7, rng: 1, silver: [35, 60], exp: 95, loot: [{ id: 'c_venom', ch: 0.25, q: 1 }], ai: 'skirmish', glyph: '影', color: '#5a5468',
|
|
moves: [{ n: 'Backstab', mp: 10, p: 175, r: 1, sh: 'foe' }, { n: 'Poison Needle', mp: 8, p: 105, r: 4, sh: 'foe', st: { k: 'poison', ch: 0.7, dur: 3 } }] });
|
|
defEnemy('e_cultist', { name: 'Umbrella Adept', tier: 2, hp: 72, atk: 14, def: 5, spd: 9, mv: 4, rng: 1, silver: [25, 45], exp: 55, loot: [{ id: 'mat_ghost_ink', ch: 0.15, q: 1 }], ai: 'caster', glyph: '伞', color: '#6b5f7d',
|
|
moves: [{ n: 'Dark Palm', mp: 8, p: 130, r: 1, sh: 'foe' }, { n: 'Withering Curse', mp: 12, p: 90, r: 3, sh: 'foe', st: { k: 'slow', ch: 0.7, dur: 2 } }] });
|
|
defEnemy('e_poisoner', { name: 'Valley Renegade', tier: 3, hp: 85, atk: 18, def: 6, spd: 11, mv: 5, rng: 3, silver: [40, 65], exp: 98, loot: [{ id: 'mat_gall', ch: 0.4, q: 1 }, { id: 'c_antidote', ch: 0.3, q: 1 }], ai: 'archer', glyph: '毒', color: '#71905d',
|
|
moves: [{ n: 'Venom Spray', mp: 14, p: 95, r: 3, sh: 'area', st: { k: 'poison', ch: 0.6, dur: 3 }, cd: 2 }, { n: 'Dart', mp: 0, p: 115, r: 3, sh: 'foe' }] });
|
|
defEnemy('e_duelist', { name: 'Wandering Duelist', tier: 4, hp: 152, atk: 28, def: 11, spd: 13, mv: 6, rng: 1, silver: [60, 100], exp: 150, loot: [{ id: 'c_pill_hp', ch: 0.3, q: 1 }, { id: 'ac_scarf', ch: 0.1, q: 1 }], ai: 'duelist', glyph: '侠', color: '#a8895c',
|
|
moves: [{ n: 'Flowing Combo', mp: 14, p: 96, r: 1, sh: 'foe', hits: 2 }, { n: 'Riposte Stance', mp: 12, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.3, dur: 2 }, shield: 30 }] });
|
|
defEnemy('e_sentinel', { name: 'Tomb Sentinel', tier: 4, hp: 185, atk: 26, def: 15, spd: 6, mv: 4, rng: 1, silver: [50, 80], exp: 160, loot: [{ id: 'mat_ore_2', ch: 0.5, q: 2 }, { id: 'mat_ore_3', ch: 0.15, q: 1 }], ai: 'brute', glyph: '卫', color: '#8c8776',
|
|
moves: [{ n: 'Stone Smash', mp: 10, p: 168, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.3, dur: 1 } }, { n: 'Grave Quake', mp: 16, p: 120, r: 1, sh: 'area', cd: 2 }] });
|
|
defEnemy('e_boss_qiang', { name: '"One-Eye" Qiang', tier: 3, hp: 240, atk: 24, def: 9, spd: 10, mv: 5, rng: 1, silver: [120, 180], exp: 220, loot: [{ id: 'mat_token', ch: 1, q: 1 }, { id: 'w_blade_2', ch: 0.5, q: 1 }], ai: 'boss', glyph: '枭', color: '#9c4a3f', boss: true,
|
|
moves: [{ n: 'Cleaving Chop', mp: 12, p: 172, r: 1, sh: 'cross' }, { n: 'Pillage Rush', mp: 10, p: 150, r: 1, sh: 'foe', st: { k: 'bleed', ch: 0.6, dur: 2 } }, { n: 'Warlord\u2019s Bellow', mp: 14, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.3, dur: 3 }, cd: 3 }] });
|
|
defEnemy('e_boss_dukang', { name: 'Du Kang, the Silver Umbrella', tier: 4, hp: 320, atk: 32, def: 12, spd: 13, mv: 6, rng: 1, silver: [220, 300], exp: 380, loot: [{ id: 'ac_dragonring', ch: 1, q: 1 }], ai: 'boss', glyph: '银', color: '#b0a08c', boss: true,
|
|
moves: [{ n: 'Venom Umbrella Spin', mp: 18, p: 130, r: 1, sh: 'area', st: { k: 'poison', ch: 0.7, dur: 3 }, cd: 2 }, { n: 'Triple Silver Thrust', mp: 16, p: 92, r: 1, sh: 'foe', hits: 3 }, { n: 'Silken Retreat', mp: 12, p: 0, r: 0, sh: 'self', shield: 60, buff: { stat: 'spd', pct: 0.3, dur: 2 }, cd: 3 }] });
|
|
defEnemy('e_boss_heihu', { name: 'Heihu, Umbrella Enforcer', tier: 4, hp: 360, atk: 33, def: 14, spd: 12, mv: 5, rng: 1, silver: [260, 340], exp: 430, loot: [{ id: 'mat_ore_3', ch: 0.6, q: 1 }, { id: 'c_pill_hp', ch: 1, q: 2 }], ai: 'boss', glyph: '黑', color: '#5c5560', boss: true,
|
|
moves: [{ n: 'Umbrella Sweep', mp: 16, p: 185, r: 1, sh: 'cross', cd: 1 }, { n: 'Shadow Slam', mp: 14, p: 165, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.35, dur: 1 } }, { n: 'Iron Canopy', mp: 18, p: 0, r: 0, sh: 'self', shield: 90, buff: { stat: 'def', pct: 0.3, dur: 2 }, cd: 4 }] });
|
|
defEnemy('e_boss_wu', { name: 'Wu Zhaoshan, Patriarch of the Iron Umbrella', tier: 5, hp: 620, atk: 42, def: 16, spd: 14, mv: 6, rng: 1, silver: [600, 900], exp: 900, loot: [{ id: 'w_sword_4', ch: 1, q: 1 }], ai: 'boss', glyph: '尊', color: '#8f6f4f', boss: true,
|
|
moves: [{ n: 'Heaven Splitter', mp: 22, p: 215, r: 1, sh: 'line', cd: 2 }, { n: 'Umbrella Domain', mp: 26, p: 135, r: 1, sh: 'area', cd: 2, st: { k: 'slow', ch: 0.6, dur: 2 } }, { n: 'Ten Thousand Oaths', mp: 20, p: 100, r: 1, sh: 'foe', hits: 3 }, { n: 'Ascendant Fury', mp: 18, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.4, dur: 3 }, cd: 4 }] });
|
|
|
|
/* ---- Tier V ultimates & support arts ---- */
|
|
defTech('t_sword_5', { name: 'River of No Return', wt: 'sword', tier: 5, desc: 'Yun\u2019s final teaching: the stroke that cannot be recalled.', moves: [
|
|
{ n: 'Reversal Cut', mp: 26, p: 182, r: 1, sh: 'foe' },
|
|
{ n: 'Ten-Thousand Ripples', mp: 38, p: 148, r: 1, sh: 'cross', st: { k: 'bleed', ch: 0.5, dur: 3 } }
|
|
]});
|
|
defTech('t_blade_5', { name: 'Mountain-Cleaving Dao', wt: 'blade', tier: 5, desc: 'One stroke to split what should not be split.', moves: [
|
|
{ n: 'Cleaving Stroke', mp: 30, p: 192, r: 1, sh: 'foe' },
|
|
{ n: 'Earthsplitter', mp: 40, p: 160, r: 1, sh: 'line', st: { k: 'bleed', ch: 0.6, dur: 3 } }
|
|
]});
|
|
defTech('t_spear_5', { name: 'Dragon Rends the Heavens', wt: 'spear', tier: 5, desc: 'The garrison\u2019s lost apex art, recovered at great cost.', moves: [
|
|
{ n: 'Heaven Thrust', mp: 28, p: 178, r: 2, sh: 'foe', st: { k: 'stun', ch: 0.3, dur: 1 } },
|
|
{ n: 'Storm Coil', mp: 36, p: 142, r: 2, sh: 'line' }
|
|
]});
|
|
defTech('t_staff_5', { name: 'Demon-Banishing Chant', wt: 'staff', tier: 5, desc: 'Sutra and ironwood in the same breath.', moves: [
|
|
{ n: 'Banishing Strike', mp: 28, p: 170, r: 1, sh: 'foe' },
|
|
{ n: 'Lotus Aegis', mp: 24, p: 0, r: 0, sh: 'self', buff: { stat: 'def', pct: 0.45, dur: 3 } }
|
|
]});
|
|
defTech('t_fist_5', { name: 'Thousand-Palm Storm', wt: 'fist', tier: 5, desc: 'Guo\u2019s last lesson: there is always one more palm.', moves: [
|
|
{ n: 'Storm Volley', mp: 27, p: 196, r: 1, sh: 'foe' },
|
|
{ n: 'Shaking Palm', mp: 38, p: 150, r: 1, sh: 'foe', st: { k: 'stun', ch: 0.35, dur: 1 } }
|
|
]});
|
|
defTech('t_hidden_5', { name: 'Silent Stars Fall', wt: 'hidden', tier: 5, desc: 'Miao\u2019s parting gift: night made sharp.', moves: [
|
|
{ n: 'Starfall Volley', mp: 26, p: 168, r: 4, sh: 'foe', st: { k: 'poison', ch: 0.7, dur: 3 } },
|
|
{ n: 'Needle Bloom', mp: 34, p: 138, r: 4, sh: 'cross' }
|
|
]});
|
|
defTech('t_univ_2', { name: 'Mending Sutra', wt: 'universal', tier: 3, desc: 'Temple healing every wanderer should know.', moves: [
|
|
{ n: 'Mending Breeze', mp: 18, r: 1, sh: 'ally', healFlat: 110 },
|
|
{ n: 'Cool Rain', mp: 26, r: 1, sh: 'ally', healFlat: 60, st: { k: 'regen', ch: 1, dur: 3 } }
|
|
]});
|
|
defTech('t_univ_3', { name: 'War God\u2019s Oath', wt: 'universal', tier: 4, desc: 'Guild-hall discipline turned inward.', moves: [
|
|
{ n: 'Rallying Cry', mp: 22, p: 0, r: 0, sh: 'self', buff: { stat: 'atk', pct: 0.35, dur: 3 } },
|
|
{ n: 'Iron Stance', mp: 24, p: 0, r: 0, sh: 'self', buff: { stat: 'def', pct: 0.4, dur: 3 } }
|
|
]});
|
|
|
|
/* manuals for the above */
|
|
defItem('m_t_sword_5', { name: 'Manual: River of No Return', type: 'manual', teach: 't_sword_5', price: 3200, rar: 4, desc: 'Watercolors of an endless river.' });
|
|
defItem('m_t_blade_5', { name: 'Manual: Mountain-Cleaving Dao', type: 'manual', teach: 't_blade_5', price: 3000, rar: 4, desc: 'The margins are full of axe marks.' });
|
|
defItem('m_t_spear_5', { name: 'Manual: Dragon Rends the Heavens', type: 'manual', teach: 't_spear_5', price: 3100, rar: 4, desc: 'Smells faintly of gunpowder and rain.' });
|
|
defItem('m_t_staff_5', { name: 'Manual: Demon-Banishing Chant', type: 'manual', teach: 't_staff_5', price: 3000, rar: 4, desc: 'Every page hums when read aloud.' });
|
|
defItem('m_t_fist_5', { name: 'Manual: Thousand-Palm Storm', type: 'manual', teach: 't_fist_5', price: 3000, rar: 4, desc: 'Thumb-worn to silk at the corners.' });
|
|
defItem('m_t_hidden_5', { name: 'Manual: Silent Stars Fall', type: 'manual', teach: 't_hidden_5', price: 2900, rar: 4, desc: 'Ink only visible by moonlight.' });
|
|
defItem('m_univ_2', { name: 'Manual: Mending Sutra', type: 'manual', teach: 't_univ_2', price: 1400, rar: 3, desc: 'A healer\u2019s careful hand on every page.' });
|
|
defItem('m_univ_3', { name: 'Manual: War God\u2019s Oath', type: 'manual', teach: 't_univ_3', price: 1900, rar: 3, desc: 'Sweat-stained guild primer.' });
|
|
|
|
/* mythic-tier armor */
|
|
defItem('ar_head_5', { name: 'Phoenix Feather Crown', type: 'armor', slot: 'head', def: 15, hp: 40, crit: 6, price: 2400, rar: 4, desc: 'One feather, they say, from the last phoenix.' });
|
|
defItem('ar_body_5', { name: 'Dragon-Silk Vestment', type: 'armor', slot: 'body', def: 21, hp: 70, spd: 2, price: 3400, rar: 4, desc: 'Woven from a single unraveled scale.' });
|
|
defItem('ar_foot_5', { name: 'Cloud-Treading Greaves', type: 'armor', slot: 'feet', def: 10, spd: 7, dodge: 8, price: 2600, rar: 4, desc: 'Leave them by a cliff overnight; by dawn, clouds.' });
|