Tu Chân Giới · docs

Events

Events come in three kinds: world, daily and personal. Each event grows from a seed. The engine turns the weighted choices into a success chance p. Then it rolls one seeded random number from 0 to 1, and maps the result to one of five outcome tiers.

Three event kinds

Event kindWorld (Thiên Hạ Sự)Daily (Nhật Sự)Personal (Cơ Duyên / Kiếp Nạn)
Scopeall playersone regionone player
Spawn25% a day at 00:00 ICT, × omen multipliers; due seeds fire on their date70% a day per region (~4 a day across 6 regions)30% every 2 h; max 2 open, max 4 a day
Window48 h, closes 20:00 ICT~20 h, closes 20:00 ICT8 h
Resolutiondaily tick 20:00, published by 21:00same daily tickhourly tick
No answerabstain (weight 0)abstaindefault option thuận theo tự nhiên ("let fate decide")

Seeds and cooldowns

Follow-ups and thresholds

  1. Explicit follow-ups: an effect queues a seed with an absolute fire date.
  2. Thresholds: engine rules with no LLM. Danger ≥ 80 enables a beast tide; prosperity ≤ 20 enables refugees (nan_dan); two sects at blood feud enable a sect war.
  3. Omens change pool weights while they are active.
  4. NPC state: a dead NPC leaves all pools and can enable inheritance or revenge seeds.
  5. Karma links: each favour or grudge has a 10% daily chance to start a personal event.

The prototype implements 1 and 2 (the prosperity threshold only). It has no omens, market, karma or sect relations yet.

Aggregation and sect dampening

Each player's influence is w = 1 + 0.5 × (min(effective cấp, 5) − 1). A Luyện Thể player has 1.0, a Ngưng Nguyên player 1.5. Each option's score is the sum, over sects, of (Σw)0.85, plus the Σw of players without a sect. This dampening stops one big sect from outvoting everyone in a straight line. When players bring less than 50 weight, NPCs pad the count with max(0, 50 − Σw), as a separate bucket.

From choices to p and an outcome tier

The prototype uses a "share" form of the spec formula. Options have a power: + for defence, − for the attackers.

def = Σ power⁺ × score      atk = 0.25 × Σscore + Σ |power⁻| × score
p   = clamp(0.5 + 0.4 × tanh(2 × (def − atk) / Σscore), 0.05, 0.95)
tier from (p − roll): ≥ 0.4 đại thắng · ≥ 0.1 thắng · > −0.1 giằng co · > −0.4 bại · else thảm bại

Move the sliders to set the dampened score of each option of the raid seed. p and the tier bands update live. Then roll to see where a roll lands. The sliders start at the scores in the seed-1 receipt (the engine's saved record of that raid).

Outcome tier bands on the roll axis A bar from roll 0 to roll 1, split into five tier bands around p. The list below gives each band's width. p roll 00.51
Figure 4. Where a roll lands. A low roll is good for the defenders. Text version: the list below.

The spec §6.2 writes the same idea with an absolute threat and slope 1/max(10, 0.2·Σw). The prototype calibrated it to threat 0.25 × Σ and slope 2. An earlier calibration (threat 0.54 × Σ, slope 5) gave p ≈ 0.15–0.34 even when the defenders were the largest group.

Mean reversion

Region values drift back to a stored baseline, after the 00:00 spawn pass. A dead band of ±5 keeps small changes. Beyond it, the value moves back by max(1, round(10% × excess)) per day. Reversion never pushes a value back across a threshold that a pending seed relies on. Example from the seed-1 dungeon run: danger 78 → 77 (baseline 68).