NFS ProStreet Modding - Tutorial

May 15, 2017, 11:14 p.m.
Hey there , let's introduce you into a new modding shit , the moddding for NFS ProStreet ! :D

Tools needed for modding:
-Zmodeler 2.2.6
-Zmodeler 2.07
-Zmodeler 1.0.7
-NFS Tex-Ed
-Photoshop CS5 / GIMP / Paint
-NFS ProStreet modding tools v1.0 by nfsu360
-And some 3d meshes of the model you want to convert , of course.


First of all , the list of available shaders in NFS PS:

PS_CARPAINT
PS_WINDOW_FRONT 
PS_WINDOW_FRONT_LEFT 
PS_WINDOW_FRONT_RIGHT
PS_WINDOW_REAR
PS_WINDOW_REAR_LEFT 
PS_WINDOW_REAR_RIGHT
PS_WINDOW_REAR_DEFROSTER
PS_WINDOW_FRONT_DAMAGE
PS_WINDOW_FRONT_LEFT_DAMAGE 
PS_WINDOW_FRONT_RIGHT_DAMAGE
PS_WINDOW_REAR_DAMAGE
PS_WINDOW_REAR_LEFT_DAMAGE
PS_WINDOW_REAR_RIGHT_DAMAGE

ALUMINUM
BOTTOM
BRAKEDISC
BRAKELIGHT
BRAKELIGHTGLASS
BRAKELIGHTGLASSRED
CALIPER
CANDYPAINTBLACK
CANDYPAINTBLUE
CANDYPAINTGREEN
CANDYPAINTINDIGO
CANDYPAINTRED
CANDYPAINTVIOLET
CANDYPAINTWHITE
CANDYPAINTYELLOW
CARBONFIBER
CHAR_CLOTH
CHAR_COTTON
CHAR_DENIM
CHAR_EYE
CHAR_FLAG
CHAR_GLASS
CHAR_HAIR
CHAR_HELMET
CHAR_HUB
CHAR_LATEX
CHAR_LEATHER
CHAR_METAL
CHAR_MIRROR
CHAR_PLASTIC
CHAR_POLYES
CHAR_RUBBER
CHAR_SILK
CHAR_SKIN
CHAR_SKINDJ
CHAR_SKINFGA
CHAR_SKINFGB
CHAR_SKINRO
CHAR_SKINSDK
CHASSIS
CHROME
CHROMEPAINTBLACK
CHROMEPAINTBLUE
CHROMEPAINTGREEN
CHROMEPAINTINDIGO
CHROMEPAINTRED
CHROMEPAINTVIOLET
CHROMEPAINTWHITE
CHROMEPAINTYELLOW
CLEARPLASTIC
COPPAINT
DAMAGE
DECAL
DEFAULT
DEFROSTER
DOORLINE
DRIVER
DULLPLASTIC
ENGINE
GRASSTERRAIN
GRILL
GRILLCHROME
HEADLIGHTCHROME
HEADLIGHTGLASS
HEADLIGHTREFLECTOR
INTERIOR
IRIDPAINTBLACK
IRIDPAINTBLUE
IRIDPAINTGREEN
IRIDPAINTINDIGO
IRIDPAINTRED
IRIDPAINTVIOLET
IRIDPAINTWHITE
IRIDPAINTYELLOW
LICENSEPLATE
MAGCHROME
MAGCHROMEBLACK
MAGCHROMEBLUE
MAGCHROMEGREEN
MAGCHROMEINDIGO
MAGCHROMERED
MAGCHROMEVIOLET
MAGCHROMEWHITE
MAGCHROMEYELLOW
MAGLIP
MAGMATTE
MAGMATTEBLACK
MAGMATTEBLUE
MAGMATTEGREEN
MAGMATTEINDIGO
MAGMATTERED
MAGMATTEVIOLET
MAGMATTEWHITE
MAGMATTEYELLOW
MAGMETBLACK
MAGMETBLUE
MAGMETGREEN
MAGMETINDIGO
MAGMETRED
MAGMETVIOLET
MAGMETWHITE
MAGMETYELLOW
MAGSILVER
MATTEPAINTBLACK
MATTEPAINTBLUE
MATTEPAINTGREEN
MATTEPAINTINDIGO
MATTEPAINTRED
MATTEPAINTSILVER
MATTEPAINTVIOLET
MATTEPAINTWHITE
MATTEPAINTYELLOW
METPAINTBLACK
METPAINTBLUE
METPAINTGREEN
METPAINTINDIGO
METPAINTRED
METPAINTSILVER
METPAINTVIOLET
METPAINTWHITE
METPAINTYELLOW
PEARLPAINTBLACK
PEARLPAINTBLUE
PEARLPAINTGREEN
PEARLPAINTINDIGO
PEARLPAINTRED
PEARLPAINTVIOLET
PEARLPAINTWHITE
PEARLPAINTYELLOW
PLAINNOTHING
RAD
REFLECTIVESIGN
REGPAINTBLACK
REGPAINTBLUE
REGPAINTGREEN
REGPAINTINDIGO
REGPAINTRED
REGPAINTSILVER
REGPAINTVIOLET
REGPAINTWHITE
REGPAINTYELLOW
ROAD
RUBBER
TRAFFIC
TRAFFICWINDOWS
WINDOWMASK
WINDSHIELD
WINDTUNNEL
WINDTUNNELSHDW
WTINTDARKBLACK
WTINTDARKBLUE
WTINTDARKGREEN
WTINTDARKINDIGO
WTINTDARKRED
WTINTDARKSILVER
WTINTDARKVIOLET
WTINTDARKYELLOW
WTINTLIGHTBLACK
WTINTLIGHTBLUE
WTINTLIGHTGREEN
WTINTLIGHTINDIGO
WTINTLIGHTRED
WTINTLIGHTSILVER
WTINTLIGHTVIOLET
WTINTLIGHTYELLOW
WTINTPEARLBLACK
WTINTPEARLBLUE
WTINTPEARLGREEN
WTINTPEARLINDIGO
WTINTPEARLRED
WTINTPEARLSILVER
WTINTPEARLVIOLET
WTINTPEARLYELLOW

Then , the existing mount points:
BRAKE_FRONT 
BRAKE_FRONT_T0
BRAKE_FRONT_T1
BRAKE_FRONT_T2
BRAKE_FRONT_T3
BRAKE_FRONT_T4
BRAKELIGHT_CENTRE
BRAKELIGHT_LEFT
BRAKELIGHT_LEFT_EXTRA
BRAKELIGHT_LEFT_EXTRA2
BRAKELIGHT_RIGHT
BRAKELIGHT_RIGHT_EXTRA
BRAKELIGHT_RIGHT_EXTRA2
DRIVER_POSITION 
ENGINE_FX 
EXHAUST_CENTER 
EXHAUST_FX 
EXHAUST_LEFT 
EXHAUST_RIGHT 
HAND_POSITION 
HEADLIGHT_LEFT 
HEADLIGHT_RIGHT 
LEFT_REVERSE 
LICENSE_PLATE_REAR 
REVERSE_LEFT 
REVERSE_RIGHT 
RIGHT_REVERSE 
ROOF_SCOOP
SEAT_LEFT
SEAT_RIGHT
SHATTER_HEADLIGHT_GLASS_LEFT
SHATTER_HEADLIGHT_GLASS_RIGHT
SHATTER_WINDOW_FRONT_LEFT
SHATTER_WINDOW_FRONT_RIGHT
SHATTER_WINDOW_REAR
SHATTER_WINDOW_REAR_LEFT
SHATTER_WINDOW_REAR_RIGHT
SPOILER


The linker script for attach the parts correctly, if you want to see the mountpoints working correctly , you MUST follow them 

##################################################
# Linker script
##################################################
#
# Part to create Part to be copied as new Copy mount points? (1 - yes)
#
%_KIT01_BODY %_KIT00_BODY 1
%_KIT03_BODY %_KIT00_BODY 1
%_KIT04_BODY %_KIT00_BODY 1
%_KIT01_BUMPER_FRONT %_KIT00_BUMPER_FRONT 0
%_KIT03_BUMPER_FRONT %_KIT00_BUMPER_FRONT 0
%_KIT04_BUMPER_FRONT %_KIT00_BUMPER_FRONT 0
%_KIT11_BUMPER_FRONT %_KIT00_BUMPER_FRONT 0
%_KITW01_BUMPER_FRONT %_KIT00_BUMPER_FRONT 0
%_KIT01_BUMPER_REAR %_KIT00_BUMPER_REAR 1
%_KIT03_BUMPER_REAR %_KIT00_BUMPER_REAR 1
%_KIT04_BUMPER_REAR %_KIT00_BUMPER_REAR 1
%_KIT11_BUMPER_REAR %_KIT00_BUMPER_REAR 1
%_KITW01_BUMPER_REAR %_KIT00_BUMPER_REAR 1
%_KIT01_SKIRT_LEFT %_KIT00_SKIRT_LEFT 0
%_KIT01_SKIRT_RIGHT %_KIT00_SKIRT_RIGHT 0
%_KIT03_SKIRT_LEFT %_KIT00_SKIRT_LEFT 0
%_KIT03_SKIRT_RIGHT %_KIT00_SKIRT_RIGHT 0
%_KIT04_SKIRT_LEFT %_KIT00_SKIRT_LEFT 0
%_KIT04_SKIRT_RIGHT %_KIT00_SKIRT_RIGHT 0
%_KIT11_SKIRT_LEFT %_KIT00_SKIRT_LEFT 0
%_KIT11_SKIRT_RIGHT %_KIT00_SKIRT_RIGHT 0
%_KITW01_SKIRT_LEFT %_KIT00_SKIRT_LEFT 0
%_KITW01_SKIRT_RIGHT %_KIT00_SKIRT_RIGHT 0
#
# eof
#



You need to know the material nomenclature in NFS PS has been "simplified" by nfsu360. In fact , all materials are stored in the z3d file, like this:

MAGSILVER (shader\material] @ %_RIM (texture)

So , you don't need to keep the materials.txt file anymore.



MOUNTPOINTS:

As you know how to use shaders int he previous series , now in NFS PS , it's a bit more complicated.

For exhausts , the name you have to give to the material to this mountpoints is 

"%_KIT00_BASE@Y=-90.0"

Nfsu360 has given some details about it:

PART_NAME@X=?Y=?Z=?

%_KIT00_BASE = part name, %_ will be automatically replaced to target car name.

X, Y, Z - rotations

That means , according to yout mountpoints list , that you have to put the correct values ,and create same type of materials , but with different names , depends on the part.

*NOTE : even wih this detailed method , I wasn't able to make the licenseplate mountpoint working. Some other experiments are needed.

––––––––––––––––––––––––––––––––––

WHEEL POSITIONS

Now you have learned how to add correclty the mounpoints , you need to know there isn't any program such as Cfg-Editor for the wheel positions , so you need to use the trial-and-error method to fit the car correctly. I would say the choice of the car is also important , in order to avoid size differences between each model.

Usable part names :

kit00_body
kit00_base
kit00_bumper_front
kit00_rear_bumper
kit00_skirt_left
kit00_skirt_right
kit00_hood
kit00_wheel_tire_front
kit00_wheel_tire_rear
kit00_spoiler
kit00_trunk
kit00_window_front
kit00_window_front_left
kit00_window_front_right
kit00_window_rear
kit00_window_rear_left
kit00_window_rear_right
kit00_brakelight_left
kit00_brakelight_right
kit00_headlight_left
kit00_headlight_right
kit00_headlight_glass_left
kit00_headlight_glass_right
kit00_brakelight_glass_left
kit00_brakelight_glass_left
kit00_exhaust
kit00_engine
kit00_sidemirror_left
kit00_sidemirror_right
kit00_door_left
kit00_door_right
kit00_brake_front
kit00_brake_rear
kit00_brakerotor_front
kit00_brakeotor_rear
kit00_rollcage_stage_0
kit00_rollcage_stage_1
kit00_rollcage_stage_2
kitw01_widebody

kit00 = base car
kit11,kit 01,kit03,kit04,kit06 = autosculpt kits (depends on the existing set)
kitw01 = widebodykit

It may happen that the autosculpt kits stay active even while the widebody has been selected. To avoid this issue , just attach the widebody bumpers to the kit.

By Eclipse72Rus : 
[font=Verdana]Prosteet, like Undercover, have a game engine that calculates damages from damage files.
Geometry compiler automatically adds B-E. It's good, you doesn't need to fill the link file badly, if you want to make a mod, which can be usable even on a low end PC (Applicable for high poly models.) [/font]


After working a bit on the LP-650 Roadster , i discovered why the mountpoints for the licenseplate didn't worked in my first mods , lemme explain. :D

The fact is in this tool , you can't attach the licenseplate with the car base , in order to make it appear , your material list needs to be like that in Zmodeler :

%_KIT00_BUMPER_REAR@Y=

After "Y=" , insert the desired angle rotation for the plate.
According to your mountpoints list , it should look like this , in the mountpoints.txt

Mountpoint                Rotations x,y,z   part linked
_LICENSE_PLATE_REAR00      0.0.30.0.0.0     %_KIT00_BUMPER_REAR

Depending of the car you convert , you'll have some different angles :

The Supercars mostly use a 30.0 value , the hatchbacks 90.0 and some cars may use 60.0.


For the exhausts , it's a bit simple. You need to copy the exhaust , and name it differently of the main part , which is named " kit00_exhaust".
For the autosculpt one , you have to name it as " kit11_exhaust" , but you have to let them in their original place , only the widebody needs to have it's exhaust placed at the center of the car , since the dummy does all the work of placement.

You have to make two dummies for the exhaust flames , each one linked to a different material , depending of the part it's linked to:

%_KIT00_EXHAUST@Y=
%_KIT11_EXHAUST@Y=

Updates will come. Don't worry if you didn't understand something , you can ask me if it's not clear. :)

Some tentatives to see what happens here and there with the converted models and the game engine , there is some results:

- You have to use a texture bigger than 64x64 pixels with the GRILL shader , if you don't , the texture will appear bugged as fuck.

- In most models of Real Racing 3 and other games , some black things appear here and there , even if the model shows correctly in Zmodeler. I dunno why it does that.

- there is other slots of parts unused by the game , such as "kit00_roof" which can be helpful for avoid an excedent of polys , you should use this linker.txt

##################################################
# Linker script
##################################################
#
# Part to create Part to be copied as new Copy mount points? (1 - yes)
%_KIT00_ROOF_C                          %_KIT00_ROOF_A                         0
#

Potentially unused names :
kit00_roof
kit00_engine ( you must use it if you replace the Gallardo Superleggera , even the original model has it , but it doesn't show for unknown reason.)

-You need to place your calipers (brakes) far more closer of the stock wheel to be capable to adjust it correctly , taking a screenshot is highly recommended. It requires about 4/5 tentatives to be correct.

I knew that NFSPS does allow the option to paint the stock rims, but why it's almost bugged with the mod tools ? there goes my experiment:

aa43f4488956722.jpg bad644488956741.jpg 106eba488956760.jpg 3dc00d488956773.jpg 1a2816488956788.jpg 350c2c488956796.jpg

I made some tests :

DXT1 No Alpha : no paint color and no finish, only the matte finish displays.

DXT1 1bit Alpha : Almost a good result but trying to have a decent rim paint is a real hell, and it tends to not show any color, but the finish does work.

DXT3 : The best format recommended, but I don't know why the texture compiler doesn"t allow the option, I want to know if there is any way to edit this. The pictures above are my result in DXT3, after rsizing the textures to the same size as the original GALLARDOS ones.

DXT5 : Almost DXT3 but useless, too much black in the alpha and the texture concerned wont show, too much light and the rims became non-paintable. All the finishes work but the rims look disgusting , there a sort of " see inside " effect due to the format texture.

As for now, if you want to allow rim paint, be sure to modify the texture assignement in ZMod , plus modifying the texture in order to replace the original ones.

Performance - related findings , thanks to X-V12-POWER-X on DP :

I've found a cure to NFSPS slug like handling. it needs manual adjusting of each car, though.

values "TANK_SLAPPER_TIMER" responsible for slow steering speed. put it to 0.

values "STEERING_SPEED" > similar to the above. put it to 1 in every field that exists.

This way you have instant wheel/joystick reaction. Cars become very twitchy but this is because the excess grip that they have.

I have done new physics for the carrera gt. it feels wonders to drive.

I didn't look at much values. some of them remain unchanged in every car for example Ax and Cx values and the one that are hashes (have no name) Those are good to play with because they let us create unique handling.

I'll define some very basic ones here

Kmu -> coefficient of friction (straight line). grip when accelerating/braking. higher is worse.
Ka -> lateral coefficient of friction. higher is worse
Mu0 -> tire grip at given speed. higher is better
ranges from 0-30, 30-60, 60-90, 90-120, 120-150, 150-180

C1 - didn't experiment yet
C2 - front: tendency of car front to nose to the inside of the corner. higher value means more turning but this is bad. after the
car noses out too much (grip loss), it will be harder for it to return to its original position (straight line) this is
only when mid-full lock is used.
   rear: higher-> more straight line grip (less wheelspin). however, the rear of the car seems to be anchored to the
track, giving a heavier feel, thus creating understeer.
C3 - front value: mid lock grip, more means more understeer at mid corner. irrelevant of speed. more noticeable in turns that require
average steering lock (70-90 degrees of wheel turn irl)
 same applies to rear value. when it exceeds the available grip, you spin.

C4 - (undefined) higher means more understeer. at any steering input. this is the resistance of the tires to change direction.
May 18, 2017, 10:41 p.m.
Quick update about the appearance of the car , in races

This value
 WheelWell 

This value controls the ride height of your car outside of the garage. When you're in freeroam , the FECompressions Value replaces them.
Their use is simple but works in the same way.

Bigger the number is , lower the car will be. Thanks to SennaGhost for this reminding , I only now see the use of it… :/
June 18, 2017, 9:36 p.m.
Mu0 -> tire grip at given speed. higher is better ranges from 0-30, 30-60, 60-90, 90-120, 120-150, 150-180

When working on the updated handling of my Lexus LFA for NFSPS , I noticed that some values are prone to follow a hierarchy for the tire grip , from the lowest state possible , up to the higher one.

update_field vehicle 997gt2_track_highend Mu0[0] Rear 5
update_field vehicle 997gt2_track_highend Mu0[0] Front 3
update_field vehicle 997gt2_track_highend Mu0[1] Front 2
update_field vehicle 997gt2_track_highend Mu0[1] Rear 4
update_field vehicle 997gt2_track_highend Mu0[2] Front 2
update_field vehicle 997gt2_track_highend Mu0[3] Front 2
update_field vehicle 997gt2_track_highend Mu0[4] Front 2
update_field vehicle 997gt2_track_highend Mu0[5] Front 2
update_field vehicle 997gt2_track_highend Mu0[6] Front 2
update_field vehicle 997gt2_track_highend Mu0[7] Front 2
update_field vehicle 997gt2_track_highend Mu0[2] Rear 4
update_field vehicle 997gt2_track_highend Mu0[3] Rear 4
update_field vehicle 997gt2_track_highend Mu0[4] Rear 4
update_field vehicle 997gt2_track_highend Mu0[5] Rear 4
update_field vehicle 997gt2_track_highend Mu0[6] Rear 4
update_field vehicle 997gt2_track_highend Mu0[7] Rear 4
update_field vehicle 997gt2_track_highend Mu0[8] Front 1.17
update_field vehicle 997gt2_track_highend Mu0[9] Front 1.17
update_field vehicle 997gt2_track_highend Mu0[9] Rear 1.39
update_field vehicle 997gt2_track_highend Mu0[8] Rear 1.39

update_field vehicle 997gt2_highendscgrip Mu0[0] Rear 1.75
update_field vehicle 997gt2_highendscgrip Mu0[0] Front 4
update_field vehicle 997gt2_highendscgrip Mu0[1] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[1] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[2] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[3] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[4] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[5] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[6] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[7] Front 2
update_field vehicle 997gt2_highendscgrip Mu0[2] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[3] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[4] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[5] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[6] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[7] Rear 4
update_field vehicle 997gt2_highendscgrip Mu0[8] Front 1.17
update_field vehicle 997gt2_highendscgrip Mu0[9] Front 1.17
update_field vehicle 997gt2_highendscgrip Mu0[9] Rear 1.39
update_field vehicle 997gt2_highendscgrip Mu0[8] Rear 1.39

As you may have seen , it's pretty like a hierarchy , and I would recommand to anyone which goes into a full tune of these values to keep the TANK_SLAPPER_TIMER value set on 1 , then adding the untouched values of this section to the script ( you can collecting them by selecting them and by pressing the " Inser " key ).

After what , you can play with them to see which values needs to be changed.


/!\ ATTENTION /!\

From what I saw , apart the Porsches , which have different values , like the 997GT2 and the 997GT3RS which have different sets , and the 997 Turbo which has the same values everywhere , ( some cars from the Booster pack seems to use the same values everywhere too ) the remaining cars mostly use two sets.

So be careful when you edit them. Otherwise you could get a car which flips instantly if you accelerate at the countdown. ( no jokes).

Search Forums

Active Topics

Notifications

You currently have no notifications.

{[{ notification.title }]}

{[{ notification.created|timeAgo:'MM/dd/yyyy' }]}
{[{ notification.sender.display_name }]}
older notifications mark all as read
Shoutbox
{[{ shout.created|timeAgo:'MM/dd/yyyy' }]}