===TUTORIAL FOR CONVERTING MODELS/SKINS===
To "convert" a custom MODEL for this plugin, all you have to do is move it to its own folder so that it is not replacing the stock TF2 files. You do not have to follow this tutorial, but any custom animation files will require a bit of reworking.
To "convert" a custom SKIN for this plugin, you have to follow the instructions from the tutorial(s).
While the tutorial says to use the stockmodels files, the TF2 update on October 8, 2012 broke this method. You will have to use the files from models/player/<class>.mdl, e.g. models/player/sniper.mdl. You may or may not have to use the MDL Hexer to change the model's path internally to your custom model path (I haven't, for the most part: I've just moved the model to a new folder and it seemed to work fine). Finally, you will have to grab the .sw.vtx, .dx90.vtx, .dx80.vtx, .vvd, and .phy files from the same place, copy them to your custom model location, and rename them to your custom model name (if you didn't just use the stock model name but in a custom folder).
For example: I want to reskin the Sniper to the Christian Brutal Sniper.
I copy the following files from tf/models/player/ to tf/models/player/saxton_hale/
I rename all the files to be "cbs_v9" instead of "sniper".
I use the MDL Hexer to edit the skin in sniper.mdl.
I use the MDL Hexer's second tab to edit the model that "player/sniper.mdl" is to be "player/saxton_hale/cbs_v9.mdl". This step is no longer needed.
When using custom SKINS (as in, texture-only replacements), please use the following models as a base, with this plugin to make them download to clients. With this, then even people who use custom-model skins for their stock classes will be able to see the skins. Otherwise, they'd normally be invisible.
Model packs for use with this plugin:
The paths are the same as the default models, except with _stock appended (so models/player/scout_stock.mdl).
SO, USE THESE .mdl FILES INSTEAD OF GRABBING THE STOCK TF2 ONES FROM THE GCF WHEN PORTING SKINS.
For some reason these models' mouths don't animate for vocalizations. Nothing I can do about it.
This is still a better solution for the issue with people using clientside skins than making each model have its own extra files.
stockmodels.sp last updated 06/18/2012
Attached as 'medic_popit_taunt.7z': 'Medic: Pop It, Don't Drop It', 'Heavy: Crotch Chop', for use with this plugin. Files from the "server" directory go onto your server (there's a "tf" folder in there, so you should be able to figure out where on the server it goes). Files from the "fastdl" directory go onto your fastdownload server.
"config_add.txt" is the default model list entries for these four models/taunts.
The High Five versions don't sync up to the song and between the two classes, simply because of the way the high five animations work for them.
Some stuff about inplace animation swaps, backed up from SPUF:
If your animation file name is too long to fit in the place of the old animation path, you can do a twisted bit of hex editing to point it to a new spot.
First, head to the very end of the file in the hex editor, and after the 00/null byte at the end, add your new animations path (as if it were in the place of the old one), then go to the hex side of the editor and add a null byte (00) after the path.
Next, head to offset hex 154 (ctrl+g to goto). There should be four bytes at that location (using the spy model, you see 98 4A 0E 00). These bytes, reversed, tell us the location of the 'includemodel pointer', the offset at which there's a few bytes telling us where the included .mdl file (the animation file) is. In the case of the spy model, it's 000E4A98, or E4A98, so head there via ctrl+g.
Upon reaching there, you'll see a bunch of zeros. 00 00 00 00. However, that first pair of zeros is an important part. In xvi32, highlight that byte, then go to the menu bar > Address > Remember Address. After the four pairs of zeroes (inconsistent spelling of the plural of 'zero'...), you'll see some nonzero bytes. Those next four should be something like EC 3E 00 00 (for the spy.mdl). This means 00003EEC. Don't head there just yet, though. That offset is relative to that remembered address we just saved, at that null byte. Go up to the menu bar > Address > Jump Width, set the jump width to 3EEC, then highlight that remembered null byte we had, then menu bar > Address > Jump Down (F5 for short). Where do we end up? Right at the start of the old animation file.
So now we can see what we need to do.
Head to the end of the file, and at the new animations file path that you added down at the bottom (models/whatever_anims_incredibly_long_filepath/pants.mdl), highlight the first byte of it. Go to menu bar > Address > Display Difference, and look at the 'Difference hex'. In the case of the spy.mdl, it should be 40C9. Reverse this so that it's C9 40 00 00, and replace the EC 3E 00 00 with the new four bytes (quickly get there via menu > Address > Goto remembered, then move over to the right by 4 bytes).
One more thing, the size of the file has changed so we need to tell the file that its new end is at the new end byte, not the old one. First, go to the very end of the file, on the hex side, and look at the very very last byte's "Adr. hex". Add 1 to that number (I've swapped out the spy model to use Heavy animations, so adr. hex shows E8B82, so I'm remembering E8B83. For those unfamiliar with hex, if your thing ends in 9, you make it A. If your thing ends in a letter, go to the next letter (A to B, B to C, etc). If it's F, make it a 0 and add 1 to the next letter up (so E8B8F would go to E8B90).
Ctrl+G, goto offset 4C, convert your number to the reversed format (so mine would be 83 8B 0E 00), and replace whatever's at 4C with that.
You should be done.
I'll try to get pics up of a spy model example soon.
Last edited by FlaminSarge; 04-17-2020 at 06:53.