Created
April 26, 2023 12:44
-
-
Save LenAnderson/cc2ffc95bb4887a2fe49d75e537ee0b8 to your computer and use it in GitHub Desktop.
Merge two BodySlide presets for Fallout 4 by adding both values for each slider.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import re | |
fsm_path = r'E:\Games\Steam\SteamApps\common\Fallout 4\Data\Tools\BodySlide\SliderPresets\FSM Fit Body Bigger Boobs - Nude.xml' | |
pipa_path = r'E:\Games\Steam\SteamApps\common\Fallout 4\Data\Tools\BodySlide\SliderPresets\PIPA 2 body.xml' | |
sliders_path = r'E:\Games\Steam\SteamApps\common\Fallout 4\Data\Tools\BodySlide\SliderCategories\CBBE.xml' | |
with open(fsm_path, 'r') as f: | |
fsm = [x.strip() for x in f.readlines() if x.strip().startswith('<SetSlider')] | |
with open(pipa_path, 'r') as f: | |
pipa = [x.strip() for x in f.readlines() if x.strip().startswith('<SetSlider')] | |
with open(sliders_path, 'r') as f: | |
sliders = [x.strip() for x in f.readlines() if x.strip().startswith('<Category') or x.strip().startswith('<Slider')] | |
rx = r'^<SetSlider\s+name="([^"]+)"\s+size="big"\s+value="(-?\d+)"\s*/>$' | |
rx_cat = r'^<Category name="([^"]+)".+$' | |
rx_sli = r'^<Slider name="([^"]+)" display[nN]ame="([^"]+)".+$' | |
fsm = list([{'slider':re.sub(rx, r'\1', x), 'value':int(re.sub(rx, r'\2', x))} for x in fsm]) | |
pipa = list([{'slider':re.sub(rx, r'\1', x), 'value':int(re.sub(rx, r'\2', x))} for x in pipa]) | |
keys = list(set([x['slider'] for x in fsm] + [x['slider'] for x in pipa])) | |
cbbe = {} | |
last_cat = None | |
maxlen = 0 | |
for slider in sliders: | |
if slider.startswith('<Category'): | |
cat = re.sub(rx_cat, r'\1', slider) | |
cbbe[cat] = [] | |
last_cat = cat | |
elif last_cat: | |
slider_name = re.sub(rx_sli, r'\1', slider) | |
cbbe[last_cat].append(slider_name) | |
maxlen = max(maxlen, len(slider_name)) | |
for cat in cbbe: | |
print(f'== {cat} '.ljust(50, '=')) | |
for slider in cbbe[cat]: | |
pipa_val = ([0] + [x['value'] for x in pipa if x['slider'] == slider])[-1] | |
fsm_val = ([0] + [x['value'] for x in fsm if x['slider'] == slider])[-1] | |
if pipa_val != fsm_val: | |
print(f' {slider}'.ljust(maxlen+5), str(pipa_val).rjust(4), ' -> ', str(fsm_val).rjust(4)) | |
print(pipa) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment