commit 72c96bdd8f40509c703e7b4e84727f8ece782393 Author: Fierelier Date: Sun Sep 8 21:26:09 2024 +0200 Initial commit diff --git a/mw/developer/simcade-handling.py b/mw/developer/simcade-handling.py new file mode 100755 index 0000000..7b6805a --- /dev/null +++ b/mw/developer/simcade-handling.py @@ -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() diff --git a/mw/scripts/separate-ai-handling.nfsms b/mw/scripts/separate-ai-handling.nfsms new file mode 100644 index 0000000..f01b335 --- /dev/null +++ b/mw/scripts/separate-ai-handling.nfsms @@ -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 \ No newline at end of file diff --git a/mw/scripts/separate-ai-presets.end b/mw/scripts/separate-ai-presets.end new file mode 100755 index 0000000..8a257fe --- /dev/null +++ b/mw/scripts/separate-ai-presets.end @@ -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 diff --git a/mw/separate-ai-presets.end b/mw/separate-ai-presets.end new file mode 100644 index 0000000..c206f2f --- /dev/null +++ b/mw/separate-ai-presets.end @@ -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" + } + ] +} diff --git a/mw/separate-ai-presets.nfsms b/mw/separate-ai-presets.nfsms new file mode 100644 index 0000000..22ca452 --- /dev/null +++ b/mw/separate-ai-presets.nfsms @@ -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