Maintenance for the week of December 22:
• NA megaservers for maintenance – December 22, 4:00AM EST (9:00 UTC) - 8:00AM EST (13:00 UTC)
• EU megaservers for maintenance – December 22, 4:00AM EST (9:00 UTC) - 8:00AM EST (13:00 UTC)

Model of the ESO Combat Engine

BrokenGameMechanics
BrokenGameMechanics
✭✭✭✭
I've been playing on and off with a software design approach that facilitates the creation of a model of the ESO combat engine. Essentially a parallel implementation of the core engine.

Clearly it is very difficult to build a highly scalable, yet rigorous to specification, engine. However, by not having to deal with massive real-time scaling performance, I believe one should be able to put together a relatively bug free, compact, clear, rigorous implementation of the combat rules. A great deal of it is out there reversed engineered and documented in postings and spreadsheets.

The Phase 1 target is to implement the core engine as follows:
  1. Implement a script system for configuring a build.
  2. Implement a script system for defining skills and passives and their effects.
  3. Implement all existing classes, enchants, skills, attacks, buffs, debuffs and passives in the script notation.
  4. A compiler & interpreter which takes the scripts and builds a combat engine based on the declarative definitions.
  5. A script engine for scripting rotations.
  6. A simulation engine capable of playing a scripted build and rotation against a scripted build and rotation.
  7. A output log of every substantive event in a simulation run.
  8. Analysis utilities to summarize the statistics from the simulation run's log.

Phase 1 - Direct goals achieved would include:
  1. Definitive, irrefutable evidence that a given build-rotation is better than a different build-rotation against a particular defined "static" dummy build. The effectiveness of a build is a function of the target, however, for a static defined target, for any two builds, the expectation over many simulations should show one build-rotation is better than or equal to another build-rotation.
  2. Naive support for two build-rotation scripts to fight head-to-head.
  3. MvN static simulations in a single run. i.e. Given M different builds (e.g. identical builds differing only in sharpened, precise or nirnhoned weapons) and N different targets, glass target, tank target, shielding target, high crit resist target, high resistance target see how each build-rotation did against each of the target types in a single run.

Phase 1 - Secondary side effect goals achieved include:
  1. Definitively find and document bugs in ESO's core combat calculations and skill implementations.
  2. Act as some sort of reference for "correct" behavior.
  3. Act as a source of quantified data for many of the debates on combat, bugs, corner cases and builds.
  4. Act as a source of quantified data regarding "balance".

Note that the Engine built for Phase I is one built to execute what it is supposed to do (the specification) and NOT what the current ESO engine does (reproduce the bugs). There should be some useful milestones capabilities along the way to completing Phase I.

Phase II

IF Phase I is completed successfully, the engine would be flexible enough to model in a simplified fashion the following:
  1. AS-IS model - A model of the current behavior of the current ESO release, bugs and all.
  2. SHOULD-BE model - The Phase I model, an implementation based on the specification (notes, documentation etc).
  3. COULD-BE model - Hypothetical variation engines that address imbalances, modified skill lines, alternative approaches etc.
  4. EXTENDED model - Play with designing a new "class" with passives and an associated skill lines defined via the DSL script.

Personally I'm only interested at the moment in modified engines that address the egregious and growing imbalance issues.

Phase III

With a (simplified) core combat engine implemented a subsequent, simple, keyboard event driven (a la the PC version) implementation with overhead view 2-d "stick figures" fighting would be possible. Even given the design priority of correct over real time massive scalable, I think "real time" combat between 3v3 or even 5v5 across a network will be possible with minimal compromise.[1]

[1] In the sense the engine is deterministic in it's behavior for combat events that happen-before and at-the-same-time.








  • SirAndy
    SirAndy
    ✭✭✭✭✭
    ✭✭✭✭✭
    ... I think "real time" combat between 3v3 or even 5v5 across a network will be possible with minimal compromise ...

    Not if you try to emulate ZOS's client/server "netcode" ...
    lol-2.gif
  • BrokenGameMechanics
    BrokenGameMechanics
    ✭✭✭✭
    SirAndy wrote: »
    ... I think "real time" combat between 3v3 or even 5v5 across a network will be possible with minimal compromise ...

    Not if you try to emulate ZOS's client/server "netcode" ...
    lol-2.gif

    Goal is to correctly implement the combat rules. Zero desire to implement compatibility at the "netcode" packet level. I assume given the available plugins on PC it has been reversed engineered. Anyone know if it is documented online? Now I'm a bit curious ...
    Edited by BrokenGameMechanics on March 17, 2019 12:06AM
  • SirAndy
    SirAndy
    ✭✭✭✭✭
    ✭✭✭✭✭
    I don't recall ever seeing anything documented online, it has changed a lot since beta, mostly attempts to obfuscate data that is still generated by the client as "truth" and sent to the server.
    Unfortunately ZOS never completely got rid of the "trusted client" model.

    Anywhos, a good memory scanner combined with Wireshark is really all you need to peel that onion ...
    type.gif
  • Reorx_Holybeard
    Reorx_Holybeard
    ✭✭✭✭✭
    I've been wanting to add a "combat simulator" to our https://en.uesp.net/wiki/Special:EsoBuildEditorhttps://en.uesp.net/wiki/Special:EsoBuildEditor but it is an incredibly difficult/complex and time consuming job so I haven't gotten anywhere with it other than thinking about it.
    • Just getting to the stage where you can get all the character's stats from armor, skills and buffs is a relatively non-trivial task. The equations used are rarely simple and there is a lot of special cases to consider.
    • Parsing and getting accurate skill tooltips is an additional step which makes things even more complex. We don't have any of the back-end skill data so we're left with estimating skill coefficients and parsing tooltip texts. This "sort of" works but to get 100% accuracy you almost need to manually hard code each skill separately.
    • So our build editor is at this stage but you're still pretty far from being able to get a realistic combat simulator working. There's a lot of damage skills/effects that haven't been parsed in addition to all the combat effects and procs. On top of that would be resource source/drain calculations which I haven't added in the editor other than basic regneration. You'd basically have to go through all sets/skills and manually handle each one.

    If you're interested you should be able to use the build editor data as a source and add Javascript for a combat simulator from that although it will be a lot more than just adding up damage numbers.
    Reorx Holybeard -- NA/PC
    Founder/Admin of www.uesp.net -- UESP ESO Guilds
    Creator of the "Best" ESO Build Editor
    I'm on a quest to build the world's toughest USB drive!
Sign In or Register to comment.