294def achievements(cur, prev, cap=3):
314 for end
in sorted(set(cur[
"endings"]) - was[
"endings"]):
315 out.append(f
"ENDING: {end}")
316 if prev
and (cur[
"ng_plus"]
or 0) > (prev[
"ng_plus"]
or 0):
317 out.append(f
"NEW JOURNEY: NG+{cur['ng_plus']}")
322 had = set(prev[
"bosses"])
if prev
else set()
323 new_bosses = sorted(set(cur[
"bosses"]) - had)
327 +
" · ".join(new_bosses[:2])
328 + (f
" +{len(new_bosses) - 2} more" if len(new_bosses) > 2
else "")
339 +
" · ".join(new_minis[:2])
340 + (f
" +{len(new_minis) - 2} more" if len(new_minis) > 2
else "")
345 if cur[
"attack"]
is not None and cur[
"attack"] > was[
"attack"] >= 0:
346 out.append(f
"MEMORY SPENT: attack {was['attack']} → {cur['attack']}")
349 if cur[
"vitality"]
is not None and cur[
"vitality"] > was[
"vitality"] >= 0:
350 out.append(f
"NECKLACE USED: vitality {was['vitality']} → {cur['vitality']}")
353 if cur[
"gourd"]
is not None and cur[
"gourd"] > was[
"gourd"] >= 0:
354 out.append(f
"GOURD SEED USED: gourd {was['gourd']} → {cur['gourd']}")
359 new_keys = sorted(set(cur[
"key_items"]) - set(prev[
"key_items"]
if prev
else []))
363 +
" · ".join(new_keys[:2])
364 + (f
" +{len(new_keys) - 2} more" if len(new_keys) > 2
else "")
366 new_cinders = sorted(set(cur[
"cinders"]) - was[
"cinders"])
368 out.append(
"CINDERS: " +
" · ".join(new_cinders))
369 new_covs = sorted(set(cur[
"covenants"]) - was[
"covenants"])
371 out.append(
"COVENANT: " +
" · ".join(new_covs[:2]))
372 new_fires = sorted(progress(cur)[
"bonfires"] - was[
"bonfires"])
374 named =
" · ".join(n
for _a, n
in new_fires[:2])
376 f
"+{len(new_fires)} bonfire{'' if len(new_fires) == 1 else 's'}: {named}"
377 if len(new_fires) <= 2
378 else f
"+{len(new_fires)} bonfires"
380 if cur[
"estus"]
is not None and cur[
"estus"] > was[
"estus"] >= 0:
381 out.append(f
"Estus +{was['estus']} → +{cur['estus']}")
383 max(0, n - was[
"pickups"].get(a, 0))
for a, n
in cur[
"pickups"].items()
386 out.append(f
"+{gained} world item{'' if gained == 1 else 's'}")
387 if cur[
"level"] > was[
"level"]:
389 f
"lv{was['level']} → lv{cur['level']}" if prev
else f
"lv{cur['level']}"
407def reference_index(snaps):
410 if s[
"path"]
not in seen
or s[
"mtime"] < seen[s[
"path"]]:
411 seen[s[
"path"]] = s[
"mtime"]
412 order = sorted(seen.items(), key=
lambda kv: (kv[1], kv[0]))
413 refs = {p: i + 1
for i, (p, _t)
in enumerate(order)}
416 dupes[os.path.basename(p)] = dupes.get(os.path.basename(p), 0) + 1
421 root = os.path.commonpath([p
for p, _t
in order])
if len(order) > 1
else ""
424 if root
and not os.path.isdir(root):
425 root = os.path.dirname(root)
428 base = os.path.basename(p)
431 if dupes.get(base, 0) < 2
432 else (os.path.relpath(p, root)
if root
else p)
434 out.append((refs[p], label, t, p))