Overview
A work-around for making the player use a different set of arms in a single-player map. All it takes is a single extra entity in the map!
Intro
One feature that a lot of people have been asking about over the years is the ability to set the player’s arms in a single-player game, to something other than the default HEV suit arms. As of 1.5, this still doesn’t appear to have been added officially, unfortunately – but there’s a relatively simple workaround that can be done in Hammer.
I think I should mention up-front: While I’ve played around with this in singleplayer without running into any serious issues, I have no idea what would happen if you were to try this in multiplayer. I expect either nothing will happen, or it’ll override the viewmodel arms for everyone in the server, at least up to a point. You’ve been warned.
Instructions
Note: This guide is written under the assumption that you’re already familiar with Hammer, and possibly that you already have a map you’re working on where you’d like to change the player’s arms.
- Place a new logic_auto in your map in Hammer. If you’ve already got one with the settings listed below, this isn’t strictly necessary, though it might help with keeping things organized if you separate the viewmodel setting from the rest of your map’s logic.
- In the Flags tab for the new logic_auto, ensure that Remove on fire is UNCHECKED.
- In the Outputs tab, add a new output, with these parameters:
OnMapSpawn -> blackmesa_viewmodel -> SetBodyGroup -> <arm number>
(See below for a list of arm values) Ensure that Fire once only is UNCHECKED.
That’s all it takes. When you compile and run your map now, your arms in first-person will change accordingly.
ARM LIST
After 6, the values loop – i.e. 7 gives the HEV arms again, 8 the HECU arms, and so on.
Explanation + Things to Note
How this works is simple enough. Black Mesa has its own unique entity used for rendering the player’s viewmodel, appropriately named blackmesa_viewmodel. As an internal entity, it doesn’t get a targetname that can be used in the I/O system – but in singleplayer at least, you can successfully fire inputs to it via its classname.
Frankly, I don’t know how good of an idea it is to fire outputs targeting an entire class of entities like this, and this is part of why I wouldn’t recommend trying this on a multiplayer map – in singleplayer, there’s only ever a single blackmesa_viewmodel entity to worry about, while in multiplayer, there could be any number at any given time, possibly even none. In theory, at least, I don’t think this has any chance of causing instability – but it’s either not going to work properly, or it’s going to be confusing for players. It might be interesting to play around with to see what happens, but I don’t think it’s exactly a functional feature.
ON THAT NOTE. Some caveats to keep in mind when using this:
- The arm setting does not carry over between maps, nor is it recorded in a player’s save file. If your logic_auto doesn’t have Remove on fire unchecked, then it’ll only run once, when the map’s first loaded – if the player saves and loads on the map after that, or if they transition to another map and back again, their arms will reset to the default. Similarly, mapchanges will reset the arms as well – though this can be avoided by making the logic_auto common to all maps where it’s needed.
- The arm setting only affects weapons properly. The hand examining animation when you first put on the suit uses its own unique viewmodel, that doesn’t have the multiplayer arm models compiled into it. Even if you run SetBodyGroup with a non-HEV value, when the player first acquires the HEV suit, they’ll see the default arms. There’s no real way to “fix” this properly, unfortunately, but there are any number of ways to work around it – ensure the player spawns with the suit and a weapon, make the screen fade in from black so the equip animation isn’t seen… Things like that. Note that this only applies to the “suit inspect” animation, as well as the arms seen in the Xen “cutscenes” – the singleplayer animations that play when you pick up a weapon for the first time work fine with non-HEV arms, though there might be some model clipping or other oddities.
Since this technically isn’t an officially supported feature, there may be other problems with it somewhere. I haven’t noticed anything myself, but it’s something to bear in mind.
Hope someone finds this useful!