When an HL1 object is “on fire”, for example, it’s emitting “infrared-radiation particles” as hitscan shots off of a point-source at its center. If these hit something, the physics sim checks the “on fire” object’s “hotness” attribute, and its distance from the target it hit, and from these computes a “heat impulse” that should be given to the target, which may or may not be enough to set the target “on fire.” Different things burn with more or less “hotness”, and for more or less time before burning out, depending on the material they’re made of. Explosive barrels don’t have any special code—they’re just “on fire” for a very hot, very short time (but they’re also “concussive”, which is a separate instantiation of this same logic.) The Crossbow’s alternate fire just slides a physical object that’s intensely “on fire” through the scene at high speed. Etc.
This system continues into HL2 as well. Pheropod/bugbait objects are just a copy of this system, where “on fire” is instead “acts as ally”, and antlions can be temporarily or permanently caught “acts as ally” by getting hit by a strong enough dose of pheropod radiative signalling.
This system is basically why HL1 and HL2 play the way they do: rather than only being able to kill things with weapon-objects programmed to emit “kill” signals toward enemies, you can kill things with pretty much any object, in a variety of ways, as enemies are physical-sim objects that can die for physical-sim reasons. And it’s very easy to make a useful new object in these engines, as you can just model something, give it some interesting physical attributes, and plop it into a level. The sim will then take care of making it useful.