- {activeEquipmentSpells.map(({ spellId, equipmentId }) => {
- const spellDef = SPELLS_DEF[spellId];
- if (!spellDef) return null;
-
- const spellState = store.equipmentSpellStates?.find(
- s => s.spellId === spellId && s.sourceEquipment === equipmentId
- );
- const progress = spellState?.castProgress || 0;
- const canCast = canAffordSpellCost(spellDef.cost, store.rawMana, store.elements);
-
- return (
-
-
-
- {spellDef.name}
- {spellDef.tier === 0 && Basic}
- {spellDef.tier >= 4 && Legendary}
-
-
- {canCast ? '✓' : '✗'}
-
-
-
- ⚔️ {fmt(totalDPS)} DPS •
-
- {' '}{formatSpellCost(spellDef.cost)}
-
- {' '}• ⚡ {(spellDef.castSpeed || 1).toFixed(1)}/hr
-
-
- {/* Cast progress bar when climbing */}
- {store.currentAction === 'climb' && (
-
-
- Cast
- {(progress * 100).toFixed(0)}%
-
-
-
- )}
-
- {spellDef.effects && spellDef.effects.length > 0 && (
-
- {spellDef.effects.map((eff, i) => (
-
- {eff.type === 'burn' && `🔥 Burn`}
- {eff.type === 'freeze' && `❄️ Freeze`}
- {eff.type === 'stun' && `⚡ Stun`}
- {eff.type === 'armor_pierce' && `🗡️ Pierce`}
- {eff.type === 'buff' && `⬆ Buff`}
- {eff.type === 'chain' && `⛓️ Chain`}
- {eff.type === 'aoe' && `💥 AOE`}
-
- ))}
-
- )}
-
- );
- })}
+ {/* Spire Stats Card - Replaces Current Floor stat */}
+
+
+ Spire Stats
+
+
+
+
+
{store.maxFloorReached}
+
Best Floor
+
+
+
{store.signedPacts.length}
+
Pacts Signed
+
+
+
+ Current Floor: {store.currentFloor}
+
+
+
+ >
+ )}
+
+ {/* Current Floor Card - Only show in Spire Mode (simpleMode) */}
+ {simpleMode && (
+
+
+ Current Floor
+
+
+
+
+ {store.currentFloor}
+
+ / 100
+
+ {floorElemDef?.sym} {floorElemDef?.name}
+
+ {isGuardianFloor && (
+ GUARDIAN
+ )}
- ) : (
- No spells on equipped weapons. Enchant a staff with spell effects in the Crafting tab.
- )}
-
-
-
- {/* Summoned Golems Card - Always show in simple mode, conditional in normal mode */}
- {(simpleMode || store.golemancy.summonedGolems.length > 0) && (
+
+ {isGuardianFloor && currentGuardian && (
+
+ ⚔️ {currentGuardian.name}
+
+ )}
+
+ {/* HP Bar */}
+
+
+
+ {fmt(store.floorHP)} / {fmt(store.floorMaxHP)} HP
+ DPS: {store.currentAction === 'climb' && activeEquipmentSpells.length > 0 ? fmtDec(totalDPS) : '—'}
+
+
+
+
+ Best: Floor {store.maxFloorReached} •
+ Pacts: {store.signedPacts.length}
+
+
+
+ )}
+
+ {/* Active Spells Card - Only show in Spire Mode (simpleMode) */}
+ {simpleMode && (
+
+
+
+ Active Spells ({activeEquipmentSpells.length})
+
+
+
+ {activeEquipmentSpells.length > 0 ? (
+
+ {activeEquipmentSpells.map(({ spellId, equipmentId }) => {
+ const spellDef = SPELLS_DEF[spellId];
+ if (!spellDef) return null;
+
+ const spellState = store.equipmentSpellStates?.find(
+ s => s.spellId === spellId && s.sourceEquipment === equipmentId
+ );
+ const progress = spellState?.castProgress || 0;
+ const canCast = canAffordSpellCost(spellDef.cost, store.rawMana, store.elements);
+
+ return (
+
+
+
+ {spellDef.name}
+ {spellDef.tier === 0 && Basic}
+ {spellDef.tier >= 4 && Legendary}
+
+
+ {canCast ? '✓' : '✗'}
+
+
+
+ ⚔️ {fmt(totalDPS)} DPS •
+
+ {' '}{formatSpellCost(spellDef.cost)}
+
+ {' '}• ⚡ {(spellDef.castSpeed || 1).toFixed(1)}/hr
+
+
+ {/* Cast progress bar when climbing */}
+ {store.currentAction === 'climb' && (
+
+
+ Cast
+ {(progress * 100).toFixed(0)}%
+
+
+
+ )}
+
+ {spellDef.effects && spellDef.effects.length > 0 && (
+
+ {spellDef.effects.map((eff, i) => (
+
+ {eff.type === 'burn' && `🔥 Burn`}
+ {eff.type === 'freeze' && `❄️ Freeze`}
+ {eff.type === 'stun' && `⚡ Stun`}
+ {eff.type === 'armor_pierce' && `🗡️ Pierce`}
+ {eff.type === 'buff' && `⬆ Buff`}
+ {eff.type === 'chain' && `⛓️ Chain`}
+ {eff.type === 'aoe' && `💥 AOE`}
+
+ ))}
+
+ )}
+
+ );
+ })}
+
+ ) : (
+ No spells on equipped weapons. Enchant a staff with spell effects in the Crafting tab.
+ )}
+
+
+ )}
+
+ {/* Summoned Golems Card - Show in Spire Mode (simpleMode) or if have golems */}
+ {simpleMode && store.golemancy.summonedGolems.length > 0 && (
@@ -243,7 +263,7 @@ export function SpireTab({ store, simpleMode = false }: SpireTabProps) {
⚔️ {damage} DMG • ⚡ {attackSpeed.toFixed(1)}/hr •
- 🛡️ {Math.floor(golemDef.armorPierce * 100)}% Pierce
+ 🗡️ {Math.floor(golemDef.armorPierce * 100)}% Pierce
{/* Attack progress bar when climbing */}
{store.currentAction === 'climb' && summoned.attackProgress > 0 && (
@@ -261,7 +281,7 @@ export function SpireTab({ store, simpleMode = false }: SpireTabProps) {