header general

[UPDATE] Hierophant

  • Blue Shadow
  • Blue Shadow's Avatar Topic Author
  • Administrator
  • Administrator
More
8 years 2 months ago - 8 years 1 week ago #1 by Blue Shadow
[UPDATE] Hierophant was created by Blue Shadow
Updated submission: Hierophant

Changes:
  • Changed the way the curses are inflicted. The new approach no longer relies on the presence of custom pain states. This allowed for the removal of the KEYCONF lump.
  • The curse projectile now inflicts a curse upon the actor it hits directly.
  • DECORATE code enhancements and cleanup.
  • Optimized the sprites.
  • Updated the INFO and CREDITS lumps.

Download:

https://www.dropbox.com/s/fdz41r528ct1raa/Hierophant.zip?dl=1



The main reason behind the update was to get rid of the KEYCONF lump, because if you define your own player class, and you load this WAD on top, it'll override your player class with the one it comes with, which isn't really good at all.
Last edit: 8 years 1 week ago by Blue Shadow. Reason: Changed status from "on hold" to "submission"

Please Log in or Create an account to join the conversation.

  • MagicWazard
  • MagicWazard's Avatar
  • Moderator
  • Moderator
More
8 years 2 months ago - 8 years 2 months ago #2 by MagicWazard
Replied by MagicWazard on topic [UPDATE] Hierophant
I notice that the curse attack no longer does damage, as it used to. Was this intentional? I never particularly cared for the explosion damage factor (mostly the fact that splash damage could trigger the curse), or the fact that an errant curse shot would deal much higher damage to a monster than a player, but I see no reason why damage should be removed altogether.

Also, the text strings which tell you which curse you got (e.g. Inventory.PickupMessage "Your weapons weaken.") are no longer present (not that they ever worked properly anyways). Why were these removed instead of, say, fixed to display correctly? There needs to be some form of on-screen indication as to what curse the player has received, or else it won't be obvious to them what the effect is (speed notwithstanding). Personally, I did this by using, for example, A_Log("Your defenses weaken.") in the appropriate player's pain state. Obviously, the custom pain states aren't needed now, but perhaps it can be done in the actual curse item definition.

Also, I don't see the need to remove all the existing damagetypes from the "Weaken" and "AmpDMG" curses. Some of the oddball ones, yes, (like "Bone" or "Blood"), but not basic ones like Fire, Lightning, or Poison. Granted, "Normal" is the only one likely to be experienced heavily in stock Doom, but anybody who's modding Doom is probably going to run into a few exotic damagetypes. I would prefer to have those remain present, as well as the notation which indicates that custom damage types can be added to the list.

I'm also puzzled by the usage of "Actor Hiero_MeleeAttack : CustomInventory" and "Actor Hiero_Missile1Attack : CustomInventory" instead of simply performing the actions in the monster's states. As I see it, you're basically using 4 or 5 lines of code--and new actor definitions--to do what was performed in 1 or 2 lines of code, with no obvious advantage. The downside of "Actor Hiero_Missile1Attack" in particular is that his dual-projectile aiming behavior has changed, and no longer fires in 2 distinct patterns as it used to. The somewhat predictable attack pattern, like that of the Mancubus, was to help offset the sheer damage of the projectiles.
Last edit: 8 years 2 months ago by MagicWazard.

Please Log in or Create an account to join the conversation.

  • Blue Shadow
  • Blue Shadow's Avatar Topic Author
  • Administrator
  • Administrator
More
8 years 2 months ago #3 by Blue Shadow
Replied by Blue Shadow on topic [UPDATE] Hierophant

MagicWazard wrote: I notice that the curse attack no longer does damage, as it used to. Was this intentional?

I found it weird that, for a status-effect-inflicting attack, it also did massive damage (to monsters, at least). I concluded that it was a limitation in the original code, like they had to do it this way to trigger the effect.

But now that I think about it, maybe (that's a big maybe) it was meant to kill low level or low health monsters instead of cursing them...

Also, the text strings which tell you which curse you got (e.g. Inventory.PickupMessage "Your weapons weaken.") are no longer present (not that they ever worked properly anyways). Why were these removed instead of, say, fixed to display correctly?

As you said it, they never worked. So I didn't bother. But I agree that there should be a from of tell which effect the player was inflicted with.

Also, I don't see the need to remove all the existing damagetypes from the "Weaken" and "AmpDMG" curses.

They were removed because they were redundant. All of the explicitly listed damage types have the same damage factor as Normal. Normal is special; if you don't explicitly list a damage type, the damage factor used for said damage type is Normal's. For instance, ice damage type isn't listed, but if you get hit with an ice attack while under AmpDMG curse, you'd still receive double damage.

If those damage types had their own factors, different from Normal, then yes, they should stay, but not in this case.

I'm also puzzled by the usage of "Actor Hiero_MeleeAttack : CustomInventory" and "Actor Hiero_Missile1Attack : CustomInventory" instead of simply performing the actions in the monster's states. As I see it, you're basically using 4 or 5 lines of code--and new actor definitions--to do what was performed in 1 or 2 lines of code, with no obvious advantage.

This is to reduce code duplication and copying and pasting. If you wanted to modify the melee attack "properties", for example, you'd only need to do it in one place rather than two (in this monster's case) or more.

The downside of "Actor Hiero_Missile1Attack" in particular is that his dual-projectile aiming behavior has changed, and no longer fires in 2 distinct patterns as it used to.

No, it hasn't. In the original version of the monster, the angle at which the projectiles were fired was random, too. I didn't change that.

If the presence of .0 for the random values of the angle parameter is what gave you the impression that it has changed, then no, it shouldn't have any effect, as Random() only returns integers, not floats (the .0 was added by mistake).

Please Log in or Create an account to join the conversation.

  • MagicWazard
  • MagicWazard's Avatar
  • Moderator
  • Moderator
More
8 years 2 months ago - 8 years 2 months ago #4 by MagicWazard
Replied by MagicWazard on topic [UPDATE] Hierophant

Blue Shadow wrote: I found it weird that, for a status-effect-inflicting attack, it also did massive damage (to monsters, at least). I concluded that it was a limitation in the original code, like they had to do it this way to trigger the effect.

But now that I think about it, maybe (that's a big maybe) it was meant to kill low level or low health monsters instead of cursing them...

More likely it was the former; a limitation workaround. I'd say get rid of the explosion damage, so splash damage can't trigger the curse, and keep it a straight impact value (something low, like the roughly 20 points of damage it did to an unarmored player).

Blue Shadow wrote: As you said it, they never worked. So I didn't bother. But I agree that there should be a from of tell which effect the player was inflicted with.


Honestly, I think an update to fix the messages was a long time coming, but of course it's easy to say that now that the situation has arised. ;) (And it's not like I ever took the initiative personally!) Like I said, I used "A_Log" to print a message, since the pickup messages didn't work. Maybe you could do likewise, unless the pickup messages WOULD work under the new setup. I also added Inventory.Icon "M_SKULL1" to each of the Powers so there'd be an icon present while cursed, but this would probably be redundant due to the screen glow.

Blue Shadow wrote: They were removed because they were redundant. All of the explicitly listed damage types have the same damage factor as Normal. Normal is special; if you don't explicitly list a damage type, the damage factor used for said damage type is Normal's. For instance, ice damage type isn't listed, but if you get hit with an ice attack while under AmpDMG curse, you'd still receive double damage.

If those damage types had their own factors, different from Normal, then yes, they should stay, but not in this case.


I was not aware that Normal had the property of also setting undefined damage types. Probably Eriance (or whoever did the original coding) didn't know that either; or, it's changed since then. If the new behavior is correct (and I trust you on that), then totally fair.

Blue Shadow wrote: This is to reduce code duplication and copying and pasting. If you wanted to modify the melee attack "properties", for example, you'd only need to do it in one place rather than two (in this monster's case) or more.


This I gotta disagree with you on. I think it's taking "duplication" to a slightly unnecessary extreme. Modifying the attack properties in at most two places doesn't seem like such a task that it requires a stand-in actor as a middleman. Yes, it *works*, but I think it's overkill.

Blue Shadow wrote: No, it hasn't. In the original version of the monster, the angle at which the projectiles were fired was random, too. I didn't change that.

If the presence of .0 for the random values of the angle parameter is what gave you the impression that it has changed, then no, it shouldn't have any effect, as Random() only returns integers, not floats (the .0 was added by mistake).


I gotta apologize for this--you're absolutely right, and I don't know how I managed to miss the original behavior this entire time. I say with no exaggeration at all that every time I used the Hierophant, he managed to produce a Mancubus-like attack pattern using the same random values. I never even looked at the script. It wasn't until I loaded your version and got something that deviated that I thought something was up. And no, I wasn't looking at any .0 in the Random values; I didn't even notice. (Did you want to keep it as Random() with integers, or make it FRandom() with floats? The latter value will produce a lot more variety in trajectories without messing with the minimal/maximal angles.)


Warning: Spoiler!
Last edit: 8 years 2 months ago by MagicWazard.

Please Log in or Create an account to join the conversation.

  • Blue Shadow
  • Blue Shadow's Avatar Topic Author
  • Administrator
  • Administrator
More
8 years 2 months ago #5 by Blue Shadow
Replied by Blue Shadow on topic [UPDATE] Hierophant

MagicWazard wrote: I'd say get rid of the explosion damage, so splash damage can't trigger the curse, and keep it a straight impact value (something low, like the roughly 20 points of damage it did to an unarmored player).

I decided to restore the original behavior of doing splash damage, considering we are just speculating and don't know exactly what the actual reasoning behind it.

I used "A_Log" to print a message, since the pickup messages didn't work. Maybe you could do likewise, unless the pickup messages WOULD work under the new setup.

Unfortunately, neither A_Log nor A_Print would be a good solution to print the message; messages printed with A_Log are displayed to all players (it doesn't really matter by which actor the function was called), and in the case of A_Print, if a monster targeting you gets cursed, the curse message is printed on your screen, still.

Regarding the pickup message, you have to actually pick the item up to trigger the pickup message as opposed to being given the item.

This I gotta disagree with you on. I think it's taking "duplication" to a slightly unnecessary extreme. Modifying the attack properties in at most two places doesn't seem like such a task that it requires a stand-in actor as a middleman. Yes, it *works*, but I think it's overkill.

The melee and custom missile functions are now called directly, like how they used to be originally. Although, this doesn't mean that I agree with you on that. The advantage is there, regardless of how small it is.

Did you want to keep it as Random() with integers, or make it FRandom() with floats?

It was one of those moments when you do something without thinking too much, and then look at what you've just done and say: "What am I doing?! This shouldn't be like this and that...". At the back of my mind I knew what I was modifying was the angle parameter, which is a float value. Giving it .0, gives you a clue that this parameter is a float value, thus fractions can be used if you so desire.

Oh, and isn't it funny how all this other ancillary stuff came up as a side effect of simply wanting to get rid of KEYCONF?

Heh, I could've gone the easy route and just removed the KEYCONF altogether and put a note for modders, and not bother with any of the work that I've done. But where is the fun in that? ;)


Anyways, a new version is up. It mainly fixes the issue of invulnerable actors and actors which belong to the same species as the monster itself being able to be cursed.

Please Log in or Create an account to join the conversation.

  • MagicWazard
  • MagicWazard's Avatar
  • Moderator
  • Moderator
More
8 years 2 months ago #6 by MagicWazard
Replied by MagicWazard on topic [UPDATE] Hierophant

Blue Shadow wrote: I decided to restore the original behavior of doing splash damage, considering we are just speculating and don't know exactly what the actual reasoning behind it.

Aw, man...if we were going to change anything, getting rid of the splash would have been at the top of my list. :P I hate dodging the projectile proper and still getting cursed. Oh, and I see you moved the splash damage to the actual acquisition of the powerup, so it only looks like the splash damage occurs if the projectile hits an actor. What's the reasoning for that, if I may ask? To avoid the situation I just described where you dodge the projectile itself, but get hit with the splash when it impacts a surface or solid?

Blue Shadow wrote: Unfortunately, neither A_Log nor A_Print would be a good solution to print the message; messages printed with A_Log are displayed to all players (it doesn't really matter by which actor the function was called), and in the case of A_Print, if a monster targeting you gets cursed, the curse message is printed on your screen, still.

Regarding the pickup message, you have to actually pick the item up to trigger the pickup message as opposed to being given the item.

Oh, yeah, I guess now's a good time to point out that my mod wasn't designed for multiplayer. Also, monsters couldn't get cursed under the old setup, so that wasn't an issue. Can you think of any tricks to get this working? I do see you're using ACS to check monster curse eligibility; can you slip a script that handles message display for a cursed player in there somewhere? If we can't get a message displayed, then maybe at least we should display a custom icon in the upper-right. What do you think? I can come up with a couple if you want to do that.

Blue Shadow wrote: It was one of those moments when you do something without thinking too much, and then look at what you've just done and say: "What am I doing?! This shouldn't be like this and that...". At the back of my mind I knew what I was modifying was the angle parameter, which is a float value. Giving it .0, gives you a clue that this parameter is a float value, thus fractions can be used if you so desire.

So if angle accepts a float, and you fed it float values, you want to go ahead and just use FRandom() instead? We almost might as well at this point (uh, pun not intended?). I do see you changed them back to integers for this revision, but we can always change them back if you want.

Blue Shadow wrote: Anyways, a new version is up. It mainly fixes the issue of invulnerable actors and actors which belong to the same species as the monster itself being able to be cursed.

That's a good point--does the curse actually work on monsters now? Like, with the same effects as on the player?

Please Log in or Create an account to join the conversation.

  • Blue Shadow
  • Blue Shadow's Avatar Topic Author
  • Administrator
  • Administrator
More
8 years 2 months ago #7 by Blue Shadow
Replied by Blue Shadow on topic [UPDATE] Hierophant
I've PM'd Eriance about the curse attack to, hopefully, get an idea on how it's meant to work. So for now, I'm putting this on hold until I hear from him.

MagicWazard wrote: Oh, and I see you moved the splash damage to the actual acquisition of the powerup, so it only looks like the splash damage occurs if the projectile hits an actor. What's the reasoning for that, if I may ask? To avoid the situation I just described where you dodge the projectile itself, but get hit with the splash when it impacts a surface or solid?

A_Explode is still called by the curse projectile, just like the A_RadiusGive calls that follow. No special behavior, here.

I do see you're using ACS to check monster curse eligibility; can you slip a script that handles message display for a cursed player in there somewhere?

Apparently, Print and HudMessage act differently to A_Print, which means the message will be displayed for the player only if he or she were the activators of the script, which what we want.

So if angle accepts a float, and you fed it float values, you want to go ahead and just use FRandom() instead? We almost might as well at this point (uh, pun not intended?). I do see you changed them back to integers for this revision, but we can always change them back if you want.

Nah, switching to FRandom would change the original behavior, so I'll keep it as is.

does the curse actually work on monsters now? Like, with the same effects as on the player?

Yes, but only "Weaken" and "AmpDMG". "Slow" (PowerSpeed) only works on players as far as I was able to observe.

Please Log in or Create an account to join the conversation.

  • MagicWazard
  • MagicWazard's Avatar
  • Moderator
  • Moderator
More
8 years 2 months ago #8 by MagicWazard
Replied by MagicWazard on topic [UPDATE] Hierophant

Blue Shadow wrote: I've PM'd Eriance about the curse attack to, hopefully, get an idea on how it's meant to work. So for now, I'm putting this on hold until I hear from him.

Sounds fair. I do remember him giving us carte blanche to change or rebalance behaviors as we saw fit (back when we were doing the Hades Sphere fix and associated updates), but getting a good idea of the original intent would help us going forward.

Blue Shadow wrote: A_Explode is still called by the curse projectile, just like the A_RadiusGive calls that follow. No special behavior, here.

Actually, it's called by "Hiero_GiveCurse", which is an item given by the "CurseBall" in its death state. I presume the "Hiero_GiveCurse" item is being given to the "CurseBall", correct? So the "CurseBall" is giving itself an exploding item? If so, then it's just a matter of semantics, and you'd technically be correct. I'm not trying to be pedantic; I just didn't understand the logic trail the first time I looked at it. :P

Blue Shadow wrote: Nah, switching to FRandom would change the original behavior, so I'll keep it as is.

Well, like I said above, it sounds like we're at liberty to change the behavior if we decide upon it, though you may want to reaffirm with him if that's the case. If you're not really interested in changing it, I'm not going to press the issue, since I don't feel too strongly about it either way (and I can easily change it on my end later when I go to use it if that's what I want). It just seemed like a good opportunity to take advantage of a typo. :)

Please Log in or Create an account to join the conversation.

  • Blue Shadow
  • Blue Shadow's Avatar Topic Author
  • Administrator
  • Administrator
More
8 years 2 months ago #9 by Blue Shadow
Replied by Blue Shadow on topic [UPDATE] Hierophant
I've got a reply:

I wrote: The projectile inflicts the curse on all monsters/players in the area of effect. Was this intentional? Or was the original idea that only the actor the projectile directly impacts gets inflicted with the curse? Also, the projectile does splash damage (which I know is used to trigger the pain states) was this also intentional?

Amuscaria wrote: It was intentional. The original idea was that every mini-boss monster for DE, such as the Hierophant, Archon, Overseer had 2 normal projectile attacks, and 1 AOE attack. You are free to change the monster in any way you see fit, however.

Please Log in or Create an account to join the conversation.

  • MagicWazard
  • MagicWazard's Avatar
  • Moderator
  • Moderator
More
8 years 2 months ago #10 by MagicWazard
Replied by MagicWazard on topic [UPDATE] Hierophant
Ok. Well, with that in mind, I'd suggest removing the splash damage from the curse projectile (since, as I mentioned before, it's annoying as hell when you manage to dodge a homing projectile and still take the damage/curse effect due to the splash), maybe changing Random to FRandom on the big projectiles, and working out a way to display a curse status message to the player. If you want to do the icon route as well, I could produce some for you.

Please Log in or Create an account to join the conversation.