353 lines
12 KiB
Python
353 lines
12 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
import os
|
|
|
|
oldexcepthook = sys.excepthook
|
|
def newexcepthook(type,value,traceback):
|
|
oldexcepthook(type,value,traceback)
|
|
input("Press ENTER to quit.")
|
|
sys.excepthook = newexcepthook
|
|
|
|
p = os.path.join
|
|
pUp = os.path.dirname
|
|
s = False
|
|
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
|
|
s = os.path.realpath(sys.executable)
|
|
else:
|
|
s = os.path.realpath(__file__)
|
|
sp = pUp(s)
|
|
os.chdir(sp)
|
|
|
|
nfsmsScript = s.replace(".py",".nfsms")
|
|
|
|
properties = """\
|
|
update_field chassis replaceme ROLL_CENTER 10
|
|
update_field chassis replaceme RIDE_HEIGHT Front 12
|
|
update_field chassis replaceme RIDE_HEIGHT Rear 12
|
|
update_field chassis replaceme SHOCK_BLOWOUT 0
|
|
update_field chassis replaceme SHOCK_DIGRESSION Front 0.15
|
|
update_field chassis replaceme SHOCK_DIGRESSION Rear 0.1
|
|
update_field chassis replaceme SHOCK_EXT_STIFFNESS Front 37
|
|
update_field chassis replaceme SHOCK_EXT_STIFFNESS Rear 38.5
|
|
update_field chassis replaceme SHOCK_STIFFNESS Front 5
|
|
update_field chassis replaceme SHOCK_STIFFNESS Rear 5
|
|
update_field chassis replaceme SHOCK_VALVING Front 5.9
|
|
update_field chassis replaceme SHOCK_VALVING Rear 5.1
|
|
update_field chassis replaceme SPRING_PROGRESSION Front 5
|
|
update_field chassis replaceme SPRING_PROGRESSION Rear 5.65
|
|
update_field chassis replaceme SPRING_STIFFNESS Front 74
|
|
update_field chassis replaceme SPRING_STIFFNESS Rear 74
|
|
update_field chassis replaceme SWAYBAR_STIFFNESS Front 37
|
|
update_field chassis replaceme SWAYBAR_STIFFNESS Rear 37
|
|
update_field chassis replaceme TRAVEL Front 10000
|
|
update_field chassis replaceme TRAVEL Rear 10000
|
|
|
|
update_field chassis replaceme_top ROLL_CENTER 8
|
|
update_field chassis replaceme_top RIDE_HEIGHT Front 12
|
|
update_field chassis replaceme_top RIDE_HEIGHT Rear 12
|
|
update_field chassis replaceme_top SHOCK_BLOWOUT 0
|
|
update_field chassis replaceme_top SHOCK_DIGRESSION Front 0.25
|
|
update_field chassis replaceme_top SHOCK_DIGRESSION Rear 0.3
|
|
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Front 70
|
|
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Rear 65
|
|
update_field chassis replaceme_top SHOCK_STIFFNESS Front 6.6
|
|
update_field chassis replaceme_top SHOCK_STIFFNESS Rear 6.6
|
|
update_field chassis replaceme_top SHOCK_VALVING Front 6
|
|
update_field chassis replaceme_top SHOCK_VALVING Rear 7
|
|
update_field chassis replaceme_top SPRING_PROGRESSION Front 7
|
|
update_field chassis replaceme_top SPRING_PROGRESSION Rear 6.2
|
|
update_field chassis replaceme_top SPRING_STIFFNESS Front 74
|
|
update_field chassis replaceme_top SPRING_STIFFNESS Rear 74
|
|
update_field chassis replaceme_top SWAYBAR_STIFFNESS Front 50
|
|
update_field chassis replaceme_top SWAYBAR_STIFFNESS Rear 59
|
|
update_field chassis replaceme_top TRAVEL Front 10000
|
|
update_field chassis replaceme_top TRAVEL Rear 10000
|
|
|
|
update_field rigidbodyspecs racers GROUND_MOMENT_SCALE X 1
|
|
update_field rigidbodyspecs racers GROUND_MOMENT_SCALE Z 10
|
|
update_field rigidbodyspecs racers GROUND_MOMENT_SCALE W 0
|
|
|
|
update_field pvehicle replaceme TENSOR_SCALE X 1.3
|
|
update_field pvehicle replaceme TENSOR_SCALE Z 1.1
|
|
update_field pvehicle replaceme TENSOR_SCALE W 0
|
|
update_field rigidbodyspecs racers DRAG_ANGULAR X 1000
|
|
update_field rigidbodyspecs racers DRAG_ANGULAR Z 1000
|
|
|
|
update_field chassis replaceme AERO_COEFFICIENT 0.135
|
|
update_field chassis replaceme_top AERO_COEFFICIENT 0.135
|
|
|
|
### NO ARTIFICIAL BODY ROLL ###
|
|
update_field ecar replaceme BodyDive DegPerG 0
|
|
update_field ecar replaceme BodyDive DegPerSec 0
|
|
update_field ecar replaceme BodyDive MaxG 0.0
|
|
update_field ecar replaceme BodyRoll DegPerG 0.0
|
|
update_field ecar replaceme BodyRoll DegPerSec 0
|
|
update_field ecar replaceme BodyRoll MaxG 0
|
|
update_field ecar replaceme BodySquat DegPerG 0
|
|
update_field ecar replaceme BodySquat DegPerSec 0
|
|
update_field ecar replaceme BodySquat MaxG 0.0
|
|
\
|
|
"""
|
|
|
|
carlist = ["911gt2","911turbo","997s","a3","a4","bmwm3gtr","bmwm3gtre46","camaro","carreragt","caymans","clio","clk500","cobaltss","corvette","corvettec6r","cts","db9","eclipsegt","elise","fordgt","gallardo","gti","gto","imprezawrx","is300","lancerevo8","monaro","murcielago","mustanggt","punto","rx7","rx8","sl500","sl65","slr","supra","tt","viper"]
|
|
carlistNoTop = ["911gt2","bmwm3gtr","bmwm3gtre46","camaro","corvettec6r","rx8speedt","sl65"]
|
|
|
|
topBias = {
|
|
"911gt2": 0.8,
|
|
"911turbo": 0.6,
|
|
"997s": 0.6,
|
|
"a3": 0.2,
|
|
"a4": 0.2,
|
|
"bmwm3gtr": 1.0,
|
|
"bmwm3gtre46": 0.4,
|
|
"camaro": 0.0,
|
|
"carreragt": 0.9,
|
|
"caymans": 0.6,
|
|
"clio": 0.2,
|
|
"clk500": 0.2,
|
|
"cobaltss": 0.1,
|
|
"corvette": 0.4,
|
|
"corvettec6r": 1.0,
|
|
"cts": 0.1,
|
|
"db9": 0.7,
|
|
"eclipsegt": 0.4,
|
|
"elise": 0.6,
|
|
"fordgt": 0.6,
|
|
"gallardo": 0.6,
|
|
"gti": 0.2,
|
|
"gto": 0.1,
|
|
"imprezawrx": 0.4,
|
|
"is300": 0.0,
|
|
"lancerevo8": 0.5,
|
|
"monaro": 0.1,
|
|
"murcielago": 0.3,
|
|
"mustanggt": 0.1,
|
|
"punto": 0.2,
|
|
"rx7": 0.3,
|
|
"rx8": 0.2,
|
|
"sl500": 0.5,
|
|
"sl65": 0.4,
|
|
"slr": 0.6,
|
|
"supra": 0.3,
|
|
"tt": 0.3,
|
|
"viper": 0.4
|
|
}
|
|
|
|
nfsmsMods = {}
|
|
nfsmsModsTop = {}
|
|
for car in carlist:
|
|
nfsmsMods[car] = {}
|
|
nfsmsMods[car]["chassis"] = {}
|
|
|
|
# Ride height scale
|
|
nfsmsMods["911gt2"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["911gt2"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["911turbo"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["911turbo"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["997s"]["chassis"]["RIDE_HEIGHT Rear"] = 1.0
|
|
nfsmsMods["997s"]["chassis"]["RIDE_HEIGHT Front"] = 1.0
|
|
nfsmsMods["a3"]["chassis"]["RIDE_HEIGHT Rear"] = 1.2
|
|
nfsmsMods["a3"]["chassis"]["RIDE_HEIGHT Front"] = 1.2
|
|
nfsmsMods["a4"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["a4"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["bmwm3gtr"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["bmwm3gtr"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["bmwm3gtre46"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["bmwm3gtre46"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["camaro"]["chassis"]["RIDE_HEIGHT Rear"] = 0.9
|
|
nfsmsMods["camaro"]["chassis"]["RIDE_HEIGHT Front"] = 0.9
|
|
nfsmsMods["carreragt"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["carreragt"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["caymans"]["chassis"]["RIDE_HEIGHT Rear"] = 1.2
|
|
nfsmsMods["caymans"]["chassis"]["RIDE_HEIGHT Front"] = 1.2
|
|
nfsmsMods["clio"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["clio"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["clk500"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["clk500"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["cobaltss"]["chassis"]["RIDE_HEIGHT Rear"] = 1.35
|
|
nfsmsMods["cobaltss"]["chassis"]["RIDE_HEIGHT Front"] = 1.35
|
|
nfsmsMods["corvette"]["chassis"]["RIDE_HEIGHT Rear"] = 1.4
|
|
nfsmsMods["corvette"]["chassis"]["RIDE_HEIGHT Front"] = 1.4
|
|
nfsmsMods["corvettec6r"]["chassis"]["RIDE_HEIGHT Rear"] = 0.8
|
|
nfsmsMods["corvettec6r"]["chassis"]["RIDE_HEIGHT Front"] = 0.8
|
|
nfsmsMods["cts"]["chassis"]["RIDE_HEIGHT Rear"] = 0.9
|
|
nfsmsMods["cts"]["chassis"]["RIDE_HEIGHT Front"] = 0.9
|
|
nfsmsMods["db9"]["chassis"]["RIDE_HEIGHT Rear"] = 0.9
|
|
nfsmsMods["db9"]["chassis"]["RIDE_HEIGHT Front"] = 0.9
|
|
nfsmsMods["eclipsegt"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["eclipsegt"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["elise"]["chassis"]["RIDE_HEIGHT Rear"] = 0.9
|
|
nfsmsMods["elise"]["chassis"]["RIDE_HEIGHT Front"] = 0.9
|
|
nfsmsMods["fordgt"]["chassis"]["RIDE_HEIGHT Rear"] = 0.8
|
|
nfsmsMods["fordgt"]["chassis"]["RIDE_HEIGHT Front"] = 0.8
|
|
nfsmsMods["gallardo"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["gallardo"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["gti"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["gti"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["gto"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["gto"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["imprezawrx"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["imprezawrx"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["is300"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["is300"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["lancerevo8"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["lancerevo8"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["monaro"]["chassis"]["RIDE_HEIGHT Rear"] = 1.15
|
|
nfsmsMods["monaro"]["chassis"]["RIDE_HEIGHT Front"] = 1.15
|
|
nfsmsMods["murcielago"]["chassis"]["RIDE_HEIGHT Rear"] = 0.9
|
|
nfsmsMods["murcielago"]["chassis"]["RIDE_HEIGHT Front"] = 0.9
|
|
nfsmsMods["mustanggt"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["mustanggt"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["punto"]["chassis"]["RIDE_HEIGHT Rear"] = 0.9
|
|
nfsmsMods["punto"]["chassis"]["RIDE_HEIGHT Front"] = 0.9
|
|
nfsmsMods["rx7"]["chassis"]["RIDE_HEIGHT Rear"] = 1.2
|
|
nfsmsMods["rx7"]["chassis"]["RIDE_HEIGHT Front"] = 1.2
|
|
nfsmsMods["rx8"]["chassis"]["RIDE_HEIGHT Rear"] = 1.0
|
|
nfsmsMods["rx8"]["chassis"]["RIDE_HEIGHT Front"] = 1.0
|
|
nfsmsMods["sl500"]["chassis"]["RIDE_HEIGHT Rear"] = 1.0
|
|
nfsmsMods["sl500"]["chassis"]["RIDE_HEIGHT Front"] = 1.0
|
|
nfsmsMods["sl65"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["sl65"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["slr"]["chassis"]["RIDE_HEIGHT Rear"] = 1.1
|
|
nfsmsMods["slr"]["chassis"]["RIDE_HEIGHT Front"] = 1.1
|
|
nfsmsMods["supra"]["chassis"]["RIDE_HEIGHT Rear"] = 1.0
|
|
nfsmsMods["supra"]["chassis"]["RIDE_HEIGHT Front"] = 1.0
|
|
nfsmsMods["tt"]["chassis"]["RIDE_HEIGHT Rear"] = 1.3
|
|
nfsmsMods["tt"]["chassis"]["RIDE_HEIGHT Front"] = 1.3
|
|
nfsmsMods["viper"]["chassis"]["RIDE_HEIGHT Rear"] = 0.85
|
|
nfsmsMods["viper"]["chassis"]["RIDE_HEIGHT Front"] = 0.85
|
|
|
|
parsedVlt = []
|
|
for line in properties.split("\n"):
|
|
line = line.strip(" \t\r")
|
|
arg = ""
|
|
args = []
|
|
for c in line:
|
|
if c == "#": break
|
|
if c in [" ","\t"]:
|
|
if arg != "":
|
|
args.append(arg)
|
|
arg = ""
|
|
continue
|
|
arg = arg + c
|
|
if arg != "":
|
|
args.append(arg)
|
|
arg = ""
|
|
if len(args) > 0:
|
|
parsedVlt.append(args)
|
|
|
|
def findLine(linef,ls):
|
|
linef = linef.copy()
|
|
linef.pop(-1)
|
|
linef.pop(2)
|
|
linefLength = len(linef)
|
|
for line in reversed(ls):
|
|
length = len(line) - 2
|
|
if length != linefLength: continue
|
|
lineo = line
|
|
line = line.copy()
|
|
line.pop(-1)
|
|
line.pop(2)
|
|
index = 0
|
|
success = True
|
|
while index < length:
|
|
if linef[index] != line[index]:
|
|
success = False
|
|
break
|
|
index += 1
|
|
if success == False: continue
|
|
return lineo
|
|
return False
|
|
|
|
def lineToPropPair(line):
|
|
line = line.copy()
|
|
cat = line[1]
|
|
line.pop(0)
|
|
line.pop(0)
|
|
line.pop(0)
|
|
line.pop(-1)
|
|
line = " ".join(line)
|
|
return [cat,line]
|
|
|
|
def getNfsmsMod(car,line,isTop = False):
|
|
prop = lineToPropPair(line)
|
|
|
|
if isTop:
|
|
if car in nfsmsModsTop:
|
|
if prop[0] in nfsmsModsTop[car]:
|
|
if prop[1] in nfsmsModsTop[car][prop[0]]:
|
|
return nfsmsModsTop[car][prop[0]][prop[1]]
|
|
|
|
if car in nfsmsMods:
|
|
if prop[0] in nfsmsMods[car]:
|
|
if prop[1] in nfsmsMods[car][prop[0]]:
|
|
return nfsmsMods[car][prop[0]][prop[1]]
|
|
|
|
return False
|
|
|
|
nfsmsMisc = []
|
|
nfsmsCars = {}
|
|
for car in carlist:
|
|
for line in parsedVlt:
|
|
line = line.copy()
|
|
isCarLine = False
|
|
isTopLine = False
|
|
if "replaceme" in line:
|
|
isCarLine = True
|
|
if "replaceme_top" in line:
|
|
isCarLine = True
|
|
isTopLine = True
|
|
|
|
if isCarLine == False:
|
|
nfsmsMisc.append(line)
|
|
continue
|
|
|
|
if not car in nfsmsCars:
|
|
nfsmsCars[car] = [[],[]]
|
|
|
|
if not isTopLine:
|
|
nfsmsCars[car][0].append(line)
|
|
else:
|
|
nfsmsCars[car][1].append(line)
|
|
|
|
for car in nfsmsCars:
|
|
for line in nfsmsCars[car][0]:
|
|
if line[0] != "update_field": continue
|
|
mult = getNfsmsMod(car,line)
|
|
if mult == False: continue
|
|
line[-1] = str(float(line[-1]) * mult)
|
|
|
|
for line in nfsmsCars[car][1]:
|
|
if line[0] != "update_field": continue
|
|
mult = getNfsmsMod(car,line,True)
|
|
if mult == False: continue
|
|
line[-1] = str(float(line[-1]) * mult)
|
|
|
|
for car in nfsmsCars:
|
|
if not (car in topBias): continue
|
|
for line in nfsmsCars[car][0]:
|
|
if line[0] != "update_field": continue
|
|
if line[1] in ["ecar","pvehicle"]: continue
|
|
topLine = findLine(line,nfsmsCars[car][1])
|
|
if topLine == False:
|
|
print("Warning, no top line found: " +(" ".join(line)))
|
|
continue
|
|
topLine = topLine.copy()
|
|
topLine[-1] = float(topLine[-1])
|
|
line[-1] = float(line[-1])
|
|
line[-1] = str(line[-1] + ((topLine[-1] - line[-1])*topBias[car]))
|
|
|
|
file = open(nfsmsScript,"w")
|
|
for car in nfsmsCars:
|
|
for line in nfsmsCars[car][0]:
|
|
if line[2] == "replaceme": line[2] = car
|
|
file.write(" ".join(line) + "\n")
|
|
if car in carlistNoTop: continue
|
|
for line in nfsmsCars[car][1]:
|
|
if line[2] == "replaceme_top": line[2] = car + "_top"
|
|
file.write(" ".join(line) + "\n")
|
|
|
|
for line in nfsmsMisc:
|
|
file.write(" ".join(line) + "\n")
|
|
file.close() |