Skip to content
Snippets Groups Projects
Commit 7a067fff authored by Rsge's avatar Rsge
Browse files

v2.0.0 - Lots of improvements to user-friendliness:

- Auto-detect 7-Zip and Civ V install dirs
- Auto-detect and delete duplicate vanilla files in mods
- Renamed files for higher clarity
- Updated process doc
parent 91ea16c5
Branches
No related tags found
No related merge requests found
Add UI_bc1 folder to MP_MODSPACK
Replace:
IGE-Mod: IGE_Window.lua --> EUI compatible
EUI: UnitPanel.lua --> mod compatible
EUI: CityBannerManager.lua, CityView.lua & Highlights.xml --> Unlocked recolored
Add "ContextPtr:LoadNewContext"-Parts from old UI files to UI_bc1 in:
CityView.lua
InGame.lua
LeaderHeadRoot.lua
UnitPanel.lua (EvilSpiritsMission, THTanukiMission)
Delete:
Old UI folder
BNW Mass Effect (v 7)\Dummy Building Folder\CivilopediaScreen.lua
BNW Mass Effect (v 7)\Dummy Building Folder\CityView.lua
Touhou - Evil Spirits (v 2)\Lua\UnitPanel.lua
Touhou - Probability Space Hypervessel (v 1)\Lua\TechTree.lua
Touhou - Probability Space Hypervessel (v 1)\Lua\TechButtonInclude.lua
\ No newline at end of file
......@@ -4,7 +4,7 @@
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>ea28d07f-cd43-45d1-b01d-1eeeb360d215</ProjectGuid>
<ProjectHome>.</ProjectHome>
<StartupFile>EUI_Converter.py</StartupFile>
<StartupFile>converter.py</StartupFile>
<SearchPath>
</SearchPath>
<WorkingDirectory>.</WorkingDirectory>
......@@ -21,10 +21,10 @@
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
</PropertyGroup>
<ItemGroup>
<Compile Include="EUI_Converter.py" />
<Content Include="Process.txt" />
</ItemGroup>
<ItemGroup>
<Content Include="Process.txt" />
<Compile Include="converter.py" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
<!-- Uncomment the CoreCompile target to enable the Build command in
......
......@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31019.35
MinimumVisualStudioVersion = 10.0.40219.1
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "EUI_Converter", "EUI_Converter.pyproj", "{EA28D07F-CD43-45D1-B01D-1EEEB360D215}"
Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "EUI_Modpack_Converter", "EUI_Modpack_Converter.pyproj", "{EA28D07F-CD43-45D1-B01D-1EEEB360D215}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{081253F6-C547-4C81-B928-0D7472199986}"
ProjectSection(SolutionItems) = preProject
......
(Delete previous MP_MODSPACK and EUI folder)
(Create CUC EUI)
Unzip EUI & modpack
Replace:
IGE-Mod: IGE_Window.lua --> EUI compatible
EUI: UnitPanel.lua --> Mod compatible
EUI: CityBannerManager.lua, CityView.lua & Highlights.xml --> Colored unlocked citizens
Add "ContextPtr:LoadNewContext"-Parts from old UI and mod files to UI_bc1 in:
CityView.lua
InGame.lua
LeaderHeadRoot.lua
UnitPanel.lua - manually, e.g.:
EvilSpiritsMission
THTanukiMission
Move UI_bc1 folder to modpack folder
Delete:
Default UI folder
Duplicate UI files in mods - e.g.:
BNW Mass Effect (v 7)\Dummy Building Folder\CivilopediaScreen.lua
BNW Mass Effect (v 7)\Dummy Building Folder\CityView.lua
Touhou - Evil Spirits (v 2)\Lua\UnitPanel.lua
Touhou - Probability Space Hypervessel (v 1)\Lua\TechTree.lua
Touhou - Probability Space Hypervessel (v 1)\Lua\TechButtonInclude.lua
\ No newline at end of file
#!/usr/bin/env python
#######################################################
# #
# © 2022 - MPL 2.0 - Rsge - v2.0.0 #
# https://github.com/Rsge/Civ-V-EUI-Modpack-Converter #
# #
# WINDOWS ONLY! #
# #
#######################################################
# TODO Auto-detection of unit UI changing elements in mods possible?
# Imports
import os
import winreg as wr
from os.path import join as j
from glob import glob as g
import subprocess
import shutil
import re
## Global Values
print("Configuring variables...")
# Names
# Customize these according to your setup #
vanilla_eui_zip = "!EUI.7z" # Vanilla EUI file (in vanilla_packs_folder)
modded_eui_zip = "!EUI_CUC.7z" # CUC-version file name of EUI
modsave_folder = "zzz_Modsaves" # Folder containing this scripts project folder and it's needed edited files
vanilla_packs_folder = "zz_Vanilla_Versions" # Folder containing the vanilla packs
# Ignore these #
modpack_folder_name = "MP_MODSPACK"
eui_cuc_file_names = ["CityBannerManager.lua",
"CityView.lua",
......@@ -26,43 +29,93 @@ eui_cuc_file_names = ["CityBannerManager.lua",
load_tag = "ContextPtr:LoadNewContext"
unit_panel_file_name = "UnitPanel.lua"
ige_compat_file_name = "IGE_Window.lua"
# Maybe you also need to add to these lists #
delete_file_names = ["CivilopediaScreen.lua", # Mod files overwriting original UI files, conflicting with EUI
"CityView.lua",
"TechTree.lua",
"TechButtonInclude.lua",
unit_panel_file_name]
###########################################
# Customize these according to your setup #
###########################################
vanilla_eui_zip = "!EUI.7z" # Vanilla EUI file (in vanilla_packs_folder)
modded_eui_zip = "!EUI_CUC.7z" # CUC-version file name of EUI
vanilla_packs_folder = "zz_Vanilla_Versions" # Folder containing the vanilla packs in DLC folder
unit_panel_modcompat_file_names = ["EvilSpiritsMission.lua", # Mod files adding new actions to units
"THTanukiMission.lua"]
# Don't change from here [if you don't really know what you're doing that is of cause ;)] #
###################################################################################################
# Don't change after here [except if you know what you're doing of cause ;)] #
# #
# YOU'LL NEED 7-ZIP! #
# If you want to use WinRar you'll have to change the methods yourself - or just download 7zip =P #
###################################################################################################
# This only runs with 7zip. If you want to use WinRar you'll have to change the methods yourself - or just download 7zip =P
szip = r"C:\Program Files\7-Zip\7z.exe"
# Closing functions
null = open(os.devnull, 'w')
def quit():
null.close()
print("Done.\n")
input("Press Enter to exit. . .")
exit(0)
def error(msg):
null.close()
print("Error!\n{}\n".format(msg))
input("Press Enter to exit. . .")
exit(1)
# Get file name
def get_file_name(file, get_folder = False):
return file.split(os.sep)[-1]
# Get 7-zip install dir
def get_szip_dir():
key_location = r"SOFTWARE\7-Zip"
value = "Path"
try:
key = wr.OpenKey(wr.HKEY_LOCAL_MACHINE, key_location)
install_dir = wr.QueryValueEx(key, value)[0]
wr.CloseKey(key)
except:
error("No 7-zip installation found!\nIf you insist on using WinRar, change the script yourself ¯\_(ツ)_/¯")
return install_dir
# Get Civ V install dir
def get_civ_install_dir():
key_location = r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\steam app 8930"
value = "installlocation"
try:
key = wr.OpenKey(wr.HKEY_LOCAL_MACHINE, key_location)
install_dir = wr.QueryValueEx(key, value)[0]
wr.CloseKey(key)
except:
error("No Civ 5 installation found!")
return install_dir
# Paths
# Change to base DLC directory
os.chdir("../..")
base_path = os.getcwd()
modsave_path = j(base_path, modsave_folder)
modpack_path = j(base_path, modpack_folder_name)
szip = j(get_szip_dir(), "7z.exe")
modsave_path = j(os.getcwd(), "..")
base_path = j(get_civ_install_dir(), "Assets", "DLC")
vanilla_packs_path = j(base_path, vanilla_packs_folder)
ui_path = j(modpack_path, "UI")
eui_path = j(base_path, "UI_bc1")
eui_folder_path = j(base_path, "UI_bc1")
modpack_path = j(base_path, modpack_folder_name)
ui_folder_path = j(modpack_path, "UI")
# Files
base_eui_zip_path = j(vanilla_packs_path, vanilla_eui_zip)
files_ext = j("**", "*.lua")
base_ui_files = j(base_path, "..", "UI", files_ext)
gnk_ui_files = j(base_path, "Expansion", "UI", files_ext)
bnw_ui_files = j(base_path, "Expansion2", "UI", files_ext)
vanilla_eui_zip_path = j(vanilla_packs_path, vanilla_eui_zip)
modded_eui_zip_path = j(base_path, modded_eui_zip)
mod_files = j(modpack_path, "Mods", "**", "*.lua")
ui_files = j(ui_path, "*.lua")
eui_files = j(eui_path, "*", "*.lua")
mod_files = j(modpack_path, "Mods", files_ext)
ui_files = j(ui_folder_path, files_ext)
eui_files = j(eui_folder_path, files_ext)
# Global Variables
eui_only = False
vanilla_ui_files = []
load_tags = {}
unit_panel_modcompat_needed = False
null = open(os.devnull, 'w')
eui_only = False
# Change working dir to base path
os.chdir(base_path)
# Get modpack zip
while True:
modpack_name = input("\nWhich pack should be converted?\n(Type 'EUI' to just convert EUI)\n")
......@@ -77,35 +130,30 @@ while True:
# Remove previous modpack
print("Removing previous modpack leftovers...")
print("\nRemoving previous modpack and EUI leftovers...")
if os.path.isdir(modpack_path):
shutil.rmtree(modpack_path)
if os.path.isdir(eui_path):
shutil.rmtree(eui_path)
if os.path.isdir(eui_folder_path):
shutil.rmtree(eui_folder_path)
# Compile EUI with colored unlocked citizens
if not os.path.isfile(modded_eui_zip_path):
print("Creating colored unlocked Citizens EUI...")
subprocess.run([szip, 'x', base_eui_zip_path], stdout=null, stderr=null)
#shutil.move(j(vanilla_packs_path, eui_file_name), eui_path)
print("Creating colored unlocked citizens EUI...")
subprocess.run([szip, 'x', vanilla_eui_zip_path], stdout=null, stderr=null)
for eui_cuc_file_name in eui_cuc_file_names:
eui_cuc_file = g(j(modsave_path, eui_cuc_file_name + "*"))[0]
orig_eui_file = g(j(eui_path, "*", eui_cuc_file_name))[0]
orig_eui_file = g(j(eui_folder_path, "*", eui_cuc_file_name))[0]
shutil.move(orig_eui_file, orig_eui_file + ".orig")
shutil.copyfile(eui_cuc_file, orig_eui_file)
subprocess.run([szip, 'a', modded_eui_zip, eui_path], stdout=null, stderr=null)
elif not eui_only:
subprocess.run([szip, 'a', modded_eui_zip, eui_folder_path], stdout=null, stderr=null)
else:
# Unzip EUI
print("Unzipping EUI...")
subprocess.run([szip, 'x', modded_eui_zip_path], stdout=null, stderr=null)
# Stop here if only EUI should be converted
if eui_only:
if os.path.isdir(eui_path):
shutil.rmtree(eui_path)
null.close()
print("Done.\n")
exit(0)
quit()
# Unzip modpack zip
......@@ -113,10 +161,20 @@ print("Unzipping Modpack...")
subprocess.run([szip, 'x', j(vanilla_packs_path, modpack_zip)], stdout=null, stderr=null)
# Get vanilla UI files
print("Gathering Vanilla UI file list...")
globbed = g(base_ui_files, recursive=True)
globbed.extend(g(gnk_ui_files, recursive=True))
globbed.extend(g(bnw_ui_files, recursive=True))
for file in globbed:
file_name = get_file_name(file)
if not file_name in ui_files:
vanilla_ui_files.append(file_name)
# Manage mod files
for mod_file in g(mod_files, recursive = True):
mod_file_path = mod_file.split(os.sep)
mod_file_name = mod_file_path[len(mod_file_path) - 1]
mod_file_name = get_file_name(mod_file)
mod_file_folder = os.sep.join(mod_file.split(os.sep)[-3:-1])
# IGE UI compat file
if mod_file_name == ige_compat_file_name:
......@@ -125,8 +183,8 @@ for mod_file in g(mod_files, recursive = True):
shutil.copyfile(g(j(modsave_path, ige_compat_file_name + "*"))[0], mod_file)
# Delete UI overwrite duplicates
if mod_file_name in delete_file_names:
print("Removing overwriting file " + mod_file_name + "...")
if mod_file_name in vanilla_ui_files:
print("Removing overwriting file {}...".format(j(mod_file_folder, mod_file_name)))
os.remove(mod_file)
# Find out if modcompat unit panel needed
......@@ -137,8 +195,7 @@ for mod_file in g(mod_files, recursive = True):
# Delete useless desktop.ini (Thanks True...)
ini_files = re.sub(r"\.\w+$", ".ini", mod_files)
for ini_file in g(ini_files, recursive = True):
ini_file_path = ini_file.split(os.sep)
ini_file_name = ini_file_path[len(ini_file_path) - 1]
ini_file_name = get_file_name(ini_file)
if ini_file_name == "desktop.ini":
print("Removing useless desktop.ini (Thanks True)...")
os.remove(mod_file)
......@@ -146,24 +203,21 @@ for ini_file in g(ini_files, recursive = True):
# Get stuff from UI files
for ui_file in g(ui_files):
with open(ui_file, 'r') as file:
lines = file.readlines()
ui_file_path = ui_file.split(os.sep)
ui_file_name = ui_file_path[len(ui_file_path) - 1]
ui_file_name = get_file_name(ui_file)
print("Getting tags from " + ui_file_name + "...")
load_tags[ui_file_name] = []
with open(ui_file, 'r') as file:
lines = file.readlines()
for line in lines:
if line.startswith(load_tag):
load_tags[ui_file_name].append(line)
# Insert stuff into EUI files
for eui_file in g(eui_files):
eui_file_path = eui_file.split(os.sep)
eui_file_name = eui_file_path[len(eui_file_path) - 1]
eui_file_name = get_file_name(eui_file)
# Base UI files
if eui_file_name in load_tags.keys():
......@@ -181,20 +235,13 @@ for eui_file in g(eui_files):
# Move EUI folder
print("Moving EUI folder...")
shutil.move(eui_path, modpack_path)
shutil.move(eui_folder_path, modpack_path)
print("Removing UI folder...")
shutil.rmtree(ui_path)
shutil.rmtree(ui_folder_path)
# Zip modpack folder
print("Zipping Modpack...")
subprocess.run([szip, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null)
# Move modpack folder
#print("Moving Modspack folder")
#shutil.move(modpack_path, j(base_path, modpack_folder_name))
#Finishing up
null.close()
print("Done.\n")
input("Press Enter to exit. . .")
exit(0)
\ No newline at end of file
quit()
\ No newline at end of file
......@@ -3,18 +3,19 @@ A script for Civilization V to add Colored Unlocked Citizens (CUC) to Enhanced U
The following things are assumed when running the script without changes:
* Having [7-zip](https://www.7-zip.org/) installed in the standard programs directory.
* Every pack being saved as a .7z or .rar archive.
* The following folder structure:
* Per default the following folder structure:
* _steamapps\common\Sid Meier's Civilization V\Assets\DLC\\_ \
EUI-Modpacks and EUI with CUC
* _zz_Vanilla_Versions\\_ \
Vanilla Modpacks and EUI
* _zzz_Modsaves\\_ \
* This project's folder somewhere\\_ \
Edited files
* _EUI_Converter\\_ \
* _EUI_Modpack_Converter\\_ \
Script and project files
### Credits
* *[Enhanced User Interface](https://forums.civfanatics.com/resources/civ5-enhanced-user-interface.24303/)* by bc1
* [*Enhanced User Interface*](https://forums.civfanatics.com/resources/civ5-enhanced-user-interface.24303/) by bc1
* [*Improved Enhanced User Interface*](https://www.reddit.com/r/civ/comments/3i46rk/update_improved_enhanced_user_interface/) (*Colored Unlocked Citizens*) by Dushku \
(Changed color from culture expansion magenta to a dark green)
* [*Ingame Editor compat for EUI*](https://forums.civfanatics.com/resources/ingame-editor-compatibility-file-for-eui.24647/) by bc1
* [*MPMPM - Multiplayer Mod DLC-hack*](https://forums.civfanatics.com/threads/mpmpm-multiplayer-mod-dlc-hack-updated.533238/) by cicero225
......@@ -166,8 +166,6 @@ do
end
end
end
ContextPtr:LoadNewContext("EvilSpiritsMission")
ContextPtr:LoadNewContext("THTanukiMission")
--==========================================================
-- Tooltip Utilities
......@@ -1468,3 +1466,5 @@ ContextPtr:SetShowHideHandler(
ContextPtr:SetHide( false )
end)
ContextPtr:LoadNewContext("EvilSpiritsMission")
ContextPtr:LoadNewContext("THTanukiMission")
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment