diff --git a/.github/docs/scb.md b/.github/docs/scb.md new file mode 100644 index 000000000..607569c61 --- /dev/null +++ b/.github/docs/scb.md @@ -0,0 +1,68 @@ +![scb](https://thirteenag.github.io/screens/scb/main2.jpg) + +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to skip intro + +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to disable negative mouse acceleration + +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to enable ultrawide support + +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to change FOV + +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to change Screen Cull Bias, for better draw distance + +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to unlock DLC content that's unavailable after servers shut down + +![](https://habrastorage.org/webt/d_/eg/ym/d_egymd6w_tem2erocab-e9ikna.png) Added an option to unlock all missions from the start + +![](https://habrastorage.org/webt/d_/eg/ym/d_egymd6w_tem2erocab-e9ikna.png) Added an option to load packed files from disk + +![](https://habrastorage.org/webt/d_/eg/ym/d_egymd6w_tem2erocab-e9ikna.png) Added an option to enable [Logitech G LIGHTSYNC RGB Lighting](https://www.logitechg.com/innovation/lightsync-rgb.html) + +![](https://habrastorage.org/webt/d_/eg/ym/d_egymd6w_tem2erocab-e9ikna.png) Difficulty tweaks: **Mark and Execute** enabled on **Perfectionist**, unlimited ammo disabled on **Rookie**. To go back to original behavior, delete `update/difficultyconfiguration.ini` + +# Extraction Mode + +Plugin adds an ability to modify the number of enemies for the Extraction game mode with `ExtractionWaveEnemyMultiplier` option. + +New config for the Extraction game mode: Random, which randomizes the number and type of enemies in each wave using minimum and maximum values defined in the INI file. + +To load custom configs for the Extraction game mode, create a folder inside `Splinter Cell Blacklist\src\SYSTEM\update\Data\ExtractionWaveConfigs\`, copy all XMLs into it, then set the name of the new folder in `ExtractionWaveConfigs` option in the INI file. + +E.g.: + +``` +Splinter Cell Blacklist\src\SYSTEM\update\Data\ExtractionWaveConfigs\ +NewConfig\ + DefaultWaveConfig.xml + D_Amman.xml + D_Bratislava.xml + D_Kigali.xml + D_Sanaa.xml +``` + +``` +[EXTRACTION] +ExtractionWaveConfigs = NewConfig // Default | Random +ExtractionWaveEnemyMultiplier = 2 // Multiplies the number of enemies in each wave, with Random config, acts as a range [1;ExtractionWaveEnemyMultiplier] +``` + +# Hunter Mode + +Plugin adds an ability to modify the number of reinforcements for the Hunter game mode with `ReinforcementsEnemyMultiplier` option. + +New config for the Hunter game mode: Random, which randomizes the total number of reinforcements between minimum and maximum values defined in the INI file. + +# Ghost Mode + +Plugin adds an ability to disable mission failure on detection in Ghost mode. + +# Ultrawide Screenshot + +![scb](https://github.com/user-attachments/assets/96d6a1e7-457e-4ae4-a2f6-88cc9a632c80) + + Installation: + Download and extract the archive to the game directory, where the exe is located. + +[Website](https://thirteenag.github.io/wfp#scb) | [Source](https://github.com/ThirteenAG/WidescreenFixesPack/blob/master/source/SplinterCellBlacklist.FusionMod/dllmain.cpp) | [Default INI File](https://github.com/ThirteenAG/WidescreenFixesPack/blob/master/data/SplinterCellBlacklist.FusionMod/src/system/scripts/SplinterCellBlacklist.FusionMod.ini) + +



\ No newline at end of file diff --git a/.github/docs/scc.md b/.github/docs/scc.md index c6362fa05..edc95e9b2 100644 --- a/.github/docs/scc.md +++ b/.github/docs/scc.md @@ -12,6 +12,8 @@ ![](https://habrastorage.org/webt/d_/eg/ym/d_egymd6w_tem2erocab-e9ikna.png) Added an option to disable character lighting +![](https://habrastorage.org/webt/ow/yy/mg/owyymgpibfqzfbwyf_iqoiqrede.png) Added an option to enable [Logitech G LIGHTSYNC RGB Lighting](https://www.logitechg.com/innovation/lightsync-rgb.html) + https://user-images.githubusercontent.com/4904157/192846910-6ddfb3fb-3089-4553-ba94-b8d031855fc7.mp4 Installation: diff --git a/.github/workflows/all.yml b/.github/workflows/all.yml index 125ab85f0..71f9c12be 100644 --- a/.github/workflows/all.yml +++ b/.github/workflows/all.yml @@ -678,6 +678,14 @@ jobs: tag: scc artifacts: data/Archives/SplinterCellConviction.FusionMod.zip + - name: Splinter Cell Blacklist Fusion Mod + uses: ./.github/workflows/release_tag + with: + token: ${{ secrets.GITHUB_TOKEN }} + tag_list: ${{ format('{0},{1}', github.event.inputs.tag_list, inputs.tag_list) }} + tag: scb + artifacts: data/Archives/SplinterCellBlacklist.FusionMod.zip + - name: Splinter Cell Pandora Tomorrow Widescreen Fix uses: ./.github/workflows/release_tag with: diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml index 4e383d97d..e3ee45c7a 100644 --- a/.github/workflows/tag.yml +++ b/.github/workflows/tag.yml @@ -70,6 +70,7 @@ on: - sc - scarface - scc + - scb - scct - scda - scdaps2 @@ -164,6 +165,7 @@ env: sc: "/t:Win32\\SplinterCell\\SplinterCell_WidescreenFix" scarface: "/t:Win32\\Scarface_FusionFix" scc: "/t:Win32\\SplinterCell\\SplinterCellConviction_FusionMod" + scb: "/t:Win32\\SplinterCell\\SplinterCellBlacklist_FusionMod" scct: "/t:Win32\\SplinterCell\\SplinterCellChaosTheory_WidescreenFix" scda: "/t:Win32\\SplinterCell\\SplinterCellDoubleAgent_WidescreenFix" scdaps2: "/t:PCSX2F\\SplinterCellDoubleAgent_PCSX2F_WidescreenFix" diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/scripts/SplinterCellBlacklist.FusionMod.ini b/data/SplinterCellBlacklist.FusionMod/src/system/scripts/SplinterCellBlacklist.FusionMod.ini new file mode 100644 index 000000000..91f47eb8f --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/scripts/SplinterCellBlacklist.FusionMod.ini @@ -0,0 +1,32 @@ +[MAIN] +SkipIntro = 1 +DisableNegativeMouseAcceleration = 1 +UltraWideSupport = 1 // Damage overlay and fading will be disabled in ultrawide +FOVFactor = 1.0 // [0.5, 2.5] +ScreenCullBias = 0.0 // 0.0 achieves the best draw distance, game default value is 1.0, but it makes distant objects disappear + +[UNLOCKS] +UnlockDLC = 1 // Unlocks all DLC content that is not possible to obtain after server shutdown +UnlockAllNonCampaignMissions = 1 // Unlocks all 4th Echelon missions from the start +UnlockAllCampaignMissions = 0 // Unlocks all campaign missions from the start + +[EXTRACTION] // Charlie Missions +ExtractionWaveConfigs = Default // Default | Random +ExtractionWaveEnemyMultiplier = 1 // Multiplies the number of enemies in each wave with the Default config +ExtractionWaveEnemyRandomRangeMin = 0 // With the Random config, each enemy defined in the XML will have its quantity multiplied by +ExtractionWaveEnemyRandomRangeMax = 4 // a random number between Min and Max for each spawn + +[HUNTER] // Kobin Missions +ReinforcementsNumber = Default // Default | Random +ReinforcementsEnemyMultiplier = 1 // Multiplies the number of reinforcements with the Default config +ReinforcementsEnemyRandomRangeMin = 1 // With the Random config, specifies the total number of +ReinforcementsEnemyRandomRangeMax = 100 // reinforcements between Min and Max + +[GHOST] // Grim Missions +DisableMissionFailOnDetection = 1 // If set to 1, the mission will not fail when the player is detected + +[LOGITECH] +LightSyncRGB = 1 // Mouse and keyboard will have selected suit indicators color. Only Logitech hardware is supported, requires Logitech G HUB app + +[STARTUP] // https://github.com/unixoide/5th-echelon +DedicatedServerExePath = \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Amman.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Amman.xml new file mode 100644 index 000000000..d99e6d945 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Amman.xml @@ -0,0 +1,1805 @@ + + + + + + + AI_Dog + AI_Coop_Pistol_Makarov + AI_Coop_Pistol_F40 + + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + AI_Coop_Shotgun + + AI_Coop_Rifle_AK47 + AI_Coop_Rifle_AKS74U + AI_Coop_Rifle_Goblin + + AI_Coop_ShieldedHeavy + AI_Coop_Heavy + AI_Coop_Tech + + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + + AI_Coop_Helmet_Tactical_Pistol_Makarov + AI_Coop_Helmet_Tactical_Pistol_F40 + AI_Coop_Helmet_Tactical_Rifle_AK47 + AI_Coop_Helmet_Tactical_Rifle_AKS74U + AI_Coop_Helmet_Tactical_Rifle_Goblin + + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + + AI_Coop_Helmet_Tactical_SMG_MAC11 + AI_Coop_Helmet_Tactical_SMG_PP2000 + AI_Coop_Helmet_Tactical_SMG_Scorpion + AI_Coop_Helmet_Tactical_Shotgun + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 5 + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 2 + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 10 + + + + + + + 4 + + + + + + + + 8 + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 2 + + + + + + + 5 + + + + + + + + 9 + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + 3 + + + + + + + + 6 + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 2 + + + + + + + + 6 + + + + + + + + 9 + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 20 + + + + + + + 4 + + + + + + + 6 + + + + + + + 8 + + + + + + + + 12 + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + 20 + + + + + + + 2 + + + + + + + + 4 + + + + + + + 8 + + + + + + + + 10 + + + + + + + + 12 + + + + + + + 16 + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 3 + + + + + + + 7 + + + + + + + + 9 + + + + + + + + 12 + + + + + + + 17 + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + + 3 + + + + + + + + 7 + + + + + + + + 10 + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + 2 + + + + + + + 5 + + + + + + + + 9 + + + + + + + + + 13 + + + + + + + + 18 + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + 5 + + + + + + + + 10 + + + + + + + + 16 + + + + + + + + 20 + + + + + + + 24 + + + + + + + + + 29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 2 + + + + + + + + 6 + + + + + + + + + 9 + + + + + + + 12 + + + + + + + 16 + + + + + + + + 20 + + + + + + + + 23 + + + + + + + 26 + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + 15 + + + + + + + + + 17 + + + + + + + 21 + + + + + + + + 24 + + + + + + + + + 31 + + + + + + + + + 34 + + + + + + + + 38 + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + + 5 + + + + + + + + 9 + + + + + + + + 13 + + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 5 + + + + + + + + 9 + + + + + + + + 14 + + + + + + + + 17 + + + + + + + + 23 + + + + + + + + + 28 + + + + + + + + + 32 + + + + + + + + 38 + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + + 3 + + + + + + + + 8 + + + + + + + + 12 + + + + + + + + + 17 + + + + + + + + + 23 + + + + + + + + + + 27 + + + + + + + + + 33 + + + + + + + + + + 37 + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + + + 10 + + + + + + + + 15 + + + + + + + + 20 + + + + + + + + 25 + + + + + + + + 29 + + + + + + + + 33 + + + + + + + 36 + + + + + + + 43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + 4 + + + + + + + + 10 + + + + + + + + + 13 + + + + + + + + 17 + + + + + + + + + 22 + + + + + + + + + + 26 + + + + + + + + 31 + + + + + + + + + 35 + + + + + + + + 39 + + + + + + + + + 43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + 6 + + + + + + + + + 10 + + + + + + + + + 14 + + + + + + + + 18 + + + + + + + + + 20 + + + + + + + + 25 + + + + + + + + + 29 + + + + + + + + + 33 + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Bratislava.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Bratislava.xml new file mode 100644 index 000000000..69d0d6f89 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Bratislava.xml @@ -0,0 +1,1854 @@ + + + + + + + AI_Dog + AI_Coop_Pistol_Makarov + AI_Coop_Rifle_AK47 + AI_Coop_Shotgun + AI_ShieldedHeavy_Default + AI_Coop_Heavy + AI_Coop_Elite + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + AI_Coop_Helmet_Elite + AI_Coop_Tech + AI_Coop_Sniper_60m + AI_Coop_Helmet_Russian_Pistol_F40 + AI_Coop_Helmet_Russian_Shotgun + AI_Coop_Helmet_Russian_Rifle_AK47 + AI_Coop_Pistol_F40 + AI_Coop_Pistol_Makarov + AI_Coop_Rifle_AKS74U + AI_Coop_Rifle_Goblin + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 3 + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 1 + + + + + + + + 3 + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 25 + + + + + + + + 5 + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 3 + + + + + + + + + 8 + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 20 + + + + + + + 5 + + + + + + + + 7 + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 60 + + + + + + + + 3 + + + + + + + + 7 + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 30 + + + + + + + 3 + + + + + + + 8 + + + + + + + + + 13 + + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 4 + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 45 + + + + + + + 2 + + + + + + + + 8 + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 20 + + + + + + + + + 4 + + + + + + + + 8 + + + + + + + + 14 + + + + + + + + + 19 + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 60 + + + + + + + 5 + + + + + + + 9 + + + + + + + + + 17 + + + + + + + + + + 25 + + + + + + + + + + 29 + + + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 3 + + + + + + + + 11 + + + + + + + + + + 16 + + + + + + + + 23 + + + + + + + + + 27 + + + + + + + + 31 + + + + + + + + 37 + + + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 25 + + + + + + + 4 + + + + + + + + + + 5 + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 25 + + + + + + + + 55 + + + + + + + + 75 + + + + + + + + 2 + + + + + + + + 4 + + + + + + + + 5 + + + + + + + + 8 + + + + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 20 + + + + + + + 45 + + + + + + + 110 + + + + + + + 130 + + + + + + + 2 + + + + + + + 3 + + + + + + + + 4 + + + + + + + 12 + + + + + + + + + 17 + + + + + + + 22 + + + + + + + 23 + + + + + + + + 25 + + + + + + + 29 + + + + + + + 31 + + + + + + + + 34 + + + + + + + + + 35 + + + + + + + 37 + + + + + + + 40 + + + + + + + + 42 + + + + + + + + 44 + + + + + + + 47 + + + + + + + + + 49 + + + + + + + + 51 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + 2 + + + + + + + + 5 + + + + + + + + + 9 + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 25 + + + + + + + 3 + + + + + + + + 6 + + + + + + + 10 + + + + + + + + + 14 + + + + + + + + 18 + + + + + + + 21 + + + + + + + + 23 + + + + + + + + 27 + + + + + + + + + 31 + + + + + + + + 37 + + + + + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + + 4 + + + + + + + + 5 + + + + + + + 6 + + + + + + + 7 + + + + + + + 8 + + + + + + + 9 + + + + + + + 11 + + + + + + + + 12 + + + + + + + 13 + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Kigali.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Kigali.xml new file mode 100644 index 000000000..77a7f99f0 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Kigali.xml @@ -0,0 +1,1850 @@ + + + + + + AI_Dog + AI_Coop_Pistol_Makarov + AI_Coop_Pistol_F40 + + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + AI_Coop_Shotgun + + AI_Coop_Rifle_AK47 + AI_Coop_Rifle_AKS74U + AI_Coop_Rifle_Goblin + + AI_Coop_ShieldedHeavy + AI_Coop_Heavy_Voron + AI_Coop_Tech + AI_Coop_Sniper_60m + + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + + AI_Coop_Helmet_Russian_Pistol_F40 + AI_Coop_Helmet_Russian_Rifle_Goblin + AI_Coop_Helmet_Russian_SMG_PP2000 + + + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 10 + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 2 + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 10 + + + + + + + 4 + + + + + + + + 7 + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 2 + + + + + + + 5 + + + + + + + + 7 + + + + + + + 9 + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + 8 + + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 4 + + + + + + + + + 7 + + + + + + + + 10 + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + 20 + + + + + + + 4 + + + + + + + + 6 + + + + + + + 11 + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 20 + + + + + + + + 7 + + + + + + + + 11 + + + + + + + + + 14 + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + + + + 10 + + + + + + + + + + 14 + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + + 3 + + + + + + + + + 6 + + + + + + + + 10 + + + + + + + + + 14 + + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + + + 9 + + + + + + + + + 14 + + + + + + + + + + 20 + + + + + + + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + 20 + + + + + + + + 2 + + + + + + + + + 4 + + + + + + + + 7 + + + + + + + + 11 + + + + + + + + 17 + + + + + + + + + 19 + + + + + + + 21 + + + + + + + 23 + + + + + + + 25 + + + + + + + 27 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + + + + 10 + + + + + + + + + + 15 + + + + + + + + + 18 + + + + + + + + 22 + + + + + + + + 26 + + + + + + + + + 34 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + + + 9 + + + + + + + + + 14 + + + + + + + + + 19 + + + + + + + + + 24 + + + + + + + + 32 + + + + + + + + 36 + + + + + + + + 39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + 11 + + + + + + + + + 14 + + + + + + + + + 17 + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + 4 + + + + + + + 6 + + + + + + + 8 + + + + + + + + 10 + + + + + + + + 12 + + + + + + + + 16 + + + + + + + + + + 18 + + + + + + + + 20 + + + + + + + 26 + + + + + + + + + + 28 + + + + + + + + 32 + + + + + + + + + + + 34 + + + + + + + + 37 + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 15 + + + + + + + + + + 6 + + + + + + + + 11 + + + + + + + + 16 + + + + + + + + 21 + + + + + + + + + + 24 + + + + + + + + 30 + + + + + + + + + + 35 + + + + + + + + 39 + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + 4 + + + + + + + + 10 + + + + + + + + + + 14 + + + + + + + + + + 18 + + + + + + + + + 21 + + + + + + + + 28 + + + + + + + + + + 34 + + + + + + + + + + + 38 + + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + + 6 + + + + + + + + 10 + + + + + + + + 15 + + + + + + + + + + 21 + + + + + + + + 26 + + + + + + + + + + 31 + + + + + + + + 36 + + + + + + + + 43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + 12 + + + + + + + + + 15 + + + + + + + + + 17 + + + + + + + + 19 + + + + + + + + 23 + + + + + + + + 27 + + + + + + + + + + 31 + + + + + + + + + 34 + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Sanaa.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Sanaa.xml new file mode 100644 index 000000000..6fe8fb49f --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/D_Sanaa.xml @@ -0,0 +1,1781 @@ + + + + + + + AI_Coop_Pistol_Makarov + AI_Coop_Pistol_F40 + AI_Coop_Helmet_Russian_Pistol_Makarov + AI_Coop_Helmet_Russian_Pistol_F40 + + + AI_Coop_Rifle_AK47 + AI_Coop_Rifle_AKS74U + AI_Coop_Helmet_Russian_Rifle_AK47 + AI_Coop_Helmet_Russian_Rifle_AKS74U + + + AI_Coop_Shotgun + AI_Coop_Helmet_Russian_Shotgun + + + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + AI_Coop_Helmet_Russian_SMG_MAC11 + AI_Coop_Helmet_Russian_SMG_PP2000 + AI_Coop_Helmet_Russian_SMG_Scorpion + + + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + + + AI_Coop_Sniper_60m + + + AI_Dog + AI_Coop_Tech + AI_Coop_Heavy + AI_Coop_ShieldedHeavy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 3 + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 4 + + + + + + + 7 + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 5 + + + + + + + 4 + + + + + + + 5 + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 10 + + + + + + + 6 + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 2 + + + + + + + 8 + + + + + + + + 10 + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 1 + + + + + + + 9 + + + + + + + 13 + + + + + + + 16 + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 3 + + + + + + + 8 + + + + + + + 15 + + + + + + + + 18 + + + + + + + + + 23 + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 15 + + + + + + + 4 + + + + + + 8 + + + + + + + + 12 + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 2 + + + + + + + + 6 + + + + + + + 7 + + + + + + + 8 + + + + + + + 11 + + + + + + + + + 15 + + + + + + + + 24 + + + + + + + 26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + + + 6 + + + + + + + + 14 + + + + + + + + + + + + 20 + + + + + + + + + + 24 + + + + + + + + + 26 + + + + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + + 5 + + + + + + + 9 + + + + + + + + + + 15 + + + + + + + 20 + + + + + + + 23 + + + + + + + 27 + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 30 + + + + + + + 5 + + + + + + + + 12 + + + + + + + + + + 17 + + + + + + + + + + 24 + + + + + + + + 29 + + + + + + + + 34 + + + + + + + + 40 + + + + + + + + + 45 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + 30 + + + + + + + + 1 + + + + + + 2 + + + + + + 3 + + + + + + 4 + + + + + + 5 + + + + + + 6 + + + + + + 7 + + + + + + 8 + + + + + + 9 + + + + + + 10 + + + + + + 11 + + + + + + 12 + + + + + + 13 + + + + + + 14 + + + + + + 15 + + + + + + 16 + + + + + + 17 + + + + + + 18 + + + + + + 20 + + + + + + + + + + + + + + + + + + 0 + + + + + + + 1 + + + + + + + 2 + + + + + + + 3 + + + + + + + 4 + + + + + + + 5 + + + + + + + 6 + + + + + + + 7 + + + + + + + 13 + + + + + + + 14 + + + + + + + 15 + + + + + + + 18 + + + + + + + 19 + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 30 + + + + + + + + 1 + + + + + + 2 + + + + + + 3 + + + + + + 4 + + + + + + 5 + + + + + + 6 + + + + + + 7 + + + + + + 8 + + + + + + 9 + + + + + + 10 + + + + + + 11 + + + + + + 12 + + + + + + 13 + + + + + + 14 + + + + + + 15 + + + + + + 16 + + + + + + 17 + + + + + + 18 + + + + + + 20 + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 1 + + + + + + + 2 + + + + + + + 3 + + + + + + + 4 + + + + + + + 5 + + + + + + + 10 + + + + + + + + + + + 11 + + + + + + + 12 + + + + + + + 13 + + + + + + + 14 + + + + + + + 15 + + + + + + + 16 + + + + + + + 17 + + + + + + + 18 + + + + + + + 19 + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 2 + + + + + + + + 4 + + + + + + + + 6 + + + + + + + 8 + + + + + + + 12 + + + + + + + + 16 + + + + + + + + + + + 20 + + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 2 + + + + + + + 4 + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/DefaultWaveConfig.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/DefaultWaveConfig.xml new file mode 100644 index 000000000..70c3481ff --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/DefaultWaveConfig.xml @@ -0,0 +1,202 @@ + + + + + + + AI_Dog + AI_Generic_Pistol_Grenade + AI_Generic_Rifle_Flashbang + AI_Heavy_Default + AI_MachineGunner_Default + AI_ShieldedHeavy_Default + AI_Tech_Default + AI_Sniper_Default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 60 + + + + + + + 120 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Amman.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Amman.xml new file mode 100644 index 000000000..a6d58605e --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Amman.xml @@ -0,0 +1,2477 @@ + + + + + + + AI_Dog + AI_Coop_Pistol_Makarov + AI_Coop_Pistol_F40 + + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + AI_Coop_Shotgun + + AI_Coop_Rifle_AK47 + AI_Coop_Rifle_AKS74U + AI_Coop_Rifle_Goblin + + AI_Coop_ShieldedHeavy + AI_Coop_Heavy + AI_Coop_Tech + + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + + AI_Coop_Helmet_Tactical_Pistol_Makarov + AI_Coop_Helmet_Tactical_Pistol_F40 + AI_Coop_Helmet_Tactical_Rifle_AK47 + AI_Coop_Helmet_Tactical_Rifle_AKS74U + AI_Coop_Helmet_Tactical_Rifle_Goblin + + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + + AI_Coop_Helmet_Tactical_SMG_MAC11 + AI_Coop_Helmet_Tactical_SMG_PP2000 + AI_Coop_Helmet_Tactical_SMG_Scorpion + AI_Coop_Helmet_Tactical_Shotgun + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 5 + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 2 + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 2 + + + + + + + + + + 5 + + + + + + + + + + 9 + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 3 + + + + + + + + + + 6 + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 2 + + + + + + + + + + 6 + + + + + + + + + + 9 + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 20 + + + + + + + + + + 4 + + + + + + + + + + 6 + + + + + + + + + + 8 + + + + + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 20 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 10 + + + + + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 3 + + + + + + + + + + 7 + + + + + + + + + + 9 + + + + + + + + + + 12 + + + + + + + + + + 17 + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 3 + + + + + + + + + + 7 + + + + + + + + + + 10 + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 2 + + + + + + + + + + 5 + + + + + + + + + + 9 + + + + + + + + + + 13 + + + + + + + + + + 18 + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 5 + + + + + + + + + + 10 + + + + + + + + + + 16 + + + + + + + + + + 20 + + + + + + + + + + 24 + + + + + + + + + + 29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 2 + + + + + + + + + + 6 + + + + + + + + + + 9 + + + + + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + + + 20 + + + + + + + + + + 23 + + + + + + + + + + 26 + + + + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 15 + + + + + + + + + + 17 + + + + + + + + + + 21 + + + + + + + + + + 24 + + + + + + + + + + 31 + + + + + + + + + + 34 + + + + + + + + + + 38 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 5 + + + + + + + + + + 9 + + + + + + + + + + 13 + + + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 5 + + + + + + + + + + 9 + + + + + + + + + + 14 + + + + + + + + + + 17 + + + + + + + + + + 23 + + + + + + + + + + 28 + + + + + + + + + + 32 + + + + + + + + + + 38 + + + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 3 + + + + + + + + + + 8 + + + + + + + + + + 12 + + + + + + + + + + 17 + + + + + + + + + + 23 + + + + + + + + + + 27 + + + + + + + + + + 33 + + + + + + + + + + 37 + + + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 10 + + + + + + + + + + 15 + + + + + + + + + + 20 + + + + + + + + + + 25 + + + + + + + + + + 29 + + + + + + + + + + 33 + + + + + + + + + + 36 + + + + + + + + + + 43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 10 + + + + + + + + + + 13 + + + + + + + + + + 17 + + + + + + + + + + 22 + + + + + + + + + + 26 + + + + + + + + + + 31 + + + + + + + + + + 35 + + + + + + + + + + 39 + + + + + + + + + + 43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 6 + + + + + + + + + + 10 + + + + + + + + + + 14 + + + + + + + + + + 18 + + + + + + + + + + 20 + + + + + + + + + + 25 + + + + + + + + + + 29 + + + + + + + + + + 33 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Bratislava.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Bratislava.xml new file mode 100644 index 000000000..0946de8a8 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Bratislava.xml @@ -0,0 +1,3073 @@ + + + + + + + AI_Dog + AI_Coop_Pistol_Makarov + AI_Coop_Rifle_AK47 + AI_Coop_Shotgun + AI_ShieldedHeavy_Default + AI_Coop_Heavy + AI_Coop_Elite + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + AI_Coop_Helmet_Elite + AI_Coop_Tech + AI_Coop_Sniper_60m + AI_Coop_Helmet_Russian_Pistol_F40 + AI_Coop_Helmet_Russian_Shotgun + AI_Coop_Helmet_Russian_Rifle_AK47 + AI_Coop_Pistol_F40 + AI_Coop_Pistol_Makarov + AI_Coop_Rifle_AKS74U + AI_Coop_Rifle_Goblin + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 60 + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 30 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 45 + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + + 19 + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 60 + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + 29 + + + + + + + + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + 16 + + + + + + + + + + + + + + 23 + + + + + + + + + + + + + + 27 + + + + + + + + + + + + + + 31 + + + + + + + + + + + + + + 37 + + + + + + + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + 55 + + + + + + + + + + + + + + 75 + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 20 + + + + + + + 45 + + + + + + + 110 + + + + + + + 130 + + + + + + + 2 + + + + + + + 3 + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + 12 + + + + + + + + + + + + + + 17 + + + + + + + + + + + + + + 22 + + + + + + + + + + + + + + 23 + + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + 29 + + + + + + + + + + + + + + 31 + + + + + + + + + + + + + + 34 + + + + + + + + + + + + + + + 35 + + + + + + + + + + + + + + 37 + + + + + + + + + + + + + + 40 + + + + + + + + + + + + + + + 42 + + + + + + + + + + + + + + 44 + + + + + + + + + + + + + + 47 + + + + + + + + + + + + + + + 49 + + + + + + + + + + + + + + 51 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + 25 + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + 14 + + + + + + + + + + + + + + 18 + + + + + + + + + + + + + + 21 + + + + + + + + + + + + + + 23 + + + + + + + + + + + + + + 27 + + + + + + + + + + + + + + 31 + + + + + + + + + + + + + + 37 + + + + + + + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + 15 + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + 6 + + + + + + + 7 + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + 12 + + + + + + + 13 + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Kigali.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Kigali.xml new file mode 100644 index 000000000..ec06f6799 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Kigali.xml @@ -0,0 +1,2460 @@ + + + + + + AI_Dog + AI_Coop_Pistol_Makarov + AI_Coop_Pistol_F40 + + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + AI_Coop_Shotgun + + AI_Coop_Rifle_AK47 + AI_Coop_Rifle_AKS74U + AI_Coop_Rifle_Goblin + + AI_Coop_ShieldedHeavy + AI_Coop_Heavy_Voron + AI_Coop_Tech + AI_Coop_Sniper_60m + + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + + AI_Coop_Helmet_Russian_Pistol_F40 + AI_Coop_Helmet_Russian_Rifle_Goblin + AI_Coop_Helmet_Russian_SMG_PP2000 + + + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 2 + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 10 + + + + + + + + + + 4 + + + + + + + + + + 7 + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 2 + + + + + + + + + + 5 + + + + + + + + + + 7 + + + + + + + + + + 9 + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 4 + + + + + + + + + + 7 + + + + + + + + + + 10 + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 20 + + + + + + + + + + 4 + + + + + + + + + + 6 + + + + + + + + + + 11 + + + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 20 + + + + + + + + + + + 7 + + + + + + + + + + 11 + + + + + + + + + + + + 14 + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 10 + + + + + + + + + + 14 + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + 15 + + + + + + + + + + 3 + + + + + + + + + + + + 6 + + + + + + + + + + 10 + + + + + + + + + + + + 14 + + + + + + + + + + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 9 + + + + + + + + + + 14 + + + + + + + + + + 20 + + + + + + + + + + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 20 + + + + + + + + 2 + + + + + + + + + + + + 4 + + + + + + + + + + 7 + + + + + + + + + + 11 + + + + + + + + + + 17 + + + + + + + + + + + + 19 + + + + + + + + + + 21 + + + + + + + + + + 23 + + + + + + + + + + 25 + + + + + + + + + + 27 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 10 + + + + + + + + + + 15 + + + + + + + + + + 18 + + + + + + + + + + 22 + + + + + + + + + + 26 + + + + + + + + + + 34 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 9 + + + + + + + + + + 14 + + + + + + + + + + 19 + + + + + + + + + + 24 + + + + + + + + + + 32 + + + + + + + + + + 36 + + + + + + + + + + 39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 11 + + + + + + + + + + 14 + + + + + + + + + + 17 + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 6 + + + + + + + + + + 8 + + + + + + + + + + 10 + + + + + + + + + + 12 + + + + + + + + + + 16 + + + + + + + + + + 18 + + + + + + + + + + 20 + + + + + + + + + + 26 + + + + + + + + + + + 28 + + + + + + + + + + 32 + + + + + + + + + + + 34 + + + + + + + + + + 37 + + + + + + + + + + 41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 6 + + + + + + + + + + 11 + + + + + + + + + + 16 + + + + + + + + + + 21 + + + + + + + + + + + + 24 + + + + + + + + + + 30 + + + + + + + + + + + + 35 + + + + + + + + + + 39 + + + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + + + 4 + + + + + + + + + + 10 + + + + + + + + + + + + 14 + + + + + + + + + + + 18 + + + + + + + + + + + + 21 + + + + + + + + + + 28 + + + + + + + + + + 34 + + + + + + + + + + + + 38 + + + + + + + + + + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 6 + + + + + + + + + + 10 + + + + + + + + + + 15 + + + + + + + + + + 21 + + + + + + + + + + 26 + + + + + + + + + + 31 + + + + + + + + + + 36 + + + + + + + + + + 43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + + 8 + + + + + + + + + + 12 + + + + + + + + + + 15 + + + + + + + + + + + 17 + + + + + + + + + + 19 + + + + + + + + + + 23 + + + + + + + + + + 27 + + + + + + + + + + + 31 + + + + + + + + + + + 34 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Sanaa.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Sanaa.xml new file mode 100644 index 000000000..cc03af204 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/D_Sanaa.xml @@ -0,0 +1,2721 @@ + + + + + + + AI_Coop_Pistol_Makarov + AI_Coop_Pistol_F40 + AI_Coop_Helmet_Russian_Pistol_Makarov + AI_Coop_Helmet_Russian_Pistol_F40 + + + AI_Coop_Rifle_AK47 + AI_Coop_Rifle_AKS74U + AI_Coop_Helmet_Russian_Rifle_AK47 + AI_Coop_Helmet_Russian_Rifle_AKS74U + + + AI_Coop_Shotgun + AI_Coop_Helmet_Russian_Shotgun + + + AI_Coop_SMG_MAC11 + AI_Coop_SMG_PP2000 + AI_Coop_SMG_Scorpion + AI_Coop_Helmet_Russian_SMG_MAC11 + AI_Coop_Helmet_Russian_SMG_PP2000 + AI_Coop_Helmet_Russian_SMG_Scorpion + + + AI_Coop_Elite_MAC11 + AI_Coop_Elite_PP2000 + AI_Coop_Elite_Scorpion + AI_Coop_Helmet_Elite_MAC11 + AI_Coop_Helmet_Elite_PP2000 + AI_Coop_Helmet_Elite_Scorpion + + + AI_Coop_Sniper_60m + + + AI_Dog + AI_Coop_Tech + AI_Coop_Heavy + AI_Coop_ShieldedHeavy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 3 + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 4 + + + + + + + + + + + 7 + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 5 + + + + + + + + + + + 4 + + + + + + + + + + + 5 + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 10 + + + + + + + + + + + 6 + + + + + + + + + + + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 2 + + + + + + + + + + + 8 + + + + + + + + + + + 10 + + + + + + + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 1 + + + + + + + + + + + 9 + + + + + + + + + + + 13 + + + + + + + + + + + 16 + + + + + + + + + + + 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 15 + + + + + + + + + + + 3 + + + + + + + + + + + 8 + + + + + + + + + + + 15 + + + + + + + + + + + 18 + + + + + + + + + + + 23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 15 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 12 + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 2 + + + + + + + + + + + 6 + + + + + + + + + + + 7 + + + + + + + + + + + 8 + + + + + + + + + + + 11 + + + + + + + + + + + 15 + + + + + + + + + + + 24 + + + + + + + + + + + 26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + 15 + + + + + + + + + + + 6 + + + + + + + + + + + 14 + + + + + + + + + + + + + 20 + + + + + + + + + + + 24 + + + + + + + + + + + 26 + + + + + + + + + + + 28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 15 + + + + + + + + + + + 5 + + + + + + + + + + + 9 + + + + + + + + + + + 15 + + + + + + + + + + + 20 + + + + + + + + + + + 23 + + + + + + + + + + + 27 + + + + + + + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 30 + + + + + + + + + + + 5 + + + + + + + + + + + 12 + + + + + + + + + + + 17 + + + + + + + + + + + 24 + + + + + + + + + + + 29 + + + + + + + + + + + 34 + + + + + + + + + + + 40 + + + + + + + + + + + 45 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 30 + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 3 + + + + + + + + + + 4 + + + + + + 5 + + + + + + + + + + 6 + + + + + + + + + + 7 + + + + + + + + + + 8 + + + + + + 9 + + + + + + + + + + 10 + + + + + + + + + + 11 + + + + + + + + + + 12 + + + + + + 13 + + + + + + 14 + + + + + + + + + + 15 + + + + + + + + + + 16 + + + + + + + + + + 17 + + + + + + 18 + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 1 + + + + + + + + + + + 2 + + + + + + + + + + + 3 + + + + + + + + + + + 4 + + + + + + + + + + + 5 + + + + + + + + + + + 6 + + + + + + + + + + + 7 + + + + + + + + + + + 13 + + + + + + + + + + + 14 + + + + + + + + + + + 15 + + + + + + + + + + + 18 + + + + + + + + + + + 19 + + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 30 + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 3 + + + + + + + + + + 4 + + + + + + 5 + + + + + + + + + + 6 + + + + + + + + + + 7 + + + + + + + + + + 8 + + + + + + + + + + 9 + + + + + + + + + + 10 + + + + + + + + + + 11 + + + + + + + + + + 12 + + + + + + + + + + 13 + + + + + + + + + + 14 + + + + + + + + + + 15 + + + + + + + + + + 16 + + + + + + + + + + 17 + + + + + + + + + + 18 + + + + + + + + + + 20 + + + + + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 1 + + + + + + + + + + + 2 + + + + + + + + + + + 3 + + + + + + + + + + + 4 + + + + + + + + + + + 5 + + + + + + + + + + + 10 + + + + + + + + + + + 11 + + + + + + + + + + + 12 + + + + + + + + + + + 13 + + + + + + + + + + + 14 + + + + + + + + + + + 15 + + + + + + + + + + + 16 + + + + + + + + + + + 17 + + + + + + + + + + + 18 + + + + + + + + + + + 19 + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 2 + + + + + + + + + + + 4 + + + + + + + + + + + 6 + + + + + + + + + + + 8 + + + + + + + + + + + 12 + + + + + + + + + + + 16 + + + + + + + + + + + 20 + + + + + + + + + + + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + 2 + + + + + + + + + + + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/DefaultWaveConfig.xml b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/DefaultWaveConfig.xml new file mode 100644 index 000000000..70c3481ff --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/Data/ExtractionWaveConfigs/Random/DefaultWaveConfig.xml @@ -0,0 +1,202 @@ + + + + + + + AI_Dog + AI_Generic_Pistol_Grenade + AI_Generic_Rifle_Flashbang + AI_Heavy_Default + AI_MachineGunner_Default + AI_ShieldedHeavy_Default + AI_Tech_Default + AI_Sniper_Default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 60 + + + + + + + 120 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/update/difficultyconfiguration.ini b/data/SplinterCellBlacklist.FusionMod/src/system/update/difficultyconfiguration.ini new file mode 100644 index 000000000..8f28a8ef4 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/update/difficultyconfiguration.ini @@ -0,0 +1,125 @@ + +[Echelon.EchelonDifficultyManager] + +//------------------------------------------------------------------------------------------------- +// Difficulty settings +// 0 - Rookie +// 1 - Normal +// 2 - Realistic +// 3 - Perfectionist +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- +// Mark and execute +//------------------------------------------------------------------------------------------------- +MarkAndExecuteSettings[0]=(m_bGaugeEnabled = true, m_bExecuteEnabled = true, m_fGaugeEventMultiplier = 1.0f, m_bOverrideGaugeValues = false); +MarkAndExecuteSettings[1]=(m_bGaugeEnabled = true, m_bExecuteEnabled = true, m_fGaugeEventMultiplier = 1.0f, m_bOverrideGaugeValues = false); +MarkAndExecuteSettings[2]=(m_bGaugeEnabled = true, m_bExecuteEnabled = true, m_fGaugeEventMultiplier = 1.0f, m_bOverrideGaugeValues = true, m_fOverridenH2HGaugeFillPercent=0.5f, m_fOverridenOtherKillGaugeFillPercent=0.25f); +MarkAndExecuteSettings[3]=(m_bGaugeEnabled = true, m_bExecuteEnabled = true, m_fGaugeEventMultiplier = 1.0f, m_bOverrideGaugeValues = true, m_fOverridenH2HGaugeFillPercent=0.25f, m_fOverridenOtherKillGaugeFillPercent=0.125f); + +//------------------------------------------------------------------------------------------------- +// Player health +//------------------------------------------------------------------------------------------------- +PlayerHealthSettings[0]=(m_nPlayerInitialHealth = 1250, m_fRegenerationSpeedMultiplier=3.0f, m_fRegenerationDelayMultiplier=1.0f, m_fRegenerationCombatDelayMultiplier=0.5f); +PlayerHealthSettings[1]=(m_nPlayerInitialHealth = 450, m_fRegenerationSpeedMultiplier=1.0f, m_fRegenerationDelayMultiplier=1.0f, m_fRegenerationCombatDelayMultiplier=1.0f); +PlayerHealthSettings[2]=(m_nPlayerInitialHealth = 250, m_fRegenerationSpeedMultiplier=0.7f, m_fRegenerationDelayMultiplier=1.0f, m_fRegenerationCombatDelayMultiplier=1.2f); +PlayerHealthSettings[3]=(m_nPlayerInitialHealth = 100, m_fRegenerationSpeedMultiplier=0.5f, m_fRegenerationDelayMultiplier=1.0f, m_fRegenerationCombatDelayMultiplier=1.5f); + +//------------------------------------------------------------------------------------------------- +// Player damage +//------------------------------------------------------------------------------------------------- +PlayerDamageSettings[0]=(m_fHeadDamageMultiplier = 20.0f, m_fTorsoDamageMultiplier = 1.5f, m_fLimbsDamageMultiplier = 1.0f, m_fRedirectHeadShotsToNeckInBlindFireProbability = 0.8f, m_fRedirectHeadShotsToNeckAfterFalloffRangeProbability = 0.8f, m_fRedirectHeadShotsToNeckAfterShootingRangeProbability = 0.2f, m_fRedirectHeadShotsToNeckAfterPrecisionRangeProbability = 0.0f); +PlayerDamageSettings[1]=(m_fHeadDamageMultiplier = 20.0f, m_fTorsoDamageMultiplier = 1.25f, m_fLimbsDamageMultiplier = 0.9f, m_fRedirectHeadShotsToNeckInBlindFireProbability = 0.8f, m_fRedirectHeadShotsToNeckAfterFalloffRangeProbability = 0.9f, m_fRedirectHeadShotsToNeckAfterShootingRangeProbability = 0.1f, m_fRedirectHeadShotsToNeckAfterPrecisionRangeProbability = 0.0f); +PlayerDamageSettings[2]=(m_fHeadDamageMultiplier = 20.0f, m_fTorsoDamageMultiplier = 0.85f, m_fLimbsDamageMultiplier = 0.7f, m_fRedirectHeadShotsToNeckInBlindFireProbability = 0.8f, m_fRedirectHeadShotsToNeckAfterFalloffRangeProbability = 0.9f, m_fRedirectHeadShotsToNeckAfterShootingRangeProbability = 0.1f, m_fRedirectHeadShotsToNeckAfterPrecisionRangeProbability = 0.0f); +PlayerDamageSettings[3]=(m_fHeadDamageMultiplier = 20.0f, m_fTorsoDamageMultiplier = 0.75f, m_fLimbsDamageMultiplier = 0.55f, m_fRedirectHeadShotsToNeckInBlindFireProbability = 0.8f, m_fRedirectHeadShotsToNeckAfterFalloffRangeProbability = 0.9f, m_fRedirectHeadShotsToNeckAfterShootingRangeProbability = 0.1f, m_fRedirectHeadShotsToNeckAfterPrecisionRangeProbability = 0.0f); + +//------------------------------------------------------------------------------------------------- +// Player weapon settings +//------------------------------------------------------------------------------------------------- +PlayerWeaponSettings[0]=(m_bUnlimitedPistolMagazines = false, m_fInitialPrimaryAmmoCountMultiplier = 3.0f, m_fInitialSecondaryAmmoCountMultiplier = 3.0f, m_fAfterAIDroppedPrimaryAmmoCountMultiplier = 1.5f, m_fAfterAIDroppedSecondaryAmmoCountMultiplier = 1.5f, m_bDropCrateUseAllowed = true); +PlayerWeaponSettings[1]=(m_bUnlimitedPistolMagazines = false, m_fInitialPrimaryAmmoCountMultiplier = 2.0f, m_fInitialSecondaryAmmoCountMultiplier = 2.0f, m_fAfterAIDroppedPrimaryAmmoCountMultiplier = 1.0f, m_fAfterAIDroppedSecondaryAmmoCountMultiplier = 0.67f, m_bDropCrateUseAllowed = true); +PlayerWeaponSettings[2]=(m_bUnlimitedPistolMagazines = false, m_fInitialPrimaryAmmoCountMultiplier = 1.0f, m_fInitialSecondaryAmmoCountMultiplier = 1.0f, m_fAfterAIDroppedPrimaryAmmoCountMultiplier = 0.67f, m_fAfterAIDroppedSecondaryAmmoCountMultiplier = 0.5f, m_bDropCrateUseAllowed = true); +PlayerWeaponSettings[3]=(m_bUnlimitedPistolMagazines = false, m_fInitialPrimaryAmmoCountMultiplier = 1.0f, m_fInitialSecondaryAmmoCountMultiplier = 1.0f, m_fAfterAIDroppedPrimaryAmmoCountMultiplier = 0.5f, m_fAfterAIDroppedSecondaryAmmoCountMultiplier = 0.25f, m_bDropCrateUseAllowed = false); + +//------------------------------------------------------------------------------------------------- +// Player gadget settings +//------------------------------------------------------------------------------------------------- +PlayerGadgetSettings[0]=(m_bSonarPulseEnabled = true, m_fTechNPCArchetypeVisionModeDisruptionRange=1000.0f); +PlayerGadgetSettings[1]=(m_bSonarPulseEnabled = true, m_fTechNPCArchetypeVisionModeDisruptionRange=5000.0f); +PlayerGadgetSettings[2]=(m_bSonarPulseEnabled = true, m_fTechNPCArchetypeVisionModeDisruptionRange=10000.0f); +PlayerGadgetSettings[3]=(m_bSonarPulseEnabled = false, m_fTechNPCArchetypeVisionModeDisruptionRange=15000.0f); + +//------------------------------------------------------------------------------------------------- +// AI detection settings +//------------------------------------------------------------------------------------------------- +AIDetectionSettings[0]=(m_fDetectionSpeedMultiplier = 1.0f, m_bEnableLastKnownPositionShadow = true, m_bEnableDetectionWarnings=true); +AIDetectionSettings[1]=(m_fDetectionSpeedMultiplier = 1.0f, m_bEnableLastKnownPositionShadow = true, m_bEnableDetectionWarnings=true); +AIDetectionSettings[2]=(m_fDetectionSpeedMultiplier = 1.0f, m_bEnableLastKnownPositionShadow = true, m_bEnableDetectionWarnings=true); +AIDetectionSettings[3]=(m_fDetectionSpeedMultiplier = 1.0f, m_bEnableLastKnownPositionShadow = false, m_bEnableDetectionWarnings=true); + +//------------------------------------------------------------------------------------------------- +// Hand to hand settings +//------------------------------------------------------------------------------------------------- +HandToHandSettings[0]=(m_fH2HFailProbabilityInitial=0.0f, m_fH2HFailProbabilityIncreasePerKill=0.4f, m_fH2HFailProbabilityCooldownPerSecond=0.085f, m_fH2HFailProbabilityBase_InCover_InCombat_CloseToLKP=0.0f, m_fH2HFailProbabilityBase_EnemyAware_CloseToALKP=0.0f, m_fH2HCloseLKPDistance=250.0f, m_fH2HCloseApproxLKPDistance=150.0f); +HandToHandSettings[1]=(m_fH2HFailProbabilityInitial=0.0f, m_fH2HFailProbabilityIncreasePerKill=0.50f, m_fH2HFailProbabilityCooldownPerSecond=0.07f, m_fH2HFailProbabilityBase_InCover_InCombat_CloseToLKP=0.5f, m_fH2HFailProbabilityBase_EnemyAware_CloseToALKP=0.5f, m_fH2HCloseLKPDistance=250.0f, m_fH2HCloseApproxLKPDistance=150.0f); +HandToHandSettings[2]=(m_fH2HFailProbabilityInitial=0.0f, m_fH2HFailProbabilityIncreasePerKill=1.0f, m_fH2HFailProbabilityCooldownPerSecond=0.05f , m_fH2HFailProbabilityBase_InCover_InCombat_CloseToLKP=0.8f, m_fH2HFailProbabilityBase_EnemyAware_CloseToALKP=0.8f, m_fH2HCloseLKPDistance=325.0f, m_fH2HCloseApproxLKPDistance=150.0f); +HandToHandSettings[3]=(m_fH2HFailProbabilityInitial=1.0f, m_fH2HFailProbabilityIncreasePerKill=0.0f, m_fH2HFailProbabilityCooldownPerSecond=0.0f , m_fH2HFailProbabilityBase_InCover_InCombat_CloseToLKP=1.0f, m_fH2HFailProbabilityBase_EnemyAware_CloseToALKP=1.0f, m_fH2HCloseLKPDistance=450.0f, m_fH2HCloseApproxLKPDistance=150.0f, m_fH2HDenyH2HChainAbductionTimeout=90.0f); + +//------------------------------------------------------------------------------------------------- +// Player noise settings +//------------------------------------------------------------------------------------------------- +PlayerNoiseSettings[0]=(m_bSendFootStepEventsWhenCrouchRunning = false, m_bSendFootStepEventsWhenCrouchSprinting=false, m_bSendFootStepEventsWhenCrouchWalking=false); +PlayerNoiseSettings[1]=(m_bSendFootStepEventsWhenCrouchRunning = true, m_bSendFootStepEventsWhenCrouchSprinting=true, m_bSendFootStepEventsWhenCrouchWalking=false); +PlayerNoiseSettings[2]=(m_bSendFootStepEventsWhenCrouchRunning = true, m_bSendFootStepEventsWhenCrouchSprinting=true, m_bSendFootStepEventsWhenCrouchWalking=false); +PlayerNoiseSettings[3]=(m_bSendFootStepEventsWhenCrouchRunning = true, m_bSendFootStepEventsWhenCrouchSprinting=true, m_bSendFootStepEventsWhenCrouchWalking=false); + +//------------------------------------------------------------------------------------------------- +// Player stealth/combat settings +//------------------------------------------------------------------------------------------------- +PlayerStealthCombatSettings[0]=(m_fCombatDetectionThresholdTime=3.4f, m_fCombatDetectedToVanishTime=0.0f); +PlayerStealthCombatSettings[1]=(m_fCombatDetectionThresholdTime=3.4f, m_fCombatDetectedToVanishTime=5.0f); +PlayerStealthCombatSettings[2]=(m_fCombatDetectionThresholdTime=3.4f, m_fCombatDetectedToVanishTime=15.0f); +PlayerStealthCombatSettings[3]=(m_fCombatDetectionThresholdTime=3.4f, m_fCombatDetectedToVanishTime=30.0f); + +//------------------------------------------------------------------------------------------------- +// Player stealth/combat settings +//------------------------------------------------------------------------------------------------- +PlayerWeaponStashSettings[0]=(m_bDisableWeaponStashUse=false); +PlayerWeaponStashSettings[1]=(m_bDisableWeaponStashUse=false); +PlayerWeaponStashSettings[2]=(m_bDisableWeaponStashUse=false); +PlayerWeaponStashSettings[3]=(m_bDisableWeaponStashUse=true); + +//------------------------------------------------------------------------------------------------- +// Player inventory limit settings +//------------------------------------------------------------------------------------------------- +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_Handgun , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_SMG , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_LMG , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_AssaultRifle , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_Crossbow , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_SniperRifle , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Rookie, m_eWeaponCategory=eWeaponCategory_Tazer , m_nAmmoLimit=100); + +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_Handgun , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_SMG , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_LMG , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_AssaultRifle , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_Crossbow , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_SniperRifle , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Normal, m_eWeaponCategory=eWeaponCategory_Tazer , m_nAmmoLimit=100); + +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_Handgun , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_SMG , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_LMG , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_AssaultRifle , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_Crossbow , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_SniperRifle , m_nAmmoLimit=100); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Realistic, m_eWeaponCategory=eWeaponCategory_Tazer , m_nAmmoLimit=100); + +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_Handgun , m_nAmmoLimit=100);); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_SMG , m_nAmmoLimit=100);); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_LMG , m_nAmmoLimit=100);); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_AssaultRifle , m_nAmmoLimit=100);); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_Crossbow , m_nAmmoLimit=100);); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_SniperRifle , m_nAmmoLimit=100);); +PlayerInventoryAmmoLimitSettings=(m_eDifficultyLevel=eDifficultyLevel_Perfectionist, m_eWeaponCategory=eWeaponCategory_Tazer , m_nAmmoLimit=100);); diff --git a/data/SplinterCellBlacklist.FusionMod/src/system/version.ual b/data/SplinterCellBlacklist.FusionMod/src/system/version.ual new file mode 100644 index 000000000..a36540af3 --- /dev/null +++ b/data/SplinterCellBlacklist.FusionMod/src/system/version.ual @@ -0,0 +1 @@ +loadfromscriptsonly \ No newline at end of file diff --git a/data/SplinterCellConviction.FusionMod/src/system/scripts/SplinterCellConviction.FusionMod.ini b/data/SplinterCellConviction.FusionMod/src/system/scripts/SplinterCellConviction.FusionMod.ini index 17cf65031..a4bf4b076 100644 --- a/data/SplinterCellConviction.FusionMod/src/system/scripts/SplinterCellConviction.FusionMod.ini +++ b/data/SplinterCellConviction.FusionMod/src/system/scripts/SplinterCellConviction.FusionMod.ini @@ -4,4 +4,8 @@ SkipSystemDetection = 1 DisableDOF = 1 DisableBlackAndWhiteFilter = 0 DisableCharacterLighting = 0 -EnhancedSonarVision = 0 // https://imgur.com/PfDDYG2 \ No newline at end of file +EnhancedSonarVision = 0 // https://imgur.com/PfDDYG2 +BlacklistIndicators = 0 // Bloom will be enabled only in the darkness + +[LOGITECH] +LightSyncRGB = 1 // Mouse and keyboard will be dimmed in the darkness(and vice versa with BlacklistIndicators). Only Logitech hardware is supported, requires Logitech G HUB app diff --git a/external/asmjit b/external/asmjit index ffac9f36f..330aa6438 160000 --- a/external/asmjit +++ b/external/asmjit @@ -1 +1 @@ -Subproject commit ffac9f36fb045dd2c6a81e1b5b9ccc115e5ef924 +Subproject commit 330aa64386f394e090eb1062c645f9d021a761bc diff --git a/external/injector b/external/injector index 139126791..d8db0115b 160000 --- a/external/injector +++ b/external/injector @@ -1 +1 @@ -Subproject commit 139126791f4529ecf0929bbf807de1afa715d7a6 +Subproject commit d8db0115b5369d6fb4233b2651e0466185e73fab diff --git a/external/spdlog b/external/spdlog index c3aed4b68..d276069a6 160000 --- a/external/spdlog +++ b/external/spdlog @@ -1 +1 @@ -Subproject commit c3aed4b68373955e1cc94307683d44dca1515d2b +Subproject commit d276069a6e916b1e1fd45885b15b72bd8ee000a7 diff --git a/includes/stdafx.cpp b/includes/stdafx.cpp index e23118443..eaaa1ba98 100644 --- a/includes/stdafx.cpp +++ b/includes/stdafx.cpp @@ -10,9 +10,9 @@ float GetFOV2(float f, float ar) return 4.0f * f * atan(ar * (3.0f / 4.0f)) / (float)M_PI; } -float AdjustFOV(float f, float ar) +float AdjustFOV(float f, float ar, float base_ar) { - return std::round((2.0f * atan(((ar) / (4.0f / 3.0f)) * tan(f / 2.0f * ((float)M_PI / 180.0f)))) * (180.0f / (float)M_PI) * 100.0f) / 100.0f; + return std::round((2.0f * atan(((ar) / base_ar) * tan(f / 2.0f * ((float)M_PI / 180.0f)))) * (180.0f / (float)M_PI) * 100.0f) / 100.0f; } void CreateThreadAutoClose(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId) diff --git a/includes/stdafx.h b/includes/stdafx.h index 0b5da2400..fadf378b4 100644 --- a/includes/stdafx.h +++ b/includes/stdafx.h @@ -36,7 +36,7 @@ float GetFOV(float f, float ar); float GetFOV2(float f, float ar); -float AdjustFOV(float f, float ar); +float AdjustFOV(float f, float ar, float base_ar = (4.0f / 3.0f)); bool IsModuleUAL(HMODULE mod); bool IsUALPresent(); @@ -102,6 +102,14 @@ std::string pattern_str(T t, Rest... rest) return std::string((std::is_same::value ? format("%c ", t) : format("%02X ", t)) + pattern_str(rest...)); } +template +hook::pattern find_pattern(Args... args) +{ + hook::pattern pattern; + ((pattern = hook::pattern(args), !pattern.count_hint(count).empty()) || ...); + return pattern; +} + template constexpr size_t length(char const (&)[N]) { @@ -148,7 +156,7 @@ inline bool starts_with(const std::wstring_view str, const std::wstring_view pre return str.starts_with(prefix); } -template +template T GetModulePath(HMODULE hModule) { static constexpr auto INITIAL_BUFFER_SIZE = MAX_PATH; @@ -202,7 +210,7 @@ T GetModulePath(HMODULE hModule) return T(); } -template +template T GetThisModulePath() { HMODULE hm = NULL; @@ -217,7 +225,7 @@ T GetThisModulePath() return r; } -template +template T GetThisModuleName() { HMODULE hm = NULL; @@ -232,7 +240,7 @@ T GetThisModuleName() return moduleFileName.substr(moduleFileName.find_last_of(L"/\\") + 1); } -template +template T GetExeModulePath() { T r = GetModulePath(NULL); @@ -246,7 +254,7 @@ T GetExeModulePath() return r; } -template +template T GetExeModuleName() { const T moduleFileName = GetModulePath(NULL); @@ -258,7 +266,7 @@ T GetExeModuleName() return moduleFileName.substr(moduleFileName.find_last_of(L"/\\") + 1); } -template +template T GetCurrentDirectoryW() { static constexpr auto INITIAL_BUFFER_SIZE = MAX_PATH; diff --git a/premake5.lua b/premake5.lua index 07b889769..f5c992c60 100644 --- a/premake5.lua +++ b/premake5.lua @@ -471,6 +471,8 @@ project "SplinterCellChaosTheory.WidescreenFix" setpaths("Z:/WFP/Games/Splinter Cell/Splintercell Chaos Theory/", "system/splintercell3.exe", "system/scripts/") project "SplinterCellConviction.FusionMod" setpaths("Z:/WFP/Games/Splinter Cell/Tom Clancy's Splinter Cell Conviction/", "src/system/conviction_game.exe", "src/system/scripts/") +project "SplinterCellBlacklist.FusionMod" + setpaths("Z:/WFP/Games/Splinter Cell/Splinter Cell Blacklist/", "src/SYSTEM/Blacklist_DX11_game.exe", "src/system/scripts/") project "SplinterCellDoubleAgent.WidescreenFix" setpaths("Z:/WFP/Games/Splinter Cell/Splinter Cell - Double Agent/", "SCDA-Offline/System/SplinterCell4.exe", "SCDA-Offline/System/scripts/") files { "textures/SCDA/icon.rc" } diff --git a/source/SplinterCellBlacklist.FusionMod/dllmain.cpp b/source/SplinterCellBlacklist.FusionMod/dllmain.cpp new file mode 100644 index 000000000..ed26a6d56 --- /dev/null +++ b/source/SplinterCellBlacklist.FusionMod/dllmain.cpp @@ -0,0 +1,801 @@ +#include "stdafx.h" +#include +#include + +BOOL CreateProcessInJob( + HANDLE hJob, + LPCTSTR lpApplicationName, + LPTSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCTSTR lpCurrentDirectory, + LPSTARTUPINFO lpStartupInfo, + LPPROCESS_INFORMATION ppi) +{ + BOOL fRc = CreateProcess( + lpApplicationName, + lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, + bInheritHandles, + dwCreationFlags | CREATE_SUSPENDED, + lpEnvironment, + lpCurrentDirectory, + lpStartupInfo, + ppi); + if (fRc) { + fRc = AssignProcessToJobObject(hJob, ppi->hProcess); + if (fRc && !(dwCreationFlags & CREATE_SUSPENDED)) { + fRc = ResumeThread(ppi->hThread) != (DWORD)-1; + } + if (!fRc) { + TerminateProcess(ppi->hProcess, 0); + CloseHandle(ppi->hProcess); + CloseHandle(ppi->hThread); + ppi->hProcess = ppi->hThread = nullptr; + } + } + return fRc; +} + +HWND WindowHandle; +static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) +{ + DWORD lpdwProcessId; + GetWindowThreadProcessId(hwnd, &lpdwProcessId); + if (lpdwProcessId == GetCurrentProcessId()) + { + if (IsWindowVisible(hwnd)) + { + WindowHandle = hwnd; + } + } + return TRUE; +} + +std::string sExtractionWaveConfigs = "Default"; +int nExtractionWaveEnemyMultiplier = 1; +int nExtractionWaveEnemyRandomRangeMin = 0; +int nExtractionWaveEnemyRandomRangeMax = 4; +int GetRandomInt(int range_begin, int range_end) +{ + static std::random_device rd; + static std::mt19937 gen(rd()); + std::uniform_int_distribution<> dis(range_begin, range_end); + return dis(gen); +} + +namespace ExtractionSubWaveEnemy +{ + int curWaveEnemyCount = 0; + int curStartConditionType = 0; + injector::hook_back hbappAtoi; + int __cdecl appAtoi(const char* String) + { + auto i = hbappAtoi.fun(String); + if (iequals(sExtractionWaveConfigs, "Random")) + i *= GetRandomInt(nExtractionWaveEnemyRandomRangeMin, nExtractionWaveEnemyRandomRangeMax); + else + i *= nExtractionWaveEnemyMultiplier; + curWaveEnemyCount += i; + return i; + } +} + +bool (WINAPI* GetOverloadedFilePathA)(const char* lpFilename, char* out, size_t out_size) = nullptr; +namespace FFileManagerArc +{ + SafetyHookInline shLookup{}; + void* __fastcall Lookup(void* pFFileManagerArc, void* edx, const char* path) + { + //std::string s(MAX_PATH, '\0'); + if (GetOverloadedFilePathA(path, nullptr/*s.data()*/, 0/*s.size()*/)) + return nullptr; + return shLookup.fastcall(pFFileManagerArc, edx, path); + } +} + +namespace l3d +{ + using LeadOptions = float*; + LeadOptions* (*GetResource)() = nullptr; + LeadOptions Lead_GetOptions(LeadOptions* lead) + { + return lead[2]; + } +} + +float fScreenCullBias = 0.0f; +float fFOVDiff = 1.0f; +SafetyHookInline shTriggerScreenCullBias{}; +void __cdecl TriggerScreenCullBias(char bStickyCamState) +{ + auto options = l3d::Lead_GetOptions(l3d::GetResource()); + + // original code + //if (bStickyCamState) + // options[130] = 0.3f; + //else + // options[130] = 1.0f; + + if (!fScreenCullBias) // disable culling + options[130] = 0.0001f; + else + options[130] = fScreenCullBias / fFOVDiff; +} + +namespace UI +{ + namespace ScenePause + { + void* pUI = nullptr; + void* pUnk = nullptr; + SafetyHookInline shOnRadarChanged{}; + uint8_t __fastcall OnRadarChanged(void* ui, void* edx, void* a2, int value) // uint8_t UI::ScenePause::OnRadarChanged(Slot*, unsigned int) + { + pUI = ui; + pUnk = a2; + return shOnRadarChanged.fastcall(ui, edx, a2, value); + } + } +} + +namespace HudRadar +{ + char (*HudRadarEnabled)() = nullptr; +} + +namespace UInputManager +{ + injector::hook_back hbThrowAction; + injector::hook_back hbClearKey; + + bool bIsInventoryCombo = false; + + enum eInputAction + { + eCover = 0x6, + eInventoryClearKB = 0x18, + eInventoryClearPad = 0xE, + eInventoryOpenKB = 0x67, + eInventoryHeldKB = 0x68, + eInventoryOpenPad = 0x3D, + eInventoryHeldPad = 0x3F, + }; + + void __fastcall ThrowActionOnKeyPressed(void* _this, void* edx, int InputAction) + { + if (InputAction != eInventoryOpenKB && InputAction != eInventoryOpenPad) + { + if (InputAction == eCover) + { + if (bIsInventoryCombo) + { + if (UI::ScenePause::pUI && HudRadar::HudRadarEnabled && UI::ScenePause::pUnk) + UI::ScenePause::shOnRadarChanged.fastcall(UI::ScenePause::pUI, (void*)UI::ScenePause::shOnRadarChanged.target(), UI::ScenePause::pUnk, !HudRadar::HudRadarEnabled()); + } + } + } + return hbThrowAction.fun(_this, edx, InputAction); + } + + void __fastcall ThrowActionOnKeyHeld(void* _this, void* edx, int eInputAction) + { + if (eInputAction == eInventoryHeldKB || eInputAction == eInventoryHeldPad) + bIsInventoryCombo = true; + return hbThrowAction.fun(_this, edx, eInputAction); + } + + void __fastcall ClearKey(void* _this, void* edx, char eButton) + { + if (eButton == eInventoryClearKB || eButton == eInventoryClearPad) + bIsInventoryCombo = false; + return hbClearKey.fun(_this, edx, eButton); + } +} + +void Init() +{ + CIniReader iniReader(""); + auto bSkipIntro = iniReader.ReadInteger("MAIN", "SkipIntro", 1) != 0; + auto bDisableNegativeMouseAcceleration = iniReader.ReadInteger("MAIN", "DisableNegativeMouseAcceleration", 1) != 0; + auto bUltraWideSupport = iniReader.ReadInteger("MAIN", "UltraWideSupport", 1) != 0; + static auto fFOVFactor = std::clamp(iniReader.ReadFloat("MAIN", "FOVFactor", 1.0f), 0.5f, 2.5f); + fScreenCullBias = std::clamp(iniReader.ReadFloat("MAIN", "ScreenCullBias", 0.0f), 0.0f, 1.0f); + + sExtractionWaveConfigs = iniReader.ReadString("EXTRACTION", "ExtractionWaveConfigs", "Default"); + nExtractionWaveEnemyMultiplier = std::clamp(iniReader.ReadInteger("EXTRACTION", "ExtractionWaveEnemyMultiplier", 1), 1, 9999); + nExtractionWaveEnemyRandomRangeMin = std::clamp(iniReader.ReadInteger("EXTRACTION", "ExtractionWaveEnemyRandomRangeMin", 0), 0, 9999); + nExtractionWaveEnemyRandomRangeMax = std::clamp(iniReader.ReadInteger("EXTRACTION", "ExtractionWaveEnemyRandomRangeMax", 4), 1, 9999); + + static auto sReinforcementsNumber = iniReader.ReadString("HUNTER", "ReinforcementsNumber", "Default"); + static auto nReinforcementsEnemyMultiplier = std::clamp(iniReader.ReadInteger("HUNTER", "ReinforcementsEnemyMultiplier", 1), 1, 9999); + static auto nReinforcementsEnemyRandomRangeMin = std::clamp(iniReader.ReadInteger("HUNTER", "ReinforcementsEnemyRandomRangeMin", 1), 1, 9999); + static auto nReinforcementsEnemyRandomRangeMax = std::clamp(iniReader.ReadInteger("HUNTER", "ReinforcementsEnemyRandomRangeMax", 1), 1, 9999); + + auto bDisableMissionFailOnDetection = iniReader.ReadInteger("GHOST", "DisableMissionFailOnDetection", 1) != 0; + + auto bUnlockDLC = iniReader.ReadInteger("UNLOCKS", "UnlockDLC", 1) != 0; + static auto bUnlockAllNonCampaignMissions = iniReader.ReadInteger("UNLOCKS", "UnlockAllNonCampaignMissions", 1) != 0; + static auto bUnlockAllCampaignMissions = iniReader.ReadInteger("UNLOCKS", "UnlockAllCampaignMissions", 0) != 0; + + auto bToggleRadarHotkey = iniReader.ReadInteger("RADAR", "ToggleRadarHotkey", 0) != 0; + + auto sDedicatedServerExePath = iniReader.ReadString("STARTUP", "DedicatedServerExePath", ""); + + if (!sDedicatedServerExePath.empty()) + { + std::error_code ec; + auto dsPath = std::filesystem::path(sDedicatedServerExePath); + auto processPath = dsPath.is_absolute() ? dsPath : (GetExeModulePath() / dsPath); + auto workingDir = std::filesystem::path(processPath).remove_filename(); + if (std::filesystem::exists(dsPath, ec)) + { + HANDLE hJob = CreateJobObject(nullptr, nullptr); + JOBOBJECT_EXTENDED_LIMIT_INFORMATION info = { }; + info.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &info, sizeof(info)); + STARTUPINFO si = { sizeof(si) }; + PROCESS_INFORMATION pi; + if (CreateProcessInJob(hJob, + processPath.c_str(), + NULL, + nullptr, nullptr, FALSE, CREATE_NO_WINDOW, + nullptr, workingDir.c_str(), &si, &pi)) { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + } + } + + //allow loading unpacked files + { + ModuleList dlls; + dlls.Enumerate(ModuleList::SearchLocation::LocalOnly); + for (auto& e : dlls.m_moduleList) + { + auto m = std::get(e); + if (IsModuleUAL(m)) { + GetOverloadedFilePathA = (decltype(GetOverloadedFilePathA))GetProcAddress(m, "GetOverloadedFilePathA"); + break; + } + } + + if (GetOverloadedFilePathA) + { + auto pattern = hook::pattern("55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC 1C 53 56 57 A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B F1 8B 45 08"); + FFileManagerArc::shLookup = safetyhook::create_inline(pattern.get_first(), FFileManagerArc::Lookup); + } + } + + // Resolution + auto pattern = hook::pattern("A3 ? ? ? ? 8B 8E ? ? ? ? 89 0D"); + static int* pViewportResolutionWidth = *pattern.get_first(1); + static int* pViewportResolutionHeight = *pattern.get_first(13); + + //UnrealMain + pattern = hook::pattern("0F 84 ? ? ? ? 56 56 56 68 ? ? ? ? 68 ? ? ? ? 68 ? ? ? ? E8 ? ? ? ? 83 C4 18 50 8D 8D"); + injector::WriteMemory(pattern.get_first(), 0xE990, true); //jz -> jmp + + if (bSkipIntro) + { + //InitBootVideos + auto pattern = hook::pattern("E8 ? ? ? ? E8 ? ? ? ? E8 ? ? ? ? 8B E5"); + injector::MakeNOP(pattern.get_first(5), 5, true); + + static int nOnce = 0; + std::thread([]() + { + while (true) + { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + EnumWindows(EnumWindowsProc, NULL); + if (nOnce == 1) + { + if (WindowHandle == GetForegroundWindow()) + { + if ((GetAsyncKeyState(VK_MENU) & 0xF000) == 0) + { + keybd_event(VK_RETURN, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0); + keybd_event(VK_RETURN, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); + } + } + } + else if (nOnce == 2) + break; + } + }).detach(); + + static auto kbd = safetyhook::create_mid(0x164A351, [](SafetyHookContext& regs) + { + nOnce = 1; + }); + + static auto kbd2 = safetyhook::create_mid(0x1648E97, [](SafetyHookContext& regs) + { + nOnce = 2; + }); + } + + if (bDisableNegativeMouseAcceleration) + { + auto pattern = hook::pattern("0F 28 CA EB 13 0F 57 ED"); + injector::MakeNOP(pattern.get_first(0), 3, true); + + pattern = hook::pattern("0F 28 C8 F3 0F 10 07"); + injector::MakeNOP(pattern.get_first(0), 3, true); + + pattern = hook::pattern("0F 28 C2 EB 15 0F 57 D2"); + injector::MakeNOP(pattern.get_first(0), 3, true); + + pattern = hook::pattern("0F 28 C3 D9 86"); + injector::MakeNOP(pattern.get_first(0), 3, true); + } + + { + pattern = hook::pattern("E8 ? ? ? ? 83 C4 04 89 45 E4 85 C0 0F 84"); // quantity in ExtractionWaveConfigXMLParser::LoadSubWaves + ExtractionSubWaveEnemy::hbappAtoi.fun = injector::MakeCALL(pattern.get_first(0), ExtractionSubWaveEnemy::appAtoi).get(); + + pattern = hook::pattern("E8 ? ? ? ? 83 C4 0C 85 C0 75 0C 8B 45 E8"); // ExtractionWaveConfigXMLParser::LoadSubWaves + static auto KillCountSoftlockFix = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + auto type = std::string_view((const char*)regs.esi); + int value = regs.edi; + if (type == "Kills") + { + if (ExtractionSubWaveEnemy::curWaveEnemyCount < value) + { + value = ExtractionSubWaveEnemy::curWaveEnemyCount; + regs.edi = value; + regs.eax = value; + } + + ExtractionSubWaveEnemy::curStartConditionType = value; + ExtractionSubWaveEnemy::curWaveEnemyCount = 0; + } + else + { + ExtractionSubWaveEnemy::curStartConditionType = 0; + ExtractionSubWaveEnemy::curWaveEnemyCount = 0; + } + }); + } + + { + //AECoopHunterSpawner + auto pattern = hook::pattern("85 5E 08 75 29 8B 06 8B 50 0C 6A 04 8D 8F ? ? ? ? 51 8B CE FF D2 85 5E 08 75 12 8B 06 8B 50 0C 6A 04 8D 8F ? ? ? ? 51 8B CE FF D2 F6 46 08 02"); + static auto FCheckpointPackReaderHook = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + if (iequals(sReinforcementsNumber, "Random")) + *(uint32_t*)(regs.edi + 0x370) = GetRandomInt(nReinforcementsEnemyRandomRangeMin, nReinforcementsEnemyRandomRangeMax); + }); + + pattern = hook::pattern("8B 16 8B 82 ? ? ? ? 8B CE FF D0 8B 16 8B 82 ? ? ? ? 8B CE FF D0 C6 86"); + static auto AECoopHunterSpawnerHook = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + if (iequals(sReinforcementsNumber, "Random")) + *(uint32_t*)(regs.esi + 0x370) = GetRandomInt(nReinforcementsEnemyRandomRangeMin, nReinforcementsEnemyRandomRangeMax); + else + *(uint32_t*)(regs.esi + 0x370) *= nReinforcementsEnemyMultiplier; + }); + } + + if (bDisableMissionFailOnDetection) + { + auto pattern = hook::pattern("0F 86 ? ? ? ? 0F B6 8E"); + injector::WriteMemory(pattern.get_first(), 0xE990, true); // jbe -> jmp + } + + if (bUnlockDLC) + { + //NetOnlineContentRightsManager::GetUnlocksFromSaveGame + auto pattern = find_pattern("74 04 C6 40 04 01 56"); + injector::MakeNOP(pattern.get_first(), 2, true); + + pattern = find_pattern("39 5E 38 74 2C"); + injector::MakeNOP(pattern.get_first(), 5, true); + static auto SPHelmetSuitC = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + *(uint32_t*)(regs.esi + 0x38) = regs.ebx; + }); + + pattern = find_pattern("39 5E 3C 74 27"); + injector::MakeNOP(pattern.get_first(), 5, true); + static auto SPBootsSuitL = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + *(uint32_t*)(regs.esi + 0x3C) = regs.ebx; + }); + + pattern = find_pattern("39 5E 40 74 27"); + injector::MakeNOP(pattern.get_first(), 5, true); + static auto SPGlovesSuitL = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + *(uint32_t*)(regs.esi + 0x40) = regs.ebx; + }); + } + + if (bUnlockAllNonCampaignMissions || bUnlockAllCampaignMissions) + { + auto pattern = find_pattern("89 86 ? ? ? ? 8B 8E ? ? ? ? 6A 00"); + injector::MakeNOP(pattern.get_first(), 6, true); + static auto SC6Mission__SerializeProfile = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + auto& MissionEnum = *(uint8_t*)(regs.esi + 0xA4); + auto& MissionStatusEnum = *(uint32_t*)(regs.esi + 0xB4); + MissionStatusEnum = regs.eax; + + if (!MissionStatusEnum) + { + if (bUnlockAllNonCampaignMissions && MissionEnum >= 13 && MissionEnum <= 16) // briggs + MissionStatusEnum = 1; + if (bUnlockAllNonCampaignMissions && MissionEnum >= 13 && MissionEnum <= 28) // grim + MissionStatusEnum = 1; + + if (bUnlockAllCampaignMissions) + { + if (MissionEnum && MissionEnum <= 12) + { + MissionStatusEnum = 1; + } + + if (MissionEnum == 21 || MissionEnum == 37 || MissionEnum == 38) + { + MissionStatusEnum = 1; + } + } + } + }); + } + + if (!sExtractionWaveConfigs.empty() && !iequals(sExtractionWaveConfigs, "Default")) + { + std::error_code ec; + std::string prefix = GetOverloadedFilePathA ? "..\\..\\" : ".\\update\\"; + std::filesystem::path xmlPathDefault = prefix + std::string("Data\\ExtractionWaveConfigs\\") + sExtractionWaveConfigs + "\\DefaultWaveConfig.xml"; + std::filesystem::path xmlPath = prefix + std::string("Data\\ExtractionWaveConfigs\\") + sExtractionWaveConfigs + "\\%s.xml"; + auto p = GetExeModulePath() / std::filesystem::path(xmlPath).remove_filename(); + + if (std::filesystem::exists(p / "D_Amman.xml", ec) && std::filesystem::exists(p / "D_Bratislava.xml", ec) && std::filesystem::exists(p / "D_Kigali.xml", ec) && std::filesystem::exists(p / "D_Sanaa.xml", ec)) + { + static std::string s = xmlPath.string(); + auto pattern = find_pattern("68 ? ? ? ? E8 ? ? ? ? 83 C4 08 50 8D 4D D8 E8 ? ? ? ? BB"); + injector::WriteMemory(pattern.get_first(1), s.data(), true); + } + + if (std::filesystem::exists(GetExeModulePath() / xmlPathDefault, ec)) + { + static std::string s = xmlPathDefault.string(); + auto pattern = find_pattern("68 ? ? ? ? E8 ? ? ? ? 8B F0 83 C4 08 39 75 D8 74 3D 80 3E 00 74 0C 56 E8 ? ? ? ? 83 C4 04 40 EB 02 33 C0 89 45 DC 39 45 E0 7D 10 6A 01 8D 4D D8 89 45 E0 E8 ? ? ? ? 8B 45 DC 85 C0"); + injector::WriteMemory(pattern.get_first(1), s.data(), true); + } + } + + static constexpr float fDefaultAspectRatio = 16.0f / 9.0f; + + static auto GetAspectRatio = []() -> float + { + if (!pViewportResolutionWidth || !pViewportResolutionHeight || *pViewportResolutionWidth == -1 || *pViewportResolutionHeight == -1) + return fDefaultAspectRatio; + return static_cast(*pViewportResolutionWidth) / static_cast(*pViewportResolutionHeight); + }; + + if (bUltraWideSupport) + { + auto pattern = find_pattern("F3 0F 10 45 ? 0F 5A C9 0F 5A C0 F2 0F 5E C1 F2 0F 59 05", "F3 0F 10 45 ? 8B 46 34 0F 5A C9"); + injector::MakeNOP(pattern.get_first(), 5, true); + static auto BootSeqCommon__Render_Bink_textures = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + regs.xmm0.f32[0] = (((*(float*)(regs.ebp + 0x14)) * fDefaultAspectRatio) - regs.xmm1.f32[0]) * (-0.5f); + else + regs.xmm0.f32[0] = *(float*)(regs.ebp + 0x20); + }); + + pattern = hook::pattern("F2 0F 10 0D ? ? ? ? F2 0F 10 15 ? ? ? ? 89 47 10"); + injector::MakeNOP(pattern.get_first(), 8, true); + static auto FCanvasUtil__SetViewport = safetyhook::create_mid(pattern.get_first(), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + regs.xmm1.f64[0] = 2.0 / (GetAspectRatio() / fDefaultAspectRatio); + else + regs.xmm1.f64[0] = 2.0; + }); + + //NetOnlineManager::NetOnlineManager + pattern = hook::pattern("C7 45 ? ? ? ? ? 8D 64 24 00 53"); + injector::WriteMemory(pattern.get_first(3), 4372, true); + + //UD3DRenderDevice + pattern = hook::pattern("76 23 8B 06"); + injector::WriteMemory(pattern.get_first(0), 0xEB, true); //jbe -> jmp + + //UD3DRenderDevice Letterbox + pattern = hook::pattern("76 10 8B 03 8B 4D 10 89 06 8B 11"); + struct UD3DRenderDevice__Letterbox + { + void operator()(injector::reg_pack& regs) + { + regs.eax = *(uintptr_t*)regs.ebx; + regs.ecx = *(uintptr_t*)(regs.ebp + 0x10); + *(uintptr_t*)regs.esi = regs.eax; //1920 + regs.edx = *(uintptr_t*)regs.ecx; + *(uintptr_t*)regs.edi = regs.edx; //823 + + if (float(regs.eax) / float(regs.edx) > fDefaultAspectRatio) + { } + else + { + *(uintptr_t*)regs.esi = regs.eax; + *(uintptr_t*)regs.edi = int((float)regs.eax / fDefaultAspectRatio); + } + } + }; injector::MakeInline(pattern.get_first(0), pattern.get_first(13)); + + pattern = hook::pattern("F3 0F 11 04 24 50 8B 85 ? ? ? ? 51 52 50 57"); + if (!pattern.count_hint(1).empty()) + { + static auto D3DRenderer__RenderHUD = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + { + auto& a2 = regs.edi; + auto& x = *(uint32_t*)(regs.ebp - 0xAC); + auto& y = regs.edx; + auto& w = regs.ecx; + auto& h = regs.eax; + + auto width = (float)h * fDefaultAspectRatio; + x = (int)(((float)w - width) * 0.5f); + w = (int)width; + } + }); + } + else + { + pattern = hook::pattern("F3 0F 11 04 24 52 8B 95"); + static auto D3DRenderer__RenderHUD = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + { + auto& a2 = regs.esi; + auto& x = *(uint32_t*)(regs.ebp - 0xB4); + auto& y = regs.ecx; + auto& w = regs.eax; + auto& h = regs.edx; + + auto width = (float)h * fDefaultAspectRatio; + x = (int)(((float)w - width) * 0.5f); + w = (int)width; + } + }); + } + + pattern = hook::pattern("F3 0F 10 0D ? ? ? ? F3 0F 11 4C 24 ? 05 ? ? ? ? 66 0F 5A C0 F3 0F 11 04 24 50 8B 45 08 50 E8 ? ? ? ? 83 C4 10 5D C3"); + injector::MakeNOP(pattern.count(2).get(0).get(0), 8, true); + static auto ScreenFade1 = safetyhook::create_mid(pattern.count(2).get(0).get(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + regs.xmm1.f32[0] = 1.0f / (GetAspectRatio() / fDefaultAspectRatio); + else + regs.xmm1.f32[0] = 1.0f; + }); + + static auto ScreenFade2 = safetyhook::create_mid(pattern.count(2).get(1).get(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + regs.xmm1.f32[0] = 1.0f / (GetAspectRatio() / fDefaultAspectRatio); + else + regs.xmm1.f32[0] = 1.0f; + }); + + pattern = hook::pattern("F2 0F 59 05 ? ? ? ? 0F 57 C9 F3 0F 2A CF"); + injector::MakeNOP(pattern.get_first(0), 8, true); + static auto UI_Alignment1 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + regs.xmm0.f64[0] *= GetAspectRatio() * 720.0f; + else + regs.xmm0.f64[0] *= 1280.0f; + }); + + pattern = hook::pattern("F3 0F 10 46 ? 0F 5A C0 F2 0F 59 05 ? ? ? ? 0F 57 C9 F3 0F 2A CB"); + static auto UI_Alignment2 = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + *(float*)regs.eax = (720.0f * GetAspectRatio() - 1280.0f) * -0.5f + *(float*)(regs.eax); + else + regs.xmm0.f32[0] = *(float*)(regs.esi + 0x40); + }); + + pattern = find_pattern("F3 0F 10 46 ? F3 0F 11 85 ? ? ? ? 8D 85", "F3 0F 10 05 ? ? ? ? F3 0F 11 44 24 ? 8D 14 24"); + static auto UI__ScenePause__PerformPauseOption = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + regs.xmm0.f32[0] = GetAspectRatio(); + else + regs.xmm0.f32[0] = *(float*)(regs.esi + 0x50); + }); + + // Disable Blood Overlay + pattern = hook::pattern("F3 0F 11 2C 24 E8 ? ? ? ? 8B 86"); + injector::MakeNOP(pattern.get_first(0), 5, true); + static auto UI__HudHealthFeedback__SceneTick = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + *(float*)(regs.esp) = 0.0f; + else + *(float*)(regs.esp) = regs.xmm5.f32[0]; + }); + + // Disable Fading + pattern = hook::pattern("89 96 ? ? ? ? F3 0F 11 86 ? ? ? ? F3 0F 11 86 ? ? ? ? 5E"); + injector::MakeNOP(pattern.get_first(0), 6, true); + static auto Lead_DoFade = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + { + if (GetAspectRatio() > fDefaultAspectRatio) + *(uint32_t*)(regs.esi + 0x7FC) = 0; + else + *(uint32_t*)(regs.esi + 0x7FC) = regs.edx; + }); + } + + // FOV + { + pattern = hook::pattern("F3 0F 10 46 ? 0F 57 E4 0F 2E C4"); + struct CameraImpl__UpdateFOV + { + void operator()(injector::reg_pack& regs) + { + float val = 0.0f; + + _asm { fstp dword ptr[val] } + + fFOVDiff = val; + if (GetAspectRatio() > fDefaultAspectRatio) + val = AdjustFOV(val, GetAspectRatio(), fDefaultAspectRatio); + + val *= fFOVFactor; + + if (val > 162.5f) + val = 162.5f; + + fFOVDiff = val / fFOVDiff; + + *(float*)(regs.esi + 0x34) = val; + regs.xmm0.f32[0] = val; + + _asm { fld dword ptr[val] } + + TriggerScreenCullBias(false); + } + }; injector::MakeInline(pattern.get_first(0)); + + // Cull + pattern = hook::pattern("55 8B EC E8 ? ? ? ? 8B C8 E8 ? ? ? ? 80 7D 08 00"); + l3d::GetResource = (l3d::LeadOptions*(*)())injector::GetBranchDestination(pattern.get_first(3), true).as_int(); + shTriggerScreenCullBias = safetyhook::create_inline(pattern.get_first(), TriggerScreenCullBias); + } + + if (bToggleRadarHotkey) + { + // leads to crashing + auto pattern = hook::pattern("55 8B EC 6A FF 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC 4C 53 56 57 A1 ? ? ? ? 33 C5 50 8D 45 F4 64 A3 ? ? ? ? 8B D9 83 7D 0C 00"); + UI::ScenePause::shOnRadarChanged = safetyhook::create_inline(pattern.get_first(), UI::ScenePause::OnRadarChanged); + + //pattern = hook::pattern("E8 ? ? ? ? 8B 8E ? ? ? ? 51 8B 8E ? ? ? ? E8 ? ? ? ? 8B 8E ? ? ? ? E8"); + //static auto UI__ScenePause__InitSlots = safetyhook::create_mid(pattern.get_first(0), [](SafetyHookContext& regs) + //{ + // UI::ScenePause::pUI = (void*)regs.ecx; + // UI::ScenePause::pUnk = (void*)(regs.ecx + 0x68C); + //}); + + // this is not ideal + pattern = hook::pattern("E8 ? ? ? ? 8B 7F 1C 83 FF 3F"); + UInputManager::hbThrowAction.fun = injector::MakeCALL(pattern.get_first(0), UInputManager::ThrowActionOnKeyHeld).get(); + pattern = hook::pattern("E8 ? ? ? ? 8B 4F 1C 83 F9 3F"); + UInputManager::hbThrowAction.fun = injector::MakeCALL(pattern.get_first(0), UInputManager::ThrowActionOnKeyPressed).get(); + pattern = hook::pattern("E8 ? ? ? ? 8B 46 28 85 C0 74 52"); + UInputManager::hbClearKey.fun = injector::MakeCALL(pattern.get_first(0), UInputManager::ClearKey).get(); + pattern = hook::pattern("55 8B EC 83 EC 14 C6 45 FF 00"); + HudRadar::HudRadarEnabled = (char (*)())pattern.get_first(); + } +} + +std::string currentGogglesLight = "LightGreen"; +int __cdecl appStricmpHook(const char* String1, const char* String2) +{ + auto ret = _stricmp(String1, String2); + if (!ret) + currentGogglesLight = String1; + else + currentGogglesLight = "LightGreen"; + return ret; +} + +void InitLED() +{ + CIniReader iniReader(""); + auto bLightSyncRGB = iniReader.ReadInteger("LOGITECH", "LightSyncRGB", 1); + + if (bLightSyncRGB) + { + //LoadoutCommon::FsBaseLoadout::GetSuitLightColor + auto pattern = hook::pattern("E8 ? ? ? ? 83 C4 08 85 C0 0F 84 ? ? ? ? 46 83 FE 0A"); + injector::MakeCALL(pattern.get_first(0), appStricmpHook, true); + + LEDEffects::Inject([]() + { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + auto [R, G, B] = LEDEffects::RGBtoPercent(17, 138, 41, 1.0f); + + if (std::string_view(currentGogglesLight) == "LightGreen") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(17, 138, 41, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightPaleOrange") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(158, 118, 29, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightRed") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(163, 18, 15, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightBlue") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(24, 70, 213, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightPink") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(163, 33, 116, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightPurple") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(111, 34, 210, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightWhite") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(162, 182, 208, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightGold") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(145, 172, 30, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightOrange") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(161, 89, 12, 1.0f); + } + else if (std::string_view(currentGogglesLight) == "LightPaleBlue") + { + std::tie(R, G, B) = LEDEffects::RGBtoPercent(23, 159, 205, 1.0f); + } + + LEDEffects::SetLighting(R, G, B, false, false, false); + }); + } +} + +CEXP void InitializeASI() +{ + std::call_once(CallbackHandler::flag, []() + { + CallbackHandler::RegisterCallbackAtGetSystemTimeAsFileTime(Init, hook::pattern("0F 84 ? ? ? ? 56 56 56 68 ? ? ? ? 68 ? ? ? ? 68 ? ? ? ? E8 ? ? ? ? 83 C4 18 50 8D 8D")); + CallbackHandler::RegisterCallbackAtGetSystemTimeAsFileTime(InitLED, hook::pattern("E8 ? ? ? ? 83 C4 08 85 C0 0F 84 ? ? ? ? 46 83 FE 0A")); + }); +} + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) +{ + if (reason == DLL_PROCESS_ATTACH) + { + if (!IsUALPresent()) { InitializeASI(); } + } + else if (reason == DLL_PROCESS_DETACH) + { + + } + return TRUE; +} \ No newline at end of file diff --git a/source/SplinterCellConviction.FusionMod/dllmain.cpp b/source/SplinterCellConviction.FusionMod/dllmain.cpp index 49ea5e7c4..5ef3f3731 100644 --- a/source/SplinterCellConviction.FusionMod/dllmain.cpp +++ b/source/SplinterCellConviction.FusionMod/dllmain.cpp @@ -1,13 +1,17 @@ #include "stdafx.h" +#include float gVisibility = 1.0f; int32_t gBlacklistIndicators = 0; +bool bDisableBlackAndWhiteFilter = false; injector::hook_back hb_8330DB; void __cdecl sub_8330DB(float a1, float a2, int a3) { gVisibility = a1; - //return hb_8330DB.fun(a1, a2, a3); + + if (!bDisableBlackAndWhiteFilter) + return hb_8330DB.fun(a1, a2, a3); } injector::hook_back hb_100177B7; @@ -41,7 +45,7 @@ void Init() CIniReader iniReader(""); auto bSkipIntro = iniReader.ReadInteger("MAIN", "SkipIntro", 1) != 0; auto bSkipSystemDetection = iniReader.ReadInteger("MAIN", "SkipSystemDetection", 1) != 0; - auto bDisableBlackAndWhiteFilter = iniReader.ReadInteger("MAIN", "DisableBlackAndWhiteFilter", 0) != 0; + bDisableBlackAndWhiteFilter = iniReader.ReadInteger("MAIN", "DisableBlackAndWhiteFilter", 0) != 0; auto bDisableCharacterLighting = iniReader.ReadInteger("MAIN", "DisableCharacterLighting", 0) != 0; if (bSkipIntro) @@ -57,7 +61,7 @@ void Init() injector::MakeRET(pattern.get_first(3)); } - if (bDisableBlackAndWhiteFilter) //light and shadow + //if (bDisableBlackAndWhiteFilter) //light and shadow { auto pattern = hook::pattern("E8 ? ? ? ? D9 05 ? ? ? ? 83 C4 0C 33 F6 56 51"); hb_8330DB.fun = injector::MakeCALL(pattern.get_first(), sub_8330DB, true).get(); @@ -157,12 +161,43 @@ void InitLeadD3DRender() } } +void InitLED() +{ + CIniReader iniReader(""); + auto bLightSyncRGB = iniReader.ReadInteger("LOGITECH", "LightSyncRGB", 1); + + if (bLightSyncRGB) + { + LEDEffects::Inject([]() + { + static auto fPlayerVisibility = gVisibility; + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + auto gVisCmp = static_cast(static_cast(gVisibility * 10.0f)) / 10.0f; + auto fPlVisCmp = static_cast(static_cast(fPlayerVisibility * 10.0f)) / 10.0f; + + if (fPlVisCmp > gVisCmp) + fPlayerVisibility -= 0.05f; + else if (fPlVisCmp < gVisCmp) + fPlayerVisibility += 0.05f; + + constexpr auto minBrightness = 0.3f; + constexpr auto maxBrightness = 1.0f; + + fPlayerVisibility = std::clamp(fPlayerVisibility, minBrightness, maxBrightness); + + auto [R, G, B] = LEDEffects::RGBtoPercent(255, 39, 26, gBlacklistIndicators ? fPlayerVisibility : ((maxBrightness + minBrightness) - fPlayerVisibility)); + LEDEffects::SetLighting(R, G, B, false, false, false); + }); + } +} + CEXP void InitializeASI() { std::call_once(CallbackHandler::flag, []() { - CallbackHandler::RegisterCallback(Init, hook::pattern("D9 1C 24 E8 ? ? ? ? D9 5E 0C")); + CallbackHandler::RegisterCallbackAtGetSystemTimeAsFileTime(Init, hook::pattern("D9 1C 24 E8 ? ? ? ? D9 5E 0C")); CallbackHandler::RegisterCallback(L"LeadD3DRender.dll", InitLeadD3DRender); + CallbackHandler::RegisterCallbackAtGetSystemTimeAsFileTime(InitLED, hook::pattern("D9 1C 24 E8 ? ? ? ? D9 5E 0C")); }); }