Page 2 of 3

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 4:10 am
by Voom
The ideal solution (as discussed before):
Weapon stats equal a stated % of base stats.
All equipment stats equal a stated % of character's base stats.
There are many types of stats that are exceptions (ones that do not appear as a base stat).
This undoubtedly allows weapons to scale and minimizes their base stat uselessness.

Was that simple or what?

The base stats to be treated like this include HP, AC, AD, and BC.
Example: If a character has 100 HP, 200 AC, 30 AD, and 60 BC, then holding Valugha's shimmering hat could give the character +3% HP, +8% AC, -7% AD, -8% BC, and -1 Move Cost.

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 7:01 am
by Zukero
Sounds easy right? Code-wise it is. But then we have to rebalance the whole game. All equipment, all weapons, all enemies. THAT is hard, and long.
Combat system overhaul is more or less planned for v0.8.0, but our priority is creating the content for v0.7.2.

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 12:30 pm
by rijackson741
Voom wrote: Sat Jul 08, 2017 4:10 am The ideal solution (as discussed before):
Weapon stats equal a stated % of base stats.
All equipment stats equal a stated % of character's base stats.
There are many types of stats that are exceptions (ones that do not appear as a base stat).
This undoubtedly allows weapons to scale and minimizes their base stat uselessness.

Was that simple or what?
Well, if you read through the damage per round thread that I pointed to (http://andorstrail.com/viewtopic.php?f=4&t=4096), no, it's not simple. The devil is in the details, and there are a lot of details. What should the multiplier be for different weapons? What about BC, and multipliers for shields vs armor? What about DR (IMO this should be left static, as it is now)? What do we do about rings, which, as others have pointed out (http://andorstrail.com/viewtopic.php?f= ... 798#p56798), are rather overpowered? Is DPR even the best solution (I think it's a great starting point, but I am not sure it's the total answer). And, as Zukero points out, once we have the details worked out and the new system implemented, almost every item, and possibly every monster, will need to be adjusted.

Like I said, we only want to do this once, which means a lot of upfront work making sure we got it right, and then a lot of work adjusting everything. It's a huge project.

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 7:08 pm
by Voom
I'm sure it is a huge project. Unfortunately, I don't see the next update without it. Advancing the narrative without an established foundation might be bad news. However, I could be wrong. Maybe we can implement a new equipment arrangement in v7.4 after the next two updates that go together.

I've read through the DPR thread but it is easy to lose track due to side bar conversations. So I didn't get the whole BC issue (I'll read up). I believe the best way to go is to leave every stat static except for the four base stats, whether it's Multiplier, DR, Move cost, CS, AP/Attack cost (are there more?). Conditions like BW Misery need not be changed either. Conditions, like it was mentioned in the DPR thread, do need to be adjusted.

It is hard to come up with a place to start so that changes we want to see are done fairly and in context with AT's other game elements. I have thought a little about this and I propose we start equating %HP, %AC, %AD, and %BC as a simple reference point to the adjustments we make to equipment, etc. Right now, as apportioned by level ups, 5 HP = 5 AC = 1 AD = 3 BC. Of course, we know this is flawed due to the scaling issue. That is why %Stat should be used.

I understand that coming up with a formula might be difficult and arbitrary, but if the devs do not come up with the formula (arbitrary or not), then who else will? Oskar came up with stat pricing through, I'm guessing, an arbitrary means. In ATCS, as I have discussed before in other threads, every buyable/sellable item has a price in terms of gold based on its stats and conditions. This pricing is scaled exponentially based on the models that I recreated (except for DR, which I believe is a straight line when plotted). Every stat has its own unique, originally created equation. I wonder if Oskar or anyone else still has those equations b/c my recreations using excel can't ever be 100% accurate (trust me, I tried). As a note, when I say that each stats' pricing equation is exponential, I mean that the more HP you have the less even more HP is worth. That is the scaling inherent in the value of each stat.

So, the point is that we need to decide how much +1% HP equals in terms of %AC, %ADmin, %ADmax, %BC. According to the ATCS pricing equations, ADmin is worth a little more than ADmax all throughout the graphed scale. Example: +10% HP = +5% AC = +40% ADmin = +45% ADmax = +15% BC. Yes, this will be an arbitrary measure of equipment, etc., but we can use the ATCS pricing equations as a guide.

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 8:30 pm
by rijackson741
Voom wrote: Sat Jul 08, 2017 7:08 pm I'm sure it is a huge project. Unfortunately, I don't see the next update without it. Advancing the narrative without an established foundation might be bad news. However, I could be wrong. Maybe we can implement a new equipment arrangement in v7.4 after the next two updates that go together.
The next one has to be new content, because people have already waited too long. Adding some new content will not make the combat problems any worse, except to the extent that there will be more content that needs to be adjusted later.

However, after that, I agree with you. We need to fix it sooner rather than later, because that will have the minimum impact on players builds going forward.
Voom wrote: Sat Jul 08, 2017 7:08 pm I've read through the DPR thread but it is easy to lose track due to side bar conversations. So I didn't get the whole BC issue (I'll read up). I believe the best way to go is to leave every stat static except for the four base stats, whether it's Multiplier, DR, Move cost, CS, AP/Attack cost (are there more?). Conditions like BW Misery need not be changed either. Conditions, like it was mentioned in the DPR thread, do need to be adjusted.

It is hard to come up with a place to start so that changes we want to see are done fairly and in context with AT's other game elements. I have thought a little about this and I propose we start equating %HP, %AC, %AD, and %BC as a simple reference point to the adjustments we make to equipment, etc. Right now, as apportioned by level ups, 5 HP = 5 AC = 1 AD = 3 BC. Of course, we know this is flawed due to the scaling issue. That is why %Stat should be used.
I would leave HP static too. It's mainly AD that needs the fix, but AC and BC would also benefit.
Voom wrote: Sat Jul 08, 2017 7:08 pm I understand that coming up with a formula might be difficult and arbitrary, but if the devs do not come up with the formula (arbitrary or not), then who else will? Oskar came up with stat pricing through, I'm guessing, an arbitrary means. In ATCS, as I have discussed before in other threads, every buyable/sellable item has a price in terms of gold based on its stats and conditions. This pricing is scaled exponentially based on the models that I recreated (except for DR, which I believe is a straight line when plotted). Every stat has its own unique, originally created equation. I wonder if Oskar or anyone else still has those equations b/c my recreations using excel can't ever be 100% accurate (trust me, I tried). As a note, when I say that each stats' pricing equation is exponential, I mean that the more HP you have the less even more HP is worth. That is the scaling inherent in the value of each stat.
I've never looked into how the pricing of items is calculated, but I have been meaning to because I think that needs adjusting too. The equations are buried in the code somewhere, just have to find them :)
Voom wrote: Sat Jul 08, 2017 7:08 pm So, the point is that we need to decide how much +1% HP equals in terms of %AC, %ADmin, %ADmax, %BC. According to the ATCS pricing equations, ADmin is worth a little more than ADmax all throughout the graphed scale. Example: +10% HP = +5% AC = +40% ADmin = +45% ADmax = +15% BC. Yes, this will be an arbitrary measure of equipment, etc., but we can use the ATCS pricing equations as a guide.
Only if we believe that the pricing equations are currently balanced correctly ;) This kind of question is what I mean by getting it right when we do it, so that we don't have to do it again.

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 8:55 pm
by Zukero
From ATCS' code (which is a port of AT's code in this instance) :

Code: Select all

	public Integer computePrice() {
		int price = 0;
		if (category != null && category.action_type != null) {
			if (category.action_type == ItemCategory.ActionType.use) {
				price += kill_effect == null ? 0 : calculateUseCost();
			} else if (category.action_type == ItemCategory.ActionType.equip) {
				price += equip_effect == null ? 0 : calculateEquipCost(isWeapon());;
				price += hit_effect == null ? 0 : calculateHitCost();
				price += kill_effect == null ? 0 : calculateKillCost();
			}
		}
		return Math.max(1, price);
	}

Code: Select all

	public int calculateUseCost() {
		final float averageHPBoost = (zeroForNull(kill_effect.hp_boost_min) + zeroForNull(kill_effect.hp_boost_max)) / 2.0f;
		if (averageHPBoost == 0) return 0;
		return (int) (0.1*Math.signum(averageHPBoost)*Math.pow(Math.abs(averageHPBoost), 2) + 3*averageHPBoost);
	}

	public int calculateEquipCost(boolean isWeapon) {
		final int costBC = (int) (3*Math.pow(Math.max(0, zeroForNull(equip_effect.increase_block_chance)), 2.5) + 28*zeroForNull(equip_effect.increase_block_chance));
		final int costAC = (int) (0.4*Math.pow(Math.max(0,zeroForNull(equip_effect.increase_attack_chance)), 2.5) - 6*Math.pow(Math.abs(Math.min(0,zeroForNull(equip_effect.increase_attack_chance))),2.7));
		final int costAP = isWeapon ?
				(int) (0.2*Math.pow(10.0f/zeroForNull(equip_effect.increase_attack_cost), 8) - 25*zeroForNull(equip_effect.increase_attack_cost))
				:-3125 * zeroForNull(equip_effect.increase_attack_cost);
		final int costDR = 1325 * zeroForNull(equip_effect.increase_damage_resistance);
		final int costDMG_Min = isWeapon ?
				(int) (10*Math.pow(Math.max(0, zeroForNull(equip_effect.damage_boost_min)), 2.5))
				:(int) (10*Math.pow(Math.max(0, zeroForNull(equip_effect.damage_boost_min)), 3) + zeroForNull(equip_effect.damage_boost_min)*80);
		final int costDMG_Max = isWeapon ?
				(int) (2*Math.pow(Math.max(0, zeroForNull(equip_effect.damage_boost_max)), 2.1))
				:(int) (2*Math.pow(Math.max(0, zeroForNull(equip_effect.damage_boost_max)), 3) + zeroForNull(equip_effect.damage_boost_max)*20);
		final int costCS = (int) (2.2*Math.pow(zeroForNull(equip_effect.increase_critical_skill), 3));
		final int costCM = (int) (50*Math.pow(Math.max(0, zeroForNull(equip_effect.critical_multiplier)), 2));

		final int costMaxHP = (int) (30*Math.pow(Math.max(0,zeroForNull(equip_effect.max_hp_boost)), 1.2) + 70*zeroForNull(equip_effect.max_hp_boost));
		final int costMaxAP = (int) (50*Math.pow(Math.max(0,zeroForNull(equip_effect.max_ap_boost)), 3) + 750*zeroForNull(equip_effect.max_ap_boost));
		final int costMovement = (int) (510*Math.pow(Math.max(0,-zeroForNull(equip_effect.increase_move_cost)), 2.5) - 350*zeroForNull(equip_effect.increase_move_cost));
		final int costUseItem = (int)(915*Math.pow(Math.max(0,-zeroForNull(equip_effect.increase_use_item_cost)), 3) - 430*zeroForNull(equip_effect.increase_use_item_cost));
		final int costReequip = (int)(450*Math.pow(Math.max(0,-zeroForNull(equip_effect.increase_reequip_cost)), 2) - 250*zeroForNull(equip_effect.increase_reequip_cost));

		return costBC + costAC + costAP + costDR + costDMG_Min + costDMG_Max + costCS + costCM
				+ costMaxHP + costMaxAP
				+ costMovement + costUseItem + costReequip;
	}


	public int calculateHitCost() {
		final float averageHPBoost = (zeroForNull(hit_effect.hp_boost_min) + zeroForNull(hit_effect.hp_boost_max)) / 2.0f;
		final float averageAPBoost = (zeroForNull(hit_effect.ap_boost_min) + zeroForNull(hit_effect.ap_boost_max)) / 2.0f;
		if (averageHPBoost == 0 && averageAPBoost == 0) return 0;

		final int costBoostHP = (int)(2770*Math.pow(Math.max(0,averageHPBoost), 2.5) + 450*averageHPBoost);
		final int costBoostAP = (int)(3100*Math.pow(Math.max(0,averageAPBoost), 2.5) + 300*averageAPBoost);
		return costBoostHP + costBoostAP;
	}

	public int calculateKillCost() {
		final float averageHPBoost = (zeroForNull(kill_effect.hp_boost_min) + zeroForNull(kill_effect.hp_boost_max)) / 2.0f;
		final float averageAPBoost = (zeroForNull(kill_effect.ap_boost_min) + zeroForNull(kill_effect.ap_boost_max)) / 2.0f;
		if (averageHPBoost == 0 && averageAPBoost == 0) return 0;

		final int costBoostHP = (int)(923*Math.pow(Math.max(0,averageHPBoost), 2.5) + 450*averageHPBoost);
		final int costBoostAP = (int)(1033*Math.pow(Math.max(0,averageAPBoost), 2.5) + 300*averageAPBoost);
		return costBoostHP + costBoostAP;
	}
I hope it helps. You'll have to decipher it, but I believe that variables are named well-enough for you to figure it out.

Re: FSTH damage potential increase?

Posted: Sat Jul 08, 2017 10:02 pm
by rijackson741
Thanks. That will save me some time :D

Re: FSTH damage potential increase?

Posted: Sun Jul 09, 2017 4:45 am
by Voom
Thanks, Zukero. I can see all the formulas, but I'm not sure I understand some of the terminology.

I think out of principle, HP shouldn't be static b/c it might have a scaling issue as well. But that is something that can be discussed.

Re: FSTH damage potential increase?

Posted: Sun Jul 09, 2017 1:22 pm
by marquinho
I think you don't need %HP items when there's Increased Fortitude. That gives you enough HP that you need.
%HP items + IF would be too strong imo.

Re: FSTH damage potential increase?

Posted: Sun Jul 09, 2017 2:04 pm
by Zukero
On the other hand, it would stop IF from being mandatory by giving a reasonable alternative.