A shield is the one piece of armour you hold, and it protects you exactly as much as you are currently holding it up. Raised, its points apply to what it covers and it can parry on a new Shield skill. Lowered, it is weight. The price of keeping it up is that it occupies a hand and you are shooting around it: -20% to your own ranged attacks, printed on the card like everything else. Only one shield goes up at a time. Seven of them, 2-point buckler to 6-point ballistic shield; the pavise and barrier plate cover legs too because they are walls you carry. `degradation` finally does something — it has been on every armour item since the packs were first built and was read by nothing. A blow costs the shield a point of wear for every step it stood above an ordinary success, so an ordinary hit costs nothing, a special 1 and a critical 2. At its limit it comes apart, drops, and will not be raised again. Two defects found by driving the real functions rather than reading the diff, both introduced by this change: - Every shield defence quietly rolled DODGE. "shield" passed through defenceTypeAllowed unchanged, so neither parry branch matched and it fell through. Invisible in the card; it showed up as eight rolls at a supposed 85% returning six failures. Taking a blow on the shield IS a parry, so it is now a flag on a parry rather than a defence type of its own. - The wear rule was unreachable: it fired only on a clean stop, but under graded defences only a critical fully stops a critical, so a shield would never have taken a scratch. Wear is for what the shield ABSORBED — dragging a critical down to a special is exactly when shields splinter. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
200 lines
13 KiB
JavaScript
200 lines
13 KiB
JavaScript
/** Item key -> [glyph, family, hue shift]. Shifts keep same-family items distinct. */
|
|
export const ICON_MAP = {
|
|
// weapons
|
|
punch:["hand","melee",0], baton:["club","melee",-8,"modern"], dagger:["blade","melee",8,"antique"],
|
|
prybar:["bar","melee",-14], machete:["sword","melee",16,"antique"], spear1h:["spear","melee",-20,"antique"],
|
|
grasp:["claw","melee",24], shortbow:["bow","weapon",30,"antique"],
|
|
pistol_light:["pistol","weapon",-6], pistol_med:["pistol","weapon",0], pistol_heavy:["pistol","weapon",6],
|
|
smg:["rifle","weapon",-12], rifle_med:["rifle","weapon",12], rifle_heavy:["rifle","weapon",18],
|
|
shotgun:["shotgun","weapon",24], cutter:["blade","device",0,"anomalous"],
|
|
lance:["beam","device",-14,"anomalous"], unmaker:["lattice","device",14,"anomalous"],
|
|
|
|
/* ---- ANTIQUE: brought back, or never left ---- */
|
|
flintlock:["flintlock","weapon",-16,"antique"], musket:["musket","weapon",-22,"antique"],
|
|
duelling_sword:["sword","melee",4,"antique"], boarding_axe:["axe","melee",-10,"antique"],
|
|
crossbow:["crossbow","weapon",34,"antique"], cudgel:["club","melee",-26,"antique"],
|
|
oil_lantern:["lantern","gear",-36,"antique"], tallow_candle:["candle","gear",-42,"antique"],
|
|
brass_compass:["compass","gear",40,"antique"], pocket_watch:["pocketwatch","gear",-46,"antique"],
|
|
spectacles:["spectacles","gear",46,"antique"], chirurgeon_kit:["syringe","gear",-52,"antique"],
|
|
oilcloth_coat:["jacket","armour",-28,"antique"], brigandine:["mail","armour",28,"antique"],
|
|
wax_tablet:["book","gear",-56,"antique"], iron_manacles:["manacles","gear",52,"antique"],
|
|
/* ---- MODERN: agency issue, already covered above, plus ---- */
|
|
revolver:["revolver","weapon",-30], carbine:["rifle","weapon",-24],
|
|
gas_mask:["mask_gas","gear",-60], evidence_tape:["tape","gear",56],
|
|
entrenching_tool:["handaxe_tool","melee",-34], dictaphone:["radio","gear",60],
|
|
/* ---- FUTURE: recovered from somewhere ahead ---- */
|
|
gauss_pistol:["gauss","weapon",-40,"future"], gauss_rifle:["gauss","weapon",44,"future"],
|
|
monoblade:["blade","melee",40,"future"], survey_drone:["drone","gear",-66,"future"],
|
|
optic_visor:["visor","gear",66,"future"], data_wafer:["chip","gear",-70,"future"],
|
|
breather:["mask_gas","gear",70,"future"], sealed_cannister:["cannister","gear",-74,"future"],
|
|
hardsuit:["suit","armour",-34,"future"], field_net:["net","gear",74,"future"],
|
|
/* ---- ANOMALOUS: should not exist ---- */
|
|
threshold_key:["aperture","device",-32,"anomalous"],
|
|
quiet_ledger:["ledger","device",34,"anomalous"],
|
|
/* ---- POWERS: the Quiet Arts ---- */
|
|
power_thread:["thread","power",0], power_echo:["echo","power",14],
|
|
power_hollow:["hollow","power",-14], power_witness:["witness","power",28],
|
|
power_unmake:["unmake","power",-28], power_ledger:["ledger","power",42],
|
|
// armour
|
|
jacket:["jacket","armour",-10], stab_vest:["vest","armour",-4], soft_armour:["vest","armour",4],
|
|
hide:["jacket","armour",12,"antique"], mail:["mail","armour",-16,"antique"], plate:["plate","armour",16,"antique"],
|
|
impact_vest:["vest","armour",10], breach_suit:["suit","armour",-20],
|
|
envsuit:["suit","armour",20], salvage_plate:["plate","device",8,"anomalous"],
|
|
// gear
|
|
field_kit:["flask","gear",-12], handset:["radio","gear",8], trauma_unit:["kit","gear",-20],
|
|
fieldmedic:["syringe","gear",14], medkit:["kit","gear",0], toolkit:["cog","gear",-6],
|
|
scanner:["scanner","gear",20], power_cell:["cell","gear",-26], cover_id:["folder","gear",26],
|
|
anchor:["ring","talent",0], key:["key","device",20,"anomalous"],
|
|
torch:["bolt","gear",34], rope:["rope","gear",-32], rations:["pack","gear",30],
|
|
water:["flask","gear",24], camera:["camera","gear",-16], sample_case:["vial","gear",-24],
|
|
restraints:["manacles","gear",16], beacon:["radio","gear",-30], binocs:["binocs","gear",32],
|
|
notebook:["book","gear",4], geiger:["geiger","gear",28], climbing_kit:["bolt","gear",-8],
|
|
spare_cells:["cell","gear",12], survey_kit:["cog","gear",34], ward:["aperture","device",-24,"anomalous"],
|
|
// device
|
|
crossing_regulator:["regulator","device",-8,"anomalous"],
|
|
// skills, by category
|
|
skill_melee:["blade","skill",-14], skill_ranged:["target","skill",-7],
|
|
skill_phys:["boot","skill",0], skill_manip:["hand","skill",7],
|
|
skill_mental:["brain","skill",14], skill_percep:["eye","skill",21],
|
|
skill_comm:["wave","skill",28],
|
|
// talents
|
|
talent_generic:["thread","talent",0], talent_species:["triune","talent",18],
|
|
talent_agency:["ledger","talent",-18], talent_field:["compass","talent",9],
|
|
portrait_b0:["figure","actor",-330],
|
|
portrait_b1:["figure","actor",-300],
|
|
portrait_b2:["figure","actor",-270],
|
|
portrait_b3:["figure","actor",-210],
|
|
portrait_b4:["figure","actor",-155],
|
|
portrait_b5:["figure","actor",-120],
|
|
portrait_b6:["figure","actor",-80],
|
|
portrait_b7:["figure","actor",-40],
|
|
portrait_b8:["figure","actor",-10],
|
|
portrait_b9:["figure","actor",15],
|
|
portrait_v0:["mask","actor",-315],
|
|
portrait_v1:["mask","actor",-240],
|
|
portrait_v2:["mask","actor",-170],
|
|
portrait_v3:["mask","actor",-100],
|
|
portrait_v4:["mask","actor",-30],
|
|
portrait_c0:["triune","actor",-285],
|
|
portrait_c1:["triune","actor",-195],
|
|
portrait_c2:["triune","actor",-130],
|
|
portrait_c3:["triune","actor",-65],
|
|
portrait_c4:["triune","actor",5],
|
|
portrait_n0:["mask","threat",-355],
|
|
portrait_n1:["mask","threat",-315],
|
|
portrait_n2:["mask","threat",-275],
|
|
portrait_n3:["mask","threat",-155],
|
|
portrait_n4:["mask","threat",-75],
|
|
// actors + misc
|
|
actor_pc:["figure","actor",0], actor_npc:["mask","threat",0],
|
|
actor_case:["folder","case",0], table:["disc","case",18],
|
|
journal:["book","case",-18], discovery:["lens","device",30],
|
|
project:["book","device",-30], material:["ring","armour",0], group:["mask","actor",20],
|
|
door:["door","device",0],
|
|
/* ---- stores: standing issue and the rest ---- */
|
|
warrant_card:["folder","gear",8], dressings:["kit","gear",-4], chalk:["bolt","gear",44],
|
|
whistle:["wave","gear",-38], carbon_book:["book","gear",-12], date_stamp:["disc","gear",18],
|
|
seals:["ring","gear",-18], cordon_kit:["tape","gear",22], clipboard:["folder","gear",-22],
|
|
uv_lamp:["lens","gear",-44], signal_mirror:["disc","gear",-30], probe:["bar","gear",38],
|
|
thermometer:["vial","gear",26], stopwatch:["pocketwatch","gear",14], specimen_jars:["vial","gear",-26],
|
|
swab_kit:["kit","gear",34], lock_rakes:["key","gear",-14], bolt_croppers:["handaxe_tool","gear",-34],
|
|
master_keys:["key","gear",20], door_wedges:["door","gear",30], groundsheet:["pack","gear",-40],
|
|
vacuum_flask:["flask","gear",10], blanket:["pack","gear",42], analgesics:["syringe","gear",6],
|
|
wake_tablets:["vial","gear",48], barrier_gloves:["hand","gear",-48], ear_defenders:["ear","gear",16],
|
|
site_overalls:["suit","gear",-10],
|
|
|
|
/* ---- antique stores ---- */
|
|
tinderbox:["candle","gear",-50,"antique"], quill_ink:["book","gear",50,"antique"],
|
|
sealing_wax:["ring","gear",-54,"antique"], spyglass:["binocs","gear",54,"antique"],
|
|
lamp_oil:["flask","gear",-58,"antique"], laudanum:["vial","gear",58,"antique"],
|
|
lodestone:["compass","gear",-62,"antique"], sand_glass:["pocketwatch","gear",62,"antique"],
|
|
|
|
/* ---- future stores ---- */
|
|
// shields — a disc for the round ones, a bar for the big square ones
|
|
buckler:["disc","armour",22,"antique"], targe:["disc","armour",-14,"antique"],
|
|
heater:["shield","armour",6,"antique"], pavise:["shield","armour",-26,"antique"],
|
|
riot_shield:["shield","armour",30], ballistic_shield:["shield","armour",-8],
|
|
barrier_field:["shield","armour",44,"future"],
|
|
wound_foam:["kit","gear",-16,"future"], cold_light:["bolt","gear",-20,"future"],
|
|
// Fitted to the weapon. Lenses for the three optical sights, so they read as a set;
|
|
// the thermal one is a future-era lens and the lamp is a bolt like the other lights.
|
|
sight_irons:["bar","gear",26], sight_reflex:["lens","gear",8],
|
|
sight_scope:["lens","gear",-8], sight_thermal:["lens","gear",44,"future"],
|
|
weapon_lamp:["bolt","gear",12],
|
|
field_slate:["chip","gear",24,"future"], locator_tags:["target","gear",-24,"future"],
|
|
density_scanner:["scanner","gear",28,"future"], seal_foam:["cannister","gear",-28,"future"],
|
|
assist_sleeve:["hand","gear",32,"future"],
|
|
|
|
/* ---- anomalous stores: transposed, and priced ---- */
|
|
black_mirror:["aperture","device",36,"anomalous"], wrong_compass:["compass","device",-36,"anomalous"],
|
|
returning_coin:["disc","device",40,"anomalous"], attendance_register:["ledger","device",-40,"anomalous"],
|
|
handbell:["wave","device",44,"anomalous"],
|
|
/* ---- transport ---- */
|
|
pool_car:["disc","gear",-6], pool_van:["pack","gear",-2], land_rover:["cog","gear",6],
|
|
site_lorry:["cannister","gear",-32], motorcycle:["bolt","gear",-44], launch:["wave","gear",12],
|
|
helicopter:["drone","gear",-12], hand_cart:["bar","gear",-60,"antique"],
|
|
trap:["rope","gear",60,"antique"], flycycle:["drone","gear",36,"future"],
|
|
lifter:["pack","gear",40,"future"], crawler:["suit","gear",-44,"future"],
|
|
stepping_frame:["door","device",48,"anomalous"], wrong_carriage:["disc","device",-48,"anomalous"],
|
|
|
|
/* ---- transport stores ---- */
|
|
tow_line:["rope","gear",18], jack_plates:["bar","gear",-38], jerry_can:["flask","gear",-42],
|
|
vehicle_spares:["cog","gear",-50], wheel_clamps:["manacles","gear",44], vehicle_log:["book","gear",30],
|
|
roof_lamp:["lens","gear",52], recovery_strop:["rope","gear",-52],
|
|
|
|
/* ---- the forward stores ---- */
|
|
stepping_disc:["aperture","device",-56,"future"], stasis_box:["cannister","gear",56,"future"],
|
|
autodoc:["kit","gear",-60,"future"], impact_suit:["vest","armour",44,"future"],
|
|
shadow_cloth:["jacket","gear",-64,"future"], grav_harness:["rope","gear",64,"future"],
|
|
sonic_probe:["wave","gear",-68,"future"], pressure_tent:["pack","gear",68,"future"],
|
|
cell_stack:["cell","gear",-72,"future"], translator_pin:["ear","gear",72,"future"],
|
|
medical_ram:["syringe","gear",-76,"future"], hull_patch:["kit","gear",76,"future"],
|
|
beacon_hard:["radio","gear",-80,"future"], sensor_stakes:["target","gear",80,"future"],
|
|
|
|
/* ---- further out, and worse for you ---- */
|
|
general_hull:["aperture","device",-20,"anomalous"], pleasure_tap:["brain","device",20,"anomalous"],
|
|
long_ledger:["ledger","device",-44,"anomalous"],
|
|
|
|
/* ---- borrowed authority ---- */
|
|
authority:["folder","device",0], authority_flagged:["folder","device",26],
|
|
authority_burned:["folder","device",-26],
|
|
/* ---- the historical range: medieval ---- */
|
|
arming_sword:["sword","melee",-4,"antique"], longsword:["sword","melee",-12,"antique"],
|
|
falchion:["sword","melee",20,"antique"], war_hammer:["club","melee",-30,"antique"],
|
|
mace:["club","melee",30,"antique"], flail:["club","melee",-36,"antique"],
|
|
poleaxe:["axe","melee",-18,"antique"], halberd:["spear","melee",-26,"antique"],
|
|
billhook:["axe","melee",26,"antique"], pike:["spear","melee",34,"antique"],
|
|
quarterstaff:["bar","melee",-22,"antique"], dirk:["blade","melee",-16,"antique"],
|
|
longbow:["bow","weapon",-30,"antique"], arbalest:["crossbow","weapon",-24,"antique"],
|
|
sling:["rope","weapon",38,"antique"], javelin:["spear","weapon",18,"antique"],
|
|
|
|
/* ---- early modern ---- */
|
|
rapier:["sword","melee",-40,"antique"], main_gauche:["blade","melee",40,"antique"],
|
|
matchlock:["musket","weapon",-34,"antique"], wheellock:["flintlock","weapon",28,"antique"],
|
|
blunderbuss:["shotgun","weapon",-44,"antique"], boarding_pike:["spear","melee",-32,"antique"],
|
|
|
|
/* ---- Napoleonic, Victorian, and the Great War ---- */
|
|
sabre:["sword","melee",44,"antique"], smallsword:["sword","melee",-48,"antique"],
|
|
cutlass:["sword","melee",48,"antique"], brown_bess:["musket","weapon",36,"antique"],
|
|
baker_rifle:["musket","weapon",-38,"antique"], bayonet:["blade","melee",32,"antique"],
|
|
martini:["rifle","weapon",-42,"antique"], webley:["revolver","weapon",42,"antique"],
|
|
lee_enfield:["rifle","weapon",46,"antique"], trench_club:["club","melee",22,"antique"],
|
|
|
|
/* ---- historical armour ---- */
|
|
gambeson:["jacket","armour",-16,"antique"], maille_shirt:["mail","armour",-22,"antique"],
|
|
coat_of_plates:["vest","armour",-30,"antique"], cuirass:["plate","armour",16,"antique"],
|
|
harness:["plate","armour",-36,"antique"], buff_coat:["jacket","armour",34,"antique"],
|
|
sallet:["mask","armour",-42,"antique"], lobster_pot:["mask","armour",42,"antique"],
|
|
jack_of_plate:["vest","armour",24,"antique"], cuirassier:["plate","armour",-48,"antique"],
|
|
brodie:["mask","armour",30,"antique"], flak_jacket:["vest","armour",-24,"antique"],
|
|
|
|
/* ---- spacecraft ---- */
|
|
cutter_ship:["drone","gear",-8,"future"], picket:["drone","gear",14,"future"],
|
|
lighter:["cannister","gear",-14,"future"], revenue_boat:["drone","gear",22,"future"],
|
|
long_hull:["aperture","device",-52,"anomalous"]
|
|
};
|
|
|
|
/** Skill category -> icon key. */
|
|
export const SKILL_ICON = { melee:"skill_melee", ranged:"skill_ranged", phys:"skill_phys",
|
|
manip:"skill_manip", mental:"skill_mental", percep:"skill_percep", comm:"skill_comm" };
|