Add special mods for the base game and expansions
Just for the metadata
This commit is contained in:
17
lib/mod.dart
17
lib/mod.dart
@@ -282,18 +282,6 @@ class Mod {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if this is RimWorld base game or expansion
|
|
||||||
bool isBaseGame = id == 'ludeon.rimworld';
|
|
||||||
bool isExpansion = !isBaseGame && id.startsWith('ludeon.rimworld.');
|
|
||||||
|
|
||||||
// If this is an expansion, ensure it depends on the base game
|
|
||||||
if (isExpansion && !loadAfter.contains('ludeon.rimworld')) {
|
|
||||||
loadAfter.add('ludeon.rimworld');
|
|
||||||
logger.info(
|
|
||||||
'Added base game dependency for expansion mod: ludeon.rimworld',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final fileCountTime =
|
final fileCountTime =
|
||||||
stopwatch.elapsedMilliseconds - metadataTime - xmlTime;
|
stopwatch.elapsedMilliseconds - metadataTime - xmlTime;
|
||||||
final totalTime = stopwatch.elapsedMilliseconds;
|
final totalTime = stopwatch.elapsedMilliseconds;
|
||||||
@@ -314,8 +302,9 @@ class Mod {
|
|||||||
loadBefore: loadBefore,
|
loadBefore: loadBefore,
|
||||||
incompatibilities: incompatibilities,
|
incompatibilities: incompatibilities,
|
||||||
size: size,
|
size: size,
|
||||||
isBaseGame: isBaseGame,
|
// No mods loaded from workshop are ever base or expansion games
|
||||||
isExpansion: isExpansion,
|
isBaseGame: false,
|
||||||
|
isExpansion: false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,6 +20,92 @@ class LoadOrder {
|
|||||||
bool get hasErrors => errors.isNotEmpty;
|
bool get hasErrors => errors.isNotEmpty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var specialMods = {
|
||||||
|
'ludeon.rimworld': Mod(
|
||||||
|
id: 'ludeon.rimworld',
|
||||||
|
name: 'RimWorld',
|
||||||
|
path: '',
|
||||||
|
versions: [],
|
||||||
|
description: 'RimWorld base game',
|
||||||
|
dependencies: [],
|
||||||
|
loadAfter: [],
|
||||||
|
loadBefore: [],
|
||||||
|
incompatibilities: [],
|
||||||
|
isBaseGame: true,
|
||||||
|
size: 0,
|
||||||
|
isExpansion: false,
|
||||||
|
enabled: true,
|
||||||
|
),
|
||||||
|
'ludeon.rimworld.royalty': Mod(
|
||||||
|
id: 'ludeon.rimworld.royalty',
|
||||||
|
name: 'Royalty',
|
||||||
|
path: '',
|
||||||
|
versions: [],
|
||||||
|
description: 'RimWorld expansion - Royalty',
|
||||||
|
dependencies: ['ludeon.rimworld'],
|
||||||
|
loadAfter: [],
|
||||||
|
loadBefore: [
|
||||||
|
'ludeon.rimworld.anomaly',
|
||||||
|
'ludeon.rimworld.biotech',
|
||||||
|
'ludeon.rimworld.ideology',
|
||||||
|
],
|
||||||
|
incompatibilities: [],
|
||||||
|
isBaseGame: false,
|
||||||
|
size: 0,
|
||||||
|
isExpansion: true,
|
||||||
|
enabled: true,
|
||||||
|
),
|
||||||
|
'ludeon.rimworld.ideology': Mod(
|
||||||
|
id: 'ludeon.rimworld.ideology',
|
||||||
|
name: 'Ideology',
|
||||||
|
path: '',
|
||||||
|
versions: [],
|
||||||
|
description: 'RimWorld expansion - Ideology',
|
||||||
|
dependencies: ['ludeon.rimworld'],
|
||||||
|
loadAfter: ['ludeon.rimworld.royalty'],
|
||||||
|
loadBefore: ['ludeon.rimworld.anomaly', 'ludeon.rimworld.biotech'],
|
||||||
|
incompatibilities: [],
|
||||||
|
isBaseGame: false,
|
||||||
|
size: 0,
|
||||||
|
isExpansion: true,
|
||||||
|
enabled: true,
|
||||||
|
),
|
||||||
|
'ludeon.rimworld.biotech': Mod(
|
||||||
|
id: 'ludeon.rimworld.biotech',
|
||||||
|
name: 'Biotech',
|
||||||
|
path: '',
|
||||||
|
versions: [],
|
||||||
|
description: 'RimWorld expansion - Biotech',
|
||||||
|
dependencies: ['ludeon.rimworld'],
|
||||||
|
loadAfter: ['ludeon.rimworld.ideology', 'ludeon.rimworld.royalty'],
|
||||||
|
loadBefore: ['ludeon.rimworld.anomaly'],
|
||||||
|
incompatibilities: [],
|
||||||
|
isBaseGame: false,
|
||||||
|
size: 0,
|
||||||
|
isExpansion: true,
|
||||||
|
enabled: true,
|
||||||
|
),
|
||||||
|
'ludeon.rimworld.anomaly': Mod(
|
||||||
|
id: 'ludeon.rimworld.anomaly',
|
||||||
|
name: 'Anomaly',
|
||||||
|
path: '',
|
||||||
|
versions: [],
|
||||||
|
description: 'RimWorld expansion - Anomaly',
|
||||||
|
dependencies: ['ludeon.rimworld'],
|
||||||
|
loadAfter: [
|
||||||
|
'ludeon.rimworld.biotech',
|
||||||
|
'ludeon.rimworld.ideology',
|
||||||
|
'ludeon.rimworld.royalty',
|
||||||
|
],
|
||||||
|
loadBefore: [],
|
||||||
|
incompatibilities: [],
|
||||||
|
isBaseGame: false,
|
||||||
|
size: 0,
|
||||||
|
isExpansion: true,
|
||||||
|
enabled: true,
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
class ModList {
|
class ModList {
|
||||||
String configPath = '';
|
String configPath = '';
|
||||||
String modsPath = '';
|
String modsPath = '';
|
||||||
@@ -56,7 +142,6 @@ class ModList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final List<FileSystemEntity> entities = directory.listSync();
|
final List<FileSystemEntity> entities = directory.listSync();
|
||||||
// TODO: Count only the latest version of each mod and not all versions
|
|
||||||
final List<String> modDirectories =
|
final List<String> modDirectories =
|
||||||
entities.whereType<Directory>().map((dir) => dir.path).toList();
|
entities.whereType<Directory>().map((dir) => dir.path).toList();
|
||||||
|
|
||||||
@@ -154,42 +239,26 @@ class ModList {
|
|||||||
for (final modElement in modElements) {
|
for (final modElement in modElements) {
|
||||||
final modId = modElement.innerText.toLowerCase();
|
final modId = modElement.innerText.toLowerCase();
|
||||||
|
|
||||||
// Check if this is a special Ludeon mod
|
if (specialMods.containsKey(modId)) {
|
||||||
final isBaseGame = modId == 'ludeon.rimworld';
|
mods[modId] = specialMods[modId]!;
|
||||||
final isExpansion =
|
continue;
|
||||||
!isBaseGame &&
|
}
|
||||||
modId.startsWith('ludeon.rimworld.') &&
|
|
||||||
knownExpansionIds.contains(modId);
|
|
||||||
|
|
||||||
final existingMod = mods[modId];
|
final existingMod = mods[modId];
|
||||||
final mod = Mod(
|
final mod = Mod(
|
||||||
name:
|
name: existingMod?.name ?? modId,
|
||||||
existingMod?.name ??
|
|
||||||
(isBaseGame
|
|
||||||
? "RimWorld"
|
|
||||||
: isExpansion
|
|
||||||
? "RimWorld ${_expansionNameFromId(modId)}"
|
|
||||||
: modId),
|
|
||||||
id: existingMod?.id ?? modId,
|
id: existingMod?.id ?? modId,
|
||||||
path: existingMod?.path ?? '',
|
path: existingMod?.path ?? '',
|
||||||
versions: existingMod?.versions ?? [],
|
versions: existingMod?.versions ?? [],
|
||||||
description:
|
description: existingMod?.description ?? '',
|
||||||
existingMod?.description ??
|
|
||||||
(isBaseGame
|
|
||||||
? "RimWorld base game"
|
|
||||||
: isExpansion
|
|
||||||
? "RimWorld expansion"
|
|
||||||
: ""),
|
|
||||||
dependencies: existingMod?.dependencies ?? [],
|
dependencies: existingMod?.dependencies ?? [],
|
||||||
loadAfter:
|
loadAfter: existingMod?.loadAfter ?? [],
|
||||||
existingMod?.loadAfter ??
|
|
||||||
(isExpansion ? ['ludeon.rimworld'] : []),
|
|
||||||
loadBefore: existingMod?.loadBefore ?? [],
|
loadBefore: existingMod?.loadBefore ?? [],
|
||||||
incompatibilities: existingMod?.incompatibilities ?? [],
|
incompatibilities: existingMod?.incompatibilities ?? [],
|
||||||
enabled: existingMod?.enabled ?? false,
|
enabled: existingMod?.enabled ?? false,
|
||||||
size: existingMod?.size ?? 0,
|
size: existingMod?.size ?? 0,
|
||||||
isBaseGame: isBaseGame,
|
isBaseGame: false,
|
||||||
isExpansion: isExpansion,
|
isExpansion: false,
|
||||||
);
|
);
|
||||||
if (mods.containsKey(modId)) {
|
if (mods.containsKey(modId)) {
|
||||||
logger.warning('Mod $modId already exists in mods list, overwriting');
|
logger.warning('Mod $modId already exists in mods list, overwriting');
|
||||||
@@ -653,12 +722,3 @@ class ModList {
|
|||||||
return loadRequired(loadOrder);
|
return loadRequired(loadOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String _expansionNameFromId(String id) {
|
|
||||||
final parts = id.split('.');
|
|
||||||
if (parts.length < 3) return id;
|
|
||||||
|
|
||||||
final expansionPart = parts[2];
|
|
||||||
return expansionPart.substring(0, 1).toUpperCase() +
|
|
||||||
expansionPart.substring(1);
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user