fabiangreffrath / crispy-doom

Crispy Doom is a limit-removing enhanced-resolution Doom source port based on Chocolate Doom.
https://fabiangreffrath.github.io/crispy-homepage
GNU General Public License v2.0
800 stars 130 forks source link

Coloured blood, and HacX (and other mods) #37

Closed plumsinus closed 10 years ago

plumsinus commented 10 years ago

So one thing about coloured blood is that if you're playing a conversion that replaces all the enemies, the blood colour won't always match. This wasn't such a huge deal in original Doom, where everything bled red anyhow, and modders could choose to make things bleed puffs with Dehacked. But for certain mods it might look weird if humans bleed green or blue blood.

I don't know the best way to handle this; maybe check for replacement sprites and/or dehacked modifications to things, and change the blood back to red as needed?

HacX is a bit different, in that it's sort of a standalone game even though it's playable like any other wad in Chocolate Doom. I think most of the monsters either bleed red, or are mechanical and just get puffs through Dehacked, but there's at least one creature that has green blood. Is it worth making a special case for it?

Not sure about Chex Quest, about to try it out... edit: Of course, Chex Quest already has green "slime" instead of blood, so no problems there.

fabiangreffrath commented 10 years ago

Not sure about Hacx, I haven't played it very often or very far. I could adjust blood colors for certain enemies, of course. There are the following colors to choose from: CR_BRICK, CR_TAN, CR_GRAY, CR_GREEN, CR_BROWN, CR_GOLD, CR_RED, CR_BLUE, CR_BLUE2, CR_ORANGE, CR_YELLOW,

Regarding other mods, the situation is even more difficult. I wouldn't want to disable colored blood globally if (modifiedgame). I could check if certain sprites for certain monsters have been replaced, sure, but what would I base the decision on? One sprite has been changed, all have been changed? I could not even determine how different the modified monsters actually look from the original ones. Hm :-/

plumsinus commented 10 years ago

Not sure about Hacx, I haven't played it very often or very far.

Neither have I, I don't think it's a great game, but it's an interesting bit of history at least. I'll go through the enemy list later and see just what could use non-red blood.

I could check if certain sprites for certain monsters have been replaced, sure, but what would I base the decision on? One sprite has been changed, all have been changed?

Maybe first sprite of a thing's death frame? Or even just the first idle frame?

I could not even determine how different the modified monsters actually look from the original ones.

Of course not, but I think setting it to a default red is a good compromise, and also un-puffing the lost soul's blood (as long as a dehacked patch can also set it back to puffs).

fabiangreffrath commented 10 years ago

I'll go through the enemy list later and see just what could use non-red blood

Any news about this?

Furthermore, I am playing the thought to let Hacx end with a Doom II-style cast instead of that frustrating no-op MAP21. What do you think about it?

plumsinus commented 10 years ago

Thing 68 ("Thorn Thing") should bleed green blood.

Thing 58 is an invisible enemy (like the spectre which is normally thing 58), but is also a robot that bleeds puffs, so it probably shouldn't have invisible blood.

All other things are either red blood, or puffs as set by the HACX Dehacked patch.

Furthermore, I am playing the thought to let Hacx end with a Doom II-style cast instead of that frustrating no-op MAP21. What do you think about it?

I like this idea. In theory a HacX pwad could exist that expects you to play continuously from MAP20 to MAP21. Seems highly unlikely, but maybe check for the presence of an add-on MAP21 anyhow? Nevermind, I think if the game mode is exe_hacx it's safe enough to just end after MAP20, since HacX can be recognized as an iwad.

There's also no BOSSBACK pic in HacX, so you could either use TITLEPIC, or just tile a flat for the background. Music could still be D_HACX21 since that doesn't get used elsewhere.

plumsinus commented 10 years ago

I guess you need an alternate cast list too, since not all of the monsters are replaced in HacX? Already sounding like more trouble than its worth to me ;P But if it helps, here's the monster list, via http://pastebin.com/TTJzLUET

[edit: ZDoom has a custom MAPINFO definition that just displays the CREDIT picture after the MAP20 text, like what happens when you beat Knee-Deep in the Dead. This might also be an acceptable solution.]

HacX 1.1 also comes with an editing document. It lists the player name as "Danny Evanger".

3004
title = "Thug";
sprite = "POSSE2E8";

9
title = "Android";
sprite = "SPOSA2A8";

3001
title = "ICE";
sprite = "TROOA2A8";

65
title = "Monstruct";
sprite = "CPOSA2";

3002
title = "Buzzer";
sprite = "SARGA2A8";

58
title = "Stealth";
sprite = "SARGG6";

3006
title = "D-Man";
sprite = "SKULA8A2";

69
title = "Mechamaniac";
sprite = "BOS2B2D8";

3003
title = "Terminatrix";
sprite = "BOSSA2A8";

68
title = "Thorn Thing";
sprite = "BSPIA2A8";

23 // not used?
title = "Thorn Thing (stationary)";
sprite = "BSPIG1";

71
title = "Majong 7";
sprite = "PAINA2A8";

67
title = "Phage";
sprite = "FATTA2A8";

81 // not used?
title = "Phage (mummy)";
sprite = "BRS1A0";

80 // not used? 
title = "Phage (skeleton)";
sprite = "POB2A0";

84
title = "Roaming Mine";
sprite = "SSWVA2";

66
title = "Repliant";
sprite = "SKELA2D8";

64
title = "Security Turret";
sprite = "VILEA2D8";
fabiangreffrath commented 10 years ago

Already sounding like more trouble than its worth to me ;P

Yes, most probably! People playing Hacx nowadays might already know that the game "just ends". Maybe we could adapt the cast, maybe we cuold show the credits scren, maybe we shouldn't do any of these at all.

Regarding colored blood, the changes required for Hacx are all in. However, I have yet to find a way to tell if a specific sprite has been replaced. The reason is, if a PWAD is merged (which is now the only possible way to add them in Crispy and the only correct way when sprites are involved, anyway) the new sprites are not simply added to the lump name space, but they replace the original sprites. So, there are no duplicates, just the sprites as expected.

plumsinus commented 10 years ago

Maybe we could adapt the cast, maybe we cuold show the credits scren, maybe we shouldn't do any of these at all.

I think going to the credits screen isn't a bad idea, and probably not to difficult to do. Making a whole separate cast screen doesn't seem worth it though.

However, I have yet to find a way to tell if a specific sprite has been replaced.

Is it too messy to add checks in w_merge.c for specific sprite lumps? (HEADG0, BOSSI0, BOS2I0) You'd need one in each of the three merge methods I guess.

Alternately, a -redblood switch.

fabiangreffrath commented 10 years ago

I think going to the credits screen isn't a bad idea, and probably not to difficult to do.

Well, it depends. A text screen was never supposed to be shown in gamemode==commercial, so there will be quite some if (gamemode==commercial && gamemission!=pack_hacx) to be added. Heck, not even HACX.EXE had this!

Is it too messy to add checks in w_merge.c? You'd need one in each of the three merge methods I guess.

w_merge is shared between all four games, and I don't want to add "if doom" all around. Plus, as you pointed out, I'd have to duplicate code between at least three places. No, I'd rather check in the init sequence if the sprite lumps in question are from the IWAD or from a PWAD.

Unfortunately, there is no W_LumpIsFromPWAD() function in Choco, at least if have not yet found it. Not even the name of the source WAD file is saved in lumpinfo_t or wad_file_t as e.g. in PrBoom+ -- only its file size. Maybe I should just add it there?