diff --git a/src/console/c_cvars.cpp b/src/console/c_cvars.cpp index 24c29b826..103c8cf95 100644 --- a/src/console/c_cvars.cpp +++ b/src/console/c_cvars.cpp @@ -1534,9 +1534,17 @@ void C_SetCVarsToDefaults (void) } } +static int cvarcmp(const void* a, const void* b) +{ + FBaseCVar** A = (FBaseCVar**)a; + FBaseCVar** B = (FBaseCVar**)b; + return strcmp((*A)->GetName(), (*B)->GetName()); +} + void C_ArchiveCVars (FConfigFile *f, uint32_t filter) { FBaseCVar *cvar = CVars; + TArray cvarlist; while (cvar) { @@ -1544,13 +1552,18 @@ void C_ArchiveCVars (FConfigFile *f, uint32_t filter) (CVAR_GLOBALCONFIG|CVAR_ARCHIVE|CVAR_MOD|CVAR_AUTO|CVAR_USERINFO|CVAR_SERVERINFO|CVAR_NOSAVE)) == filter) { - const char *const value = (cvar->Flags & CVAR_ISDEFAULT) - ? cvar->GetGenericRep(CVAR_String).String - : cvar->SafeValue.GetChars(); - f->SetValueForKey(cvar->GetName(), value); + cvarlist.Push(cvar); } cvar = cvar->m_Next; } + qsort(cvarlist.Data(), cvarlist.Size(), sizeof(FBaseCVar*), cvarcmp); + for (auto cvar : cvarlist) + { + const char* const value = (cvar->Flags & CVAR_ISDEFAULT) + ? cvar->GetGenericRep(CVAR_String).String + : cvar->SafeValue.GetChars(); + f->SetValueForKey(cvar->GetName(), value); + } } EXTERN_CVAR(Bool, sv_cheats);