Someone asked about this in my HUD's thread, so I figured I'd make a post about it. I believe Wiethoofd and I were the first to discover this so we probably should have made a little instructional post when we did it. Hope no one is upset.
This post is going to be a short tutorial geared to other HUD makers who should already know how to create and import custom textures into the Source engine. I will largely be copying from the post I made in response to the dude in my thread.
Many of you know that custom textures can bypass sv_pure by being placed in the vgui/replay/thumbnails folder. This isn't limited to just custom CP icons; it applies to any other texture you want to use in the HUD.
After I created the icons and named them appropriately, I converted them to VTFs and put them in the folder above. Following that, I extracted the corresponding VMTs and placed them in their proper directory (sprites/obj_icons for CP icons), and changed the $basetexture parameter to reflect the icons' new location in vgui/replay/thumbnails.
http://puu.sh/r3wQZ/a2777c6359.png
VMT example for icon_obj_blu:
"UnlitGeneric"
{
"$translucent" 1
"$baseTexture" "vgui/replay/thumbnails/icon_obj_blu"
"$vertexcolor" 1
"$no_fullbright" 1
"$ignorez" 1
}
This is where most custom textures can stop and be expected to work. But the CP icons are special for some reason. Maybe because they're dynamic and can be called in and out during a typical CP round? Who knows, but Wiet and I figured the icons needed to be preloaded since they only showed up if you joined a listen server prior to joining one with sv_pure.
I did the preloading by referencing them on the main menu. You will need to append some code somewhere in mainmenuoverride.res to set this up. Here's what mine looked like for icon_obj_blu:
"cpicondummy1"
{
"ControlName" "EditablePanel"
"fieldname" "cpicondummy1"
"xpos" "9999"
"ypos" "9999"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "VersionFont"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "9999"
"ypos" "9999"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_blu"
"scaleImage" "1"
}
}
}
All I did was create an element with a sub-image that I could use to reference (thereby preloading) the icons. Then I made damn sure to keep it hidden by setting the x/ypos way off-screen, hiding everything etc. You will of course need to repeat the code for each icon you are replacing. You should only need to replace the image path and control name each time you copy the code.
Hope this clears some things up!
Someone asked about this in [url=http://www.teamfortress.tv/post/639971/7hud]my HUD's thread[/url], so I figured I'd make a post about it. I believe Wiethoofd and I were the first to discover this so we probably should have made a little instructional post when we did it. Hope no one is upset.
[i]This post is going to be a short tutorial geared to other HUD makers who should already know how to create and import custom textures into the Source engine. I will largely be copying from the post I made in response to the dude in my thread.[/i]
Many of you know that custom textures can bypass sv_pure by being placed in the vgui/replay/thumbnails folder. This isn't limited to just custom CP icons; it applies to any other texture you want to use in the HUD.
After I created the icons and named them appropriately, I converted them to VTFs and put them in the folder above. Following that, I extracted the corresponding VMTs and placed them in their proper directory (sprites/obj_icons for CP icons), and changed the $basetexture parameter to reflect the icons' new location in vgui/replay/thumbnails.
[img]http://puu.sh/r3wQZ/a2777c6359.png[/img]
VMT example for icon_obj_blu:
[code]"UnlitGeneric"
{
"$translucent" 1
"$baseTexture" "vgui/replay/thumbnails/icon_obj_blu"
"$vertexcolor" 1
"$no_fullbright" 1
"$ignorez" 1
}
[/code]
This is where most custom textures can stop and be expected to work. But the CP icons are special for some reason. Maybe because they're dynamic and can be called in and out during a typical CP round? Who knows, but Wiet and I figured the icons needed to be preloaded since they only showed up if you joined a listen server prior to joining one with sv_pure.
I did the preloading by referencing them on the main menu. You will need to append some code somewhere in mainmenuoverride.res to set this up. Here's what mine looked like for icon_obj_blu:
[code] "cpicondummy1"
{
"ControlName" "EditablePanel"
"fieldname" "cpicondummy1"
"xpos" "9999"
"ypos" "9999"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "VersionFont"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "9999"
"ypos" "9999"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_blu"
"scaleImage" "1"
}
}
}[/code]
All I did was create an element with a sub-image that I could use to reference (thereby preloading) the icons. Then I made damn sure to keep it hidden by setting the x/ypos way off-screen, hiding everything etc. You will of course need to repeat the code for each icon you are replacing. You should only need to replace the image path and control name each time you copy the code.
Hope this clears some things up!
Does the pre-load have to be as a button or would a sample imagepanel do just fine?
Could you technically still have it on-screen and just "visible" "0" and it would still pre-load? Just a method thing. I don't like to put things off-screen to hide them. Even though there's no way I would ever want this to be visible. If I have to, I will, though.
This isn't strictly a question about icons, but I notice that in the pre-load you reference the original position for the file. So how TF2 handles textures is that it looks for the VMT and then that file directs to the position of the texture, right? This is purely hypothetical because we already have a single file for this, but could you instead of using chapterbackgrounds.txt. use separate VMT files for the different menu backgrounds and have them all redirect to the same file?
Does the pre-load have to be as a button or would a sample imagepanel do just fine?
Could you technically still have it on-screen and just "visible" "0" and it would still pre-load? Just a method thing. I don't like to put things off-screen to hide them. Even though there's no way I would ever want this to be visible. If I have to, I will, though.
This isn't strictly a question about icons, but I notice that in the pre-load you reference the original position for the file. So how TF2 handles textures is that it looks for the VMT and then that file directs to the position of the texture, right? This is purely hypothetical because we already have a single file for this, but could you instead of using [i]chapterbackgrounds.txt.[/i] use separate VMT files for the different menu backgrounds and have them all redirect to the same file?
Yeah, you just need to have the icons loaded before you enter a server I think. You can just set "visible" to 0, I just use the off-screen method as insurance.
The Source engine references the VMTs first when loading textures, which in turn references the textures themselves, among other things. You probably could do as you've hypothesized, but why do that when you have a simpler solution at your disposal?
Yeah, you just need to have the icons loaded before you enter a server I think. You can just set "visible" to 0, I just use the off-screen method as insurance.
The Source engine references the VMTs first when loading textures, which in turn references the textures themselves, among other things. You probably could do as you've hypothesized, but why do that when you have a simpler solution at your disposal?
I thought valve patched all vmt-related stuff a long time ago. I guess not :)
Unless something happened since then, it seems pretty weird that A) preloading on the main menu works (it never did when I tried with the healthcross image, pre-patch and post-patch) and B) it works with preloading at all (valve's patch was basically to reload all materials when you join a server).
Top find in any case. Hopefully this extends to more than just cp icons, though I don't know what else is loaded in a similar way.
Medico_di_BiscottiThis is purely hypothetical because we already have a single file for this, but could you instead of using chapterbackgrounds.txt. use separate VMT files for the different menu backgrounds and have them all redirect to the same file?
You could but it'll mess up whenever a new update adds a new background. And it'd only work because you'll never see it ingame (and by extension never see it in sv_pure), working through this method isn't very likely because they're probably just not a material that works for it.
I thought valve patched all vmt-related stuff a long time ago. I guess not :)
Unless something happened since then, it seems pretty weird that A) preloading on the main menu works (it never did when I tried with the healthcross image, pre-patch and post-patch) and B) it works with preloading at all (valve's patch was basically to reload all materials when you join a server).
Top find in any case. Hopefully this extends to more than just cp icons, though I don't know what else is loaded in a similar way.
[quote=Medico_di_Biscotti]This is purely hypothetical because we already have a single file for this, but could you instead of using [i]chapterbackgrounds.txt.[/i] use separate VMT files for the different menu backgrounds and have them all redirect to the same file?[/quote]
You could but it'll mess up whenever a new update adds a new background. And it'd only work because you'll never see it ingame (and by extension never see it in sv_pure), working through this method isn't very likely because they're probably just not a material that works for it.
If anyone is lazy and just wants to copy/paste here is what I put in my hud.
Show Content
[code] "icon_obj_blu_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_blu_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_blu"
"scaleImage" "1"
}
}
}
"icon_obj_blu_locked_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_blu_locked_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_blu_locked"
"scaleImage" "1"
}
}
}
"icon_obj_cap_blu_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_cap_blu_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_cap_blu"
"scaleImage" "1"
}
}
}
"icon_obj_red_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_red_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_red"
"scaleImage" "1"
}
}
}
"icon_obj_red_locked_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_red_locked_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_red_locked"
"scaleImage" "1"
}
}
}
"icon_obj_cap_red_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_cap_red_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_cap_red"
"scaleImage" "1"
}
}
}
[/code]
If anyone is lazy and just wants to copy/paste here is what I put in my hud.
[spoiler][code] "icon_obj_blu_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_blu_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_blu"
"scaleImage" "1"
}
}
}
"icon_obj_blu_locked_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_blu_locked_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_blu_locked"
"scaleImage" "1"
}
}
}
"icon_obj_cap_blu_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_cap_blu_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_cap_blu"
"scaleImage" "1"
}
}
}
"icon_obj_red_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_red_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_red"
"scaleImage" "1"
}
}
}
"icon_obj_red_locked_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_red_locked_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_red_locked"
"scaleImage" "1"
}
}
}
"icon_obj_cap_red_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_cap_red_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_cap_red"
"scaleImage" "1"
}
}
}
[/code][/spoiler]
part 2 because its too big
Show Content
[code] "icon_obj_neutral_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_neutral_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_neutral"
"scaleImage" "1"
}
}
}
"icon_obj_neutral_locked_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_neutral_locked_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_neutral_locked"
"scaleImage" "1"
}
}
}
"icon_obj_cap_mask_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_cap_mask_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "[/code]
part 2 because its too big
[spoiler][code] "icon_obj_neutral_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_neutral_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_neutral"
"scaleImage" "1"
}
}
}
"icon_obj_neutral_locked_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_neutral_locked_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "12"
"tall" "12"
"visible" "1"
"enabled" "1"
"image" "../sprites/obj_icons/icon_obj_neutral_locked"
"scaleImage" "1"
}
}
}
"icon_obj_cap_mask_preload"
{
"ControlName" "EditablePanel"
"fieldname" "icon_obj_cap_mask_preload"
"xpos" "0"
"ypos" "0"
"zpos" "11"
"wide" "0"
"tall" "0"
"visible" "0"
"SubButton"
{
"ControlName" "CExImageButton"
"fieldName" "SubButton"
"xpos" "0"
"ypos" "0"
"wide" "0"
"tall" "0"
"autoResize" "0"
"pinCorner" "3"
"visible" "0"
"enabled" "0"
"tabPosition" "0"
"textinsetx" "0"
"use_proportional_insets" "1"
"font" "Bold12"
"textAlignment" "west"
"dulltext" "0"
"brighttext" "0"
"default" "1"
"SubImage"
{
"ControlName" "ImagePanel"
"fieldName" "SubImage"
"xpos" "0"
"ypos" "0"
"zpos" "1"
"wide" "[/code][/spoiler]
Does this still work?
I did just about everything: created my CP icons, turned them into VTFs, named them accordingly, extracted the VMTs from "tf2_misc_dir.vpk" & changed the "$baseTexture"s for each one. I put the VMTs into "materials/sprites/obj_icons" & the VTFs into "materials/vgui/replay/thumbnails" in my custom HUD folder. Finally, I copy & pasted XenThePybro's code into "mainmenuoverride.res".
After that was done, I loaded into a 5CP map & the control point icons appeared as purple & black missing textures.
Did this method get broken? Or am I missing something or doing something wrong?
EDIT: Nevermind. Apparently I didn't name my VTFs correctly & so didn't match with the name stated in the VMTs. It works now!
Does this still work?
I did just about everything: created my CP icons, turned them into VTFs, named them accordingly, extracted the VMTs from "tf2_misc_dir.vpk" & changed the "$baseTexture"s for each one. I put the VMTs into "materials/sprites/obj_icons" & the VTFs into "materials/vgui/replay/thumbnails" in my custom HUD folder. Finally, I copy & pasted XenThePybro's code into "mainmenuoverride.res".
After that was done, I loaded into a 5CP map & the control point icons appeared as purple & black missing textures.
Did this method get broken? Or am I missing something or doing something wrong?
EDIT: Nevermind. Apparently I didn't name my VTFs correctly & so didn't match with the name stated in the VMTs. It works now!