Difference between revisions of "Team Fortress Wiki:3D Models"

From Team Fortress Wiki
Jump to: navigation, search
(Requirements)
(And done! Updated for Steampipe, tidied up, corrects stuff)
Line 29: Line 29:
 
*[http://github.com/Moussekateer/3D-Models-automaton The automaton script]
 
*[http://github.com/Moussekateer/3D-Models-automaton The automaton script]
 
*The Source SDK
 
*The Source SDK
 +
*The sdktools_beta
 
*[http://nemesis.thewavelength.net/index.php?p=25 GCFScape]
 
*[http://nemesis.thewavelength.net/index.php?p=25 GCFScape]
 
*For models that need to be recompiled: [http://www.hl2.boo.pl/applications/MdlDecompilerFixed/MDL%20Decompiler%20Fixed.rar MDL Decompiler] and [http://www.chaosincarnate.net/cannonfodder/cftools.htm StudioCompiler].
 
*For models that need to be recompiled: [http://www.hl2.boo.pl/applications/MdlDecompilerFixed/MDL%20Decompiler%20Fixed.rar MDL Decompiler] and [http://www.chaosincarnate.net/cannonfodder/cftools.htm StudioCompiler].
Line 37: Line 38:
 
** Install Python 2.6 and the required libraries (SendKeys, PIL, pywin32, NumPy and cython) and install Visual Studio Express 2008 C++ Express Edition.
 
** Install Python 2.6 and the required libraries (SendKeys, PIL, pywin32, NumPy and cython) and install Visual Studio Express 2008 C++ Express Edition.
 
** Extract the wikitools zipped file into the same directory as the script.
 
** Extract the wikitools zipped file into the same directory as the script.
** Copy the MDL Decompiler .exe to \Steam\steamapps\<username>\sourcesdk\bin\ep1\bin.
+
** Install the Source SDK from the Tools part of Steam. This is only needed for the files, not for any of the functions!
** Navigate to \Python26\Lib\site-packages and replace SendKeys.py with the modified version linked above.
+
** Copy the MDL Decompiler .exe to {{code|\Steam\steamapps\<username>\sourcesdk\bin\ep1\bin}}.
 +
** Navigate to {{code|\Python26\Lib\site-packages}} and replace SendKeys.py with the modified version linked above.
 
* Otherwise extract the zipped Python folder somewhere.
 
* Otherwise extract the zipped Python folder somewhere.
 
* Download and save the automaton scripts to an easily accessible folder.
 
* Download and save the automaton scripts to an easily accessible folder.
* Copy <code>fireLayeredSlowTiled512.vtf</code> to <code>\steamapps\<username>\sourcesdk\bin\orangebox\tf\materials\effects\tiledfire</code>.
+
* Copy {{code|fireLayeredSlowTiled512.vtf}} to {{code|\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\effects\tiledfire}}.
* Copy <code>background.vtf</code> to <code>\steamapps\<username>\sourcesdk\bin\orangebox\tf\materials\hlmv</code>.
+
* Copy {{code|background.vtf}} to {{code|\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\hlmv}}.
* Set up HLMV to produce the highest quality images possible by following the guide found [[Template:Painted variants/Tutorial#Setting up HLMV|here]].
+
* Set up HLMV to produce the highest quality images possible by following the guide found [[Help:Model_Viewer#Setup|here]].
  
 
=== Setting up automate.py ===
 
=== Setting up automate.py ===
[[File:3D Tutorial HLMV Coordinates.png|400px|thumb|HLMV screen where 1 is the location of <code>fileButtonCoordindates</code>, 2 is the location of <code>optionsButtonCoodinates</code>, and 3 is the boundary for <code>imgCropBoundaries</code>.]]
+
[[File:3D Tutorial HLMV Coordinates.png|400px|thumb|HLMV screen where 1 is the location of {{code|fileButtonCoordindates}}, 2 is the location of {{code|optionsButtonCoodinates}}, and 3 is the boundary for {{code|imgCropBoundaries}}.]]
  
 
* Open HLMV and maximize it.
 
* Open HLMV and maximize it.
 
* Take a screenshot and paste it into an image viewer such as paint.NET or Adobe Photoshop.
 
* Take a screenshot and paste it into an image viewer such as paint.NET or Adobe Photoshop.
 
* Take note of the following pixel coordinates for your screen size.
 
* Take note of the following pixel coordinates for your screen size.
** <code>SDKLauncherStartingPoint</code> is a tuple of the x,y coordindates where the SDK Launcher will roughly be so the script can click on it. This can be a very rough estimate.
+
** {{code|monitorResolution}} is simply a list of your screen resolution.
** <code>monitorResolution</code> is simply a list of your screen resolution.
+
** {{code|imgCropBoundaries}} is the boundary of the window the model in HLMV is contained within. The format is;  
** <code>imgCropBoundaries</code> is the boundary of the window the model in HLMV is contained within. The format is;  
 
 
*** <nowiki>[pixel distance of left boundary from left of screen, pixel distance of top boundary from top of screen, pixel distance of right boundary from left of screen, pixel distance of bottom boundary from top of screen]</nowiki>
 
*** <nowiki>[pixel distance of left boundary from left of screen, pixel distance of top boundary from top of screen, pixel distance of right boundary from left of screen, pixel distance of bottom boundary from top of screen]</nowiki>
 
*** You should leave a few pixels gap from the window edge.
 
*** You should leave a few pixels gap from the window edge.
* <code>fileButtonCoordindates</code> is a tuple of the center x,y coordinates for the File menu button in HLMV.
+
* {{code|fileButtonCoordindates}} is a tuple of the center x,y coordinates for the File menu button in HLMV.
 
* Close any programs that may interrupt or interfere with the process.
 
* Close any programs that may interrupt or interfere with the process.
 
* You are now set to take the images.
 
* You are now set to take the images.
Line 62: Line 63:
 
== Workflow ==
 
== Workflow ==
 
=== Taking images ===
 
=== Taking images ===
* Open up a weapon model in HLMV and center the model using 'Options -> Center View'.
+
* Open up a weapon model in HLMV and center the model using {{code|Options -> Center View}}.
 
* If the model does not face you directly when centered, it will need to be [[Team Fortress Wiki:3D Models#Recompiling models|recompiled]] with a new rotation.
 
* If the model does not face you directly when centered, it will need to be [[Team Fortress Wiki:3D Models#Recompiling models|recompiled]] with a new rotation.
 
* Zoom the model out so that it is as large as possible, but will not clip outside the viewer window when rotated or tilted.
 
* Zoom the model out so that it is as large as possible, but will not clip outside the viewer window when rotated or tilted.
* If the model has a fire overlay, see the section on dealing with [[Team Fortress Wiki:3D Models#Team-colored models|team-colored models]] on how to remove it.
+
* If the model has a fire overlay, see the [[Team Fortress Wiki:3D Models#Installation|Installation]] section on this page or the [[Help:Model_Viewer#Program_limitations|Program Limitations]] section on the Help: Model Viewer page on how to remove it.
 
* If the light source produces a glare that interferes with the model, hold {{Key|Ctrl}} and drag the light source around with the mouse until it is in a better position.
 
* If the light source produces a glare that interferes with the model, hold {{Key|Ctrl}} and drag the light source around with the mouse until it is in a better position.
* Open regedit, navigate to <code>\HKEY_CURRENT_USER\Software\Valve\hlmv</code>, and locate the registry key entry for the model. This will be in the form of <code>models.weapons.c_models.c_wrench.c_wrench.mdl</code>.
+
* Open regedit, navigate to {{code|\HKEY_CURRENT_USER\Software\Valve\hlmv}}, and locate the registry key entry for the model. This will be in the form of {{code|models.weapons.c_models.c_wrench.c_wrench.mdl}}.
 
* Copy and paste this key name into automate.py in the model = HLMVModelRegistryKey() entry.
 
* Copy and paste this key name into automate.py in the model = HLMVModelRegistryKey() entry.
* Copy the <code>Trans</code> key entry for the model into automateDis as the <code>intialTranslation</code> argument. (Don't forget to add the commas to separate the values)
+
* Copy the {{code|Trans}} key entry for the model into automateDis as the {{code|intialTranslation}} argument. (Don't forget to add the commas to separate the values)
 
* Rotate the model by dragging near the center of the viewer.
 
* Rotate the model by dragging near the center of the viewer.
 
* There will be three possible outcomes here.
 
* There will be three possible outcomes here.
** The model will rotate around the bottom corner of the model. If so, you will need to make use of <code>rotationOffset</code>.
+
** The model will rotate around the bottom corner of the model. If so, you will need to make use of {{code|rotationOffset}}.
 
*** Rotate the model so that it is facing left. Hold down {{Key|Shift}} and move the model sideways so that it is centered in the circle that appears.
 
*** Rotate the model so that it is facing left. Hold down {{Key|Shift}} and move the model sideways so that it is centered in the circle that appears.
*** Press {{Key|F5}} in HLMV, and then in regedit. Note the new 'y' Trans value. The difference between the current value and the initial value is the <code>rotationOffset</code> value.
+
*** Press {{Key|F5}} in HLMV, and then in regedit. Note the new 'y' Trans value. The difference between the current value and the initial value is the {{code|rotationOffset}} value.
 
** The model will rotate around the wrong plane or the model will not rotate around the vertical or horizontal center. If so, the model will need to be recompiled. See the section on [[Team Fortress Wiki:3D Models#Recompiling models|recompiling models]].
 
** The model will rotate around the wrong plane or the model will not rotate around the vertical or horizontal center. If so, the model will need to be recompiled. See the section on [[Team Fortress Wiki:3D Models#Recompiling models|recompiling models]].
 
** The model will rotate around the vertical '''and''' horizontal center of the model. If so, you are good to go.
 
** The model will rotate around the vertical '''and''' horizontal center of the model. If so, you are good to go.
* Set the item name in the script for <code>itemName</code>. It is suggested you initially set this to 'User <username> <item>' so you can see the item looks fine before being moved to the correct title.
+
* Set the item name in the script for {{code|itemName}}. It is suggested you initially set this to 'User <username> <item>' so you can see the item looks fine before being moved to the correct title.
 
* The script is started as so. From the commandline, navigate to the folder containing the scripts and type <code>python automate.py</code>.
 
* The script is started as so. From the commandline, navigate to the folder containing the scripts and type <code>python automate.py</code>.
 
* You will be asked to enter the folder name for the generated images.
 
* You will be asked to enter the folder name for the generated images.
* You then have 3 seconds (by default) to do the following. Click on the SDK Launcher, highlight the 'Model Viewer' entry, and then click on HLMV to bring it back into focus.
 
 
* The script will now automate taking the required images. It is best not to try and use your computer while the script is running as it will likely result in an incorrect output.
 
* The script will now automate taking the required images. It is best not to try and use your computer while the script is running as it will likely result in an incorrect output.
 
** To interrupt the image taking process, turn on Caps Lock.
 
** To interrupt the image taking process, turn on Caps Lock.
Line 88: Line 88:
  
 
=== Team-colored models ===
 
=== Team-colored models ===
* Extract the vmts for the model from the materials.gcf into the appropriate folder.
+
* Extract the VMTs for the model from the {{code|tf2_misc_dir.vpk}} appropriate folder directories in the {{code|/custom/folder}}.
* In the automate.py script set <code>teamColours</code> to <code>True</code> and set the paths to the vmts for <code>REDVMTFile</code> and <code>BLUVMTFile</code>
+
* In the automate.py script set {{code|teamColours}} to {{code|True}} and set the paths to the VMTs for {{code|REDVMTFile}} and {{code|BLUVMTFile}}.
  
 
=== Models with other class arms/models blocking the view ===
 
=== Models with other class arms/models blocking the view ===
* If you wish to remove a model from the viewer (for example the Spy's arms holding onto the viewmodel Electro Sapper), click on the Model tab in HLMV and find out which VMTs are being used for the model textures.
+
* If you wish to remove a model from the viewer (for example the Sniper's arms holding onto the view model Sniper Rifle), click on the Model tab in HLMV and find out which VMTs are being used for the model textures.
* Extract the VMTs using GCFScape to the same path in your 'team fortress 2 folder' and open them up in a text editor.
+
* Extract the VMTs using GCFScape to the same path in your {{code|/custom/folder}} and open them up in a text editor.
* Inside the <code>"VertexLitGeneric"</code> curly brackets add the line <code>"$no_draw" "1"</code>. This will make the model invisible in HLMV.
+
* Inside the {{code|"VertexLitGeneric"}} curly brackets add the line {{code|"$no_draw" "1"}}. This will make this part of the model invisible in HLMV.
  
 
=== Recompiling models ===
 
=== Recompiling models ===
 
* Open the model in HLMV.
 
* Open the model in HLMV.
* Launch GCFScape and load 'team fortress 2 materials.gcf'.
+
* Launch GCFScape and load {{code|tf2_misc_dir.vpk}}.
* Navigate to <code>tf\models\weapons</code> and extract the relevant weapon folder to <code>\Steam\steamapps\<username>\team fortress 2\tf\models\weapons</code>.
+
* Navigate to {{code|tf\models\weapons}} and extract the relevant weapon folder to {{code|\Steam\steamapps\common\Team Fortress 2\tf\custom\folder\models\weapons}}.
 
* Launch MDL Decompiler, tick "do not fix rotations on animations", set your output directory to the same folder where the model was extracted, and extract.
 
* Launch MDL Decompiler, tick "do not fix rotations on animations", set your output directory to the same folder where the model was extracted, and extract.
 
* Unfortunately, you are not done. The animation sequences you have just decompiled are all horribly borked. Launch StudioCompiler, go to the Model Decompile tab, and decompile the same model (this time leaving "do not fix rotations" unticked). The decompiler will throw you an error. That is fine. Click okay and it will finish extracting. Make sure you output to the SAME directory as the previous step so that the files will be overwritten.
 
* Unfortunately, you are not done. The animation sequences you have just decompiled are all horribly borked. Launch StudioCompiler, go to the Model Decompile tab, and decompile the same model (this time leaving "do not fix rotations" unticked). The decompiler will throw you an error. That is fine. Click okay and it will finish extracting. Make sure you output to the SAME directory as the previous step so that the files will be overwritten.
* Open up the outputted "mdldecompiler.qc" and change the $model line's value for the .dmx.smd file to not include a directory. i.e. change "parts/dmx/c_wrench.dmx.smd" to "c_wrench.dmx.smd".
+
* Open up the outputted {{code|mdldecompiler.qc}} and change the $model line's value for the .dmx.smd file to not include a directory. i.e. change {{code|parts/dmx/c_wrench.dmx.smd}} to {{code|c_wrench.dmx.smd}}.
 
* Open up idle.smd in a text editor. You will find an entry/entries that start with time 0/1/etc. The 2nd/3rd/4th numbers in the entry correspond to back/forth, side to side, and up/down translations, respectively. The 5th/6th/7th numbers in the entry correspond to x, y, and z rotations, respectively. Correct these values for all lines (or delete the all the time lines except for the first) and save.
 
* Open up idle.smd in a text editor. You will find an entry/entries that start with time 0/1/etc. The 2nd/3rd/4th numbers in the entry correspond to back/forth, side to side, and up/down translations, respectively. The 5th/6th/7th numbers in the entry correspond to x, y, and z rotations, respectively. Correct these values for all lines (or delete the all the time lines except for the first) and save.
* Go back to StudioCompiler, go to the Model Compile tab, go to the "Compile w/Existing QC" section, select your "mdldecompiler.qc" which you just edited, and press compile. '''Note:''' If you get a compiler error about write access, it is probably because the directory that the compiler wants to output to as specified in the .qc doesn't exist. Create it.
+
* Go back to StudioCompiler, go to the Model Compile tab, go to the {{code|Compile w/Existing QC}} section, select your {{code|mdldecompiler.qc}} which you just edited, and press compile. '''Note:''' If you get a compiler error about write access, it is probably because the directory that the compiler wants to output to as specified in the .qc doesn't exist. Create it.
 
* '''Note:''' If StudioCompiler is crashing or otherwise fails to compile, you can compile manually (which is faster too). Open the command line to the directory with your "mdldecompiler.qc" and enter:
 
* '''Note:''' If StudioCompiler is crashing or otherwise fails to compile, you can compile manually (which is faster too). Open the command line to the directory with your "mdldecompiler.qc" and enter:
  "[STEAMAPPS DIRECTORY]\sourcesdk\bin\orangebox\bin\studiomdl" -game "[STEAMAPPS DIRECTORY]\team fortress 2\tf" mdldecompiler.qc
+
** {{code|"[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\bin\studiomdl" -game "[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\tf" mdldecompiler.qc
 
* Press {{Key|F5}} in HLMV to refresh the model state. If the model still does not rotate in the correct plane/center of the model, change the values again and recompile. This may require a lot of trial and error.
 
* Press {{Key|F5}} in HLMV to refresh the model state. If the model still does not rotate in the correct plane/center of the model, change the values again and recompile. This may require a lot of trial and error.
 
* After successfully recentering the model, copy the recompiled .mdl, .vtx, .phy, and .vvd files into a zipped folder and upload to a file sharing site (preferably [http://www.mediafire.com/ MediaFire]) to post on the project page.
 
* After successfully recentering the model, copy the recompiled .mdl, .vtx, .phy, and .vvd files into a zipped folder and upload to a file sharing site (preferably [http://www.mediafire.com/ MediaFire]) to post on the project page.
Line 115: Line 115:
  
 
== Tips and debugging ==
 
== Tips and debugging ==
* If your HLMV is opening too slowly, adjust the time in the <code>mouse.sleep(time in seconds)</code> entry that follows opening HLMV.
+
* If your HLMV is opening too slowly, adjust the time in the {{code|mouse.sleep(time in seconds)}} entry that follows opening HLMV.
* Stick the SDK Launcher near the top left of your screen to speed up the step as the script will start looking for the button there by default (this can be changed).
+
* If something interrupts the image taking process, you can continue where you left off by setting the {{code|n}} argument in the automateDis method.
* If something interrupts the image taking process, you can continue where you left off by setting the <code>n</code> argument in the automateDis method.
 
 
** You can also use this to check the images are coming out right by interrupting the script and checking the images. If the rotation looks okay, continue where you left off.
 
** You can also use this to check the images are coming out right by interrupting the script and checking the images. If the rotation looks okay, continue where you left off.
* You can also set the disableXRotation argument to <code>True</code> to just rotate the model with no tilt to see if it looks fine.
+
* You can also set the disableXRotation argument to {{code|True}} to just rotate the model with no tilt to see if it looks fine.
 
* You will find it '''much''' easier when recompiling models to find out if they're centered correctly by checking the 'Ground' checkbox in HLMV and refreshing the model every time you make a change and recompile.
 
* You will find it '''much''' easier when recompiling models to find out if they're centered correctly by checking the 'Ground' checkbox in HLMV and refreshing the model every time you make a change and recompile.
  
 
== Models repository ==
 
== Models repository ==
 
* [[Team Fortress Wiki:3D Models/Classes|Classes]]
 
* [[Team Fortress Wiki:3D Models/Classes|Classes]]
* [[Team Fortress Wiki:3D Models/Hats|Hats]]
 
 
* [[Team Fortress Wiki:3D Models/Weapons|Weapons]]
 
* [[Team Fortress Wiki:3D Models/Weapons|Weapons]]
<!--
 
== Hats ==
 
=== Needed hats ===
 
{{c|Note}}: Reserve the hat you are working on by placing the line '<nowiki>{{c|info}} - Reserved by [[User:<username>|<username>]]</nowiki>' on the relevant hat line. If you have any problems with a model, please post on the [[Team Fortress Wiki talk:3D Models|Talk page]] under a section titled after the hat's name.
 
 
* {{icon item|A Rather Festive Tree|30px}} [[A Rather Festive Tree]]
 
* {{icon item|Alien Swarm Parasite|30px}} [[Alien Swarm Parasite]] - '{{c|info}} - Reserved by [[User:Haze|Haze]]
 
* {{icon item|Amber's Rad As All Hell Hat|30px}} [[Amber's Rad As All Hell Hat]]
 
* {{icon item|Anger|30px}} [[Anger]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Aperture Labs Hard Hat|30px}} [[Aperture Labs Hard Hat]]
 
* {{icon item|Armored Authority|30px}} [[Armored Authority]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Athletic Supporter|30px}} [[Athletic Supporter]]
 
* {{icon item|Attendant|30px}} [[Attendant]]
 
* {{icon item|Backbiter's Billycock|30px}} [[Backbiter's Billycock]]
 
* {{icon item|Backwards Ballcap|30px}} [[Backwards Ballcap]]
 
* {{icon item|Baseball Bill's Sports Shine|30px}} [[Baseball Bill's Sports Shine]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Batter's Helmet|30px}} [[Batter's Helmet]]
 
* {{icon item|Benefactor's Kanmuri|30px}} [[Benefactor's Kanmuri]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Berliner's Bucket Helm|30px}} [[Berliner's Bucket Helm]]
 
* {{icon item|Big Chief|30px}} [[Big Chief]]
 
* {{icon item|Big Country|30px}} [[Big Country]]
 
* {{icon item|Bill's Hat|30px}} [[Bill's Hat]]
 
* {{icon item|Blazing Bull|30px}} [[Blazing Bull]]
 
* {{icon item|Bloke's Bucket Hat|30px}} [[Bloke's Bucket Hat]]
 
* {{icon item|Bombing Run|30px}} [[Bombing Run]]
 
* {{icon item|Bonk Boy|30px}} [[Bonk Boy]]
 
* {{icon item|Bonk Helm|30px}} [[Bonk Helm]] {{c|info}} - Reserved by [[User:Mr. Magoolachub|Mr. Magoolachub]]
 
* {{icon item|Bounty Hat|30px}} [[Bounty Hat]]
 
* {{icon item|Brain Bucket|30px}} [[Brain Bucket]]
 
* {{icon item|Brainiac Goggles|30px}} [[Brainiac Goggles]]
 
* {{icon item|Brainiac Hairpiece|30px}} [[Brainiac Hairpiece]]
 
* {{icon item|Brigade Helm|30px}} [[Brigade Helm]]
 
* {{icon item|Bubble Pipe|30px}} [[Bubble Pipe]]
 
* {{icon item|Buccaneer's Bicorne|30px}} [[Buccaneer's Bicorne]]
 
* {{icon item|Buckaroos Hat|30px}} [[Buckaroos Hat]]
 
* {{icon item|Buzz Killer|30px}} [[Buzz Killer]]
 
* {{icon item|Cadaver's Cranium|30px}} [[Cadaver's Cranium]]
 
* {{icon item|Can Opener|30px}} [[Can Opener]]
 
* {{icon item|Capo's Capper|30px}} [[Capo's Capper]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Carouser's Capotain|30px}} [[Carouser's Capotain]]
 
* {{icon item|Charmer's Chapeau|30px}} [[Charmer's Chapeau]]
 
* {{icon item|Cheater's Lament|30px}} [[Cheater's Lament]]
 
* {{icon item|Chieftain's Challenge|30px}} [[Chieftain's Challenge]]
 
* {{icon item|Clockwerk's Helm|30px}} [[Clockwerk's Helm]]
 
* {{icon item|Cold War Luchador|30px}} [[Cold War Luchador]]
 
* {{icon item|Company Man|30px}} [[Company Man]]
 
* {{icon item|Conjurer's Cowl|30px}} [[Conjurer's Cowl]]
 
* {{icon item|Connoisseur's Cap|30px}} [[Connoisseur's Cap]]
 
* {{icon item|Copper's Hard Top|30px}} [[Copper's Hard Top]]
 
* {{icon item|Cosa Nostra Cap|30px}} [[Cosa Nostra Cap]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Counterfeit Billycock|30px}} [[Counterfeit Billycock]]
 
* {{icon item|Coupe D'isaster|30px}} [[Coupe D'isaster]]
 
* {{icon item|Crocleather Slouch|30px}} [[Crocleather Slouch]]
 
* {{icon item|Dead Cone|30px}} [[Dead Cone]]
 
* {{icon item|Dealer's Visor|30px}} [[Dealer's Visor]]
 
* {{icon item|Defiant Spartan|30px}} [[Defiant Spartan]]
 
* {{icon item|Demoman's Fro|30px}} [[Demoman's Fro]]
 
* {{icon item|Desert Marauder|30px}} [[Desert Marauder]]
 
* {{icon item|Doctor's Sack|30px}} [[Doctor's Sack]]
 
* {{icon item|Dr's Dapper Topper|30px}} [[Dr's Dapper Topper]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Dragonborn Helmet|30px}} [[Dragonborn Helmet]]
 
* {{icon item|Dread Knot|30px}} [[Dread Knot]]
 
* {{icon item|Détective Noir|30px}} [[Détective Noir]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Einstein|30px}} [[Einstein]]
 
* {{icon item|El Jefe|30px}} [[El Jefe]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Ellis' Cap|30px}} [[Ellis' Cap]]
 
* {{icon item|Engineer's Cap|30px}} [[Engineer's Cap]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Exquisite Rack|30px}} [[Exquisite Rack]]
 
* {{icon item|Familiar Fez|30px}} [[Familiar Fez]]
 
* {{icon item|Fancy Fedora|30px}} [[Fancy Fedora]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Flipped Trilby|30px}} [[Flipped Trilby]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Football Helmet|30px}} [[Football Helmet]]
 
* {{icon item|Foster's Facade|30px}} [[Foster's Facade]]
 
* {{icon item|Frenchman's Beret|30px}} [[Frenchman's Beret]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Frontline Field Recorder|30px}} [[Frontline Field Recorder]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Full Head Of Steam|30px}} [[Full Head Of Steam]]
 
* {{icon item|Furious Fukaamigasa|30px}} [[Furious Fukaamigasa]]
 
* {{icon item|Geisha Boy|30px}} [[Geisha Boy]]
 
* {{icon item|Gentleman's Gatsby|30px}} [[Gentleman's Gatsby]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|German Gonzila|30px}} [[German Gonzila]]
 
* {{icon item|Ghastlier Gibus|30px}} [[Ghastlier Gibus]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Ghastlierest Gibus|30px}} [[Ghastlierest Gibus]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Ghastly Gibus|30px}} [[Ghastly Gibus]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Glengarry Bonnet|30px}} [[Glengarry Bonnet]]
 
* {{icon item|Grenadier's Softcap|30px}} [[Grenadier's Softcap]]
 
* {{icon item|Grimm Hatte|30px}} [[Grimm Hatte]]
 
* {{icon item|Gym Rat|30px}} [[Gym Rat]]
 
* {{icon item|Engineer Mask|30px}} [[Halloween Masks]]
 
* {{icon item|Hair of the Dog|30px}} [[Hair of the Dog]]
 
* {{icon item|Handyman's Handle|30px}} [[Handyman's Handle]]
 
* {{icon item|Hard Counter|30px}} [[Hard Counter]]
 
* {{icon item|Hat of Undeniable Wealth And Respect|30px}} [[Hat of Undeniable Wealth And Respect]]
 
* {{icon item|Heavy Duty Rag|30px}} [[Heavy Duty Rag]]
 
* {{icon item|Hermes|30px}} [[Hermes]]
 
* {{icon item|Hero's Hachimaki|30px}} [[Hero's Hachimaki]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Hero's Tail|30px}} [[Hero's Tail]]
 
* {{icon item|Hetman's Headpiece|30px}} [[Hetman's Headpiece]]
 
* {{icon item|Holy Hunter|30px}} [[Holy Hunter]]
 
* {{icon item|Honcho's Headgear|30px}} [[Honcho's Headgear]]
 
* {{icon item|Horrific Headsplitter|30px}} [[Horrific Headsplitter]]
 
* {{icon item|Horseless Headless Horsemann's Head|30px}} [[Horseless Headless Horsemann's Head]]
 
* {{icon item|Hot Dogger|30px}} [[Hot Dogger]]
 
* {{icon item|Hotrod|30px}} [[Hotrod]]
 
* {{icon item|Hottie's Hoodie|30px}} [[Hottie's Hoodie]]
 
* {{icon item|Hound Dog|30px}} [[Hound Dog]]
 
* {{icon item|Humanitarian's Hachimaki|30px}} [[Humanitarian's Hachimaki]]
 
* {{icon item|Hustler's Hallmark|30px}} [[Hustler's Hallmark]]
 
* {{icon item|Idiot Box|30px}} [[Idiot Box]]
 
* {{icon item|Industrial Festivizer|30px}} [[Industrial Festivizer]]
 
* {{icon item|Infernal Impaler|30px}} [[Infernal Impaler]]
 
* {{icon item|J.Axer's Dapper Topper|30px}} [[J.Axer's Dapper Topper]]
 
* {{icon item|Janissary Ketche|30px}} [[Janissary Ketche]]
 
* {{icon item|Jumper's Jeepcap|30px}} [[Jumper's Jeepcap]]
 
* {{icon item|Killer Exclusive|30px}} [[Killer Exclusive]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Killer's Kabuto|30px}} [[Killer's Kabuto]]
 
* {{icon item|Large Luchadore|30px}} [[Large Luchadore]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Larrikin Robin|30px}} [[Larrikin Robin]]
 
* {{icon item|Little Buddy|30px}} [[Little Buddy]]
 
* {{icon item|Lo-Fi Longwave|30px}} [[Lo-Fi Longwave]]
 
* {{icon item|Lord Cockswain's Pith Helmet|30px}} [[Lord Cockswain's Pith Helmet]]
 
* {{icon item|Lumbricus Lid|30px}} [[Lumbricus Lid]]
 
* {{icon item|Madame Dixie|30px}} [[Madame Dixie]]
 
* {{icon item|Magistrate's Mullet|30px}} [[Magistrate's Mullet]]
 
* {{icon item|Magnanimous Monarch|30px}} [[Magnanimous Monarch]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Magnificent Mongolian|30px}} [[Magnificent Mongolian]]
 
* {{icon item|Mann Co. Cap|30px}} [[Mann Co. Cap]]
 
* {{icon item|Manniversary Paper Hat|30px}} [[Manniversary Paper Hat]]
 
* {{icon item|Mask of the Shaman|30px}} [[Mask of the Shaman]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Master's Yellow Belt|30px}} [[Master's Yellow Belt]]
 
* {{icon item|Max's Severed Head|30px}} [[Max's Severed Head]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Medic's Mountain Cap|30px}} [[Medic's Mountain Cap]]
 
* {{icon item|Mildly Disturbing Halloween Mask|30px}} [[Mildly Disturbing Halloween Mask]]
 
* {{icon item|Milkman|30px}} [[Milkman]]
 
* {{icon item|Mining Light|30px}} [[Mining Light]]
 
* {{icon item|Modest Pile of Hat|30px}} [[Modest Pile of Hat]] - {{c|info}} - Reserved by [[User:Jjkoletar|jjkoletar]]
 
* {{icon item|MONOCULUS!|30px}} [[MONOCULUS!]]
 
* {{icon item|Moonman Backpack|30px}} [[Moonman Backpack]]
 
* {{icon item|Nanobalaclava|30px}} [[Nanobalaclava]]
 
* {{icon item|Napper's Respite|30px}} [[Napper's Respite]]
 
* {{icon item|Noble Amassment of Hats|30px}} [[Noble Amassment of Hats]]
 
* {{icon item|Noh Mercy|30px}} [[Noh Mercy]]
 
* {{icon item|Officer's Ushanka|30px}} [[Officer's Ushanka]]
 
* {{icon item|Ol' Geezer|30px}} [[Ol' Geezer]]
 
* {{icon item|Ol' Snaggletooth|30px}} [[Ol' Snaggletooth]]
 
* {{icon item|Old Guadalajara|30px}} [[Old Guadalajara]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|One-Man Army|30px}} [[One-Man Army]]
 
* {{icon item|Otolaryngologist's Mirror|30px}} [[Otolaryngologist's Mirror]]
 
* {{icon item|Outdoorsman|30px}} [[Outdoorsman]]
 
* {{icon item|Party Hat|30px}} [[Party Hat]]
 
* {{icon item|Pencil Pusher|30px}} [[Pencil Pusher]]
 
* {{icon item|Pilotka|30px}} [[Pilotka]]
 
* {{icon item|Planeswalker Helm|30px}} [[Planeswalker Helm]]
 
* {{icon item|Prancer's Pride|30px}} [[Prancer's Pride]]
 
* {{icon item|Prince Tavish's Crown|30px}} [[Prince Tavish's Crown]]
 
* {{icon item|Private Eye|30px}} [[Private Eye]]
 
* {{icon item|Professional's Panama|30px}} [[Professional's Panama]]
 
* {{icon item|Professor's Peculiarity|30px}} [[Professor's Peculiarity]]
 
* {{icon item|Proof of Purchase|30px}} [[Proof of Purchase]]
 
* {{icon item|Prussian Pickelhaube|30px}} [[Prussian Pickelhaube]]
 
* {{icon item|Pugilist's Protector|30px}} [[Pugilist's Protector]]
 
* {{icon item|Pyro's Beanie|30px}} [[Pyro's Beanie]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Pyromancer's Mask|30px}} [[Pyromancer's Mask]]
 
* {{icon item|Reggaelator|30px}} [[Reggaelator]]
 
* {{icon item|Respectless Rubber Glove|30px}} [[Respectless Rubber Glove]]
 
* {{icon item|Rimmed Raincatcher|30px}} [[Rimmed Raincatcher]]
 
* {{icon item|Ritzy Rick's Hair Fixative|30px}} [[Ritzy Rick's Hair Fixative]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Safe'n'Sound|30px}} [[Safe'n'Sound]]
 
* {{icon item|Salty Dog|30px}} [[Salty Dog]]
 
* {{icon item|Samur-Eye|30px}} [[Samur-Eye]]
 
* {{icon item|Saxton Hale Mask|30px}} [[Saxton Hale Mask]]
 
* {{icon item|Scotch Bonnet|30px}} [[Scotch Bonnet]]
 
* {{icon item|Scotsman's Stove Pipe|30px}} [[Scotsman's Stove Pipe]]
 
* {{icon item|Seal Mask|30px}} [[Seal Mask]]
 
* {{icon item|Sergeant's Drill Hat|30px}} [[Sergeant's Drill Hat]]
 
* {{icon item|Shooter's Sola Topi|30px}} [[Shooter's Sola Topi]]
 
* {{icon item|Sniper's Snipin' Glass|30px}} [[Sniper's Snipin' Glass]]
 
* {{icon item|Sober Stuntman|30px}} [[Sober Stuntman]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Soldier's Stash|30px}} [[Soldier's Stash]]
 
* {{icon item|Spine-Chilling Skull|30px}} [[Spine-Chilling Skull]]
 
* {{icon item|Spiral Sallet|30px}} [[Spiral Sallet]]
 
* {{icon item|Stahlhelm|30px}} [[Stahlhelm]]
 
* {{icon item|Stainless Pot|30px}} [[Stainless Pot]]
 
* {{icon item|Stately Steel Toe|30px}} [[Stately Steel Toe]]
 
* {{icon item|Storm Spirit's Jolly Hat|30px}} [[Storm Spirit's Jolly Hat]]
 
* {{icon item|Stout Shako|30px}} [[Stout Shako]]
 
* {{icon item|Sultan's Ceremonial|30px}} [[Sultan's Ceremonial]]
 
* {{icon item|Summer Hat|30px}} [[Summer Hat]]
 
* {{icon item|Surgeon's Stethoscope|30px}} [[Surgeon's Stethoscope]]
 
* {{icon item|Superfan|30px}} [[Superfan]]
 
* {{icon item|Tam O' Shanter|30px}} [[Tam O' Shanter]] - {{c|info}} - Reserved by [[User:Fashnek|Fashnek]]
 
* {{icon item|Tavish DeGroot Experience|30px}} [[Tavish DeGroot Experience]]
 
* {{icon item|Team Captain|30px}} [[Team Captain]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Texas Slim's Dome Shine|30px}} [[Texas Slim's Dome Shine]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Texas Ten Gallon|30px}} [[Texas Ten Gallon]]
 
* {{icon item|Tippler's Tricorne|30px}} [[Tippler's Tricorne]]
 
* {{icon item|Tough Guy's Toque|30px}} [[Tough Guy's Toque]] - Reserved by [[User:Mr._Magoolachub|Mr. Magoolachub]]
 
* {{icon item|Towering Pillar of Hats|30px}} [[Towering Pillar of Hats]]
 
* {{icon item|Treasure Hat|30px}} [[Treasure Hat]]
 
* {{icon item|Triboniophorus Tyrannus|30px}} [[Triboniophorus Tyrannus]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Trophy Belt|30px}} [[Trophy Belt]]
 
* {{icon item|Troublemaker's Tossle Cap|30px}} [[Troublemaker's Tossle Cap]]
 
* {{icon item|Tyrant's Helm|30px}} [[Tyrant's Helm]]
 
* {{icon item|Uncle Sam|30px}} [[Uncle Sam]]
 
* {{icon item|Under Cover|30px}} [[Under Cover]]
 
* {{icon item|Vintage Merryweather|30px}} [[Vintage Merryweather]]
 
* {{icon item|Vintage Tyrolean|30px}} [[Vintage Tyrolean]]
 
* {{icon item|Voodoo Juju|30px}} [[Voodoo Juju]]
 
* {{icon item|Western Wear|30px}} [[Western Wear]]
 
* {{icon item|Whoopee Cap|30px}} [[Whoopee Cap]]
 
* {{icon item|Wiki Cap|30px}} [[Wiki Cap]] - {{c|info}} - Reserved by [[User:iamtehlolrus|iamtehlolrus]]
 
* {{icon item|World Traveler's Hat|30px}} [[World Traveler's Hat]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Wrap Battler|30px}} [[Wrap Battler]]
 
* {{icon item|Ye Olde Baker Boy|30px}} [[Ye Olde Baker Boy]] {{c|info}} - Reserved by [[User:Mr. Magoolachub|Mr. Magoolachub]]
 
* {{icon item|Your Worst Nightmare|30px}} [[Your Worst Nightmare]]
 
* {{icon item|Ze Goggles|30px}} [[Ze Goggles]]
 
 
* {{icon item|Apparition's Aspect|30px}} [[Apparition's Aspect]]
 
* {{icon item|Ball-Kicking Boots|30px}} [[Ball-Kicking Boots]]
 
* {{icon item|B-ankh!|30px}} [[B-ankh!]]
 
* {{icon item|Big Steel Jaw of Summer Fun|30px}} [[Big Steel Jaw of Summer Fun]]
 
* {{icon item|Birdcage|30px}} [[Birdcage]]
 
* {{icon item|Blighted Beak|30px}} [[Blighted Beak]]
 
* {{icon item|Bombinomicon|30px}} [[Bombinomicon]]
 
* {{icon item|Bronze Dueling Badge|30px}} [[Bronze Dueling Badge]]
 
* {{icon item|Builder's Blueprints|30px}} [[Builder's Blueprints]]
 
* {{icon item|Camera Beard|30px}} [[Camera Beard]]
 
* {{icon item|Companion Cube Pin|30px}} [[Companion Cube Pin]]
 
* {{icon item|Dangeresque, Too?|30px}} [[Dangeresque, Too?]]
 
* {{icon item|Dashin' Hashshashin|30px}} [[Dashin' Hashshashin]]
 
* {{icon item|Deus Specs|30px}} [[Deus Specs]]
 
* {{icon item|Dr. Gogglestache|30px}} [[Dr. Gogglestache]]
 
* {{icon item|Dr. Grordbort's Crest|30px}} [[Dr. Grordbort's Crest]]
 
* {{icon item|Dr. Whoa|30px}} [[Dr. Whoa]]
 
* {{icon item|Earbuds|30px}} [[Earbuds]]
 
* {{icon item|Emerald Jarate|30px}} [[Emerald Jarate]]
 
* {{icon item|Essential Accessories|30px}} [[Essential Accessories]]
 
* {{icon item|Fallen Angel|30px}} [[Fallen Angel]]
 
* {{icon item|Fancy Dress Uniform|30px}} [[Fancy Dress Uniform]] - {{c|info}} - Reserved by [[User:RagnarHomsar|Ragnar Homsar]]
 
* {{icon item|Flip-Flops|30px}} [[Flip-Flops]]
 
* {{icon item|Frontier Flyboy|30px}} [[Frontier Flyboy]]
 
* {{icon item|Futankhamun|30px}} [[Futankhamun]]
 
* {{icon item|Garlic Flank Stake|30px}} [[Garlic Flank Stake]]
 
* {{icon item|Gentle Manne's Service Medal|30px}} [[Gentle Manne's Service Medal]]
 
* {{icon item|Gold Dueling Badge|30px}} [[Gold Dueling Badge]]
 
* {{icon item|Googly Gazer|30px}} [[Googly Gazer]]
 
* {{icon item|Griffin's Gog|30px}} [[Griffin's Gog]]
 
* {{icon item|Grizzled Veteran|30px}} [[Grizzled Veteran]]
 
* {{icon item|Hat With No Name|30px}} [[Hat With No Name]]
 
* {{icon item|Intangible Ascot|30px}} [[Intangible Ascot]]
 
* {{icon item|Last Breath|30px}} [[Last Breath]]
 
* {{icon item|Le Party Phantom|30px}} [[Le Party Phantom]]
 
* {{icon item|Legend of Bugfoot|30px}} [[Legend of Bugfoot]]
 
* {{icon item|License to Maim|30px}} [[License to Maim]]
 
* {{icon item|Lord Cockswain's Novelty Mutton Chops and Pipe|30px}} [[Lord Cockswain's Novelty Mutton Chops and Pipe]]
 
* {{icon item|Lucky No. 42|30px}} [[Lucky No. 42]]
 
* {{icon item|Made Man|30px}} [[Made Man]]
 
* {{icon item|Mark of the Saint|30px}} [[Mark of the Saint]]
 
* {{icon item|Mercenary|30px}} [[Mercenary]]
 
* {{icon item|Merc's Pride Scarf|30px}} [[Merc's Pride Scarf]]
 
* {{icon item|Physician's Procedure Mask|30px}} [[Physician's Procedure Mask]] - {{c|info}} - Reserved by [[User:Henry_Spencer|Henry Spencer]]
 
* {{icon item|Pickled Paws|30px}} [[Pickled Paws]]
 
* {{icon item|Pip-Boy|30px}} [[Pip-Boy]]
 
* {{icon item|Planeswalker Goggles|30px}} [[Planeswalker Goggles]] {{c|info}} - Reserved by [[User:Mr. Magoolachub|Mr. Magoolachub]]
 
* {{icon item|Platinum Dueling Badge|30px}} [[Platinum Dueling Badge]]
 
* {{icon item|Pocket Medic|30px}} [[Pocket Medic]]
 
* {{icon item|Point and Shoot|30px}} [[Point and Shoot]]
 
* {{icon item|Polycount Pin|30px}} [[Polycount Pin]]
 
* {{icon item|Prairie Heel Biters|30px}} [[Prairie Heel Biters]]
 
* {{icon item|Primeval Warrior|30px}} [[Primeval Warrior]]
 
* {{icon item|Professor Speks|30px}} [[Professor Speks]]
 
* {{icon item|Purity Fist|30px}} [[Purity Fist]]
 
* {{icon item|Resurrection Associate Pin|30px}} [[Resurrection Associate Pin]]
 
* {{icon item|Rogue's Col Roule|30px}} [[Rogue's Col Roule]]
 
* {{icon item|Scottish Snarl|30px}} [[Scottish Snarl]]
 
* {{icon item|Security Shades|30px}} [[Security Shades]]
 
* {{icon item|Shoestring Budget|30px}} [[Shoestring Budget]]
 
* {{icon item|Sight for Sore Eyes|30px}} [[Sight for Sore Eyes]]
 
* {{icon item|Sign of the Wolf's School|30px}} [[Sign of the Wolf's School]]
 
* {{icon item|Silver Bullets|30px}} [[Silver Bullets]]
 
* {{icon item|Silver Dueling Badge|30px}} [[Silver Dueling Badge]]
 
* {{icon item|Soldier of Fortune|30px}} [[Soldier of Fortune]]
 
* {{icon item|Soviet Stitch-Up|30px}} [[Soviet Stitch-Up]]
 
* {{icon item|SpaceChem Pin|30px}} [[SpaceChem Pin]]
 
* {{icon item|Steel Pipes|30px}} [[Steel Pipes]]
 
* {{icon item|Steel-Toed Stompers|30px}} [[Steel-Toed Stompers]]
 
* {{icon item|Stockbroker's Scarf|30px}} [[Stockbroker's Scarf]]
 
* {{icon item|Summer Shades|30px}} [[Summer Shades]]
 
* {{icon item|Surgeon's Stahlhelm|30px}} [[Surgeon's Stahlhelm]]
 
* {{icon item|Tail From the Crypt|30px}} [[Tail From the Crypt]]
 
* {{icon item|Teddy Roosebelt|30px}} [[Teddy Roosebelt]]
 
* [[Tournament Medal - ETF2L Highlander Tournament]]
 
* [[Tournament Medal - GWJ Tournament]]
 
* [[Tournament Medal - UGC Highlander Tournament]]
 
* {{icon item|Villain's Veil|30px}} [[Villain's Veil]]
 
* {{icon item|War Head|30px}} [[War Head]]
 
* {{icon item|Whiskered Gentleman|30px}} [[Whiskered Gentleman]]
 
* {{icon item|Wingstick|30px}} [[Wingstick]]
 
 
=== Finished hats ===
 
-->
 
  
 
== Weapons ==
 
== Weapons ==
Line 431: Line 129:
 
{{c|Note}}: Reserve the weapon you are working on by placing the line '<nowiki>{{c|info}} - Reserved by [[User:<username>|<username>]]</nowiki>' on the relevant weapon line. If you have any problems with a model, please post on the [[Team Fortress Wiki talk:3D Models|Talk page]] under a section titled after the weapon's name.
 
{{c|Note}}: Reserve the weapon you are working on by placing the line '<nowiki>{{c|info}} - Reserved by [[User:<username>|<username>]]</nowiki>' on the relevant weapon line. If you have any problems with a model, please post on the [[Team Fortress Wiki talk:3D Models|Talk page]] under a section titled after the weapon's name.
  
* {{icon item|Ap-Sap|30px}} [[Ap-Sap]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Ap-Sap|30px}} [[Ap-Sap]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Vaccinator|30px}} [[Vaccinator]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Vaccinator|30px}} [[Vaccinator]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Bat Outta Hell|30px}} [[Bat Outta Hell]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Bat Outta Hell|30px}} [[Bat Outta Hell]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Memory Maker|30px}} [[Memory Maker]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Memory Maker|30px}} [[Memory Maker]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Quackenbirdt|30px}} [[Quackenbirdt]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Quackenbirdt|30px}} [[Quackenbirdt]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Equalizer|30px}} [[Equalizer]] (Needs Update) '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Equalizer|30px}} [[Equalizer]] (Needs Update) {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Lollichop|30px}} [[Lollichop]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Lollichop|30px}} [[Lollichop]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Robo-Sandvich|30px}} [[Robo-Sandvich]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Robo-Sandvich|30px}} [[Robo-Sandvich]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Flying Guillotine|30px}} [[Flying Guillotine]] (Needs 'Thirstier' Style) '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Flying Guillotine|30px}} [[Flying Guillotine]] (Needs 'Thirstier' Style) {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Invisibility Watch|30px}} [[Invisibility Watch]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Invisibility Watch|30px}} [[Invisibility Watch]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
  
* {{icon item|Festive Ambassador|30px}} [[Festive Ambassador]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Ambassador|30px}} [[Festive Ambassador]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Huntsman|30px}} [[Festive Huntsman]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Huntsman|30px}} [[Festive Huntsman]]{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Ubersaw|30px}} [[Festive Ubersaw]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Ubersaw|30px}} [[Festive Ubersaw]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Sandvich|30px}} [[Festive Sandvich]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Sandvich|30px}} [[Festive Sandvich]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Grenade Launcher|30px}} [[Festive Grenade Launcher]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Grenade Launcher|30px}} [[Festive Grenade Launcher]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Axtinguisher|30px}} [[Festive Axtinguisher]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Axtinguisher|30px}} [[Festive Axtinguisher]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Buff Banner|30px}} [[Festive Buff Banner]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Buff Banner|30px}} [[Festive Buff Banner]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Holy Mackerel|30px}} [[Festive Holy Mackerel]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Holy Mackerel|30px}} [[Festive Holy Mackerel]] {{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
* {{icon item|Festive Wrench|30px}} [[Festive Wrench]] '<nowiki>{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]</nowiki>'
+
* {{icon item|Festive Wrench|30px}} [[Festive Wrench]]{{c|info}} - Reserved by [[User:Dwizard|Dwizard]]
  
 
* {{icon item|Silver Botkiller Scattergun Mk.I|30px}} [[Silver Botkiller Scattergun Mk.I]]
 
* {{icon item|Silver Botkiller Scattergun Mk.I|30px}} [[Silver Botkiller Scattergun Mk.I]]

Revision as of 01:46, 25 June 2013

The 3D Models project's goal is to construct pseudo 3D images of the weapons in Team Fortress 2 that can be freely rotated.

Example

https://wiki.teamfortress.com/w/images/6/6a/Detonator_RED_3D.jpg?2018072610024612838,280,233,3,0,193,111,56,152,110,115,146,109,175,194,106,266,153,106,367,147,105,472,194,84,608,155,83,762,146,80,924,194,63,1098,157,60,1295,145,57,1503,194,44,1705,161,40,1932,145,35,2173,195,29,2392,165,24,2635,147,19,2895,195,20,3123,171,14,3377,151,7,3646,196,17,3872,177,11,4122,154,4,4386,198,22,4597,182,16,4829,159,9,5073,204,37,5255,188,31,5454,164,25,5663,210,61,5803,192,56,5955,168,51,6114,214,92,6203,195,89,6298,170,86,6396,215,114,6447,196,115,6497,172,115,6545,214,98,6633,195,95,6727,170,94,6825,210,78,6965,192,71,7116,168,68,7275,204,60,7457,188,49,7656,164,45,7865,198,46,8076,182,30,8308,159,25,8552,196,35,8778,177,17,9028,154,10,9292,195,31,9520,171,11,9774,151,2,10043,194,30,10263,165,12,10506,147,0,10766,194,33,10968,161,12,11195,145,2,11436,194,42,11610,157,21,11807,145,14,12015,194,58,12151,155,42,12306,146,35,12469,194,82,12560,153,72,12661,147,69https://wiki.teamfortress.com/w/images/3/36/Detonator_BLU_3D.jpg?2018072610042612842,280,232,3,0,193,111,56,153,110,114,146,110,173,194,106,264,154,106,365,146,105,470,194,84,607,155,82,761,146,80,923,194,62,1097,158,59,1294,145,56,1502,195,43,1704,162,39,1931,145,35,2172,195,28,2392,166,23,2635,148,18,2896,195,19,3125,171,14,3379,151,7,3649,196,17,3875,177,11,4125,154,4,4389,198,22,4600,182,16,4832,159,10,5076,203,37,5258,187,32,5457,164,25,5666,209,61,5806,191,57,5957,167,52,6116,213,92,6205,194,90,6299,170,87,6397,214,114,6448,195,114,6498,171,115,6546,213,98,6635,194,95,6729,170,93,6827,209,78,6967,191,70,7118,168,68,7277,203,60,7459,187,48,7658,164,44,7867,198,45,8078,182,30,8310,159,25,8554,196,35,8780,177,17,9030,154,10,9294,195,31,9523,171,11,9777,151,1,10047,195,30,10267,166,12,10510,148,0,10771,194,33,10973,162,12,11200,145,2,11441,194,42,11615,158,22,11812,145,14,12020,194,58,12157,155,42,12311,146,36,12473,194,82,12564,154,72,12665,146,69

Pictogram comment.png Note This is not for the faint of heart. It requires a bit of knowledge on how both VMTs and HLMV work, and a lot of time and patience since a lot of models will not be centered correctly by default, thus requiring plenty of tweaking to get them ready for the process.

Requirements

OR

Also:

Initial setup

Installation

  • If manually installing Python:
    • Install Python 2.6 and the required libraries (SendKeys, PIL, pywin32, NumPy and cython) and install Visual Studio Express 2008 C++ Express Edition.
    • Extract the wikitools zipped file into the same directory as the script.
    • Install the Source SDK from the Tools part of Steam. This is only needed for the files, not for any of the functions!
    • Copy the MDL Decompiler .exe to \Steam\steamapps\<username>\sourcesdk\bin\ep1\bin.
    • Navigate to \Python26\Lib\site-packages and replace SendKeys.py with the modified version linked above.
  • Otherwise extract the zipped Python folder somewhere.
  • Download and save the automaton scripts to an easily accessible folder.
  • Copy fireLayeredSlowTiled512.vtf to \Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\effects\tiledfire.
  • Copy background.vtf to \Steam\steamapps\common\Team Fortress 2\tf\custom\folder\materials\hlmv.
  • Set up HLMV to produce the highest quality images possible by following the guide found here.

Setting up automate.py

File:3D Tutorial HLMV Coordinates.png
HLMV screen where 1 is the location of fileButtonCoordindates, 2 is the location of optionsButtonCoodinates, and 3 is the boundary for imgCropBoundaries.
  • Open HLMV and maximize it.
  • Take a screenshot and paste it into an image viewer such as paint.NET or Adobe Photoshop.
  • Take note of the following pixel coordinates for your screen size.
    • monitorResolution is simply a list of your screen resolution.
    • imgCropBoundaries is the boundary of the window the model in HLMV is contained within. The format is;
      • [pixel distance of left boundary from left of screen, pixel distance of top boundary from top of screen, pixel distance of right boundary from left of screen, pixel distance of bottom boundary from top of screen]
      • You should leave a few pixels gap from the window edge.
  • fileButtonCoordindates is a tuple of the center x,y coordinates for the File menu button in HLMV.
  • Close any programs that may interrupt or interfere with the process.
  • You are now set to take the images.

Workflow

Taking images

  • Open up a weapon model in HLMV and center the model using Options -> Center View.
  • If the model does not face you directly when centered, it will need to be recompiled with a new rotation.
  • Zoom the model out so that it is as large as possible, but will not clip outside the viewer window when rotated or tilted.
  • If the model has a fire overlay, see the Installation section on this page or the Program Limitations section on the Help: Model Viewer page on how to remove it.
  • If the light source produces a glare that interferes with the model, hold Ctrl and drag the light source around with the mouse until it is in a better position.
  • Open regedit, navigate to \HKEY_CURRENT_USER\Software\Valve\hlmv, and locate the registry key entry for the model. This will be in the form of models.weapons.c_models.c_wrench.c_wrench.mdl.
  • Copy and paste this key name into automate.py in the model = HLMVModelRegistryKey() entry.
  • Copy the Trans key entry for the model into automateDis as the intialTranslation argument. (Don't forget to add the commas to separate the values)
  • Rotate the model by dragging near the center of the viewer.
  • There will be three possible outcomes here.
    • The model will rotate around the bottom corner of the model. If so, you will need to make use of rotationOffset.
      • Rotate the model so that it is facing left. Hold down ⇧ Shift and move the model sideways so that it is centered in the circle that appears.
      • Press F5 in HLMV, and then in regedit. Note the new 'y' Trans value. The difference between the current value and the initial value is the rotationOffset value.
    • The model will rotate around the wrong plane or the model will not rotate around the vertical or horizontal center. If so, the model will need to be recompiled. See the section on recompiling models.
    • The model will rotate around the vertical and horizontal center of the model. If so, you are good to go.
  • Set the item name in the script for itemName. It is suggested you initially set this to 'User <username> <item>' so you can see the item looks fine before being moved to the correct title.
  • The script is started as so. From the commandline, navigate to the folder containing the scripts and type python automate.py.
  • You will be asked to enter the folder name for the generated images.
  • The script will now automate taking the required images. It is best not to try and use your computer while the script is running as it will likely result in an incorrect output.
    • To interrupt the image taking process, turn on Caps Lock.

Painted hats

  • Coming soon

Team-colored models

  • Extract the VMTs for the model from the tf2_misc_dir.vpk appropriate folder directories in the /custom/folder.
  • In the automate.py script set teamColours to True and set the paths to the VMTs for REDVMTFile and BLUVMTFile.

Models with other class arms/models blocking the view

  • If you wish to remove a model from the viewer (for example the Sniper's arms holding onto the view model Sniper Rifle), click on the Model tab in HLMV and find out which VMTs are being used for the model textures.
  • Extract the VMTs using GCFScape to the same path in your /custom/folder and open them up in a text editor.
  • Inside the "VertexLitGeneric" curly brackets add the line "$no_draw" "1". This will make this part of the model invisible in HLMV.

Recompiling models

  • Open the model in HLMV.
  • Launch GCFScape and load tf2_misc_dir.vpk.
  • Navigate to tf\models\weapons and extract the relevant weapon folder to \Steam\steamapps\common\Team Fortress 2\tf\custom\folder\models\weapons.
  • Launch MDL Decompiler, tick "do not fix rotations on animations", set your output directory to the same folder where the model was extracted, and extract.
  • Unfortunately, you are not done. The animation sequences you have just decompiled are all horribly borked. Launch StudioCompiler, go to the Model Decompile tab, and decompile the same model (this time leaving "do not fix rotations" unticked). The decompiler will throw you an error. That is fine. Click okay and it will finish extracting. Make sure you output to the SAME directory as the previous step so that the files will be overwritten.
  • Open up the outputted mdldecompiler.qc and change the $model line's value for the .dmx.smd file to not include a directory. i.e. change parts/dmx/c_wrench.dmx.smd to c_wrench.dmx.smd.
  • Open up idle.smd in a text editor. You will find an entry/entries that start with time 0/1/etc. The 2nd/3rd/4th numbers in the entry correspond to back/forth, side to side, and up/down translations, respectively. The 5th/6th/7th numbers in the entry correspond to x, y, and z rotations, respectively. Correct these values for all lines (or delete the all the time lines except for the first) and save.
  • Go back to StudioCompiler, go to the Model Compile tab, go to the Compile w/Existing QC section, select your mdldecompiler.qc which you just edited, and press compile. Note: If you get a compiler error about write access, it is probably because the directory that the compiler wants to output to as specified in the .qc doesn't exist. Create it.
  • Note: If StudioCompiler is crashing or otherwise fails to compile, you can compile manually (which is faster too). Open the command line to the directory with your "mdldecompiler.qc" and enter:
    • {{code|"[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\bin\studiomdl" -game "[STEAMAPPS DIRECTORY]\common\Team Fortrees 2\tf" mdldecompiler.qc
  • Press F5 in HLMV to refresh the model state. If the model still does not rotate in the correct plane/center of the model, change the values again and recompile. This may require a lot of trial and error.
  • After successfully recentering the model, copy the recompiled .mdl, .vtx, .phy, and .vvd files into a zipped folder and upload to a file sharing site (preferably MediaFire) to post on the project page.

Uploading your image for submission

  • Post a link to the image on the Talk page under a section titled after the weapon's name, along with your parameters for the script (weapon key name, initial rotation, initial translation, offsets, etc).
  • Keep a copy of the individual frame images somewhere safe in case they are needed in the near future.

Tips and debugging

  • If your HLMV is opening too slowly, adjust the time in the mouse.sleep(time in seconds) entry that follows opening HLMV.
  • If something interrupts the image taking process, you can continue where you left off by setting the n argument in the automateDis method.
    • You can also use this to check the images are coming out right by interrupting the script and checking the images. If the rotation looks okay, continue where you left off.
  • You can also set the disableXRotation argument to True to just rotate the model with no tilt to see if it looks fine.
  • You will find it much easier when recompiling models to find out if they're centered correctly by checking the 'Ground' checkbox in HLMV and refreshing the model every time you make a change and recompile.

Models repository

Weapons

Needed weapons

Pictogram comment.png Note: Reserve the weapon you are working on by placing the line '{{c|info}} - Reserved by [[User:<username>|<username>]]' on the relevant weapon line. If you have any problems with a model, please post on the Talk page under a section titled after the weapon's name.

Finished weapons