Showing posts with label [NFSMW]. Show all posts
Showing posts with label [NFSMW]. Show all posts

Monday, July 21, 2025

How to make add-on parts for cars

    Introduction

    Since the advent of Binary, its associated Speedreflect library and Unlimiter with Extra/Extended Customization support, Black Box NFS games modding possibilites went up exponentially, amongst them there's the possibility of adding new car parts - and even make them car-specific or even without modifying the original game's geometry files. To this day, there is no concise documentation on the subject; hence I'm doing this write up to at least cover the basics with regards to NFS Underground 2 and NFS Most Wanted

    How parts work?

    For most Black Box games, part data is stored in GLOBAL\GlobalB.lzc; in Binary it's located in DBModelParts section. Each vehicle and part type (wheels, spoilers, paint, vinyls, etc.) has it's own DBModelParts node, which can be imported, exported, added, copied or deleted; to open a node, simply double-click on it. To rename a node, change its CollectionName value.

     



    Each node has the vehicles or parts set's part list, each part has the following basic editable properties (which are shown in bold in Binary):
    • CarPartGroupID (dropdown): what part slot (type of part) does the part use. For example, a hood uses the HOOD CarPartGroupID. Check the SlotTypes section in Binary to see what part slots are available.
    • DebugName (string): debug name of the part, shown only in debug menu or when there's no LANGUAGES\<language>.bin file string associated to it in the part attributes (more on that later). For example: STYLE02_HOOD.
    • LodStruct: a set of properties that sets up what parts from the car or part set GEOMETRY.BIN file uses, if the part has geometry associated with it, like body kits and so.
      • Concatenator (string): part of the name after the XNAME (e.g. FOCUS) and before the last part of the part name (e.g. _FRONT_BUMPER). For example _KIT00
        • ConcatenatorExists (boolean): enables/disables usage of concatenator
      • Exists (boolean): enables/disables geometry for the part
      • Geometry0Lod(A/B/C/D/E) (string): part name for the corresponding LOD of primary geometry for the part. If it uses concatenator,it's the last part of the part name without the LOD letter (e.g. _REAR_BUMPER), otherwise use the full part name (e.g. COROLLA_STYLE01_WHEEL)
        • Geometry0Lod(A/B/C/D/E)Exists (boolean): enables/disables corresponding LOD
      • Geometry1Lod(A/B/C/D/E) (string): part name for the corresponding LOD of secondary geometry for the part (e.g. body fixed parts of a 2-piece spoiler). Same naming convention as Geometry0Lod
        • Geometry1Lod(A/B/C/D/E)Exists (boolean): enables/disables corresponding LOD
      • Templated (boolean)
    • PartLabel (string): internal name of the part, must be unique.
    • UpgradeGroupID (integer): determines several properties of the part in-game (what kind of part is, when it unlocks, cost of part in Career Mode, etc.), for reference here you can check the UpgradeGroupID lists for NFSU2 and here are the NFSMW ones.
    Part naming conventions aren't very strict in most cases, only requirements is to match to whatever geometry file part name has and it has to be unique.

    Parts can be added, copied, deleted and sorted via the Car Parts menu. Keep on mind the part order you see in the DBModelParts node will determine the part order in-game.

    Parts also can have a set of attributes, which can be managed via the Attributes menu; you can add, remove, sort and even add custom attributes (which Extra/Extended Customization makes use of; check here for NFSU2 custom attributes or here for NFSMW custom attributes). Standard attributes are too many to list and describe for now, but the most relevant for part types will be described later on.

    How to add parts

    To add a part, open the DBModelParts node of your vehicle or parts set and go to Car Parts > Add Part or Car Parts > Copy Part. The latter is recommended if you're adding a part with geometry since Binary currently has a bug with added parts through the Add Part command that prevents from using geometry. Then you can adjust the properties and add the attributes you need for your part.

    Making geometry for new parts

    Making geometry for new parts is very similar to making new geometry for cars, which is detailed in the tutorial sections of the NFSU2/MW modding pages; however there are some caveats:
    • If your geometry belongs to a separate part set, you should include their entire part names (e.g. SPOILER_STYLE50_A) in the Data\<game>\GenericParts.txt file and leave the XNAME field blank in CarToolkit. If it's included with a car geometry, you should put the part names (e.g. STYLE50_SPOILER_A, so it will be SENTRA_STYLE50_SPOILER_A when compiled) in the Data\<game>\Parts_Racer.txt file.
    • Parts like spoilers, roof scoops (and for some games, mirrors -NFSU2- and exhausts) should be placed at origin (XYZ 0,0,0), since their mountpoints will put them in place.


       


    • For NFSMW and prior: paintable spoilers, roof scoops, calipers, exhausts, mirrors and audio components should be mapped to certain regions of the SKIN texture (seen in the DUMMY_SKIN textures)
    • Wheels and brake discs should be also placed at origin but with the face/disc (or hub in case of brakes for NFSMW onwards) sitting at Y origin 0.


    Part Slot Overrides

    Sometimes it's needed to tell the game to use a certain part set for certain vehicle types (like hatchbacks) or make the game use only certain parts in your car (like a set of roof scoops) for a slot; that's where the SlotOverrides section comes in. SlotOverrides nodes can be added, deleted, copied, imported and exported.

    To add a new SlotOverride node, click on the SlotOverrides section and click on Add Node. Name the slot <XNAME>_PART_<slot to be overriden> (e.g. IMPREZAWRX_PART_SPOILER) and click OK. Change the InfoMainOverride value to the part set you want to use or set it to some non-existent name (e.g. NULL) to restrict the parts availabity to whatever you provide with your car's parts.

    For NFSU2 some instances of car-specific parts like vinyls and decals need a SlotOverride to function, though another way is to apply this script to set SlotType overrides to SlotMainOverride (so it can be used without an SlotOverride node). NFSMW Unlimiter v4 already has this kind of feature built-in.

    Keep on mind some slots (like ROOF -roof scoops-) might put your custom parts above the stock parts in the parts browser in-game if there's no InfoMainOverride part defined.

    Most commonly used attributes

    For most parts

    • LANGUAGEHASH (key): Specifies what language string stored in LANGUAGES\<language>.bin uses the part (e.g. KIT00_FRONT_WHEEL)
    • CARBONFIBRE (boolean): Specifies if this part is a carbonfiber part

    Headlights/taillights

    • TEXTURE_NAME (key): Specifies what texture the part uses (e.g. PEUGOT_STYLE01_BRAKELIGHT)

    Wheels

    • TEXTURE_NAME (key): Specifies what texture the part uses the wheel (e.g. BBS_STYLE09)
      • Texture should be in ARGB format, name ending with _WHEEL (e.g. BBS_STYLE10_WHEEL)
      • Texture must have an accompanying _WHEEL_INNER_MASK (e.g. BBS_STYLE10_WHEEL_INNER_MASK) black and white texture to define colorable sections
      • Texture should match resolution of DUMMY_WHEEL textures in CARS\TEXTURES.BIN
      • Texture should have the following properties:
        • AlphaBlendType: TEXBLEND_SRCCOPY
        • AlphaUsageType: TEXUSAGE_PUNCHTHRU (for WHEEL/OUTER textures) / TEXUSAGE_NONE (for MASK textures)
    • SPINNER_NAME (key) -used only in NFSU2-: Specifies what texture the part uses the spinner attached to the wheel (e.g. DAVIN_STYLE09_OUTER)
      • Same properties as wheels, texture must match resolution of DUMMY_SPINNER textures and must have an accompanying _OUTER_MASK texture (e.g. DAVIN_STYLE09_OUTER_MASK) black and white texture
      • Can also be used in regular wheels thus making two-color wheels possible
    • OUTER_RADIUS (integer): overall wheel size in inches (ranges from 23 to 26)
    • INNER_RADIUS (integer): rim size in inches (ranges from 15 to 20)
    • BRAND_NAME (key): specifies what manufacturer the wheel uses as defined in WHEEL_MANUFACTURERSDBModelParts and scripts\UnlimiterData\_RimBrands.ini file. If you're making a car-specific custom wheel, leave it blank.

    Most visual parts (paint/neons/etc)

    • RED/GREEN/BLUE -and any variation therefore- (integer): red/green/blue color values (range from 0 to 255)

    Paint (body/rim/hoses/vinyl)

    • GLOSS (integer): how glossy is the paint (ranges from 0 to 255)
    • LIGHT_MATERIAL_NAME (key): what material will the paint use (e.g. REGPAINTGREY). Check Materials section for material availability.
    • BRAND_NAME (key): what kind of paint will the paint be. Usual values are GLOSS, METAL, PEARL, RIM, MUFFLER, HOSE and VINYL

    Vinyls

    • REMAP (boolean): determines if vinyl is colorable
    • TEXTURE_NAME (key): specifies what texture does the vinyl use (e.g. TEAR_012A)
      • Vinyl textures should be ARGB or 8-bit (256-color) with alpha channel without mipmaps; red and blue channels should be swapped; alpha channel determines blending with car paint.
      • Texture name is usually <XNAME>_<vinyl name> (e.g. 350Z_MODERN_056C).
      • A black and white _MASK texture is needed (e.g. 350Z_MODERN_056C_MASK) for transparency.
      • Colorable vinyls should have pure red, blue and green colors.
      • Textures should have the following properties:
        • AlphaBlendType: TEXBLEND_SRCCOPY
        • AlphaUsageType: TEXUSAGE_NONE
    • NUMCOLORS (integer): how many colors are present in the texture. Usually it's 16 for colorable vinyls and 64 for non-colorable vinyls
    • NUMREMAPCOLORS (integer): how many colorable colors does the vinyl have (range from 1 to 3)
    • BRAND_NAME (key): not sure what is for, but it's always NFSU for NFSU1/2 or MW for NFSMW
    • TEXTURE (string): usually the same as TEXTURE_NAME. Has a boolean property named ValueExists that enables/disables it.

    Decals

    • NAME (key): specifies what texture is being used for the decal (e.g. 5ZIGEN_WHITE)
      • Texture for decals should be DXT3 format
      • Set ApplyAlphaSort to 1 in the texture properties
      • Decal textures should be named <brand>_RECT/<brand>_WIDE/<brand>_WHITE_RECT/<brand>_WHITE_RECT (e.g. GREDDY_RECT)
    • BRAND_NAME (key): what brand is your decal, usually it matches what's in NAME (e.g. 5ZIGEN)
    • NUM_DECALS (integer): number of decals the decal part can hold (ranges from 1 to 8)

    Creating custom part sets

    A not so widely publicized feature of the Speedreflect library is the ability to load parts from any geometry file linked with an Universal type CarTypeInfos. That means you can make a custom part set that contains several types of parts (spoilers, wheels, etc.) without having to modify the vanilla game's geometry files. In order to use this feature make sure to do the following:
    • First make sure you have the Speedreflect library installed in your game. Binary can install it via Tools > Install Speedreflect menu; you can also incorporate the speedreflect auto command in your mod installation script
    • Go to the CarTypeInfos section and create a new CarTypeInfos, set its type to Universal
    • Create a folder in your CARS folder with the same name as your parts set's CarTypeInfos
    • Make the geometry file for your parts set.
    • Copy the geometry file to the parts set folder you've made.
    • Edit the relevant DBModelParts for your parts (be it specific cars, spoilers, wheels, etc.), and add their relevant textures to their respective places.

    Some things to consider

    • Remember that if you want to put parts in it that will be car-specific, put their full names in CarToolkit's Data\<game>\GenericParts.txt since part sets do use an XNAME in CarToolkit.
    • Even tho the game isn't usually very strict with part naming, try to stick to a simple to handle naming convention. For example, you could name your part set CarTypeInfo MYCOOLPARTS and a front bumper for the 350Z could be named 350Z_COOLPART00_FRONT_BUMPER
    • If you are editing a car's DBModelParts node with car-specific custom part: before exporting, try as far as possible to delete all parts except your custom parts and a copy of the stock part of its part slot so it can be imported later with the Synchronize type to minimize chances of duplicating parts when merging nodes.

    Saturday, August 12, 2023

    Binary Modder Mode Quick Start Guide

    This is a simple guide to get yourself started on the use of Binary's Modder Mode.

    Open Binary and click on Launch Binary for Modders

    Go to Main > New Launcher

    Select your game folder with the Select Directory button, specify the usage to Modder and the game you're modding. Click on Save to save the launcher script

    Binary will prompt you to open the launcher file; click Yes to open it right away or No if you don't want to do so now.

    By default Binary will only load the GLOBAL\GLOBALA.LZC and GLOBALB.LZC files; if you want it to open other files besides those, open the launcher file (it has an .end extension) with some plaintext editor (like notepad) and add the path of the files you want to edit in the "Files" section, like in the following highlighted text. Save the file when you're done. You can also temporally load files by typing the command new negate "<path to file>" in the script pane window (lower right corner) and pressing F5.

    (the full list of commands can be found in Binary's Discord server, which link is in the program's startup screen)


    Back in Binary, open the launcher file by going to Main > Load Files. A tree will show up in the left panel, click on the + signs to expand them, you can now edit your files from there.

    Friday, February 19, 2021

    NFSMW Car VLT Values Documentation

    This document is based on the MWPS templates by FOX (a.k.a Lexal), with some changes and additions. It might not be 100% accurate as well.

    Node: frontend/vehicles/<region>/<brand>/<model>

    Cost: car's in-game cost in Career Mode

    IsCustomizable: determines whether the car can be added to Career garage/My Cars; if set to false, it will appear in Bonus category only.

    manufacturer: sets the manufacturer logo, check list of manufacturers in NFSMW Unlimiter's UnlimiterData\_CarManufacturers ini file.

    region: car's region
    values: 0=north_america; 1=japan; 2=europe

    UnlockedAt: determines at what BL position of player in career mode the car gets unlocked.


    Node: pvehicle/default/<class>/<section>/<name>

    To change the amount of stuff like TurboSND, brake_updates, etc., right click on the pvehicle node of the car, select Edit Fields and change the array size of the element you want.

    TurboSND: sound used for the turbo/supercharger

    VerbalType: copspeech related: code determines what cops will call your car

    MASS: self-explanatory: mass of car expressed in kilograms

    MODEL: sets up the collision (Collision64/Collision) from GLOBALB and the model (Visual)

    engineaudio: sound used for the engine

    TENSOR_SCALE: seems to be overall handling speed scale balancing
    the bigger 2nd value is the slower the car will respond to steering input
    countered by increasing of 1st and 3rd value

    HandlingRating: used to set min and max handling bars length: doesn't take effect from base or end grip values but its increase is dependent on chassis and tires values
    values range from 37-98 for 1st set and 90-100 for 2nd set

    brakes: sets up brake nodes to use

    chassis: sets up chassis nodes to use

    engine: sets up engine nodes to use

    tires: sets up tires nodes to use

    transmission: sets up transmission nodes to use

    induction: sets up induction nodes to use

    brakes_upgrades: amount of brake upgrades the car has.

    induction_upgrades: amount of turbo/supercharger upgrades the car has.

    tires_upgrades: amount of tires upgrades the car has.

    engine_upgrades: amount of tire upgrades the car has.

    transmission_upgrades: amount of transmission upgrades the car has.

    nos_upgrades: amount of nitrous upgrades the car has.

    chassis_upgrades: amount of chassis upgrades the car has.



    Node: ecar/default/<class>/<name>

    BodyDive: maximum vector-based movement of front of car body
    1st value - Degrees/G
    2nd value - Max G
    3rd value - Degrees/sec

    RideHeight: (in-race only) visible body height

    TireOffsets
    in format x, y, z, w
    x axis: car front = +, car rear = -
    y axis: left side = +, right = -
    z axis: up = +, down = - note: will move WHEELS [up or down] regarding CAR BODY, during race body will be on normal level
    unlike wheels that might be BELOW ground
    w - wheel diameter scaling: measured in (overall wheel size in mm/2)/1000; you can measure overall tire size in https://tiresize.com/calculator/ or you can calculate the game wheel diameter directly using this formula: (((tire width in mm*sidewall number divided by 100)*2+rim size in mm)/1000)/2
    NOTE: CAR BODY height will be changed to match wheel size
    all axles have point 0 in center of line between front left and rear right wheel or between front right and rear left

    BodySquat: maximum vector-based movement of rear of car body
    1st value - Degrees/G
    2nd value - Max G
    3rd value - Degrees/sec

    CamberRear: angle between the vertical axis of the wheel and the vertical axis of the vehicle
    positive values for bottom of wheel being further out than top, negative for opposite effect
    common value is 0.18

    CamberFront: angle between the vertical axis of the wheel and the vertical axis of the vehicle
    positive values for bottom of wheel being further out than top, negative for opposite effect
    common value is 0.22

    FECompressions: used to adjust height of car body regarding wheels in frontend menus
    common value range is 2x0.10-2x0.20

    TireSkidWidth: aka tire width
    values are 2x0.(tire width in mm)

    TireSkidWidthKitScale: tire width per kit
    default values are 2x1; values are a multiplier of TireSkidWidth

    WheelSpokeCount: number of spokes in rims
    common value range N/A since it differs per car

    KitWheelOffsetRear: used to move wheels along axis Y when bodykits are used
    values range from 0 to 128: applies to REAR axle

    KitWheelOffsetFront: used to move wheels along axis Y when bodykits are used
    values range from 0 to 128: applies to FRONT axle

    ReflectionOffset: distance of floor reflection from car model in frontend.
    values range from -0.15 to 0.05

    BodyRoll: maximum vector-based movement of entire car body towards left or right
    simply put - car body leaning sideways
    1st value - Degrees/G
    2nd value - Max G
    3rd value - Degrees/sec


    Node: brakes/default/<name>

    BRAKES: overall braking power per axle
    common value range is 300/400-650/700: mass dependent

    EBRAKE: handbrake power: should be larger than BRAKES value by at least 10% and larger than overall car horsepower
    common value range is 400-800: mass dependent

    BRAKE_LOCK: BRAKES field values multiplier and braking force distribution ratio
    common value range is 1.00 for front axle and 3.20-3.60 for rear axle


    Node: chassis/default/<name>

    WHEEL_BASE: distance between the centers of the front and rear wheels
    common value range N/A since it differs per car

    DRAG_COEFFICIENT: air resistance of object travelling in a non-vacuum environment such as air
    common value range is 0.25-0.42

    SHOCK_VALVING: shock absorber oil flow restriction
    common value range is 2x15-2x24

    RIDE_HEIGHT: aka ground clearance
    common value range is 2x6-2x9

    SHOCK_STIFFNESS: minimum pressure inside shock absorber in pounds per square inch
    common value range is 2x30-2x80: acceleration and mass-dependent

    SHOCK_BLOWOUT: maximum size by which a dampener can compress in inches: stock same as upgraded
    common value range is 5-8

    SHOCK_EXT_STIFFNESS: maximum shock absorber rebound force
    common value range is 2x40-2x80: acceleration-, downforce- and mass-dependent

    SWAYBAR_STIFFNESS: self-explanatory: probably expressed in pounds per square inch
    common value range is 2x200-2x450: acceleration and mass dependent

    ROLL_CENTER: vertical center of gravity [probably in inches]
    common value range is 8-10

    TRAVEL: maximum length by which a shock can be extended if car wheels don't have contact with road surface: stock commonly higher than upgraded
    common value range is 2x6-2x8: acceleration and mass dependent

    SPRING_STIFFNESS: overall coilover pressure in pounds square inch
    common value range is 2x400-2x700

    AERO_CG: overall distribution of aerodynamic force on the car body: values between 0 and 100: 0 for max in rear, 100 for max in front
    common value range is 47-51

    SPRING_PROGRESSION: maximum compression speed/rate for spring to achieve maximum stiffness: stock smaller than upgraded higher values will make springs stiffer faster so car won't shove ground on slopes but will also increase bouncing on curbs
    common value range is 2x5-2x8

    TRACK_WIDTH: axle length: distance between wheels on a single axle: measured in metres
    common value range N/A since it differs per car

    SHOCK_DIGRESSION: digressive shocks provide smoother ride at higher speeds and absorb body roll also improving cornering: smaller value for smoother ride
    common value range is 2x0.1-2x0.5

    RENDER_MOTION: dependent on ecar node settings in body roll, dive and squat: used as a multiplier of the mentioned values to calculate car body movement
    common value range is 0.50-1.00

    AERO_COEFFICIENT: used to define car aerodynamics factor and overall downforce: value too small will make it slow and too high will push it down to ground too hard making it difficult to drive and car will be constantly hitting road due to excessive amount of downforce
    common value range is 0.15-0.30

    FRONT_AXLE: front axle diameter in inches
    common value range is 1.2-1.5

    FRONT_WEIGHT_BIAS: overall mass distribution: values from 0 to 100: 0 for max rear bias: 100 for max front bias
    common value range is 51-55


    Node: engine/default/<name>

    ENGINE_BRAKING: multiplies maximum torque at current gear and uses it to calculate speed loss with no throttle used
    common value range is 0.70-0.90

    IDLE: minimum operating speed of engine necessary to sustain its work but not enough to move drivetrain components
    common value range is 800-950

    TORQUE: self-explanatory: up to 15 torque values can be used but element count needs to be declared first
    common value range N/A since it differs per car

    MAX_RPM: maximum operating speed of engine before its destruction [drag racing only]
    common value range N/A since it differs per car

    FLYWHEEL_MASS: the higher the mass, the higher the maximum inertia moment and therefore larger amounts of kinetic energy can be stored also the lower the mass, the faster the top speed can be achieved and maintained
    common value range is 9-15

    RED_LINE: maximum safe operating speed of engine
    common value range N/A since it differs per car


    Node: induction/default/<name>_base/<name>_top | induction/default/<name>/<name>_top

    AIR_PRESSURE*: commonly 0.25

    HIGH_BOOST

    LOW_BOOST

    PSI_ARROW_MOVE_SPEED*: always higher value for stock

    PSI: maximum pressure of air taken into the turbine
    common value range is 12-15

    SPOOL: turbine lag: 0 for 'supercharger': anything higher will give 'turbo' upgrade
    common value range is 0.00-0.20

    BOOST_VARIANCE*: pressure drop/rise in chamber


    Node: tires/default/<name>

    SECTION_WIDTH: self-explanatory: measured in milimetres
    common value range N/A since it differs per car

    YAW_CONTROL: equivalent of section-based traction and stability control system: values 1 and 2 for front: values 3 and 4 for rear
    effect similar to dynamic mass bias shifting: highly dependent on WEIGHT_BIAS, AERO_CG, TORQUE_SPLIT and DYNAMIC/STATIC_GRIP values
    common value range N/A since it differs per car: mass and acceleration dependent

    DYNAMIC_GRIP: amount of friction the tires produce when traction is broken, ie when the car is sliding or in a burnout
    common value range N/A since it differs per car: mass and acceleration dependent

    RIM_SIZE: self-explanatory: measured in inches
    common value range is 2x16-2x19

    YAW_SPEED: self-explanatory: rate at which car enters yaw state
    common value range is 0.30-0.70

    ASPECT_RATIO: self-explanatory: ratio of section height to section width
    common value range is 2x30-2x55

    STATIC_GRIP: static grip is the amount of friction the tires are able to produce when they are not spinning, though they can be rolling
    common value range N/A since it differs per car: mass and acceleration dependent

    GRIP_SCALE: tire grip scaling per axle
    common value range is 2x1.00-2x1.10

    STEERING: steering ratio: value of 1.00 means that turning steering wheel by 360 degrees will turn wheels by 36 degrees
    common value range is 0.90-1.10


    Node: transmission/default/<name>

    To change the amount of gears, right click on the transmission node of the car, select Edit Fields and change the array size of GEAR_RATIO (amount of forward gears+neutral+reverse; 9 gears maximum)

    GEAR_RATIO: drivetrain power transfer ratios
    common value range N/A since it differs per car

    DIFFERENTIAL: self-explanatory: differential bias: 0.00 for rear, 0.50 for mid and 1.00 for front
    setting towards front will lock the front wheels more, causing the car to be prone to oversteer: inverse effect if bias set towards rear
    common value range is 2x0.60-2x0.80: 3x0.60-3x0.80 if car is AWD

    GEAR_EFFICIENCY: overall power multiplier on current gear and rpm used to quickly change speed at each gear without any major reconfigurations
    common value set is 9x1.00

    TORQUE_CONVERTER: percentage ratio of torque converter efficiency with automatic transmission usage
    common value range is 0.20-0.80

    TORQUE_SPLIT: torque-to-axle transfer ratio: 0 for RWD, 0.5 for AWD and 1 for FWD
    common value range N/A since it differs per car

    CLUTCH_SLIP: self-explanatory: manual gearbox efficiency ratio
    common value range is 0.70-0.90

    SHIFT_SPEED: shifting interval: stock [should be] higher than upgraded
    common value range is 0.10-0.25

    FINAL_GEAR: final gear ratio determining top speed
    common value range N/A since it differs per car

    Wednesday, February 17, 2021

    NFSMW General Modding Information (old version archive)

    General Information

    Car Modding

    Tools you need:

    • NFSMW Mod Tools by Arushan [NFSCars] - tools required to compile geometry and textures, includes .mwr export plugin for ZModeler 1
      • Recommended:
        • VLTEdit 1.2 by MWisBest [download] since it has more hashes than Aru's release
        • nlgzrgn's mwgc fork [download], which improves on the original by adding automatic mountpoint rotation and possibility to attach mountpoints to bodykits
        • My improved batch files for mwgc [download]: no more opening up and editing batch files: just run, follow some prompts and that's it! Best used with nlgzrgn's mwgc.
      • You can also use the NFSU2 texture compiler included in the NFSU2 ModTools [nfsu360]
    • ZModeler 1.07b [download] (modelling program)
    • Some image editing program able to open/save .dds files (like DXTBmp or GIMP with the DDS plug-in)
    • Notepad or similar (for .MWPS editing)

    Optional tools:

    • BINViewer and MTGUI [download] - tool used for editing mountpoints (best used with this hash values file) and graphical interface for modtools, respectively.
    • MWPS Templates by FOX [download] - ready-made .MWPS templates



    How do NFSMW (mod) cars work

    NFSMW cars are made mainly of a geometry file (GEOMETRY.BIN) and textures (TEXTURES.BIN). Using modloader, mod cars are stored in the ADDONS folder like this:


    ADDONS
    +---cars_replace
    ¦ ¦
    ¦ +---<carname>
    ¦         ATTRIBUTES.MWPS <---performance, sounds
    ¦         CAR.INI <---settings for modloader, car name
    ¦         FE.MWPS <---manufacturer, unlock and price settings
    ¦         GEOMETRY.BIN
    ¦         SECONDARYLOGO.BIN <---secondary logo
    ¦         TEXTURES.bin
    ¦         VINYLS.BIN
    ¦
    +---frontend
            +---MANUFACTURERS
                    ###-<MANUFACTURER>.BIN <---manufacturer logo


    Part names


    For any car:
    base_x
    kit00_driver_x
    kit00_front_tire_x
    kit00_front_brake_x *
    kit00_rear_brake_x *

    For racer cars
    kit##_body_x <----00: stock; 01-05: aftermarket
    kit00_doorline_x
    kit00_door_left_x
    kit00_door_right_x
    kit00_front_bumper_x
    kit00_front_bumper_badging_set_x
    kit00_rear_bumper_x
    kit00_rear_bumper_badging_set_x
    kit00_decal_right_door_rect_medium_x
    kit00_decal_left_door_rect_medium_x
    kit00_decal_right_quarter_rect_medium_x
    kit00_decal_left_quarter_rect_medium_x
    kit00_exhaust_x
    kit00_hood_x
    kit00_interior_x
    kit00_left_brakelight_x
    kit00_right_brakelight_x
    kit00_left_headlight_x
    kit00_right_headlight_x
    kit00_left_headlight_glass_x
    kit00_right_headlight_glass_x
    kit00_left_side_mirror_x
    kit00_right_side_mirror_x
    kit00_front_window_x
    kit00_rear_window_x
    kit00_front_left_window_x
    kit00_front_right_window_x
    kit00_rear_left_window_x
    kit00_rear_right_window_x
    kit00_spoiler_x
    kit00_universal_spoiler_base_x
    style##_hood_x <-----## stands for hood #, see below under "Hood Order"
    kit00_damage0_frontleft_x <----- damage 0 here is for scratches
    kit00_damage0_frontright_x
    kit00_damage0_rearleft_x
    kit00_damage0_rearright_x
    kit00_damage0_front_x
    kit00_damage0_rear_x
    decal_front_window_wide_medium_x
    decal_rear_window_wide_medium_x
    decal_left_door_rect_medium_x
    decal_right_door_rect_medium_x
    decal_left_quarter_rect_medium_x
    decal_right_quarter_rect_medium_x

    For cop cars
    kit00_damage0_body_x
    kit00_damage0_hood_x
    kit00_damage0_spoiler_x
    kit00_damage0_trunk_x
    kit00_damage0_left_door_x
    kit00_damage0_right_door_x
    kit00_damage0_left_rear_door_x
    kit00_damage0_right_rear_door_x
    kit00_damage0_hood_x
    kit00_damage0_cop_lights
    kit00_damage1_body_x
    kit00_damage1_hood_x
    kit00_damage1_spoiler_x
    kit00_damage1_trunk_x
    kit00_damage1_left_door_x
    kit00_damage1_right_door_x
    kit00_damage1_left_rear_door_x
    kit00_damage1_right_rear_door_x
    kit00_damage1_hood_x
    kit00_damage1_cop_lights_x

    Hood order
    style06_hood_a Overdial
    style07_hood_a Trident
    style13_hood_a Fusion
    style16_hood_a Colix
    ----------------
    style17_hood_a Airomax
    style20_hood_a DJM Hyde
    style02_hood_a Double-V
    style03_hood_a Tri-Slot
    style04_hood_a Speed
    ----------------
    style23_hood_a Factor X
    style26_hood_a Speedline
    style32_hood_a Tremor
    ----------------
    style05_hood_a G-Force
    style09_hood_a Mongoose
    ----------------
    style10_hood_a Twister
    style21_hood_a Eraser
    style31_hood_a Tsunami

    • "x" stands for the LOD used (from most detailed (a) to least detailed (e)
    • *: does not work for traffic cars


    Shaders

    0xD6D6080A ; body paint (aka CARSKIN)
    ALUMINUM
    BADGING
    BODY
    BODY_ALUMINUM
    BODY_CHROME
    BODY_CLEAR_PLASTIC
    BODY_DULL_PLASTIC
    BODY_LEFT
    BODY_MISC
    BODY_MOLDINGS
    BODY_PLAINNOTHING
    BODY_REAR
    BODY_RIGHT
    BODY_RUBBER_ACCORDIAN
    BODY_TOP
    BOTTOM
    BRAKEDISC
    BRAKELIGHT
    BRAKELIGHTGLASS
    CALIPER
    CALIPERDECAL
    CARBONFIBER
    CARBONFIBER2
    CENTRE_BRAKELIGHT
    CHAR_CLOTH
    CHAR_HAIR
    CHAR_LATEX
    CHAR_LEATHER
    CHAR_PLASTIC
    CHAR_RUBBER
    CHAR_SKIN
    CHROME
    CLEARPLASTIC
    CUSTOMPAINT_x (x: 1 - 20)
    DAMAGE0
    DECAL
    DECAL1
    DECAL2
    DECAL3
    DECAL4
    DECAL5
    DECAL6
    DECAL7
    DECAL8
    DEFAULT
    DIABLOHP
    DOORLINE
    DRIVER
    DRIVER_COP (for cop cars)
    DRIVER_CUTOUT (for 2D drivers for lower details)
    DRIVER_PLAYER (for racer cars)
    DRIVERHEAD
    DULLENGINE
    DULLPLASTIC
    ENGINE
    EXHAUST_TIP
    GLASS
    GOLDROTOR
    GRILL
    HEADLIGHT
    HEADLIGHTGLASS
    HEADLIGHTREFLECTOR
    HOSES
    INTERCOOLER
    INTERIOR
    LICENSEPLATE
    LOGO
    MAGCHROME
    MAGGUNMETAL
    MAGSILVER
    MAGSILVERGLOSS
    MATTEPLASTIC
    MESH
    METPAINTx (x: BLACK, BLUE, GOLD, GRAY, GREEN, RED, SILVER, YELLOW)
    MIRROR
    MISC
    MOLDINGS
    PEARL[x] x: 1 - 9
    PLAIN_ALUMINUM
    PLAIN_CHROME
    PLAINNOTHING
    PLASTICHUBCAP
    RAD
    RADIATOR
    REGPAINTx (x: BLACK, BLUE, GRAY, GREEN, ORANGE, PINK, RED, WHITE, YELLOW)
    RIM_KIT00_BLACK
    RIM_DULL_PLASTIC
    RIM_KIT00_CHROME
    RIM_KIT00_GUN_METAL
    RIM_KIT00_SILVER
    RIMPEARL[x] (x: 1 - 9)
    ROAD
    ROTOR (For police helicopters with spinning blades)
    RUBBER
    SHINYMOLDINGS
    SHINYPLASTIC
    SIDEWALL
    TREAD
    TRAFFIC
    TRAFFICWINDOWS
    USER_CALIPERS
    USER_EXHAUST
    USER_EXHAUST2
    USER_HOSES
    USER_RIMS
    USER_RIMS_CHROME
    USER_RIMS_GLOSS
    USER_RIMS_GUNMETAL
    USER_RIMS_MAGSILVER
    USER_RIMS_MET
    USER_RIMS_SILVERGLOSS
    USER_SPOILER
    WHEELBLUR
    WHITE
    WINDOWMASK
    WINDSHIELD


    Textures

    BADGING
    BADGING_EU *
    BADGING_N
    BRAKELIGHT_CENTRE ^
    BRAKELIGHT_LEFT ^
    BRAKELIGHT_RIGHT ^
    BRAKELIGHT_GLASS_CENTRE ^
    BRAKELIGHT_GLASS_LEFT ^
    BRAKELIGHT_GLASS_RIGHT ^
    DOOR_HANDLE
    DRIVER
    ENGINE
    ENGINE_N
    HEADLIGHT_LEFT ^
    HEADLIGHT_RIGHT ^

    HEADLIGHT_GLASS_LEFT ^
    HEADLIGHT_GLASS_RIGHT ^
    INTERIOR
    INTERIOR_N
    KIT00_BRAKELIGHT_DAMAGE0
    KIT00_BRAKELIGHT_GLASS_DAMAGE0
    KIT00_BRAKELIGHT_GLASS_OFF
    KIT00_BRAKELIGHT_GLASS_ON
    KIT00_BRAKELIGHT_OFF
    KIT00_BRAKELIGHT_ON
    KIT00_HEADLIGHT_DAMAGE0
    KIT00_HEADLIGHT_GLASS_DAMAGE0
    KIT00_HEADLIGHT_GLASS_OFF
    KIT00_HEADLIGHT_GLASS_ON
    KIT00_HEADLIGHT_OFF
    KIT00_HEADLIGHT_ON
    LICENSE_PLATE
    LOGO
    MISC
    MISC_N
    NEON
    RIM
    RIM_BLUR
    SHADOWFE
    SHADOWIG
    SIDELIGHT
    SKIN1
    SKIN1B
    SKIN2
    SKIN3
    SKIN4
    TIRE
    TIRE_N
    TREAD
    TREAD_N


    * replaces BADGING in EU-region games
    ^ not an actual texture but an assignation for the matlist file (for example BRAKELIGHT=CHROME/BRAKELIGHT_RIGHT)


    Mountpoints

    #COPLIGHTRED
    #COPLIGHTBLUE
    #COPLIGHTWHITE
    #LEFT_BRAKELIGHT
    #RIGHT_BRAKELIGHT
    #CENTRE_BRAKELIGHT
    #LEFT_REVERSE
    #RIGHT_REVERSE
    #LEFT_EXHAUST
    #RIGHT_EXHAUST
    #LEFT_HEADLIGHT
    #RIGHT_HEADLIGHT
    #ROOF_SCOOP
    #SPOILER

    If you are using nlgzrgn's mwgc, you can attach a mountpoint to a bodykit by putting a number before the mountpoint name (eg: 0#LEFT_EXHAUST for an exhaust mountpoint attached to the stock bodykit, 2#RIGHT_REVERSE for a reverse light attached to bodykit 2, etc.)


    build.bat/materials.txt/textures.txt/link.txt syntax, internal values and folder names

    build.bat syntax
    @echo off
    echo =====================================================
    echo Compiling Textures...
    echo =====================================================
    ..\bin\mwtc.exe textures.txt
    ..\bin\texpatch output\FRONTEND\MANUFACTURERS\###-<MANUFACTURER>.BIN "CARSELECT_<MANUFACTURER>_NAME"
    ..\bin\texpatch output\CARS_REPLACE\<CAR FOLDER>\SECONDARYLOGO.BIN "SECONDARY_LOGO_<INTERNAL NAME>_1"
    echo.
    echo =====================================================
    echo Compiling Model...
    echo =====================================================
    ..\bin\mwgc -nowait -xname "<CAR FOLDER>" -matlist "materials.txt" -xlink "link.txt" -source "<your model>.mwr" -target "output\CARS_REPLACE\<CAR FOLDER>\GEOMETRY.BIN"
    echo.
    echo =====================================================
    echo Complete.
    echo =====================================================
    pause

    • ###-<MANUFACTURER>.bin: manufacturer logo, ### is the manufacturer number (used in the FE.MWPS file) and the <MANUFACTURER> bit is the manufacturer name used in CAR.INI
    • <CAR FOLDER>: car folder, game calls the geometry and textures with that name.
    • <INTERNAL NAME>: the internal name of the car in the VLT database, used in CAR.INI to load the MWPS files and secondary logo
    • <your model>: the car model .mwr file you're gonna use for compiling the geometry (duh)
    Keep in mind both the car folder and internal name are case-sensitive

    Car folder names - Racer cars
    911GT2 Porsche 911 GT2
    911TURBO Porsche 911 Turbo S
    997S Porsche 911 Carrera S
    A3 Audi A3
    A4 Audi A4
    BMWM3 BMW M3 (Street Version)
    BMWM3GTRE46 BMW M3 GTR's Hero
    CAMARO Chevrolet Camaro SS
    CARRERAGT Porsche Carrera GT
    CAYMANS Porsche Cayman S
    CLIO Renault Clio
    CLK500 Mercedes-Benz CLK500
    COBALTSS Chevrolet Cobalt SS
    CORVETTE Chevrolet Corvette C6
    CORVETTEC6R Chevrolet Corvette C6R
    CTS Cadilliac CTS
    DB9 Aston Martin DB9
    ECLIPSEGT Mitsubishi Eclipse GT
    ELISE Lotus Elise
    FORDGT Ford GT
    GALLARDO Lamborghini Gallardo
    GTI Volkswagen Golf GTi
    GTO Pontiac GTO
    IMPREZAWRX Subaru Impreza WRX STi
    IS300 Lexus IS300
    MURCIELAGO Lamborghini Murcielago
    MUSTANGGT Ford Mustang GT
    PUNTO Fiat Punto
    RX7 Mazda RX-7
    RX8 Mazda RX-8
    SL500 Mercedes-Benz SL500
    SL65 Mercedes-Benz SL65
    SLR Mercedes-Benz SLR McLaren
    SUPRA Toyota Supra
    TT Audi TT
    VIPER Dodge Viper SRT-10


    Car folder names - Traffic cars
    CEMTR Cement Truck (Challenge Series)
    GARB Garbage Truck (Challenge Series)
    MINIVAN Minivan (Challenge Series)
    PICKUPA Pickup Truck (Challenge Series)
    PIZZA Pizza Car (Challenge Series)
    SEMI Semi-Trailer (Challenge Series)
    TAXI Taxi Car (Challenge Series)
    TRAF4DSEDA Sedan 1
    TRAF4DSEDB Sedan 2
    TRAF4DSEDC Sedan 3
    TRAFAMB Ambulance
    TRAFCAMPER Camper
    TRAFCEMTR Cement Truck (Traffic version)
    TRAFCOURT Courtesy Car
    TRAFDMPTR Dump Truck
    TRAFFICCOUP Coupe
    TRAFFIRE Fire Truck
    TRAFGARB Garbage Truck (Traffic version)
    TRAFHA Hatchback
    TRAFMINIVAN Minivan (Traffic version)
    TRAFNEWS News Van
    TRAFPICKUPA Pickup Truck (Traffic version)
    TRAFPIZZA Pizza Car (Traffic
    TRAFSTWAG Station Wagon
    TRAFSUVA SUV
    TRAFTAXI Taxi Car (Traffic version)
    TRAFVANB Panel Van
    TRAILERA Oil Tanker
    TRAILERB Car Carrier
    TRAILERCMT Piper Trailer
    TRAILERCON Container Trailer
    TRAILERCRATE Crate Trailer
    TRAILERLOG Log Trailer


    Car folder names - Cop cars
    COPGHOST Heat 2 car (undercover unit)
    COPGTO Heat 3 car (GTO state unit)
    COPGTOGHOST Heat 4 car (GTO state undercover unit)
    COPHELI Police helicopter
    COPMIDSIZEINT Cut scene car
    COPMIDSIZE Heat 1 car
    COPSPORT Cross' Corvette C6
    COPSPORTGHOST Heat 6 car (Corvette C6 federal undercover unit)
    COPSPORTHENCH Heat 5 car (Corvette C6 federal unit)
    COPSUVL Light SUV
    COPSUV Heavy SUV


    Internal names - Racer cars
    sl65 Mercedes-Benz SL65 AMG
    monaro Vauxhall Monaro VXR
    db9 Aston Martin DB9
    a3_20t Audi A3 3.2 quattro
    a4_32 Audi A4 3.2 FSI quattro
    tt Audi TT 3.2 quattro
    m3_gtr BMW M3 GTR (Street version)
    m3_gtre46 BMW M3 GTR (Race version)
    cts Cadillac CTS
    cobaltss Cobalt SS
    corvette_car Corvette C6
    corvettec6r Corvette C6.R
    viper Dodge Viper SRT10
    punto Fiat Punto
    fordgt Ford GT
    mustanggt Ford Mustang GT
    gallardo Lamborghini Gallardo
    murcielago Lamborghini Murcielago
    is300 Lexus IS300
    elise Lotus Elise
    rx7 Mazda RX-7
    rx8 Mazda RX-8
    clk500 Mercedes-Benz CLK 500
    sl500 Mercedes-Benz SL 500
    slr Mercedes-Benz SLR McLaren
    eclipsegt Mitsubishi Eclipse
    lancerevo8 Mitsubishi Lancer EVOLUTION VIII
    gto Pontiac GTO
    997s Porsche 911 Carrera S
    911gt2 Porsche 911 GT2
    911turbo Porsche 911 Turbo S
    carrera_gt Porsche Carrera GT
    caymans Porsche Cayman S
    clio Renault Clio V6
    imprezzawrx Subaru Impreza WRX STi
    supra Toyota Supra
    gti VW Golf GTI
    camaro Camaro SS


    Internal names - Traffic cars
    cemtr Cement truck (Challenge Series)
    garb Garage truck (Challenge Series)
    minivan Minivan (Challenge Series)
    pickupa Pickup truck (Challenge Series)
    pizza Pizza car (Challenge Series)
    semi Semi-trailer (Challenge Series)
    taxi Taxi car (Challenge Series)
    traf4dseda Sedan 1
    traf4dsedb Sedan 2
    traf4dsedc Sedan 3
    trafamb Ambulance
    trafcamper Camper
    trafcemtr Cement truck traffic version
    trafcourt Courtesy car
    trafdmptr Dump truck
    trafficcoup Coupe
    traffire Fire truck
    trafgarb Garbage truck traffic version
    trafha Hatchback
    trafminivan Minivan traffic version
    trafnews News van
    trafpickupa Pickup truck traffic version
    trafpizza Pizza car traffic version
    trafstwag Station wagon
    trafsuva SUV
    traftaxi Taxi car traffic version
    trafvanb Panel van
    trailera Oil tanker
    trailerb Car carrier
    trailercmt Pipe trailer
    trailercon Container trailer
    trailercrate Crate trailer
    trailerlog Log trailer


    Internal names - Cop cars
    copghost Heat 2 car
    copgto Heat 3 car
    copgtoghost Heat 4 car
    copheli Police Helicopter
    copmidsizeint Cut Scene car
    copmidsize Heat 1 car
    copsport Cross' Corvette
    copsportghost Heat 6 car
    copsporthench Heat 5 car


    textures.txt syntax
    [tpk]
    Identifier=CARTEXTURES
    PipelinePath=Global\Pipeline\CarTemplateTextures_<CAR FOLDER>.tpk
    XName=
    <CAR FOLDER>
    Output=output\CARS_REPLACE\<CAR FOLDER>\TEXTURES.BIN

    [texture]
    Name=<TEXTURE NAME>
    File=<TEXTURE>.dds
    • <CAR FOLDER>: same as in build.bat, see Car folder sections above
    • <TEXTURE NAME>: texture name, see Textures section above for reference
    • <TEXTURE>.dds: file used for the texture. Use DXT1 or DXT3 textures
    • All of these names are case-sensitive, keep that on mind.
    materials.txt syntax
    <Material>=<SHADER>/x_<TEXTURE NAME>
    • <Material>: Material name in Zmodeler
    • <SHADER>: shader the material will use, see the Shaders section above for reference
    • x_<TEXTURE NAME>: car texture the material will use; if you want to use a global texture just skip the "x_" part
    • All of these names are case-sensitive, keep that on mind.
    link.txt syntax
    <part you want to make>=<part to be copied from>


    Some notes

    • Parts shouldn't exceed ~35k polygons each, otherwise the compiler will crash.
    • Due to a bug in the game's renderer, you cannot tile mapping on DXT1 textures from the car's TEXTURES.BIN; it will look broken in-game.

    Thanks to:
    • The folks of NFS Police HQ for keeping a copy of Dark Ritual's "MW Basics" thread, which is the basis for this documentation.
    • nlgzrgn for the updated shader (material) and texture lists


    Tutorials


    Parts

    See NFSU2 Parts

    Saturday, December 1, 2018

    How to convert a NFSMW modloader car to add-on car

    First of all:
    This tutorial is intended only for mods you created or personal use. Do not attempt to upload cars converted from other authors as yours without prior permission since we can tell whether a car is stolen by just looking at file size of geometry.bin and the part names in BINViewer/a hex editor. You have been warned.

    Things you will need:

    • NFSMW Unlimiter [download] - needed to make add-on cars work properly
    • MWInside's ReCompiler v190609 [download] - recompiles models and textures, adds cars to globalb.bun/lzc, logos to fronta.bun, strings to language files. (however, for adding cars it's being deprecated in favor of Binary)
      • Base files for ReCompiler by nlgzrgn [download] - basic file structure for recompiler
    • Binary [download] - edits GlobalB.lzc, FrontB.lzc, language files and others
    • VLTEd [download] - edits VLT database
    • NFSTexEd 1.7 [download] - import/extract textures from .bin/.bun/.lzc files

    Optional:

    • AntRenamer [download | portable] - a little useful program for renaming multiple files
    • Save Patcher by MWInside [download] - to patch existing saves with addon cars
      • NFS-Hasher [download] - to calculate the hashes needed for the ini file

    Note: the bracketed (< >) terms are meant to be substitued without brackets (duh) and respecting their own capitalization. So for example <MANUFACTURER> is substituted for HONDA and <color> gets substituted by green

    Step 1: File Structure

    Make sure to install you have installed the NFSMW Unlimiter first or the add-on cars won't work properly

    If you're going to add cars with Binary

    Unzip the Recompiler and recompiler base files in a folder. There are also a few files and folders that should be created or added as shown here:

    • <OLD_XNAME> is the original car's xname -duh- (ie: PUNTO)
      • Config.ini contents are the following:
        [INFO]
        NewName = <XNAME>
    The logo files can be extracted from the FRONTEND\MANUFACTURERS\<##>-<MANUFACTURER>.BIN (if it has one) and CARS_REPLACE\<XNAME>\SECONDARYLOGO.BIN with NFS TexEd.

    Now proceed to step 2

    If you're going to add cars with Ed The Car Dealer (deprecated method)

    Download Ed The Car Dealer [download] first

    Unzip the Recompiler and recompiler base files in a folder. There are also a few files and folders that should be created or added as shown here:

    • <OLD_XNAME> is the original car's xname -duh- (ie: PUNTO)
      • Config.ini contents are the following:
        [INFO]
        NewName = <XNAME>
    Unzip the Ed files into another folder. There's a lot of files and folders for Ed, but these are the ones we need:

    • <XNAME>.ini contents are the following (taken directly from the example file):
      // Rename the file as CARNAME.ini, CARNAME being the folder name (XName) you use for your add-on car.

      [INFO]
      Manufacturer = FORD // Type your manufacturer name here. (15 characters max.)
      //Class = Racing // (Added for ReCompiler intercompatibility. You can either use this or the 2 values below.) Racing, Racers, Player, Cop, Cops, Traffic, BigTraffic, HugeTraffic
      UsageType = 0 // 0 = Racer, 1 = Cop, 2 = Traffic, 3 = Wheels, 4 = Universal
      CarMemType = Racing // Racing, Player, Cop, Traffic, BigTraffic, HugeTraffic
      Skinnable = 1 // 0 = Uses own skin (CARNAME_SKIN1), 1 = Supports Paint & Vinyls.
      DefaultBasePaint = GLOSS_L1_COLOR17 // GLOSS_L1_COLOR01 (01-80) / METAL_L1_COLOR01 (01-80) / PEARL1_PAINT (1-20) / CHROME01_PAINT (01-10) / MATTE01_PAINT (01-10) / TRAFFIC_L1_COLOR01 / COP_L1_COLOR01

      [SPOILER]
      SpoilerSet = SPOILER // SPOILER, SPOILER_CARRERA, SPOILER_HATCH, SPOILER_PORSCHES
      AutosculptSpoilerSet = SPOILER_AS2 // SPOILER_AS2, SPOILER_CARRERA_AS2, SPOILER_HATCH_AS2, SPOILER_PORSCHES_AS2 (not used in MW)

      [COLLISION]
      CopyFrom = MUSTANGGT // Select any collision data to copy. Use any sentinel value to ignore copying.

      [RESOURCES]
      Description = Write your description here. // This will appear in Ed.
      Label = CARNAME_MANUFACTURER_MODEL // String label for your new car. Replace MANUFACTURER and MODEL according to your FrontEnd VLT entry.
      Name = Car Name // This will be your car's name.


      Color charts for reference:


    • <MANUFACTURER> (i.e.: FORD) and <FRONTEND_NAME> (i.e: MUSTANGGT) refer to the manufacturer and frontend nodes of the car in VLT, it's recommended to leave the frontend name the same as the xname to avoid confusion
      • The dds files can be extracted from the FRONTEND\MANUFACTURERS\<##>-<MANUFACTURER>.BIN (if it has one) and CARS_REPLACE\<XNAME>\SECONDARYLOGO.BIN with NFS TexEd.


    If you're going to add cars with ReCompiler (even more deprecated method)

    Unzip the Recompiler (get the old version first, unzip it and then unzip the new version over the old one) and recompiler base files in a folder. There are also a few files and folders that should be created or added as shown here:

    • <OLD_XNAME> is the original car's xname
      • Config.ini contents are the following:
        [INFO]
        NewName = <XNAME>
    • <MANUFACTURER> (i.e.: FORD) and <FRONTEND_NAME> (i.e: MUSTANGGT) refer to the manufacturer and frontend nodes of the car in VLT, it's recommended to leave the frontend name the same as the xname to avoid confusion
      • The dds files can be extracted from the FRONTEND\MANUFACTURERS\<##>-<MANUFACTURER>.BIN (if it has one) and CARS_REPLACE\<XNAME>\SECONDARYLOGO.BIN with NFS TexEd. However they can't be used as-is; open them up in a image editor (such as GIMP [portable]) and save them as DXT3 with no mipmaps.
    • <XNAME>.ini contents are the following

      [INFO]
      Manufacturer = <MANUFACTURER>
      Class = Racers / Cops / Traffic
      Color = <color hash (w/o spaces)>
      • Color hashes are the following:

        GLOSS PAINT :

        COLORS 1-20 (FIRST ROW):

        E2 BD BC B8 1/80
        E3 BD BC B8 2/80
        E4 BD BC B8 3/80
        E5 BD BC B8 4/80
        E6 BD BC B8 5/80
        E7 BD BC B8 6/80
        E8 BD BC B8 7/80
        E9 BD BC B8 8/80
        EA BD BC B8 9/80
        02 BE BC B8 10/80
        03 BE BC B8 11/80
        04 BE BC B8 12/80
        05 BE BC B8 13/80
        06 BE BC B8 14/80
        07 BE BC B8 15/80
        08 BE BC B8 16/80
        09 BE BC B8 17/80
        0A BE BC B8 18/80
        0B BE BC B8 19/80
        23 BE BC B8 20/80

        COLORS 21-40 (SECOND ROW):

        24 BE BC B8 21/80
        25 BE BC B8 22/80
        26 BE BC B8 23/80
        27 BE BC B8 24/80
        28 BE BC B8 25/80
        29 BE BC B8 26/80
        2A BE BC B8 27/80
        2B BE BC B8 28/80
        2C BE BC B8 29/80
        44 BE BC B8 30/80
        45 BE BC B8 31/80
        46 BE BC B8 32/80
        47 BE BC B8 33/80
        48 BE BC B8 34/80
        49 BE BC B8 35/80
        4A BE BC B8 36/80
        4B BE BC B8 37/80
        4C BE BC B8 38/80
        4D BE BC B8 39/80
        65 BE BC B8 40/80

        COLORS 41-60 (THIRD ROW):

        66 BE BC B8 41/80
        67 BE BC B8 42/80
        68 BE BC B8 43/80
        69 BE BC B8 44/80
        6A BE BC B8 45/80
        6B BE BC B8 46/80
        6C BE BC B8 47/80
        6D BE BC B8 48/80
        6E BE BC B8 49/80
        86 BE BC B8 50/80
        87 BE BC B8 51/80
        88 BE BC B8 52/80
        89 BE BC B8 53/80
        8A BE BC B8 54/80
        8B BE BC B8 55/80
        8C BE BC B8 56/80
        8D BE BC B8 57/80
        8E BE BC B8 58/80
        8F BE BC B8 59/80
        A7 BE BC B8 60/80

        COLORS 61-80 (FOURTH ROW):

        A8 BE BC B8 61/80
        A9 BE BC B8 62/80
        AA BE BC B8 63/80
        AB BE BC B8 64/80
        AC BE BC B8 65/80
        AD BE BC B8 66/80
        AE BE BC B8 67/80
        AF BE BC B8 68/80
        B0 BE BC B8 69/80
        C8 BE BC B8 70/80
        C9 BE BC B8 71/80
        CA BE BC B8 72/80
        CB BE BC B8 73/80
        CC BE BC B8 74/80
        CD BE BC B8 75/80
        CE BE BC B8 76/80
        CF BE BC B8 77/80
        D0 BE BC B8 78/80
        D1 BE BC B8 79/80
        E9 BE BC B8 80/80

        METALLIC PAINT :

        COLORS 1-20 (FIRST ROW):

        4D 88 F2 C7 1/80
        4E 88 F2 C7 2/80
        4F 88 F2 C7 3/80
        50 88 F2 C7 4/80
        51 88 F2 C7 5/80
        52 88 F2 C7 6/80
        53 88 F2 C7 7/80
        54 88 F2 C7 8/80
        55 88 F2 C7 9/80
        6D 88 F2 C7 10/80
        6E 88 F2 C7 11/80
        6F 88 F2 C7 12/80
        70 88 F2 C7 13/80
        71 88 F2 C7 14/80
        72 88 F2 C7 15/80
        73 88 F2 C7 16/80
        74 88 F2 C7 17/80
        75 88 F2 C7 18/80
        76 88 F2 C7 19/80
        8E 88 F2 C7 20/80

        COLORS 21-40 (SECOND ROW):

        8F 88 F2 C7 21/80
        90 88 F2 C7 22/80
        91 88 F2 C7 23/80
        92 88 F2 C7 24/80
        93 88 F2 C7 25/80
        94 88 F2 C7 26/80
        95 88 F2 C7 27/80
        96 88 F2 C7 28/80
        97 88 F2 C7 29/80
        AF 88 F2 CF 30/80
        B0 88 F2 C7 31/80
        B1 88 F2 C7 32/80
        B2 88 F2 C7 33/80
        B3 88 F2 C7 34/80
        B4 88 F2 C7 35/80
        B5 88 F2 C7 36/80
        B6 88 F2 C7 37/80
        B7 88 F2 C7 38/80
        B8 88 F2 C7 39/80
        D0 88 F2 C7 40/80

        COLORS 41-60 (THIRD ROW):

        D1 88 F2 C7 41/80
        D2 88 F2 C7 42/80
        D3 88 F2 C7 43/80
        D4 88 F2 C7 44/80
        D5 88 F2 C7 45/80
        D6 88 F2 C7 46/80
        D7 88 F2 C7 47/80
        D8 88 F2 C7 48/80
        D9 88 F2 C7 49/80
        F1 88 F2 C7 50/80
        F2 88 F2 C7 51/80
        F3 88 F2 C7 52/80
        F4 88 F2 C7 53/80
        F5 88 F2 C7 54/80
        F6 88 F2 C7 55/80
        F7 88 F2 C7 56/80
        F8 88 F2 C7 57/80
        F9 88 F2 C7 58/80
        FA 88 F2 C7 59/80
        12 89 F2 C7 60/80

        COLORS 61-80 (FOURTH ROW):

        13 89 F2 C7 61/80
        14 89 F2 C7 62/80
        15 89 F2 C7 63/80
        16 89 F2 C7 64/80
        17 89 F2 C7 65/80
        18 89 F2 C7 66/80
        19 89 F2 C7 67/80
        1A 89 F2 C7 68/80
        1B 89 F2 C7 69/80
        33 89 F2 C7 70/80
        34 89 F2 C7 71/80
        35 89 F2 C7 72/80
        36 89 F2 C7 73/80
        37 89 F2 C7 74/80
        38 89 F2 C7 75/80
        39 89 F2 C7 76/80
        3A 89 F2 C7 77/80
        3B 89 F2 C7 78/80
        3C 89 F2 C7 79/80
        54 89 F2 C7 80/80



        CUSTOM PAINT codes:

        PEARL PAINT
        COLORS 1-20 (FIRST ROW)

        5F 80 0D 08 1/40
        20 BD 07 55 2/40
        E1 F9 01 A2 3/40
        A2 36 FC EE 4/40
        63 73 F6 3B 5/40
        24 B0 F0 88 6/40
        E5 EC EA D5 7/40
        A6 29 E5 22 8/40
        67 66 DF 6F 9/40
        0F BD D4 0B 10/40
        D0 F9 CE 58 11/40
        91 36 C9 A5 12/40
        52 73 C3 F2 13/40
        13 B0 BD 3F 14/40
        D4 EC B7 8C 15/40
        95 29 B2 D9 16/40
        56 66 AC 26 17/40
        17 A3 A6 73 18/40
        D8 DF A0 C0 19/40
        F0 91 16 F8 20/40

        CHROME PAINT
        COLORS 21-30 (SECOND ROW)

        B9 74 2E 8F 21/40
        7A B1 28 DC 22/40
        3B EE 22 29 23/40
        FC 2A 1D 76 24/40
        BD 67 17 C3 25/40
        7E A4 11 10 26/40
        3F E1 0B 5D 27/40
        00 1E 06 AA 28/40
        C1 5A 00 F7 29/40
        D9 0C 76 2E 30/40

        MATTE PAINT
        COLORS 31-40 (SECOND ROW)

        F6 11 32 79 31/40
        B7 4E 2C C6 32/40
        78 8B 26 13 33/40
        39 C8 20 60 34/40
        FA 04 1B AD 35/40
        BB 41 15 FA 36/40
        7C 7E 0F 47 37/40
        3D BB 09 94 38/40
        FE F7 03 E1 39/40
        16 AA 79 18 40/40



    • Contents of CARNAME_<MANUFACTURER>_<FRONTEND_NAME>.ini are the following:

      [INFO]
      Name = <new car name>
      • Delete all language files except for the one that corresponds to your game's language before compiling, otherwise your carname won't appear.

    Once you have all the files set up, proceed to the next step

    Step 2: (Re)Compiling Geometry/Textures and adding the GlobalB/Frontend/Language data


    If you're going to add cars with Binary

    Open the NfSMW - ReCompiler program. This window will show up.


    Run the CARS > [OLD_XNAME] option. If it goes well you will hear a confirmation sound.

    With TexEd, open the TEXTURES.BIN file that has been generated and save it to compress it.

    Then put the newly generated GEOMETRY and TEXTURES file in the CARS\[XNAME] folder of NFSMW.

    Now open Binary and click on "Launch Binary for Modders"

    Go to Main > New Launcher

    Select your game folder with the Select Directory button, specify the usage to Modder and the game to MostWanted. Click on Save to save the launcher script


    Open the launcher file (it has an .end extension) with some plaintext editor (like notepad) and add the following highlighted text. Save the file.

    (obviously, if your game is in another language, you have to put the name of the the appropiate language file of the LANGUAGES folder)

    Back in Binary, open the launcher file by going to Main > Load Files. You will see a few nodes appearing in the left-side panel

    Open the GLOBAL\GLOBALB.LZC node and open the CarTypeInfos node. Click on an existing node and click Copy Node to make a new node from an existing one

    Enter the XNAME of the new node and press OK. It will be added to the bottom of the list

    Go to the newly selected node. The values we're going to be looking for is in the Primary section. Adjust as necessary.

    • DefaultBasePaint [string]: the stock car color. Values are:
      • GLOSS_L1_COLOR## (where ## is any number from 01 to 80 in the color chart below)
      • METAL_L1_COLOR## (where ## is any number from 01 to 80 in the color chart below)


      • PEARL1_PAINT## (where ## is any number from 01 to 20 in the color chart below)
      • CHROME01_PAINT## (where ## is any number from 01 to 10 in the color chart below)
      • MATTE01_PAINT## (where ## is any number from 01 to 10 in the color chart below)
      • TRAFFIC_L1_COLOR01
      • COP_L1_COLOR01
    • IsSkinnable [True/False]: Determines if the car uses paintable car skin material or not (racers use the former, cops/traffic the latter)
    • ManufacturerName [string]: Manufacturer the car is going to use. Refer to the the NFSMWUnlimiterSettings.ini file for a list of manufacturers.
    • MemoryType [Cop/Traffic/Player/Racing/HugeTraffic/BigTraffic]: Determines memory type usage for the car
    • UsageType [Racer/Cop/Traffic/Wheels/Universal]: What kind of mesh the car uses
    Now open the Collisions node and copy the node from another one like we did in CarTypeInfos

    Open the DBModelParts node and copy another node like we did before

    Double-click on the newly created node, this screen will appear

    We need to rename all the nodes here to make the add-on model work, to do that in one shot go to Car Parts > Find and Replace, input the XNAME to replace (A4, for this instance), click OK, then input the new XNAME (in this example it would be COROLLA) and hit OK. The next prompt will ask you if you want to make the replace case-sensitive; leave it unchecked and click OK. Now the nodes will have the correct name as shown below

    Close the window to go back to the main Binary window

    Now open the FRONTEND\FRONTB.LZC node, open the TPKBlocks node and double-click on the FRONTENDTEXTURES (or DEFAULT, if you modified the FrontB with TexEd before) node. The following window will appear.

    Go to Texture > Add Texture and open the secondary logo .dds file. In the next prompt input the name of the texture, which in this case would be SECONDARY_LOGO_<XNAME>, like in the example below and click OK:

    Do the same for the manufacturer logo if the mod already had one has one, the name for those are CARSELECT_MANUFACTURER_<MANUFACTURER> (i.e. CARSELECT_MANUFACTURER_FERRARI). Close the window to get back to the main window.

    Open the LANGUAGES\English.bin (or whatever language file you picked), open the STRBlocks node and double-click on the GLOBAL node, this window will open:

    Go to String > Add String. In the following dialog put the car name label name in Label (CARNAME_<MANUFACTURER>_<FRONTENDNAME>) and the label text, as shown in the pic below and click OK

    Close the window to go back to the main window

    If the mod uses special spoilers, you can set them up by going to GLOBAL\GLOBALB.LZC > SlotOverrides and adding/copy one of the existing nodes to set it.

    Once you're done, go to Main > Save Files to save changes


    If you're going to add cars with Ed The Car Dealer (deprecated method)

    Open the NfSMW - ReCompiler program. This window will show up.


    Run the CARS > [OLD_XNAME] option. If it goes well you will hear a confirmation sound.

    With TexEd, open the TEXTURES.BIN file that has been generated and save it to compress it.

    Then put the newly generated GEOMETRY and TEXTURES file in the CARS\[XNAME] folder of NFSMW.

    Next, open Ed, select Main > Open and open your NFSMW folder. You should see the .ini file corresponding to your car. To add it, just click on the "Add Cars" button and you're done.


    If you're going to add cars with ReCompiler (even more deprecated method)

    Open the NfSMW - ReCompiler program. This window will show up.


    Now proceed to run the following options:
    • FRONTEND > FRONTEND
    • GLOBAL > GLOBALB
    • LANGUAGE
    • CARS > [OLD_XNAME]
    You will hear a confirmation sound every time an operation has been successful

    With TexEd, open the TEXTURES.BIN file that has been generated and save it to compress it.

    Now put the files in their corresponding game folders (don't forget to make backups first!)
    • GLOBALB.BUN/.LZC > GLOBAL
    • FRONTA.BUN > FRONTEND
    • <LANGUAGE>.BIN > LANGUAGES
    • GEOMETRY.BIN, TEXTURES.BIN > CARS\[XNAME]

    Step 3: VLT Editing

    Open VLTEd and go to File > Open; select your NFSMW folder. You will see the VLT nodes like this:


    You will need to create new nodes for the addon car, but it's better to copy an existing one since creating a new one is rather buggy. And since we're dealing with a car from modloader, it's better to copy them from the original car it's replacing. Normally that would be a tedious process, but I prepared a script that will cut some work here:

    copy_node brakes <original_xname> default <added_xname>
    copy_node brakes <original_xname>_top <added_xname> <added_xname>_top
    copy_node chassis <original_xname> default <added_xname>
    copy_node chassis <original_xname>_top <added_xname> <added_xname>_top
    copy_node ecar <original_xname> racers <added_xname>
    copy_node frontend <original_manufacturer> <region> <added_manufacturer>
    copy_node frontend <original_xname> <manufacturer> <added_xname>
    copy_node engine <original_xname> default <added_xname>
    copy_node engine <original_xname>_top <added_xname> <added_xname>_top
    copy_node induction <original_xname> default <added_xname>
    copy_node induction <original_xname>_top <added_xname> <added_xname>_top
    copy_node pvehicle <original_xname> racers <added_xname>
    copy_node tires <original_xname> default <added_xname>
    copy_node tires <original_xname>_top <added_xname> <added_xname>_top
    copy_node transmission <original_xname> default <added_xname>
    copy_node transmission <original_xname>_top <added_xname> <added_xname>_top
    copy_node camerainfo <original_xname>_hood hood <added_xname>_hood
    update_field pvehicle <added_xname> MODEL Visual <MODEL_XNAME (IN ALL CAPS)>
    update_field pvehicle <added_xname> MODEL Collision <MODEL_XNAME (IN ALL CAPS)>
    update_field pvehicle <added_xname> MODEL Collision64 <MODEL_XNAME (IN ALL CAPS))>
    update_field pvehicle <added_xname> transmission[0] Collection <added_xname>
    update_field pvehicle <added_xname> transmission[1] Collection <added_xname>_top
    update_field pvehicle <added_xname> tires[0] Collection <added_xname>
    update_field pvehicle <added_xname> tires[1] Collection <added_xname>_top
    update_field pvehicle <added_xname> induction[0] Collection <added_xname>
    update_field pvehicle <added_xname> induction[1] Collection <added_xname>_top
    update_field pvehicle <added_xname> frontend Collection <added_xname>
    update_field pvehicle <added_xname> engine[0] Collection <added_xname>
    update_field pvehicle <added_xname> engine[1] Collection <added_xname>_top
    update_field pvehicle <added_xname> chassis[0] Collection <added_xname>
    update_field pvehicle <added_xname> chassis[1] Collection <added_xname>_top
    update_field pvehicle <added_xname> brakes[0] Collection <added_xname>
    update_field pvehicle <added_xname> brakes[1] Collection <added_xname>_top


    * some induction nodes have _base attached to it, that's for cars that don't come with turbo/supercharger, in that case the nodes related to induction will be the following:

    copy_node induction <original_xname>_base default <added_xname>_base
    copy_node induction <original_xname>_top <added_xname>_base <added_xname>_top
    update_field pvehicle <added_xname> induction[1] Collection <added_xname>_base
    update_field pvehicle <added_xname> induction[2] Collection <added_xname>_top

    **some induction nodes have only the _top node, mostly for high-tier cars, in that case the nodes related to induction will be the following:

    copy_node induction <original_xname>_top default <added_xname>_top
    update_field pvehicle <added_xname> induction[1] Collection <added_xname>_top

    *** If you're adding the car GLOBALB entry with Binary or Ed, set the <XNAME> in the Collision and Collision64 lines as the XNAME of the added car. If you're adding the car GLOBALB entry with ReCompiler, you have to change the Collision and Collsion64 lines to another original car XNAME; your car might float above/sinking on the ground so it might take a few tries to get it right.

    Copy and paste this into a text editor (Notepad will do), replace the bracketed names as suggested (for example, <added_xname> to mustanggt and so on) and save it as <addon_car>.nfsms.

    Back to VLTEd, import the .nfsms file with File>Import>ModScript. Click "Install" in the following dialog.

    Next, import the the FE.MWPS file of the modloader car with File > Import > MWPS. Click "Import", then OK. You will see the script editor pane (lower right quadrant) now has some commands, but we need to make a slight change: delete the line that contains "manufacturer" since that has to be taken care later. (if there is any)

    Now import the ATTRIBUTES.MWPS file. However MWPS import is not perfect and you will notice there might be some errors as noted in the import results window; scroll down to check what those might be.


    For example, here it says "No value has been found at offset"; in this case it refers to the gear count value in the transmission node, which can be fixed by right-clicking on the car's transmission node, selecting "edit fields" and changing the GEAR_RATIO count to the desired value. Also some values like the copspeech and engine/turbo sounds might not be imported at first; you could either check if those have any other type than dword next to patch in their lines in the MWPS file in Notepad and try importing it again or change them manually in VLTEd

    Click OK, then copy the contents of the script editor and paste them into a text editor. Replace the xname of the original car for the addon car, copy the whole thing; open the .nfsms file with the text editor and paste the copied script at the bottom of script file, save the script.

    Back to VLTEd, reload the file to undo changes and import the script again. Now, change the missing values (engine/turbo sounds, copspeech, etc.) if any and then go to the frontend node of the added car (and added manufacturer, if there is any). Set the manufacturer number according to the Unlimiter list in the .ini (you can add manufacturers to the ini file and use them as well).
    [Manufacturers]
    1 = BMW
    2 = FORD
    3 = SUBARU
    4 = PORSCHE
    5 = AUDI
    6 = MAZDA
    7 = GENERAL_MOTORS
    8 = DODGE
    9 = TOYOTA
    10 = MITSUBISHI
    11 = MCLAREN
    12 = MERCEDES
    13 = NISSAN
    14 = LOTUS
    15 = LAMBORGHINI
    16 = RENAULT
    17 = LEXUS
    18 = PONTIAC
    19 = CHEVROLET
    20 = VAUXHALL
    21 = ASTONMARTIN
    22 = VOLKSWAGEN
    23 = FIAT
    24 = CADILLAC
    25 = CORVETTE
    26 = ACURA
    27 = ALFAROMEO
    28 = BENTLEY
    29 = BUGATTI
    30 = CATERHAM
    31 = CHRYSLER
    32 = FERRARI
    33 = FORDSHELBY
    34 = HONDA
    35 = HUMMER
    36 = INFINITI
    37 = JAGUAR
    38 = JEEP
    39 = KOENIGSEGG
    40 = LANCIA
    41 = MARUSSIA
    42 = MASERATI
    43 = MINI
    44 = NFS
    45 = OLDDODGE
    46 = PAGANI
    47 = PLYMOUTH
    48 = SCION
    49 = SEAT
    50 = SHELBY
    51 = SRT
    52 = TERLINGUA
    53 = RENAULT_SPORT
    54 = FORD_UK
    55 = ARIEL
    56 = HOLDEN
    100 = PALMONTPD
    101 = ROCKPORTPD
    102 = TRUCK
    103 = FIRETRUCK
    104 = VAN
    105 = COPTER
    106 = TRAFFIC


    Once when you're done, save, export the script (overwrite the old one) and clear the script editor window. Now try out your new add-on car by creating a new save! (or by patching an existing save -see below-)


    Optional step 1: Vinyls

    If the car came with vinyls, you can convert those for addon use.

    First export the vinyls with TexEd to a folder. Then open AntRenamer and add the folder containing the exported vinyls.

    Then click on "Actions", go to "String replacement", in "Search for" put  (in this example PUNTO vinyls are converted to SENTRAB13)

    Click Go and check if all the files were renamed correctly, correct if neccessary.

    Download this vinyls_base file, rename it to vinyls.bin and open it with Tex-Ed. Go to "Texture" > "Add from folder", select the folder containing the vinyls and click OK. Save the file (it might take a couple of minutes) to finish.

    Optional step 2: Patching save to use add-on cars

    In case you're not in the mood to make a new save every time you add a new car, you can patch an existing save file. Keep on mind to make a backup of the original save because you cannot remove cars from save files. Also, it will break existing cars in My Cars, Career Garage and Bonus Cars

    Unzip the Save Patcher to a folder. The folder structure should be like this


    And the contents of the <XNAME>.ini are the following:
    [MAIN]
    frontend = <hashed frontend name>
    pvehicle = <hashed xname>
    You will need NFS-Hasher to hash the frontend and xnames. Open it up and in the "Input Text" field type the frontend name, then click the "Copy" button next to "VLT File". Paste the hashed name in the frontend and remove the "0x" in front of it. Do the same for the xname/pvehicle line and save.

    Now run the NfSMW - SavePatcher program, open Patch Save and click on the save you want to patch. You will hear a confirmation sound if done correctly.

    Finally, open the NFSMW Save Editor, open the patched save and save it to make it work. You're done!


    Hope you found this tutorial useful, cya!