Files
RingBRP/tools/icons.mjs
T
slaguru666andClaude Opus 5 d0144f744e The Custodians v0.6.1 — full system
A Foundry VTT game system: Basic Roleplaying d100 in a drab British agency that
deals with crossings, where reality keeps a record of what belongs where and can be
made to get it wrong.

Contents:
- rules.mjs as the single authority for every rule formula, with 40 rules and 132
  spot-checked values. Nothing may restate a formula it defines.
- 25 postings, each with a key characteristic, trained skills, talents and its own
  kit; a 175-item catalogue across four eras; 231 generated icons.
- Reaction Lanes initiative, re-rolled every round including the first.
- Coherence, and the Quiet Arts, which only ever arrive from a crossing gone wrong.
- Graded defences: only a critical stops a critical.
- Borrowed Authority — access as a record rather than a hacking roll.
- A case generator, and a rules journal generated from rules.mjs so the book cannot
  drift from the code.

Built compendia are committed so a remote Foundry needs only the files.
node_modules is not; `npm install` restores it for rebuilding content.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 18:09:07 +01:00

156 lines
9.6 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 ---- */
wound_foam:["kit","gear",-16,"future"], cold_light:["bolt","gear",-20,"future"],
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]
};
/** 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" };