Half-Life - HEV Suit Replica Costume

THE CONCEPT

Hi all, I’d like to show case my WIP project, as per the title, it’s a fully wearable HEV Suit from the Half-Life video game series by Valve Software (If you’re a boomer shooter, you’ll probably remember this old nugget :wink:).
Being a massive Half-Life, when I saw this for the first time, naturally I was inspired to make it in real life.



Summary



My work is based on a fan-art rendition of the original HEV Suit Mark 5 from Half-Life 2.
The 3D Artist behind the fan-art is the Head of Studio at Little Red Zombies who specialise in characters for other video games such as Star Wars Jedi: Survivor, etc. The following link is to his portfolio, being the source of inspiration and references:
https://www.artstation.com/naky1000

MY TURN:

This is my progress at an incredibly quick glance (more in the Summary):

Summary

unknown









It’s mainly for cosplay purposes and to also stand as my ultimate trophy somewhere in my house.

I’ve been working on the suit since July 2021, with sporadic breaks in between. Most of the project so far has been building the armour itself. Most of it is all hand made with patterns and EVA foam, with a few exceptions being 3D printed.

About 2 years of working on and off, I finally had the chest piece wired up with the help of a friend (@Sabersense) utilising a Proffieboard v2.2. Still grateful we managed to pull that off! :pray:


Summary



PROFFIEOS

Now onto why I’m posting here in the first place. To start with, I’ve been a long time user of a Proffieboard since 2019, I was mostly fluent in all the changes and cool things OS 5.x & OS 6.x could do owning a Kyle Katarn Lightsaber of my own. So I’ll need to brush up on things for OS 8.x.

Ideally, the initial goal is to replicate all behaviours of the suit as it is in Half-Life 1. Quick example, the player (person in the suit) has 100 health and 100 armor, they go up and down when the player takes damage. There is some maths to this and I have dedicated a whole Python program
that simulates the in-game behaviour to a T (go easy on me it’s my first ever program!)
There is a lot going on in this program, therefore I’ve documented every aspect of it to reflect what is actually happening in the code and why.

Currently, I’m only able to make the suit do some basic things that it does in-game. Like when recharging health and/or armor at a recharge station.

Going over each prop file’s button config, I found that BC’s prop file was the best option to achieve these effects, so I just replaced the bgnlock, lock and endlock wavs with (coincidently) the exact same file setup Valve used for the game. I also did the same for lightning block.

It was only when Proffie OS had the functionality to readout the current battery percentage in increments of 5%, which was when I realised that the HEV in-game does the exact same thing!!
So of course, I swapped out the wav files for that too. Check out the quick 27s video I made on it below:

Whilst this is already pretty cool (at least I think so) that’s about as far the functionality goes. It would be brilliant to replicate the behaviour as it is in-game.
Thankfully, @profezzorn has kindly offered to create a skeleton for a dedicated HEV prop file, which should serve as a basis for implementing the in-game behaviours going forward.

I’m totally up for hearing any other interesting or cool ideas that could be added in the future!
It’s a ways off yet but the Prof and I had ideas revolving around some laser-tag code, if the suit had the right sensors, that could chip away at the health/armor.
Or if I had a 3D printed prop of the battery in-game, using NFC we could repair the armor (as picking up batteries in-game replenishes your armor if not at a recharge station).

Summary

image

There is a lot more that I’ve discussed with the Prof, (mainly the vision for the suit and HEV OS) so I will follow up on fleshing those concepts out more in detail in a follow up post!

Cheers for reading if you got this far!

4 Likes

Holy half-life! Looking forward to following this build.

1 Like

I literally still have the tab open with your sounds from when we discussed this. I know a long time ago, sorry. Didn’t forget about it though!

1 Like

Hey Brian, no problem at all! I’m always going to be open to any kind of contribution toward this project… so in a roundabout kind of way, I’m still grateful the tab is still there on your browser! :smile:

I’ll begin by documenting the systems here for other readers so that the vision is clearer.

THE BASIS

Okay, so if you’ve got this far, I’m sort of half-assuming you remember or know that the HEV suit has an on-board voice system that notifies you under certain situations and/or circumstances.

If you do remember any of that, then following along should make things a lot easier. Otherwise, here are 2 videos. The first being the one I based my Python program on alongside my own recordings which offers more situational examples of the suit’s behaviour:
1.

2
(ignore the captions in the video)

All of these sounds & voice lines are like a novelty you become accustomed to eventually. So how do they translate to the prop file? And ultimately what about when wearing the suit? The answer to these 2 questions should become clearer as I explain, so please, follow along!

THE VISION

// default mode //

I planned that the prop file should adopt functionality ProffieOS can already offer. The first mode is just in a default state:

  • The user is able to turn the lights ON and OFF, like a Lightsaber.
  • They can perform a battery readout when the lights are OFF, like a Lightsaber.
  • They they can play the health or armor recharge when the lights are ON, like a Lightsaber’s lockup or lb.

Pretty normal stuff if you use a Proffieboard Lightsaber.

// hazard mode //

The second mode is what I’d like to call “Hazard Mode”. It’s fairly similar, in principle, to @Fett263’s Battle Mode where it takes ProffieOS functionality but turns nearly everything into gesture based controls. Hazard Mode should be accessible whether the lights are ON or OFF.

So, in Hazard Mode, health and armor are always in the background. Both have values from 0 - 100, beginning at 100.
Entering and exiting Hazard Mode should save the current health and armor values. Rather than resetting the their states back to 100.

// physical damage //

Damage is divided into two categories, hit and hazard. To trigger physical damage sounds, what we know as “clash” detection can be used, where the amount of force applied will inflict a hit equalling a value between 1 - 50. In my case the board is situated inside the chest piece, behind the lambda logo. Of course, some threshold testing would need to happen to prevent false hits, like when walking.

Just like in-game, after a hit, there is a percentage based chance that an appropriate voice line will play, ie “major fracture detected” will play if a hit value greater than or equal to 25 is registered. (Refer to my Python program’s where I’ve made logic for this. Also check the README where all of this is summarised :wink: I’ll post it here following this post!)

// energy damage //

The other damage type, hazard, is random based, somewhat akin to @profezzorn’s random blaster jam behaviour, so I believe.

As there is no ethical way to alert for real-life hazards, this is what I came up with:

Randomly every 10 - 20 minutes the suit should notify the user that they have encountered/come into contact with a hazard. In-game there are more than 8 different types (refer to video 1) but in my Python program I stuck with 6:

  • heat
  • shock
  • bio
  • blood toxins
  • chemical
  • radiation

It chooses a hazard at random, let’s say it chooses radiation for example, the suit would play the appropriate voice line for radiation.

Hits and hazards will chip away at some armor (if any) and health.

/ /health alerts //

There are more chances of follow-up voice lines to play after the initial one! These also percentage based!
When health is below 50, the suit will sometimes notify you about your current health status, “seek medical attention” can potentially play, or if health is below 6 (as per video 1) “vital signs critical” can also potentially play.
Again, these follow-up voice lines only have a chance of playing directly after an initial hit or hazard voice line has played. By design this is to stop hearing the same lines all too often.

The percentage based chances of all voice lines should be configurable in the top-config in the prop file. Or…brain wave…maybe on-the-fly too? Hmmm.

// healing and repairing //

Nothing will truly happen if both health and armor eventually reach 0, apart from the flatline sfx triggering.
Currently the user is always at liberty to recharge their suit by holding down AUX or PWR respectively. I’ve timed in-game it takes 10 seconds to recharge health from 0 - 100, same with armor.

// quick repair //

Unless you have an OLED screen built into your suit, there is no way to see your current armor value, or health. However in-game whenever you pick up suit batteries, they replenish your armor by 15 and then it reads out your new armor value. The suit always reads in increments of 5% whenever suit batteries are picked up.
image
I figured the best way to achieve this function is to x2 click POW to “Quick Repair” the armor by 15 AP. This would be an alternative to holding down POW to repair, but with the benefit of hearing the new armor value at the cost of not hearing the cool armor recharge sfx.

// armor readout //

However, if the user just wants to hear the current armor value (perhaps the user wants to hear the near death voice lines :skull:) then they would just x3 click POW for the current armor readout.

Just for clarity When not in Hazard Mode, x3 clicking POW plays the spoken battery level and it behaves as normal, reading the exact percentage of the physical battery the board is connected to but in the HEV suit voice.
When in Hazard Mode, x3 clicking POW reads the current armor value in increments of 5%, as in-game.

// additional voice lines //

There are some more percentage based voice lines like the morphine shot and additional follow-up voice lines for certain hazard types that can play, but at this point I figure it would be best to post the README from my Python replication which does a better job at summarising the functionality of the HEV suit’s behaviour.
Here’s a snippet of the voice lines that are configured by category:

#---- Additional Voiceline Chances:
# Hit Detected
major_detected_chance = 1.0  # 40% chance
minor_detected_chance = 1.0  # 40% chance

# Hazard Sound Follow Up 
health_dropping_chance = 1.0  # 50% chance

# Armor Compromised
compromised_chance = 1.0  # 50% chance

# Health Alerts
near_death_chance = 1.0  # 90% chance
health_critical_chance = 1.0  # 65% chance
seek_medic_chance = 1.0  # 50% chance

# Morphine Shot
morphine_chance = 1.0  # 44% chance

If you’ve read this much, then the README should be much easier to understand.

THE SETUP

So I mentioned PWR and AUX just a bit ago, myself and @Sabersense decided on a 2-button setup:

Summary


image

LIGHTS AND ACTION

There are 6 lights, with 3 pixel leds inside each. 2 lights on the chest, 2 on the shoulders and 2 on the back.

Summary


Rear view



Shoulder light

Just a concept idea to achieve the desired look with some diffusion

(these images have nothing to do with the vision , but just wanted to show a lot of work has gone into the lights)

I havn’t really thought deeply on styles at the moment, although animations have been factored in because of the 3-pixel setup in each light. The only thought I gave to styles was to play some sort of blue and green flowing animation when recharging health and/or armor.
There is a flashlight mechanic in the game. This is where the ON and OFF state comes in.
When ON, the front lights will be a bright beige of sorts.


When OFF, The 4 on the front just slowly breathing another colour, or something. The 2 back lights could be red like tail lights in ON and OFF state.

Anyway that’s more than enough for one post. Just a couple small notes.

  • Note, as per video 1, I havn’t replicated ALL behaviours, like certain hazard types, weapon acquisitions or falling. Just most behaviours.
  • Hazard Mode should accessible in either ON or OFF state. (think I already mentioned that, this has taken me a while to write up.)

As promised here is my clear-cut README on my Python program which replicates HEV suit behaviour from Half-Life 1:

=== HEV OS ===

  • This program closely replicates the audible response mechanics of the HEV Suit in Half-Life (1998) by Valve.
  • Inputs:
    • hit - User recieves physical damage ranging from 1 - 50 hit points (HP).
    • hazard - User recieves energy damage ranging from 1 - 40 HP.
    • heal - Heals the user’s health by 15 (HP).
    • repair - Repairs the suit’s armor by 15 armor points (AP).
    • armor - The suit’s voice reads out the current armor value.
    • quit - Exits the program.

======== Health & Armor ========

  • Health (health) and Armor (armor) have their own pools. Both range from 0 - 100.
  • armor negates how much health gets subtracted from a physical hit. The original formula is as follows: (hit * 0.80 / 2)
  • To explain this, armor will absorb 80% of the hit, divide it by 2 (so 40%) and deduct from the current armor value, up until where the user is at 0 armor, at which point 100% of the hit is commited to health instead. Regardless, whenever there is armor, health will take the remaining 20% of the hit. Even if the user has 100% armor, health is still affected when taking physical damage.
  • Upon a hazard, damage goes straight to armor and health is totally unaffected. If there is 0 armor, hazard damage is applied to health instead.

**** Health Alerts ****

  • When health is at certain thresholds, there is a chance for 3 different voice lines to play:
    • if health <= 50: play.seek_medic.wav - (50% chance)
    • elif health <= 30: play.health_critical.wav - (65% chance)
    • elif health <= 6 and > 1: play.near_death.wav - (90% chance)
  • By default, all 3 have a chance to play and can be configured in the top config.
  • When health drops to 0, a death sound will play.

**** Armor Alerts ****

  • A small audible alarm will play if either a physical or energy hit >= 30 is rolled.
  • If armor drops to 0, there is a 50% chance (default) that a voice line will play stating armor compromised.

======== Hit - Physical Damage ========

  • Upon a hit, the user will take damage ranging from 1 - 50.
  • There are currently 4 different major hit sounds and 4 different minor hit sounds. One of them will randomly play.
  • If hit >= 25, a major hit sound will play. Otherwise a minor hit sound will play.
  • There is a 40% chance (default) that a voice line will play, that follows up alerting the user that either a major or minor hit has been detected.

======== Morphine Shot ========

  • Additionally, there is a 44% chance (default) if the aforementioned major hit detected line played, the suit will play an extra voice line that administers a morphine shot.

======== Hazard - Energy Damage ========

  • Upon a hazard, armor will take damage ranging from 1 - 40. Health is unaffected, as long as there is armor.
  • Randomly, 1 of 6 hazard sounds will play. The hazards themselves do not currently have a sound effect, so, a voice line will play detecting the random hazard.
  • Current hazard types are [heat, shock, bio hazard, blood toxins, chemical, radiation]
  • If either of the 4 [bio hazard, blood toxins, chemical, radiation] voice lines play, there is a 50% chance (default) that an additional voice line will play, stating that vital signs are dropping.

======== Healing and Repairing ========

  • There are 2 commands to replenish health and armor. They are:
    • heal
    • repair
  • Both items heal/repair by 15, individually.
  • Both items play their respective sounds as found in the game.
  • Both also play a different sound if trying to heal/repair when that value is at max (100).
  • After the armor repair sound has played, the suit will dynamically play a voice line stating the new armor value. This is read out in increments of 5, which is rounded to the nearest multiple of 5, this behaviour is similar to how it worked in the original.

======== Armor Readout ========

  • Upon armor readouts, the suit will play a couple of varying boop noises and play a dynamic voice line that reads the exact current armor value.
  • If armor is 0, another sound will play to signal that there is no armor currently left and no voice line will play.

======== Resources ========

1 Like