Page 12 of 34 FirstFirst ... 2 10 11 12 13 14 22 ... LastLast
Results 111 to 120 of 334
  1. #111
    Player
    pandabearcat's Avatar
    Join Date
    Sep 2013
    Posts
    1,517
    Character
    Alizebeth Bequin
    World
    Brynhildr
    Main Class
    Dancer Lv 90
    Yep.

    So basically each crit rating gives between 0.0001977 and 0.0001749 crit (avg 0.0001863). This is pretty huge variance.

    What you really want is to be able to discriminate between 657 rating and 658 rating.

    To do that, you need a variance less than the avg rating diff, which 0.0001863. Which means you need something on the order of 10 million trials =DDDDDD

    EDIT: oops I hit my post cap.

    So here is the grammar right now. Its kinda really ugly? I'm going to have to see if it has any conflicts (probably)...maybe I can get an intern to do this for me.

    Here is the FFscript grammar.

    Its really bad right now. I need to resolve a lot of conflicts before it can be used, and I'm lazy.

    Maybe I can get a college intern to do it for me.

    Code:
                 * script :== setup precast gcd ogcd
                 * setup  :== "[SETUP]" setupStatements
                 * setupStatements :== setupStatement setupStatements | .
                 * setupStatement  :== actorAdd | varAssign
                 * actorAdd :== actorList "+=" string
                 * actorList :== "players" | "targets"
                 * varAssign :== var "=" val
                 * var :== string varb
                 * varb :== "." string varb | .
                 * val :== number | string
                 * precast :== "[PRECAST]" actionStatements
                 * gcd :== "[GCD]" actionStatements
                 * ogcd :== "[OGCD]" actionStatements
                 * actionStatements :== actionStatement actionStatements | .
                 * actionStatement :== "(" conditionals ")" "{" actions "}"
                 * conditionals :== conditional conditionalb | .
                 * conditionalb :== "&" conditional conditionalb | .
                 * conditional :== boolVar test number | "!" boolVar | boolVar
                 * boolVar :== string boolVarb
                 * boolVarb :== "." string boolVarb | .
                 * test :== ">" | "<" | ">=" | "<=" | "==" | "!="
                 * actions :== string actionb | .
                 * actionb :== "," string actionb | .
    (0)
    Last edited by pandabearcat; 06-24-2015 at 12:20 AM.

  2. #112
    Player
    Viridiana's Avatar
    Join Date
    Mar 2011
    Posts
    3,481
    Character
    Aria Placida
    World
    Lamia
    Main Class
    Ninja Lv 88
    Quote Originally Posted by pandabearcat View Post
    To do that, you need a variance less than the avg rating diff, which 0.0001863. Which means you need something on the order of 10 million trials =DDDDDD
    /hate

    Well, I guess I can leave my comp on overnight. Bleh. Good news is that IR doesn't seem to affect the crit damage range, which is basically what we expected. Which is good because I somehow got it in my head that a buffed Sneak Attack would give really accurate numbers on how much it boosts crit damage. . .
    (0)

  3. #113
    Player
    pandabearcat's Avatar
    Join Date
    Sep 2013
    Posts
    1,517
    Character
    Alizebeth Bequin
    World
    Brynhildr
    Main Class
    Dancer Lv 90
    Whee, the grammar works.

    I opted for grammar simplicity and to do more of the semantic work in the backend, instead of trying to parse specific keywords.

    As far as I can tell the grammar is correct. Next step is the semantic parsing and attaching actions to nonterminals.

    Here is the full grammar:

    Code:
    actionb  (Nullable) 
       actionb -> , string actionb 
       actionb -> 
    actions  (Nullable) 
       actions -> string actionb 
       actions -> 
    actionStatement
       actionStatement -> ( conditionals ) { actions } 
       actionStatement -> comment 
    actionStatement+
       actionStatement+ -> actionStatement+ actionStatement 
       actionStatement+ -> actionStatement 
    actionStatements  (Nullable) 
       actionStatements -> 
       actionStatements -> actionStatement+ 
    actorAdd
       actorAdd -> actorList += string 
    actorList
       actorList -> *players 
       actorList -> *targets 
    boolVar
       boolVar -> string boolVarb 
    boolVarb  (Nullable) 
       boolVarb -> . string boolVarb 
       boolVarb -> 
    conditional
       conditional -> boolVar test number 
       conditional -> ! boolVar 
       conditional -> boolVar 
    conditionalb  (Nullable) 
       conditionalb -> & conditional conditionalb 
       conditionalb -> 
    conditionals  (Nullable) 
       conditionals -> conditional conditionalb 
       conditionals -> 
    gcd
       gcd -> [GCD] actionStatements 
    ogcd
       ogcd -> [OGCD] actionStatements 
    precast
       precast -> [PRECAST] actionStatements 
    script
       script -> setup precast gcd ogcd 
    script'
       script' -> script EOF 
    setup
       setup -> [SETUP] setupStatements 
    setupStatement
       setupStatement -> actorAdd 
       setupStatement -> varAssign 
       setupStatement -> comment 
    setupStatement+
       setupStatement+ -> setupStatement+ setupStatement 
       setupStatement+ -> setupStatement 
    setupStatements  (Nullable) 
       setupStatements -> 
       setupStatements -> setupStatement+ 
    test
       test -> == 
       test -> != 
       test -> < 
       test -> > 
       test -> <= 
       test -> >= 
    val
       val -> number 
       val -> string 
       val -> stringLit 
    var
       var -> string varb 
    varAssign
       varAssign -> var = val 
    varb  (Nullable) 
       varb -> . string varb 
       varb ->
    Here is a sample DRG rotation, not optimal, but it works.

    Code:
    [SETUP]
    #sets up an alias for our player
    *players+=p1
    #sets up an alias for our target
    *targets+=t1
    
    #load skills and traits
    p1.class=drg
    
    # setup attributes
    # nonlisted attributes are assumed to be 0
    p1.attr.str=500
    p1.attr.dex=200
    p1.attr.sks=400
    
    # setup server variables
    sim.duration=600
    # execute is duration from end of sim
    sim.execute=200
    
    # setup diagnostic or no - diagnostic runs 1 run with log output, for testing your rotation
    sim.diagnostic=true
    
    # otherwise setup sim trials
    sim.trials=10000
    
    # i/o
    sim.output="./output.txt"
    
    [PRECAST]
    # place a sequential list of ogcd/gcd actions here
    # any action that is offensive will begin the sim timer
    # however, you may place as many actions as you like
    # if you have a set opener rotation you wish to follow, enter it here
    # and the [GCD] actionlists will follow once the action queue is complete
    (){x_potion,blood_for_blood,heavy_thrust}
    
    [GCD]
    # remaining is set to 0 if an aura does not exist
    # you do not need to test for both exists and remaining
    # if an action is in the queue, no further actions will be run
    # if a condition is satisfied, the sim will attempt to cast the action
    # if an action succeeds, no further actions will be run until the queue is empty
    # the only supported boolean operator is &
    # to do | actions, use multiple action lines
    (p1.aura.heavy_thrust.remaining<5.0){heavy_thrust}
    (t1.aura.chaos_thrust.remaining<12.0){impulse_drive,disembowel,chaos_thrust}
    (t1.aura.phlebotomize<5.0){phlebotomize}
    (){true_thrust,vorpal_thrust,full_thrust}
    
    [OGCD]
    # you'll need this unless you want to constantly clip GCDs
    # actionlist execution stops as soon as a successful action is entered
    # blank actions are automatically successful
    # be very careful queueing oGCDs. They will automatically be run in sequence, without regard for clipping into a gcd
    (p1.nextgcd<1.0){}
    (){blood_for_blood}
    (p1.nextaction==full_thrust){life_surge}
    (!p1.cd.jump){power_surge}
    (){jump}
    (){dragonfire_dive}
    (){leg_sweep}
    (0)
    Last edited by pandabearcat; 06-24-2015 at 02:04 AM.

  4. #114
    Player
    pandabearcat's Avatar
    Join Date
    Sep 2013
    Posts
    1,517
    Character
    Alizebeth Bequin
    World
    Brynhildr
    Main Class
    Dancer Lv 90
    Updated the grammar today. I realized I was trying to be too "generic" and ended up writing a kind of lazy grammar that is technically very extensible, but put too much work into the backend semantic parsing.

    I rewrote the grammar to be much longer and restrictive, which allows me to also write the backend quicker (once I figure out how...).

    The new grammar also supports multiple actors, which hilariously the sim only half-supports (it doesn't support multiple stacks of the same aura, nor does it support cross class buffs). Oh well. At least the future looks bright.

    Irony's documentation sucks. I need to figure out how to overwrite the AST actions.

    New grammar:

    Code:
    action
       action -> string 
    actionBlock
       actionBlock -> precast 
       actionBlock -> gcd 
       actionBlock -> ogcd 
    actionBlock+
       actionBlock+ -> actionBlock+ actionBlock 
       actionBlock+ -> actionBlock 
    actionBlocks  (Nullable) 
       actionBlocks -> 
       actionBlocks -> actionBlock+ 
    actions  (Nullable) 
       actions -> action 
       actions -> action , actions 
       actions -> 
    actionStatement
       actionStatement -> ( conditionals ) { actions } 
       actionStatement -> comment 
    actionStatement+
       actionStatement+ -> actionStatement+ actionStatement 
       actionStatement+ -> actionStatement 
    actionStatements  (Nullable) 
       actionStatements -> 
       actionStatements -> actionStatement+ 
    actionVar
       actionVar -> nextaction 
    actorListStatement
       actorListStatement -> playersAdd 
       actorListStatement -> targetsAdd 
    actorStatement
       actorStatement -> actor . actorVar = val 
    actorVar
       actorVar -> class 
       actorVar -> attrVar 
       actorVar -> autoattack 
       actorVar -> auraVar 
       actorVar -> gcdVar 
       actorVar -> cdVar 
       actorVar -> actionVar 
    attribute
       attribute -> str 
       attribute -> dex 
       attribute -> sks 
       attribute -> det 
       attribute -> chr 
    attrVar
       attrVar -> attr . attribute 
    auraVar
       auraVar -> aura . string . remaining 
       auraVar -> aura . string 
    boolVar
       boolVar -> actor . actorVar 
       boolVar -> sim . simVar 
    cdVar
       cdVar -> cd . string 
    conditional
       conditional -> boolVar 
       conditional -> notBoolVar 
       conditional -> testVar 
    conditionals  (Nullable) 
       conditionals -> conditional 
       conditionals -> conditional & conditionals 
       conditionals -> 
    gcd
       gcd -> [ actor . GCD ] actionStatements 
    gcdVar
       gcdVar -> lastgcd 
       gcdVar -> nextgcd 
    notBoolVar
       notBoolVar -> ! boolVar 
    ogcd
       ogcd -> [ actor . OGCD ] actionStatements 
    playersAdd
       playersAdd -> *players+= actor 
    precast
       precast -> [ actor . PRECAST ] actionStatements 
    script
       script -> setup actionBlocks 
    script'
       script' -> script EOF 
    setup
       setup -> [SETUP] setupStatements 
    setupStatement
       setupStatement -> actorStatement 
       setupStatement -> actorListStatement 
       setupStatement -> simStatement 
       setupStatement -> comment 
    setupStatement+
       setupStatement+ -> setupStatement+ setupStatement 
       setupStatement+ -> setupStatement 
    setupStatements  (Nullable) 
       setupStatements -> 
       setupStatements -> setupStatement+ 
    simStatement
       simStatement -> sim . simVar = val 
    simVar
       simVar -> duration 
       simVar -> execute 
       simVar -> diagnostic 
       simVar -> trials 
       simVar -> output 
    targetsAdd
       targetsAdd -> *targets+= actor 
    test
       test -> == 
       test -> != 
       test -> < 
       test -> <= 
       test -> > 
       test -> >= 
    testVar
       testVar -> boolVar test val 
    val
       val -> boolean 
       val -> number 
       val -> string 
       val -> stringLit
    New sample script:

    Code:
    [SETUP]
    #sets up an alias for our player
    *players+=p1
    #sets up an alias for our target
    *targets+=t1
    
    #load skills and traits
    p1.class = drg
    
    # setup attributes
    # nonlisted attributes are assumed to be 0
    p1.attr.str=500
    p1.attr.dex=200
    p1.attr.sks=400
    
    # setup server variables
    sim.duration=600
    # execute is duration from end of sim
    sim.execute=200
    
    # setup diagnostic or no - diagnostic runs 1 run with log output, for testing your rotation
    sim.diagnostic=true
    
    # otherwise setup sim trials
    sim.trials=10000
    
    # i/o
    sim.output="./output.txt"
    
    [p1.PRECAST]
    # place a sequential list of ogcd/gcd actions here
    # any action that is offensive will begin the sim timer
    # however, you may place as many actions as you like
    # if you have a set opener rotation you wish to follow, enter it here
    # and the [GCD] actionlists will follow once the action queue is complete
    (){x_potion,blood_for_blood,heavy_thrust}
    
    [p1.GCD]
    # remaining is set to 0 if an aura does not exist
    # you do not need to test for both exists and remaining
    # if an action is in the queue, no further actions will be run
    # if a condition is satisfied, the sim will attempt to cast the action
    # if an action succeeds, no further actions will be run until the queue is empty
    # the only supported boolean operator is &
    # to do | actions, use multiple action lines
    # blank conditionals are always true
    (p1.aura.heavy_thrust.remaining<5.0){heavy_thrust}
    (t1.aura.chaos_thrust.remaining<12.0){impulse_drive,disembowel,chaos_thrust}
    (t1.aura.phlebotomize<5.0){phlebotomize}
    (){true_thrust,vorpal_thrust,full_thrust}
    
    [p1.OGCD]
    # you'll need this unless you want to constantly clip GCDs
    # actionlist execution stops as soon as a successful action is entered
    # blank actions are automatically successful
    (p1.nextgcd<1.0){}
    (){blood_for_blood}
    (p1.nextaction==full_thrust){life_surge}
    (!p1.cd.jump){power_surge}
    (){jump}
    (){dragonfire_dive}
    (){leg_sweep}
    (0)

  5. #115
    Player
    Dervy's Avatar
    Join Date
    Aug 2013
    Posts
    1,537
    Character
    Dervy Yakimi
    World
    Ragnarok
    Main Class
    Lancer Lv 80
    I posted this in the DRG thread, but it would serve better here:

    Also for any of you wondering how SS scales with GCD, it's now 0.00037735 per point of SS. So you can do 2.5-((SS-354)*0.00037735)) to calculate your GCD. Alternatively, you can use this formula 2.5-(0.01*(SS-354)/26.5)) which should do the exact same thing, just a lot more accurately.
    (1)

  6. #116
    Player
    Junified's Avatar
    Join Date
    Dec 2013
    Location
    San Diego, CA
    Posts
    76
    Character
    Daoko Girl
    World
    Gilgamesh
    Main Class
    Miner Lv 50
    Quote Originally Posted by pandabearcat View Post
    Hah, what a great language.

    Thank you for the research. I'll work on it more today and see if it won't be too hard to get at least a parser going.

    Junified, the most useful stuff I need is animation delays. Without that data pretty much every oGCD class is going to have a flawed sim. It isn't too necessary to be exactly precise, but we need to be precise enough that if someone is trying to stuff 2 oGCDs into a GCD that it will delay their next attack some.

    So basically I need the animations delays of every ability, GCD and oGCD.

    At some point we also need updated damage formulas but that is really grindy afk work so maybe talk to Dervy or Viridiana.
    Ok I'll have to get on that I have a working parser atm and would you want video for reference for the animation timing?
    (0)
    Last edited by Junified; 06-25-2015 at 05:26 PM.

  7. #117
    Player
    MrYaah's Avatar
    Join Date
    Jan 2015
    Posts
    109
    Character
    Mr Yaah
    World
    Gilgamesh
    Main Class
    Archer Lv 60
    Quote Originally Posted by Dervy View Post
    I posted this in the DRG thread, but it would serve better here:

    Also for any of you wondering how SS scales with GCD, it's now 0.00037735 per point of SS. So you can do 2.5-((SS-354)*0.00037735)) to calculate your GCD. Alternatively, you can use this formula 2.5-(0.01*(SS-354)/26.5)) which should do the exact same thing, just a lot more accurately.
    Dervy you're a wonderful person. <3
    (0)

  8. #118
    Player
    pandabearcat's Avatar
    Join Date
    Sep 2013
    Posts
    1,517
    Character
    Alizebeth Bequin
    World
    Brynhildr
    Main Class
    Dancer Lv 90
    HOLY BUTTS finally found documentation (rather, examples) of how the AST node setup works.

    Now need to go through the grindy process of creating a node for each nonterminal.

    My god we might actually be able to release on friday. If I do, I expect someone to come help get my char to 60, cause I haven't had any time to play >.<

    EDIT: work has begun. I'd forgotten how much more work semantic is than syntax parsing. Hwarrgagahblargh.
    (0)
    Last edited by pandabearcat; 06-26-2015 at 03:08 AM.

  9. #119
    Player
    Viridiana's Avatar
    Join Date
    Mar 2011
    Posts
    3,481
    Character
    Aria Placida
    World
    Lamia
    Main Class
    Ninja Lv 88
    So, just as a partial update. . .

    Still collecting swings at 657 crit, because seriously screw margins of error, but I have a fun data piece on how much that boosts crit damage by. Non-critical damage of 500 potency SA with 689 AP, 260 Det, and 59 WD with Venom, B4B, and Dancing Edge up is 1793-1982. I don't have the full critical spread yet, but I do have a 3012 data point, which means at least a 1.5196~ multiplier for ~12% crit rate. And mind you, 3012 might be a few points shy of max, too. . .
    (0)

  10. #120
    Player
    Dervy's Avatar
    Join Date
    Aug 2013
    Posts
    1,537
    Character
    Dervy Yakimi
    World
    Ragnarok
    Main Class
    Lancer Lv 80
    Just to make sure I'm not being dumb (the heat makes me rather dumb and incapable of comprehension), 12% Chance with 1.5196% multiplier at base 354 Critical Hit Rating, right?
    (0)

Page 12 of 34 FirstFirst ... 2 10 11 12 13 14 22 ... LastLast