Damage calculator

#45
I think the "mystery" bit (in the code above) is probably the monsters' evade maneuver defense bonus come to think of it just now.

The Strength and Magic bonuses are added to the player's defense as well as attack.

The formula is simpler than ((1+(ATK+DEF)/DEF-DEF*2/ATK)*ATK/2).

It's simply ATK-DEF+ATK*ATK/(DEF*2) where ATK and DEF are positive numbers.

EDITED: Actually with further testing it turns out it is max(0,ATK-DEF)+ATK*ATK/(DEF*2). In other words if DEF is greater than ATK the first term is 0. Why? Who can say.

If DEF*2 is 0 then the second additive term becomes infinity, which is undefined behavior when converted to an integer. But the 0044F938 subroutine produces 0 for infinity.

I think the subroutine just does floating point to integer conversion. There are at least 3 separate subroutines that do that in this chunk of code. And they are inline subroutines. So the 400 subroutine figure quoted above probably includes a lot of junk subroutines like these.

Anyway, since the ASM loads the result of the undefined operation into a register, it gets added to the total as 0.


To my mind I don't see the logic in this method of calculating damage. Why two different damage terms, one linear, one exponential, the exponential one collapsing to 0 on infinity damage, none of it makes sense to me, but I wouldn't be surprised if its the same formula used in the King's Field games, however the undefined bits might have played out differently on the PS1.

I think probably the thing to do in terms of looking at this as a bug, would be to take the linear term out. And treat 0 defense against nonzero attack as infinity damage. Whatever is done, clamping to 0 seems like a good place to begin.


PS: @HwitVlf: neither am I convinced that just doing ATK-DEF would work so well in terms of game play. I don't think players would like it so much unless it was coupled with a way to chip away at the opponents' defenses (that doesn't involve leveling up.)


EDITED: Also, the last bit is if there was no damage, then the damage is 1. This subroutine also does bad status infliction as a result of an attack, but I've not included that part above.
Reply



Messages In This Thread
Damage calculator - by HolyDiver - 2013-03-28, 08:10 PM
Re: Damage calculator - by Verdite - 2013-03-28, 09:18 PM
Re: Damage calculator - by HolyDiver - 2013-03-28, 10:30 PM
Re: Damage calculator - by Verdite - 2013-03-29, 12:02 AM
Re: Damage calculator - by HwitVlf - 2013-03-29, 12:18 AM
Re: Damage calculator - by HolyDiver - 2013-03-29, 02:21 AM
Re: Damage calculator - by HolyDiver - 2013-03-29, 03:05 PM
Re: Damage calculator - by HolyDiver - 2013-03-29, 04:52 PM
Re: Damage calculator - by HwitVlf - 2013-03-29, 05:35 PM
Re: Damage calculator - by HolyDiver - 2013-03-29, 07:53 PM
Re: Damage calculator - by HolyDiver - 2013-03-29, 09:08 PM
Re: Damage calculator - by HolyDiver - 2013-04-01, 03:12 AM
Re: Damage calculator - by Verdite - 2013-04-01, 03:33 PM
Re: Damage calculator - by HolyDiver - 2013-04-01, 10:16 PM
Re: Damage calculator - by HolyDiver - 2013-04-01, 10:27 PM
Re: Damage calculator - by HolyDiver - 2013-04-02, 12:17 AM
Re: Damage calculator - by HolyDiver - 2013-04-11, 04:15 AM
Re: Damage calculator - by HolyDiver - 2013-04-11, 04:30 AM
Re: Damage calculator - by HolyDiver - 2013-06-13, 02:15 PM
Re: Damage calculator - by HwitVlf - 2013-06-13, 07:54 PM
Re: Damage calculator - by HolyDiver - 2013-06-13, 10:50 PM
Re: Damage calculator - by HwitVlf - 2013-06-14, 07:23 PM
Re: Damage calculator - by HolyDiver - 2013-06-14, 10:25 PM
Re: Damage calculator - by HwitVlf - 2013-06-14, 11:51 PM
Re: Damage calculator - by HolyDiver - 2013-06-15, 02:26 AM
Re: Damage calculator - by HwitVlf - 2013-06-15, 03:13 AM
Re: Damage calculator - by HolyDiver - 2013-06-15, 03:58 AM
Re: Damage calculator - by HolyDiver - 2013-06-15, 04:59 AM
Re: Damage calculator - by HolyDiver - 2013-06-23, 01:15 AM
Re: Damage calculator - by HolyDiver - 2013-06-24, 12:52 AM
Re: Damage calculator - by HolyDiver - 2013-07-02, 05:19 PM
Re: Damage calculator - by HwitVlf - 2013-07-02, 07:49 PM
Re: Damage calculator - by HolyDiver - 2013-07-03, 06:52 AM
Re: Damage calculator - by HwitVlf - 2013-07-04, 07:41 PM
Re: Damage calculator - by HolyDiver - 2013-07-05, 09:25 AM
Re: Damage calculator - by HwitVlf - 2013-07-05, 10:51 AM
Re: Damage calculator - by HolyDiver - 2013-07-05, 11:15 AM
Re: Damage calculator - by HolyDiver - 2013-07-05, 02:05 PM
Re: Damage calculator - by HwitVlf - 2013-07-05, 07:00 PM
Re: Damage calculator - by HolyDiver - 2013-07-05, 08:59 PM
Re: Damage calculator - by HwitVlf - 2013-07-05, 10:11 PM
Re: Damage calculator - by HolyDiver - 2013-07-06, 10:17 AM
Re: Damage calculator - by HolyDiver - 2013-07-06, 10:41 AM
Re: Damage calculator - by HolyDiver - 2013-07-06, 10:52 AM
Re: Damage calculator - by HolyDiver - 2013-07-06, 11:05 AM
Re: Damage calculator - by HolyDiver - 2013-07-06, 11:36 AM
Re: Damage calculator - by HolyDiver - 2013-07-06, 06:45 PM
Re: Damage calculator - by HwitVlf - 2013-07-06, 09:50 PM
Re: Damage calculator - by HolyDiver - 2013-07-07, 08:10 AM
Re: Damage calculator - by HolyDiver - 2013-07-07, 12:34 PM
Re: Damage calculator - by HolyDiver - 2013-07-07, 02:49 PM
Re: Damage calculator - by HolyDiver - 2013-07-07, 05:38 PM
Re: Damage calculator - by HwitVlf - 2013-07-07, 10:41 PM
Re: Damage calculator - by HolyDiver - 2013-07-08, 04:50 AM
Re: Damage calculator - by HolyDiver - 2013-07-08, 08:34 AM
Re: Damage calculator - by HolyDiver - 2013-07-08, 11:07 AM
Re: Damage calculator - by HolyDiver - 2013-07-08, 11:49 AM
Re: Damage calculator - by HolyDiver - 2013-07-08, 12:11 PM
Re: Damage calculator - by HolyDiver - 2013-07-08, 04:56 PM
Re: Damage calculator - by HolyDiver - 2013-07-08, 07:14 PM
Re: Damage calculator - by HwitVlf - 2013-07-08, 09:25 PM
Re: Damage calculator - by HolyDiver - 2013-07-09, 11:27 AM
Re: Damage calculator - by HolyDiver - 2013-07-09, 01:46 PM



Users browsing this thread:
6 Guest(s)