header general

Holy Snow WIP

  • doomedarchviledemon
  • doomedarchviledemon's Avatar Topic Author
  • Wicked
  • Wicked
More
4 years 9 months ago - 4 years 9 months ago #1 by doomedarchviledemon
Holy Snow WIP was created by doomedarchviledemon
I have been working on a new additional ice-based weapon meant for the mage in Hexen. So far things are working out pretty well and I think it's near finishing stages, but there is one issue I am running into at the moment with the altfire. As of right now the altfire doesn't use A_FireCustomMissile like the primary fire does, but instead uses A_SpawnItemEx since the altfire doesn't actually fire a projectile meant to directly harm monsters. The altfire is simply to trigger the spawner that then creates the actual damaging projectiles. The issue is that since it uses A_SpawnItemEx there isn't a AmmoUse bit that will automatically use up the player's mana. To get around this I used A_TakeInventory to take the mana that way.

The issue is I don't know how to make this weapon check if the player has enough mana to perform the altfire and it just uses it regardless. I'd like to have it work similarly to how Blue Shadow implemented the check for the Demonic Leech but when I tried to implement it it didn't work out. Or is there an easier way to work around how I have everything set up already?

Any other general feedback is also always welcome.

Holy Snow Magic
Last edit: 4 years 9 months ago by doomedarchviledemon.

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

  • Blue Shadow
  • Blue Shadow's Avatar
  • Administrator
  • Administrator
More
4 years 9 months ago #2 by Blue Shadow
Replied by Blue Shadow on topic Holy Snow WIP
I suppose you can still use A_FireCustomMissile to fire the dummy/spawner projectile. When it comes to velocity, call A_ChangeVelocity in the projectile's code upon spawning (only once):

Code:
Spawn: SNOW A 0 NoDelay A_ChangeVelocity(0, 0, 10, CVF_REPLACE) SNOW A 1 A_CheckCeiling("Death") Wait

Note: since there's no need to keep calling A_ChangeVelocity repeatedly every tic, "Loop" got changed to "Wait" there. Similar to Loop, Wait is a looping command, but only for the last state (in this case the state where the ceiling check is done) as opposed to the whole state sequence.

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

  • doomedarchviledemon
  • doomedarchviledemon's Avatar Topic Author
  • Wicked
  • Wicked
More
4 years 9 months ago #3 by doomedarchviledemon
Replied by doomedarchviledemon on topic Holy Snow WIP
That worked out perfectly! Thank you very much for the help. This change is now implemented and is working well. I believe that is all of the code that I needed to adjust as far as I can see in regards to problematic issues. However, I'd like to ask if there are any other changes to make this weapon better and more ready for submission. Balancing issues, use of sounds, or anything like that.

I tried to balance its power as best I could in general and gave the altfire a cool down period to help lessen any potential lag with the large amount of projectiles. So far I did not encounter any major lag spikes with this cool down being implemented when testing on various vanilla maps of Hexen. I was also playing with the idea of forcing the player to stop moving while performing the altfire since I figured a conjuring spell would take concentration to execute but not entire sure on that mechanic?

The download link has been updated.

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

  • Blue Shadow
  • Blue Shadow's Avatar
  • Administrator
  • Administrator
More
4 years 9 months ago #4 by Blue Shadow
Replied by Blue Shadow on topic Holy Snow WIP
I like how the weapon, as a whole, is presented, so I don't have any complaints in that regard.

Some feedback:
  • The snow projectiles of the primary attack travel really slowly, so it's a little difficult to hit a monster with it, especially if it decided to zig-zag its way to you. You have to be very close to the monster to compensate for the slow speed of the projectiles, which puts you at risk.
  • The primary attack could do with a firing sound. Unfortunately, I don't know what to recommend.
  • For best responsivness and smoother bobbing, A_WeaponReady should be called every tic (you're calling it every two tics).
  • For the alternative attack timer item, you don't need to inherit from an existing powerup. Just use the Powerup class directly:
    Code:
    actor PowerSnowWaitGiver : Powerup {}
  • Increase the radius and height of the SnowParticle and SnowStart actors to at least 2. A radius and height of 1 is too small, and could cause collision detection problems.
  • The Projectile actor property sets certain actor flags on the actor so that it behaves like a missile. The MISSILE, NOBLOCKMAP and NOGRAVITY flags are three of the flags set by the property. This means you don't explicitly need to set those flags yourself if the Projectile property is already there.

Concerning lag: the weapon does create a lot of "objects", which increase processing time. With one alt attack active, the number of objects on the map increase by 800-900 objects. For me though, the majority of the lag comes from rendering; the "clouds" have a significant impact on performance when a lot of them being rendered at once on-screen. Their translucency also makes matters worse. Of course, this, in part, due to my aging computer, which doesn't really have the best of graphics cards to begin with.

doomedarchviledemon wrote: I was also playing with the idea of forcing the player to stop moving while performing the altfire since I figured a conjuring spell would take concentration to execute but not entire sure on that mechanic?

It does make sense to add such a mechanic. However, it's risky, since the player will be a sitting duck, and won't be able to move until the spell is fully cast. So I'm not sure either.

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

  • doomedarchviledemon
  • doomedarchviledemon's Avatar Topic Author
  • Wicked
  • Wicked
More
4 years 9 months ago #5 by doomedarchviledemon
Replied by doomedarchviledemon on topic Holy Snow WIP

The snow projectiles of the primary attack travel really slowly, so it's a little difficult to hit a monster with it, especially if it decided to zig-zag its way to you. You have to be very close to the monster to compensate for the slow speed of the projectiles, which puts you at risk.


I did this to try and keep the light-weighted nature of snow in tact since they are not solid masses of compressed ice. Additionally, I figured making them slower would help balance out the power itself since there is a large amount of projectiles that, while dealing minimal damage, can still be quite powerful if enough hit the target in quick succession. However, I do agree and was thinking that I probably should speed it up. I went ahead and changed the speed from 3 to 5 so see if this is any better?

The large spread is also to help balance the primary, fyi. This can be adjusted as well if it seems it needs to be.

The primary attack could do with a firing sound. Unfortunately, I don't know what to recommend.


Yep, I have been trying to think of what sound to use for this as well actually. But yeah... perhaps some light jingles or like... sparkly sounding? Best I can think of that would fit with snow.

For best responsivness and smoother bobbing, A_WeaponReady should be called every tic (you're calling it every two tics).


Updated

For the alternative attack timer item, you don't need to inherit from an existing powerup. Just use the Powerup class directly


Oh, nice to know. I thought it needed to have some kind of powerup type.

Increase the radius and height of the SnowParticle and SnowStart actors to at least 2.


Updated

The Projectile actor property sets certain actor flags on the actor so that it behaves like a missile. The MISSILE, NOBLOCKMAP and NOGRAVITY flags are three of the flags set by the property. This means you don't explicitly need to set those flags yourself if the Projectile property is already there.


Updated

For me though, the majority of the lag comes from rendering; the "clouds" have a significant impact on performance when a lot of them being rendered at once on-screen.


I went ahead and lowered the amount of clouds spawned. Instead of spawning 20 per cloud-cycle I reduced it to 10. With this lowered amount I think it's still large enough to be convincing snow fall conditions in a large enough area. Any significant improvement with this reduction, or is this still too much?

It does make sense to add such a mechanic. However, it's risky, since the player will be a sitting duck, and won't be able to move until the spell is fully cast. So I'm not sure either.


Yeah, that's what I was torn on as well. However, another way to look at it is another way to help balance this weapon's power if it feels too powerful as is? Either way, I went ahead and added this in for now to see how it plays out. Let me know if this feels worth keeping or leaving out.

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

  • Blue Shadow
  • Blue Shadow's Avatar
  • Administrator
  • Administrator
More
4 years 9 months ago #6 by Blue Shadow
Replied by Blue Shadow on topic Holy Snow WIP
The increase in projectile speed does make it much better now, yes.

As for the lag, not so much, but that's okay. By the way, it doesn't make it a slideshow, by any means, but the lag is still noticeable. Another contributing factor to the lag, which I neglected to test last time, is dynamic lights. These have much bigger impact on performance than the clouds. Whether to do something about them or not is up to you. I'm not going to ask you to remove them.

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