Broaden chairman target scope event support

This commit is contained in:
Jan Petykiewicz 2026-04-16 18:03:17 -07:00
commit a63de904fa
15 changed files with 1257 additions and 30 deletions

View file

@ -0,0 +1,49 @@
{
"format_version": 1,
"fixture_id": "packed-event-chairman-condition-true-save-slice-fixture",
"source": {
"kind": "captured-runtime",
"description": "Fixture proving grouped target-scope ordinal 0 executes as condition-true chairman scope from save-slice-backed context."
},
"state_save_slice_path": "packed-event-chairman-condition-true-save-slice.json",
"commands": [
{
"kind": "service_trigger_kind",
"trigger_kind": 6
}
],
"expected_summary": {
"calendar_projection_source": "default-1830-placeholder",
"calendar_projection_is_placeholder": true,
"company_count": 2,
"chairman_profile_count": 2,
"active_chairman_profile_count": 2,
"selected_chairman_profile_id": 1,
"packed_event_collection_present": true,
"packed_event_record_count": 1,
"packed_event_decoded_record_count": 1,
"packed_event_imported_runtime_record_count": 1,
"event_runtime_record_count": 1,
"total_event_record_service_count": 1,
"total_trigger_dispatch_count": 1
},
"expected_state_fragment": {
"chairman_profiles": [
{
"profile_id": 1,
"current_cash": 777
},
{
"profile_id": 2,
"current_cash": 250
}
],
"packed_event_collection": {
"records": [
{
"import_outcome": "imported"
}
]
}
}
}

View file

@ -0,0 +1,284 @@
{
"format_version": 1,
"save_slice_id": "packed-event-chairman-condition-true-save-slice",
"source": {
"description": "Tracked save-slice document proving condition-true chairman scope executes through matched chairman conditions.",
"original_save_filename": "captured-chairman-condition-true.gms",
"original_save_sha256": "chairman-condition-true-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"proves grouped target-scope ordinal 0 resolves to condition-true chairman scope"
]
},
"save_slice": {
"file_extension_hint": "gms",
"container_profile_family": "rt3-classic-save-container-v1",
"mechanism_family": "classic-save-rehydrate-v1",
"mechanism_confidence": "grounded",
"trailer_family": null,
"bridge_family": null,
"profile": null,
"candidate_availability_table": null,
"named_locomotive_availability_table": null,
"cargo_catalog": null,
"special_conditions_table": null,
"event_runtime_collection": {
"source_kind": "packed-event-runtime-collection",
"mechanism_family": "classic-save-rehydrate-v1",
"mechanism_confidence": "grounded",
"container_profile_family": "rt3-classic-save-container-v1",
"metadata_tag_offset": 28928,
"records_tag_offset": 29184,
"close_tag_offset": 29696,
"packed_state_version": 1001,
"packed_state_version_hex": "0x000003e9",
"live_id_bound": 72,
"live_record_count": 1,
"live_entry_ids": [
72
],
"decoded_record_count": 1,
"imported_runtime_record_count": 1,
"records": [
{
"record_index": 0,
"live_entry_id": 72,
"payload_offset": 29186,
"payload_len": 136,
"decode_status": "executable",
"payload_family": "real_packed_v1",
"trigger_kind": 6,
"active": null,
"marks_collection_dirty": null,
"one_shot": false,
"compact_control": {
"mode_byte_0x7ef": 6,
"primary_selector_0x7f0": 99,
"grouped_mode_0x7f4": 2,
"one_shot_header_0x7f5": 1,
"modifier_flag_0x7f9": 1,
"modifier_flag_0x7fa": 0,
"grouped_target_scope_ordinals_0x7fb": [
0,
1,
2,
3
],
"grouped_scope_checkboxes_0x7ff": [
1,
0,
1,
0
],
"summary_toggle_0x800": 1,
"grouped_territory_selectors_0x80f": [
-1,
10,
-1,
22
]
},
"text_bands": [],
"standalone_condition_row_count": 1,
"standalone_condition_rows": [
{
"row_index": 0,
"raw_condition_id": 2218,
"subtype": 4,
"flag_bytes": [
244,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"candidate_name": null,
"comparator": "eq",
"metric": "Player Cash",
"semantic_family": "numeric_threshold",
"semantic_preview": "Test Player Cash == 500",
"requires_candidate_name_binding": false,
"notes": []
}
],
"negative_sentinel_scope": {
"company_test_scope": "disabled",
"player_test_scope": "selected_player_only",
"territory_scope_selector_is_0x63": false,
"source_row_indexes": [
0
]
},
"grouped_effect_row_counts": [
1,
0,
0,
0
],
"grouped_effect_rows": [
{
"group_index": 0,
"row_index": 0,
"descriptor_id": 1,
"descriptor_label": "Player Cash",
"target_mask_bits": 2,
"parameter_family": "player_cash_scalar",
"grouped_target_subject": "chairman",
"grouped_target_scope": "condition_true_chairman",
"opcode": 8,
"raw_scalar_value": 777,
"value_byte_0x09": 0,
"value_dword_0x0d": 0,
"value_byte_0x11": 0,
"value_byte_0x12": 0,
"value_word_0x14": 0,
"value_word_0x16": 0,
"row_shape": "multivalue_scalar",
"semantic_family": "multivalue_scalar",
"semantic_preview": "Set Player Cash to 777 with aux [0, 0, 0, 0]",
"locomotive_name": null,
"notes": []
}
],
"decoded_conditions": [
{
"kind": "chairman_numeric_threshold",
"target": {
"kind": "selected_chairman"
},
"metric": "current_cash",
"comparator": "eq",
"value": 500
}
],
"decoded_actions": [
{
"kind": "set_chairman_cash",
"target": {
"kind": "condition_true_chairman"
},
"value": 777
}
],
"executable_import_ready": true,
"notes": [
"condition-true chairman scope resolves through matched chairman conditions"
]
}
]
},
"notes": [
"real chairman condition-true grouped-effect sample"
],
"company_roster": {
"source_kind": "tracked-save-slice-company-roster",
"semantic_family": "save-slice-runtime-company-context",
"observed_entry_count": 2,
"selected_company_id": 1,
"entries": [
{
"company_id": 1,
"active": true,
"controller_kind": "human",
"current_cash": 150,
"debt": 80,
"credit_rating_score": 650,
"prime_rate": 5,
"available_track_laying_capacity": 6,
"track_piece_counts": {
"total": 20,
"single": 5,
"double": 8,
"transition": 1,
"electric": 3,
"non_electric": 17
},
"linked_chairman_profile_id": 1,
"book_value_per_share": 2620,
"investor_confidence": 37,
"management_attitude": 58,
"takeover_cooldown_year": 1839,
"merger_cooldown_year": 1838
},
{
"company_id": 2,
"active": true,
"controller_kind": "ai",
"current_cash": 90,
"debt": 40,
"credit_rating_score": 480,
"prime_rate": 6,
"available_track_laying_capacity": 2,
"track_piece_counts": {
"total": 8,
"single": 2,
"double": 2,
"transition": 0,
"electric": 1,
"non_electric": 7
},
"linked_chairman_profile_id": 2,
"book_value_per_share": 1400,
"investor_confidence": 22,
"management_attitude": 31,
"takeover_cooldown_year": null,
"merger_cooldown_year": null
}
]
},
"chairman_profile_table": {
"source_kind": "tracked-save-slice-chairman-profile-table",
"semantic_family": "save-slice-runtime-chairman-context",
"observed_entry_count": 2,
"selected_chairman_profile_id": 1,
"entries": [
{
"profile_id": 1,
"name": "Chairman One",
"active": true,
"current_cash": 500,
"linked_company_id": 1,
"company_holdings": {
"1": 1000
},
"holdings_value_total": 700,
"net_worth_total": 1200,
"purchasing_power_total": 1500
},
{
"profile_id": 2,
"name": "Chairman Two",
"active": true,
"current_cash": 250,
"linked_company_id": 2,
"company_holdings": {
"2": 900
},
"holdings_value_total": 600,
"net_worth_total": 900,
"purchasing_power_total": 1100
}
]
}
}
}

View file

@ -0,0 +1,49 @@
{
"format_version": 1,
"fixture_id": "packed-event-chairman-human-cash-save-slice-fixture",
"source": {
"kind": "captured-runtime",
"description": "Fixture proving grouped target-scope ordinal 2 executes as human-chairmen scope from save-slice-backed context."
},
"state_save_slice_path": "packed-event-chairman-human-cash-save-slice.json",
"commands": [
{
"kind": "service_trigger_kind",
"trigger_kind": 6
}
],
"expected_summary": {
"calendar_projection_source": "default-1830-placeholder",
"calendar_projection_is_placeholder": true,
"company_count": 2,
"chairman_profile_count": 2,
"active_chairman_profile_count": 2,
"selected_chairman_profile_id": 1,
"packed_event_collection_present": true,
"packed_event_record_count": 1,
"packed_event_decoded_record_count": 1,
"packed_event_imported_runtime_record_count": 1,
"event_runtime_record_count": 1,
"total_event_record_service_count": 1,
"total_trigger_dispatch_count": 1
},
"expected_state_fragment": {
"chairman_profiles": [
{
"profile_id": 1,
"current_cash": 777
},
{
"profile_id": 2,
"current_cash": 250
}
],
"packed_event_collection": {
"records": [
{
"import_outcome": "imported"
}
]
}
}
}

View file

@ -0,0 +1,222 @@
{
"format_version": 1,
"save_slice_id": "packed-event-chairman-human-cash-save-slice",
"source": {
"description": "Tracked save-slice document proving grouped target-scope ordinal 2 executes as human-chairmen scope.",
"original_save_filename": "captured-chairman-human-cash.gms",
"original_save_sha256": "chairman-human-cash-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"proves human-chairmen grouped target scope through save-native company/chairman context"
]
},
"save_slice": {
"file_extension_hint": "gms",
"container_profile_family": "rt3-classic-save-container-v1",
"mechanism_family": "classic-save-rehydrate-v1",
"mechanism_confidence": "grounded",
"trailer_family": null,
"bridge_family": null,
"profile": null,
"candidate_availability_table": null,
"special_conditions_table": null,
"event_runtime_collection": {
"source_kind": "packed-event-runtime-collection",
"mechanism_family": "classic-save-rehydrate-v1",
"mechanism_confidence": "grounded",
"container_profile_family": "rt3-classic-save-container-v1",
"metadata_tag_offset": 28928,
"records_tag_offset": 29184,
"close_tag_offset": 29696,
"packed_state_version": 1001,
"packed_state_version_hex": "0x000003e9",
"live_id_bound": 73,
"live_record_count": 1,
"live_entry_ids": [
73
],
"decoded_record_count": 1,
"imported_runtime_record_count": 1,
"records": [
{
"record_index": 0,
"live_entry_id": 73,
"payload_offset": 29296,
"payload_len": 140,
"decode_status": "executable",
"payload_family": "real_packed_v1",
"trigger_kind": 6,
"one_shot": false,
"compact_control": {
"mode_byte_0x7ef": 6,
"primary_selector_0x7f0": 12,
"grouped_mode_0x7f4": 2,
"one_shot_header_0x7f5": 0,
"modifier_flag_0x7f9": 0,
"modifier_flag_0x7fa": 0,
"grouped_target_scope_ordinals_0x7fb": [
2,
1,
1,
1
],
"grouped_scope_checkboxes_0x7ff": [
2,
0,
0,
0
],
"summary_toggle_0x800": 1,
"grouped_territory_selectors_0x80f": [
-1,
-1,
-1,
-1
]
},
"text_bands": [],
"standalone_condition_row_count": 0,
"standalone_condition_rows": [],
"grouped_effect_row_counts": [
1,
0,
0,
0
],
"grouped_effect_rows": [
{
"group_index": 0,
"row_index": 0,
"descriptor_id": 1,
"descriptor_label": "Player Cash",
"target_mask_bits": 2,
"parameter_family": "player_cash_scalar",
"grouped_target_subject": "chairman",
"grouped_target_scope": "human_chairmen",
"opcode": 8,
"raw_scalar_value": 777,
"value_byte_0x09": 0,
"value_dword_0x0d": 0,
"value_byte_0x11": 0,
"value_byte_0x12": 0,
"value_word_0x14": 0,
"value_word_0x16": 0,
"row_shape": "multivalue_scalar",
"semantic_family": "multivalue_scalar",
"semantic_preview": "Set Player Cash to 777 with aux [0, 0, 0, 0]",
"locomotive_name": null,
"notes": []
}
],
"decoded_conditions": [],
"decoded_actions": [
{
"kind": "set_chairman_cash",
"target": {
"kind": "human_chairmen"
},
"value": 777
}
],
"executable_import_ready": true,
"notes": [
"hidden grouped target-subject lane resolves descriptor 1 to human-chairmen scope"
]
}
]
},
"notes": [
"real chairman-targeted human-scope cash descriptor sample"
],
"company_roster": {
"source_kind": "tracked-save-slice-company-roster",
"semantic_family": "save-slice-runtime-company-context",
"observed_entry_count": 2,
"selected_company_id": 1,
"entries": [
{
"company_id": 1,
"active": true,
"controller_kind": "human",
"current_cash": 150,
"debt": 80,
"credit_rating_score": 650,
"prime_rate": 5,
"available_track_laying_capacity": 6,
"track_piece_counts": {
"total": 20,
"single": 5,
"double": 8,
"transition": 1,
"electric": 3,
"non_electric": 17
},
"linked_chairman_profile_id": 1,
"book_value_per_share": 2620,
"investor_confidence": 37,
"management_attitude": 58,
"takeover_cooldown_year": 1839,
"merger_cooldown_year": 1838
},
{
"company_id": 2,
"active": true,
"controller_kind": "ai",
"current_cash": 90,
"debt": 40,
"credit_rating_score": 480,
"prime_rate": 6,
"available_track_laying_capacity": 2,
"track_piece_counts": {
"total": 8,
"single": 2,
"double": 2,
"transition": 0,
"electric": 1,
"non_electric": 7
},
"linked_chairman_profile_id": 2,
"book_value_per_share": 1400,
"investor_confidence": 22,
"management_attitude": 31,
"takeover_cooldown_year": null,
"merger_cooldown_year": null
}
]
},
"chairman_profile_table": {
"source_kind": "tracked-save-slice-chairman-profile-table",
"semantic_family": "save-slice-runtime-chairman-context",
"observed_entry_count": 2,
"selected_chairman_profile_id": 1,
"entries": [
{
"profile_id": 1,
"name": "Chairman One",
"active": true,
"current_cash": 500,
"linked_company_id": 1,
"company_holdings": {
"1": 1000
},
"holdings_value_total": 700,
"net_worth_total": 1200,
"purchasing_power_total": 1500
},
{
"profile_id": 2,
"name": "Chairman Two",
"active": true,
"current_cash": 250,
"linked_company_id": 2,
"company_holdings": {
"2": 900
},
"holdings_value_total": 600,
"net_worth_total": 900,
"purchasing_power_total": 1100
}
]
}
}
}

View file

@ -2,12 +2,12 @@
"format_version": 1,
"save_slice_id": "packed-event-chairman-scope-parity-save-slice",
"source": {
"description": "Tracked save-slice document with a chairman-targeted row on an unsupported non-selected scope.",
"description": "Tracked save-slice document with a chairman-targeted row on an unsupported chairman scope ordinal outside the grounded 0..3 strip.",
"original_save_filename": "captured-chairman-scope-parity.gms",
"original_save_sha256": "chairman-scope-parity-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"pins the selected-chairman-only execution boundary"
"pins the remaining unsupported chairman-scope ordinal frontier"
]
},
"save_slice": {
@ -52,7 +52,7 @@
"one_shot_header_0x7f5": 0,
"modifier_flag_0x7f9": 0,
"modifier_flag_0x7fa": 0,
"grouped_target_scope_ordinals_0x7fb": [0, 1, 1, 1],
"grouped_target_scope_ordinals_0x7fb": [8, 1, 1, 1],
"grouped_scope_checkboxes_0x7ff": [2, 0, 0, 0],
"summary_toggle_0x800": 1,
"grouped_territory_selectors_0x80f": [-1, -1, -1, -1]
@ -70,6 +70,7 @@
"target_mask_bits": 2,
"parameter_family": "player_cash_scalar",
"grouped_target_subject": "chairman",
"grouped_target_scope": "unsupported_chairman_scope",
"opcode": 8,
"raw_scalar_value": 700,
"value_byte_0x09": 0,
@ -83,7 +84,7 @@
"semantic_preview": "Set Player Cash to 700 with aux [0, 0, 0, 0]",
"locomotive_name": null,
"notes": [
"chairman row requires selected-chairman scope"
"chairman row uses unsupported grouped target scope ordinal 8"
]
}
],
@ -92,7 +93,7 @@
"executable_import_ready": false,
"notes": [
"decoded from grounded real 0x4e9a row framing",
"selected-chairman scope is the only grounded chairman-target subset in this slice"
"only chairman target-scope ordinals 0..3 are grounded in this slice"
]
}
]

View file

@ -0,0 +1,62 @@
{
"format_version": 1,
"fixture_id": "packed-event-deactivate-chairman-ai-save-slice-fixture",
"source": {
"kind": "captured-runtime",
"description": "Fixture proving grouped target-scope ordinal 3 executes as AI-chairmen scope from save-slice-backed context."
},
"state_save_slice_path": "packed-event-deactivate-chairman-ai-save-slice.json",
"commands": [
{
"kind": "service_trigger_kind",
"trigger_kind": 6
}
],
"expected_summary": {
"calendar_projection_source": "default-1830-placeholder",
"calendar_projection_is_placeholder": true,
"company_count": 2,
"chairman_profile_count": 2,
"active_chairman_profile_count": 1,
"selected_chairman_profile_id": 1,
"packed_event_collection_present": true,
"packed_event_record_count": 1,
"packed_event_decoded_record_count": 1,
"packed_event_imported_runtime_record_count": 1,
"event_runtime_record_count": 1,
"total_event_record_service_count": 1,
"total_trigger_dispatch_count": 1
},
"expected_state_fragment": {
"selected_chairman_profile_id": 1,
"companies": [
{
"company_id": 1,
"linked_chairman_profile_id": 1
},
{
"company_id": 2,
"linked_chairman_profile_id": null
}
],
"chairman_profiles": [
{
"profile_id": 1,
"active": true,
"linked_company_id": 1
},
{
"profile_id": 2,
"active": false,
"linked_company_id": null
}
],
"packed_event_collection": {
"records": [
{
"import_outcome": "imported"
}
]
}
}
}

View file

@ -0,0 +1,221 @@
{
"format_version": 1,
"save_slice_id": "packed-event-deactivate-chairman-ai-save-slice",
"source": {
"description": "Tracked save-slice document proving grouped target-scope ordinal 3 executes as AI-chairmen scope.",
"original_save_filename": "captured-deactivate-chairman-ai.gms",
"original_save_sha256": "deactivate-chairman-ai-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"proves AI-chairmen lifecycle import through save-native company/chairman context"
]
},
"save_slice": {
"file_extension_hint": "gms",
"container_profile_family": "rt3-classic-save-container-v1",
"mechanism_family": "classic-save-rehydrate-v1",
"mechanism_confidence": "grounded",
"trailer_family": null,
"bridge_family": null,
"profile": null,
"candidate_availability_table": null,
"special_conditions_table": null,
"event_runtime_collection": {
"source_kind": "packed-event-runtime-collection",
"mechanism_family": "classic-save-rehydrate-v1",
"mechanism_confidence": "grounded",
"container_profile_family": "rt3-classic-save-container-v1",
"metadata_tag_offset": 28928,
"records_tag_offset": 29184,
"close_tag_offset": 29696,
"packed_state_version": 1001,
"packed_state_version_hex": "0x000003e9",
"live_id_bound": 74,
"live_record_count": 1,
"live_entry_ids": [
74
],
"decoded_record_count": 1,
"imported_runtime_record_count": 1,
"records": [
{
"record_index": 0,
"live_entry_id": 74,
"payload_offset": 29296,
"payload_len": 140,
"decode_status": "executable",
"payload_family": "real_packed_v1",
"trigger_kind": 6,
"one_shot": false,
"compact_control": {
"mode_byte_0x7ef": 6,
"primary_selector_0x7f0": 12,
"grouped_mode_0x7f4": 2,
"one_shot_header_0x7f5": 0,
"modifier_flag_0x7f9": 0,
"modifier_flag_0x7fa": 0,
"grouped_target_scope_ordinals_0x7fb": [
3,
1,
1,
1
],
"grouped_scope_checkboxes_0x7ff": [
2,
0,
0,
0
],
"summary_toggle_0x800": 1,
"grouped_territory_selectors_0x80f": [
-1,
-1,
-1,
-1
]
},
"text_bands": [],
"standalone_condition_row_count": 0,
"standalone_condition_rows": [],
"grouped_effect_row_counts": [
1,
0,
0,
0
],
"grouped_effect_rows": [
{
"group_index": 0,
"row_index": 0,
"descriptor_id": 14,
"descriptor_label": "Deactivate Player",
"target_mask_bits": 2,
"parameter_family": "player_lifecycle_toggle",
"grouped_target_subject": "chairman",
"grouped_target_scope": "ai_chairmen",
"opcode": 1,
"raw_scalar_value": 1,
"value_byte_0x09": 0,
"value_dword_0x0d": 0,
"value_byte_0x11": 0,
"value_byte_0x12": 0,
"value_word_0x14": 0,
"value_word_0x16": 0,
"row_shape": "bool_toggle",
"semantic_family": "bool_toggle",
"semantic_preview": "Set Deactivate Player to TRUE",
"locomotive_name": null,
"notes": []
}
],
"decoded_conditions": [],
"decoded_actions": [
{
"kind": "deactivate_chairman",
"target": {
"kind": "ai_chairmen"
}
}
],
"executable_import_ready": true,
"notes": [
"hidden grouped target-subject lane resolves descriptor 14 to AI-chairmen scope"
]
}
]
},
"notes": [
"real chairman-targeted AI-scope lifecycle descriptor sample"
],
"company_roster": {
"source_kind": "tracked-save-slice-company-roster",
"semantic_family": "save-slice-runtime-company-context",
"observed_entry_count": 2,
"selected_company_id": 1,
"entries": [
{
"company_id": 1,
"active": true,
"controller_kind": "human",
"current_cash": 150,
"debt": 80,
"credit_rating_score": 650,
"prime_rate": 5,
"available_track_laying_capacity": 6,
"track_piece_counts": {
"total": 20,
"single": 5,
"double": 8,
"transition": 1,
"electric": 3,
"non_electric": 17
},
"linked_chairman_profile_id": 1,
"book_value_per_share": 2620,
"investor_confidence": 37,
"management_attitude": 58,
"takeover_cooldown_year": 1839,
"merger_cooldown_year": 1838
},
{
"company_id": 2,
"active": true,
"controller_kind": "ai",
"current_cash": 90,
"debt": 40,
"credit_rating_score": 480,
"prime_rate": 6,
"available_track_laying_capacity": 2,
"track_piece_counts": {
"total": 8,
"single": 2,
"double": 2,
"transition": 0,
"electric": 1,
"non_electric": 7
},
"linked_chairman_profile_id": 2,
"book_value_per_share": 1400,
"investor_confidence": 22,
"management_attitude": 31,
"takeover_cooldown_year": null,
"merger_cooldown_year": null
}
]
},
"chairman_profile_table": {
"source_kind": "tracked-save-slice-chairman-profile-table",
"semantic_family": "save-slice-runtime-chairman-context",
"observed_entry_count": 2,
"selected_chairman_profile_id": 1,
"entries": [
{
"profile_id": 1,
"name": "Chairman One",
"active": true,
"current_cash": 500,
"linked_company_id": 1,
"company_holdings": {
"1": 1000
},
"holdings_value_total": 700,
"net_worth_total": 1200,
"purchasing_power_total": 1500
},
{
"profile_id": 2,
"name": "Chairman Two",
"active": true,
"current_cash": 250,
"linked_company_id": 2,
"company_holdings": {
"2": 900
},
"holdings_value_total": 600,
"net_worth_total": 900,
"purchasing_power_total": 1100
}
]
}
}
}