re: the player-facing chatter partition; correcting the wingman claim
The 13 tables that voice every player-facing event are all PresetMessage_Katana_*, the PLAYER's own sets -- unit-group-table.md already names the link (DeltaSaber_T_Player carries msg=MessageSet_Katana). Exact partition: 13 voice all 14 events, 131 voice none, 0 voice some, and no non-Katana table voices any of them. CharacterKATANA is the only speaker exclusive to the set. Corrects preset-message-rules.md, which called those the wingman tables. The wingman roster is owned by isl-condition-builtins.md (UNITS: Bird1-Sandra ... Rhino2-Katana, Rhino3-Ellen) and needed no experiment. Residual: Katana_09_S10-1 and Katana_14_S16-2 voice none of the 14. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -362,6 +362,39 @@ def main():
|
||||
oshape[tuple(sorted({r['squadron'].rstrip('0123456789') for r in recs}))] += 1
|
||||
print(' their record-name families: %s' % dict(oshape))
|
||||
|
||||
|
||||
# the player-facing partition: which tables voice LOCKON_* / PLAYER_* /
|
||||
# ORDER_WINGMAN_*, and who speaks in them
|
||||
PLAYER_FACING = ['LOCKON_1', 'LOCKON_12', 'LOCKON_UP', 'LOCKON_DOWN',
|
||||
'PLAYER_HP_LESS_10', 'PLAYER_HP_LESS_30', 'PLAYER_HP_LESS_50',
|
||||
'PLAYER_AMMO_LESS_00', 'PLAYER_AMMO_LESS_10', 'PLAYER_AMMO_LESS_40',
|
||||
'ORDER_WINGMAN_ATTACK', 'ORDER_WINGMAN_COVER',
|
||||
'ORDER_WINGMAN_EXTENDED', 'ORDER_WINGMAN_FORMATION']
|
||||
full, none_, partial = [], [], []
|
||||
spk_full, spk_rest = set(), set()
|
||||
for h, recs in rule.items():
|
||||
byname = {r['squadron']: r for r in recs}
|
||||
got = [k for k in PLAYER_FACING
|
||||
if any(n is None for _, n, _ in byname[k]['fields'])]
|
||||
who = [n for _, n, _ in byname['Sperkers']['fields'] if n]
|
||||
nm = A.get(h, '%#010x' % h)
|
||||
if len(got) == len(PLAYER_FACING):
|
||||
full.append(nm); spk_full.update(who)
|
||||
elif not got:
|
||||
none_.append(nm); spk_rest.update(who)
|
||||
else:
|
||||
partial.append((nm, len(got))); spk_rest.update(who)
|
||||
print()
|
||||
print('player-facing events (%d of the 64): who voices them' % len(PLAYER_FACING))
|
||||
print(' tables voicing ALL of them : %d' % len(full))
|
||||
print(' tables voicing NONE : %d' % len(none_))
|
||||
print(' tables voicing SOME : %d %s' % (len(partial), partial))
|
||||
for nm in sorted(full):
|
||||
print(' all %s' % nm)
|
||||
print(' speakers in the all-set: %d' % len(spk_full))
|
||||
print(' exclusive to it: %s' % sorted(spk_full - spk_rest))
|
||||
print(' also elsewhere : %d' % len(spk_full & spk_rest))
|
||||
|
||||
print()
|
||||
print('rule tables, by name:')
|
||||
for h in sorted(rule, key=lambda k: A.get(k, '~%#010x' % k)):
|
||||
|
||||
Reference in New Issue
Block a user