From 6c7b4b813395599000e38ba6301445483b7c7e37 Mon Sep 17 00:00:00 2001 From: Vantz Stockwell Date: Sat, 23 May 2026 07:55:00 -0400 Subject: [PATCH] Add Bonus Intel input for off-level intel sources (POIs etc.) Players can pick up intel from points of interest on the map beyond what levelling grants. Add a "Bonus Intel" card alongside the Character XP card with an editable input. The character totals strip now shows the combined intel (levels + bonus) with a small "+N" badge when a bonus is present. Existing builds without the field migrate cleanly via the existing defaults-merge in store.ts. Co-Authored-By: Claude Opus 4.7 (1M context) --- character-builder/frontend/src/App.vue | 46 ++++++++++++++++++++++++- character-builder/frontend/src/store.ts | 2 +- character-builder/frontend/src/types.ts | 7 +++- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/character-builder/frontend/src/App.vue b/character-builder/frontend/src/App.vue index f050957..d867c10 100644 --- a/character-builder/frontend/src/App.vue +++ b/character-builder/frontend/src/App.vue @@ -120,6 +120,10 @@ const totalIntelAtLevel = computed(() => { if (idx < 0) return 0; return charXp.value.rows[idx]?.totalIntelPoints || 0; }); +// Intel total including bonus picked up off the map (POIs, etc.) +const totalIntelWithBonus = computed( + () => totalIntelAtLevel.value + (build.character.bonusIntel || 0), +); // Skill points are a single global pool spent across all 5 trees. const totalSpentAcrossClasses = computed(() => @@ -300,7 +304,16 @@ const specMeta: Record = {
Intel Points
-
{{ totalIntelAtLevel }}
+
+ {{ totalIntelWithBonus }} + + +{{ build.character.bonusIntel }} + +
@@ -316,6 +329,37 @@ const specMeta: Record = { @update:level="(n) => (build.character.level = n)" @update:xp-into="(n) => (build.character.xpInto = n)" /> + +
+
INT
+

Bonus Intel

+
+
+ + +
+
+
+ From levels + {{ totalIntelAtLevel.toLocaleString('en-US') }} +
+
+ Bonus + {{ (build.character.bonusIntel || 0).toLocaleString('en-US') }} +
+
+ Total + {{ totalIntelWithBonus.toLocaleString('en-US') }} +
+
diff --git a/character-builder/frontend/src/store.ts b/character-builder/frontend/src/store.ts index a2e3fca..a9bfaec 100644 --- a/character-builder/frontend/src/store.ts +++ b/character-builder/frontend/src/store.ts @@ -15,7 +15,7 @@ export function defaultBuild(): BuildState { v: 1, house: 'atreides', classId: 'swordmaster', - character: { level: 0, xpInto: 0 }, + character: { level: 0, xpInto: 0, bonusIntel: 0 }, specs, faction: { tier: 0, standingInto: 0 }, skills: {}, diff --git a/character-builder/frontend/src/types.ts b/character-builder/frontend/src/types.ts index 86296b0..5ab33f6 100644 --- a/character-builder/frontend/src/types.ts +++ b/character-builder/frontend/src/types.ts @@ -84,7 +84,12 @@ export interface BuildState { // classId is just the currently viewed skill-tree tab — players allocate // into all 5 trees from a single shared skill-point pool. classId: ClassId; - character: { level: number; xpInto: number }; + character: { + level: number; + xpInto: number; + // Extra intel points gained outside levelling (POIs on the map, etc.) + bonusIntel: number; + }; specs: Record; faction: { tier: number; standingInto: number }; // Allocated skill points keyed by full tag (e.g. Skills.Ability.BattleCry).