-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tiering item placements like enemies. #45
Comments
I'm planning to do this at some point. It's mostly just a question of how to tier items that have their stats and behavior randomized. Attack on weapons and defense on armor are the obvious things to consider. |
Thanks StarStalker! I think that's a good base to get me started. I'm wondering if instead of manually deciding on "m. values" for each weapon type, it might be more accurate to calculate exactly how many times a weapon will hit an enemy based on its animated hitbox data and its iframes. I'd just need to step through every frame of its animation, when there's a hitbox in front of the player (not above them like with axes) then consider the enemy to be hit and give it iframes. When the iframes run out, if there's still a hitbox in front of the player, consider the enemy hit a second time, etc. This would give me the maximum number of times the weapon will hit an enemy per swing if the player aims it well. For the elements, I know what you meant: Note that "No interrupt on land" doesn't make the weapon jump cancellable, it makes it NOT jump cancellable, so I'll make that 0.8 multiplier instead. Also, if a weapon has the valmanway "Player can move" bit, then the randomizer automatically gives it "No interrupt on animation end" too, to avoid the weapon being completely useless like you mentioned. Based on all that so far, I wrote a script that calculates the rank of each weapon in vanilla DoS and PoR, here are the results: I haven't taken into account gun/throwing weapon/etc effects yet. The numbers seem pretty accurate so far though! The strongest weapons are definitely down at the end of the list. The only issue I spot is that my code thinks illusion fist hits twice per use, when in reality it hits once. But that's because illusion fist has weird special coding. The next question is how to handle armor and skills. Armor should be easy, just sum up the stats, and give decent bonus to rank if the armor resists any elements. I'll need to add specific bonuses for certain items with hardcoded effects like death ring or sorceresses crest. Skills won't be so easy. They don't have an ATK stat, instead they have a "damage multiplier". This is somehow multiplied with the player's STR or INT or whatever to get the damage amount the skill should do. But I don't know the exact formula for this, and it probably varies between games. I might need to read the code to find the formula first. |
oh my, you... actually read it, I feel sorry now for deleting my suggestion post(out of fear that no one would bother to read a 6 monitor screens long post) I'm so sorry 😅 would you like me to post it again? I have it pasted on a note pad file here... if so, I'll try to cut as much unecessary info as possible |
Oh sorry if I was taking a long time to reply, I was busy yesterday. |
Oh you don't have to apologize, I think that was just me being impatient and worried that I might've gone too overboard with the whole idea 😅 So it seems the numbers sort of work, and the only thing that caught my eye was Agni's Flame being classified as the strongest weapon in PoR by the code, which is... a bit weird, to say the least. Seems to be so mostly because of the double hits doubling the rank and the elements it has. Other than that it seems to be categorizing most weapon ranks and grouping them together roughly just like the ranks the vanilla game implies, so it seems pretty good! I'd consider giving an DoS randomized weapons a run to see what the code brings up with actual randomized weapons. It should give us an idea of how reliable it is right now and if it needs further tweaks. |
(here's the original 6 screen(now 5!) lenghts worth post with my original suggestion for reference, along with a few edits to better express what I meant in the original. All inputs and opinions are appreciated!) To start things off, we know that the game itself has a kind of a ratio of weapon strength relative to their class/swing animation, with slower weapons of a certain "tier" having more attack than faster weapons of the same "tier" and of course more damage I-frames to account for that higher damage. So, how about using pokémon tiering as an example for the logic? Their Base Stat Total(which would stand for the weapon/armor stat increase total and skill damage and mp cost maybe?) There's more to pokémon tiering than that, especially on how they(Smogon tiers at least) place different pokémon in tiers by usage, rather than trying to quantifiy exactly how strong the pokémon is. (Do note that the numbers and formulas I'll be suggesting are mostly conjectures I made from my own experience with the game, are obviously subject to change, criticism and opinion, and are just a suggestion that I am putting together for this particular issue. This suggestion in particular is more aimed towards DoS, but PoR weapons are also kinda similar, so keep that in mind.) You could have a placement logic that takes the weapon/armor Base Stat Total number and then multiplies that number by a specific value for each of the special attributes it has to have a "quantified strength" of sorts for that specific weapon/armor/skill. And then have the placement logic place those items based on their "quantified strengths", with higher values only being allowed to appear later into the game. So for example, say I'm trying to quantify the strength of a Short Sword weapon with 100 atk, no other stat bonuses, a slashing swinging animation, with three elemental types and such a small number of damage I-frames that I can hit something once every time I swing, I can move around while swinging it like a valmanway, the hitbox is attached to the player, and it can be jump cancelled. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Assuming the following quantification and multipliers for each factor a weapon has to determine their quantified strength: Weapon Base Stat Total: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Weapon Animations: (those are the penalties and increases, in multipliers, to quantified strength I suggested based on what a particular weapon swing animation was randomized to be) handgun(I believe the weapon having a gun/RPG shot attached to it comes from the animation rather than the weapon itself, right? if so) = 1.2 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Super Animation: ???(I never use these so I'm not even capable of quantifying an estimate based on the supers effectiveness) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// I-frames(This part is tricky because of the different swing animations that a weapon can be randomized to have. Maybe correlating the randomized I-frames to what the orignial weapon had while also taking in consideration what the swing was randomized to be might be a fitting solution to this?) first multiplier: second multiplier: (And depending on how accurate we would want these multipliers to be, there could be a severity factor added to these based on how different the original was from the randomized version.) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Elemental Types: I believe adding a 1.1 or 1.05 multiplier to the quantified strength for each elemental damage type after the first would be fitting enough. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Weapon Special Qualities(Swing Modifiers): Here I believe pulling the names out from DSVEdit might make them more easily distinguishable.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// We would then apply all of these to the weapon presented at the start (100 atk, no other stat bonuses, a slashing swinging animation, with three elemental types and such a small number of damage I-frames that I can hit something once every time I swing, I can move around while swinging it like a valmanway, the hitbox is attached to the player, and it can be jump cancelled) for testing purposes, so: Weapon Base Stat Total = atk And then apply the multipliers for the weapon unique traits, so: Quantified weapon strength = Weapon Base Stat Total * Weapon Animation mult. * Super Animation mult. * I-frames mult. * (1+((Amount of elemental type damages - 1) * 0.05)) * (multiplied Weapon Swing Modifiers) Quantified weapon strength = 100 * 1.0 * 1.0(we'll assume 1.0 here) * 1.0(since original weapon I-frames = randomized weapon I-frames) * (1+((3 - 1) * 0.05)) * (multiplied Weapon Swing Modifiers) Quantified weapon strength = 100 * 1.0 * 1.0 * 1.0 * (1+(2 * 0.05)) * (in this case 1.2 * 1.5 * a lot of 1.0s) Quantified weapon strength = 100 * 1.0 * 1.0 * 1.0 * 1.1 * 1.8 Quantified weapon strength = 198 And then, based on the total quantified weapon strength, the item placement logic would only allow such a weapon to spawn in an area of the game which accepts weapons with 198 quantified strength to spawn, which I would assume to be somewhere in the late-game! ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// I'm REALLY sorry for the (still)MASSIVE, MASSIVE wall of text. I tried my best to make it all easy to read and to understand, so I hope everyone who sees all of this forgives me, and if you happen to have read it all, all inputs would be appreciated! |
Hi again! I removed the "m.value"(Motion Value) and the weapon comparison part of the original post for three reasons: 1st: the weapon lowest to highest damage comparison is kinda moot once their damage is randomized. 2nd: I wanted to go more in-depth for the reasoning why I suggested there to be a multiplier for how fast or how slow a weapon's swing animation was randomized to be in this particular comment. 3rd: the original post was way too big(and it still is lol). (so, I know that you, Lago, might be busy with other things and this whole gear balancing feature might not be a priority right now, so of course I won't mind if it takes a while for you to respond and I'm not expecting any of this to be tested thoroughly by you in the near future. If this is not a priority, of course.) So, I took a better look at the vanilla weapon randomization rankings you posted, and I realized that the code did what I thought it would do if there was no compensation factor for how slow or fast a weapon swings.
Claymore is being classified as the 18th weakest weapon in DoS by the code, despite being considered a "lowest tier" Great sword class weapon in the vanilla game. Behind it are, notably, Cutlass, Fleuret and Cutall, with the Cutlass and Fleuret being considered 2nd from lowest tier weaponry by the vanilla game and, most notably, Cutall, being the 2nd strongest Knife class weapon in the game. And by the time the Falchion, the 2nd to lowest Great sword class weapon appears on the list, Cinquedia, the strongest Knife class weapon, was already featured. This shows that there must be a compensation factor for how slow or how fast a weapon can swing, along with how many times can it hit an enemy per swing, as opposed to just the latter. But, since we are doing all of this mostly for randomized weapons and not the vanilla game weapons, I need to ask: Can the code get either the swing animation type that the weapon had before being randomized and after being randomized? And associate a multiplier for that particular swing type to use in the formula for the quantified weapon strength? Also there's this issue here: I'd assume since a hitbox never gets to Soma's front, in this case this weapon would be considered to be able to hit an enemy 0 times by the code? It's an Axe with a fast stab/knife swing animation. I personaly think that weapons being randomized like this is fine, considering you can still hit with them, and also fun to use since you need to remember to fight the enemy backwards, but it does enter in conflict with what we've been thinking for the quantified strength formula. The new swing is technically faster than the original (axe to knife) which would, in my suggested formula, make its rank rating go higher, even though it makes the weapon harder to use than normal. |
This problem is very evident in Dawn of Sorrow because of the large amount of items in the starting area. In my last few runs I consistently got endgame equipment like eversing and death's scythe which can trivialize the game. Since the randomizer can have enemy spawns change according to progress requirements, could there be an option to do this with equipment too?
The text was updated successfully, but these errors were encountered: