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

Hi all, suit progression is going well! Under suit has been tailored and only a handful of adjustments before the painting process.

https://www.instagram.com/p/DN56mPgDJ9J/?utm_source=ig_web_button_share_sheet&igsh=MzRlODBiNWFlZA==

I’m at a point now where I’d be interested in learning some basics on styles.

On my own saber, I’d only just tweak existing styles to my liking. @Fett263 's Style Library has been more than enough for me to customize styles.

Lately, I’ve been mulling over different styles to grasp some of the basics, but for the suit, it doesn’t really need anything hyper flashy. So, I’m just looking for some inspirational ideas if any body has anything to share?

The suit’s circuitry is set up differently compared to a typical saber, it has 6 sub-blades with 3 pixels each. So in theory they should all be able to have their individual styles.

Also, with nothing short of humongous amounts of help from the Prof, the hev prop and config files are both merged into main, so if you see the config file, it’ll look completely barren in terms of styles.

But anyways, just looking for styles ideas for the 6 lights on the chest piece. There’s 4 on the front facing forward and 2 on the back.

3 Likes

This suit is dope! Do the styles you want correspond to the sound based system you described before? I’m a gamer but not a Half-Life player :slight_smile:

I like the idea of “modes” for the lights. Traversal, labor, combat. Fett263’s accent/cc builder should do most of the heavy lifting.

If each blade is 3 pixels:

all 6 doing outer, inner sequence (center LED, flash to 1st and 3rd)

inward/outward run to the suit center run on all leds (left side of body runs to right, and right side to left)

glitch on one/multiple blade for battle damage

lights flicker until you thump your suit and they stabilize (vintage glitch!)

Just some thoughts…

1 Like

Thank you! And those are some brilliant ideas tbf!

So, yeah. I think reactive sound or effects that sync with the sounds would make the suit appeal in a more fluid/reactive way.

Again these are good ideas, I suppose these could be made just as different presets. The suit in game doesn’t necessarily have any different modes though. But it would be a fun idea to come back to later…

I do like all the examples you listed, especially the light flickering until thumping the suit to stabilize them. A couple of them I already thought of like the center in/out and the wipe from left/right when healing/recharging armour.

As for the sounds, I’ve been customizing the font to work with the prop file. Here’s the link, if you’re interested in the sounds
https://drive.google.com/drive/folders/1NNqftAWmcH4wcqKezQZaVYfzM5Nq8jrc?usp=drive_link

Btw, you should absolutely play HALF-LIFE 1 & 2, yesterday!! :wink:

1 Like

Ah @LyleStyle I remember an effect you posted a while ago so I saved it for future reference :slight_smile: Need help programming an effect - #4 by LyleStyle

I think this would look cool when healing (lock.wav). Of course would be cool to pair a begin and end effect that sync with bglock.wav and endlock.wav.

I just need to figure out how to do this as it’s been a good couple of years since I’ve dabbled in styles.

1 Like

Things have moved forward a lot with regard to styles.

I’ve been trying out Gesture Based Special Abilities and I think they could add a lot to the suit, like physically taking clashes and having the lights go through phases until you reset them.

In Fett263’s early access library. But even his current public access library has a ton of ways to add dramatic flare.

This is a really good idea!
But yeah… I know I’m extremely behind on what’s happened between OS5 - OS7.

I watched Fett’s video you shared, however I’m not too sure if any of the extended capabilities beyond basic style functions will actually work, because the suit will be running it’s own prop file, hev.h.

1 Like

Okay, so I’ve bundled a super simple style using Fett’s Style Library, here.

I’m just wondering how to make this the lockup instead? I’ve not really been good at creating styles, I understand most effects are layered but I’ve never caught onto what arguments/keywords are supposed to be paired with other Styles themselves.

If I can get my head around this I should be able to customize LB in the same way.

Using that layering idea, I looked for you lockup layers, and removed them. Then I pasted in the cyclon to green lockup you wanted, and used the most basic lockup listed (I think) at the beginning of the layer: LockupL.

It seems to work in the editor whn I highlight the right column, but goes traight to the green without the cyclon work up sometimes. Not sure if I got it right or if I missed something about the transitions.

This is it :slight_smile:

StylePtr</* copyright Fett263 Simple (Primary Blade) OS7 Style
https://www.fett263.com/fett263-proffieOS7-style-library.html#Simple
OS7.15 v3.28p
Single Style
Style Option
Base Color: BaseColorArg (0)

--Effects Included--
Ignition Effect: Instant [Color: IgnitionColorArg]
PowerUp Effect: Power Flash [Color: IgnitionColorArg]
Retraction Effect: Instant [Color: RetractionColorArg]
Lockup Effect:
0: mainLockMulti0Shape - Begin: 0 - Style: AudioFlicker - End: 0
[Color: LockupColorArg]
Lightning Block Effect:
0: mainLBMulti0Shape - Begin: 0 - Style: AudioFlicker - End: 0
[Color: LBColorArg]
Drag Effect: NoneMelt Effect: NoneClash Effect: Flash on Clash (Full Blade) [Color: ClashColorArg]
 */
Layers<
  RgbArg<BASE_COLOR_ARG,Moccasin>,
  TransitionEffectL<TrConcat<TrJoin<TrDelayX<IgnitionTime<>>,TrInstant>,RgbArg<IGNITION_COLOR_ARG,White>,TrFade<1000>>,EFFECT_IGNITION>,
  TransitionEffectL<TrConcat<TrJoin<TrDelay<30>,TrInstant>,Mix<Int<4096>,RgbArg<CLASH_COLOR_ARG,Black>,RgbArg<CLASH_COLOR_ARG,Red>>,TrFade<300>>,EFFECT_CLASH>,
  LockupL<Cylon<Blue,20,50,BrownNoiseFlicker<Green,Yellow,50>,100,500,4000>>,
  InOutTrL<TrInstant,TrInstant>>>()
1 Like

Because cylon transitions to the color when ON from the color when OFF over the time specified, which you have at 4000.
You could just stick a Sin function in place of that to be always constant speed

1 Like

Thanks for this Lyle! So, I was trying to achieve an effect but was using LockupTrL instead of LockupL.

Good to know!

By “constant speed”, do you mean that the effect will always have a set speed? Could we still customize the ramp up effect?

I tried my hand at inserting the Sin function but can’t seem to figure out where it’s meant to be placed or just how the syntax should look with the cyclon effect. Would it be possible to see an example?

Sure. Sorry for not reading this all in depth as time has been limited.
Could you summarize in one post what you want it to do/look like?

Thank you! And no problem, it’s a big read…

I’ll title the functions and state the corresponding Proffie effects to use.

2 things to keep in mind are:

  • The layout consists of 6 sub-blades. 4 front lights with 2 of them on the chest + 2 on the shoulders. And 2 back lights.
  • All 6 lights have 3 LEDs each. Should allow for small animations.

Also please do feel free to make any creative liberties. I’m completely open to ideas.

FLASHLIGHT - (ON/OFF)

  • Already done, added tiny flare when turning on:
    Layers<RgbArg<BASE_COLOR_ARG,Moccasin>, TransitionEffectL<TrConcat<TrJoin<TrDelayX<IgnitionTime<>>,TrInstant>,RgbArg<IGNITION_COLOR_ARG,White>,TrFade<1000>>,EFFECT_IGNITION>, InOutTrL<TrInstant,TrInstant>>
  • The 2 back lights should be red when ON - like tail lights.

HEALING Health - (Lockup)

  • Something akin to this, quite a fan of the ramp-up:
    Cylon<Blue,20,50,BrownNoiseFlicker<Green,Yellow,50>,100,500,4000>
  • Unsure what bgnlock & endlock should look like… but any effect that uses WavLen would look better than nothing.

RECHARGING Armor - (Lightning Block)

  • Another ramp-up effect but in orange and light blue.
    Maybe have it flowing inward, toward the center of the chest piece.

HITS - (Clash)

  • Just make the lights do a randomized glitch/flicker effect in red.

Saving idea for later, would be cool to have a chance of continuing the effect until thumping the suit again to stabilize. Think this would need support from the prop file to work better.

HAZARDS - (alt001 - alt006)

  • Prof made it so that Hazards randomly occur, which will trigger one of the alt directories. During Hazards, periodic damage chips away at Armor then Health. Hazards remain until cleared with AUX:
  • alt001 = Biohazard
  • alt002 = Radiation
  • alt003 = Blood Toxins
  • alt004 = Chemical
  • alt005 = Heat
  • alt006 = Shock
  • It would be awesome to have all 6 lights play a corresponding effect for each Hazard.
    So Biohazard could have a “randomly flowing” goopy green effect, Heat with a “firey” red effect, Radiation with a “noisy” green effect, Shock to have an electric blue “spark” effect.

Saving idea for later, have some Hazard effects sync to stun**.wav, this would work well for certain Hazards like Shock which would simulate the suit periodically getting electric shocked, until the Hazard is cleared.

Brian, the sound font is here meant for use with the hev prop, if you fancy giving it a go. Happy Friday!