Skip to content

Instantly share code, notes, and snippets.

@LenAnderson
Created April 26, 2023 12:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LenAnderson/cc2ffc95bb4887a2fe49d75e537ee0b8 to your computer and use it in GitHub Desktop.
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.
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