Left 4 Dead 2

Left 4 Dead 2

69 évaluations
Map Specific Textures (Modders Guide)
De Ellie
This Guide aims to teach to L4D2 Modders how to use Map Specific Textures.
   
Récompenser
Ajouter aux favoris
Favoris
Retirer des favoris
[General Information]
Difficulty :

Short description : Allows Modders to set specific VMT parameters (skins / visibility) for specific maps, campaigns, or specific parts of the map.

Examples of what it can do :
  • Make Zoey have a specific shirt for the Dark Carnival campaign
  • Set a specific skin for Helicopters on all custom campaigns
  • Set up a specific tank skin for a specific map
  • Set specific skins for certain parts of the map (not featured in this guide because it's complex).
Time to implement : A few minutes (it takes a medium amount of time to learn how to do it the first time, but afterwards, it can be done in minutes)

Needed skills :
  • Knowing how to edit a VMT
  • Knowing how to make a VTF with multiple frames
What are Map Specific Textures ?
What is it ?
Map Specific Textures (or simply MST) is a way to brute force specific VMT parameters (mostly $frame and $alpha) for specific (already made) maps or even specific parts of the map.

If you are a map maker, this Guide is NOT for you. You should read this one instead.

Technically speaking, the way Map Specific Textures work is not directly based on the map itself, but on its unique min/max X/Y/Z coordinates. The code you're about to work with gets these values for the map the player is on, and checks if it's the same as the one the modder set a specific skin on.

Questions and Answers (Q&A)
Q : On what does it work ?
On everything.
Q : For what maps does it work ?
For every map, even custom ones.
Q : Does it work online ?
Yes, provided that the server allows mods (not in Versus).
Q : Could I couple that with RNG (Randomization) ?
Yes, you could set random skins but a specific one for a specific map.
Q : Can it also change models and not only textures ?
It can hide and show entire VMTs, so technically, yes, but it cannot swap bodygroups. Also, the glow outline stroke (survivor down / pickable item) will take all models into account.
Q : Can I change a very specific object in a map with this ?
Yes (it's a bit more complicated), but only provided that there is not another same object around that you could see at this exact place.
Q : Is there any limitations ?
Each specific map (≠ campaign) requires 2 variables and there's a limit of 128 variables. The code uses some, which means that it's probably difficult to define a custom different skin for all L4D and L4D2 campaigns.

How much time does it take to add this to a mod ?
Provided that you already have all the VTF files ready (textures with multiple skins), it takes probably an hour to learn and test the first time. Once you understand how it works, it's not hard to do, even though it's a bit more technical than RNG because you need to edit and add blocks of code yourself.

🅼 MAP SPECIFIC TEXTURES
Since this technique is a bit more complex to understand than the classic RNG, the next steps will also follow a little practical example : the idea is to make a Boomer Skin that has pajamas in No Mercy Hospital, but that, when not in No Mercy hospital, has 3 (others) RNG skins. It will showcase all the aspects of the technique. You can mod along, for example if you want to make a specific Zoey shirt for Dark Carnival. You'll just need to enter other map values. All the different code variants are avaliable in the mod if you decompile it.
https://gtm.you1.cn/sharedfiles/filedetails/?id=2275341897 Thanks to Max ⚢ for the help.
Note that there's only one way to implement Map Specific Textures. You do not need to think about what item or what method to use. It works on anything anyway.
① : Prepare the textures
The first thing you need to do is to create a VTF file with multiple frames.
Save all your different skins as .tga files and put them in the same folder.

Rename your textures so they have names like 1.tga, 2.tga, 3.tga, 4.tga and so on, and make sure that the Map Specific Textures have the highest number(s).
For my RNG Boomer with Pajamas in No Mercy, I have 4 textures (.tga), 3 with the skins for the RNG (Randomization) and 1 for the Pajamas. Therefore, I need to name the pajama texture 4.tga because it's the Map Specific Texture and needs to go at the end.


Open VTFEdit , press CTRL+I, go to the folder where your textures (1.tga, 2.tga...) are, select all the textures at once and press ENTER (or click on "Open").
At this point, if you did everything correctly, you should be able to change the frame value by clicking on the little arrows in the image section in VTFEdit.



Check that the last frame(s) are the ones that are the Map Specific Textures ones. Then press CTRL+S and save the VTF File. Put it in your work in progress mod folder as usual.

② : Copy the code
Open the VMT file of the thing you want to have a map specific texture for.
Do you see something like this ?
patch { include "materials/models/survivors/survivors_it_shared.vmt" insert {
If YES, replace it with
VertexLitGeneric {
If NO, just continue reading.

⑵ Still in your VMT file of the thing you want to have a map specific texture for, look for the last...
}
...that is at the very end of the VMT.

Copy & Paste this block of code above that last } :
////////////////////////////////////////////////////////////////////////////////// // MAP SPECIFIC TEXTURES (by Ellie, 2020) ////////////////////////////////////////////////////////////////////////////////// $world_mins "[0 0 0]" $world_maxs "[0 0 0]" $minX ".0" $maxX ".0" $minY ".0" $maxY ".0" $minZ ".0" $maxZ ".0" $check "0" $zero "0" $one "1" //--------------------------------------------------------------------V-BLOCK $??max# "0000" // This needs to be modified $??value "0" // This needs to be modified //--------------------------------------------------------------------V-BLOCK Proxies { WorldDims { } Clamp { srcVar1 "$zero" min "$world_mins[0]" max "$world_mins[0]" resultVar "$minX" } Clamp { srcVar1 "$zero" min "$world_mins[1]" max "$world_mins[1]" resultVar "$minY" } Clamp { srcVar1 "$zero" min "$world_mins[2]" max "$world_mins[2]" resultVar "$minZ" } Abs { srcVar1 "$minX" resultVar "$minX" } Abs { srcVar1 "$minY" resultVar "$minY" } Abs { srcVar1 "$minZ" resultVar "$minZ" } Clamp { srcVar1 "$zero" min "$world_maxs[0]" max "$world_maxs[0]" resultVar "$maxX" } Clamp { srcVar1 "$zero" min "$world_maxs[1]" max "$world_maxs[1]" resultVar "$maxY" } Clamp { srcVar1 "$zero" min "$world_maxs[2]" max "$world_maxs[2]" resultVar "$maxZ" } Abs { srcVar1 "$maxX" resultVar "$maxX" } Abs { srcVar1 "$maxY" resultVar "$maxY" } Abs { srcVar1 "$maxZ" resultVar "$maxZ" } //--------------------------------------------------------------------C-BLOCK Subtract { srcVar1 "$max#" // This needs to be modified srcVar2 "$??max#" // This needs to be modified resultVar "$check" } Abs { srcVar1 "$check" resultVar "$check" } LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$frame" // This can be changed to $alpha srcVar1 "$check" srcVar2 "$one" resultVar "$frame" // This can be changed to $alpha } //--------------------------------------------------------------------C-BLOCK }
For my Boomer Pajamas example, this means that at this point, the VMT looks like this just after I copied everything in it. I did not need to do the sub-step ⑴, but if you do a mod for a Survivor, you'll probably need to do it.
③ : Set the frame (texture) you want
In the code (at the beginning), look at this line.
$??value "0"
Replace the 0 with the n° of the frame that you want to use as map specific texture.
(Warning, this is not always the n° of your original .tga file, because there's a frame 0).
For example, in my Boomer Pajama mod, I had 4 files: 1.tga, 2.tga, 3.tga and 4.tga.
4.tga is the file for the Pajamas.
I should not write "4", because when the VTF was created, it assigned frames from 0 to 3 (0/1/2/3).
Therefore, at this point, the RNG skins are frames 0 to 2 (0/1/2) and the Pajama frame is frame n°3.
If you want to be sure you identified the correct frame, you can copy the number you see in VTFEdit when you use the little arrows to scroll through the frames (see step ①).
In the end, I should change the value like this since my Map Specific Texture skin if $frame 3 :
$??value   "3"
Note that if you do this wrong and put a too high number, your texture will be all black.
④ : Change the ??
Once you have copied the code, you can see that there are...
??
... at 4 different places in the code (2 at the top in V-Block and 2 at the bottom in C-Block).
Replace these ?? with two capital letters of your choice (this is to individualize the variables).
For example, in my Boomer Pajama mod, I want the specific skin for No Mercy, so I thought it would be a good idea to change the ?? in NM for No Mercy. Therefore, I have :
$NMmax#    "0000"
$NMvalue   "3"
srcVar2 "$NMmax#"
LessEqualVar "$NMvalue"
⑤ : Define the map
⑴ In your VMT file, there should now be a line that looks like this, except that the NM might be other letters that you set at the previous step.
$NMmax# "0000" // This needs to be modified
You will need to replace 2 or maybe 3 things :
  • The 0000 with a value
  • The # with X, Y or Z
  • (Maybe) The max with min instead.

⑵ Go at the end of this Guide, in the ⌖ Map Codes section, and look for the exact map you want a specific texture for. You might need to go in the game to see if it's the first (m1), second (m2) etc. map of the campaign (if you want a skin for all maps in a campaign, that will be for later).
For my Boomer with pajamas in No Mercy hospital, I need the map with the hospital (inside). This map is in No Mercy (c8), and is the 4th map (m4), so I need to look at the c8m4 line.


⑶ When you have located the codes of the map, pick one that is not stroked, it does not matter which one (the stroked ones are not unique and thus, your skin might appear on other maps).
For my Boomer with pajamas in No Mercy hospital, all codes for c8m4 are unique (no one is stroked), so I can pick any code. I chose at random the min Y code, which has a value of 8064.


⑷ Now that you have one code selected, replace...
  • The 0000 with the value of the code you selected.
  • The # with the axis (X/Y/Z) you selected.
  • (Maybe) The max in min if you chose Min X, Min Y, or Min Z.
For my Boomer with pajamas in No Mercy hospital, I chose Min Y = 8064, so I will have this :

$NMminY "8064"

⑸ Some things at the end of the code also need to be changed.
Do you see this (the NM might be different) ?
srcVar1 "$max#" srcVar2 "$NMmax#"
Here again replace...
  • The # with the axis (X/Y/Z) you selected.
  • (Maybe) The max in min if you chose Min X, Min Y, or Min Z.
For my Boomer with pajamas in No Mercy hospital, I chose Min Y, so I will have this :

srcVar1 "$minY"
srcVar2 "$NMminY"

YOU'RE DONE. THIS WAS THE FINAL REQUIRED STEP.
⑥ : Define more maps
Maybe you want the texture to be the same on multiple maps (maybe a whole campaign), or you want to have more than one map specific texture. If so, these steps are for you.
For my Boomer pajamas mod example, let's say that I also want the Boomers to have pajamas on the top of Mercy Hospital, and not only in Mercy Hospital itself...

In the code, you probably already saw that there are two "BLOCKS" (V- / C-).
Just duplicate these blocks (copy and paste them), then repeat steps ③-④-⑤...
... but do not choose the same 2 letters to replace the ?? at step ③.
//--------------------------------------------------------------------V-BLOCK $??max# "0000" // This needs to be modified $??value "0" // This needs to be modified //--------------------------------------------------------------------V-BLOCK
//--------------------------------------------------------------------C-BLOCK Subtract { srcVar1 "$max#" // This needs to be modified srcVar2 "$??max#" // This needs to be modified resultVar "$check" } Abs { srcVar1 "$check" resultVar "$check" } LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$frame" // This can be changed to $alpha srcVar1 "$check" // Modify only if LST active srcVar2 "$one" resultVar "$frame" // This can be changed to $alpha } //--------------------------------------------------------------------C-BLOCK
For my Boomer pajamas mod example, the map code for No Mercy roof is c8m5 (No Mercy map 5 (last map). I ended up choosing the Max X value (at random again) that is 11344.
Since I could not rename the ?? into NM because I already used NM, I wrote NR.
(Note : ignore the [+V-LST] and [+C-LST])
⑦ : Add RNG
Maybe you also want to have RNG (Randomized) textures for your mod, atop of the Map Specific Textures. This is possible without problem.
For my Boomer pajamas mod example, I have 3 textures besides the Pajama textures, and I want to Randomize (RNG) them, but I do not want the Pajama to appear outside Mercy Hospital.

⑴ In the middle of the code, there's a line that says...
// [+RNG]
... replace that line with what's below IF the mod you are making is for a living creature (survivors / infected), something that you can pick up (guns / weapons / medkits / propane tanks etc.), a vehicle that can move, or the classic TVs.
If the mod you are making is NOT for something listed above, go to ⓻ Add RNG (world objects)
EntityRandom { scale "0" resultVar "$frame" }

Replace the 0 in the code you just copied with the n° of the first frame (skin) that should NOT show. (If you want all skins (also the map specific one) to randomize, just change the 0 into the number that comes after your last frame n°)
For my Boomer pajamas mod example, there are 4 frames (0/1/2/3). The frame n° 3 is the pajamas frame, and I do not want it to be randomized with the other skins, but I want the previous frame (n° 2) to show up randomly (RNG), as well as the n° 1 and n° 0. Therefore, the code is as follows for my Boomer :

EntityRandom
{
scale "3"
resultVar "$frame"
}
⓻ : Add RNG (for world objects)
You need to do this section ONLY IF you read the previous chapter about RNG and it told you to come do this section instead. If you mod a character / gun / item etc., do NOT do this section. This is only for world objects.

⑴ In the middle of the code, there's a line that says...
// [+RNG]
... replace that line with what's below.
PlayerPosition { scale "1" resultVar "$pos" } Clamp { srcVar1 "$zero" min "$pos[0]" max "$pos[0]" resultVar "$posX" } Abs { srcVar1 "$posX" resultVar "$posX" } LessOrEqual { LessEqualVar "$posX" greaterVar "$posXStored" srcVar1 "$posXStored" srcVar2 "$zero" resultVar "$posXStored" } Int { srcVar1 "$posXStored" resultVar "$posXStored" } Divide { srcVar1 "$posXStored" srcVar2 "$randomSkins" resultVar "$posXDiv" } Frac { srcVar1 "$posXDiv" resultVar "$posXDiv" } Multiply { srcVar1 "$posXDiv" srcVar2 "$randomSkins" resultVar "$posXMult" } Int { srcVar1 "$posXMult" resultVar "$frame" }

⑵ Now, in the code, you have one or more lines like this :
//---------------------------------------------------------------------------------V-BLOCK
Above one of them (the first one if possible), copy this
$randomSkins "0" $pos "[0 0 0]" $posX .0 $posXStored .0 $posXDiv .0 $posXMult .0

⑶ Do you see this in the code you just copied ?
$randomSkins "0"
Replace the 0 with the n° of the first frame (skin) that should NOT show.
(If you want all skins (also the map specific one) to randomize, just change the 0 into the number that comes after your last frame n°)
⑧ : Hide / Show VMTs
Maybe that instead of changing the texture, you want to change the model (or hide / show parts of the model on a specific map). This requires both models to be stacked together in the same MDL file, and that each model has different VMTs that could be hidden or shown.
Instead of doing step ③, do this :

In the code (at the beginning), look at this line.
$??value "0"
Replace the 0 with 1 in all the VMTs that must show when you're in the specific map.

Also, in all the VMTs that will have the ??value 1, add this line near the top:
$alpha "0"

Then, in the end of the code, look at this...
LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$frame" // This can be changed to $alpha srcVar1 "$check" srcVar2 "$one" resultVar "$frame" // This can be changed to $alpha }
... and change $frame into $alpha, like this :
LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$alpha" // This can be changed to $alpha srcVar1 "$check" srcVar2 "$one" resultVar "$alpha" // This can be changed to $alpha }
⌖ Map Codes (1/2)
C1 = Dead Center
C2 = Dark Carnival
C3 = Swamp Fever
C4 = Hard Rain
C5 = The Parish
C6 = The Passing
C7 = The Sacrifice
C8 = No Mercy
C9 = Crash Course
C10 = Death Toll
C11 = Dead Air
C12 = Blood Harvest
C13 = Cold Stream
C14 = The Last Stand

Max X
Max Y
Max Z
Min X
Min Y
Min Z
c1m1
3584
8320
3584
768
4032
1056
c1m2
4096
8624
2272
12672
7872
512
c1m3
7624
288
1024
2256
5552
64
c1m4
1556
1024
3552
6432
5336
64
c2m1
14848
10752
256
3648
5312
2048
c2m2
5120
4096
768
5120
8192
184
c2m3
4624
5376
1728
8256
3072
68
c2m4
6320
7296
1024
6144
2048
320
c2m5
2944
4480
1024
6848
128
352
c3m1
3008
12288
1024
13824
1536
608
c3m2
10368
8384
640
10112
3072
576
c3m3
6144
3072
1024
7168
6144
352
c3m4
5376
8192
1152
5888
5120
224
c4m1
6144
10240
1536
11776
3072
512
c4m2
6144
992
2528
11744
15104
639
c4m3
6144
992
2528
11744
15104
640
c4m4
6144
10240
1536
11776
3072
512
c4m5
6144
10240
1536
11776
3072
512
c5m1
3168
3232
1664
5248
4672
992
c5m2
384
2048
1664
12032
11968
384
c5m3
11616
10769
960
1023
10496
224
c5m4
5120
5120
1152
5248
6464
456
c5m5
14336
10752
3072
14336
0
544
c6m1
9600
6688
3096
6110
2338
320
c6m2
11436
6816
768
1606
2784
1504
c6m3
3040
2272
1024
3648
486
385
c7m1
16112
4288
1024
640
4096
512
c7m2
11920
3968
1640
13248
3072
512
c7m3
3840
3848
1024
3648
4864
384
⌖ Map codes (2/2)
Max X
Max Y
Max Z
Min X
Min Y
Min Z
c8m1
4896
6656
4480
256
2224
360
c8m2
12704
9728
1408
256
0
512
c8m3
15360
15360
6000
8244
3200
528
c8m4
15956
16144
7584
4608
8064
8
c8m5
11344
14336
8096
1536
1920
16
c9m1
3840
256
928
12672
12032
832
c9m2
9792
10176
1152
1728
2816
232
c10m1
8703
3625
1504
15936
16256
520
c10m2
2559
1407
1334
11936
9168
872
c10m3
880
2048
1824
14372
10176
160
c10m4
6496
1920
1728
9216
6800
160
c10m5
9216
7584
1280
3696
9888
640
c11m1
11776
5280
1728
512
8192
256
c11m2
11424
8232
1920
2559
207
7
c11m3
512
6400
1856
8160
5264
254
c11m4
12288
7320
3584
2112
2496
254
c11m5
16144
14790
8096
14976
16192
896
c12m1
4415
3359
2192
13632
15808
512
c12m2
96
4351
2192
11120
13392
160
c12m3
11232
6879
1728
1325
14912
120
c12m4
14382
3872
1728
5887
14080
2048
c12m5
14400
5632
1856
4095
4544
2048
c13m1
2048
4096
2256
4096
2560
0
c13m2
9728
9792
2688
2176
0
1776
c13m3
7760
1440
2368
6496
9424
0
c13m4
3372
8992
1472
5563
10625
1103
c14m1
1111
11088
1280
9728
14304
768
c14m2
4082
10352
2176
9728
3856
448
⌖ Codes for custom maps
To get the codes (min/max values of X/Y/Z), simply download this addon for the Medkit (you can also use it for regular maps, but you will not get other info than the ones in the tables above).

The addon will display the values between 0 and 9999 (if it's above, the screen will be black).
Note that it takes the absolute value of the minimal values.
If you want it to show values up to 65534, you can modify the screen.vmt in the addon.
https://gtm.you1.cn/sharedfiles/filedetails/?id=2275257519
Ⓢ (Special) : $detail method
Instead of changing the frame (texture itself), you could make it so that it actually applies another texture ($detail) atop of the regular texture, as the map specific texture.

⑴ Instead of doing step ①, just save the map specific texture as a regular VTF with an all-white alpha channel (in VTFEdit, if you press CTRL+M, while viewing your texture, it should not disappear).


Add this in your VMT...
$detail "models\infected\boomer/boomer_pajamas" $detailblendfactor "0" $detailblendmode "2" $detailscale "1"
... and instead of models\infected\boomer/boomer_pajamas, set the path to your map specific texture.

⑶ Do steps ② to ⑤ as usual, but when you need to do step ③, just input 1 :
$??value   "1"

⑷ Then, in the end of the code, look at this...
LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$frame" // This can be changed to $alpha srcVar1 "$check" srcVar2 "$one" resultVar "$frame" // This can be changed to $alpha }
... and change $frame into $detailblendfactor, like this :
LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$detailblendfactor" // This can be changed to $alpha srcVar1 "$check" srcVar2 "$one" resultVar "$detailblendfactor" // This can be changed to $alpha }
Ⓢ (Special) : $detail method + multiple skins
Instead of changing the frame (texture itself), you could make it so that it actually applies another texture ($detail) atop of the regular texture, as the map specific texture.

⑴ Instead of doing step ①, just save the map specific texture as a regular VTF with an all-white alpha channel (in VTFEdit, if you press CTRL+M, while viewing your texture, it should not disappear).


Add this in your VMT...
$detail "models\infected\boomer/boomer_pajamas" $detailblendfactor "0" $detailblendmode "2" $detailscale "1"
... and instead of models\infected\boomer/boomer_pajamas, set the path to your map specific texture.

⑶ Do steps ② to ⑤ as usual.

⑷ Then, in the end of the code, look at this in the C-BLOCK...
LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$frame" // This can be changed to $alpha srcVar1 "$check" srcVar2 "$one" resultVar "$frame" // This can be changed to $alpha }
... and replace it all by this (you might need to set the ?? again).
LessOrEqual { LessEqualVar "$??value" greaterVar "$detailframe" srcVar1 "$check" srcVar2 "$one" resultVar "$detailframe" } LessOrEqual { LessEqualVar "$one" greaterVar "$detailblendfactor" srcVar1 "$check" srcVar2 "$one" resultVar "$detailblendfactor" }

❗️ Important
When you will add more skins, you will need another C-BLOCK :
//--------------------------------------------------------------------C-BLOCK Subtract { srcVar1 "$max#" // This needs to be modified srcVar2 "$??max#" // This needs to be modified resultVar "$check" } Abs { srcVar1 "$check" resultVar "$check" } LessOrEqual { LessEqualVar "$??value" // This needs to be modified greaterVar "$detailframe" srcVar1 "$check" // Modify only if LST active srcVar2 "$one" resultVar "$detailframe" } LessOrEqual { LessEqualVar "$one" greaterVar "$detailblendfactor" srcVar1 "$check" srcVar2 "$one" resultVar "$detailblendfactor" } //--------------------------------------------------------------------C-BLOCK
12 commentaires
ئtar ئtruck Ģunner 11 nov. à 14h57 
Just thought I'd chip in.

This method... *technically* works with changing Posters out as well, at least from a Frame-selection point. I couldn't get the Detail or Detail+ methods to work.

I say "technically" because it worked but it worked slowly. For reference, when the Poster initially loads it would load the first frame or the last loaded frame. However, should you from from loading c1m1 to c1m2/c1m3/etc, it initially shows the same as above, then after 2-3 seconds would properly load the set frame. So it would load Frame 0, then after 2-3 seconds load Frame 3 if I'm going from c1m1 to c1m4.

So, this method DOES work still in 2024, however for something like Posters as they load instantly, there's a load time that make it.. well, not worth it in my opinion since technically by the point that the game is essentially loaded. Just thought I'd pitch that it still works in 2024 regardless though.
Amiba 26 mars 2023 à 7h06 
I know that this guide might be a bit dead, but I was wondering if it's possible to have specific chapter textures to be RNGable (for example EMT Smoker and Default Smoker to be specific for No Mercy Hospital chapter but have RNG)
MOTHERCOCONUTS 3 mars 2022 à 10h04 
Hi Eileen hope you're doing well. I was wondering if it's possible to make an Animated texture which is also Map specific (Unlit generic texture with different animations respective of map/campaign)
Drunk Headcrab 24 avr. 2021 à 18h39 
This guide is extremely helpful! Thanks mate.
Ellie  [créateur] 11 mars 2021 à 15h55 
@PopTheseFools : Please forward me your codes (both VMTs for each mesh) in a https://pastebin.com/ and I'll take a look at it tomorrow
PöpThèséFøøls 11 mars 2021 à 14h36 
Thx.

I'm a bit confused, I'm trying to exclude one vmt for certain maps, both vmt's has only one frame (0). I did stacked 2 meshes in one .mdl

In vmt I want to see in needed maps I did step 8, but it still shows everywhere else.
Ellie  [créateur] 11 mars 2021 à 13h21 
@PopTheseFools : Oh, this is very possible, just add

Equals
{
srcVar1 "$frame"
resultVar "$bumpframe"
}

at the very end above the last TWO }
PöpThèséFøøls 10 mars 2021 à 16h38 
Noice but, how to be with $bumpmap for selected frame? or this only works for $basetexture?
overlordxviii 5 nov. 2020 à 12h25 
@Ellie Ohh I see, thanks for reply:))