Initial commit

This commit is contained in:
Fierelier 2024-09-08 21:26:09 +02:00
commit 72c96bdd8f
5 changed files with 628 additions and 0 deletions

480
mw/developer/simcade-handling.py Executable file
View File

@ -0,0 +1,480 @@
#!/usr/bin/env python3
"""
MIT License
Copyright (c) 2023
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
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(sp,pUp(sp),1).rsplit(".",1)[0] + ".nfsms"
propsPrefix = """\
"""
properties = """\
# Handling: general/separation
copy_node rigidbodyspecs cars racers ai_racers
update_field pvehicle ai_racers rigidbodyspecs Collection ai_racers
# Handling: general/misc
update_field rigidbodyspecs racers GRAVITY -9.8128
# Handling: general/suspension
update_field rigidbodyspecs racers DRAG_ANGULAR X 200
update_field rigidbodyspecs racers DRAG_ANGULAR Z 1000
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 rigidbodyspecs racers GROUND_FRICTION[0] 0
update_field rigidbodyspecs racers GROUND_FRICTION[1] 0
update_field rigidbodyspecs ai_racers GROUND_MOMENT_SCALE X 1
update_field rigidbodyspecs ai_racers GROUND_MOMENT_SCALE Z 10
update_field rigidbodyspecs ai_racers GROUND_MOMENT_SCALE W 0
update_field rigidbodyspecs ai_racers GROUND_FRICTION[0] 0
update_field rigidbodyspecs ai_racers GROUND_FRICTION[1] 0
# Handling: general/tires
update_field rigidbodyspecs racers DRAG_ANGULAR Y 0
update_field rigidbodyspecs racers GROUND_MOMENT_SCALE Y 5
update_field rigidbodyspecs ai_racers GROUND_MOMENT_SCALE Y 5
# Handling: replaceme/separation
copy_node chassis replaceme ai_replaceme
copy_node chassis replaceme_top ai_replaceme_top
update_field pvehicle ai_replaceme chassis[0] Collection ai_replaceme
update_field pvehicle ai_replaceme chassis[1] Collection ai_replaceme_top
copy_node tires replaceme ai_replaceme
copy_node tires replaceme_top ai_replaceme_top
update_field pvehicle ai_replaceme tires[0] Collection ai_replaceme
update_field pvehicle ai_replaceme tires[1] Collection ai_replaceme_top
# Handling: replaceme/suspension
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
update_field pvehicle replaceme TENSOR_SCALE X 1.2
update_field pvehicle replaceme TENSOR_SCALE Z 1.0
update_field pvehicle replaceme TENSOR_SCALE W 0.455
update_field chassis replaceme ROLL_CENTER 15
update_field chassis replaceme RIDE_HEIGHT Front 11
update_field chassis replaceme RIDE_HEIGHT Rear 11
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 AERO_COEFFICIENT 0.135
update_field chassis replaceme_top ROLL_CENTER 12
update_field chassis replaceme_top RIDE_HEIGHT Front 11
update_field chassis replaceme_top RIDE_HEIGHT Rear 11
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 chassis replaceme_top AERO_COEFFICIENT 0.135
# Handling: replaceme/tires
update_field pvehicle replaceme TENSOR_SCALE Y 1.5
update_field tires replaceme DYNAMIC_GRIP Front 1.6
update_field tires replaceme DYNAMIC_GRIP Rear 1.6
update_field tires replaceme GRIP_SCALE Front 1
update_field tires replaceme GRIP_SCALE Rear 1
update_field tires replaceme STATIC_GRIP Front 12
update_field tires replaceme STATIC_GRIP Rear 12
update_field tires replaceme STEERING 0.65
update_field tires replaceme YAW_SPEED 0.3
update_field tires replaceme YAW_CONTROL[0] 1
update_field tires replaceme YAW_CONTROL[1] 1
update_field tires replaceme YAW_CONTROL[2] 1
update_field tires replaceme YAW_CONTROL[3] 1
update_field tires replaceme_top DYNAMIC_GRIP Front 1.8
update_field tires replaceme_top DYNAMIC_GRIP Rear 1.8
update_field tires replaceme_top GRIP_SCALE Front 1
update_field tires replaceme_top GRIP_SCALE Rear 1
update_field tires replaceme_top STATIC_GRIP Front 12
update_field tires replaceme_top STATIC_GRIP Rear 12
update_field tires replaceme_top STEERING 0.65
update_field tires replaceme_top YAW_SPEED 0.3
update_field tires replaceme_top YAW_CONTROL[0] 1
update_field tires replaceme_top YAW_CONTROL[1] 1
update_field tires replaceme_top YAW_CONTROL[2] 1
update_field tires replaceme_top YAW_CONTROL[3] 1
# new
update_field chassis replaceme SHOCK_EXT_STIFFNESS Front 75
update_field chassis replaceme SHOCK_EXT_STIFFNESS Rear 70
update_field chassis replaceme SHOCK_DIGRESSION Front 0.3
update_field chassis replaceme SHOCK_DIGRESSION Rear 0.25
update_field chassis replaceme SHOCK_VALVING Front 6.5
update_field chassis replaceme SHOCK_VALVING Rear 6.5
update_field chassis replaceme SPRING_PROGRESSION Front 8
update_field chassis replaceme SPRING_PROGRESSION Rear 7
update_field chassis replaceme SWAYBAR_STIFFNESS Front 45
update_field chassis replaceme SWAYBAR_STIFFNESS Rear 55
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Front 75
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Rear 70
update_field chassis replaceme_top SHOCK_DIGRESSION Front 0.3
update_field chassis replaceme_top SHOCK_DIGRESSION Rear 0.25
update_field chassis replaceme_top SHOCK_VALVING Front 6.5
update_field chassis replaceme_top SHOCK_VALVING Rear 6.5
update_field chassis replaceme_top SPRING_PROGRESSION Front 8
update_field chassis replaceme_top SPRING_PROGRESSION Rear 7
update_field chassis replaceme_top SWAYBAR_STIFFNESS Front 45
update_field chassis replaceme_top SWAYBAR_STIFFNESS Rear 55
# 2
update_field chassis replaceme SHOCK_EXT_STIFFNESS Front 80
update_field chassis replaceme SHOCK_EXT_STIFFNESS Rear 85
update_field chassis replaceme SPRING_STIFFNESS Front 80
update_field chassis replaceme SPRING_STIFFNESS Rear 80
update_field chassis replaceme SHOCK_VALVING Front 7
update_field chassis replaceme SHOCK_VALVING Rear 7
update_field chassis replaceme SWAYBAR_STIFFNESS Front 60
update_field chassis replaceme SWAYBAR_STIFFNESS Rear 60
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Front 80
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Rear 85
update_field chassis replaceme_top SPRING_STIFFNESS Front 80
update_field chassis replaceme_top SPRING_STIFFNESS Rear 80
update_field chassis replaceme_top SHOCK_VALVING Front 7
update_field chassis replaceme_top SHOCK_VALVING Rear 7
update_field chassis replaceme_top SWAYBAR_STIFFNESS Front 60
update_field chassis replaceme_top SWAYBAR_STIFFNESS Rear 60
# 3
update_field chassis replaceme SHOCK_EXT_STIFFNESS Front 20
update_field chassis replaceme SHOCK_EXT_STIFFNESS Rear 20
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Front 20
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Rear 20
update_field chassis replaceme SHOCK_VALVING Front 70
update_field chassis replaceme SHOCK_VALVING Rear 70
update_field chassis replaceme_top SHOCK_VALVING Front 70
update_field chassis replaceme_top SHOCK_VALVING Rear 70
update_field rigidbodyspecs racers DRAG_ANGULAR X 0
update_field chassis replaceme SHOCK_VALVING Front 140
update_field chassis replaceme SHOCK_VALVING Rear 140
update_field chassis replaceme_top SHOCK_VALVING Front 140
update_field chassis replaceme_top SHOCK_VALVING Rear 140
# pretty darn good
update_field chassis replaceme SHOCK_VALVING Front 100
update_field chassis replaceme SHOCK_VALVING Rear 100
update_field chassis replaceme_top SHOCK_VALVING Front 100
update_field chassis replaceme_top SHOCK_VALVING Rear 100
update_field chassis replaceme SPRING_PROGRESSION Front 16
update_field chassis replaceme SPRING_PROGRESSION Rear 16
update_field chassis replaceme_top SPRING_PROGRESSION Front 16
update_field chassis replaceme_top SPRING_PROGRESSION Rear 16
update_field chassis replaceme SHOCK_EXT_STIFFNESS Front 40
update_field chassis replaceme SHOCK_EXT_STIFFNESS Rear 40
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Front 40
update_field chassis replaceme_top SHOCK_EXT_STIFFNESS Rear 40
# aaaa
update_field tires replaceme DYNAMIC_GRIP Front 1.6
update_field tires replaceme DYNAMIC_GRIP Rear 1.6
update_field tires replaceme GRIP_SCALE Front 1
update_field tires replaceme GRIP_SCALE Rear 1
update_field tires replaceme STATIC_GRIP Front 3
update_field tires replaceme STATIC_GRIP Rear 3
update_field tires replaceme STEERING 0.65
update_field tires replaceme YAW_SPEED 0.4
update_field tires replaceme YAW_CONTROL[0] 1
update_field tires replaceme YAW_CONTROL[1] 1
update_field tires replaceme YAW_CONTROL[2] 1
update_field tires replaceme YAW_CONTROL[3] 1
update_field tires replaceme_top DYNAMIC_GRIP Front 1.8
update_field tires replaceme_top DYNAMIC_GRIP Rear 1.8
update_field tires replaceme_top GRIP_SCALE Front 1
update_field tires replaceme_top GRIP_SCALE Rear 1
update_field tires replaceme_top STATIC_GRIP Front 3
update_field tires replaceme_top STATIC_GRIP Rear 3
update_field tires replaceme_top STEERING 0.65
update_field tires replaceme_top YAW_SPEED 0.4
update_field tires replaceme_top YAW_CONTROL[0] 1
update_field tires replaceme_top YAW_CONTROL[1] 1
update_field tires replaceme_top YAW_CONTROL[2] 1
update_field tires replaceme_top YAW_CONTROL[3] 1
update_field chassis replaceme SWAYBAR_STIFFNESS Front 0
update_field chassis replaceme SWAYBAR_STIFFNESS Rear 0
update_field chassis replaceme_top SWAYBAR_STIFFNESS Front 0
update_field chassis replaceme_top SWAYBAR_STIFFNESS Rear 0
\
"""
propsSuffix = """\
"""
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","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]["tires"] = {}
nfsmsMods[car]["chassis"] = {}
# Grip scale
nfsmsMods["elise"]["tires"]["GRIP_SCALE Front"] = 0.7
nfsmsMods["elise"]["tires"]["GRIP_SCALE Rear"] = 0.7
# 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
def parseUpdate(line):
line = line.split(" ",3)
line = line + line.pop(3).rsplit(" ",1)
return line
def getTopValue(lineSplit):
rtn = None
for line in properties:
lineType = line.split(" ",1)[0]
if lineType == "update_field":
lineSplit2 = parseUpdate(line)
if lineSplit2[2] != "replaceme_top": continue
if lineSplit2[1] != lineSplit[1]: continue
if lineSplit2[3] != lineSplit[3]: continue
rtn = lineSplit2[-1]
return rtn
def main():
global properties
properties = properties.split("\n")
output = []
for car in carlist:
for line in properties:
isCarLine = ("replaceme" in line)
isTopLine = ("replaceme_top" in line)
lineType = line.split(" ",1)[0]
if not isCarLine:
if line != "" and line in output: continue
output.append(line)
continue
if car in carlistNoTop and isTopLine:
continue
if lineType == "update_field":
lineSplit = parseUpdate(line)
if car in nfsmsMods:
if lineSplit[1] in nfsmsMods[car]:
if lineSplit[3] in nfsmsMods[car][lineSplit[1]]:
try:
value = float(lineSplit[-1])
except Exception:
pass
else:
value = value * nfsmsMods[car][lineSplit[1]][lineSplit[3]]
lineSplit[-1] = str(value)
valueTop = getTopValue(lineSplit)
if isTopLine == False and car in topBias:
try:
value = float(lineSplit[-1])
valueTop = float(valueTop)
except Exception:
pass
else:
value = value + ((valueTop - value) * topBias[car])
lineSplit[-1] = str(value)
line = " ".join(lineSplit)
output.append(line.replace("replaceme",car))
file = open(nfsmsScript,"w")
file.write(propsPrefix)
for line in output:
file.write(line + "\n")
file.write(propsSuffix)
file.close()
main()

View File

@ -0,0 +1,45 @@
# Thanks to GXP-10 for this method of separating AI and player physics
# Taken from Frexellia's Wrecked Mode: https://nfsmods.xyz/mod/1456
copy_node pvehicle racers cars ai_racers
update_field pvehicle racers RandomOpponent False
update_field pvehicle ai_racers PlayerUsable False
update_field pvehicle ai_racers RandomOpponent True
copy_node pvehicle 911turbo ai_racers ai_911turbo
copy_node pvehicle 911gt2 ai_911turbo ai_911gt2
copy_node pvehicle 997s ai_racers ai_997s
copy_node pvehicle a3 ai_racers ai_a3
copy_node pvehicle a4 ai_racers ai_a4
copy_node pvehicle bmwm3gtr ai_racers ai_bmwm3gtr
copy_node pvehicle bmwm3gtre46 ai_bmwm3gtr ai_bmwm3gtre46
copy_node pvehicle camaro ai_racers ai_camaro
copy_node pvehicle carreragt ai_racers ai_carreragt
copy_node pvehicle caymans ai_racers ai_caymans
copy_node pvehicle clio ai_racers ai_clio
copy_node pvehicle clk500 ai_racers ai_clk500
copy_node pvehicle cobaltss ai_racers ai_cobaltss
copy_node pvehicle corvette ai_racers ai_corvette
copy_node pvehicle corvettec6r ai_corvette ai_corvettec6r
copy_node pvehicle cts ai_racers ai_cts
copy_node pvehicle db9 ai_racers ai_db9
copy_node pvehicle eclipsegt ai_racers ai_eclipsegt
copy_node pvehicle elise ai_racers ai_elise
copy_node pvehicle fordgt ai_racers ai_fordgt
copy_node pvehicle gallardo ai_racers ai_gallardo
copy_node pvehicle gti ai_racers ai_gti
copy_node pvehicle gto ai_racers ai_gto
copy_node pvehicle imprezawrx ai_racers ai_imprezawrx
copy_node pvehicle is300 ai_racers ai_is300
copy_node pvehicle lancerevo8 ai_racers ai_lancerevo8
copy_node pvehicle monaro ai_racers ai_monaro
copy_node pvehicle murcielago ai_racers ai_murcielago
copy_node pvehicle mustanggt ai_racers ai_mustanggt
copy_node pvehicle punto ai_racers ai_punto
copy_node pvehicle rx7 ai_racers ai_rx7
copy_node pvehicle rx8 ai_racers ai_rx8
copy_node pvehicle sl500 ai_racers ai_sl500
copy_node pvehicle sl65 ai_racers ai_sl65
copy_node pvehicle slr ai_racers ai_slr
copy_node pvehicle supra ai_racers ai_supra
copy_node pvehicle tt ai_racers ai_tt
copy_node pvehicle viper ai_racers ai_viper

View File

@ -0,0 +1,41 @@
[VERSN2]
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL15 AI_BL15
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL15 Pvehicle ai_gti
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL14 AI_BL14
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL14 Pvehicle ai_is300
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL13 AI_BL13
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL13 Pvehicle ai_supra
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL12 AI_BL12
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL12 Pvehicle ai_rx8
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL11 AI_BL11
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL11 Pvehicle ai_eclipsegt
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL10 AI_BL10
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL10 Pvehicle ai_caymans
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL9 AI_BL9
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL9 Pvehicle ai_lancerevo8
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL8 AI_BL8
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL8 Pvehicle ai_mustanggt
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL7 AI_BL7
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL7 Pvehicle ai_clk500
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL6 AI_BL6
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL6 Pvehicle ai_gallardo
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL5 AI_BL5
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL5 Pvehicle ai_corvette
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL4 AI_BL4
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL4 Pvehicle ai_viper
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL3 AI_BL3
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL3 Pvehicle ai_db9
copy_collection GLOBAL\GLOBALB.LZC PresetRides BL2 AI_BL2
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_BL2 Pvehicle ai_slr
copy_collection GLOBAL\GLOBALB.LZC PresetRides E3_DEMO_BMW AI_E3_DEMO_BMW
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_E3_DEMO_BMW Pvehicle ai_bmwm3gtre46
copy_collection GLOBAL\GLOBALB.LZC PresetRides RAZORMUSTANG AI_RAZORMUSTANG
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_RAZORMUSTANG Pvehicle ai_mustanggt
copy_collection GLOBAL\GLOBALB.LZC PresetRides DDAYSUPRA AI_DDAYSUPRA
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_DDAYSUPRA Pvehicle ai_supra
copy_collection GLOBAL\GLOBALB.LZC PresetRides OPM_MUSTANG_BOSS AI_OPM_MUSTANG_BOSS
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_OPM_MUSTANG_BOSS Pvehicle ai_gto
copy_collection GLOBAL\GLOBALB.LZC PresetRides OPM_WRX_VERSION2 AI_OPM_WRX_VERSION2
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_OPM_WRX_VERSION2 Pvehicle ai_imprezawrx
copy_collection GLOBAL\GLOBALB.LZC PresetRides OPM_RX8_VERSION3 AI_OPM_RX8_VERSION3
update_collection GLOBAL\GLOBALB.LZC PresetRides AI_OPM_RX8_VERSION3 Pvehicle ai_rx8

View File

@ -0,0 +1,34 @@
[VERSN1]
{
"Usage": "User",
"Game": "MostWanted",
"Directory": ".",
"Endscript": "scripts\separate-ai-presets.end",
"Files": [
"GLOBAL\GLOBALA.BUN",
"GLOBAL\GLOBALB.LZC"
],
"Links": [
{
"LoadType": "Attributes",
"PathType": "Absolute",
"File": "GLOBAL\attributes.bin"
},
{
"LoadType": "FeAttrib",
"PathType": "Absolute",
"File": "GLOBAL\fe_attrib.bin"
},
{
"LoadType": "Labels",
"PathType": "Absolute",
"File": "LANGUAGES\Labels_Global.bin"
},
{
"LoadType": "Labels",
"PathType": "Absolute",
"File": "LANGUAGES\Labels.bin"
}
]
}

View File

@ -0,0 +1,28 @@
game MW
update_field gameplay 16_1_1_circuit/opponent PresetRide AI_OPM_MUSTANG_BOSS
update_field gameplay 16_1_1_circuit/opponent2 PresetRide AI_OPM_WRX_VERSION2
update_field gameplay 16_1_1_circuit/opponent3 PresetRide AI_OPM_RX8_Version3
update_field gameplay 16_2_1_d_day_intro/opponent PresetRide AI_RAZORMUSTANG
update_field gameplay 16_nis_rog_razor/razor PresetRide AI_RAZORMUSTANG
update_field gameplay 16_nis_rog_razor/rog PresetRide AI_OPM_MUSTANG_BOSS
update_field gameplay 16_1_0_partial_dday/razor PresetRide AI_RAZORMUSTANG
update_field gameplay 16_2_2_sprint/ronnie_mccrae PresetRide AI_DDAYSUPRA
update_field gameplay 16_2_3_sprint/toru_sato PresetRide AI_BL2
update_field gameplay race_bin_01/razor_callahan PresetRide AI_E3_DEMO_BMW
update_field gameplay race_bin_02/toro_sato PresetRide AI_BL2
update_field gameplay race_bin_03/ronnie_mccrea PresetRide AI_BL3
update_field gameplay race_bin_04/joe_vega PresetRide AI_BL4
update_field gameplay race_bin_05/wes_allen PresetRide AI_BL5
update_field gameplay race_bin_06/hector_domingo PresetRide AI_BL6
update_field gameplay race_bin_07/kira_nazakato PresetRide AI_BL7
update_field gameplay race_bin_08/jade_barrett PresetRide AI_BL8
update_field gameplay race_bin_09/pierre_dupont PresetRide AI_BL9
update_field gameplay race_bin_10/karl_smit PresetRide AI_BL10
update_field gameplay race_bin_11/lou_park PresetRide AI_BL11
update_field gameplay race_bin_12/isabel_diaz PresetRide AI_BL12
update_field gameplay race_bin_13/victor_vasquez PresetRide AI_BL13
update_field gameplay race_bin_14/vince_kilic PresetRide AI_BL14
update_field gameplay race_bin_15/tony_ho PresetRide AI_BL15
update_field gameplay race_bin_opm/20_2_1_rival_race/opponent1 PresetRide AI_OPM_MUSTANG_VERSION2
update_field gameplay race_bin_opm/20_2_1_rival_race/opponent2 PresetRide AI_OPM_WRX_VERSION2
update_field gameplay race_bin_opm/20_2_1_rival_race/opponent3 PresetRide AI_OPM_RX8_Version3