@@ -382,7 +382,8 @@ void Fgd::processClassInheritance() {
382
382
383
383
if (allBaseClasses.size () != 0 )
384
384
{
385
- vector<KeyvalueDef> newKeyvalues;
385
+ vector<KeyvalueDef> childKeyvalues;
386
+ vector<KeyvalueDef> baseKeyvalues;
386
387
vector<KeyvalueChoice> newSpawnflags;
387
388
set<string> addedKeys;
388
389
set<string> addedSpawnflags;
@@ -393,7 +394,7 @@ void Fgd::processClassInheritance() {
393
394
// add in fields from the child class
394
395
for (int c = 0 ; c < classes[i]->keyvalues .size (); c++) {
395
396
if (!addedKeys.count (classes[i]->keyvalues [c].name )) {
396
- newKeyvalues .push_back (classes[i]->keyvalues [c]);
397
+ childKeyvalues .push_back (classes[i]->keyvalues [c]);
397
398
addedKeys.insert (classes[i]->keyvalues [c].name );
398
399
}
399
400
if (classes[i]->keyvalues [c].iType == FGD_KEY_FLAGS) {
@@ -416,7 +417,7 @@ void Fgd::processClassInheritance() {
416
417
}
417
418
for (int c = 0 ; c < allBaseClasses[k]->keyvalues .size (); c++) {
418
419
if (!addedKeys.count (allBaseClasses[k]->keyvalues [c].name )) {
419
- newKeyvalues .push_back (allBaseClasses[k]->keyvalues [c]);
420
+ baseKeyvalues .push_back (allBaseClasses[k]->keyvalues [c]);
420
421
addedKeys.insert (allBaseClasses[k]->keyvalues [c].name );
421
422
}
422
423
if (allBaseClasses[k]->keyvalues [c].iType == FGD_KEY_FLAGS) {
@@ -432,6 +433,13 @@ void Fgd::processClassInheritance() {
432
433
if (verbose) logf (" %s\n " , allBaseClasses[k]->name .c_str ());
433
434
}
434
435
436
+ // base keyvalues are usually important things like "targetname" and should come first
437
+ vector<KeyvalueDef> newKeyvalues;
438
+ for (int i = 0 ; i < baseKeyvalues.size (); i++)
439
+ newKeyvalues.push_back (baseKeyvalues[i]);
440
+ for (int i = 0 ; i < childKeyvalues.size (); i++)
441
+ newKeyvalues.push_back (childKeyvalues[i]);
442
+
435
443
classes[i]->keyvalues = newKeyvalues;
436
444
437
445
for (int c = 0 ; c < classes[i]->keyvalues .size (); c++) {
0 commit comments