diff --git a/include/nsc.h b/include/nsc.h index f46ca6cc..405cf46d 100644 --- a/include/nsc.h +++ b/include/nsc.h @@ -213,8 +213,10 @@ enum { * NP points to the country to use for coordinate translation and * access control (null for none), and CTXO is the context object. * See struct valstr for details. + * Because virtual selectors don't have a setter method, xundump must + * be made to ignore them, e.g. by setting NSC_EXTRA. * If flag NSC_DEITY is set, only to deities can use this selector. - * If flag NSC_EXTRA is set, xdump ignores this selector. + * If flag NSC_EXTRA is set, xdump and xundump ignore this selector. * If flag NSC_CONST is set, the datum can't be changed from its * initial value (xundump obeys that). * If ca_table is not EF_BAD, the datum refers to that Empire table; diff --git a/src/lib/common/xundump.c b/src/lib/common/xundump.c index 1cce54f7..69914c33 100644 --- a/src/lib/common/xundump.c +++ b/src/lib/common/xundump.c @@ -47,6 +47,7 @@ * - Check each partial table supplies the same rows * - Check EFF_CFG tables are dense * - Symbolic array indexes + * - Option to treat missing and unknown fields as warning, not error * TODO, but hardly worth the effort: * - Permit reordering of array elements */ @@ -352,7 +353,7 @@ deffld(int fldno, char *name, int idx) if (res < 0) return gripe("Header %s of field %d is %s", name, fldno + 1, res == M_NOTUNIQUE ? "ambiguous" : "unknown"); - if (ca[res].ca_flags == NSC_EXTRA) + if (ca[res].ca_flags == NSC_EXTRA || CANT_HAPPEN(ca[res].ca_get)) return gripe("Extraneous header %s in field %d", name, fldno + 1); if (ca[res].ca_type != NSC_STRINGY && ca[res].ca_len != 0) { if (idx < 0)