Physical Damage despite Immunities

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Magnate
    Angband Devteam member
    • May 2007
    • 5110

    #16
    Originally posted by fizzix
    Is it worth it defining different multipliers for the different attack types to calculate physical damage. Something like.
    • Hit: 1
      Touch: 0
      Bite: 0.8
      Claw: 0.8

    etc.

    Or is it sufficient to make touch 0 and everything else 1, and go ahead with some slight rebalancing if needed?
    That depends whether you want a quick fix or a proper rewrite of monster melee. The latter has been on my mind for a long time (make_attack_normal is still the longest non-borg function in the code by several hundred lines), but it's never reached the top of the list.

    I would create a list-mon-melee.h along the lines of list-mon-spells.h so that we define for each attack type the percentage of each element in the attack (no reason you can't have more than two e.g. plasma could be 20% physical, 40% fire 40% lightning), along with the side effects/procs flowing from each attack type, message text, percentage preference etc. Then you can simplify the code right down to iterate over the available attacks.

    But for 3.4 I'd just implement bron's fix for hit-to-burn and the other currently purely elemental attack types, ignoring the touch attacks of jellies (and whoever).
    "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

    Comment

    • bron
      Knight
      • May 2008
      • 515

      #17
      Dang. There's a typo in the proposed fix. In the do_elemental_melee_attack routine I have:
      Code:
          if (elemental_dam > 0) inven_damage(p, GF_ACID, MIN(elemental_dam * 5, 300));
      when clearly this should be
      Code:
          if (elemental_dam > 0) inven_damage(p, which_element, MIN(elemental_dam * 5, 300));

      Comment

      • debo
        Veteran
        • Oct 2011
        • 2402

        #18
        Originally posted by bron
        Dang. There's a typo in the proposed fix. In the do_elemental_melee_attack routine I have:
        Code:
            if (elemental_dam > 0) inven_damage(p, GF_ACID, MIN(elemental_dam * 5, 300));
        when clearly this should be
        Code:
            if (elemental_dam > 0) inven_damage(p, which_element, MIN(elemental_dam * 5, 300));
        "The fire hound breathes fire!"
        "Your Iron Helm is damaged!"

        Glaurung, Father of the Dragons says, 'You cannot avoid the ballyhack.'

        Comment

        • PowerWyrm
          Prophet
          • Apr 2008
          • 2986

          #19
          If he breathes for long enough, even an iron helm should melt no?
          PWMAngband variant maintainer - check https://github.com/draconisPW/PWMAngband (or http://www.mangband.org/forum/viewforum.php?f=9) to learn more about this new variant!

          Comment

          • Timo Pietilä
            Prophet
            • Apr 2007
            • 4096

            #20
            Originally posted by PowerWyrm
            If he breathes for long enough, even an iron helm should melt no?
            If the heat is enough to melt iron, you are very much toast.

            Comment

            • fizzix
              Prophet
              • Aug 2009
              • 3025

              #21
              So I've finally gotten around to implementing this (in v4 first as per Magnate's suggestion.)

              I split the implementation into 3 separate commits. The first commit is essentially all the changes in the melee2.c that bron posted (fixing the GF_ACID/which_element error). I tested it out and it seems to work properly.

              The second commit makes certain attacks not deal any physical damage when they are elemental.

              Code:
              /* Some attacks do no physical damage */
              	if (method == RBM_TOUCH  ||
              		method == RBM_ENGULF ||
              		method == RBM_DROOL  ||
              		method == RBM_SPIT   ||
              		method == RBM_CRAWL  ||
              		method == RBM_GAZE   ||
              		method == RBM_WAIL   ||
              		method == RBM_SPORE  ||
              		method == RBM_BEG    ||
              		method == RBM_INSULT ||
              		method == RBM_MOAN){
              		physical_dam = 0;
              	}
              I'm pretty sure the only ones I really needed were touch, engulf, and spore, but I included the others for completeness. After all someone *might* want to introduce a monster that begs to burn.

              The third commit gives the player an AC bonus of 50 for the purpose of calculating the physical damage (only for elemental attacks). The bonus of 50 should give roughly a 1/8 reduction in damage, which isn't really all that much. I wasn't sure about the usefulness of this one, it felt right though. That's why I sequestered it into it's own commit.

              Comment

              • jujuben
                Apprentice
                • Jan 2012
                • 56

                #22
                Insult to burn could be fun...
                A soft answer turneth away wrath. Once wrath is looking the other way, shoot it in the head.
                --The Seven Habits of Highly Effective Pirates

                Comment

                • fizzix
                  Prophet
                  • Aug 2009
                  • 3025

                  #23
                  Originally posted by jujuben
                  Insult to burn could be fun...
                  Code:
                  Boldor the yeek moons you!
                  You have received a sick burn!
                  You drink the pint of ale
                  You are no longer aware that all the yeeks are laughing at you.

                  Comment

                  Working...
                  😀
                  😂
                  🥰
                  😘
                  🤢
                  😎
                  😞
                  😡
                  👍
                  👎