# damage mechanic

#### Mihe

##### Veteran
How do you write a damage formula that makes it so you can never deal 0 dmg. You will always deal at the very least 1 dmg even if the target's defense is higher than your attack.

#### bgillisp

##### Global Moderators
Most do it with a plug-in, and the plug-in is set up so that it sets all damage to 1 if it computes it should be 0. Otherwise you can use a javascript command to do this in the damage formula, or just by a cute damage formula where getting very low numbers is near impossible.

Moved to MV Support

#### Aloe Guvner

##### Walrus
You can easily do it inside the damage formula:

Code:
``formula === 0 ? 1 : formula``
In English,
Does the formula equal zero?
If so, put 1 instead. Otherwise, put the formula.

Replace formula with whatever your formula is

#### Mihe

##### Veteran

So for example, if a.atk < b.def, the value will return to 0. I can't edit what the value returns to by default. How would I rewrite this?

#### Sauteed_Onion

##### Mmm Tasty
Code:
``Math.max(1, a.atk * meowever - b.def * meowever)``

#### Mihe

##### Veteran
Thank you all for helping me.

##### [Null_Value]
Code:
``Math.max(1, a.atk * meowever - b.def * meowever)``
Can you explain how this works? Is the first number inside the brackets the result of the formula it will give minimally, instead of 0?

#### Sauteed_Onion

##### Mmm Tasty
I believe so. It's what I use, I never messed with it to know.

#### Mihe

##### Veteran
Can you explain how this works? Is the first number inside the brackets the result of the formula it will give minimally, instead of 0?
I believe so. It's what I use, I never messed with it to know.
Yup you are correct!

##### [Null_Value]
Yup you are correct!
So I just tested this out:
Code:
``Math.max(1, a.atk * 4 - b.def * 2)``
And it returned 0 damage on an enemy with maximum defense. What'd I do wrong?

#### Fernyfer775

##### Veteran
I am assuming that if you have variance on the damage formula, that it could be changing the result?

#### Sauteed_Onion

##### Mmm Tasty
Hmm.. maybe put a ; at the end?

#### Wavelength

##### Pre-Merge Boot
The problem with trying to do this kind of stuff with formulas is that it's affected afterwards by variance, elemental weakpoints/resistances, damage rates, critical hits (which could give you a slightly strange 3 damage instead of 1), etc.

That's why plugins like Yanfly's Damage Core are usually the better way to go, although obviously lightweight plugins are better than ones which affect a bunch of stuff you don't want to change. Or, if you know JS, you can change a few lines of code yourself to set the minimum damage to 1 right before it's applied and displayed.

#### WickedWolfy

##### Touch Fluffy Tail!
There is always "1 + [formula]", where 1 is a solid number of damage the weapon would do regardless of user.
For example... even in the weakest hands, a sharp blade would still to 1d4 damage, where 1 would be minimum amount possible.
After that, practiced and tried used would do "1 + a.atk - b.def".
A strong character might do "1 + a.atk * a.STRENGTH - b.def"
A not very strong but a nimble character might strike more times, but lighter. "1 + ( a.atk / 2 ) * a.AGILITY - b.def"
You can also write something that would look at the strongest stat out of the two and decide more precisely how the character uses the said weapon. =)

One of the best tool to deduct these I've used was "NPC sheets".
Mei is a made, so she is great with spells, but can still hit sometimes with a knife for 1/2 of its damage, or min = 1
George is a strong fighter - he picks up an ax and applies his strength for x3 damage
And so on.

In my works I prefer to step outside of the simple math formula and work "by character" instead. It does get complex more often than simple, but it looks kinda cool. And if you add "equip comments" ("Oh, a new axe! I can definitely cleave some ork skulls with this!" [George's strength will deal x3 the normal damage of "Battle Axe"])

#### bgillisp

##### Global Moderators
@WickedWolfy : Actually, 1 + a.atk - b.def can still return 0, as it is all evaulated at once. For example, if your ATK is 5 and the DEF is 50, the math is:

1 + 5 - 50 = -46, which returns 0 in the engine.

#### WickedWolfy

##### Touch Fluffy Tail!
Actually, 1 + a.atk - b.def can still return 0
My example was slightly shorthanded. Thus my mention of 1 being "solid number". Thanks for poking holes in my terrible math. =D
Yes, in perfect world a max-0-value (or ceil, or floor... depending on what is the perfect goal) should be taken of the calculation and a solid number added. There are a number of ways math can be done, based on the situation.
I wanted to focus less on the math that was already mentioned and more on assigning class/character damage instead, as per my later examples.

My example with multiplication by strength and/or agility is flawed too, if you want to pick at my terrible short-hand maths.

#### WickedWolfy

##### Touch Fluffy Tail!
Fine... You got me into math thinking now. This is along the lines of the formula I would use for my projects, where applicable
Code:
``Math.max( Math.floor((Math.random() * 10) + 1), a.atk * Math.max( a.STRENGTH * 2/3, a.AGIL * 1/3 ) - b.def );``

#### bgillisp

##### Global Moderators
I get what you meant. The math.max (for MV) fixes the issue heavily. Or you can do what I do:

(a.atk + STR + 20) * (a.atk) / (b.def + 20) + a.level

The first part will always be >= 0, then the a.level makes sure something positive is added on.

#### WickedWolfy

##### Touch Fluffy Tail!
(a.atk + STR + 20) * (a.atk) / (b.def + 20) + a.level
Interesting. How would you write this in English? I am a bit shy using a.atk squared, because this is what you would end up if you open up the parenthesis.

( ( a.atk^2 + STR*a.atk + 20 * a.atk ) / ( b.def + 20 ) ) + a.level
Technically, because level is never lower than zero, and there is no subtraction and only devision, the result will never be less than 1.
Although funny things might happen if the enemy defense is negative 20 =D

Gee... This got me rallied up on damage maths and I even got a plugin idea in mind =\

Last edited:

### Latest Profile Posts

Sorry Aerith... I will abandon your shoes...
Spent a whole bunch of time today reworking the area in the video because someone said it was too illusory. So I reworked it so it changes less, moved the grass up to the same level as the player.... And found enough extra resources to make the grass moves when the player touches it. Also lots more water, because it looks amazing. I'll probably put up a short updated video later today.
I never noticed how NOISY birds can be in the morning..
The worst part of writing the thesis is getting to a point where it's nearly done and you feel like an 8th-grader could've written something on that level.
So ... uh ... this weekend I have to cut my husband's hair. He searched long and hard - highest mountains, deepest valleys, across vast oceans. All hairdressers are now closed. So it's me.