Main Menu
  • Welcome to The RPG Maker Resource Kit.

[Resolved] Melee vs. Ranged Weapons

Started by shintashi, October 28, 2010, 05:57:03 AM

0 Members and 1 Guest are viewing this topic.

shintashi

I put it in about 20 minutes ago but I'm not sure I got my order correct. I might have misplaced my 'end'. I was trying to set all ranged weapons (id 17+) to do flat damage while melee weapons (id 1-16) get bonuses from strength.

Quoteif hit_result == true
      # Calculate basic damage
      if self.weapon_id == nil || self.weapon_id >= 17
      atk = [(attacker.atk) - self.pdef, 0].max
    else
        atk = [(attacker.atk + attacker.str) - self.pdef, 0].max # read else
      end #might have to move end down edited by shintashi
        self.damage = atk * (atk + 2)   
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        # Critical correction
        if rand(100) < 10 * attacker.dex / self.agi # was 4%
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end

PS: this works fine in games with attributes of about 5-15 and hit points in the 250-1000 range.

shintashi

Quote from: shintashi on October 28, 2010, 05:57:03 AM
I put it in about 20 minutes ago but I'm not sure I got my order correct. I might have misplaced my 'end'. I was trying to set all ranged weapons (id 17+) to do flat damage while melee weapons (id 1-16) get bonuses from strength.

Quoteif hit_result == true
      # Calculate basic damage
if attacker.weapon_id == nil || attacker.weapon_id >= 17
      atk = [(attacker.atk) - self.pdef, 0].max
    else
        atk = [(attacker.atk + attacker.str) - self.pdef, 0].max # read else
      end #might have to move end down edited by shintashi
        self.damage = atk * (atk + 2)   
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        # Critical correction
        if rand(100) < 10 * attacker.dex / self.agi # was 4%
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end

PS: this works fine in games with attributes of about 5-15 and hit points in the 250-1000 range.

Fixed... but I can't figure out why enemies are doing so much damage. It's like their damage coefficient is on a completely different scale.

shintashi

    if hit_result == true
      # Calculate basic damage
      if attacker.weapon_id == nil || attacker.weapon_id >= 17
      atk = [(attacker.atk + rand(Integer(attacker.dex/2))) - self.pdef, 0].max
    else
atk = [(attacker.atk + attacker.str + rand(Integer(attacker.agi/2))) - self.pdef, 0].max
# used to read completely differently
      end #might have to move end down edited by shintashi
        self.damage = atk * (atk + 2)   
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        # Critical correction
        if rand(100) < 10 * attacker.dex / self.agi # was 4%
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end


This is my refined script. It does different damage for melee weapons than ranged weapons. Ranged weapons do damage based on the weapon, slightly modified by dexterity. Melee weapons, like swords and knives, do damage based on the weapon, plus strength, modified slightly by agility. Note that you will want to either greatly reduce melee damage or greatly increase ranged damage of weapons to compensate the difference.