diff --git a/.github/workflows/duplicates.yml b/.github/workflows/duplicates.yml new file mode 100644 index 0000000000..777a91976e --- /dev/null +++ b/.github/workflows/duplicates.yml @@ -0,0 +1,20 @@ +name: Check Patch Duplicates +on: + pull_request: + branches: [ master, Development ] + +# Restrict the permissions of the ephemeral GitHub token used by this workflow +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Check for duplicate virtual file paths + run: | + python3 DupeFinder.py -c diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b04e34fc0f..f314aa9c7f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,12 +15,10 @@ jobs: rm -rf AssemblyPublicizer git clone https://github.com/CombatExtended-Continued/AssemblyPublicizer mkdir -p Assemblies - mkdir -p AssembliesCore - mkdir -p AssembliesCompat mkdir -p ${{ runner.temp }}/downloads - - name: build loader + - name: remove loader run: | - TEMP=${{ runner.temp }}/ python Make.py --csproj Source/Loader/Loader.csproj --output Assemblies/0CombatExtendedLoader.dll --download-libs --all-libs + rm Assemblies/CombatExtendedLoader.dll - name: build core run: | @@ -33,7 +31,7 @@ jobs: - name: package run: | mkdir CombatExtended - cp -r Source/ Assemblies/ AssembliesCore/ AssembliesCompat/ About/ Defs/ Languages/ Patches/ Royalty/ Ideology/ Biotech/ Anomaly/ Sounds/ Textures/ ModPatches/ LoadFolders.xml README.md SupportedThirdPartyMods.md CombatExtended + cp -r Source/ Assemblies/ About/ Defs/ Languages/ Patches/ Royalty/ Ideology/ Biotech/ Anomaly/ Sounds/ Textures/ ModPatches/ LoadFolders.xml README.md SupportedThirdPartyMods.md CombatExtended zip -9 -r build.zip CombatExtended - name: Upload to DO run: | diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index fc14818afd..5196edc729 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -25,15 +25,13 @@ jobs: wget https://raw.githubusercontent.com/CombatExtended-Continued/CombatExtended/Development/Make.py -O Make.py wget https://raw.githubusercontent.com/CombatExtended-Continued/CombatExtended/Development/BuildCompat.py -O BuildCompat.py mkdir -p Assemblies - mkdir -p AssembliesCore - mkdir -p AssembliesCompat mkdir -p ${{ runner.temp }}/downloads rm -rf AssemblyPublicizer git clone https://github.com/CombatExtended-Continued/AssemblyPublicizer - - name: build loader + - name: remove loader run: | - TEMP=${{ runner.temp }}/ python Make.py --csproj Source/Loader/Loader.csproj --output Assemblies/0CombatExtendedLoader.dll --download-libs --all-libs + rm Assemblies/CombatExtendedLoader.dll - name: build core run: | @@ -46,7 +44,7 @@ jobs: - name: package run: | mkdir CombatExtended - cp -r Source/ Assemblies/ AssembliesCompat/ AssembliesCore/ About/ Defs/ Languages/ Patches/ Royalty/ Ideology/ Biotech/ Anomaly/ Sounds/ Textures/ ModPatches/ LoadFolders.xml README.md SupportedThirdPartyMods.md CombatExtended + cp -r Source/ Assemblies/ About/ Defs/ Languages/ Patches/ Royalty/ Ideology/ Biotech/ Anomaly/ Sounds/ Textures/ ModPatches/ LoadFolders.xml README.md SupportedThirdPartyMods.md CombatExtended zip -9 -r build.zip CombatExtended - name: Upload to DO run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 756bb2140a..50669e0cd7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,13 +16,11 @@ jobs: rm -rf AssemblyPublicizer git clone https://github.com/CombatExtended-Continued/AssemblyPublicizer mkdir -p Assemblies - mkdir -p AssembliesCore - mkdir -p AssembliesCompat mkdir -p ${{ runner.temp }}/downloads - - name: build loader + - name: remove loader run: | - TEMP=${{ runner.temp }}/ python Make.py --csproj Source/Loader/Loader.csproj --output Assemblies/0CombatExtendedLoader.dll --download-libs --all-libs + rm Assemblies/CombatExtendedLoader.dll - name: build core run: | TEMP=${{ runner.temp }}/ python Make.py --csproj Source/CombatExtended/CombatExtended.csproj --output Assemblies/CombatExtended.dll --download-libs --all-libs --publicizer $PWD/AssemblyPublicizer @@ -32,7 +30,7 @@ jobs: - name: package run: | mkdir CombatExtended - cp -r Assemblies/ AssembliesCore/ AssembliesCompat/ About/ Defs/ Languages/ Patches/ Royalty/ Ideology/ Biotech/ Anomaly/ Sounds/ Textures/ ModPatches/ LoadFolders.xml README.md SupportedThirdPartyMods.md CombatExtended + cp -r Assemblies/ About/ Defs/ Languages/ Patches/ Royalty/ Ideology/ Biotech/ Anomaly/ Sounds/ Textures/ ModPatches/ LoadFolders.xml README.md SupportedThirdPartyMods.md CombatExtended zip -9 -r CombatExtended.zip CombatExtended - name: Upload Package id: upload-package diff --git a/.gitignore b/.gitignore index ba719fca3b..60969532ac 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ UnityEngine.dll .idea/ +__pycache__ +ModPatches/*/Assemblies/ diff --git a/Anomaly/Patches/DamageDefs/Damages_Misc.xml b/Anomaly/Patches/DamageDefs/Anomaly_Damages_Misc.xml similarity index 100% rename from Anomaly/Patches/DamageDefs/Damages_Misc.xml rename to Anomaly/Patches/DamageDefs/Anomaly_Damages_Misc.xml diff --git a/Assemblies/0CombatExtendedLoader.dll b/Assemblies/0CombatExtendedLoader.dll deleted file mode 100644 index ce2d0521d0..0000000000 Binary files a/Assemblies/0CombatExtendedLoader.dll and /dev/null differ diff --git a/Assemblies/CombatExtendedLoader.dll b/Assemblies/CombatExtendedLoader.dll new file mode 100644 index 0000000000..225ee26087 Binary files /dev/null and b/Assemblies/CombatExtendedLoader.dll differ diff --git a/BuildCompat.py b/BuildCompat.py index e3470dd2ad..caf130e938 100644 --- a/BuildCompat.py +++ b/BuildCompat.py @@ -4,6 +4,7 @@ from subprocess import Popen import re import sys +from xml.dom.minidom import parse as XMLOpen tm = '-m' in sys.argv @@ -37,8 +38,20 @@ def system(*cmd): if tm and name not in sys.argv: continue csproj = csproj.replace('\\', '/').split('/') csproj = FilePath("Source").descendant(csproj) - print(f"Building {name}") output = FilePath("AssembliesCompat").child(name+".dll") + with XMLOpen(csproj.path) as cpath: + op = cpath.getElementsByTagName("OutputPath") + if op: + op = op[0].firstChild.data + if 'ModPatches' in op: + op = op.rsplit("..\\ModPatches", 1)[-1].replace('\\', '/').split('/') + if op: + od = FilePath("ModPatches").descendant(op) + if not od.exists(): + od.makedirs() + output = od.child(name+".dll") + + print(f"Building {name}") system("python3", "Make.py", "--csproj", csproj.path, "--output", output.path, DOWNLOAD_LIBS, "--all-libs", "--publicizer", PUBLICIZER, "--", "-r:Assemblies/CombatExtended.dll") for t in tasks: diff --git a/DupeFinder.py b/DupeFinder.py new file mode 100644 index 0000000000..6fa58f875f --- /dev/null +++ b/DupeFinder.py @@ -0,0 +1,50 @@ +from xml.dom.minidom import parse as XMLOpen +from twisted.python.filepath import FilePath +import sys +err = "-c" not in sys.argv + +used = {} +mods = set() +ContentRoot = FilePath(".") +ec = 0 + +def process(node): + global ec + mod = c.getAttribute("IfModActive") + if not mod: + mod = "CETeam.CombatExtended" + dp = c.firstChild.data.replace(''', "'") + if (mod, dp) in mods: + ec += 1 + msg = f"Mod {mod} is listed in LoadFolders.xml twice, both pointing to {c.firstChild.data}" + if err: + raise RuntimeError(msg) + else: + print(msg) + mods.add((mod, dp)) + root = FilePath("./" + dp) + if not ContentRoot in root.parents(): + return + for fd in root.walk(): + if fd.isdir(): + continue + if not fd.basename().endswith(".xml"): + continue + relative = tuple(fd.segmentsFrom(root)) + if relative in used: + msg = f"""Relative paths collision found: {str.join("/", fd.segmentsFrom(ContentRoot))} overrides {str.join("/", used[relative].segmentsFrom(ContentRoot))}""" + if err: + raise RuntimeError(msg) + else: + ec += 1 + print(msg) + used[relative] = fd + +with XMLOpen("LoadFolders.xml") as x: + v1_5 = x.getElementsByTagName("v1.5") + for n in v1_5: + for c in n.getElementsByTagName("li"): + process(c) + + +raise SystemExit(ec) diff --git a/LoadFolders.xml b/LoadFolders.xml index e476c0e2d1..87ab9e226c 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -380,6 +380,7 @@
  • ModPatches/RBSE
  • ModPatches/RH2 DOOM
  • ModPatches/RH2 Faction - Bounty Hunters
  • +
  • ModPatches/RH2 Faction - Gruppa Krovi
  • ModPatches/RH2 Faction - Task Force 141
  • ModPatches/RH2 Faction - The Rangers
  • ModPatches/RH2 Faction - Utilitarian
  • @@ -447,7 +448,6 @@
  • ModPatches/Rimmu-Nation - Security
  • ModPatches/Rimmu-Nation - Weapons
  • ModPatches/Rimsenal - Spacer Faction Pack
  • -
  • ModPatches/Rimsenal - Spacer Faction Pack
  • ModPatches/Rimsenal Core
  • ModPatches/Rimsenal Enhanced Vanilla
  • ModPatches/Rimsenal Factions
  • @@ -556,6 +556,7 @@
  • ModPatches/Vanilla Races Expanded - Highmate
  • ModPatches/Vanilla Races Expanded - Hussar
  • ModPatches/Vanilla Races Expanded - Insector
  • +
  • ModPatches/Vanilla Races Expanded - Lycanthrope
  • ModPatches/Vanilla Races Expanded - Phytokin
  • ModPatches/Vanilla Races Expanded - Sanguophage
  • ModPatches/Vanilla Races Expanded - Saurid
  • @@ -609,5 +610,8 @@
  • ModPatches/pphhyy Expanded Scythers
  • ModPatches/pphhyy Sanguinary Animals
  • ModPatches/pphhyy's Lightless Empyrean
  • +
  • ModPatches/VehicleFramework
  • +
  • ModPatches/Multiplayer
  • +
  • ModPatches/SRTS
  • - + \ No newline at end of file diff --git a/Makefile b/Makefile index d440b09473..9a4fc416fb 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ PUBLICIZER := /tmp/AssemblyPublicizer -all: Assemblies/0CombatExtendedLoader.dll Assemblies/CombatExtended.dll CompatAssemblies AssembliesCompat $(PUBLICIZER) +all: Assemblies/CombatExtended.dll CompatAssemblies AssembliesCompat $(PUBLICIZER) $(PUBLICIZER): git clone https://github.com/CombatExtended-Continued/AssemblyPublicizer --depth=1 $(PUBLICIZER) @@ -12,10 +12,10 @@ $(PUBLICIZER): AssembliesCompat: $(PUBLICIZER) mkdir -p AssembliesCompat -Assemblies/0CombatExtendedLoader.dll: Source/Loader/Loader.csproj $(wildcard Source/Loader/Loader/*.cs) $(PUBLICIZER) - python3 Make.py --csproj Source/Loader/Loader.csproj --output Assemblies/0CombatExtendedLoader.dll --reference /tmp/rwreference --all-libs $(DOWNLOAD_LIBS) +Assemblies/CombatExtendedLoader.dll: Source/Loader/Loader.csproj $(wildcard Source/Loader/Loader/*.cs) $(PUBLICIZER) + python3 Make.py --csproj Source/Loader/Loader.csproj --output Assemblies/CombatExtendedLoader.dll --reference /tmp/rwreference --all-libs $(DOWNLOAD_LIBS) -Assemblies/CombatExtended.dll: Assemblies/0CombatExtendedLoader.dll Source/CombatExtended/CombatExtended.csproj $(wildcard Source/CombatExtended/*/*.cs) $(wildcard Source/CombatExtended/*/*/*.cs) $(PUBLICIZER) +Assemblies/CombatExtended.dll: Source/CombatExtended/CombatExtended.csproj $(wildcard Source/CombatExtended/*/*.cs) $(wildcard Source/CombatExtended/*/*/*.cs) $(PUBLICIZER) python3 Make.py --csproj Source/CombatExtended/CombatExtended.csproj --output Assemblies/CombatExtended.dll --reference /tmp/rwreference --all-libs $(DOWNLOAD_LIBS) --publicizer $(PUBLICIZER) diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Defs/Ammo_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Defs/Ammo_Gruppa_Krovi.xml new file mode 100644 index 0000000000..acf2a00756 --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Defs/Ammo_Gruppa_Krovi.xml @@ -0,0 +1,94 @@ + + + + + + AmmoSet_RNTeslaCharge + + + Bullet_CE_RNBullet_Tesla_Charge + + + + + Bullet_CE_RNBullet_Tesla_Charge + + + Things/Projectile/Tesla_Arc + Graphic_Single + TransparentPostLight + 4 + + + Electrical + 2.0 + 25 + false + Artillery_HitThickRoof + RN_Tesla_Explode + 93 + 3.2 + true + 0 + 0 + 0 + + +
  • + Smoke + (-0.3,0,0.35) + (0.3,0,0.35) + 90 + 1~1.1 + (0,235,31,255) + (0,235,31,255) +
  • +
    +
    + + + + + AmmoSet_RNPlasmaCharge + + + Bullet_CE_RNBullet_RedStar_Plasma + + + + + Bullet_CE_RNBullet_RedStar_Plasma + + + Things/Projectile/RedStar_Plasma + Graphic_Single + TransparentPostLight + 4 + + + RN2_RedStarBomb + 1.95 + 30 + false + Artillery_HitThickRoof + RN_RedStar_Explode + 76 + 3 + 0 + 0 + 0 + + +
  • + Smoke + (-0.3,0,0.35) + (0.3,0,0.35) + 90 + 1~1.1 + (0,235,31,255) + (0,235,31,255) +
  • +
    +
    + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Apparel_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Apparel_Gruppa_Krovi.xml new file mode 100644 index 0000000000..59df622907 --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Apparel_Gruppa_Krovi.xml @@ -0,0 +1,470 @@ + + + + + + Defs/ThingDef[ + defName="RNApparel_EyePros_EdgeTactical" or + defName="RNApparel_EyePros_GucciAviatorGlasses" + ]/apparel/layers + + +
  • StrappedHead
  • +
    +
    +
    + + + Defs/ThingDef[ + defName="RNApparel_EyePros_EdgeTactical" or + defName="RNApparel_EyePros_GucciAviatorGlasses" or + defName="RNApparel_Flatcap" + ]/statBases + + 2 + 0.1 + + + + + Defs/ThingDef[defName="RNApparel_EyePros_EdgeTactical"]/statBases/StuffEffectMultiplierArmor + + 1.5 + + + + + Defs/ThingDef[defName="RNApparel_Flatcap"]/statBases + + 2 + + + + + + Defs/ThingDef[ + defName="RNApparel_UaRmsTORD_GreenMoss" or + defName="RNApparel_6b27_GreenBare" or + defName="RNApparel_K63_HelmetA" or + defName="RNApparel_K63_HelmetB" or + defName="RNApparel_K63_Helmet_GP7Gasmask" or + defName="RNApparel_Helmet_JuggernautMkII" + ]/stuffCategories + + +
  • Steeled
  • +
    +
    +
    + + + Defs/ThingDef[ + defName="RNApparel_UaRmsTORD_GreenMoss" or + defName="RNApparel_6b27_GreenBare" or + defName="RNApparel_K63_HelmetA" or + defName="RNApparel_K63_HelmetB" + ]/statBases + + 3.5 + 1 + 8 + 16 + 0.54 + + + + + Defs/ThingDef[defName="RNApparel_K63_Helmet_GP7Gasmask"]/statBases + + 5.0 + 1.5 + 8 + 16 + 0.54 + + + + + Defs/ThingDef[defName="RNApparel_K63_Helmet_GP7Gasmask"] + +
  • + +
  • + 0.20 + +
  • Eye
  • + + +
  • + 0.20 + +
  • Eye
  • + + + + +
    +
    + + + Defs/ThingDef[defName="RNApparel_Helmet_JuggernautMkII"]/statBases + + 5.0 + 1.5 + 15 + 30 + 0.90 + + + + + Defs/ThingDef[defName="RNApparel_Helmet_JuggernautMkII"]/costList + + + 20 + 5 + + + + + + Defs/ThingDef[defName="RNApparel_Helmet_JuggernautMkII"]/equippedStatOffsets/MoveSpeed + + + + Defs/ThingDef[defName="RNApparel_Helmet_JuggernautMkII"] + +
  • + +
  • + 0.80 + +
  • Eye
  • + + +
  • + 0.80 + +
  • Eye
  • + + + + +
    +
    + + + + Defs/ThingDef[ + defName="RNApparel_Balaclava_Kula1Hole" or + defName="RNApparel_Balaclava_Kula3Hole" or + defName="RNApparel_Balaclava_Multicam" + ]/costStuffCount + + 20 + + + + + Defs/ThingDef[ + defName="RNApparel_Balaclava_Kula1Hole" or + defName="RNApparel_Balaclava_Kula3Hole" or + defName="RNApparel_Balaclava_Multicam" + ]/statBases/StuffEffectMultiplierArmor + + 1 + 0.5 + + + + + Defs/ThingDef[ + defName="RNApparel_Balaclava_Kula1Hole" or + defName="RNApparel_Balaclava_Kula3Hole" or + defName="RNApparel_Balaclava_Multicam" + ]/apparel/layers + + +
  • OnHead
  • +
    +
    +
    + + + Defs/ThingDef[ + defName="RNApparel_Balaclava_Kula1Hole" or + defName="RNApparel_Balaclava_Kula3Hole" or + defName="RNApparel_Balaclava_Multicam" + ]/apparel/bodyPartGroups + + +
  • UpperHead
  • +
  • Teeth
  • +
    +
    +
    + + + + Defs/ThingDef[ + defName="RNApparel_UBACShirt_GreenMoss" or + defName="RNApparel_Jacket_GORKA4Jacket" or + defName="RNApparel_Jacket_GORKA4AnorakJacket" or + defName="RNApparel_Jacket_GORKAESSOJacket" or + defName="RNApparel_Jacket_GORKAKMLKJacket" or + defName="RNApparel_Tracksuit_Black" + ]/statBases/StuffEffectMultiplierArmor + + 1.5 + 1 + + + + + Defs/ThingDef[ + defName="RNApparel_UBACShirt_GreenMoss" or + defName="RNApparel_Jacket_GORKA4Jacket" or + defName="RNApparel_Jacket_GORKA4AnorakJacket" or + defName="RNApparel_Jacket_GORKAESSOJacket" or + defName="RNApparel_Jacket_GORKAKMLKJacket" + ]/statBases/Flammability + + 0.6 + + + + + + Defs/ThingDef[ + defName="RNApparel_CryeCAGE_Multicam" or + defName="RNApparel_Defender2_Green" or + defName="RNApparel_Soviet_JuggernautSuitMkII" + ]/equippedStatOffsets/MoveSpeed + + + + Defs/ThingDef[defName="RNApparel_CryeCAGE_Multicam" or defName="RNApparel_Defender2_Green"] + +
  • + +
  • + 0.60 + +
  • Neck
  • +
  • Shoulder
  • + + +
  • + 0.60 + +
  • Neck
  • +
  • Shoulder
  • + + + + +
    +
    + + + Defs/ThingDef[defName="RNApparel_CryeCAGE_Multicam"]/statBases + + + 9000 + 75 + 0.6 + 14 + 20 + 0.27 + 1 + 4.5 + 11 + 6 + 3 + + + + + + Defs/ThingDef[defName="RNApparel_Defender2_Green"]/statBases + + + 9000 + 75 + 0.6 + 16 + 23 + 0.27 + 1 + 5.5 + 13 + 6 + 4 + + + + + + Defs/ThingDef[defName="RNApparel_Soviet_JuggernautSuitMkII"]/statBases/ArmorRating_Sharp + + 18 + 50 + 20 + + + + + Defs/ThingDef[defName="RNApparel_Soviet_JuggernautSuitMkII"]/statBases/ArmorRating_Blunt + + 32 + + + + + Defs/ThingDef[defName="RNApparel_Soviet_JuggernautSuitMkII"]/equippedStatOffsets + + + 40 + + + + + + Defs/ThingDef[defName="RNApparel_Soviet_JuggernautSuitMkII"]/costList + + + 130 + 10 + 35 + 12 + + + + + + Defs/ThingDef[defName="RNApparel_Soviet_JuggernautSuitMkII"] + +
  • + +
  • + 0.80 + +
  • Neck
  • + + +
  • + 0.80 + +
  • Neck
  • + + +
  • + 0.90 + +
  • Arm
  • + + +
  • + 0.90 + +
  • Arm
  • + + + + +
    +
    + + + + Defs/ThingDef[@Name = "RHApparel_GruppaKroviHarnessBase"]/apparel/layers + + +
  • Webbing
  • +
    +
    +
    + + + Defs/ThingDef[@Name = "RHApparel_GruppaKroviHarnessBase"]/apparel/bodyPartGroups + + +
  • Shoulders
  • +
    +
    +
    + + + Defs/ThingDef[@Name = "RHApparel_GruppaKroviHarnessBase"]/statBases + + + 10 + 5 + + + + + Defs/ThingDef[@Name = "RHApparel_GruppaKroviHarnessBase"]/equippedStatOffsets + + + 25 + 0.1 + 0.05 + + + + + + + Defs/ThingDef[@Name="RH2_BackpackBase" or @Name="RH2_BackpackMakeableBase"]/apparel/layers + + +
  • Backpack
  • +
    +
    +
    + + + Defs/ThingDef[defName = "RNApparel_Backpack_KulaHydrobag"]/statBases + + 2 + + + + + Defs/ThingDef[defName = "RNApparel_Backpack_KulaHydrobag"]/equippedStatOffsets/CarryingCapacity + + 20 + + + + + Defs/ThingDef[defName = "RNApparel_Backpack_SydorM230L" or defName = "RNApparel_Backpack_Cascade45L"]/statBases + + 4 + + + + + Defs/ThingDef[defName = "RNApparel_Backpack_SydorM230L" or defName = "RNApparel_Backpack_Cascade45L"]/equippedStatOffsets/CarryingCapacity + + 35 + + + + + Defs/ThingDef[defName = "RNApparel_Backpack_JuggernautMkII"]/statBases + + 20 + + + + + Defs/ThingDef[defName = "RNApparel_Backpack_JuggernautMkII"]/equippedStatOffsets/CarryingCapacity + + 25 + 60 + + + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Bodies_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Bodies_Gruppa_Krovi.xml new file mode 100644 index 0000000000..9e5b1baf84 --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Bodies_Gruppa_Krovi.xml @@ -0,0 +1,281 @@ + + + + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalNeck"]/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalNeck"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalNeck"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalNeck"]/parts/li[def="MechanicalHead"]/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalNeck"]/parts/li[def="MechanicalHead"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalNeck"]/parts/li[def="MechanicalHead"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[customLabel="rear left foot"]/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[customLabel="rear left foot"] + + + + + + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[customLabel="rear right foot"]/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[customLabel="rear right foot"] + + + + + + + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[def="MechanicalFoot"]/groups + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[def="MechanicalFoot"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_KV2_Walker"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[def="MechanicalFoot"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalNeck"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalNeck"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalNeck"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalNeck"]/parts/li[def="MechanicalHead"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalNeck"]/parts/li[def="MechanicalHead"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalNeck"]/parts/li[def="MechanicalHead"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/parts/li[def="MechanicalHand"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/parts/li[def="MechanicalHand"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/parts/li[def="MechanicalHand"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/parts/li[def="MechanicalHand"]/parts/li[def="MechanicalFinger"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/parts/li[def="MechanicalHand"]/parts/li[def="MechanicalFinger"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalShoulder"]/parts/li[def="MechanicalArm"]/parts/li[def="MechanicalHand"]/parts/li[def="MechanicalHand"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalLeg"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalLeg"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalLeg"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[def="MechanicalFoot"]/groups + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[def="MechanicalFoot"]/groups + +
  • CoveredByNaturalArmor
  • +
    +
    + + Defs/BodyDef[defName="RH2_Soviet_Drone"]/corePart/parts/li[def="MechanicalLeg"]/parts/li[def="MechanicalFoot"] + + +
  • CoveredByNaturalArmor
  • +
    +
    +
    +
    + +
    + \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Faction_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Faction_Gruppa_Krovi.xml new file mode 100644 index 0000000000..39ed4b2b4d --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Faction_Gruppa_Krovi.xml @@ -0,0 +1,133 @@ + + + + + + Defs/FactionDef[@Name="RH2_FactionBase_GruppaKrovi"]/maxPawnCostPerTotalPointsCurve + + + +
  • (0,35)
  • +
  • (70, 50)
  • +
  • (700, 100)
  • +
  • (1300, 150)
  • +
  • (2000, 450)
  • +
  • (4200, 1400)
  • +
  • (100000, 10000)
  • +
    +
    +
    +
    + + + Defs/FactionDef[@Name="RH2_FactionBase_GruppaKrovi"]/apparelStuffFilter/thingDefs/li[text()="Hyperweave"] + + + + + + Defs/FactionDef[@Name="RH2_FactionBase_GruppaKrovi"]/pawnGroupMakers + + +
  • + + Combat + 100 + + 300 + 30 + 210 + 150 + 1 + 9 + 7 + 150 + 30 + +
  • +
  • + + Combat + 20 + + 300 + 90 + 150 + 20 + 2 + 8 + 6 + +
  • +
  • + + Combat + 15 + +
  • Siege
  • + + + 300 + 60 + 60 + 30 + 1 + 8 + 6 + + + +
  • + Peaceful + + 300 + 300 + 90 + 60 + 90 + 8 + 6 + 1 + +
  • + +
  • + Trader + + 1 + + + 5 + 10 + 5 + 1 + + + 300 + 60 + 8 + 6 + 1 + +
  • + +
  • + Settlement + + 300 + 570 + 240 + 150 + 90 + 90 + 150 + 8 + 6 + 2 + +
  • +
    +
    +
    + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Mech_Weapons_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Mech_Weapons_Gruppa_Krovi.xml new file mode 100644 index 0000000000..0c73a72e5d --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Mech_Weapons_Gruppa_Krovi.xml @@ -0,0 +1,235 @@ + + + + + Defs/ThingDef[ + defName="RNGun_KV2_Howitzer" or + defName="RNGun_Tesla_Coil" or + defName="RNGun_RedStar_PlasmaCannon" + ]/weaponTags + +
  • NoSwitch
  • +
    +
    + + + + RN2Gun_KV2_DSHKMachineGun + + 1 + 0.2 + 1.36 + 20.00 + + + 1.27 + CombatExtended.Verb_ShootCE + true + Bullet_127x108mm_FMJ + 55 + + 10 + RNShot_DSHK + GunTail_Heavy + 9 + 2.5 + HeadAttackTool + true + 12 + + + + + + + + + + RNGun_KV2_Howitzer + + + 50.00 + 20.00 + 0.75 + 0.10 + 0.5 + 2.55 + + + 3.24 + CombatExtended.Verb_ShootCE + True + Bullet_120mmCannonShell_HE + 4.3 + 125 + RN_152mmHowitzer_Shot + GunTail_Heavy + 6 + false + false + + true + + 16 + + + 1 + 8.4 + AmmoSet_120mmCannonShell + + + + + Defs/ThingDef[defName="RNGun_KV2_Howitzer"]/tools + + +
  • + + +
  • Blunt
  • + + 45 + 2.6 + 10.5 + Barrel + +
    +
    +
    + + + + RNGun_Tesla_Coil + + 50.00 + 20.00 + 1.59 + 0.15 + 1.0 + 0.35 + + + 0.0 + CombatExtended.Verb_ShootCE + True + Bullet_CE_RNBullet_Tesla_Charge + 2.5 + 62 + RN_Tesla_Shot + GunTail_Heavy + 6 + false + false + + false + + 16 + + + 1 + 4.15 + AmmoSet_RNTeslaCharge + + + + + Defs/ThingDef[defName="RNBullet_Tesla_Charge"] + + + + + RNGun_RedStar_PlasmaCannon + + 50.00 + 20.00 + 1.59 + 0.15 + 1.0 + 0.45 + + + 1.36 + CombatExtended.Verb_ShootCE + True + Bullet_CE_RNBullet_RedStar_Plasma + 3.15 + 66 + 27 + RN_RedStar_Shot + GunTail_Heavy + 6 + false + 2 + false + + false + + 16 + + + 2 + 5.1 + AmmoSet_RNPlasmaCharge + + + AimedShot + FALSE + + + + + Defs/ThingDef[defName="RNBullet_RedStar_Plasma"] + + + + + Defs/ThingDef[ + defName="RNGun_Tesla_Coil" or + defName="RNGun_RedStar_PlasmaCannon"]/tools + + + +
  • + + +
  • Blunt
  • + + 25 + 2.0 + 7 + Barrel + +
    +
    +
    + + + Defs/DamageDef[defName="RN2_RedStarBomb"]/armorCategory + + Blunt + + + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Mechs_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Mechs_Gruppa_Krovi.xml new file mode 100644 index 0000000000..d24afae67d --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Mechs_Gruppa_Krovi.xml @@ -0,0 +1,342 @@ + + + + + Defs/ThingDef[ + defName="RH2Mech_KV2Walker" or + defName="RH2Mech_TeslaDrone" or + defName="RH2Mech_PlasmaDrone" + ] + +
  • + Humanoid +
  • +
    +
    + + + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/statBases + + 125 + 125 + 1.0 + 1.0 + 0.25 + 500 + + + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/statBases/ArmorRating_Blunt + + 75 + + + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/statBases/ArmorRating_Sharp + + 30 + + + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/comps + +
  • + 2500 + false + 0.5 + true + + 5 + + 200 + 250 + 15 + 37 +
  • +
    +
    + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/butcherProducts + + 100 + + + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"] + +
  • + +
  • + 0.25 + +
  • SightSensor
  • + + +
  • + 0.25 + +
  • SightSensor
  • + + +
  • + 0.25 + +
  • HearingSensor
  • + + +
  • + 0.25 + +
  • HearingSensor
  • + + +
  • + 0.6 + +
  • MechanicalLeg
  • + + +
  • + 0.5 + +
  • MechanicalLeg
  • + + + + +
    +
    + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/comps/li[@Class="CompProperties_TurretGun" and turretDef="RNGun_KV2_KrohaLauncher"] + + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/tools + + +
  • + + +
  • Blunt
  • + + 85 + 3 + FrontLeftLeg + true + +
  • + + +
  • Blunt
  • + + 85 + 3 + FrontRightLeg + true + +
    +
    +
    + + + Defs/PawnKindDef[defName="RH2Mech_KV2Walker"] + +
  • + + 10 + 20 + + GrenadeHE +
  • +
    +
    + + + Defs/ThingDef[defName="RH2Mech_KV2Walker"]/race/baseHealthScale + + 8 + + + + + Defs/PawnKindDef[defName="RH2Mech_KV2Walker"]/combatPower + + 1400 + + + + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"]/statBases + + 80 + 20 + 1.0 + 1.0 + 0.25 + 300 + + + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"]/statBases/ArmorRating_Blunt + + 50 + + + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"]/statBases/ArmorRating_Sharp + + 20 + + + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"]/comps + +
  • + 1500 + false + 0.5 + true + + 3 + + 140 + 150 + 10 + 25 +
  • +
    +
    + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"]/race/baseHealthScale + + 4 + + + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"] + +
  • + +
  • + 0.1 + +
  • SightSensor
  • + + +
  • + 0.1 + +
  • SightSensor
  • + + +
  • + 0.1 + +
  • HearingSensor
  • + + +
  • + 0.1 + +
  • HearingSensor
  • + + +
  • + 1.5 + +
  • MechanicalShoulder
  • + + +
  • + 1.5 + +
  • MechanicalShoulder
  • + + + + +
    +
    + + + Defs/ThingDef[defName="RH2Mech_TeslaDrone" or defName="RH2Mech_PlasmaDrone"]/tools + + +
  • + + +
  • Blunt
  • + + 22 + 2 + LeftHand + true + +
  • + + +
  • Blunt
  • + + 25 + 2 + RightHand + true + true + +
    +
    +
    + + + Defs/PawnKindDef[defName="RH2Mech_TeslaDrone"] + +
  • + + 20 + 30 + +
  • +
    +
    + + + Defs/PawnKindDef[defName="RH2Mech_TeslaDrone"]/combatPower + + 400 + + + + + Defs/PawnKindDef[defName="RH2Mech_PlasmaDrone"] + +
  • + + 20 + 25 + +
  • +
    +
    + + + Defs/PawnKindDef[defName="RH2Mech_PlasmaDrone"]/combatPower + + 450 + + + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/PawnKinds_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/PawnKinds_Gruppa_Krovi.xml new file mode 100644 index 0000000000..e252fed382 --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/PawnKinds_Gruppa_Krovi.xml @@ -0,0 +1,98 @@ + + + + + Defs/PawnKindDef[@Name="RH2_GruppaKrovi_Base"] + +
  • + + 4 + 6 + +
  • +
    +
    + + + Defs/PawnKindDef[@Name="RH2_GruppaKrovi_IntermediateBase"] + +
  • + + 4 + 6 + + +
  • + 0.15 + + 10 + 100 + + +
  • GrenadeSmoke
  • + + + 0 + 1 + + +
  • + 0.075 + + 50 + 200 + + +
  • CE_FlareLauncher
  • + + + 2 + 4 + + + + +
    +
    + + + Defs/PawnKindDef[@Name="RH2_GruppaKrovi_SpecialBase"] + +
  • + + 4 + 6 + + +
  • + 0.125 + + 10 + 100 + + +
  • GrenadeDestructive
  • + + + 2 + 3 + + + + +
    +
    + + + Defs/PawnKindDef[@Name="RH2_GruppaKrovi_BossBase"] + +
  • + + 4 + 6 + +
  • +
    +
    + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/TraderKinds_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/TraderKinds_Gruppa_Krovi.xml new file mode 100644 index 0000000000..afe58741b8 --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/TraderKinds_Gruppa_Krovi.xml @@ -0,0 +1,32 @@ + + + + + Defs/ThingDef[defName="RH2_Dima_Cigarette"]/statBases + + 0.05 + + + + + Defs/TraderKindDef[ + defName="RHBase_GruppaKrovi_Standard" or + defName="RHCaravan_GruppaKrovi_BlackMarket" + ]/stockGenerators + +
  • + CE_Ammo + + 1000 + 3000 + + Cheap + + 5 + 12 + +
  • +
    +
    + +
    \ No newline at end of file diff --git a/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Weapons_Gruppa_Krovi.xml b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Weapons_Gruppa_Krovi.xml new file mode 100644 index 0000000000..690b24dc2d --- /dev/null +++ b/ModPatches/RH2 Faction - Gruppa Krovi/Patches/Weapons_Gruppa_Krovi.xml @@ -0,0 +1,569 @@ + + + + + + + Defs/ThingDef[ + defName = "RNGun_PKP_GPMG" or + defName = "RNGun_GSHG762_RotaryCannon" or + defName = "RNGun_AK12_Rifle" or + defName = "RNGun_AK105_Rifle" or + defName = "RNGun_AK74Contractor_Rifle" or + defName = "RNGun_ASVALContractor_Rifle" or + defName = "RNGun_DragunovSVDS_DMR" or + defName = "RNGun_KSVK_AMR" + ]/tools + + + +
  • + + +
  • Blunt
  • + + 8 + 1.55 + 1.5 + 2.755 + Stock + +
  • + + +
  • Blunt
  • + + 5 + 2.02 + 1.630 + Barrel + +
  • + + +
  • Poke
  • + + 8 + 1.55 + 2.755 + Muzzle + +
    +
    +
    + + + + + Defs/ThingDef[defName="RNGun_RPG7V2_RocketLauncher"]/tools + + +
  • + + +
  • Blunt
  • + + 10 + 2.44 + 3.5 + Barrel + +
    +
    +
    + + + RNGun_RPG7V2_RocketLauncher + + 25500 + 10.50 + 1.68 + 0.2 + 2.16 + 1.5 + + + 70 + 4 + + + CombatExtended.Verb_ShootCE + True + Bullet_RPG7Grenade_HEAT + 2.035 + 5 + 40 + RNShotLauncher + GunTail_Heavy + 14 + + true + + true + + + 1 + 5.6 + AmmoSet_RPG7Grenade + + + AimedShot + FALSE + + +
  • GunHeavy
  • +
  • CE_AI_AOE
  • +
  • RN_RPG7v2
  • +
    +
    + + + + RNGun_PKP_GPMG + + 32000 + 8.70 + 14.00 + 1.45 + 0.04 + 1.1 + 0.56 + + + 90 + 6 + + + 1.39 + CombatExtended.Verb_ShootCE + True + Bullet_762x54mmR_FMJ + 10 + 6 + 1.3 + 112 + RNShotDP28LMG + GunTail_Medium + 9 + + + 100 + 4.9 + AmmoSet_762x54mmR + + + SuppressFire + False + 5 + + +
  • IndustrialGunAdvanced
  • +
  • CE_MachineGun
  • +
  • Bipod_SAW
  • +
  • RN_GruppaKrovi_MG
  • +
  • RNGun_PKP
  • +
    + + PrecisionRifling +
    + + + + RNGun_GSHG762_RotaryCannon + + 40000 + 19.00 + 10.00 + 2.70 + 0.05 + 1 + 0.35 + + + 115 + 6 + + + 0.92 + CombatExtended.Verb_ShootCE + True + Bullet_762x54mmR_FMJ + 50 + 1 + 2.1 + 86 + RNShotGShG + GunTail_Medium + 9 + + + 200 + 7.8 + AmmoSet_762x54mmR + + + SuppressFire + False + 25 + + +
  • CE_MachineGun
  • +
  • RNGun_GShG_GattlingGun
  • +
    + MicroelectronicsBasics +
    + + + Defs/ThingDef[defName="RNGun_GSHG762_RotaryCannon"]/equippedStatOffsets/MoveSpeed + + + + + RNGun_AK12_Rifle + + 33500 + 3.5 + 6.88 + 1.27 + 0.09 + 1.1 + 0.36 + + + 40 + 6 + 10 + + + 1.35 + CombatExtended.Verb_ShootCE + True + Bullet_545x39mmSoviet_FMJ + 6 + 5 + 1.0 + 51 + RNShot_AK12AR + GunTail_Medium + 9 + + + 30 + 4 + AmmoSet_545x39mmSoviet + + + AimedShot + True + 3 + + +
  • RN_GruppaKrovi_BasicRifles
  • +
  • RN_AK12
  • +
    + PrecisionRifling +
    + + + + RNGun_AK105_Rifle + + 32000 + 3.2 + 5.86 + 1.14 + 0.11 + 1.1 + 0.36 + + + 40 + 6 + 5 + + + 1.37 + CombatExtended.Verb_ShootCE + True + Bullet_545x39mmSoviet_FMJ + 6 + 6 + 0.8 + 40 + RNShot_AN94 + GunTail_Medium + 9 + + + 30 + 4 + AmmoSet_545x39mmSoviet + + + AimedShot + True + 3 + + +
  • RN_GruppaKrovi_AdvancedRifles
  • +
  • RN_AK105_Contractor
  • +
    + PrecisionRifling +
    + + + + RNGun_AK74Contractor_Rifle + + 32000 + 3.07 + 6.90 + 1.25 + 0.09 + 2.0 + 0.36 + + + 50 + 6 + 5 + + + 1.44 + CombatExtended.Verb_ShootCE + True + Bullet_545x39mmSoviet_FMJ + 6 + 6 + 1.1 + 55 + RNShotAK74USMG + GunTail_Medium + 9 + + + 30 + 4 + AmmoSet_545x39mmSoviet + + + AimedShot + True + 3 + + +
  • RN_GruppaKrovi_IntermediateRifles
  • +
  • RN_AK74_Contractor
  • +
    + PrecisionRifling +
    + + + + RNGun_ASVALContractor_Rifle + + 32000 + 2.50 + 6.15 + 1.13 + 0.14 + 1.1 + 0.36 + + + 40 + 6 + 5 + + + 1.57 + CombatExtended.Verb_ShootCE + True + Bullet_9x39mmSoviet_FMJ + 6 + 5 + 1.0 + 40 + RNShotASVAL + GunTail_Heavy + 9 + + + 30 + 4 + AmmoSet_9x39mmSoviet + + + AimedShot + True + 3 + + +
  • RN_GruppaKrovi_IntermediateRifles
  • +
  • RN_ASVAL_Contractor
  • +
    + PrecisionRifling +
    + + + + RNGun_DragunovSVDS_DMR + + 32000 + 4.68 + 8.75 + 1.60 + 0.05 + 2.0 + 0.37 + + + 40 + 6 + 5 + + + 1.84 + CombatExtended.Verb_ShootCE + True + Bullet_762x54mmR_FMJ + 1 + 5 + 1.1 + 75 + RNShotDragunov + GunTail_Heavy + 9 + + + 10 + 4 + AmmoSet_762x54mmR + + + AimedShot + False + + +
  • RN_GruppaKrovi_Marksman
  • +
  • RN_SVDS
  • +
    + PrecisionRifling +
    + + + + RNGun_KSVK_AMR + + 28000 + 12.00 + 15.20 + 1.13 + 0.01 + 2.0 + 0.61 + + + 95 + 4 + 10 + + + 3.46 + CombatExtended.Verb_ShootCE + True + Bullet_127x108mm_FMJ + 1 + 5 + 2.8 + 112 + RNTac50Shot + GunTail_Heavy + 9 + + + 5 + 4 + AmmoSet_127x108mm + + + AimedShot + False + + +
  • RN_GruppaKrovi_Marksman
  • +
  • RN_KSVK
  • +
  • Bipod_AMR
  • +
    + PrecisionRifling +
    + + + + + + Defs/ThingDef[defName="RH2_DragonVodka"]/statBases + + 1.5 + 0.33 + + + + + Defs/ThingDef[defName="RH2_DragonVodka"]/tools + + +
  • + +
  • Blunt
  • + + 2 + 2.22 + 1.33 + 0.338 + Base + +
  • + + +
  • Poke
  • + + 1 + 3.33 + 0.150 + Neck + +
    +
    +
    + + + Defs/ThingDef[defName="RH2_DragonVodka"] + + + 0.1 + 0.33 + 0.07 + + + + + + Defs/ThingDef[defName="RH_RedWine"]/weaponTags + + Defs/ThingDef[defName="RH2_DragonVodka"]/weaponTags + +
  • CE_OneHandedWeapon
  • +
    +
    + + Defs/ThingDef[defName="RH2_DragonVodka"] + + +
  • CE_OneHandedWeapon
  • +
    +
    +
    +
    + +
    \ No newline at end of file diff --git a/ModPatches/Vanilla Races Expanded - Lycanthrope/Patches/Vanilla Races Expanded - Lycanthrope/GeneDefs_Health.xml b/ModPatches/Vanilla Races Expanded - Lycanthrope/Patches/Vanilla Races Expanded - Lycanthrope/GeneDefs_Health.xml new file mode 100644 index 0000000000..55dcd7fbee --- /dev/null +++ b/ModPatches/Vanilla Races Expanded - Lycanthrope/Patches/Vanilla Races Expanded - Lycanthrope/GeneDefs_Health.xml @@ -0,0 +1,13 @@ + + + + + Defs/GeneDef[defName="VRE_SuperiorDarkVision"] + + + 0.9 + + + + + \ No newline at end of file diff --git a/ModPatches/Vanilla Races Expanded - Lycanthrope/Patches/Vanilla Races Expanded - Lycanthrope/Hediffs_Health.xml b/ModPatches/Vanilla Races Expanded - Lycanthrope/Patches/Vanilla Races Expanded - Lycanthrope/Hediffs_Health.xml new file mode 100644 index 0000000000..90e2e98b1f --- /dev/null +++ b/ModPatches/Vanilla Races Expanded - Lycanthrope/Patches/Vanilla Races Expanded - Lycanthrope/Hediffs_Health.xml @@ -0,0 +1,74 @@ + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[1]/statOffsets + + -0.10 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[2]/statOffsets + + -0.20 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[3]/statOffsets + + -0.30 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[4]/statOffsets + + -0.40 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[5]/statOffsets + + -0.50 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[6]/statOffsets + + -0.60 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[7]/statOffsets + + -0.70 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[8]/statOffsets + + -0.80 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[9]/statOffsets + + -0.90 + + + + + Defs/HediffDef[defName="VRE_WarHowlHediff"]/stages/li[10]/statOffsets + + -1 + + + + \ No newline at end of file diff --git a/Patches/Core/ThingDefs_Misc/Weapons_Grenades.xml b/Patches/Core/ThingDefs_Misc/Weapons_Grenades.xml index a36fb35d53..140fcbc614 100644 --- a/Patches/Core/ThingDefs_Misc/Weapons_Grenades.xml +++ b/Patches/Core/ThingDefs_Misc/Weapons_Grenades.xml @@ -148,12 +148,19 @@ + + Defs/ThingDef[defName="Weapon_GrenadeFrag"]/smeltable + + false + + + Defs/ThingDef[defName="Weapon_GrenadeFrag"] CombatExtended.AmmoThing 75 - First + First @@ -405,7 +412,7 @@ CombatExtended.AmmoThing 75 - First + First diff --git a/Source/BetterTurretsCompat/BetterTurretsCompat.csproj b/Source/BetterTurretsCompat/BetterTurretsCompat.csproj index b37cab8275..21bb270f34 100644 --- a/Source/BetterTurretsCompat/BetterTurretsCompat.csproj +++ b/Source/BetterTurretsCompat/BetterTurretsCompat.csproj @@ -12,7 +12,7 @@ false - ..\..\AssembliesCompat\ + ..\..\ModPatches\BetterTurrets\Assemblies\ portable true true @@ -20,7 +20,7 @@ true - ..\..\AssembliesCompat\ + ..\..\ModPatches\BetterTurrets\Assemblies\ true none false @@ -34,12 +34,6 @@ - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - False diff --git a/Source/CombatExtended/CombatExtended.csproj b/Source/CombatExtended/CombatExtended.csproj index 06d24c20c2..a64042ec2f 100644 --- a/Source/CombatExtended/CombatExtended.csproj +++ b/Source/CombatExtended/CombatExtended.csproj @@ -69,12 +69,6 @@ - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - ..\packages\Rimatomics-reference.dll diff --git a/Source/CombatExtended/CombatExtended/Controller.cs b/Source/CombatExtended/CombatExtended/Controller.cs index 797207f934..ab2295ccef 100644 --- a/Source/CombatExtended/CombatExtended/Controller.cs +++ b/Source/CombatExtended/CombatExtended/Controller.cs @@ -5,43 +5,95 @@ using RimWorld; using Verse; using UnityEngine; +using System.Reflection; +using System.IO; using CombatExtended.HarmonyCE; using CombatExtended.Compatibility; using CombatExtended.Loader; namespace CombatExtended { - public class Controller : IModPart + /* + This class handles initializing the different components of CombatExtended. The LoadFolders + system is responsible for loading the assemblies, this gives an opportunity to run any + post-load sanity checking, and is responsible for rendering any sub-mod settings as required. + */ + public class Controller : Mod { + public static List settingList = new List(); public static Settings settings; - public static Controller instant; + public static Controller instance; public static ModContentPack content; private static Patches patches; + private Vector2 scrollPosition; - public Type GetSettingsType() + public override void DoSettingsWindowContents(Rect inRect) { - return typeof(Settings); + Rect inner = inRect.ContractedBy(20f); + inner.height = 800f; + inner.x += 10f; + Widgets.BeginScrollView(inRect, ref this.scrollPosition, inner, true); + Listing_Standard list = new Listing_Standard(); + list.ColumnWidth = (inner.width - 17) / 2; // Subtract 17 for gap between columns + list.Begin(inner); + + foreach (ISettingsCE settings in settingList) + { + settings.DoWindowContents(list); + } + list.End(); + Widgets.EndScrollView(); } - public Controller() + public Controller(ModContentPack content) : base(content) { patches = new Patches(); + Controller.instance = this; + Controller.content = content; + Controller.settings = GetSettings(); + settingList.Add(Controller.settings); + PostLoad(); } - public IEnumerable GetCompatList() - { - return patches.GetCompatList(); - } - - public void PostLoad(ModContentPack content, ISettingsCE settings) + public void PostLoad() { - Controller.instant = this; - Controller.content = content; - Controller.settings = (Settings)settings; - // Apply Harmony patches HarmonyBase.InitPatches(); + Queue toProcess = new Queue(content.assemblies.loadedAssemblies); + List modParts = new List(); + while (toProcess.Any()) + { + Assembly assembly = toProcess.Dequeue(); + + foreach (Type t in assembly.GetTypes().Where(x => typeof(IModPart).IsAssignableFrom(x) && !x.IsAbstract)) + { + IModPart imp = ((IModPart)t.GetConstructor(new Type[] { }).Invoke(new object[] { })); + modParts.Add(imp); + } + } + foreach (IModPart modPart in modParts) + { + Log.Message("CE: Loading Mod Part"); + Type settingsType = modPart.GetSettingsType(); + ISettingsCE settings = null; + if (settingsType != null) + { + if (typeof(ModSettings).IsAssignableFrom(settingsType)) + { + settings = (ISettingsCE)typeof(Controller).GetMethod(nameof(Controller.GetSettings)).MakeGenericMethod(settingsType).Invoke(instance, null); + } + else + { + settings = (ISettingsCE)settingsType.GetConstructor(new Type[] { }).Invoke(new object[] { }); + } + settingList.Add(settings); + } + + modPart.PostLoad(content, settings); + + } + // Initialize loadout generator LongEventHandler.QueueLongEvent(LoadoutPropertiesExtension.Reset, "CE_LongEvent_LoadoutProperties", false, null); @@ -66,6 +118,11 @@ public void PostLoad(ModContentPack content, ISettingsCE settings) } + public override string SettingsCategory() + { + return "Combat Extended"; + } + private static void DoTutorialPopup() { var enableAction = new Action(() => diff --git a/Source/CombatExtended/Compatibility/BetterTurrets.cs b/Source/CombatExtended/Compatibility/BetterTurrets.cs index f21073d1e0..dc4fee1210 100644 --- a/Source/CombatExtended/Compatibility/BetterTurrets.cs +++ b/Source/CombatExtended/Compatibility/BetterTurrets.cs @@ -21,12 +21,5 @@ public void Install() { Log.Message("Combat Extended :: Installing Better Turrets"); } - public IEnumerable GetCompatList() - { - yield return "BetterTurretsCompat"; - } - - - } } diff --git a/Source/CombatExtended/Compatibility/EDShields.cs b/Source/CombatExtended/Compatibility/EDShields.cs index c317515e2d..7eba51dc33 100644 --- a/Source/CombatExtended/Compatibility/EDShields.cs +++ b/Source/CombatExtended/Compatibility/EDShields.cs @@ -40,11 +40,6 @@ public void Install() HitSoundDef = (SoundDef)t.GetField("HitSoundDef", BindingFlags.Static | BindingFlags.Public).GetValue(null); } - - public IEnumerable GetCompatList() - { - yield break; - } public static bool CheckForCollisionBetweenCallback(ProjectileCE projectile, Vector3 from, Vector3 to) { /* Check if an active shield can block this projectile diff --git a/Source/CombatExtended/Compatibility/IPatch.cs b/Source/CombatExtended/Compatibility/IPatch.cs index 9fc08acc3a..f2d06220ce 100644 --- a/Source/CombatExtended/Compatibility/IPatch.cs +++ b/Source/CombatExtended/Compatibility/IPatch.cs @@ -5,6 +5,5 @@ public interface IPatch { public bool CanInstall(); public void Install(); - public IEnumerable GetCompatList(); } } diff --git a/Source/CombatExtended/Compatibility/MiscTurrets.cs b/Source/CombatExtended/Compatibility/MiscTurrets.cs index cfa9743afd..a2f1afb484 100644 --- a/Source/CombatExtended/Compatibility/MiscTurrets.cs +++ b/Source/CombatExtended/Compatibility/MiscTurrets.cs @@ -21,13 +21,5 @@ public void Install() { Log.Message("Combat Extended :: Installing Misc Turrets"); } - - public IEnumerable GetCompatList() - { - yield return "MiscTurretsCompat"; - } - - - } } diff --git a/Source/CombatExtended/Compatibility/Multiplayer.cs b/Source/CombatExtended/Compatibility/Multiplayer.cs index c4d4c05e7f..ad8ae5ce9b 100644 --- a/Source/CombatExtended/Compatibility/Multiplayer.cs +++ b/Source/CombatExtended/Compatibility/Multiplayer.cs @@ -23,11 +23,6 @@ public void Install() isMultiplayerActive = true; } - public IEnumerable GetCompatList() - { - yield return "MultiplayerCompat"; - } - public static bool InMultiplayer { get diff --git a/Source/CombatExtended/Compatibility/Patches.cs b/Source/CombatExtended/Compatibility/Patches.cs index db520ac3a6..58cf23acbb 100644 --- a/Source/CombatExtended/Compatibility/Patches.cs +++ b/Source/CombatExtended/Compatibility/Patches.cs @@ -82,20 +82,6 @@ public static IEnumerable GetUsedAmmo() } } - public IEnumerable GetCompatList() - { - foreach (IPatch patch in patches) - { - if (patch.CanInstall()) - { - foreach (string s in patch.GetCompatList()) - { - yield return s; - } - } - } - } - private static bool _gcbfactive = false; public static void RegisterCollisionBodyFactorCallback(Func> f) diff --git a/Source/CombatExtended/Compatibility/ProjectRimFactory.cs b/Source/CombatExtended/Compatibility/ProjectRimFactory.cs index 110922d2e0..42e4d5c064 100644 --- a/Source/CombatExtended/Compatibility/ProjectRimFactory.cs +++ b/Source/CombatExtended/Compatibility/ProjectRimFactory.cs @@ -16,11 +16,6 @@ public void Install() { Building_FuelingMachine.RegisterRefuelable(typeof(Building_TurretGunCE), FindCompAmmoUser, TestAmmo, ReloadAction); } - public IEnumerable GetCompatList() - { - yield break; - } - private static int TestAmmo(object compObject, Thing ammo) { var comp = compObject as CompAmmoUser; diff --git a/Source/CombatExtended/Compatibility/Rimatomics.cs b/Source/CombatExtended/Compatibility/Rimatomics.cs index d894714815..41b688629e 100644 --- a/Source/CombatExtended/Compatibility/Rimatomics.cs +++ b/Source/CombatExtended/Compatibility/Rimatomics.cs @@ -35,11 +35,6 @@ public void Install() BlockerRegistry.RegisterShieldZonesCallback(Rimatomics.ShieldZonesCallback); } - public IEnumerable GetCompatList() - { - yield break; - } - public static bool CheckForCollisionBetweenCallback(ProjectileCE projectile, Vector3 from, Vector3 to) { Map map = projectile.Map; diff --git a/Source/CombatExtended/Compatibility/SOS2.cs b/Source/CombatExtended/Compatibility/SOS2.cs index f61ebd4c6b..82a334d212 100644 --- a/Source/CombatExtended/Compatibility/SOS2.cs +++ b/Source/CombatExtended/Compatibility/SOS2.cs @@ -20,10 +20,5 @@ public void Install() { Log.Message("Combat Extended :: Installing SOS2"); } - - public IEnumerable GetCompatList() - { - yield return "SOS2Compat"; - } } } diff --git a/Source/CombatExtended/Compatibility/SRTS.cs b/Source/CombatExtended/Compatibility/SRTS.cs index 065e2239bd..ae593dff6a 100644 --- a/Source/CombatExtended/Compatibility/SRTS.cs +++ b/Source/CombatExtended/Compatibility/SRTS.cs @@ -22,11 +22,6 @@ public bool CanInstall() } return true; } - public IEnumerable GetCompatList() - { - yield return "SRTSCompat"; - } - public void Install() { Log.Message("Combat Extended :: Installing SRTS Expanded"); diff --git a/Source/CombatExtended/Compatibility/VanillaExpandedFramework.cs b/Source/CombatExtended/Compatibility/VanillaExpandedFramework.cs index a3d939db83..e6cc8b18c9 100644 --- a/Source/CombatExtended/Compatibility/VanillaExpandedFramework.cs +++ b/Source/CombatExtended/Compatibility/VanillaExpandedFramework.cs @@ -18,11 +18,6 @@ bool IPatch.CanInstall() return ModLister.HasActiveModWithName(ModName); } - IEnumerable IPatch.GetCompatList() - { - yield break; - } - void IPatch.Install() { BlockerRegistry.RegisterCheckForCollisionCallback(CheckIntercept); diff --git a/Source/CombatExtended/Compatibility/VanillaFurnitureExpandedSecurity.cs b/Source/CombatExtended/Compatibility/VanillaFurnitureExpandedSecurity.cs index 3852571d47..41d6bdd24a 100644 --- a/Source/CombatExtended/Compatibility/VanillaFurnitureExpandedSecurity.cs +++ b/Source/CombatExtended/Compatibility/VanillaFurnitureExpandedSecurity.cs @@ -44,11 +44,6 @@ public void Install() BlockerRegistry.RegisterImpactSomethingCallback(ImpactSomething); } - public IEnumerable GetCompatList() - { - yield break; - } - private static bool CheckCollision(ProjectileCE projectile, IntVec3 cell, Thing launcher) { if (projectile.def.projectile.flyOverhead) diff --git a/Source/CombatExtended/Compatibility/VanillaPsycastExpanded.cs b/Source/CombatExtended/Compatibility/VanillaPsycastExpanded.cs index e0ff231ef2..e041a9ff69 100644 --- a/Source/CombatExtended/Compatibility/VanillaPsycastExpanded.cs +++ b/Source/CombatExtended/Compatibility/VanillaPsycastExpanded.cs @@ -20,10 +20,6 @@ public bool CanInstall() return ModLister.HasActiveModWithName(ModName); } - public IEnumerable GetCompatList() - { - yield break; - } public void Install() { diff --git a/Source/CombatExtended/Compatibility/Vehicles.cs b/Source/CombatExtended/Compatibility/Vehicles.cs index 59efb1b7ff..9330f8a77d 100644 --- a/Source/CombatExtended/Compatibility/Vehicles.cs +++ b/Source/CombatExtended/Compatibility/Vehicles.cs @@ -23,11 +23,6 @@ public bool CanInstall() } return true; } - public IEnumerable GetCompatList() - { - yield return "VehiclesCompat"; - } - public void Install() { diff --git a/Source/Loader/Loader/IModPart.cs b/Source/CombatExtended/Loader/IModPart.cs similarity index 85% rename from Source/Loader/Loader/IModPart.cs rename to Source/CombatExtended/Loader/IModPart.cs index f35497645a..8e8f45580e 100644 --- a/Source/Loader/Loader/IModPart.cs +++ b/Source/CombatExtended/Loader/IModPart.cs @@ -10,6 +10,5 @@ public interface IModPart { public void PostLoad(ModContentPack content, ISettingsCE settings); public Type GetSettingsType(); - public IEnumerable GetCompatList(); } } diff --git a/Source/Loader/Loader/ISettingsCE.cs b/Source/CombatExtended/Loader/ISettingsCE.cs similarity index 100% rename from Source/Loader/Loader/ISettingsCE.cs rename to Source/CombatExtended/Loader/ISettingsCE.cs diff --git a/Source/Loader/Loader.csproj b/Source/Loader/Loader.csproj index 5fe09601d5..0d1bf4fd3f 100644 --- a/Source/Loader/Loader.csproj +++ b/Source/Loader/Loader.csproj @@ -2,7 +2,7 @@ net472 - 0CombatExtendedLoader + CombatExtendedLoader 1.1.2.0 1.1.2.0 1.1.2 diff --git a/Source/Loader/Loader/Loader.cs b/Source/Loader/Loader/Loader.cs index e9a088a2c5..f9fada4428 100644 --- a/Source/Loader/Loader/Loader.cs +++ b/Source/Loader/Loader/Loader.cs @@ -10,163 +10,28 @@ namespace CombatExtended.Loader { - public class Loader : Mod + /* + A compiled version of this class resides in our source tree. Anyone who downloads the + source tree and installs it uncompiled as a mod will get a warning that they are running + uncompiled. During the packaging process this file is removed. If CombatExtended.dll + exists in the Assemblies directory, we can assume we are running a local build and omit + the warning. + + */ + public class UncompiledWarning : Mod { - /* - This class handles loading and initializing the different components of CombatExtended. - If the main CombatExtended.dll is unavailable, it will load an outdated one which is - sufficient to allow the game to reach the main menu. It will then display a warning to - the user that they are running the uncompiled git sources rather than a real CombatExtend - release. - - DLLs in the main CombatExtended/Assemblies directory are automatically loaded before any - code here is run. - - DLLs in CombatExtended/AssembliesCore are loaded by Loader's constructor. - - After all core CombatExtended assemblies are loaded, all classes implementing - `CombatExtended.Loader.IModPart` are instantiated, and their list of required Compat modules - is queried. These compat modules are loaded (and *their* Compat list is queried) until all - required modules are loaded. - - Then each IModPart's PostLoad method is called, with an ISettingsCE if desired (or null). - */ - public static List settingList = new List(); - private static Loader instance = null; - private Vector2 scrollPosition; - - private ModContentPack content; - - private Assembly _loadCompatAssembly(string name) - { - DirectoryInfo locationInfo = new DirectoryInfo(content.RootDir).GetDirectories("AssembliesCompat").FirstOrFallback(null); - if (locationInfo == null) - { - Log.Error("Combat Extended :: Cannot find compat assembly directory"); - } - FileInfo file = locationInfo.GetFiles(name + ".dll").FirstOrFallback(null); - if (file == null) - { - Log.Error("Combat Extended :: Cannot find compat assembly for " + name); - } - return _loadAssembly(file); - } - - private Assembly _loadAssembly(FileInfo file) - { - Log.Message("Combat Extended :: Loading " + file.FullName); - byte[] rawAssembly = File.ReadAllBytes(file.FullName); - - Assembly assembly; - - FileInfo pdbFile = new FileInfo(Path.Combine(file.DirectoryName, Path.GetFileNameWithoutExtension(file.FullName)) + ".pdb"); - if (pdbFile.Exists) - { - assembly = AppDomain.CurrentDomain.Load(rawAssembly, File.ReadAllBytes(pdbFile.FullName)); - } - else - { - assembly = AppDomain.CurrentDomain.Load(rawAssembly); - } - if (assembly != null) - { - content.assemblies.loadedAssemblies.Add(assembly); - } - - return assembly; - } - - public Loader(ModContentPack content) : base(content) + public UncompiledWarning(ModContentPack content) : base(content) { - Loader.instance = this; - this.content = content; - bool found = false; - Dictionary assemblies = new Dictionary(); - foreach (Assembly assembly in content.assemblies.loadedAssemblies) { string name = assembly.GetName().Name; - assemblies[name] = assembly; if (name == "CombatExtended") { - found = true; + return; } } - - - DirectoryInfo locationInfo = new DirectoryInfo(content.RootDir).GetDirectories("AssembliesCore").FirstOrFallback(null); - if (locationInfo != null) - { - foreach (FileInfo fileInfo in locationInfo.GetFiles()) - { - if (fileInfo.Name.EndsWith(".dll")) - { - Assembly assembly = _loadAssembly(fileInfo); - assemblies[assembly.GetName().Name] = assembly; - } - } - } - - Queue toProcess = new Queue(content.assemblies.loadedAssemblies); - List modParts = new List(); - HashSet compatParts = new HashSet(); - - while (toProcess.Any()) - { - Assembly assembly = toProcess.Dequeue(); - - foreach (Type t in assembly.GetTypes().Where(x => typeof(IModPart).IsAssignableFrom(x) && !x.IsAbstract)) - { - IModPart imp = ((IModPart)t.GetConstructor(new Type[] { }).Invoke(new object[] { })); - modParts.Add(imp); - foreach (string compatPart in imp.GetCompatList()) - { - if (!compatParts.Contains(compatPart)) - { - compatParts.Add(compatPart); - Assembly compatAssembly = _loadCompatAssembly(compatPart); - toProcess.Enqueue(compatAssembly); - } - } - } - - } - - - foreach (IModPart modPart in modParts) - { - Type settingsType = modPart.GetSettingsType(); - ISettingsCE settings = null; - if (settingsType != null) - { - if (typeof(ModSettings).IsAssignableFrom(settingsType)) - { - settings = (ISettingsCE)typeof(Loader).GetMethod(nameof(Loader.GetSettings)).MakeGenericMethod(settingsType).Invoke(instance, null); - } - else - { - settings = (ISettingsCE)settingsType.GetConstructor(new Type[] { }).Invoke(new object[] { }); - } - settingList.Add(settings); - } - - modPart.PostLoad(content, settings); - - } - - - if (!found) - { - Log.Error("Combat Extended :: Running uncompiled"); - LongEventHandler.QueueLongEvent(ShowUncompiledBuildWarning, "CE_LongEvent_ShowUncompiledBuildWarning", false, null); - _loadAssembly(new DirectoryInfo(content.RootDir) - .GetDirectories("Source") - .FirstOrFallback(null)? - .GetDirectories("packages") - .FirstOrFallback(null)?.GetFiles("CombatExtended.dll") - .FirstOrFallback(null)); - } - + Log.Error("Combat Extended :: Running uncompiled"); + LongEventHandler.QueueLongEvent(ShowUncompiledBuildWarning, "CE_LongEvent_ShowUncompiledBuildWarning", false, null); } public override string SettingsCategory() @@ -174,25 +39,6 @@ public override string SettingsCategory() return "Combat Extended"; } - public override void DoSettingsWindowContents(Rect inRect) - { - Rect inner = inRect.ContractedBy(20f); - inner.height = 800f; - inner.x += 10f; - Widgets.BeginScrollView(inRect, ref this.scrollPosition, inner, true); - Listing_Standard list = new Listing_Standard(); - list.ColumnWidth = (inner.width - 17) / 2; // Subtract 17 for gap between columns - list.Begin(inner); - - foreach (ISettingsCE settings in settingList) - { - settings.DoWindowContents(list); - } - list.End(); - Widgets.EndScrollView(); - } - - //Unused method is only here for reference, the repository assembly uses it to warn users to get a compiled build. private static void ShowUncompiledBuildWarning() { Log.Error("You are running CE Uncompiled. See https://github.com/CombatExtended-Continued/CombatExtended#development-version for details"); diff --git a/Source/MiscTurretsCompat/MiscTurretsCompat.csproj b/Source/MiscTurretsCompat/MiscTurretsCompat.csproj index 12f309f64b..302cf63967 100644 --- a/Source/MiscTurretsCompat/MiscTurretsCompat.csproj +++ b/Source/MiscTurretsCompat/MiscTurretsCompat.csproj @@ -12,7 +12,7 @@ false - ..\..\AssembliesCompat\ + ..\..\ModPatches\MiscTurrets\Assemblies\ portable true true @@ -20,7 +20,7 @@ true - ..\..\AssembliesCompat\ + ..\..\ModPatches\MiscTurrets\Assemblies\ true none false @@ -39,12 +39,6 @@ False - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - ..\packages\WeaponBase-reference.dll diff --git a/Source/MultiplayerCompat/MultiplayerCompat.csproj b/Source/MultiplayerCompat/MultiplayerCompat.csproj index c32381cb51..f26cc82d97 100644 --- a/Source/MultiplayerCompat/MultiplayerCompat.csproj +++ b/Source/MultiplayerCompat/MultiplayerCompat.csproj @@ -12,7 +12,7 @@ false - ..\..\AssembliesCompat\ + ..\..\ModPatches\Multiplayer\Assemblies\ portable true true @@ -20,7 +20,7 @@ true - ..\..\AssembliesCompat\ + ..\..\ModPatches\Multiplayer\Assemblies\ true none false @@ -34,12 +34,6 @@ - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - False diff --git a/Source/SOS2Compat/SOS2Compat.csproj b/Source/SOS2Compat/SOS2Compat.csproj index 12ab57e780..42f86238ac 100644 --- a/Source/SOS2Compat/SOS2Compat.csproj +++ b/Source/SOS2Compat/SOS2Compat.csproj @@ -12,7 +12,7 @@ false - ..\..\AssembliesCompat\ + ..\..\ModPatches\Save Our Ship 2\Assemblies portable true true @@ -20,7 +20,7 @@ true - ..\..\AssembliesCompat\ + ..\..\ModPatches\Save Our Ship 2\Assemblies true none false @@ -35,12 +35,6 @@ False - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - ..\packages\ShipsHaveInsides-reference.dll diff --git a/Source/SRTSCompat/SRTSCompat.csproj b/Source/SRTSCompat/SRTSCompat.csproj index 5abb8ba699..f712c546bf 100644 --- a/Source/SRTSCompat/SRTSCompat.csproj +++ b/Source/SRTSCompat/SRTSCompat.csproj @@ -12,7 +12,7 @@ false - ..\..\AssembliesCompat\ + ..\..\ModPatches\SRTS\Assemblies\ portable true true @@ -20,7 +20,7 @@ true - ..\..\AssembliesCompat\ + ..\..\ModPatches\SRTS\Assemblies\ true none false @@ -39,12 +39,6 @@ False - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - ..\packages\SRTS-reference.dll diff --git a/Source/VehiclesCompat/VehiclesCompat.csproj b/Source/VehiclesCompat/VehiclesCompat.csproj index 79be0719b7..9145d8f0cf 100644 --- a/Source/VehiclesCompat/VehiclesCompat.csproj +++ b/Source/VehiclesCompat/VehiclesCompat.csproj @@ -12,7 +12,7 @@ false - ..\..\AssembliesCompat\ + ..\..\ModPatches\VehicleFramework\Assemblies\ portable true true @@ -20,7 +20,7 @@ true - ..\..\AssembliesCompat\ + ..\..\ModPatches\VehicleFramework\Assemblies\ true none false @@ -39,12 +39,6 @@ False - - - ..\..\Assemblies\0CombatExtendedLoader.dll - False - - ..\packages\Vehicles-reference.dll diff --git a/SupportedThirdPartyMods.md b/SupportedThirdPartyMods.md index af873d86e1..37d7db57df 100644 --- a/SupportedThirdPartyMods.md +++ b/SupportedThirdPartyMods.md @@ -40,6 +40,7 @@ Mod | [Pratt] WWII Weapons Pack (Vanilla) | [RH2] DOOM | [RH2] Faction: Bounty Hunters | +[RH2] Faction: Gruppa Krovi | [RH2] Faction: Task Force 141 | [RH2] Faction: The Rangers | [RH2] Faction: Utilitarian | @@ -536,6 +537,7 @@ Vanilla Races Expanded - Fungoid | Vanilla Races Expanded - Highmate | Vanilla Races Expanded - Hussar | Vanilla Races Expanded - Insector | +Vanilla Races Expanded - Lycanthrope | Vanilla Races Expanded - Phytokin | Vanilla Races Expanded - Sanguophage | Vanilla Races Expanded - Saurid |