mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
Merge branch 'phase-H-harvest-charges': repo cleanup
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,3 +8,4 @@ gensolver
|
||||
holdem-train
|
||||
/open5e-import
|
||||
/expedition-sim
|
||||
sim_results/
|
||||
|
||||
@@ -1,252 +0,0 @@
|
||||
# Adventure 2.0 — D&D Layer
|
||||
|
||||
**Status:** shipping to prod from branch `adv-2.0`.
|
||||
**Compatibility:** fully additive. Every existing character, treasure, balance,
|
||||
streak, and inventory row is preserved. Players who don't opt in keep the
|
||||
classic adventure experience unchanged.
|
||||
|
||||
---
|
||||
|
||||
## TL;DR
|
||||
|
||||
Adventure 2.0 grafts a full D&D-style character layer onto the existing
|
||||
adventure system, then builds two new endgame loops on top of it: **single-
|
||||
session dungeon zones** and **multi-day expeditions**. It introduces ten
|
||||
hand-tuned zones across five tiers, a real-time threat clock, harvest nodes
|
||||
per room, multi-region travel, an extract/resume cycle, and TwinBee — a
|
||||
zone-narrating mood-driven dungeon master who reacts to what you do.
|
||||
|
||||
If you've been running `!adventure`, nothing breaks. If you run `!setup`, the
|
||||
whole game opens up.
|
||||
|
||||
---
|
||||
|
||||
## What's new
|
||||
|
||||
### 1. A D&D character, on top of your existing one
|
||||
|
||||
Run `!setup` once. You pick a **race** and **class**, your existing
|
||||
`combat_level` becomes your D&D level, and the system inherits your
|
||||
treasures and equipment as attunements. From that point on every fight,
|
||||
forage, and arena run is resolved through D&D mechanics — STR/DEX/CON/INT/WIS/CHA,
|
||||
HP, AC, ability checks, saving throws, the lot.
|
||||
|
||||
- **5 classes:** Fighter, Mage, Cleric, Ranger, Rogue
|
||||
- **6 races** with distinct passives
|
||||
- **HP / AC / ability scores** with proper modifiers
|
||||
- **Resource pools** per class (stamina, spell slots, channel divinity, etc.)
|
||||
- `!sheet` shows everything: stats, bonuses, equipped gear, attunements
|
||||
|
||||
Players who haven't run `!setup` see the legacy adventure UI as before.
|
||||
|
||||
### 2. Subclasses & level-up features (L3 → L15)
|
||||
|
||||
At L3 you specialize — every class has 3 subclasses, each with its own
|
||||
passives, abilities, and signature moves through L15.
|
||||
|
||||
| Class | Subclasses |
|
||||
|---|---|
|
||||
| Fighter | Champion, Battle Master, Berserker |
|
||||
| Mage | Evocation, Abjuration, Necromancy, Arcane Trickster |
|
||||
| Cleric | Life, War, Trickery |
|
||||
| Ranger | Hunter, Beast Master, Gloom Stalker |
|
||||
| Rogue | Thief, Assassin, Arcane Trickster |
|
||||
|
||||
Subclass features unlock at L5, L7, L10, L15 — extra attacks, spell slot
|
||||
upgrades, signature spells, beast companions, sneak-attack scaling, divine
|
||||
strike, etc. Use `!subclass` to inspect and pick.
|
||||
|
||||
### 3. Spells & spellbooks
|
||||
|
||||
Mages, Clerics, and Rangers cast for real now. Spell slots are tracked,
|
||||
combat consumes them, and Mages have a **spellbook cap** that grows with
|
||||
level — pick which spells to learn at level-up via `!learn`. Spells fire
|
||||
automatically through the combat AI when the situation favors them.
|
||||
|
||||
### 4. Forward-simulating combat engine
|
||||
|
||||
Combat is no longer a one-shot dice roll. The engine plays out the encounter
|
||||
turn by turn, threading consumables, monster abilities, status effects,
|
||||
class resources, crits and fumbles, and renders a real combat narrative.
|
||||
Every fight in arena, encounters, expeditions, and zones runs through it.
|
||||
|
||||
### 5. Dungeon zones (single-session)
|
||||
|
||||
`!zone` — pick a zone, run it, come out with loot.
|
||||
|
||||
- **10 zones, 5 tiers**, level bands L1 through L20
|
||||
- T1: Goblin Warrens, Crypt of Valdris
|
||||
- T2: Forest Shadows, Sunken Temple
|
||||
- T3: Haunted Manor, Underforge
|
||||
- T4: Underdark Outpost, Feywild Crossing
|
||||
- T5: Dragon's Lair, Abyss Portal
|
||||
- **Procedural rooms:** entry → exploration → trap → elite → boss, with the
|
||||
middle padded out per zone
|
||||
- **Per-zone bestiary, traps, atmosphere, and flavor pools**
|
||||
- **Boss phase-two narration** when a boss crosses 50% HP
|
||||
- **TwinBee** — your in-zone DM. Has a 0–100 mood score that shifts on
|
||||
crits, deaths, taunts, compliments, zone completions. Mood gates the
|
||||
flavor of every aside, gloat, and recap you read.
|
||||
- `!zone map` — ASCII layout `E──?──T──★──☠` with your current marker
|
||||
- `!zone lore` — TwinBee shares zone history
|
||||
- `!zone taunt` / `!zone compliment` — directly poke or flatter your DM
|
||||
|
||||
### 6. Multi-day expeditions
|
||||
|
||||
`!expedition` — the long form. Pack supplies, head out, manage your day-by-day
|
||||
survival, come home with the haul (or not).
|
||||
|
||||
- **Outfitting:** buy supply packs at start; standard or deluxe; cost scales
|
||||
with zone tier
|
||||
- **Real-time day cycle:** 06:00 morning briefing, 21:00 evening recap
|
||||
(configurable per environment)
|
||||
- **Supply burn:** rations tick down; harsh zones burn faster; running out
|
||||
triggers a forced extraction
|
||||
- **Threat Clock** (0–100): every action you take is noticed. As threat
|
||||
rises you cross bands — Quiet → Stirring → Alert → Hostile → Siege —
|
||||
each band changes monster density, patrol odds, and night events
|
||||
- **Patrol encounters** at Alert+: fights can interrupt you while traversing
|
||||
cleared rooms
|
||||
- **Wandering monsters** at night
|
||||
- **Siege Mode** at threat 80+: fortified camp branches, special warnings
|
||||
- **Camp:** `!camp rough` (free, no protection) vs `!camp standard`
|
||||
(consumes supplies, grants overnight rest)
|
||||
- **Milestones** (§13): First Night, Deep Dive, Long Haul, etc.
|
||||
- **Expedition log:** every event recorded; `!expedition log` shows the trail
|
||||
|
||||
### 7. Multi-region zones
|
||||
|
||||
Higher-tier zones are **multi-region**. The Underdark, Feywild Crossing,
|
||||
Dragon's Lair, and Abyss Portal each have multiple connected regions.
|
||||
|
||||
- `!region` — see where you are, where you can travel, what you've explored
|
||||
- **Inter-region travel** consumes supplies and ticks threat
|
||||
- **Base camp** is a persistent waypoint per expedition — anchor your
|
||||
return, retreat to safety, regroup
|
||||
- `!map` (E6a) — full multi-region map renderer with visited markers
|
||||
|
||||
### 8. Per-zone temporal events
|
||||
|
||||
Every T2+ zone has a **signature time-based effect**:
|
||||
|
||||
- **Sunken Temple** — tidal cycle floods/recedes rooms
|
||||
- **Haunted Manor** — nightly reset; cleared rooms come back
|
||||
- **Underforge** — heat accumulation; gear damage rises
|
||||
- **Feywild Crossing** — time distortion; days pass at non-uniform rates
|
||||
- **Dragon's Lair** — awareness pulses warn the dragon directly
|
||||
- **Abyss Portal** — destabilization stack threatens forced collapse
|
||||
|
||||
These are enumerated and active at all expedition tiers, layered on top
|
||||
of the threat clock.
|
||||
|
||||
### 9. Extract & resume
|
||||
|
||||
`!extract` — bail safely from an expedition. You keep what you've found,
|
||||
the expedition row goes to `extracting` status, and you can `!resume`
|
||||
later to pick up from your base camp on the same expedition. Multi-region
|
||||
extract→resume preserves your current region and visited set.
|
||||
|
||||
### 10. Harvest nodes per room
|
||||
|
||||
Foraging, mining, and (in coastal zones) fishing now happen **inside** zones.
|
||||
|
||||
- Every room gets a seeded set of **harvest nodes** — finite, room-scoped
|
||||
- Harvest actions roll against zone-specific DCs with class bonuses
|
||||
(Ranger forage/fish, Fighter mine, etc.)
|
||||
- **Class-specific yield bonuses** — Rangers find rare game; Fighters
|
||||
break tougher ore; Mages divine arcane components
|
||||
- **Zone-condition effects** — Tidal Rising blocks fishing; Heat blocks
|
||||
mining; nightly reset re-seeds nodes; etc.
|
||||
- **Per-zone resource tables** — every zone has its own loot pool
|
||||
|
||||
### 11. Fishing zones
|
||||
|
||||
Coastal/aquatic zones (Sunken Temple, Forest Shadows streams, Feywild
|
||||
Crossing) support `!harvest fish` with their own resource pools, fishing
|
||||
DCs, and **Ranger rare-catch upgrades**.
|
||||
|
||||
### 12. Zone loot drops
|
||||
|
||||
- **Boss kills** drop from a per-zone loot table
|
||||
- **Elite kills** drop from a tier-scoped table
|
||||
- Loot persists into your inventory and can be sold, equipped, or
|
||||
attuned via the existing flow
|
||||
|
||||
### 13. Economy integration
|
||||
|
||||
All Adv 2.0 systems use real coins. Outfitting expeditions debits at start;
|
||||
extracted loot credits at completion; harvest yields stack into your
|
||||
existing inventory; arena multipliers and streak XP scale through D&D
|
||||
combat. No parallel currency.
|
||||
|
||||
### 14. TwinBee narration coverage
|
||||
|
||||
Every zone × every narration type (room entry, combat start, combat end,
|
||||
crits, fumbles, player death, zone complete, mood asides, lore, boss
|
||||
entry, elite entry, taunt/compliment responses) has a non-empty pool.
|
||||
A coverage test (`TestNarrationCoverage_AllZonesAllTypes`) locks this in
|
||||
so future zone additions can't ship with empty pools.
|
||||
|
||||
---
|
||||
|
||||
## Player commands cheat sheet
|
||||
|
||||
| Command | What it does |
|
||||
|---|---|
|
||||
| `!setup` | Opt into D&D — pick race + class, inherits your existing progress |
|
||||
| `!sheet` | Full character sheet |
|
||||
| `!learn` | Mages — pick a spell at level-up |
|
||||
| `!subclass` | Inspect / select subclass at L3 |
|
||||
| `!zone` / `!zone list` | Show available zones |
|
||||
| `!zone enter <id>` | Start a single-session run |
|
||||
| `!zone advance` | Resolve current room |
|
||||
| `!zone status` / `!zone map` / `!zone lore` | Run inspection |
|
||||
| `!zone abandon` | End run, no rewards |
|
||||
| `!zone taunt` / `!zone compliment` | Poke TwinBee |
|
||||
| `!expedition list` | Zones available at your level |
|
||||
| `!expedition start <zone> [Ns] [Md]` | Outfit and begin |
|
||||
| `!expedition status` / `!expedition log` | Daily briefing + history |
|
||||
| `!camp rough` / `!camp standard` | Make camp |
|
||||
| `!region` | Multi-region inspection + travel |
|
||||
| `!map` | Full multi-region map |
|
||||
| `!harvest forage` / `!harvest mine` / `!harvest fish` | Work the room |
|
||||
| `!resources` | Inventory of harvested materials |
|
||||
| `!threat` | Current threat clock |
|
||||
| `!extract` | Bail safely from an expedition |
|
||||
| `!resume` | Pick up an extracted expedition |
|
||||
|
||||
---
|
||||
|
||||
## Compatibility & rollout
|
||||
|
||||
- **Additive migrations only.** No columns dropped, no tables renamed. Every
|
||||
pre-2.0 column is preserved with original semantics.
|
||||
- **Opt-in.** A `pending_setup` flag keeps non-opted players on the legacy
|
||||
flow. Output formats only switch after `!setup` completes.
|
||||
- **Treasures → attunements.** Existing treasure rows are interpreted as
|
||||
attunements rather than re-issued.
|
||||
- **`combat_level` → D&D level.** Same column, new lens.
|
||||
- **Equipment slots** carry forward 1:1.
|
||||
|
||||
If you've been playing pre-2.0, your save is intact. Run `!setup` when you
|
||||
want the new layer. Don't run it and nothing about your day changes.
|
||||
|
||||
---
|
||||
|
||||
## Developer notes
|
||||
|
||||
- **Branch:** `adv-2.0`, 104 commits ahead of `main`
|
||||
- **Test coverage:** full `internal/plugin` suite green, including a new
|
||||
scenario playthrough (`adv2_scenario_test.go`) that drives end-to-end
|
||||
flows against a copy of the prod database
|
||||
- **Phases shipped on this branch:**
|
||||
- Phases 1–9 — character system, abilities, combat engine, spells (SP1–SP4)
|
||||
- Phase 10 — subclasses (SUB1–SUB3d, all classes through L15)
|
||||
- Phase 11 — dungeon zones D1–D11 (10 zones + TwinBee + map + coverage test)
|
||||
- Phase 12 — expeditions E1–E6 (supplies, threat clock, day cycle, camp,
|
||||
multi-region, extract/resume, milestones, flavor)
|
||||
- Phase R — resource/combat integration (R1–R7, including post-completion
|
||||
audit hardening)
|
||||
- **Deferred (pre-existing systems required):**
|
||||
- Lemmy/Matrix activity → mood signal hooks (waiting on activity aggregation)
|
||||
- Pete bot zone announcements (Phase 16 deliverable)
|
||||
190
FOREX_PLUGIN.md
190
FOREX_PLUGIN.md
@@ -1,190 +0,0 @@
|
||||
# GogoBee — `forex` Plugin
|
||||
|
||||
Design document for Claude Code integration.
|
||||
|
||||
---
|
||||
|
||||
## Purpose
|
||||
|
||||
Tracks USD exchange rates against EUR and JPY using the [Frankfurter API](https://www.frankfurter.app) (ECB-sourced, no API key required). Stores daily history in bbolt, computes buy signals, and exposes Matrix commands for rate checks, full reports, and threshold alerts.
|
||||
|
||||
---
|
||||
|
||||
## File Layout
|
||||
|
||||
Place all files under `plugins/forex/` in the GogoBee module tree.
|
||||
|
||||
```
|
||||
plugins/forex/
|
||||
├── forex.go # Plugin struct, Start/Stop, HandleCommand, all Matrix command handlers
|
||||
├── store.go # bbolt persistence (rates + alerts)
|
||||
├── analyzer.go # Signal computation (30/90d moving averages, 52w range, buy score)
|
||||
├── scheduler.go # Frankfurter HTTP client, backfill, daily poller goroutine
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Matrix Commands
|
||||
|
||||
All commands use the `!fx` prefix. Currency arguments are optional where noted and accept any currency in `TrackedCurrencies`.
|
||||
|
||||
| Command | Args | Behavior |
|
||||
|---|---|---|
|
||||
| `!fx rate` | `[currencies...]` | Current rate + one-line quick signal. No args = all tracked currencies. |
|
||||
| `!fx report` | `[currencies...]` | Full analysis block per currency: 30/90d averages, 52w range bar, buy score. |
|
||||
| `!fx setalert` | `<currency> <rate>` | Save a threshold alert for this room. Fires when `1 USD >= rate`. |
|
||||
| `!fx alerts` | — | List all active alerts in the current room, with last-fired time if applicable. |
|
||||
| `!fx delalert` | `<currency> <rate>` | Remove a specific alert. |
|
||||
|
||||
**Example usage:**
|
||||
```
|
||||
!fx rate → EUR and JPY quick signals
|
||||
!fx rate JPY → JPY only
|
||||
!fx report EUR JPY → full report for both
|
||||
!fx setalert JPY 155 → alert when USD/JPY ≥ 155
|
||||
!fx delalert JPY 155
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Data Source
|
||||
|
||||
**Frankfurter.app** — wraps ECB reference rates. No authentication. Two endpoints used:
|
||||
|
||||
- `GET /latest?from=USD&to=EUR,JPY` — current rates (called on-demand for `!fx rate/report` and daily by the poller)
|
||||
- `GET /YYYY-MM-DD..YYYY-MM-DD?from=USD&to=EUR,JPY` — date range (used for the one-time backfill)
|
||||
|
||||
Both return JSON. All currencies for a given date arrive in a single response, so there is only ever one HTTP call per operation regardless of how many currencies are tracked.
|
||||
|
||||
---
|
||||
|
||||
## Storage (`store.go`)
|
||||
|
||||
**Database:** bbolt, single file, path configurable at `New()` call time (e.g. `./data/forex.db`).
|
||||
|
||||
**Two buckets:**
|
||||
|
||||
### `rates`
|
||||
|
||||
Key: `"EUR:20240315"` (currency + date in `YYYYMMDD`, lexicographically sortable per currency)
|
||||
Value: JSON-encoded `RateRecord{Date, Currency, Rate}`
|
||||
|
||||
Range queries use bbolt cursor `Seek` + forward scan bounded by the end key. Each currency's history is naturally isolated by key prefix.
|
||||
|
||||
### `alerts`
|
||||
|
||||
Key: `"<roomID>:<userID>:<currency>:<threshold>"` (float formatted to 6 decimal places)
|
||||
Value: JSON-encoded `AlertRecord{RoomID, UserID, Currency, Threshold, FiredAt}`
|
||||
|
||||
`FiredAt` is a Unix timestamp (int64). Zero means never fired. Alerts are reset (set back to zero) if `FiredAt` is older than 24 hours — called automatically after each daily poll.
|
||||
|
||||
---
|
||||
|
||||
## Signal Computation (`analyzer.go`)
|
||||
|
||||
`Compute(store, currency, currentRate)` returns a `Signal` struct.
|
||||
|
||||
**Inputs gathered from store:**
|
||||
- 30-day rate slice (stored records + today's live rate appended)
|
||||
- 90-day rate slice (same)
|
||||
- 52-week rate slice (same)
|
||||
|
||||
**Derived values:**
|
||||
|
||||
| Field | Calculation |
|
||||
|---|---|
|
||||
| `Avg30` / `Avg90` | Arithmetic mean of respective slice |
|
||||
| `High52w` / `Low52w` | Min/max of 52-week slice |
|
||||
| `Percentile` | `(current - low) / (high - low) * 100` — where current sits in the 52w range |
|
||||
| `Score` (1–10) | `percentile/100 * 10 * 0.6 + devScore * 0.4` |
|
||||
|
||||
`devScore` is derived from the average deviation above the 30d and 90d moving averages, mapped to a 0–10 scale where +5% above average = 10, −5% = 0.
|
||||
|
||||
**Score labels:**
|
||||
|
||||
| Score | Label | Emoji |
|
||||
|---|---|---|
|
||||
| ≥ 8 | Excellent | 🟢 |
|
||||
| ≥ 6 | Good | 🟡 |
|
||||
| ≥ 4 | Fair | 🟠 |
|
||||
| < 4 | Poor | 🔴 |
|
||||
|
||||
**Note on score direction:** Higher score = dollar is *stronger* relative to history = good time to convert USD to a foreign currency. This is correct for both EUR (Portugal move) and JPY (Japan purchases).
|
||||
|
||||
**Rate formatting:** JPY prints to 2 decimal places (`154.32`); all other currencies to 4 (`1.0842`). Controlled by `formatRate(currency, rate)` in `analyzer.go`.
|
||||
|
||||
---
|
||||
|
||||
## Daily Poller (`scheduler.go`)
|
||||
|
||||
`StartDailyPoller(ctx, store, pollHourUTC, alertCallback)` launches a goroutine that:
|
||||
|
||||
1. Sleeps until `pollHourUTC:01 UTC` (default: `17` — ECB publishes ~16:00 CET)
|
||||
2. Calls `FetchCurrentRates` for all `TrackedCurrencies`
|
||||
3. Saves each rate to the store
|
||||
4. Calls `store.ResetFiredAlerts()` (clears alerts fired >24h ago)
|
||||
5. Calls `alertCallback(rates)` so `forex.go` can check thresholds and send Matrix notifications
|
||||
6. Sleeps until next day
|
||||
|
||||
**Backfill** (`Backfill(ctx, store)`) is called once at `Start()`. It fetches the full trailing year in one request and saves all records. Safe to call repeatedly — bbolt upserts are idempotent.
|
||||
|
||||
---
|
||||
|
||||
## Plugin Lifecycle
|
||||
|
||||
```go
|
||||
// Initialization (in GogoBee main/registry)
|
||||
p, err := forex.New(matrixClient, "./data/forex.db")
|
||||
p.Start() // triggers backfill + launches poller goroutine
|
||||
defer p.Stop()
|
||||
|
||||
// Command dispatch (in message event handler)
|
||||
// parts = strings.Fields(messageBody), e.g. ["!fx", "rate", "JPY"]
|
||||
if parts[0] == "!fx" {
|
||||
p.HandleCommand(evt, parts[1:])
|
||||
}
|
||||
```
|
||||
|
||||
`New` takes the mautrix `*mautrix.Client` and the bbolt file path.
|
||||
`HandleCommand` takes the `*event.Event` and the argument slice (everything after `!fx`).
|
||||
|
||||
---
|
||||
|
||||
## Adding Currencies
|
||||
|
||||
One change required: add the ISO 4217 code to `TrackedCurrencies` and a `CurrencyMeta` entry in `store.go`.
|
||||
|
||||
```go
|
||||
var TrackedCurrencies = []string{"EUR", "JPY", "GBP"}
|
||||
|
||||
var CurrencyMeta = map[string]struct {
|
||||
Emoji string
|
||||
Label string
|
||||
}{
|
||||
"EUR": {Emoji: "🇪🇺", Label: "Euro"},
|
||||
"JPY": {Emoji: "🇯🇵", Label: "Japanese Yen"},
|
||||
"GBP": {Emoji: "🇬🇧", Label: "British Pound"},
|
||||
}
|
||||
```
|
||||
|
||||
Frankfurter supports all major ISO currencies. The backfill and daily poll will automatically include any new entry on next run.
|
||||
|
||||
---
|
||||
|
||||
## Dependencies
|
||||
|
||||
```
|
||||
go.etcd.io/bbolt v1.3.9
|
||||
maunium.net/go/mautrix v0.18.1 // already in GogoBee
|
||||
gopkg.in/yaml.v3 // only if config file support is added later
|
||||
```
|
||||
|
||||
No CGO. Builds cleanly on Linux/ARM (Hetzner CAX11 compatible).
|
||||
|
||||
---
|
||||
|
||||
## Notes for Integration
|
||||
|
||||
- The `mdToHTML` function in `forex.go` is a minimal stub that handles `**bold**` and `` `code` `` only. Replace with GogoBee's existing markdown renderer if one is available — the function signature is `mdToHTML(s string) string`.
|
||||
- Alert `FiredAt` uses a 24-hour cooldown. If the daily poll fires while an alert's threshold is still met the next day, it will re-notify. This is intentional — persistent high rates should keep notifying.
|
||||
- Live rate fetch has a 10-second timeout. On failure it falls back to the most recent stored rate per currency and logs a warning. Commands will still work, but the response will note staleness via the log (not surfaced to Matrix — add if desired).
|
||||
@@ -1,144 +0,0 @@
|
||||
# Combat Rebalance — 2026-05-10
|
||||
|
||||
Post HP-unification balance recovery. Player HP dropped ~45% when the legacy
|
||||
`50 + CombatLevel*2` base was retired; monsters were still tuned for the old
|
||||
~120 HP scale, making even L1 dungeons unsurvivable. This pass retunes both
|
||||
sides for the dnd HP scale and retires CombatLevel from combat formulas.
|
||||
|
||||
## Symptom
|
||||
|
||||
Real prod player @holymachina (cleric, dnd L10): legacy combat MaxHP ≈ 165 → post-unification combat MaxHP ≈ 70. Monster damage formulas still scaled quadratically with tier (`T5 Attack=49`), oversized for ~70 HP players. Wight encounter user reported: 56/56 → 0/56 in 4 phases despite wight ending with 12 HP left. Even fresh L1 dungeon dives ran 95%+ death rate in sims.
|
||||
|
||||
## Root causes
|
||||
|
||||
1. **HP unification dropped the `50 + CombatLevel*2` base** without any rebalance pass on monster formulas. Monsters tuned for legacy HP pool now obliterate dnd HP pool.
|
||||
2. **Tiebreak was absolute-HP-based** (recent change `de02907`). Worked OK on legacy scale where pools were similar; breaks on dnd scale because monster pools (~30–175) are 2-3× larger than player pools (~13–83), so timeouts always favor monsters even when player took less proportional damage.
|
||||
3. **CombatLevel was still load-bearing** in `DerivePlayerStats` for Attack/Defense/Speed/HP scaling, contradicting the Phase L closeout that retired it everywhere else. This made test fixtures lie about real player power.
|
||||
|
||||
## Scope decisions (locked in by user)
|
||||
|
||||
- **Don't restore the legacy `50 + CL*2` HP base.** Combat MaxHP stays at `c.HPMax + HPBonus(gear delta only)`.
|
||||
- **Strip CombatLevel from combat scaling entirely.** Player power = ability scores + gear + dnd-derived layers (AC/AB/weapon dice). No level-based defense/speed/attack/HP scaling on the player side.
|
||||
- **Both formula and (eventually) bestiary tuning** for monsters, not just one. Formula pass was sufficient this round; bestiary deferred.
|
||||
|
||||
## Changes
|
||||
|
||||
### Test infrastructure
|
||||
|
||||
`internal/plugin/combat_stats_test.go`:
|
||||
|
||||
- `TestBalanceRegression_DungeonDeathRates` and `TestBalanceRegression_UnderleveledPlayers` now apply the production combat pipeline before simulating: `applyDnDPlayerLayer`, `applyDnDEquipmentLayer`, `applyDnDDungeonMonsterLayer`. Previously they ran raw `DerivePlayerStats` output, which silently hid the HP-unification regression because the legacy MaxHP value never made it into the test combatant.
|
||||
- New helper `balanceTestDnDChar(dndLevel int)` synthesizes a fighter sheet (mirroring `autoBuildCharacter`) at the requested dnd level. Replaces the old `level=CombatLevel` proxy.
|
||||
- Test cases re-keyed onto dnd levels (1, 2, 5, 7, 9) for the well-geared baseline and (1, 2, 4, 6) for the underleveled set. Previously `level=5..48` was being treated as both CombatLevel *and* dnd_level which hid the regression.
|
||||
- Test log line now prints `AC` / `AB` / `Atk` instead of legacy `Atk/Def/Spd` triple — the d20 path's actual hit/damage drivers.
|
||||
- `TestDerivePlayerStats_BaseStats` updated: zero-gear baseline is now `MaxHP=50, HPBonus=0, Attack=5` (constants, no level scaling). Previously expected `>=70 HP` which was the legacy formula output for L10.
|
||||
|
||||
### Player stat derivation
|
||||
|
||||
`internal/plugin/combat_stats.go`:
|
||||
|
||||
- **Stripped CombatLevel scaling** from `DerivePlayerStats`. `MaxHP` baseline is a flat constant (50, used only as the multiplicand for armor/arena/housing % bonus formulas — subtracted out into `HPBonus` at the end so the legacy base never reaches combat). `Attack`, `Defense`, `Speed` are now constants (5, 3, 5) plus gear and bonuses. Player power scales through gear and the dnd layers.
|
||||
- All other gear/arena/housing/streak/grudge/pet/NPC bonus paths preserved.
|
||||
|
||||
### Dungeon monster formulas
|
||||
|
||||
`internal/plugin/combat_stats.go: DeriveDungeonMonsterStats`:
|
||||
|
||||
| Stat | Old formula (legacy HP era) | New formula (dnd HP era) |
|
||||
|---|---|---|
|
||||
| MaxHP | `25 + t*t*6 + death*0.6` (T1=33, T5=187) | `12 + t*7 + death*0.3` (T1≈22, T5≈65) |
|
||||
| Attack | `3 + death*0.2 + t*t*1.5` (T1=5, T5=49) | `t*1.5 + death*0.04` (T1=1, T5=9) |
|
||||
| Defense | `2 + t*1.5` | `2 + t*1.2` (small trim) |
|
||||
|
||||
Speed / CritRate / DodgeRate / BlockRate unchanged. AB scaling via `applyDnDDungeonMonsterLayer` (`9 + tier`) untouched — it was already calibrated for the d20 hit-resolution side.
|
||||
|
||||
Quadratic `t*t*X` terms are out everywhere on the monster side. Linear scaling matches the dnd HP scale's narrower band (player HP 13–83, not 60–200).
|
||||
|
||||
### Tiebreak
|
||||
|
||||
`internal/plugin/combat_engine.go`:
|
||||
|
||||
- Reverted the recent absolute-HP tiebreak (`de02907`) back to **HP percentage** for the post-Sudden-Death timeout case. Bias toward player on exact ties (`playerFrac >= enemyFrac` → enemy dies).
|
||||
- Reasoning: monster pools on the dnd scale are systematically 2-3× larger than player pools, so absolute always favored monsters even when the player took less proportional damage. The `de02907` example case (88/123 vs 83/97) doesn't exist on the new scale.
|
||||
|
||||
### Comments and tests touched (no behavior change)
|
||||
|
||||
- `combat_stats.go` comments rewritten to explain the dnd HP scale assumption and why the legacy base is captured then subtracted out.
|
||||
- `combat_engine.go` tiebreak comment rewritten with the new rationale.
|
||||
|
||||
## Sim results
|
||||
|
||||
`go test ./internal/plugin/ -run TestBalanceRegression -v` after this pass:
|
||||
|
||||
**Well-geared at tier (target window in parens):**
|
||||
|
||||
| Dungeon | Player | Monster | Death rate | Target |
|
||||
|---|---|---|---|---|
|
||||
| Soggy Cellar (L1 T1) | HP=13 AC=12 AB=6 | HP=21 AC=10 AB=5 Atk=1 | **3%** | 0–5% ✓ |
|
||||
| Goblin Warrens (L2 T2) | HP=23 AC=12 AB=6 | HP=31 AC=11 AB=6 Atk=3 | **7%** | 0–10% ✓ |
|
||||
| Cursed Crypt (L5 T3) | HP=48 AC=14 AB=7 | HP=42 AC=12 AB=7 Atk=5 | **1%** | 0–15% ✓ |
|
||||
| Troll Bridge (L7 T4) | HP=66 AC=15 AB=7 | HP=53 AC=13 AB=8 Atk=7 | **8%** | 0–25% ✓ |
|
||||
| Abyssal Maw (L9 T5) | HP=83 AC=16 AB=8 | HP=65 AC=14 AB=9 Atk=9 | **7%** | 1–35% ✓ |
|
||||
|
||||
**Underleveled / undergeared (real danger expected):**
|
||||
|
||||
| Scenario | Player | Monster | Death rate | Min target |
|
||||
|---|---|---|---|---|
|
||||
| L1 in T2 | HP=12 AC=12 AB=6 | HP=31 Atk=3 | **84%** | ≥40% ✓ |
|
||||
| L2 in T3 | HP=21 AC=12 AB=6 | HP=42 Atk=5 | **99%** | ≥30% ✓ |
|
||||
| L4 in T4, T2 gear | HP=39 AC=12 AB=6 | HP=53 Atk=7 | **97%** | ≥25% ✓ |
|
||||
| L6 in T5, T3 gear | HP=56 AC=14 AB=7 | HP=65 Atk=9 | **83%** | ≥30% ✓ |
|
||||
|
||||
All pass. No other plugin tests broken by the rebalance (two pre-existing failures — `TestStandaloneHarvest_RoutesToZoneRun` and `TestZoneRunFlow_AdvanceToBossAndComplete` — are Phase G branching-zone node-naming issues, not caused by these changes; verified by stash-pop comparison).
|
||||
|
||||
### Bestiary stat-block pass
|
||||
|
||||
`internal/plugin/dnd_bestiary.go`:
|
||||
|
||||
- **Programmatic CR-based rescale** of `Attack` and `AttackBonus` across all 69 entries. New formula:
|
||||
- `Attack = round(1 + 1.5 × CR)`, with a gentler bend at CR ≥ 10 (`max(prev, round(1 + 1.7×CR − 2))`), capped at 38.
|
||||
- `AttackBonus = min(old_AB, 11)` — caps the d20 to-hit bonus so end-game monsters still miss player AC sometimes.
|
||||
- HP / AC / Speed / Ability / BlockRate untouched — these aren't the lethality drivers; HP only matters if players can't damage-race the pool, and post-Attack-nerf the race is winnable.
|
||||
|
||||
Sample reseats:
|
||||
|
||||
| Monster | CR | Old Atk → New | Old AB → New |
|
||||
|---|---|---|---|
|
||||
| Goblin | 0.25 | 6 → 1 | 4 |
|
||||
| Skeleton | 0.25 | 8 → 1 | 4 |
|
||||
| Wight | 3 | 14 → 6 | 4 |
|
||||
| Flameskull | 4 | 18 → 7 | 5 |
|
||||
| Troll | 5 | 22 → 8 | 7 |
|
||||
| Wyvern | 6 | 28 → 10 | 7 |
|
||||
| Thornmother (CR 11 boss) | 11 | 32 → 18 | 8 |
|
||||
| Belaxath (CR 19 boss) | 19 | 58 → 31 | 11 (was 12) |
|
||||
| Ancient Dragon (CR 20) | 20 | 65 → 33 | 11 (was 14) |
|
||||
| Infernax (CR 24, end boss) | 24 | 65 → 38 | 11 (was 14) |
|
||||
|
||||
Test update: `TestBestiaryToCombatStats` dragon AB expectation `14 → 11`.
|
||||
|
||||
**Reasoning for not also touching HP**: a CR 24 boss with 546 HP is appropriately big-boss bulky on the dnd scale — players doing 7-15 dmg/round will need 35+ rounds to kill, which is fine for a final boss with phases. The pain point was the boss one-shotting players via 65-damage swings, not the HP wall. If specific bosses still feel too tanky once players actually fight them, individual `HP` trims are easy.
|
||||
|
||||
## Open follow-ups
|
||||
|
||||
- **Arena monster formula** (`DeriveArenaMonsterStats`) still has the old quadratic-feeling shape but isn't currently broken in sims — left untouched this pass. If arena death rates report wrong, mirror the dungeon shape.
|
||||
- **`TwoHandedMode` / `Versatile` weapon damage paths** in `applyDnDEquipmentLayer` weren't audited this pass — if they're miscalculating damage dice, balance shifts.
|
||||
- **Tiebreak bias** is a flat "player wins ties." Could be tuned to a small grace margin (e.g., player wins if `playerFrac >= enemyFrac - 0.05`) if narrative feedback says timeout losses still feel cheap.
|
||||
### Phase G test catch-up (formerly flaky)
|
||||
|
||||
Four tests written against the pre-Phase-G linear-room model were intermittently failing. Fixed in the same session so the suite runs clean:
|
||||
|
||||
- `TestStandaloneHarvest_RoutesToZoneRun` — was asserting the legacy `<zone>.r1` node id; production now writes `<zone>.entry` from the registered graph. Switched to `harvestNodeIDFor(run)` so the test reads whatever production wrote.
|
||||
- `TestZoneRunFlow_AdvanceToBossAndComplete` — asserted `len(RoomsCleared) == TotalRooms`. Diamond/fork graphs yield shorter paths than the total node count. Loosened to `1..TotalRooms` (boss-defeated check still in place).
|
||||
- `TestZoneCmd_AdvanceFinalRoomBumpsMood` — looped exactly `TotalRooms` `markRoomCleared` calls; with branching the run completes early and the extra calls find no active run. Switched to break on the first empty `next` return.
|
||||
- `TestAdv2Scenario_ZoneRunGoblinWarrens` — sent only `!zone advance`, stalling at fork rooms (Phase G goblin warrens is a diamond graph). Added auto `!zone go 1` when `run.NodeChoices` is non-empty so the scenario commits the first fork option and continues.
|
||||
|
||||
Verified clean across 4 consecutive `go test` runs.
|
||||
|
||||
## Files touched
|
||||
|
||||
- `internal/plugin/combat_stats.go` — DerivePlayerStats CL strip, monster formula retune
|
||||
- `internal/plugin/combat_engine.go` — tiebreak revert
|
||||
- `internal/plugin/combat_stats_test.go` — production-accurate test pipeline, dnd_level-keyed cases, base-stats expectations
|
||||
- `internal/plugin/dnd_bestiary.go` — programmatic CR-based Attack/AB rescale across 69 entries
|
||||
- `internal/plugin/dnd_bestiary_test.go` — dragon AB expectation updated
|
||||
@@ -1,319 +0,0 @@
|
||||
# Fix: Texas Hold'em LLM Tips
|
||||
|
||||
## What's broken
|
||||
|
||||
Two confirmed issues observed across multiple tip examples:
|
||||
|
||||
### 1. Position label is inverted in heads-up play
|
||||
|
||||
The tip says "positional advantage" when the player is acting first post-flop (out of position) and "out of position" when they're acting last. The position label reaching the LLM prompt is wrong.
|
||||
|
||||
**Root cause:** the `positionLabel()` function in `tips.go` derives position from `DealerIdx` using the general formula. In heads-up play the dealer posts the small blind and acts first pre-flop but **last** post-flop. The heads-up exception that exists in `PostBlinds()` in `betting.go` is not being reflected in position label calculation.
|
||||
|
||||
**Fix:** in `positionLabel()`, gate on `len(g.Players) == 2` before applying any label logic. In heads-up:
|
||||
- Pre-flop: dealer = BTN/SB (acts first), other player = BB (acts last)
|
||||
- Post-flop: dealer = BTN (acts last, positional advantage), other player = BB (acts first, out of position)
|
||||
|
||||
Check which street it is before assigning the label. `g.Street == PreFlop` needs different position semantics than all other streets in heads-up.
|
||||
|
||||
---
|
||||
|
||||
### 2. LLM is generating generic concepts instead of hand-specific advice
|
||||
|
||||
**Observed:** tips reference equity numbers but then ignore what those numbers mean for the specific hand. A player with 8♥ 7♥ on Q♥ K♠ 10♦ (gutshot + backdoor flush draw, 29% equity, free card available) received "not enough equity to bet" — which ignores the draw entirely and misapplies a made-hand concept to a drawing hand.
|
||||
|
||||
**Root cause:** the user prompt is not giving the LLM enough structured context to reason about hand *type*. It sees an equity number but doesn't know whether the hand is a draw, a made hand, a bluff catcher, or air. It pattern-matches on the number alone.
|
||||
|
||||
**Fix:** compute and inject the following additional fields into `TipContext` before building the prompt:
|
||||
|
||||
```go
|
||||
type TipContext struct {
|
||||
// existing fields...
|
||||
|
||||
// Add these:
|
||||
HandCategory string // from poker.RankString() on current 5-card best
|
||||
IsDraw bool // true if outs > 0 (see below)
|
||||
FlushDrawOuts int // suited cards matching board suit count
|
||||
StraightDrawOuts int // connected card gaps to straight
|
||||
TotalOuts int // combined draw outs (deduped)
|
||||
IsFreeCard bool // ToCall == 0
|
||||
HeadsUp bool // len(ActivePlayers) == 2
|
||||
}
|
||||
```
|
||||
|
||||
Outs calculation (add to `equity.go` or a new `outs.go`):
|
||||
- Flush draw: count hole cards matching dominant board suit; if 2 hole cards + 2 board cards same suit, FlushDrawOuts = 9
|
||||
- Open-ended straight draw: 8 outs
|
||||
- Gutshot: 4 outs
|
||||
- Backdoor draws: count as 1-2 outs each
|
||||
- TotalOuts = sum, capped at 15 (avoid double-counting straights and flushes)
|
||||
|
||||
---
|
||||
|
||||
### 3. System prompt needs to be more directive
|
||||
|
||||
**Current system prompt** (paraphrased from blueprint): "be a concise Hold'em coach, 2-4 sentences, cover hand strength, pot odds, position."
|
||||
|
||||
This is too open-ended. The LLM fills the space with whatever poker concepts come to mind. Replace with a prompt that forces it to reason about the specific situation before speaking.
|
||||
|
||||
**New system prompt:**
|
||||
|
||||
```
|
||||
You are a Texas Hold'em coach giving advice to a single player via private message.
|
||||
You will receive structured game context. Reason through it in this order:
|
||||
|
||||
1. What type of hand do I have — made hand, drawing hand, or air?
|
||||
2. If drawing: how many outs, and do pot odds justify continuing?
|
||||
3. If made hand: is it strong enough to bet for value, or weak enough to just pot control?
|
||||
4. Does position affect what I should do here?
|
||||
5. Is a free card available, and if so, is taking it correct?
|
||||
|
||||
Then write ONE piece of advice — 2 to 3 sentences maximum — that tells the player
|
||||
what to do and why, using the specific cards and numbers provided.
|
||||
Do not list concepts. Do not use generic poker vocabulary without connecting it to
|
||||
this specific hand. If the correct play is obvious (e.g. free card with a draw),
|
||||
say so plainly and briefly.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. User prompt needs draw and hand type context injected
|
||||
|
||||
**Current user prompt structure** (from blueprint):
|
||||
```
|
||||
Street: <street>
|
||||
Your hand: <cards>
|
||||
Board: <cards>
|
||||
Equity vs <n> opponents: Win x% | Tie y% | Loss z%
|
||||
Pot odds to call: x%
|
||||
SPR: x | Position: <pos> | Active players: <n>
|
||||
```
|
||||
|
||||
**New user prompt structure** — add the computed fields:
|
||||
|
||||
```
|
||||
Street: {street}
|
||||
Your hand: {cards} [{hand_category}]
|
||||
Board: {cards}
|
||||
Draw outs: {total_outs} ({draw_description}) <- omit line if IsDraw == false
|
||||
Equity vs {n} opponent(s): Win {x}% | Tie {y}% | Loss {z}%
|
||||
{if ToCall > 0}: Pot odds to call: {pct}% — equity {exceeds|falls short of} price
|
||||
{if IsFreeCard}: Free card available — no bet to call
|
||||
SPR: {spr} | Position: {position} | Heads-up: {yes|no} | Street: {street}
|
||||
```
|
||||
|
||||
`{draw_description}` examples:
|
||||
- "flush draw (9 outs)"
|
||||
- "gutshot straight draw (4 outs)"
|
||||
- "open-ended straight draw (8 outs)"
|
||||
- "flush draw + gutshot (11 outs)"
|
||||
- "backdoor flush + backdoor straight (2 outs)"
|
||||
|
||||
`{hand_category}` examples from `poker.RankString()`:
|
||||
- "High Card", "One Pair", "Two Pair", "Three of a Kind", "Straight", "Flush", "Full House", "Four of a Kind", "Straight Flush"
|
||||
|
||||
---
|
||||
|
||||
## Specific scenario the fix must handle correctly
|
||||
|
||||
**Hand:** 8♥ 7♥
|
||||
**Board:** Q♥ K♠ 10♦
|
||||
**Street:** Flop
|
||||
**Equity:** 29%
|
||||
**To call:** €0 (free card)
|
||||
**Position:** dealer, heads-up, acting first post-flop (out of position)
|
||||
|
||||
Expected tip behaviour after fix:
|
||||
- Identifies this as a drawing hand (gutshot + backdoor flush)
|
||||
- Notes the free card is available
|
||||
- Does NOT say "not enough equity to bet" without acknowledging the draw
|
||||
- Does NOT say "positional advantage" — player is out of position post-flop heads-up
|
||||
- Produces something like: "You have a gutshot straight draw with a backdoor flush. With a free card available you can check and see the turn without risk. If a 9 or a third heart comes, you'll be in a strong position — for now, take the free card."
|
||||
|
||||
---
|
||||
|
||||
## Reasoning mode (Qwen3 thinking)
|
||||
|
||||
Poker tips are the only task in GogoBee that should use reasoning mode. All other LLM calls (adventure narrative, etc.) run with thinking disabled. This needs to be a one-off configuration scoped entirely to `tips.go`.
|
||||
|
||||
### Why reasoning mode here
|
||||
|
||||
The tips failure pattern is not a knowledge gap — Qwen3-32B knows poker. The problem is that it jumps to pattern-matched conclusions without working through the situation in sequence. Reasoning mode forces the model to produce a `<think>...</think>` chain before the final response, which naturally surfaces: hand type, outs, position semantics, and the actual decision. The tip then follows from that chain rather than being assembled from disconnected concepts.
|
||||
|
||||
### Request changes in `tips.go`
|
||||
|
||||
Add a `enable_thinking` field to the request body and a `thinking_budget` cap to keep latency bounded:
|
||||
|
||||
```go
|
||||
type llmRequest struct {
|
||||
Model string `json:"model"`
|
||||
Messages []llmMessage `json:"messages"`
|
||||
MaxTokens int `json:"max_tokens"`
|
||||
Stream bool `json:"stream"`
|
||||
EnableThinking bool `json:"enable_thinking,omitempty"`
|
||||
ThinkingBudget int `json:"thinking_budget,omitempty"`
|
||||
}
|
||||
```
|
||||
|
||||
When building the tips request, set:
|
||||
|
||||
```go
|
||||
body := llmRequest{
|
||||
Model: cfg.Model,
|
||||
Messages: []llmMessage{...},
|
||||
MaxTokens: 1000, // increased to accommodate think block + response
|
||||
Stream: false,
|
||||
EnableThinking: true,
|
||||
ThinkingBudget: 512, // cap reasoning tokens; enough for poker, not runaway
|
||||
}
|
||||
```
|
||||
|
||||
`ThinkingBudget` of 512 tokens is sufficient for a poker hand analysis reasoning chain. Without a cap, complex board textures can produce very long think blocks. 512 keeps worst-case latency reasonable.
|
||||
|
||||
Note: the exact field names for Ollama's Qwen3 thinking mode may differ from the above. Check the Ollama API docs for the current `qwen3:32b` thinking parameters — it may be `/think` appended to the model name (`qwen3:32b/think`) rather than a request body field, depending on the Ollama version. Either way, the intent is the same — make this configurable in `TipsConfig` so it can be toggled without a code change:
|
||||
|
||||
```go
|
||||
type TipsConfig struct {
|
||||
Endpoint string
|
||||
Model string
|
||||
APIKey string
|
||||
Timeout time.Duration
|
||||
EnableThinking bool // default true for poker tips
|
||||
ThinkingBudget int // default 512
|
||||
}
|
||||
```
|
||||
|
||||
### Strip the think block from the response
|
||||
|
||||
The `<think>...</think>` content must never reach the player DM. The current response parser takes `choices[0].message.content` directly. Update it to strip thinking content before returning:
|
||||
|
||||
```go
|
||||
func extractTipFromResponse(raw string) string {
|
||||
// Strip <think>...</think> block if present
|
||||
// Qwen3 may use <think> or <!--think--> depending on version
|
||||
re := regexp.MustCompile(`(?s)<think>.*?</think>`)
|
||||
cleaned := re.ReplaceAllString(raw, "")
|
||||
|
||||
// Also strip any leading/trailing whitespace left behind
|
||||
return strings.TrimSpace(cleaned)
|
||||
}
|
||||
```
|
||||
|
||||
Call `extractTipFromResponse()` on `llmResp.Choices[0].Message.Content` before returning the tip string. If the result is empty after stripping (model only produced a think block and nothing else), fall back to the rules-based tip.
|
||||
|
||||
### Latency expectations
|
||||
|
||||
With `ThinkingBudget: 512` and the structured context prompt, expect:
|
||||
- Typical: 4-8 seconds total (within the existing 10s timeout)
|
||||
- Complex boards: up to 10 seconds
|
||||
- Increase `cfg.Timeout` to `12 * time.Second` for tips specifically to give reasoning room without affecting other LLM calls
|
||||
|
||||
Tip delivery via DM is already async (goroutine), so even a 10-12 second tip doesn't block the table view or the action loop. Players receive the table view immediately and the tip follows shortly after.
|
||||
|
||||
### Config addition
|
||||
|
||||
```toml
|
||||
[holdem]
|
||||
# ... existing fields ...
|
||||
tips_enable_thinking = true
|
||||
tips_thinking_budget = 512
|
||||
tips_timeout = "12s" # longer than default to accommodate reasoning
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Files to change
|
||||
|
||||
- `tips.go` — `TipContext` struct, `BuildTipContext()`, `buildPrompt()`, `positionLabel()`, `llmRequest` struct, `GenerateTip()`, new `extractTipFromResponse()` function
|
||||
- `equity.go` — add outs calculation function
|
||||
- No schema changes required
|
||||
- No changes to `game.go`, `betting.go`, or `render.go`
|
||||
|
||||
## Test cases to verify before shipping
|
||||
|
||||
Write a table-driven test in `tips_test.go` covering:
|
||||
|
||||
| Hand | Board | Street | Expected position (HU) | Expected IsDraw | Expected outs |
|
||||
|------|-------|--------|------------------------|-----------------|---------------|
|
||||
| 8♥ 7♥ | Q♥ K♠ 10♦ | Flop | Out of position | true | 4 (gutshot) + backdoor |
|
||||
| A♠ K♠ | — | Pre-Flop | BTN (dealer, acts first) | false | 0 |
|
||||
| 5♥ 6♥ | 7♥ 8♣ 2♥ | Flop | varies | true | 15 (OESD + flush) |
|
||||
| Q♣ Q♦ | Q♥ 2♠ 7♣ | Flop | varies | false | 0 |
|
||||
|
||||
The position test for heads-up pre-flop vs post-flop is the most important one. Get that right first.
|
||||
|
||||
---
|
||||
|
||||
## Validation pipeline (shipped 2026-04-13)
|
||||
|
||||
The "is the tip actually good?" question is now answered by a two-layer
|
||||
automated test harness rather than vibes.
|
||||
|
||||
**Layer 1 — hand-authored scenarios** (`internal/plugin/holdem_tip_scenarios.go`)
|
||||
|
||||
20 canonical spots covering preflop tier/facing-bet branches and postflop
|
||||
equity tiers × board textures × SPR depths. Each scenario declares an
|
||||
expected action verb, required theme keywords, and forbidden substrings.
|
||||
`TestTipScenarios_Layer1` runs the full rules-engine pipeline
|
||||
(equity MC, draw detection, hand category, board texture, preflop
|
||||
classification) against each scenario and asserts the tip contains the
|
||||
expected action + themes. Fast, cheap, green.
|
||||
|
||||
**Layer 2 — solver-derived scenarios** (same scenarios, populated via `cmd/gensolver`)
|
||||
|
||||
11 of the 14 postflop scenarios carry real TexasSolver GTO frequencies
|
||||
committed as a fixture at `internal/plugin/testdata/solver_freqs.json`.
|
||||
`TestTipScenarios_Layer2` treats any action with solver frequency ≥ 15% as
|
||||
"significant" and asserts the rules engine's recommended action matches one
|
||||
of the significant actions — tolerating GTO's legitimately mixed spots
|
||||
while catching genuinely-wrong recommendations.
|
||||
|
||||
**cmd/gensolver**
|
||||
|
||||
Offline pipeline that iterates `plugin.TipScenarios()`, shells out to
|
||||
`console_solver` (TexasSolver CLI), parses the JSON strategy tree,
|
||||
navigates to hero's decision node (IP/OOP × facing-check/facing-bet ×
|
||||
check-bet line), extracts hero's action frequencies for their exact hole
|
||||
combo, and merges them into the fixture file.
|
||||
|
||||
Key solver-side knobs worked out the hard way:
|
||||
|
||||
- **Scale normalization** to `pot=50, stack=8×pot` (SPR cap 8). TexasSolver
|
||||
segfaults on deep stacks and on some textures at larger chip counts;
|
||||
strategic equivalence is preserved because GTO frequencies are
|
||||
scale-invariant.
|
||||
- **Bet tree**: 50% + 100% pot sizings, plus allin. Narrower trees build
|
||||
faster and still give solvable decision points.
|
||||
- **`set_accuracy 1.0`, `set_max_iteration 100`** — converges in ~2 min
|
||||
per flop instead of the ~24 min the solver's defaults demanded. 1%
|
||||
exploitability is plenty for our assertion type.
|
||||
- **Range syntax**: TexasSolver rejects shorthand like `22+` / `A2s+` —
|
||||
ranges must be explicitly enumerated. Using the solver's own
|
||||
sample-input ranges verbatim as HU defaults.
|
||||
|
||||
Invocation:
|
||||
|
||||
```bash
|
||||
GOGOBEE_SOLVER=/path/to/console_solver \
|
||||
GOGOBEE_SOLVER_RESOURCES=/path/to/TexasSolver/resources \
|
||||
go run ./cmd/gensolver [scenario-name-substring]
|
||||
```
|
||||
|
||||
Results merge into the fixture, so regenerating one scenario doesn't wipe
|
||||
the others.
|
||||
|
||||
**Known gaps** — 3 scenarios have no solver frequencies:
|
||||
|
||||
- `flop/monster set on paired board facing bet` — TexasSolver segfaults on
|
||||
paired-board textures (upstream bug, not fixable from our side).
|
||||
- `turn/weak top pair facing overbet` — hero's hole (63o) isn't in any
|
||||
reasonable HU range, so the solver never allocates strategy for it.
|
||||
Scenario still validated by Layer 1.
|
||||
- Occasional flake on `flop/bottom pair facing big bet` at full-batch time
|
||||
(succeeds when retried solo). Current fixture entry came from a solo
|
||||
retry and is valid; if regeneration fails, just re-run that one
|
||||
scenario with the name filter.
|
||||
|
||||
Adding new scenarios: append to `tipScenarios` in
|
||||
`holdem_tip_scenarios.go`, run `cmd/gensolver` with the name filter,
|
||||
commit both the code and fixture changes together.
|
||||
@@ -1,419 +0,0 @@
|
||||
# GogoBee — Action Economy, Movement & Death
|
||||
> **Amends:** `gogobee_dnd_design_doc.md` (Combat Engine section)
|
||||
> **Version:** 1.0
|
||||
> **Status:** Draft
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
All existing `*_flavor.go` / `*_flavor.txt` files are off-limits.
|
||||
New action/death flavor goes in `twinbee_combat_flavor.go` — new file only.
|
||||
|
||||
---
|
||||
|
||||
## 1. Action Economy
|
||||
|
||||
Each combat turn a player has exactly four resources to spend:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 1 ACTION The main thing you do this turn │
|
||||
│ 1 BONUS ACTION A secondary, faster thing │
|
||||
│ 1 REACTION One response to something that │
|
||||
│ happens (yours or enemy's turn) │
|
||||
│ MOVEMENT Up to your Speed in feet │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
These reset at the start of each turn. Unused resources do not carry over.
|
||||
|
||||
---
|
||||
|
||||
## 2. Actions
|
||||
|
||||
### 2.1 Standard Actions
|
||||
|
||||
| Action | Command | Description |
|
||||
|---|---|---|
|
||||
| Attack | `!attack` | Make one weapon attack (additional attacks at higher levels) |
|
||||
| Cast Spell | `!cast <spell>` | Cast a known spell using a spell slot or resource |
|
||||
| Dash | `!dash` | Double movement speed this turn |
|
||||
| Disengage | `!disengage` | Move without triggering opportunity attacks this turn |
|
||||
| Dodge | `!dodge` | Attacks against you have disadvantage until next turn; DEX saves at advantage |
|
||||
| Help | `!help` | Give an ally advantage on their next attack or ability check |
|
||||
| Hide | `!hide` | Attempt to become hidden (Stealth vs. enemy Perception) |
|
||||
| Ready | `!ready <trigger>` | Prepare an action to fire on a specified trigger |
|
||||
| Use Item | `!use <item>` | Use a consumable (potion, scroll, etc.) |
|
||||
| Search | `!search` | Examine surroundings for hidden things (Perception or Investigation) |
|
||||
| Grapple | `!grapple` | Attempt to grab an enemy (STR vs. STR/DEX) |
|
||||
| Shove | `!shove` | Push or knock prone an enemy (STR vs. STR/DEX) |
|
||||
|
||||
### 2.2 Bonus Actions
|
||||
|
||||
Bonus actions are only available if a class ability, spell, or item explicitly grants one. You cannot use a bonus action speculatively.
|
||||
|
||||
| Bonus Action Source | Who | Description |
|
||||
|---|---|---|
|
||||
| Off-hand attack | Any (Light weapon in off-hand) | Attack with off-hand weapon; no stat modifier to damage |
|
||||
| Second Wind | Fighter | Heal 1d10 + level HP |
|
||||
| Cunning Action | Rogue (Lv2+) | Dash, Disengage, or Hide as bonus action |
|
||||
| Healing Word | Cleric | Restore 1d4 + WIS mod HP to self or ally |
|
||||
| Hunter's Mark | Ranger | Apply Hunter's Mark to target |
|
||||
| Rage | Orc racial / Berserker | Activate Rage mechanic |
|
||||
| Misty Step | Tiefling / spell | Short-range teleport |
|
||||
| Cunning Strike | Rogue (Lv5+) | Apply a Sneak Attack condition rider |
|
||||
|
||||
### 2.3 Reactions
|
||||
|
||||
Reactions fire in response to a trigger — on your turn or an enemy's turn. Once a reaction is used it is gone until the start of your next turn.
|
||||
|
||||
| Reaction | Who | Trigger | Effect |
|
||||
|---|---|---|---|
|
||||
| Opportunity Attack | Any | Enemy leaves melee range without Disengaging | One melee attack |
|
||||
| Parry | Fighter (Lv5+) | Being hit by melee attack | Reduce damage by 1d8 + DEX modifier |
|
||||
| Uncanny Dodge | Rogue (Lv5+) | Being hit by an attacker you can see | Halve the damage |
|
||||
| Shield of Faith | Cleric | Ally drops to 0 HP | Spend 1 Divine Favor; ally makes death save at advantage |
|
||||
| Interception | Fighter (Lv3+) | Ally within melee range hit | Reduce damage to ally by 1d10 + proficiency bonus |
|
||||
| Counterspell | Mage (Lv5+) | Enemy casts a spell | Spend 1 spell slot to cancel the spell (INT DC = 10 + spell level) |
|
||||
| Evasion | Rogue / Ranger (Lv7+) | Failing a DEX save | Succeed instead (or take half on actual fail) |
|
||||
|
||||
---
|
||||
|
||||
## 3. Movement
|
||||
|
||||
### 3.1 Base Speed by Race
|
||||
|
||||
| Race | Speed |
|
||||
|---|---|
|
||||
| Human | 30 ft |
|
||||
| Elf | 35 ft |
|
||||
| Dwarf | 25 ft |
|
||||
| Halfling | 25 ft |
|
||||
| Orc | 30 ft |
|
||||
| Tiefling | 30 ft |
|
||||
| Half-Elf | 30 ft |
|
||||
|
||||
### 3.2 Speed Modifiers
|
||||
|
||||
| Source | Speed Change |
|
||||
|---|---|
|
||||
| Heavy Armor + no STR requirement met | -10 ft |
|
||||
| Encumbered (carry weight) | -10 ft |
|
||||
| Heavily Encumbered | -20 ft |
|
||||
| Haste (spell / potion) | +30 ft |
|
||||
| Restrained condition | 0 ft (cannot move) |
|
||||
| Prone condition | Half speed to stand; crawling at half speed |
|
||||
| Web / Entangled | Half speed until freed |
|
||||
| Difficult Terrain | Half speed while traversing |
|
||||
|
||||
### 3.3 In-Bot Movement Abstraction
|
||||
|
||||
Physical movement in feet is tracked in combat for opportunity attacks and AoE targeting. Outside of combat, movement is abstracted into expedition actions — rooms are the unit of exploration, not feet.
|
||||
|
||||
**In combat, movement matters for:**
|
||||
- Entering or leaving melee range (triggers opportunity attacks)
|
||||
- Moving out of an AoE effect
|
||||
- Closing distance to use a melee weapon from a ranged position
|
||||
- Using Dash to reposition after a Disengage
|
||||
|
||||
**Movement commands in combat:**
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!move melee` | Close to melee range with target |
|
||||
| `!move ranged` | Fall back to ranged distance |
|
||||
| `!move <direction>` | Move relative to current position |
|
||||
| `!dash` | Double movement as action |
|
||||
| `!disengage` | Move safely (no OA) as action |
|
||||
|
||||
TwinBee narrates all movement. The player never manages feet directly — they state intent, TwinBee resolves geometry.
|
||||
|
||||
### 3.4 Difficult Terrain
|
||||
|
||||
Certain room conditions create Difficult Terrain that halves movement:
|
||||
|
||||
| Zone | Difficult Terrain Source |
|
||||
|---|---|
|
||||
| Sunken Temple | Flooded rooms (water, knee-deep or higher) |
|
||||
| Forest of Shadows | Dense undergrowth, root-covered floors |
|
||||
| Haunted Manor | Collapsed floor sections, furniture hazards |
|
||||
| Underforge | Cooled lava flows, slag piles |
|
||||
| Underdark | Stalagmite fields, cave-in debris |
|
||||
| Feywild Crossing | Entangling vines, dreamlike terrain shifts |
|
||||
| Dragon's Lair | Coin drifts, melted-gold floors |
|
||||
| Abyss Portal | Reality fractures, unstable ground |
|
||||
|
||||
TwinBee flags Difficult Terrain on Room Entry. Players do not need to ask.
|
||||
|
||||
---
|
||||
|
||||
## 4. Opportunity Attacks
|
||||
|
||||
An Opportunity Attack fires as a Reaction when an enemy leaves your melee reach without using the Disengage action.
|
||||
|
||||
- One melee attack, resolved immediately
|
||||
- Uses your Reaction for the turn
|
||||
- Enemies can also trigger OAs against the player
|
||||
- Certain abilities suppress OAs:
|
||||
- **Disengage action** (any class)
|
||||
- **Cunning Action: Disengage** (Rogue bonus action)
|
||||
- **Blur** (Quickling enemy ability)
|
||||
- **Misty Step** (teleportation bypasses OA)
|
||||
|
||||
TwinBee announces incoming OA opportunities: *"It's moving. You have a reaction if you want it."*
|
||||
|
||||
---
|
||||
|
||||
## 5. Ready Action
|
||||
|
||||
The Ready action lets you prepare an action to fire on a specific trigger condition, using your Reaction when it fires.
|
||||
|
||||
**Syntax:** `!ready <action> when <trigger>`
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
!ready attack when the goblin moves into melee range
|
||||
!ready cast magic missile when an enemy casts a spell
|
||||
!ready dodge when the dragon uses breath weapon
|
||||
```
|
||||
|
||||
If the trigger doesn't occur before the start of your next turn, the readied action expires — the action and the reaction are both spent.
|
||||
|
||||
TwinBee confirms the readied action and narrates the trigger condition resolution:
|
||||
> *"The goblin moves. Your readied attack fires."*
|
||||
|
||||
---
|
||||
|
||||
## 6. Multi-Attack
|
||||
|
||||
Some classes gain additional attacks at higher levels. These are resolved within a single Action.
|
||||
|
||||
| Class | Level | Attacks Per Action |
|
||||
|---|---|---|
|
||||
| Fighter | 1–4 | 1 |
|
||||
| Fighter | 5–10 | 2 |
|
||||
| Fighter | 11–19 | 3 |
|
||||
| Fighter | 20 | 4 |
|
||||
| Ranger | 1–4 | 1 |
|
||||
| Ranger | 5+ | 2 |
|
||||
| Rogue | Any | 1 (Sneak Attack compensates) |
|
||||
| Mage | Any | 1 (spells compensate) |
|
||||
| Cleric | 1–7 | 1 |
|
||||
| Cleric | 8+ | 2 |
|
||||
|
||||
Multi-attack does not apply to spells unless the spell explicitly says so (e.g., Eldritch Blast at higher levels).
|
||||
|
||||
**Command:** `!attack` always resolves the full multi-attack sequence. TwinBee narrates each hit and miss individually.
|
||||
|
||||
---
|
||||
|
||||
## 7. Death Saves
|
||||
|
||||
When a player reaches 0 HP they are **Downed** — unconscious, incapacitated, but not yet dead. They begin rolling Death Saving Throws.
|
||||
|
||||
### 7.1 Death Save Mechanics
|
||||
|
||||
At the start of each of the Downed player's turns, TwinBee rolls 1d20 automatically:
|
||||
|
||||
| Roll | Outcome |
|
||||
|---|---|
|
||||
| 10+ | **Success.** One success mark. |
|
||||
| 9 or below | **Failure.** One failure mark. |
|
||||
| Natural 20 | **Critical Success.** Regain 1 HP immediately; stand up; all death save marks clear. |
|
||||
| Natural 1 | **Critical Failure.** Two failure marks. |
|
||||
|
||||
**Three successes:** Player is **Stabilized** — remains unconscious but no longer making death saves. Regains consciousness with 1 HP after 1d4 turns.
|
||||
|
||||
**Three failures:** Player **Dies** — triggers the Hospital system (Section 8).
|
||||
|
||||
### 7.2 Stabilizing Another Character (Future Party System)
|
||||
|
||||
When party mechanics are implemented: an ally can use their Action to make a DC 10 Medicine check. On success: Downed player is Stabilized immediately.
|
||||
|
||||
A Potion of Healing administered to a Downed player automatically Stabilizes them and restores the potion's HP value.
|
||||
|
||||
### 7.3 Damage While Downed
|
||||
|
||||
If a Downed player takes damage:
|
||||
- Any damage = one automatic failure mark
|
||||
- Critical hit = two automatic failure marks
|
||||
- This can accelerate death before the save sequence completes
|
||||
|
||||
TwinBee narrates damage to a Downed player with appropriate gravity.
|
||||
|
||||
### 7.4 Go Data Model — Death Saves
|
||||
|
||||
```go
|
||||
type DeathSaveState struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Downed bool `json:"downed"`
|
||||
Successes int `json:"successes"` // 0–3
|
||||
Failures int `json:"failures"` // 0–3
|
||||
Stabilized bool `json:"stabilized"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. The Hospital — Death & Recovery
|
||||
|
||||
Death is not the end. GogoBee's Hospital system handles player death with dignity, real mechanical consequences, and affordable recovery costs.
|
||||
|
||||
### 8.1 Death Triggers Hospital
|
||||
|
||||
When a player accumulates three Death Save failures:
|
||||
- Combat ends (they cannot continue)
|
||||
- Forced extraction triggers (body is recovered — narrative convention)
|
||||
- Player is moved to Hospital status
|
||||
- Expedition is marked Abandoned
|
||||
- Hospital fee is calculated (Section 8.3)
|
||||
|
||||
### 8.2 What You Keep on Death
|
||||
|
||||
| Asset | Status on Death |
|
||||
|---|---|
|
||||
| Character level and XP | **Kept** |
|
||||
| Equipped gear | **Kept** |
|
||||
| Inventory items | **Kept** |
|
||||
| Coins | **Kept** (minus Hospital fee) |
|
||||
| Harvested materials (current run) | **Lost** (dropped on death) |
|
||||
| Expedition progress | **Lost** (run abandoned; resume not available after death) |
|
||||
| Arena streak | **Reset to 0** |
|
||||
| Pet | **Kept** |
|
||||
| Housing | **Kept** |
|
||||
|
||||
### 8.3 Hospital Costs
|
||||
|
||||
Costs are tiered by player level — affordable at all tiers, meaningful without being punishing.
|
||||
|
||||
| Player Level | Base Hospital Fee | Notes |
|
||||
|---|---|---|
|
||||
| 1–3 | 20 coins | Effectively free early game |
|
||||
| 4–6 | 50 coins | Minor setback |
|
||||
| 7–9 | 120 coins | Noticeable but recoverable in one expedition |
|
||||
| 10–12 | 250 coins | Worth avoiding; not catastrophic |
|
||||
| 13–15 | 400 coins | Significant; consider playing carefully |
|
||||
| 16–18 | 600 coins | Serious money; elite play expected |
|
||||
| 19–20 | 900 coins | The price of power |
|
||||
|
||||
**Modifiers:**
|
||||
|
||||
| Condition | Fee Modifier |
|
||||
|---|---|
|
||||
| Death in Tier 1–2 zone | -20% |
|
||||
| Death in Tier 3 zone | Base |
|
||||
| Death in Tier 4 zone | +15% |
|
||||
| Death in Tier 5 zone | +30% |
|
||||
| Insufficient coins (debt) | Fee deferred; -10% XP gain until paid |
|
||||
| Cleric in active party (future) | -25% (they helped stabilize you) |
|
||||
|
||||
**Fee cap:** Hospital fee never exceeds 40% of the player's current coin balance, regardless of tier. Nobody gets wiped out by a single bad run.
|
||||
|
||||
### 8.4 Recovery Time
|
||||
|
||||
After paying the Hospital fee, the player must complete a **Recovery Rest** before re-entering any expedition.
|
||||
|
||||
| Player Level | Recovery Rest Duration (real time) |
|
||||
|---|---|
|
||||
| 1–5 | 2 hours |
|
||||
| 6–10 | 4 hours |
|
||||
| 11–15 | 8 hours |
|
||||
| 16–20 | 12 hours |
|
||||
|
||||
During Recovery Rest the player can still use non-expedition commands: shop, chat, arena spectate, NPC interactions, crafting.
|
||||
|
||||
### 8.5 Hospital Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!hospital` | Check current Hospital status and fee |
|
||||
| `!hospital pay` | Pay fee and begin recovery rest |
|
||||
| `!hospital status` | Check recovery rest remaining time |
|
||||
|
||||
### 8.6 TwinBee on Death
|
||||
|
||||
TwinBee delivers death narration with complete respect. No mockery, no irony, no "I told you so." The death narration lines are in `twinbee_gm_flavor.go` under `PlayerDeath`. TwinBee's post-hospital return narration is in `twinbee_expedition_flavor.go` under `ExpeditionResume`.
|
||||
|
||||
Hospital arrival is narrated by Thom Krooke, not TwinBee — Thom runs the inn and maintains a working relationship with the local healers. The handoff is clean:
|
||||
|
||||
> *TwinBee delivers you to the threshold and steps back.*
|
||||
> *Thom Krooke opens the door.*
|
||||
> *"Again," Thom says, not unkindly.*
|
||||
|
||||
---
|
||||
|
||||
## 9. Go Data Structures — Action Economy
|
||||
|
||||
```go
|
||||
// TurnResources tracks a player's available resources for the current combat turn.
|
||||
type TurnResources struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
ActionUsed bool `json:"action_used"`
|
||||
BonusUsed bool `json:"bonus_used"`
|
||||
ReactionUsed bool `json:"reaction_used"`
|
||||
MovementUsed int `json:"movement_used"` // feet used this turn
|
||||
MovementTotal int `json:"movement_total"` // total available this turn
|
||||
}
|
||||
|
||||
// ReadiedAction holds a pending ready action waiting for its trigger.
|
||||
type ReadiedAction struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Action string `json:"action"`
|
||||
TriggerDesc string `json:"trigger_desc"`
|
||||
ExpiresAt int `json:"expires_at"` // initiative count
|
||||
Fired bool `json:"fired"`
|
||||
}
|
||||
|
||||
// HospitalRecord tracks a player's death and recovery state.
|
||||
type HospitalRecord struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
AdmittedAt time.Time `json:"admitted_at"`
|
||||
Fee int `json:"fee"`
|
||||
FeePaid bool `json:"fee_paid"`
|
||||
PaidAt *time.Time `json:"paid_at"`
|
||||
RecoveryEnds *time.Time `json:"recovery_ends"`
|
||||
ZoneDiedIn string `json:"zone_died_in"`
|
||||
ExpeditionID string `json:"expedition_id"`
|
||||
DeathSaves DeathSaveState `json:"death_saves"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Implementation Phases — Action Economy & Death
|
||||
|
||||
### Phase A1 — Action Economy
|
||||
- [ ] `TurnResources` struct and per-turn reset logic
|
||||
- [ ] Action handler: attack, cast, dash, dodge, disengage, hide, use item
|
||||
- [ ] Bonus action handler: class ability gating
|
||||
- [ ] Movement tracking in combat (melee/ranged positioning)
|
||||
- [ ] Opportunity attack trigger system
|
||||
|
||||
### Phase A2 — Advanced Actions
|
||||
- [ ] Ready action system (`ReadiedAction` struct, trigger resolution)
|
||||
- [ ] Multi-attack resolution by class/level
|
||||
- [ ] Reaction system (parry, uncanny dodge, counterspell, shield of faith)
|
||||
- [ ] Difficult terrain flagging per zone/room
|
||||
|
||||
### Phase A3 — Death Saves
|
||||
- [ ] `DeathSaveState` struct and DB schema
|
||||
- [ ] Downed state: auto-roll death saves each turn
|
||||
- [ ] Stabilization (3 successes, nat 20, potion)
|
||||
- [ ] Death trigger (3 failures, nat 1 double-failure)
|
||||
- [ ] Damage-while-downed failure marks
|
||||
|
||||
### Phase A4 — Hospital System
|
||||
- [ ] `HospitalRecord` struct and DB schema
|
||||
- [ ] Fee calculation (level + zone tier modifiers + cap)
|
||||
- [ ] Recovery rest timer
|
||||
- [ ] `!hospital`, `!hospital pay`, `!hospital status` commands
|
||||
- [ ] Thom Krooke hospital admission narration
|
||||
- [ ] Expedition abandonment on death (no resume)
|
||||
- [ ] Debt system (insufficient coins)
|
||||
|
||||
---
|
||||
|
||||
*End of Action Economy, Movement & Death document.*
|
||||
*Reference alongside all companion docs in Claude Code sessions.*
|
||||
@@ -1,379 +0,0 @@
|
||||
# Gogobee — Branching Zones (Option A: Greenfield Zone Graph)
|
||||
|
||||
**Status:** plan, not yet implemented.
|
||||
**Branch convention:** carve a new branch off `adv-2.0` (e.g. `branching-zones` or `phase-G`).
|
||||
**Prerequisite:** none — Phase L is deployed; nothing else blocks this.
|
||||
**Owner:** future session.
|
||||
|
||||
---
|
||||
|
||||
## 1. Goal & non-goals
|
||||
|
||||
### Goal
|
||||
|
||||
Replace the linear room model (`room_seq_json` flat array + `current_room INTEGER` index) with a **graph model**: zones are directed graphs of nodes, players navigate by choosing outgoing edges, edges can be gated by Perception checks / keys / level / cleared regions. Enables:
|
||||
|
||||
- Slay-the-Spire-style "pick your next room" forks.
|
||||
- Optional side rooms (secret chambers behind Perception walls).
|
||||
- Shortcuts that skip rooms.
|
||||
- Multiple paths converging on a shared boss antechamber.
|
||||
- Loop-back edges (off by default; opt-in per zone).
|
||||
|
||||
### Non-goals
|
||||
|
||||
- Rewriting combat. The combat engine (`combat_engine.go` / `combat_stats.go`) is shared infra per `gogobee_legacy_migration.md` §7.4 and stays untouched.
|
||||
- Changing zone *contents* (enemy rosters, loot tables, boss stat blocks). Only the topology of how rooms connect changes.
|
||||
- Reworking the multi-region system. Regions remain the coarse-grain layer; the graph lives **inside** a region. A zone like Underdark has 4 regions and each region has its own subgraph.
|
||||
|
||||
---
|
||||
|
||||
## 2. Schema
|
||||
|
||||
Two new tables. **Naming**: avoid the `dnd_` prefix per the project feedback note about trademark exposure — use `zone_node` / `zone_edge`. Existing `dnd_zone_run` is grandfathered.
|
||||
|
||||
### `zone_node`
|
||||
|
||||
```sql
|
||||
CREATE TABLE zone_node (
|
||||
node_id TEXT PRIMARY KEY, -- "crypt_valdris.entry", globally unique
|
||||
zone_id TEXT NOT NULL, -- FK-ish: matches ZoneID
|
||||
region_id TEXT NOT NULL DEFAULT '', -- empty for single-region zones
|
||||
kind TEXT NOT NULL, -- entry|exploration|trap|elite|boss|harvest|rest_camp|secret|fork|merge
|
||||
label TEXT NOT NULL DEFAULT '', -- human-readable for !zone map ("Side Chapel")
|
||||
is_entry INTEGER NOT NULL DEFAULT 0, -- exactly one per zone (or per region for multi-region)
|
||||
is_boss INTEGER NOT NULL DEFAULT 0, -- exactly one boss reachable per zone
|
||||
pos_x INTEGER NOT NULL DEFAULT 0, -- ASCII map layout hint
|
||||
pos_y INTEGER NOT NULL DEFAULT 0,
|
||||
content_json TEXT NOT NULL DEFAULT '{}' -- opaque per-node payload (loot bias, encounter override, harvest ref)
|
||||
);
|
||||
CREATE INDEX idx_zone_node_zone ON zone_node(zone_id);
|
||||
```
|
||||
|
||||
### `zone_edge`
|
||||
|
||||
```sql
|
||||
CREATE TABLE zone_edge (
|
||||
edge_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
zone_id TEXT NOT NULL,
|
||||
from_node TEXT NOT NULL, -- FK-ish: zone_node.node_id
|
||||
to_node TEXT NOT NULL, -- FK-ish: zone_node.node_id
|
||||
lock_kind TEXT NOT NULL DEFAULT 'none', -- none|perception_check|key_required|level_min|region_clear|stat_check
|
||||
lock_data_json TEXT NOT NULL DEFAULT '{}', -- {"dc": 12} | {"key_id": "skull_key"} | {"min_level": 5} | etc
|
||||
hint TEXT NOT NULL DEFAULT '', -- player-visible hint when lock active ("A faint breeze suggests a passage")
|
||||
weight INTEGER NOT NULL DEFAULT 1 -- for ordering choices in the prompt
|
||||
);
|
||||
CREATE INDEX idx_zone_edge_from ON zone_edge(zone_id, from_node);
|
||||
```
|
||||
|
||||
### Run-state additions on `dnd_zone_run`
|
||||
|
||||
```sql
|
||||
ALTER TABLE dnd_zone_run ADD COLUMN current_node TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE dnd_zone_run ADD COLUMN visited_nodes TEXT NOT NULL DEFAULT '[]'; -- JSON array of node_ids
|
||||
ALTER TABLE dnd_zone_run ADD COLUMN node_choices TEXT NOT NULL DEFAULT '{}'; -- JSON: pending fork prompt state
|
||||
```
|
||||
|
||||
`current_room` and `room_seq_json` stay during the migration; retired in Phase G9.
|
||||
|
||||
### Runtime (Go) shapes
|
||||
|
||||
```go
|
||||
// internal/plugin/zone_graph.go (new file)
|
||||
|
||||
type ZoneNodeKind string
|
||||
|
||||
const (
|
||||
NodeKindEntry ZoneNodeKind = "entry"
|
||||
NodeKindExploration ZoneNodeKind = "exploration"
|
||||
NodeKindTrap ZoneNodeKind = "trap"
|
||||
NodeKindElite ZoneNodeKind = "elite"
|
||||
NodeKindBoss ZoneNodeKind = "boss"
|
||||
NodeKindHarvest ZoneNodeKind = "harvest"
|
||||
NodeKindRestCamp ZoneNodeKind = "rest_camp"
|
||||
NodeKindSecret ZoneNodeKind = "secret"
|
||||
NodeKindFork ZoneNodeKind = "fork" // pure choice node, no encounter
|
||||
NodeKindMerge ZoneNodeKind = "merge" // paths converge, no encounter
|
||||
)
|
||||
|
||||
type ZoneNode struct {
|
||||
NodeID string // "crypt_valdris.entry"
|
||||
ZoneID ZoneID
|
||||
RegionID string // "" for single-region
|
||||
Kind ZoneNodeKind
|
||||
Label string // "Side Chapel"
|
||||
IsEntry bool
|
||||
IsBoss bool
|
||||
PosX, PosY int
|
||||
Content ZoneNodeContent // typed wrapper around content_json
|
||||
}
|
||||
|
||||
type ZoneNodeContent struct {
|
||||
EncounterOverride string // bestiary_id; if "", roll from zone roster
|
||||
HarvestRef string // harvest table id
|
||||
LootBias float64 // multiplier for end-of-room loot roll
|
||||
Narration string // optional bespoke entry text
|
||||
}
|
||||
|
||||
type ZoneEdgeLockKind string
|
||||
|
||||
const (
|
||||
LockNone ZoneEdgeLockKind = "none"
|
||||
LockPerception ZoneEdgeLockKind = "perception_check"
|
||||
LockKey ZoneEdgeLockKind = "key_required"
|
||||
LockLevelMin ZoneEdgeLockKind = "level_min"
|
||||
LockRegionClear ZoneEdgeLockKind = "region_clear"
|
||||
LockStatCheck ZoneEdgeLockKind = "stat_check" // {"stat":"str","dc":14}
|
||||
)
|
||||
|
||||
type ZoneEdge struct {
|
||||
From string
|
||||
To string
|
||||
Lock ZoneEdgeLockKind
|
||||
LockData map[string]any
|
||||
Hint string
|
||||
Weight int
|
||||
}
|
||||
|
||||
type ZoneGraph struct {
|
||||
ZoneID ZoneID
|
||||
Nodes map[string]ZoneNode // keyed by NodeID
|
||||
Edges map[string][]ZoneEdge // keyed by from_node
|
||||
Entry string // entry NodeID
|
||||
Boss string // boss NodeID (must be reachable)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Authoring model
|
||||
|
||||
Zones author their graph as Go literals, registered alongside the existing `ZoneDefinition`. Two convenience builders:
|
||||
|
||||
```go
|
||||
// BuildLinearGraph compiles a flat room sequence (the existing model) into
|
||||
// a graph with N-1 unconditional edges. Used for legacy compat and for
|
||||
// zones that intentionally stay linear.
|
||||
func BuildLinearGraph(zoneID ZoneID, seq []ZoneNodeKind) ZoneGraph
|
||||
|
||||
// BuildGraph is the explicit authoring path: pass nodes + edges directly.
|
||||
// Validates: exactly one entry, exactly one boss, boss reachable from
|
||||
// entry, no orphan nodes, no self-loops unless explicitly opted in.
|
||||
func BuildGraph(zoneID ZoneID, nodes []ZoneNode, edges []ZoneEdge) ZoneGraph
|
||||
```
|
||||
|
||||
Authoring example for a branched Crypt of Valdris (POC):
|
||||
|
||||
```go
|
||||
// entry → corridor → FORK
|
||||
// ├─[lockNone]── main_hall ──┐
|
||||
// │ ├── antechamber → boss
|
||||
// └─[perception DC 12]──── side_chapel ──┘ (also: secret edge to crypt_loot)
|
||||
// secret_chamber dangles off side_chapel via perception DC 15
|
||||
|
||||
func zoneCryptValdrisGraph() ZoneGraph {
|
||||
nodes := []ZoneNode{
|
||||
{NodeID: "crypt_valdris.entry", Kind: NodeKindEntry, IsEntry: true, Label: "Crypt Threshold"},
|
||||
{NodeID: "crypt_valdris.corridor", Kind: NodeKindExploration, Label: "Bone Corridor"},
|
||||
{NodeID: "crypt_valdris.fork", Kind: NodeKindFork, Label: "Branching Passage"},
|
||||
{NodeID: "crypt_valdris.main_hall", Kind: NodeKindElite, Label: "Main Hall"},
|
||||
{NodeID: "crypt_valdris.side_chapel", Kind: NodeKindExploration, Label: "Side Chapel"},
|
||||
{NodeID: "crypt_valdris.secret_chamber", Kind: NodeKindSecret, Label: "Hidden Reliquary",
|
||||
Content: ZoneNodeContent{LootBias: 2.0}},
|
||||
{NodeID: "crypt_valdris.antechamber", Kind: NodeKindMerge, Label: "Antechamber"},
|
||||
{NodeID: "crypt_valdris.boss", Kind: NodeKindBoss, IsBoss: true, Label: "Valdris's Sanctum"},
|
||||
}
|
||||
edges := []ZoneEdge{
|
||||
{From: "crypt_valdris.entry", To: "crypt_valdris.corridor", Lock: LockNone},
|
||||
{From: "crypt_valdris.corridor", To: "crypt_valdris.fork", Lock: LockNone},
|
||||
{From: "crypt_valdris.fork", To: "crypt_valdris.main_hall", Lock: LockNone, Weight: 1},
|
||||
{From: "crypt_valdris.fork", To: "crypt_valdris.side_chapel", Lock: LockPerception, LockData: map[string]any{"dc": 12}, Hint: "A faint draft from a crack in the wall.", Weight: 2},
|
||||
{From: "crypt_valdris.main_hall", To: "crypt_valdris.antechamber", Lock: LockNone},
|
||||
{From: "crypt_valdris.side_chapel", To: "crypt_valdris.antechamber", Lock: LockNone},
|
||||
{From: "crypt_valdris.side_chapel", To: "crypt_valdris.secret_chamber", Lock: LockPerception, LockData: map[string]any{"dc": 15}, Hint: "A faint scratching behind the altar."},
|
||||
{From: "crypt_valdris.secret_chamber", To: "crypt_valdris.antechamber", Lock: LockNone},
|
||||
{From: "crypt_valdris.antechamber", To: "crypt_valdris.boss", Lock: LockNone},
|
||||
}
|
||||
return BuildGraph(ZoneCryptValdris, nodes, edges)
|
||||
}
|
||||
```
|
||||
|
||||
Registration parallels existing `registerZone`:
|
||||
|
||||
```go
|
||||
var zoneGraphRegistry = map[ZoneID]ZoneGraph{}
|
||||
|
||||
func registerZoneGraph(g ZoneGraph) {
|
||||
if _, dup := zoneGraphRegistry[g.ZoneID]; dup {
|
||||
panic("duplicate zone graph: " + g.ZoneID)
|
||||
}
|
||||
if err := validateZoneGraph(g); err != nil {
|
||||
panic("invalid zone graph for " + g.ZoneID + ": " + err.Error())
|
||||
}
|
||||
zoneGraphRegistry[g.ZoneID] = g
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Migration phases
|
||||
|
||||
### G1 — Schema introduction *(infra; no behavior change)*
|
||||
|
||||
- Add `zone_node`, `zone_edge` CREATE statements to `internal/db/db.go` schema.
|
||||
- Add `current_node` / `visited_nodes` / `node_choices` columns to `dnd_zone_run` via `columnMigrations`.
|
||||
- No code reads from these yet.
|
||||
- **Test:** `TestProdDBMigrations` passes against a fresh copy of `data/gogobee.db`.
|
||||
|
||||
### G2 — Graph types + validator *(infra)*
|
||||
|
||||
- New file `internal/plugin/zone_graph.go` defining the types in §2.
|
||||
- Implement `BuildLinearGraph`, `BuildGraph`, `validateZoneGraph`.
|
||||
- Validator checks:
|
||||
- Exactly one node has `IsEntry=true`.
|
||||
- Exactly one node has `IsBoss=true`.
|
||||
- Boss is reachable from entry via BFS.
|
||||
- No orphan nodes (every non-entry node has an incoming edge).
|
||||
- No self-loops unless `Content.AllowSelfLoop` flag is set (off by default).
|
||||
- **Test:** unit tests with hand-rolled graphs, including failure cases.
|
||||
|
||||
### G3 — Legacy zone compiler + dual-mode loader *(infra; no behavior change)*
|
||||
|
||||
- For every existing `ZoneDefinition`, compile its `room_seq_json` template into a linear graph at registry init:
|
||||
|
||||
```go
|
||||
func compileLegacyZoneGraph(z ZoneDefinition) ZoneGraph {
|
||||
// Read the room-type template that generateRoomSequence currently uses,
|
||||
// produce a linear chain of nodes with unconditional edges. Entry node
|
||||
// = first room, boss node = last room.
|
||||
}
|
||||
```
|
||||
|
||||
- `loadZoneGraph(zoneID)` returns the registered graph if present, else falls back to the legacy-compiled one.
|
||||
- All zones now have a graph representation, but nothing reads it yet.
|
||||
- **Test:** every existing zone compiles cleanly; node count = legacy room count.
|
||||
|
||||
### G4 — Run-state model + reader hot-swap *(behavior parity)*
|
||||
|
||||
- `dnd_zone_run` reader populates `current_node` from `current_room` if `current_node` is empty (one-time per-row warm-up).
|
||||
- New helpers:
|
||||
- `loadZoneRunNode(runID) (currentNode string, visited []string, ...)`
|
||||
- `advanceZoneRunNode(runID, nextNode string)` — appends to `visited_nodes`, sets `current_node`, also bumps `current_room` for any legacy code still reading it.
|
||||
- Run-state writes: every existing site that mutates `current_room` now also calls `advanceZoneRunNode` with the corresponding linear-graph node.
|
||||
- **Test:** an in-progress run loaded post-deploy continues to advance correctly under the dual-write scheme.
|
||||
|
||||
### G5 — Navigation surface (the main UX change)
|
||||
|
||||
- `enterRoom` / room-advance code branches on `len(outgoingEdges(currentNode))`:
|
||||
- 1 edge: auto-advance (current behavior).
|
||||
- 0 edges: end-of-zone state (boss cleared OR dead-end secret).
|
||||
- 2+ edges: write a fork prompt to `node_choices`, DM the player a numbered menu of unlocked edges, plus hints for locked ones.
|
||||
- New command `!zone go <n>` (also `!zone choose <n>`) consumes the pending fork choice. Validates the selection is unlocked given current state (Perception roll, key inventory, level, etc.).
|
||||
- Edge unlock evaluation:
|
||||
- `LockNone` — always available.
|
||||
- `LockPerception` — auto-roll Perception when player reaches the fork; success unlocks the edge silently (still must be picked); failure shows the hint as a teaser ("you sense something but can't place it"). Re-roll never; choice is committed at fork-arrival.
|
||||
- `LockKey` — checks player inventory for `lock_data.key_id`.
|
||||
- `LockLevelMin` — `dnd_character.dnd_level >= lock_data.min_level`.
|
||||
- `LockRegionClear` — region progression (multi-region zones).
|
||||
- `LockStatCheck` — generic stat-vs-DC roll.
|
||||
- `!zone status` reports current node label + outgoing edge previews.
|
||||
- **Test:** end-to-end forks, locked-edge teasing, unlock paths, secret-chamber gating.
|
||||
|
||||
### G6 — Dependent surfaces
|
||||
|
||||
- **Harvest nodes** (`dnd_expedition_harvest.go`): currently keyed by `(region_id, room_idx)`. Re-key on `node_id`. Author harvest content into `ZoneNodeContent.HarvestRef`. Migration: legacy harvest_node rows get their `node_id` derived from `room_idx` via the linear-graph compiler.
|
||||
- **Narration cadence** (`dnd_zone_narration.go`): mood asides, threat ticks, TwinBee interjections counted by `len(visited_nodes)` instead of `current_room`.
|
||||
- **`!zone map` renderer**: rewrite to render the graph using `pos_x` / `pos_y` hints. Visited nodes filled, current node highlighted, locked edges shown dashed, secrets hidden until discovered.
|
||||
- **Boss flow** unchanged in essence — entering the boss node still triggers `bossEncounter`. The path to it is what changed.
|
||||
- **Region transitions** (`dnd_expedition_region.go`): when `nextNode.RegionID != currentNode.RegionID`, fire the existing region-transition flow.
|
||||
|
||||
### G7 — POC zone (Crypt of Valdris) *(shipped)*
|
||||
|
||||
- `zoneCryptValdrisGraph()` lives in `internal/plugin/zone_graph_crypt_valdris.go` (graph topology per §3, including a Perception DC 15 secret reliquary off `side_chapel` with `LootBias=2.0`). Self-registers at init.
|
||||
- Two surgical bridges so new runs actually traverse the authored graph when the gate is on:
|
||||
- `startZoneRun` seeds `current_node = g.Entry` instead of `<zone>.r1` when `GOGOBEE_BRANCHING_ZONES=1` and the zone has a hand-authored graph in `zoneGraphRegistry`.
|
||||
- `DungeonRun.CurrentRoomType()` resolves via `g.Nodes[CurrentNode].Kind` under the same gate, so divergent paths (e.g. the secret_chamber) dispatch to the right room resolver — RoomSeq can't represent off-path nodes.
|
||||
- Gate off = pre-G7 behavior bit-identical. Legacy zones with the gate on still route through the linear-compiled graph (auto-advance throughout) and use the legacy `<zone>.r{N+1}` node IDs unchanged.
|
||||
- Tests: registration + boss reachability via both paths, fork edge layout (weight + lock), secret-chamber DC + loot bias, `CurrentRoomType` graph-vs-RoomSeq behavior under both gate states.
|
||||
- Playtest open: forks render, perception teasers fire, boss reachable via main_hall and side_chapel.
|
||||
|
||||
### G8 — Migrate remaining zones one at a time
|
||||
|
||||
- Each zone gets its own `zone<Name>Graph()` function.
|
||||
- Authoring guidelines (drop into `gogobee_dungeon_zones.md` §X):
|
||||
- Aim for one fork per zone for T1, two forks for T2+.
|
||||
- Secret rooms should have meaningful loot (LootBias ≥ 1.5) since they cost a Perception roll.
|
||||
- Locked paths should always have a hint (cruel design otherwise).
|
||||
- Boss must be reachable from entry without relying on luck (no Perception walls on the only path).
|
||||
- Per-zone PR pattern:
|
||||
- Add `zoneXxxGraph()`.
|
||||
- Test: validator passes, all paths reach boss, no orphan nodes.
|
||||
- Flip `GOGOBEE_BRANCHING_ZONES=1` for that zone.
|
||||
- Remove env gate when all zones converted.
|
||||
|
||||
### G9 — Retire linear model ✅
|
||||
|
||||
- **G9a** — `GOGOBEE_BRANCHING_ZONES` POC gate removed; graph mode is the only runtime path.
|
||||
- **G9b** — `current_room` / `room_seq_json` no longer persisted. `CurrentRoom` derived from `len(VisitedNodes)-1` on read; `RoomSeq` is in-memory only and unused at runtime.
|
||||
- **G9c** — Columns dropped from `CREATE TABLE dnd_zone_run`. `purgeLegacyZoneRunColumns()` in `cleanup_g9.go` mirrors the L5 shape (gated by `GOGOBEE_BRANCHING_PURGE=1`, idempotent, runs in adventure init). Operator flips after final soak.
|
||||
|
||||
---
|
||||
|
||||
## 5. Testing strategy
|
||||
|
||||
- **Unit:** validator failure cases, edge unlock evaluation, fork prompt rendering, legacy-zone compiler shape.
|
||||
- **Integration (in-process DB):** end-to-end run through a forked zone, including Perception-gated branch, secret room discovery, region transition.
|
||||
- **Prod-DB simulation:** new test in `proddb_simulation_test.go` shape — load a real character, start a graph-mode zone run, exercise a fork choice, verify state persists across reload (overlay-layer parity).
|
||||
- **Backward compat smoke:** test that a legacy zone (kept on the linear template) renders identically to pre-G7 output.
|
||||
|
||||
---
|
||||
|
||||
## 6. Risk inventory
|
||||
|
||||
| Risk | Mitigation |
|
||||
|---|---|
|
||||
| In-flight runs at deploy | G4 dual-write + warm-up populates `current_node` from `current_room` lazily. No run breakage. |
|
||||
| Validator panics in prod | Run validator in CI; staging soak; `registerZoneGraph` panics at Init so bad authoring never reaches a player. |
|
||||
| Fork-choice race (player sends `!zone go 1` while another DM is mid-fly) | Same lock mechanism existing zone advance uses (`p.advUserLock`). |
|
||||
| `!zone map` render churn | Keep legacy renderer as fallback; switch by graph-presence flag during G6. |
|
||||
| Player frustration with locked edges they can never see | Always emit `Hint` text on locked edges, even when the lock fails — "you sense something" teasers. |
|
||||
| Regions integration drift | Keep `current_region` updates inside `advanceZoneRunNode`; zone-graph nodes carry `RegionID`, so transitions are derivable. |
|
||||
|
||||
---
|
||||
|
||||
## 7. Surface inventory (files likely to change)
|
||||
|
||||
- `internal/db/db.go` — schema, ALTER TABLEs (G1)
|
||||
- `internal/plugin/zone_graph.go` — new (G2)
|
||||
- `internal/plugin/dnd_zone.go` — register graphs alongside zones (G3+G7+G8)
|
||||
- `internal/plugin/dnd_zone_run.go` (or wherever run state lives) — node-aware loaders/savers (G4)
|
||||
- `internal/plugin/dnd_zone_cmd.go` — `!zone go`, fork rendering (G5)
|
||||
- `internal/plugin/dnd_zone_combat.go` — entry-point shifts from room-idx to node-id (G5)
|
||||
- `internal/plugin/dnd_zone_narration.go` — cadence reads from `visited_nodes` (G6)
|
||||
- `internal/plugin/dnd_expedition_harvest.go` — harvest keying (G6)
|
||||
- `internal/plugin/dnd_expedition_region.go` — region-on-node-transition (G6)
|
||||
- `internal/plugin/dnd_zone_map.go` (or wherever `!zone map` renders) — graph render (G6)
|
||||
- `gogobee_dungeon_zones.md` — authoring guidelines update (G8)
|
||||
|
||||
---
|
||||
|
||||
## 8. Open authoring questions (decide during G7)
|
||||
|
||||
1. **Backtracking** — opt-in per-edge or globally off? **Default proposed: off.**
|
||||
2. **Secret-chamber discovery memory** — once found, persisted to character forever, or per-run? **Default proposed: per-run** (re-roll each entry, keeps replay tension).
|
||||
3. **Fork timeout** — if player goes idle at a fork, default to first-listed edge after N hours? **Default proposed: yes, 6h, with a "TwinBee picked for you" DM.**
|
||||
4. **Hidden node visibility on `!zone map`** — show as `?` glyph, hidden entirely, or revealed only after Perception success? **Default proposed: hidden until Perception success.**
|
||||
|
||||
---
|
||||
|
||||
## 9. First-session checklist
|
||||
|
||||
When the new session starts:
|
||||
|
||||
1. `git checkout -b branching-zones` off `adv-2.0`.
|
||||
2. Read this file end-to-end.
|
||||
3. Read `gogobee_dungeon_zones.md` (existing zone design) + `internal/plugin/dnd_zone.go` for current shape.
|
||||
4. Run G1 (schema) + G2 (types) + G3 (legacy compiler) + G4 (run state). All four are infra; ship together with no behavior change.
|
||||
5. Land G5 navigation behind `GOGOBEE_BRANCHING_ZONES=1` env gate.
|
||||
6. **G6 (done)** — dependent surfaces: harvest re-keyed on `node_id` (with legacy `room_idx` read-fallback + drop-on-save migration), narration cadence salted on `len(visited_nodes)-1` via `narrationCadence(run)`, `!zone map` graph render gated by `GOGOBEE_BRANCHING_ZONES=1` (locked edges → `╳`, secrets hidden until visited), and a region-boundary hook in graph advance/`!zone go` that mirrors `!region travel` flavor + log without burning supplies (graph is run-state authoritative).
|
||||
7. **G7 (done)** — POC graph for Crypt of Valdris shipped. `zoneCryptValdrisGraph()` lives in `internal/plugin/zone_graph_crypt_valdris.go` and self-registers at init (8 nodes incl. fork + DC-15 secret reliquary). `startZoneRun` now seeds `current_node = g.Entry` whenever `GOGOBEE_BRANCHING_ZONES=1` and the zone has a hand-authored graph, so new runs traverse the authored topology instead of falling off into `<zone>.r1`. `DungeonRun.CurrentRoomType()` resolves via the live `CurrentNode`'s graph kind under the same gate (essential for divergent paths — RoomSeq can't represent secret_chamber). Gate off = pre-G7 behavior bit-identical.
|
||||
8. Pause for playtest before G8 mass migration.
|
||||
@@ -1,167 +0,0 @@
|
||||
# GogoBee — D&D Class Balance Pass
|
||||
|
||||
> **Companion to:** `gogobee_dnd_design_doc_v1.1.md`, `gogobee_spell_system.md`, `gogobee_subclass_system.md`
|
||||
> **Version:** 0.1 (planning draft)
|
||||
> **Status:** Pre-implementation — Phase 0 spike in progress
|
||||
> **Sibling work:** the race-balance pass (`internal/plugin/dnd_race_balance.go`, `TestRaceBalance`) — same spirit, different method (see §1).
|
||||
|
||||
---
|
||||
|
||||
## 0. Why this doc exists
|
||||
|
||||
The race-balance pass tuned the seven races to equal *effective power* via a
|
||||
hand-weighted scoring model. That model is a **proxy** — races don't fight, so
|
||||
there is nothing to measure directly.
|
||||
|
||||
Classes are different: combat is **one-shot auto-resolved** through a single
|
||||
`simulateCombatWithRNG` call (`combat_engine.go:338`), and the RNG is
|
||||
**seedable**. So class balance does not need a proxy model — we can run
|
||||
thousands of real, reproducible fights and read the win rates directly.
|
||||
|
||||
This doc plans that work. Endgame: a `TestClassBalance` regression fixture that
|
||||
holds per-tier win-rate parity across all 10 classes × 30 subclasses, plus the
|
||||
tuning pass that gets us there.
|
||||
|
||||
**Non-goals.** Not a combat-engine redesign. Not adding classes/subclasses.
|
||||
"Balanced" means balanced *in gogobee's one-shot engine* — the model collapses
|
||||
tabletop action economy, and that is accepted.
|
||||
|
||||
---
|
||||
|
||||
## 1. Method — measure, don't model
|
||||
|
||||
| | Race pass | Class pass |
|
||||
|---|---|---|
|
||||
| Power source | ability mods only | full combat: HP/AC, weapons, spells, passives, subclass tiers |
|
||||
| Approach | hand-weighted scoring proxy | Monte Carlo over the real engine |
|
||||
| Trust | heuristic weights (estimated) | empirical win rates (measured) |
|
||||
| Artifact | `dnd_race_balance.go` + `TestRaceBalance` | `dnd_class_balance.go` + `TestClassBalance` |
|
||||
|
||||
---
|
||||
|
||||
## 2. The matrix (full)
|
||||
|
||||
For each of the 10 classes:
|
||||
- `subclass = none` at L1–L4
|
||||
- each of its 5 subclasses at the L5 / L7 / L10 / L15 / L20 tier-unlock checkpoints
|
||||
|
||||
→ ~60 build profiles × level checkpoints × ~6 monster tiers. Each cell = N
|
||||
seeded fights through `simulateCombatWithRNG`. One-shot sims are cheap; compute
|
||||
is not the constraint.
|
||||
|
||||
**Opponents:** the existing per-tier monster scaling curves
|
||||
(`dnd_combat.go:35–51`) — dungeon Tier and arena ThreatLevel — used as a fixed
|
||||
gauntlet.
|
||||
|
||||
**Builds:** standard array assigned by each class's stat priority
|
||||
(`dnd_combat.go:185–218`), Human race (neutral baseline, +1 all), plus a
|
||||
standardized equipment loadout (see §3).
|
||||
|
||||
---
|
||||
|
||||
## 3. The two hard parts (Phase 0 de-risks these)
|
||||
|
||||
1. **Equipment loadout policy.** Combat uses equipment-driven AC and real weapon
|
||||
dice. The per-class, per-level kit must be standardized *fairly* or every
|
||||
downstream number is garbage. Derive from existing starting-gear / level
|
||||
tables if they exist; otherwise define a canonical tiered kit.
|
||||
2. **Spell-selection policy.** Caster damage flows through `applyPendingCast`.
|
||||
Without a "what would a player cast here" heuristic per class/level, all 8
|
||||
casters fight as naked weapon-users and read as broken — a measurement
|
||||
artifact, not real imbalance.
|
||||
|
||||
---
|
||||
|
||||
## 4. Balance rule
|
||||
|
||||
Per-tier **win-rate parity**: at each difficulty tier, every class within a
|
||||
tolerance band of the cross-class mean win rate. Band set empirically after the
|
||||
first full run (the race pass's ±0.5 was set the same way). Damage-dealt,
|
||||
HP-remaining, and near-death-rate are logged as diagnostics, not asserted.
|
||||
|
||||
---
|
||||
|
||||
## 5. Phases (one phase ≈ one session; each ends green + committed)
|
||||
|
||||
- **Phase 0 — spike.** Harness skeleton; equipment + spell-selection policies;
|
||||
run *Fighter vs. Mage only* across tiers and sanity-check plausibility
|
||||
(both win something; casters not at 0%). If the numbers are implausible, fix
|
||||
the policies before trusting anything. **Done — commit 0878b4e.**
|
||||
- **Phase 1 — harness + matrix.** Generalize to all 10 classes × 30 subclasses;
|
||||
`TestClassBalance` logs the full report. No tuning yet — just measurement.
|
||||
**Done.** Subclass field plumbed through the harness, `applySubclassPassives`
|
||||
wired in to match live combat order, `buildPhase1Profiles` produces 190 rows
|
||||
(10 × 4 pre-subclass + 10 × 3 × 5 post-subclass), `TestClassBalance_Phase1_FullMatrix`
|
||||
logs the cells plus per-class tier means and ranges. Phase-2 calibration baseline:
|
||||
at T4 the cross-class spread of *mean* win rate runs Bard 0.62 → Fighter 0.80
|
||||
(~18pp); at T5 0.48 → 0.64 (~16pp); casters trail martials at the post-unlock
|
||||
tier (T3) by ~20pp.
|
||||
- **Phase 2 — tuning pass. Done.** First insight: per-class-mean is dominated
|
||||
by floor+ceiling saturation (L10+ pinned at 1.0; L1-4 caster cells at high
|
||||
tier pinned at 0.0), masking the actual gaps. The matrix log now also
|
||||
emits a per-(level, tier) cross-class spread — the cells with real signal.
|
||||
Tuned levers, in priority order:
|
||||
- **Class passives** (`dnd_passives.go`): caster trailers (Bard, Mage,
|
||||
Warlock, Sorcerer) gained level + casting-stat scaled FlatDmgStart bursts
|
||||
so their L1-4 chassis isn't a quarterstaff + one weak spell against a T2-T3
|
||||
monster; small DamageBonus riders (Mage/Bard/Sorcerer/Rogue +5%, Warlock
|
||||
10→12%) and +1 attack for Bard/Warlock close the steady-DPS gap. Added a
|
||||
`clampNonNeg` helper so ability-mod-scaled additions never go negative on
|
||||
sheets with sub-10 casting stats.
|
||||
- **Subclass L5 tiers** (`dnd_subclass_combat.go`): the three Sorcerer
|
||||
L5 picks (Wild/Storm/Draconic) and Warlock Great Old One were defense-only
|
||||
or near-inert pre-tune; each gained a DamageBonus +0.10 (or FlatDmgStart
|
||||
burst for Storm) so the L5 chassis can press through a T4 monster.
|
||||
|
||||
**Parity band locked** in `TestClassBalance_Phase1_FullMatrix`: cross-class
|
||||
spread ≤ 35pp on the *in-tier* diagonal — the (level, tier) cells where the
|
||||
level is appropriate for the tier (T1: L1-4, T2: L3-7, T3: L5-10, T4: L7-15,
|
||||
T5: L10-20). Off-tier cells (e.g. L1 mage at T3 dungeon) are still logged but
|
||||
not asserted: those are level-vs-tier mismatches, and casters at L1-4 can't
|
||||
muscle through a T3 monster on a single L1-slot spell the way martials muscle
|
||||
through with weapon dice. Observed worst in-tier cell after tuning: L3/T2 at
|
||||
~26pp, L1/T1 at ~24pp, L5/T3 at ~20pp; the 35pp band gives ~9pp Monte-Carlo
|
||||
headroom at 200 trials/cell. **← current**
|
||||
- **Phase 3 — off-tier caster lift. Done.** Design steer ("relatively easy
|
||||
but not too easy") narrowed the target: lift the embarrassing caster
|
||||
trailers on off-tier cells (the casual player walking into a slightly
|
||||
too-hard dungeon underleveled) *without* pushing the already-saturated
|
||||
in-tier ceiling. Tuned levers:
|
||||
- **Druid passive** (`dnd_passives.go`): the only class chassis with a
|
||||
purely defensive passive (5% DR, no offense). Added a level + WIS-scaled
|
||||
`FlatDmgStart` burst — same shape as the Phase-2 Bard/Mage/Warlock pass.
|
||||
Kept the DR; no `DamageBonus` rider, so high-tier ceilings stay flat.
|
||||
- **Sorcerer passive** (`dnd_passives.go`): burst base 3→5. Sorcerer was
|
||||
the second-worst caster off-tier (L1/T2 0.10 vs Mage 0.27 pre-tune)
|
||||
despite a comparable stat line; the bump pulls it toward parity with
|
||||
the other arcane chassis.
|
||||
|
||||
Added an off-tier-trailer diagnostic (`dnd_class_balance_test.go`) — for
|
||||
each (level, tier) cell where the player is below the in-tier band, the
|
||||
log names the trailing class and its mean win rate. Not asserted: an
|
||||
L1 walking into T2 is *supposed* to be hard, so the diagnostic is for
|
||||
watching the gap, not the absolute number.
|
||||
|
||||
Observed lifts:
|
||||
- Druid L1/T1: 0.77 → 0.86 (+9pp). The chassis is now functional at its
|
||||
intended tier.
|
||||
- L2/T2 cross-class spread: 77pp → 63pp. Druid trailer 0.23 → 0.35.
|
||||
- L1/T1 spread: 23pp → 14pp.
|
||||
|
||||
In-tier parity assertion (35pp band on the diagonal) still passes. No
|
||||
off-tier cell saturated past where it was — the lift is shape-correct.
|
||||
**← current**
|
||||
- **Phase 4 (if needed) — second-order.** Subclass-vs-subclass spread within a
|
||||
class; the Paladin/Rogue MAD question if the data shows it bites. The L5/T4
|
||||
wild-magic Sorcerer cell (0.14 individual, off-tier) is the most obvious
|
||||
next target if subclass parity needs another pass.
|
||||
|
||||
## 6. Tuning levers (priority order)
|
||||
|
||||
1. Class passives — `dnd_passives.go`
|
||||
2. Subclass L5/7/10/15 tiers — `dnd_subclass_combat.go`
|
||||
3. Spell damage dice & upcast — `dnd_spells_data.go`, `dnd_spells_srd_data.go`
|
||||
4. Spell slot progression — `dnd_spells.go`
|
||||
5. AC floor / armor proficiency — `dnd.go:164–178`
|
||||
6. Attack bonus class matrix — `dnd_combat.go:22–33`
|
||||
7. Monster scaling curves — `dnd_combat.go:35–51` (last resort; affects PvE feel)
|
||||
@@ -1,80 +0,0 @@
|
||||
# GogoBee Design Document Index
|
||||
|
||||
> **Read this first.** Then read the docs relevant to your work, in dependency order.
|
||||
>
|
||||
> All docs in this index live at the repo root (`/home/reala-misaki/git/gogobee/*.md`).
|
||||
> If you're starting an implementation session, **read every entry below before opening code** — many systems cross-reference each other and reading one doc in isolation has historically led to under-scoped work.
|
||||
|
||||
---
|
||||
|
||||
## The corpus
|
||||
|
||||
| Doc | Scope | Status |
|
||||
|---|---|---|
|
||||
| `gogobee_dnd_design_doc.md` | v1.0 vision: D&D character system, classes, races, ability scores, leveling, combat resolution, abilities, equipment slots, monsters, skill checks, rest, onboarding/migration, NPC integration | Vision; superseded for implementation by v1.1 |
|
||||
| `gogobee_dnd_design_doc_v1.1.md` | v1.0 reconciled against actual codebase: real schema, archetype names, layered (not replacement) approach, smaller phase plan | Implementation source-of-truth |
|
||||
| `gogobee_dnd_session_summary.md` | What's actually been built so far across phases 1-7 + audit fixes + flavor wiring | Living record |
|
||||
| `gogobee_design_index.md` | This file | — |
|
||||
|
||||
## System docs (companions to v1.0/v1.1)
|
||||
|
||||
| Doc | Owns | Hard dependencies |
|
||||
|---|---|---|
|
||||
| `gogobee_action_economy_death.md` | Turn-based action economy (Action/Bonus/Reaction/Movement), death saves, hospital recovery | None — foundation |
|
||||
| `gogobee_equipment_appendix.md` | Weapon damage dice, armor AC tables, magic item templates, ammo, ComputeAC helper | Action economy |
|
||||
| `gogobee_spell_system.md` | 79 spells (cantrip–L5), spell slots, concentration, three casters (Mage/Cleric/Ranger), spell save DC | Action economy, equipment (component pouch / focus) |
|
||||
| `gogobee_subclass_system.md` | 15 subclasses (3 per class × 5 classes), L5 selection prompt, L5/7/10/15 abilities | Action economy, spells (Arcane Trickster) |
|
||||
| `gogobee_dungeon_zones.md` | 10 named zones, TwinBee GM persona w/ Mood Score, 5 room types, named bosses with multi-phase mechanics, tier gating | Combat (any), monsters, equipment (loot), spells (boss casters) |
|
||||
| `gogobee_expedition_system.md` | Multi-day persistent expeditions, day cycle (06:00 brief / 21:00 recap), threat clock, supply system, camp tiers, extraction, siege mode | Zones (zones get wrapped), action economy (combat events), resources |
|
||||
| `gogobee_resource_combat_integration.md` | Harvest nodes per zone, combat-as-event (room/interrupt/patrol/ambush), zone-specific loot tables | Zones, expedition, action economy, equipment |
|
||||
| `gogobee_housing_babysitter.md` | Housing tiers 0-6 (rent + mortgage), 13 property upgrades, FRED ARM rate integration, Pastel babysitter NPC | Economy (existing euro_balances), pets (Pastel feeds them) |
|
||||
| `gogobee_pet_system.md` | 30 named pets, tier 1-3 + Legendary, Ranger Pet Bond (5 tiers), happiness, pet leveling | Subclass (Ranger), housing (pet capacity per tier) |
|
||||
| `gogobee_remaining_systems.md` | Skill Proficiency selection, Arena polish, Misty/Arina quest system, Pete Bot broadcasts, Economy by tier, Crafting recipes | Various; the catch-all |
|
||||
|
||||
## Reading order by intent
|
||||
|
||||
**Implementing combat changes:** `dnd_design_doc_v1.1` → `action_economy_death` → `equipment_appendix` → `spell_system` → `subclass_system`.
|
||||
|
||||
**Implementing world content (zones, dungeons):** `dnd_design_doc_v1.1` → `dungeon_zones` → `expedition_system` → `resource_combat_integration` → relevant flavor files in `internal/flavor/`.
|
||||
|
||||
**Implementing economy/housing/pets/NPCs:** `dnd_design_doc_v1.1` → `housing_babysitter` → `pet_system` → `remaining_systems` (for quests) → `internal/flavor/twinbee_npc_flavor.go` and `twinbee_housing_flavor.go`.
|
||||
|
||||
**Onboarding to the project cold:** all of v1.1 → this index → `dnd_session_summary.md` → then deep-dive into the system you're touching.
|
||||
|
||||
## Cross-reference graph (one-line summary)
|
||||
|
||||
```
|
||||
dnd_design_doc / v1.1 (root)
|
||||
|
|
||||
┌─────────────────────┼──────────────────────┐
|
||||
↓ ↓ ↓
|
||||
action_economy_death dungeon_zones housing_babysitter
|
||||
│ │ │
|
||||
├──→ equipment ├──→ expedition └──→ pet_system
|
||||
├──→ spell_system │ │ │
|
||||
├──→ subclass │ └──→ resource_combat │
|
||||
│ │ │ ↑ │
|
||||
│ └─────────────┴────────────────┘ │
|
||||
│ │
|
||||
└─────────────→ remaining_systems ←───────────────────┘
|
||||
(quests, arena, Pete bot, crafting,
|
||||
skill profs, economy by tier)
|
||||
```
|
||||
|
||||
## Flavor file locations
|
||||
|
||||
All flavor lives in `internal/flavor/` (not at the repo root). These files have `DO NOT REWRITE` headers — never edit content; new pools go in new files only.
|
||||
|
||||
- `twinbee_gm_flavor.go` — TwinBee GM narration: room entries per zone, boss entries per named boss, combat outcomes, nat 20/1, level up, rest, traps, conditions, saves, taunts/compliments
|
||||
- `twinbee_expedition_flavor.go` — Morning briefings (Day 1/3/7/14/21), evening recaps, camp, supply warnings, threat clock states, per-zone hazards (tides, time distortion, awareness pulses, portal destabilization), extraction, milestones
|
||||
- `twinbee_resource_flavor.go` — Harvest pools per type (forage, mine, scavenge, essence, commune, fish), per-zone harvest variants, fishing per-zone, loot drops by rarity, patrol encounters
|
||||
- `twinbee_npc_flavor.go` — Misty + Arina + Pete pools (greetings, skill checks, quests, trust/favorite tiers, Pete broadcasts including patch notes)
|
||||
- `twinbee_housing_flavor.go` — Thom Krooke (rent, buy, mortgage, default, eviction, passive income), Pastel (hire, fire, level notes 1-5, missed tasks, deliveries, gifts, returns), home arrival, long rest at home, property upgrades (Workshop, Herb Garden, Vault, Trophy Room, Expedition Outpost)
|
||||
- `pick.go` — `flavor.Pick(pool []string) string` helper
|
||||
|
||||
## Discipline
|
||||
|
||||
- **Adding a new system:** add a new design doc under `gogobee_<system>_name.md`. Update this index in the same change.
|
||||
- **Updating a system:** prefer adding a `Section X.Y — addendum` rather than rewriting prose. The agents read these docs verbatim.
|
||||
- **Removing a system:** mark the doc as deprecated in this index; don't delete unless the entire system is gone.
|
||||
- **Cross-references in design docs:** every doc should declare its companions in its header (`> Companion to: ...`). The dnd_design v1.0 doc didn't, which is why a session in 2026 spent six hours building 20% of the spec before noticing the rest existed.
|
||||
@@ -1,677 +0,0 @@
|
||||
# GogoBee — D&D Integration Design Document
|
||||
> **Version:** 1.0
|
||||
> **Status:** Draft
|
||||
> **Scope:** Adventure system overhaul + character system introduction
|
||||
> **Target:** Claude Code implementation sessions
|
||||
> **See also:** `gogobee_equipment_appendix.md` — full weapon, armor, magic item, and ammo tables
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
The following files must never be rewritten, summarized, shortened, or restructured without explicit human approval:
|
||||
|
||||
- All `*_flavor.go` / `*_flavor.txt` files
|
||||
- Any file containing the header: `DO NOT REWRITE, SUMMARIZE, OR SHORTEN ANY ENTRIES IN THIS FILE`
|
||||
- NPC spec files (Thom Krooke, Misty, Arina)
|
||||
|
||||
---
|
||||
|
||||
## 1. Overview & Goals
|
||||
|
||||
GogoBee is a Matrix-based bot game built in Go for the TwinBee community. This document specifies the integration of Dungeons & Dragons–inspired mechanics into the existing adventure system. The goal is to deepen gameplay, reward long-term engagement, and create meaningful character identity — without breaking existing player progress or bot infrastructure.
|
||||
|
||||
### Design Principles
|
||||
|
||||
- **Non-destructive migration.** All existing player data (coins, pets, fishing rank, arena streaks, personality archetypes) must be preserved and mapped forward.
|
||||
- **Incremental delivery.** Systems are delivered in phases. Each phase must be independently stable before the next begins.
|
||||
- **Flavor-first.** Mechanical changes must be reflected in flavor text. No dry stat outputs.
|
||||
- **Bot-native UX.** All interactions happen via Matrix message commands. No external UI.
|
||||
- **Config-driven.** All tunable values (XP curves, damage multipliers, stat caps, DC thresholds) must be externalized as constants or config — never hardcoded magic numbers.
|
||||
|
||||
---
|
||||
|
||||
## 2. Existing System Inventory
|
||||
|
||||
Before implementing new systems, Claude Code must treat the following as the current ground truth:
|
||||
|
||||
| System | Status | Notes |
|
||||
|---|---|---|
|
||||
| Adventure engine | Active | Encounter resolution, flavor text, loot |
|
||||
| Fishing system | Active | Ranks, flavor text, species tables |
|
||||
| Pet system | Active | Pet bonuses, flavor text |
|
||||
| Arena / streak system | Active | PvP-style streak tracking |
|
||||
| Euro economy | Active | Coin earn/spend, Thom Krooke shop |
|
||||
| Personality archetypes | Active | Player type classification |
|
||||
| Housing / mortgage mechanics | Specced | FRED API ARM rate integration |
|
||||
| NPC system | Active | Thom Krooke, Misty, Arina |
|
||||
| Chat level / perk system | Specced | |
|
||||
| Tarot system | Active | |
|
||||
| Blackjack / Uno / Hangman | Active | |
|
||||
|
||||
---
|
||||
|
||||
## 3. Character System
|
||||
|
||||
### 3.1 Races
|
||||
|
||||
Races provide passive stat modifiers and unlock flavor interactions. Chosen once at character creation; changeable only via `!respec` (with a cooldown or cost TBD).
|
||||
|
||||
| Race | STR | DEX | CON | INT | WIS | CHA | Special Passive |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| Human | +0 | +0 | +0 | +0 | +0 | +0 | +1 to any stat (player choice); +1 free skill proficiency |
|
||||
| Elf | +0 | +2 | -1 | +1 | +1 | +0 | Darkvision; immune to sleep effects |
|
||||
| Dwarf | +1 | -1 | +2 | +0 | +1 | -1 | Poison resistance; +bonus vs. underground enemies |
|
||||
| Halfling | +0 | +2 | +0 | +0 | +1 | +0 | Lucky: once per combat, reroll any natural 1 |
|
||||
| Orc | +3 | -1 | +2 | -1 | -1 | -1 | Rage: once per combat, +50% damage for one turn |
|
||||
| Tiefling | +0 | +1 | +0 | +1 | +0 | +2 | Fire resistance; +bonus on CHA skill checks |
|
||||
| Half-Elf | +0 | +1 | +0 | +1 | +0 | +2 | Two bonus skill proficiencies |
|
||||
|
||||
### 3.2 Classes
|
||||
|
||||
Classes define combat role, ability access, and equipment proficiency. Chosen at character creation alongside race.
|
||||
|
||||
| Class | Primary Stats | HP Die | Armor Prof. | Weapon Prof. | Role |
|
||||
|---|---|---|---|---|---|
|
||||
| Fighter | STR, CON | d10 | All | All | Sustained melee damage, tanking |
|
||||
| Rogue | DEX, INT | d8 | Light | Simple, hand crossbow | Burst damage, stealth, utility |
|
||||
| Mage | INT, WIS | d6 | None | Daggers, staves | Spell burst, crowd control |
|
||||
| Cleric | WIS, CHA | d8 | Medium, shields | Simple | Healing, buffs, undead bonus |
|
||||
| Ranger | DEX, WIS | d8 | Light, medium | Simple, martial ranged | Nature affinity, pet/fishing bonuses |
|
||||
|
||||
**Class–Archetype Inference (for existing user migration):**
|
||||
|
||||
| Personality Archetype | Suggested Class | Suggested Race |
|
||||
|---|---|---|
|
||||
| Arena-heavy / aggressive | Fighter | Orc or Human |
|
||||
| Economy-focused / trader | Rogue | Halfling or Human |
|
||||
| Lore-seeker / chat-heavy | Mage | Elf or Tiefling |
|
||||
| Supportive / community | Cleric | Dwarf or Half-Elf |
|
||||
| Fishing / exploration | Ranger | Human or Elf |
|
||||
|
||||
### 3.3 Ability Scores
|
||||
|
||||
The six D&D ability scores apply across all systems. Base values are set at character creation (point-buy or roll — implementation decision TBD), then modified by race and class.
|
||||
|
||||
| Score | Abbreviation | Governs |
|
||||
|---|---|---|
|
||||
| Strength | STR | Melee damage, carry weight, STR skill checks |
|
||||
| Dexterity | DEX | Dodge chance, initiative, ranged, DEX skill checks |
|
||||
| Constitution | CON | Max HP, resist conditions |
|
||||
| Intelligence | INT | Spell power, lore, crafting, INT skill checks |
|
||||
| Wisdom | WIS | Healing power, perception, WIS skill checks |
|
||||
| Charisma | CHA | NPC interactions, shop discounts, CHA skill checks |
|
||||
|
||||
**Stat Modifier Formula:** `modifier = floor((score - 10) / 2)`
|
||||
Standard range: 8–18 at creation (pre-racial bonuses). Hard cap: 20.
|
||||
|
||||
### 3.4 Go Data Model — Character Sheet
|
||||
|
||||
```go
|
||||
// CharacterSheet represents the full D&D character state for a player.
|
||||
type CharacterSheet struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Race Race `json:"race"`
|
||||
Class Class `json:"class"`
|
||||
Level int `json:"level"`
|
||||
XP int `json:"xp"`
|
||||
Stats BaseStats `json:"stats"`
|
||||
HP HPBlock `json:"hp"`
|
||||
Abilities []Ability `json:"abilities"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
type BaseStats struct {
|
||||
STR int `json:"str"`
|
||||
DEX int `json:"dex"`
|
||||
CON int `json:"con"`
|
||||
INT int `json:"int"`
|
||||
WIS int `json:"wis"`
|
||||
CHA int `json:"cha"`
|
||||
}
|
||||
|
||||
type HPBlock struct {
|
||||
Current int `json:"current"`
|
||||
Max int `json:"max"`
|
||||
TempHP int `json:"temp_hp"`
|
||||
}
|
||||
|
||||
type Race string
|
||||
type Class string
|
||||
|
||||
const (
|
||||
RaceHuman Race = "human"
|
||||
RaceElf Race = "elf"
|
||||
RaceDwarf Race = "dwarf"
|
||||
RaceHalfling Race = "halfling"
|
||||
RaceOrc Race = "orc"
|
||||
RaceTiefling Race = "tiefling"
|
||||
RaceHalfElf Race = "half_elf"
|
||||
|
||||
ClassFighter Class = "fighter"
|
||||
ClassRogue Class = "rogue"
|
||||
ClassMage Class = "mage"
|
||||
ClassCleric Class = "cleric"
|
||||
ClassRanger Class = "ranger"
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Leveling System
|
||||
|
||||
### 4.1 XP Curve
|
||||
|
||||
| Level | XP Required (cumulative) | Abilities Unlocked |
|
||||
|---|---|---|
|
||||
| 1 | 0 | Class starter ability |
|
||||
| 2 | 300 | +1 stat point |
|
||||
| 3 | 900 | Class ability tier 2 |
|
||||
| 5 | 2700 | Subclass selection prompt |
|
||||
| 7 | 6500 | Class ability tier 3 |
|
||||
| 10 | 14000 | Prestige ability |
|
||||
| 15 | 34000 | Elite ability |
|
||||
| 20 | 85000 | Legendary ability |
|
||||
|
||||
XP is earned from: adventure encounters, arena wins, fishing (Ranger bonus), completing daily quests, NPC interactions.
|
||||
|
||||
### 4.2 Level-Up Events
|
||||
|
||||
On level-up, the bot:
|
||||
1. Posts a congratulatory message with flavor text (class-specific)
|
||||
2. Displays new HP max
|
||||
3. Announces any unlocked abilities
|
||||
4. Prompts for stat point allocation if applicable
|
||||
5. Prompts for subclass selection at level 5
|
||||
|
||||
---
|
||||
|
||||
## 5. Combat Engine Overhaul
|
||||
|
||||
### 5.1 Combat Resolution Flow
|
||||
|
||||
```
|
||||
1. INITIATIVE
|
||||
Both combatants roll d20 + DEX modifier.
|
||||
Higher initiative acts first.
|
||||
Ties broken by DEX score, then random.
|
||||
|
||||
2. ATTACK ROLL (per turn)
|
||||
Attacker rolls d20 + relevant stat modifier + proficiency bonus.
|
||||
Proficiency bonus = ceil(level / 4) + 1
|
||||
|
||||
3. HIT CHECK
|
||||
Attack roll >= target's Armor Class (AC) → HIT
|
||||
Attack roll < AC → MISS (flavor text generated)
|
||||
Natural 20 → CRITICAL HIT (damage doubled, special crit flavor)
|
||||
Natural 1 → FUMBLE (miss + possible debuff, fumble flavor)
|
||||
|
||||
4. DAMAGE ROLL (on hit)
|
||||
Damage = weapon damage die + STR or DEX modifier (class-dependent)
|
||||
Apply resistances, vulnerabilities, conditions
|
||||
|
||||
5. CONDITION CHECKS
|
||||
Check for active conditions (poisoned, stunned, blessed, etc.)
|
||||
Apply saving throws where required
|
||||
|
||||
6. REPEAT until one combatant reaches 0 HP
|
||||
```
|
||||
|
||||
### 5.2 Armor Class
|
||||
|
||||
AC is derived from equipped armor + DEX modifier (where applicable):
|
||||
|
||||
| Armor Type | Base AC | DEX Bonus | Classes |
|
||||
|---|---|---|---|
|
||||
| Unarmored | 10 | +DEX mod | Mage, Rogue |
|
||||
| Light Armor | 11 | +DEX mod | Rogue, Ranger, Cleric |
|
||||
| Medium Armor | 13 | +DEX mod (max +2) | Fighter, Ranger, Cleric |
|
||||
| Heavy Armor | 16 | None | Fighter |
|
||||
| Shield | +2 | — | Any proficient class |
|
||||
|
||||
### 5.3 Conditions
|
||||
|
||||
| Condition | Effect | Save to Remove |
|
||||
|---|---|---|
|
||||
| Poisoned | -1d4 HP per turn; -2 to attack rolls | CON DC 12 |
|
||||
| Stunned | Skip turn | CON DC 14 |
|
||||
| Frightened | -2 to all rolls; must flee if possible | WIS DC 12 |
|
||||
| Blessed | +1d4 to attack and saving throws | N/A (duration-based) |
|
||||
| Burning | -1d6 HP per turn | DEX DC 10 |
|
||||
| Silenced | Cannot cast spells | WIS DC 13 |
|
||||
|
||||
### 5.4 Go Data Model — Combat
|
||||
|
||||
```go
|
||||
type CombatState struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
EnemyID string `json:"enemy_id"`
|
||||
Round int `json:"round"`
|
||||
PlayerTurn bool `json:"player_turn"`
|
||||
Conditions []Condition `json:"conditions"`
|
||||
Log []CombatLine `json:"log"`
|
||||
}
|
||||
|
||||
type CombatLine struct {
|
||||
Round int `json:"round"`
|
||||
Actor string `json:"actor"`
|
||||
Action string `json:"action"`
|
||||
Flavor string `json:"flavor"`
|
||||
Damage int `json:"damage"`
|
||||
Roll int `json:"roll"`
|
||||
}
|
||||
|
||||
type Condition struct {
|
||||
Name string `json:"name"`
|
||||
Duration int `json:"duration"` // turns remaining; -1 = permanent until saved
|
||||
SaveStat string `json:"save_stat"`
|
||||
SaveDC int `json:"save_dc"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Abilities & Spells
|
||||
|
||||
### 6.1 Ability Types
|
||||
|
||||
- **Passive:** Always active. Applied automatically during combat resolution.
|
||||
- **Active:** Player-triggered via `!use <ability>`. Consumes resources (mana/rage/focus).
|
||||
- **Reactive:** Triggers on specific conditions (e.g., "when hit", "on critical hit").
|
||||
|
||||
### 6.2 Resource Systems by Class
|
||||
|
||||
| Class | Resource | Resets On |
|
||||
|---|---|---|
|
||||
| Fighter | Stamina (3 pts) | Short rest or long rest |
|
||||
| Rogue | Focus (2 pts) | Short rest |
|
||||
| Mage | Mana / Spell Slots | Long rest only |
|
||||
| Cleric | Divine Favor (3 pts) | Long rest |
|
||||
| Ranger | Focus (2 pts) | Short rest |
|
||||
|
||||
### 6.3 Starter Abilities by Class (Level 1)
|
||||
|
||||
| Class | Ability | Type | Effect |
|
||||
|---|---|---|---|
|
||||
| Fighter | Second Wind | Active (1 Stamina) | Heal 1d10 + level HP |
|
||||
| Rogue | Sneak Attack | Passive | +1d6 damage when attacking with advantage or flanking |
|
||||
| Mage | Magic Missile | Active (1 Slot) | 3 darts, 1d4+1 force damage each, auto-hit |
|
||||
| Cleric | Healing Word | Active (1 Favor) | Restore 1d4 + WIS modifier HP to self or ally |
|
||||
| Ranger | Hunter's Mark | Active (1 Focus) | Mark target; +1d6 damage to marked target for 3 turns |
|
||||
|
||||
---
|
||||
|
||||
## 7. Equipment & Item System
|
||||
|
||||
### 7.1 Item Rarity
|
||||
|
||||
| Rarity | Color Code | Drop Rate | Stat Bonus Range |
|
||||
|---|---|---|---|
|
||||
| Common | ⬜ | 60% | +0 to +1 |
|
||||
| Uncommon | 🟩 | 25% | +1 to +2 |
|
||||
| Rare | 🟦 | 10% | +2 to +4 |
|
||||
| Epic | 🟪 | 4% | +4 to +6 |
|
||||
| Legendary | 🟧 | 1% | +6 to +10, special property |
|
||||
|
||||
### 7.2 Equipment Slots
|
||||
|
||||
```
|
||||
Head | Chest | Legs | Hands | Feet
|
||||
Weapon (main hand) | Off-hand (shield or weapon)
|
||||
Ring (x2) | Amulet
|
||||
```
|
||||
|
||||
### 7.3 Attunement
|
||||
|
||||
- Players may attune to a maximum of **3 magic items** at a time.
|
||||
- Attuning requires a short rest.
|
||||
- Unequipping an attuned item frees the slot immediately.
|
||||
- Non-attuned magic items provide no bonus.
|
||||
|
||||
### 7.4 Go Data Model — Equipment
|
||||
|
||||
```go
|
||||
type Inventory struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Equipped EquipmentSlots `json:"equipped"`
|
||||
Bag []Item `json:"bag"`
|
||||
Attuned []string `json:"attuned"` // item IDs, max 3
|
||||
}
|
||||
|
||||
type EquipmentSlots struct {
|
||||
Head *Item `json:"head"`
|
||||
Chest *Item `json:"chest"`
|
||||
Legs *Item `json:"legs"`
|
||||
Hands *Item `json:"hands"`
|
||||
Feet *Item `json:"feet"`
|
||||
MainHand *Item `json:"main_hand"`
|
||||
OffHand *Item `json:"off_hand"`
|
||||
Ring1 *Item `json:"ring_1"`
|
||||
Ring2 *Item `json:"ring_2"`
|
||||
Amulet *Item `json:"amulet"`
|
||||
}
|
||||
|
||||
type Item struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Rarity string `json:"rarity"`
|
||||
Slot string `json:"slot"`
|
||||
StatBonus map[string]int `json:"stat_bonus"` // e.g. {"str": 2, "dex": 1}
|
||||
MagicProp string `json:"magic_prop"` // empty string if none
|
||||
Attunement bool `json:"attunement"`
|
||||
ClassReq []Class `json:"class_req"` // empty = any class
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Monster Bestiary
|
||||
|
||||
Every enemy has a stat block. Flavor text generation must reference class-specific encounter descriptions.
|
||||
|
||||
### 8.1 Stat Block Schema
|
||||
|
||||
```go
|
||||
type MonsterStatBlock struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
CR float32 `json:"cr"` // Challenge Rating
|
||||
HP int `json:"hp"`
|
||||
AC int `json:"ac"`
|
||||
STR int `json:"str"`
|
||||
DEX int `json:"dex"`
|
||||
CON int `json:"con"`
|
||||
INT int `json:"int"`
|
||||
WIS int `json:"wis"`
|
||||
CHA int `json:"cha"`
|
||||
Resistances []string `json:"resistances"`
|
||||
Immunities []string `json:"immunities"`
|
||||
Abilities []MonsterAbility `json:"abilities"`
|
||||
LootTable []LootEntry `json:"loot_table"`
|
||||
XPValue int `json:"xp_value"`
|
||||
FlavorRef string `json:"flavor_ref"` // key into flavor text map
|
||||
}
|
||||
|
||||
type LootEntry struct {
|
||||
ItemID string `json:"item_id"`
|
||||
Weight float32 `json:"weight"` // probability weight, not percentage
|
||||
}
|
||||
```
|
||||
|
||||
### 8.2 Starter Bestiary Entries
|
||||
|
||||
| Monster | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Goblin | 1/4 | 7 | 13 | Nimble Escape (disengage/hide as bonus) |
|
||||
| Skeleton | 1/4 | 13 | 13 | Immune to poison; resist piercing |
|
||||
| Orc Grunt | 1/2 | 15 | 13 | Aggressive: bonus action move toward enemy |
|
||||
| Troll | 5 | 84 | 15 | Regeneration: +10 HP/turn unless fire/acid damage this turn |
|
||||
| Wyvern | 6 | 110 | 13 | Multiattack; poison sting (CON DC 15) |
|
||||
| Ancient Dragon | 20 | 367 | 22 | Legendary actions; breath weapon; frightful presence |
|
||||
|
||||
---
|
||||
|
||||
## 9. Skill Check System
|
||||
|
||||
Skill checks resolve non-combat interactions. Roll d20 + relevant stat modifier vs. a Difficulty Class (DC).
|
||||
|
||||
### 9.1 Skill → Stat Mapping
|
||||
|
||||
| Skill | Stat | Example Uses |
|
||||
|---|---|---|
|
||||
| Athletics | STR | Climbing, forcing doors |
|
||||
| Acrobatics | DEX | Avoiding traps, balancing |
|
||||
| Stealth | DEX | Ambush, avoiding detection |
|
||||
| Arcana | INT | Identifying magic items, lore |
|
||||
| Investigation | INT | Finding hidden items, clues |
|
||||
| Perception | WIS | Spotting enemies, noticing changes |
|
||||
| Insight | WIS | Detecting NPC deception |
|
||||
| Persuasion | CHA | Shop discounts (Thom Krooke), quest rewards |
|
||||
| Intimidation | CHA | Enemy morale checks |
|
||||
| Deception | CHA | Bypassing guards |
|
||||
|
||||
### 9.2 DC Reference
|
||||
|
||||
| Difficulty | DC |
|
||||
|---|---|
|
||||
| Trivial | 5 |
|
||||
| Easy | 10 |
|
||||
| Medium | 15 |
|
||||
| Hard | 20 |
|
||||
| Very Hard | 25 |
|
||||
| Near Impossible | 30 |
|
||||
|
||||
### 9.3 NPC Integration
|
||||
|
||||
- **Thom Krooke** (Persuasion, CHA): Passing DC 15 Persuasion unlocks a 10% shop discount for the session.
|
||||
- **Misty** (Insight, WIS): Passing DC 12 Insight reveals a hidden quest option or bonus item.
|
||||
- **Arina** (Arcana, INT): Passing DC 14 Arcana unlocks a crafting recipe or item identification for free.
|
||||
|
||||
---
|
||||
|
||||
## 10. Rest System
|
||||
|
||||
### 10.1 Short Rest
|
||||
|
||||
- Command: `!rest short`
|
||||
- Duration: No in-game time cost
|
||||
- Cooldown: 1 hour real-time between short rests
|
||||
- Effects:
|
||||
- Recover HP equal to 1d6 + CON modifier (x2 at levels 5+)
|
||||
- Reset short-rest abilities (Rogue Focus, Fighter Stamina)
|
||||
- Does NOT reset spell slots
|
||||
|
||||
### 10.2 Long Rest
|
||||
|
||||
- Command: `!rest long`
|
||||
- Duration: Requires housing (Thom Krooke inn/owned property) or camp item
|
||||
- Cooldown: 24 hours real-time between long rests
|
||||
- Effects:
|
||||
- Full HP recovery
|
||||
- Full resource reset (all classes)
|
||||
- Spell slots restored
|
||||
- Conditions cleared (except curses)
|
||||
|
||||
### 10.3 Housing Integration
|
||||
|
||||
Players with purchased housing (see housing/mortgage mechanic spec) get access to long rests at any time via `!rest long` from their home. Inn use costs coins (Thom Krooke shop price: configurable).
|
||||
|
||||
---
|
||||
|
||||
## 11. Player Onboarding & Migration
|
||||
|
||||
### 11.1 New User Flow
|
||||
|
||||
Triggered on first interaction with any adventure, combat, or D&D command:
|
||||
|
||||
```
|
||||
Step 1 — Race selection (numbered choices, bot message)
|
||||
Step 2 — Class selection (numbered choices, bot message)
|
||||
Step 3 — Stat summary confirmation (show derived stats, HP, AC)
|
||||
Step 4 — Welcome message with class-specific flavor text
|
||||
```
|
||||
|
||||
No DM blast. No walls of text. Each step is a separate message with clear numbered options. Players can type `!setup` at any time to restart.
|
||||
|
||||
### 11.2 Existing User Migration
|
||||
|
||||
**Trigger:** First interaction with any D&D-layer command post-launch.
|
||||
|
||||
**Flow:**
|
||||
|
||||
```
|
||||
Bot: ⚔️ The adventure system has evolved!
|
||||
Your coins, pets, fishing rank, and arena streak are safe.
|
||||
|
||||
Based on your history, we think you might be:
|
||||
|
||||
🗡️ Human Fighter
|
||||
|
||||
[1] Yes, that's me
|
||||
[2] No, let me choose
|
||||
[3] Skip for now — remind me later
|
||||
```
|
||||
|
||||
Option 3 sets a `pending_setup` flag. Bot re-prompts every 7 days until setup is complete. All non-D&D commands continue to work normally. D&D-gated commands return a friendly prompt to complete setup.
|
||||
|
||||
### 11.3 Auto-Assignment (Fallback)
|
||||
|
||||
After 30 days with `pending_setup = true`, the system auto-assigns:
|
||||
- Race and Class based on archetype inference table (Section 3.2)
|
||||
- Notifies the player: "We gave you a starting class! Use `!setup` to change it anytime."
|
||||
|
||||
### 11.4 Data Migration Map
|
||||
|
||||
| Existing Field | Migration Action |
|
||||
|---|---|
|
||||
| `coins` | Preserved unchanged |
|
||||
| `pet` | Preserved; Ranger gets passive pet bonus on top |
|
||||
| `fishing_rank` | Preserved; Ranger gets fishing affinity bonus |
|
||||
| `arena_streak` | Preserved; now modified by class bonuses in combat |
|
||||
| `personality_archetype` | Used for class/race inference; retained as flavor field |
|
||||
| `housing` (if live) | Maps to long rest eligibility |
|
||||
| `chat_level` (if live) | Maps to XP starting value (formula TBD) |
|
||||
|
||||
---
|
||||
|
||||
## 12. Cross-System Integration
|
||||
|
||||
### 12.1 Arena System
|
||||
|
||||
- Combat now uses full D&D resolution (initiative, AC, attack rolls, conditions)
|
||||
- Arena streak bonuses scale with level (e.g., +5% damage per 3-streak, additive with class bonuses)
|
||||
- Class-specific arena flavor text required (see flavor file conventions)
|
||||
|
||||
### 12.2 Pet System
|
||||
|
||||
- All pets: +5% XP gain (passive)
|
||||
- Ranger pets: Additionally grant +2 to Perception checks and +1d4 to first attack each combat
|
||||
- Pet flavor text on combat entry must reference the pet name
|
||||
|
||||
### 12.3 Fishing System
|
||||
|
||||
- Fishing rank bonuses unchanged
|
||||
- Ranger: +20% rare fish catch rate; access to exclusive `Ranger's Rod` item (combat-usable as a thrown weapon)
|
||||
- High-value fish can now be sold to Thom Krooke for coins via `!sell fish`
|
||||
|
||||
### 12.4 Economy / Thom Krooke
|
||||
|
||||
- Equipment available at Thom Krooke's shop (Common and Uncommon only; Rare+ are dungeon drops)
|
||||
- CHA Persuasion checks apply to all purchases
|
||||
- Housing still functions as the primary long rest enabler
|
||||
- New shop category: Potions (healing potions, antitoxin, spell components)
|
||||
|
||||
---
|
||||
|
||||
## 13. Commands Reference
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!setup` | Begin or restart character creation |
|
||||
| `!sheet` | Display your character sheet |
|
||||
| `!stats` | Show ability scores and modifiers |
|
||||
| `!level` | Show current level and XP progress |
|
||||
| `!abilities` | List known abilities and resources |
|
||||
| `!equip <item>` | Equip an item from inventory |
|
||||
| `!unequip <slot>` | Unequip item from slot |
|
||||
| `!attune <item>` | Attune to a magic item |
|
||||
| `!inventory` | List all carried items |
|
||||
| `!use <ability>` | Activate an active ability |
|
||||
| `!rest short` | Take a short rest |
|
||||
| `!rest long` | Take a long rest (requires inn/home) |
|
||||
| `!roll <dice>` | Roll arbitrary dice (e.g., `!roll 2d6+3`) |
|
||||
| `!check <skill>` | Make a skill check |
|
||||
| `!respec` | Respec race/class (cooldown/cost TBD) |
|
||||
|
||||
---
|
||||
|
||||
## 14. Implementation Phases
|
||||
|
||||
### Phase 1 — Character Foundation
|
||||
- [ ] `CharacterSheet` struct and DB schema
|
||||
- [ ] Race and class constants, stat modifier functions
|
||||
- [ ] New user onboarding flow
|
||||
- [ ] Existing user migration flow (archetype inference + `pending_setup` flag)
|
||||
- [ ] `!setup`, `!sheet`, `!stats` commands
|
||||
|
||||
### Phase 2 — Combat Engine Overhaul
|
||||
- [ ] Initiative system
|
||||
- [ ] Attack roll vs. AC resolution
|
||||
- [ ] Critical hit / fumble handling
|
||||
- [ ] Condition system
|
||||
- [ ] Saving throws
|
||||
- [ ] Update arena system to use new combat engine
|
||||
|
||||
### Phase 3 — Leveling & Abilities
|
||||
- [ ] XP tracking and level-up triggers
|
||||
- [ ] Level-up notification flow (flavor text required)
|
||||
- [ ] Starter ability per class (Level 1)
|
||||
- [ ] `!use`, `!abilities` commands
|
||||
- [ ] Resource tracking (Stamina, Focus, Mana, Divine Favor)
|
||||
|
||||
### Phase 4 — Equipment & Loot
|
||||
- [ ] Item struct and inventory DB schema
|
||||
- [ ] Equipment slots and equip/unequip
|
||||
- [ ] Attunement system (3-item limit)
|
||||
- [ ] Loot table integration into adventure/combat drops
|
||||
- [ ] Thom Krooke shop expansion (equipment + potions)
|
||||
|
||||
### Phase 5 — Skill Checks & NPC Integration
|
||||
- [ ] Skill check resolution function
|
||||
- [ ] DC table constants
|
||||
- [ ] Wire Thom Krooke, Misty, Arina interactions to skill checks
|
||||
- [ ] `!check` command
|
||||
|
||||
### Phase 6 — Rest System & Housing
|
||||
- [ ] Short rest implementation
|
||||
- [ ] Long rest implementation
|
||||
- [ ] Housing check for long rest eligibility
|
||||
- [ ] Inn cost at Thom Krooke
|
||||
- [ ] `!rest` command
|
||||
|
||||
### Phase 7 — Monster Bestiary & Cross-System Polish
|
||||
- [ ] Full starter bestiary (Section 8.2 minimum)
|
||||
- [ ] Monster-specific flavor text (do not touch existing flavor files — add new)
|
||||
- [ ] Cross-system bonuses (pet/fishing/housing integration)
|
||||
- [ ] Pete bot announcement post draft
|
||||
|
||||
---
|
||||
|
||||
## 15. Configuration Constants
|
||||
|
||||
All of the following must be defined as named constants or config entries — never inline:
|
||||
|
||||
```go
|
||||
const (
|
||||
MaxAbilityScore = 20
|
||||
AttunementLimit = 3
|
||||
ShortRestCooldownHours = 1
|
||||
LongRestCooldownHours = 24
|
||||
MigrationAutoAssignDays = 30
|
||||
MigrationReminderDays = 7
|
||||
ProficiencyBase = 2 // added to ceil(level/4)
|
||||
CritMultiplier = 2 // damage multiplier on natural 20
|
||||
ShopDiscountCHA = 0.10 // 10% discount on passing Persuasion
|
||||
RangerFishRateBonus = 0.20 // +20% rare fish catch
|
||||
PetXPBonus = 0.05 // +5% XP all pets
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 16. Out of Scope (This Version)
|
||||
|
||||
The following are explicitly deferred to future design docs:
|
||||
|
||||
- Multiplayer / party system
|
||||
- PvP with full D&D ruleset (arena streak system is sufficient for now)
|
||||
- Subclass trees (specced at Level 5 prompt, full spec TBD)
|
||||
- Crafting system
|
||||
- World map / dungeon zones
|
||||
- Spell list expansion beyond Level 1 starters
|
||||
- Prestige / multi-classing
|
||||
|
||||
---
|
||||
|
||||
*End of document. All implementation sessions using this doc must treat Section ⚠️ Protected Files as an absolute constraint.*
|
||||
@@ -1,439 +0,0 @@
|
||||
# GogoBee — D&D Integration Design Document (v1.1, annotated)
|
||||
|
||||
> **Version:** 1.1 — integration revision
|
||||
> **Status:** Draft, supersedes v1.0 for implementation purposes
|
||||
> **Predecessor:** `gogobee_dnd_design_doc.md` (v1.0) — kept as the vision document
|
||||
> **Scope:** Same as v1.0, reconciled against the existing `internal/plugin/adventure_*.go` and `internal/db/db.go` codebase
|
||||
> **See also:** `gogobee_equipment_appendix.md`
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
Unchanged from v1.0. All `*_flavor.go` / `*_flavor.txt` files, files containing the `DO NOT REWRITE` header, and NPC spec files (Thom Krooke, Misty, Arina) are immutable. New D&D flavor lives in **new** files (`dnd_flavor_*.go`), never as edits to existing flavor.
|
||||
|
||||
---
|
||||
|
||||
## 0. Why v1.1 exists
|
||||
|
||||
v1.0 was written without auditing the live adventure system. A literal implementation would destroy working features and player progress. This revision:
|
||||
|
||||
1. **Treats the existing adventure systems as ground truth.** The D&D layer is *additive*, not a replacement. `adventure_characters` and friends keep their columns and semantics; D&D adds nullable columns and new tables alongside.
|
||||
2. **Preserves all player progress.** Every column in `adventure_characters`, `adventure_equipment`, `adventure_inventory`, `adventure_treasures`, `adventure_buffs`, `user_archetypes`, `arena_stats`, `adventure_rival_records`, `adventure_babysit_log`, `holdem_scores`, `euro_balances`, etc. is preserved unchanged. Migrations are **column-adds with defaults only** — no drops, no renames.
|
||||
3. **Gates D&D content on opt-in.** A `pending_setup` flag means non-opted-in players continue with the current adventure system unchanged. D&D-flavored output (`!sheet`, combat resolution narration) is only shown to players who have completed `!setup`.
|
||||
4. **Re-uses what already exists** rather than reinventing it: `combat_level` becomes D&D level, `adventure_treasures` becomes the attunement substrate, `adventure_equipment` slots map forward, `user_archetypes` drives class/race inference (already designed for this).
|
||||
|
||||
Wherever this revision diverges from v1.0, the divergence is annotated with **[REVISED]** and a one-line rationale.
|
||||
|
||||
---
|
||||
|
||||
## 1. Overview & Goals
|
||||
|
||||
Unchanged from v1.0 except for one added principle:
|
||||
|
||||
- **Layered, not replaced.** D&D mechanics sit on top of the existing adventure systems. The world layer (skills, encounters, loot, babysit, rivals, housing) keeps running; the character layer (race/class/HP/AC/abilities) is a new lens over it.
|
||||
|
||||
---
|
||||
|
||||
## 2. Existing System Inventory — actual state
|
||||
|
||||
**[REVISED — v1.0's table was aspirational. This is what's actually in `internal/db/db.go` and `internal/plugin/`:]**
|
||||
|
||||
### 2.1 Player tables (preserve every column)
|
||||
|
||||
| Table | Key columns | Status |
|
||||
|---|---|---|
|
||||
| `adventure_characters` | `user_id` (PK), `display_name`, `combat_level`, `combat_xp`, `mining_skill`/`mining_xp`, `foraging_skill`/`foraging_xp`, `fishing_skill`/`fishing_xp`, `alive`, `dead_until`, `action_taken_today`, `holiday_action_taken`, `current_streak`, `best_streak`, `arena_wins`, `arena_losses`, `invasion_score`, `pet_*`, `house_*`, `babysit_*`, `auto_babysit`, `misty_buff_expires`, `misty_debuff_expires`, `arina_buff_expires` | **Preserve all.** D&D columns added nullable. |
|
||||
| `adventure_equipment` | `(user_id, slot)` PK, `tier`, `condition`, `name`, `actions_used`, `masterwork`, `skill_source` | Preserve. Add nullable D&D columns: `rarity`, `stat_bonus_json`, `attuned`. |
|
||||
| `adventure_inventory` | `id` (PK), `user_id`, `name`, `item_type`, `tier`, `value`, `slot`, `skill_source` | Preserve. Add nullable `rarity`, `stat_bonus_json`. |
|
||||
| `adventure_treasures` | `(user_id, treasure_key, bonus_type)` UNIQUE, `bonus_value` (REAL) | **Preserve and re-use as attunement substrate** (Section 7.3). |
|
||||
| `adventure_buffs` | `user_id`, `buff_type`, `buff_name`, `modifier`, `expires_at` | Preserve. Used for D&D conditions. |
|
||||
| `user_archetypes` | `(user_id, archetype)` PK, `category`, `signal_score`, `flavor`, `assigned_at` | Preserve. Drives migration inference (Section 11). |
|
||||
| `arena_runs`, `arena_history`, `arena_stats` | streaks, win/loss, history | Preserve. Combat resolution swaps under the hood; records stay. |
|
||||
| `adventure_rival_challenges`, `adventure_rival_records` | challenge state, head-to-head records | Preserve. RPS resolver replaced; tables untouched. |
|
||||
| `adventure_babysit_log` | activity, outcome, gold, XP, items_dropped per day | Preserve. Babysit stays independent. |
|
||||
| `euro_balances` | coin balance | Preserve. Coins are euros; no separate D&D gold. |
|
||||
| `hangman_scores`, `blackjack_scores`, `holdem_scores` | per-game scores | Preserve. Independent of D&D layer. |
|
||||
|
||||
### 2.2 New tables for D&D layer
|
||||
|
||||
| Table | Purpose |
|
||||
|---|---|
|
||||
| `dnd_character` | Per-player D&D state: race, class, hp_current, hp_max, temp_hp, ac, str/dex/con/int/wis/cha, dnd_level, pending_setup, created_at, updated_at. **One row per player after `!setup`; absent before.** |
|
||||
| `dnd_abilities` | `(user_id, ability_id)` — known abilities and uses-remaining of the relevant resource. |
|
||||
| `dnd_resources` | `(user_id, resource_type)` — current Stamina/Focus/Mana/DivineFavor; reset on rest. |
|
||||
| `dnd_combat_state` | Active combat encounter (round, turn, conditions JSON, log JSON). Cleared on combat end. |
|
||||
| `adventure_characters_pre_dnd` | One-shot mirror of `adventure_characters` taken at deploy time. Rollback safety net. |
|
||||
|
||||
### 2.3 Things that don't yet exist anywhere
|
||||
|
||||
- HP, AC, ability scores, conditions in any persistent form
|
||||
- Initiative, attack rolls, saving throws — current arena/rival are RPS or level-comparison
|
||||
- Global player XP separate from skill XP
|
||||
|
||||
These are genuinely new and require fresh implementation; everything else is layering.
|
||||
|
||||
---
|
||||
|
||||
## 3. Character System
|
||||
|
||||
### 3.1 Races, 3.2 Classes, 3.3 Ability Scores
|
||||
|
||||
Tables unchanged from v1.0. The race/class tables and stat-modifier formula stand.
|
||||
|
||||
**[REVISED]** Class ↔ archetype inference is now keyed to the *real* archetype names from `archetype.go`, not the abstract categories in v1.0:
|
||||
|
||||
| Archetype (real) | Suggested Class | Suggested Race |
|
||||
|---|---|---|
|
||||
| Arena Champion / Dungeon Crawler | Fighter | Orc / Human |
|
||||
| The Merchant / Whale | Rogue | Halfling / Human |
|
||||
| Novelist / Philosopher / Wordsmith / Linkmaster | Mage | Elf / Tiefling |
|
||||
| Cheerleader / Hype Machine / Patron / Reactor | Cleric | Dwarf / Half-Elf |
|
||||
| The Angler / The Forager / The Adventurer | Ranger | Human / Elf |
|
||||
| Fallback (Regular, Wildcard, no clear signal) | Human Fighter | (presented as suggestion only) |
|
||||
|
||||
When a player has multiple archetypes, the highest `signal_score` wins. Ties broken by archetype priority list defined in code.
|
||||
|
||||
### 3.4 Go data model
|
||||
|
||||
**[REVISED]** Drop the v1.0 `CharacterSheet` struct in favor of a model that mirrors the actual table layout and keeps `adventure_characters` as the source of truth for everything that already exists there.
|
||||
|
||||
```go
|
||||
// DnDCharacter is the new persistent layer. Joined with adventure_characters at read time.
|
||||
type DnDCharacter struct {
|
||||
UserID string
|
||||
Race Race
|
||||
Class Class
|
||||
DnDLevel int // derived from combat_level at migration; advances independently after
|
||||
HP HPBlock
|
||||
AC int
|
||||
Stats BaseStats // STR/DEX/CON/INT/WIS/CHA
|
||||
PendingSetup bool // true until !setup completes
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
// CharacterView is a read-only join used by !sheet and combat.
|
||||
// Always construct via repository.LoadCharacterView(userID) — never instantiate directly.
|
||||
type CharacterView struct {
|
||||
Adv AdventureCharacter // existing struct from adventure_character.go
|
||||
DnD *DnDCharacter // nil when player hasn't run !setup
|
||||
Eq []EquipmentRow // existing
|
||||
Inv []InventoryRow // existing
|
||||
Treas []TreasureRow // existing — surfaces as attunements when DnD != nil
|
||||
}
|
||||
```
|
||||
|
||||
`Race`, `Class`, `BaseStats`, `HPBlock` constants and types follow v1.0 exactly.
|
||||
|
||||
---
|
||||
|
||||
## 4. Leveling System
|
||||
|
||||
**[REVISED — this is the largest change from v1.0.]**
|
||||
|
||||
v1.0 specifies a fresh XP curve (300, 900, 2700…) with no relationship to existing skill XP. That throws away hours of player progress. Instead:
|
||||
|
||||
### 4.1 Initial mapping (one-time, at `!setup` completion)
|
||||
|
||||
```
|
||||
dnd_level = max(1, combat_level) // direct adoption — combat_level is literally a combat level
|
||||
xp_carryover = 0 // dnd has its own XP track going forward
|
||||
```
|
||||
|
||||
Skill levels (mining/foraging/fishing) and their XP pools are **untouched**. They keep advancing on their own from gathering activities.
|
||||
|
||||
### 4.2 New XP sources for D&D level
|
||||
|
||||
D&D level advances from:
|
||||
- Combat encounters (arena wins, rival duels, monster kills) — primary source
|
||||
- Quest/event completions
|
||||
- NPC skill-check successes (small amounts)
|
||||
|
||||
**Not** from gathering. Mining XP keeps going to mining; that channel is unchanged.
|
||||
|
||||
### 4.3 XP curve from level N onward
|
||||
|
||||
The cumulative table from v1.0 (`L2=300, L3=900, L5=2700, L10=14000, L20=85000`) applies, but **as XP earned past initial level**, not from zero. A player migrated in at `combat_level=8` starts D&D Level 8 with 0/required-for-9 XP.
|
||||
|
||||
### 4.4 Level-up flow
|
||||
|
||||
Same as v1.0 (5 steps, including stat point allocation and subclass prompt at L5). Level-up flavor must be class-specific and lives in a new `dnd_flavor_levelup.go` (new file, not editing existing flavor).
|
||||
|
||||
---
|
||||
|
||||
## 5. Combat Engine — staged rollout
|
||||
|
||||
**[REVISED]** v1.0 specifies the full D&D combat flow as if combat were greenfield. It isn't — arena and rival have semantics today, plus history. Stage the rollout:
|
||||
|
||||
### 5.1 Stage A — Arena conversion (do first)
|
||||
|
||||
- Replace the level-comparison + 50/50 winner logic with full D&D resolution (initiative → attack rolls vs. AC → damage → conditions).
|
||||
- **Preserve**: `arena_stats`, `arena_history`, `current_streak`, `best_streak`, `arena_wins`, `arena_losses` rows. New combat writes to the same tables.
|
||||
- Streak bonuses (+5%/3-streak, etc.) become combat modifiers in the new resolver.
|
||||
- Non-opted-in players (no `dnd_character` row) still hit the legacy resolver. The arena gracefully runs both.
|
||||
|
||||
### 5.2 Stage B — Rival conversion (do second)
|
||||
|
||||
- Replace RPS in `adventure_rival.go` with D&D combat.
|
||||
- `adventure_rival_records` and `adventure_rival_challenges` schemas unchanged. New resolver writes the same rows.
|
||||
- Stake calculation (`(combatLevel/5)*1000` euros) preserved.
|
||||
|
||||
### 5.3 Stage C — Encounter combat (new)
|
||||
|
||||
- New monsters / dungeon encounters use D&D combat from day one. No legacy path.
|
||||
|
||||
### 5.4 Combat resolution flow, AC, conditions, data model
|
||||
|
||||
Sections 5.1, 5.2, 5.3, 5.4 of v1.0 stand as the spec for **how** combat works. Apply at the resolver layer; persist via `dnd_combat_state` (new table).
|
||||
|
||||
---
|
||||
|
||||
## 6. Abilities & Spells
|
||||
|
||||
Unchanged from v1.0. Resources persist in `dnd_resources` (new table). Reset triggered by `!rest short`/`!rest long` (Section 10 below — note the rename).
|
||||
|
||||
---
|
||||
|
||||
## 7. Equipment & Item System
|
||||
|
||||
### 7.1, 7.2 Rarity & Slots
|
||||
|
||||
Tables stand from v1.0.
|
||||
|
||||
### 7.3 Slot mapping — additive, not replacement
|
||||
|
||||
**[REVISED]** Existing `adventure_equipment` has 5 slots. Map them forward instead of orphaning gear:
|
||||
|
||||
| Existing slot | D&D slot |
|
||||
|---|---|
|
||||
| `weapon` | `main_hand` |
|
||||
| `armor` | `chest` |
|
||||
| `helmet` | `head` |
|
||||
| `boots` | `feet` |
|
||||
| `tool` | `off_hand` (or `hands`, by item type) |
|
||||
|
||||
Old gear keeps `tier`, `condition`, `masterwork`. Inferred `rarity` is computed from `tier` at migration (e.g., tier 1-2 → Common, 3-4 → Uncommon, 5-6 → Rare, 7+ → Epic). New rarity column is nullable; legacy items render fine without it.
|
||||
|
||||
D&D adds the new slots (`legs`, `hands` if not already mapped, `ring_1`, `ring_2`, `amulet`) — these start empty for migrated players.
|
||||
|
||||
### 7.4 Attunement = adventure_treasures
|
||||
|
||||
**[REVISED]** v1.0 invents a parallel attunement system. Don't. `adventure_treasures` already encodes *named bonuses with stat modifiers per player* — that's exactly an attunement record.
|
||||
|
||||
- The 3-item attunement cap = a row-count constraint on `adventure_treasures` per `user_id`.
|
||||
- `bonus_type` and `bonus_value` (REAL) feed directly into stat resolution.
|
||||
- New magic items granted post-D&D-launch insert rows into the same table.
|
||||
- Legacy treasures are automatically "attuned" — no migration step required.
|
||||
|
||||
### 7.5 Go data model
|
||||
|
||||
Use a thin wrapper that joins `adventure_equipment` + `adventure_inventory` + `adventure_treasures` at read time. Don't introduce a new `Inventory`/`EquipmentSlots` struct that duplicates state.
|
||||
|
||||
---
|
||||
|
||||
## 8. Monster Bestiary
|
||||
|
||||
Unchanged from v1.0. New tables, new flavor file (`dnd_flavor_monsters.go`).
|
||||
|
||||
---
|
||||
|
||||
## 9. Skill Check System
|
||||
|
||||
Unchanged from v1.0. NPC wiring (Thom Krooke / Misty / Arina) is purely new logic; no schema change.
|
||||
|
||||
One nuance: the existing Misty/Arina buff/debuff timestamp columns (`misty_buff_expires`, `misty_debuff_expires`, `arina_buff_expires`) **stay as-is** and become the persistence layer for skill-check-granted buffs. Don't add parallel buff tracking.
|
||||
|
||||
---
|
||||
|
||||
## 10. Rest System — naming collision resolved
|
||||
|
||||
**[REVISED]**
|
||||
|
||||
`!adventure rest` already exists as a daily-action narrative activity. It's not the same thing as a D&D short/long rest.
|
||||
|
||||
Rename and split:
|
||||
|
||||
- **`!adventure camp`** — what `!adventure rest` is today. Daily-action narrative day-skip. (Old command remains as an alias for one release for backwards compat.)
|
||||
- **`!rest short`** — D&D short rest. No daily-action cost. 1-hour cooldown. Recovers 1d6+CON HP; resets short-rest resources (Fighter Stamina, Rogue/Ranger Focus).
|
||||
- **`!rest long`** — D&D long rest. Requires housing or paid inn use (Thom Krooke). 24-hour cooldown. Full reset.
|
||||
|
||||
Babysit interaction: babysitting is independent of rest. A player on auto-babysit can still `!rest short`. `!rest long` while babysitting is allowed and does not interrupt the babysit log.
|
||||
|
||||
---
|
||||
|
||||
## 11. Player Onboarding & Migration
|
||||
|
||||
### 11.1 New user flow
|
||||
|
||||
Unchanged from v1.0. A new player runs `!setup` and gets the 4-step race/class/stats/welcome flow. This creates their `adventure_characters` row (if absent) **and** their `dnd_character` row in one transaction.
|
||||
|
||||
### 11.2 Existing user migration
|
||||
|
||||
**[REVISED]** Migration is opt-in via `pending_setup`. No data is mutated until the player runs `!setup`.
|
||||
|
||||
At deploy:
|
||||
1. Snapshot `adventure_characters` → `adventure_characters_pre_dnd` (rollback safety).
|
||||
2. **No row changes.** No `dnd_character` rows created. Every existing player is implicitly `pending_setup = true` because the row simply doesn't exist yet.
|
||||
3. Bot DMs each active player **once** with the v1.0 migration message (suggested race/class from archetype, "Yes / No, let me choose / Skip for now"). Reminder cadence per v1.0 (every 7 days, auto-assign at 30 days).
|
||||
|
||||
While `pending_setup` is true:
|
||||
- All existing `!adventure ...` commands work exactly as before.
|
||||
- D&D-only commands (`!sheet`, `!stats`, `!use`, `!rest short/long`, `!check`) prompt for setup.
|
||||
- Arena/rival use the legacy resolver.
|
||||
|
||||
After `!setup`:
|
||||
- `dnd_character` row is created.
|
||||
- `dnd_level = combat_level` (Section 4.1).
|
||||
- HP_max computed from class HP die + CON modifier × level. Current HP set to max.
|
||||
- AC computed from equipped armor + DEX. (Old armor maps via Section 7.3.)
|
||||
- Arena/rival flip to D&D resolver for this user.
|
||||
|
||||
### 11.3 Auto-assign
|
||||
|
||||
After 30 days `pending_setup` and at least one prior interaction, auto-create `dnd_character` using inferred race/class from archetype. Player notified once: "We started a sheet for you — `!setup` to change it."
|
||||
|
||||
### 11.4 Data preservation guarantees
|
||||
|
||||
| Existing data | Guarantee |
|
||||
|---|---|
|
||||
| `euro_balances` | Untouched. Coins do not convert. |
|
||||
| Skill levels & XP (`mining_*`, `foraging_*`, `fishing_*`) | Untouched. Skill grind continues independently. |
|
||||
| `combat_level` | Read once at `!setup` to seed `dnd_level`. After that, both fields exist and advance independently (combat_level keeps incrementing on legacy paths if any remain; dnd_level is the canonical character level for D&D). |
|
||||
| `combat_xp` | Untouched. Used as legacy display. |
|
||||
| Pets (`pet_*`) | Untouched. Ranger gets passive bonus *on top*. |
|
||||
| `arena_wins`/`losses`/`current_streak`/`best_streak` | Untouched. New combats append to the same counters. |
|
||||
| `adventure_inventory` | Untouched. Items render with inferred rarity until D&D fields populated by new drops. |
|
||||
| `adventure_equipment` | Untouched. Slot mapping is read-time, not a migration. |
|
||||
| `adventure_treasures` | Untouched. Becomes attunement display source. |
|
||||
| `adventure_buffs` | Untouched. Used for new condition tracking too. |
|
||||
| `user_archetypes` | Untouched. Drives inference; retained for flavor post-setup. |
|
||||
| `house_tier`, `house_loan_*` | Untouched. Drives long-rest eligibility. |
|
||||
| `adventure_babysit_log` and babysit fields | Untouched. Babysit independent of D&D. |
|
||||
| `holdem_scores`, `hangman_scores`, `blackjack_scores` | Untouched. Out of D&D scope entirely. |
|
||||
|
||||
**Rollback plan:** drop the new D&D tables and the nullable D&D columns. `adventure_characters_pre_dnd` is the integrity check that nothing was clobbered. If anything in `adventure_characters` differs from the pre-DnD snapshot at rollback time, that's a bug — restore the affected rows from the snapshot.
|
||||
|
||||
---
|
||||
|
||||
## 12. Cross-System Integration
|
||||
|
||||
Substantively unchanged from v1.0, with these additions:
|
||||
|
||||
- **Babysit** is independent of D&D. Stays as-is.
|
||||
- **Forex / lottery / coop dungeon / holdem** are out of D&D scope and unchanged.
|
||||
- **Skill XP from gathering** does **not** feed D&D level. Two distinct progression tracks (skill grind vs. D&D character level) coexist.
|
||||
|
||||
---
|
||||
|
||||
## 13. Commands Reference
|
||||
|
||||
v1.0's table stands, with these additions/clarifications:
|
||||
|
||||
| Command | Note |
|
||||
|---|---|
|
||||
| `!adventure camp` | Renamed from `!adventure rest`. Old name kept as alias for one release. |
|
||||
| `!rest short` / `!rest long` | New D&D rests, gated on `dnd_character` existing. |
|
||||
| `!equip <item>` | **Subsumes** `!adventure equip`. Routes to legacy masterwork-equip path when item is masterwork; otherwise D&D equip. |
|
||||
| `!inventory` | **Extends** `!adventure inventory` with rarity/attunement display. Legacy `!adventure inventory` continues to work. |
|
||||
| `!sheet`, `!stats`, `!level`, `!abilities`, `!use`, `!check`, `!roll`, `!respec`, `!attune`, `!unequip`, `!setup` | All new, no current implementation. |
|
||||
|
||||
---
|
||||
|
||||
## 14. Implementation Phases — revised
|
||||
|
||||
**[REVISED — replaces v1.0 Section 14 in full.]**
|
||||
|
||||
### Phase 1 — Layering proof (smallest viable change)
|
||||
|
||||
Goal: prove D&D layers cleanly on existing data without changing any behavior for existing players.
|
||||
|
||||
- [ ] Schema: add `dnd_character`, `dnd_abilities`, `dnd_resources`, `dnd_combat_state` tables. Add nullable D&D columns to `adventure_equipment` / `adventure_inventory`.
|
||||
- [ ] One-shot snapshot `adventure_characters_pre_dnd` at deploy.
|
||||
- [ ] `combat_level` → D&D level mapping function (read-only).
|
||||
- [ ] `!setup` flow (4-step) with archetype inference.
|
||||
- [ ] `!sheet` rendering — read-only join over existing data + `dnd_character`. No behavior change.
|
||||
- [ ] `pending_setup` gating on D&D-only commands.
|
||||
|
||||
Exit criteria: opted-in player sees correct `!sheet`. Non-opted-in player notices nothing different.
|
||||
|
||||
### Phase 2 — Combat engine + arena conversion (Stage A)
|
||||
|
||||
- [ ] Initiative, attack rolls vs. AC, crit/fumble, damage, conditions, saving throws.
|
||||
- [ ] HP/AC computation on `!setup` and on level-up.
|
||||
- [ ] Arena resolver swap for opted-in players. Legacy resolver kept for non-opted-in.
|
||||
- [ ] `dnd_combat_state` persistence and combat log.
|
||||
|
||||
### Phase 3 — Abilities, resources, leveling
|
||||
|
||||
- [ ] XP tracking (D&D-level XP separate from skill XP).
|
||||
- [ ] Level-up flow with class-specific flavor (new `dnd_flavor_levelup.go`).
|
||||
- [ ] Starter abilities per class.
|
||||
- [ ] `!use`, `!abilities` commands.
|
||||
- [ ] Resource tracking and short/long rest reset.
|
||||
|
||||
### Phase 4 — Equipment expansion + attunement re-use
|
||||
|
||||
- [ ] Equipment slot mapping (Section 7.3).
|
||||
- [ ] Rarity inference for legacy gear at read time.
|
||||
- [ ] `adventure_treasures`-as-attunement (Section 7.4).
|
||||
- [ ] `!equip`, `!unequip`, `!attune`, `!inventory` subsuming legacy commands.
|
||||
- [ ] Thom Krooke shop additions (Common/Uncommon equipment, potions).
|
||||
|
||||
### Phase 5 — Skill checks + NPC integration
|
||||
|
||||
- [ ] Skill check resolver, DC table.
|
||||
- [ ] Wire Thom Krooke (Persuasion), Misty (Insight), Arina (Arcana) using existing buff timestamp columns.
|
||||
- [ ] `!check` command.
|
||||
|
||||
### Phase 6 — Rest system
|
||||
|
||||
- [ ] `!rest short` / `!rest long` with housing gating.
|
||||
- [ ] Inn cost at Thom Krooke.
|
||||
- [ ] Rename `!adventure rest` → `!adventure camp` with alias.
|
||||
|
||||
### Phase 7 — Monsters, rival conversion (Stage B), encounter combat (Stage C)
|
||||
|
||||
- [ ] Starter bestiary (Section 8.2 minimum) in new files.
|
||||
- [ ] Rival RPS → D&D combat swap.
|
||||
- [ ] Encounter-driven combat for new content.
|
||||
- [ ] Cross-system polish (Ranger pet/fishing bonuses on top of existing bonuses).
|
||||
|
||||
---
|
||||
|
||||
## 15. Configuration Constants
|
||||
|
||||
Unchanged from v1.0. Add:
|
||||
|
||||
```go
|
||||
const (
|
||||
DnDLevelFromCombatLevel = true // initial mapping at !setup
|
||||
PendingSetupReminderDays = 7
|
||||
PendingSetupAutoAssignDays = 30
|
||||
LegacyArenaResolverEnabled = true // until 100% of active players opted in
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 16. Out of Scope
|
||||
|
||||
Same as v1.0. Plus:
|
||||
|
||||
- **Forex, lottery, coop dungeon, holdem, blackjack, hangman, tarot, uno** — stay out of D&D.
|
||||
- **Skill grind XP feeding D&D level** — explicitly rejected. Two tracks.
|
||||
- **Coin → gold conversion** — euros stay euros.
|
||||
|
||||
---
|
||||
|
||||
## 17. Open questions (must be resolved before Phase 1 ships)
|
||||
|
||||
1. **Stat generation method** at `!setup`: point-buy (27 points, standard array) or 4d6-drop-lowest? (v1.0 left TBD.)
|
||||
2. **Respec cost / cooldown.** (v1.0 TBD.)
|
||||
3. **Inn cost** for long rest at Thom Krooke. (v1.0 TBD.)
|
||||
4. **`combat_level` post-setup**: does it keep advancing on legacy paths, or freeze at setup time and only `dnd_level` moves forward? Recommend freeze.
|
||||
5. **Subclass content** for L5 prompt. v1.0 defers; need at least placeholder choices to not block the level-up flow.
|
||||
|
||||
---
|
||||
|
||||
*End of v1.1. Differences from v1.0 are tagged **[REVISED]**. Where this document is silent, v1.0 is authoritative. Where they conflict, v1.1 wins for implementation purposes.*
|
||||
@@ -1,386 +0,0 @@
|
||||
# GogoBee D&D Integration — Session Summary
|
||||
|
||||
> **Scope:** End-to-end build of the D&D layer from design through audit cleanup, audit fixes, flavor wiring, branding rebrand to "Adv 2.0", and Phase 8 (equipment & damage math).
|
||||
> **Status:** Deploy-ready. **122 D&D tests** passing, full suite + vet clean, prod-DB integration verified, root build with `-tags goolm` clean.
|
||||
> **Source design:** Eleven design docs at the repo root — see `gogobee_design_index.md` for the canonical list and dependency graph. Phases 1-7 + audit fixes were built from `gogobee_dnd_design_doc.md` v1.0 / `gogobee_dnd_design_doc_v1.1.md` (implementation revision); Phase 8 from `gogobee_equipment_appendix.md`.
|
||||
> **What's next:** Phase 9 — spell system (`gogobee_spell_system.md`). See the auto-loaded memory entry `project_dnd_phase_plan.md` for the full Phase 8-16 roadmap.
|
||||
|
||||
---
|
||||
|
||||
## 1. Design documents produced
|
||||
|
||||
| Document | Purpose |
|
||||
|---|---|
|
||||
| `gogobee_dnd_design_doc.md` (existing v1.0) | Vision document. Untouched. |
|
||||
| `gogobee_dnd_design_doc_v1.1.md` (new) | Implementation revision. Reconciles v1.0 against the actual codebase: real schema, real archetype names, real combat engine. Replaces v1.0's Phase 14 with a smaller-scoped phase plan. Annotated with `[REVISED]` tags everywhere it diverges from v1.0. |
|
||||
| `gogobee_dnd_session_summary.md` (this file) | Session-wide change log. |
|
||||
| `gogobee_design_index.md` | **Canonical map of all 11 design docs** + their dependency graph + reading order by intent. New sessions should read this first. |
|
||||
|
||||
The original design doc treated combat as greenfield. An audit revealed `combat_engine.go`, `combat_bridge.go`, `combat_stats.go`, and `combat_narrative.go` (~3,500 LOC) already existed in production. v1.1 was rewritten around that constraint: the D&D layer would be additive, not a replacement.
|
||||
|
||||
---
|
||||
|
||||
## 2. Phase-by-phase delivery
|
||||
|
||||
### Phase 1 — Layering proof
|
||||
- Schema: `dnd_character`, `dnd_abilities`, `dnd_resources`, `dnd_combat_state`, plus a one-shot `adventure_characters_pre_dnd` snapshot table populated at deploy as a rollback safety net.
|
||||
- Nullable D&D columns added to `adventure_equipment` / `adventure_inventory` (rarity, stat_bonus_json, attuned).
|
||||
- Race/class types and tables (7 races, 5 classes), repository functions, stat math (`abilityModifier`, `computeMaxHP`, `computeAC`).
|
||||
- `!setup` flow with persistent draft state (`pending_setup=1`) — survives bot restarts.
|
||||
- `!sheet` read-only renderer with archetype-driven inference.
|
||||
|
||||
### Phase 2 — d20-vs-AC combat
|
||||
- `CombatStats` extended with `AC` and `AttackBonus`; `CombatEvent` with `Roll` and `RollAgainst`.
|
||||
- `resolvePlayerAttack` and `resolveEnemyAttack` rewritten as d20-vs-AC. Nat 20 = auto-hit + crit, nat 1 = auto-miss tagged "fumble".
|
||||
- `applyDnDPlayerLayer` / `applyDnDArenaMonsterLayer` / `applyDnDDungeonMonsterLayer` populate AC and attack bonuses based on class/level and threat/tier.
|
||||
- `persistDnDHPAfterCombat` writes proportional damage back to the sheet.
|
||||
- **Auto-migration** on first combat: legacy players with no `dnd_character` row get one built from archetype inference + class-tuned standard array. `auto_migrated=1` flag enables free `!setup` rebuild without consuming `!respec` cooldown.
|
||||
- **Legacy combat ripped out**: dual-path branching deleted, `DnDMode` field removed. Single d20 path for all combat.
|
||||
|
||||
### Phase 3 — XP, level-up, class passives
|
||||
- `dndXPTable` cumulative table anchored to v1.0's design values; `dndXPToNextLevel` returns segment cost.
|
||||
- `grantDnDXP` handles cascading level-ups, recomputes HP max, increments current HP by the gain, sends a level-up DM. Caps cleanly at L20.
|
||||
- XP grants on every arena and dungeon combat, with near-death win bonuses.
|
||||
- One class passive per class via `applyClassPassives`: Fighter +5% damage, Rogue auto-crit-first, Mage +1 attack bonus, Cleric +5 HP heal at low HP, Ranger +5% damage and +1 attack bonus.
|
||||
- `!abilities` lists class + race passives. `!sheet` shows XP progress.
|
||||
|
||||
### Round 1 — race passives, freeze, respec, subclass stub
|
||||
- Race passives via `applyRacePassives` and three new `CombatModifiers` fields: Halfling Lucky (reroll first nat 1), Orc Rage (+50% damage on first attack after dropping below 50% HP), Dwarf poison resistance (poison ticks halved).
|
||||
- `combat_level` freeze: once a player has confirmed a D&D character, `checkAdvLevelUp("combat", ...)` becomes a no-op. Skill levels (mining/foraging/fishing) keep advancing independently.
|
||||
- `!respec` command: 5000 euros, 7-day cooldown via `last_respec_at`. Auto-migrated chars use the existing free `!setup` path.
|
||||
- Subclass-L5 placeholder line added to level-up DM when crossing L5.
|
||||
|
||||
### Round 2 — Phase 5 (skill checks + NPC wiring)
|
||||
- 10 skills (Athletics, Acrobatics, Stealth, Arcana, Investigation, Perception, Insight, Persuasion, Intimidation, Deception) with correct stat mapping.
|
||||
- DC table constants matching D&D 5e (Trivial 5 → Impossible 30).
|
||||
- `performSkillCheck`: d20 + ability modifier + race bonus, with nat 20/1 auto-results.
|
||||
- Race skill bonuses: Half-Elf +1 to all skills, Tiefling +2 on CHA-based.
|
||||
- `!check <skill> [dc]` command.
|
||||
- NPC wiring: passing Insight DC 12 refunds Misty donation; passing Arcana DC 14 refunds Arina investment; passing Persuasion DC 15 grants 10% session shop discount. Silent upside for opted-in players, no UX change for legacy.
|
||||
|
||||
### Round 3 — Phase 4 (equipment slot mapping + rarity)
|
||||
- Read-time slot mapping: legacy 5 slots → D&D 10 slots (`mapLegacySlot`).
|
||||
- Rarity inference from tier + masterwork + arena tier (`inferRarity`): Common → Legendary.
|
||||
- `!sheet` renders equipment with rarity icons in D&D slot order.
|
||||
- Full `!equip`/`!unequip`/`!attune` deferred — nothing to populate the new slots yet (legs, hands, rings, amulet) until a future loot pass.
|
||||
|
||||
### Round 4 — Phase 6 (rest system)
|
||||
- `!rest short`: 1h cooldown, 1d6+CON HP recovery (doubled at L5+ per design doc), no daily-action cost.
|
||||
- `!rest long`: 24h cooldown, full HP, requires housing (any tier) or pays Thom Krooke inn (200 euros).
|
||||
- New columns `last_short_rest_at`, `last_long_rest_at` on `dnd_character`.
|
||||
- Long rest also refreshes all class resources via `refreshAllResources`.
|
||||
|
||||
### Round 5 — Phase 7 partial (bestiary)
|
||||
- Starter bestiary in `dnd_bestiary.go`: Goblin, Skeleton, Orc Grunt, Troll, Wyvern, Ancient Dragon. Each with HP, AC, attack stats, optional ability, XP value.
|
||||
- `toCombatStats()` helper converts a template to the engine's stat shape.
|
||||
- `dndBestiaryByCR(maxCR)` for procedural CR-appropriate selection.
|
||||
- **Rival RPS conversion deliberately deferred** — the existing rival mini-game is narratively rich and works; the user confirmed leaving it alone.
|
||||
|
||||
### Round 6 — active abilities + resources
|
||||
- Pre-arm model (combat is one-shot, so `!use mid-fight` doesn't fit): `!arm <ability>` consumes a resource immediately and primes the ability for the next combat. `applyArmedAbility` fires it via existing `CombatModifiers` fields and clears the flag.
|
||||
- Three starter active abilities: Fighter Second Wind, Mage Magic Missile, Cleric Healing Word. Rogue Sneak Attack and Ranger Hunter's Mark stay passive.
|
||||
- Resource pools per class (`stamina`, `focus`, `spell_slot`, `favor`) initialized at setup confirm and on auto-migration. Refreshed on long rest.
|
||||
|
||||
### "Plug the holes" — quality-of-life additions
|
||||
- **`!roll <dice>`** with full NdN+M notation (`2d6+3`, `d20`, `4d6-1`). Caps at 100 dice × 1000 sides. Single-d20 highlights nat 20 / nat 1.
|
||||
- **`!stats`** — quick ability scores + modifiers + proficiency + AC view.
|
||||
- **`!level`** — level + XP progress with percent-to-next.
|
||||
- **Combat HP scaling**: wounded D&D players (sheet HP < max) fight with proportionally reduced legacy combat MaxHP, floor 25%. The rest system finally has gameplay teeth.
|
||||
- **Roll summary line**: every fight ends with `🎲 d20 — N/M hit (X crits, Y fumbles). Best: nat 20!` injected into arena and dungeon outcome messages without touching protected flavor files.
|
||||
|
||||
### Onboarding DM
|
||||
- One-shot welcome DM for legacy players (`combat_level >= 2`) on first auto-migration. Includes their actual level mapping (`Your previous level X is now D&D level Y`).
|
||||
- Triggered via `freshMigrate` bool returned from `ensureDnDCharacterForCombat`; only fires the very first time a row is created.
|
||||
- The full text the user wrote is in `dndOnboardingText` — TwinBee, Pinkerton agent, divide-by-five, the works.
|
||||
|
||||
---
|
||||
|
||||
## 3. Audit + remediation
|
||||
|
||||
After all features shipped, four parallel agents audited the D&D layer:
|
||||
|
||||
1. **Security & player-exploitability**
|
||||
2. **Concurrency & data integrity**
|
||||
3. **Code quality & correctness**
|
||||
4. **Test coverage gaps**
|
||||
|
||||
Findings consolidated and de-duplicated into 9 actionable items (A through I). All 9 fixed.
|
||||
|
||||
| ID | Issue | Fix |
|
||||
|---|---|---|
|
||||
| **A** | No per-user lock around D&D handlers. Read-modify-write on `dnd_character` could race. | Acquired existing `advUserLock` at entry of every top-level D&D mutating command. Internal helpers (called from already-locked combat paths) intentionally stay lock-free. |
|
||||
| **B** | `!respec` debited euros before saving the wipe. Save failure → euros lost, character intact. | Reordered: balance pre-check → save → resource wipe → debit. Save failure leaves all state intact; debit failure (rare race) grants a free respec rather than a destructive debit. |
|
||||
| **C** | `!arm` spent resource before saving the armed flag. Save failure → resource wasted. | Reordered: save first → spend. On spend failure, revert armed flag and surface error. |
|
||||
| **D** | Orc Rage threshold used `HP < MaxHP/2` integer division — drifted on odd MaxHP. | Replaced with `HP*2 < MaxHP`. Exact 50% threshold regardless of parity. |
|
||||
| **E** | Respec didn't wipe old class's resource pool (Fighter→Mage left stale `stamina` rows). | `DELETE FROM dnd_resources WHERE user_id = ?` in the respec wipe path before the new class initializes via `initResources`. |
|
||||
| **F** | Onboarding DM re-fired if a player canceled `!setup` mid-draft and then ran combat. | New `onboarding_sent` column on `dnd_character`, set on first successful send, never reset (survives respec, draft cancel, anything). |
|
||||
| **G** | Persuasion shop discount session had no expiry. Player could chain across all purchases. | 30-minute TTL from session start (`dndPersuasionDiscountTTL`). Both pricing and announcement honor the expiry. |
|
||||
| **H** | NPC refund hooks (Misty Insight / Arina Arcana) did separate Load + skill check + Credit. Architecturally fragile. | Covered by Fix A — encounter handlers already hold `advUserLock`, so the refund's `LoadDnDCharacter` is safe inside that lock. No code change needed. |
|
||||
| **I** | `applyDnDHPScaling` lacked a post-scale `min(scaled, MaxHP)` clamp. Currently safe but fragile. | Added the bounds check defensively. |
|
||||
|
||||
10 new audit-fix tests added; all pass.
|
||||
|
||||
---
|
||||
|
||||
## 4. New files (production)
|
||||
|
||||
```
|
||||
internal/plugin/dnd.go — types, repository, stat math
|
||||
internal/plugin/dnd_setup.go — !setup flow, !respec
|
||||
internal/plugin/dnd_sheet.go — !sheet, !abilities renderer
|
||||
internal/plugin/dnd_combat.go — auto-migration, HP persistence, HP scaling, roll summary
|
||||
internal/plugin/dnd_passives.go — class + race passives
|
||||
internal/plugin/dnd_xp.go — XP curve, grant, level-up DM
|
||||
internal/plugin/dnd_skills.go — skill checks, !check, NPC refund hooks
|
||||
internal/plugin/dnd_equipment.go — slot mapping, rarity inference
|
||||
internal/plugin/dnd_rest.go — !rest short / long
|
||||
internal/plugin/dnd_abilities.go — pre-arm model, resources
|
||||
internal/plugin/dnd_bestiary.go — starter monster templates
|
||||
internal/plugin/dnd_misc_cmds.go — !roll, !stats, !level
|
||||
internal/plugin/dnd_onboarding.go — legacy-player welcome DM
|
||||
```
|
||||
|
||||
13 new production files, all additive.
|
||||
|
||||
## 5. Modified files
|
||||
|
||||
```
|
||||
internal/db/db.go — schema additions, snapshot logic
|
||||
internal/plugin/combat_engine.go — d20 hit resolution (legacy path replaced),
|
||||
race-passive fields and triggers
|
||||
internal/plugin/combat_bridge.go — auto-migrate hook, D&D layer wiring,
|
||||
class+race passive application,
|
||||
armed-ability firing, HP persistence,
|
||||
XP grant, roll summary
|
||||
internal/plugin/adventure.go — D&D command routing in OnMessage,
|
||||
registry entries in Commands(),
|
||||
roll summary appended to dungeon output
|
||||
internal/plugin/adventure_arena.go — roll summary appended to win/death output
|
||||
internal/plugin/adventure_character.go — combat_level freeze for D&D players
|
||||
internal/plugin/adventure_npcs.go — Misty/Arina skill-check refund hooks
|
||||
internal/plugin/adventure_shop.go — Persuasion discount session,
|
||||
price-factor applied at every Debit site,
|
||||
30-minute TTL
|
||||
internal/plugin/plugin.go — Base.SendDM made nil-Client-safe (test support)
|
||||
```
|
||||
|
||||
## 6. Test files
|
||||
|
||||
```
|
||||
internal/db/proddb_integration_test.go — full migration on real prod DB copy
|
||||
internal/plugin/dnd_test.go — types, math, parsing
|
||||
internal/plugin/dnd_combat_test.go — d20 path, monster layers, hit-rate stats
|
||||
internal/plugin/dnd_round1_test.go — race passives, combat_level freeze, respec format
|
||||
internal/plugin/dnd_skills_test.go — DC table, skill check math
|
||||
internal/plugin/dnd_equipment_test.go — slot mapping, rarity inference
|
||||
internal/plugin/dnd_rest_test.go — short/long rest mechanics, housing gating
|
||||
internal/plugin/dnd_abilities_test.go — resource pool, arm/spend, applyArmed
|
||||
internal/plugin/dnd_bestiary_test.go — starter monsters well-formed
|
||||
internal/plugin/dnd_xp_test.go — curve, grant, level-up cascade, L20 cap
|
||||
internal/plugin/dnd_onboarding_test.go — message format, threshold, no-panic
|
||||
internal/plugin/dnd_proddb_integration_test.go — real prod players auto-migrate cleanly
|
||||
internal/plugin/dnd_plugs_test.go — HP scaling, roll summary, dice parser
|
||||
internal/plugin/dnd_audit_fixes_test.go — all 9 audit findings covered
|
||||
```
|
||||
|
||||
**Total: 90 D&D-layer tests** + 1 prod-DB-migration integration test in `internal/db`.
|
||||
|
||||
## 7. Schema changes
|
||||
|
||||
All additive. No drops, no renames.
|
||||
|
||||
### New tables
|
||||
```sql
|
||||
dnd_character -- per-player D&D state (race, class, stats, HP, XP, flags)
|
||||
dnd_abilities -- per-ability uses-remaining (reserved for Phase 7+)
|
||||
dnd_resources -- per-class resource pools (stamina/focus/mana/favor)
|
||||
dnd_combat_state -- active encounter state (reserved)
|
||||
adventure_characters_pre_dnd -- one-shot rollback snapshot
|
||||
```
|
||||
|
||||
### New columns on `adventure_equipment` / `adventure_inventory`
|
||||
- `dnd_rarity TEXT NOT NULL DEFAULT ''`
|
||||
- `dnd_stat_bonus_json TEXT NOT NULL DEFAULT ''`
|
||||
- `dnd_attuned INTEGER NOT NULL DEFAULT 0` (equipment only)
|
||||
|
||||
### New columns on `dnd_character`
|
||||
Added incrementally across phases:
|
||||
- `auto_migrated`, `armed_ability`, `onboarding_sent`
|
||||
- `last_short_rest_at`, `last_long_rest_at`
|
||||
|
||||
---
|
||||
|
||||
## 8. New player-facing commands
|
||||
|
||||
| Command | What it does |
|
||||
|---|---|
|
||||
| `!setup` | Begin or continue D&D character creation (race / class / stats / confirm) |
|
||||
| `!setup race <name>` | Pick race |
|
||||
| `!setup class <name>` | Pick class |
|
||||
| `!setup stats <STR> <DEX> <CON> <INT> <WIS> <CHA>` | Assign standard array {15,14,13,12,10,8} |
|
||||
| `!setup confirm` | Finalize |
|
||||
| `!setup cancel` | Scrap draft |
|
||||
| `!sheet` | Full character sheet with equipment, treasures, legacy progress |
|
||||
| `!stats` | Ability scores + modifiers + proficiency + AC |
|
||||
| `!level` | Current level + XP progress |
|
||||
| `!abilities` | Class + race passives + active abilities + resource pool |
|
||||
| `!arm <ability>` | Pre-arm an active ability for next combat |
|
||||
| `!check <skill> [dc]` | Roll a skill check |
|
||||
| `!rest short` | Short rest (1h cooldown, partial heal) |
|
||||
| `!rest long` | Long rest (24h cooldown, full heal, requires housing or inn) |
|
||||
| `!respec` | Wipe and rebuild character (5000 euros, 7-day cooldown) |
|
||||
| `!roll <dice>` | Roll arbitrary dice (NdN+M notation) |
|
||||
|
||||
## 9. Player-visible behavior changes
|
||||
|
||||
- Existing players auto-migrate to a sensible inferred sheet on their next combat — no setup required, no progress lost. They get a one-shot welcome DM with their actual level mapping.
|
||||
- Combat resolves with d20 + attack bonus vs AC. Every fight ends with a roll summary line.
|
||||
- Class identity comes through every fight via passives (Fighter +damage, Rogue first-hit auto-crit, Mage attack bonus, Cleric low-HP heal, Ranger +damage and attack).
|
||||
- Race traits matter: Halfling rerolls one nat 1 per fight, Orc rages at <50% HP, Dwarf takes half poison damage, Half-Elf and Tiefling get skill check bonuses.
|
||||
- HP carries between fights. A wounded player who skips rest fights at reduced max HP.
|
||||
- Levels advance based on combat XP. Skill XP (mining/foraging/fishing) advances independently and unaffected.
|
||||
- Skill checks unlock NPC bonuses: Insight at Misty refunds, Arcana at Arina refunds, Persuasion at the shop grants 10% off for 30 minutes.
|
||||
|
||||
## 10. Level mapping (existing prod players)
|
||||
|
||||
Legacy `combat_level` mapped to D&D level via `dndLevelFromCombatLevel = clamp(1, combat_level/5, 20)`:
|
||||
|
||||
| Player | Legacy | D&D | Auto-built |
|
||||
|---|---|---|---|
|
||||
| holymachina | L49 | L9 | Dwarf Fighter |
|
||||
| prosolis | L28 | L5 | Human Rogue |
|
||||
| quack | L24 | L4 | Dwarf Fighter |
|
||||
| nonk | L20 | L4 | Human Rogue |
|
||||
|
||||
Verified end-to-end against a copy of the prod database in `data/gogobee.db`.
|
||||
|
||||
## 11. What was deliberately deferred or pushed back on
|
||||
|
||||
- **Rival RPS → D&D combat**: confirmed by user to leave alone. The existing mini-game is narratively rich and works.
|
||||
- **Equipment expansion (`!equip`/`!unequip` for new D&D slots)**: nothing to fill rings/amulet/legs/hands until shop or loot expansion. Rendering in `!sheet` works fine via the read-time mapping.
|
||||
- **Active abilities for Rogue and Ranger**: their passives are strong; no actives needed yet.
|
||||
- **Subclass mechanics at L5**: placeholder DM only; full content design pending.
|
||||
- **D&D-specific death mechanic**: legacy `Alive`/`DeadUntil` retained. Sheet HP at 0 means "fight at 25% on next combat, rest to recover" — graceful via Fix #2.
|
||||
- **Closer 5e fidelity (weapon damage dice, saving throws, full spell lists, action economy)**: per user direction, the d20-flavored adventure feel is the intended ceiling. Approachable beats faithful for a chat bot.
|
||||
- **Dead `DodgeRate`/`CritRate` field-population code**: cosmetic; not worth regression risk.
|
||||
- **Per-class short-vs-long rest split for resources**: all resources currently refresh on long rest only. Cheap follow-up if desired.
|
||||
|
||||
## 11.5 Audit fixes (post-Phase-7)
|
||||
|
||||
After all features shipped, four parallel audit agents reviewed the D&D layer. Findings consolidated and de-duplicated into 9 actionable items (A-I), all addressed:
|
||||
|
||||
- **A** — Per-user lock on D&D handlers (reuses existing `advUserLock`). Prevents double-arm, double-respec, level-up clobbers.
|
||||
- **B** — `!respec` save-then-debit ordering. Save failure no longer destroys euros.
|
||||
- **C** — `!arm` save-then-spend ordering with revert on failure.
|
||||
- **D** — Orc Rage threshold off-by-one (`HP*2 < MaxHP` instead of `HP < MaxHP/2`).
|
||||
- **E** — Resource pool wiped on respec (Fighter→Mage no longer leaves stale `stamina` rows).
|
||||
- **F** — `onboarding_sent` column for one-shot welcome DM dedup across draft cancel/respec/etc.
|
||||
- **G** — Persuasion shop discount expires after 30 minutes.
|
||||
- **H** — NPC refund atomicity (covered by Fix A).
|
||||
- **I** — `applyDnDHPScaling` post-clamp.
|
||||
|
||||
10 audit-fix tests added.
|
||||
|
||||
## 11.6 Flavor wiring (post-audit)
|
||||
|
||||
Five `twinbee_*_flavor.go` files were sitting in the repo root with conflicting `package flavor` declarations — never compiled, never wired. Moved to `internal/flavor/`, fixed one missing-comma syntax error, and wired the player-visible pools that mapped to existing D&D-layer features:
|
||||
|
||||
| Trigger | Pool | Where it surfaces |
|
||||
|---|---|---|
|
||||
| Combat starts (arena/dungeon) | `flavor.CombatStart` | Prepended to first phase message |
|
||||
| Player wins (T1-T4 round, dungeon) | `flavor.CombatVictory` | Italicized in finalMessage |
|
||||
| Player wins arena T5 round | `flavor.BossDeath` | Same slot, boss-specific |
|
||||
| Player dies | `flavor.PlayerDeath` | Appended to death-output |
|
||||
| Any nat 20 | `flavor.Nat20` | Roll summary, once per fight |
|
||||
| Any nat 1 (no nat 20) | `flavor.Nat1` | Same slot |
|
||||
| Level-up DM | `flavor.LevelUp` | Italicized prelude after banner |
|
||||
| `!rest short` | `flavor.RestShort` | Appended |
|
||||
| `!rest long` (housing) | `flavor.HomeLongRest` | Appended; falls back to `RestLong` |
|
||||
| Misty encounter open | `MistyGreeting` ∪ legacy | ~2× variety |
|
||||
| Arina encounter open | `ArinaGreeting` ∪ legacy | Same |
|
||||
| Misty refund pass/fail | `MistyInsightSuccess` / `MistySkillFail` | Italicized |
|
||||
| Arina refund pass/fail | `ArinaArcanaSuccess` / `ArinaSkillFail` | Italicized |
|
||||
| Onboarding DM | `flavor.ExpeditionStart` | Random prelude |
|
||||
|
||||
Pools deferred to legacy-system migration (harvest events, housing announcements, scheduler tickers, Pete bot) and pools without features (quests, expedition system, traps, save throws, idle/lore chatback) remain unwired pending later phases.
|
||||
|
||||
## 11.7 Branding rebrand: D&D → Adv 2.0 (player-facing only)
|
||||
|
||||
Player-visible strings rebranded from "D&D" to "Adv 2.0":
|
||||
- Command descriptions in `Commands()` registry (10 commands)
|
||||
- `!setup` flow headers
|
||||
- `!sheet` and `!rest` error messages
|
||||
- Onboarding DM literal level-mapping line
|
||||
- The deliberate "Dungeons & Drag-" / "d20 System" gag preserved verbatim (it's the joke about being legally distinct)
|
||||
|
||||
Internal type names, function names, file names, schema, and code comments still say "D&D" — accurate technical description, no risk to durable state. Full rationale in conversation history.
|
||||
|
||||
## 11.8 Phase 8 — Equipment & damage math
|
||||
|
||||
Built per `gogobee_equipment_appendix.md` (354 lines).
|
||||
|
||||
**`dnd_equipment_profiles.go` (new):**
|
||||
- 36 weapons from appendix §2-§3 (10 simple melee, 4 simple ranged, 18 martial melee, 4 martial ranged) with damage dice, types, properties, versatile alt-dies
|
||||
- 13 armors from appendix §5 (3 light, 5 medium, 4 heavy, 1 shield) with base AC, DEX caps, STR requirements, stealth flags
|
||||
- `dndClassWeaponProficiency` and `dndClassArmorProficiency` per appendix §9 affinity matrix (Rogue's restricted martial list hardcoded)
|
||||
- `rollWeaponDamage(weapon, abilityMod, twoHanded)` — real dice roll honoring versatile mode and magic bonus
|
||||
- `computeArmorAC(armor, shield, dexMod)` — exact appendix `ComputeAC` semantics
|
||||
- Legacy gear synthesis: `synthesizeWeaponProfile` / `synthesizeArmorProfile` / `synthesizeShield` map existing `AdvEquipment` rows to D&D profiles by tier+name keyword. Masterwork promotes; tier 6+ adds magic bonus up to +3.
|
||||
|
||||
**`combat_engine.go`:**
|
||||
- `CombatStats` extended with `Weapon`, `AbilityModForDamage`, `WeaponProficient`, `TwoHandedMode` fields. Zero values = backward-compatible.
|
||||
- `resolvePlayerAttack` branches: when `Stats.Weapon != nil`, rolls weapon dice; when nil, legacy `calcDamage`. Class proficiency penalty (-4 attack) at hit-check time.
|
||||
|
||||
**`dnd_combat.go`:**
|
||||
- New `applyDnDEquipmentLayer(stats, c, equip)` — synthesizes profiles, populates the new fields, recomputes AC. Two-handed weapons forbid shields.
|
||||
- `pickWeaponAbilityMod(weapon, c)` — STR for melee non-finesse, DEX for ranged, finesse picks the higher.
|
||||
|
||||
**`combat_bridge.go`:**
|
||||
- Both arena and dungeon paths call `applyDnDEquipmentLayer` after `applyDnDPlayerLayer`. Equipment-derived AC overrides the placeholder class-armor-floor.
|
||||
|
||||
**24 new tests** covering weapon registry coverage, armor appendix values, ComputeAC math (unarmored, light, medium-capped, heavy, magic bonus), weapon damage roll bounds, versatile two-handed mode, damage floor, class proficiency matrices, legacy gear synthesis (tier mapping, masterwork promotion, high-tier magic), shield name matching, ability mod selection (STR/DEX/finesse), end-to-end equipment layer.
|
||||
|
||||
**Player-visible balance change for prod players:**
|
||||
|
||||
| User | Class | Synthesized weapon | Damage roll |
|
||||
|---|---|---|---|
|
||||
| holymachina | Dwarf Fighter L9 | T6+ Greatsword w/ +1 magic | 2d6 + STR mod + 1 |
|
||||
| prosolis | Human Rogue L5 | T3-5 Longsword or Shortbow | 1d8 + best mod |
|
||||
| quack | Dwarf Fighter L4 | T3-5 weapon | dice + STR mod |
|
||||
| nonk | Human Rogue L4 | T3-5 weapon | dice + best mod |
|
||||
|
||||
Plus AC recomputed from real armor profiles.
|
||||
|
||||
**Deferred to Phase 8b:** magic item slots (rings/amulet), named magic weapons with special properties (Flame Tongue's +2d6 fire, etc.), `!equip`/`!unequip`/`!attune` commands, loot rarity flavor wiring, ammunition tracking, heavy armor STR-requirement penalty.
|
||||
|
||||
## 12. Final state (post-Phase 8)
|
||||
|
||||
- Build clean across `internal/...`
|
||||
- Root build clean with `-tags goolm`
|
||||
- `go vet` clean across `internal/...`
|
||||
- **122 D&D-layer tests + 1 prod-DB migration integration test passing**
|
||||
- All 9 audit findings closed
|
||||
- Zero modifications to protected `internal/flavor/twinbee_*_flavor.go` content
|
||||
- Snapshot rollback table populated; rollback path documented in v1.1 §11.4
|
||||
- Onboarding flow handles all four prod players cleanly with verified output (now firing on `!setup`, `!check`, `!stats`, `!level`, `!rest`, `!arm` first-touch in addition to combat auto-migration)
|
||||
- Phase 8 weapon dice + armor AC active for all four prod players on their next combat
|
||||
|
||||
## 13. Next phase: Phase 9 — Spell System
|
||||
|
||||
Per the auto-loaded memory entry `project_dnd_phase_plan.md` and `gogobee_design_index.md`, Phase 9 implements `gogobee_spell_system.md`: 79 spells, slots, concentration, `!cast` command, spell save DCs. Mage/Cleric/Ranger become genuinely playable distinctly.
|
||||
|
||||
Architecture commitment from earlier this session: **Path C hybrid combat** — one-shot for arena/random encounters, turn-based for boss fights only. Phase 9 should preserve approachability outside boss fights; spell mechanics in non-boss combat must fit the pre-arm pattern (consistent with current `!arm` for active abilities).
|
||||
|
||||
### Kickoff for next session
|
||||
|
||||
```
|
||||
Read gogobee_design_index.md and gogobee_spell_system.md cold. Then open
|
||||
gogobee_dnd_session_summary.md to see what's already shipped. Plan Phase 9
|
||||
(spell system) per the recommended order in the auto-loaded memory entry.
|
||||
Show me a tight phase plan before writing any code — what spells, what slots,
|
||||
what the !cast command flow looks like, how concentration interacts with the
|
||||
existing one-shot combat (Path C hybrid is locked in). Then once I confirm
|
||||
scope, build it.
|
||||
```
|
||||
|
||||
The codebase is deploy-ready. Existing players will see the new system on their next interaction — auto-migrated, onboarded, and never blocked from gameplay regardless of setup state. Phase 9-16 each add depth in a focused session.
|
||||
@@ -1,724 +0,0 @@
|
||||
# GogoBee — Dungeon Zones & TwinBee GM System
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`, `gogobee_equipment_appendix.md`
|
||||
> **Version:** 1.0
|
||||
> **Status:** Draft
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
All existing `*_flavor.go` / `*_flavor.txt` files and any file with the header
|
||||
`DO NOT REWRITE, SUMMARIZE, OR SHORTEN ANY ENTRIES IN THIS FILE` are off-limits.
|
||||
New zone flavor text is **additive only** — new files, never edits to existing ones.
|
||||
|
||||
---
|
||||
|
||||
## 1. Design Philosophy
|
||||
|
||||
### TwinBee as GM
|
||||
|
||||
TwinBee is not a passive dice roller. TwinBee is the **Dungeon Master** — a character with a distinct voice, personality, and narrative presence. Every dungeon interaction passes through TwinBee's narration layer. TwinBee:
|
||||
|
||||
- Describes rooms, atmosphere, and transitions in prose
|
||||
- Reacts to dice outcomes with flavor (not just "you hit for 8 damage")
|
||||
- Tracks dungeon state (which rooms cleared, what was looted, boss alive/dead)
|
||||
- Warns, misleads, celebrates, and mourns alongside the player
|
||||
- Has a **GM Mood** that shifts based on community activity and player choices (see Section 3)
|
||||
|
||||
TwinBee speaks in a consistent narrative voice — dramatic but not overwrought, with a dry wit. Think a seasoned DM who's seen it all but still gets excited when someone rolls a nat 20.
|
||||
|
||||
### Zone Design Principles
|
||||
|
||||
- Every zone has a **biome identity**: visual language, enemy faction, lore, and environmental hazards that are internally consistent.
|
||||
- Zones are **tiered by CR (Challenge Rating)** and gated by player level.
|
||||
- Each zone has **5 room types**: Entry, Exploration, Trap, Elite, and Boss.
|
||||
- Rooms are procedurally sequenced but not fully random — the boss room is always last.
|
||||
- Zones have **flavor text files** (`zone_<name>_flavor.go`) that must be populated before the zone ships. No zone launches with placeholder text.
|
||||
- Loot tables are zone-specific. A dungeon shouldn't drop jungle gear.
|
||||
|
||||
---
|
||||
|
||||
## 2. Zone Tier Overview
|
||||
|
||||
| Tier | Level Range | CR Range | Zones |
|
||||
|---|---|---|---|
|
||||
| 1 — Beginner | 1–3 | 1/8–1 | Goblin Warrens, The Crypt |
|
||||
| 2 — Apprentice | 3–5 | 1–3 | Forest of Shadows, Sunken Temple |
|
||||
| 3 — Journeyman | 5–8 | 3–6 | Haunted Manor, The Underforgе |
|
||||
| 4 — Veteran | 8–12 | 6–10 | The Underdark, Feywild Crossing |
|
||||
| 5 — Legendary | 12–20 | 10–20 | Dragon's Lair, The Abyss Portal |
|
||||
|
||||
Players cannot enter a zone more than **2 tiers above** their current level. TwinBee delivers an in-character warning if they try.
|
||||
|
||||
---
|
||||
|
||||
## 3. TwinBee GM System
|
||||
|
||||
### 3.1 Message Format
|
||||
|
||||
TwinBee GM messages are visually distinct from standard bot output. They use a consistent prefix and narrative tone:
|
||||
|
||||
```
|
||||
🎭 TwinBee: The passage ahead smells of mildew and old iron.
|
||||
Torchlight catches something glinting in the corner —
|
||||
but so does something else.
|
||||
|
||||
What do you do?
|
||||
[!advance] [!search] [!retreat]
|
||||
```
|
||||
|
||||
Regular bot confirmations (stat updates, loot drops, XP gains) use standard output format. Only narrative moments go through the TwinBee GM voice.
|
||||
|
||||
### 3.2 GM Mood System
|
||||
|
||||
TwinBee's narration tone shifts based on a **Mood Score** (0–100, default 50):
|
||||
|
||||
| Mood Range | State | Narration Flavor |
|
||||
|---|---|---|
|
||||
| 80–100 | Elated | Generous descriptions, hints, bonus lore drops |
|
||||
| 60–79 | Engaged | Standard D&D narration, balanced challenge |
|
||||
| 40–59 | Neutral | By-the-book, efficient descriptions |
|
||||
| 20–39 | Brooding | Ominous, shorter descriptions, harder encounters |
|
||||
| 0–19 | Wrathful | Cryptic, no hints, elite enemy buffs, rare loot suppressed |
|
||||
|
||||
**Mood modifiers:**
|
||||
|
||||
| Event | Mood Change |
|
||||
|---|---|
|
||||
| Player completes a zone | +10 |
|
||||
| Player dies | -5 |
|
||||
| Natural 20 rolled | +3 |
|
||||
| Natural 1 rolled | -2 |
|
||||
| Community milestone (Lemmy/Matrix activity) | +15 |
|
||||
| Long server downtime / maintenance | -20 |
|
||||
| Player uses `!taunt` command vs. TwinBee | -10 (flavor only) |
|
||||
| Player sends a `!compliment` to TwinBee | +5 |
|
||||
|
||||
Mood decays toward 50 at a rate of ±2 per hour (passive rebalancing).
|
||||
|
||||
### 3.3 TwinBee Voice Guidelines
|
||||
|
||||
These must be followed in all flavor text files for TwinBee GM lines:
|
||||
|
||||
- **Never use second person for room descriptions.** Not "You see a door" — "A door stands at the far end."
|
||||
- **Always use second person for outcomes.** "You drive the blade home. The goblin crumples."
|
||||
- **Nat 20 lines** must feel cinematic. One memorable sentence.
|
||||
- **Nat 1 lines** must be funny but not cruel. Self-deprecating, not punishing.
|
||||
- **Boss entry lines** get 3–4 sentences minimum. This is a moment.
|
||||
- **Death lines** are respectful. No mockery. TwinBee honors the fallen.
|
||||
|
||||
### 3.4 TwinBee Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!advance` | Move to the next room |
|
||||
| `!search` | Search current room for hidden items/traps (Perception check) |
|
||||
| `!retreat` | Return to previous room (no encounter re-trigger) |
|
||||
| `!flee` | Attempt to escape combat (DEX check vs. enemy) |
|
||||
| `!lore` | Ask TwinBee for zone flavor/history (WIS or INT check for bonus detail) |
|
||||
| `!taunt` | Taunt TwinBee (mood penalty, funny response) |
|
||||
| `!compliment` | Compliment TwinBee (mood bonus, modest response) |
|
||||
| `!status` | TwinBee reports current room, cleared rooms, HP, conditions |
|
||||
| `!map` | Show dungeon progress as ASCII room map |
|
||||
|
||||
---
|
||||
|
||||
## 4. Dungeon Structure
|
||||
|
||||
### 4.1 Room Sequence
|
||||
|
||||
Every dungeon run follows this structure:
|
||||
|
||||
```
|
||||
[Entry Room]
|
||||
↓
|
||||
[Exploration Room x1–2]
|
||||
↓
|
||||
[Trap Room]
|
||||
↓
|
||||
[Exploration Room x1–2]
|
||||
↓
|
||||
[Elite Room]
|
||||
↓
|
||||
[Boss Room]
|
||||
```
|
||||
|
||||
Total rooms per run: **6–8**. Room count scales slightly with zone tier.
|
||||
|
||||
### 4.2 Room Types
|
||||
|
||||
**Entry Room**
|
||||
- No combat. Atmospheric description only.
|
||||
- TwinBee sets the scene. Mood-influenced prose.
|
||||
- May contain a passive Perception check hint (DC 10) about what's ahead.
|
||||
|
||||
**Exploration Room**
|
||||
- 1–2 standard enemies from the zone roster.
|
||||
- May contain a search opportunity after combat (hidden loot, lore, or trap trigger).
|
||||
- Loot drop on enemy defeat.
|
||||
|
||||
**Trap Room**
|
||||
- No enemies. Environmental hazard.
|
||||
- Player is warned by TwinBee (vaguely). Perception/Investigation check to detect.
|
||||
- Failure triggers the trap effect.
|
||||
- Success allows disarm (Thieves' Tools for Rogues; Athletics/DEX for others).
|
||||
|
||||
**Elite Room**
|
||||
- 1 elite enemy (higher CR than standard zone enemies) or a named mini-boss.
|
||||
- Guaranteed uncommon loot drop.
|
||||
- TwinBee delivers a distinct entry description.
|
||||
|
||||
**Boss Room**
|
||||
- 1 zone boss. Unique stat block, 2+ abilities, multi-phase if legendary tier.
|
||||
- Guaranteed rare+ loot drop.
|
||||
- Zone completion XP bonus on kill.
|
||||
- TwinBee delivers a full boss introduction scene.
|
||||
- On death: TwinBee delivers a zone-closing narration line.
|
||||
|
||||
### 4.3 Dungeon State Persistence
|
||||
|
||||
```go
|
||||
type DungeonRun struct {
|
||||
RunID string `json:"run_id"`
|
||||
PlayerID string `json:"player_id"`
|
||||
ZoneID string `json:"zone_id"`
|
||||
CurrentRoom int `json:"current_room"`
|
||||
TotalRooms int `json:"total_rooms"`
|
||||
RoomsCleared []int `json:"rooms_cleared"`
|
||||
BossDefeated bool `json:"boss_defeated"`
|
||||
LootCollected []string `json:"loot_collected"` // item IDs
|
||||
DMMood int `json:"gm_mood"`
|
||||
StartedAt time.Time `json:"started_at"`
|
||||
CompletedAt *time.Time `json:"completed_at"`
|
||||
Abandoned bool `json:"abandoned"`
|
||||
}
|
||||
```
|
||||
|
||||
A dungeon run persists until: boss defeated, player dies, or player uses `!abandon`. Runs cannot be paused indefinitely — a 24-hour inactivity timer auto-abandons with no XP penalty but no loot.
|
||||
|
||||
---
|
||||
|
||||
## 5. Zone Specifications
|
||||
|
||||
---
|
||||
|
||||
### Zone 01 — Goblin Warrens
|
||||
**Tier:** 1 | **Level Range:** 1–3 | **CR Range:** 1/8–1
|
||||
|
||||
> *A network of fetid tunnels burrowed beneath the Merchant's Road. The smell arrives before the sounds — smoke, rot, and something worse. TwinBee advises keeping one hand on your blade.*
|
||||
|
||||
**Atmosphere:** Low ceilings, torchlight, crude traps, cackling in the dark.
|
||||
**Faction:** Goblins, Hobgoblins
|
||||
**Flavor File:** `zone_goblin_warrens_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Goblin Sneak | 1/4 | 7 | 13 | Nimble Escape; pack tactics (+1d4 if ally adjacent) |
|
||||
| Goblin Archer | 1/4 | 7 | 13 | Ranged only; Scurry (disengage after attack) |
|
||||
| Hobgoblin Grunt | 1/2 | 11 | 18 | Martial Advantage (pack tactics variant); formation bonus |
|
||||
| Worg | 1/2 | 26 | 13 | Knock Prone on hit (STR DC 13); Goblin rider option |
|
||||
| Goblin Shaman | 1 | 22 | 11 | Casts Burning Hands (2d6 fire, DEX DC 11); Healing Word on allies |
|
||||
| Hobgoblin Warchief | 2 | 52 | 18 | **ELITE** — Leadership aura (+1d4 to ally attacks); multiattack |
|
||||
|
||||
**Zone Boss: Grol the Unbroken**
|
||||
CR 3 | HP 65 | AC 17
|
||||
*A Bugbear war-chief who has united three goblin clans under his banner. Wears a belt of troll teeth and smells like he earned them.*
|
||||
|
||||
Abilities:
|
||||
- **Surprise Attack:** +2d6 damage if player has not acted this combat
|
||||
- **Heart of Hruggek:** Crits deal max damage (no roll)
|
||||
- **Terrifying Roar** (1/combat): All enemies gain +2 to attack rolls for 2 turns; player must make WIS DC 13 or Frightened
|
||||
|
||||
Loot Table:
|
||||
- `wpn_handaxe_+1` (15%)
|
||||
- `arm_studded_leather_+1` (10%)
|
||||
- `Grol's Belt` — unique: +2 STR while equipped (5%)
|
||||
- Coins: 2d10 × 5
|
||||
|
||||
---
|
||||
|
||||
### Zone 02 — The Crypt of Valdris
|
||||
**Tier:** 1 | **Level Range:** 1–3 | **CR Range:** 1/4–1
|
||||
|
||||
> *The iron gate hangs open — someone left in a hurry. Carved into the stone above: "HERE LIES VALDRIS. DO NOT." The rest has been chiseled away. TwinBee declines to speculate.*
|
||||
|
||||
**Atmosphere:** Stone corridors, dripping water, candles that shouldn't still be burning.
|
||||
**Faction:** Undead
|
||||
**Flavor File:** `zone_crypt_valdris_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Skeleton | 1/4 | 13 | 13 | Immune: poison, exhaustion; Resist: piercing, bludgeoning |
|
||||
| Zombie | 1/4 | 22 | 8 | Undead Fortitude: CON DC 5+(damage dealt) or survive at 1 HP |
|
||||
| Shadow | 1/2 | 16 | 12 | Strength Drain: hit reduces STR by 1d4 (recovered on long rest) |
|
||||
| Specter | 1 | 22 | 12 | Incorporeal: non-magical weapons deal half damage; Life Drain |
|
||||
| Wight | 3 | 45 | 14 | **ELITE** — Life Drain; raises slain humanoids as zombies |
|
||||
| Flameskull | 4 | 40 | 13 | **ELITE** — Casts Fireball (8d6, DEX DC 13); Rejuvenation (returns in 1 hour unless holy water used) |
|
||||
|
||||
**Zone Boss: Valdris the Unburied**
|
||||
CR 5 | HP 97 | AC 17
|
||||
*A lich-aspirant who got most of the way there. Cunning enough to be dangerous, failed enough to be bitter.*
|
||||
|
||||
Abilities:
|
||||
- **Corrupting Touch:** +4d6 necrotic damage; target max HP reduced by damage dealt (long rest restores)
|
||||
- **Legendary Resistance** (2/combat): Auto-succeed one failed saving throw
|
||||
- **Call of the Grave** (recharge 5–6): Summons 1d4 skeletons from room bones
|
||||
- **Phase 2** (below 50% HP): Gains Fly speed; spells deal +1d6 necrotic
|
||||
|
||||
Loot Table:
|
||||
- `Valdris's Phylactery Shard` — quest item (always drops)
|
||||
- `arm_cloak_of_protection` (12%)
|
||||
- `wpn_mace_of_smiting` (8%)
|
||||
- Coins: 3d10 × 4
|
||||
|
||||
---
|
||||
|
||||
### Zone 03 — Forest of Shadows
|
||||
**Tier:** 2 | **Level Range:** 3–5 | **CR Range:** 1–4
|
||||
|
||||
> *The forest was beautiful once. Travelers still say so, usually right before they stop saying anything at all. The trees lean in when you're not looking. TwinBee has noted this is not a metaphor.*
|
||||
|
||||
**Atmosphere:** Ancient forest, twisted paths, eerie silence, bioluminescent fungi, things in the canopy.
|
||||
**Faction:** Beasts, Fey-corrupted creatures, Bandits
|
||||
**Flavor File:** `zone_forest_shadows_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Dire Wolf | 1 | 37 | 14 | Pack Tactics; Knock Prone (STR DC 13) |
|
||||
| Bandit Captain | 2 | 65 | 15 | Multiattack (3 hits); Parry reaction (+3 AC vs one attack) |
|
||||
| Owlbear | 3 | 59 | 13 | Beak and Claw multiattack; Grapple on Claw hit |
|
||||
| Dryad (Corrupted) | 2 | 22 | 11 | Barkskin self-buff (+2 AC); Fey Charm (WIS DC 14 or waste a turn) |
|
||||
| Displacer Beast | 3 | 85 | 13 | Displacement: first hit on player each round has disadvantage; Avoidance |
|
||||
| Green Hag | 3 | 82 | 17 | **ELITE** — Illusory Appearance; Invisible Passage; Weakness curse |
|
||||
|
||||
**Zone Boss: The Hollow King**
|
||||
CR 6 | HP 142 | AC 15
|
||||
*What was once a forest guardian, now a vessel for something older and angrier. The antlers are real. The eyes are not.*
|
||||
|
||||
Abilities:
|
||||
- **Corrupting Aura:** Players within melee range make WIS DC 14 each turn or lose their bonus action
|
||||
- **Root Surge** (recharge 5–6): Entangles player (Restrained, STR DC 15 to escape; takes 2d8 bludgeoning)
|
||||
- **Devour Light:** Extinguishes magical light sources for 2 turns; player AC -2
|
||||
- **Phase 2** (below 40% HP): Summons 2 Dire Wolves; gains Reckless Attack
|
||||
|
||||
Loot Table:
|
||||
- `The Hollow Crown` — unique helm: +2 WIS; Fey Sight (advantage on Perception in nature) (6%)
|
||||
- `arm_hide_+2` (10%)
|
||||
- `wpn_longbow_+1` (12%)
|
||||
- Forest Essence (crafting material, always drops x1–3)
|
||||
|
||||
---
|
||||
|
||||
### Zone 04 — Sunken Temple of Dar'eth
|
||||
**Tier:** 2 | **Level Range:** 3–5 | **CR Range:** 2–5
|
||||
|
||||
> *The tide went out thirty years ago and never fully came back. The temple stayed wet anyway. Something down there keeps it that way. TwinBee suggests waterproofing your spellbook.*
|
||||
|
||||
**Atmosphere:** Flooded stone chambers, barnacled pillars, salt smell, alien glyphs, things that swim in the dark water.
|
||||
**Faction:** Kuo-toa, Water Elementals, Aboleth-touched
|
||||
**Flavor File:** `zone_sunken_temple_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Kuo-toa | 1/4 | 18 | 13 | Amphibious; Slippery (escape grapple auto); Sticky Shield reaction |
|
||||
| Kuo-toa Whip | 1 | 65 | 11 | Divine Eminence (+2d6 psychic on hit); Pincer Staff (grapple) |
|
||||
| Water Elemental | 5 | 114 | 14 | Whelm (Grapple + drowning, CON DC 13); Freeze reaction |
|
||||
| Merrow | 2 | 45 | 13 | Harpoon pull (15 ft); Multiattack; amphibious |
|
||||
| Aboleth Thrall | 3 | 60 | 12 | Psychic Bond (WIS DC 14 or reveal your next action to enemy); Mucus Cloud |
|
||||
|
||||
**Zone Boss: The Dreaming Aboleth**
|
||||
CR 10 | HP 135 | AC 17
|
||||
*Ancient. Patient. It has been waiting in this temple since before the city above was built. It has had time to plan.*
|
||||
|
||||
Abilities:
|
||||
- **Tentacle Multiattack:** Three tentacle attacks; hit inflicts Diseased (no magical healing for 24 real hours unless cured)
|
||||
- **Enslave** (recharge 6): WIS DC 14 or Charmed — player skips their turn and moves toward Aboleth
|
||||
- **Mucus Cloud:** Melee attackers must make CON DC 14 or transform skin to membrane (take 6d6 acid damage if not submerged — flavor: gasping)
|
||||
- **Legendary Actions (3/round):** Detect (free), Tail Swipe (2 LA), Psychic Drain (3 LA — 4d6 psychic, player max HP reduced by half damage dealt until long rest)
|
||||
|
||||
Loot Table:
|
||||
- `Aboleth's Eye` — unique amulet: +2 INT; Telepathy (passive lore checks auto-succeed) (5%)
|
||||
- `arm_breastplate_+1` (10%)
|
||||
- Refined Aboleth Mucus (rare crafting material) (always x1)
|
||||
- Coins: 5d10 × 8
|
||||
|
||||
---
|
||||
|
||||
### Zone 05 — Haunted Manor of Blackspire
|
||||
**Tier:** 3 | **Level Range:** 5–8 | **CR Range:** 4–8
|
||||
|
||||
> *The manor has been for sale for eleven years. Every buyer has either left immediately or not left at all. The real estate listing describes it as 'full of character.' TwinBee finds this accurate.*
|
||||
|
||||
**Atmosphere:** Victorian decay, impossible architecture, portraits whose eyes follow movement, cold spots, locked rooms that weren't locked before.
|
||||
**Faction:** Undead, Shadows, Vampiric
|
||||
**Flavor File:** `zone_manor_blackspire_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Shadow | 1/2 | 16 | 12 | STR drain; resist non-magical; vulnerable to radiant |
|
||||
| Wraith | 5 | 67 | 13 | Incorporeal movement; Life Drain (max HP reduction); sunlight sensitivity |
|
||||
| Banshee | 4 | 58 | 12 | Wail (WIS DC 13 or drop to 0 HP — 1/combat); Corrupting Touch; undead nature |
|
||||
| Vampire Spawn | 5 | 82 | 15 | Bite (life drain, heals vampire); Misty Step; charm gaze (WIS DC 13) |
|
||||
| Poltergeist | 2 | 22 | 12 | Forceful slam (invisible, disadvantage to hit); Telekinetic Thrust |
|
||||
| Revenant | 5 | 136 | 13 | **ELITE** — Regeneration (+10 HP/turn); cannot die permanently until goal fulfilled; STR DC 20 grapple |
|
||||
|
||||
**Zone Boss: Lord Aldric Blackspire (Vampire)**
|
||||
CR 13 | HP 144 | AC 16
|
||||
*He has watched seven generations of his bloodline die in this house. He considers himself the only survivor. He may be right.*
|
||||
|
||||
Abilities:
|
||||
- **Multiattack:** Unarmed strike + bite every turn
|
||||
- **Charm:** WIS DC 17 or Charmed for 24 hours (broken by damage)
|
||||
- **Children of the Night** (1/combat): Summons 2d6 Swarms of Bats or 3d6 Rats
|
||||
- **Mist Form:** When reduced to 0 HP, becomes mist and retreats to coffin (must destroy coffin in 30-turn window or he fully regenerates)
|
||||
- **Legendary Resistance** (3/combat)
|
||||
- **Phase 2 (Mist Form destroyed / cornered):** Enrages — all attacks have advantage; Charm becomes AoE (all players WIS DC 17)
|
||||
|
||||
Loot Table:
|
||||
- `Blackspire Signet Ring` — unique: +2 CHA; undead NPCs treat you as neutral unless attacked (6%)
|
||||
- `wpn_sword_of_wounding` (10%)
|
||||
- `arm_armor_of_resistance_necrotic` (8%)
|
||||
- Blackspire Deed (story/quest item, always drops)
|
||||
- Coins: 8d10 × 10
|
||||
|
||||
---
|
||||
|
||||
### Zone 06 — The Underforge
|
||||
**Tier:** 3 | **Level Range:** 5–8 | **CR Range:** 4–7
|
||||
|
||||
> *The dwarven forge-city of Kharak Dûn was not abandoned. It was sealed from the outside. TwinBee does not have information on what they were sealing in.*
|
||||
|
||||
**Atmosphere:** Volcanic caverns, rivers of cooling lava, ancient dwarven stonework, the constant bass note of something very large moving below.
|
||||
**Faction:** Fire Elementals, Constructs, Salamanders, Azers
|
||||
**Flavor File:** `zone_underforge_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Azer | 2 | 39 | 17 | Fire Aura (1d10 fire to melee attackers); immune to fire; heated weapons |
|
||||
| Salamander | 5 | 90 | 15 | Constrict (grapple + 2d6 fire/turn); spear multiattack; fire aura |
|
||||
| Fire Elemental | 5 | 102 | 13 | Fire Form (1d10 contact damage); immune to fire; Water Vulnerability |
|
||||
| Helmed Horror | 4 | 60 | 20 | Spell Immunity (3 specific spells per instance); multiattack; magic resistance |
|
||||
| Flameskull | 4 | 40 | 13 | Fireball (8d6, DEX DC 13); Rejuvenation |
|
||||
| Magmin | 1/2 | 9 | 14 | Death Burst (2d6 fire, 10 ft radius on death); ignite flammable objects |
|
||||
|
||||
**Zone Boss: Emberlord Thyrak**
|
||||
CR 9 | HP 178 | AC 18
|
||||
*The forge-golem that ran Kharak Dûn's furnaces for three centuries. When the dwarves left, it kept working. It has been improving the designs.*
|
||||
|
||||
Abilities:
|
||||
- **Molten Strike:** +4d6 fire damage on hit; target's armor loses 1 AC until repaired (long rest)
|
||||
- **Forge Breath** (recharge 5–6): 30-ft cone, 10d6 fire damage, DEX DC 16 for half
|
||||
- **Living Forge:** Heals 15 HP per turn while standing on lava/forge tiles (flavor mechanic)
|
||||
- **Construct Resilience:** Immune to poison, psychic, charm, exhaustion; resistance to non-magical physical
|
||||
- **Phase 2 (below 50% HP):** Forge Breath recharge becomes 4–6; spawns 2 Fire Elementals
|
||||
|
||||
Loot Table:
|
||||
- `Thyrak's Core` — crafting material for legendary weapons (always drops)
|
||||
- `arm_adamantine_armor` (12%)
|
||||
- `wpn_flame_tongue` (10%)
|
||||
- Azer Ingots × 1d6 (sell to Thom Krooke for high coin value)
|
||||
|
||||
---
|
||||
|
||||
### Zone 07 — The Underdark
|
||||
**Tier:** 4 | **Level Range:** 8–12 | **CR Range:** 7–12
|
||||
|
||||
> *There is a world below the world. It has its own cities, its own wars, its own sky — which is stone, and has never once been kind. TwinBee speaks more quietly here. Something might be listening.*
|
||||
|
||||
**Atmosphere:** Absolute darkness, phosphorescent mushroom groves, vast underground seas, carved drow cities in the distance, things older than the surface world.
|
||||
**Faction:** Drow, Mind Flayers, Beholders (far), Ropers, Hook Horrors
|
||||
**Flavor File:** `zone_underdark_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Drow | 1/4 | 13 | 15 | Fey Ancestry (adv. vs charm); Sunlight Sensitivity; Hand Crossbow (poison bolt) |
|
||||
| Drow Elite Warrior | 5 | 71 | 18 | Multiattack (3 hits); Parry; Drow Poison (unconscious, CON DC 13) |
|
||||
| Drow Mage | 7 | 45 | 12 | Spells: Lightning Bolt, Fly, Darkness, Faerie Fire; Magic Resistance |
|
||||
| Mind Flayer | 7 | 71 | 15 | Mind Blast (AoE psychic, INT DC 15 or Stunned); Extract Brain (instakill on stunned); Telepathy |
|
||||
| Hook Horror | 3 | 75 | 15 | Echoes of Darkness (Blindsight 60 ft); grapple claws; pack tactics |
|
||||
| Roper | 5 | 93 | 20 | 6 Tendrils (Grapple + restrained); Reel (pull 25 ft); False Appearance |
|
||||
|
||||
**Zone Boss: Ilvaras Xunyl, Drow High Priestess**
|
||||
CR 12 | HP 162 | AC 16
|
||||
*She has killed four previous expeditions from the surface. She keeps their weapons as trophies. She has run out of wall space.*
|
||||
|
||||
Abilities:
|
||||
- **Spells:** Flame Strike, Dispel Magic, Divine Word (CHA DC 18 or Deafened/Blinded/Stunned/killed based on HP), Insect Plague
|
||||
- **Lolth's Favour:** Once per combat, auto-succeed a failed save
|
||||
- **Summon Spiders** (1/combat): 2d6 Giant Spiders fill the room
|
||||
- **Legendary Actions (3):** Melee (1 LA), Cast Cantrip (1 LA), Drain Life (3 LA — 4d10 necrotic)
|
||||
- **Phase 2 (below 35% HP):** Lolth's Avatar overlay — gains +3 AC, all spells cast as 1 higher slot level
|
||||
|
||||
Loot Table:
|
||||
- `Xunyl's Diadem` — unique helm: +3 CHA; Drow Spells (Darkness, Faerie Fire 1/day each) (5%)
|
||||
- `arm_drow_chain_+2` (8%)
|
||||
- `wpn_dagger_of_venom` (10%)
|
||||
- Spider Silk × 2d4 (high-value crafting material)
|
||||
- Coins: 15d10 × 12
|
||||
|
||||
---
|
||||
|
||||
### Zone 08 — Feywild Crossing
|
||||
**Tier:** 4 | **Level Range:** 8–12 | **CR Range:** 5–10
|
||||
|
||||
> *The veil between worlds is thin here. Colors are too saturated. The mushrooms are too large. A small creature made of starlight just offered you a deal. TwinBee advises extreme caution regarding deals.*
|
||||
|
||||
**Atmosphere:** Impossible beauty, treacherous whimsy, time distortion, rules that change without notice, bargains with terrible fine print.
|
||||
**Faction:** Hags, Redcaps, Will-o-Wisps, Fomorians, Unseelie Fey
|
||||
**Flavor File:** `zone_feywild_crossing_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Redcap | 3 | 45 | 13 | Iron Boots (bonus bludgeoning on hit); Outsize Strength; Red Cap (loses power without blood soaking) |
|
||||
| Will-o-Wisp | 2 | 22 | 19 | Variable Illumination; Ephemeral (+13 to AC against opportunity attacks); drain life |
|
||||
| Quickling | 1 | 10 | 16 | Blur (attacks at disadvantage); 3 attacks per turn; Evasion |
|
||||
| Green Hag | 3 | 82 | 17 | Coven magic; Illusory Appearance; Weakness curse |
|
||||
| Night Hag | 5 | 112 | 17 | Etherealness; Dream Haunting (lose long rest benefit); Heartstone |
|
||||
| Fomorian | 8 | 149 | 14 | **ELITE** — Evil Eye (WIS DC 14: Frightened or Poisoned or Stunned — GM's choice); stomp AoE |
|
||||
|
||||
**Zone Boss: The Thornmother**
|
||||
CR 11 | HP 187 | AC 17
|
||||
*She has three names. She will offer to tell you all three. She will not tell you what accepting means. The flowers around her throne are beautiful and they are not flowers.*
|
||||
|
||||
Abilities:
|
||||
- **Coven Magic:** Gains additional spell slots based on GM Mood (Elated/Engaged TwinBee = stronger Thornmother)
|
||||
- **Beguiling Bargain** (1/combat): Offers player a deal — accept a debuff to receive a permanent minor buff. Player chooses.
|
||||
- **Thorned Grasp:** Restrained + 4d6 piercing per turn, CON DC 16 to break free
|
||||
- **Shapechange:** Once per combat, adopts a player's appearance; attacks against her have 50% miss chance until DC 17 Investigation check succeeds
|
||||
- **Phase 2 (below 30% HP):** True Form revealed — all illusions drop; +4d6 psychic on all attacks; Coven summons 2 Night Hags
|
||||
|
||||
Loot Table:
|
||||
- `The Thornmother's Bargain` — unique ring: choose one: +4 to one stat but -2 to another (permanent choice) (always offered, player must accept to receive)
|
||||
- `wpn_rapier_of_puncturing_+2` (8%)
|
||||
- `arm_cloak_of_protection_+2` (8%)
|
||||
- Feywild Essence × 1d4 (legendary crafting material)
|
||||
|
||||
---
|
||||
|
||||
### Zone 09 — Dragon's Lair (Infernus Peak)
|
||||
**Tier:** 5 | **Level Range:** 12–20 | **CR Range:** 10–20
|
||||
|
||||
> *The mountain has not erupted in forty years. The locals say it is dormant. The locals are wrong about what lives in mountains. TwinBee has prepared an unusually long entry description for this one.*
|
||||
|
||||
**Atmosphere:** Scorched stone, rivers of gold coins half-melted into the floor, kobold warrens as outer defenses, growing heat, the unmistakable smell of something ancient and enormous.
|
||||
**Faction:** Kobolds, Drakes, Young Dragons, Wyrm
|
||||
**Flavor File:** `zone_dragons_lair_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Kobold | 1/8 | 5 | 12 | Pack Tactics; Sunlight Sensitivity; Trap expertise |
|
||||
| Guard Drake | 2 | 52 | 14 | Multiattack; Draconic Loyalty (immune to fear near dragons) |
|
||||
| Kobold Scale Sorcerer | 1 | 27 | 15 | Spells: Chromatic Orb, Mage Armor, Shield; Draconic Sorcery |
|
||||
| Young Red Dragon | 10 | 178 | 18 | Fire Breath (16d6, DC 21); Multiattack; Frightful Presence (WIS DC 16) |
|
||||
| Dragonborn Cultist | 4 | 71 | 16 | Draconic Gift (breath weapon 2d6, DC 13); Fanatical Devotion (immune to fear) |
|
||||
|
||||
**Zone Boss: Infernax the Undying (Ancient Red Dragon)**
|
||||
CR 24 | HP 546 | AC 22
|
||||
*He remembers when the surface civilizations were just fires. He found the fires amusing. He finds their descendants less so.*
|
||||
|
||||
Abilities:
|
||||
- **Multiattack:** Bite + 2 Claws
|
||||
- **Fire Breath** (recharge 5–6): 90-ft cone, 26d6 fire damage, DEX DC 24 for half
|
||||
- **Frightful Presence:** WIS DC 21 or Frightened for 1 minute (all new enemies entering combat)
|
||||
- **Legendary Resistance** (3/combat): Auto-succeed failed save
|
||||
- **Legendary Actions (3):** Detect (1), Tail Attack (1), Wing Attack (2 — AoE knockback DEX DC 22)
|
||||
- **Lair Actions (on initiative count 20):** Magma eruption (2d6 fire all), Volcanic gases (CON DC 13 or Poisoned), Tremor (DEX DC 15 or Prone)
|
||||
- **Phase 2 (below 50% HP):** Fire Breath recharge 4–6; all fire damage ignores resistance
|
||||
|
||||
Loot Table:
|
||||
- `Scale of Infernax` — legendary material (always drops; crafting anchor for legendary fire weapons)
|
||||
- `arm_dragon_scale_mail_red` (15%)
|
||||
- `wpn_flame_tongue_+3` (10%)
|
||||
- `Ring of Fire Resistance` (12%)
|
||||
- Dragon Hoard: 50d10 × 100 coins (zone-unique gold flood mechanic)
|
||||
|
||||
---
|
||||
|
||||
### Zone 10 — The Abyss Portal
|
||||
**Tier:** 5 | **Level Range:** 15–20 | **CR Range:** 15–20
|
||||
|
||||
> *Someone opened a door they should not have opened. The door is still open. Things are still coming through. TwinBee is not making jokes about this one.*
|
||||
|
||||
**Atmosphere:** Reality fractures, impossible geometry, constant low psychic pressure, the feeling of being watched by something that has no eyes.
|
||||
**Faction:** Demons, Fiends, Corrupted Celestials
|
||||
**Flavor File:** `zone_abyss_portal_flavor.go`
|
||||
|
||||
#### Enemy Roster
|
||||
|
||||
| Enemy | CR | HP | AC | Special |
|
||||
|---|---|---|---|---|
|
||||
| Quasit | 1 | 7 | 13 | Invisibility; Scare (WIS DC 10 or Frightened 1 min); poison claws |
|
||||
| Vrock | 6 | 104 | 15 | Multiattack; Spores (CON DC 14 or 5d10 poison over 24 hrs); Stunning Screech (CON DC 14 or Stunned) |
|
||||
| Hezrou | 8 | 136 | 16 | Stench (CON DC 14 or Poisoned — disadvantage on attacks); multiattack |
|
||||
| Nalfeshnee | 13 | 184 | 18 | Multiattack (3 hits); Horror Nimbus (WIS DC 15 or Frightened — AoE); Magic Resistance |
|
||||
| Marilith | 16 | 189 | 18 | 7 attacks per turn; Parry reaction; Reactive (extra reaction per round); Magic Resistance |
|
||||
|
||||
**Zone Boss: Belaxath the Undivided (Balor)**
|
||||
CR 19 | HP 262 | AC 19
|
||||
*The portal was not summoned. It was torn. Belaxath did the tearing from the other side, with purpose, over three decades. It is annoyed it took that long.*
|
||||
|
||||
Abilities:
|
||||
- **Multiattack:** Longsword + Whip
|
||||
- **Fire Aura:** 10d6 fire to all melee attackers each turn; weapon attacks deal +3d6 fire
|
||||
- **Lightning Discharge** (recharge 5–6): 120-ft line, 12d6 lightning, DEX DC 20 half
|
||||
- **Death Throes:** On death, explodes — 30-ft radius, 20d6 fire, DEX DC 20 half. Destroys non-legendary equipment on a failed save.
|
||||
- **Magic Resistance:** Advantage on saves vs. spells
|
||||
- **Legendary Resistance** (3/combat)
|
||||
- **Demonic Resilience:** Resistant to cold, fire, lightning; immune to poison and non-magical physical
|
||||
- **Phase 2 (below 40% HP):** Grows to Huge size; all attacks have advantage; Death Throes recharge becomes 4–6
|
||||
|
||||
Loot Table:
|
||||
- `Shard of the Abyss` — legendary: quest item for portal-closing storyline (always drops)
|
||||
- `wpn_demon_blade` — unique greatsword: +3, deals 2d6 necrotic bonus; wielder cannot be Charmed or Frightened (5%)
|
||||
- `arm_demon_armor_+3` (5%)
|
||||
- Portal Fragment × 1 (legendary crafting — required for highest-tier recipes)
|
||||
|
||||
---
|
||||
|
||||
## 6. Environmental Traps by Zone Tier
|
||||
|
||||
### Tier 1 Traps
|
||||
| Trap | Trigger | Effect | Detect DC | Disarm DC |
|
||||
|---|---|---|---|---|
|
||||
| Pit Trap | Floor tile | 2d6 bludgeoning fall | Perception 12 | Thieves' Tools 10 |
|
||||
| Tripwire Alarm | Doorway | Alerts enemies in next room | Perception 10 | Thieves' Tools 8 |
|
||||
| Poison Dart | Chest/door | 1d4 piercing + CON DC 11 or Poisoned | Investigation 12 | Thieves' Tools 12 |
|
||||
|
||||
### Tier 2 Traps
|
||||
| Trap | Trigger | Effect | Detect DC | Disarm DC |
|
||||
|---|---|---|---|---|
|
||||
| Flame Jet | Pressure plate | 3d6 fire, DEX DC 13 half | Perception 14 | Thieves' Tools 14 |
|
||||
| Collapsing Ceiling | Rigged support | 4d6 bludgeoning AoE, DEX DC 14 half | Investigation 14 | Athletics 16 |
|
||||
| Glyph of Warding | Doorframe | 5d8 lightning, DEX DC 14 half | Arcana 14 | Arcana 14 |
|
||||
|
||||
### Tier 3–5 Traps
|
||||
| Trap | Trigger | Effect | Detect DC | Disarm DC |
|
||||
|---|---|---|---|---|
|
||||
| Antimagic Field | Room entry | Spells fail; magic items suppressed | Arcana 18 | Arcana 20 |
|
||||
| Necrotic Miasma | Sarcophagus open | 6d6 necrotic + max HP -10 until long rest | Perception 16 | — (avoid only) |
|
||||
| Symbol of Death | Inscription | INT DC 20 or drop to 0 HP | Investigation 20 | Arcana 22 |
|
||||
| Planar Rift | Portal touch | Teleported to random room; 4d10 psychic | Arcana 20 | Arcana 22 |
|
||||
|
||||
---
|
||||
|
||||
## 7. Dungeon State Go Model — Extended
|
||||
|
||||
```go
|
||||
type ZoneDefinition struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Tier int `json:"tier"`
|
||||
LevelMin int `json:"level_min"`
|
||||
LevelMax int `json:"level_max"`
|
||||
FlavorRef string `json:"flavor_ref"`
|
||||
EnemyRoster []string `json:"enemy_roster"` // MonsterStatBlock IDs
|
||||
BossID string `json:"boss_id"`
|
||||
TrapTable []TrapEntry `json:"trap_table"`
|
||||
LootTable []LootEntry `json:"loot_table"`
|
||||
RoomCount RoomCountRange `json:"room_count"`
|
||||
Atmosphere string `json:"atmosphere"`
|
||||
}
|
||||
|
||||
type RoomCountRange struct {
|
||||
Min int `json:"min"`
|
||||
Max int `json:"max"`
|
||||
}
|
||||
|
||||
type TrapEntry struct {
|
||||
TrapID string `json:"trap_id"`
|
||||
Weight float32 `json:"weight"`
|
||||
TierMin int `json:"tier_min"`
|
||||
}
|
||||
|
||||
type DMState struct {
|
||||
Mood int `json:"mood"` // 0–100
|
||||
LastModified time.Time `json:"last_modified"`
|
||||
}
|
||||
|
||||
// DMNarrationType classifies what kind of line TwinBee is generating.
|
||||
type DMNarrationType string
|
||||
|
||||
const (
|
||||
DMRoomEntry DMNarrationType = "room_entry"
|
||||
DMCombatStart DMNarrationType = "combat_start"
|
||||
DMCombatEnd DMNarrationType = "combat_end"
|
||||
DMNat20 DMNarrationType = "nat_20"
|
||||
DMNat1 DMNarrationType = "nat_1"
|
||||
DMBossEntry DMNarrationType = "boss_entry"
|
||||
DMBossDeath DMNarrationType = "boss_death"
|
||||
DMPlayerDeath DMNarrationType = "player_death"
|
||||
DMZoneComplete DMNarrationType = "zone_complete"
|
||||
DMTrapDetected DMNarrationType = "trap_detected"
|
||||
DMTrapTripped DMNarrationType = "trap_tripped"
|
||||
DMLore DMNarrationType = "lore"
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Implementation Phases — Dungeon System
|
||||
|
||||
### Phase D1 — Zone Infrastructure
|
||||
- [ ] `ZoneDefinition` struct and zone registry
|
||||
- [ ] `DungeonRun` state machine (room sequencing, persistence)
|
||||
- [ ] `!advance`, `!retreat`, `!status`, `!map` commands
|
||||
- [ ] TwinBee GM message format and mood system
|
||||
- [ ] Entry Room narration pipeline
|
||||
|
||||
### Phase D2 — Tier 1 Zones
|
||||
- [ ] Goblin Warrens (full enemy roster + boss)
|
||||
- [ ] Crypt of Valdris (full enemy roster + boss)
|
||||
- [ ] Trap room system (Tier 1 traps)
|
||||
- [ ] Flavor text files: `zone_goblin_warrens_flavor.go`, `zone_crypt_valdris_flavor.go`
|
||||
|
||||
### Phase D3 — Tier 2 Zones
|
||||
- [ ] Forest of Shadows
|
||||
- [ ] Sunken Temple of Dar'eth
|
||||
- [ ] Tier 2 traps
|
||||
- [ ] Corresponding flavor files
|
||||
|
||||
### Phase D4 — Tier 3 Zones
|
||||
- [ ] Haunted Manor of Blackspire
|
||||
- [ ] The Underforge
|
||||
- [ ] Elite room system
|
||||
- [ ] Multi-phase boss system
|
||||
- [ ] Corresponding flavor files
|
||||
|
||||
### Phase D5 — Tier 4–5 Zones
|
||||
- [ ] The Underdark
|
||||
- [ ] Feywild Crossing
|
||||
- [ ] Dragon's Lair
|
||||
- [ ] The Abyss Portal
|
||||
- [ ] Legendary action system
|
||||
- [ ] Lair action system
|
||||
- [ ] Corresponding flavor files
|
||||
|
||||
### Phase D6 — GM Polish
|
||||
- [ ] Full `DMNarrationType` flavor text pass (all types, all zones)
|
||||
- [ ] TwinBee `!taunt` / `!compliment` interaction lines
|
||||
- [ ] ASCII `!map` renderer
|
||||
- [ ] GM Mood community trigger hooks (Lemmy/Matrix activity integration)
|
||||
- [ ] Pete bot zone announcement posts
|
||||
|
||||
---
|
||||
|
||||
*End of Dungeon Zones & TwinBee GM Document.*
|
||||
*Reference alongside `gogobee_dnd_design_doc.md` and `gogobee_equipment_appendix.md` in all Claude Code sessions.*
|
||||
@@ -1,354 +0,0 @@
|
||||
# GogoBee — Equipment Appendix
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`
|
||||
> **Version:** 1.0
|
||||
> **Source:** D&D 5e SRD, adapted for GogoBee bot mechanics
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Implementation Notes
|
||||
|
||||
- All damage dice and stat values are **starting baselines**. Balance tuning is a human responsibility.
|
||||
- Weapon/armor names may be reskinned for flavor (e.g., "TwinBee Aegis" instead of "Shield") but base mechanics must match this spec.
|
||||
- Class proficiency restrictions from the main design doc apply here. An unproficient player may equip an item but incurs **-4 to attack rolls** and cannot add stat modifiers to damage.
|
||||
- All gold (gp) costs map 1:1 to GogoBee **coins** unless the economy team decides otherwise.
|
||||
- Item IDs follow the format: `wpn_<name>` for weapons, `arm_<name>` for armor.
|
||||
|
||||
---
|
||||
|
||||
## 1. Weapon Properties Glossary
|
||||
|
||||
| Property | Effect |
|
||||
|---|---|
|
||||
| **Ammunition** | Requires ammo (arrows, bolts, etc.) to fire. Recover half after combat. |
|
||||
| **Finesse** | Player may use STR or DEX modifier for attack and damage (choose one, apply consistently). |
|
||||
| **Heavy** | Small creatures (Halfling) have disadvantage on attack rolls with this weapon. |
|
||||
| **Light** | Can be dual-wielded. Bonus action attack with off-hand (no stat modifier to damage). |
|
||||
| **Loading** | Can only fire once per turn regardless of extra attacks. |
|
||||
| **Range** | Listed as normal/long range. Attacks beyond normal range have disadvantage. |
|
||||
| **Reach** | +5 ft attack range. Relevant if zone/range mechanics are ever added. |
|
||||
| **Thrown** | Can be thrown as a ranged attack using STR modifier. |
|
||||
| **Two-Handed** | Requires both hands. Cannot use a shield simultaneously. |
|
||||
| **Versatile** | Can be wielded one-handed (lower damage) or two-handed (higher damage). |
|
||||
| **Special** | See individual entry for unique rules. |
|
||||
|
||||
---
|
||||
|
||||
## 2. Simple Weapons
|
||||
|
||||
Simple weapons are proficient for **all classes**.
|
||||
|
||||
### 2.1 Simple Melee Weapons
|
||||
|
||||
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|
||||
|---|---|---|---|---|---|
|
||||
| Club | 1 gp | 1d4 | Bludgeoning | 2 lb | Light |
|
||||
| Dagger | 2 gp | 1d4 | Piercing | 1 lb | Finesse, Light, Thrown (20/60) |
|
||||
| Greatclub | 2 gp | 1d8 | Bludgeoning | 10 lb | Two-Handed |
|
||||
| Handaxe | 5 gp | 1d6 | Slashing | 2 lb | Light, Thrown (20/60) |
|
||||
| Javelin | 5 gp | 1d6 | Piercing | 2 lb | Thrown (30/120) |
|
||||
| Light Hammer | 2 gp | 1d4 | Bludgeoning | 2 lb | Light, Thrown (20/60) |
|
||||
| Mace | 5 gp | 1d6 | Bludgeoning | 4 lb | — |
|
||||
| Quarterstaff | 2 gp | 1d6 / 1d8 | Bludgeoning | 4 lb | Versatile |
|
||||
| Sickle | 1 gp | 1d4 | Slashing | 2 lb | Light |
|
||||
| Spear | 1 gp | 1d6 / 1d8 | Piercing | 3 lb | Thrown (20/60), Versatile |
|
||||
|
||||
### 2.2 Simple Ranged Weapons
|
||||
|
||||
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|
||||
|---|---|---|---|---|---|
|
||||
| Crossbow, Light | 25 gp | 1d8 | Piercing | 5 lb | Ammunition (80/320), Loading, Two-Handed |
|
||||
| Dart | 5 cp | 1d4 | Piercing | 0.25 lb | Finesse, Thrown (20/60) |
|
||||
| Shortbow | 25 gp | 1d6 | Piercing | 2 lb | Ammunition (80/320), Two-Handed |
|
||||
| Sling | 1 sp | 1d4 | Bludgeoning | — | Ammunition (30/120) |
|
||||
|
||||
---
|
||||
|
||||
## 3. Martial Weapons
|
||||
|
||||
Martial weapons require class proficiency. See main design doc Section 3.2 for class proficiency tables.
|
||||
|
||||
### 3.1 Martial Melee Weapons
|
||||
|
||||
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|
||||
|---|---|---|---|---|---|
|
||||
| Battleaxe | 10 gp | 1d8 / 1d10 | Slashing | 4 lb | Versatile |
|
||||
| Flail | 10 gp | 1d8 | Bludgeoning | 2 lb | — |
|
||||
| Glaive | 20 gp | 1d10 | Slashing | 6 lb | Heavy, Reach, Two-Handed |
|
||||
| Greataxe | 30 gp | 1d12 | Slashing | 7 lb | Heavy, Two-Handed |
|
||||
| Greatsword | 50 gp | 2d6 | Slashing | 6 lb | Heavy, Two-Handed |
|
||||
| Halberd | 20 gp | 1d10 | Slashing | 6 lb | Heavy, Reach, Two-Handed |
|
||||
| Lance | 10 gp | 1d12 | Piercing | 6 lb | Reach, Special (disadvantage vs. adjacent) |
|
||||
| Longsword | 15 gp | 1d8 / 1d10 | Slashing | 3 lb | Versatile |
|
||||
| Maul | 10 gp | 2d6 | Bludgeoning | 10 lb | Heavy, Two-Handed |
|
||||
| Morningstar | 15 gp | 1d8 | Piercing | 4 lb | — |
|
||||
| Pike | 5 gp | 1d10 | Piercing | 18 lb | Heavy, Reach, Two-Handed |
|
||||
| Rapier | 25 gp | 1d8 | Piercing | 2 lb | Finesse |
|
||||
| Scimitar | 25 gp | 1d6 | Slashing | 3 lb | Finesse, Light |
|
||||
| Shortsword | 10 gp | 1d6 | Piercing | 2 lb | Finesse, Light |
|
||||
| Trident | 5 gp | 1d6 / 1d8 | Piercing | 4 lb | Thrown (20/60), Versatile |
|
||||
| War Pick | 5 gp | 1d8 | Piercing | 2 lb | — |
|
||||
| Warhammer | 15 gp | 1d8 / 1d10 | Bludgeoning | 2 lb | Versatile |
|
||||
| Whip | 2 gp | 1d4 | Slashing | 3 lb | Finesse, Reach |
|
||||
|
||||
### 3.2 Martial Ranged Weapons
|
||||
|
||||
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|
||||
|---|---|---|---|---|---|
|
||||
| Crossbow, Hand | 75 gp | 1d6 | Piercing | 3 lb | Ammunition (30/120), Light, Loading |
|
||||
| Crossbow, Heavy | 50 gp | 1d10 | Piercing | 18 lb | Ammunition (100/400), Heavy, Loading, Two-Handed |
|
||||
| Longbow | 50 gp | 1d8 | Piercing | 2 lb | Ammunition (150/600), Heavy, Two-Handed |
|
||||
| Net | 1 gp | — | — | 3 lb | Special: Restrained condition on hit (STR DC 10 to escape). Large or smaller targets only. |
|
||||
|
||||
---
|
||||
|
||||
## 4. Ammunition
|
||||
|
||||
Ammo is tracked as a consumable. Players recover **half their spent ammo** after each combat (round down).
|
||||
|
||||
| Ammunition | Cost (20 units) | Used By |
|
||||
|---|---|---|
|
||||
| Arrows | 1 gp | Shortbow, Longbow |
|
||||
| Bolts | 1 gp | Crossbow (light, heavy, hand) |
|
||||
| Sling Bullets | 4 cp | Sling |
|
||||
| Blowgun Needles | 1 gp | Blowgun |
|
||||
| Darts | 5 cp each | Darts (see Simple Ranged) |
|
||||
|
||||
---
|
||||
|
||||
## 5. Armor
|
||||
|
||||
### 5.1 Light Armor
|
||||
|
||||
Proficiency: Rogue, Ranger, Cleric (and Fighter by inheritance).
|
||||
|
||||
| Armor | Cost | AC | STR Req. | Stealth | Weight |
|
||||
|---|---|---|---|---|---|
|
||||
| Padded | 5 gp | 11 + DEX mod | — | Disadvantage | 8 lb |
|
||||
| Leather | 10 gp | 11 + DEX mod | — | — | 10 lb |
|
||||
| Studded Leather | 45 gp | 12 + DEX mod | — | — | 13 lb |
|
||||
|
||||
### 5.2 Medium Armor
|
||||
|
||||
Proficiency: Fighter, Ranger, Cleric.
|
||||
DEX bonus to AC capped at **+2** for all medium armor.
|
||||
|
||||
| Armor | Cost | AC | STR Req. | Stealth | Weight |
|
||||
|---|---|---|---|---|---|
|
||||
| Hide | 10 gp | 12 + DEX mod (max +2) | — | — | 12 lb |
|
||||
| Chain Shirt | 50 gp | 13 + DEX mod (max +2) | — | — | 20 lb |
|
||||
| Scale Mail | 50 gp | 14 + DEX mod (max +2) | — | Disadvantage | 45 lb |
|
||||
| Breastplate | 400 gp | 14 + DEX mod (max +2) | — | — | 20 lb |
|
||||
| Half Plate | 750 gp | 15 + DEX mod (max +2) | — | Disadvantage | 40 lb |
|
||||
|
||||
### 5.3 Heavy Armor
|
||||
|
||||
Proficiency: Fighter only.
|
||||
Heavy armor grants **no DEX bonus** to AC. STR requirements must be met or movement is reduced (flavor only in bot context — apply -2 to DEX-based rolls as penalty).
|
||||
|
||||
| Armor | Cost | AC | STR Req. | Stealth | Weight |
|
||||
|---|---|---|---|---|---|
|
||||
| Ring Mail | 30 gp | 14 | — | Disadvantage | 40 lb |
|
||||
| Chain Mail | 75 gp | 16 | STR 13 | Disadvantage | 55 lb |
|
||||
| Splint | 200 gp | 17 | STR 15 | Disadvantage | 60 lb |
|
||||
| Plate | 1,500 gp | 18 | STR 15 | Disadvantage | 65 lb |
|
||||
|
||||
### 5.4 Shield
|
||||
|
||||
| Item | Cost | AC Bonus | Proficiency | Weight |
|
||||
|---|---|---|---|---|
|
||||
| Shield | 10 gp | +2 | Fighter, Ranger, Cleric | 6 lb |
|
||||
|
||||
A shield occupies the **off-hand slot**. Cannot be used with Two-Handed weapons.
|
||||
|
||||
---
|
||||
|
||||
## 6. Adventuring Gear & Consumables
|
||||
|
||||
These are available at Thom Krooke's shop or as dungeon loot.
|
||||
|
||||
### 6.1 Potions
|
||||
|
||||
| Item | Cost | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| Potion of Healing | 50 gp | Restore 2d4+2 HP | Bonus action to drink in combat |
|
||||
| Potion of Greater Healing | 100 gp | Restore 4d4+4 HP | Bonus action to drink in combat |
|
||||
| Potion of Superior Healing | 500 gp | Restore 8d4+8 HP | Rare drop only; not in shop |
|
||||
| Antitoxin | 50 gp | Advantage on CON saves vs. poison for 1 hour / 3 combats | — |
|
||||
| Potion of Speed | 250 gp | +1 attack per turn for 1 minute / 1 combat | Rare drop only |
|
||||
| Potion of Resistance | 300 gp | Resistance to one damage type for 1 hour | Type specified on item |
|
||||
|
||||
### 6.2 Utility Items
|
||||
|
||||
| Item | Cost | Effect |
|
||||
|---|---|---|
|
||||
| Rope, Hemp (50 ft) | 1 gp | Enables Athletics checks for climbing/binding |
|
||||
| Torch | 1 cp | Removes darkness penalty in underground zones (future) |
|
||||
| Thieves' Tools | 25 gp | Required for Rogue lockpicking checks |
|
||||
| Herbalism Kit | 5 gp | Required for crafting basic potions (future) |
|
||||
| Spell Component Pouch | 25 gp | Required for Mage spells with material components |
|
||||
| Holy Symbol | 5 gp | Required for Cleric divine abilities |
|
||||
| Arcane Focus (Staff) | 5 gp | Alternative to Spell Component Pouch for Mage |
|
||||
| Arrows (20) | 1 gp | Ammunition |
|
||||
| Bolts (20) | 1 gp | Ammunition |
|
||||
| Quiver | 1 gp | Holds 20 arrows or bolts |
|
||||
|
||||
---
|
||||
|
||||
## 7. Magic Weapons (Base Templates)
|
||||
|
||||
Magic weapons drop from dungeon encounters and high-CR monsters. They use the mundane weapon as a base, then add a bonus and optionally a magical property. Attunement required for +2 and above.
|
||||
|
||||
### 7.1 Bonus Weapon Tiers
|
||||
|
||||
| Tier | Attack Bonus | Damage Bonus | Rarity | Attunement |
|
||||
|---|---|---|---|---|
|
||||
| +1 | +1 to attack rolls | +1 to damage | Uncommon | No |
|
||||
| +2 | +2 to attack rolls | +2 to damage | Rare | Yes |
|
||||
| +3 | +3 to attack rolls | +3 to damage | Very Rare | Yes |
|
||||
|
||||
### 7.2 Named Magic Weapons (Starter Set)
|
||||
|
||||
These are specific named items with unique properties. Each requires attunement.
|
||||
|
||||
| Item | Base | Rarity | Bonus | Special Property |
|
||||
|---|---|---|---|---|
|
||||
| **Flame Tongue** | Longsword | Rare | +1 | On hit: +2d6 fire damage. Command word activates flame (light source). |
|
||||
| **Sword of Wounding** | Shortsword | Rare | +1 | On hit: target cannot regain HP until start of their next turn. |
|
||||
| **Frost Brand** | Greatsword | Very Rare | +1 | On hit: +1d6 cold damage. Cold resistance while attuned. |
|
||||
| **Dagger of Venom** | Dagger | Rare | +1 | Once per day: coat blade with poison. Next hit: +2d10 poison, CON DC 15 or Poisoned. |
|
||||
| **Bow of Speed** | Longbow | Very Rare | +2 | Ignore Loading property on any crossbow. +1 attack per turn. |
|
||||
| **Mace of Smiting** | Mace | Rare | +1 | On crit vs. construct: +2d6 bonus damage. |
|
||||
| **Staff of the Adder** | Quarterstaff | Uncommon | +1 | Cleric/Ranger only. Bonus action: animate as snake (1d4 piercing, poison on bite CON DC 11). |
|
||||
| **Rapier of Puncturing** | Rapier | Uncommon | +1 | On crit: target makes CON DC 13 or loses 2d4 HP at start of their next 3 turns (bleed). |
|
||||
|
||||
---
|
||||
|
||||
## 8. Magic Armor (Base Templates)
|
||||
|
||||
### 8.1 Bonus Armor Tiers
|
||||
|
||||
| Tier | AC Bonus | Rarity | Attunement |
|
||||
|---|---|---|---|
|
||||
| +1 | +1 to AC | Rare | No |
|
||||
| +2 | +2 to AC | Very Rare | Yes |
|
||||
| +3 | +3 to AC | Legendary | Yes |
|
||||
|
||||
### 8.2 Named Magic Armor (Starter Set)
|
||||
|
||||
| Item | Base | Rarity | Special Property |
|
||||
|---|---|---|---|
|
||||
| **Armor of Resistance** | Any | Rare | Resistance to one damage type (specified on item). Attunement. |
|
||||
| **Demon Armor** | Plate | Very Rare | +1 AC. Unarmed strikes deal 1d8 + STR slashing. Cursed: cannot be removed without *Remove Curse* spell. |
|
||||
| **Dragon Scale Mail** | Scale Mail | Very Rare | +1 AC. Resistance to one dragon damage type. Advantage on saves vs. dragons. |
|
||||
| **Elven Chain** | Chain Shirt | Rare | Treated as light armor for proficiency. No Stealth disadvantage. |
|
||||
| **Mithral Armor** | Medium or Heavy | Uncommon | No STR requirement. No Stealth disadvantage. No attunement. |
|
||||
| **Adamantine Armor** | Medium or Heavy | Uncommon | Any critical hit against wearer becomes a normal hit instead. |
|
||||
| **Spellguard Shield** | Shield | Very Rare | Advantage on saves vs. spells. Magic missiles cannot hit wearer. |
|
||||
| **Cloak of Protection** | — (Amulet slot) | Uncommon | +1 to AC and all saving throws. Attunement. |
|
||||
|
||||
---
|
||||
|
||||
## 9. Class-Weapon Affinity Matrix
|
||||
|
||||
Summary of which weapon categories each class can use with full proficiency:
|
||||
|
||||
| Weapon Category | Fighter | Rogue | Mage | Cleric | Ranger |
|
||||
|---|---|---|---|---|---|
|
||||
| Simple Melee | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| Simple Ranged | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| Martial Melee | ✅ | ⚠️ Shortsword, Rapier, Scimitar, Longsword only | ❌ | ❌ | ✅ |
|
||||
| Martial Ranged | ✅ | ⚠️ Hand crossbow only | ❌ | ❌ | ✅ |
|
||||
| Heavy Armor | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||||
| Medium Armor | ✅ | ❌ | ❌ | ✅ | ✅ |
|
||||
| Light Armor | ✅ | ✅ | ❌ | ✅ | ✅ |
|
||||
| Shield | ✅ | ❌ | ❌ | ✅ | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 10. Carry Weight (Optional Mechanic)
|
||||
|
||||
If inventory weight is implemented, use these rules:
|
||||
|
||||
- **Carry Capacity:** STR score × 15 lbs
|
||||
- **Encumbered** (> STR × 5 lbs): -10 to movement speed (flavor; -1 to DEX rolls)
|
||||
- **Heavily Encumbered** (> STR × 10 lbs): -20 to movement; disadvantage on STR/DEX/CON checks
|
||||
- **Over capacity:** Cannot move. Combat actions at disadvantage.
|
||||
|
||||
Recommended: implement carry weight as a soft warning only in v1. Hard enforcement deferred to future patch.
|
||||
|
||||
---
|
||||
|
||||
## 11. Go Data Structures — Equipment Extension
|
||||
|
||||
```go
|
||||
// WeaponProfile extends the base Item struct for weapons.
|
||||
type WeaponProfile struct {
|
||||
ItemID string `json:"item_id"`
|
||||
DamageDie string `json:"damage_die"` // e.g. "1d8", "2d6"
|
||||
DamageType string `json:"damage_type"` // slashing, piercing, bludgeoning
|
||||
Properties []string `json:"properties"` // finesse, light, thrown, etc.
|
||||
RangeNormal int `json:"range_normal"` // 0 if melee
|
||||
RangeLong int `json:"range_long"` // 0 if melee
|
||||
VersatileDie string `json:"versatile_die"` // e.g. "1d10"; empty if not versatile
|
||||
MagicBonus int `json:"magic_bonus"` // 0 for mundane
|
||||
MagicProp string `json:"magic_prop"` // empty for mundane
|
||||
}
|
||||
|
||||
// ArmorProfile extends the base Item struct for armor.
|
||||
type ArmorProfile struct {
|
||||
ItemID string `json:"item_id"`
|
||||
ArmorType string `json:"armor_type"` // light, medium, heavy, shield
|
||||
BaseAC int `json:"base_ac"`
|
||||
MaxDEXBonus int `json:"max_dex_bonus"` // -1 = unlimited (light), 2 = medium, 0 = heavy
|
||||
STRRequire int `json:"str_require"` // 0 if no requirement
|
||||
StealthDisad bool `json:"stealth_disad"`
|
||||
MagicBonus int `json:"magic_bonus"`
|
||||
MagicProp string `json:"magic_prop"`
|
||||
}
|
||||
|
||||
// AmmoStack tracks a player's ammunition supply.
|
||||
type AmmoStack struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Type string `json:"ammo_type"` // arrows, bolts, sling_bullets, etc.
|
||||
Quantity int `json:"quantity"`
|
||||
}
|
||||
|
||||
// ACResult holds the resolved AC for a player at combat time.
|
||||
// Computed from equipped armor + DEX modifier + magic bonuses.
|
||||
type ACResult struct {
|
||||
Base int `json:"base"`
|
||||
DEXApplied int `json:"dex_applied"`
|
||||
MagicBonus int `json:"magic_bonus"`
|
||||
ShieldBonus int `json:"shield_bonus"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
|
||||
// ComputeAC resolves a player's AC from their equipped gear and stats.
|
||||
func ComputeAC(armor *ArmorProfile, shield *ArmorProfile, dexMod int) ACResult {
|
||||
ac := ACResult{}
|
||||
if armor == nil {
|
||||
// Unarmored: 10 + DEX
|
||||
ac.Base = 10
|
||||
ac.DEXApplied = dexMod
|
||||
} else {
|
||||
ac.Base = armor.BaseAC + armor.MagicBonus
|
||||
switch armor.MaxDEXBonus {
|
||||
case -1: // light: full DEX
|
||||
ac.DEXApplied = dexMod
|
||||
case 2: // medium: cap at +2
|
||||
if dexMod > 2 { ac.DEXApplied = 2 } else { ac.DEXApplied = dexMod }
|
||||
case 0: // heavy: no DEX
|
||||
ac.DEXApplied = 0
|
||||
}
|
||||
}
|
||||
if shield != nil {
|
||||
ac.ShieldBonus = 2 + shield.MagicBonus
|
||||
}
|
||||
ac.Total = ac.Base + ac.DEXApplied + ac.ShieldBonus
|
||||
return ac
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*End of Equipment Appendix. Reference alongside `gogobee_dnd_design_doc.md` in all Claude Code sessions.*
|
||||
@@ -1,678 +0,0 @@
|
||||
# Expedition Difficulty Tuning Pass
|
||||
|
||||
Started 2026-05-15, after the Phase D audit close-out. Sibling to the
|
||||
class-balance pass (`gogobee_class_balance.md`) — same Monte-Carlo
|
||||
philosophy, different target metric.
|
||||
|
||||
**Class balance answers** "is my class viable?" (parity between classes
|
||||
vs. the same monster tier).
|
||||
**This pass answers** "is the dungeon fair?" (does a tier-appropriate
|
||||
character complete a tier-N expedition at the expected rate?).
|
||||
|
||||
Same combat engine (`simulateCombatWithRNG`), orthogonal knobs.
|
||||
|
||||
---
|
||||
|
||||
## Method
|
||||
|
||||
**Sim harness, not telemetry-first.** A new
|
||||
`internal/plugin/dnd_expedition_balance.go` will run thousands of
|
||||
seeded expeditions through the real autopilot / threat / encounter /
|
||||
combat code and report:
|
||||
|
||||
- completion %
|
||||
- death %
|
||||
- median days-to-extract
|
||||
- median threat at extract
|
||||
- supply curve (% expeditions that hit Rationing / Severe / Starvation)
|
||||
- combat-encounter count per run
|
||||
- coin/XP earned
|
||||
|
||||
The harness produces these per (zone, player-level) cell; the
|
||||
regression test asserts the per-tier completion band.
|
||||
|
||||
**Tier target band** (steered by [[feedback_difficulty_target]]
|
||||
"relatively easy but not too easy", and reflecting that expeditions are
|
||||
multi-day commitments players plan around — losing one should sting but
|
||||
not feel arbitrary):
|
||||
|
||||
| Tier | Target completion % | Acceptable band |
|
||||
|------|--------------------:|-----------------|
|
||||
| T1 | 80% | 70–90% |
|
||||
| T2 | 72% | 62–82% |
|
||||
| T3 | 65% | 55–75% |
|
||||
| T4 | 55% | 45–65% |
|
||||
| T5 | 45% | 35–55% |
|
||||
|
||||
Bands are ±10pp around the centerline. Sim is asserted against the band,
|
||||
not the centerline (no overfit). Player-level for each cell = "tier
|
||||
appropriate" per the class-balance kit ladder: T1 → L1-4, T2 → L3-7,
|
||||
T3 → L5-10, T4 → L7-15, T5 → L10-20 (median level per tier).
|
||||
|
||||
**Out of scope:**
|
||||
|
||||
- Per-encounter combat parity (covered by `gogobee_class_balance.md`).
|
||||
- Arena difficulty (separate system, separate balance).
|
||||
- Live telemetry tables — deferred; sim is the primary truth source for
|
||||
this pass. We can add counters later if the sim diverges from
|
||||
observed live numbers.
|
||||
|
||||
---
|
||||
|
||||
## Phases
|
||||
|
||||
Each phase ≈ 1 session, ships green + committed.
|
||||
|
||||
### Phase 0 — sim harness spike
|
||||
|
||||
Build the minimum harness:
|
||||
|
||||
- New file `internal/plugin/dnd_expedition_balance.go` exposing
|
||||
`simulateExpeditionWithRNG(profile, seed)` → result struct.
|
||||
- **Critical de-risk: replay the autopilot deterministically.** The
|
||||
ticker is wall-clock driven (`dnd_expedition_cycle.go:38,56` at
|
||||
06:00 / 21:00 UTC; `expedition_ambient.go:22` every 3h). Harness
|
||||
must inject a virtual clock or call the per-phase advance functions
|
||||
directly (`deliverBriefing`, `deliverRecap`, ambient nudge, harvest
|
||||
autopilot) in tight loop, bypassing the goroutine ticker. **Settle
|
||||
the clock-injection seam in Phase 0** — if this is messy, the whole
|
||||
pass collapses.
|
||||
- DB-touching layers stubbed/in-memory (same trick as class-balance
|
||||
Phase 0).
|
||||
- Sanity test: one cell — e.g. T2 zone at L5 Fighter — runs to
|
||||
completion or death deterministically, returns sensible numbers,
|
||||
100 trials in <10s.
|
||||
|
||||
**Exit:** `TestExpeditionBalance_Phase0_Spike` green; commit.
|
||||
|
||||
### Phase 1 — full matrix measurement
|
||||
|
||||
- Build the cell list: every zone × tier-appropriate-level. Per the
|
||||
exploration map, expeditions span zones tagged T1–T5; we measure
|
||||
every zone at its centerline level.
|
||||
- 200 trials/cell (same density as class-balance Phase 1).
|
||||
- Matrix log: per-cell completion%, death%, median days, median
|
||||
extract-threat, supply-curve histogram.
|
||||
- Per-tier mean + spread diagnostic across zones (analogue of the
|
||||
class-balance per-(level,tier) spread diagnostic).
|
||||
- `TestClassBalance_Phase1_FullMatrix`-style permanent test, but only
|
||||
gating on harness-broken pathologies for now (0% completion anywhere
|
||||
at T1, 100% completion at T5).
|
||||
|
||||
**Exit:** matrix numbers logged; commit with "Phase 1 baseline" note.
|
||||
|
||||
### Phase 2b — wounded-entrant nick clamp (shipped)
|
||||
|
||||
`clampSurpriseNick(rawNick, hpCurrent, hpMax)` in
|
||||
`dnd_expedition_combat.go`: at full HP the raw nick stands; when
|
||||
wounded the nick is capped at `max(1, hpCurrent/5)` so a single nick
|
||||
on a low-HP fighter can't shave more than ~20% of remaining HP. The
|
||||
existing "nick can't KO" guard is preserved.
|
||||
|
||||
Motivation came from the post-2a tier-lethality trace
|
||||
(`TestExpeditionBalance_Phase2_TierLethality`): every tier had a
|
||||
fingerprint where an over-tier elite left the fighter at 25-50% HP +
|
||||
retreat, then the next standard's surprise nick (3-7 HP, often
|
||||
exceeding the fighter's headroom) pre-empted the combat engine
|
||||
entirely. Capping the wounded-entrant nick separates that cascade
|
||||
from genuine elite-one-shot deaths so Phase 2c can tune the elites
|
||||
with a clean read.
|
||||
|
||||
Matrix delta vs Phase 2a baseline is small (median encs +0.1-0.2
|
||||
per cell) — completion% still 0% across every tier — but the
|
||||
tier-lethality trace stretched substantively: T1 trial 0 went 5 → 8
|
||||
encs / 5 → 7 days; T3 trial 1 ran 18 → 10 encs but visibly survived
|
||||
multiple chained interrupts at low HP that pre-2b would have ended
|
||||
on the nick alone. The remaining deaths are now legible as elite
|
||||
one-shot fights on fresh entries (Hobgoblin Warchief, Green Hag,
|
||||
Roper, Young Red Dragon) — that's the Phase 2c roster signal.
|
||||
|
||||
**Tuning surface:** the `/5` divisor in `clampSurpriseNick` is the
|
||||
wounded-fighter lethality knob.
|
||||
|
||||
### Phase 2 lever sweep (shipped) — negative result
|
||||
|
||||
Before adding Phase 2c, the two surfaced knobs (`retreatThreatBump`,
|
||||
`clampSurpriseNick` divisor) got swept across a full 3×4 grid
|
||||
(bump ∈ {2, 5, 10} × divisor ∈ {3, 5, 8, 12}) at 200 trials/cell
|
||||
across every zone in the matrix. Wired via
|
||||
`expeditionBalanceProfile.{RetreatThreatBumpOverride,
|
||||
SurpriseNickDivisorOverride}` threaded into `expeditionHarness`;
|
||||
the live caller (`runHarvestInterrupt`) is untouched.
|
||||
|
||||
Sweep file: `TestExpeditionBalance_Phase2_LeverSweep` in
|
||||
`expedition_balance_test.go`. `-short` skips.
|
||||
|
||||
**Outcome:** every one of the 24,000 trial-cells reports 0.0%
|
||||
completion / ~100% death. The two knobs are inert on the headline
|
||||
metric — even the gentlest combo (b=2, d=12) cannot lift any tier
|
||||
off the floor. Median days-to-end stays at 2–3 across the grid
|
||||
with median 2.6–7.3 encounters before death.
|
||||
|
||||
**Read:** confirms the post-2b tier-lethality trace — deaths are
|
||||
fresh-entry elite one-shots (Warchief @ HP19/20, Hag @ HP41, Roper,
|
||||
Young Red Dragon), not chained-interrupt cascades. The two levers
|
||||
target the cascade path that's now mostly resolved; they have no
|
||||
remaining death-fraction to convert. Phase 2c (roster dilution) is
|
||||
justified rather than premature.
|
||||
|
||||
### Phase 2c — roster gate (shipped)
|
||||
|
||||
Promoted one mid-tier alt to `IsElite: true` in every zone whose elite
|
||||
pool was a single SpawnWeight=1 boss (`internal/plugin/dnd_zone.go`).
|
||||
The boss stays in the pool; weighted dilution means the InterruptElite
|
||||
bracket no longer auto-picks the over-tier boss. `pickZoneEnemy` also
|
||||
excludes the promoted entry from the standard pool, lowering standard
|
||||
encounter difficulty by removing one mid-difficulty option from
|
||||
non-elite brackets (acceptable: each zone still has 3-4 standard
|
||||
entries left). Crypt-Valdris was already dual-elite (wight + flameskull)
|
||||
and was left alone.
|
||||
|
||||
| zone | promoted alt | boss (untouched) |
|
||||
|--------------------|-----------------------|--------------------|
|
||||
| goblin_warrens | worg (SW=3) | hobgoblin_warchief |
|
||||
| forest_shadows | owlbear (SW=4) | green_hag |
|
||||
| sunken_temple | aboleth_thrall (SW=3) | water_elemental |
|
||||
| manor_blackspire | vampire_spawn (SW=3) | revenant |
|
||||
| underforge | salamander (SW=3) + fire_elemental (SW=3) | helmed_horror |
|
||||
| underdark | drow_elite_warrior (SW=4) | roper |
|
||||
| feywild_crossing | night_hag (SW=3) | fomorian |
|
||||
| dragons_lair | dragonborn_cultist (SW=3) | young_red_dragon |
|
||||
| abyss_portal | hezrou (SW=4) | marilith |
|
||||
|
||||
**Phase 1 matrix delta (200 trials/cell, Fighter, tier centerline):**
|
||||
goblin_warrens 0% → **3.0%** completion (first non-zero T1 reading
|
||||
since Phase 0); sunken_temple 0% → 0.5%; dragons_lair death% **100% →
|
||||
60%** with 40% now starve (fighter survives the elite-spawn path long
|
||||
enough to run out of supplies — different failure mode); underdark
|
||||
death% 100% → 90% (10% starve); feywild_crossing 100% → 92% death
|
||||
(8% starve). T3 manor_blackspire / underforge still 100% death — the
|
||||
remaining death pressure there is the post-2b chained-standard path,
|
||||
not the elite roll.
|
||||
|
||||
Tier-lethality trace cross-check (`Phase2_TierLethality`) shows the
|
||||
new alt-elites actually spawning and being winnable: underdark trial
|
||||
1 now opens with `Drow Elite Warrior` (won), reaches the Roper at
|
||||
turn 6, retreats, then dies on a Hook Horror nick — a substantively
|
||||
longer arc than the pre-2c fresh-entry Roper one-shot. Dragons_lair
|
||||
trials similarly show `Dragonborn Cultist` as a winnable elite stop
|
||||
before the dragon roll lands.
|
||||
|
||||
Stat-block tuning of the bosses themselves is off-limits per the
|
||||
Phase 3 constraint (bestiary is shared across systems).
|
||||
|
||||
### Phase 3 — global lever tuning
|
||||
|
||||
Tune the knobs that affect every zone uniformly:
|
||||
|
||||
- **Daily threat drift** (`dnd_expedition_threat.go:87` — base +3/day).
|
||||
- **Threat band thresholds** (Quiet/Stirring/Alert/Hostile/Siege —
|
||||
`dnd_expedition_threat.go:70-82`).
|
||||
- **Supply burn multipliers** (`dnd_expedition_supplies.go:43-56` —
|
||||
T1×1 → T5×3).
|
||||
- **Surprise-round damage floor** (`dnd_expedition_combat.go:184`).
|
||||
- **Encounter bracket thresholds** (`dnd_expedition_combat.go:39-44`
|
||||
None/Noise/Standard/Elite/Patrol).
|
||||
- **Camp mods** (`dnd_expedition_night.go:85-92`).
|
||||
|
||||
Goal: every tier centerline lands within ±5pp of target. Bands stay
|
||||
±10pp.
|
||||
|
||||
#### Phase 3-A — elite-bracket + drift sweep (shipped)
|
||||
|
||||
Wired two harness overrides
|
||||
(`EliteInterruptThresholdOverride`, `ThreatDriftBaseOverride`) and
|
||||
swept a 3×3 grid (elite ∈ {17, 19, 23} × drift ∈ {1, 3, 5}) over
|
||||
the Phase 1 matrix. Test: `TestExpeditionBalance_Phase3_GlobalLeverSweep`.
|
||||
|
||||
**Strong partial positive.** The elite-bracket threshold is the
|
||||
dominant lever for T1–T3; threat drift is a small modulator on top.
|
||||
|
||||
| (elite, drift) | T1 mean | T2 mean | T3 mean | T4 mean | T5 mean |
|
||||
|----------------|--------:|--------:|--------:|--------:|--------:|
|
||||
| 17, 1 (more elites) | 0.5% | 0.0% | 0.0% | 0.0% | 0.0% |
|
||||
| 19, 3 (live) | 3.0% | 0.2% | 0.0% | 0.0% | 0.0% |
|
||||
| 23, 1 (rare elites) | **24.0%** | **7.2%** | **1.8%** | 0.0% | 0.0% |
|
||||
| 23, 3 | 16.5% | 4.0% | 2.0% | 0.0% | 0.0% |
|
||||
| 23, 5 | 11.8% | 3.2% | 0.2% | 0.0% | 0.0% |
|
||||
|
||||
Best cell at e=23/d=1: goblin_warrens 40.5%, sunken_temple 14.5%.
|
||||
Still well below the T1 70-90% / T2 62-82% target bands — the lever
|
||||
moves the needle in the right direction but cannot land any tier
|
||||
on-band alone.
|
||||
|
||||
**T4/T5 fingerprint changed but didn't lift.** At e=23 the dragons_lair
|
||||
death-fraction drops from ~60% → 24% but starvation climbs to 75% —
|
||||
the fighter now survives elites long enough to run out of supplies.
|
||||
T4 (underdark/feywild) likewise sees death drop and starvation rise.
|
||||
Indicates a second lever is needed for the higher tiers: either
|
||||
standard-fight survivability (surprise-nick floor / standard roster
|
||||
density) or supply margin.
|
||||
|
||||
**Next:** Phase 3-B sweeps surprise-round nick and supply-burn knobs
|
||||
on top of e=23/d=1 to push T1-T3 toward target band and lift T4-T5
|
||||
off the floor.
|
||||
|
||||
#### Phase 3-B — nick-floor + supply-burn sweep (shipped)
|
||||
|
||||
Wired two more harness overrides (`SurpriseNickFloorOverride`,
|
||||
`SupplyBurnRatePctOverride`) and swept a 3×3 grid (floor ∈ {0, 1, tier
|
||||
(=live)} × burn% ∈ {50, 75, 100 (=live)}) on top of the Phase 3-A best
|
||||
cell (e=23, d=1). Test: `TestExpeditionBalance_Phase3B_NickSupplySweep`.
|
||||
|
||||
**Strong partial positive for T5 supply margin; nick-floor lever inert.**
|
||||
|
||||
Tier-mean completion (Fighter, centerline level, 10 zones × 200 trials):
|
||||
|
||||
| (floor, burn%) | T1 mean | T2 | T3 | T4 | T5 |
|
||||
|----------------|--------:|----:|----:|-----:|-----:|
|
||||
| 0, 50 | 20.8% | 5.0%| 3.8%| 7.5% | 29.5%|
|
||||
| 0, 75 | 26.5% | 6.0%| 2.8%| 9.0% | 0.0% |
|
||||
| 0, 100 | 25.8% | 5.0%| 3.0%| 0.0% | 0.0% |
|
||||
| 1, 50 | 25.5% | 6.5%| 1.8%| 8.5% | 27.8%|
|
||||
| 1, 75 | 28.5% | 6.2%| 4.0%|11.5% | 0.0% |
|
||||
| 1, 100 | 26.8% | 7.5%| 2.5%| 0.0% | 0.0% |
|
||||
| tier, 50 | 26.8% | 6.2%| 2.5%| 7.8% | 27.5%|
|
||||
| tier, 75 (live floor) | **29.5%** | **7.8%** | 3.0% | **12.8%** | 0.0% |
|
||||
| tier,100 (live)| 28.5% | 6.8%| 3.0%| 0.0% | 0.0% |
|
||||
|
||||
Three readings:
|
||||
|
||||
1. **Supply burn is the T5 unlock.** dragons_lair completes ~55% at
|
||||
burn=50 (versus 0% at burn=75/100) — the fighter survives elites
|
||||
but starves en route. burn=75 isn't enough margin; burn=50
|
||||
converts the starvation-out into a completion.
|
||||
2. **Supply burn is the T4 modulator.** underdark/feywild step from
|
||||
0% (burn=100) → 12% (burn=75) → 8% (burn=50). The burn=75 peak is
|
||||
the sweet spot; halving further leaves the fighter alive *into*
|
||||
more elite fights, where it dies in combat instead.
|
||||
3. **Nick-floor lever is inert.** Across all burn levels, dropping
|
||||
the surprise-round floor from `tier` → `1` → `0` moves T1-T3
|
||||
means by at most ~3pp. The wounded-clamp (Phase 2b,
|
||||
`clampSurpriseNick`) already eats the chip-damage budget on
|
||||
repeat entries; the raw floor only matters on the first fresh-HP
|
||||
swing, which the engine recovers from. **Recommendation: discard
|
||||
this lever from the live-tuning candidate list.**
|
||||
|
||||
**T2-T3 wall persists.** Even at the best (floor=tier, burn=75) cell:
|
||||
T2 reads 7.8% (target 62-82%) and T3 reads 3.0% (target 54-74%).
|
||||
forest_shadows T2, manor_blackspire T3, and abyss_portal T5 sit at
|
||||
~0% across every combo — these are zone-specific outliers, not
|
||||
addressable by any global lever. **Phase 4 (per-zone outlier pass)
|
||||
is the next move.**
|
||||
|
||||
**Next:** Phase 4 walks the matrix zone-by-zone. The shipped Phase 3
|
||||
sweep already names the worst offenders (forest_shadows T2,
|
||||
manor_blackspire T3, abyss_portal T5, crypt_valdris T1); each needs a
|
||||
diagnostic trace (boss stat-block, roster mix, supply DC) to pick the
|
||||
right per-zone tool from `Phase 4`'s list. Optional: revisit shipping
|
||||
the burn=75 global if Phase 4 outlier fixes leave T4 still stuck.
|
||||
|
||||
### Phase 4 — per-zone outlier pass
|
||||
|
||||
After globals settle, the matrix names outlier zones — tiers where
|
||||
one zone reads dramatically off-band while sibling zones are fine.
|
||||
Per-zone tools:
|
||||
|
||||
- `SpawnWeight` / `IsElite` flags in zone rosters (`dnd_zone.go:100`).
|
||||
- Boss stat tuning in zone definitions.
|
||||
- Resource DCs (affects harvest interrupt roll).
|
||||
- Per-zone loot table density (downstream economy impact — flag if
|
||||
significant).
|
||||
|
||||
Constraint: do not touch monster stat blocks (those belong to the
|
||||
bestiary, shared across systems). Tune the roster + zone-level knobs,
|
||||
not the monsters themselves.
|
||||
|
||||
#### Phase 4-A — outlier diagnostic (shipped)
|
||||
|
||||
Added a structured per-fight trace hook (`traceFightStruct` +
|
||||
`harnessFightTrace`) alongside the existing string `traceFight`;
|
||||
both fire from the same `runHarnessFight` site so the human log and
|
||||
the structured aggregate stay in sync. Test:
|
||||
`TestExpeditionBalance_Phase4A_OutlierDiagnostic`. For each of the
|
||||
four outlier zones it pairs against the healthy sibling at the same
|
||||
tier (goblin_warrens, sunken_temple, underforge, dragons_lair),
|
||||
running 200 trials each on the Phase 3-B best cell (e=23, d=1,
|
||||
burn=50) and reporting per-monster appearances / win-rate / avg HP
|
||||
loss / kill attribution + day-of-end histogram.
|
||||
|
||||
Findings — each outlier had one or two miscategorised entries that
|
||||
Phase 2c's single-boss-elite dilution sweep had skipped:
|
||||
|
||||
- **crypt_valdris**: dual-killer elite pool (Wight 99k, Flameskull
|
||||
68k); Phase 2c had skipped this zone as "already dual-elite," but
|
||||
both elites are over-tier for T1.
|
||||
- **forest_shadows**: standard pool too lethal — Displacer Beast
|
||||
(38% win, 53k) + Bandit Captain (57% win, 48k).
|
||||
- **manor_blackspire**: Wraith on standard slot (45hp loss per win,
|
||||
85k).
|
||||
- **abyss_portal**: Nalfeshnee mis-classified standard (CR-13, 2.8%
|
||||
win, 86k) + Vrock standard at 43hp loss per win.
|
||||
|
||||
#### Phase 4-B — roster re-classification (shipped)
|
||||
|
||||
Per-zone roster tweaks based on Phase 4-A's attribution. No monster
|
||||
stat-block touches.
|
||||
|
||||
- crypt_valdris: dropped flameskull (lives in underforge T3);
|
||||
promoted specter to IsElite SW=3 as the soft dilutor.
|
||||
- forest_shadows: promoted Displacer Beast + Bandit Captain to
|
||||
IsElite; Owlbear SW 4→2 so the 4-elite pool dilutes evenly.
|
||||
- manor_blackspire: promoted Wraith to IsElite (joins
|
||||
Spawn+Revenant).
|
||||
- abyss_portal: promoted Nalfeshnee + Vrock to IsElite (collapses
|
||||
standard pool to Quasit alone, ≥99% win).
|
||||
|
||||
Outlier-vs-sibling completion (Phase 3-B best cell, 200 trials):
|
||||
|
||||
| Zone | Before | After | Sibling |
|
||||
|------|-------:|------:|--------:|
|
||||
| crypt_valdris T1 | 8.5% | **46.0%** | 45.0% |
|
||||
| forest_shadows T2 | 0.0% | **7.5%** | 13.0% |
|
||||
| manor_blackspire T3| 0.5% | **14.5%** | 3.0% |
|
||||
| abyss_portal T5 | 0.0% | **25.0%** | 57.5% |
|
||||
|
||||
Phase 3-B tier mean (b=50, f=tier) before → after:
|
||||
T1 26.8% → 44.0% (+17pp), T2 6.2% → 10.0% (+4),
|
||||
T3 2.5% → 8.5% (+6), T4 unchanged, T5 27.5% → 41.0% (+14).
|
||||
|
||||
**Exit (partial):** the four off-band outliers are no longer
|
||||
outliers — every per-zone cell is within the spread of its tier
|
||||
siblings. The Phase 4 plan's stricter exit ("all per-zone cells
|
||||
within target band") is **not** met: T2/T3/T5 sibling pairs still
|
||||
sit below band (T2 7-13% vs 62-82%; T3 3-14% vs 54-74%; T5 25-57%
|
||||
vs 36-56%). That gap is tier-wide, not zone-specific — both zones at
|
||||
each problem tier underperform together — so no further per-zone
|
||||
tool will close it. Phase 5 (or a follow-up tier-wide pass) needs to
|
||||
take over.
|
||||
|
||||
**Next:** Phase 5. Candidate moves are tier-wide: revisit player
|
||||
gear-tier mapping at T2/T3 (the centerline level vs gear ladder, see
|
||||
`phase1TierCenterline`), reconsider the elite-bracket threshold
|
||||
per-tier instead of global, or ship `burn=75` as the new live global
|
||||
since Phase 4-B already converted T4 to playable at b=50.
|
||||
|
||||
### Phase 5 — tier-wide pass (T2/T3/T5 under-band)
|
||||
|
||||
Phase 4-B closed the per-zone outliers but left T2/T3/T5 sibling pairs
|
||||
below the target band as a *tier-wide* gap. The plan doc's three
|
||||
candidate moves (gear-tier centerline remap, per-tier elite threshold,
|
||||
ship `burn=75`) needed disambiguation before any of them got pulled —
|
||||
hence a measure-first sub-phase.
|
||||
|
||||
#### Phase 5-A — tier-wide sensitivity sweep (shipped)
|
||||
|
||||
`TestExpeditionBalance_Phase5A_TierWideSensitivity` runs the 6 under-
|
||||
band zones (T2: forest_shadows + sunken_temple; T3:
|
||||
manor_blackspire + underforge; T5: abyss_portal + dragons_lair) through
|
||||
three one-axis sweeps with the other two levers held at Phase 3-B best
|
||||
(e=23, d=1, burn=50): player level ±2 around tier centerline, elite
|
||||
threshold ∈ {18, 23, 28}, supply burn pct ∈ {40, 50, 60}. 200
|
||||
trials/cell × 6 zones × 9 cells = 10.8k trials; runs in <1s.
|
||||
|
||||
Numbers (200 trials/cell, comp%):
|
||||
|
||||
```
|
||||
T2 (band 62-82%)
|
||||
L forest=0→6.5→19 sunken=0→13.5→34.5 STRONG slope
|
||||
E forest=0.5→9→8 sunken=0→14.5→13 saturated @23; 18 collapses
|
||||
B forest=3.5→7→6.5 sunken=14→15.5→11 inert
|
||||
T3 (band 54-74%)
|
||||
L manor=3→10.5→13.5 under=0→4→8.5 clear slope
|
||||
E manor=0→9.5→9.5 under=0→3→4 saturated @23; 18 collapses
|
||||
B manor=13→9.5→9.5 under=2.5→4→2.5 inert
|
||||
T5 (band 36-56%)
|
||||
L abyss=21.5→28.5→32 dragons=60→60.5→53 gentle; dragons in-band
|
||||
E abyss=1→28.5→31 dragons=10→60.5→57.5 saturated @23; 18 collapses
|
||||
B abyss=27.5→28.5→0 dragons=59→60.5→0 burn=60 STARVE CLIFF
|
||||
```
|
||||
|
||||
**Reading:**
|
||||
- **Player level is the dominant lever at T2/T3.** Every +2 levels
|
||||
lifts completion meaningfully; the elite gate and supply burn are
|
||||
inert or actively harmful around the Phase 3-B baseline.
|
||||
- **Elite threshold is already at its sweet spot at e=23.** Going to
|
||||
e=18 floods elites and collapses every tier; e=28 is flat. The per-
|
||||
tier-threshold candidate from Phase 4 close-out is killed: there's
|
||||
no per-tier value to be found in the explored range.
|
||||
- **`burn=75` globally is killed.** burn=60 alone produces 36% / 61%
|
||||
starve at T5; burn=75 would be catastrophic. The Phase 3-B negative
|
||||
result holds tier-wide. burn must stay ≤50.
|
||||
- **T5 dragons_lair is already in-band** at the baseline (60.5%).
|
||||
The T5 tier-wide gap is really an abyss_portal gap (28.5%); the
|
||||
Phase 4-B re-class lifted it from outlier to "low-but-not-isolated,"
|
||||
but it still sits below band by itself.
|
||||
- **The level-bump path has a catch.** L7 at T2 (still inside the
|
||||
L3-7 design range and gearTier=2) only reaches ~27% mean — still
|
||||
well below the 62-82% band. Closing T2 to band likely requires a
|
||||
*cross-gearTier-boundary* centerline (T2 → L9 = gearTier 3) and/or
|
||||
a player-side combat-math adjustment, not just a within-bracket
|
||||
centerline shift. That's a design call, not a knob twist.
|
||||
|
||||
**Next:** Phase 5-B is a design choice between three concrete moves
|
||||
that the measurement now backs:
|
||||
|
||||
1. **Cross-bracket centerline bump** for T2 (→ L9) and T3 (→ L13),
|
||||
plus T5 abyss-only level tweak. Lifts player gear bracket into the
|
||||
next tier; closes the band gap directly but is a player-side power
|
||||
move that affects the live game (chars at the centerline level
|
||||
keep their existing gear; centerline only governs the harness's
|
||||
measurement cell). The change is *in the harness*, but it admits
|
||||
the live difficulty target was wrong for these tiers — Phase 5-C
|
||||
would then carry it back to the live gear-acquisition curve.
|
||||
2. **Player combat-math retune** at T2/T3 (HP scaling, proficiency
|
||||
curve, attack-bonus floor) — bigger lift, touches the class-balance
|
||||
harness too, deserves its own pass.
|
||||
3. **Lower the band target** for T2/T3/T5 to ~30-50% mean and accept
|
||||
that completion is meant to be hard. This is the "do nothing"
|
||||
option dressed up as a design decision; surfaces the question of
|
||||
whether the original 70% T2 target was ever the right number.
|
||||
|
||||
Recommend option (1) for Phase 5-B since the harness already measures
|
||||
it cleanly and the data points at it; option (3) is the fallback if
|
||||
the cross-bracket numbers still don't close the band.
|
||||
|
||||
#### Phase 5-B — player power floor + Phase-3 winners shipped
|
||||
|
||||
The Phase 5-A read named player level / gear-tier centerline as the
|
||||
dominant lever at T2/T3 but flagged that even max-of-range within the
|
||||
gear bracket missed the band. Three design options were on the table:
|
||||
cross-bracket centerline bump, **player combat-math retune**, or
|
||||
lower the band target. The user picked combat-math retune ("fairly
|
||||
breezy with some death — not a ton") — option (2). On reflection
|
||||
this was the only one of the three that actually moves *live*
|
||||
difficulty (cross-bracket centerline only moves the harness number;
|
||||
lowering the band is the "do-nothing" fallback).
|
||||
|
||||
The shipped lift, in five small pieces:
|
||||
|
||||
1. **`computeMaxHP` ×1.5** (`dnd.go: phase5BHPMult`). The HP curve is
|
||||
uniformly scaled so every class/level lifts together — preserves
|
||||
the class-balance harness's in-tier spread assertion. Migration
|
||||
`bootstrapPhase5BHPRefresh` walks `dnd_character` once at startup
|
||||
to refresh existing rows; idempotent via `db.JobCompleted`.
|
||||
2. **Combat-stat player floor** (`dnd_combat.go:
|
||||
applyPhase5BPlayerFloor`): +3 AC, +3 AttackBonus, +3
|
||||
weapon.MagicBonus (damage). Applied at the END of
|
||||
`applyDnDEquipmentLayer` (so the AC override from
|
||||
`computeArmorAC` doesn't stomp it) AND inside `buildHarnessPlayer`
|
||||
so live and harness measurement agree.
|
||||
3. **Elite bracket 19 → 23** (`dnd_expedition_combat.go:
|
||||
resolveCombatInterrupt`). Case order: Elite (≥23) before Patrol
|
||||
(≥22) so a 23+ total prefers the single dangerous fight over the
|
||||
patrol-flavored standard pick. Elite is now effectively a
|
||||
*high-threat* event reachable only via the +1-per-20-threat-above-40
|
||||
mod — base d20+tier+ranger maxes at ~21. Phase 4-B's elite-pool
|
||||
monsters still appear; just less often.
|
||||
4. **Threat drift base 3 → 1** (`dnd_expedition_threat.go:
|
||||
dailyThreatDrift`). Slows the threat clock so players have the
|
||||
days they need to extract before threat tips zones into the new
|
||||
23+ elite band.
|
||||
5. **Daily supply burn × 0.5** (`dnd_expedition_supplies.go:
|
||||
phase5BDailyBurnRatePct`). `applyDailyBurn`'s default now passes
|
||||
50; `applyDailyBurnP` keeps its rate-parameterized form for the
|
||||
harness. Also applied in the temporal-override branch
|
||||
(`dnd_expedition_cycle.go`) so tidal / unraveling days scale by
|
||||
the same 0.5× — otherwise those days would be disproportionately
|
||||
harsh against the new baseline.
|
||||
|
||||
The harness reflects all five (`expedition_balance.go` reads
|
||||
`phase5BDailyBurnRatePct` as the default-burn fallback when the
|
||||
override knob is zero). Phase 1 matrix on the shipped baseline,
|
||||
Fighter @ tier-centerline, 200 trials:
|
||||
|
||||
```
|
||||
T1 87.8% spread 1.5 (crypt 89, goblin 87) ⬆ band 70-90 — IN BAND
|
||||
T2 74.0% spread 12 (forest 80, sunken 68) ⬆ band 62-82 — IN BAND
|
||||
T3 43.2% spread 8.5 (manor 39, underforge 47) ⬇ band 55-75 — UNDER
|
||||
T4 71.8% spread 25.5 (feywild 59, underdark 88) ⬆ band 45-65 — OVER (breezy)
|
||||
T5 ~57% (dragons 78, abyss 38) ⬆ band 35-55 — borderline
|
||||
```
|
||||
|
||||
Four of five tier means land at or above band-center, matching the
|
||||
"fairly breezy with some death" target. **T3 remains the hump** —
|
||||
both manor and underforge sit ~40-50% completion, killing 50-60% of
|
||||
the time. Phase 4-B already promoted T3's worst killers (Wraith) to
|
||||
elite, so the standard-pool deaths are now the irreducible part.
|
||||
T4's wide spread (feywild 59 vs underdark 88) means feywild still
|
||||
has a roster-side asymmetry that warrants a Phase 4-B-style pass.
|
||||
|
||||
**Test debt cleaned:** 13 unit tests in `combat_stats_test.go`,
|
||||
`dnd_test.go`, `dnd_xp_test.go`, `dnd_equipment_profiles_test.go`,
|
||||
`dnd_expedition_supplies_test.go`, `dnd_expedition_cycle_test.go`,
|
||||
`dnd_expedition_extract_test.go`, `dnd_expedition_region_cmd_test.go`,
|
||||
`dnd_expedition_combat_test.go`, `dnd_expedition_threat_test.go`,
|
||||
`dnd_expedition_temporal_test.go`, `expedition_balance_test.go` were
|
||||
pinning the pre-Phase-5-B numbers; updated to the shipped values
|
||||
with comments noting the cause.
|
||||
|
||||
**Exit:** Phase 5-B closed-out the user's primary target ("make it
|
||||
breezy"). T1/T2/T4/T5 mean in or above band; T3 remains the design
|
||||
hump and is fine for "some death" tier shape. Remaining work
|
||||
(Phase 5-C+) is T3 roster polish + feywild T4-spread fix — separate
|
||||
session.
|
||||
|
||||
#### Phase 5-C — T3 polish + T4 spread fix (rosters only)
|
||||
|
||||
Phase 5-B's exit named two follow-ups: T3 below band (manor 39 /
|
||||
underforge 47 vs 55-75), and the T4 spread (feywild 59 vs underdark
|
||||
88 = 30pp asymmetry). Phase 5-C re-runs the Phase 4-A trace on the
|
||||
four affected zones at the shipped Phase 5-B cell
|
||||
(`TestExpeditionBalance_Phase5C_OutlierDiagnostic`) and identifies
|
||||
which monsters own the lethality budget per zone, then applies the
|
||||
Phase 4-B toolset (IsElite toggle + SpawnWeight rebalance only — no
|
||||
bestiary stat-block touches).
|
||||
|
||||
Per-zone reads from the diagnostic (200 trials, L9/L13 Fighter,
|
||||
e=23 d=1 burn=50):
|
||||
|
||||
manor_blackspire (53% comp): standards all ≥99% win. Elite pool
|
||||
is the lethality source — Vampire Spawn (72% win, 42 kills) and
|
||||
Revenant (16% win, 31 kills at SW=1) split the kill budget.
|
||||
Revenant can't drop below SW=1, and trimming Vampire Spawn
|
||||
(first attempt: SW 3 → 2) backfired by shifting elite share onto
|
||||
Revenant — kills jumped to 48 and completion fell to 44.5%.
|
||||
|
||||
underforge (49.5% comp): Fire Elemental (57 kills, 61hp/win) +
|
||||
Salamander (33 kills) own elite share. Helmed Horror was the
|
||||
only 100%-win elite but sat at SW=1, providing almost no
|
||||
dilution.
|
||||
|
||||
feywild_crossing (54% comp): Fomorian alone (65 kills, 50% win,
|
||||
SW=1) owns the elite kill budget — only 2 elites in the pool
|
||||
(Night Hag SW=3 + Fomorian SW=1), so Fomorian still gets 25% of
|
||||
elite picks despite the low weight.
|
||||
|
||||
underdark (86% comp): Drow at SW=7 (1801/4164 standard rolls,
|
||||
100% win / 1.1hp loss) is a free-HP filler dominating the
|
||||
standard pool.
|
||||
|
||||
Roster changes shipped (`dnd_zone.go`):
|
||||
|
||||
manor_blackspire — Banshee promoted to elite at SW=2 (was SW=3
|
||||
standard, 99.6% win, 11hp loss): adds a soft 4th elite slot,
|
||||
dropping Revenant's elite share ~14% → 11% without changing
|
||||
its presence. Standard floor collapses to Shadow + Poltergeist,
|
||||
both ≥99% win at ≤5hp loss.
|
||||
|
||||
underforge — Helmed Horror SW 1 → 3 (98%+ win, 15hp loss): three
|
||||
roughly-equal elite slots (Salamander 3 + Fire Elemental 3 +
|
||||
Helmed Horror 3), reducing Fire Elemental's elite share from
|
||||
~44% to ~33%.
|
||||
|
||||
feywild_crossing — Green Hag promoted to elite at SW=2 (was SW=4
|
||||
standard, 98% win, 16hp loss): adds a softer 3rd elite slot,
|
||||
diluting Fomorian's share, AND pulls a moderate-attrition fight
|
||||
out of the standard pool. Standard floor becomes Redcap +
|
||||
Will-o-Wisp + Quickling (all ≥99% win, ≤11hp loss).
|
||||
|
||||
underdark (light trim per user's "lift trailers, don't nerf
|
||||
leaders" stance) — Drow SW 7 → 5: standards shift toward Hook
|
||||
Horror (17.8hp/win) and Drow Mage (16.4hp/win), still safe but
|
||||
with real attrition.
|
||||
|
||||
Phase 1 matrix after Phase 5-C (200 trials, Fighter @ centerline):
|
||||
|
||||
```
|
||||
T1 88.5% spread 1.0 (crypt 89, goblin 88) ⬆ band 70-90 — IN BAND
|
||||
T2 74.5% spread 15.0 (forest 82, sunken 67) ⬆ band 62-82 — IN BAND
|
||||
T3 56.7% spread 0.5 (manor 57, underforge 56.5) ⬆ band 55-75 — IN BAND ⬆ +13.5pp
|
||||
T4 77.0% spread 13.0 (feywild 70.5, underdark 83.5) ⬆ band 45-65 — OVER (matches 5-B target)
|
||||
T5 58.0% spread 40.0 (abyss 38, dragons 78) ⬆ band 35-55 — borderline (abyss the residual)
|
||||
```
|
||||
|
||||
T3 mean lifted +13.5pp; both zones land inside the band with a
|
||||
0.5pp residual spread. T4 spread halved (25.5 → 13.0pp) by lifting
|
||||
feywild +11.5pp and trimming underdark -4.5pp, matching the user's
|
||||
chosen "lift mostly, trim lightly" direction. T1/T2/T5 untouched.
|
||||
|
||||
**Test debt:** none — no production tests pinned the changed
|
||||
SpawnWeight or IsElite values. `TestMonsterKillTags_GatesKnownMonsters`
|
||||
checks `vampire_spawn` tags but is unaffected by weight.
|
||||
|
||||
**Exit:** T1-T4 all in or above band; T5's abyss_portal (38%) is
|
||||
the only remaining sub-band cell and is a tier-asymmetry residual,
|
||||
not a per-zone outlier. Phase 5-D could revisit abyss specifically,
|
||||
but it's optional — the user's "breezy with some death" target is
|
||||
hit across the live tier ladder.
|
||||
|
||||
### Phase 6 — optional MAD / second-order
|
||||
|
||||
If post-Phase-3 the bands hold but feel wrong subjectively
|
||||
(e.g. "median days too short", "no expedition ever hits Siege"), add a
|
||||
secondary assertion on median-days-to-extract or extract-threat. Phase
|
||||
3 may also surface a request to expose a difficulty knob to operators
|
||||
(env var or admin command); scope that here if it comes up.
|
||||
|
||||
---
|
||||
|
||||
## Open questions
|
||||
|
||||
- Should the babysit perk be on or off in the sim? Pick one and
|
||||
document; both as separate cells doubles matrix size for diminishing
|
||||
insight. Default proposed: **off**, since it's a discovery-mechanic
|
||||
buff ([[feedback_npc_buffs_are_secret]]) — players who find it earn
|
||||
extra margin, not the baseline.
|
||||
- Pardon proc (33% @ chat 20+): include in sim, but at a fixed
|
||||
chat-level assumption (chat 15 = no pardon, since most fresh runs
|
||||
haven't hit the threshold). Decide in Phase 0.
|
||||
- Sovereign reprieve: skip in sim — it's gated on full set equipped
|
||||
and is a one-shot per cooldown. End-game-only; not part of the
|
||||
baseline difficulty.
|
||||
- Multi-region zones (E4): does the sim need to walk all regions in
|
||||
one expedition, or pick one region per run? Probably full walk for
|
||||
realism. Settle in Phase 0.
|
||||
- DM mood: starts at 50; drifts via combat outcomes. Let it drift
|
||||
naturally in the sim, do not pin.
|
||||
|
||||
---
|
||||
|
||||
## Deliverables checklist
|
||||
|
||||
- [ ] `internal/plugin/dnd_expedition_balance.go` (sim harness)
|
||||
- [ ] `TestExpeditionBalance_Phase0_Spike`
|
||||
- [ ] `TestExpeditionBalance_Phase1_FullMatrix` (becomes the permanent
|
||||
regression gate after Phase 2 tightens it)
|
||||
- [ ] Tuning commits per phase
|
||||
- [ ] One-line update to `MEMORY.md` + project memory pointer
|
||||
@@ -1,584 +0,0 @@
|
||||
# GogoBee — Expedition System
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`, `gogobee_dungeon_zones.md`
|
||||
> **Version:** 1.0
|
||||
> **Status:** Draft
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
All existing `*_flavor.go` / `*_flavor.txt` files are off-limits.
|
||||
New expedition flavor text goes in `twinbee_expedition_flavor.go` — a new file, never edits to existing ones.
|
||||
|
||||
---
|
||||
|
||||
## 1. Design Philosophy
|
||||
|
||||
Single-session dungeon runs are replaced by **Expeditions** — persistent, multi-day (sometimes multi-week) explorations tied to real calendar time. An Expedition is not a sprint. It is a campaign.
|
||||
|
||||
### What changes
|
||||
|
||||
- Zones are no longer completed in one sitting. They unfold over real days.
|
||||
- The player logs in each day to take actions, advance, rest, manage supplies.
|
||||
- TwinBee delivers a **Morning Briefing** and an **Evening Recap** every real-world day the expedition is active.
|
||||
- Resources deplete over time. Poor planning ends expeditions early.
|
||||
- The dungeon has a **Threat Clock** — the longer you stay, the more aware the zone becomes.
|
||||
- Some events only happen on specific days, specific times, or after specific triggers.
|
||||
|
||||
### What doesn't change
|
||||
|
||||
- All combat mechanics from the main design doc apply unchanged.
|
||||
- Loot, XP, and progression work identically.
|
||||
- Players can still retreat, rest, and use all existing commands.
|
||||
- Zones are still the same zones with the same bosses.
|
||||
|
||||
---
|
||||
|
||||
## 2. Expedition Duration by Zone Tier
|
||||
|
||||
| Tier | Zone | Minimum Days | Maximum Days | Notes |
|
||||
|---|---|---|---|---|
|
||||
| 1 | Goblin Warrens | 2 | 4 | Shortest possible expedition |
|
||||
| 1 | Crypt of Valdris | 2 | 5 | Boss requires full rest before attempt |
|
||||
| 2 | Forest of Shadows | 4 | 8 | Zone scales spatially |
|
||||
| 2 | Sunken Temple | 4 | 9 | Tidal event on Day 6 (see Section 7) |
|
||||
| 3 | Haunted Manor | 6 | 12 | Manor fully resets every 3 in-game nights |
|
||||
| 3 | The Underforge | 5 | 10 | Heat accumulation mechanic |
|
||||
| 4 | The Underdark | 10 | 21 | Multi-region; truly exhausting |
|
||||
| 4 | Feywild Crossing | 8 | 14 | Time distortion (see Section 7) |
|
||||
| 5 | Dragon's Lair | 14 | 30 | Multi-wing structure |
|
||||
| 5 | The Abyss Portal | 21 | ∞ | Portal destabilizes over time; hard exit pressure |
|
||||
|
||||
**Minimum days** = the absolute floor if a player advances aggressively, rests optimally, and encounters no complications.
|
||||
**Maximum days** = soft cap. After this, the Threat Clock maxes out and the expedition enters **Siege Mode** (see Section 8).
|
||||
|
||||
---
|
||||
|
||||
## 3. The Expedition Day Cycle
|
||||
|
||||
Each real-world day an expedition is active follows this structure:
|
||||
|
||||
```
|
||||
06:00 — MORNING BRIEFING (TwinBee)
|
||||
Status summary: HP, supplies, current location,
|
||||
Threat Clock level, any overnight events.
|
||||
|
||||
06:00–21:00 — ACTIVE WINDOW
|
||||
Player takes actions: advance, search, fight,
|
||||
trade, camp, rest, interact with NPCs.
|
||||
No hard limit on actions per day — limited by
|
||||
resources, HP, and supply consumption.
|
||||
|
||||
21:00 — EVENING RECAP (TwinBee)
|
||||
Summary of the day: rooms cleared, loot found,
|
||||
XP gained, supplies consumed.
|
||||
TwinBee delivers a narrative coda.
|
||||
Threat Clock advances if player is in a
|
||||
dangerous position.
|
||||
|
||||
21:00–06:00 — NIGHT PHASE
|
||||
Camp triggers if the player has camped.
|
||||
Wandering monster check (see Section 6).
|
||||
Environmental events possible (Section 7).
|
||||
Supply consumption continues passively.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Supply System
|
||||
|
||||
Expeditions consume **Supplies** — an abstracted resource representing food, water, torches, rope, ammunition, and minor consumables. Supplies are purchased before departure and cannot be restocked mid-expedition unless a Supply Cache is found or a resupply route is established.
|
||||
|
||||
### 4.1 Supply Units
|
||||
|
||||
One **Supply Unit (SU)** represents one day's worth of basic provisions for one character.
|
||||
|
||||
| Zone Tier | Base SU Cost Per Day | Harsh Conditions Multiplier |
|
||||
|---|---|---|
|
||||
| 1 | 1 SU/day | ×1 |
|
||||
| 2 | 1.5 SU/day | ×1.5 |
|
||||
| 3 | 2 SU/day | ×2 |
|
||||
| 4 | 3 SU/day | ×2.5 |
|
||||
| 5 | 4 SU/day | ×3 |
|
||||
|
||||
**Harsh conditions** are triggered by: Threat Clock above 60, heat accumulation events, tidal flooding, Feywild time distortion.
|
||||
|
||||
### 4.2 Supply Procurement
|
||||
|
||||
| Source | SU Yield | Cost | Notes |
|
||||
|---|---|---|---|
|
||||
| Thom Krooke standard pack | 10 SU | 50 coins | Max 3 packs per expedition |
|
||||
| Thom Krooke deluxe pack | 20 SU | 90 coins | Max 1 per expedition |
|
||||
| Foraged (Ranger, WIS DC 12) | 1d4 SU | Free | Once per day; fails in indoor zones |
|
||||
| Supply Cache (dungeon loot) | 2d6 SU | — | Random find; not guaranteed |
|
||||
| NPC Trader (certain zones) | Variable | Variable | Zone-specific |
|
||||
|
||||
### 4.3 Supply Depletion Effects
|
||||
|
||||
| SU Remaining | Effect |
|
||||
|---|---|
|
||||
| > 25% | Normal operation |
|
||||
| 10–25% | Rationing: -1 to all rolls from fatigue |
|
||||
| 1–9% | Severe rationing: -2 to all rolls; no long rests |
|
||||
| 0 | Starvation: -1d4 CON per day; forced extraction if CON reaches 0 |
|
||||
|
||||
### 4.4 Go Data Model — Supplies
|
||||
|
||||
```go
|
||||
type ExpeditionSupplies struct {
|
||||
Current float32 `json:"current"` // current SU
|
||||
Max float32 `json:"max"` // purchased at outset
|
||||
DailyBurn float32 `json:"daily_burn"` // base rate for this zone tier
|
||||
HarshMod float32 `json:"harsh_mod"` // multiplier if harsh conditions active
|
||||
Foraging bool `json:"foraging"` // Ranger forage attempt used today
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Camp System
|
||||
|
||||
Camping is the primary mechanism for long rests during an expedition. It is not free — it costs time, supplies, and exposes the player to overnight risk.
|
||||
|
||||
### 5.1 Camp Types
|
||||
|
||||
| Camp Type | Setup Requirement | Rest Quality | Supply Cost | Night Risk |
|
||||
|---|---|---|---|---|
|
||||
| **Rough Camp** | Any location | Partial (50% HP, no slots) | +0.5 SU | High |
|
||||
| **Standard Camp** | Safe room (cleared) | Full long rest | +1 SU | Medium |
|
||||
| **Fortified Camp** | Boss-cleared room or cache site | Full long rest + bonus | +2 SU | Low |
|
||||
| **Base Camp** | Expedition Day 3+ in Tier 4–5 zones | Full long rest + extended | +3 SU | Very Low |
|
||||
|
||||
**Fortified Camp bonus:** +1d6 HP on wake; TwinBee narrates a peaceful night (rare flavor event).
|
||||
**Base Camp:** Establishes a persistent waypoint. Player can fast-travel back to Base Camp in 1 action. Required for Tier 5 zones.
|
||||
|
||||
### 5.2 Camp Placement Rules
|
||||
|
||||
- Cannot camp in a room with active enemies.
|
||||
- Cannot camp in a trap room (even if the trap is disarmed).
|
||||
- Cannot camp in a Boss room (the room knows it's a boss room).
|
||||
- Camping in a non-cleared room = Rough Camp regardless of intent.
|
||||
|
||||
### 5.3 Go Data Model — Camp
|
||||
|
||||
```go
|
||||
type CampState struct {
|
||||
Active bool `json:"active"`
|
||||
Type string `json:"camp_type"` // rough, standard, fortified, base
|
||||
RoomID string `json:"room_id"`
|
||||
EstablishedAt time.Time `json:"established_at"`
|
||||
NightEvents []string `json:"night_events"` // log of overnight occurrences
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Wandering Monster System
|
||||
|
||||
During the **Night Phase**, if the player has camped, a wandering monster check fires. The result depends on camp type and Threat Clock level.
|
||||
|
||||
### 6.1 Wandering Monster Table
|
||||
|
||||
Roll 1d20 + Threat Clock modifier:
|
||||
|
||||
| Roll | Outcome |
|
||||
|---|---|
|
||||
| 1–5 | Peaceful night. TwinBee narrates quiet. |
|
||||
| 6–10 | Signs of passage. No encounter; Threat Clock +2. |
|
||||
| 11–14 | Minor encounter: 1–2 low-CR enemies from zone roster. Player wakes to combat. |
|
||||
| 15–17 | Standard encounter: standard zone enemy group. |
|
||||
| 18–19 | Elite encounter: Elite-tier enemy from zone. |
|
||||
| 20+ | Ambush: enemy has surprise round. Elite-tier. TwinBee delivers a terse, sleep-interrupted narration. |
|
||||
|
||||
**Threat Clock modifier:** +1 per 10 points of Threat Clock above 30.
|
||||
|
||||
### 6.2 Rough Camp Night Risk Modifier
|
||||
|
||||
Rough Camp adds +3 to all wandering monster rolls.
|
||||
|
||||
### 6.3 Avoiding Night Encounters
|
||||
|
||||
- **Ranger passive:** -2 to all wandering monster rolls while in a wilderness zone.
|
||||
- **Rogue passive:** On a roll of 11–14, may attempt a Stealth check (DC 14) to avoid the encounter entirely.
|
||||
- **Fortified Camp:** -4 to all wandering monster rolls.
|
||||
|
||||
---
|
||||
|
||||
## 7. Zone-Specific Temporal Events
|
||||
|
||||
These events fire on specific expedition days, times, or conditions. They are not random — they are scheduled by the zone and announced by TwinBee in advance (vaguely).
|
||||
|
||||
### 7.1 Sunken Temple — Tidal Event (Day 6)
|
||||
|
||||
On Expedition Day 6, the tidal cycle peaks. All flooded rooms gain:
|
||||
- +1d6 cold damage per turn while wading
|
||||
- Kuo-toa enemies gain +2 AC and +1d4 to attack rolls
|
||||
- Supply burn doubles for 24 hours (water infiltration)
|
||||
|
||||
TwinBee warns on Day 4: *"The water is rising. Something about the rhythm of it has changed."*
|
||||
TwinBee warns on Day 5: *"Tomorrow the temple will be fully claimed by the tide. Plan accordingly."*
|
||||
|
||||
If the player has reached the Boss room before Day 6: no event fires.
|
||||
|
||||
### 7.2 Haunted Manor — Nightly Reset (Every 3 In-Game Nights)
|
||||
|
||||
Every third night in the Manor, non-boss rooms respawn one enemy (not a full reset — one enemy per room, chosen from zone roster). This represents the house reasserting itself.
|
||||
|
||||
TwinBee notes on Night 2: *"The house has been quiet. That will not last."*
|
||||
On Night 3 morning: *"Overnight, something moved back in. Several somethings, actually."*
|
||||
|
||||
### 7.3 The Underforge — Heat Accumulation
|
||||
|
||||
Each day spent in the Underforge adds 1 Heat Stack (max 10). Effects:
|
||||
|
||||
| Heat Stacks | Effect |
|
||||
|---|---|
|
||||
| 1–3 | Flavor only ("the air shimmers") |
|
||||
| 4–6 | +1d4 fire damage at start of each combat round |
|
||||
| 7–9 | Disadvantage on CON saves; Supply burn +50% |
|
||||
| 10 | Exhaustion: -2 to all rolls; forced 24hr rest or extraction |
|
||||
|
||||
Heat stacks reduce by 2 per long rest in a Fortified Camp. Full extraction resets all stacks.
|
||||
|
||||
### 7.4 The Feywild Crossing — Time Distortion
|
||||
|
||||
Time in the Feywild is unreliable. Each day the player enters an Exploration Room, roll 1d6:
|
||||
|
||||
| Roll | Time Effect |
|
||||
|---|---|
|
||||
| 1–2 | Normal day passes |
|
||||
| 3–4 | Half-day: only 0.5 SU consumed; next room generates instantly |
|
||||
| 5 | Double-day: 2 SU consumed; an extra wandering monster check fires |
|
||||
| 6 | Time Loop: player re-enters the same room (new enemies; loot already taken) |
|
||||
|
||||
TwinBee tracks time distortion and reports it in the Morning Briefing with increasing bewilderment.
|
||||
|
||||
### 7.5 Dragon's Lair — Awareness Pulses
|
||||
|
||||
Infernax sleeps lightly. Every 3 days, an Awareness Pulse fires:
|
||||
- Kobold patrols increase by 1 enemy per active room
|
||||
- Threat Clock +10
|
||||
- TwinBee delivers an Awareness Pulse narration (see `twinbee_expedition_flavor.go`)
|
||||
|
||||
On Day 14: Infernax wakes. If the player has not reached the Boss room by Day 14, Infernax begins active hunting — wandering monster checks occur every 6 hours and may produce a Dragon encounter (CR 15 young dragon proxy) until the player reaches the final chamber.
|
||||
|
||||
### 7.6 The Abyss Portal — Destabilization
|
||||
|
||||
The portal grows unstable over time. Each day, Portal Instability increases by 5 (starts at 0, max 100).
|
||||
|
||||
| Instability | Effect |
|
||||
|---|---|
|
||||
| 0–20 | Normal operations |
|
||||
| 21–40 | Psychic pressure: -1 to WIS rolls |
|
||||
| 41–60 | Reality warps: rooms occasionally shift order |
|
||||
| 61–80 | Demon surges: wandering monster check every 12 hours |
|
||||
| 81–99 | Unraveling: -2 to all rolls; Supply burn doubles |
|
||||
| 100 | Collapse: player is forcibly extracted; expedition fails; portal requires a new event to reopen |
|
||||
|
||||
Instability is reduced by 10 for each major story objective completed in the zone.
|
||||
|
||||
---
|
||||
|
||||
## 8. The Threat Clock
|
||||
|
||||
The Threat Clock (0–100) represents how aware the zone's faction has become of the player's presence. It is the dungeon's version of stealth — the longer you're here, the more organized the opposition becomes.
|
||||
|
||||
### 8.1 Threat Clock Modifiers
|
||||
|
||||
| Event | Threat Change |
|
||||
|---|---|
|
||||
| Combat in a new room | +5 |
|
||||
| Enemy killed before raising alarm | +0 |
|
||||
| Enemy escapes combat | +10 |
|
||||
| Player uses loud ability (Fireball, Thunderwave) | +8 |
|
||||
| Rogue uses Stealth to move between rooms | -3 |
|
||||
| Long rest in Fortified Camp | -5 |
|
||||
| Boss defeated | -20 |
|
||||
| Day passes in zone | +3 |
|
||||
| TwinBee Mood: Wrathful | +5/day additional |
|
||||
| TwinBee Mood: Elated | -3/day |
|
||||
|
||||
### 8.2 Threat Clock Thresholds
|
||||
|
||||
| Level | Threshold | Effect |
|
||||
|---|---|---|
|
||||
| Quiet | 0–20 | No modifications. TwinBee describes an unaware zone. |
|
||||
| Stirring | 21–40 | Enemies in uncleared rooms gain +1 to Perception; wandering monster +1 |
|
||||
| Alert | 41–60 | Enemies gain +2 AC; wandering monster +2; reinforcements possible |
|
||||
| Hostile | 61–80 | All enemies have initiative advantage; room traps re-arm |
|
||||
| Siege | 81–100 | **Siege Mode** (see Section 8.3) |
|
||||
|
||||
### 8.3 Siege Mode
|
||||
|
||||
When Threat Clock hits 100, the zone enters Siege Mode:
|
||||
- All rooms with cleared enemies respawn one enemy (once)
|
||||
- Boss gains +20 HP and Legendary Resistance +1
|
||||
- Supply burn doubles
|
||||
- No short rests possible (too dangerous)
|
||||
- TwinBee delivers a Siege Mode narration and does not sugarcoat it
|
||||
- Siege Mode cannot be reduced — it is the dungeon's final form
|
||||
|
||||
TwinBee begins warning at Threat Clock 70:
|
||||
*"They know you're here. Not a suspicion anymore. A certainty. The question now is whether you finish before they organize."*
|
||||
|
||||
### 8.4 Go Data Model — Threat Clock
|
||||
|
||||
```go
|
||||
type ThreatClock struct {
|
||||
Level int `json:"level"` // 0–100
|
||||
SiegeMode bool `json:"siege_mode"`
|
||||
LastUpdated time.Time `json:"last_updated"`
|
||||
Events []ThreatEvent `json:"events"`
|
||||
}
|
||||
|
||||
type ThreatEvent struct {
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Delta int `json:"delta"`
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Expedition State Model
|
||||
|
||||
```go
|
||||
type Expedition struct {
|
||||
ID string `json:"id"`
|
||||
PlayerID string `json:"player_id"`
|
||||
ZoneID string `json:"zone_id"`
|
||||
StartDate time.Time `json:"start_date"`
|
||||
CurrentDay int `json:"current_day"`
|
||||
Status string `json:"status"` // active, extracting, complete, failed
|
||||
CurrentRegion string `json:"current_region"`
|
||||
CurrentRoomID string `json:"current_room_id"`
|
||||
RoomsCleared []string `json:"rooms_cleared"`
|
||||
BossDefeated bool `json:"boss_defeated"`
|
||||
Supplies ExpeditionSupplies `json:"supplies"`
|
||||
Camp *CampState `json:"camp"`
|
||||
ThreatClock ThreatClock `json:"threat_clock"`
|
||||
TemporalStack int `json:"temporal_stack"` // zone-specific (heat, instability, etc.)
|
||||
Log []ExpeditionEntry `json:"log"`
|
||||
LootCollected []string `json:"loot_collected"`
|
||||
XPEarned int `json:"xp_earned"`
|
||||
DMMood int `json:"gm_mood"`
|
||||
LastActivity time.Time `json:"last_activity"`
|
||||
}
|
||||
|
||||
type ExpeditionEntry struct {
|
||||
Day int `json:"day"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Type string `json:"type"` // action, combat, rest, event, narrative
|
||||
Summary string `json:"summary"`
|
||||
Flavor string `json:"flavor"` // TwinBee line for this entry
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Extraction
|
||||
|
||||
Extraction is leaving the zone before completion — intentionally or by force.
|
||||
|
||||
### 10.1 Voluntary Extraction
|
||||
|
||||
Command: `!extract`
|
||||
|
||||
- Player may extract at any time from any cleared room.
|
||||
- Extraction costs 1 in-game day (finding the way out).
|
||||
- Player keeps all loot and XP earned to that point.
|
||||
- Expedition marked as Incomplete — can be resumed (see Section 10.3).
|
||||
- TwinBee delivers an extraction narration.
|
||||
|
||||
### 10.2 Forced Extraction
|
||||
|
||||
Triggered by: HP reaching 0, supplies reaching 0, Abyss Portal collapse.
|
||||
|
||||
- Player loses 20% of coins earned during expedition (chaos tax).
|
||||
- All loot carried out is kept.
|
||||
- Expedition marked as Abandoned.
|
||||
- Cannot be resumed — must restart.
|
||||
- Threat Clock resets to 20 on re-entry (zone remembers you, but time has passed).
|
||||
- TwinBee delivers a forced extraction narration (respectful; never mocking).
|
||||
|
||||
### 10.3 Expedition Resume
|
||||
|
||||
Voluntarily extracted expeditions can be resumed within **7 real days**:
|
||||
|
||||
- Resumes from the last cleared room.
|
||||
- Supplies must be repurchased (what was carried is gone — you extracted).
|
||||
- Threat Clock resumes at extraction value.
|
||||
- Zone-specific temporal stacks (Heat, Instability) resume at extraction value.
|
||||
- TwinBee delivers a return narration: *"Back again. TwinBee noted the door. TwinBee notes it opening."*
|
||||
|
||||
After 7 days, the expedition expires and must restart.
|
||||
|
||||
---
|
||||
|
||||
## 11. Multi-Region Zones (Tier 4–5)
|
||||
|
||||
The Underdark, Dragon's Lair, and Abyss Portal are too large for a single dungeon map. They are divided into **Regions**, each functioning as a sub-dungeon.
|
||||
|
||||
### 11.1 Region Structure
|
||||
|
||||
Each Region contains:
|
||||
- Its own room sequence (Entry → Exploration → Trap → Exploration → Elite → Boss)
|
||||
- A **Region Boss** (not the Zone Boss — a mid-tier milestone)
|
||||
- A potential **Base Camp** site (unlocked after clearing Region Boss)
|
||||
- Region-specific enemies (subset of zone roster)
|
||||
- Region-specific loot table
|
||||
|
||||
### 11.2 Region Progression
|
||||
|
||||
| Zone | Regions | Region Boss |
|
||||
|---|---|---|
|
||||
| The Underdark | Surface Tunnels → Drow Outpost → Illithid Warren → The Deep Throne | Drow Elite Captain → Mind Flayer Elder → Ilvaras Xunyl (Zone Boss) |
|
||||
| Dragon's Lair | Kobold Warrens → Drake Pens → The Vault → Infernax's Chamber | Kobold Warchief → Elder Drake → Infernax (Zone Boss) |
|
||||
| The Abyss Portal | Outer Rift → Demon Assembly → The Warden's Post → The Tear | Vrock Commander → Nalfeshnee → Belaxath (Zone Boss) |
|
||||
|
||||
### 11.3 Region Transitions
|
||||
|
||||
Moving between regions costs 1 full in-game day of travel. TwinBee narrates the transition with specific regional flavor. Supply burn applies during travel. Wandering monster check fires once during transit.
|
||||
|
||||
### 11.4 Go Data Model — Region
|
||||
|
||||
```go
|
||||
type ExpeditionRegion struct {
|
||||
ID string `json:"id"`
|
||||
ZoneID string `json:"zone_id"`
|
||||
Name string `json:"name"`
|
||||
Order int `json:"order"`
|
||||
Cleared bool `json:"cleared"`
|
||||
BossDefeated bool `json:"boss_defeated"`
|
||||
BaseCampSite bool `json:"base_camp_site"`
|
||||
EnemySubset []string `json:"enemy_subset"`
|
||||
LootTable []LootEntry `json:"loot_table"`
|
||||
FlavorRef string `json:"flavor_ref"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 12. TwinBee Daily Briefing & Recap Format
|
||||
|
||||
### 12.1 Morning Briefing (06:00)
|
||||
|
||||
```
|
||||
🎭 TwinBee — Morning Briefing, Day [N]
|
||||
|
||||
📍 Location: [Zone Name] — [Region if applicable] — [Room description]
|
||||
❤️ HP: [current] / [max]
|
||||
🎒 Supplies: [SU remaining] / [SU max] ([days remaining estimate])
|
||||
⏰ Threat: [Threat Clock level] — [Threshold name]
|
||||
🌡️ [Zone stack]: [Heat/Instability/Time value if applicable]
|
||||
|
||||
[Overnight events, if any — TwinBee narrates what happened while you slept]
|
||||
|
||||
[TwinBee morning flavor line — see twinbee_expedition_flavor.go]
|
||||
|
||||
Available actions: [!advance] [!search] [!camp] [!rest] [!extract] [!status]
|
||||
```
|
||||
|
||||
### 12.2 Evening Recap (21:00)
|
||||
|
||||
```
|
||||
🎭 TwinBee — Evening Recap, Day [N]
|
||||
|
||||
Today's progress:
|
||||
Rooms cleared: [N]
|
||||
Enemies defeated: [N]
|
||||
Loot found: [item list or "nothing notable"]
|
||||
XP earned: [N]
|
||||
Supplies used: [N SU]
|
||||
|
||||
[TwinBee evening narrative — see twinbee_expedition_flavor.go]
|
||||
|
||||
[Camp prompt if player hasn't camped: "You should rest. The dungeon does not."]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 13. Expedition Milestones & Bonus Rewards
|
||||
|
||||
Milestones reward players who engage with the expedition's full arc rather than rushing.
|
||||
|
||||
| Milestone | Trigger | Reward |
|
||||
|---|---|---|
|
||||
| First Night | Survive Night 1 | +50 XP; TwinBee delivers a "you're still here" line |
|
||||
| Cartographer | Search every room before advancing | Bonus loot roll in next Elite room |
|
||||
| Patient Zero | Complete expedition without Threat Clock above 50 | +10% XP bonus on zone complete |
|
||||
| Survivalist | Complete Tier 3+ expedition with no forced extraction | Unique title + cosmetic item |
|
||||
| Week One | Expedition Day 7 survived | +200 XP; Thom Krooke discount next visit |
|
||||
| Two Weeks | Expedition Day 14 survived | +500 XP; permanent +1 to primary class stat |
|
||||
| The Long Game | Complete a Tier 5 zone | Legendary item guaranteed; TwinBee delivers a personal note |
|
||||
|
||||
---
|
||||
|
||||
## 14. Expedition Commands Reference
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!expedition start <zone>` | Begin a new expedition (opens supply purchase flow) |
|
||||
| `!expedition status` | Full expedition status summary |
|
||||
| `!expedition log` | Last 5 expedition log entries with TwinBee narration |
|
||||
| `!advance` | Move to next room (costs time; triggers encounters) |
|
||||
| `!retreat` | Return to previous cleared room |
|
||||
| `!search` | Search current room (Perception/Investigation check) |
|
||||
| `!camp <type>` | Establish camp (rough / standard / fortified / base) |
|
||||
| `!rest short` | Short rest at current location |
|
||||
| `!rest long` | Long rest (requires Standard camp or better) |
|
||||
| `!supplies` | Check supply status and daily burn rate |
|
||||
| `!threat` | Check Threat Clock level and current threshold |
|
||||
| `!extract` | Begin voluntary extraction |
|
||||
| `!resume` | Resume a previously extracted expedition |
|
||||
| `!map` | Display expedition progress as ASCII region/room map |
|
||||
|
||||
---
|
||||
|
||||
## 15. Implementation Phases — Expedition System
|
||||
|
||||
### Phase E1 — Core Infrastructure
|
||||
- [ ] `Expedition` struct and DB schema
|
||||
- [ ] Real-time day cycle engine (06:00/21:00 triggers)
|
||||
- [ ] Morning Briefing and Evening Recap generation
|
||||
- [ ] `!expedition start`, `!expedition status` commands
|
||||
- [ ] Supply system (procurement, depletion, effects)
|
||||
- [ ] Basic camp system (rough and standard)
|
||||
|
||||
### Phase E2 — Threat Clock & Night Phase
|
||||
- [ ] Threat Clock state machine
|
||||
- [ ] Wandering monster system
|
||||
- [ ] Night phase event resolution
|
||||
- [ ] Siege Mode implementation
|
||||
- [ ] Fortified Camp and Base Camp
|
||||
|
||||
### Phase E3 — Zone Temporal Events
|
||||
- [ ] Tidal Event (Sunken Temple)
|
||||
- [ ] Nightly Reset (Haunted Manor)
|
||||
- [ ] Heat Accumulation (Underforge)
|
||||
- [ ] Time Distortion (Feywild)
|
||||
- [ ] Awareness Pulses (Dragon's Lair)
|
||||
- [ ] Portal Destabilization (Abyss Portal)
|
||||
|
||||
### Phase E4 — Multi-Region Zones
|
||||
- [ ] Region system and region boss structure
|
||||
- [ ] Region transition (travel day, supply burn, encounter)
|
||||
- [ ] Base Camp as persistent waypoint
|
||||
- [ ] Underdark, Dragon's Lair, Abyss Portal region maps
|
||||
|
||||
### Phase E5 — Extraction & Resume
|
||||
- [ ] Voluntary extraction flow
|
||||
- [ ] Forced extraction flow
|
||||
- [ ] Expedition resume (7-day window)
|
||||
- [ ] Expedition log persistence
|
||||
|
||||
### Phase E6 — Milestones & Polish
|
||||
- [ ] Milestone tracking and reward delivery
|
||||
- [ ] `twinbee_expedition_flavor.go` full population (briefings, recaps, event narrations)
|
||||
- [ ] ASCII map renderer (multi-region aware)
|
||||
- [ ] Pete bot expedition update posts (daily highlights for Matrix room)
|
||||
|
||||
---
|
||||
|
||||
*End of Expedition System Document.*
|
||||
*Reference alongside all companion docs in Claude Code sessions.*
|
||||
@@ -1,329 +0,0 @@
|
||||
# Gogobee — Harvest Charge Semantics & Auto-Harvest Parity
|
||||
|
||||
**Status:** plan, not yet implemented.
|
||||
**Branch convention:** new branch off `open5e` (e.g. `harvest-charges` or `phase-H`).
|
||||
**Prerequisite:** none — the autopilot harvest path is already in place; this is a behavior + parity change.
|
||||
**Owner:** future session.
|
||||
|
||||
---
|
||||
|
||||
## 1. Goal & non-goals
|
||||
|
||||
### Goal
|
||||
|
||||
Retire the "retry-to-success" grind that the current harvest system encourages and replace it with Josie's deterministic-attempts model:
|
||||
|
||||
- A node spawns with N charges. Each charge = exactly one d20 attempt.
|
||||
- **Success or failure both consume a charge.** No retries.
|
||||
- The autopilot burns all charges in one room-pass, reporting a final tally.
|
||||
- Rare+ nodes are no longer special-cased — they get auto-attempted like everything else, and a whiff is a whiff.
|
||||
- `!zone advance` gains auto-harvest parity with `!expedition run` (today only the expedition autopilot auto-harvests; zone runs still require typing `!forage`/`!scavenge`/etc per room).
|
||||
|
||||
The user-facing pitch: stop typing `!mine`/`!scavenge`/etc. The walk handles it. Failure feels unlucky on purpose; that's the point.
|
||||
|
||||
### Non-goals
|
||||
|
||||
- Reworking the combat engine, threat system, or noise mechanics.
|
||||
- Changing what *resources* exist or what zones they belong to (the registry stays as-is).
|
||||
- Changing DCs per resource (calibration is a yield-quantity / charge-count knob, not a DC knob — see Phase H4).
|
||||
- Changing class bonuses (`classHarvestBonus`) or per-action ability mapping (`harvestActionAbility`).
|
||||
- Building any new "rare buff" or pre-roll consumable surface. None exists today and we're not adding one.
|
||||
|
||||
---
|
||||
|
||||
## 2. Current state (so future-me has the receipts)
|
||||
|
||||
- `internal/plugin/dnd_expedition_autopilot_harvest.go`:
|
||||
- `autoHarvestPerNodeAttempts = 8` — safety cap on retries.
|
||||
- Loop re-rolls on failure without consuming charges (comment at line 22-25).
|
||||
- `isRarePlus` filters Rare/Epic/VeryRare/Legendary nodes out of the auto pass.
|
||||
- `RarePending` + `renderRarePendingFooter` + `stopRareNode` produce the "Autopilot paused — rare yield nearby" UX.
|
||||
- `internal/plugin/dnd_expedition_cmd.go:636` is the **only** caller of `autoHarvestRoom`.
|
||||
- `internal/plugin/dnd_zone_cmd.go:417` (`zoneCmdAdvance`) → `advanceOnceWithOpts`: resolves one room and dispatches. **No harvest pass.** Players still type manual harvest commands per room.
|
||||
- Manual harvest commands (`!forage`/`!scavenge`/`!mine`/`!fish`/`!essence`/`!commune`) live in `internal/plugin/dnd_expedition_harvest.go` (`handleHarvestCmd` at line 387). They operate on the *expedition's* current room.
|
||||
- Charge semantics today: a node has a `Charges` count; success consumes one; failure does not. Failure can still trigger noise, which is a separate dice roll.
|
||||
|
||||
---
|
||||
|
||||
## 3. Phases
|
||||
|
||||
### H1 — Switch autopilot to Josie semantics
|
||||
|
||||
`internal/plugin/dnd_expedition_autopilot_harvest.go`
|
||||
|
||||
- Delete `autoHarvestPerNodeAttempts`, `isRarePlus`, `RarePending`, `renderRarePendingFooter`, and the `stopRareNode` stop reason.
|
||||
- Inner loop becomes: for each node, roll once per remaining charge; each roll consumes a charge regardless of outcome; aggregate yields/fails.
|
||||
- Per-room footer keeps the existing "+2 Iron, +1 Sage; 3 fails" shape — just driven by the new tally.
|
||||
- Walk-end summary stays as-is; the totals roll up the same way.
|
||||
- Noise interrupts: continue rolling per-attempt (parity with manual). A noise interrupt still does threat++ and lets the rest of the node's charges roll.
|
||||
- Combat interrupts (Standard/Elite/Patrol): keep current hard-stop behavior.
|
||||
- No SU surcharge change — autopilot still free.
|
||||
|
||||
**Files touched:** `dnd_expedition_autopilot_harvest.go`, plus any test that asserts on `RarePending` / `stopRareNode` (sweep `internal/plugin/*_test.go` for those strings).
|
||||
|
||||
**Definition of done:** existing autopilot tests pass with the new semantics; a Rare node in a walked room is consumed in-place, not stashed for manual takeover.
|
||||
|
||||
### H2 — Add auto-harvest to `!zone advance`
|
||||
|
||||
`internal/plugin/dnd_zone_cmd.go` + a small adapter
|
||||
|
||||
- `advanceOnceWithOpts` currently treats Exploration rooms as harvest-free. Wire a harvest pass into the Exploration resolution path so that walking into an Exploration room runs the same Josie auto-harvest.
|
||||
- The catch: `autoHarvestRoom` today takes an `*Expedition`. A zone run is **not** an expedition — `getActiveZoneRun` returns a `*ZoneRun` with a different shape (no `ZoneID`-on-expedition, different room representation).
|
||||
- Two options:
|
||||
- **(a)** Refactor `autoHarvestRoom` to take an interface that both `*Expedition` and `*ZoneRun` can satisfy (zone_id + current_room + threat hooks). Cleanest long-term.
|
||||
- **(b)** Write a thin `autoHarvestZoneRoom` that mirrors the autopilot loop but reads from `*ZoneRun`. Faster to ship, duplicates ~50 lines.
|
||||
- **Recommendation:** (a). The duplication risk is real and the interface is small.
|
||||
- Foreground `!zone advance` and autopilot-driven `!zone advance` (compact mode) use the **same** harvest pass — no special casing.
|
||||
- Elite/Boss/Trap rooms still don't harvest. Entry doesn't harvest. Only Exploration rooms run the pass.
|
||||
|
||||
**Definition of done:** entering an Exploration room via `!zone advance` produces a harvest footer identical in shape to the expedition autopilot one; no manual `!forage` needed mid-zone-run.
|
||||
|
||||
### H3 — Retire manual harvest commands
|
||||
|
||||
`internal/plugin/dnd_expedition_harvest.go` (`handleHarvestCmd`) + the bot dispatch wiring
|
||||
|
||||
- Remove `!forage`, `!scavenge`, `!mine`, `!fish`, `!essence`, `!commune` from the command surface entirely. They become no-ops with a deprecation DM: *"Harvest is automatic now — just walk. (`!expedition run` or `!zone advance`)"*
|
||||
- After two weeks of soak (operator's call) the deprecation DM gets deleted and the commands fall through to "unknown command."
|
||||
- Sweep `!help` / class help text / zone help text for references to manual harvest verbs.
|
||||
- Per memory: keep TwinBee voice; surface verbs not jargon.
|
||||
|
||||
**Why retire and not keep as a fallback:** the entire point of the redesign is to delete the grind-to-success behavior. Keeping manual commands reintroduces exactly that loop ("the auto roll whiffed, let me type `!forage` and re-roll until it pops"). A clean retirement is more honest than a vestigial command.
|
||||
|
||||
**Definition of done:** manual harvest verbs are dead weight; `!help` no longer mentions them; the zone/expedition flow is the only path to yields.
|
||||
|
||||
### H4 — Calibrate economy
|
||||
|
||||
`gogobee_class_balance.md` references the Monte Carlo harness. Reuse or extend it.
|
||||
|
||||
- The Josie nerf: expected yield per node drops by `(1 - success_rate)`. For a 60% node, that's a 40% material cut.
|
||||
- Run a baseline sim: snapshot per-expedition yield by zone tier under current rules, then under Josie rules.
|
||||
- Tune **charge counts** first (probably bump the 1–3 range to 2–5) before touching success rates or DCs. Per the difficulty memo: lift trailers, don't nerf leaders.
|
||||
- Re-run the sim and compare against the pre-change baseline. Target: median yield within 90–110% of today's median; variance allowed to widen.
|
||||
- Update `dnd_resource_registry.go` charge fields per the calibration result.
|
||||
- Document the calibration math in this file's appendix so we can audit it later.
|
||||
|
||||
**Definition of done:** Monte Carlo shows yield parity within ±10% across tiers; rare nodes feel rare (success rate visibly < 50%) but not punishing across a full expedition.
|
||||
|
||||
**⚠ Blocked on Phase J (below).** First hardened-sim sweep showed yield is gated by survival, not charge counts: Fighter/Mage TPK at T3+, no class extracts T5 boss. Tuning charges before fixing survival would over-tune against a strawman. Run J0–J3 first, then this phase.
|
||||
|
||||
**Shipped 2026-05-17 (post-J).** Uncommon/Rare MaxCharges bumped 1 → 2 (53 resources). Yield deltas vs J2b baseline: −2.5% to +4.7% across the four cleared zones — within band but with much less leverage than expected. Full write-up in `sim_results/h4_findings.md`: the binding constraint on per-room yield is interrupt-truncation, not charge count. The Common consolation bracket (delta ≥ -4 yields +1) already absorbs most of the Josie nerf. Future yield-tuning effort should target `resolveCombatInterrupt` rates, not charges. H4 closes.
|
||||
|
||||
### H5 — Partial spell-slot refresh on short rest
|
||||
|
||||
`internal/plugin/dnd_rest.go` + `internal/plugin/dnd_spells.go`
|
||||
|
||||
Same QoL theme as the harvest changes: casters today get exactly one slot reload per real-world day (long rest, 24h cooldown + 8h lockout). Short rest is HP-only. That's the actual reason mages feel anemic mid-expedition.
|
||||
|
||||
**Behavior change:**
|
||||
|
||||
- Short rest gains a partial slot refresh alongside the existing 1d6+CON heal and the hit-dice-charge spend.
|
||||
- Formula (starting point — calibration runs alongside H4):
|
||||
- Refresh **all** slots of level 1.
|
||||
- Refresh **floor(character_level / 4)** additional slots at the next-available tier, lowest-first.
|
||||
- Examples:
|
||||
- L1–3 caster: all L1 slots back.
|
||||
- L4–7 caster: all L1 + 1 slot at L2 (or next-available tier if L2 already full).
|
||||
- L8–11 caster: all L1 + 2 slots in tiers ≥2, lowest-first.
|
||||
- L12+: scales up; capped naturally by the slot table.
|
||||
- Lockout, hit-dice cost, and HP heal all unchanged.
|
||||
- Long rest still does a full slot wipe-and-restore (no change there).
|
||||
|
||||
**Implementation:**
|
||||
|
||||
- Add `partialRefreshSpellSlots(userID, c)` in `dnd_spells.go` that walks the slot table lowest-to-highest, restoring per the formula above. Pure SQL — find slots with `used > 0`, decrement.
|
||||
- Call it from `handleDnDShortRest` after the HP/charge update, before save.
|
||||
- Expedition camp (`dnd_expedition_camp.go:285`) already does a full `refreshSpellSlots` — leave it alone; camp is effectively a long rest in disguise.
|
||||
|
||||
**Footer:** short rest DM gets one more line: "_Spell slots restored: 2 (L1), 1 (L2)._" when applicable. Suppress the line when the caster has zero refreshable slots (martials, casters at full).
|
||||
|
||||
**Files touched:** `dnd_rest.go`, `dnd_spells.go`, short-rest test(s).
|
||||
|
||||
**Definition of done:** a level-5 mage who burns all their L1 slots can short-rest, eat the 1h lockout, and come back with L1s topped off plus one L2 back. Martials see no DM change. Long rest behavior is byte-identical to today.
|
||||
|
||||
**Open question for H5:** per-short-rest cap — do we cap total slots refreshed per short rest (e.g. at most 4) to prevent very-high-level casters from short-resting back to nearly full? Probably yes, but the cap should only bite at L16+ where the formula goes silly. Settle during H4 calibration when we have sim numbers.
|
||||
|
||||
---
|
||||
|
||||
## 4. Phasing rationale
|
||||
|
||||
H1 first because it's the smallest behavior change on the smallest surface and it's the prerequisite for everything else.
|
||||
|
||||
H2 next because the parity gap is glaring once H1 ships: expeditions auto-harvest, zones still make you type. We should not soak that mismatch in production.
|
||||
|
||||
H3 only after H1+H2 are stable — players need a week or two of the auto flow before we delete the manual escape hatch, otherwise the rollback story is harder.
|
||||
|
||||
H4 runs in parallel with H1 (the sim is independent of the code change) but lands after H1 so we can calibrate against real Josie behavior. Bumping charge counts before H1 ships would just make today's grind faster.
|
||||
|
||||
H5 is independent of H1–H4 and can ship at any point — the harvest changes don't touch the rest/slot code paths. Sequenced last only because the harvest sweep is the primary driver of this branch; if a caster player surfaces sooner, promote H5.
|
||||
|
||||
---
|
||||
|
||||
## 5. Open questions
|
||||
|
||||
- **Per-room noise budget under Josie**: a 3-charge node now means 3 noise rolls instead of 1–8. Effective noise rate per node could spike. Decide in H1 whether to cap noise rolls per-node or accept the new rate.
|
||||
- **Yield quantity per success**: keep current per-resource qty rolls (varies 1–N) or simplify to flat +1 per charge? Recommended: keep current — variance is good theater.
|
||||
- **Rare-only feedback**: should a Rare+ success ping with a special line ("✨ Rare yield!") to compensate for the deleted pause UX? Cheap to add, makes the score feel earned.
|
||||
- **Manual-cmd retirement runway**: 2 weeks of deprecation DMs is a guess. Operator's call based on player chatter.
|
||||
|
||||
---
|
||||
|
||||
## 6. Phase J — Class survival & T5 boss wall
|
||||
|
||||
H4 calibration surfaced a bigger problem than charge counts. The hardened expedition-sim (race mods + tier-appropriate gear + lean consumables) shows a sharp class-survival cliff that has to be fixed before charge-count tuning can be trusted.
|
||||
|
||||
### 6.1 Why this is here
|
||||
|
||||
Sim sweep (450 runs, classes × levels × zones, n=10) at L12 with kitted gear + 2 heals + 1 buff:
|
||||
|
||||
| Class | T1 goblin | T2 forest | T3 manor | T4 underdark | T5 dragons |
|
||||
|-------|-----------|-----------|----------|--------------|------------|
|
||||
| Fighter L12 | 100% clr | 90% clr | **0%** | **0%** | 0% |
|
||||
| Mage L12 | 100% clr (14.2 mean yld, best cell) | **0%** | **0%** | **0%** | 0% |
|
||||
| Rogue L12 | 100% clr | 100% clr | 40% clr | 90% clr | 0% |
|
||||
|
||||
Three problems, three threads. Per [feedback_difficulty_target](.claude/memory/feedback_difficulty_target.md): lift trailers, don't nerf leaders or push monster scaling. Per [feedback_accessibility_over_dnd_crunch](.claude/memory/feedback_accessibility_over_dnd_crunch.md): fixes surface as outcomes/verbs, not new dice math.
|
||||
|
||||
### J0 — Baseline corpus
|
||||
|
||||
Before any tuning, freeze a reproducible baseline:
|
||||
|
||||
- Re-run the hardened+consumables matrix at n≥30/cell to tighten variance. The 10-run sweep showed ±20pp noise on mixed cells; we need ≤5pp resolution to detect 10pp movement.
|
||||
- Persist `sim_results/baseline_j0.jsonl` in-repo as the comparison anchor.
|
||||
- Extend `sim_results/summarize.sh` with "% clears", "p50 yield among cleared", and "boss-reached %" columns.
|
||||
|
||||
**Definition of done:** a single shell script reproduces the baseline in one command; numbers in the table above are within ±5pp of the next sweep at the same n.
|
||||
|
||||
### J1 — Fighter T3+ wall
|
||||
|
||||
**Hypothesis menu** (cheapest to verify first):
|
||||
|
||||
1. **AC plateau.** Fighter AC stops scaling at plate (T3 armor); T3+ monster Attack outpaces it.
|
||||
2. **No damage-mitigation passive.** Rogue has Cunning Action; Cleric/Druid have heals; Fighter has just HP.
|
||||
3. **Second Wind missing.** 5e Fighter has Second Wind (bonus action: heal 1d10+lvl, recharges short rest). Grep `secondWind|SecondWind` to confirm.
|
||||
4. **MaxHP scaling per level too flat.** Fighter d10 HP should already be best-in-class; verify `computeMaxHP`.
|
||||
|
||||
**Investigation steps:**
|
||||
|
||||
- Add an "encounter trace" to the sim that logs per-round Attack, AC, HP for player and enemy.
|
||||
- Cross-check `applyClassPassives` for Fighter: what does Fighter actually get at L7, L11 beyond ExtraAttacks?
|
||||
- Compare Fighter mid-fight HP curve at T3 vs Rogue's. If Fighter takes 1.5x damage per turn → mitigation gap. If they kill at the same rate but get out-paced → AC/Defense gap.
|
||||
|
||||
**Likely levers** (priority order, conditional on investigation):
|
||||
|
||||
- **Add Second Wind**: short-rest-rechargeable self-heal (1d10 + level). Restores the 5e identity beat without pushing monster scaling.
|
||||
- **Action Surge** (5e gives at L2 — verify; might be missing). Extra attack burst once per short rest.
|
||||
- **Subclass crit-range expansion** for Champion. Already partially wired (`dnd_subclass_combat.go:447`). Verify it fires for the sim character.
|
||||
- *Last resort:* MaxHP rider per level for Fighter only.
|
||||
|
||||
**Definition of done:** Fighter L12 manor clears jump from 0% to **≥50%** at n=30; T2 forest clears stay ≥80% (don't break the leader); T4 underdark clears non-zero.
|
||||
|
||||
### J2 — Caster boss-survival cliff
|
||||
|
||||
**Scope (reframed 2026-05-17 after post-J1 n=100 sweep, `sim_results/baseline_j1_all10.jsonl`):** five caster classes — **mage, cleric, sorcerer, warlock, bard** — all cluster at 19–22% L12 mean %clr across the 5 zones, vs four martial leaders (fighter/ranger/paladin/rogue) at 70–80%. They reach the boss room 62–82% of the time but TPK there. So the gap is **boss-fight burst/durability**, not zone traversal.
|
||||
|
||||
Druid sits between the bands at 39% L12 clr (88% boss-reach) — the only mid-band class — because Wild Shape gives a real HP buffer. That's the diagnostic: the trailers lack a durability or burst lever that pulls them through the final fight.
|
||||
|
||||
**Cell snapshot (L12, %clr | %boss):**
|
||||
|
||||
| Class | goblin (T1) | forest (T2) | manor (T3) | underdark (T4) | dragons (T5) |
|
||||
|----------|-------------|-------------|------------|----------------|--------------|
|
||||
| mage | 100\|100 | 0\|99 | 0\|63 | 0\|56 | 0\|68 |
|
||||
| cleric | 93\|93 | 0\|87 | 0\|70 | 0\|8 | 0\|50 |
|
||||
| sorcerer | 100\|100 | 0\|97 | 0\|57 | 0\|38 | 0\|60 |
|
||||
| warlock | 100\|100 | 7\|100 | 0\|71 | 0\|62 | 0\|78 |
|
||||
| bard | 100\|100 | 8\|100 | 0\|70 | 0\|66 | 0\|74 |
|
||||
| *druid (ref)* | *100\|100* | *93\|100* | *0\|74* | *90\|100* | *0\|78* |
|
||||
|
||||
Cleric is doubly broken: lowest boss-reach (62% mean) **and** lowest clear (19%) — pure-support kit doesn't carry solo expeditions even before the boss.
|
||||
|
||||
**Hypothesis menu (cheapest first):**
|
||||
|
||||
1. **Damage falls off a cliff at mid-level boss HP.** L12 boss HP grows ~linearly; cantrip damage scales (Fire Bolt 2d10 at L11) but slot-spell burst is gated by 2–3 high-level slots used earlier in the zone. Trace `EnemyHPEnd` at TPK across the 5 classes vs druid.
|
||||
2. **No durability backstop.** Druid (Wild Shape ≈ +temp HP pool) clears 39%; the five trailers have no equivalent. Mage's `Shield` reaction and `Mage Armor` may already exist but aren't firing in turn-engine boss rooms — verify.
|
||||
3. **Slot/resource economy.** L7/L12 casters reach boss with slots spent; H5 partial short-rest refresh (already planned) is the obvious lever and might solo-fix several of the five.
|
||||
4. **Cleric class identity.** Bottom-of-band even at boss-reach. Whatever differentiated cleric from "AC 16 melee with no Extra Attack" probably isn't wired into turn engine (e.g. Channel Divinity, Spiritual Weapon auto-cast).
|
||||
|
||||
**Investigation steps:**
|
||||
|
||||
- Pull per-round combat traces from boss rooms for mage/cleric/sorc/warlock/bard at L12 manor and underdark. Look at: did a slot spell ever fire? did a reaction fire? what was player HP when boss died vs when player died?
|
||||
- Grep `Shield\b|MageArmor|SpiritualWeapon|ChannelDivinity|EldritchBlast|HealingWord` for existing wiring; check whether each fires from `combat_turn_engine.go` paths.
|
||||
- Cross-check whether the J1 [[project_j1_turn_engine_fix]] turn-engine seam exposed any *caster* wiring that was previously only firing in `SimulateCombat`. If yes, that's the cheapest fix: same pattern.
|
||||
- Compare druid L12 underdark trace (90% clr) to cleric L12 underdark (0% clr / 8% boss-reach) — what's druid doing that cleric isn't?
|
||||
|
||||
**Findings (2026-05-17 trace sweep, `sim_results/j2_findings.md`):** zero slot casts and zero mid-fight consumable uses across 240 boss-room combats. `autoResolveCombat` dispatches `!attack` only — the entire caster-cliff diagnosis was built on a strawman where casters couldn't cast and didn't quaff heals. Druid's outperformance is its `ThornLashDmg` passive firing on the weapon-attack path, not Wild Shape durability (Wild Shape isn't wired into autoResolveCombat at all). Reaction-spell hypothesis is also moot: `dnd_spells.go` skips reaction-cast spells globally — no reaction window exists yet. Hypothesis 3 (slot economy) is confirmed-but-inverted: casters reach boss with slots intact because the sim refuses to spend them.
|
||||
|
||||
**Reframed levers (replaces the original menu):**
|
||||
|
||||
- **J2a — Teach `autoResolveCombat` to cast and consume.** Before each `!attack`, mirror the prod player decision: heal at low HP if a heal consumable is in inventory; otherwise cast the highest-impact available slot/cantrip; fall back to weapon swing. Class-blind first cut is fine — pick by damage-vs-remaining-enemy-HP, with a small heal-trigger at player HP < ~40%. Surface: `expedition_sim.go:530`. Heal-side mirrors `combat_bridge.go`'s `SelectConsumables`.
|
||||
- **J2b — Re-baseline.** Re-run the n=100 all-class corpus with the fixed `autoResolveCombat`. The current `baseline_j1_all10.jsonl` cell numbers do not measure caster boss-survival; they measure "caster forced to swing a stick". Only after J2b do we have a real read on whether a class-level lever is needed.
|
||||
- *Deferred until after J2b's real read:* shared boss-room cushion, cleric-specific intervention, H5 short-rest refresh wired to J2. Don't pre-commit balance changes against a strawman.
|
||||
- *Out of scope:* reaction-spell wiring — the reaction phase doesn't exist; lifting that ban is its own surface (post-J2).
|
||||
- *Avoid:* per-class HP/AC stat riders. Per accessibility-over-crunch, prefer surfacing a verb (cast, ward, channel) over inflating numbers.
|
||||
|
||||
**Definition of done (reframed 2026-05-17):**
|
||||
- **J2a:** at least one of {slot cast, cantrip cast, mid-fight heal-consumable} fires in ≥80% of boss-room fights for every caster class in a small (n≥10) verification sweep. ✅ **MET** — 100% cast rate in `sim_results/j2a_findings.md`.
|
||||
- **J2b:** new `sim_results/baseline_j2a_v2_all10.jsonl` (n=100). 3 of 5 trailer casters cleared the floor: mage 49% / sorcerer 47% manor at L12 (>40%). Warlock 34%, bard 2%, cleric 9% — these three are now spell-pool-bottlenecked, not sim-artifact-bottlenecked. Writeup: `sim_results/j2b_findings.md`.
|
||||
- *No martial leader cell drops by more than 10pp from `baseline_j1_all10.jsonl`* — ✅ **MET** (all +0.4 to +6.2pp). Required adding `simMartialFirstClass` after a v1 sweep showed Ranger regressed -35.8pp when the picker burned L3 slots; the gate skips cast-mode for half-caster martials.
|
||||
|
||||
**J2c — tried + reverted 2026-05-17.** Both proposed widening levers regressed: heal-spell preempt cost druid 10pp (slot heals are 10HP vs 40HP consumables); control-spell scoring at 22 cost warlock 6.6pp (hypnotic_pattern beat vampiric_touch wrongly), and at 5 the level-first sort made it inert. Picker reverted to the J2b shape. Bard/cleric trailing is a prod-level `defaultKnownSpells` problem (their damage rosters cap at L2), not a sim-picker problem — separate decision. Corpora `baseline_j2c_all10.jsonl` and `baseline_j2c_v2_all10.jsonl` retained for the post-mortem in `sim_results/j2b_findings.md`.
|
||||
|
||||
T5 dragons_lair stays J3's problem — J2 isn't on the hook for it. (J2a will partially overlap J3 hypothesis 1, which already flagged this exact sim-artifact for T5.)
|
||||
|
||||
### J3 — T5 boss universal wall
|
||||
|
||||
**Hypothesis menu:**
|
||||
|
||||
1. **Sim auto-resolve unfair.** `autoResolveCombat` (expedition_sim.go:277) loops `!attack` only — no consumable mid-fight, no rest, no spell cast for casters. Real players can do all of these.
|
||||
2. **Boss HP pool too deep.** Dragons_lair boss is multi-phase; auto-attack loop can't keep up with regen / phase shifts.
|
||||
3. **No party scaling.** Sim is one character; T5 boss may be tuned for parties.
|
||||
|
||||
**Investigation steps:**
|
||||
|
||||
- Add an "actions taken" counter to `autoResolveCombat` — confirm it never fires anything but attack.
|
||||
- Hand-resolve one L12 rogue dragons_lair boss fight to see whether a player using consumables wins. If yes → sim artifact. If no → over-tuned for solo.
|
||||
- Check `gogobee_expedition_difficulty.md` Phase 5-C reconciliation: that doc said dragons_lair was in-band, but the sim says nobody clears it.
|
||||
|
||||
**Likely levers** (depending on investigation):
|
||||
|
||||
- **If sim artifact:** harden `autoResolveCombat` to mirror `combat_bridge.go`'s `SelectConsumables` + spell-cast paths. Re-test.
|
||||
- **If over-tuned for solo:** scale boss HP / damage by party size. The difficulty memo allows lifting trailers without pushing monster scaling — *reducing* boss scaling at low party counts is in-bounds.
|
||||
- **If by-design raid content:** document it. Mark dragons_lair as "needs party" in the zone registry and surface that in `!zone` help. Per accessibility-over-crunch, the surface is a verb-style warning ("Bring friends — this dragon eats solo adventurers"), not a numeric DC.
|
||||
|
||||
**Definition of done:** at least one configuration (class + party + consumables) shows ≥30% extract or clear at L13+ dragons_lair in the sim. OR documented as raid-content with player-facing surface.
|
||||
|
||||
### J4 — Re-run validation matrix
|
||||
|
||||
After each of J1/J2/J3 lands:
|
||||
|
||||
- Re-run hardened+consumables n=30 matrix.
|
||||
- Diff vs J0 baseline. Report deltas in `sim_results/j_phase_diff.md`.
|
||||
- Watch for regressions in leader cells (rogue T2/T3 dropping). Lifting trailers must not nerf leaders.
|
||||
|
||||
**Definition of done:** all three phases meet their per-phase DoD at n=30, and no leader cell drops by more than 10pp.
|
||||
|
||||
### Phasing rationale (J phases)
|
||||
|
||||
J0 first — n=10 noise floor is too high to read 10pp movements; without a tighter baseline we'll chase ghosts.
|
||||
|
||||
J1 shipped 2026-05-17 (commit 519964f) — turn-engine Extra Attack wired. J2 is now reframed (above) from "Mage walls" to a five-class caster boss-survival problem spanning mage/cleric/sorc/warlock/bard; investigation may share a lever or split into per-class fixes after the per-round trace. Cleric likely needs its own intervention regardless.
|
||||
|
||||
J3 can ship in parallel with J2. If sim-artifact, fix is in expedition_sim.go and doesn't touch balance. If a real wall, depends on J2 outcomes — a more durable caster reaching the boss room with slots intact might already reach the boss-doorway more often.
|
||||
|
||||
J4 is the gate. Don't merge a class buff without the validation matrix showing the leader didn't regress.
|
||||
|
||||
After Phase J converges, return to H4 with a meaningful baseline.
|
||||
|
||||
### Open questions (J phases)
|
||||
|
||||
- **Sim party scaling.** Sim character = solo player, party of 4, or band? Production is solo. Tune for solo or we make group play trivial. Document the choice.
|
||||
- **Subclass coverage.** Sim builds vanilla-class synthetics (no subclass). Subclass passives at L3+ probably matter a lot — particularly for the five J2 trailers where the subclass often *is* the survival kit (e.g. Bard College of Valor's extra attack, Cleric domains' bonus-action burst). Pick a "best" subclass per class for the sim or sweep across subclasses in a separate pass before pre-committing J2 levers.
|
||||
- **Mage Armor as auto-buff.** Player-side spell they cast, or a passive we toggle? Auto-toggling preserves accessibility-over-crunch but removes a (small) tactical decision. Probably worth auto-toggling and noting it in per-class help.
|
||||
- **Boss consumable refresh.** At T5 elite gates, should the autopilot offer a "rest and re-stock" prompt before the boss? Mirrors real-game tension; closes the sim/prod gap.
|
||||
|
||||
### Out of scope for Phase J (explicitly)
|
||||
|
||||
- Reworking the d20 combat engine or threat-tier scaling.
|
||||
- New zone content or content-tier changes.
|
||||
- Touching loot tables (that's H4, post-J).
|
||||
- Subclass redesign — only verifying existing subclass passives fire.
|
||||
- Multi-character party mechanics — single-char tuning only.
|
||||
@@ -1,433 +0,0 @@
|
||||
# GogoBee — Housing & Babysitter Systems
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`, `gogobee_expedition_system.md`
|
||||
> **Version:** 1.0
|
||||
> **Status:** Housing — complete spec. Babysitter — design options (decision pending).
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
All existing `*_flavor.go` / `*_flavor.txt` files are off-limits.
|
||||
Housing and babysitter flavor goes in `twinbee_housing_flavor.go` — new file only.
|
||||
|
||||
---
|
||||
|
||||
## Part One: Housing System
|
||||
|
||||
---
|
||||
|
||||
## 1. Overview
|
||||
|
||||
Housing gives players a persistent home base — a physical address in the GogoBee world that persists between expeditions, provides mechanical benefits, and represents long-term investment. It is the anchor of the non-expedition economy.
|
||||
|
||||
Housing integrates with:
|
||||
- **Long rests** (home = free long rest, always available)
|
||||
- **Storage** (inventory overflow, rare item safekeeping)
|
||||
- **Crafting** (certain recipes require a home workshop)
|
||||
- **Passive income** (upgraded properties generate coins over time)
|
||||
- **Expedition prep** (supply storage, base camp fast-travel anchor)
|
||||
- **Pet housing** (pets need somewhere to live when you're away)
|
||||
- **Babysitter system** (see Part Two)
|
||||
- **Thom Krooke** (mortgage holder, property broker)
|
||||
|
||||
---
|
||||
|
||||
## 2. Property Tiers
|
||||
|
||||
Players begin homeless and progress through tiers by purchasing or renting. Each tier unlocks new capabilities.
|
||||
|
||||
| Tier | Property Type | Acquisition | Base Cost | Long Rest | Storage | Passive Income |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 0 | Homeless | Default | — | Inn only (costs coins) | None | None |
|
||||
| 1 | Rented Room | `!rent room` | 15 coins/week | ✅ | 10 slots | None |
|
||||
| 2 | Rented Apartment | `!rent apartment` | 40 coins/week | ✅ | 25 slots | None |
|
||||
| 3 | Purchased Cottage | `!buy cottage` | 800 coins (mortgage available) | ✅ | 50 slots | 5 coins/day |
|
||||
| 4 | Purchased House | `!buy house` | 2,500 coins (mortgage available) | ✅ | 100 slots | 15 coins/day |
|
||||
| 5 | Manor | `!buy manor` | 8,000 coins (mortgage available) | ✅ | 250 slots | 40 coins/day |
|
||||
| 6 | Estate | `!buy estate` | 25,000 coins (mortgage available) | ✅ | Unlimited | 100 coins/day |
|
||||
|
||||
### 2.1 Rent vs. Buy
|
||||
|
||||
**Renting:**
|
||||
- Weekly payment auto-deducted (Thom Krooke collects)
|
||||
- No equity, no passive income, no upgrade path
|
||||
- Miss two consecutive payments → eviction (Tier 0, possessions move to storage for 7 days)
|
||||
- No mortgage complexity; simple and accessible early game
|
||||
|
||||
**Buying:**
|
||||
- One-time purchase OR mortgage financing through Thom Krooke (see Section 4)
|
||||
- Owned property generates passive income
|
||||
- Upgradeable with rooms, amenities, workshop
|
||||
- Cannot be repossessed unless mortgage defaults (3 consecutive missed payments)
|
||||
|
||||
---
|
||||
|
||||
## 3. Property Upgrades
|
||||
|
||||
Owned properties (Tier 3+) can be upgraded with rooms and amenities. Upgrades are permanent and increase property value.
|
||||
|
||||
### 3.1 Upgrade Catalog
|
||||
|
||||
| Upgrade | Cost | Prerequisite | Benefit |
|
||||
|---|---|---|---|
|
||||
| **Storage Expansion** | 200 coins | Any owned | +50 storage slots |
|
||||
| **Workshop** | 500 coins | Cottage+ | Unlocks home crafting (no Thom Krooke visit required) |
|
||||
| **Herb Garden** | 300 coins | Cottage+ | Passive: 1d4 common materials/day (zone-agnostic) |
|
||||
| **Forge** | 750 coins | House+ | Unlocks metal crafting at home; +1 to crafted weapon/armor quality |
|
||||
| **Library** | 600 coins | House+ | Passive: +1 INT for all INT skill checks while at home |
|
||||
| **Training Grounds** | 800 coins | House+ | Short rest restores +1d6 additional HP |
|
||||
| **Guest Room** | 400 coins | House+ | Future: NPC visitors; Babysitter eligible housing (see Part Two) |
|
||||
| **Vault** | 1,000 coins | Manor+ | Secure storage: items here cannot be lost on death |
|
||||
| **Trophy Room** | 500 coins | Manor+ | Display legendary items; passive +5% XP gain |
|
||||
| **Expedition Outpost** | 1,200 coins | Manor+ | Base Camp fast-travel cost reduced; supply storage for active expeditions |
|
||||
| **Greenhouse** | 900 coins | Estate | Passive: 1d6 uncommon materials/day (zone-agnostic) |
|
||||
| **Scriptorium** | 1,500 coins | Estate | Passive: crafting recipe discovery without `!lore` checks |
|
||||
|
||||
### 3.2 Property Value
|
||||
|
||||
Each upgrade adds to the property's **assessed value**, which affects:
|
||||
- Passive income calculation (higher value = more income)
|
||||
- Mortgage refinancing options
|
||||
- Future resale (sell at 70% of current assessed value)
|
||||
|
||||
---
|
||||
|
||||
## 4. Mortgage System
|
||||
|
||||
The mortgage system is GogoBee's primary long-term financial mechanic, pegged to real-world ARM rates via the FRED API.
|
||||
|
||||
### 4.1 Mortgage Structure
|
||||
|
||||
When a player takes a mortgage via `!buy <property> --mortgage`:
|
||||
|
||||
1. **Down payment:** 20% of property cost paid upfront
|
||||
2. **Principal:** Remaining 80% financed by Thom Krooke
|
||||
3. **Interest rate:** Current FRED ARM rate + 2% (Thom Krooke's margin)
|
||||
4. **Term:** 30 in-game weeks (real-time weeks)
|
||||
5. **Payment frequency:** Weekly, auto-deducted Sunday at reset
|
||||
|
||||
**Example at current ARM rate (~6.5% + 2% = 8.5%):**
|
||||
```
|
||||
Cottage: 800 coins
|
||||
Down payment: 160 coins
|
||||
Principal: 640 coins
|
||||
Weekly payment: ~25 coins/week for 30 weeks
|
||||
Total paid: ~750 coins (principal + interest)
|
||||
```
|
||||
|
||||
### 4.2 ARM Rate Integration
|
||||
|
||||
The FRED API is queried weekly (Sunday reset) to fetch the current 5/1 ARM rate.
|
||||
Rate updates are announced by Thom Krooke via Matrix message to the TwinBee room.
|
||||
|
||||
```go
|
||||
// FREDRateConfig holds the FRED API configuration for ARM rate fetching.
|
||||
type FREDRateConfig struct {
|
||||
SeriesID string `json:"series_id"` // "MORTGAGE5US"
|
||||
MarginPct float32 `json:"margin_pct"` // Thom Krooke's margin (2.0)
|
||||
LastFetched time.Time `json:"last_fetched"`
|
||||
CurrentRate float32 `json:"current_rate"` // base rate from FRED
|
||||
EffectiveRate float32 `json:"effective_rate"` // base + margin
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 Mortgage Events
|
||||
|
||||
| Event | Trigger | Consequence |
|
||||
|---|---|---|
|
||||
| Rate increase >0.5% | FRED weekly update | Thom Krooke announces; payment adjusts next week |
|
||||
| Rate decrease >0.5% | FRED weekly update | Thom Krooke announces; payment adjusts next week |
|
||||
| Missed payment | Insufficient coins on Sunday | Warning from Thom Krooke; 10% penalty added |
|
||||
| Two missed payments | Second consecutive miss | Thom Krooke visits in person (flavor event); 20% penalty cumulative |
|
||||
| Three missed payments | Third consecutive miss | Default: property seized; equity returned at 50% |
|
||||
| Early payoff | `!mortgage payoff` | No penalty; Thom Krooke is genuinely pleased |
|
||||
| Refinance | `!mortgage refi` | Reset term at current rate; available once per 10 weeks |
|
||||
|
||||
### 4.4 Thom Krooke Rate Announcements
|
||||
|
||||
Thom Krooke posts to the TwinBee Matrix room weekly with the rate update. These are in Thom's voice (Tom Nook parody) and contain the actual FRED rate:
|
||||
|
||||
> *"Good news, friends! The ARM rate this week sits at 7.2% — and with my modest service margin, your mortgage rate is 9.2%. As always, I am here to help. Payments process Sunday. Thank you!"*
|
||||
|
||||
> *"The rate has moved up a bit this week — 8.1%, so 10.1% with my fee. Nothing to worry about! Think of it as an investment in your future. Thom Krooke is always here. Always."*
|
||||
|
||||
### 4.5 Go Data Model — Mortgage
|
||||
|
||||
```go
|
||||
type Mortgage struct {
|
||||
ID string `json:"id"`
|
||||
PlayerID string `json:"player_id"`
|
||||
PropertyID string `json:"property_id"`
|
||||
Principal int `json:"principal"`
|
||||
Remaining int `json:"remaining"`
|
||||
DownPayment int `json:"down_payment"`
|
||||
WeeklyPayment int `json:"weekly_payment"`
|
||||
InterestRate float32 `json:"interest_rate"`
|
||||
TermWeeks int `json:"term_weeks"`
|
||||
WeeksRemaining int `json:"weeks_remaining"`
|
||||
MissedPayments int `json:"missed_payments"`
|
||||
TotalPaid int `json:"total_paid"`
|
||||
StartedAt time.Time `json:"started_at"`
|
||||
PaidOffAt *time.Time `json:"paid_off_at"`
|
||||
Defaulted bool `json:"defaulted"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Property State & Commands
|
||||
|
||||
### 5.1 Player Property Record
|
||||
|
||||
```go
|
||||
type PlayerProperty struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
PropertyID string `json:"property_id"`
|
||||
Tier int `json:"tier"`
|
||||
Type string `json:"type"` // rented, owned
|
||||
Name string `json:"name"` // player-named
|
||||
Upgrades []string `json:"upgrades"` // upgrade IDs
|
||||
AssessedValue int `json:"assessed_value"`
|
||||
PassiveIncome int `json:"passive_income"` // coins/day
|
||||
StorageCapacity int `json:"storage_capacity"`
|
||||
StorageUsed int `json:"storage_used"`
|
||||
MortgageID *string `json:"mortgage_id"`
|
||||
AcquiredAt time.Time `json:"acquired_at"`
|
||||
LastRentPaid *time.Time `json:"last_rent_paid"`
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 Housing Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!home` | Summary of current property, upgrades, and status |
|
||||
| `!home name <name>` | Name your property |
|
||||
| `!rent room` / `!rent apartment` | Rent at current tier |
|
||||
| `!buy <cottage/house/manor/estate>` | Purchase outright |
|
||||
| `!buy <property> --mortgage` | Purchase with Thom Krooke financing |
|
||||
| `!upgrade <type>` | Purchase a property upgrade |
|
||||
| `!mortgage status` | Current mortgage balance, rate, payments remaining |
|
||||
| `!mortgage payoff` | Pay off remaining mortgage balance |
|
||||
| `!mortgage refi` | Refinance at current FRED rate |
|
||||
| `!storage` | View storage inventory |
|
||||
| `!storage deposit <item>` | Store item at home |
|
||||
| `!storage withdraw <item>` | Retrieve item from home storage |
|
||||
| `!sell property` | Sell at 70% assessed value (must own outright) |
|
||||
| `!passive income` | Check daily passive income and last payout |
|
||||
|
||||
---
|
||||
|
||||
## 6. Housing × Expedition Integration
|
||||
|
||||
### 6.1 Long Rest at Home
|
||||
|
||||
Owning or renting any property provides free long rests via `!rest long` with no inn cost and no cooldown — home is always available.
|
||||
|
||||
The **Expedition Outpost** upgrade extends this: the outpost links to your active Base Camp in a Tier 4–5 zone, allowing one fast-travel per expedition back to base camp from home (and return) without consuming a full travel day.
|
||||
|
||||
### 6.2 Supply Storage
|
||||
|
||||
Players with owned properties (Tier 3+) can pre-stage expedition supplies at home:
|
||||
|
||||
- `!storage deposit supplies <N>` — store SU at home
|
||||
- Supplies stored at home are available for `!expedition start` without visiting Thom Krooke
|
||||
- Maximum staged supply = 2× the property's base storage tier
|
||||
- Herb Garden and Greenhouse upgrades contribute passive SU daily
|
||||
|
||||
### 6.3 Passive Income Collection
|
||||
|
||||
Passive income accrues daily at reset. Collected automatically into the player's coin balance. Thom Krooke sends a brief weekly summary:
|
||||
|
||||
> *"Good morning! Your property generated 105 coins this week. Minus your mortgage payment of 25 coins — a net gain of 80. Wonderful, yes?"*
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## Part Two: Babysitter System — Design Options
|
||||
|
||||
---
|
||||
|
||||
## 7. What Is Known
|
||||
|
||||
The Babysitter system exists in the GogoBee design. Its purpose is not yet fully defined. The following is known:
|
||||
|
||||
- It is a named system — "Babysitter" is intentional, not a placeholder
|
||||
- It relates to what happens while the player is **away** (on expedition, offline, or otherwise occupied)
|
||||
- It likely connects to housing (something to watch over)
|
||||
- It possibly connects to pets (something to care for)
|
||||
- It is separate enough from the housing system to warrant its own name
|
||||
|
||||
The following are **design options** — mutually exclusive directions. One should be chosen before implementation begins.
|
||||
|
||||
---
|
||||
|
||||
## 8. Design Option A — The Offline Caretaker
|
||||
|
||||
**Concept:** The Babysitter is an NPC hired to manage the player's property and pets while they are on expedition or offline. A literal babysitter for your home.
|
||||
|
||||
**Mechanics:**
|
||||
- Hired via `!hire babysitter` at a daily coin cost
|
||||
- While active, the Babysitter:
|
||||
- Feeds and cares for pets (prevents pet happiness decay, if that mechanic exists)
|
||||
- Collects passive income from property upgrades (without the Babysitter, income queues but doesn't process)
|
||||
- Waters the Herb Garden / Greenhouse (without care, passive material yield halves after 3 days)
|
||||
- Accepts deliveries from Thom Krooke (supply orders placed before expedition are ready on return)
|
||||
- Babysitter has a **competence level** (1–5) that affects reliability:
|
||||
- Level 1: Occasionally forgets things (20% chance of missed task per day)
|
||||
- Level 3: Reliable (5% miss chance)
|
||||
- Level 5: Perfect (0% miss chance; also occasionally leaves a small gift)
|
||||
- Babysitter levels up with continued employment (XP from days worked)
|
||||
- A level 5 Babysitter is a relationship worth maintaining
|
||||
|
||||
**Cost:**
|
||||
| Babysitter Level | Daily Cost |
|
||||
|---|---|
|
||||
| 1 | 3 coins/day |
|
||||
| 2 | 6 coins/day |
|
||||
| 3 | 10 coins/day |
|
||||
| 4 | 15 coins/day |
|
||||
| 5 | 22 coins/day |
|
||||
|
||||
**Flavor:** The Babysitter is a named NPC (name TBD) with a personality. They leave notes. TwinBee reads the notes aloud on expedition return. The notes are the flavor text.
|
||||
|
||||
---
|
||||
|
||||
## 9. Design Option B — The Passive Expedition Support
|
||||
|
||||
**Concept:** The Babysitter is an active support role during expeditions — a companion back at Base Camp or home who provides passive benefits to the expedition in progress.
|
||||
|
||||
**Mechanics:**
|
||||
- Activated via `!babysitter deploy` at expedition start (costs coins per day of expedition)
|
||||
- While deployed, the Babysitter:
|
||||
- Reduces supply burn by 10% (they're handling logistics from the rear)
|
||||
- Once per expedition, can deliver a supply drop to the player's Base Camp (costs coins + 1 expedition day)
|
||||
- Manages the Threat Clock passively (-1 per day via "covering your tracks" at home base)
|
||||
- Sends morning intel: +1 to first Perception/Investigation check of each expedition day
|
||||
- Babysitter cannot enter combat zones — support only
|
||||
- Deactivates if player is forced to extract (they come to get you)
|
||||
|
||||
**Cost:** 8 coins/day of expedition, prepaid at start.
|
||||
|
||||
**Flavor:** The Babysitter communicates via Matrix messages — brief field reports in the morning, encouraging notes in the evening, occasional observations that are either useful or cryptic depending on TwinBee's mood.
|
||||
|
||||
---
|
||||
|
||||
## 10. Design Option C — The Passive Skill Trainer
|
||||
|
||||
**Concept:** The Babysitter is a trainer the player hires to develop skills while they are doing other things — offline training.
|
||||
|
||||
**Mechanics:**
|
||||
- Hired to train a specific skill or stat for a real-time duration
|
||||
- While training:
|
||||
- The targeted skill/stat gains slow XP passively (cannot exceed 50% of the next threshold via training alone)
|
||||
- Training costs coins per hour of real time
|
||||
- Player does not need to be online
|
||||
- Training is interrupted if the player uses the relevant skill in an expedition (expedition XP takes over)
|
||||
- Maximum one trainer active at a time
|
||||
- Training has a cap: cannot use training to level up — only to approach the threshold faster
|
||||
|
||||
**Cost:** 2–10 coins/hour depending on stat trained (CHA most expensive; STR cheapest).
|
||||
|
||||
**Flavor:** The trainer has opinions. If you ignore their training by going on expedition, they note it. If you complete a session they trained you for and perform well, they take appropriate credit.
|
||||
|
||||
---
|
||||
|
||||
## 11. Design Option D — The Community Role
|
||||
|
||||
**Concept:** The Babysitter is a community-facing role — a player (or designated bot persona) who watches over the TwinBee Matrix room while a player is on expedition, acting as a liaison.
|
||||
|
||||
**Mechanics:**
|
||||
- One Babysitter role active per expedition (could be another player or an NPC fill-in)
|
||||
- Babysitter player can:
|
||||
- Check on the expedition player's status via `!babysit status <player>`
|
||||
- Send one item or supply cache to an active expedition (costs the Babysitter coins)
|
||||
- Vote to activate a community Boost (community milestone modifier to TwinBee mood)
|
||||
- In return, the Babysitter earns a commission from the expedition's loot (5% of coin value on completion)
|
||||
- If no player accepts the Babysitter role, an NPC fills it at reduced effectiveness
|
||||
|
||||
**Flavor:** This makes expeditions a community event rather than solo. The Matrix room has a stake in the expedition's outcome. TwinBee acknowledges the Babysitter in morning briefings.
|
||||
|
||||
---
|
||||
|
||||
## 12. Design Decision: Option A — The Offline Caretaker
|
||||
|
||||
**Selected.** The Babysitter is an NPC hired to manage the player's property and pets while they are on expedition or offline.
|
||||
|
||||
---
|
||||
|
||||
## 13. Babysitter NPC — Pastel
|
||||
|
||||
**Name:** Pastel
|
||||
**Source:** Recurring support character from the TwinBee series (Konami). In the games, Pastel is the capable, warm-hearted civilian presence while the TwinBee ships are out fighting. In GogoBee, she's the person keeping everything together while you're in the dungeon.
|
||||
|
||||
**Personality:** Warm, slightly tired, completely reliable. Pastel has seen players return from bad expeditions and good ones and treats both the same — with a note on the table and everything in order. She is not impressed by legendary loot. She is genuinely pleased when the pets are happy. She does not complain. She notices everything.
|
||||
|
||||
**Voice:** Domestic, understated, occasionally dry. Contrasts directly with Thom Krooke's relentless salesmanship and TwinBee's dramatic narration. Pastel's register is: *this is what I did today, everything is fine, the cat knocked something over.*
|
||||
|
||||
**Level progression:**
|
||||
- **Level 1:** Enthusiastic but scattered. Means well. 20% chance of missed task per day.
|
||||
- **Level 2:** Getting the hang of it. 12% miss chance. Notes are more organized.
|
||||
- **Level 3:** Found her rhythm. 5% miss chance. Reliable, efficient, minimal fuss.
|
||||
- **Level 4:** Anticipatory. 1% miss chance. Occasionally handles things before they become problems.
|
||||
- **Level 5:** Perfect. 0% miss chance. Sometimes leaves a small gift. The right gift.
|
||||
|
||||
```go
|
||||
type BabysitterNPC struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"` // "Pastel"
|
||||
Level int `json:"level"` // 1–5
|
||||
FlavorRef string `json:"flavor_ref"` // "pastel"
|
||||
HiredByID string `json:"hired_by_id"`
|
||||
HiredAt time.Time `json:"hired_at"`
|
||||
DailyRate int `json:"daily_rate"`
|
||||
DaysWorked int `json:"days_worked"`
|
||||
XP int `json:"xp"` // levels up with days worked
|
||||
MissChance float32 `json:"miss_chance"` // 0.20→0.12→0.05→0.01→0.00
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 14. Implementation Phases — Housing
|
||||
|
||||
### Phase H1 — Core Housing
|
||||
- [ ] `PlayerProperty` struct and DB schema
|
||||
- [ ] Tier 0–2 (homeless, rented room, rented apartment)
|
||||
- [ ] Rent payment auto-deduction (weekly)
|
||||
- [ ] Eviction system
|
||||
- [ ] `!home`, `!rent` commands
|
||||
- [ ] Free long rest at rented/owned property
|
||||
|
||||
### Phase H2 — Ownership & Mortgage
|
||||
- [ ] Tier 3–6 (cottage through estate)
|
||||
- [ ] `Mortgage` struct and DB schema
|
||||
- [ ] FRED API ARM rate integration (weekly fetch)
|
||||
- [ ] `!buy`, `!mortgage status`, `!mortgage payoff`, `!mortgage refi` commands
|
||||
- [ ] Thom Krooke rate announcement posts
|
||||
- [ ] Missed payment and default handling
|
||||
|
||||
### Phase H3 — Upgrades & Passive Systems
|
||||
- [ ] Upgrade catalog implementation
|
||||
- [ ] Passive income daily accrual
|
||||
- [ ] Storage system (`!storage` commands)
|
||||
- [ ] Herb Garden / Greenhouse passive material yield
|
||||
- [ ] Workshop and Forge crafting unlock
|
||||
|
||||
### Phase H4 — Expedition Integration
|
||||
- [ ] Supply staging at home
|
||||
- [ ] Expedition Outpost fast-travel link
|
||||
- [ ] Vault (death-proof storage)
|
||||
- [ ] Trophy Room XP bonus
|
||||
|
||||
### Phase H5 — Babysitter (post-design decision)
|
||||
- [ ] Implement chosen option
|
||||
- [ ] Babysitter NPC creation (name, personality, flavor text)
|
||||
- [ ] `twinbee_housing_flavor.go` population
|
||||
|
||||
---
|
||||
|
||||
*End of Housing & Babysitter Document.*
|
||||
*Babysitter direction requires human decision before Phase H5 implementation.*
|
||||
*Reference alongside all companion docs in Claude Code sessions.*
|
||||
@@ -1,563 +0,0 @@
|
||||
# GogoBee — Legacy Adventure → D&D Engine Migration Plan
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`, `gogobee_expedition_system.md`, `gogobee_resource_combat_integration.md`
|
||||
> **Version:** 0.1 (planning draft)
|
||||
> **Status:** Pre-implementation — scoping
|
||||
> **Branch:** `adv-2.0`
|
||||
|
||||
---
|
||||
|
||||
## 0. Why this doc exists
|
||||
|
||||
Phase R (resource/combat integration) shipped the new harvest/combat surface and gated the player-facing legacy daily-loop dispatch. The internal helpers (`resolveAdvAction`, `advEligibleLocations`, `AdvLocation` tier data, `AdventureCharacter`, `CombatLevel`, `combat_engine.go`) are still alive because non-deprecated subsystems consume them: arena, co-op dungeons, babysit/scheduler, hospital, rival, masterwork, pets, housing, mortgage, twinbee morning DM.
|
||||
|
||||
This doc inventories every surviving caller and lays out a phased deletion path. The endgame is: `AdventureCharacter` deleted, `CombatLevel` field gone, `combat_engine.go` removed, `combat_bridge.go` removed, branching dungeon paths become buildable on a clean schema.
|
||||
|
||||
**Non-goals.** This is not a redesign. We are not adding features during the migration. New mechanics (branching paths, multi-region expansions, new arena formats) are sequenced *after* L5 teardown lands.
|
||||
|
||||
---
|
||||
|
||||
## 1. Inventory — what's still on the legacy engine
|
||||
|
||||
| Subsystem | Files | LOC | AdvCharacter coupling | CombatLevel coupling | D&D parallel | Risk |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Babysit/scheduler | `adventure_babysit.go`, `adventure_scheduler.go` | 1,169 | mutates: CombatXP, Alive, ActionTakenToday | reads | none (auto-actions) | low |
|
||||
| Arena | `adventure_arena*.go` (4 files) | 1,228 | mutates: Alive, ArenaWins/Losses, CombatXP | gates tier, scales rewards | `dnd_zone_combat.go` | high |
|
||||
| Co-op dungeons | `coop_dungeon*.go` (9 files) | 4,027 | reads-only (minLevel gate, liability) | gates participation | `dnd_expedition_combat.go` | medium |
|
||||
| Hospital | `adventure_hospital.go` | 288 | mutates: Alive, HospitalVisits | cost = level × 25k/125k | none | low |
|
||||
| Rival | `adventure_rival.go` | 866 | mutates: RivalPool, CombatXP | unlock at L5, stake calc | none | medium |
|
||||
| Masterwork | `adventure_masterwork.go` | 543 | reads equip, no char mutation | none | none | low |
|
||||
| Pets | `adventure_pets.go` | 448 | mutates pet fields on AdvCharacter | none | none | low |
|
||||
| Housing/mortgage | `adventure_housing.go`, `adventure_mortgage.go` | 922 | mutates House* fields | none | none | low |
|
||||
| TwinBee/render | `adventure_render.go`, `adventure_twinbee.go` | 1,472 | reads stats; simulator calls `resolveAdvAction` | reads | none | low |
|
||||
| Combat bridge | `combat_bridge.go` | 363 | translation layer | — | — | (delete) |
|
||||
|
||||
**Source of truth:** `AdventureCharacter` is defined at `adventure_character.go:27` (76 fields). `DnDCharacter` at `dnd.go:152`.
|
||||
|
||||
**Live `resolveAdvAction` callers (post-R1):** `adventure_babysit.go:349`, `adventure_twinbee.go:135` (simulator).
|
||||
|
||||
---
|
||||
|
||||
## 2. Architectural decision — char unification strategy
|
||||
|
||||
Three options were considered:
|
||||
|
||||
**A. Big-bang field merge.** Move every surviving AdvCharacter field onto DnDCharacter, then s/AdventureCharacter/DnDCharacter/g. Rejected: unsafe, no incremental landing, breaks every test for one PR.
|
||||
|
||||
**B. Two-character coexistence forever.** Keep both, route by feature. Rejected: this is what we have now; doesn't actually retire anything.
|
||||
|
||||
**C. Phased subsystem migration with shared "extra" record.** ✅ Chosen. Each subsystem is migrated to read/write D&D state where there's a parallel, and to a new `player_meta` table for fields that don't fit on a character (HouseTier, RivalPool, ArenaWins, BabysitActive, MistyLastSeen, etc.). When all subsystems are migrated, AdvCharacter is deleted in a single L5 commit.
|
||||
|
||||
The `player_meta` table is the holding pen for non-stat per-user state that's currently squatting on AdvCharacter. It's not a redesign — it's a structural move so the deletion can happen cleanly.
|
||||
|
||||
### 2.1 `player_meta` schema (proposed)
|
||||
|
||||
> **Naming note.** New tables/types in this migration deliberately avoid the `dnd_` prefix used by older code (legal/trademark exposure flagged by user). Existing `dnd_*` symbols stay in place — only new surface uses neutral names.
|
||||
|
||||
```sql
|
||||
CREATE TABLE player_meta (
|
||||
user_id TEXT PRIMARY KEY,
|
||||
-- arena
|
||||
arena_wins INTEGER NOT NULL DEFAULT 0,
|
||||
arena_losses INTEGER NOT NULL DEFAULT 0,
|
||||
invasion_score INTEGER NOT NULL DEFAULT 0,
|
||||
-- rival
|
||||
rival_pool INTEGER NOT NULL DEFAULT 0,
|
||||
rival_unlocked_notified INTEGER NOT NULL DEFAULT 0,
|
||||
-- housing
|
||||
house_tier INTEGER NOT NULL DEFAULT 0,
|
||||
house_loan_balance INTEGER NOT NULL DEFAULT 0,
|
||||
house_loan_frozen INTEGER NOT NULL DEFAULT 0,
|
||||
house_missed_payments INTEGER NOT NULL DEFAULT 0,
|
||||
house_autopay INTEGER NOT NULL DEFAULT 0,
|
||||
house_current_rate REAL NOT NULL DEFAULT 0,
|
||||
-- pets
|
||||
pet_type TEXT NOT NULL DEFAULT '',
|
||||
pet_name TEXT NOT NULL DEFAULT '',
|
||||
pet_xp INTEGER NOT NULL DEFAULT 0,
|
||||
pet_level INTEGER NOT NULL DEFAULT 0,
|
||||
pet_armor_tier INTEGER NOT NULL DEFAULT 0,
|
||||
pet_flags_json TEXT NOT NULL DEFAULT '{}', -- chased_away/reactivated/arrived/morning_defense/etc
|
||||
-- npcs
|
||||
misty_last_seen INTEGER,
|
||||
arina_last_seen INTEGER,
|
||||
misty_buff_expires INTEGER,
|
||||
misty_debuff_expires INTEGER,
|
||||
arina_buff_expires INTEGER,
|
||||
misty_encounter_count INTEGER NOT NULL DEFAULT 0,
|
||||
misty_donated_count INTEGER NOT NULL DEFAULT 0,
|
||||
misty_roll_target INTEGER NOT NULL DEFAULT 0,
|
||||
arina_roll_target INTEGER NOT NULL DEFAULT 0,
|
||||
-- babysit
|
||||
babysit_active INTEGER NOT NULL DEFAULT 0,
|
||||
babysit_expires_at INTEGER,
|
||||
babysit_skill_focus TEXT NOT NULL DEFAULT '',
|
||||
auto_babysit INTEGER NOT NULL DEFAULT 0,
|
||||
auto_babysit_focus TEXT NOT NULL DEFAULT '',
|
||||
-- hospital / death
|
||||
hospital_visits INTEGER NOT NULL DEFAULT 0,
|
||||
last_death_date TEXT NOT NULL DEFAULT '',
|
||||
death_source TEXT NOT NULL DEFAULT '',
|
||||
death_location TEXT NOT NULL DEFAULT '',
|
||||
last_pardon_used INTEGER,
|
||||
death_reprieve_last INTEGER,
|
||||
-- streaks / chores
|
||||
current_streak INTEGER NOT NULL DEFAULT 0,
|
||||
best_streak INTEGER NOT NULL DEFAULT 0,
|
||||
last_action_date TEXT NOT NULL DEFAULT '',
|
||||
grudge_location TEXT NOT NULL DEFAULT '',
|
||||
holiday_action_taken INTEGER NOT NULL DEFAULT 0,
|
||||
streak_decayed INTEGER NOT NULL DEFAULT 0,
|
||||
-- shop / drops
|
||||
masterwork_drops_received INTEGER NOT NULL DEFAULT 0,
|
||||
treasures_locked INTEGER NOT NULL DEFAULT 0,
|
||||
pet_supply_shop_unlocked INTEGER NOT NULL DEFAULT 0,
|
||||
pet_level_10_date TEXT NOT NULL DEFAULT '',
|
||||
thom_animal_line_fired INTEGER NOT NULL DEFAULT 0,
|
||||
-- chat / npc msg
|
||||
npc_msg_count INTEGER NOT NULL DEFAULT 0,
|
||||
npc_msg_count_date TEXT NOT NULL DEFAULT '',
|
||||
robbie_visit_count INTEGER NOT NULL DEFAULT 0,
|
||||
crafts_succeeded INTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
```
|
||||
|
||||
### 2.2 Stat mapping — AdvCharacter → DnDCharacter
|
||||
|
||||
**Decisions locked in by user 2026-05-08:**
|
||||
- **CombatLevel→Level:** direct copy. CombatLevel doesn't carry semantic meaning beyond "starting Level for the new system." No compression formula. Players keep their numeric value as their D&D Level.
|
||||
- **CombatXP→XP:** **discarded.** Players start fresh on the new XP track (CombatXP is not migrated). The Level set above is their floor; XP resets to 0 at that level's threshold.
|
||||
- **AdvEquipment:** kept as-is. Stays at `AdvEquipment` type and `adventure_equipment` table. No rename to `dnd_*` (per naming guidance — see §2.0 callout above).
|
||||
|
||||
| AdvCharacter | DnDCharacter destination | Notes |
|
||||
|---|---|---|
|
||||
| `CombatLevel` | `Level` | Direct copy on backfill; no formula. |
|
||||
| `CombatXP` | — | **Not migrated.** XP starts at the floor of the new Level. |
|
||||
| `MiningSkill` / `ForagingSkill` / `FishingSkill` | retained as new fields on DnDCharacter | These are *skills*, not class levels. Add `MiningSkill/ForagingSkill/FishingSkill int` to DnDCharacter; keep XP fields too. |
|
||||
| `Alive` / `DeadUntil` | DnDCharacter `HPCurrent==0` + `DeadUntil` | Need to add `DeadUntil *time.Time` to DnDCharacter. |
|
||||
| `Title` | new field on DnDCharacter | Direct copy. |
|
||||
| equipment (`AdvEquipment`) | stays at `AdvEquipment` / `adventure_equipment` | Type and table name unchanged. Read paths drop AdvCharacter unwrap; no rename pass. |
|
||||
|
||||
### 2.3 `CombatLevel` retuning
|
||||
|
||||
Legacy CombatLevel scaled 1–50ish through grindy XP. D&D Level scales 1–20. Hospital/rival/co-op gates that read CombatLevel will be re-tuned to D&D Level brackets:
|
||||
|
||||
| Legacy gate | New gate |
|
||||
|---|---|
|
||||
| Hospital cost = `CombatLevel × 25k` (or × 125k post-cap) | `Level × 50k` (or × 250k at L20+) |
|
||||
| Rival unlock at CombatLevel ≥ 5 | Rival unlock at Level ≥ 3 |
|
||||
| Arena tier brackets (every 10 CL) | Arena tier brackets (every 4 levels) |
|
||||
| Co-op dungeon minLevel | Re-tune per dungeon (table in L3 section) |
|
||||
|
||||
These thresholds are placeholders — final tuning happens during each phase based on playtest.
|
||||
|
||||
---
|
||||
|
||||
## 3. Phase L1 — Babysit & scheduler
|
||||
|
||||
**Goal:** Kill the last live `resolveAdvAction` caller. Auto-actions become expedition-aware.
|
||||
|
||||
**Files touched:** `adventure_babysit.go`, `adventure_scheduler.go`, `adventure_twinbee.go` (simulator), `adventure_activities.go` (delete `resolveAdvAction` + `advEligibleLocations` after callers gone).
|
||||
|
||||
**Design:**
|
||||
- Babysit currently picks one of three skills (mining/foraging/fishing) and runs `resolveAdvAction` once a day for the user. The new flow:
|
||||
- If user has an active expedition → babysit attempts a single harvest action (`!forage`/`!mine`/`!fish` per skill focus) inside the user's current room. Goes through `handleHarvestCmd` headlessly with `babysit:true` flag so combat interrupts force-extract instead of running combat. (User isn't online; can't fight.)
|
||||
- If user has no active expedition → babysit posts a TwinBee nudge (one per real day, rate-limited to once/3d) suggesting `!expedition start`. No XP awarded.
|
||||
- `auto_babysit` becomes "auto-harvest while expedition active." `babysit_skill_focus` carries through unchanged.
|
||||
- `adventure_twinbee.go:135` simulator (uses fake CombatLevel=35 character) — replace with a fixed flavor-only narration. The simulator was always fake; deleting the AdvCharacter dependency is mechanical.
|
||||
|
||||
**Steps:**
|
||||
1. Add `auto_babysit` / `babysit_*` columns to `player_meta` (per §2.1) — migration + read/write helpers.
|
||||
2. Add `babysit:true` flag to harvest dispatch path; on combat-interrupt branches Standard/Elite/Patrol, force-extract the region run instead of entering combat. Test.
|
||||
3. Rewrite `babysitDo` to call new harvest path. Remove `resolveAdvAction` call. Test (covers: active expedition, no expedition, harvest yields → inventory, combat interrupt force-extract).
|
||||
4. Rewrite scheduler entrypoint analogously.
|
||||
5. Replace twinbee simulator with static flavor.
|
||||
6. Delete `resolveAdvAction`, `advEligibleLocations`, `AdvActionResult`, `parseActivityLocation` from `adventure_activities.go`. Audit for last callers via grep.
|
||||
7. `go test ./... && go vet`.
|
||||
|
||||
**Tests added:** `adventure_babysit_test.go` (currently absent — create). Cases: babysit-with-expedition harvests, babysit-without-expedition nudges, combat-interrupt during babysit force-extracts cleanly, daily rate-limit holds.
|
||||
|
||||
**Exit criteria:**
|
||||
- `grep resolveAdvAction internal/plugin/` returns 0 hits.
|
||||
- `go test ./...` clean.
|
||||
- Production users with `auto_babysit=true` and an active expedition see harvest deposits, not legacy activity output.
|
||||
|
||||
**Risk:** Babysit users have a behavior change (now auto-harvests instead of always rolling). Announce in `ADVENTURE_2.0_ANNOUNCEMENT.md`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Phase L2 — Arena (rebuild on Adventure 2.0 boss flow)
|
||||
|
||||
**Decision (2026-05-08):** Arena migrates to the **Adventure 2.0 boss flow** — the same staged narrative path zone bosses run through (`resolveBossRoom` in `dnd_zone_cmd.go:630`). Each arena fight is treated as a self-contained boss encounter: full combat log via `RenderCombatLog`, TwinBee mood lines on Nat20/Nat1, phase-two narration when the enemy crosses its `PhaseTwoAt` HP threshold, win/loss outcome blocks. Arena stops being "numbers vs numbers" and becomes a narrated event with the same texture as a zone boss room.
|
||||
|
||||
This is also the right shape because zone-boss plumbing (bestiary, mood events, phase transitions, kill records, loot drops) is already built and tested. We re-use it rather than re-implementing.
|
||||
|
||||
**Files touched:**
|
||||
- `adventure_arena.go` — entrypoint, gating, payout. Heavy rewrite.
|
||||
- `adventure_arena_combat.go` — round driver. Replaced by a call into `runZoneCombat` + a new arena-specific staged renderer (or direct re-use of the zone boss render — see step 4).
|
||||
- `adventure_arena_render.go` — reads switch to DnDCharacter + player_meta.
|
||||
- `adventure_arena_monsters.go` — **deleted as standalone**. Arena monsters are folded into the existing bestiary as boss-shaped entries (with `PhaseTwoAt`).
|
||||
- `adventure_arena_test.go` — ported.
|
||||
- New (small): `adventure_arena_flavor.go` — only if zone TwinBee pools don't cover arena context. Check existing `adventure_flavor_*.go` first per the reuse-flavor feedback rule before creating this file.
|
||||
|
||||
**Design specifics:**
|
||||
|
||||
- **Arena monster definitions.** Each existing `ArenaMonster` becomes a `BestiaryEntry` shape: `{ID, Name, HP, AC, AB, DamageDie, CR, PhaseTwoAt, Tags}`. Arena IDs are namespaced `arena_<tier>_<slug>` so they don't collide with zone bestiary IDs. Stored in a new `arenaBosses` map (still in `adventure_arena_monsters.go` if the file is kept; otherwise inlined). Tier brackets controlled by Arena tier (see below).
|
||||
- **Combat invocation.** Arena round driver builds `BossEncounter{Monster, PhaseTwoAt, ZoneIDForFlavor}` and calls a small new function `resolveArenaBoss(userID, encounter)` that wraps the same `runZoneCombat` → `RenderCombatLog` → mood/phase-two lines flow as `resolveBossRoom`. **Important:** arena is not inside a zone, so we factor the staged-narration body out of `resolveBossRoom` into a shared helper `renderBossOutcome(...)` that both call sites use. (`resolveBossRoom` keeps its zone-specific glue: zone loot drop, `applyBossDefeatThreat`, `abandonZoneRun`. Arena keeps its glue: Arena win/loss counters, payout, no zone loot.)
|
||||
- **TwinBee flavor in arena.** `twinBeeLine(zoneID, ...)` is keyed by zone; Arena passes a synthetic `ZoneArena` ID. Add `ZoneArena` to the zone enum and populate a small TwinBee mood/Nat20/Nat1/BossDeath/PlayerDeath pool — reuse existing pools where possible (per `feedback_reuse_existing_flavor`); only add new lines if the existing pools genuinely don't read right in arena context.
|
||||
- **Phase-two thresholds.** Arena bosses get `PhaseTwoAt` defaults: tier 1–2 = no phase two (numeric drama only); tier 3 = 50% HP; tier 4–5 = 50% HP + a flavor barb. This gives arena fights a structural beat without overengineering.
|
||||
- **Tier gating.** `tierFromCombatLevel` → `tierFromLevel`. Brackets:
|
||||
|
||||
| DnDCharacter.Level | Arena tier |
|
||||
|---|---|
|
||||
| 1–3 | I (Pup) |
|
||||
| 4–7 | II (Pit) |
|
||||
| 8–12 | III (Crucible) |
|
||||
| 13–17 | IV (Coliseum) |
|
||||
| 18–20 | V (Apex) |
|
||||
|
||||
- **State.** `ArenaWins`, `ArenaLosses`, `InvasionScore` move to `player_meta` (per §2.1). XP awards go through whatever the existing D&D XP path is (single source of truth — verify in `dnd_sheet.go` during implementation).
|
||||
- **Death.** Arena death now flows through the same `markAdventureDead(userID, "arena", arenaTierLabel)` hook the zone boss path uses. Hospital revive (post-L4a) heals from this same state.
|
||||
|
||||
**Steps:**
|
||||
1. Factor `renderBossOutcome` helper out of `resolveBossRoom`. Two callers post-extraction: zone boss path and (TBD) arena path. Smoke-test the zone boss path is unchanged via `adventure_arena_test.go` parity once arena lands on it.
|
||||
2. Add `ZoneArena` ID + minimal TwinBee mood pools (reuse where possible).
|
||||
3. Convert arena monsters to boss-shaped bestiary entries with `PhaseTwoAt`.
|
||||
4. Build `resolveArenaBoss(userID, encounter)` calling `runZoneCombat` + `renderBossOutcome`. Wire into existing arena entrypoint in `adventure_arena.go`.
|
||||
5. Migrate `ArenaWins/Losses/InvasionScore` to `player_meta`. Dual-write per §11.
|
||||
6. Swap render reads to DnDCharacter + player_meta.
|
||||
7. Port `tierFromCombatLevel` → `tierFromLevel` with new brackets.
|
||||
8. Port `adventure_arena_test.go`. Add a new test asserting arena win surfaces the staged combat log + TwinBee BossDeath line.
|
||||
9. Drop AdvCharacter imports from arena files. **DEFERRED (2026-05-09):** blocked on DisplayName migration (L4f-prep, see §7) plus L4 hospital/pets/XP work. Arena code still needs `char.DisplayName` (stats DM, T5/helm announces, render), `char.PetName` (pet-recovery game-room msg), `char.DeathReprieveLast`, `char.CombatXP`, `char.Alive`/`transitionDeath`. Counter dual-writes to `char.ArenaWins/Losses/InvasionScore` could be dropped now (player_meta is source of truth post-step 6), but the surrounding `loadAdvCharacter`/`saveAdvCharacter` calls stay for the other fields, so step 9's exit grep can't pass at L2 time. Revisit after DisplayName migration ships and L4 (hospital/pets/render) lands.
|
||||
10. `go test ./... && go vet`.
|
||||
|
||||
**Feature flag.** ~~Originally planned an `ARENA_BOSS_FLOW=1` soak.~~ Cancelled 2026-05-09: shipped no-flag, no legacy fallback. The legacy `runArenaCombat` / `RenderCombatLogArena` / `renderArenaCombatFinalMessage` / `renderArenaOutcome` / `arenaWin/LoseCloser` paths were deleted in the same commit. Boss-flow errors surface to the player and abort the round rather than falling back.
|
||||
|
||||
**Exit criteria:**
|
||||
- ~~`grep -l 'AdventureCharacter\|CombatLevel\|combat_engine' internal/plugin/adventure_arena*.go` empty.~~ **Deferred** with step 9 — see note above. The grep will only clear once DisplayName migration + L4 (hospital/pets/XP/render) ship; L2 closes without it.
|
||||
- Arena win produces a staged combat log + TwinBee BossDeath line + payout, just like a zone boss.
|
||||
- Arena loss produces a TwinBee PlayerDeath line + arena death flag, no zone-run side effects.
|
||||
- Existing arena DB rows readable; ArenaWins backfill from AdvCharacter into `player_meta` (§8).
|
||||
|
||||
**Risk:**
|
||||
- D&D combat is swingier than legacy CombatPower; tune HP/AC tables against in-flight playtest data (no flag soak — legacy path is gone).
|
||||
- Refactoring `resolveBossRoom` to extract `renderBossOutcome` could regress zone bosses. Mitigate: do the extraction in step 1 alone, ship it, run a full zone-boss test pass before continuing to step 2.
|
||||
|
||||
---
|
||||
|
||||
## 5. Phase L3 — Co-op dungeons (DELETION, not migration) — SHIPPED 2026-05-09
|
||||
|
||||
**Decision (2026-05-08):** Drop co-op dungeons entirely. Do **not** migrate. The user has a different design in mind for the future co-op slot; the current implementation is being retired wholesale.
|
||||
|
||||
**What shipped (2026-05-09):**
|
||||
- 11 `coop_*.go` files deleted (no `coop_dungeon_balance.go` ever existed on disk — only `coop_dungeon_balance_test.go`).
|
||||
- `internal/plugin/cleanup_l3.go` added: on every startup, cancels any `coop_dungeon_runs` left in `open`/`active`, refunds `coop_dungeon_members.total_contributed` and unsettled `coop_dungeon_bets` via `EuroPlugin.Credit`. Idempotent via per-run status-guarded UPDATE — only the writer that flips status to `cancelled` performs the refund for that run, so a crashed-then-restarted process can't double-credit. Tables left intact for historical querying; SQL drop deferred to a future GOGOBEE_COOP_PURGE pass.
|
||||
- `adventure.go`: stripped `!coop` dispatch, `coopTicker` goroutine, startup `lockCoopCombatActions` call, `!coop` help line, ticker comment. Replaced startup hook with `closeAndRefundLegacyCoopRuns(p.euro)`.
|
||||
- `adventure_scheduler.go`: removed `activeCoopMemberSet` load + skip branch and post-reset `lockCoopCombatActions` call.
|
||||
- `adventure_render.go`: removed `renderCoopTeaser`, `pickCoopTeaserCandidate`, the `loadCoopRunForUser` block, and the in-coop combat-locked status line. Replaced with a temporary closure announcement in the morning DM ("**Co-op dungeons closed for now** — `!expedition` is the way forward; a better co-op design is on the way."). Marked with a TODO to remove after 2026-05-16.
|
||||
- `adventure_followups_test.go`: removed `TestPickCoopTeaserCandidate_SkipsLeader`.
|
||||
|
||||
**Exit criteria — met:**
|
||||
- `grep -rn 'coop_dungeon\|CoopDungeon' internal/plugin/ --include='*.go'` returns only the cleanup migration in `cleanup_l3.go` and a startup hook in `adventure.go` — no live system code references.
|
||||
- `go vet ./...` clean.
|
||||
- `go test ./...` clean.
|
||||
|
||||
**Open follow-ups:**
|
||||
- Remove the morning-DM closure announcement after 2026-05-16 (one-week soak).
|
||||
- Future GOGOBEE_COOP_PURGE pass drops `coop_dungeon_runs`/`_members`/`_events`/`_bets`/`_gifts` tables and the `cleanup_l3.go` startup hook.
|
||||
|
||||
---
|
||||
|
||||
## 6. Phase L4 — Stat/perk gates
|
||||
|
||||
**Goal:** Hospital, rival, masterwork, pets, housing, mortgage all read DnDCharacter + `player_meta` exclusively. AdvCharacter still exists but is unreferenced outside its own file.
|
||||
|
||||
### 6.1 L4a — Hospital
|
||||
- `adventure_hospital.go`: cost formula `CombatLevel × 25k` → `Level × 50k`. `HospitalVisits` → `player_meta`. Revive flips DnDCharacter HP from 0 → full instead of `Alive=true`.
|
||||
|
||||
**Status (2026-05-09):** SHIPPED on `adv-2.0`.
|
||||
- `player_meta.hospital_visits` column added via columnMigration in `internal/db/db.go`.
|
||||
- `hospitalCostsForUser(char)` returns `(before, after)` using DnDCharacter.Level × 50k (5× before insurance), with a `dndLevelFromCombatLevel` fallback when no D&D row exists yet. Replaces the inline `CombatLevel × {125k,25k}` math at all three sites (handleHospitalCmd, resolveHospitalPay, sendHospitalAd).
|
||||
- `loadHospitalVisits(userID)` reads `player_meta.hospital_visits` → falls back to `adventure_characters.hospital_visits` during soak.
|
||||
- `upsertPlayerMetaHospitalVisits(userID, visits)` dual-writes the post-revive count alongside `saveAdvCharacter`.
|
||||
- `backfillPlayerMetaHospitalVisits()` runs on every Init; idempotent (only fills zero rows so dual-writes survive re-runs).
|
||||
- Revive (paid + on-demand + race-after-timer-expired) now also restores `DnDCharacter.HPCurrent = HPMax` via `LoadDnDCharacter` / `SaveDnDCharacter`. `char.Alive=true` still flips during soak — other systems (arena, scheduler) still read `Alive` and migrate later.
|
||||
- Tests: `TestPlayerMetaHospitalVisitsBackfill_Idempotent`, `TestLoadHospitalVisits_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaHospitalVisits_RoundTrip` (skip without prod DB, matching the L2/L4f-prep pattern).
|
||||
|
||||
### 6.2 L4b — Rival
|
||||
- `adventure_rival.go`: unlock at Level ≥ 3 (was CombatLevel ≥ 5). RivalPool → `player_meta`. ~~Duel combat already uses `combat_engine` — port to `simulateCombat` here too (small extra step).~~ **Correction (2026-05-09):** rival duel combat is RPS, not `combat_engine` — no combat-engine port needed.
|
||||
- Move rival flavor into existing `adventure_flavor_rival.go` — no new file.
|
||||
|
||||
**Status (2026-05-09):** SHIPPED on `adv-2.0`.
|
||||
- `player_meta.rival_pool` + `player_meta.rival_unlocked_notified` columns added via columnMigration in `internal/db/db.go`.
|
||||
- New `rivalMinLevel = 3` (was `rivalMinCombatLevel = 5`). Stake formula `(level / 3) * 1000` (was `(combatLevel / 5) * 1000`) — same magnitude at the unlock threshold (Level 3 → €1000 mirrors legacy CL5 → €1000), tops out around €6000 at Level 20. Tunable later.
|
||||
- `rivalLevelForUser(char)` reads `DnDCharacter.Level` with `dndLevelFromCombatLevel(char.CombatLevel)` fallback when no D&D row exists yet — mirrors `hospitalCostsForUser` shape.
|
||||
- `checkRivalPoolUnlock` now reads D&D level, dual-writes `RivalPool` / `RivalUnlockedNotified` to player_meta via `upsertPlayerMetaRivalState`. Read sites flipped to `loadRivalState(userID)` in `selectRivalPair`, `handleRivalsCmd`, and the morning-DM rival status in `adventure_render.go`.
|
||||
- `loadRivalState(userID)` reads `player_meta` → falls back to `adventure_characters.rival_pool / rival_unlocked_notified` during soak.
|
||||
- `backfillPlayerMetaRivalState()` runs on every Init; idempotent (only fills rows whose rival columns are still zero, so dual-writes survive re-runs).
|
||||
- Tests: `TestPlayerMetaRivalStateBackfill_Idempotent`, `TestLoadRivalState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaRivalState_RoundTrip` (skip without prod DB, matching the L4a/L4f-prep pattern).
|
||||
- `go vet ./...` + `go test ./...` clean.
|
||||
|
||||
### 6.3 L4c — Masterwork
|
||||
- `adventure_masterwork.go`: no AdvCharacter mutations today; only equipment reads. ~~Port `advMasterworkSkillBonus` to take `*DnDCharacter` (skill fields added in §2.2).~~ **Correction (2026-05-09):** `advMasterworkSkillBonus` already takes `(equip, activity)` — no char param to port. MasterworkDropsReceived → `player_meta`.
|
||||
|
||||
**Status (2026-05-09):** SHIPPED on `adv-2.0`.
|
||||
- `player_meta.masterwork_drops_received` column added via columnMigration in `internal/db/db.go`.
|
||||
- `checkMasterworkDrop` signature dropped its `char *AdventureCharacter` param. First-drop detection now reads via `loadMasterworkDrops(userID)`; counter writes go through `upsertPlayerMetaMasterworkDrops` and dual-write to `AdvCharacter.MasterworkDropsReceived` via `loadAdvCharacter` + `saveAdvCharacter` during soak.
|
||||
- `loadMasterworkDrops(userID)` reads `player_meta` → falls back to `adventure_characters.masterwork_drops_received` during soak (mirrors `loadHospitalVisits` shape).
|
||||
- `backfillPlayerMetaMasterworkDrops()` runs on every Init; idempotent (only fills rows whose `masterwork_drops_received` is still zero).
|
||||
- Note: `checkMasterworkDrop` itself is currently dead code (Phase R deprecated its only caller, the legacy daily-loop). The migration still ports the field so the column moves cleanly when future zone integration re-wires the drop hook.
|
||||
- Tests: `TestPlayerMetaMasterworkDropsBackfill_Idempotent`, `TestLoadMasterworkDrops_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaMasterworkDrops_RoundTrip`.
|
||||
- `go vet ./...` + `go test ./...` clean.
|
||||
- Exit criterion: `grep 'AdventureCharacter\|CombatLevel' internal/plugin/adventure_masterwork.go` is empty.
|
||||
|
||||
### 6.4 L4d — Pets
|
||||
- `adventure_pets.go`: pet fields move from AdvCharacter to `player_meta` (see §2.1 `pet_*` columns). Pet combat hooks (PetMorningDefense, pet damage rolls) target DnDCharacter HP.
|
||||
|
||||
**Status (2026-05-09):** SHIPPED on `adv-2.0` (column + dual-write only; reader flip deferred — see note).
|
||||
- `player_meta` gains `pet_type`, `pet_name`, `pet_xp`, `pet_level`, `pet_armor_tier`, `pet_flags_json`, `pet_supply_shop_unlocked`, `pet_level_10_date` via columnMigration in `internal/db/db.go`. The four flags (arrived, chased_away, reactivated, morning_defense) serialize as a single JSON column to avoid a four-bool ALTER train on each future flag addition.
|
||||
- New helpers in `player_meta.go`: `PetState` struct, `upsertPlayerMetaPetState(userID, PetState)`, `loadPetState(userID)` (player_meta canonical, falls back to AdvCharacter when `pet_type` is empty), `backfillPlayerMetaPetState()` (idempotent — copies rows whose player_meta `pet_type` is still default empty), and `petStateFromAdvChar(*AdventureCharacter)` for the dual-write projection.
|
||||
- Dual-writes wired at every pet mutation site: `resolvePetArrival` (chase), `resolvePetName` (adopt), `petMidnightCheck` (supply-shop unlock), `runBabysitDailyTrickle` save in scheduler, morning `PetMorningDefense` set, and `mistyReactivatePet` save in `adventure_npcs.go`.
|
||||
- `petGrantXP` (in `adventure_pets.go`) is currently dead code — only exercised by tests; once the legacy daily-loop XP path is rewired by Phase R/zone integration, that caller will need to add a dual-write at its save site.
|
||||
- Backfill: `backfillPlayerMetaPetState()` runs on every Init; idempotent (only fills rows whose `pet_type` is still empty).
|
||||
- Tests: `TestPlayerMetaPetStateBackfill_Idempotent`, `TestLoadPetState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaPetState_RoundTrip` in `player_meta_test.go`.
|
||||
- `go vet ./...` + `go test ./...` clean.
|
||||
- **Reader flip deferred.** The L4 exit criterion (`grep 'AdventureCharacter\|CombatLevel' adventure_pets.go` empty) is NOT met yet: `adventure_pets.go`'s helpers (`petGrantXP`, `petRollCombatActions`, `petRollDitchRecovery`, `petVictoryText`, `petDeathText`, `petShouldArrive`, `petMorningEvent`, `petCheckSupplyShopUnlock`, `mistyHousingHint`, `mistyReactivatePet`) still take `*AdventureCharacter` because they're called from many external files (`adventure_babysit.go`, `adventure_scheduler.go`, `adventure_npcs.go`, `combat_bridge.go`, `combat_stats.go`, `dnd_sheet.go`, `adventure_arena.go`, `adventure_character.go`). Flipping these signatures is a cross-file refactor that can land after the soak window — at which point the helpers can take `userID` (and call `loadPetState`) and the call sites drop their `*AdventureCharacter` access. The DB-level migration (this step) is the prerequisite that unblocks that refactor.
|
||||
|
||||
**Reader flip (cross-file signature port) SHIPPED 2026-05-09.** All ten pet helpers in `adventure_pets.go` now take `PetState` (or `*PetState` for the test-only mutator `petGrantXP`) instead of `*AdventureCharacter`. `mistyHousingHint` takes `(mistyEncounterCount, mistyDonatedCount int, house HouseState)` — Misty NPC counters still live on AdvCharacter pending a later NPC phase. `mistyReactivatePet` returns `bool` (caller flips both AdvCharacter and `PetState`). `PetState` gained a `HasPet()` method mirroring `AdventureCharacter.HasPet()`. Call sites updated: `adventure_scheduler.go` (load PetState alongside HouseState in morning loop), `adventure_npcs.go::resolveMisty` (load PetState before reactivation check; pass NPC counters by value to the housing hint), `combat_bridge.go::transitionDeath` (now takes `Pet PetState` in `DeathTransitionParams`; arena caller in `adventure_arena.go::resolveArenaDeath` loads it; bridge no longer touches the DB so unit tests don't need DB init), and `petMidnightCheck` (loads PetState per char). Tests in `adventure_pets_test.go` and `combat_bridge_test.go` ported to construct `PetState` literals directly. Exit criterion now holds: `grep 'AdventureCharacter\|CombatLevel' internal/plugin/adventure_pets.go` is empty. `go vet ./... && go test ./...` clean.
|
||||
|
||||
### 6.5 L4e — Housing & mortgage
|
||||
- `adventure_housing.go`, `adventure_mortgage.go`: HouseTier/loan fields → `player_meta`. `houseHPBonus` → applied to `DnDCharacter.HPMax` calculation (already a parallel hook in `dnd_sheet.go`'s `recomputeHPMax`).
|
||||
- Mortgage scheduler tick stays — only the field source changes.
|
||||
|
||||
**Status (2026-05-09):** SHIPPED on `adv-2.0` (column + dual-write only; reader flip deferred — see note).
|
||||
- `player_meta` gains `house_tier`, `house_loan_balance`, `house_loan_frozen`, `house_missed_payments`, `house_autopay`, `house_current_rate` via columnMigration in `internal/db/db.go`. Six columns (no JSON pack — bools and rate co-mutate with tier/balance at known sites).
|
||||
- New helpers in `player_meta.go`: `HouseState` struct + `HasHouse()`, `upsertPlayerMetaHouseState(userID, HouseState)`, `loadHouseState(userID)` (player_meta canonical when `tier > 0 || loan_balance > 0`, falls back to AdvCharacter otherwise), `backfillPlayerMetaHouseState()` (idempotent — only updates rows whose tier and loan_balance are both still zero), and `houseStateFromAdvChar(*AdventureCharacter)` for the dual-write projection.
|
||||
- Dual-writes wired at every house mutation site in `adventure_housing.go`: `handleThomBuy` (full purchase + loan purchase), `handleThomPayoff`, `handleThomPay` (extra payment), `handleThomAutopay`, the four `processMortgagePayments` save paths (paid-off, success, missed-payment-freeze, missed-payment), and `sendMortgageRateChangeDMs` rate refresh.
|
||||
- Backfill: `backfillPlayerMetaHouseState()` runs on every Init; idempotent (only fills rows whose `house_tier` and `house_loan_balance` are both still the default zero, and the legacy AdvCharacter row has either tier > 0 or loan > 0).
|
||||
- Tests: `TestPlayerMetaHouseStateBackfill_Idempotent`, `TestLoadHouseState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaHouseState_RoundTrip` in `player_meta_test.go` (skip without prod DB, matching the L4d pattern).
|
||||
- `go vet ./...` + `go test ./...` clean.
|
||||
- **Reader flip (read-only sites) SHIPPED 2026-05-09.** `dnd_rest.go` long-rest housing eligibility, `dnd_sheet.go` housing-tier display, and `adventure_pets.go::petShouldArrive`/`mistyHousingHint` now read via `loadHouseState(userID)` (fallback to AdvCharacter inside the helper). `petShouldArrive` and `mistyHousingHint` gained a `HouseState` parameter; callers in `adventure_scheduler.go` and `adventure_npcs.go` load it. `renderDnDSheet` gained a `HouseState` parameter; test callers in `dnd_subclass_test.go` pass `HouseState{}`. Tests in `adventure_pets_test.go` updated to pass `HouseState`. `go vet ./... && go test ./...` clean.
|
||||
- **Reader flip in `adventure_housing.go` itself still deferred.** Mutation paths (`handleThomBuy`, `handleThomPayoff`, `handleThomPay`, `handleThomAutopay`, `processMortgagePayments`, `sendMortgageRateChangeDMs`) read-then-write `char.House*` in place; flipping these is bundled with cutting the AdvCharacter writes (post-soak), not now.
|
||||
|
||||
### 6.6 L4f — TwinBee/render
|
||||
- `adventure_render.go`: morning DM reads from DnDCharacter + `player_meta`. Coop teaser gating moves to DnDCharacter.Level.
|
||||
- `adventure_twinbee.go`: simulator already addressed in L1. Remaining usage is read-only stat display — port to DnDCharacter.
|
||||
|
||||
**Status (2026-05-09):** SHIPPED on `adv-2.0` (full reader-port).
|
||||
- New helper `dndLevelForUser(userID)` in `dnd.go`: returns DnDCharacter.Level when present; falls back to `dndLevelFromCombatLevel(adventure_characters.combat_level)` via direct SQL so render code never names the AdventureCharacter type.
|
||||
- `adventure_render.go`: every render fn dropped its `*AdventureCharacter` param. Callers pass `userID id.UserID`; the renderer loads AdvCharacter internally (type-inferred local) when it needs skill/streak/babysit/crafts fields. CombatLevel display reads route through `dndLevelForUser`. Death-status DM cost now goes through `hospitalCostsForUser` directly. `renderAdvLeaderboard` switched to a new view-model `AdvLeaderboardEntry`. `AdvPlayerDaySummary.CombatLevel` renamed to `Level`. Crafting-teaser logic extracted into `craftingTeaserText` so the existing bracket-boundary test runs without a DB.
|
||||
- `adventure_twinbee.go`: `twinBeeMaxTier` and the gold-share weight loop now read D&D level via `dndLevelForUser` instead of `c.CombatLevel`.
|
||||
- Call sites updated in `adventure.go` (8), `adventure_scheduler.go` (5 — including `AdvPlayerDaySummary` populator), `adventure_arena.go` (2). `adventure_followups_test.go` ported to call `craftingTeaserText` directly.
|
||||
- `go vet ./... && go test ./...` clean. Grep-empty exit criterion below now holds for `adventure_render.go` and `adventure_twinbee.go`.
|
||||
|
||||
**Steps (per sub-phase):** column add → backfill → swap reads → swap writes → port tests → grep check.
|
||||
|
||||
**Exit criteria L4 overall:** `grep -l 'AdventureCharacter\|CombatLevel' internal/plugin/adventure_{hospital,rival,masterwork,pets,housing,mortgage,render,twinbee}.go` empty.
|
||||
|
||||
**Risk:** Each sub-phase is independent — can interleave with playtest. Housing has the most fields; do it last in L4 since the column count is largest.
|
||||
|
||||
---
|
||||
|
||||
## 7. Phase L5 — Teardown
|
||||
|
||||
**Goal:** Delete legacy types, files, and `combat_engine`. Branching dungeon paths become buildable.
|
||||
|
||||
**Pre-condition: DisplayName migration (L4f-prep, ~2026-05-09 note).** The plan as originally written never picked a new home for `AdventureCharacter.DisplayName`. It is *not* legacy-specific — it's the player's chosen identity, used in ~250 spots across arena, rival, scheduler, expedition, holdem, coop. L5's pre-condition `grep AdventureCharacter == 0` cannot pass while DisplayName still lives on AdvCharacter.
|
||||
|
||||
**Recommendation:** add `display_name TEXT NOT NULL DEFAULT ''` to `player_meta` as a self-contained step before L4f. Backfill from `adventure_character.display_name` (same shape as §8). Add a `loadDisplayName(userID)` helper that reads from `player_meta` and falls back to AdvCharacter for one soak week, then flip readers. Per-call-site swap is mechanical (`char.DisplayName` → `loadDisplayName(uid)` or pass-through from caller).
|
||||
|
||||
**Sizing:** ~0.5 day for the schema/backfill/helper, then 1 day to swap the ~250 read sites in batches per file. Slot it after L2 wraps and before L4f starts.
|
||||
|
||||
**Status (2026-05-09):** schema/backfill/helper SHIPPED on `adv-2.0`.
|
||||
- `player_meta.display_name` column added via column migration in `internal/db/db.go`.
|
||||
- `backfillPlayerMetaDisplayName` runs on every Init: idempotent (`UPDATE ... WHERE display_name = ''` only touches empty rows, so dual-writes layered on top survive re-runs).
|
||||
- `upsertPlayerMetaDisplayName(userID, name)` dual-writes from `createAdvCharacter` (inside the same tx, atomic with the AdvCharacter INSERT) and `saveAdvCharacter` (post-commit, error-logged but non-fatal).
|
||||
- `loadDisplayName(userID)` reads `player_meta` → falls back to `adventure_characters.display_name` → empty string if neither exists.
|
||||
- Tests: `TestPlayerMetaDisplayNameBackfill_Idempotent`, `TestLoadDisplayName_FallsBackToAdvCharacter`, `TestCreateAdvCharacter_DualWritesDisplayName`.
|
||||
|
||||
**Reader flip SHIPPED (2026-05-09).** All `char.DisplayName` / `c.DisplayName` reader sites in `internal/plugin/` were swapped to `loadDisplayName(userID)` (or pass-through equivalents) across: `combat_bridge.go`, `dnd_zone_cmd.go`, `dnd_expedition_combat.go`, `dnd_zone_combat.go`, `adventure_robbie.go`, `adventure_scheduler.go`, `adventure_hospital.go`, `adventure_events.go`, `adventure_render.go`, `adventure_masterwork.go`, `adventure.go`, `adventure_arena.go`. The only remaining `char.DisplayName` references are in `adventure_character.go` itself (scan into struct + `saveAdvCharacter` SQL + dual-write to `player_meta`) and the `player_meta.go` doc comment. `go vet` + `go test ./internal/plugin/...` clean.
|
||||
|
||||
**Pre-conditions:**
|
||||
- L1–L4 all shipped.
|
||||
- DisplayName migrated to `player_meta` (see above).
|
||||
- `grep -rn 'AdventureCharacter' internal/plugin/ --include='*.go' | grep -v adventure_character.go | grep -v _test.go` returns 0.
|
||||
- `grep -rn 'CombatLevel' internal/plugin/ --include='*.go'` returns 0 (or only in archive/migration code).
|
||||
|
||||
### 7.1 Audit baseline (2026-05-09)
|
||||
|
||||
Post-L4d-reader-flip greps:
|
||||
- `AdventureCharacter` outside `adventure_character.go` (excl tests): **56 hits across 15 files**.
|
||||
- `CombatLevel` (excl tests): **33 hits across 12 files**.
|
||||
|
||||
Five of those files vanish at teardown anyway (§7 deletes): `adventure_character.go`, `adventure_activities.go`, `combat_engine.go`, `combat_bridge.go`, `combat_stats.go` (+ tests). Their hits don't need pre-migration.
|
||||
|
||||
Remaining `CombatLevel` callsites all use the same fallback: `loadXxx(userID)` returns the player_meta value when populated, otherwise calls `dndLevelFromCombatLevel(adventure_characters.combat_level)`. To kill them we need a one-shot DnDCharacter mass-backfill so every active user has a D&D row, then drop the fallback branch.
|
||||
|
||||
### 7.2 AdvCharacter field inventory — what's still legacy-only
|
||||
|
||||
Already moved to `player_meta` (L1–L4f-prep): `DisplayName`, `ArenaWins`, `ArenaLosses`, `InvasionScore`, `HospitalVisits`, `RivalPool`, `RivalUnlockedNotified`, `MasterworkDropsReceived`, all `Pet*`, all `House*`.
|
||||
|
||||
Still on AdvCharacter (need migration before §7's grep-zero passes):
|
||||
|
||||
| Bucket | Fields | Primary readers |
|
||||
|---|---|---|
|
||||
| **Skills** | `CombatLevel`, `MiningSkill`, `ForagingSkill`, `FishingSkill`, `CombatXP`, `MiningXP`, `ForagingXP`, `FishingXP` | `dnd_sheet.go`, `adventure_babysit.go`, hospital/rival fallback, scheduler |
|
||||
| **Streak/lifecycle** | `CurrentStreak`, `BestStreak`, `LastActionDate`, `StreakDecayed`, `CreatedAt`, `LastActiveAt` | scheduler, render, babysit |
|
||||
| **Death state** | `Alive`, `DeadUntil`, `DeathReprieveLast`, `LastDeathDate`, `LastPardonUsed`, `GrudgeLocation`, `DeathSource`, `DeathLocation` | combat_bridge (deletes), arena, hospital |
|
||||
| **NPC counters/debuffs** | `MistyLastSeen`, `ArinaLastSeen`, `MistyBuffExpires`, `MistyDebuffExpires`, `ArinaBuffExpires`, `NPCMsgCount`, `NPCMsgCountDate`, `MistyRollTarget`, `ArinaRollTarget`, `MistyEncounterCount`, `MistyDonatedCount`, `ThomAnimalLineFired`, `RobbieVisitCount` | `adventure_npcs.go`, render |
|
||||
| **Babysit** | `BabysitActive`, `BabysitExpiresAt`, `BabysitSkillFocus`, `AutoBabysit`, `AutoBabysitFocus` | `adventure_babysit.go`, scheduler |
|
||||
| **Action state** | `ActionTakenToday`, `HolidayActionTaken`, `CombatActionsUsed`, `HarvestActionsUsed` | scheduler, render |
|
||||
| **Misc** | `Title`, `TreasuresLocked`, `CraftsSucceeded` | render, treasure-drop hook |
|
||||
|
||||
### 7.3 Sub-phase plan (L5a–L5h)
|
||||
|
||||
Each sub-phase is the same shape as L4a–L4e: column-add → backfill (idempotent, INSERT OR IGNORE / WHERE-default-only) → `loadXxxState(userID)` helper with AdvCharacter fallback → dual-write at every mutation site → one-week soak → reader flip → exit-grep check.
|
||||
|
||||
| Sub-phase | Bucket | Sizing | Notes |
|
||||
|---|---|---|---|
|
||||
| **L5a** | Skills (8 fields) | 1 day | `SkillState` struct mirroring `PetState`/`HouseState`. Mutation surface is small: `checkAdvLevelUp(char, skill)` + the few sites that bump `*XP` directly. Reader flip unblocks dnd_sheet's legacy display row and `babysitDailyCost`. CombatLevel rejoins this struct as a transitional column — dropped at teardown after the DnD mass-backfill. **Status (2026-05-09):** column + dual-write SHIPPED on `adv-2.0`. Eight `combat_*` / `mining_*` / `foraging_*` / `fishing_*` columns added via columnMigration. `SkillState` struct + `HasSkills()` / `loadSkillState` / `upsertPlayerMetaSkillState` / `backfillPlayerMetaSkillState` / `skillStateFromAdvChar` helpers in `player_meta.go`. Dual-writes wired at every mutation site: `adventure_consumables.go` (craft success + craft failure XP grant), `adventure_events.go` (event XP grant across combat/mining/foraging), `adventure_arena.go::resolveArenaDeath` + `arenaCompleteSession` (combat XP + level-up). Backfill `backfillPlayerMetaSkillState()` wired into Init, idempotent (only fills rows where every skill column is still zero AND the legacy row has at least one non-zero skill/XP). Tests: `TestPlayerMetaSkillStateBackfill_Idempotent`, `TestLoadSkillState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaSkillState_RoundTrip` in `player_meta_test.go`. `go vet ./... && go test ./...` clean. **Reader flip deferred** — bundled with cutting AdvCharacter writes (post-soak), per the L4e pattern. |
|
||||
| **L5b** | Babysit state (5 fields) | 0.5 day | Mutation surface is `runBabysitDailyTrickle` save in scheduler + the babysit toggle handlers. Tightly scoped. **Status (2026-05-09):** column + dual-write SHIPPED on `adv-2.0`. Five columns (`babysit_active`, `babysit_expires_at` DATETIME, `babysit_skill_focus`, `auto_babysit`, `auto_babysit_focus`) added via columnMigration. `BabysitState` + `IsActive()` + load/upsert/backfill/projection helpers in `player_meta.go`. Dual-writes wired at `handleBabysitStart`, `handleBabysitCancel`, `checkBabysitExpiry`. Backfill idempotent — only fills inactive rows whose legacy counterpart is active. AutoBabysit/AutoBabysitFocus + BabysitSkillFocus are dormant fields (no live mutation site) preserved for the schema migration. Tests: `TestPlayerMetaBabysitStateBackfill_Idempotent`, `TestLoadBabysitState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaBabysitState_RoundTrip`. `go vet ./... && go test ./...` clean. **Reader flip deferred** per L4e/L5a pattern. |
|
||||
| **L5c** | NPC counters/debuffs (~13 fields) | 1 day | "Later phase" referenced in L4d note. Pack the four `*Expires` and three `*LastSeen` timestamps as nullable columns; counters as ints. The roll-targets are write-once-per-encounter so dual-write is cheap. **Hidden discovery mechanic — never surface in player-facing output.** **Status (2026-05-09):** column + dual-write SHIPPED on `adv-2.0`. Thirteen columns added (5 nullable DATETIME for Misty/Arina last-seen + buff/debuff expiries, 1 int + 1 text for npc_msg counters, 2 ints for roll targets, 4 ints for encounter/donated/thom-fired/robbie counters). `NPCState` + `HasNPCActivity()` + load/upsert/backfill/projection helpers. Dual-writes wired at `processNPCEncounters` (msg-count save), `npcFireEncounter` (last-seen save), `resolveMisty` (insufficient balance, debit failure, buff/donated, declined-debuff), `resolveArina` (buff), `adventure_robbie.go` (visit count), `adventure_housing.go::handleThomGreet` (animal line fired). Backfill idempotent. Tests added. `go vet ./... && go test ./...` clean. **Reader flip deferred** per pattern. |
|
||||
| **L5d** | Streak + action state + lifecycle (10 fields) | 1 day | Action state mutates every action, so the dual-write hook is hot — ensure the upsert is in the same code path that already does `saveAdvCharacter`. **Status (2026-05-09):** column + dual-write SHIPPED on `adv-2.0`. Ten columns added (current_streak, best_streak, last_action_date, streak_decayed, action_taken_today, holiday_action_taken, combat_actions_used, harvest_actions_used, created_at, last_active_at). `LifecycleState` + `HasLifecycle()` + load/upsert/backfill/projection helpers. Mutation surface turned out to be tiny: only `rest` (adventure.go) sets ActionTakenToday — combat/harvest counts are dormant — plus the streak halve + streak update in scheduler, and the bulk daily reset. Dual-writes wired at all four sites; new `resetAllPlayerMetaDailyActions` parallels `resetAllAdvDailyActions`. `createAdvCharacter` now seeds `created_at` + `last_active_at` (CURRENT_TIMESTAMP) so player_meta rows are fully formed at creation. Backfill idempotent (only fills rows whose `created_at` is still NULL). Tests: `TestPlayerMetaLifecycleStateBackfill_Idempotent`, `TestLoadLifecycleState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaLifecycleState_RoundTrip`, `TestResetAllPlayerMetaDailyActions`. `go vet ./... && go test ./...` clean. **Reader flip deferred** per pattern. |
|
||||
| **L5e** | Death state (8 fields) | 1 day | Decision point: do `DnDCharacter.HPCurrent == 0` semantics replace `Alive`/`DeadUntil`, or do we keep them as `player_meta.alive` / `player_meta.dead_until`? Recommendation: keep them as columns. The hospital revive path (L4a) already restores `DnDCharacter.HPCurrent = HPMax` alongside `Alive=true`, so the two are kept in sync; flipping the readers is the migration, not the death-state semantics. **Status (2026-05-09):** column + dual-write SHIPPED on `adv-2.0`. Eight columns added (alive INTEGER DEFAULT 1, dead_until/death_reprieve_last/last_pardon_used DATETIME, last_death_date/grudge_location/death_source/death_location TEXT). `DeathState` + load/upsert/backfill/projection helpers. **Strategy switch:** dual-write moved inside `saveAdvCharacter` itself (after the existing display_name dual-write). The mutation surface for death state spans ~50 save sites — per-site upserts would be too noisy. Every `saveAdvCharacter` call now propagates `DeathState` to player_meta. Backfill idempotent (only fills rows where every death field is still default). Tests: `TestPlayerMetaDeathStateBackfill_Idempotent`, `TestLoadDeathState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaDeathState_RoundTrip`, `TestSaveAdvCharacter_DualWritesDeathState`. `go vet ./... && go test ./...` clean. |
|
||||
| **L5f** | Misc (`Title`, `TreasuresLocked`, `CraftsSucceeded`) | 0.5 day | Each is a single-mutation-site field. **Status (2026-05-09):** column + dual-write SHIPPED on `adv-2.0`. Three columns (title TEXT, treasures_locked INT, crafts_succeeded INT). `MiscState` + load/upsert/backfill/projection helpers. Dual-write rides `saveAdvCharacter` alongside L5e (Title is dormant; TreasuresLocked + CraftsSucceeded mutate at known sites that already save). Backfill idempotent. Tests: `TestPlayerMetaMiscStateBackfill_Idempotent`, `TestLoadMiscState_FallsBackToAdvCharacter`, `TestUpsertPlayerMetaMiscState_RoundTrip`. `go vet ./... && go test ./...` clean. |
|
||||
| **L5g** | DnDCharacter mass-backfill | 0.5 day | One-shot: for every active user without a D&D row, insert a default-class character at `dndLevelFromCombatLevel(adventure_characters.combat_level)`. Run once, idempotent (skip rows that already exist). After this lands, drop the `dndLevelFromCombatLevel` fallback branch in `loadHospitalVisits`/`rivalLevelForUser`/`dndLevelForUser`/zone gates. CombatLevel column in player_meta becomes unused at this point — drop it during the L5h cleanup. **Status (2026-05-09):** SHIPPED on `adv-2.0`. `backfillDnDCharactersFromAdv` in `dnd_combat.go` walks `adventure_characters LEFT JOIN dnd_character WHERE d.user_id IS NULL`, calls `autoBuildCharacter` (race/class inferred from archetypes; HP/AC computed; Level seeded from `dndLevelFromCombatLevel(CombatLevel)`), saves with `AutoMigrated=1`, `PendingSetup=0`. Idempotent — pre-existing rows (including pending-setup drafts) are skipped via the LEFT JOIN. Wired into Init after the L5f backfill. Fallbacks dropped: `dndLevelForUser` (dnd.go), `rivalLevelForUser` (adventure_rival.go), `hospitalCostsForUser` (adventure_hospital.go) — all now floor at level 1 when no D&D row exists. `dndLevelFromCombatLevel` itself is preserved (used by `autoBuildCharacter` for fresh-account level seeding and by `dndSetupConfirm`/preview/stub paths). Tests: `TestL5gBackfillDnDCharacters_Idempotent`, `TestL5gBackfillDnDCharacters_SkipsPendingSetup` in `dnd_l5g_test.go`. `go vet ./... && go test ./...` clean. |
|
||||
| **L5h** | L4e in-place housing reader flip + cut all AdvCharacter dual-writes | 1 day | Bundled per L4e note. Once writes stop, AdvCharacter rows go cold; dual-write removal is mechanical (delete `saveAdvCharacter` calls and the upserts that follow them in pairs). **Status (2026-05-09):** SHIPPED on `adv-2.0`. **Strategy switch:** rather than deleting 51 saveAdvCharacter call sites in pairs (which would need every site to also know about display_name/death/misc/skills/etc. internal mirrors), `saveAdvCharacter` itself was rewritten as a thin fan-out: `LastActiveAt = now()` + `upsertAllPlayerMetaFromAdvChar(char)`. The legacy `UPDATE adventure_characters` is gone — the row is now read-only after `createAdvCharacter` seeds it. `applyPlayerMetaOverlay(c)` runs at the tail of `loadAdvCharacter`, re-sourcing every migrated subsystem (display_name, hospital, arena, masterwork, rival, skills, babysit, NPC, lifecycle, death, misc, pet, house) from player_meta so callers continue to use `char.X` readers transparently. The L4e housing in-place reader flip is now automatic — `adventure_housing.go`'s `char.HouseFoo` reads see player_meta values via the overlay. `npcMidnightReset` extended to write player_meta alongside the (frozen) adventure_characters. Per-call-site `upsertPlayerMetaXxx` dual-writes are now redundant with `saveAdvCharacter`'s fan-out but retained as defense — cleanup deferred. **player_meta.combat_level deferred.** Still actively used by babysit cost / combat_stats / activities via the overlay (those sites will be cut in final teardown alongside `combat_engine.go`); column drop sequenced with that. `go vet ./... && go test ./...` clean. |
|
||||
|
||||
### 7.4 Final teardown (after L5a–L5h)
|
||||
|
||||
**Reconciled 2026-05-09.** The original deletion list was wrong. Two strategy switches during execution invalidated it:
|
||||
|
||||
1. **L5h preserved `AdventureCharacter` as a load-view struct.** Rather than delete 51 `saveAdvCharacter` call sites, L5h rewrote `saveAdvCharacter` as a fan-out into `player_meta` and added `applyPlayerMetaOverlay` at the tail of `loadAdvCharacter`. The struct is the in-memory shape every caller expects; only the *backing table* goes cold and eventually drops. `adventure_character.go` stays.
|
||||
2. **`combat_engine.go` / `combat_bridge.go` / `combat_stats.go` are not legacy.** A 2026-05-09 audit confirmed `SimulateCombat`, `CombatStats`, `CombatModifiers`, `Combatant`, `CombatPhase`, `CombatResult`, `CombatEvent`, `defaultCombatPhases`, `dungeonCombatPhases`, `DerivePlayerStats`, `DeriveDungeonMonsterStats`, `runDungeonCombat`, `transitionDeath`, `applyXPBonuses`, `combatDegradation`, etc. are referenced across 21+ files (arena, dungeons, zones, expedition, plus every D&D combat test). The D&D system layers *on top of* this engine via `applyDnDPlayerLayer` / `applyDnDEquipmentLayer` / `applyDnDArenaMonsterLayer` / `applyDnDDungeonMonsterLayer` — it was never a replacement. There is nothing to migrate; these files are shared infrastructure and stay.
|
||||
|
||||
**Revised teardown checklist:**
|
||||
|
||||
After L5a–L5h soak (one week post-cut-of-AdvCharacter-writes per §11):
|
||||
|
||||
1. **Three remaining `CombatLevel` reader fixes** — SHIPPED 2026-05-09 (see L5 close-out commits 978a621 / ece838e). Babysit cost reads `dndLevelForUser`, dnd_sheet legacy line removed, dnd_onboarding deleted entirely.
|
||||
2. **Loader rewire** — SHIPPED 2026-05-09. Without this step the table drop in #3 would break every login.
|
||||
- `loadAdvCharacter` (adventure_character.go:432) now `SELECT user_id FROM player_meta` + default-init struct + `applyPlayerMetaOverlay`. The giant 70-column SELECT against adventure_characters is gone.
|
||||
- `loadAllAdvCharacters` enumerates `player_meta` and applies the overlay per row.
|
||||
- `createAdvCharacter` (adventure_character.go:445) inserts `player_meta` only; the `INSERT INTO adventure_characters` line is removed.
|
||||
- `npcMidnightReset` and `resetAllAdvDailyActions` (now deleted) had their legacy UPDATEs cut; the player_meta versions are canonical.
|
||||
- `stats.go::loadAdvSnapshot` SELECT swapped to `player_meta`.
|
||||
- All `achievements.go` streak reads swapped to `player_meta`.
|
||||
- `loadArenaLeaderboard` LEFT JOIN swapped to `player_meta`.
|
||||
- Every `loadXxxState` helper in `player_meta.go` had its "fallback to adventure_characters during soak" branch deleted; player_meta is the single source of truth.
|
||||
- All `backfillPlayerMeta*` and `backfillDnDCharactersFromAdv` one-shots removed (already-completed migrations; their Init wiring is gone).
|
||||
- `db.go::snapshotPreDnD` gates on a `sqlite_master` lookup so it skips silently after the purge.
|
||||
3. **Purge script** — SHIPPED. `internal/plugin/cleanup_l5.go::purgeLegacyAdvCharacterTable` runs on every Init, gated on `GOGOBEE_LEGACY_PURGE=1`. Idempotent (`sqlite_master` existence check). Drops the `adventure_characters` table only; the `adventure_characters_pre_dnd` rollback snapshot is preserved (separate `GOGOBEE_PRE_DND_PURGE` pass when its 30-day grace window expires). The `CREATE TABLE adventure_characters` clause has been removed from the schema string and the columnMigrations runner now also tolerates `no such table: adventure_characters`, so the table won't be re-instated on next boot.
|
||||
4. **`player_meta.combat_level` column drop — STILL DEFERRED.** `combat_stats.go::DerivePlayerStats` (HP/Attack/Defense/Speed scaling) and `combat_stats.go::applyMistyHealAmt` and `adventure_activities.go::adv power calculations` all read `char.CombatLevel` via the player_meta overlay. Per §7.4's reconciliation, those files are shared infrastructure that stays — so `combat_level` continues to drive combat power scaling and is not safe to drop. Revisit only if/when D&D-derived stats subsume those formulas.
|
||||
5. Final `go vet ./... && go test ./...` — clean (2026-05-09).
|
||||
|
||||
**What stays:**
|
||||
- `adventure_character.go` — `AdventureCharacter` struct continues as the loaded-view shape; `loadAdvCharacter` SELECTs from the (now read-only) `adventure_characters` seed row and overlays `player_meta` / `dnd_character` state. A future cosmetic pass may rename it to drop the implication of being legacy, but that is *not* part of this migration. (Per `feedback_avoid_dnd_naming.md`, any rename must avoid "dnd"-prefixed names.)
|
||||
- `adventure_activities.go` — already gutted in L1; the file's residual stubs can stay or be sweep-deleted in a separate cleanup, not part of teardown.
|
||||
- `combat_engine.go`, `combat_bridge.go`, `combat_stats.go` (+ tests) — shared combat infrastructure.
|
||||
- `AdvLocation` tier data and `AdvBonusSummary` plumbing — both still consumed by the live combat path; not "legacy" in the L1–L5 sense.
|
||||
|
||||
**DB cleanup:**
|
||||
- `adventure_character` table: drop after a 30-day grace period in case of rollback. `dnd_l5_cleanup.go` migration script gated on `GOGOBEE_LEGACY_PURGE=1`. Default off; manual flip after confirming.
|
||||
- Equipment table stays — it was always per-user, never per-AdvCharacter.
|
||||
- `player_meta.combat_level` column drop sequenced with the three reader fixes above.
|
||||
|
||||
**Branching dungeon paths:** unblocked. The `dnd_zone_run` schema is the only one we still own; rebuild/expand it without AdvCharacter pressure. Out of scope for this doc — see `project_branching_paths_post_legacy.md` memory note.
|
||||
|
||||
---
|
||||
|
||||
## 8. Cross-cutting — DB backfills
|
||||
|
||||
Every phase that moves a field from `adventure_character` to `player_meta` runs the same shape of backfill:
|
||||
|
||||
```go
|
||||
// In Init() or a one-shot migration runner
|
||||
func backfillPlayerMeta(db *sql.DB) error {
|
||||
rows, _ := db.Query(`SELECT user_id, arena_wins, arena_losses, ... FROM adventure_character`)
|
||||
for rows.Next() {
|
||||
// INSERT OR IGNORE into player_meta
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Idempotency rules (per Phase R1's `archiveOrphanZoneRuns` precedent):**
|
||||
- All backfills use `INSERT OR IGNORE`.
|
||||
- All backfills are safe to re-run.
|
||||
- Each backfill logs the row count it touched.
|
||||
|
||||
**Order of backfills:**
|
||||
1. L1 — `babysit_*`, `auto_babysit*` columns.
|
||||
2. L2 — `arena_wins`, `arena_losses`, `invasion_score`.
|
||||
3. L3 — none (co-op didn't store on AdvCharacter).
|
||||
4. L4a — `hospital_visits`, `last_death_date`, `death_source`, `death_location`, `last_pardon_used`, `death_reprieve_last`.
|
||||
5. L4b — `rival_pool`, `rival_unlocked_notified`.
|
||||
6. L4c — `masterwork_drops_received`, `treasures_locked`.
|
||||
7. L4d — pet fields.
|
||||
8. L4e — house fields.
|
||||
9. L4f — streak/title/grudge fields, NPC msg counters, NPC seen/buff timestamps.
|
||||
10. L5 — drop `adventure_character` table.
|
||||
|
||||
---
|
||||
|
||||
## 9. Testing strategy
|
||||
|
||||
- Each phase ships with new tests for the migrated subsystem and a `*_migration_test.go` covering backfill idempotency (matching R1's pattern).
|
||||
- Existing tests are *ported*, not deleted — same test names, fixtures swap from AdvCharacter to DnDCharacter.
|
||||
- A new `legacy_residue_test.go` runs at the package level and `grep`s the source tree for forbidden symbols once each phase lands; this guards against regressions.
|
||||
|
||||
```go
|
||||
// legacy_residue_test.go skeleton
|
||||
func TestNoCombatLevelReferencesAfterL5(t *testing.T) {
|
||||
if !legacyMigrationDone { t.Skip() }
|
||||
// walk filepath, fail on grep "CombatLevel"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Sequence & rough sizing
|
||||
|
||||
| Phase | Est. session count | Blocking on |
|
||||
|---|---|---|
|
||||
| L1 — Babysit/scheduler | 1 | — |
|
||||
| L2 — Arena (boss flow rebuild) | 2–3 | feature flag in place; `renderBossOutcome` extraction lands first |
|
||||
| L3 — Co-op dungeons (DELETE) | 0.5 | — (independent of L2) |
|
||||
| L4a — Hospital | 0.5 | — |
|
||||
| L4b — Rival | 1 | — |
|
||||
| L4c — Masterwork | 0.5 | DnDCharacter skill fields exist (§2.2) |
|
||||
| L4d — Pets | 1 | `player_meta` schema |
|
||||
| L4e — Housing/mortgage | 1 | — |
|
||||
| L4f — TwinBee/render | 0.5 | L1–L4 done |
|
||||
| L5 — Teardown | 1 | all above + 30-day grace |
|
||||
|
||||
**Total:** ~10 sessions over ~3–6 weeks of real time, including playtest soak between phases. Don't compress this into a single sprint — each phase needs production exposure before the next one builds on it.
|
||||
|
||||
---
|
||||
|
||||
## 11. Rollback strategy
|
||||
|
||||
Each phase is reversible until L5:
|
||||
- L1–L4 do not delete columns or tables. They add `player_meta` columns and dual-read briefly during the swap.
|
||||
- If a phase regresses, revert the read-site swap; backfill data still flows back to `adventure_character` because L1–L4 do **not** stop writing to AdvCharacter until §6 dual-write is dropped per phase.
|
||||
|
||||
**Dual-write rule:** for the duration of L1–L4, every write to a migrated field goes to **both** AdvCharacter and `player_meta`. Reads come from `player_meta`. This is removed phase-by-phase only after one full real week with no rollback triggered.
|
||||
|
||||
L5 is the irreversible step. Gate on `GOGOBEE_LEGACY_PURGE=1`.
|
||||
|
||||
---
|
||||
|
||||
## 12. Decisions locked (2026-05-08)
|
||||
|
||||
All four pre-implementation questions answered:
|
||||
|
||||
1. **CombatLevel→Level:** direct copy. CombatLevel doesn't have semantic meaning — it's just "starting Level." No formula, no cap-compression.
|
||||
2. **AdvEquipment:** kept as-is. No rename. Type stays `AdvEquipment`, table stays `adventure_equipment`. (Naming guidance: avoid new `dnd_*` symbols throughout this migration — see §2.1 callout.)
|
||||
3. **CombatXP→XP:** discarded. Players start fresh; new XP accumulates from 0 at the floor of their migrated Level.
|
||||
4. **Co-op dungeons:** dropped entirely (see §5). Not migrated. Different design coming later.
|
||||
|
||||
No outstanding pre-implementation questions. Tuning questions during each phase (HP/AC tables, threshold brackets) get decided in the moment.
|
||||
|
||||
---
|
||||
|
||||
*End of Legacy Migration document.*
|
||||
*Pair with companion docs in Claude Code sessions when working any L-phase.*
|
||||
@@ -1,217 +0,0 @@
|
||||
# GogoBee — Pet System
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`, `gogobee_resource_combat_integration.md`
|
||||
> **Version:** 1.0
|
||||
|
||||
---
|
||||
|
||||
## 1. Overview
|
||||
|
||||
Pets are companions that provide passive bonuses, expedition benefits, and community flavor. Every player can own one pet at a time (expandable with housing upgrades). Pets are obtained from zones, Thom Krooke's shop, or special events.
|
||||
|
||||
Pets are not combat-active (no independent attack actions) unless the player is a **Ranger** — Rangers have a deep bond with their pet that unlocks active combat participation.
|
||||
|
||||
---
|
||||
|
||||
## 2. Pet Species
|
||||
|
||||
Each pet species is tied to one or more zones. Some are available at Thom Krooke's shop; others are expedition-exclusive drops.
|
||||
|
||||
### Tier 1 Pets (Common — Thom Krooke shop or Tier 1–2 zones)
|
||||
|
||||
| Pet | Species | Zone Origin | Passive Bonus | Ranger Bonus |
|
||||
|---|---|---|---|---|
|
||||
| **Pip** the Sparrow | Bird | Forest of Shadows | +5% XP from all sources | Scout: +2 Perception in outdoor zones |
|
||||
| **Grit** the Terrier | Dog | Goblin Warrens | +10% coin drops from enemies | Flush: once/combat, enemy loses Stealth |
|
||||
| **Marble** the Cat | Cat | Haunted Manor | +1 to Stealth checks | Pounce: +1d4 on first attack vs. surprised enemy |
|
||||
| **Flint** the Toad | Toad | Sunken Temple | Poison resistance (half damage) | Toxic Spit: on-hit chance to Poison enemy (CON DC 11) |
|
||||
| **Cinder** the Lizard | Lizard | Underforge | Fire resistance (half damage) | Heat Body: melee attackers take 1d4 fire |
|
||||
| **Dusk** the Bat | Bat | Crypt of Valdris | Darkvision (no darkness penalty) | Echolocate: enemy Stealth checks at disadvantage |
|
||||
|
||||
### Tier 2 Pets (Uncommon — Tier 3–4 zones or special shop)
|
||||
|
||||
| Pet | Species | Zone Origin | Passive Bonus | Ranger Bonus |
|
||||
|---|---|---|---|---|
|
||||
| **Vex** the Imp | Imp | Abyss Portal | +2 to INT checks | Diabolism: once/combat, impose disadvantage on one enemy save |
|
||||
| **Luma** the Will-o-Wisp | Wisp | Feywild Crossing | Immune to Frightened condition | Feylight: blind one enemy for 1 turn (WIS DC 14) |
|
||||
| **Kobb** the Kobold Scholar | Kobold | Dragon's Lair | +2 to all Arcana checks | Trap Sense: automatic Trap Detected result once per zone |
|
||||
| **Mire** the Shadow Cat | Shadow Cat | Underdark | Advantage on Stealth in darkness | Phase: pass through one trap without triggering (1/expedition) |
|
||||
| **Thorn** the Vine Sprite | Sprite | Forest of Shadows | +10% harvested material yield | Tangle: Restrain one enemy for 1 turn (STR DC 13) |
|
||||
| **Salt** the Crab | Giant Crab | Sunken Temple | Advantage on Athletics (grapple/shove) | Shell Shield: once/combat, grant +3 AC for 1 turn |
|
||||
|
||||
### Tier 3 Pets (Rare — Tier 5 zones or legendary drops)
|
||||
|
||||
| Pet | Species | Zone Origin | Passive Bonus | Ranger Bonus |
|
||||
|---|---|---|---|---|
|
||||
| **Ember** the Drake Hatchling | Drake | Dragon's Lair | +15% fire damage dealt | Breath: 2d6 fire in cone (DEX DC 13); 1/combat |
|
||||
| **Nyx** the Shadow | Shadow | Haunted Manor (boss) | Immune to necrotic damage | Life Drain: on-hit, steal 1d6 HP from enemy |
|
||||
| **Shard** the Crystal Elemental | Elemental | The Abyss Portal | Spell Save DC +1 | Prismatic Burst: on crit, random elemental damage +2d6 |
|
||||
| **Wilder** the Displacer Beast Cub | Displacer Beast | Forest of Shadows (rare) | First attack each combat has disadvantage vs. player | Phase Shift: once/combat, one missed attack becomes a miss regardless of roll |
|
||||
|
||||
### Legendary Pets (Unique — world drops, events only)
|
||||
|
||||
| Pet | Species | Origin | Passive Bonus | Ranger Bonus |
|
||||
|---|---|---|---|---|
|
||||
| **Blaze** the Phoenix Chick | Phoenix | Dragon's Lair boss (1% drop) | On player death: once per week, auto-stabilize instead of dying | Rebirth Flame: on death, deal 3d10 fire to all enemies in room |
|
||||
| **Echo** the Aboleth Spawn | Aboleth | Sunken Temple boss (0.5% drop) | +3 to all INT checks; telepathy flavor text unlocked | Mind Rend: once/combat, one enemy skips their turn (WIS DC 18) |
|
||||
|
||||
---
|
||||
|
||||
## 3. Pet Acquisition
|
||||
|
||||
### 3.1 Thom Krooke's Shop
|
||||
Tier 1 pets available for purchase at base cost:
|
||||
|
||||
| Pet Tier | Shop Cost |
|
||||
|---|---|
|
||||
| Tier 1 | 150 coins |
|
||||
|
||||
Thom Krooke rotates stock weekly — not all Tier 1 pets available simultaneously. Two–three available at any time.
|
||||
|
||||
### 3.2 Expedition Drops
|
||||
Pets drop from zone-specific enemies and boss encounters:
|
||||
|
||||
| Drop Type | Trigger | Drop Rate |
|
||||
|---|---|---|
|
||||
| Zone companion | Specific enemy killed in native zone | 3–8% |
|
||||
| Boss companion | Boss defeated | 10–20% for Tier 1–2; 5% for Tier 3 |
|
||||
| Legendary | Specific world conditions | 0.5–1% |
|
||||
|
||||
Drop flavor: TwinBee narrates the pet encounter, not a standard loot drop. The pet chooses you as much as you choose it.
|
||||
|
||||
### 3.3 Community Events
|
||||
Certain pets are only obtainable during seasonal or community milestone events. These are announced by Pete bot.
|
||||
|
||||
---
|
||||
|
||||
## 4. Pet Leveling
|
||||
|
||||
Pets gain XP alongside the player — a percentage of all earned XP is shared with the active pet.
|
||||
|
||||
| Player Level Range | Pet XP Share |
|
||||
|---|---|
|
||||
| 1–5 | 10% of player XP |
|
||||
| 6–10 | 8% of player XP |
|
||||
| 11–15 | 6% of player XP |
|
||||
| 16–20 | 5% of player XP |
|
||||
|
||||
### 4.1 Pet Level Thresholds
|
||||
|
||||
| Pet Level | XP Required | Benefit |
|
||||
|---|---|---|
|
||||
| 1 | 0 | Base passive bonus |
|
||||
| 2 | 200 | Passive bonus +25% |
|
||||
| 3 | 600 | Passive bonus +50%; Ranger bond ability improves |
|
||||
| 4 | 1,500 | Passive bonus +75%; new flavor text unlocked |
|
||||
| 5 | 3,000 | Passive bonus ×2; Ranger bond ability at full strength |
|
||||
|
||||
### 4.2 Pet Happiness
|
||||
|
||||
Pets have a **Happiness** score (0–100, default 60) that modifies their effectiveness:
|
||||
|
||||
| Happiness | Passive Bonus Modifier |
|
||||
|---|---|
|
||||
| 80–100 | +20% |
|
||||
| 50–79 | Normal |
|
||||
| 25–49 | -20% |
|
||||
| 0–24 | Passive disabled; pet is sulking |
|
||||
|
||||
**Happiness modifiers:**
|
||||
|
||||
| Event | Change |
|
||||
|---|---|
|
||||
| Fed daily (Pastel or manual) | +5 |
|
||||
| Expedition completed | +10 |
|
||||
| Player death | -10 |
|
||||
| Player offline > 3 days without Pastel | -15/day |
|
||||
| Pastel hired (active) | Happiness maintained at current level (no decay) |
|
||||
| Rare item found (player excited) | +3 |
|
||||
| Long rest at home | +8 |
|
||||
|
||||
**Feeding command:** `!pet feed` — costs 2 coins/day (Pastel handles this automatically if hired).
|
||||
|
||||
---
|
||||
|
||||
## 5. Ranger Pet Bond
|
||||
|
||||
Rangers have a unique **Pet Bond** that upgrades with Ranger level and pet level. The bond activates the Ranger Bonus column from Section 2.
|
||||
|
||||
### 5.1 Bond Tiers
|
||||
|
||||
| Tier | Requirement | Effect |
|
||||
|---|---|---|
|
||||
| **Bonded** | Ranger + any pet | Ranger Bonus active; pet participates in combat (flavor) |
|
||||
| **Trusted** | Ranger Lv5 + Pet Lv2 | Ranger Bonus improves (see each pet); pet Happiness decay halved |
|
||||
| **Linked** | Ranger Lv10 + Pet Lv4 | Pet gains a second ability (see Section 5.2); pet XP share increases to 15% |
|
||||
| **Fused** | Ranger Lv15 + Pet Lv5 | Once/long rest: pet ability recharges mid-combat |
|
||||
|
||||
### 5.2 Pet Second Abilities (Linked Bond)
|
||||
|
||||
| Pet | Second Ability |
|
||||
|---|---|
|
||||
| Pip the Sparrow | Alarm: warns of wandering monsters before they attack (no surprise round) |
|
||||
| Grit the Terrier | Fetch: retrieve one dropped item per combat without using an action |
|
||||
| Marble the Cat | Distract: enemy loses Reaction for 1 turn |
|
||||
| Vex the Imp | Curse: target has -2 to saves for 2 turns |
|
||||
| Ember the Drake | Wing Buffet: AoE knockback (DEX DC 14 or Prone) |
|
||||
| Nyx the Shadow | Merge: Ranger becomes Invisible for 1 turn (once/combat) |
|
||||
|
||||
---
|
||||
|
||||
## 6. Pet Housing
|
||||
|
||||
Pets require housing space. Base housing supports **one pet**. Additional pets (future multi-pet system) require:
|
||||
|
||||
- **Cottage+:** supports 2 pets
|
||||
- **House+:** supports 3 pets
|
||||
- **Manor+:** supports 5 pets
|
||||
|
||||
Without adequate housing, a second pet cannot be adopted until the first is released or housing is upgraded.
|
||||
|
||||
---
|
||||
|
||||
## 7. Pet Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!pet` | Show current pet status, level, happiness, bonuses |
|
||||
| `!pet adopt <name>` | Adopt a pet from expedition drop (confirmation required) |
|
||||
| `!pet buy` | Open Thom Krooke pet shop |
|
||||
| `!pet feed` | Feed pet (+happiness; 2 coins) |
|
||||
| `!pet name <name>` | Rename your pet |
|
||||
| `!pet release` | Release pet (cannot be undone; XP lost) |
|
||||
| `!pet bond` | Show Ranger bond tier and requirements |
|
||||
|
||||
---
|
||||
|
||||
## 8. Go Data Structures
|
||||
|
||||
```go
|
||||
type PlayerPet struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
PetID string `json:"pet_id"` // species ID
|
||||
Name string `json:"name"` // player-given name
|
||||
Level int `json:"level"` // 1–5
|
||||
XP int `json:"xp"`
|
||||
Happiness int `json:"happiness"` // 0–100
|
||||
BondTier string `json:"bond_tier"` // bonded, trusted, linked, fused
|
||||
AdoptedAt time.Time `json:"adopted_at"`
|
||||
LastFed time.Time `json:"last_fed"`
|
||||
}
|
||||
|
||||
type PetSpecies struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Species string `json:"species"`
|
||||
Tier int `json:"tier"` // 1, 2, 3, legendary
|
||||
ZoneOrigin string `json:"zone_origin"`
|
||||
PassiveBonus string `json:"passive_bonus"` // description
|
||||
RangerBonus string `json:"ranger_bonus"` // description
|
||||
ShopAvailable bool `json:"shop_available"`
|
||||
ShopCost int `json:"shop_cost"`
|
||||
DropRate float32 `json:"drop_rate"`
|
||||
FlavorRef string `json:"flavor_ref"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
*End of Pet System.*
|
||||
@@ -1,456 +0,0 @@
|
||||
# GogoBee — Remaining Systems Specification
|
||||
> Covers: Skill Proficiency · Arena Integration · Misty & Arina · Pete Bot · Economy Balance · Crafting Recipes · Quest System
|
||||
> **Version:** 1.0
|
||||
|
||||
---
|
||||
|
||||
# Part 1: Skill Proficiency System
|
||||
|
||||
## 1.1 Proficiency Bonus by Level
|
||||
|
||||
```
|
||||
Level 1–4: +2
|
||||
Level 5–8: +3
|
||||
Level 9–12: +4
|
||||
Level 13–16: +5
|
||||
Level 17–20: +6
|
||||
```
|
||||
|
||||
## 1.2 Class Skill Proficiencies
|
||||
|
||||
Each class is proficient in a fixed set of skills. Proficiency adds the proficiency bonus to skill checks using that stat.
|
||||
|
||||
| Class | Proficient Skills (choose N from list at creation) |
|
||||
|---|---|
|
||||
| Fighter | Choose 2 from: Athletics, Acrobatics, Animal Handling, History, Insight, Intimidation, Perception, Survival |
|
||||
| Rogue | Choose 4 from: Acrobatics, Athletics, Deception, Insight, Intimidation, Investigation, Perception, Performance, Persuasion, Sleight of Hand, Stealth |
|
||||
| Mage | Choose 2 from: Arcana, History, Insight, Investigation, Medicine, Religion |
|
||||
| Cleric | Choose 2 from: History, Insight, Medicine, Persuasion, Religion |
|
||||
| Ranger | Choose 3 from: Animal Handling, Athletics, Insight, Investigation, Nature, Perception, Stealth, Survival |
|
||||
|
||||
## 1.3 Race Bonus Proficiencies
|
||||
|
||||
| Race | Bonus |
|
||||
|---|---|
|
||||
| Human | +1 skill of choice |
|
||||
| Half-Elf | +2 skills of choice |
|
||||
| All others | No bonus skill proficiency |
|
||||
|
||||
## 1.4 Expertise
|
||||
|
||||
At Level 6, Rogues choose 2 skills they are proficient in and gain **Expertise** — double proficiency bonus on those skills.
|
||||
|
||||
At Level 10, Rangers choose 1 skill for Expertise.
|
||||
|
||||
## 1.5 Skill → Stat Map (Full)
|
||||
|
||||
| Skill | Stat | Harvest Action | Notes |
|
||||
|---|---|---|---|
|
||||
| Athletics | STR | `!mine` (partial) | Climbing, grappling, forced entry |
|
||||
| Acrobatics | DEX | — | Avoiding traps, balance |
|
||||
| Sleight of Hand | DEX | `!fish` (partial) | Pickpocket, item manipulation |
|
||||
| Stealth | DEX | `!hide` | Avoid detection; -Threat Clock |
|
||||
| Arcana | INT | `!essence` (partial) | Identify magic, lore checks |
|
||||
| History | INT | — | Zone lore, ancient knowledge |
|
||||
| Investigation | INT | `!scavenge` (partial) | Find hidden items, trap disarm |
|
||||
| Nature | WIS | `!forage` (partial) | Zone knowledge, plant ID |
|
||||
| Perception | WIS | `!search` | Spot traps, enemies, hidden doors |
|
||||
| Insight | WIS | NPC interactions | Detect lies, hidden motives |
|
||||
| Survival | WIS | `!forage` (primary) | Track, navigate, forage |
|
||||
| Animal Handling | WIS | Pet interactions | Pet happiness checks |
|
||||
| Medicine | WIS | Stabilize (future party) | Death save assist |
|
||||
| Religion | WIS/INT | Cleric lore | Undead/divine lore bonus |
|
||||
| Intimidation | CHA | Combat morale | Enemy morale checks |
|
||||
| Persuasion | CHA | Thom Krooke discount | NPC favor, pricing |
|
||||
| Deception | CHA | NPC bypass | Disguise, misdirection |
|
||||
| Performance | CHA | Community events | Flavor; morale effects |
|
||||
|
||||
## 1.6 Go Data Model
|
||||
|
||||
```go
|
||||
type SkillProficiencies struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Proficient []string `json:"proficient"` // skill IDs
|
||||
Expertise []string `json:"expertise"` // subset of proficient
|
||||
}
|
||||
|
||||
func SkillBonus(skill string, stats BaseStats, prof SkillProficiencies, profBonus int) int {
|
||||
base := statModifier(statForSkill(skill), stats)
|
||||
if contains(prof.Expertise, skill) {
|
||||
return base + (profBonus * 2)
|
||||
}
|
||||
if contains(prof.Proficient, skill) {
|
||||
return base + profBonus
|
||||
}
|
||||
return base
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Part 2: Arena System — D&D Integration
|
||||
|
||||
## 2.1 Overview
|
||||
|
||||
The Arena is a standalone PvP-adjacent system preserved from the original GogoBee. It now uses full D&D combat resolution. Two players (or a player vs. a scaled AI opponent) face off in a best-of-one encounter.
|
||||
|
||||
Arena is **not** an expedition. It happens outside zones. No supplies consumed. No Threat Clock. Hospital rules apply on death.
|
||||
|
||||
## 2.2 Arena Combat Rules
|
||||
|
||||
- Full D&D action economy applies (Action, Bonus, Reaction, Movement)
|
||||
- Both combatants start at full HP with all resources restored
|
||||
- Spell slots, Rage uses, and Superiority Dice reset at arena start
|
||||
- No loot drops — streak rewards replace loot
|
||||
- No Concentration spells that last beyond the fight (no Hunters Mark persisting round-to-round against a different target — this is a single encounter)
|
||||
- Banned: Raise Dead, Animate Dead, Polymorph (too disruptive in PvP)
|
||||
|
||||
## 2.3 Streak System
|
||||
|
||||
Winning consecutive arena matches builds a streak. Streak resets on any loss or player death.
|
||||
|
||||
| Streak | Reward |
|
||||
|---|---|
|
||||
| 3 | +25 coins |
|
||||
| 5 | +60 coins + Uncommon loot roll |
|
||||
| 7 | +120 coins + Rare loot roll |
|
||||
| 10 | +250 coins + title: "Streak Warrior" |
|
||||
| 15 | +500 coins + Epic loot roll + title: "Arena Champion" |
|
||||
| 20 | +1,000 coins + Legendary loot roll + title: "The Unbroken" |
|
||||
| 25+ | +1,500 coins/win + Legendary loot roll; TwinBee makes a speech |
|
||||
|
||||
## 2.4 Matchmaking
|
||||
|
||||
- Prefer within 3 levels of player
|
||||
- If no match available: AI opponent at player's level (named, with personality — see 2.5)
|
||||
- Players can challenge specific users: `!arena challenge @player`
|
||||
|
||||
## 2.5 Named AI Arena Opponents
|
||||
|
||||
When no human opponent is available, TwinBee deploys a named AI fighter:
|
||||
|
||||
| Name | Class/Subclass | Level | Personality |
|
||||
|---|---|---|---|
|
||||
| **Vance the Unimpressed** | Fighter/Champion | Scales ±2 | Bored. Has seen everything. Still wins. |
|
||||
| **Sparrow** | Rogue/Thief | Scales ±2 | Fast, chatty, apologizes when she hits you. |
|
||||
| **The Unmarked** | Mage/Abjuration | Scales ±2 | Says nothing. Blocks everything. Eventually wins. |
|
||||
| **Brother Aldric** | Cleric/War | Scales ±2 | Cheerful. Heals himself constantly. Annoyingly patient. |
|
||||
| **Fenn** | Ranger/Gloom Stalker | Scales ±2 | You won't see him until it's too late. |
|
||||
|
||||
## 2.6 Arena Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!arena` | Enter the arena queue |
|
||||
| `!arena challenge @player` | Challenge a specific player |
|
||||
| `!arena streak` | Check current streak and rewards |
|
||||
| `!arena leaderboard` | Top 10 streaks in TwinBee community |
|
||||
| `!arena history` | Last 5 arena results |
|
||||
|
||||
---
|
||||
|
||||
# Part 3: Misty & Arina — Full NPC Specs
|
||||
|
||||
## 3.1 Misty
|
||||
|
||||
**Full name:** Misty
|
||||
**Reference:** Pokémon Gym Leader parody — the one who always seemed like she was about to challenge you even when she was being helpful.
|
||||
**Role:** Quest-giver, Insight specialist, aquatic zone liaison
|
||||
**Location:** Sunken Temple (primary), occasionally the docks near Thom Krooke's shop
|
||||
|
||||
**Personality:** Confident, competitive, secretly warm. Misty has done everything you're attempting and done it faster and she will absolutely tell you so. But she'll also give you the information you need, because she respects effort even when she doesn't show it. Her advice is blunt and accurate.
|
||||
|
||||
**Voice:** Direct, slightly impatient, occasional dry pride. Never cruel. *"You're going into the Sunken Temple? Fine. Try not to drown immediately."*
|
||||
|
||||
**Skill Interactions:**
|
||||
- Persuasion DC 12 → Misty provides a map of the current Sunken Temple room layout (reduces Perception DC by 2 for one run)
|
||||
- Insight DC 14 → Misty reveals a hidden quest node in the Sunken Temple
|
||||
- Intimidation DC 16 → Misty gives you a discount on aquatic fishing gear (Thom Krooke liaison)
|
||||
|
||||
**Quest Hooks:**
|
||||
1. *The Coral Throne* — Collect 5 Deep Coral from the Sunken Temple within one expedition. Reward: Uncommon aquatic weapon + 200 XP.
|
||||
2. *Harpooned* — Defeat 3 Merrow in a single expedition day. Reward: Merrow Harpoon item + 150 XP.
|
||||
3. *The Lanternfish* — Catch a Dar'eth Lanternfish. Reward: Rare crafting component + 300 XP.
|
||||
4. *Tidal Timing* — Reach the Boss room before the Day 6 Tidal Event fires. Reward: Tidal Crystal (guaranteed) + 400 XP + Misty's begrudging respect (CHA +1 in her presence permanently).
|
||||
|
||||
**Go Struct:**
|
||||
```go
|
||||
type NPCMisty struct {
|
||||
PlayerRelation map[string]int `json:"player_relation"` // playerID → relationship score
|
||||
QuestsGiven map[string][]string `json:"quests_given"` // playerID → quest IDs
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3.2 Arina
|
||||
|
||||
**Full name:** Arina
|
||||
**Reference:** Arina from Twinkle Star Sprites (1996 SNK shooter) — a young witch who fights with stars and magic. High energy, genuinely enthusiastic about magical things.
|
||||
**Role:** Crafting specialist, Arcana quest-giver, magic item identifier
|
||||
**Location:** The Workshop district near Thom Krooke; also appears in Feywild and Underforge zones
|
||||
|
||||
**Personality:** Genuinely excited about magic, slightly chaotic, deeply knowledgeable underneath the enthusiasm. Arina identifies magic items for free if you pass her Arcana check — she just wants to *look at it*. She keeps notes on everything and her notes are brilliant and unorganized.
|
||||
|
||||
**Voice:** Fast, warm, enthusiastic. Sometimes trails off into a tangent. Always lands back on the useful thing. *"Oh that's — wait, is that a Flame Tongue? Can I — I won't touch it, I just want to — okay I touched it a little. It's a +1 Flame Tongue, here's how the attunement works, also the previous owner probably had fire resistance built up, you should track that."*
|
||||
|
||||
**Skill Interactions:**
|
||||
- Arcana DC 12 → Arina identifies any magic item for free (normally costs 50 coins at Thom Krooke)
|
||||
- Investigation DC 14 → Arina reveals a crafting recipe the player doesn't have yet
|
||||
- Persuasion DC 15 → Arina provides spell component materials at 30% discount
|
||||
|
||||
**Quest Hooks:**
|
||||
1. *Essence Collection* — Harvest 3 units of Fire Essence from the Underforge. Reward: Arina crafts a Potion of Fire Resistance for free + 200 XP.
|
||||
2. *Fey Study* — Return from the Feywild Crossing with Timelock Amber. Reward: Arina teaches a crafting recipe (player's choice from her list) + 250 XP.
|
||||
3. *The Grand Experiment* — Bring Arina one material from each of 5 different zones. Reward: Arina crafts a unique item scaled to player level + 500 XP + permanent "Arina's Favorite" status (Arcana checks in her presence always succeed).
|
||||
4. *Void Specimen* — Return from the Abyss Portal with Void Essence. Reward: Legendary crafting anchor + 600 XP + Arina is genuinely speechless for one full message, which she immediately recovers from.
|
||||
|
||||
---
|
||||
|
||||
# Part 4: Pete Bot
|
||||
|
||||
## 4.1 Overview
|
||||
|
||||
Pete is a sibling Matrix bot that posts community announcements, expedition updates, and game news to the TwinBee room. Pete is distinct from GogoBee — GogoBee handles player interactions; Pete handles broadcast.
|
||||
|
||||
Pete is named after Pete (from Pete's Dragon? No — Pete is just Pete. A reliable, solid name for a reliable, solid bot).
|
||||
|
||||
## 4.2 Pete's Trigger Events
|
||||
|
||||
| Event | Pete Posts |
|
||||
|---|---|
|
||||
| New zone unlocked (community milestone) | Zone announcement with flavor description |
|
||||
| Player completes a Tier 5 zone | Public callout with player name + brief TwinBee summary |
|
||||
| Streak milestone hit (10+) | Streak announcement |
|
||||
| ARM rate change >0.5% | Mortgage rate update (Thom Krooke voice) |
|
||||
| Server maintenance | Brief downtime notice |
|
||||
| Expedition Day 7+ | Daily expedition bulletin (anonymized or opted-in) |
|
||||
| Seasonal event start/end | Event announcement |
|
||||
| Game update / patch | Changelog post |
|
||||
| Community milestone (activity threshold) | TwinBee mood boost announcement |
|
||||
|
||||
## 4.3 Pete's Voice
|
||||
|
||||
Pete does not have TwinBee's drama or Thom Krooke's salesmanship. Pete is a professional. Pete posts what happened, when it happened, and what it means for you. Occasionally dry. Never excessive.
|
||||
|
||||
> *📣 Pete: Riesz has completed the Dragon's Lair on Day 18. Infernax is defeated. The mountain is, temporarily, quiet. Legendary loot confirmed.*
|
||||
|
||||
> *📣 Pete: ARM rate update — 7.4% this week. Effective mortgage rate: 9.4%. Payments process Sunday. Thom Krooke sends his regards and a reminder that refinancing is available.*
|
||||
|
||||
> *📣 Pete: TwinBee's mood is elevated this week following strong community activity. Dungeon events have been upgraded accordingly. Go while it lasts.*
|
||||
|
||||
## 4.4 Pete Bot Spec
|
||||
|
||||
```go
|
||||
type PetePost struct {
|
||||
ID string `json:"id"`
|
||||
TriggerType string `json:"trigger_type"`
|
||||
Content string `json:"content"`
|
||||
RoomID string `json:"room_id"`
|
||||
PostedAt time.Time `json:"posted_at"`
|
||||
PlayerID string `json:"player_id,omitempty"` // if player-specific
|
||||
}
|
||||
|
||||
// Pete trigger types
|
||||
const (
|
||||
PeteTriggerZoneUnlock = "zone_unlock"
|
||||
PeteTriggerTier5Complete = "tier5_complete"
|
||||
PeteTriggerStreakMilestone = "streak_milestone"
|
||||
PeteTriggerMortgageRate = "mortgage_rate"
|
||||
PeteTriggerMaintenance = "maintenance"
|
||||
PeteTriggerExpeditionDay7 = "expedition_day7"
|
||||
PeteTriggerSeasonalEvent = "seasonal_event"
|
||||
PeteTriggerPatchNotes = "patch_notes"
|
||||
PeteTriggerCommunityBoost = "community_boost"
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Part 5: Economy Balance
|
||||
|
||||
## 5.1 Coin Sources (Daily Average by Level Range)
|
||||
|
||||
| Level | Source | Estimated Daily |
|
||||
|---|---|---|
|
||||
| 1–5 | Combat loot (Tier 1 zones) | 30–60 coins |
|
||||
| 1–5 | Passive income (rented room) | 0 |
|
||||
| 1–5 | Selling resources | 20–40 coins |
|
||||
| 6–10 | Combat loot (Tier 2–3 zones) | 80–150 coins |
|
||||
| 6–10 | Passive income (cottage) | 5 coins |
|
||||
| 6–10 | Arena streak rewards | 10–30 coins/day average |
|
||||
| 11–15 | Combat loot (Tier 4 zones) | 200–400 coins |
|
||||
| 11–15 | Passive income (house) | 15 coins |
|
||||
| 11–15 | Quest rewards | 50–150 coins |
|
||||
| 16–20 | Combat loot (Tier 5 zones) | 500–1,500 coins |
|
||||
| 16–20 | Passive income (manor+) | 40–100 coins |
|
||||
| 16–20 | Legendary resource sales | 1,000–5,000 coins (rare) |
|
||||
|
||||
## 5.2 Coin Sinks (Weekly Average by Level Range)
|
||||
|
||||
| Level | Sink | Estimated Weekly |
|
||||
|---|---|---|
|
||||
| 1–5 | Rent | 15–40 coins |
|
||||
| 1–5 | Supplies (Tier 1 expedition) | 50–100 coins |
|
||||
| 1–5 | Hospital (if death) | 20–50 coins |
|
||||
| 6–10 | Mortgage payment | ~25 coins |
|
||||
| 6–10 | Supplies (Tier 2–3 expedition) | 120–250 coins |
|
||||
| 6–10 | Property upgrades (amortized) | ~50 coins |
|
||||
| 6–10 | Pastel (if hired) | 70 coins (L3 rate × 7) |
|
||||
| 11–15 | Supplies (Tier 4 expedition) | 400–700 coins |
|
||||
| 11–15 | Hospital (if death) | 250–400 coins |
|
||||
| 16–20 | Supplies (Tier 5 expedition) | 800–1,500 coins |
|
||||
| 16–20 | Hospital (if death) | 600–900 coins |
|
||||
|
||||
## 5.3 Balance Notes
|
||||
|
||||
**Early game (1–5):** Tight but survivable. Rent is the primary pressure. Players who die repeatedly will struggle. This is intentional — early mistakes have costs, but they're recoverable.
|
||||
|
||||
**Mid game (6–10):** Mortgage replaces rent. Passive income offsets slightly. The player is self-sustaining if playing actively. Pastel is a luxury, not a necessity.
|
||||
|
||||
**Late game (11–20):** Economy inverts. Players are coin-positive even with heavy expedition spending. The hospital costs become the primary risk at this tier. Legendary resource sales can be boom events.
|
||||
|
||||
**Soft caps:** No coin cap. No coin decay. Excess coins are stored. The estate's 100 coins/day passive is significant at high levels but doesn't break the economy — Tier 5 expedition supply costs alone consume it.
|
||||
|
||||
**Exploit check:** Passive income + no-expedition play cannot infinitely accumulate beyond ~700 coins/day at max property. This is below the cost of a single Tier 5 expedition supply kit. Players must engage with content to afford content.
|
||||
|
||||
---
|
||||
|
||||
# Part 6: Crafting Recipes
|
||||
|
||||
## 6.1 Basic Recipes (Thom Krooke shop, available from start)
|
||||
|
||||
| Recipe | Materials | Output | Cost (labor) |
|
||||
|---|---|---|---|
|
||||
| Healing Potion | Shadow Herb ×2 | Potion of Healing (2d4+2 HP) | 10 coins |
|
||||
| Antitoxin | Shadow Herb ×1 + Grave Soil ×1 | Antitoxin (advantage vs. poison, 3 combats) | 15 coins |
|
||||
| Torch Bundle | Volcanic Glass ×1 + Scrap Iron ×1 | 5 torches (removes darkness penalty) | 5 coins |
|
||||
| Basic Arrow Bundle | Darkwood ×1 | 20 Arrows | 3 coins |
|
||||
| Rope (50 ft) | Beast Pelt ×1 | Hemp Rope | 8 coins |
|
||||
|
||||
## 6.2 Intermediate Recipes (Requires Workshop upgrade)
|
||||
|
||||
| Recipe | Materials | Output | Cost (labor) |
|
||||
|---|---|---|---|
|
||||
| Greater Healing Potion | Shadow Herb ×3 + Corrupted Fey Bloom ×1 | Potion of Greater Healing (4d4+4 HP) | 25 coins |
|
||||
| Potion of Fire Resistance | Salamander Oil ×1 + Fire Essence ×2 | Resist fire damage (1 combat) | 40 coins |
|
||||
| Undead Ward Charm | Silver Grave Dust ×1 + Wraith Core ×1 | Amulet: +2 saves vs. undead | 60 coins |
|
||||
| Shadow Step Cloak | Ghost Silk ×3 + Shadow Essence ×1 | Light armor: Stealth advantage 1/day | 80 coins |
|
||||
| Drow Poison Blade Coating | Drow Poison ×1 | Weapon: sleep-on-crit for 3 combats | 35 coins |
|
||||
| Mithral Dagger | Mithral Trace ×1 + Scrap Iron ×3 | Mithral Dagger (light armor prof bypass) | 120 coins |
|
||||
| Feywild Focus | Fey Dust ×2 + Timelock Amber ×1 | Arcane Focus: +1 to Spell Save DC | 100 coins |
|
||||
| Drake Scale Armor | Dragon Scale Fragment ×4 + Iron Ore ×3 | Scale Mail +1 | 150 coins |
|
||||
|
||||
## 6.3 Advanced Recipes (Requires Forge upgrade + Arina's recipes)
|
||||
|
||||
| Recipe | Materials | Output | Cost (labor) |
|
||||
|---|---|---|---|
|
||||
| Superior Healing Potion | Dryad's Tears ×1 + Shadow Herb ×4 + Fey Dust ×1 | Superior Healing (8d4+8 HP) | 100 coins |
|
||||
| Aboleth Lens | Aboleth Mucus ×2 + Black Pearl ×2 | Helm: Telepathy; +2 INT | 200 coins |
|
||||
| Venom Strike Dagger | Dagger of Venom + Salamander Oil ×1 + Drow Poison ×2 | Upgraded: poison DC increases by 3 | 180 coins |
|
||||
| Underdark Silk Armor | Cave Spider Silk ×5 + Drow Adamantine ×1 | Studded Leather +2 | 300 coins |
|
||||
| Planar Ward Ring | Planar Shard ×2 + Void Essence ×1 | Ring: +2 all saves vs. extra-planar creatures | 400 coins |
|
||||
| Dragon Heart Blade | Thyrak's Core ×1 + Infernax Scale ×1 + Azer Metal Ingot ×2 | Legendary Greatsword: +3, 2d6 fire, fire immunity | 1,000 coins |
|
||||
| Abyss Gate Key | Portal Fragment ×1 + Shard of the Abyss ×1 | Quest item: reopens the Abyss Portal after collapse | — |
|
||||
|
||||
## 6.4 Recipe Discovery
|
||||
|
||||
| Method | How |
|
||||
|---|---|
|
||||
| Default | Basic recipes known at start |
|
||||
| `!lore` check (INT DC 14) | Reveals one unknown intermediate recipe |
|
||||
| Arina quest completion | Grants one recipe of player's choice from intermediate list |
|
||||
| Arina's Favorite status | Unlocks advanced recipe list |
|
||||
| Expedition discovery | Random `!scavenge` finds a recipe scroll (adds to known recipes) |
|
||||
|
||||
---
|
||||
|
||||
# Part 7: Quest System
|
||||
|
||||
## 7.1 Quest Types
|
||||
|
||||
| Type | Reset | Giver | Reward Scale |
|
||||
|---|---|---|---|
|
||||
| Daily Quest | Every 24 hours | TwinBee, Thom Krooke | Small (XP + coins) |
|
||||
| Weekly Quest | Every Sunday | Misty, Arina, Thom Krooke | Medium (XP + item) |
|
||||
| NPC Chain Quest | Completion-gated | Misty, Arina | Large (XP + unique reward) |
|
||||
| Zone Quest | Per expedition | TwinBee (in-zone) | Medium (XP + zone loot) |
|
||||
| Community Quest | Community milestone | Pete announces | Large (shared reward) |
|
||||
|
||||
## 7.2 Daily Quests (Rotating Pool)
|
||||
|
||||
Three daily quests available per day. Each player gets the same pool; completion is individual.
|
||||
|
||||
| Quest | Requirement | Reward |
|
||||
|---|---|---|
|
||||
| First Blood | Win 1 combat in an expedition | 50 XP + 20 coins |
|
||||
| Gatherer | Harvest 3 resource nodes | 50 XP + 15 coins |
|
||||
| Rested | Complete a long rest at home | 30 XP + 10 coins |
|
||||
| The Angler | Catch any fish | 40 XP + 20 coins |
|
||||
| Keep Moving | Advance through 3 rooms in one day | 60 XP + 25 coins |
|
||||
| Thom's Errand | Spend 50 coins at Thom Krooke | 40 XP + 20 coins |
|
||||
| Night Watch | Survive a wandering monster encounter | 70 XP + 30 coins |
|
||||
| True Aim | Land a critical hit | 60 XP + 25 coins |
|
||||
| Untouchable | Win a combat without taking damage | 80 XP + 40 coins |
|
||||
|
||||
## 7.3 Weekly Quests (Rotating Pool)
|
||||
|
||||
One weekly quest per player per week, assigned Sunday.
|
||||
|
||||
| Quest | Requirement | Reward |
|
||||
|---|---|---|
|
||||
| The Long Road | Complete an expedition (any tier) | 300 XP + 100 coins |
|
||||
| Bestiary Entry | Defeat 5 different enemy types | 250 XP + Uncommon loot |
|
||||
| Supply Chain | Complete an expedition with ≥25% supplies remaining | 200 XP + 80 coins |
|
||||
| Thom's Best Customer | Spend 200 coins at Thom Krooke this week | 150 XP + 10% shop discount next week |
|
||||
| Ghost Protocol | Complete an expedition with Threat Clock never above 50 | 400 XP + Rare loot |
|
||||
| Master Crafter | Craft 3 items this week | 250 XP + crafting materials |
|
||||
| The Streak | Reach a 5-win arena streak | 300 XP + 150 coins |
|
||||
| Pet Project | Reach Pet Level 3 | 200 XP + pet happiness +20 |
|
||||
|
||||
## 7.4 Zone Quests
|
||||
|
||||
Zone quests appear at expedition start, assigned by TwinBee. One per expedition.
|
||||
|
||||
| Zone | Quest | Reward |
|
||||
|---|---|---|
|
||||
| Goblin Warrens | Collect the War Standard before Day 3 | Uncommon weapon + 150 XP |
|
||||
| Crypt of Valdris | Defeat Valdris without using a rest | Rare loot + 200 XP |
|
||||
| Forest of Shadows | Find and catch a Phantom Carp | Rare crafting material + 200 XP |
|
||||
| Sunken Temple | Survive the Tidal Event without retreating | Tidal Crystal (guaranteed) + 300 XP |
|
||||
| Haunted Manor | Clear the manor in under 8 days | Rare loot + 300 XP |
|
||||
| Underforge | Complete expedition at Heat Stack ≤5 | Mithral Trace (guaranteed) + 300 XP |
|
||||
| Underdark | Defeat the Mind Flayer Elder without a party member being Stunned | Epic loot + 500 XP |
|
||||
| Feywild Crossing | Accept the Thornmother's Bargain | Unique buff + 400 XP |
|
||||
| Dragon's Lair | Reach Infernax before Day 10 | Epic loot + 600 XP |
|
||||
| Abyss Portal | Close the portal before Instability reaches 80 | Legendary item + 800 XP |
|
||||
|
||||
## 7.5 Quest Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!quests` | Show active daily, weekly, and zone quests |
|
||||
| `!quest complete` | Check quest completion status |
|
||||
| `!quest history` | Last 10 completed quests |
|
||||
|
||||
## 7.6 Go Data Structures
|
||||
|
||||
```go
|
||||
type PlayerQuest struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
QuestID string `json:"quest_id"`
|
||||
Type string `json:"type"` // daily, weekly, npc_chain, zone, community
|
||||
Status string `json:"status"` // active, complete, expired
|
||||
Progress int `json:"progress"` // current count toward requirement
|
||||
Target int `json:"target"` // required count
|
||||
AssignedAt time.Time `json:"assigned_at"`
|
||||
ExpiresAt time.Time `json:"expires_at"`
|
||||
CompletedAt *time.Time `json:"completed_at"`
|
||||
RewardXP int `json:"reward_xp"`
|
||||
RewardCoins int `json:"reward_coins"`
|
||||
RewardItem string `json:"reward_item,omitempty"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
*End of Remaining Systems Specification.*
|
||||
@@ -1,616 +0,0 @@
|
||||
# GogoBee — Expedition Resource & Combat Integration
|
||||
> **Companion to:** `gogobee_expedition_system.md`, `gogobee_dungeon_zones.md`
|
||||
> **Version:** 1.0
|
||||
> **Status:** Draft
|
||||
> **Impact:** REPLACES standalone harvesting system and standalone dungeon run system
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Protected Files — DO NOT MODIFY
|
||||
|
||||
All existing `*_flavor.go` / `*_flavor.txt` files are off-limits.
|
||||
New resource and combat flavor text goes in `twinbee_resource_flavor.go` — new file only.
|
||||
|
||||
---
|
||||
|
||||
## 1. System Consolidation
|
||||
|
||||
### What Is Being Replaced
|
||||
|
||||
The following standalone systems are **deprecated** and removed from the command surface:
|
||||
|
||||
| Deprecated System | Replaced By |
|
||||
|---|---|
|
||||
| Standalone `!adventure` command | Expedition exploration (`!advance`) |
|
||||
| Standalone `!harvest` command | Zone harvesting within active expedition |
|
||||
| Standalone dungeon runs (`DungeonRun`) | `Expedition` system entirely |
|
||||
| Generic loot tables (zone-agnostic) | Zone-specific resource tables (this doc) |
|
||||
| Generic combat events | Zone-contextual combat events (this doc) |
|
||||
|
||||
### What Is Preserved
|
||||
|
||||
| Existing System | Status | Notes |
|
||||
|---|---|---|
|
||||
| Fishing | Preserved + integrated | Fishing happens in water-bearing zones only; Ranger bonuses apply |
|
||||
| Pet system | Preserved + integrated | Pet bonuses apply inside expeditions unchanged |
|
||||
| Arena / streak system | Preserved, standalone | Arena remains a separate PvP-adjacent system |
|
||||
| Economy / Thom Krooke | Preserved | Supply procurement, loot selling, all unchanged |
|
||||
| NPC interactions | Preserved + expanded | NPCs can now appear as expedition events |
|
||||
|
||||
### Migration for Existing Players
|
||||
|
||||
Players with resources gathered under the old system retain those resources in their inventory. Old `DungeonRun` records are archived (not deleted). No player loses progress. The new expedition system becomes the only path to generate new resources from Day 1 of launch.
|
||||
|
||||
---
|
||||
|
||||
## 2. How Resources Work Inside Expeditions
|
||||
|
||||
Resources are gathered through **Harvest Actions** — a category of expedition action that occurs in cleared rooms. A harvest action:
|
||||
|
||||
- Costs one action slot per attempt (not a full day — multiple harvests possible per day)
|
||||
- Requires an appropriate skill check (skill and DC vary by resource and zone)
|
||||
- Can trigger a **Combat Interrupt** (Section 4)
|
||||
- Yields zone-specific materials, not generic drops
|
||||
- Has a daily attempt cap per resource node (nodes replenish on long rest)
|
||||
|
||||
### 2.1 Harvest Action Types
|
||||
|
||||
| Action | Command | Primary Skill | Who Benefits |
|
||||
|---|---|---|---|
|
||||
| Forage | `!forage` | WIS (Survival) | Ranger +2 bonus |
|
||||
| Mine / Salvage | `!mine` | STR (Athletics) | Fighter +2 bonus |
|
||||
| Fish | `!fish` | DEX (Sleight of Hand) | Ranger +bonus; existing fishing rank applies |
|
||||
| Scavenge | `!scavenge` | INT (Investigation) | Rogue +2 bonus |
|
||||
| Harvest Essence | `!essence` | INT (Arcana) | Mage +2 bonus |
|
||||
| Commune | `!commune` | WIS (Insight) | Cleric +2 bonus; unlocks unique Cleric-only drops |
|
||||
|
||||
### 2.2 Harvest Yield Structure
|
||||
|
||||
Each harvest attempt produces one of four outcomes:
|
||||
|
||||
| Outcome | Roll Result | Yield |
|
||||
|---|---|---|
|
||||
| **Nothing** | Fail DC by 5+ | No yield; node not depleted |
|
||||
| **Common yield** | Fail DC by 1–4 | 1 unit of base zone material |
|
||||
| **Standard yield** | Meet DC | 1d3 units of base zone material |
|
||||
| **Rich yield** | Beat DC by 5+ | 1d3 units base material + 1 bonus/rare material |
|
||||
|
||||
### 2.3 Node Depletion
|
||||
|
||||
Each room has a fixed number of harvest nodes per type (defined per zone, Section 3). Once a node is depleted it does not regenerate until long rest. TwinBee narrates node depletion:
|
||||
|
||||
> *"The patch is stripped. You've taken what it had. TwinBee notes the location for the return trip — if there is one."*
|
||||
|
||||
---
|
||||
|
||||
## 3. Zone Resource Tables
|
||||
|
||||
### Zone 01 — Goblin Warrens
|
||||
|
||||
**Biome:** Underground tunnels, crude construction, scavenged materials
|
||||
**Primary Gathering Actions:** `!scavenge`, `!mine`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Scrap Iron | Common material | `!mine` | 10 | Used in basic weapon repairs |
|
||||
| Goblin Alchemy Pouch | Uncommon material | `!scavenge` | 13 | Random minor potion component |
|
||||
| Worg Pelt | Uncommon material | `!scavenge` (post-Worg kill) | 11 | Requires Worg defeated in room |
|
||||
| Crude Weapon Cache | Uncommon item | `!scavenge` | 15 | Random Common weapon drop |
|
||||
| Hobgoblin War Standard | Rare material | `!scavenge` | 18 | High sell value; Thom Krooke special interest |
|
||||
| Goblin Shaman's Reagents | Rare material | `!essence` | 17 | Mage only; spell component batch |
|
||||
|
||||
**Zone Fishing:** None.
|
||||
**Node Count Per Room:** Scrap Iron ×2, Alchemy Pouch ×1, Worg Pelt ×1 (conditional), Cache ×1.
|
||||
|
||||
---
|
||||
|
||||
### Zone 02 — Crypt of Valdris
|
||||
|
||||
**Biome:** Stone crypts, necrotic energy, ancient burial goods
|
||||
**Primary Gathering Actions:** `!scavenge`, `!essence`, `!commune`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Grave Soil | Common material | `!scavenge` | 9 | Alchemy base; Cleric crafting component |
|
||||
| Bone Dust | Common material | `!scavenge` | 9 | Spell component; sell value low |
|
||||
| Ancient Coin (pre-Empire) | Uncommon material | `!scavenge` | 14 | Thom Krooke pays premium |
|
||||
| Necrotic Essence | Uncommon material | `!essence` | 15 | Magic item crafting; volatile |
|
||||
| Silver Grave Dust | Rare material | `!commune` | 17 | Cleric only; enhances undead-specific abilities |
|
||||
| Valdris's Seal Fragment | Rare quest material | `!scavenge` | 20 | Lore item; possible future quest chain |
|
||||
|
||||
**Zone Fishing:** None.
|
||||
**Node Count Per Room:** Grave Soil ×2, Bone Dust ×2, Ancient Coin ×1, Necrotic Essence ×1.
|
||||
|
||||
---
|
||||
|
||||
### Zone 03 — Forest of Shadows
|
||||
|
||||
**Biome:** Ancient corrupted woodland, streams, fauna, fey-adjacent
|
||||
**Primary Gathering Actions:** `!forage`, `!essence`, `!fish`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Shadow Herb | Common material | `!forage` | 10 | Potion base; anti-fear properties |
|
||||
| Beast Pelt | Common material | `!forage` (post-kill) | 11 | Requires beast kill in room; Ranger bonus |
|
||||
| Darkwood | Uncommon material | `!mine` | 13 | Weapon crafting; bows, staves |
|
||||
| Corrupted Fey Bloom | Uncommon material | `!forage` | 16 | Rare; potion of resistance component |
|
||||
| Owlbear Feather | Uncommon material | `!scavenge` (post-kill) | 12 | Requires Owlbear kill; fletching, rare item component |
|
||||
| Dryad's Tears | Rare material | `!essence` | 18 | Mage/Ranger only; regeneration potion component |
|
||||
| Bioluminescent Fungi | Rare material | `!forage` | 17 | Light source crafting; high sell value |
|
||||
|
||||
**Zone Fishing:** Forest streams, outdoor exploration rooms only.
|
||||
|
||||
| Fish | Rarity | DC | Notes |
|
||||
|---|---|---|---|
|
||||
| Shadow Trout | Common | 11 | Edible; 0.5 SU value |
|
||||
| Gloomfin | Uncommon | 15 | Sell value; potion component |
|
||||
| Phantom Carp | Rare | 20 | Cleric material; high sell value |
|
||||
|
||||
**Node Count Per Room:** Shadow Herb ×2, Beast Pelt ×1 (conditional), Darkwood ×1, Fungi ×1.
|
||||
|
||||
---
|
||||
|
||||
### Zone 04 — Sunken Temple of Dar'eth
|
||||
|
||||
**Biome:** Flooded stone, tidal, aquatic, aboleth-touched
|
||||
**Primary Gathering Actions:** `!fish`, `!scavenge`, `!essence`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Sea Glass Shard | Common material | `!scavenge` | 9 | Crafting filler; low value |
|
||||
| Deep Coral | Common material | `!mine` | 11 | Jewelry component; Thom Krooke moderate value |
|
||||
| Kuo-toa Scale | Uncommon material | `!scavenge` (post-kill) | 12 | Armor crafting component |
|
||||
| Black Pearl | Uncommon material | `!fish` | 16 | High sell value; accessory component |
|
||||
| Aboleth Mucus (refined) | Rare material | `!essence` | 18 | Mage only; psychic spell amplifier |
|
||||
| Ancient Temple Relic | Rare item | `!scavenge` | 20 | Random Uncommon item; lore value |
|
||||
| Tidal Crystal | Rare material | `!mine` (Tidal Event only) | 17 | Only available during Day 6 Tidal Event; spell focus component |
|
||||
|
||||
**Zone Fishing:** All flooded rooms. Bonus fish nodes during Tidal Event.
|
||||
|
||||
| Fish | Rarity | DC | Notes |
|
||||
|---|---|---|---|
|
||||
| Blind Cave Fish | Common | 10 | Edible; 0.5 SU |
|
||||
| Merrow Eel | Uncommon | 14 | Potion component; slight poison property |
|
||||
| Dar'eth Lanternfish | Rare | 19 | Bioluminescent; crafting and sell value |
|
||||
| Aboleth Spawn (juvenile) | Very Rare | 23 | Requires Ranger + DC 23; unique Ranger trophy |
|
||||
|
||||
**Node Count Per Room:** Sea Glass ×2, Deep Coral ×1, Kuo-toa Scale ×1 (conditional), Pearl ×1.
|
||||
|
||||
---
|
||||
|
||||
### Zone 05 — Haunted Manor of Blackspire
|
||||
|
||||
**Biome:** Victorian decay, cursed objects, spectral residue
|
||||
**Primary Gathering Actions:** `!scavenge`, `!essence`, `!commune`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Grave Dust (spectral) | Common material | `!scavenge` | 10 | Upgraded version of Crypt variant; more potent |
|
||||
| Cursed Trinket | Common item | `!scavenge` | 12 | Random debuff item; sell only; do not equip |
|
||||
| Ghost Silk | Uncommon material | `!essence` | 15 | Armor crafting; +DEX light armor component |
|
||||
| Vampire Ash | Uncommon material | `!scavenge` (post-Vampire kill) | 14 | Requires Vampire Spawn kill; holy weapon component |
|
||||
| Shadow Essence | Rare material | `!essence` | 18 | Rogue item component; stealth enhancement |
|
||||
| Blackspire Library Volume | Rare lore item | `!scavenge` | 19 | Increases INT by 1 for one dungeon run (consumable); lore value |
|
||||
| Wraith Core | Rare material | `!commune` | 20 | Cleric only; requires Wraith kill; undead ward component |
|
||||
|
||||
**Zone Fishing:** None.
|
||||
**Special:** Every `!scavenge` in the Manor has a 10% chance of yielding a **Cursed Trinket** as a secondary drop regardless of node. TwinBee warns about this once, clearly, and then does not warn again.
|
||||
|
||||
---
|
||||
|
||||
### Zone 06 — The Underforge
|
||||
|
||||
**Biome:** Volcanic caverns, ancient dwarven metalwork, fire elementals
|
||||
**Primary Gathering Actions:** `!mine`, `!essence`, `!scavenge`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Iron Ore | Common material | `!mine` | 10 | Weapon/armor base material |
|
||||
| Volcanic Glass | Common material | `!mine` | 11 | Blade component; slightly fragile |
|
||||
| Azer Metal Ingot | Uncommon material | `!mine` (post-Azer kill) | 14 | Requires Azer kill; always-hot; unique properties |
|
||||
| Fire Essence | Uncommon material | `!essence` | 15 | Mage crafting; fire spell amplifier |
|
||||
| Mithral Trace | Rare material | `!mine` | 20 | Very rare; mithral armor component |
|
||||
| Forge Core Fragment | Rare material | `!scavenge` (post-Construct kill) | 17 | Construct parts; golem-crafting future use |
|
||||
| Salamander Oil | Rare material | `!essence` (post-Salamander kill) | 16 | Fire resistance potion component; high value |
|
||||
|
||||
**Zone Fishing:** None.
|
||||
**Heat Interaction:** At Heat Stack 7+, all `!mine` DCs increase by 3. At Heat Stack 10, harvesting is impossible until stacks reduce.
|
||||
|
||||
---
|
||||
|
||||
### Zone 07 — The Underdark
|
||||
|
||||
**Biome:** Vast underground, drow civilization, alien ecology, cave rivers
|
||||
**Primary Gathering Actions:** `!forage`, `!mine`, `!fish`, `!essence`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Underdark Mushroom | Common material | `!forage` | 10 | Edible (+1 SU); also potion base |
|
||||
| Cave Spider Silk | Common material | `!forage` | 12 | Armor component; light and strong |
|
||||
| Drow Poison (diluted) | Uncommon material | `!scavenge` (post-Drow kill) | 14 | Weapon coating; Unconscious condition on hit (save) |
|
||||
| Faerzress Crystal | Uncommon material | `!mine` | 16 | Magic-disruptive; Mage spell component |
|
||||
| Mind Flayer Brain Matter | Rare material | `!essence` (post-Illithid kill) | 19 | Mage only; INT buff component; deeply unpleasant to handle |
|
||||
| Drow Adamantine | Rare material | `!mine` | 21 | Drow-forged; superior armor component |
|
||||
| Deep Dragon Scale Chip | Very Rare material | `!scavenge` | 23 | World drop; legendary item component |
|
||||
|
||||
**Zone Fishing:** Underground rivers (specific Exploration rooms only — TwinBee marks them).
|
||||
|
||||
| Fish | Rarity | DC | Notes |
|
||||
|---|---|---|---|
|
||||
| Blind Albino Bass | Common | 11 | Edible; 0.5 SU |
|
||||
| Glowing Cave Eel | Uncommon | 15 | Light source (temporary); sell value |
|
||||
| Underdark Shark | Rare | 20 | Trophy fish; Ranger achievement |
|
||||
| The Eyeless King | Legendary | 26 | Unique named fish; Ranger lv10+ only; Thom Krooke pays extraordinary amount |
|
||||
|
||||
---
|
||||
|
||||
### Zone 08 — Feywild Crossing
|
||||
|
||||
**Biome:** Impossible forest, fey magic, unstable time, dangerous beauty
|
||||
**Primary Gathering Actions:** `!forage`, `!essence`, `!commune`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Fey Dust | Common material | `!forage` | 11 | Spell component; mild time-distortion effect |
|
||||
| Enchanted Petal | Common material | `!forage` | 12 | Potion of Charm component |
|
||||
| Pixie Wing Fragments | Uncommon material | `!essence` | 16 | Very delicate; magic item component |
|
||||
| Will-o-Wisp Essence | Uncommon material | `!essence` (post-kill) | 17 | Light magic; Mage light spell enhancement |
|
||||
| Hag Hair | Rare material | `!commune` (post-Hag kill) | 18 | Cleric ward component; warding against fey charm |
|
||||
| Timelock Amber | Rare material | `!forage` | 21 | Preserves items; rare crafting anchor |
|
||||
| Thornmother's Thorn | Very Rare material | `!scavenge` (post-boss) | — | Boss drop only; legendary item component |
|
||||
|
||||
**Zone Fishing:** Fey streams only (time-distorted; fishing roll has chance of Time Distortion event).
|
||||
**Time Interaction:** On a Double-Day roll (Section 7.4 of expedition doc), all `!forage` DCs decrease by 3. On Time Loop, previous harvest results in that room are nullified — resources return to nodes.
|
||||
|
||||
---
|
||||
|
||||
### Zone 09 — Dragon's Lair
|
||||
|
||||
**Biome:** Volcanic mountain, kobold warrens, draconic power, ancient wealth
|
||||
**Primary Gathering Actions:** `!mine`, `!scavenge`, `!essence`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Ancient Gold Coin | Common material | `!scavenge` | 10 | Direct coin value; also historical item |
|
||||
| Volcanic Gem | Common material | `!mine` | 12 | Jewelry; spell component |
|
||||
| Drake Blood | Uncommon material | `!essence` (post-Drake kill) | 14 | Fire resistance potion component |
|
||||
| Dragon Scale Fragment | Uncommon material | `!scavenge` (post-Drake kill) | 16 | Armor component; not boss-quality |
|
||||
| Dragonfire Coal | Rare material | `!mine` | 19 | Burns indefinitely; heating, forging |
|
||||
| Kobold Trap Mechanism | Rare item | `!scavenge` | 18 | Deployable trap (one-use combat item) |
|
||||
| Infernax Scale | Legendary material | `!scavenge` (post-boss) | — | Boss drop only; legendary fire weapon component |
|
||||
|
||||
**Zone Fishing:** None.
|
||||
**Awareness Interaction:** At Awareness Pulse 3+, all harvest DCs increase by 4. After Infernax wakes (Day 14), harvesting is disabled — survival only.
|
||||
|
||||
---
|
||||
|
||||
### Zone 10 — The Abyss Portal
|
||||
|
||||
**Biome:** Fractured reality, demonic incursion, planar debris
|
||||
**Primary Gathering Actions:** `!essence`, `!scavenge`, `!mine`
|
||||
|
||||
| Resource | Type | Harvest Action | DC | Notes |
|
||||
|---|---|---|---|---|
|
||||
| Brimstone Shard | Common material | `!mine` | 11 | Fire damage component; unstable |
|
||||
| Demon Ichor | Common material | `!scavenge` (post-kill) | 12 | Poison/acid component; corrosive |
|
||||
| Planar Shard | Uncommon material | `!mine` | 15 | Reality fragment; Mage crafting anchor |
|
||||
| Corrupted Metal | Uncommon material | `!scavenge` | 16 | Weapon component; chaotic properties |
|
||||
| Void Essence | Rare material | `!essence` | 20 | Pure planar energy; legendary crafting only |
|
||||
| Abyssal Ichor (concentrated) | Rare material | `!essence` (post-Balor region) | 22 | Mage only; most powerful spell amplifier in game |
|
||||
| Portal Fragment | Legendary material | `!scavenge` (post-boss) | — | Boss drop; portal-closing quest item |
|
||||
|
||||
**Instability Interaction:** At Instability 61+, all harvest DCs increase by 5. At Instability 81+, harvesting is disabled. At Collapse, all unharvested nodes are lost.
|
||||
|
||||
---
|
||||
|
||||
## 4. Combat Events During Expeditions
|
||||
|
||||
Combat no longer occurs as a standalone triggered event. All combat happens **within the expedition context** as one of four event types.
|
||||
|
||||
### 4.1 Combat Event Types
|
||||
|
||||
**Room Combat**
|
||||
The standard encounter — enemies present in a new or reset room. Triggered by `!advance`. Uses full D&D combat resolution. Room is flagged Cleared on enemy defeat. Cleared rooms are safe for harvesting.
|
||||
|
||||
**Harvest Interrupt**
|
||||
A combat encounter triggered mid-harvest. The player was focused on gathering; enemies took advantage.
|
||||
|
||||
- Trigger: `!forage`/`!mine`/etc. with Combat Interrupt roll (see Section 4.2)
|
||||
- Enemy is from zone roster at current room's tier
|
||||
- Player does NOT get to roll initiative — enemy acts first (surprise round)
|
||||
- Ranger passive: -3 to Combat Interrupt roll in wilderness zones
|
||||
- Rogue passive: if Stealth was active, no surprise round
|
||||
|
||||
**Night Ambush**
|
||||
Wandering monster encounter during Night Phase. Player wakes to combat.
|
||||
- Player HP is at current value (not full unless long rest was taken)
|
||||
- First round: DEX save DC 12 or lose first turn (groggy)
|
||||
|
||||
**Patrol Encounter**
|
||||
At Threat Clock Alert+, patrols move through cleared rooms. Triggered on `!advance` between rooms, not inside rooms.
|
||||
- Patrol is 1–2 enemies, weaker than room combat
|
||||
- Defeating a patrol does not clear a room
|
||||
- Fleeing a patrol costs Threat Clock +5
|
||||
|
||||
### 4.2 Combat Interrupt Roll
|
||||
|
||||
When a Harvest Action is attempted, roll 1d20 + zone tier:
|
||||
|
||||
| Roll | Outcome |
|
||||
|---|---|
|
||||
| 1–8 | No interrupt. Harvest proceeds. |
|
||||
| 9–14 | Noise noticed. Threat Clock +2. No combat. |
|
||||
| 15–18 | Harvest Interrupt: 1 standard enemy from zone roster. |
|
||||
| 19–21 | Harvest Interrupt: elite enemy. Harvest node not depleted (you dropped it). |
|
||||
| 22+ | Patrol Interrupt: 1d3 enemies. Harvest fails entirely. |
|
||||
|
||||
**Threat Clock modifier:** +1 per 20 Threat Clock points above 40.
|
||||
|
||||
### 4.3 Combat Outcomes Within Expeditions
|
||||
|
||||
**Victory:**
|
||||
- Loot drops from zone loot table
|
||||
- XP awarded
|
||||
- Harvest can resume (node still active unless Patrol Interrupt)
|
||||
- TwinBee delivers zone-contextual combat victory line
|
||||
|
||||
**Defeat (0 HP):**
|
||||
- Forced extraction triggers (Section 10.2 of expedition doc)
|
||||
- Any unbanked loot from current room is lost
|
||||
- Carried loot is preserved
|
||||
|
||||
**Flee:**
|
||||
- DEX check DC 13 to escape
|
||||
- On success: leave room; Threat Clock +5; harvest abandoned
|
||||
- On fail: enemy gets one free attack; then escape succeeds
|
||||
|
||||
---
|
||||
|
||||
## 5. Zone-Contextual Loot Tables
|
||||
|
||||
Zone loot drops from combat are separate from harvest nodes. These drop on enemy defeat and are zone-specific.
|
||||
|
||||
### Loot Drop Logic
|
||||
|
||||
Every combat victory generates a loot roll:
|
||||
1. Roll for **drop tier** (based on enemy CR)
|
||||
2. Roll on **zone loot table** for that tier
|
||||
3. Apply **rarity roll** — base rates modified by Ranger pet bonus and class
|
||||
|
||||
| Enemy CR Range | Drop Tier | Guaranteed Drop? |
|
||||
|---|---|---|
|
||||
| 0–1 | Common only | No (70% chance) |
|
||||
| 2–4 | Common or Uncommon | Yes (Common always; Uncommon 30%) |
|
||||
| 5–8 | Uncommon or Rare | Yes (Uncommon always; Rare 15%) |
|
||||
| 9–12 | Rare or Epic | Yes (Rare always; Epic 10%) |
|
||||
| 13+ | Epic or Legendary | Yes (Epic always; Legendary 5%) |
|
||||
| Boss | Rare minimum | Yes (see individual boss tables) |
|
||||
|
||||
### Zone Loot Flavor by Biome
|
||||
|
||||
Every item drop has a zone-contextual description. The same `Potion of Healing` found in the Goblin Warrens is described differently than one found in the Haunted Manor:
|
||||
|
||||
| Zone | Potion of Healing flavor |
|
||||
|---|---|
|
||||
| Goblin Warrens | A stolen vial, still stoppered with a rag. It smells like goblin and better days. |
|
||||
| Crypt of Valdris | A glass vial embedded in a burial offering. Whoever left it didn't need it. |
|
||||
| Forest of Shadows | Bark-sealed, filled with something deep red. It tastes like the forest before it went wrong. |
|
||||
| Sunken Temple | Salt-rimed and pressure-sealed. A temple offering, preserved by the deep cold. |
|
||||
| Haunted Manor | Found in the medicine cabinet, dated forty years ago. Remarkably, still effective. |
|
||||
| Underforge | Hot to the touch even now. The dwarves made things to last. |
|
||||
| Underdark | Drow-made. The formula is different. The effect is the same. The ingredients are not discussed. |
|
||||
| Feywild Crossing | It shifts color when you look at it sideways. The fey make medicine the way they make everything: beautifully and with caveats. |
|
||||
| Dragon's Lair | A kobold medic's field kit, looted from a belt pouch. The kobolds take care of their own. |
|
||||
| Abyss Portal | Glows faintly red. Still works. TwinBee recommends not asking what's in it. |
|
||||
|
||||
---
|
||||
|
||||
## 6. Fishing System Integration
|
||||
|
||||
Fishing is preserved entirely but now occurs only within active expeditions, in zones and rooms that support it.
|
||||
|
||||
### 6.1 Fishing Zones
|
||||
|
||||
| Zone | Fishing Rooms | Fishing Window |
|
||||
|---|---|---|
|
||||
| Forest of Shadows | Outdoor exploration rooms with stream markers | Day phase only |
|
||||
| Sunken Temple | All flooded rooms | Any time; bonus during Tidal Event |
|
||||
| Underdark | Underground river rooms (TwinBee marks these) | Any time |
|
||||
| Feywild Crossing | Fey stream rooms | Day phase; subject to Time Distortion |
|
||||
|
||||
All other zones: no fishing.
|
||||
|
||||
### 6.2 Fishing Mechanics Within Expeditions
|
||||
|
||||
- `!fish` uses the existing fishing rank system with no mechanical changes
|
||||
- Fishing counts as a Harvest Action (costs an action slot)
|
||||
- Fishing Interrupt roll uses the same Combat Interrupt table (Section 4.2)
|
||||
- Ranger fishing bonuses (+20% rare catch rate) apply
|
||||
- Fish caught in expeditions are added to inventory, not auto-converted to coins
|
||||
- Fish can be eaten for SU value (see zone tables) or sold to Thom Krooke post-expedition
|
||||
|
||||
### 6.3 Expedition-Exclusive Fish
|
||||
|
||||
Certain fish only exist within expedition zones and cannot be caught via any other mechanic. These are marked in zone tables as "Expedition-only." They have unique sell values, crafting uses, or both.
|
||||
|
||||
---
|
||||
|
||||
## 7. Go Data Structures — Resource System
|
||||
|
||||
```go
|
||||
// HarvestNode represents a gatherable resource point in a room.
|
||||
type HarvestNode struct {
|
||||
ID string `json:"id"`
|
||||
ZoneID string `json:"zone_id"`
|
||||
RoomID string `json:"room_id"`
|
||||
ResourceID string `json:"resource_id"`
|
||||
Action string `json:"action"` // forage, mine, scavenge, essence, commune, fish
|
||||
DC int `json:"dc"`
|
||||
MaxCharges int `json:"max_charges"` // uses before depletion
|
||||
CurrentCharges int `json:"current_charges"`
|
||||
RequiresKill string `json:"requires_kill"` // monster ID, empty if no kill required
|
||||
Conditional string `json:"conditional"` // zone event ID that enables/disables node
|
||||
}
|
||||
|
||||
// ZoneResource defines a harvestable material or item for a zone.
|
||||
type ZoneResource struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
ZoneID string `json:"zone_id"`
|
||||
Rarity string `json:"rarity"` // common, uncommon, rare, very_rare, legendary
|
||||
Type string `json:"type"` // material, item, fish, quest
|
||||
SellValue int `json:"sell_value"` // coins at Thom Krooke base price
|
||||
CraftingTags []string `json:"crafting_tags"` // what this can be used to make
|
||||
FlavorRef string `json:"flavor_ref"` // key into zone resource flavor text
|
||||
}
|
||||
|
||||
// HarvestAttempt is the result of a single harvest action.
|
||||
type HarvestAttempt struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
ExpeditionID string `json:"expedition_id"`
|
||||
NodeID string `json:"node_id"`
|
||||
Action string `json:"action"`
|
||||
RollResult int `json:"roll_result"`
|
||||
DC int `json:"dc"`
|
||||
Outcome string `json:"outcome"` // nothing, common, standard, rich
|
||||
Yield []string `json:"yield"` // resource IDs yielded
|
||||
Interrupted bool `json:"interrupted"` // combat interrupt triggered
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
}
|
||||
|
||||
// CombatEvent is a combat occurrence within an expedition.
|
||||
type CombatEvent struct {
|
||||
ID string `json:"id"`
|
||||
ExpeditionID string `json:"expedition_id"`
|
||||
Type string `json:"type"` // room, harvest_interrupt, night_ambush, patrol
|
||||
EnemyIDs []string `json:"enemy_ids"`
|
||||
SurpriseRound bool `json:"surprise_round"`
|
||||
Outcome string `json:"outcome"` // victory, defeat, flee
|
||||
LootDrops []string `json:"loot_drops"` // item IDs
|
||||
XPAwarded int `json:"xp_awarded"`
|
||||
ThreatDelta int `json:"threat_delta"`
|
||||
FlavorLine string `json:"flavor_line"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
}
|
||||
|
||||
// ZoneLootEntry defines a loot drop entry tied to a zone and CR range.
|
||||
type ZoneLootEntry struct {
|
||||
ZoneID string `json:"zone_id"`
|
||||
CRMin float32 `json:"cr_min"`
|
||||
CRMax float32 `json:"cr_max"`
|
||||
ItemID string `json:"item_id"`
|
||||
Weight float32 `json:"weight"`
|
||||
FlavorKey string `json:"flavor_key"` // zone-specific item description key
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Thom Krooke — Resource Economy
|
||||
|
||||
Resources harvested during expeditions feed directly into Thom Krooke's economy. New shop mechanics:
|
||||
|
||||
### 8.1 Selling Resources
|
||||
|
||||
Post-expedition, all harvested materials can be sold via `!sell` at Thom Krooke's shop. Base prices:
|
||||
|
||||
| Rarity | Base Sell Price |
|
||||
|---|---|
|
||||
| Common | 5–15 coins |
|
||||
| Uncommon | 25–60 coins |
|
||||
| Rare | 100–300 coins |
|
||||
| Very Rare | 500–1,200 coins |
|
||||
| Legendary | 3,000–10,000 coins |
|
||||
|
||||
CHA Persuasion check (DC 15) applies the 10% discount from the main design doc to **purchases**, not sales. A separate CHA check (DC 17) can increase sell price by 15%.
|
||||
|
||||
### 8.2 Crafting at Thom Krooke
|
||||
|
||||
Certain resource combinations can be brought to Thom Krooke for crafting. Recipes are discovered via `!lore` checks or NPC interactions. Examples:
|
||||
|
||||
| Recipe | Materials | Output |
|
||||
|---|---|---|
|
||||
| Potion of Fire Resistance | Salamander Oil + Fire Essence × 2 | Potion (resist fire 1 combat) |
|
||||
| Mithral Dagger | Mithral Trace + Scrap Iron × 3 | Mithral Dagger (light armor prof bypass) |
|
||||
| Undead Ward Charm | Silver Grave Dust + Wraith Core | Amulet: +2 to saves vs. undead |
|
||||
| Shadow Step Cloak | Ghost Silk × 3 + Shadow Essence | Light armor: Stealth advantage 1/day |
|
||||
| Drow Poison Blade | Drow Poison + any blade weapon | Weapon: sleep-on-crit for 3 combats |
|
||||
|
||||
Full crafting recipe list is a separate document (deferred to Phase E6).
|
||||
|
||||
---
|
||||
|
||||
## 9. Command Surface Changes
|
||||
|
||||
### Deprecated Commands (removed)
|
||||
|
||||
| Command | Reason |
|
||||
|---|---|
|
||||
| `!adventure` | Replaced by `!expedition start` + `!advance` |
|
||||
| `!harvest` | Replaced by `!forage`, `!mine`, `!scavenge`, `!essence`, `!commune` |
|
||||
| `!dungeon` | Replaced by `!expedition start` |
|
||||
|
||||
### New Commands
|
||||
|
||||
| Command | Description |
|
||||
|---|---|
|
||||
| `!forage` | Forage in current cleared room |
|
||||
| `!mine` | Mine/salvage in current cleared room |
|
||||
| `!scavenge` | Scavenge in current cleared room |
|
||||
| `!essence` | Harvest magical essence in current cleared room |
|
||||
| `!commune` | Commune with spiritual energy (Cleric primary) |
|
||||
| `!fish` | Fish in current room (water zones only) |
|
||||
| `!inventory` | Full inventory including harvested materials |
|
||||
| `!sell [item]` | Sell item or material to Thom Krooke (post-expedition) |
|
||||
| `!craft` | Open crafting menu at Thom Krooke |
|
||||
| `!resources` | List harvestable nodes in current room |
|
||||
|
||||
### Unchanged Commands
|
||||
|
||||
All expedition navigation commands (`!advance`, `!retreat`, `!search`, `!camp`, `!rest`, `!extract`) are unchanged. All combat commands unchanged. `!fish` syntax unchanged.
|
||||
|
||||
---
|
||||
|
||||
## 10. Implementation Phases — Resource & Combat Integration
|
||||
|
||||
### Phase R1 — System Deprecation & Migration
|
||||
- [ ] Archive existing `DungeonRun` records
|
||||
- [ ] Remove `!adventure`, `!harvest`, `!dungeon` command handlers
|
||||
- [ ] Migrate existing player resource inventories to new schema
|
||||
- [ ] Update Thom Krooke shop to accept new resource types
|
||||
|
||||
### Phase R2 — Harvest Node System
|
||||
- [ ] `HarvestNode`, `ZoneResource`, `HarvestAttempt` structs and DB schema
|
||||
- [ ] Harvest action handlers (`!forage`, `!mine`, `!scavenge`, `!essence`, `!commune`)
|
||||
- [ ] Node depletion and long-rest replenishment
|
||||
- [ ] `!resources` command (list active nodes in room)
|
||||
|
||||
### Phase R3 — Combat Event Integration
|
||||
- [ ] `CombatEvent` struct and DB schema
|
||||
- [ ] Harvest Interrupt roll system
|
||||
- [ ] Patrol Encounter system (Threat Clock gated)
|
||||
- [ ] Night Ambush integration with wandering monster system
|
||||
- [ ] Zone-contextual combat victory/defeat flavor
|
||||
|
||||
### Phase R4 — Zone Loot & Resource Tables
|
||||
- [ ] `ZoneLootEntry` tables for all 10 zones
|
||||
- [ ] Zone-contextual item flavor text (all items × all zones — see `twinbee_resource_flavor.go`)
|
||||
- [ ] Fishing integration (zone-specific fish tables, expedition-only fish)
|
||||
|
||||
### Phase R5 — Economy Integration
|
||||
- [ ] Resource sell system at Thom Krooke
|
||||
- [ ] CHA sell-price check
|
||||
- [ ] Crafting recipe system (basic recipes from Section 8.2)
|
||||
- [ ] `!craft` command and recipe discovery via `!lore`
|
||||
|
||||
### Phase R6 — Polish & Balance
|
||||
- [ ] Node count tuning per zone (balance supply vs. reward)
|
||||
- [ ] Combat Interrupt roll tuning (not too frequent, not too rare)
|
||||
- [ ] `twinbee_resource_flavor.go` full population
|
||||
- [ ] Zone condition interactions (Heat Stack DC increase, Instability lockout, etc.)
|
||||
|
||||
---
|
||||
|
||||
*End of Resource & Combat Integration Document.*
|
||||
*Deprecates standalone harvesting and dungeon run systems entirely.*
|
||||
*Reference alongside all companion docs in Claude Code sessions.*
|
||||
@@ -1,334 +0,0 @@
|
||||
# GogoBee — Spell System
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`, `gogobee_subclass_system.md`
|
||||
> **Version:** 1.0
|
||||
|
||||
---
|
||||
|
||||
## 1. Spell Slots by Class and Level
|
||||
|
||||
### Mage Spell Slots
|
||||
| Level | Cantrips | 1st | 2nd | 3rd | 4th | 5th |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | 3 | 2 | — | — | — | — |
|
||||
| 2 | 3 | 3 | — | — | — | — |
|
||||
| 3 | 3 | 4 | 2 | — | — | — |
|
||||
| 4 | 4 | 4 | 3 | — | — | — |
|
||||
| 5 | 4 | 4 | 3 | 2 | — | — |
|
||||
| 7 | 4 | 4 | 3 | 3 | 1 | — |
|
||||
| 9 | 4 | 4 | 3 | 3 | 2 | — |
|
||||
| 11 | 5 | 4 | 3 | 3 | 3 | 1 |
|
||||
| 15 | 5 | 4 | 3 | 3 | 3 | 2 |
|
||||
| 20 | 5 | 4 | 3 | 3 | 3 | 3 |
|
||||
|
||||
### Cleric Spell Slots
|
||||
| Level | Cantrips | 1st | 2nd | 3rd | 4th | 5th |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | 3 | 2 | — | — | — | — |
|
||||
| 3 | 3 | 4 | 2 | — | — | — |
|
||||
| 5 | 3 | 4 | 3 | 2 | — | — |
|
||||
| 7 | 4 | 4 | 3 | 3 | 1 | — |
|
||||
| 9 | 4 | 4 | 3 | 3 | 2 | — |
|
||||
| 11 | 4 | 4 | 3 | 3 | 3 | 1 |
|
||||
| 17 | 4 | 4 | 3 | 3 | 3 | 3 |
|
||||
| 20 | 5 | 4 | 3 | 3 | 3 | 3 |
|
||||
|
||||
### Ranger Spell Slots
|
||||
| Level | Spells Known | 1st | 2nd | 3rd |
|
||||
|---|---|---|---|---|
|
||||
| 2 | 2 | 2 | — | — |
|
||||
| 5 | 3 | 3 | — | — |
|
||||
| 7 | 4 | 3 | 1 | — |
|
||||
| 9 | 5 | 3 | 2 | — |
|
||||
| 13 | 6 | 3 | 2 | 1 |
|
||||
| 17 | 7 | 3 | 2 | 2 |
|
||||
| 20 | 8 | 3 | 3 | 2 |
|
||||
|
||||
Rangers are half-casters. Spell slots reset on long rest only.
|
||||
|
||||
---
|
||||
|
||||
## 2. Concentration
|
||||
|
||||
Some spells require **Concentration** — they persist until dropped or broken.
|
||||
|
||||
- Only one Concentration spell may be active at a time. Casting a second ends the first.
|
||||
- Taking damage while Concentrating requires a **CON save (DC = 10 or half damage taken, whichever is higher)**. Failure ends the spell.
|
||||
- Dropping Concentration voluntarily costs no action.
|
||||
- Flagged in spell entries with `[C]`.
|
||||
|
||||
---
|
||||
|
||||
## 3. Cantrips
|
||||
|
||||
Cantrips cost no spell slots. Usable unlimited times per day.
|
||||
|
||||
| Cantrip | Classes | Damage / Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Fire Bolt** | Mage | 1d10 fire (scales: 2d10 at Lv5, 3d10 at Lv11) | Ranged spell attack |
|
||||
| **Toll the Dead** | Mage, Cleric | 1d8 necrotic; 1d12 if target missing HP | WIS save for half |
|
||||
| **Chill Touch** | Mage, Cleric | 1d8 necrotic; target can't heal until next turn | Ranged spell attack |
|
||||
| **Poison Spray** | Mage | 1d12 poison | CON save or full damage; melee range |
|
||||
| **Shocking Grasp** | Mage | 1d8 lightning; target loses Reaction | Advantage vs. metal armor |
|
||||
| **Sacred Flame** | Cleric | 1d8 radiant | DEX save; ignores cover |
|
||||
| **Guidance** | Cleric, Ranger | +1d4 to one ability check (self or ally) | [C] |
|
||||
| **Shillelagh** | Ranger, Cleric | Club/staff uses WIS for attack+damage; 1d8 | Bonus action; [C] |
|
||||
| **Thorn Whip** | Ranger | 1d6 piercing; pull target 10 ft | Ranged; melee range |
|
||||
| **Mending** | All casters | Repair one non-magical item | Out of combat only |
|
||||
| **Message** | Mage | Whisper to target up to 120 ft | Utility |
|
||||
| **Minor Illusion** | Mage | Create a sound or image | Utility; Investigation DC 14 to disbelieve |
|
||||
|
||||
---
|
||||
|
||||
## 4. 1st Level Spells
|
||||
|
||||
### Mage — 1st Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Magic Missile** | 1st | 3 darts × 1d4+1 force; auto-hit | +1 dart per slot above 1st |
|
||||
| **Thunderwave** | 1st | 2d8 thunder in 15 ft cube; push 10 ft | CON save half; loud (+8 Threat Clock) |
|
||||
| **Mage Armor** | 1st | AC = 13 + DEX mod (no armor required) | 8 hours; [C] |
|
||||
| **Burning Hands** | 1st | 3d6 fire in 15 ft cone | DEX save half |
|
||||
| **Detect Magic** | 1st | Sense magic within 30 ft | [C]; ritual castable (no slot) |
|
||||
| **Fog Cloud** | 1st | 20 ft radius heavily obscured | [C]; all attacks inside have disadvantage |
|
||||
| **Grease** | 1st | 10 ft square; DEX save or Prone | Difficult terrain while active |
|
||||
| **Shield** | 1st | +5 AC as Reaction until next turn | Reaction spell |
|
||||
| **Sleep** | 1st | Incapacitate creatures totaling 5d8 HP (weakest first) | HP threshold; mindless immune |
|
||||
| **Chromatic Orb** | 1st | 3d8 of chosen damage type | Ranged spell attack |
|
||||
|
||||
### Cleric — 1st Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Cure Wounds** | 1st | Heal 1d8 + WIS mod HP | Touch; +1d8 per slot above 1st |
|
||||
| **Bless** | 1st | 3 targets: +1d4 to attack rolls and saves | [C]; 1 min |
|
||||
| **Inflict Wounds** | 1st | 3d10 necrotic | Melee spell attack; +1d10 per slot above 1st |
|
||||
| **Guiding Bolt** | 1st | 4d6 radiant; next attack on target has advantage | Ranged spell attack; +1d6 per slot |
|
||||
| **Shield of Faith** | 1st | +2 AC to one target | [C]; bonus action; 10 min |
|
||||
| **Healing Word** | 1st | 1d4 + WIS mod HP (bonus action) | Range 60 ft; +1d4 per slot above 1st |
|
||||
| **Command** | 1st | One-word command (Flee, Grovel, Halt, etc.) | WIS save negates; 1 turn |
|
||||
| **Protection from Evil and Good** | 1st | Aberrations, fiends, undead have disadvantage vs. target | [C] |
|
||||
|
||||
### Ranger — 1st Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Hunter's Mark** | 1st | +1d6 damage to marked target; track as bonus action | [C]; bonus action; 1 hr |
|
||||
| **Ensnaring Strike** | 1st | On hit: STR save or Restrained; 1d6/turn | [C]; bonus action before attack |
|
||||
| **Fog Cloud** | 1st | 20 ft radius heavily obscured | [C] |
|
||||
| **Speak with Animals** | 1st | Communicate with beasts | Ritual; 10 min; useful in Forest/Feywild |
|
||||
| **Absorb Elements** | 1st | Reaction: resistance to incoming elemental damage; +1d6 on next hit | Reaction spell |
|
||||
| **Cure Wounds** | 1st | 1d8 + WIS mod HP | Touch |
|
||||
|
||||
---
|
||||
|
||||
## 5. 2nd Level Spells
|
||||
|
||||
### Mage — 2nd Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Scorching Ray** | 2nd | 3 rays × 2d6 fire; each is a separate attack roll | +1 ray per slot above 2nd |
|
||||
| **Mirror Image** | 2nd | 3 duplicates; attackers roll to hit duplicate (roll d20: 6+ hit duplicate) | No [C]; duplicates absorb hits |
|
||||
| **Misty Step** | 2nd | Bonus action teleport up to 30 ft | Bypasses OA and difficult terrain |
|
||||
| **Hold Person** | 2nd | Paralyzed; auto-crit on melee hits while held | WIS save; [C]; +1 target per slot above 2nd |
|
||||
| **Shatter** | 2nd | 3d8 thunder in 10 ft sphere | CON save half; extra damage to objects/constructs |
|
||||
| **Blur** | 2nd | All attacks vs. you have disadvantage | [C] |
|
||||
| **Web** | 2nd | 20 ft cube; Restrained (STR DC to escape) | [C]; flammable |
|
||||
| **Levitate** | 2nd | Float up to 20 ft; immune to ground-based effects | [C]; CON save to resist if unwilling |
|
||||
| **Knock** | 2nd | Open any mundane lock or magically sealed door | Loud (+5 Threat Clock) |
|
||||
|
||||
### Cleric — 2nd Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Spiritual Weapon** | 2nd | Bonus action: spectral weapon attacks for 1d8+WIS each turn | No [C]; 1 min; +1d8 per 2 slots above 2nd |
|
||||
| **Hold Person** | 2nd | Paralyzed; auto-crit melee | WIS save; [C] |
|
||||
| **Lesser Restoration** | 2nd | Remove one condition (Blinded, Deafened, Paralyzed, Poisoned) | Touch |
|
||||
| **Prayer of Healing** | 2nd | Heal up to 6 targets 2d8 + WIS mod HP | 10 min cast; out of combat only |
|
||||
| **Silence** | 2nd | No sound in 20 ft sphere; no verbal spells | [C]; -8 Threat Clock if used strategically |
|
||||
| **Aid** | 2nd | 3 targets: +5 max HP and current HP | 8 hr; +5 HP per slot above 2nd |
|
||||
| **Augury** | 2nd | Omen about action in next 30 min: Weal/Woe/Both/Neither | Ritual; TwinBee delivers cryptic answer |
|
||||
|
||||
### Ranger — 2nd Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Pass Without Trace** | 2nd | +10 to Stealth; can't be tracked magically | [C]; -5 Threat Clock per room while active |
|
||||
| **Spike Growth** | 2nd | 20 ft radius; 2d4 per 5 ft moved through | [C]; Difficult terrain |
|
||||
| **Silence** | 2nd | No sound; no verbal spells in area | [C] |
|
||||
| **Beast Sense** | 2nd | See/hear through a beast's senses | [C]; ritual |
|
||||
| **Cordon of Arrows** | 2nd | 4 arrows guard area; fire on intruders (1d6+DEX) | 8 hr |
|
||||
| **Find Traps** | 2nd | Detect presence of traps within 120 ft | Doesn't reveal details; no [C] |
|
||||
|
||||
---
|
||||
|
||||
## 6. 3rd Level Spells
|
||||
|
||||
### Mage — 3rd Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Fireball** | 3rd | 8d6 fire in 20 ft radius | DEX save half; +1d6 per slot; very loud (+12 Threat Clock) |
|
||||
| **Lightning Bolt** | 3rd | 8d6 lightning in 100 ft line | DEX save half; +1d6 per slot; loud (+10 Threat Clock) |
|
||||
| **Counterspell** | 3rd | Reaction: cancel a spell of 3rd level or lower | Higher level: INT check DC 10+spell level |
|
||||
| **Fly** | 3rd | Target gains 60 ft fly speed | [C]; 10 min; bypasses ground traps |
|
||||
| **Hypnotic Pattern** | 3rd | Creatures in 30 ft cube: Incapacitated, speed 0 | WIS save; [C]; breaks on damage |
|
||||
| **Dispel Magic** | 3rd | End one magical effect on target | Auto for ≤3rd level; ability check for higher |
|
||||
| **Slow** | 3rd | Up to 6 targets: halve speed, -2 AC, no reactions, 1 action or bonus | WIS save; [C] |
|
||||
| **Animate Dead** | 3rd | Animate up to 3 corpses as skeletons/zombies | Cleric/Mage; control 24 hr; re-cast to extend |
|
||||
|
||||
### Cleric — 3rd Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Spirit Guardians** | 3rd | 15 ft aura: 3d8 radiant/necrotic per turn to enemies | WIS save half; [C]; +1d8 per slot above 3rd |
|
||||
| **Revivify** | 3rd | Restore a creature dead less than 1 minute to 1 HP | Requires 300-coin diamond component |
|
||||
| **Dispel Magic** | 3rd | End one magical effect | — |
|
||||
| **Mass Healing Word** | 3rd | Up to 6 targets: 1d4+WIS mod HP (bonus action) | Range 60 ft |
|
||||
| **Beacon of Hope** | 3rd | Targets have advantage on WIS saves and death saves; max healing | [C]; 1 min |
|
||||
| **Animate Dead** | 3rd | Animate up to 3 undead | 24 hr control |
|
||||
| **Remove Curse** | 3rd | End one curse on target or object | Removes attunement to cursed items |
|
||||
|
||||
### Ranger — 3rd Level
|
||||
| Spell | Slots | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Lightning Arrow** | 3rd | Ranged attack: 4d8 lightning on hit; 2d8 to creatures within 10 ft | Bonus action before attack |
|
||||
| **Conjure Barrage** | 3rd | Throw a weapon: 3d8 of weapon type in 60 ft cone | DEX save half |
|
||||
| **Water Walk** | 3rd | Up to 10 targets walk on liquid surfaces | Ritual; 1 hr |
|
||||
| **Plant Growth** | 3rd | 100 ft radius: Difficult terrain; or enhance crops | Ritual (crop version); instant (terrain version) |
|
||||
| **Nondetection** | 3rd | Target undetectable by divination magic | 8 hr; useful in Underdark/Abyss Portal |
|
||||
|
||||
---
|
||||
|
||||
## 7. 4th Level Spells (Mage / Cleric)
|
||||
|
||||
| Spell | Class | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Banishment** | Cleric | Send extraplanar creature to home plane temporarily | CHA save; [C]; permanent if held 1 min — critical in Abyss Portal |
|
||||
| **Polymorph** | Mage | Transform target into beast | WIS save if unwilling; [C]; max CR = target's level |
|
||||
| **Ice Storm** | Mage | 2d8 bludgeoning + 4d6 cold in 20 ft cylinder | DEX save half; Difficult terrain afterward |
|
||||
| **Wall of Fire** | Mage | 60 ft wall; 5d8 fire to those passing through | [C]; DEX save half; doubles as zone control |
|
||||
| **Greater Invisibility** | Mage | Target invisible; attacks have advantage; can't be targeted | [C]; 1 min |
|
||||
| **Guardian of Faith** | Cleric | Spectral guardian deals 20 radiant to approaching enemies | 50 total damage then vanishes; no [C] |
|
||||
| **Death Ward** | Cleric | Next time target would drop to 0 HP: drops to 1 instead | 8 hr; one-use |
|
||||
| **Freedom of Movement** | Cleric, Ranger | Target ignores Difficult terrain, paralysis, restraint | 1 hr |
|
||||
|
||||
---
|
||||
|
||||
## 8. 5th Level Spells (Mage / Cleric)
|
||||
|
||||
| Spell | Class | Effect | Notes |
|
||||
|---|---|---|---|
|
||||
| **Cone of Cold** | Mage | 8d8 cold in 60 ft cone | CON save half |
|
||||
| **Hold Monster** | Mage | Paralyze any creature type (not just humanoid) | WIS save; [C]; auto-crit melee |
|
||||
| **Wall of Force** | Mage | Invisible impenetrable wall | [C]; nothing passes — including spells |
|
||||
| **Scrying** | Mage, Cleric | Observe target at any distance | WIS save; [C]; useful for pre-boss recon |
|
||||
| **Mass Cure Wounds** | Cleric | Up to 6 targets: 3d8+WIS mod HP | Range 60 ft |
|
||||
| **Flame Strike** | Cleric | 4d6 fire + 4d6 radiant in 10 ft cylinder | DEX save half |
|
||||
| **Divine Word** | Cleric | Targets suffer effects based on current HP | WIS save negates; kills below 20 HP |
|
||||
| **Raise Dead** | Cleric | Restore a creature dead up to 10 days | Requires 500-coin diamond; target -4 to all rolls for 4 days |
|
||||
|
||||
---
|
||||
|
||||
## 9. Spell Rules — Bot Context
|
||||
|
||||
### Casting in Combat
|
||||
- Casting a spell of 1st level or higher uses the **Action** (unless Bonus Action spell or Reaction spell)
|
||||
- Bonus action spells: if you cast a bonus action spell, any other spell cast this turn must be a cantrip
|
||||
- Reaction spells (Shield, Counterspell, Absorb Elements) fire outside your turn and consume your Reaction
|
||||
|
||||
### Verbal / Material Components
|
||||
- All spells with Verbal components fail in a **Silence** zone
|
||||
- Spells with Material components require either a **Spell Component Pouch** or **Arcane Focus** (Mage) / **Holy Symbol** (Cleric)
|
||||
- Ranger spells use nature focus — no separate item required
|
||||
- Expensive material components (Revivify, Raise Dead) are tracked as consumed inventory items
|
||||
|
||||
### Spell Save DC
|
||||
```
|
||||
Spell Save DC = 8 + proficiency bonus + spellcasting modifier
|
||||
Mage: INT modifier
|
||||
Cleric: WIS modifier
|
||||
Ranger: WIS modifier
|
||||
```
|
||||
|
||||
### Spell Attack Bonus
|
||||
```
|
||||
Spell Attack Bonus = proficiency bonus + spellcasting modifier
|
||||
```
|
||||
|
||||
### Upcasting
|
||||
Spells marked with "per slot above Xth" scale when cast at higher levels. The bot handles upcast selection automatically on `!cast <spell> --upcast <level>`.
|
||||
|
||||
---
|
||||
|
||||
## 10. Go Data Structures
|
||||
|
||||
```go
|
||||
type KnownSpell struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
SpellID string `json:"spell_id"`
|
||||
Level int `json:"level"` // spell level (0 = cantrip)
|
||||
Source string `json:"source"` // class, subclass, racial
|
||||
Prepared bool `json:"prepared"` // Cleric must prepare daily; Mage knows fixed list
|
||||
}
|
||||
|
||||
type SpellSlotState struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
Slots map[int]SlotPair `json:"slots"` // key = spell level
|
||||
}
|
||||
|
||||
type SlotPair struct {
|
||||
Total int `json:"total"`
|
||||
Used int `json:"used"`
|
||||
}
|
||||
|
||||
type ActiveConcentration struct {
|
||||
PlayerID string `json:"player_id"`
|
||||
SpellID string `json:"spell_id"`
|
||||
ExpiresAt time.Time `json:"expires_at"`
|
||||
SaveDC int `json:"save_dc"` // for concentration checks on damage
|
||||
}
|
||||
|
||||
type SpellDefinition struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Level int `json:"level"`
|
||||
School string `json:"school"`
|
||||
Classes []string `json:"classes"`
|
||||
CastingTime string `json:"casting_time"` // action, bonus_action, reaction
|
||||
Range string `json:"range"`
|
||||
Concentration bool `json:"concentration"`
|
||||
Duration string `json:"duration"`
|
||||
SaveStat string `json:"save_stat"` // empty if attack roll
|
||||
AttackRoll bool `json:"attack_roll"`
|
||||
Description string `json:"description"`
|
||||
Upcast string `json:"upcast"` // scaling description
|
||||
Components []string `json:"components"` // V, S, M
|
||||
MaterialCost int `json:"material_cost"` // coins if expensive component
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. Implementation Phases
|
||||
|
||||
### Phase SP1 — Core Spell Infrastructure
|
||||
- [ ] `SpellDefinition` registry (all spells this doc)
|
||||
- [ ] `KnownSpell` and `SpellSlotState` structs and DB schema
|
||||
- [ ] `!cast <spell>` command with slot consumption
|
||||
- [ ] Cantrip handling (no slot cost)
|
||||
- [ ] Spell save DC and spell attack bonus calculation
|
||||
|
||||
### Phase SP2 — Concentration System
|
||||
- [ ] `ActiveConcentration` struct
|
||||
- [ ] Concentration check on damage (CON save)
|
||||
- [ ] Casting second concentration spell ends first
|
||||
- [ ] TwinBee narrates concentration breaks
|
||||
|
||||
### Phase SP3 — Advanced Spell Rules
|
||||
- [ ] Upcasting (`!cast fireball --upcast 4`)
|
||||
- [ ] Bonus action spell restriction
|
||||
- [ ] Reaction spells (Shield, Counterspell, Absorb Elements)
|
||||
- [ ] Silence zone interaction
|
||||
- [ ] Material component consumption (expensive components)
|
||||
|
||||
### Phase SP4 — Prepared Spells (Cleric)
|
||||
- [ ] Cleric daily preparation (`!prepare <spell>`)
|
||||
- [ ] Prepared spell limit = WIS mod + Cleric level
|
||||
- [ ] Rest resets preparation choices
|
||||
|
||||
---
|
||||
*End of Spell System.*
|
||||
@@ -1,258 +0,0 @@
|
||||
# GogoBee — Subclass System
|
||||
> **Companion to:** `gogobee_dnd_design_doc.md`
|
||||
> **Version:** 1.0
|
||||
> **Trigger:** Level 5 subclass selection prompt
|
||||
|
||||
---
|
||||
|
||||
## 1. Selection
|
||||
|
||||
At Level 5, players receive a subclass selection prompt. Choice is permanent unless `!respec` is used (cooldown: 30 days; cost: 500 coins).
|
||||
|
||||
```
|
||||
⚔️ You have reached Level 5.
|
||||
Choose your path:
|
||||
|
||||
[Fighter]
|
||||
[1] Champion — Raw power, brutal efficiency
|
||||
[2] Battle Master — Tactical superiority, maneuver control
|
||||
[3] Berserker — Rage-fueled destruction, high risk/reward
|
||||
|
||||
Reply with a number or name.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Fighter Subclasses
|
||||
|
||||
### Champion
|
||||
*Raw power. Higher crit chance. Wins by hitting harder and surviving longer.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Improved Critical** | Crit on natural 19 or 20 (instead of 20 only) |
|
||||
| 7 | **Remarkable Athlete** | +proficiency bonus to STR/DEX/CON checks not already proficient |
|
||||
| 10 | **Additional Fighting Style** | Choose a second fighting style: Dueling (+2 melee damage one-handed), Great Weapon (reroll 1s and 2s on damage), Archery (+2 ranged attack rolls), Defense (+1 AC in armor) |
|
||||
| 15 | **Superior Critical** | Crit on 18, 19, or 20 |
|
||||
|
||||
### Battle Master
|
||||
*Tactical control. Maneuver dice fuel special attacks that debuff, reposition, or devastate enemies.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Maneuver Dice** | Gain 4d8 Superiority Dice per short rest. Fuel maneuvers. |
|
||||
| 5 | **Maneuvers (pick 3)** | See maneuver list below |
|
||||
| 7 | **Know Your Enemy** | After 1 min observation: learn 2 of target's stats vs. yours |
|
||||
| 10 | **Improved Maneuvers** | Superiority Dice become d10; learn 2 more maneuvers |
|
||||
| 15 | **Relentless** | On initiative if no Superiority Dice: regain 1 |
|
||||
|
||||
**Battle Master Maneuvers (choose 3 at Level 5, +2 at Level 10):**
|
||||
|
||||
| Maneuver | Cost | Effect |
|
||||
|---|---|---|
|
||||
| Disarming Attack | 1 die | On hit: +die damage; STR save or drop weapon (disadvantage next attack) |
|
||||
| Tripping Attack | 1 die | On hit: +die damage; STR save or Prone |
|
||||
| Pushing Attack | 1 die | On hit: +die damage; STR save or pushed 15 ft |
|
||||
| Menacing Attack | 1 die | On hit: +die damage; WIS save or Frightened until end of your next turn |
|
||||
| Precision Attack | 1 die | Add die to one attack roll (before or after rolling) |
|
||||
| Parry | 1 die | Reaction: reduce damage taken by die + DEX mod |
|
||||
| Rally | 1 die | Bonus action: give ally temp HP equal to die + CHA mod |
|
||||
| Goading Attack | 1 die | On hit: +die damage; WIS save or disadvantage on attacks against anyone except you |
|
||||
| Riposte | 1 die | Reaction when missed: make one melee attack; add die to damage |
|
||||
| Commander's Strike | 1 die | Bonus action: ally makes one attack using Reaction; add die to their damage |
|
||||
|
||||
### Berserker
|
||||
*Rage. More rage. Everything hurts including you but you hit harder.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Frenzy** | While Raging: make one bonus melee attack per turn; after rage: gain 1 Exhaustion level |
|
||||
| 5 | **Rage** | Bonus action: +2 melee damage; resistance to physical damage; advantage on STR checks/saves; 1 min; 3 uses per long rest |
|
||||
| 7 | **Mindless Rage** | While Raging: immune to Charmed and Frightened |
|
||||
| 10 | **Intimidating Presence** | Action: WIS DC (8+prof+CHA) or target Frightened 1 min |
|
||||
| 15 | **Retaliation** | Reaction: when taking damage, make one melee attack against attacker |
|
||||
|
||||
---
|
||||
|
||||
## 3. Rogue Subclasses
|
||||
|
||||
### Thief
|
||||
*Speed and opportunism. Best at looting, pickpocketing, and using items faster than anyone.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Fast Hands** | Bonus action: Sleight of Hand check, use thieves' tools, or Use Object |
|
||||
| 5 | **Second Story Work** | Climb speed = full speed; running jump distance +DEX mod ft |
|
||||
| 7 | **Supreme Sneak** | Advantage on Stealth if moving at half speed |
|
||||
| 10 | **Use Magic Device** | Ignore class/race restrictions on magic items |
|
||||
| 15 | **Thief's Reflexes** | Take two turns in first combat round (normal initiative + initiative -10) |
|
||||
|
||||
### Assassin
|
||||
*Setup and execution. Pre-combat advantage pays off in devastating opening strikes.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Assassinate** | Advantage vs. creatures that haven't acted yet; crits vs. surprised targets |
|
||||
| 5 | **Infiltration Expertise** | Craft a false identity (useful for NPC skill checks) |
|
||||
| 7 | **Impostor** | Perfectly mimic voice/behavior after 3 hours study |
|
||||
| 10 | **Death Strike** | On crit vs. surprised target: target must CON save (DC 8+prof+DEX) or take double damage |
|
||||
| 15 | **Shadow Step (Assassin)** | Bonus action teleport between dim/dark areas up to 60 ft |
|
||||
|
||||
### Arcane Trickster
|
||||
*Magic plus stealth. The most versatile Rogue build; some spellcasting.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Spellcasting** | Gain Mage cantrips (2) and 1st level spells (3 slots); INT-based |
|
||||
| 5 | **Mage Hand Legerdemain** | Mage Hand is invisible; can pickpocket, disarm traps, retrieve items remotely |
|
||||
| 7 | **Magical Ambush** | If hidden when casting: targets have disadvantage on the save |
|
||||
| 10 | **Versatile Trickster** | Use Mage Hand to give yourself advantage on one creature's attack roll or ability check |
|
||||
| 15 | **Spell Thief** | Reaction: steal a spell just cast against you (INT save to resist for caster) |
|
||||
|
||||
---
|
||||
|
||||
## 4. Mage Subclasses
|
||||
|
||||
### Evocation
|
||||
*Pure damage output. The glass cannon perfected.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Sculpt Spells** | When casting AoE: choose up to (1 + spell level) creatures to auto-succeed the save |
|
||||
| 5 | **Potent Cantrip** | Cantrip saves that succeed still deal half damage |
|
||||
| 7 | **Empowered Evocation** | Add INT mod to damage of all Mage evocation spells |
|
||||
| 10 | **Overchannel** | Maximize damage dice of a 1st–5th level spell (once per turn; above 1st level = take 2d12 necrotic per level above 1st) |
|
||||
| 15 | **Sculptural Mastery** | Sculpt Spells now affects double the number of creatures |
|
||||
|
||||
### Abjuration
|
||||
*Defensive Mage. Wards, shields, and counterspells.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Arcane Ward** | When casting abjuration spell: create ward with HP = 2× Mage level; absorbs damage before player does |
|
||||
| 5 | **Projected Ward** | Use Reaction: extend Arcane Ward to protect one ally hit by attack |
|
||||
| 7 | **Improved Abjuration** | Proficiency bonus to Arcane Ward HP; bonus to Counterspell/Dispel Magic checks |
|
||||
| 10 | **Spell Resistance** | Advantage on saves vs. spells; resistance to spell damage |
|
||||
| 15 | **Spell Reflection** | Counterspell can redirect the spell back at the caster |
|
||||
|
||||
### Necromancy
|
||||
*Control undead and drain life. High synergy with Crypt of Valdris zone.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Grim Harvest** | When killing with a spell: heal HP equal to twice spell level (three times for necrotic) |
|
||||
| 5 | **Undead Thralls** | Animate Dead creates one extra undead; undead gain +proficiency bonus to damage |
|
||||
| 7 | **Inured to Undeath** | Resistance to necrotic damage; max HP can't be reduced |
|
||||
| 10 | **Command Undead** | Attempt to take control of any undead (CHA save DC 8+prof+INT) |
|
||||
| 15 | **Improved Undead Thralls** | Undead thralls gain +CON mod to HP and attack bonus |
|
||||
|
||||
---
|
||||
|
||||
## 5. Cleric Subclasses
|
||||
|
||||
### Life Domain
|
||||
*Maximum healing output. Party support anchor.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Disciple of Life** | Healing spells restore additional HP equal to 2 + spell level |
|
||||
| 5 | **Preserve Life** | Channel Divinity: restore HP to any creatures within 30 ft up to half max HP; total pool = 5× Cleric level |
|
||||
| 7 | **Blessed Healer** | When casting healing spell on ally: heal yourself for 2–5 HP |
|
||||
| 10 | **Divine Strike** | Once per turn: +1d8 radiant on weapon hit (+2d8 at Level 14) |
|
||||
| 15 | **Supreme Healing** | Instead of rolling healing spell dice: use maximum value |
|
||||
|
||||
### War Domain
|
||||
*Combat Cleric. Extra attacks, martial weapons, armor.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **War Priest** | Bonus action: make one weapon attack; usable WIS mod times per long rest |
|
||||
| 5 | **Guided Strike** | Channel Divinity: +10 to one attack roll (after rolling, before resolving) |
|
||||
| 7 | **War God's Blessing** | Reaction: grant ally +10 to their attack roll |
|
||||
| 10 | **Divine Strike** | +1d8 weapon-type damage on weapon hit (+2d8 at Level 14) |
|
||||
| 15 | **Avatar of Battle** | Resistance to bludgeoning, piercing, slashing from non-magical weapons |
|
||||
|
||||
### Trickery Domain
|
||||
*Illusion, misdirection, and chaos. High-risk high-reward Cleric.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Blessing of the Trickster** | Give one creature advantage on Stealth for 1 hr (1/rest) |
|
||||
| 5 | **Invoke Duplicity** | Channel Divinity: create illusory duplicate; cast spells from its position; +advantage on attacks vs. creatures adjacent to it |
|
||||
| 7 | **Cloak of Shadows** | Become Invisible as action (until attack, spell, or end of next turn) |
|
||||
| 10 | **Divine Strike** | +1d8 poison damage on weapon hit |
|
||||
| 15 | **Improved Duplicity** | Spawn up to 4 duplicates; each ally adjacent to a duplicate has advantage on attacks |
|
||||
|
||||
---
|
||||
|
||||
## 6. Ranger Subclasses
|
||||
|
||||
### Hunter
|
||||
*Zone specialist. Bonuses against specific enemy types stack with zone familiarity.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Hunter's Prey** | Choose one: Colossus Slayer (+1d8 vs. target below max HP), Giant Killer (Reaction attack when Large+ misses you), Horde Breaker (attack second adjacent creature once per turn) |
|
||||
| 7 | **Defensive Tactics** | Choose one: Escape the Horde (OA against you have disadvantage), Multiattack Defense (+4 AC after being hit by multiattack), Steel Will (advantage vs. Frightened) |
|
||||
| 10 | **Multiattack** | Choose one: Volley (ranged attack all creatures in 10 ft radius) or Whirlwind Attack (melee attack all within 5 ft) |
|
||||
| 15 | **Superior Hunter's Defense** | Choose one: Evasion, Stand Against the Tide (on OA hit: redirect to different adjacent creature), Uncanny Dodge |
|
||||
|
||||
### Beast Master
|
||||
*Deep Ranger–pet bond. Pet becomes a true combat partner.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Ranger's Companion** | Pet gains: +proficiency to attack/saves; acts on your initiative; follows tactical commands |
|
||||
| 5 | **Exceptional Training** | Bonus action: command pet to Dash, Disengage, Dodge, or Help |
|
||||
| 7 | **Bestial Fury** | Pet makes 2 attacks when commanded to attack |
|
||||
| 10 | **Share Spells** | Spells targeting self also affect pet if within 30 ft |
|
||||
| 15 | **Superior Bond** | Pet can't be charmed or frightened; pet survives death (returns at next long rest at 1 HP) |
|
||||
|
||||
### Gloom Stalker
|
||||
*Darkness specialist. Exceptional in underground zones and night phases.*
|
||||
|
||||
| Level | Ability | Effect |
|
||||
|---|---|---|
|
||||
| 5 | **Dread Ambusher** | +initiative bonus equal to WIS mod; +1 attack in first combat round; +1d8 damage on that extra attack |
|
||||
| 5 | **Umbral Sight** | Darkvision 60 ft; creatures with darkvision can't see you in darkness |
|
||||
| 7 | **Iron Mind** | Proficiency in WIS saves (or +1 if already proficient) |
|
||||
| 10 | **Stalker's Flurry** | When you miss: immediately make another attack against same target |
|
||||
| 15 | **Shadowy Dodge** | Reaction when attacked: impose disadvantage on the attack |
|
||||
|
||||
---
|
||||
|
||||
## 7. Subclass Flavor Prompts
|
||||
|
||||
Each subclass selection triggers a TwinBee narration line and a one-line flavor acknowledgment in the player's character sheet. Examples:
|
||||
|
||||
- **Champion:** *"You've chosen the old way. No tricks, no systems. Just you, and the blade, and the next hit. TwinBee approves of this directness."*
|
||||
- **Arcane Trickster:** *"Magic in the hands of a Rogue. TwinBee considers this the universe's way of apologizing for giving you low HP."*
|
||||
- **Necromancer:** *"Undeath as a tool rather than a state. TwinBee has opinions about this. TwinBee is keeping them to itself."*
|
||||
- **Beast Master:** *"You and your pet, all the way down. TwinBee finds this genuinely moving and declines to be embarrassed about that."*
|
||||
- **Gloom Stalker:** *"You were already good in the dark. Now you're better. TwinBee notes: the Underdark is waiting."*
|
||||
|
||||
---
|
||||
|
||||
## 8. Implementation Phases
|
||||
|
||||
### Phase SUB1 — Selection System
|
||||
- [ ] Level 5 subclass prompt (per class)
|
||||
- [ ] Subclass record stored on character sheet
|
||||
- [ ] `!respec` command (cooldown + cost)
|
||||
|
||||
### Phase SUB2 — Ability Implementation
|
||||
- [x] Fighter (SUB2a-i) and Rogue Assassin/Battle Master (SUB2a-ii) L5/L7
|
||||
- [x] Arcane Trickster spellcasting (SUB2-AT)
|
||||
- [x] Mage subclasses L5/L7 (SUB2b)
|
||||
- [x] Cleric subclasses L5/L7 + Channel Divinity (SUB2c)
|
||||
- [x] Ranger subclasses L5/L7 (SUB2d)
|
||||
- [x] Berserker Rage mechanic and Exhaustion tracking
|
||||
|
||||
### Phase SUB3 — Advanced Abilities
|
||||
- [x] Level 10 and 15 abilities per subclass (all 15 subclasses)
|
||||
- [x] Battle Master maneuver dice system (SUB2a-ii)
|
||||
- [x] Arcane Trickster spellcasting integration (SUB2-AT)
|
||||
- [x] Beast Master full combat pet participation (SUB3d Superior Bond)
|
||||
|
||||
---
|
||||
*End of Subclass System.*
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,450 +0,0 @@
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-0","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-1","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-2","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-3","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":6,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-4","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-5","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-6","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-7","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-8","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Scrap Iron":3,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-9","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":2,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":21,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":4,"Scrap Iron":12},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-0","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Beast Pelt":1,"Corrupted Fey Bloom":3,"Darkwood":3,"Gloomfin":2,"Shadow Herb":3,"Shadow Trout":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-1","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Darkwood":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-2","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-3","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Corrupted Fey Bloom":1,"Darkwood":2,"Owlbear Feather":1,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-4","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":3,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-5","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-6","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-7","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":1,"Corrupted Fey Bloom":1,"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-8","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Owlbear Feather":1,"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-9","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-0","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-1","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ghost Silk":2,"Grave Dust (spectral)":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-2","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-3","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":12,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-4","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":5,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-5","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-6","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-7","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":3,"Grave Dust (spectral)":8,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-8","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-9","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-0","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-1","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-2","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-3","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-4","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-5","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-6","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-7","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-8","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-9","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-0","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-1","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-2","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-3","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-4","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-5","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-6","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-7","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-8","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-9","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":42,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-0","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":90,"EndHP":48,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":4,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-1","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":90,"EndHP":43,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":12,"YieldCount":7,"YieldsByName":{"Goblin Alchemy Pouch":3,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-2","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":37,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-3","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":39,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-4","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":5,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-5","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":32,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":6,"YieldsByName":{"Goblin Alchemy Pouch":4,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-6","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":15,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-7","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":7,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":1,"YieldsByName":{"Crude Weapon Cache":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-8","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":41,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-9","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":90,"EndHP":29,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":12,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Scrap Iron":4,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-0","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Darkwood":4,"Owlbear Feather":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-1","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Darkwood":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-2","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Gloomfin":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-3","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-4","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":2,"Corrupted Fey Bloom":1,"Shadow Herb":8},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-5","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-6","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Gloomfin":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-7","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-8","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Phantom Carp":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-9","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Beast Pelt":2,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":2,"Darkwood":2,"Owlbear Feather":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-0","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":25,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-1","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-2","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-3","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":36,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-4","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":1,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-5","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-6","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-7","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-8","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-9","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-0","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Mind Flayer Brain Matter":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-1","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-2","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":2,"Deep Dragon Scale Chip":1,"Underdark Mushroom":2,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-3","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":3,"Glowing Cave Eel":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-4","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Faerzress Crystal":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-5","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-6","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":6,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-7","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-8","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-9","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Cave Spider Silk":1,"Deep Dragon Scale Chip":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-0","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":6,"Dragonfire Coal":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-1","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-2","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-3","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-4","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Ancient Gold Coin":8,"Drake Blood":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-5","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Ancient Gold Coin":7,"Dragon Scale Fragment":1,"Drake Blood":1,"Kobold Trap Mechanism":1,"Volcanic Gem":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-6","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":2,"Kobold Trap Mechanism":1,"Volcanic Gem":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-7","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-8","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-9","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":3,"StartHP":90,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-0","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":72,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-1","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":150,"EndHP":98,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":6,"YieldsByName":{"Goblin Alchemy Pouch":2,"Scrap Iron":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-2","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":80,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":5,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-3","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":77,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-4","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":118,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-5","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":113,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-6","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":85,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-7","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-8","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":150,"EndHP":87,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":12,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":1,"Scrap Iron":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-9","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":150,"EndHP":88,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":21,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Shaman's Reagents":1,"Scrap Iron":8,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-0","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":18,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":2,"Corrupted Fey Bloom":3,"Darkwood":1,"Gloomfin":1,"Shadow Herb":10},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-1","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-2","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-3","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":1,"Corrupted Fey Bloom":2,"Darkwood":1,"Gloomfin":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-4","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":3,"Corrupted Fey Bloom":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-5","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Bioluminescent Fungi":2,"Darkwood":1,"Gloomfin":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-6","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Corrupted Fey Bloom":1,"Darkwood":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-7","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Bioluminescent Fungi":1,"Gloomfin":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-8","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Beast Pelt":4,"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-9","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Beast Pelt":1,"Corrupted Fey Bloom":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-0","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-1","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-2","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":6,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-3","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-4","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Grave Dust (spectral)":10,"Shadow Essence":1,"Vampire Ash":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-5","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":5,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-6","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":4,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-7","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-8","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-9","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":5,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-0","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-1","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Underdark Mushroom":4,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-2","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Underdark Mushroom":4,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-3","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-4","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-5","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Cave Spider Silk":2,"Deep Dragon Scale Chip":1,"Faerzress Crystal":1,"Underdark Mushroom":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-6","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-7","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-8","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-9","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-0","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-1","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-2","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":4,"Volcanic Gem":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-3","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-4","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1,"Volcanic Gem":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-5","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":2,"Volcanic Gem":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-6","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-7","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-8","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-9","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":150,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-0","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-1","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":7,"Hobgoblin War Standard":4,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-2","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":2,"Scrap Iron":1,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-3","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":2,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-4","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":12,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-5","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-6","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-7","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":3,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-8","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-9","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-0","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Corrupted Fey Bloom":1,"Darkwood":3,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-1","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Darkwood":1,"Dryad's Tears":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-2","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":3,"Gloomfin":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-3","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-4","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-5","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-6","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-7","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-8","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-9","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-0","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-1","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-2","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-3","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":3,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-4","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":3,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-5","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-6","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":3,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-7","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-8","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-9","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-0","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-1","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-2","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-3","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-4","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-5","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-6","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-7","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-8","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-9","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-0","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-1","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-2","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-3","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-4","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-5","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-6","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-7","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-8","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-9","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":26,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-0","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-1","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-2","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-3","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-4","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":4,"Scrap Iron":1,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-5","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-6","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-7","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-8","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-9","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-0","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-1","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Corrupted Fey Bloom":2,"Phantom Carp":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-2","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Darkwood":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-3","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-4","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-5","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-6","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Gloomfin":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-7","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Bioluminescent Fungi":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-8","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-9","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Bioluminescent Fungi":1,"Dryad's Tears":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-0","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":7,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-1","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Grave Dust (spectral)":7,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-2","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":56,"EndHP":15,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-3","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":5,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-4","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":2,"Ghost Silk":2,"Grave Dust (spectral)":3,"Shadow Essence":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-5","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-6","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-7","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-8","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":5,"Grave Dust (spectral)":4,"Shadow Essence":1,"Vampire Ash":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-9","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":9,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-0","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-1","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-2","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-3","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-4","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-5","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Drow Adamantine":1,"Underdark Mushroom":8},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-6","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-7","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-8","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Cave Spider Silk":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-9","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-0","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-1","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-2","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-3","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-4","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-5","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-6","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-7","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-8","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-9","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":56,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-0","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-1","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":5,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-2","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":47,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-3","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":6,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-4","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":7,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-5","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":4,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-6","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-7","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-8","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":8,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-9","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":16,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":7,"Goblin Shaman's Reagents":1,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-0","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-1","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":30,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-2","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Corrupted Fey Bloom":1,"Darkwood":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-3","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":12,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Corrupted Fey Bloom":3,"Phantom Carp":2,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-4","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":30,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-5","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":1,"Dryad's Tears":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-6","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-7","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":22,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Corrupted Fey Bloom":3,"Darkwood":2,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-8","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-9","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-0","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":5,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-1","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":1,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":6,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-2","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":16,"YieldsByName":{"Blackspire Library Volume":4,"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":9,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-3","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":2,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-4","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":4,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":4,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-5","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":7,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-6","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-7","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-8","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":5,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-9","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Cursed Trinket":2,"Grave Dust (spectral)":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-0","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Cave Spider Silk":2,"Drow Adamantine":1,"Drow Poison (diluted)":1,"Underdark Mushroom":8,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-1","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-2","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":93,"EndHP":26,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-3","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Cave Spider Silk":4,"Drow Adamantine":1,"Drow Poison (diluted)":1,"Faerzress Crystal":1,"Glowing Cave Eel":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-4","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-5","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Mind Flayer Brain Matter":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-6","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Cave Spider Silk":2,"Drow Poison (diluted)":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-7","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-8","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Cave Spider Silk":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-9","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Drow Adamantine":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-0","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-1","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":21,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-2","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-3","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-4","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-5","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-6","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":4,"Dragonfire Coal":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-7","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":2,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-8","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":6,"Dragon Scale Fragment":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-9","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":93,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-0","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-1","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-2","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-3","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-4","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":4,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-5","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-6","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-7","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-8","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":3,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-9","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":1,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-0","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-1","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-2","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-3","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Bioluminescent Fungi":2,"Corrupted Fey Bloom":1,"Darkwood":1,"Gloomfin":2,"Phantom Carp":1,"Shadow Herb":1,"Shadow Trout":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-4","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":7,"DayTicks":4,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-5","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-6","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Bioluminescent Fungi":2,"Corrupted Fey Bloom":4,"Darkwood":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-7","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-8","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Corrupted Fey Bloom":1,"Dryad's Tears":1,"Owlbear Feather":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-9","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-0","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-1","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":6,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-2","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-3","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-4","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":1,"Grave Dust (spectral)":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-5","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-6","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-7","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-8","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":3,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-9","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-0","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-1","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-2","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-3","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-4","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-5","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-6","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-7","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-8","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-9","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-0","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-1","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-2","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-3","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-4","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-5","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-6","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-7","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-8","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-9","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-0","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":34,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-1","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":42,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":10,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":3,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-2","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":25,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-3","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":38,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-4","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":47,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":3,"Scrap Iron":3,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-5","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":46,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-6","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":38,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":5,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":2,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-7","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":15,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-8","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":32,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-9","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":30,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-0","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Darkwood":1,"Dryad's Tears":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-1","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Darkwood":1,"Gloomfin":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-2","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Dryad's Tears":1,"Gloomfin":1,"Owlbear Feather":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-3","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Beast Pelt":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-4","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Corrupted Fey Bloom":1,"Darkwood":1,"Dryad's Tears":1,"Shadow Herb":5,"Shadow Trout":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-5","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Beast Pelt":3,"Darkwood":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-6","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-7","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Dryad's Tears":1,"Shadow Herb":8},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-8","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-9","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-0","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Cursed Trinket":3,"Ghost Silk":2,"Grave Dust (spectral)":4,"Shadow Essence":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-1","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":19,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":4,"Ghost Silk":1,"Grave Dust (spectral)":11,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-2","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":31,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":2,"Ghost Silk":1,"Grave Dust (spectral)":7,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-3","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":3,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-4","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-5","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":16,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":3,"Grave Dust (spectral)":10,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-6","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":20,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":2,"Grave Dust (spectral)":3,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-7","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":4,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-8","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-9","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":6,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-0","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-1","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-2","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Faerzress Crystal":1,"Glowing Cave Eel":1,"Underdark Mushroom":9},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-3","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-4","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-5","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-6","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Drow Adamantine":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-7","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-8","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":1,"Drow Poison (diluted)":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-9","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-0","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-1","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-2","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-3","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-4","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-5","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-6","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-7","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-8","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Ancient Gold Coin":8,"Dragonfire Coal":1,"Drake Blood":2,"Volcanic Gem":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-9","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":4,"Dragonfire Coal":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-0","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":114,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":12,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-1","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":112,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":6,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-2","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":96,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-3","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":131,"EndHP":113,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":17,"YieldCount":24,"YieldsByName":{"Crude Weapon Cache":5,"Goblin Alchemy Pouch":5,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":9,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-4","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":102,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":5,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-5","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":99,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-6","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":84,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-7","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":131,"EndHP":102,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":25,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-8","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":109,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":16,"YieldsByName":{"Crude Weapon Cache":5,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":3,"Scrap Iron":4,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-9","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":86,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-0","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Beast Pelt":3,"Dryad's Tears":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-1","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":5,"YieldsByName":{"Darkwood":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-2","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-3","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":32,"YieldsByName":{"Beast Pelt":4,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":5,"Darkwood":2,"Gloomfin":3,"Owlbear Feather":1,"Phantom Carp":2,"Shadow Herb":9,"Shadow Trout":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-4","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":68,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":7,"YieldsByName":{"Bioluminescent Fungi":2,"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-5","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":62,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":10,"YieldsByName":{"Beast Pelt":3,"Corrupted Fey Bloom":1,"Darkwood":2,"Phantom Carp":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-6","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":64,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":7,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-7","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":30,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":8,"YieldsByName":{"Darkwood":2,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-8","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Beast Pelt":4,"Gloomfin":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-9","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":66,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":3,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-0","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":6,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-1","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":8,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-2","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-3","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-4","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":1,"Grave Dust (spectral)":7,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-5","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-6","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Grave Dust (spectral)":12,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-7","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-8","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":3,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-9","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":3,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-0","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":131,"EndHP":36,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-1","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-2","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-3","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Drow Adamantine":1,"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-4","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Underdark Mushroom":6,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-5","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":16,"YieldsByName":{"Cave Spider Silk":3,"Drow Poison (diluted)":1,"Faerzress Crystal":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":10},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-6","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-7","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Mind Flayer Brain Matter":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-8","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-9","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":131,"EndHP":24,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Underdark Mushroom":3,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-0","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-1","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":1,"DayTicks":0,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1,"Dragonfire Coal":1,"Kobold Trap Mechanism":1,"Volcanic Gem":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-2","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Ancient Gold Coin":7,"Dragon Scale Fragment":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-3","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-4","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-5","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":2,"Drake Blood":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-6","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":6,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-7","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Ancient Gold Coin":9,"Dragon Scale Fragment":1,"Dragonfire Coal":1,"Drake Blood":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-8","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-9","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":5,"Kobold Trap Mechanism":4},"Log":null}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,151 +0,0 @@
|
||||
class level zone n p50_yld p50_yld_clr mean_yld mean_rms %clr %boss %tpk %fled %ext
|
||||
bard 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 dragons_lair 100 2 0 3.3 5.9 0 28 100 0 0
|
||||
bard 12 dragons_lair 100 4 0 4.8 7.2 0 63 100 0 0
|
||||
cleric 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 dragons_lair 100 3 0 3.3 5.3 0 11 100 0 0
|
||||
cleric 12 dragons_lair 100 3 0 3.2 7 0 49 100 0 0
|
||||
druid 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 dragons_lair 100 3 0 3.3 5.6 0 24 100 0 0
|
||||
druid 12 dragons_lair 100 4 0 4.2 7.5 0 78 99 0 1
|
||||
fighter 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 dragons_lair 100 3 0 4.2 7 0 62 97 0 3
|
||||
fighter 12 dragons_lair 100 4 0 4.4 8 0 99 100 0 0
|
||||
mage 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 dragons_lair 100 4 0 4.8 5.4 0 16 99 0 1
|
||||
mage 12 dragons_lair 100 6 0 5.9 7.4 0 74 100 0 0
|
||||
paladin 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 dragons_lair 100 3 0 3.9 7.1 0 68 99 0 1
|
||||
paladin 12 dragons_lair 100 3 0 3.3 7.9 0 97 100 0 0
|
||||
ranger 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 dragons_lair 100 7 0 8.2 7.8 0 91 97 0 3
|
||||
ranger 12 dragons_lair 100 7 0 7.5 8 0 100 100 0 0
|
||||
rogue 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 dragons_lair 100 4 0 5.2 6.3 0 54 96 0 4
|
||||
rogue 12 dragons_lair 100 4 0 5.6 7.9 0 94 100 0 0
|
||||
sorcerer 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 dragons_lair 100 4 0 4.6 5.3 0 13 100 0 0
|
||||
sorcerer 12 dragons_lair 100 4 0 4.8 7.4 0 71 100 0 0
|
||||
warlock 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 dragons_lair 100 3 0 3.6 6.1 0 28 98 0 2
|
||||
warlock 12 dragons_lair 100 3 0 3.9 7.5 0 76 100 0 0
|
||||
bard 3 forest_shadows 100 4 0 4.5 4.1 0 1 100 0 0
|
||||
bard 7 forest_shadows 100 6 4 6.5 6 1 97 99 0 0
|
||||
bard 12 forest_shadows 100 6 6 6 7 99 99 1 0 0
|
||||
cleric 3 forest_shadows 100 4 0 5.1 4.6 0 0 100 0 0
|
||||
cleric 7 forest_shadows 100 7 8 8.2 5.7 2 70 98 0 0
|
||||
cleric 12 forest_shadows 100 7 8 8 6.8 90 90 10 0 0
|
||||
druid 3 forest_shadows 100 5 0 6.4 5.1 0 16 100 0 0
|
||||
druid 7 forest_shadows 100 8 7 9 6.9 86 100 14 0 0
|
||||
druid 12 forest_shadows 100 7 7 7.5 7 100 100 0 0 0
|
||||
fighter 3 forest_shadows 100 5 0 6 5.3 0 22 100 0 0
|
||||
fighter 7 forest_shadows 100 5 5 6.4 7 100 100 0 0 0
|
||||
fighter 12 forest_shadows 100 6 6 7 7 100 100 0 0 0
|
||||
mage 3 forest_shadows 100 4 0 4.7 3.7 0 0 100 0 0
|
||||
mage 7 forest_shadows 100 5 6 6.5 6.7 82 90 18 0 0
|
||||
mage 12 forest_shadows 100 6 6 5.6 7 100 100 0 0 0
|
||||
paladin 3 forest_shadows 100 6 0 6.5 5.8 0 84 100 0 0
|
||||
paladin 7 forest_shadows 100 7 7 6.9 7 100 100 0 0 0
|
||||
paladin 12 forest_shadows 100 6 6 7.1 7 100 100 0 0 0
|
||||
ranger 3 forest_shadows 100 11 0 12.3 5.2 0 17 100 0 0
|
||||
ranger 7 forest_shadows 100 15 15 15.7 7 100 100 0 0 0
|
||||
ranger 12 forest_shadows 100 13 13 14.9 7 100 100 0 0 0
|
||||
rogue 3 forest_shadows 100 5 0 6.3 5.7 0 63 100 0 0
|
||||
rogue 7 forest_shadows 100 7 7 8.2 6.9 86 100 14 0 0
|
||||
rogue 12 forest_shadows 100 6 6 6.5 7 100 100 0 0 0
|
||||
sorcerer 3 forest_shadows 100 4 0 4.7 3.3 0 0 100 0 0
|
||||
sorcerer 7 forest_shadows 100 6 6 6.6 6.6 67 88 33 0 0
|
||||
sorcerer 12 forest_shadows 100 6 6 7.2 7 99 99 1 0 0
|
||||
warlock 3 forest_shadows 100 4 0 4.2 4.1 0 0 100 0 0
|
||||
warlock 7 forest_shadows 100 6 7 6.5 6.3 41 93 59 0 0
|
||||
warlock 12 forest_shadows 100 5 5 5.9 7 100 100 0 0 0
|
||||
bard 3 goblin_warrens 100 5 13 5.6 4.9 1 85 99 0 0
|
||||
bard 7 goblin_warrens 100 6 6 6.2 6 100 100 0 0 0
|
||||
bard 12 goblin_warrens 100 4 4 4.9 6 100 100 0 0 0
|
||||
cleric 3 goblin_warrens 100 3 9 4.7 4.8 9 74 91 0 0
|
||||
cleric 7 goblin_warrens 100 5 5 5.3 5.9 95 95 5 0 0
|
||||
cleric 12 goblin_warrens 100 5 5 5.3 6 99 99 1 0 0
|
||||
druid 3 goblin_warrens 100 3 4 4.1 5.6 70 94 30 0 0
|
||||
druid 7 goblin_warrens 100 4 4 4.7 6 100 100 0 0 0
|
||||
druid 12 goblin_warrens 100 4 4 5.2 6 100 100 0 0 0
|
||||
fighter 3 goblin_warrens 100 5 5 5.8 5.6 64 96 36 0 0
|
||||
fighter 7 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
fighter 12 goblin_warrens 100 4 4 4.9 6 100 100 0 0 0
|
||||
mage 3 goblin_warrens 100 7 7 7.3 5.5 70 81 30 0 0
|
||||
mage 7 goblin_warrens 100 7 7 8.7 6 99 99 1 0 0
|
||||
mage 12 goblin_warrens 100 6 6 7.8 6 100 100 0 0 0
|
||||
paladin 3 goblin_warrens 100 5 5 5.5 5.8 86 97 14 0 0
|
||||
paladin 7 goblin_warrens 100 5 5 5.1 6 100 100 0 0 0
|
||||
paladin 12 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
ranger 3 goblin_warrens 100 6 7 6.6 5.5 55 89 45 0 0
|
||||
ranger 7 goblin_warrens 100 6 6 6.3 6 100 100 0 0 0
|
||||
ranger 12 goblin_warrens 100 6 6 6.5 6 100 100 0 0 0
|
||||
rogue 3 goblin_warrens 100 7 7 7.8 5.8 86 97 14 0 0
|
||||
rogue 7 goblin_warrens 100 6 6 7.2 6 100 100 0 0 0
|
||||
rogue 12 goblin_warrens 100 6 6 7.7 6 100 100 0 0 0
|
||||
sorcerer 3 goblin_warrens 100 8 8 8 5.5 65 83 35 0 0
|
||||
sorcerer 7 goblin_warrens 100 8 8 8.3 6 98 98 2 0 0
|
||||
sorcerer 12 goblin_warrens 100 6 6 7.1 6 100 100 0 0 0
|
||||
warlock 3 goblin_warrens 100 4 5 4.9 5.4 56 81 44 0 0
|
||||
warlock 7 goblin_warrens 100 5 5 5.8 6 100 100 0 0 0
|
||||
warlock 12 goblin_warrens 100 5 5 5.9 6 100 100 0 0 0
|
||||
bard 3 manor_blackspire 100 4 0 4.5 4.3 0 1 100 0 0
|
||||
bard 7 manor_blackspire 100 6 0 6 6 0 64 100 0 0
|
||||
bard 12 manor_blackspire 100 4 0 5 6 0 76 100 0 0
|
||||
cleric 3 manor_blackspire 100 3 0 3.2 4.2 0 1 100 0 0
|
||||
cleric 7 manor_blackspire 100 4 0 4.4 5.7 0 34 100 0 0
|
||||
cleric 12 manor_blackspire 100 3 3 4.1 6.1 17 66 83 0 0
|
||||
druid 3 manor_blackspire 100 4 0 4.3 5.2 0 17 100 0 0
|
||||
druid 7 manor_blackspire 100 4 2 4.3 6 1 63 99 0 0
|
||||
druid 12 manor_blackspire 100 4 4 5 6.8 83 84 17 0 0
|
||||
fighter 3 manor_blackspire 100 4 0 4.1 5.5 0 17 100 0 0
|
||||
fighter 7 manor_blackspire 100 4 3 4.6 6.2 15 99 85 0 0
|
||||
fighter 12 manor_blackspire 100 5 5 5.3 7 100 100 0 0 0
|
||||
mage 3 manor_blackspire 100 5 0 5.3 3.7 0 0 100 0 0
|
||||
mage 7 manor_blackspire 100 5 7 6.4 5.9 3 60 97 0 0
|
||||
mage 12 manor_blackspire 100 6 6 6.6 6.5 53 70 47 0 0
|
||||
paladin 3 manor_blackspire 100 3 0 3.9 5.8 0 37 100 0 0
|
||||
paladin 7 manor_blackspire 100 4 4 4.2 6.1 9 99 91 0 0
|
||||
paladin 12 manor_blackspire 100 4 4 4.5 7 96 100 4 0 0
|
||||
ranger 3 manor_blackspire 100 3 0 4.5 4.7 0 11 100 0 0
|
||||
ranger 7 manor_blackspire 100 5 5 6 6.3 33 100 67 0 0
|
||||
ranger 12 manor_blackspire 100 4 4 5.1 7 100 100 0 0 0
|
||||
rogue 3 manor_blackspire 100 6 0 6.3 5.6 0 26 100 0 0
|
||||
rogue 7 manor_blackspire 100 6 21 6.9 6 2 100 98 0 0
|
||||
rogue 12 manor_blackspire 100 5 5 6.2 6.9 85 100 15 0 0
|
||||
sorcerer 3 manor_blackspire 100 4 0 4.7 3.7 0 1 100 0 0
|
||||
sorcerer 7 manor_blackspire 100 7 11 7.1 6 2 40 98 0 0
|
||||
sorcerer 12 manor_blackspire 100 6 6 6.8 6.5 48 62 52 0 0
|
||||
warlock 3 manor_blackspire 100 4 0 4.1 4.1 0 1 100 0 0
|
||||
warlock 7 manor_blackspire 100 5 0 5.3 5.9 0 44 100 0 0
|
||||
warlock 12 manor_blackspire 100 5 4 5 6.4 36 71 64 0 0
|
||||
bard 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 underdark 100 2 0 2.6 3.7 0 6 100 0 0
|
||||
bard 12 underdark 100 4 0 4 5.7 0 70 100 0 0
|
||||
cleric 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 underdark 100 3 0 3.4 3.1 0 1 100 0 0
|
||||
cleric 12 underdark 100 4 0 4.4 4.5 0 10 100 0 0
|
||||
druid 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 underdark 100 2 0 3.4 3.7 0 5 100 0 0
|
||||
druid 12 underdark 100 4 4 5 6.2 35 85 65 0 0
|
||||
fighter 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 underdark 100 4 4 4.1 6 7 88 93 0 0
|
||||
fighter 12 underdark 100 5 5 5 7 100 100 0 0 0
|
||||
mage 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 underdark 100 3 0 3.7 3.3 0 1 100 0 0
|
||||
mage 12 underdark 100 3 3 4.1 5.7 16 48 84 0 0
|
||||
paladin 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 underdark 100 4 11 5 5.9 2 86 98 0 0
|
||||
paladin 12 underdark 100 4 4 4.6 7 98 100 2 0 0
|
||||
ranger 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 underdark 100 10 8 10.4 6.2 22 94 78 0 0
|
||||
ranger 12 underdark 100 9 9 10.2 7 100 100 0 0 0
|
||||
rogue 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 underdark 100 5 10 5.2 5.9 2 84 98 0 0
|
||||
rogue 12 underdark 100 4 4 5.2 7 96 99 4 0 0
|
||||
sorcerer 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 underdark 100 1 0 2.7 3.2 0 1 100 0 0
|
||||
sorcerer 12 underdark 100 3 5 4.1 5.3 10 31 90 0 0
|
||||
warlock 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 underdark 100 3 0 3.2 3.7 0 7 100 0 0
|
||||
warlock 12 underdark 100 4 3 4.2 5.8 6 68 94 0 0
|
||||
@@ -1,450 +0,0 @@
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-0","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":10,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-1","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-2","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":2,"Scrap Iron":3,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-3","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-4","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-5","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":47,"EndHP":26,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":29,"YieldCount":17,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":2,"Scrap Iron":8,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-6","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-7","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-8","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-9","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-0","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-1","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Darkwood":3,"Gloomfin":4,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-2","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Bioluminescent Fungi":1,"Darkwood":3,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-3","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-4","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Bioluminescent Fungi":2,"Corrupted Fey Bloom":1,"Darkwood":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-5","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-6","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-7","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Gloomfin":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-8","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-9","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-0","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-1","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Cursed Trinket":6,"Ghost Silk":1,"Grave Dust (spectral)":6,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-2","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Cursed Trinket":3,"Ghost Silk":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-3","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-4","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-5","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-6","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-7","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-8","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-9","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":1,"Grave Dust (spectral)":8,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-0","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-1","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-2","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-3","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-4","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-5","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-6","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-7","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-8","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-9","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-0","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-1","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-2","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-3","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-4","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-5","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-6","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-7","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-8","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-9","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-0","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":101,"EndHP":57,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":21,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":2,"Scrap Iron":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-1","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":89,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-2","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":94,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":2,"Hobgoblin War Standard":1,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-3","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":86,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-4","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-5","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":83,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":2,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-6","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":84,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":4,"Scrap Iron":5,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-7","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":87,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-8","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":87,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-9","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":78,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":4,"YieldsByName":{"Goblin Shaman's Reagents":1,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-0","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":101,"EndHP":18,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":7,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-1","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Darkwood":1,"Phantom Carp":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-2","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Gloomfin":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-3","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Darkwood":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-4","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Darkwood":1,"Gloomfin":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-5","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-6","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-7","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":5,"Darkwood":1,"Shadow Herb":3,"Shadow Trout":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-8","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Corrupted Fey Bloom":2,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-9","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-0","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-1","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-2","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-3","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ghost Silk":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-4","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-5","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-6","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-7","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-8","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-9","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-0","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":1,"Glowing Cave Eel":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-1","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-2","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Faerzress Crystal":1,"Underdark Mushroom":6,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-3","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-4","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-5","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Underdark Mushroom":3,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-6","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-7","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Underdark Mushroom":4,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-8","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-9","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Glowing Cave Eel":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-0","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-1","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-2","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-3","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-4","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-5","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-6","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-7","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-8","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":9},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-9","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Ancient Gold Coin":6,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1,"Volcanic Gem":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-0","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":153,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-1","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":136,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-2","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":149,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-3","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":148,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":24,"YieldCount":9,"YieldsByName":{"Goblin Alchemy Pouch":5,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-4","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":160,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":21,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-5","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":158,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-6","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":157,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-7","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":157,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-8","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":156,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-9","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":141,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-0","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":63,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-1","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":19,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":7,"YieldsByName":{"Darkwood":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-2","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":78,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":12,"YieldsByName":{"Beast Pelt":2,"Bioluminescent Fungi":1,"Phantom Carp":1,"Shadow Herb":8},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-3","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-4","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":59,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-5","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":86,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-6","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":54,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":12,"YieldsByName":{"Gloomfin":1,"Owlbear Feather":2,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-7","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":66,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":28,"YieldCount":10,"YieldsByName":{"Beast Pelt":1,"Owlbear Feather":3,"Shadow Herb":4,"Shadow Trout":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-8","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":81,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-9","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":1,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":8,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-0","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":3,"Ghost Silk":1,"Grave Dust (spectral)":6,"Shadow Essence":2,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-1","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-2","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-3","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-4","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":6,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-5","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-6","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-7","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-8","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":4,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-9","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":6,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-0","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-1","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-2","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-3","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":2,"Deep Dragon Scale Chip":1,"Drow Adamantine":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-4","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":1,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-5","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Drow Poison (diluted)":1,"Glowing Cave Eel":1,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-6","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Glowing Cave Eel":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-7","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-8","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-9","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Faerzress Crystal":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-0","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-1","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":4,"Drake Blood":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-2","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-3","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-4","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-5","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-6","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-7","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-8","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-9","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-0","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":18,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":6,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":3,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-1","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":3,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":2,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-2","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-3","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-4","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-5","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-6","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-7","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-8","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":6,"Goblin Shaman's Reagents":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-9","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":6,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-0","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":3,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-1","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-2","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-3","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-4","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-5","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-6","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-7","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-8","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Corrupted Fey Bloom":2,"Gloomfin":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-9","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-0","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Ghost Silk":2,"Grave Dust (spectral)":7,"Shadow Essence":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-1","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-2","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-3","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-4","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-5","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-6","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":1,"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-7","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-8","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":7,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-9","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-0","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-1","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-2","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-3","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-4","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-5","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-6","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-7","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-8","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-9","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-0","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-1","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-2","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-3","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-4","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-5","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-6","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-7","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-8","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-9","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-0","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":17,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":4,"Hobgoblin War Standard":3,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-1","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":29,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-2","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":33,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":9,"YieldsByName":{"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":4,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-3","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":22,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-4","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":24,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-5","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-6","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":66,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":23,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":3,"Hobgoblin War Standard":4,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-7","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":5,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-8","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":16,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-9","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":33,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":21,"YieldCount":8,"YieldsByName":{"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":1,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-0","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-1","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Bioluminescent Fungi":3,"Darkwood":3,"Phantom Carp":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-2","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Bioluminescent Fungi":3,"Corrupted Fey Bloom":1,"Phantom Carp":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-3","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Bioluminescent Fungi":1,"Dryad's Tears":1,"Phantom Carp":1,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-4","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-5","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-6","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Dryad's Tears":3,"Gloomfin":1,"Shadow Herb":6,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-7","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-8","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-9","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":42,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-0","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":3,"Grave Dust (spectral)":3,"Shadow Essence":3,"Wraith Core":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-1","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":2,"Grave Dust (spectral)":7,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-2","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-3","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":49,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":6,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-4","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":34,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-5","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":18,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":4,"Ghost Silk":1,"Grave Dust (spectral)":9,"Vampire Ash":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-6","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":29,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-7","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Cursed Trinket":3,"Grave Dust (spectral)":3,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-8","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":5,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-9","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Blackspire Library Volume":1,"Ghost Silk":1,"Grave Dust (spectral)":7},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-0","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-1","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Glowing Cave Eel":1,"Underdark Mushroom":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-2","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-3","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-4","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":27,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-5","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-6","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":4,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-7","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-8","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":66,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-9","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-0","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":2,"Dragonfire Coal":1,"Kobold Trap Mechanism":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-1","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-2","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-3","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-4","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Ancient Gold Coin":5,"Dragonfire Coal":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-5","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-6","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":9,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-7","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":9,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-8","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":17,"YieldsByName":{"Ancient Gold Coin":12,"Dragon Scale Fragment":2,"Dragonfire Coal":1,"Drake Blood":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-9","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":7,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-0","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":87,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":5,"YieldsByName":{"Goblin Alchemy Pouch":3,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-1","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":61,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":2,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-2","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":84,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":6,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-3","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":76,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-4","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":111,"EndHP":97,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":23,"YieldCount":21,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":2,"Hobgoblin War Standard":4,"Scrap Iron":9,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-5","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":92,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":2,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-6","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":86,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-7","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":50,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-8","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":65,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-9","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":81,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-0","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-1","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-2","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-3","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":16,"YieldsByName":{"Beast Pelt":3,"Bioluminescent Fungi":3,"Corrupted Fey Bloom":3,"Dryad's Tears":1,"Gloomfin":1,"Owlbear Feather":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-4","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":79,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-5","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Beast Pelt":2,"Bioluminescent Fungi":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-6","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Corrupted Fey Bloom":1,"Owlbear Feather":1,"Phantom Carp":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-7","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Beast Pelt":2,"Darkwood":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-8","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-9","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-0","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-1","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":17,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":6,"Grave Dust (spectral)":7,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-2","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Cursed Trinket":3,"Ghost Silk":1,"Grave Dust (spectral)":9,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-3","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":78,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-4","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":85,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Ghost Silk":2,"Grave Dust (spectral)":8,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-5","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Cursed Trinket":2,"Grave Dust (spectral)":9,"Shadow Essence":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-6","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":77,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-7","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":94,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-8","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-9","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":5,"Shadow Essence":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-0","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":22,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-1","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Deep Dragon Scale Chip":1,"Drow Adamantine":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-2","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Faerzress Crystal":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-3","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Glowing Cave Eel":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-4","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-5","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-6","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Drow Adamantine":1,"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-7","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-8","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":4,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-9","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Glowing Cave Eel":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-0","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Ancient Gold Coin":8,"Dragon Scale Fragment":1,"Dragonfire Coal":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-1","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-2","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-3","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":67,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-4","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-5","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-6","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Ancient Gold Coin":8,"Dragonfire Coal":3,"Drake Blood":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-7","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Ancient Gold Coin":9,"Kobold Trap Mechanism":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-8","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-9","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-0","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-1","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":12,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Scrap Iron":4,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-2","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-3","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":12,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":2,"Worg Pelt":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-4","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":5,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":2,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-5","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-6","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":24,"YieldCount":13,"YieldsByName":{"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Scrap Iron":3,"Worg Pelt":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-7","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-8","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":15,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-9","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":1,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-0","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-1","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":15,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-2","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-3","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Darkwood":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-4","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":9,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Bioluminescent Fungi":2,"Darkwood":2,"Owlbear Feather":1,"Shadow Herb":4,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-5","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Dryad's Tears":1,"Owlbear Feather":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-6","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-7","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-8","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Beast Pelt":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-9","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-0","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":2,"Grave Dust (spectral)":3,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-1","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":18,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Cursed Trinket":2,"Ghost Silk":1,"Grave Dust (spectral)":7,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-2","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-3","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-4","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":7,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-5","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":5,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-6","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":3,"Grave Dust (spectral)":3,"Shadow Essence":1,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-7","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Grave Dust (spectral)":5,"Vampire Ash":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-8","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-9","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Grave Dust (spectral)":8,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-0","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-1","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-2","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-3","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-4","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-5","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-6","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-7","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-8","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-9","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-0","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-1","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-2","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-3","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-4","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-5","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-6","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-7","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-8","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-9","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-0","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":68,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":5,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":3,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-1","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-2","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-3","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":68,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-4","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":51,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":21,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-5","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":72,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-6","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":58,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":4,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-7","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":68,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":21,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-8","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":76,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-9","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":70,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-0","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":10,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":7,"YieldsByName":{"Bioluminescent Fungi":1,"Dryad's Tears":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-1","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":2,"Dryad's Tears":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-2","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":4,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":5,"YieldsByName":{"Corrupted Fey Bloom":1,"Gloomfin":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-3","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":16,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-4","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":19,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":28,"YieldCount":13,"YieldsByName":{"Beast Pelt":3,"Corrupted Fey Bloom":3,"Darkwood":1,"Owlbear Feather":1,"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-5","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":1,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":24,"YieldCount":9,"YieldsByName":{"Bioluminescent Fungi":1,"Owlbear Feather":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-6","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-7","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":20,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":8,"YieldsByName":{"Beast Pelt":2,"Dryad's Tears":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-8","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-9","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Owlbear Feather":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-0","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-1","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":9,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-2","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":2,"Grave Dust (spectral)":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-3","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":5,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-4","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Blackspire Library Volume":4,"Cursed Trinket":2,"Ghost Silk":2,"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-5","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-6","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":8,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-7","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-8","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Cursed Trinket":2,"Ghost Silk":1,"Grave Dust (spectral)":7,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-9","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Blackspire Library Volume":1,"Ghost Silk":2,"Grave Dust (spectral)":10,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-0","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-1","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-2","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":78,"EndHP":54,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Cave Spider Silk":1,"Deep Dragon Scale Chip":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-3","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":7,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-4","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-5","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Cave Spider Silk":2,"Glowing Cave Eel":2,"Underdark Mushroom":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-6","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Faerzress Crystal":1,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-7","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Cave Spider Silk":6,"Faerzress Crystal":1,"Mind Flayer Brain Matter":2,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-8","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":8},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-9","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Cave Spider Silk":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-0","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-1","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":7,"Dragon Scale Fragment":1,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-2","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-3","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":9,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-4","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-5","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":3,"Kobold Trap Mechanism":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-6","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-7","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-8","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Ancient Gold Coin":8,"Dragon Scale Fragment":1,"Dragonfire Coal":1,"Drake Blood":1,"Volcanic Gem":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-9","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Ancient Gold Coin":8,"Dragon Scale Fragment":1,"Dragonfire Coal":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-0","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-1","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":125,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-2","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":127,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-3","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-4","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":118,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":8,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-5","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":120,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-6","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":124,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-7","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":5,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-8","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":121,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-9","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-0","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":115,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":15,"YieldsByName":{"Beast Pelt":1,"Dryad's Tears":2,"Gloomfin":1,"Owlbear Feather":1,"Shadow Herb":10},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-1","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":62,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-2","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":99,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":7,"YieldsByName":{"Dryad's Tears":1,"Phantom Carp":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-3","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":66,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":13,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Darkwood":4,"Gloomfin":1,"Shadow Herb":5,"Shadow Trout":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-4","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":112,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":8,"YieldsByName":{"Darkwood":1,"Phantom Carp":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-5","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":115,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":32,"YieldCount":17,"YieldsByName":{"Beast Pelt":3,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":3,"Dryad's Tears":1,"Shadow Herb":4,"Shadow Trout":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-6","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":123,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-7","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":98,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":26,"YieldCount":14,"YieldsByName":{"Beast Pelt":3,"Bioluminescent Fungi":3,"Corrupted Fey Bloom":1,"Dryad's Tears":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-8","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":52,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":3,"YieldsByName":{"Beast Pelt":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-9","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":92,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-0","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":44,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":22,"YieldCount":11,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":7,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-1","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-2","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":56,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":30,"YieldCount":13,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":3,"Grave Dust (spectral)":7,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-3","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-4","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Cursed Trinket":3,"Ghost Silk":1,"Grave Dust (spectral)":4,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-5","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":3,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-6","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-7","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-8","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":60,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-9","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":18,"YieldCount":2,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-0","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":19,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":2,"YieldsByName":{"Mind Flayer Brain Matter":1,"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-1","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Deep Dragon Scale Chip":1,"Drow Poison (diluted)":1,"Underdark Mushroom":9,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-2","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":27,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":16,"YieldCount":4,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-3","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":47,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":20,"YieldCount":8,"YieldsByName":{"Deep Dragon Scale Chip":1,"Drow Poison (diluted)":1,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-4","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":96,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-5","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":34,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":7,"YieldsByName":{"Drow Adamantine":1,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-6","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":55,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":22,"YieldCount":8,"YieldsByName":{"Cave Spider Silk":5,"Drow Adamantine":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-7","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":29,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-8","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-9","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":64,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-0","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-1","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":18,"YieldsByName":{"Ancient Gold Coin":11,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-2","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-3","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Ancient Gold Coin":4,"Dragon Scale Fragment":1,"Drake Blood":1,"Kobold Trap Mechanism":4,"Volcanic Gem":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-4","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-5","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Ancient Gold Coin":10,"Drake Blood":1,"Volcanic Gem":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-6","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":7,"Dragonfire Coal":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-7","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Ancient Gold Coin":8,"Dragon Scale Fragment":2,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-8","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-9","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Ancient Gold Coin":7,"Dragon Scale Fragment":1,"Dragonfire Coal":2,"Kobold Trap Mechanism":1,"Volcanic Gem":2},"Log":null}
|
||||
@@ -1,60 +0,0 @@
|
||||
# H4 — Charge calibration findings
|
||||
|
||||
**Date:** 2026-05-17
|
||||
**Corpus:** `h4_calibration_v1_all10.jsonl` (15k rows, 10 classes × L3/7/12 × 5 zones × n=100). Summary: `h4_calibration_v1_summary.txt`.
|
||||
**Baseline for comparison:** `baseline_j2a_v2_all10.jsonl` (post-J2b picker, current shipped state).
|
||||
**Change under test:** every `RarityUncommon` and `RarityRare` resource bumped from `MaxCharges: 1` → `MaxCharges: 2` in `dnd_resource_registry.go` (53 resources). Commons (already mostly 2), VeryRare/Legendary (trophy tier) untouched.
|
||||
|
||||
## TL;DR
|
||||
|
||||
**Charge counts are not the binding constraint on yield.** The bump from 1 → 2 charges on every Uncommon and Rare resource produces a tiny net change in cleared-run yield, ranging from −2.5% (forest) to +4.7% (goblin). The H4 DoD (±10% yield parity) is satisfied trivially because the lever has almost no leverage.
|
||||
|
||||
| zone | cleared mean yield (J2b) | cleared mean yield (H4) | Δ% |
|
||||
| ---------------- | -----------------------: | ----------------------: | ---: |
|
||||
| goblin_warrens | 5.99 | 6.27 | +4.7 |
|
||||
| forest_shadows | 8.17 | 7.97 | −2.5 |
|
||||
| manor_blackspire | 5.50 | 5.37 | −2.4 |
|
||||
| underdark | 6.30 | 6.16 | −2.2 |
|
||||
| dragons_lair | — | — | — |
|
||||
|
||||
All deltas are within n=100 noise (~±5% on these means).
|
||||
|
||||
## Why charge counts don't move the needle
|
||||
|
||||
Two compounding mechanics cap per-room yield well below "all charges spent":
|
||||
|
||||
1. **Standard/Elite/Patrol interrupts abort the entire room harvest pass.** `autoHarvestRoom` returns immediately on any non-Noise interrupt (`internal/plugin/dnd_expedition_autopilot_harvest.go:160-175`). Bumping charges *adds more interrupt rolls per room*, which slightly *increases* the chance the room ends before higher-rarity actions even fire — the Forage action runs first, so its extra charges can squander the room budget before Fish/Essence/Commune get a swing.
|
||||
2. **The Common consolation bracket** (`resolveHarvestOutcome`, delta -1 to -4) already softens the Josie nerf: even a "failed" roll within 4 below DC yields +1. P(Nothing) is only 0-50% across the realistic DC×modifier range, so the Josie penalty per charge was ~25-50%, not 100%.
|
||||
|
||||
Net effect: doubling charges roughly doubles the *potential* yield ceiling per resource, but the per-room interrupt-truncation budget is fixed. Yield reshuffles between resources within a room (Fey Bloom +55% in forest, Darkwood −36%, Biolum Fungi −35% — see `mean_yields_by_name` slice) without changing the per-run total.
|
||||
|
||||
## What this means for the H4 DoD
|
||||
|
||||
The plan's DoD reads:
|
||||
|
||||
> Monte Carlo shows yield parity within ±10% across tiers; rare nodes feel rare (success rate visibly < 50%) but not punishing across a full expedition.
|
||||
|
||||
Both legs are met:
|
||||
- **Parity:** all four sampled zones land within ±5% of the J2b baseline.
|
||||
- **Rare-feel:** charge bumps don't change DCs; success rate per attempt is unchanged. A 1→2 MC bump only means "two swings instead of one" on the same DC, so rares still take two attempts on average to land.
|
||||
|
||||
The implicit goal — restore pre-Josie yields — is **not** met. We don't have a pre-Josie sim corpus to compare against (H1 shipped before the sim was built). Analytically, pre-Josie yields would be ~1.3× (low DC) to 2× (high DC) the post-Josie per-charge expectation. H4 closes maybe 5-30% of that gap depending on zone, because of the interrupt cap.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**Ship the bump as-is.** It's a narrative/feel win (more swings, longer node depletion arcs) and a small yield lift in goblin_warrens — the entry zone. The cost is zero (registry-only change, no code touched, all tests green).
|
||||
|
||||
**Do not chase the rest of the gap by tuning interrupts.** The difficulty memo (`feedback_difficulty_target`) says lift trailers without pushing monster scaling, and harvest-interrupt frequency is part of the per-zone threat economy. Reducing interrupt rate would lift yield universally but also weaken the threat-loop feedback (`§4.2 Combat Interrupt`). Out of scope for this branch.
|
||||
|
||||
**Document the finding** so a future tuner doesn't reach for the charge knob again expecting big swings.
|
||||
|
||||
## Files
|
||||
|
||||
- `dnd_resource_registry.go` — 53 resources bumped.
|
||||
- `h4_calibration_v1_all10.jsonl` / `.err` — sim corpus.
|
||||
- `h4_calibration_v1_summary.txt` — per-cell summary.
|
||||
|
||||
## Open items rolled forward
|
||||
|
||||
- **Interrupt-frequency tune** (not H4): if harvest yields ever need to lift another 20-30%, the right lever is `resolveCombatInterrupt` rates in `dnd_expedition_harvest.go`, not charge counts. Park as a future tuning option.
|
||||
- **Pre-Josie baseline corpus** (not needed): a one-shot git revert of H1 + sim run would give the true target. Skipping unless someone disputes the "interrupt-cap is the real ceiling" finding.
|
||||
@@ -1,450 +0,0 @@
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-0","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":3,"DayTicks":1,"StartHP":47,"EndHP":4,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":4,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-1","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":5,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-2","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-3","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":17,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-4","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-5","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":3,"DayTicks":1,"StartHP":47,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Hobgoblin War Standard":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-6","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-7","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-8","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":6,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-goblin_warrens-9","Class":"fighter","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-0","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-1","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-2","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-3","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-4","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":1,"Darkwood":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-5","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":16,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":3,"Corrupted Fey Bloom":3,"Darkwood":3,"Gloomfin":1,"Owlbear Feather":1,"Shadow Herb":3,"Shadow Trout":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-6","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Beast Pelt":3,"Corrupted Fey Bloom":1,"Dryad's Tears":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-7","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Corrupted Fey Bloom":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-8","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Bioluminescent Fungi":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-forest_shadows-9","Class":"fighter","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-0","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Cursed Trinket":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-1","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-2","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-3","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":47,"EndHP":13,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":3,"Cursed Trinket":1,"Grave Dust (spectral)":5,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-4","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":7,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-5","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-6","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Grave Dust (spectral)":5,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-7","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Ghost Silk":2,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-8","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-manor_blackspire-9","Class":"fighter","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cursed Trinket":2,"Grave Dust (spectral)":3,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-0","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-1","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-2","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-3","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-4","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-5","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-6","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-7","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-8","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-underdark-9","Class":"fighter","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-0","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-1","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-2","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-3","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-4","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-5","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-6","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-7","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-8","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l3-dragons_lair-9","Class":"fighter","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":47,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-0","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":101,"EndHP":91,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":19,"YieldCount":15,"YieldsByName":{"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2,"Scrap Iron":7,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-1","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":89,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-2","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":66,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-3","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":70,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":7,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":2,"Hobgoblin War Standard":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-4","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":82,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":7,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-5","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":91,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":22,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-6","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":83,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":16,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":1,"Scrap Iron":2,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-7","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":75,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-8","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":91,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-goblin_warrens-9","Class":"fighter","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":78,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":3,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-0","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":18,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Dryad's Tears":1,"Shadow Herb":14},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-1","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Beast Pelt":3,"Dryad's Tears":1,"Owlbear Feather":1,"Shadow Herb":10},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-2","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Bioluminescent Fungi":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-3","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Dryad's Tears":1,"Gloomfin":1,"Phantom Carp":1,"Shadow Herb":8},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-4","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Corrupted Fey Bloom":1,"Gloomfin":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-5","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-6","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Beast Pelt":3,"Bioluminescent Fungi":1,"Gloomfin":1,"Phantom Carp":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-7","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-8","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Darkwood":1,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-forest_shadows-9","Class":"fighter","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":19,"YieldsByName":{"Beast Pelt":1,"Darkwood":3,"Dryad's Tears":2,"Gloomfin":1,"Shadow Herb":12},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-0","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-1","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":1,"Grave Dust (spectral)":6,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-2","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-3","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-4","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-5","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-6","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-7","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-8","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":5,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-manor_blackspire-9","Class":"fighter","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-0","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Cave Spider Silk":1,"Drow Poison (diluted)":1,"Faerzress Crystal":1,"Underdark Mushroom":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-1","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-2","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-3","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Drow Adamantine":1,"Glowing Cave Eel":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-4","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Cave Spider Silk":3,"Deep Dragon Scale Chip":1,"Faerzress Crystal":2,"Underdark Mushroom":8,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-5","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-6","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-7","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-8","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":1,"Drow Poison (diluted)":1,"Glowing Cave Eel":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-underdark-9","Class":"fighter","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Faerzress Crystal":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-0","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-1","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-2","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-3","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":3,"Volcanic Gem":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-4","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Volcanic Gem":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-5","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-6","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-7","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-8","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":2,"Dragon Scale Fragment":2,"Dragonfire Coal":1,"Kobold Trap Mechanism":1,"Volcanic Gem":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l7-dragons_lair-9","Class":"fighter","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":101,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-0","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":168,"EndHP":157,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":21,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":5,"Scrap Iron":4,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-1","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":151,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-2","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":153,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-3","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":159,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":20,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":5,"Hobgoblin War Standard":1,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-4","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":143,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":16,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":1,"Scrap Iron":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-5","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":143,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-6","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":150,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-7","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":153,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-8","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":168,"EndHP":150,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":2,"Hobgoblin War Standard":2,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-goblin_warrens-9","Class":"fighter","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":158,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-0","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":28,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":9,"YieldsByName":{"Beast Pelt":3,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-1","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":57,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":24,"YieldCount":6,"YieldsByName":{"Beast Pelt":1,"Darkwood":2,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-2","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":51,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-3","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":62,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":32,"YieldCount":16,"YieldsByName":{"Beast Pelt":1,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":2,"Darkwood":3,"Dryad's Tears":1,"Shadow Herb":5,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-4","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":42,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-5","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":62,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":19,"YieldsByName":{"Beast Pelt":3,"Corrupted Fey Bloom":1,"Darkwood":1,"Gloomfin":1,"Phantom Carp":1,"Shadow Herb":12},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-6","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":108,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-7","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":40,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-8","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":75,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-forest_shadows-9","Class":"fighter","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":47,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":5,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-0","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-1","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-2","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-3","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-4","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-5","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-6","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":168,"EndHP":7,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":18,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-7","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-8","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-manor_blackspire-9","Class":"fighter","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-0","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Cave Spider Silk":3,"Drow Poison (diluted)":1,"Faerzress Crystal":2,"Mind Flayer Brain Matter":1,"Underdark Mushroom":5,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-1","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cave Spider Silk":4,"Drow Adamantine":1,"Glowing Cave Eel":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-2","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-3","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Cave Spider Silk":4,"Glowing Cave Eel":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":8,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-4","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Deep Dragon Scale Chip":1,"Faerzress Crystal":2,"Underdark Mushroom":7},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-5","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-6","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-7","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Drow Adamantine":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-8","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-underdark-9","Class":"fighter","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Faerzress Crystal":1,"Glowing Cave Eel":1,"Underdark Mushroom":5},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-0","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-1","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-2","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-3","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-4","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-5","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-6","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-7","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-8","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:fighter-l12-dragons_lair-9","Class":"fighter","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":168,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-0","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-1","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-2","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-3","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-4","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":2,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-5","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":3,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-6","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-7","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-8","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-goblin_warrens-9","Class":"mage","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":6,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-0","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Corrupted Fey Bloom":2,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-1","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Bioluminescent Fungi":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-2","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Bioluminescent Fungi":3,"Corrupted Fey Bloom":1,"Darkwood":2,"Phantom Carp":1,"Shadow Herb":1,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-3","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-4","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Corrupted Fey Bloom":2,"Phantom Carp":1,"Shadow Herb":1,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-5","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Corrupted Fey Bloom":3,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-6","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-7","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-8","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Dryad's Tears":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-forest_shadows-9","Class":"mage","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-0","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-1","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":3,"Grave Dust (spectral)":5,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-2","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":1,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-3","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-4","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-5","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-6","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-7","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-8","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":2,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-manor_blackspire-9","Class":"mage","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-0","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-1","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-2","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-3","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-4","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-5","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-6","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-7","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-8","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-underdark-9","Class":"mage","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-0","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-1","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-2","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-3","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-4","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-5","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-6","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-7","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-8","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l3-dragons_lair-9","Class":"mage","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":30,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-0","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":17,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":21,"YieldCount":20,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":7,"Scrap Iron":4,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-1","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":35,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-2","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":32,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":16,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":5,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":2,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-3","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":32,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":5,"YieldsByName":{"Goblin Alchemy Pouch":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-4","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-5","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":16,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-6","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":36,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":3,"YieldsByName":{"Goblin Alchemy Pouch":2,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-7","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":25,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":2,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-8","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-goblin_warrens-9","Class":"mage","Level":7,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-0","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-1","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-2","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":1,"Phantom Carp":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-3","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":16,"YieldsByName":{"Beast Pelt":2,"Bioluminescent Fungi":3,"Corrupted Fey Bloom":2,"Darkwood":1,"Dryad's Tears":1,"Shadow Herb":6,"Shadow Trout":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-4","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Beast Pelt":3,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-5","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-6","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Owlbear Feather":2,"Shadow Herb":7},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-7","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Beast Pelt":1,"Corrupted Fey Bloom":3,"Owlbear Feather":2,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-8","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":25,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Bioluminescent Fungi":1,"Darkwood":1,"Gloomfin":3,"Phantom Carp":1,"Shadow Herb":2,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-forest_shadows-9","Class":"mage","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":36,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Gloomfin":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-0","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":3,"Ghost Silk":1,"Grave Dust (spectral)":2,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-1","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":10,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":4,"Vampire Ash":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-2","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":21,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-3","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":17,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":10,"Vampire Ash":2,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-4","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":55,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":6,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-5","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-6","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ghost Silk":2,"Grave Dust (spectral)":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-7","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Cursed Trinket":3,"Grave Dust (spectral)":10,"Wraith Core":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-8","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":66,"EndHP":26,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Cursed Trinket":2,"Grave Dust (spectral)":6,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-manor_blackspire-9","Class":"mage","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":66,"EndHP":27,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Ghost Silk":1,"Grave Dust (spectral)":3,"Shadow Essence":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-0","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cave Spider Silk":3,"Drow Poison (diluted)":1,"Faerzress Crystal":1,"Glowing Cave Eel":1,"Underdark Mushroom":1,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-1","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-2","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":5,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Glowing Cave Eel":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-3","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-4","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-5","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-6","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-7","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-8","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-underdark-9","Class":"mage","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-0","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":16,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-1","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-2","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-3","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-4","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-5","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":1,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-6","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":4,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Ancient Gold Coin":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-7","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-8","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":66,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l7-dragons_lair-9","Class":"mage","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":66,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-0","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":77,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":15,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":7,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":4,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-1","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":81,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-2","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":46,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":2,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-3","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-4","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":91,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":6,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-5","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":111,"EndHP":97,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-6","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":77,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-7","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":111,"EndHP":89,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":5,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-8","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":82,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":1,"YieldsByName":{"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-goblin_warrens-9","Class":"mage","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":83,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":6,"YieldsByName":{"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-0","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":1,"Darkwood":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-1","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Darkwood":1,"Gloomfin":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-2","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Darkwood":1,"Gloomfin":1,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-3","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-4","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Bioluminescent Fungi":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-5","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-6","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-7","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":18,"YieldsByName":{"Beast Pelt":4,"Corrupted Fey Bloom":3,"Dryad's Tears":1,"Gloomfin":1,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-8","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Darkwood":1,"Owlbear Feather":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-forest_shadows-9","Class":"mage","Level":12,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-0","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-1","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-2","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":3,"Ghost Silk":2,"Grave Dust (spectral)":8},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-3","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-4","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Ghost Silk":2,"Grave Dust (spectral)":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-5","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":8,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-6","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Ghost Silk":3,"Grave Dust (spectral)":5,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-7","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-8","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":31,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cursed Trinket":1,"Grave Dust (spectral)":6,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-manor_blackspire-9","Class":"mage","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-0","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":56,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-1","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":111,"EndHP":2,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-2","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":8,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Cave Spider Silk":2,"Drow Adamantine":2,"Underdark Mushroom":6},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-3","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Cave Spider Silk":2,"Drow Adamantine":1,"Faerzress Crystal":1,"Underdark Mushroom":5},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-4","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":20,"YieldsByName":{"Cave Spider Silk":8,"Deep Dragon Scale Chip":1,"Faerzress Crystal":1,"Glowing Cave Eel":1,"Underdark Mushroom":8,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-5","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":28,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-6","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-7","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":26,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-8","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-underdark-9","Class":"mage","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":111,"EndHP":5,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-0","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":4},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-1","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Ancient Gold Coin":8,"Dragon Scale Fragment":2,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-2","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-3","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-4","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Ancient Gold Coin":3,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-5","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":17,"YieldsByName":{"Ancient Gold Coin":11,"Dragon Scale Fragment":1,"Dragonfire Coal":1,"Drake Blood":1,"Kobold Trap Mechanism":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-6","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-7","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":7,"Drake Blood":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-8","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1,"Volcanic Gem":2},"Log":null}
|
||||
{"UserID":"@sim:mage-l12-dragons_lair-9","Class":"mage","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":111,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-0","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":7,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-1","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":16,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":16,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-2","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Goblin Alchemy Pouch":3,"Goblin Shaman's Reagents":1,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-3","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-4","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":8,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":3,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-5","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":9,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":13,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":2,"Scrap Iron":1,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-6","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":5,"Goblin Alchemy Pouch":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-7","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-8","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":7,"Hobgoblin War Standard":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-goblin_warrens-9","Class":"rogue","Level":3,"Zone":"goblin_warrens","Outcome":"tpk","StopCode":"boss","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-0","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-1","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Gloomfin":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-2","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-3","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-4","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Corrupted Fey Bloom":3,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-5","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-6","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Corrupted Fey Bloom":2,"Darkwood":1,"Gloomfin":2,"Owlbear Feather":1,"Shadow Herb":3,"Shadow Trout":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-7","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Bioluminescent Fungi":1,"Corrupted Fey Bloom":3,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-8","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Beast Pelt":2,"Darkwood":1,"Gloomfin":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-forest_shadows-9","Class":"rogue","Level":3,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Bioluminescent Fungi":1,"Dryad's Tears":1,"Shadow Herb":5,"Shadow Trout":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-0","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-1","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":2,"Cursed Trinket":2,"Grave Dust (spectral)":4,"Shadow Essence":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-2","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-3","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Grave Dust (spectral)":6,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-4","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-5","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":36,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":3,"Grave Dust (spectral)":5,"Shadow Essence":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-6","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":6,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-7","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":4,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-8","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-manor_blackspire-9","Class":"rogue","Level":3,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-0","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-1","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-2","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-3","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-4","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-5","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-6","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-7","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-8","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-underdark-9","Class":"rogue","Level":3,"Zone":"underdark","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-0","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-1","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-2","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-3","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-4","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-5","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-6","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-7","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-8","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l3-dragons_lair-9","Class":"rogue","Level":3,"Zone":"dragons_lair","Outcome":"halted","StopCode":"","Rooms":0,"Walks":0,"DayTicks":0,"StartHP":36,"EndHP":0,"StartCoin":1000,"EndCoin":0,"SUStart":0,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":null,"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-0","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":40,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":17,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":4,"Scrap Iron":1,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-1","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":62,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":19,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4,"Hobgoblin War Standard":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-2","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":47,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-3","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":4,"DayTicks":1,"StartHP":78,"EndHP":74,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9.5,"DaysAtEnd":2,"Threat":21,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1,"Scrap Iron":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-4","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":73,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-5","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":66,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":11,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":4,"Goblin Shaman's Reagents":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-6","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":64,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":12,"YieldsByName":{"Crude Weapon Cache":6,"Goblin Alchemy Pouch":3,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-7","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":72,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":16,"YieldCount":14,"YieldsByName":{"Crude Weapon Cache":4,"Goblin Alchemy Pouch":7,"Scrap Iron":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-8","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":71,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":6,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-goblin_warrens-9","Class":"rogue","Level":7,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":67,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":10,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":4,"Scrap Iron":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-0","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":5,"YieldsByName":{"Beast Pelt":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-1","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Bioluminescent Fungi":1,"Dryad's Tears":1,"Phantom Carp":1,"Shadow Herb":2,"Shadow Trout":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-2","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":23,"YieldsByName":{"Beast Pelt":2,"Bioluminescent Fungi":4,"Corrupted Fey Bloom":2,"Dryad's Tears":1,"Gloomfin":3,"Phantom Carp":1,"Shadow Herb":7,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-3","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":18,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":6,"YieldsByName":{"Gloomfin":1,"Owlbear Feather":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-4","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":7,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":10,"YieldsByName":{"Beast Pelt":4,"Dryad's Tears":1,"Owlbear Feather":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-5","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":5,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":8,"YieldsByName":{"Bioluminescent Fungi":3,"Darkwood":2,"Gloomfin":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-6","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":27,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":28,"YieldCount":25,"YieldsByName":{"Corrupted Fey Bloom":3,"Darkwood":3,"Dryad's Tears":1,"Gloomfin":3,"Owlbear Feather":2,"Shadow Herb":10,"Shadow Trout":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-7","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":11,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":4,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-8","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":3,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":22,"YieldCount":12,"YieldsByName":{"Corrupted Fey Bloom":2,"Darkwood":2,"Dryad's Tears":1,"Owlbear Feather":1,"Shadow Herb":6},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-forest_shadows-9","Class":"rogue","Level":7,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":78,"EndHP":23,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":26,"YieldCount":7,"YieldsByName":{"Dryad's Tears":1,"Gloomfin":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-0","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Grave Dust (spectral)":3,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-1","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-2","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":10,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":8,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-3","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":1,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-4","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Grave Dust (spectral)":4,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-5","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Ghost Silk":1,"Grave Dust (spectral)":9},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-6","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-7","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":1,"Grave Dust (spectral)":7,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-8","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":11,"YieldsByName":{"Blackspire Library Volume":3,"Ghost Silk":2,"Grave Dust (spectral)":5,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-manor_blackspire-9","Class":"rogue","Level":7,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-0","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-1","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":4,"Walks":4,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Cave Spider Silk":3,"Underdark Mushroom":4,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-2","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":4,"DayTicks":2,"StartHP":78,"EndHP":62,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":4,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-3","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-4","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-5","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-6","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":5,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-7","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"ended","Rooms":3,"Walks":3,"DayTicks":2,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-8","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Mind Flayer Brain Matter":1,"Underdark Mushroom":3,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-underdark-9","Class":"rogue","Level":7,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-0","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Dragonfire Coal":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-1","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-2","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-3","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":2,"Walks":2,"DayTicks":1,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-4","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":14,"YieldsByName":{"Ancient Gold Coin":10,"Dragon Scale Fragment":1,"Dragonfire Coal":1,"Drake Blood":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-5","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Ancient Gold Coin":11,"Dragon Scale Fragment":2,"Drake Blood":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-6","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":9,"YieldsByName":{"Ancient Gold Coin":7,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-7","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":15,"YieldsByName":{"Ancient Gold Coin":6,"Dragonfire Coal":2,"Drake Blood":1,"Kobold Trap Mechanism":4,"Volcanic Gem":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-8","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Ancient Gold Coin":8,"Dragon Scale Fragment":1,"Drake Blood":1,"Kobold Trap Mechanism":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l7-dragons_lair-9","Class":"rogue","Level":7,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":78,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":2,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-0","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":22,"YieldCount":6,"YieldsByName":{"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":1,"Scrap Iron":2,"Worg Pelt":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-1","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":124,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":5,"YieldsByName":{"Goblin Alchemy Pouch":1,"Goblin Shaman's Reagents":1,"Hobgoblin War Standard":1,"Scrap Iron":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-2","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":121,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":5,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":1,"Hobgoblin War Standard":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-3","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":126,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":4,"YieldsByName":{"Goblin Alchemy Pouch":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-4","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":119,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":18,"YieldCount":11,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":2,"Hobgoblin War Standard":3,"Scrap Iron":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-5","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":14,"YieldCount":11,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":1,"Scrap Iron":4,"Worg Pelt":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-6","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":129,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":7,"YieldsByName":{"Goblin Alchemy Pouch":3,"Hobgoblin War Standard":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-7","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":121,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":15,"YieldCount":2,"YieldsByName":{"Crude Weapon Cache":1,"Goblin Alchemy Pouch":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-8","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":126,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8.5,"DaysAtEnd":4,"Threat":13,"YieldCount":4,"YieldsByName":{"Crude Weapon Cache":2,"Goblin Alchemy Pouch":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-goblin_warrens-9","Class":"rogue","Level":12,"Zone":"goblin_warrens","Outcome":"cleared","StopCode":"complete","Rooms":6,"Walks":5,"DayTicks":2,"StartHP":131,"EndHP":115,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":9,"DaysAtEnd":3,"Threat":16,"YieldCount":9,"YieldsByName":{"Crude Weapon Cache":3,"Goblin Alchemy Pouch":2,"Scrap Iron":2,"Worg Pelt":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-0","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":110,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":6,"YieldsByName":{"Dryad's Tears":1,"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-1","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":113,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":30,"YieldCount":12,"YieldsByName":{"Beast Pelt":2,"Bioluminescent Fungi":1,"Corrupted Fey Bloom":3,"Owlbear Feather":1,"Phantom Carp":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-2","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":95,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-3","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":84,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":18,"YieldCount":6,"YieldsByName":{"Darkwood":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-4","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":90,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":10,"YieldsByName":{"Owlbear Feather":1,"Shadow Herb":9},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-5","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":81,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":3,"YieldsByName":{"Phantom Carp":1,"Shadow Herb":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-6","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":90,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":20,"YieldCount":7,"YieldsByName":{"Beast Pelt":1,"Owlbear Feather":1,"Shadow Herb":5},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-7","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":103,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":24,"YieldCount":9,"YieldsByName":{"Beast Pelt":2,"Corrupted Fey Bloom":2,"Owlbear Feather":1,"Shadow Herb":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-8","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":86,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Dryad's Tears":1,"Shadow Herb":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-forest_shadows-9","Class":"rogue","Level":12,"Zone":"forest_shadows","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":85,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7.75,"DaysAtEnd":4,"Threat":16,"YieldCount":3,"YieldsByName":{"Shadow Herb":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-0","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":2,"StartHP":131,"EndHP":33,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8,"DaysAtEnd":3,"Threat":25,"YieldCount":2,"YieldsByName":{"Blackspire Library Volume":1,"Grave Dust (spectral)":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-1","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":42,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":18,"YieldCount":3,"YieldsByName":{"Grave Dust (spectral)":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-2","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":6,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":24,"YieldCount":6,"YieldsByName":{"Cursed Trinket":2,"Grave Dust (spectral)":3,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-3","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-4","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-5","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":56,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":16,"YieldCount":2,"YieldsByName":{"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-6","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":2,"StartHP":131,"EndHP":92,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":8,"DaysAtEnd":3,"Threat":25,"YieldCount":12,"YieldsByName":{"Blackspire Library Volume":2,"Ghost Silk":1,"Grave Dust (spectral)":7,"Shadow Essence":1,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-7","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":7,"DayTicks":3,"StartHP":131,"EndHP":17,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":7,"DaysAtEnd":4,"Threat":16,"YieldCount":7,"YieldsByName":{"Cursed Trinket":3,"Grave Dust (spectral)":3,"Vampire Ash":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-8","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ghost Silk":1,"Grave Dust (spectral)":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-manor_blackspire-9","Class":"rogue","Level":12,"Zone":"manor_blackspire","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":7,"YieldsByName":{"Blackspire Library Volume":1,"Cursed Trinket":2,"Grave Dust (spectral)":3,"Wraith Core":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-0","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":48,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":4,"YieldsByName":{"Glowing Cave Eel":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-1","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":23,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":24,"YieldCount":16,"YieldsByName":{"Cave Spider Silk":7,"Drow Adamantine":1,"Glowing Cave Eel":2,"Underdark Mushroom":5,"Underdark Shark":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-2","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":48,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":8,"YieldsByName":{"Cave Spider Silk":1,"Drow Adamantine":1,"Faerzress Crystal":1,"Glowing Cave Eel":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-3","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":24,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":20,"YieldCount":6,"YieldsByName":{"Cave Spider Silk":1,"Glowing Cave Eel":1,"Underdark Mushroom":4},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-4","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":24,"YieldsByName":{"Cave Spider Silk":7,"Deep Dragon Scale Chip":4,"Drow Adamantine":2,"Drow Poison (diluted)":1,"Faerzress Crystal":1,"Glowing Cave Eel":1,"Mind Flayer Brain Matter":1,"Underdark Mushroom":7},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-5","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":61,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":20,"YieldCount":1,"YieldsByName":{"Underdark Mushroom":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-6","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":48,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":20,"YieldCount":4,"YieldsByName":{"Drow Poison (diluted)":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-7","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"tpk","StopCode":"boss","Rooms":6,"Walks":5,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-8","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":66,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":16,"YieldCount":0,"YieldsByName":{},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-underdark-9","Class":"rogue","Level":12,"Zone":"underdark","Outcome":"cleared","StopCode":"complete","Rooms":7,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":39,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":5.5,"DaysAtEnd":4,"Threat":18,"YieldCount":4,"YieldsByName":{"Deep Dragon Scale Chip":1,"Underdark Mushroom":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-0","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":6,"Drake Blood":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-1","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-2","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":5,"YieldsByName":{"Ancient Gold Coin":4,"Dragon Scale Fragment":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-3","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":2,"YieldsByName":{"Ancient Gold Coin":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-4","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"ended","Rooms":1,"Walks":1,"DayTicks":0,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":3,"YieldsByName":{"Ancient Gold Coin":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-5","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":8,"YieldsByName":{"Ancient Gold Coin":2,"Dragon Scale Fragment":4,"Dragonfire Coal":1,"Drake Blood":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-6","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":13,"YieldsByName":{"Ancient Gold Coin":5,"Dragon Scale Fragment":2,"Dragonfire Coal":1,"Kobold Trap Mechanism":3,"Volcanic Gem":2},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-7","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":7,"DayTicks":4,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":4,"Dragon Scale Fragment":1,"Kobold Trap Mechanism":1},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-8","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"tpk","StopCode":"boss","Rooms":8,"Walks":6,"DayTicks":3,"StartHP":131,"EndHP":0,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":12,"YieldsByName":{"Ancient Gold Coin":4,"Dragonfire Coal":1,"Drake Blood":1,"Kobold Trap Mechanism":3,"Volcanic Gem":3},"Log":null}
|
||||
{"UserID":"@sim:rogue-l12-dragons_lair-9","Class":"rogue","Level":12,"Zone":"dragons_lair","Outcome":"extracted","StopCode":"harvest_combat","Rooms":6,"Walks":6,"DayTicks":5,"StartHP":131,"EndHP":14,"StartCoin":1000,"EndCoin":950,"SUStart":10,"SUEnd":0,"DaysAtEnd":0,"Threat":0,"YieldCount":6,"YieldsByName":{"Ancient Gold Coin":5,"Drake Blood":1},"Log":null}
|
||||
@@ -1,151 +0,0 @@
|
||||
class level zone n p50_yld p50_yld_clr mean_yld mean_rms %clr %boss %tpk %fled %ext
|
||||
bard 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 dragons_lair 100 3 0 3.8 6.1 0 31 98 0 2
|
||||
bard 12 dragons_lair 100 3 0 4.1 7.5 0 75 98 0 2
|
||||
cleric 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 dragons_lair 100 3 0 3.6 5.5 0 16 99 0 1
|
||||
cleric 12 dragons_lair 100 3 0 3.2 6.9 0 47 100 0 0
|
||||
druid 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 dragons_lair 100 3 0 3.3 6.3 0 36 98 0 2
|
||||
druid 12 dragons_lair 100 4 0 4.3 7.5 0 78 99 0 1
|
||||
fighter 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 dragons_lair 100 3 0 4.3 7.2 0 67 98 0 2
|
||||
fighter 12 dragons_lair 100 4 0 4.7 8 0 100 100 0 0
|
||||
mage 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 dragons_lair 100 5 0 5.1 5.6 0 22 100 0 0
|
||||
mage 12 dragons_lair 100 5 0 5 7.4 0 72 99 0 1
|
||||
paladin 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 dragons_lair 100 4 0 4 6.9 0 62 95 0 5
|
||||
paladin 12 dragons_lair 100 4 0 4.2 7.9 0 97 100 0 0
|
||||
ranger 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 dragons_lair 100 9 0 8.5 7.7 0 86 95 0 5
|
||||
ranger 12 dragons_lair 100 7 0 7.5 8 0 100 100 0 0
|
||||
rogue 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 dragons_lair 100 4 0 5.5 6.8 0 54 92 0 8
|
||||
rogue 12 dragons_lair 100 6 0 6.5 7.9 0 94 100 0 0
|
||||
sorcerer 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 dragons_lair 100 3 0 3.9 5.7 0 16 99 0 1
|
||||
sorcerer 12 dragons_lair 100 5 0 5.2 7.2 0 66 100 0 0
|
||||
warlock 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 dragons_lair 100 3 0 3.7 5.6 0 14 99 0 1
|
||||
warlock 12 dragons_lair 100 4 0 4.6 7.5 0 74 100 0 0
|
||||
bard 3 forest_shadows 100 4 0 4.9 4.1 0 1 100 0 0
|
||||
bard 7 forest_shadows 100 6 0 6.1 6 0 99 100 0 0
|
||||
bard 12 forest_shadows 100 6 6 6.6 7 100 100 0 0 0
|
||||
cleric 3 forest_shadows 100 4 0 5.1 4.6 0 1 100 0 0
|
||||
cleric 7 forest_shadows 100 7 12 7.4 5.6 2 71 98 0 0
|
||||
cleric 12 forest_shadows 100 8 9 8.5 6.8 88 88 12 0 0
|
||||
druid 3 forest_shadows 100 5 0 6.3 5.2 0 17 100 0 0
|
||||
druid 7 forest_shadows 100 8 8 8.7 6.9 92 99 8 0 0
|
||||
druid 12 forest_shadows 100 7 7 8.1 7 100 100 0 0 0
|
||||
fighter 3 forest_shadows 100 4 0 5 5.3 0 37 100 0 0
|
||||
fighter 7 forest_shadows 100 6 6 6.9 7 100 100 0 0 0
|
||||
fighter 12 forest_shadows 100 6 6 6.9 7 100 100 0 0 0
|
||||
mage 3 forest_shadows 100 4 0 5 3.8 0 0 100 0 0
|
||||
mage 7 forest_shadows 100 6 6 6.9 6.8 88 95 12 0 0
|
||||
mage 12 forest_shadows 100 5 5 6.6 7 100 100 0 0 0
|
||||
paladin 3 forest_shadows 100 6 0 7 5.8 0 78 100 0 0
|
||||
paladin 7 forest_shadows 100 6 6 6.7 7 100 100 0 0 0
|
||||
paladin 12 forest_shadows 100 7 7 7.5 7 100 100 0 0 0
|
||||
ranger 3 forest_shadows 100 10 0 12.9 5.2 0 26 100 0 0
|
||||
ranger 7 forest_shadows 100 13 13 15.1 7 100 100 0 0 0
|
||||
ranger 12 forest_shadows 100 14 14 15.6 7 100 100 0 0 0
|
||||
rogue 3 forest_shadows 100 7 0 7.1 5.8 0 73 100 0 0
|
||||
rogue 7 forest_shadows 100 7 7 7.1 6.9 87 100 13 0 0
|
||||
rogue 12 forest_shadows 100 8 8 8.4 7 99 99 1 0 0
|
||||
sorcerer 3 forest_shadows 100 4 0 4.9 3.3 0 0 100 0 0
|
||||
sorcerer 7 forest_shadows 100 5 5 5.5 6.6 67 93 33 0 0
|
||||
sorcerer 12 forest_shadows 100 6 6 6.6 7 98 98 2 0 0
|
||||
warlock 3 forest_shadows 100 4 0 4.5 4.1 0 1 100 0 0
|
||||
warlock 7 forest_shadows 100 5 7 6.6 6.3 36 96 64 0 0
|
||||
warlock 12 forest_shadows 100 6 6 7 7 100 100 0 0 0
|
||||
bard 3 goblin_warrens 100 4 8 4.7 4.8 1 81 99 0 0
|
||||
bard 7 goblin_warrens 100 4 4 5.1 6 100 100 0 0 0
|
||||
bard 12 goblin_warrens 100 4 4 5.2 6 100 100 0 0 0
|
||||
cleric 3 goblin_warrens 100 4 4 4.3 4.9 6 79 94 0 0
|
||||
cleric 7 goblin_warrens 100 4 4 4.9 5.9 95 95 5 0 0
|
||||
cleric 12 goblin_warrens 100 4 4 4.7 6 99 99 1 0 0
|
||||
druid 3 goblin_warrens 100 4 4 4.4 5.6 69 92 31 0 0
|
||||
druid 7 goblin_warrens 100 4 4 4.9 6 100 100 0 0 0
|
||||
druid 12 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
fighter 3 goblin_warrens 100 5 4 5.5 5.6 64 98 36 0 0
|
||||
fighter 7 goblin_warrens 100 4 4 5.5 6 100 100 0 0 0
|
||||
fighter 12 goblin_warrens 100 4 4 5.6 6 100 100 0 0 0
|
||||
mage 3 goblin_warrens 100 6 7 7.6 5.3 61 73 39 0 0
|
||||
mage 7 goblin_warrens 100 6 6 7.4 6 100 100 0 0 0
|
||||
mage 12 goblin_warrens 100 7 7 7.9 6 100 100 0 0 0
|
||||
paladin 3 goblin_warrens 100 5 6 5.6 5.9 92 100 8 0 0
|
||||
paladin 7 goblin_warrens 100 4 4 5.5 6 100 100 0 0 0
|
||||
paladin 12 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
ranger 3 goblin_warrens 100 6 7 6.2 5.5 54 94 46 0 0
|
||||
ranger 7 goblin_warrens 100 5 5 6.4 6 100 100 0 0 0
|
||||
ranger 12 goblin_warrens 100 5 5 5.6 6 100 100 0 0 0
|
||||
rogue 3 goblin_warrens 100 6 6 6.9 5.8 86 97 14 0 0
|
||||
rogue 7 goblin_warrens 100 7 7 7.1 6 100 100 0 0 0
|
||||
rogue 12 goblin_warrens 100 7 7 7.1 6 100 100 0 0 0
|
||||
sorcerer 3 goblin_warrens 100 6 7 6.7 5.6 72 88 28 0 0
|
||||
sorcerer 7 goblin_warrens 100 6 6 7 6 99 99 1 0 0
|
||||
sorcerer 12 goblin_warrens 100 7 7 6.9 6 100 100 0 0 0
|
||||
warlock 3 goblin_warrens 100 3 4 4.4 5.5 64 86 36 0 0
|
||||
warlock 7 goblin_warrens 100 4 4 4.9 6 100 100 0 0 0
|
||||
warlock 12 goblin_warrens 100 4 4 5.1 6 100 100 0 0 0
|
||||
bard 3 manor_blackspire 100 4 0 4.7 4.3 0 2 100 0 0
|
||||
bard 7 manor_blackspire 100 5 0 5.2 5.9 0 53 100 0 0
|
||||
bard 12 manor_blackspire 100 4 5 5.4 6 1 75 99 0 0
|
||||
cleric 3 manor_blackspire 100 3 0 3.7 4.6 0 1 100 0 0
|
||||
cleric 7 manor_blackspire 100 4 0 4.7 5.8 0 28 100 0 0
|
||||
cleric 12 manor_blackspire 100 4 7 4.7 6.2 16 56 84 0 0
|
||||
druid 3 manor_blackspire 100 4 0 4.2 5.3 0 14 100 0 0
|
||||
druid 7 manor_blackspire 100 4 0 4.4 5.9 0 65 100 0 0
|
||||
druid 12 manor_blackspire 100 5 4 5.1 6.8 75 82 25 0 0
|
||||
fighter 3 manor_blackspire 100 4 0 4.5 5.4 0 17 100 0 0
|
||||
fighter 7 manor_blackspire 100 4 4 4 6.2 17 100 83 0 0
|
||||
fighter 12 manor_blackspire 100 4 4 4.6 7 100 100 0 0 0
|
||||
mage 3 manor_blackspire 100 5 0 6.2 4.2 0 0 100 0 0
|
||||
mage 7 manor_blackspire 100 6 6 6.6 6 4 32 96 0 0
|
||||
mage 12 manor_blackspire 100 6 5 6.2 6.6 57 73 43 0 0
|
||||
paladin 3 manor_blackspire 100 4 0 4.4 5.8 0 43 100 0 0
|
||||
paladin 7 manor_blackspire 100 3 2 4.2 6.1 12 97 88 0 0
|
||||
paladin 12 manor_blackspire 100 4 4 4.3 7 98 100 2 0 0
|
||||
ranger 3 manor_blackspire 100 4 0 4.8 5.3 0 14 100 0 0
|
||||
ranger 7 manor_blackspire 100 5 4 5.1 6.3 30 100 70 0 0
|
||||
ranger 12 manor_blackspire 100 6 6 5.7 7 100 100 0 0 0
|
||||
rogue 3 manor_blackspire 100 5 0 6.1 5.7 0 35 100 0 0
|
||||
rogue 7 manor_blackspire 100 6 2 6.2 6 1 99 99 0 0
|
||||
rogue 12 manor_blackspire 100 6 6 7 6.9 89 100 11 0 0
|
||||
sorcerer 3 manor_blackspire 100 6 0 5.7 3.6 0 0 100 0 0
|
||||
sorcerer 7 manor_blackspire 100 6 4 6.9 6 3 36 97 0 0
|
||||
sorcerer 12 manor_blackspire 100 6 5 6 6.3 38 54 62 0 0
|
||||
warlock 3 manor_blackspire 100 4 0 5.2 4.4 0 0 100 0 0
|
||||
warlock 7 manor_blackspire 100 6 0 5.9 6 0 58 100 0 0
|
||||
warlock 12 manor_blackspire 100 5 8 5.2 6.2 25 61 75 0 0
|
||||
bard 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 underdark 100 3 0 3.2 3.9 0 3 100 0 0
|
||||
bard 12 underdark 100 3 0 4 5.7 0 59 100 0 0
|
||||
cleric 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 underdark 100 2 0 3.1 3.2 0 0 100 0 0
|
||||
cleric 12 underdark 100 3 0 4.2 4.7 0 18 100 0 0
|
||||
druid 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 underdark 100 3 0 3.6 4 0 3 100 0 0
|
||||
druid 12 underdark 100 6 7 6.3 6.3 34 86 66 0 0
|
||||
fighter 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 underdark 100 4 3 5 6 4 96 96 0 0
|
||||
fighter 12 underdark 100 4 4 4.6 7 100 100 0 0 0
|
||||
mage 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 underdark 100 2 0 3.1 3.3 0 2 100 0 0
|
||||
mage 12 underdark 100 4 5 4.4 5.7 20 50 80 0 0
|
||||
paladin 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 underdark 100 4 3 4.6 5.9 1 82 99 0 0
|
||||
paladin 12 underdark 100 4 4 5.2 6.9 94 100 6 0 0
|
||||
ranger 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 underdark 100 8 8 9.6 6.2 22 99 78 0 0
|
||||
ranger 12 underdark 100 11 11 12.1 7 100 100 0 0 0
|
||||
rogue 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 underdark 100 5 4 5.1 5.7 2 73 98 0 0
|
||||
rogue 12 underdark 100 5 6 6 6.9 94 96 6 0 0
|
||||
sorcerer 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 underdark 100 2 0 2.8 3.1 0 0 100 0 0
|
||||
sorcerer 12 underdark 100 3 6 4 5.2 8 33 92 0 0
|
||||
warlock 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 underdark 100 2 0 2.8 3.7 0 4 100 0 0
|
||||
warlock 12 underdark 100 4 6 4.1 5.7 3 54 97 0 0
|
||||
@@ -1,39 +0,0 @@
|
||||
# H5-sim re-baseline — does prod short-rest close the caster gap?
|
||||
|
||||
**Corpus:** `baseline_h5sim_all10.jsonl` (15k rows, n=100). Summary table: `h5sim_all10_summary.txt`. **Baseline for comparison:** `baseline_j2a_v2_all10.jsonl` (J2b).
|
||||
|
||||
## TL;DR
|
||||
|
||||
**No.** Wiring short-rest into the sim between rooms gives mage L12 manor a real lift (+8pp clear rate) but does not move the bard/cleric trailers in the cells that matter:
|
||||
|
||||
| class | lvl | zone | J2b %clr | H5sim %clr | Δ |
|
||||
| ------ | --- | ---------------- | -------: | ---------: | -: |
|
||||
| bard | 12 | manor_blackspire | 2 | 1 | −1 |
|
||||
| cleric | 12 | manor_blackspire | 9 | 16 | +7 |
|
||||
| bard | 12 | underdark | 0 | 0 | 0 |
|
||||
| cleric | 12 | underdark | 0 | 0 | 0 |
|
||||
| mage | 12 | manor_blackspire | 49 | 57 | +8 |
|
||||
|
||||
J2c (defaultKnownSpells widening — bard damage option at L3+, cleric at L4+) is still the lever. The hypothesis that H5 alone would close it is falsified.
|
||||
|
||||
## Notable regressions (n=100, ~±10pp 95% CI — borderline)
|
||||
|
||||
| class | lvl | zone | J2b %clr | H5sim %clr | Δ |
|
||||
| -------- | --- | ---------------- | -------: | ---------: | -: |
|
||||
| warlock | 12 | manor_blackspire | 34 | 25 | −9 |
|
||||
| sorcerer | 12 | manor_blackspire | 47 | 38 | −9 |
|
||||
| cleric | 3 | goblin_warrens | 15 | 6 | −9 |
|
||||
| ranger | 3 | goblin_warrens | 64 | 54 | −10 |
|
||||
|
||||
n=100 standard error on a 50/50 cell is ~5pp, so these are ~2σ. Could be real (the picker prefers high-tier slots and short-rest refreshes low-tier first, so a mid-zone short rest may flush the high-tier-slot budget by encouraging more L2/L3 spends), or noise. Re-run at n=300 to disambiguate before declaring this a sim defect.
|
||||
|
||||
## Cells that lifted
|
||||
|
||||
Mage L12 manor +8, cleric L12 manor +7, fighter L3 goblin +10, druid L7 forest +8, sorcerer L7 forest +4, mage L7 goblin +3. Pattern: classes that already had viable damage rosters benefited; classes whose damage rosters are thin (bard/cleric) did not.
|
||||
|
||||
## Verdict
|
||||
|
||||
- Ship H5+sim short-rest as-is — the prod fix (full-HP gate loosened) is correct independently and the sim now reflects what a competent player does.
|
||||
- J2c (defaultKnownSpells widening) is still required to lift bard/cleric trailers.
|
||||
- T5 dragons_lair untouched (0% across all 10 classes) — J3 territory.
|
||||
- Re-baseline at n=300 on the four borderline regressions before tuning the picker.
|
||||
@@ -1,76 +0,0 @@
|
||||
# J2 — Caster boss-survival traces (per-round event sweep)
|
||||
|
||||
**Date:** 2026-05-17
|
||||
**Corpus:** `sim_results/j2_traces.jsonl` — 240 expeditions
|
||||
**Cells:** {mage, cleric, sorcerer, warlock, bard, druid} × {manor_blackspire, underdark} × L12 × n=20
|
||||
**Method:** New `-trace` flag on `cmd/expedition-sim` attaches the raw `CombatEvent` stream to the last combat (the boss/elite room) of every expedition. Aggregated in `/tmp/analyze_j2.py`.
|
||||
|
||||
## Headline
|
||||
|
||||
The caster cliff in `baseline_j1_all10.jsonl` is **not a class-balance problem. It is a sim-artifact**: `autoResolveCombat` dispatches `!attack` only — never `!cast`, never `!consume`. Across 240 boss-room fights:
|
||||
|
||||
| Event type | Count |
|
||||
|-------------------------------|------:|
|
||||
| `player` `spell_cast` | **0** |
|
||||
| `player` `use_consumable` | **0** |
|
||||
| `consumable` events | **0** |
|
||||
| `player` `hit` (weapon swing) | 381 |
|
||||
| `player` `thorn_lash` (druid passive) | 261 |
|
||||
|
||||
Every "caster boss-fight" the matrix has scored to date is a melee swing-fest with the caster's spell slots untouched and their consumables sitting in inventory.
|
||||
|
||||
## Class-level per-cell boss-fight rollup (L12)
|
||||
|
||||
| class | zone | n | reachBoss | won | lost | rnd | pDmg | eDmg | slotRuns | casts | noSlot | eHPleft |
|
||||
|----------|------------------|----|-----------|-----|------|-----|------|------|----------|-------|--------|---------|
|
||||
| mage | manor_blackspire | 20 | 10 | 0 | 10 | 7.4 | 27.4 | 89 | **0** | 0 | 10 | 116.6 |
|
||||
| mage | underdark | 20 | 13 | 0 | 13 | 5.4 | 28.7 | 68.1 | **0** | 0 | 13 | 133.3 |
|
||||
| cleric | manor_blackspire | 20 | 7 | 0 | 7 | 7.6 | 28.1 | 101 | **0** | 0 | 7 | 115.9 |
|
||||
| cleric | underdark | 20 | 1 | 0 | 1 | 2 | 12 | 26 | **0** | 0 | 1 | 150 |
|
||||
| sorcerer | manor_blackspire | 20 | 11 | 0 | 11 | 6.8 | 16.9 | 86.2 | **0** | 0 | 11 | 127.1 |
|
||||
| sorcerer | underdark | 20 | 6 | 0 | 6 | 6.5 | 26.8 | 79 | **0** | 0 | 6 | 135.2 |
|
||||
| warlock | manor_blackspire | 20 | 10 | 0 | 10 | 8.8 | 29.9 | 108.4| **0** | 0 | 10 | 114.1 |
|
||||
| warlock | underdark | 20 | 15 | 0 | 15 | 8.6 | 53.4 | 96.1 | **0** | 0 | 15 | 108.6 |
|
||||
| bard | manor_blackspire | 20 | 14 | 0 | 14 | 9.1 | 29.9 | 103.8| **0** | 0 | 14 | 114.1 |
|
||||
| bard | underdark | 20 | 10 | 0 | 10 | 7.8 | 46.9 | 76.5 | **0** | 0 | 10 | 115.1 |
|
||||
| *druid* | manor_blackspire | 20 | 15 | 0 | 15 | 8.1 | 77.8 | 107.5| **0** | 0 | 15 | 66.2 |
|
||||
| *druid* | underdark | 20 | 14 | 0 | 14 | 6.5 | 72.3 | 81.1 | **0** | 0 | 14 | 89.7 |
|
||||
|
||||
Columns: `slotRuns` = boss fights where ≥1 slot spell fired; `casts` = total slot casts; `noSlot` = boss fights with zero casts; `eHPleft` = mean enemy HP remaining at player-loss (the "how close did we come" number).
|
||||
|
||||
## Why druid is the lone outlier at 39% mean clear
|
||||
|
||||
Druid's `ThornLashDmg = 2 + level/4` passive (`dnd_passives.go:210`, Class-identity audit 2026-05-16) fires every time the enemy lands a hit on the player — 5 reactive damage at L12, ×~10–15 enemy hits per fight = 50–75 incidental player damage. That alone accounts for the ~70+ mean `pDmg` druid posts vs 17–53 for the trailers. **Druid is not "tankier than the trailers" — druid is the only class whose damage profile doesn't depend on the spell action**. Wild Shape, the actual durability beat the plan called out, is not wired through `autoResolveCombat` at all; thorn lash is.
|
||||
|
||||
## Reaction-spell hypothesis (plan §6.J2 H2) is moot for now
|
||||
|
||||
`dnd_spells.go` already documents that reaction-cast spells (`shield`, `counterspell`, `hellish_rebuke`) are explicitly skipped today — no reaction window in combat. So even if `autoResolveCombat` were upgraded, Shield-style auto-fires aren't a J2 lever until a reaction phase exists.
|
||||
|
||||
## Conclusion — J2 is hypothesis-3-shaped but the cause is upstream
|
||||
|
||||
The plan listed four hypotheses; the trace evidence speaks to them as follows:
|
||||
|
||||
1. ~~Damage falls off vs boss HP~~ — confounded: cantrip damage was never tested; player only swung weapons.
|
||||
2. ~~No durability backstop~~ — Druid's outperformance is offense (thorn lash), not durability. So the durability gap, if it exists, can't be read from this corpus.
|
||||
3. **Slot/resource economy** — slots aren't being spent in boss fights at all. Confirms casters reach boss "with slots intact" (the plan's optimistic read), but in the worst possible way: the sim refuses to spend them.
|
||||
4. Cleric identity — `simAutoArmDefaultFor` does pre-arm Healing Word for Cleric (`dnd_abilities.go:375`), and that fires on the armed-ability path before combat. But mid-fight casts of Spiritual Weapon / Bless never fire.
|
||||
|
||||
## Recommended J2 lever (replaces the original menu)
|
||||
|
||||
**J2a — Teach `autoResolveCombat` to cast and consume.**
|
||||
Before each `!attack`, the sim should mirror "what a competent prod player would do":
|
||||
|
||||
- If HP < ~40% MaxHP and a heal-tagged consumable is in inventory → dispatch `handleConsumeCmd` with that item.
|
||||
- Else if the character is a spellcaster with available slots and a known damage/control spell that lands → dispatch `handleCastCmd` (priority: damage spell that finishes the enemy → control/stun → buff → cantrip).
|
||||
- Else swing.
|
||||
|
||||
The picker can be small and class-blind for the first cut — pick the highest-level slot whose damage roll most efficiently reduces remaining enemy HP, fall back to a cantrip when slots are dry. Mirror `combat_bridge.go`'s `SelectConsumables` for the heal side.
|
||||
|
||||
**J2b — Re-run baseline matrix with the fixed `autoResolveCombat`.**
|
||||
The current n=100 baseline measures a strawman. Once J2a lands we get a real read on caster boss-survival. Only then is it worth picking class-level levers (or concluding "casters are fine, the sim was lying").
|
||||
|
||||
**Out of J2 scope for now:** Reaction wiring (Shield, Counterspell). Per `dnd_spells.go`'s own comments, the reaction phase doesn't exist yet; lifting that ban is its own surface.
|
||||
|
||||
## Side note — `autoCombatRoundCap` vs the actual constant
|
||||
|
||||
Plan mentions `autoCombatRoundCap = 200`; verified in `expedition_sim.go:528`. No issue, just confirming the harness isn't truncating fights early.
|
||||
@@ -1,398 +0,0 @@
|
||||
2026/05/17 14:33:32 INFO database initialized path=/tmp/expedition-sim-1435326323/gogobee.db
|
||||
2026/05/17 14:33:32 INFO database initialized path=/tmp/expedition-sim-570080482/gogobee.db
|
||||
2026/05/17 14:33:32 INFO database initialized path=/tmp/expedition-sim-1961067701/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2587622653/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1858572084/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-891082602/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3411481929/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-4180440505/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1352384336/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1857658664/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1053057170/gogobee.db
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-0 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-0 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-0 ability="Healing Word"
|
||||
2026/05/17 14:33:33 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-0 wanted=1 removed=0
|
||||
2026/05/17 14:33:33 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-0 wanted=1 removed=0
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-972878641/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-256884369/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3470319547/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-961022847/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2323722081/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2780245983/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2761994054/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-59185064/gogobee.db
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-1 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-1 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1505145848/gogobee.db
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-1 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1383216459/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1328601750/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-98864978/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2659914046/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1386804201/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-163421166/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-220854570/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3389300164/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1934711212/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-683711492/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3235526877/gogobee.db
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-2 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-2 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-2 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-403680368/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1224265812/gogobee.db
|
||||
2026/05/17 14:33:33 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-2 wanted=1 removed=0
|
||||
2026/05/17 14:33:33 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-2 wanted=1 removed=0
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3033798307/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-4169972330/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3094361155/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-39807966/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2571438535/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2572980888/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2578263003/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2463584493/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-1572790867/gogobee.db
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-3 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2937583366/gogobee.db
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-3 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-3 ability="Healing Word"
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-3613819748/gogobee.db
|
||||
2026/05/17 14:33:33 INFO database initialized path=/tmp/expedition-sim-2540828918/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1139909187/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-4142969182/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2019276704/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2988018196/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1795837828/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1760808843/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2153283131/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-4 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1942277386/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-4 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-4 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1406817335/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1271254441/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-854529878/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1694073851/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3038451926/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2343863670/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1295476148/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-0 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-0 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-0 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1125646836/gogobee.db
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-0 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-0 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1333512022/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-5 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-5 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-5 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-220710329/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3277829553/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1865701626/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-935594784/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-827715148/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-68986296/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1012607066/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2500951803/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-1 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-1 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-1 ability="Healing Word"
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-1 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-557441740/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-914070631/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2271572170/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2949698724/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1061067707/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-6 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-6 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1705075809/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-6 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1523470365/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3499970093/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-830760784/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3280978624/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-2 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-2 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-2 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-307271588/gogobee.db
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-2 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2775243793/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3018564373/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3030586970/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1029269349/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-4002156351/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-183864816/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3257645146/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1929325151/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-225751687/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-3615293801/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-3 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-3 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-7 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-7 ability="Healing Word"
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-576438996/gogobee.db
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-3 ability="Healing Word"
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-3 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-7 ability="Healing Word"
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-3 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-3 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-3 wanted=1 removed=0
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2421935970/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-1180856031/gogobee.db
|
||||
2026/05/17 14:33:34 INFO database initialized path=/tmp/expedition-sim-2369465835/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3833483254/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-224923423/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2726204412/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2419377482/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-4254550146/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-658875425/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2977421017/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2945912897/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1223443637/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-4 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-8 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-4 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-8 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-8 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-4 ability="Healing Word"
|
||||
2026/05/17 14:33:35 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-4 wanted=1 removed=0
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1646450137/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1481312023/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3507008659/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1516972004/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-28609871/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1430768706/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-4220398274/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1646369506/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2125090382/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-5 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-5 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-5 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1488901552/gogobee.db
|
||||
2026/05/17 14:33:35 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-5 wanted=1 removed=0
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-4060999029/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-9 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-9 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-9 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1980401808/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1684418884/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1794726509/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1749345557/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2740874960/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3925551982/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2864919519/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-6 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-6 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3095718542/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-6 ability="Healing Word"
|
||||
2026/05/17 14:33:35 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-6 wanted=1 removed=0
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3373738734/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-10 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3789457226/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-10 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-4094310036/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-10 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3470990917/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3142853546/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-309817808/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2429653290/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3580392471/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-597247584/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2154392471/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-7 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-7 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-7 ability="Healing Word"
|
||||
2026/05/17 14:33:35 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-7 wanted=1 removed=0
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2565782481/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-3549806484/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-574287783/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1200079250/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1394948982/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-847854238/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-1817871372/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2323220882/gogobee.db
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-2450392709/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-11 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-4012828053/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-11 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-276814314/gogobee.db
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-11 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-8 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-8 ability="Healing Word"
|
||||
2026/05/17 14:33:35 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-8 ability="Healing Word"
|
||||
2026/05/17 14:33:35 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-8 wanted=1 removed=0
|
||||
2026/05/17 14:33:35 INFO database initialized path=/tmp/expedition-sim-133917226/gogobee.db
|
||||
2026/05/17 14:33:35 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-8 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-8 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-27695044/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2595221952/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-3729100327/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-40630619/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1451440739/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1823882855/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2323272789/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1841383835/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-540980082/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1023722670/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-9 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-9 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-9 ability="Healing Word"
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-9 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-776796602/gogobee.db
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-9 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-12 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-12 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-12 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-376454587/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-4137125856/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1977687003/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-482104267/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-4191466593/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-3413343421/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-337500389/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1161698075/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-3923717903/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-10 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1486542255/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-10 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-10 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-609549845/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2314709835/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-13 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-13 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-13 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2226585091/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-4285465609/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1152863169/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1140564116/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-247538292/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-12727718/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-493249432/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-3457453074/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-4126564222/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2948190870/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-11 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2937358906/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-11 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-14 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-11 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-14 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-14 ability="Healing Word"
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-11 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2940956075/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-940255277/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1219888338/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1737695406/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1364107823/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-3928809135/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2770426133/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-4112019964/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2920118324/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-841285958/gogobee.db
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-2359475009/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-12 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-15 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-4003732719/gogobee.db
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-15 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-12 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-15 ability="Healing Word"
|
||||
2026/05/17 14:33:36 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-12 ability="Healing Word"
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 INFO database initialized path=/tmp/expedition-sim-1124627013/gogobee.db
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:33:36 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-12 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3360721450/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2189731270/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2135723417/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-4081839001/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3089792466/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2658215845/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-711568570/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2452659043/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-690174537/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-16 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-16 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-16 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1712861838/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-839790690/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-13 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-13 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-13 ability="Healing Word"
|
||||
2026/05/17 14:33:37 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-13 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2069258505/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-448809708/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-870225890/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1394846529/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-713189544/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3333028202/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3490413428/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-216826575/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2600575392/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-17 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3247025114/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-17 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-17 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-575813843/gogobee.db
|
||||
2026/05/17 14:33:37 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-17 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-852951387/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-14 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-14 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-14 ability="Healing Word"
|
||||
2026/05/17 14:33:37 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-14 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-14 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1698113894/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3570143397/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2415058239/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-637325677/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1149336246/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2613071951/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-4240410874/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1918837118/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-18 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-18 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-18 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1562628221/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-741594747/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3917775001/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-15 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-15 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-15 ability="Healing Word"
|
||||
2026/05/17 14:33:37 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-15 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1103274777/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2655969463/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-2440241823/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3285403820/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-19 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-1632108061/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-19 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-704442070/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-19 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-917462476/gogobee.db
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-702958523/gogobee.db
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-16 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-16 ability="Healing Word"
|
||||
2026/05/17 14:33:37 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-16 ability="Healing Word"
|
||||
2026/05/17 14:33:37 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-16 wanted=1 removed=0
|
||||
2026/05/17 14:33:37 INFO database initialized path=/tmp/expedition-sim-3461168624/gogobee.db
|
||||
2026/05/17 14:33:38 INFO database initialized path=/tmp/expedition-sim-2994824878/gogobee.db
|
||||
2026/05/17 14:33:38 INFO database initialized path=/tmp/expedition-sim-2518451673/gogobee.db
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-17 ability="Healing Word"
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-17 ability="Healing Word"
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-17 ability="Healing Word"
|
||||
2026/05/17 14:33:38 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-17 wanted=1 removed=0
|
||||
2026/05/17 14:33:38 INFO database initialized path=/tmp/expedition-sim-3320304407/gogobee.db
|
||||
2026/05/17 14:33:38 INFO database initialized path=/tmp/expedition-sim-1135211496/gogobee.db
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-18 ability="Healing Word"
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-18 ability="Healing Word"
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-18 ability="Healing Word"
|
||||
2026/05/17 14:33:38 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-18 wanted=1 removed=0
|
||||
2026/05/17 14:33:38 INFO database initialized path=/tmp/expedition-sim-741208661/gogobee.db
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-19 ability="Healing Word"
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-19 ability="Healing Word"
|
||||
2026/05/17 14:33:38 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-19 ability="Healing Word"
|
||||
2026/05/17 14:33:38 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-19 wanted=1 removed=0
|
||||
2026/05/17 14:33:38 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-19 wanted=1 removed=0
|
||||
File diff suppressed because one or more lines are too long
@@ -1,151 +0,0 @@
|
||||
class level zone n p50_yld p50_yld_clr mean_yld mean_rms %clr %boss %tpk %fled %ext
|
||||
bard 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 dragons_lair 100 3 0 3.7 5.7 0 24 98 0 2
|
||||
bard 12 dragons_lair 100 3 0 4.2 7.5 0 77 100 0 0
|
||||
cleric 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 dragons_lair 100 3 0 3.4 5.4 0 7 100 0 0
|
||||
cleric 12 dragons_lair 100 3 0 3.6 7.1 0 60 100 0 0
|
||||
druid 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 dragons_lair 100 3 0 3.5 5.8 0 29 99 0 1
|
||||
druid 12 dragons_lair 100 4 0 4.1 7.4 0 72 97 0 3
|
||||
fighter 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 dragons_lair 100 3 0 3.9 6.8 0 56 97 0 3
|
||||
fighter 12 dragons_lair 100 3 0 3.6 8 0 99 100 0 0
|
||||
mage 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 dragons_lair 100 4 0 4.9 5.6 0 25 99 0 1
|
||||
mage 12 dragons_lair 100 5 0 5.5 7.3 0 68 100 0 0
|
||||
paladin 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 dragons_lair 100 2 0 3.1 6.9 0 65 99 0 1
|
||||
paladin 12 dragons_lair 100 4 0 4.5 7.9 0 95 100 0 0
|
||||
ranger 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 dragons_lair 100 8 0 8.5 7.8 0 91 98 0 2
|
||||
ranger 12 dragons_lair 100 8 0 8.8 8 0 99 100 0 0
|
||||
rogue 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 dragons_lair 100 5 0 4.8 6.5 0 53 94 0 6
|
||||
rogue 12 dragons_lair 100 5 0 6.6 7.9 0 97 100 0 0
|
||||
sorcerer 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 dragons_lair 100 5 0 5.1 5.2 0 18 100 0 0
|
||||
sorcerer 12 dragons_lair 100 5 0 5.4 7.2 0 62 100 0 0
|
||||
warlock 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 dragons_lair 100 4 0 4.1 6 0 34 99 0 1
|
||||
warlock 12 dragons_lair 100 4 0 4.4 7.5 0 76 98 0 2
|
||||
bard 3 forest_shadows 100 3 0 4.1 4.2 0 1 100 0 0
|
||||
bard 7 forest_shadows 100 6 0 7.1 6 0 99 100 0 0
|
||||
bard 12 forest_shadows 100 7 7 7.8 7 100 100 0 0 0
|
||||
cleric 3 forest_shadows 100 5 0 5.6 4.7 0 3 100 0 0
|
||||
cleric 7 forest_shadows 100 6 1 6.7 5.7 5 68 95 0 0
|
||||
cleric 12 forest_shadows 100 7 8 8.6 6.6 81 81 19 0 0
|
||||
druid 3 forest_shadows 100 5 0 5.1 5.1 0 13 100 0 0
|
||||
druid 7 forest_shadows 100 6 5 7.6 6.9 91 100 9 0 0
|
||||
druid 12 forest_shadows 100 7 7 7.7 7 100 100 0 0 0
|
||||
fighter 3 forest_shadows 100 5 0 5.8 5.3 0 25 100 0 0
|
||||
fighter 7 forest_shadows 100 6 6 6.5 7 100 100 0 0 0
|
||||
fighter 12 forest_shadows 100 6 6 7.4 7 100 100 0 0 0
|
||||
mage 3 forest_shadows 100 4 0 4.4 3.8 0 0 100 0 0
|
||||
mage 7 forest_shadows 100 6 7 7 6.9 89 98 11 0 0
|
||||
mage 12 forest_shadows 100 7 7 7.4 7 100 100 0 0 0
|
||||
paladin 3 forest_shadows 100 6 0 6.9 5.8 0 77 100 0 0
|
||||
paladin 7 forest_shadows 100 6 6 6.6 7 100 100 0 0 0
|
||||
paladin 12 forest_shadows 100 6 6 6.4 7 100 100 0 0 0
|
||||
ranger 3 forest_shadows 100 12 0 11.8 5.3 0 33 100 0 0
|
||||
ranger 7 forest_shadows 100 16 16 17.5 6 3 100 97 0 0
|
||||
ranger 12 forest_shadows 100 14 14 16 7 100 100 0 0 0
|
||||
rogue 3 forest_shadows 100 5 0 6.3 5.7 0 69 100 0 0
|
||||
rogue 7 forest_shadows 100 6 7 6.9 6.8 80 100 20 0 0
|
||||
rogue 12 forest_shadows 100 7 7 6.9 7 100 100 0 0 0
|
||||
sorcerer 3 forest_shadows 100 3 0 4.1 3.6 0 0 100 0 0
|
||||
sorcerer 7 forest_shadows 100 6 6 7.5 6.5 62 85 38 0 0
|
||||
sorcerer 12 forest_shadows 100 6 6 7.2 7 100 100 0 0 0
|
||||
warlock 3 forest_shadows 100 4 0 4.6 4.1 0 0 100 0 0
|
||||
warlock 7 forest_shadows 100 6 6 6.6 6.4 45 96 55 0 0
|
||||
warlock 12 forest_shadows 100 5 5 6.5 7 100 100 0 0 0
|
||||
bard 3 goblin_warrens 100 5 0 4.8 4.9 0 93 100 0 0
|
||||
bard 7 goblin_warrens 100 4 4 5.4 6 99 99 1 0 0
|
||||
bard 12 goblin_warrens 100 4 4 4.5 6 100 100 0 0 0
|
||||
cleric 3 goblin_warrens 100 4 3 4.3 5 9 86 91 0 0
|
||||
cleric 7 goblin_warrens 100 4 4 5.2 5.9 96 96 4 0 0
|
||||
cleric 12 goblin_warrens 100 4 4 4.9 5.9 96 96 4 0 0
|
||||
druid 3 goblin_warrens 100 5 5 5.1 5.6 67 92 33 0 0
|
||||
druid 7 goblin_warrens 100 3 3 4.1 6 100 100 0 0 0
|
||||
druid 12 goblin_warrens 100 4 4 4.8 6 100 100 0 0 0
|
||||
fighter 3 goblin_warrens 100 4 5 5.1 5.6 66 94 34 0 0
|
||||
fighter 7 goblin_warrens 100 4 4 5.2 6 100 100 0 0 0
|
||||
fighter 12 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
mage 3 goblin_warrens 100 7 7 6.8 5.6 68 87 32 0 0
|
||||
mage 7 goblin_warrens 100 5 5 6.3 6 100 100 0 0 0
|
||||
mage 12 goblin_warrens 100 7 7 7.5 6 100 100 0 0 0
|
||||
paladin 3 goblin_warrens 100 4 5 5.4 5.8 80 97 20 0 0
|
||||
paladin 7 goblin_warrens 100 5 5 5.5 6 100 100 0 0 0
|
||||
paladin 12 goblin_warrens 100 5 5 6.1 6 100 100 0 0 0
|
||||
ranger 3 goblin_warrens 100 5 0 5.6 4.9 0 89 100 0 0
|
||||
ranger 7 goblin_warrens 100 4 4 5.2 6 100 100 0 0 0
|
||||
ranger 12 goblin_warrens 100 4 4 5.4 6 100 100 0 0 0
|
||||
rogue 3 goblin_warrens 100 8 8 7.7 5.9 86 100 14 0 0
|
||||
rogue 7 goblin_warrens 100 7 7 7.6 6 100 100 0 0 0
|
||||
rogue 12 goblin_warrens 100 7 7 8 6 100 100 0 0 0
|
||||
sorcerer 3 goblin_warrens 100 7 7 7.1 5.5 67 82 33 0 0
|
||||
sorcerer 7 goblin_warrens 100 5 5 6.7 5.9 95 95 5 0 0
|
||||
sorcerer 12 goblin_warrens 100 7 7 7 6 100 100 0 0 0
|
||||
warlock 3 goblin_warrens 100 4 5 4.8 5.3 56 78 44 0 0
|
||||
warlock 7 goblin_warrens 100 5 5 5.3 6 100 100 0 0 0
|
||||
warlock 12 goblin_warrens 100 5 5 5.4 6 100 100 0 0 0
|
||||
bard 3 manor_blackspire 100 4 0 4.5 4.6 0 2 100 0 0
|
||||
bard 7 manor_blackspire 100 4 0 5.3 6 0 54 100 0 0
|
||||
bard 12 manor_blackspire 100 4 3 4.5 6 1 68 99 0 0
|
||||
cleric 3 manor_blackspire 100 3 0 3.9 4.4 0 0 100 0 0
|
||||
cleric 7 manor_blackspire 100 4 0 4.8 5.7 0 32 100 0 0
|
||||
cleric 12 manor_blackspire 100 5 5 5 6 6 58 94 0 0
|
||||
druid 3 manor_blackspire 100 4 0 3.8 5 0 13 100 0 0
|
||||
druid 7 manor_blackspire 100 4 0 4.9 6 0 58 100 0 0
|
||||
druid 12 manor_blackspire 100 4 4 4.4 6.7 71 82 29 0 0
|
||||
fighter 3 manor_blackspire 100 4 0 4.4 5.6 0 15 100 0 0
|
||||
fighter 7 manor_blackspire 100 3 4 3.5 6.2 17 100 83 0 0
|
||||
fighter 12 manor_blackspire 100 5 5 5.2 7 100 100 0 0 0
|
||||
mage 3 manor_blackspire 100 4 0 5.6 3.9 0 0 100 0 0
|
||||
mage 7 manor_blackspire 100 6 12 6.6 6 2 50 98 0 0
|
||||
mage 12 manor_blackspire 100 5 6 6.1 6.5 46 68 54 0 0
|
||||
paladin 3 manor_blackspire 100 3 0 4 5.7 0 42 100 0 0
|
||||
paladin 7 manor_blackspire 100 3 3 4.3 6.1 5 99 95 0 0
|
||||
paladin 12 manor_blackspire 100 4 4 4.3 6.9 91 100 9 0 0
|
||||
ranger 3 manor_blackspire 100 4 0 5 5.4 0 17 100 0 0
|
||||
ranger 7 manor_blackspire 100 5 0 5.8 6 0 100 100 0 0
|
||||
ranger 12 manor_blackspire 100 5 5 5.1 6.1 10 100 90 0 0
|
||||
rogue 3 manor_blackspire 100 6 0 6.6 5.6 0 42 100 0 0
|
||||
rogue 7 manor_blackspire 100 6 0 7.1 6 0 98 100 0 0
|
||||
rogue 12 manor_blackspire 100 6 6 6.6 6.8 82 100 18 0 0
|
||||
sorcerer 3 manor_blackspire 100 5 0 5.2 3.6 0 0 100 0 0
|
||||
sorcerer 7 manor_blackspire 100 7 0 8 5.9 0 40 100 0 0
|
||||
sorcerer 12 manor_blackspire 100 5 5 7 6.5 47 69 53 0 0
|
||||
warlock 3 manor_blackspire 100 4 0 4.8 4.4 0 0 100 0 0
|
||||
warlock 7 manor_blackspire 100 4 0 5.4 6 0 49 100 0 0
|
||||
warlock 12 manor_blackspire 100 5 4 5.5 6.3 27 80 73 0 0
|
||||
bard 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 underdark 100 2 0 3 3.7 0 5 100 0 0
|
||||
bard 12 underdark 100 4 0 4.4 5.7 0 64 100 0 0
|
||||
cleric 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 underdark 100 2 0 3.5 3.1 0 1 100 0 0
|
||||
cleric 12 underdark 100 3 0 4.3 4.8 1 10 99 0 0
|
||||
druid 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 underdark 100 4 0 3.9 3.7 0 4 100 0 0
|
||||
druid 12 underdark 100 5 5 5.7 6.2 33 77 67 0 0
|
||||
fighter 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 underdark 100 4 6 5.5 6.1 10 90 90 0 0
|
||||
fighter 12 underdark 100 4 4 4.7 7 100 100 0 0 0
|
||||
mage 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 underdark 100 2 0 2.9 3.4 0 1 100 0 0
|
||||
mage 12 underdark 100 3 4 4.2 5.6 17 44 83 0 0
|
||||
paladin 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 underdark 100 5 0 5.5 5.9 0 89 100 0 0
|
||||
paladin 12 underdark 100 4 4 4.7 6.9 87 100 13 0 0
|
||||
ranger 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 underdark 100 10 0 11.8 6 0 98 100 0 0
|
||||
ranger 12 underdark 100 10 16 10.1 6 4 100 96 0 0
|
||||
rogue 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 underdark 100 5 3 5.3 5.9 1 78 99 0 0
|
||||
rogue 12 underdark 100 4 4 5 7 99 100 1 0 0
|
||||
sorcerer 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 underdark 100 2 0 3.1 3.1 0 1 100 0 0
|
||||
sorcerer 12 underdark 100 3 3 3.6 5.1 10 29 90 0 0
|
||||
warlock 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 underdark 100 3 0 4 3.6 0 5 100 0 0
|
||||
warlock 12 underdark 100 5 7 5.3 5.8 9 64 91 0 0
|
||||
@@ -1,67 +0,0 @@
|
||||
# J2a — autoResolveCombat cast+consume picker (verification sweep)
|
||||
|
||||
**Date:** 2026-05-17
|
||||
**Corpus:** `sim_results/j2a_traces.jsonl` — 240 runs (6 classes × {manor_blackspire, underdark} × L12 × n=20)
|
||||
**Pre-state corpus:** `sim_results/j2_traces.jsonl` (same shape, picker disabled). See [j2_findings.md](j2_findings.md) for the strawman diagnosis that motivated this fix.
|
||||
|
||||
## What J2a shipped
|
||||
|
||||
- `internal/plugin/expedition_sim.go`:
|
||||
- New `simPickCombatAction(uid, sess)` decision tree:
|
||||
1. HP < 40% MaxHP + heal consumable in inventory → `!consume <heal>`
|
||||
2. Caster with a usable damage spell (slot or cantrip) → `!cast <spell>`
|
||||
3. Otherwise → `!attack`
|
||||
- New `simPickSpell(c, uid)` ranks prepared damage-effect spells by slot level (descending) then expected damage from the dice string. Reaction-cast spells excluded; non-cantrips require an available slot at their native level (no upcasting in v1).
|
||||
- `BuildCharacter` now calls `ensureSpellsForCharacter` so the synthetic spellbook is populated (prod players hit this on character creation; the sim path skipped it).
|
||||
- `autoResolveCombat` dispatches via the picker instead of always swinging.
|
||||
|
||||
Built on top of the per-round `-trace` plumbing landed earlier in J2 (`SimCombatSummary.Events`, `SetSimIncludeTrace`).
|
||||
|
||||
## Verification (n=20 per cell, L12 only — same cells as j2_findings)
|
||||
|
||||
| class | zone | n | reachBoss | won | lost | rnd | pDmg | eDmg | slotRuns | casts | consumeRuns | eHP@loss |
|
||||
|----------|------------------|----|-----------|-----|------|------|-------|-------|----------|-------|-------------|----------|
|
||||
| mage | manor_blackspire | 20 | 15 | **12** | 3 | 7.2 | 133.0 | 74.3 | 15 / 15 | 93 | 12 | 83.3 |
|
||||
| mage | underdark | 20 | 8 | 3 | 5 | 7.0 | 143.8 | 78.6 | 8 / 8 | 54 | 2 | 34.2 |
|
||||
| cleric | manor_blackspire | 20 | 6 | 2 | 4 | 11.3 | 101.3 | 146.2 | 6 / 6 | 58 | 5 | 64.8 |
|
||||
| cleric | underdark | 20 | 4 | 0 | 4 | 7.0 | 74.5 | 89.5 | 4 / 4 | 28 | 0 | 87.5 |
|
||||
| sorcerer | manor_blackspire | 20 | 13 | **9** | 4 | 8.0 | 130.9 | 87.3 | 13 / 13 | 91 | 8 | 53.2 |
|
||||
| sorcerer | underdark | 20 | 7 | 1 | 6 | 5.9 | 89.6 | 67.4 | 7 / 7 | 40 | 1 | 86.2 |
|
||||
| warlock | manor_blackspire | 20 | 12 | 6 | 6 | 13.2 | 131.0 | 140.6 | 12 / 12 | 141 | 9 | 45.5 |
|
||||
| warlock | underdark | 20 | 15 | 0 | 15 | 6.8 | 74.3 | 82.5 | 15 / 15 | 101 | 1 | 87.7 |
|
||||
| bard | manor_blackspire | 20 | 12 | 0 | 12 | 10.6 | 68.1 | 128.2 | 12 / 12 | 117 | 6 | 75.9 |
|
||||
| bard | underdark | 20 | 12 | 0 | 12 | 11.2 | 74.3 | 108.8 | 12 / 12 | 132 | 2 | 87.7 |
|
||||
| druid | manor_blackspire | 20 | 15 | **14** | 1 | 6.9 | 142.6 | 84.5 | 15 / 15 | 87 | 11 | 79.0 |
|
||||
| druid | underdark | 20 | 18 | 3 | 15 | 5.1 | 123.3 | 82.3 | 18 / 18 | 85 | 5 | 47.5 |
|
||||
|
||||
`slotRuns` = boss fights where ≥1 spell_cast fired. `casts` = total spell_cast events. `consumeRuns` = fights with ≥1 use_consumable. `eHP@loss` = mean enemy HP remaining when player lost.
|
||||
|
||||
## DoD check
|
||||
|
||||
- **J2a DoD: ≥80% of boss fights produce a cast or consumable use.** **MET** — every cell shows `slotRuns == reachBoss` (100% cast rate).
|
||||
- Manor mean clear (5 trailer casters): mage 60%, sorcerer 45%, warlock 30%, bard 0%, cleric 10%. Mage and sorcerer clear the ≥40% J2 target on the strength of the sim fix alone; warlock/cleric are close, bard is the one outlier still at zero.
|
||||
- Druid jumped 0% → 70% manor / 0% → 15% underdark. Pre-J2a it was the lone mid-band class on weapon-attack alone; with cast on top, druid pulls into the top tier.
|
||||
|
||||
## What's still broken and why
|
||||
|
||||
- **Bard 0% clear despite firing 117 casts/cell.** Bard's prepared damage spell registry is thin: `vicious_mockery` cantrip (4d4 at L11) and `shatter` L2 (3d8) are the only damage-effect options in `defaultKnownSpells`. Every other bard spell is control/buff/heal, which the v1 picker skips. Bard's average pDmg 68 in 11-round fights = 6/round — that's accurate for the spell pool, not a picker bug. Fix candidates: (a) extend bard's default known-spell list with a damage L3+; (b) widen picker to score `EffectControl` (hold_person, hypnotic_pattern) which trivializes enemy turns and effectively converts to damage by buying free player rounds; (c) include healing spells in the consume-priority path. **(b)** has the highest expected ROI and lifts cleric and warlock too.
|
||||
- **Cleric still bottom-of-table.** 10% manor / 0% underdark. Cleric's damage-effect spells: `sacred_flame` cantrip (4d8 at L11) — that's it. Same shape problem as bard. `spiritual_weapon`, `bless`, `guiding_bolt`, `cure_wounds` aren't reachable by the v1 picker. Fix: same as bard — score control spells and recognise heal spells as alternatives to consumables (cleric has 40-HP healing word at low slot cost).
|
||||
- **Warlock underdark 0%.** Different shape: high cast rate (101 casts/15 fights = 7/round), high player damage (74), but loses anyway because enemy damage averaged 82.5 and warlock has no defensive lever. Underdark boss is dropping warlock before warlock can drop it. This is a class-balance problem the post-J2b corpus needs to confirm before we move on.
|
||||
|
||||
## Implications for J2b (the big re-baseline)
|
||||
|
||||
A full n=100 all-classes baseline (`sim_results/baseline_j2a_all10.jsonl`) is kicked off; that replaces `baseline_j1_all10.jsonl` as the canonical post-fix corpus. Expected shape:
|
||||
|
||||
- Mage / sorcerer / druid pull into mid-band (40–70% L12 clear range).
|
||||
- Bard / cleric stay at bottom, but the *reason* is a thin damage-spell pool, not a sim artifact.
|
||||
- Warlock somewhere middle; partial-clear depending on zone.
|
||||
- Martials should be unchanged (picker is a no-op for non-casters with no low-HP heal trigger).
|
||||
|
||||
If that picture holds, the right J2 follow-up is **picker widening** (control + heal scoring) rather than per-class balance riders. Cleaner than five class buffs.
|
||||
|
||||
## Files touched
|
||||
|
||||
- `internal/plugin/expedition_sim.go` — picker, BuildCharacter spell-seed, dispatch in autoResolveCombat.
|
||||
- `cmd/expedition-sim/main.go` — already had `-trace` from earlier in J2.
|
||||
|
||||
No prod paths changed. The fix is sim-scoped.
|
||||
@@ -1,406 +0,0 @@
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2841882662/gogobee.db
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-0 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-0 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-0 ability="Healing Word"
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-0 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-0 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-225352482/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-4205788393/gogobee.db
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-1 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-1 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-1 ability="Healing Word"
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-1 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-1 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-1 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-1930907323/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2608712787/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-1176694106/gogobee.db
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-0 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-0 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-0 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2955343031/gogobee.db
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-2 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-2 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-2 ability="Healing Word"
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-2 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-2 wanted=1 removed=0
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-4034633129/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2929207905/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2110260434/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2284107973/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-412795061/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-1173027611/gogobee.db
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-1 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-1 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2445381708/gogobee.db
|
||||
2026/05/17 14:43:54 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-1 ability="Healing Word"
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-1821032632/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-2786520320/gogobee.db
|
||||
2026/05/17 14:43:54 INFO database initialized path=/tmp/expedition-sim-3005065205/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-791965660/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2223320144/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-60870279/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3836426391/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-3 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-3 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-3 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-3 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3903226518/gogobee.db
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-3 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3424518245/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3911775726/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-2 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-2 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-2 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-557009472/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-891659795/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2790310577/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1893494180/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2599204073/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3107205757/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3202057156/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2588260230/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-4 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-4 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-4 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-173844620/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-3 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-3 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-3 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3411128379/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3548322566/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3088530070/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-591597397/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2749783546/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2720689093/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1695224480/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-957000268/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-5 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-5 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-5 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-5 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1260755451/gogobee.db
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-5 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-974084076/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2721135246/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-4 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-4 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-4 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-4 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1048519529/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1682387304/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-657608895/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1564107756/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3063072436/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-6 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-6 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3622268633/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1467797736/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-6 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-6 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2232860775/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2627481174/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2390666327/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-5 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-5 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-5 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1914770656/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2824103805/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-95110996/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2829759744/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-1001150422/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-929451847/gogobee.db
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-7 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-7 ability="Healing Word"
|
||||
2026/05/17 14:43:55 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-7 ability="Healing Word"
|
||||
2026/05/17 14:43:55 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-7 wanted=1 removed=0
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-3436574612/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2958798854/gogobee.db
|
||||
2026/05/17 14:43:55 INFO database initialized path=/tmp/expedition-sim-2592630111/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-31480089/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2243703025/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-6 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-6 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-6 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2613244335/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-395237346/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3326655556/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1845800138/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-8 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-8 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-8 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2772701177/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3972849183/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3672392659/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-313329452/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-586346631/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2765126792/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1436131991/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-7 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-341586518/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-7 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-7 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-195889630/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1979402690/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1419244121/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-9 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-9 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-197539845/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-9 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-4032773905/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3701142355/gogobee.db
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-9 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-9 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-9 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3902897193/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-808797586/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-4136221636/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1986950995/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-8 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-8 ability="Healing Word"
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1859825555/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-8 ability="Healing Word"
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-8 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2946961527/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2429531262/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-10 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-10 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-10 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3262540763/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-406280733/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-4121783865/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3886271696/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-755937194/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2787117412/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-9 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-9 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-9 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1277058289/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-4186523944/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-3400700333/gogobee.db
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-11 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-11 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-11 ability="Healing Word"
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2057624917/gogobee.db
|
||||
2026/05/17 14:43:56 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-11 wanted=1 removed=0
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-893758964/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-2865260923/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-893271695/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-1834209609/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-259340017/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-443152924/gogobee.db
|
||||
2026/05/17 14:43:56 INFO database initialized path=/tmp/expedition-sim-534798107/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-12 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-12 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-12 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1492944299/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-10 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-10 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-10 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1329640727/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3510807036/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1677312784/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2967123722/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3955369742/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1638843092/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3971836417/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1265464193/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2557575696/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-4287591977/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2698331497/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-13 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-13 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-13 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2910676030/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1627295865/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3781791468/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1091889186/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-11 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-11 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-11 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1848832537/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1083592695/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3484468071/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-223486995/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2518075308/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-14 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-14 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3752040653/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-14 ability="Healing Word"
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-14 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-14 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-14 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-14 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3390344411/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-150176521/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3536451781/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-12 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-12 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-12 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3886065500/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1109050757/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-4152157644/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-4170366951/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2833450096/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-15 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1445222612/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-15 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-15 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-3602208598/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1802403687/gogobee.db
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-464538117/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-591307153/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1657565653/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1067707991/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-13 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-13 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-13 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1130536036/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-555324116/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-979982115/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-564817425/gogobee.db
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1918459856/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-16 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2353824581/gogobee.db
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-16 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-16 ability="Healing Word"
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-1599178712/gogobee.db
|
||||
2026/05/17 14:43:57 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-16 wanted=1 removed=0
|
||||
2026/05/17 14:43:57 INFO database initialized path=/tmp/expedition-sim-2711333189/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3845334846/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1943741524/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-14 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-14 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-14 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3108660236/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-4121050120/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2311303713/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-106280646/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1575016660/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-17 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2656288065/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-17 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-17 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-719488742/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1262298393/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2481790746/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2256556235/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2013936558/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-15 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-4204714177/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-15 ability="Healing Word"
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-15 ability="Healing Word"
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-manor_blackspire-15 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2304427836/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1363285098/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1907634492/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2542100338/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-18 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2279242167/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-487534128/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-18 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-18 ability="Healing Word"
|
||||
2026/05/17 14:43:58 WARN auto-heal cleanup: short on inventory user=@sim:cleric-l12-underdark-18 wanted=1 removed=0
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3871894932/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3809454218/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3398006598/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-4239387458/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-16 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3581761743/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-16 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-16 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3490615026/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2753050590/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-886249041/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3732143829/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-19 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-19 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-underdark-19 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1506959/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1569482860/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1104745961/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1619123479/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1516630739/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1113187191/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-17 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1860557687/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-17 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-17 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-189211669/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2904984255/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-1696777558/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-2383322429/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-910046284/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3952079025/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-260516460/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-4221126017/gogobee.db
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-18 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-18 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-18 ability="Healing Word"
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3199452696/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-401258720/gogobee.db
|
||||
2026/05/17 14:43:58 INFO database initialized path=/tmp/expedition-sim-3635517879/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1840100184/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-3744271099/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2513846601/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-4136361311/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2024110754/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-3010651090/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-3550751545/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-4130428632/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1514264878/gogobee.db
|
||||
2026/05/17 14:43:59 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-19 ability="Healing Word"
|
||||
2026/05/17 14:43:59 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-19 ability="Healing Word"
|
||||
2026/05/17 14:43:59 INFO dnd: armed ability fired (turn-based build) user=@sim:cleric-l12-manor_blackspire-19 ability="Healing Word"
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2880784602/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-4289186554/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-4146683819/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-160060743/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-353707644/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1636999209/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-3390283268/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-826756018/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-547509131/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-4022639383/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-3551275989/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1302856577/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2850236305/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2113733943/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2254598562/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-254159564/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-739650239/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2204564464/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2356786064/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2226186626/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1705628391/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-634290542/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1269283242/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-3919510895/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-1823197516/gogobee.db
|
||||
2026/05/17 14:43:59 INFO database initialized path=/tmp/expedition-sim-2557976063/gogobee.db
|
||||
2026/05/17 14:44:00 INFO database initialized path=/tmp/expedition-sim-357381407/gogobee.db
|
||||
2026/05/17 14:44:00 INFO database initialized path=/tmp/expedition-sim-53293036/gogobee.db
|
||||
2026/05/17 14:44:00 INFO database initialized path=/tmp/expedition-sim-1739792480/gogobee.db
|
||||
2026/05/17 14:44:00 INFO database initialized path=/tmp/expedition-sim-2016742342/gogobee.db
|
||||
2026/05/17 14:44:00 INFO database initialized path=/tmp/expedition-sim-1658638379/gogobee.db
|
||||
2026/05/17 14:44:00 INFO database initialized path=/tmp/expedition-sim-139478709/gogobee.db
|
||||
File diff suppressed because one or more lines are too long
@@ -1,151 +0,0 @@
|
||||
class level zone n p50_yld p50_yld_clr mean_yld mean_rms %clr %boss %tpk %fled %ext
|
||||
bard 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 dragons_lair 100 3 0 3.6 6.1 0 36 99 0 1
|
||||
bard 12 dragons_lair 100 4 0 5 7.6 0 80 100 0 0
|
||||
cleric 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 dragons_lair 100 4 0 3.5 5.1 0 13 100 0 0
|
||||
cleric 12 dragons_lair 100 4 0 4 7.2 0 58 100 0 0
|
||||
druid 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 dragons_lair 100 3 0 3.7 6 0 36 99 0 1
|
||||
druid 12 dragons_lair 100 3 0 3.8 7.5 0 77 99 0 1
|
||||
fighter 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 dragons_lair 100 4 0 4.3 7.2 0 72 99 0 1
|
||||
fighter 12 dragons_lair 100 4 0 4.4 8 0 100 100 0 0
|
||||
mage 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 dragons_lair 100 4 0 4.4 5.6 0 28 100 0 0
|
||||
mage 12 dragons_lair 100 6 0 6.3 7.3 0 66 99 0 1
|
||||
paladin 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 dragons_lair 100 3 0 3.9 7 0 59 93 0 7
|
||||
paladin 12 dragons_lair 100 4 0 4.2 7.9 0 96 100 0 0
|
||||
ranger 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 dragons_lair 100 8 0 8.9 7.7 0 87 97 0 3
|
||||
ranger 12 dragons_lair 100 7 0 9.2 8 0 100 100 0 0
|
||||
rogue 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 dragons_lair 100 5 0 5.9 6.5 0 52 95 0 5
|
||||
rogue 12 dragons_lair 100 6 0 6.5 7.9 0 96 99 0 1
|
||||
sorcerer 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 dragons_lair 100 3 0 4.1 5.4 0 18 98 0 2
|
||||
sorcerer 12 dragons_lair 100 5 0 5.3 7.2 0 60 100 0 0
|
||||
warlock 3 dragons_lair 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 dragons_lair 100 3 0 3.4 5.8 0 28 100 0 0
|
||||
warlock 12 dragons_lair 100 3 0 4.3 7.4 0 70 100 0 0
|
||||
bard 3 forest_shadows 100 4 0 5.1 4.3 0 1 100 0 0
|
||||
bard 7 forest_shadows 100 7 0 7.6 6 0 99 100 0 0
|
||||
bard 12 forest_shadows 100 6 6 6.6 7 100 100 0 0 0
|
||||
cleric 3 forest_shadows 100 4 0 5.1 4.6 0 1 100 0 0
|
||||
cleric 7 forest_shadows 100 6 0 7.5 5.8 0 73 100 0 0
|
||||
cleric 12 forest_shadows 100 9 9 8.1 6.8 90 90 10 0 0
|
||||
druid 3 forest_shadows 100 5 0 6 5.2 0 11 100 0 0
|
||||
druid 7 forest_shadows 100 7 7 7.9 6.8 84 99 16 0 0
|
||||
druid 12 forest_shadows 100 7 7 7.4 7 100 100 0 0 0
|
||||
fighter 3 forest_shadows 100 4 0 5.2 5.3 0 28 100 0 0
|
||||
fighter 7 forest_shadows 100 6 6 6.7 7 100 100 0 0 0
|
||||
fighter 12 forest_shadows 100 5 5 6.2 7 100 100 0 0 0
|
||||
mage 3 forest_shadows 100 3 0 4.6 3.9 0 1 100 0 0
|
||||
mage 7 forest_shadows 100 6 6 6.7 6.8 86 96 14 0 0
|
||||
mage 12 forest_shadows 100 6 6 7 7 99 99 1 0 0
|
||||
paladin 3 forest_shadows 100 6 0 7.8 5.9 0 86 100 0 0
|
||||
paladin 7 forest_shadows 100 7 7 7.7 7 100 100 0 0 0
|
||||
paladin 12 forest_shadows 100 6 6 6.6 7 100 100 0 0 0
|
||||
ranger 3 forest_shadows 100 11 0 11.7 5.2 0 23 100 0 0
|
||||
ranger 7 forest_shadows 100 13 13 14.8 7 100 100 0 0 0
|
||||
ranger 12 forest_shadows 100 13 13 15.1 7 100 100 0 0 0
|
||||
rogue 3 forest_shadows 100 5 0 6.4 5.8 0 80 100 0 0
|
||||
rogue 7 forest_shadows 100 8 8 8.6 6.9 85 100 15 0 0
|
||||
rogue 12 forest_shadows 100 6 6 6.7 7 100 100 0 0 0
|
||||
sorcerer 3 forest_shadows 100 4 0 5.3 3.5 0 0 100 0 0
|
||||
sorcerer 7 forest_shadows 100 6 6 6.4 6.5 63 86 37 0 0
|
||||
sorcerer 12 forest_shadows 100 7 7 7.5 7 98 98 2 0 0
|
||||
warlock 3 forest_shadows 100 4 0 5.1 4.2 0 1 100 0 0
|
||||
warlock 7 forest_shadows 100 5 7 6.4 6.3 34 96 66 0 0
|
||||
warlock 12 forest_shadows 100 7 7 7.8 7 100 100 0 0 0
|
||||
bard 3 goblin_warrens 100 4 0 4.4 4.8 0 80 100 0 0
|
||||
bard 7 goblin_warrens 100 5 5 5.7 6 100 100 0 0 0
|
||||
bard 12 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
cleric 3 goblin_warrens 100 4 5 4.6 5 15 85 85 0 0
|
||||
cleric 7 goblin_warrens 100 4 4 4.6 5.8 91 91 9 0 0
|
||||
cleric 12 goblin_warrens 100 4 4 4.9 5.9 96 96 4 0 0
|
||||
druid 3 goblin_warrens 100 3 3 4 5.6 67 93 33 0 0
|
||||
druid 7 goblin_warrens 100 5 5 5.4 6 100 100 0 0 0
|
||||
druid 12 goblin_warrens 100 4 4 4.6 6 100 100 0 0 0
|
||||
fighter 3 goblin_warrens 100 5 5 5.2 5.5 54 92 46 0 0
|
||||
fighter 7 goblin_warrens 100 5 5 6.1 6 100 100 0 0 0
|
||||
fighter 12 goblin_warrens 100 4 4 5.7 6 100 100 0 0 0
|
||||
mage 3 goblin_warrens 100 6 8 6.9 5.5 67 78 33 0 0
|
||||
mage 7 goblin_warrens 100 6 6 7 5.9 97 97 3 0 0
|
||||
mage 12 goblin_warrens 100 7 7 7.7 6 100 100 0 0 0
|
||||
paladin 3 goblin_warrens 100 5 5 5.1 5.9 88 98 12 0 0
|
||||
paladin 7 goblin_warrens 100 5 5 5.6 6 100 100 0 0 0
|
||||
paladin 12 goblin_warrens 100 4 4 5.3 6 100 100 0 0 0
|
||||
ranger 3 goblin_warrens 100 5 6 5.9 5.5 64 90 36 0 0
|
||||
ranger 7 goblin_warrens 100 6 6 6.3 6 100 100 0 0 0
|
||||
ranger 12 goblin_warrens 100 5 5 5.5 6 100 100 0 0 0
|
||||
rogue 3 goblin_warrens 100 7 7 6.9 5.8 81 95 19 0 0
|
||||
rogue 7 goblin_warrens 100 6 6 6.9 6 100 100 0 0 0
|
||||
rogue 12 goblin_warrens 100 7 7 7.2 6 100 100 0 0 0
|
||||
sorcerer 3 goblin_warrens 100 6 6 6.5 5.5 66 79 34 0 0
|
||||
sorcerer 7 goblin_warrens 100 7 7 6.9 5.9 95 95 5 0 0
|
||||
sorcerer 12 goblin_warrens 100 6 6 7.1 6 100 100 0 0 0
|
||||
warlock 3 goblin_warrens 100 4 5 4.9 5.4 56 83 44 0 0
|
||||
warlock 7 goblin_warrens 100 4 4 5 6 100 100 0 0 0
|
||||
warlock 12 goblin_warrens 100 5 5 5.2 6 100 100 0 0 0
|
||||
bard 3 manor_blackspire 100 3 0 4.5 4.6 0 1 100 0 0
|
||||
bard 7 manor_blackspire 100 4 0 4.8 6 0 58 100 0 0
|
||||
bard 12 manor_blackspire 100 5 11 4.8 6 2 76 98 0 0
|
||||
cleric 3 manor_blackspire 100 3 0 3.3 4.1 0 1 100 0 0
|
||||
cleric 7 manor_blackspire 100 4 0 4.3 5.7 0 24 100 0 0
|
||||
cleric 12 manor_blackspire 100 3 4 3.8 6 9 55 91 0 0
|
||||
druid 3 manor_blackspire 100 4 0 4.3 5.4 0 10 100 0 0
|
||||
druid 7 manor_blackspire 100 4 0 4.5 6 0 57 100 0 0
|
||||
druid 12 manor_blackspire 100 4 4 4.8 6.7 74 79 26 0 0
|
||||
fighter 3 manor_blackspire 100 4 0 3.9 5.4 0 21 100 0 0
|
||||
fighter 7 manor_blackspire 100 4 5 4.1 6.1 14 100 86 0 0
|
||||
fighter 12 manor_blackspire 100 4 4 4.4 7 100 100 0 0 0
|
||||
mage 3 manor_blackspire 100 4 0 4.7 3.8 0 0 100 0 0
|
||||
mage 7 manor_blackspire 100 5 22 6.4 5.9 1 49 99 0 0
|
||||
mage 12 manor_blackspire 100 5 5 5.8 6.5 49 63 51 0 0
|
||||
paladin 3 manor_blackspire 100 3 0 3.6 5.8 0 47 100 0 0
|
||||
paladin 7 manor_blackspire 100 5 4 5 6.2 17 98 83 0 0
|
||||
paladin 12 manor_blackspire 100 4 4 4.9 7 96 100 4 0 0
|
||||
ranger 3 manor_blackspire 100 4 0 5 5.3 0 15 100 0 0
|
||||
ranger 7 manor_blackspire 100 5 5 5.9 6.3 30 100 70 0 0
|
||||
ranger 12 manor_blackspire 100 4 4 5.3 7 100 100 0 0 0
|
||||
rogue 3 manor_blackspire 100 5 0 6.4 5.6 0 34 100 0 0
|
||||
rogue 7 manor_blackspire 100 6 7 6.6 6 4 99 96 0 0
|
||||
rogue 12 manor_blackspire 100 6 6 6.9 6.9 90 100 10 0 0
|
||||
sorcerer 3 manor_blackspire 100 4 0 5 3.9 0 0 100 0 0
|
||||
sorcerer 7 manor_blackspire 100 7 6 7.4 5.9 1 36 99 0 0
|
||||
sorcerer 12 manor_blackspire 100 6 7 7 6.5 47 60 53 0 0
|
||||
warlock 3 manor_blackspire 100 4 0 4.5 4.3 0 0 100 0 0
|
||||
warlock 7 manor_blackspire 100 4 0 4.9 6 0 65 100 0 0
|
||||
warlock 12 manor_blackspire 100 4 5 5.3 6.3 34 69 66 0 0
|
||||
bard 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
bard 7 underdark 100 3 0 3.7 3.8 0 3 100 0 0
|
||||
bard 12 underdark 100 4 0 4 5.7 0 66 100 0 0
|
||||
cleric 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
cleric 7 underdark 100 2 0 3 3.1 0 1 100 0 0
|
||||
cleric 12 underdark 100 4 0 5.1 4.8 0 13 100 0 0
|
||||
druid 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
druid 7 underdark 100 3 0 4.3 3.7 0 7 100 0 0
|
||||
druid 12 underdark 100 5 5 5.3 6.3 34 84 66 0 0
|
||||
fighter 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
fighter 7 underdark 100 5 6 4.9 6.1 10 96 90 0 0
|
||||
fighter 12 underdark 100 4 4 4.8 7 100 100 0 0 0
|
||||
mage 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
mage 7 underdark 100 2 0 3 3.1 0 0 100 0 0
|
||||
mage 12 underdark 100 4 4 4.6 5.8 19 60 81 0 0
|
||||
paladin 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
paladin 7 underdark 100 3 2 4.3 5.9 2 80 98 0 0
|
||||
paladin 12 underdark 100 4 4 4.8 7 96 100 4 0 0
|
||||
ranger 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
ranger 7 underdark 100 9 10 9.3 6.3 30 98 70 0 0
|
||||
ranger 12 underdark 100 9 9 9.7 7 100 100 0 0 0
|
||||
rogue 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
rogue 7 underdark 100 5 4 4.7 5.8 5 80 95 0 0
|
||||
rogue 12 underdark 100 5 5 5.5 6.9 94 99 6 0 0
|
||||
sorcerer 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
sorcerer 7 underdark 100 2 0 2.7 2.9 0 1 100 0 0
|
||||
sorcerer 12 underdark 100 3 8 3.7 5.1 8 32 92 0 0
|
||||
warlock 3 underdark 100 0 0 0 0 0 0 0 0 0
|
||||
warlock 7 underdark 100 2 0 3.5 3.6 0 3 100 0 0
|
||||
warlock 12 underdark 100 4 2 4.1 5.6 7 69 93 0 0
|
||||
@@ -1,81 +0,0 @@
|
||||
# J2b — Post-J2a all-classes baseline (n=100)
|
||||
|
||||
**Date:** 2026-05-17
|
||||
**Corpus:** `sim_results/baseline_j2a_v2_all10.jsonl` (15,000 rows = 10 classes × 3 levels × 5 zones × n=100). Per-cell tabular summary in `sim_results/j2b_all10_summary.txt`.
|
||||
**Replaces:** `sim_results/baseline_j1_all10.jsonl` as the post-sim-fix canonical corpus. The J1 numbers measured a strawman where casters never cast (see [j2_findings.md](j2_findings.md)).
|
||||
|
||||
## L12 leaderboard (mean %clr across all 5 zones)
|
||||
|
||||
| Class | J1 baseline | J2b | Δ | J1 boss% | J2b boss% | Per-zone J2b %clr (T1 / T2 / T3 / T4 / T5) |
|
||||
|----------|-------------|-------|--------|----------|-----------|--------------------------------------------|
|
||||
| fighter | 79.6 | 80.0 | **+0.4** | 100.0 | 100.0 | 100 / 100 / 100 / 100 / 0 |
|
||||
| ranger | 78.6 | 80.0 | **+1.4** | 100.0 | 100.0 | 100 / 100 / 100 / 100 / 0 |
|
||||
| paladin | 72.2 | 78.4 | **+6.2** | 99.6 | 99.2 | 100 / 100 / 96 / 96 / 0 |
|
||||
| rogue | 70.6 | 76.8 | **+6.2** | 99.0 | 99.0 | 100 / 100 / 90 / 94 / 0 |
|
||||
| druid | 38.6 | 61.6 | **+23.0** | 88.4 | 88.0 | 100 / 100 / 74 / 34 / 0 |
|
||||
| mage | 20.0 | 53.4 | **+33.4** | 77.2 | 77.6 | 100 / 99 / 49 / 19 / 0 |
|
||||
| sorcerer | 20.0 | 50.6 | **+30.6** | 70.4 | 70.0 | 100 / 98 / 47 / 8 / 0 |
|
||||
| warlock | 21.4 | 48.2 | **+26.8** | 82.2 | 81.6 | 100 / 100 / 34 / 7 / 0 |
|
||||
| bard | 21.6 | 40.4 | **+18.8** | 82.0 | 84.4 | 100 / 100 / 2 / 0 / 0 |
|
||||
| cleric | 18.6 | 39.0 | **+20.4** | 61.6 | 62.4 | 96 / 90 / 9 / 0 / 0 |
|
||||
|
||||
## Headline
|
||||
|
||||
1. **No martial regression.** Fighter/Ranger/Paladin/Rogue all moved within +0.4 to +6.2pp, indistinguishable from sweep variance. The `simMartialFirstClass` gate added after the v1 sweep saved Ranger (which had regressed -35.8pp when the picker burned L3 slots on `lightning_arrow` instead of letting the weapon-attack + Hunter's Mark + Extra Attack chassis swing).
|
||||
2. **Caster cliff is dissolved.** The pre-fix 19–22% cluster spread out to 39–62%. The picker alone — no balance changes — converted the trailers to mid-band classes.
|
||||
3. **Druid is now top-of-band-2 at 61.6%.** Wild Resilience's ThornLash on weapon swings plus the new cast path stacks cleanly. Druid is still defensive-first by design; the cast layer turns boss rooms from "swing-and-bleed" into "burn-and-finish".
|
||||
4. **T5 dragons_lair still walls everyone (0% clear across all 10 classes).** That's the J3 problem; J2 wasn't on the hook for it, and the sim-artifact half of J3's hypothesis 1 (`autoResolveCombat` never casting/consuming) is now closed by J2a.
|
||||
|
||||
## What's still trailing — bard and cleric
|
||||
|
||||
Bard L12 manor 2%, cleric L12 manor 9% — both reach the boss (~50–84%) and die there. **Not a sim artifact**; this is the spell pool. The v1 picker only scores damage-effect spells, and these two classes have thin damage rosters in `defaultKnownSpells`:
|
||||
|
||||
- **Bard** damage options: `vicious_mockery` (cantrip), `shatter` L2. Everything else in the bard kit is control / heal / buff, which the picker skips.
|
||||
- **Cleric** damage options: `sacred_flame` (cantrip), `guiding_bolt` L1, `spiritual_weapon` L2, `spirit_guardians` L3, `flame_strike` L5. The non-damage options (`bless`, `healing_word`, `mass_cure_wounds`, etc.) are skipped too.
|
||||
|
||||
Both classes' identity spells are control (`hold_person`, `hypnotic_pattern`, `command`) and heal (`cure_wounds`, `healing_word`, `mass_cure_wounds`). The picker treats those as zero-value.
|
||||
|
||||
Note on cleric underdark: 87% of L12 underdark runs end as `tpk` with stop `ended` — that's expedition-side starvation, not boss-fight TPK (only 13% reach boss/elite). Cleric's exploration loop is brittle for unrelated reasons (low STR/CON build, supply burn). Out of J2 scope.
|
||||
|
||||
## J2 DoD check
|
||||
|
||||
Reframed DoD (`gogobee_harvest_charges_plan.md` §6.J2, updated 2026-05-17):
|
||||
|
||||
- **J2a — ≥80% of boss fights produce a cast or consumable.** **MET** (100% cast rate in the verification sweep, [j2a_findings.md](j2a_findings.md)).
|
||||
- **J2b — caster L12 manor mean clear ≥ druid's pre-J2a 39%.** Mage 49 ✓, sorcerer 47 ✓, warlock 34 ✗ (close), bard 2 ✗, cleric 9 ✗. **3 of 5 pass.**
|
||||
- **No martial leader regresses >10pp.** **MET** (all +0.4 to +6.2pp).
|
||||
|
||||
Two trailers still under the floor (bard, cleric). They're now bottlenecked on **spell-pool richness for the v1 damage-only picker**, not on the sim itself. The cleanest next move:
|
||||
|
||||
## J2c — tried, reverted (2026-05-17)
|
||||
|
||||
Implemented two widening levers, ran two n=100 sweeps, and reverted both:
|
||||
|
||||
1. **Heal-spell preempt** (cure_wounds / healing_word / mass_cure_wounds preferred over heal consumable at low HP). Regressed **druid -10pp**: slot heals at L12 heal ~10HP vs 40HP from a tier-4 Spirit Tonic, and the picker burned slots druid needed for damage spells.
|
||||
2. **Control-spell scoring at 22** (denied-enemy-turn proxy). Regressed **warlock -6.6pp** — vampiric_touch L3 (10.5 expected over multiple rounds + heal) was outscored by hypnotic_pattern L3 (single denied turn). Dropping the score to 5 brought net deltas back to ±2pp but didn't lift bard or cleric, because the level-first sort prevents low-score control spells from ever winning over a higher-level damage option (which the trailer classes don't have at higher slots).
|
||||
|
||||
Corpora retained for reference: `sim_results/baseline_j2c_all10.jsonl` (heal-preempt + control@22) and `sim_results/baseline_j2c_v2_all10.jsonl` (control@5 only). The picker reverted to the J2b shape (damage-effect only, level-first sort, no heal-spell preempt).
|
||||
|
||||
**Real lever for bard/cleric trailing.** Their `defaultKnownSpells` damage rosters cap at L2 (bard: shatter; cleric: spiritual_weapon's 1d8). The picker can't pick higher-damage spells they don't have. Lifting these classes is therefore a **prod-level change to `defaultKnownSpells`** (add a damage option at L3+ for bard, a damage option at L4+ for cleric) — not a sim-picker change. Out of scope for J2; revisit alongside class identity / Open5e integration work.
|
||||
|
||||
## (original) Recommended J2c (now superseded by the section above)
|
||||
|
||||
**Widen the picker to score control + heal spells.**
|
||||
|
||||
- `EffectControl` (e.g. `hold_person`, `hypnotic_pattern`, `hideous_laughter`, `command`) should score as the *enemy damage it prevents over its expected effect duration* — i.e. each prevented enemy turn ≈ one round's worth of incoming damage. For a stunner that lands and lasts 1 round on a 30-dmg/round boss, that's a 30-equivalent. Better than most damage spells.
|
||||
- `EffectSpellHeal` should compete with the consume-on-low-HP branch — if the cleric has `mass_cure_wounds` ready, it should fire at the low-HP threshold instead of a `Spirit Tonic`.
|
||||
- `EffectBuffSelf` (e.g. `bless`, `shield_of_faith`) lifts to-hit chance / AC. Score in opening round of a fight only; subsequent rounds it's a waste.
|
||||
|
||||
This is one focused change in `simPickSpell` + `simPickCombatAction`. Expected impact: bard pulls into the 30–40% manor band (control spells are the bard identity); cleric pulls similarly. Martial leaders unchanged. Whether it's needed depends on operator: J2's reframed DoD allows shipping J2 with bard/cleric trailing if the prod target is "five classes mid-band, two below". Per [feedback_difficulty_target](.claude/memory/feedback_difficulty_target.md), the explicit ask is to lift trailers — that argues for landing J2c.
|
||||
|
||||
## Files touched this phase
|
||||
|
||||
- `internal/plugin/expedition_sim.go`:
|
||||
- `SimCombatSummary.Events`, `simIncludeTrace` + `SetSimIncludeTrace` (J2 diagnostic).
|
||||
- `simPickCombatAction`, `simPickSpell`, `simMartialFirstClass`, `simHealHPThresholdPct` (J2a picker + post-baseline fix).
|
||||
- `BuildCharacter` now seeds `ensureSpellsForCharacter`.
|
||||
- `autoResolveCombat` dispatches via the picker.
|
||||
- `cmd/expedition-sim/main.go`: `-trace` flag.
|
||||
- Docs: `sim_results/j2_findings.md`, `sim_results/j2a_findings.md`, `sim_results/j2b_findings.md`, `sim_results/j2b_all10_summary.txt`, plan §6.J2.
|
||||
|
||||
No prod combat / class / spell paths changed. Everything is in the sim harness.
|
||||
@@ -1,43 +0,0 @@
|
||||
# J3 — T5 dragons_lair universal wall (initial trace)
|
||||
|
||||
**Date:** 2026-05-17
|
||||
**Corpus:** `sim_results/j3_traces.jsonl` — 60 expeditions (6 representative classes × L12 × dragons_lair × n=10), per-round traces enabled. Hypothesis-sift only; not a balance sweep.
|
||||
**Pre-state:** post-J2 picker (`baseline_j2a_v2_all10.jsonl` shows 0% clear across all 10 classes at L12 dragons_lair).
|
||||
|
||||
## Boss-room aggregates (L12 vs `boss_*` of dragons_lair)
|
||||
|
||||
| class | n | reachBoss | won | rounds | pDmg | eDmg | enemyHPMax | enemyHP@end | playerHPMax | playerHP@end | casts | consume |
|
||||
|---------|----|-----------|-----|--------|-------|-------|------------|-------------|-------------|--------------|-------|---------|
|
||||
| fighter | 10 | 10 | 0 | 8.8 | 122.5 | 207.8 | **546** | 423.5 | 173.6 | 0 | 0 | 14 |
|
||||
| ranger | 10 | 10 | 0 | 8.8 | 133.4 | 197.1 | **546** | 412.6 | 131.0 | 0 | 0 | 18 |
|
||||
| paladin | 10 | 10 | 0 | 8.3 | 76.0 | 200.0 | **546** | 470.0 | 169.4 | 0 | 0 | 16 |
|
||||
| rogue | 10 | 9 | 0 | 6.6 | 63.7 | 168.6 | **546** | 482.3 | 133.2 | 0 | 0 | 11 |
|
||||
| druid | 10 | 9 | 0 | 4.8 | 122.4 | 136.9 | **546** | 423.6 | 131.0 | 0 | 34 | 9 |
|
||||
| mage | 10 | 6 | 0 | 5.2 | 92.7 | 129.2 | **546** | 453.3 | 112.5 | 0 | 26 | 5 |
|
||||
|
||||
## Diagnosis
|
||||
|
||||
T5 dragons_lair boss is at **546 max HP**. Solo characters (player HP 110–175) take 5–9 rounds to die, dealing 60–130 player damage in that time — they chew down ~10–25% of the boss before being TPK'd. This is **party content tuned for solo by accident**.
|
||||
|
||||
Per-round math: clearing 546 HP in ~10 rounds requires ~55 DPR sustained. Solo player DPR caps around 15–25 even on fighter (122/8.8 = 13.9 mean) and druid (122/4.8 = 25.5 — burst before dying). A 4-character party at the same DPR clears in ~7 rounds, which is the survivable window the boss seems tuned around.
|
||||
|
||||
Plan §J3 listed three hypotheses; this trace rules them out cleanly:
|
||||
|
||||
1. ~~`autoResolveCombat` unfair (only swings).~~ **Closed by J2a.** Druid/mage are now casting (34/26 casts in 10 fights) and still 0% clear.
|
||||
2. ~~Boss HP pool just too deep / multi-phase.~~ **No multi-phase complication observed** — fights are linear monotone HP descent, the boss just doesn't have a phase mechanic exposed in the trace. The HP pool *itself* is the issue.
|
||||
3. **Party scaling missing — boss is tuned for 4-character parties.** Confirmed by the consistent ~25% boss-HP-eaten-at-player-death across every class.
|
||||
|
||||
## Recommended J3 lever
|
||||
|
||||
Per `gogobee_harvest_charges_plan.md` §J3 likely-levers, the difficulty memo allows *lifting trailers without pushing monster scaling*. **Reducing boss scaling at low party counts is in-bounds.**
|
||||
|
||||
- **Auto-scale boss HP (and probably boss damage) by participant count.** A simple `bossHP *= (0.4 + 0.15*participants)` style ramp would put solo at 0.55× (≈ 300 HP from 546) and 4-up at full. That brings a 5–9 round solo fight in line with the boss-HP curve already validated at T3/T4 (post-J2 manor: 60%+ clear for top classes; underdark: 30–100%).
|
||||
- **Alternative:** Document dragons_lair as raid content. Surface a verb-style warning in `!zone` help ("Bring friends — this dragon eats solo adventurers."). Cheaper but doesn't lift the trailer end of the solo population, which `feedback_difficulty_target` says we should.
|
||||
|
||||
Recommendation: **try party-scaling first** — it's the lever that both keeps the boss difficult for parties AND respects the "lift trailers" feedback. Document-only is the fallback if scaling proves intrusive.
|
||||
|
||||
## Open question for the operator
|
||||
|
||||
What's the *intended* T5 boss audience — solo or party? If solo, scaling is required. If party, dragons_lair should be flagged as raid content and not appear in solo-play recommendations. The sim has been running solo throughout, which the plan's J-phase open questions already flagged needs an operator answer.
|
||||
|
||||
Out of scope here: implementing the scaling lever. That's a prod change in the boss HP / damage path. Picking up that work would need the operator's call on the audience question first.
|
||||
@@ -1,90 +0,0 @@
|
||||
2026/05/17 15:34:22 INFO database initialized path=/tmp/expedition-sim-3937486981/gogobee.db
|
||||
2026/05/17 15:34:22 INFO database initialized path=/tmp/expedition-sim-3578458476/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-1544593455/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-67658511/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-2710175851/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-3311525977/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-1482370118/gogobee.db
|
||||
2026/05/17 15:34:23 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-0 ability="Second Wind"
|
||||
2026/05/17 15:34:23 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-0 ability="Second Wind"
|
||||
2026/05/17 15:34:23 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-0 ability="Second Wind"
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-573218642/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-2555594716/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-1293820254/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-2922091846/gogobee.db
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-2255769101/gogobee.db
|
||||
2026/05/17 15:34:23 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-1 ability="Second Wind"
|
||||
2026/05/17 15:34:23 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-1 ability="Second Wind"
|
||||
2026/05/17 15:34:23 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-1 ability="Second Wind"
|
||||
2026/05/17 15:34:23 INFO database initialized path=/tmp/expedition-sim-4141510411/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2327156998/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3831482955/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3224447098/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3972171829/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2507866628/gogobee.db
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-2 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-2 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-2 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2702751982/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-814091512/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-1701622760/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2474663970/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3500203401/gogobee.db
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-3 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-3 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-3 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-1597673037/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3746346522/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2947709156/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2279228254/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-1330280095/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-1007046865/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3808145558/gogobee.db
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-4 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-4 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-4 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3669887885/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3912763644/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2891748518/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-1827307519/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-4109127351/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-253619287/gogobee.db
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-5 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-5 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-5 ability="Second Wind"
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-889111768/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-3994033199/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2355572633/gogobee.db
|
||||
2026/05/17 15:34:24 INFO database initialized path=/tmp/expedition-sim-2955130129/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-3040643250/gogobee.db
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-6 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-6 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-6 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-996326193/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-1026834926/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-874236375/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-628985075/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-4278591308/gogobee.db
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-7 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-7 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-7 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-1333675344/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-3247890534/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-3858591699/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-1397281242/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-2332733301/gogobee.db
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-8 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-8 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-8 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-2396625240/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-1690573929/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-1681341943/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-3006146542/gogobee.db
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-9 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-9 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO dnd: armed ability fired (turn-based build) user=@sim:fighter-l12-dragons_lair-9 ability="Second Wind"
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-799921603/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-442683998/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-3139041772/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-2602959398/gogobee.db
|
||||
2026/05/17 15:34:25 INFO database initialized path=/tmp/expedition-sim-3028049942/gogobee.db
|
||||
File diff suppressed because one or more lines are too long
@@ -1,80 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Parallel driver for cmd/expedition-sim matrix sweeps.
|
||||
#
|
||||
# Spawns one expedition-sim process per (class, level, zone) cell, so each
|
||||
# worker owns its own global sqlite handle (NewSimRunner closes+reinits the
|
||||
# package-level db.Get() — workers in the same process would clobber each
|
||||
# other). All worker stdouts are concatenated into a single JSONL.
|
||||
#
|
||||
# Usage:
|
||||
# run_matrix.sh OUTFILE RUNS CLASSES LEVELS ZONES [PARALLEL]
|
||||
#
|
||||
# Example (1350 rows, 14-way parallel):
|
||||
# run_matrix.sh baseline_j0.jsonl 30 \
|
||||
# fighter,mage,rogue 3,7,12 \
|
||||
# goblin_warrens,forest_shadows,manor_blackspire,underdark,dragons_lair
|
||||
set -euo pipefail
|
||||
|
||||
outfile=${1:?outfile required}
|
||||
runs=${2:?runs required}
|
||||
classes=${3:?classes required}
|
||||
levels=${4:?levels required}
|
||||
zones=${5:?zones required}
|
||||
parallel=${6:-$(nproc)}
|
||||
|
||||
repo=$(cd "$(dirname "$0")/.." && pwd)
|
||||
bin=$repo/expedition-sim
|
||||
[[ -x "$bin" ]] || { echo "missing $bin — run 'go build ./cmd/expedition-sim' first" >&2; exit 1; }
|
||||
|
||||
cd "$repo/sim_results"
|
||||
tmpdir=$(mktemp -d -t simrun-XXXXXX)
|
||||
trap 'rm -rf "$tmpdir"' EXIT
|
||||
|
||||
errfile=${outfile%.jsonl}.err
|
||||
: > "$outfile"
|
||||
: > "$errfile"
|
||||
|
||||
# Enumerate cells one per line: "class level zone".
|
||||
cells=$tmpdir/cells.txt
|
||||
IFS=, read -ra cls <<< "$classes"
|
||||
IFS=, read -ra lvs <<< "$levels"
|
||||
IFS=, read -ra zns <<< "$zones"
|
||||
for c in "${cls[@]}"; do
|
||||
for l in "${lvs[@]}"; do
|
||||
for z in "${zns[@]}"; do
|
||||
printf "%s\t%s\t%s\n" "$c" "$l" "$z"
|
||||
done
|
||||
done
|
||||
done > "$cells"
|
||||
|
||||
ncells=$(wc -l < "$cells")
|
||||
echo "matrix: $ncells cells × $runs runs = $((ncells * runs)) rows, $parallel workers" >&2
|
||||
|
||||
# Fan out: one process per cell. Per-cell stdout goes to its own shard,
|
||||
# stderr is collected to the shared errfile.
|
||||
worker() {
|
||||
local class=$1 level=$2 zone=$3
|
||||
local shard=$tmpdir/$class-$level-$zone.jsonl
|
||||
"$bin" -matrix \
|
||||
-classes "$class" -levels "$level" -zones "$zone" \
|
||||
-runs "$runs" \
|
||||
> "$shard" 2>> "$errfile"
|
||||
}
|
||||
export -f worker
|
||||
export bin tmpdir runs errfile
|
||||
|
||||
xargs -P "$parallel" -L 1 -a "$cells" bash -c 'worker "$@"' _
|
||||
|
||||
# Stitch shards in deterministic order (zone, class, level — matches
|
||||
# summarize.sh's sort_by) so diff-friendliness survives parallel arrival.
|
||||
for c in "${cls[@]}"; do
|
||||
for l in "${lvs[@]}"; do
|
||||
for z in "${zns[@]}"; do
|
||||
shard=$tmpdir/$c-$l-$z.jsonl
|
||||
[[ -f "$shard" ]] && cat "$shard" >> "$outfile"
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
rows=$(wc -l < "$outfile")
|
||||
echo "wrote $rows rows → $outfile (errors in $errfile)" >&2
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Aggregate a sim corpus JSONL into a per-(class,level,zone) table.
|
||||
# Columns: class, level, zone, n, p50 yield (all), p50 yield among cleared,
|
||||
# mean yield, mean rooms, %cleared, %boss-reached, %tpk, %fled, %extracted.
|
||||
#
|
||||
# boss-reached counts runs whose StopCode is "boss" or "complete" — i.e.,
|
||||
# the autopilot entered the boss room, whether the run died there or
|
||||
# finished the zone.
|
||||
set -euo pipefail
|
||||
|
||||
infile=${1:-baseline_j0.jsonl}
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
jq -rs '
|
||||
def p50(xs): if (xs|length)==0 then 0 else (xs|sort|.[(length/2|floor)]) end;
|
||||
|
||||
group_by([.Class, .Level, .Zone])
|
||||
| map({
|
||||
class: .[0].Class,
|
||||
level: .[0].Level,
|
||||
zone: .[0].Zone,
|
||||
n: length,
|
||||
yields: [.[] | .YieldCount],
|
||||
yields_cleared: [.[] | select(.Outcome=="cleared") | .YieldCount],
|
||||
rooms: [.[] | .Rooms],
|
||||
outcomes: [.[] | .Outcome],
|
||||
stops: [.[] | .StopCode]
|
||||
})
|
||||
| map(. + {
|
||||
p50_yield: p50(.yields),
|
||||
p50_yield_cleared: p50(.yields_cleared),
|
||||
mean_yield: ((.yields | add) / .n),
|
||||
mean_rooms: ((.rooms | add) / .n),
|
||||
pct_cleared: (([.outcomes[] | select(. == "cleared")] | length) * 100 / .n),
|
||||
pct_boss_reached: (([.stops[] | select(. == "boss" or . == "complete")] | length) * 100 / .n),
|
||||
pct_tpk: (([.outcomes[] | select(. == "tpk")] | length) * 100 / .n),
|
||||
pct_fled: (([.outcomes[] | select(. == "fled")] | length) * 100 / .n),
|
||||
pct_extracted: (([.outcomes[] | select(. == "extracted")] | length) * 100 / .n)
|
||||
})
|
||||
| sort_by(.zone, .class, .level)
|
||||
| (["class","level","zone","n","p50_yld","p50_yld_clr","mean_yld","mean_rms","%clr","%boss","%tpk","%fled","%ext"] | @tsv),
|
||||
(.[] | [.class, .level, .zone, .n,
|
||||
.p50_yield, .p50_yield_cleared,
|
||||
(.mean_yield * 10 | round / 10),
|
||||
(.mean_rooms * 10 | round / 10),
|
||||
(.pct_cleared | round),
|
||||
(.pct_boss_reached | round),
|
||||
(.pct_tpk | round),
|
||||
(.pct_fled | round),
|
||||
(.pct_extracted | round)] | @tsv)
|
||||
' "$infile" | column -t -s $'\t'
|
||||
@@ -1,239 +0,0 @@
|
||||
# Spec: Space Inviter — `space_inviter.go`
|
||||
|
||||
## Overview
|
||||
|
||||
When a local homeserver user is detected as not being a member of **any** Matrix Space
|
||||
(i.e. they aren't in the target Space *and* aren't in any other Space the bot can see them in),
|
||||
the bot should **DM the admin user** and ask whether to invite them to the target Space,
|
||||
rather than auto-inviting.
|
||||
|
||||
The intent: only prompt for users who are completely Space-less. If they're already in some
|
||||
other Space, leave them alone — they've made a choice.
|
||||
|
||||
---
|
||||
|
||||
## Config values required
|
||||
|
||||
All values sourced from the existing GogoBee config struct. No hardcoding.
|
||||
|
||||
| Key | Type | Description |
|
||||
|---|---|---|
|
||||
| `target_space_id` | `id.RoomID` | The Space to potentially invite users into |
|
||||
| `home_domain` | `string` | e.g. `parodia.dev` — used to filter out federated users |
|
||||
| `synapse_base_url` | `string` | e.g. `https://parodia.dev` — for admin API calls |
|
||||
| `admin_access_token` | `string` | Synapse admin token — store in secrets |
|
||||
| `admin_user_id` | `id.UserID` | The user to DM with invite prompts (i.e. the operator) |
|
||||
| `invite_delay` | `time.Duration` | Delay between prompts during startup sweep (default: 2s) |
|
||||
| `reprompt_cooldown` | `time.Duration` | Minimum time between prompts for the same user (default: 30 days). Prevents restart/upgrade ping-spam for users who already said `no`. |
|
||||
|
||||
---
|
||||
|
||||
## Trigger conditions
|
||||
|
||||
### 1. Startup sweep
|
||||
- On bot startup, after permission checks pass, fetch all local non-guest non-deactivated users via the Synapse Admin API (`/_synapse/admin/v2/users`)
|
||||
- Pass `?guests=false&deactivated=false` and paginate fully
|
||||
- Apply the user filter (see "User filter" below) before any Space-membership work
|
||||
- For each remaining user, determine whether they belong to **any** Space (see "Space membership check" below)
|
||||
- For each user who is in zero Spaces and not on the blocklist and has no pending invite to `target_space_id`: queue a DM prompt to the admin user
|
||||
- Stagger prompts using `invite_delay` to avoid flooding the admin DM
|
||||
|
||||
### 2. Reactive handler
|
||||
- Listen for `m.room.member` events with `membership: join`
|
||||
- Apply the user filter (see "User filter" below)
|
||||
- If the joining user is in zero Spaces, not on the blocklist, has no pending invite to `target_space_id`, and a prompt hasn't already been sent for them this session: send a DM prompt to the admin user
|
||||
|
||||
---
|
||||
|
||||
## User filter
|
||||
|
||||
A user is eligible for a Space-less prompt only if **all** of the following hold. Apply this
|
||||
filter in both the startup sweep and the reactive handler — same rules, one place in code.
|
||||
|
||||
1. Local to this homeserver (user ID suffix matches `:home_domain`). Federated users are out of scope.
|
||||
2. Not the bot itself.
|
||||
3. Not the configured `admin_user_id`.
|
||||
4. Not an appservice / bridge puppet. Synapse `/admin/v2/users` returns a `user_type` field — exclude entries where `user_type` is non-empty (typical values: `bot`, `support`, and appservice puppets often appear with non-empty types or with names matching the appservice's `sender_localpart`). Also exclude users whose localpart matches any configured appservice `sender_localpart` if available.
|
||||
5. Not a guest, not deactivated (already filtered at the API level, but re-check defensively for the reactive path).
|
||||
|
||||
---
|
||||
|
||||
## Space membership check
|
||||
|
||||
**Operational invariant: the bot is joined to every Space on the homeserver.** The spec
|
||||
relies on this — if a Space exists that the bot isn't in, users in only that Space will be
|
||||
incorrectly flagged as Space-less.
|
||||
|
||||
A user counts as "in a Space" if they are joined or invited to **any** room of type `m.space`
|
||||
(i.e. `m.room.create` content has `"type": "m.space"`).
|
||||
|
||||
- On startup (and refreshed as the bot joins/leaves Spaces), enumerate the bot's joined rooms via the mautrix client and filter to those with `m.room.create.type == m.space` — this yields the set of Spaces to check against
|
||||
- For each Space, fetch its members via `JoinedMembers` (joined) and the room state for `m.room.member` events with `membership: invite` (pending invites)
|
||||
- Build an in-memory union set: `users_in_any_space = ⋃ members(space)` for all known Spaces
|
||||
- A local user is "Space-less" iff they are absent from this union set
|
||||
- Refresh the union set at the start of each sweep; for the reactive handler, update incrementally on `m.room.member` events in Space rooms
|
||||
|
||||
No admin API call is needed for the Space-membership check itself. The admin API is still
|
||||
required to enumerate local users (to discover users who are in zero rooms the bot can see).
|
||||
|
||||
---
|
||||
|
||||
## DM room bootstrap
|
||||
|
||||
Before sending any prompt, the bot must have a 1:1 DM room with `admin_user_id`.
|
||||
|
||||
- On startup, look up the bot's `m.direct` account data
|
||||
- If an existing DM room with `admin_user_id` is listed and the bot is still joined to it, reuse it
|
||||
- Otherwise create a new room: invite-only, `is_direct: true`, invite `admin_user_id`, and update `m.direct` account data to record the mapping
|
||||
- Cache the resolved DM room ID in memory for the session
|
||||
- If the admin leaves the DM room, treat the next prompt as a trigger to recreate it
|
||||
|
||||
---
|
||||
|
||||
## DM prompt format
|
||||
|
||||
Sent as a plain text message to the admin user's DM room:
|
||||
|
||||
```
|
||||
🐝 @someuser:parodia.dev just joined but isn't in the Space.
|
||||
Want me to invite them?
|
||||
|
||||
Reply with:
|
||||
yes — invite them
|
||||
no — skip for now (I'll ask again later)
|
||||
ignore — never ask about this user again
|
||||
```
|
||||
|
||||
Use the existing GogoBee pattern for interactive admin responses (reply matching or
|
||||
reaction handling — match whatever pattern is already established in the codebase).
|
||||
|
||||
---
|
||||
|
||||
## Response handling
|
||||
|
||||
| Reply | Action |
|
||||
|---|---|
|
||||
| `yes` (case-insensitive) | Invite the user to the Space identified by `target_space_id` (always — never any other Space), log success or failure |
|
||||
| `no` (case-insensitive) | Skip. Will prompt again on next sweep or next join event |
|
||||
| `ignore` (case-insensitive) | Add user to persistent blocklist, never prompt again |
|
||||
|
||||
- Only one pending prompt per user at a time — deduplication required
|
||||
- If the admin doesn't respond, do nothing; prompt again on next trigger
|
||||
- **Re-validate at reply time, not prompt time.** When the admin replies `yes`, re-check that the user is still Space-less and still has no pending invite to `target_space_id`. If they joined a Space (or were already invited) between prompt and reply, skip the invite and DM the admin a one-liner: `ℹ️ @user:domain is already in a Space — skipped.`
|
||||
- **Unknown replies are silently ignored.** If the admin types anything other than `yes`/`no`/`ignore` (case-insensitive, leading/trailing whitespace stripped) in the DM room while a prompt is pending, the bot does not respond, does not error, does not re-send help. The pending prompt remains pending until a valid reply arrives or the bot restarts.
|
||||
- If the user already has a pending invite to `target_space_id` at reply time (e.g. someone else invited them out-of-band), treat `yes` as a no-op and log it.
|
||||
- If an invite attempt fails with `M_FORBIDDEN`, log an error loudly and DM the admin:
|
||||
> 🚨 Tried to invite @someuser:parodia.dev but got M_FORBIDDEN.
|
||||
> My power level may have dropped. Check the Space permissions.
|
||||
- For any other invite failure (rate-limit, network, etc.), log the full error and DM the admin a short notice; do not auto-retry — the next sweep will catch it.
|
||||
|
||||
---
|
||||
|
||||
## Permission check (on startup, before sweep)
|
||||
|
||||
Abort with a fatal error and a clear message if any of the following are true:
|
||||
|
||||
1. Bot is not joined to `target_space_id` or cannot read its membership
|
||||
2. Bot cannot read the target Space's power levels
|
||||
3. Bot's power level in the target Space is below the `invite` threshold
|
||||
4. `admin_access_token` is empty
|
||||
5. Admin API returns non-200 (log status code and response body)
|
||||
6. **Sanity check**: log a warning (not fatal) listing every Space the bot is currently joined to, so the operator can eyeball whether any Space is missing. If the bot is in zero Spaces other than the target, log a louder warning — the "in any Space" check will degenerate to "in target Space".
|
||||
|
||||
Error messages should be specific about what's wrong and what needs to be fixed.
|
||||
Do not silently swallow these — they should halt startup.
|
||||
|
||||
---
|
||||
|
||||
## Persistence — `space_inviter_prompts` table
|
||||
|
||||
All prompt activity is persisted in a single SQLite table. This replaces both the
|
||||
flat-file blocklist and the in-memory dedup set with one durable source of truth.
|
||||
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS space_inviter_prompts (
|
||||
user_id TEXT NOT NULL, -- @user:domain
|
||||
prompt_sent_at INTEGER NOT NULL, -- unix seconds
|
||||
trigger_kind TEXT NOT NULL, -- 'sweep' | 'reactive'
|
||||
dm_room_id TEXT NOT NULL, -- room the prompt was sent in
|
||||
dm_event_id TEXT NOT NULL, -- event ID of the prompt message
|
||||
reply TEXT, -- 'yes' | 'no' | 'ignore' | NULL (pending)
|
||||
replied_at INTEGER, -- unix seconds, NULL if pending
|
||||
invite_attempted INTEGER NOT NULL DEFAULT 0, -- 0/1
|
||||
invite_outcome TEXT, -- 'ok' | 'forbidden' | 'error' | 'skipped_race' | NULL
|
||||
invite_error TEXT, -- raw error string for diagnostics
|
||||
PRIMARY KEY (user_id, prompt_sent_at)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_space_inviter_prompts_user ON space_inviter_prompts(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_space_inviter_prompts_pending ON space_inviter_prompts(user_id) WHERE reply IS NULL;
|
||||
```
|
||||
|
||||
### Lifecycle
|
||||
|
||||
- **On prompt sent**: insert a new row with `reply = NULL`.
|
||||
- **On reply received**: update the most-recent pending row for that user — set `reply`, `replied_at`. Match the reply to the pending prompt using the `m.relates_to` reply reference to `dm_event_id` if the admin uses Matrix replies; otherwise just match the most-recent pending row in the DM.
|
||||
- **On invite attempt**: update the same row — set `invite_attempted = 1`, `invite_outcome`, and `invite_error` if applicable.
|
||||
|
||||
### Querying
|
||||
|
||||
- **Is user blocked (`ignore`)?** `SELECT 1 FROM space_inviter_prompts WHERE user_id = ? AND reply = 'ignore' LIMIT 1`
|
||||
- **Has a pending prompt?** `SELECT 1 FROM space_inviter_prompts WHERE user_id = ? AND reply IS NULL LIMIT 1`
|
||||
- **Has been prompted this session?** Replaced by "has any row at all" — but the eligibility check is "no pending prompt AND not on ignore list AND (not yet ever prompted OR last reply was `no` and we want to re-prompt on next trigger)". `no` replies don't block re-prompting.
|
||||
|
||||
### Dedup rules (in DB terms)
|
||||
|
||||
A user is **not eligible** for a new prompt if any of these are true:
|
||||
|
||||
1. A pending row exists (`reply IS NULL`) — already awaiting an answer.
|
||||
2. Any row exists with `reply = 'ignore'` — permanently silenced.
|
||||
3. **Cooldown**: any row exists with `prompt_sent_at > (now - reprompt_cooldown)` — already prompted recently, regardless of reply. This is the rule that prevents restart/upgrade ping-spam: a `no` from yesterday does not get re-asked tomorrow just because the bot restarted.
|
||||
|
||||
A `no` reply does eventually allow re-prompting, but only after `reprompt_cooldown` has elapsed since the last prompt. Default 30 days — long enough that the admin won't feel nagged across normal ops, short enough that genuinely new context (user has been Space-less for a month) gets surfaced.
|
||||
|
||||
### Eligibility query
|
||||
|
||||
```sql
|
||||
-- Returns 1 row if user IS eligible for a new prompt
|
||||
SELECT 1
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM space_inviter_prompts
|
||||
WHERE user_id = ?
|
||||
AND (
|
||||
reply IS NULL -- pending
|
||||
OR reply = 'ignore' -- blocked forever
|
||||
OR prompt_sent_at > ? -- within cooldown window (now - reprompt_cooldown)
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
### Un-ignore
|
||||
|
||||
- `UPDATE space_inviter_prompts SET reply = 'no' WHERE user_id = ? AND reply = 'ignore'` via a sqlite shell, or a small admin command. v1 documents the SQL one-liner; in-band command can come later.
|
||||
|
||||
### Schema migration
|
||||
|
||||
- Apply via the existing GogoBee migration mechanism. New table, no data migration from any prior store.
|
||||
|
||||
---
|
||||
|
||||
## Logging
|
||||
|
||||
At INFO level (one structured log line per event):
|
||||
|
||||
- Startup sweep begin/end with counts: total local users, eligible after filter, Space-less, prompts queued
|
||||
- Each prompt sent: `event=prompt_sent user=@x:domain trigger=sweep|reactive`
|
||||
- Each reply received: `event=prompt_reply user=@x:domain reply=yes|no|ignore|unknown`
|
||||
- Each invite attempt: `event=invite_attempt user=@x:domain space=<target> outcome=ok|forbidden|error err=...`
|
||||
- DM room bootstrap: `event=dm_room_resolved room=<id> created=true|false`
|
||||
|
||||
At WARN level: skipped invites due to race (user joined a Space between prompt and reply), invite failures other than M_FORBIDDEN.
|
||||
|
||||
At ERROR level: M_FORBIDDEN on invite, admin API non-200, fatal startup permission failures.
|
||||
|
||||
---
|
||||
|
||||
## Out of scope
|
||||
|
||||
- Auto-accepting join requests
|
||||
- Inviting federated users from other homeservers
|
||||
- Any UI beyond DM text messages
|
||||
Reference in New Issue
Block a user