Files
OpenRA/mods/cnc/installer/firstdecade.yaml
RoosterDragon 578a9fe457 Fix mod content installers.
In 4312a4d3f4 MiniYaml merging was adjusted. One effect of this change was that duplicate keys in files that did not previously require merging was previously allowed, but was now an error. (Test case `TestMergeConflictsNoMerge`)

The installer files were relying on the previous behaviour to allow multiple `ContentPackage` keys. The above change caused a regression where attempting to manage mod content would crash due to now erroring on the duplicate keys.

We fix the issue by applying a unique ID suffix, as is a common pattern elsewhere in our yaml files, and teach InstallFromSourceLogic to recognise and strip it.
2024-08-03 12:10:08 +03:00

182 lines
9.1 KiB
YAML

tfd: C&C The First Decade (English)
Type: Disc
IDFiles:
data1.hdr: bef3a08c3fc1b1caf28ca0dbb97c1f900005930e
data1.cab: 12ad6113a6890a1b4d5651a75378c963eaf513b9
Install:
BeforeInstall:
# This one step sets up the 1 required package and the two optional video packages.
ExtractIscab: data1.hdr
Volumes:
2: data2.cab
3: data3.cab
Extract:
^SupportDir|Content/cnc/conquer.mix: CnC\\CONQUER.MIX
^SupportDir|Content/cnc/desert.mix: CnC\\DESERT.MIX
^SupportDir|Content/cnc/general.mix: CnC\\GENERAL.MIX
^SupportDir|Content/cnc/sounds.mix: CnC\\SOUNDS.MIX
^SupportDir|Content/cnc/temperat.mix: CnC\\TEMPERAT.MIX
^SupportDir|Content/cnc/winter.mix: CnC\\WINTER.MIX
^SupportDir|Content/cnc/speech.mix: CnC\\SPEECH.MIX
^SupportDir|Content/cnc/tempicnh.mix: CnC\\TEMPICNH.MIX
^SupportDir|Content/cnc/transit.mix: CnC\\TRANSIT.MIX
^SupportDir|Content/cnc/movies.mix: CnC\\MOVIES.MIX
# GDI campaign briefings (optional):
ContentPackage@movies-gdi:
Name: movies-gdi
Actions:
ExtractMix: ^SupportDir|Content/cnc/movies.mix
^SupportDir|Content/cnc/movies/visor.vqa: visor.vqa
^SupportDir|Content/cnc/movies/turtkill.vqa: turtkill.vqa
^SupportDir|Content/cnc/movies/trailer.vqa: trailer.vqa
^SupportDir|Content/cnc/movies/tbrinfo3.vqa: tbrinfo3.vqa
^SupportDir|Content/cnc/movies/tbrinfo2.vqa: tbrinfo2.vqa
^SupportDir|Content/cnc/movies/tbrinfo1.vqa: tbrinfo1.vqa
^SupportDir|Content/cnc/movies/seige.vqa: seige.vqa
^SupportDir|Content/cnc/movies/samsite.vqa: samsite.vqa
^SupportDir|Content/cnc/movies/samdie.vqa: samdie.vqa
^SupportDir|Content/cnc/movies/sabotage.vqa: sabotage.vqa
^SupportDir|Content/cnc/movies/retro.vqa: retro.vqa
^SupportDir|Content/cnc/movies/podium.vqa: podium.vqa
^SupportDir|Content/cnc/movies/planecra.vqa: planecra.vqa
^SupportDir|Content/cnc/movies/pintle.vqa: pintle.vqa
^SupportDir|Content/cnc/movies/paratrop.vqa: paratrop.vqa
^SupportDir|Content/cnc/movies/nodsweep.vqa: nodsweep.vqa
^SupportDir|Content/cnc/movies/nodlose.vqa: nodlose.vqa
^SupportDir|Content/cnc/movies/nodflees.vqa: nodflees.vqa
^SupportDir|Content/cnc/movies/nod1.vqa: nod1.vqa
^SupportDir|Content/cnc/movies/nitejump.vqa: nitejump.vqa
^SupportDir|Content/cnc/movies/napalm.vqa: napalm.vqa
^SupportDir|Content/cnc/movies/logo.vqa: logo.vqa
^SupportDir|Content/cnc/movies/landing.vqa: landing.vqa
^SupportDir|Content/cnc/movies/intro2.vqa: intro2.vqa
^SupportDir|Content/cnc/movies/hellvaly.vqa: hellvaly.vqa
^SupportDir|Content/cnc/movies/gunboat.vqa: gunboat.vqa
^SupportDir|Content/cnc/movies/generic.vqa: generic.vqa
^SupportDir|Content/cnc/movies/gdilose.vqa: gdilose.vqa
^SupportDir|Content/cnc/movies/gdifinb.vqa: gdifinb.vqa
^SupportDir|Content/cnc/movies/gdifina.vqa: gdifina.vqa
^SupportDir|Content/cnc/movies/gdiend2.vqa: gdiend2.vqa
^SupportDir|Content/cnc/movies/gdiend1.vqa: gdiend1.vqa
^SupportDir|Content/cnc/movies/gdi9.vqa: gdi9.vqa
^SupportDir|Content/cnc/movies/gdi8b.vqa: gdi8b.vqa
^SupportDir|Content/cnc/movies/gdi8a.vqa: gdi8a.vqa
^SupportDir|Content/cnc/movies/gdi7.vqa: gdi7.vqa
^SupportDir|Content/cnc/movies/gdi6.vqa: gdi6.vqa
^SupportDir|Content/cnc/movies/gdi5.vqa: gdi5.vqa
^SupportDir|Content/cnc/movies/gdi4b.vqa: gdi4b.vqa
^SupportDir|Content/cnc/movies/gdi4a.vqa: gdi4a.vqa
^SupportDir|Content/cnc/movies/gdi3lose.vqa: gdi3lose.vqa
^SupportDir|Content/cnc/movies/gdi3.vqa: gdi3.vqa
^SupportDir|Content/cnc/movies/gdi2.vqa: gdi2.vqa
^SupportDir|Content/cnc/movies/gdi15.vqa: gdi15.vqa
^SupportDir|Content/cnc/movies/gdi14.vqa: gdi14.vqa
^SupportDir|Content/cnc/movies/gdi13.vqa: gdi13.vqa
^SupportDir|Content/cnc/movies/gdi12.vqa: gdi12.vqa
^SupportDir|Content/cnc/movies/gdi11.vqa: gdi11.vqa
^SupportDir|Content/cnc/movies/gdi10.vqa: gdi10.vqa
^SupportDir|Content/cnc/movies/gdi1.vqa: gdi1.vqa
^SupportDir|Content/cnc/movies/gameover.vqa: gameover.vqa
^SupportDir|Content/cnc/movies/forestkl.vqa: forestkl.vqa
^SupportDir|Content/cnc/movies/flyy.vqa: flyy.vqa
^SupportDir|Content/cnc/movies/flag.vqa: flag.vqa
^SupportDir|Content/cnc/movies/dino.vqa: dino.vqa
^SupportDir|Content/cnc/movies/desolat.vqa: desolat.vqa
^SupportDir|Content/cnc/movies/consyard.vqa: consyard.vqa
^SupportDir|Content/cnc/movies/cc2tease.vqa: cc2tease.vqa
^SupportDir|Content/cnc/movies/burdet2.vqa: burdet2.vqa
^SupportDir|Content/cnc/movies/burdet1.vqa: burdet1.vqa
^SupportDir|Content/cnc/movies/bombflee.vqa: bombflee.vqa
^SupportDir|Content/cnc/movies/bombaway.vqa: bombaway.vqa
^SupportDir|Content/cnc/movies/bkground.vqa: bkground.vqa
^SupportDir|Content/cnc/movies/bcanyon.vqa: bcanyon.vqa
^SupportDir|Content/cnc/movies/banner.vqa: banner.vqa
# Nod campaign briefings (optional):
ContentPackage@movies-nod:
Name: movies-nod
Actions:
ExtractMix: ^SupportDir|Content/cnc/movies.mix
^SupportDir|Content/cnc/movies/visor.vqa: visor.vqa
^SupportDir|Content/cnc/movies/trtkil_d.vqa: trtkil_d.vqa
^SupportDir|Content/cnc/movies/trailer.vqa: trailer.vqa
^SupportDir|Content/cnc/movies/tiberfx.vqa: tiberfx.vqa
^SupportDir|Content/cnc/movies/tankkill.vqa: tankkill.vqa
^SupportDir|Content/cnc/movies/tankgo.vqa: tankgo.vqa
^SupportDir|Content/cnc/movies/sundial.vqa: sundial.vqa
^SupportDir|Content/cnc/movies/stealth.vqa: stealth.vqa
^SupportDir|Content/cnc/movies/spycrash.vqa: spycrash.vqa
^SupportDir|Content/cnc/movies/sethpre.vqa: sethpre.vqa
^SupportDir|Content/cnc/movies/seige.vqa: seige.vqa
^SupportDir|Content/cnc/movies/samsite.vqa: samsite.vqa
^SupportDir|Content/cnc/movies/retro.vqa: retro.vqa
^SupportDir|Content/cnc/movies/refint.vqa: refint.vqa
^SupportDir|Content/cnc/movies/obel.vqa: obel.vqa
^SupportDir|Content/cnc/movies/nuke.vqa: nuke.vqa
^SupportDir|Content/cnc/movies/nodlose.vqa: nodlose.vqa
^SupportDir|Content/cnc/movies/nodfinal.vqa: nodfinal.vqa
^SupportDir|Content/cnc/movies/nodend4.vqa: nodend4.vqa
^SupportDir|Content/cnc/movies/nodend3.vqa: nodend3.vqa
^SupportDir|Content/cnc/movies/nodend2.vqa: nodend2.vqa
^SupportDir|Content/cnc/movies/nodend1.vqa: nodend1.vqa
^SupportDir|Content/cnc/movies/nod9.vqa: nod9.vqa
^SupportDir|Content/cnc/movies/nod8.vqa: nod8.vqa
^SupportDir|Content/cnc/movies/nod7b.vqa: nod7b.vqa
^SupportDir|Content/cnc/movies/nod7a.vqa: nod7a.vqa
^SupportDir|Content/cnc/movies/nod6.vqa: nod6.vqa
^SupportDir|Content/cnc/movies/nod5.vqa: nod5.vqa
^SupportDir|Content/cnc/movies/nod4b.vqa: nod4b.vqa
^SupportDir|Content/cnc/movies/nod4a.vqa: nod4a.vqa
^SupportDir|Content/cnc/movies/nod3.vqa: nod3.vqa
^SupportDir|Content/cnc/movies/nod2.vqa: nod2.vqa
^SupportDir|Content/cnc/movies/nod1pre.vqa: nod1pre.vqa
^SupportDir|Content/cnc/movies/nod13.vqa: nod13.vqa
^SupportDir|Content/cnc/movies/nod12.vqa: nod12.vqa
^SupportDir|Content/cnc/movies/nod11.vqa: nod11.vqa
^SupportDir|Content/cnc/movies/nod10b.vqa: nod10b.vqa
^SupportDir|Content/cnc/movies/nod10a.vqa: nod10a.vqa
^SupportDir|Content/cnc/movies/nod1.vqa: nod1.vqa
^SupportDir|Content/cnc/movies/logo.vqa: logo.vqa
^SupportDir|Content/cnc/movies/landing.vqa: landing.vqa
^SupportDir|Content/cnc/movies/kanepre.vqa: kanepre.vqa
^SupportDir|Content/cnc/movies/intro2.vqa: intro2.vqa
^SupportDir|Content/cnc/movies/insites.vqa: insites.vqa
^SupportDir|Content/cnc/movies/generic.vqa: generic.vqa
^SupportDir|Content/cnc/movies/gdi1.vqa: gdi1.vqa
^SupportDir|Content/cnc/movies/gameover.vqa: gameover.vqa
^SupportDir|Content/cnc/movies/forestkl.vqa: forestkl.vqa
^SupportDir|Content/cnc/movies/flag.vqa: flag.vqa
^SupportDir|Content/cnc/movies/dino.vqa: dino.vqa
^SupportDir|Content/cnc/movies/dessweep.vqa: dessweep.vqa
^SupportDir|Content/cnc/movies/deskill.vqa: deskill.vqa
^SupportDir|Content/cnc/movies/desflees.vqa: desflees.vqa
^SupportDir|Content/cnc/movies/consyard.vqa: consyard.vqa
^SupportDir|Content/cnc/movies/cc2tease.vqa: cc2tease.vqa
^SupportDir|Content/cnc/movies/bombflee.vqa: bombflee.vqa
^SupportDir|Content/cnc/movies/bombaway.vqa: bombaway.vqa
^SupportDir|Content/cnc/movies/bcanyon.vqa: bcanyon.vqa
^SupportDir|Content/cnc/movies/banner.vqa: banner.vqa
^SupportDir|Content/cnc/movies/akira.vqa: akira.vqa
^SupportDir|Content/cnc/movies/airstrk.vqa: airstrk.vqa
# Base game music (optional):
ContentPackage@music:
Name: music
Actions:
ExtractIscab: data1.hdr
Volumes:
2: data2.cab
3: data3.cab
Extract:
^SupportDir|Content/cnc/scores.mix: CnC\\SCORES.MIX
# Covert Operations music (optional):
ContentPackage@music-covertops:
Name: music-covertops
Actions:
ExtractIscab: data1.hdr
Volumes:
2: data2.cab
3: data3.cab
Extract:
^SupportDir|Content/cnc/scores-covertops.mix: CnC\covert\SCORES.MIX
AfterInstall:
Delete: ^SupportDir|Content/cnc/movies.mix