Next, I made a duplicate of the alien slave, to make it possible to use the gray model and sounds created by blackjack in HQA. :D
I replaced all of the alien_slaves in HQ2 (there were at least 50 of them, plus monstermakers).
And finally, I made a copy of the grunt monster and called it "monster_victim_grunt". It looks the same (I already made it grayscale in HQ1), but his foot kick does 500 damage and he has a lot more health. I replaced him in his ambience map, and that is that.
I didn't make a full copy of the monster this time (like I have for the dragon and the gray_slave), but just made a new class CVictimGrunt based on CHGrunt, which reduces a lot of the duplicate code (obviously). I saw the same thing happening with monster_headcrab and monster_babycrab (the small one is just a subclass with less health, different model, etc.).
I looked at changing the explosion sprites, and decided I'll just hack it in with a condition that checks the beginning of the map name (halfquake, hq2, hq3). A quick search revealed that I could use gpGlobals->mapname for that. Since I will need the same check for all kinds of things (sounds, explosions, ...), I whipped up a function in util.cpp to check in which of the three Halfquake parts we're in right now.
It seems to work (at least HL doesn't crash), but I'll find out for certain next time.
To be continued. (<