 |
12/23/08, 9:30 AM
|
#31
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
Originally Posted by Redbeard
Hi Ullas - I think it would be fairly simple for Wowhead to implement that per your request, especially if they already have that for items. Worth a shot at least I guess
|
I talked to two of the Wowhead developers. They are planning on making more information available via XML feeds like the one I described above, but there are higher priority bug fixes and enhancements they're going to focus on first.
I'm seeing about creating an option on the "Talents" and "Spells" nodes (libraries of talents and spells available to the simulation, not to be confused with the allocation of talent points for a particular character), where you can import a *.dbc file directly from your WoW installation. This action would create a bunch of spells, and a "talent representation"* for each class (i.e., a new balance, feral and resto tree for the druid class model). This cuts WAY down on the maintenence required for each class, since spells and talents can be grabbed directly from the WoW client installation (or PTR client even). In case anyone is interested, here's what the structure of these tables looks like
Talent.dbc - Source Peek Wiki
Spell.dbc - Source Peek Wiki
Things I still need to look up on a site like Wowhead:
1) Anything at all relating to items
2) Anything at all relating to quests
3) Consumables
I like the idea of being able to do a "find as you type" search, so I'll probably cache some abbreviated item data. Being able to grab stuff from the WoW client's itemcache.wdb file would be fantastic too, as I don't want my software to rely on Wowhead working perfectly to function. Of course there will always be the option of adding gear manually
Last edited by Ullas : 12/23/08 at 10:08 AM.
|
|
|
|
12/29/08, 10:19 AM
|
#32
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
I'm running a little behind my expected alpha test date, due to my wanting to unwind during the holidays  I expect that by 1/15, you will be able to do the following (kind of in this order):
1) Import a *.dbc file for spells and talents, which is extracted from the WoW game client files using a third party program. At the end of this process, you should have the talents corresponding to that version of the client represented in WoWSimulator, and possibly a library of spells as well. NOTE: I'm definitely going to find a way to have current (and maybe a few old) talent trees already loaded when a new simulation is created.
2) Set the parameters for one or more characters in the program, including class, race, stats, skills, and talents.
3) Set up a simulation of your character/party/raid vs. a target dummy of user-specified armor, resistances, level and health.
4) Run the simulation, which creates things like a combat log and data tables
5) Create some graphs from said data tables
I'm not promising that everything's going to be working perfectly, but it's a start.
I'm looking for 8-12 alpha testers. They should be a mix of different classes, and must have the end goal of helping improve this software (i.e., won't freak out if things are inaccurate or somewhat broken at this very early stage). Please send me a PM through these forums if you're interested.
|
|
|
|
01/11/09, 8:01 PM
|
#33
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
I haven't posted here in a while, because I have made a major change to the way I'm getting spell/class/talent/mechanics information.
Right now, I pass in several CSV files (comma separated value -- a very human-readable format for tables). I was expecting to just get spell names, ranks, etc... but there's a HUGE amount of information in the *.MPQ files in your /World of Warcraft/Data directory. This includes things like valid target types, proc rates, shared cooldowns, how many times debuffs can be stacked, etc... for all 38,000ish spells in the game (remember, this is for NPCs too).
I'm going back and eliminating anything I sort of 'hard coded', because I want to base as much as possible on this data.
The advantages to you, the users, are two fold:
1) You can rely on any information obtained from the game client to be perfectly accurate.
2) You can rely on any information obtained from the game client to be completely up-to-date.
I'm hoping that there will be very little upkeep for each class, and that users will be able to simply load new game data into the simulator each time their client is patched.
Originally Posted by Hythloday
Here are questions I might want to use your tool to answer for me.
Given my existing gear (on my character and in my bank), what's the best spec for me? What are the two best specs that will give me the highest average DPS? I'm a full-time PVE DPSer who wants to use the dual-spec feature optimally.
|
I have looked more closely at what is stored in the WoW data files (your itemcache file in your WDB directory), and finding out what you have in your bank from your own game client is certainly possible. It's not an extremely high priority right now, but there are things I want to get from those file anyway (i.e., items your character has seen, to avoid going to wowhead for every single piece of armor).
|
|
|
|
01/12/09, 3:26 PM
|
#34
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
Here's an issue I've rehashed so many times that I now lack any perspective whatsoever. I'm afraid I'm missing something obvious, so I would very much appreciate ideas:
I have this object called AttackRotation. Essentially, after a character's attack, the AttackRotation is asked what the character's next action should be. An AttackRotation contains one or more Priority objects.
Here's a little conceptual overview of how these things work in my simulator:
Attacks can do the following things:
1) Tell you the spell associated with them, which tells you the base damage, cost, type of cost (i.e., combo points, energy, or a combination), etc...
2) Tell you when the attack will next be ready (takes cooldown, group cooldown, global cooldown and your character's state into account -- mana, health, etc...).
3) Tell how "safe" it is to perform the action, based on your character's current state (i.e., don't lifetap or SW  if you're below 20% health). Note that these are things that are risky, in the sense that doing them may get you killed. There will be a parameter somewhere that you can set somewhere in the range of "maverick cowboy pirate ninja" to "scaredy cat". There will be a check somewhere else to make sure you don't actually commit suicide, but this is where you'd make sure you don't lifetap yourself to 4%.
4) Tell how "smart" it is to perform the action, based on your character's current state (i.e., don't start casting something if you have a debuff that will stun you before you get the spell off). Note that this is NOT designed to help you "pick the spell", but rather to avoid doing something that, while normally appropriate, isn't because of some special circumstances.
A Priority can do the following things:
1) Tells you how well an Attack satiefies the Priority. For example, a shadowpriest may have a priority like KeepMiseryUpPriority, which would be designed to reapply misery to the current target if it is not up, or has less than 3 seconds left. In this case, it would tell you that Shadow Word: Pain, Mind Flay and Vampiric Touch all will reapply Misery. The priority will tell you that the previously mentioned three Attacks all applly Misery equally well.
2) Tells you the Priority's "urgency". In the above example, if you have just applied Misery to your target, it's not all that important that you consider reapplying it again. However, a priority like DoMaximumDamagePriority will usually have the same "urgency" all the time.
An AttackRotation can do the following things:
1) Tell you what the highest Priority at any given moment is(this is simply sorting by the "urgency" mentioned in point 2 above)
2) Tell you which action to take now*. In the above example regarding the KeepMiseryUpPriority, if misery is about to fade off the current target, KeepMiseryUpPriority would likely be the highest (returning Attacks: SW:P, Mind Flay and VT). The next priority might be DoMaximumDamagePriority which would essentially pick one from the three Attacks. The AttackRotation now knows to do that attack next.
* This may actually end up being "which action to take next".
So, the TL;DR is:
* A Priority has some criterion (i.e., "Keep your threat at 95% of the tank's, or below", and it looks at your current situation (taking you, your party, your enemy and the phase of the moon into account) and tells you based on many factors how important it is.
* An AttackRotation starts with all your available Attack, and, in order of importance, goes to each of its Prioritys and asks which one is best.
* Each Priority then asks each Attack how "safe" and "smart" it is, given your character's state, your party's state, your enemy's state, etc..., and makes sure that it's within your specified "riskyness" level. The Priority then looks at how well each of the provided Attacks satisfies the intention of the priority, and passes the group of best Attack choices to the next highest Priority.
SO....
Can you guys think over how you decide which is the spell to cast (including NOT casting anything) at any given moment and time, and let me know if it's similar to the concepts above? If you can find a scenario that couldn't be modeled by the above decision process, please post it here so we can figure something else out.
A good way to do this is to go through the following thought process:
Imagine your grandmother is sitting at your computer, controlling your character, but she doesn't know a thing about WoW. You must explain to her exactly what to do before she starts fighting, but once she starts you can't say anything at all. You may assume she can make very complicated decisions on the fly, she knows nearly everything about the state of her character and her party/raid's characters at every moment, and she has complete information on all properties of all spells, talents, items, etc...
Thanks!
|
|
|
|
01/12/09, 6:58 PM
|
#35
|
|
Mr. Sandman
Docjowles
Gnome Mage
No WoW Account
|
At least as a frostfire mage, that is a reasonably complete view of my decision making process. To crib from Manly's epic treatise:

Originally Posted by manly
The damage is extremely streaky and bursty, mostly due to FFB crit multiplier and hot streak. This is also why Mirror Image is more interesting for that spec -- it allows you to work around streaky threat and 'normalize' it.
Generally speaking, the spec works with priorities. Here is what I use, as I point out in the points of contention, I am not 100% sure on them, although remain confident this is accurate.
Hot Streak pyroblast > Living Bomb > scorch refresh > ffb
However, this is only the main outline. Many improvements can be done. Amongst other things, Living Bomb explosion consumes a combustion charge, so you want to make sure to avoid it. You can always play around the timing of hot streak. There is no good reason to cast it right away. As such, if the hot streak mechanics allow you to safely cast living bomb / scorch -> hot streak, I would advocate it so as to avoid ignite munching. Of course, this assumes either living bomb or scorch was due for a refresh, otherwise I would just take the risk and hope ignite munching isn't too bad.
|
His priority queue seems like it would be easily modeled by your system. That would get you about 90% of the way to modeling a tank and spank fight, with the rest being cooldown management.
One of the trickier things I can think of offhand is mirror image, as Manly alludes to. It does a small but noticeable amount of damage over the course of a fight, so if you are trying to go balls-out, you want to pop it during your all-cooldowns-blown burn phase. However, on some fights, mages may choose to keep it in reserve as a defense mechanism (you pulled aggro after Noth blinked) or not use it at all (they like to randomly shoot at Gluth zombies). Even more aggravating, if you are very close to or above the tank in threat, popping MI will cause the images to instantly pull aggro, potentially doing Bad Things (think Malygos breath).
It's an edge case, but the edge cases are often the most interesting and useful to model.
|
|
|
|
|
01/12/09, 8:02 PM
|
#36
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
Originally Posted by Docjowles
One of the trickier things I can think of offhand is mirror image, as Manly alludes to. It does a small but noticeable amount of damage over the course of a fight, so if you are trying to go balls-out, you want to pop it during your all-cooldowns-blown burn phase. However, on some fights, mages may choose to keep it in reserve as a defense mechanism (you pulled aggro after Noth blinked) or not use it at all (they like to randomly shoot at Gluth zombies). Even more aggravating, if you are very close to or above the tank in threat, popping MI will cause the images to instantly pull aggro, potentially doing Bad Things (think Malygos breath).
It's an edge case, but the edge cases are often the most interesting and useful to model.
|
It's far more complicated to model non-min/max behavior, but you could have a priority that would pop MI if you pull aggro. It would be interesting to see if you could do more damage by staying below the tank in threat and using MI for extra damage during a safer time (i.e., later in the fight).
Here's an issue that makes priorities a little more complicated:
You have ability A that's cooled down now, and ability B that cools down in 2 seconds. B does 1.5 times the damage of A. Do you cast A or wait for B? What information do you need about A and B to be able to answer this question?
|
|
|
|
01/13/09, 5:43 AM
|
#37
|
|
Von Kaiser
Troll Mage
Bloodhoof (EU)
|
Human perception and experience always include the timeframe in these decisions. It's like Rawr with the fight length parameter, but it is relevant in all decision making points. This includes CD juggling, debuff times and estimated fight length left, perhaps also estimated time to live with known or guessed dmg-in.
Possibly make time-states for which you calculate weights with Priority and Attack parameters. Either that or have the timeframe as a priority or an attribute of a priority. The time-state with the heaviest weight should then be the winner of that rounds decision making.
In the above example you need to know whether you have time or resources (mana, rage, energy) to do something else in addition to A that ends up being more powerful than B. The goal I think is to gain maximum effect for desired action (dps, threat, heal) in the remaining time by utilizing all your resources to the fullest.
|
|
|
|
|
01/13/09, 9:34 AM
|
#38
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
Originally Posted by Redbeard
In the above example you need to know whether you have time or resources (mana, rage, energy) to do something else in addition to A that ends up being more powerful than B. The goal I think is to gain maximum effect for desired action (dps, threat, heal) in the remaining time by utilizing all your resources to the fullest.
|
This is clearly the case, but calculating the objective function (i.e., damage, threat, healing done) for every possible scenario is unacceptable. I'm trying to model the way a human makes decisions anyway, and we certainly don't do this type of evaluation while fighting.
|
|
|
|
01/13/09, 10:59 AM
|
#39
|
|
Banned
Blood Elf Death Knight
Stonemaul
|
I would think that the best, and possibly easiest way, would be to allow someone to set their abilities in a list for their priority.
Something simple like:
<Ability A>
<Ability B>
<Ability C>
...
<Ability G>
Or whatever....then have the simulation taking into account mana, regen, etc, etc...and start at the top "Is Ability A available?" If yes, then do <Ability A>, then go down the list. If the cooldown, or duration of the ability isn't up yet, then the answer would be "no" and it would go down to the next ability.
Cycling through these until OOM or the "fight" is "over".
it's the best way I can think - with an Affliction spec, it's now us Warlocks do things - start with the initial series of spells, then refresh things as they come up, rinse, repeat.
You can display associated threat levels after each rotation, etc, if you know the values....but your comment about how we don't do that type of evaluation (unless I misunderstand) while fighting, isn't wholly true. Something weird happens, and I find I'm about to take aggro from the tank (or whatever), I'm changing my rotation to lower my threat (as an example)....
My musings.
|
|
|
|
|
01/13/09, 11:02 AM
|
#40
|
|
Bald Bull
dedmonwakeen
Undead Priest
No WoW Account
|
Ullas,
I fail to grasp why the priority system has to be so complicated? Are you attempting to avoid creating custom conditionals for a subset of player abilities? In simulationcraft there is a class hierarchy to model player actions: Action, Spell/Attack, RogueAttack/ShamanAttack/ShamanSpell/etc, Sinister Strike, Rupture, Stormstrike, Lightning Bolt, etc. Each level represents a place to code more specific functionality and options. Yes, there are some actions that require sophisticated conditional logic, but most are pretty straight-forward.
I made a very early design decision in simulationcraft: I accepted the fact that I would not be able to own this code forever. I accepted the fact that I would likely need some help with the coding and a TON of help with oversight. This means that readability had to be my number one goal. It has cost me: It has hurt my performance. It has limited my flexibility. In some rare cases I've accepted a model that is not quite 100% accurate.
What am I trying to say? Don't create something so complicated that you scare off people who love WoW, but only have limited coding experience. Some of the most helpful contributions from the EJ community to simulationcraft have not been in the form of new code, but rather code reviews.
(edited for snarkiness)
Last edited by dedmonwakeen : 01/13/09 at 11:26 AM.
|
|
|
|
01/13/09, 12:04 PM
|
#41
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|

Originally Posted by Marthisdil
I would think that the best, and possibly easiest way, would be to allow someone to set their abilities in a list for their priority.
Something simple like:
<Ability A>
<Ability B>
<Ability C>
...
<Ability G>
Or whatever....then have the simulation taking into account mana, regen, etc, etc...and start at the top "Is Ability A available?" If yes, then do <Ability A>, then go down the list. If the cooldown, or duration of the ability isn't up yet, then the answer would be "no" and it would go down to the next ability.
Cycling through these until OOM or the "fight" is "over".
it's the best way I can think - with an Affliction spec, it's now us Warlocks do things - start with the initial series of spells, then refresh things as they come up, rinse, repeat.
You can display associated threat levels after each rotation, etc, if you know the values....but your comment about how we don't do that type of evaluation (unless I misunderstand) while fighting, isn't wholly true. Something weird happens, and I find I'm about to take aggro from the tank (or whatever), I'm changing my rotation to lower my threat (as an example)....
My musings.
|
I think you misunderstood what I was saying, or I was unclear. Redbeard, above, was talking about deciding what action to take "now", based on figuring the whole optimal sequence of actions from "now" until the end of the fight. This is like those amazing chess players who can see 20 moves ahead, and my response was that I don't believe players don't make decisions that way in this game. I think that they mostly just look at their cooldowns, their resources (mana/rage/energy/ruinic power/combo points/runes), their own health, the health of the boss, etc... I doubt most players think more than 10-15 seconds ahead, aside from waiting for key abilities to cool down.
I believe what you're describing fits my model above. You could create "Priorities" for
* Staying under tank threat
* Keeping your health above 60% via healthstone/drain life
* Keeping your important debuff(s) up (i.e., you keeping your malediction-amplified curse up may be more important than doing damage)
* Keeping your mana above 50% via lifetap/dark pact
* Doing damage

Originally Posted by dedmonwakeen
Ullas,
I fail to grasp why the priority system has to be so complicated? Are you attempting to avoid creating custom conditionals for a subset of player abilities? In simulationcraft there is a class hierarchy to model player actions: Action, Spell/Attack, RogueAttack/ShamanAttack/ShamanSpell/etc, Sinister Strike, Rupture, Stormstrike, Lightning Bolt, etc. Each level represents a place to code more specific functionality and options. Yes, there are some actions that require sophisticated conditional logic, but most are pretty straight-forward.
I made a very early design decision in simulationcraft: I accepted the fact that I would not be able to own this code forever. I accepted the fact that I would likely need some help with the coding and a TON of help with oversight. This means that readability had to be my number one goal. It has cost me: It has hurt my performance. It has limited my flexibility. In some rare cases I've accepted a model that is not quite 100% accurate.
|
I believe that this priority system needs to be more complicated than what you're using for simulationcraft for two reasons
1) I'm dealing with multiple players, attacking (eventually) multiple targets. If warlock A, B, and C need to collectively keep curses of elements and shadow up, and warlock A puts elements up, casting curse of elements becomes vastly less important for all three warlocks until the debuff starts to expire.
2) I want to model the death knight class properly. I don't believe that the concept of NOT spending a rune on ability A now, because ability B (a better choice) will be ready in the near future, can be modeled by anything less complex than what I have above. For example, if I currently have one unholy and one frost rune, and a blood rune cooling down in 2 seconds, I can either cast obliterate (consumes 1u1f) or take an autoattack swing and cast death and decay in 2 seconds (uses 1b1u1f).
If I have a simple list of abilities, and ask each one, in order of priority, if it's ready to use, there are two possible scenarios:
A: death and decay is a higher priority than obliterate
* Ask death and decay if it's ready (NO)
* Ask obliterate if it's ready (YES)
* Cast obliterate
B: obliterate is a higher priority than death and decay
* Ask obliterate if it's ready (YES)
* Cast obliterate
I believe that the simplistic list of abilities in priority order will NEVER cast death and decay, regardless of whether it's a better or worse spell than obliterate in a given situation.
3) I want to avoid forcing users to plug in a rotation they read somewhere on these forums, because that information is based on incomplete theorycrafting. There's no doubt that using spreadsheets for analysis is useful, but it fails to take many factors into account that I am attempting to model.
Originally Posted by dedmonwakeen
What am I trying to say? Don't create something so complicated that you scare off people who love WoW, but only have limited coding experience. Some of the most helpful contributions from the EJ community to simulationcraft have not been in the form of new code, but rather code reviews.
Oh..... and I like your sig. Heh.
|
As far as usability is concerned, one of the perks of using Java and Netbeans is I can throw together a slick "Create custom attack rotation" wizard in about 10% of the time it takes me to code up the mechanics of choosing an attack. No coding will be required in my software, unless you want to perform an optimization of some sort, where you run many simulations, adjusting parameters as you go. Even then, the code would only be making the adjustment, and telling the simulation to generate a new set of results.
I'm just making sure I have a model that fits every class well and MOST player behavior well, in the context of multiple raiders in multiple parties attacking multiple targets. Anything less complete has already been done, and is thus not worth doing again.
|
|
|
|
01/13/09, 1:16 PM
|
#42
|
|
Bald Bull
dedmonwakeen
Undead Priest
No WoW Account
|
Originally Posted by Ullas
I believe that this priority system needs to be more complicated than what you're using for simulationcraft for two reasons
1) I'm dealing with multiple players, attacking (eventually) multiple targets. If warlock A, B, and C need to collectively keep curses of elements and shadow up, and warlock A puts elements up, casting curse of elements becomes vastly less important for all three warlocks until the debuff starts to expire.
|
Ah, ok.... If you want to support multiple targets that certainly adds an order of magnitude in complexity. The simple priority scheme in SimulationCraft works fine for the multiple-players-single-target that it was designed for.
|
2) I want to model the death knight class properly. I don't believe that the concept of NOT spending a rune on ability A now, because ability B (a better choice) will be ready in the near future, can be modeled by anything less complex than what I have above. For example, if I currently have one unholy and one frost rune, and a blood rune cooling down in 2 seconds, I can either cast obliterate (consumes 1u1f) or take an autoattack swing and cast death and decay in 2 seconds (uses 1b1u1f).
|
Each player action inherits base conditionals such as: Is the cooldown up? Is the DoT still ticking? Is there sufficient resource? However, the custom conditionals that have been coded into some abilities were for precisely the type of scenario you describe. The main difference is that I only provide a discrete set of conditionals as opposed to the generic framework you have proposed that makes every possible piece of information available. I guess I'm just saying that there is a cost to complexity that is not readily measured. In my software experience, I've seen Feature-Frenzy eat up too many promising projects.......
My reference to code reviews was not really about people working up different action priority systems using your infrastructure, but reviews of the core code itself. I've found the EJ community to be a fantastic resource for fine-tuning the player models. Keeping the barrier to entry as low as possible without compromising on too many design goals should be something to strive for......
|
|
|
|
01/13/09, 1:47 PM
|
#43
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
Originally Posted by dedmonwakeen
Each player action inherits base conditionals such as: Is the cooldown up? Is the DoT still ticking? Is there sufficient resource? However, the custom conditionals that have been coded into some abilities were for precisely the type of scenario you describe. The main difference is that I only provide a discrete set of conditionals as opposed to the generic framework you have proposed that makes every possible piece of information available. I guess I'm just saying that there is a cost to complexity that is not readily measured. In my software experience, I've seen Feature-Frenzy eat up too many promising projects.......
|
So am I correct in understanding that any use of SimulationCraft at all requires coding of some sort?
Originally Posted by dedmonwakeen
My reference to code reviews was not really about people working up different action priority systems using your infrastructure, but reviews of the core code itself. I've found the EJ community to be a fantastic resource for fine-tuning the player models. Keeping the barrier to entry as low as possible without compromising on too many design goals should be something to strive for......
|
I think I've addressed this issue in two ways
1) I'm getting as much information as possible from the game client. I don't rely on users/developers to get the spells right, but instead I pull all 38,003 of them from the MPQ files. I believe that this dramatically reduces the upkeep of the program as talents/mechanics change
2) For the things I can't get from the game client (i.e., how the crit/hit/miss roll works), I have decided to make the mechanic as isolated as possible from the rest of the program. For example, insead of putting the code that does that roll on line 862 of my simulator.java file, I make a new class that does nothing but conduct that roll. Thus, getting a "code review" on that one file will be easy, since you don't have to deal with the non-wow-related workings of the software.
In response to the feature frenzy comment, I'm just trying to get a discussion going about this stuff. I won't get to implementing the attack rotation stuff for a while. The alpha test will most likely just let you set up a pre-determined rotation.
Last edited by Ullas : 01/13/09 at 1:54 PM.
|
|
|
|
01/13/09, 2:42 PM
|
#44
|
|
Bald Bull
dedmonwakeen
Undead Priest
No WoW Account
|
Originally Posted by Ullas
So am I correct in understanding that any use of SimulationCraft at all requires coding of some sort?
|
Yes, provided the definition of coding includes messing around with config files to specify gear points and action priorities and conditionals. I would not expect the normal user to actually change the core code given that it is written in C++. This speaks to the point I was making regarding limiting functionality: It is both "harder" and "easier" for the user. To add a conditional I do not support would be much harder given the language I chose. But to play with existing support for conditionals is quite easy given that it is just a simple string of the form: action1,conditional1,conditional2,.../action2,conditional3,conditional4,.../action3...
I think I've addressed this issue in two ways
1) I'm getting as much information as possible from the game client. I don't rely on users/developers to get the spells right, but instead I pull all 38,003 of them from the MPQ files. I believe that this dramatically reduces the upkeep of the program as talents/mechanics change
|
Wow! I had no idea that all of the ability mechanics could be extracted in such a fashion! That would be very cool. You will be able to infer poweer scaling (both AP and SP) ,the secondary effects of abilities such as procs, how talents affect abilities, how talents interact with each other (additive vs multiplicative vs ...), what buffs/debuffs overlap vs stack, etc etc? Even if that was the only thing you provided.... that alone would be worth the price of admission.
|
|
|
|
01/13/09, 3:10 PM
|
#45
|
|
I hate springtime
Draenei Shaman
Azjol-Nerub
|
Originally Posted by dedmonwakeen
Yes, provided the definition of coding includes messing around with config files to specify gear points and action priorities and conditionals. I would not expect the normal user to actually change the core code given that it is written in C++. This speaks to the point I was making regarding limiting functionality: It is both "harder" and "easier" for the user. To add a conditional I do not support would be much harder given the language I chose. But to play with existing support for conditionals is quite easy given that it is just a simple string of the form: action1,conditional1,conditional2,.../action2,conditional3,conditional4,.../action3...
|
My mistake, I thought you had to code up even basic spells (i.e., simulationcraft knows nothing about "chain lightning"). Using a config file certainly makes things much easier, and a typical analysis would just be reordering things in said file, not requiring a recompile.
Originally Posted by dedmonwakeen
Wow! I had no idea that all of the ability mechanics could be extracted in such a fashion! That would be very cool. You will be able to infer poweer scaling (both AP and SP) ,the secondary effects of abilities such as procs, how talents affect abilities, how talents interact with each other (additive vs multiplicative vs ...), what buffs/debuffs overlap vs stack, etc etc? Even if that was the only thing you provided.... that alone would be worth the price of admission.
|
This is certainly one of the more time consuming things to implement, as there's an INCREDIBLE amount of information about the spells. Just making the various objects that hold this data has taken me several days. When I set out on this project, I intended it to be a framework upon which people could build their own programs and take advantage of the library of spells, talents, characters, etc..., but this has slowed me down considerably. I don't necessarily need to know that spell of ID 55369 creates an item of type Mace and subtype Two-Handed Mace, but I figure the information is available so I may as well parse it. I even have positional info, like the radius of AoE spells, the # of nearby targets a spell can jump to (if applicable), etc... which would make adding positional information to simulations possible (don't get your hopes up, not coming anytime soon  )
Send me a PM if you're interested in learning about this stuff, and how you can add it to simulationcraft. A lot of the work involved in using this data is finding out what is what. Nothing is labeled, so you have to figure out what each column of numbers means via induction, and I would have no problem sharing that info with you.
|
|
|
|
|