[V/NPP] Equipment optimizer - scoring rules

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pav
    Administrator
    • Apr 2007
    • 793

    [V/NPP] Equipment optimizer - scoring rules

    I spent last two evenings writing myself an equipment optimizing script. It goes basically like this:

    - read up the character dump, parse powers from the item descriptions
    - create all possible permutation of items worn, in backpack and in your home
    - using user supplied scoring rules, score all permutations
    - display the highest scoring permutation

    It's written to understand NPP dumps, because that's the variant I happen to play lately, but this thread should be relevant to Vanilla too, as NPP is not that different to V when it comes to item features.

    I need your help with scoring rules. Basically, how many points to award to various slays, brands and resists. I ignore weapon dice for now. I also decided to skip artifact activations, as there's many and I generally don't use them anyway.

    At the moment I'm at this (there are some resists and slays missing, as I haven't encountered them yet in my current game):

    Code:
    	$scoring = array(
    		"stats" => array("STR" => 10, "INT" => 5, "WIS" => 5, "DEX" => 3, "CON" => 5, "CHR" => 1),
    		"slays" => array("orcs" => 10, "trolls" => 10, "evil" => 25, "undead" => 15, "animals" => 5, "giants" => 10, "dragons" => 20, "demons" => 15),
    		"brands" => array("acid" => 40, "poison" => 50, "frost" => 35, "fire" => 30),
    		"resists" => array("fire" => 25, "cold" => 25, "acid" => 30, "lightning" => 20, "disenchantment" => 20, "free action" => 100, "see invisible" => 50,
    			"fear" => 10, "blindness" => 40, "poison" => 80, "confusion" => 42, "light" => 10, "dark" => 10, "nether" => 40, "nexus" => 35, "hold life" => 25,
    			"shards" => 25),
    		"sustains" => array("STR" => 2, "INT" => 1, "WIS" => 1, "DEX" => 1, "CON" => 2, "CHR" => 0),
    		"blessed" => 1,
    		"blows" => 10,
    		"shooting power" => 15,
    		"glowing" => 0,
    		"damage" => 2,
    		"speed" => 10,
    		"telepathy" => 80,
    		"tohit" => 1,
    		"stealth" => 1,
    		"searching" => 1,
    		"slow digestion" => 2,
    		"feather falling" => 3,
    		);
    I will need several profiles for different classes to score stats differently.

    Now questions:

    - which elemental brand is most worthwile?

    - is speed really everything? I happen to be speed junkie. I'm awarding 10 score points per point of speed right now, which makes +10 speed match rbase.

    - essential resists should be scored high (rbase, FA), because kit without them should be disqualified. What about the high resists like shards and nexus? Hard for me to decide on scoring for them.

    - should I beef up damage? My +16 damage ring scores 32 now, which equals +6 in stats or +3 speed...

    So, what would you change on these scoring rules?
    See the elves and everything! http://angband.oook.cz
  • CJNyfalt
    Swordsman
    • May 2007
    • 289

    #2
    - Well, I don't remember how glowing works in V & NPP, but it does add to light radius in some variants. If that is true I would give it at least +5.
    - CHA, 0, nothing.
    -Speed is fine.
    - For brands, counting lines with contains IM_FIRE, IM_ELEC, ..., gives:
    IM_ELEC - 98 lines
    IM_POIS - 258 lines
    IM_FIRE - 149 lines
    IM_COLD - 177 lines
    IM_ACID - 86 lines
    So, for brands I would give poison - 10pts, fire & cold - 25-30pts, acid & lightning - 40-60pts

    Comment

    • pav
      Administrator
      • Apr 2007
      • 793

      #3
      Glowing adds +1 to light radius. Let's try +5 then.

      I gave +1 to charisma just to promote adornment amulets over empty slot

      As for brands, counting monsters which resist is an interesting approach, but I'd also like to include the damage multiplier. Wonder what these are in NPP... +10 for poison brand seems to shabby.
      See the elves and everything! http://angband.oook.cz

      Comment

      • pav
        Administrator
        • Apr 2007
        • 793

        #4
        Sample output:
        Code:
        33 items
        27648 combinations considered
        best score 1042 combo 0
        best score 1064 combo 4
        best score 1067 combo 84
        best score 1070 combo 2308
        Take off a Ring of Damage (+17)
        Take off a Metal Cap of Telepathy [3,+8]
        Wield a Ring of Resist Nether
        Wield The Iron Helm 'Holhenneth' [5,+10] (+2)
        +2 stats[WIS]
        +2 stats[INT]
        -17 damage
        Losing telepathy
        Gaining resists[nether]
        +2 searching
        See the elves and everything! http://angband.oook.cz

        Comment

        • andrewdoull
          Unangband maintainer
          • Apr 2007
          • 872

          #5
          Originally posted by pav
          I spent last two evenings writing myself an equipment optimizing script. It goes basically like this:

          - read up the character dump, parse powers from the item descriptions
          - create all possible permutation of items worn, in backpack and in your home
          - using user supplied scoring rules, score all permutations
          - display the highest scoring permutation

          It's written to understand NPP dumps, because that's the variant I happen to play lately, but this thread should be relevant to Vanilla too, as NPP is not that different to V when it comes to item features.

          I need your help with scoring rules. Basically, how many points to award to various slays, brands and resists. I ignore weapon dice for now. I also decided to skip artifact activations, as there's many and I generally don't use them anyway.

          At the moment I'm at this (there are some resists and slays missing, as I haven't encountered them yet in my current game):

          Code:
              $scoring = array(
                  "stats" => array("STR" => 10, "INT" => 5, "WIS" => 5, "DEX" => 3, "CON" => 5, "CHR" => 1),
                  "slays" => array("orcs" => 10, "trolls" => 10, "evil" => 25, "undead" => 15, "animals" => 5, "giants" => 10, "dragons" => 20, "demons" => 15),
                  "brands" => array("acid" => 40, "poison" => 50, "frost" => 35, "fire" => 30),
                  "resists" => array("fire" => 25, "cold" => 25, "acid" => 30, "lightning" => 20, "disenchantment" => 20, "free action" => 100, "see invisible" => 50,
                      "fear" => 10, "blindness" => 40, "poison" => 80, "confusion" => 42, "light" => 10, "dark" => 10, "nether" => 40, "nexus" => 35, "hold life" => 25,
                      "shards" => 25),
                  "sustains" => array("STR" => 2, "INT" => 1, "WIS" => 1, "DEX" => 1, "CON" => 2, "CHR" => 0),
                  "blessed" => 1,
                  "blows" => 10,
                  "shooting power" => 15,
                  "glowing" => 0,
                  "damage" => 2,
                  "speed" => 10,
                  "telepathy" => 80,
                  "tohit" => 1,
                  "stealth" => 1,
                  "searching" => 1,
                  "slow digestion" => 2,
                  "feather falling" => 3,
                  );
          I will need several profiles for different classes to score stats differently.

          Now questions:

          - which elemental brand is most worthwile?
          I can add code to Angband relatively easily to compute the effectiveness of each slay in isolation. In Unangband, it generates the following table (note the actual values will be completely different for Angband or NPPAngband):

          Spoiler File -- Relative Slay Power (0.6.2)

          Note: 1000 power equals no benefit

          Slay Power
          ------------------------------------- -----
          Slay Nature 1922
          Brand Holy 2251
          Slay Undead 1288
          Slay Demon 1107
          Slay Orc 1076
          Slay Troll 1043
          Slay Giant 1108
          Slay Dragon 1286
          Execute Dragon 1572
          Execute Demon 1215
          Execute Undead 1576
          Brand Poison 1725
          Brand Acid 2284
          Brand Elec 2170
          Brand Fire 2481
          Brand Cold 1825
          Brand Lite 1327
          Brand Dark 2535
          Slay Man 1179
          Slay Elf 1303
          Slay Dwarf 1028

          This is going to be used for the new artifact code and will just be a side effect of this code (but a useful one for game balancing purposes). So you'll be able to get a more concrete values when that goes in.

          In the meantime you could patch the existing Chris Carr/Robertson randart.c into a version of Angband it was designed for in order to get the same table produced. You'll need to enable logging in the randart.c file.

          - is speed really everything? I happen to be speed junkie. I'm awarding 10 score points per point of speed right now, which makes +10 speed match rbase.

          - essential resists should be scored high (rbase, FA), because kit without them should be disqualified. What about the high resists like shards and nexus? Hard for me to decide on scoring for them.

          - should I beef up damage? My +16 damage ring scores 32 now, which equals +6 in stats or +3 speed...

          So, what would you change on these scoring rules?
          I would also recommend having a look at the Angband borg code, which basically implements the same thing.

          Note the borg, not being a human player, undoubtedly uses different weightings, but it'll be a good guide.

          Andrew
          The Roflwtfzomgbbq Quylthulg summons L33t Paladins -more-
          In UnAngband, the level dives you.
          ASCII Dreams: http://roguelikedeveloper.blogspot.com
          Unangband: http://unangband.blogspot.com

          Comment

          • Chris Wesling
            Rookie
            • Apr 2007
            • 17

            #6
            Originally posted by pav
            Sample output:
            Code:
            33 items
            27648 combinations considered
            best score 1042 combo 0
            best score 1064 combo 4
            best score 1067 combo 84
            best score 1070 combo 2308
            Take off a Ring of Damage (+17)
            Take off a Metal Cap of Telepathy [3,+8]
            Wield a Ring of Resist Nether
            Wield The Iron Helm 'Holhenneth' [5,+10] (+2)
            +2 stats[WIS]
            +2 stats[INT]
            -17 damage
            Losing telepathy
            Gaining resists[nether]
            +2 searching
            Personally, I wouldn't give up telepathy for nether resists unless I was running into a lot of nether breathers. You might want to give telepathy a boost.

            Comment

            • pav
              Administrator
              • Apr 2007
              • 793

              #7
              Originally posted by Chris Wesling
              Personally, I wouldn't give up telepathy for nether resists unless I was running into a lot of nether breathers. You might want to give telepathy a boost.
              Neither would I. I zeroed the weight of telepathy just for the sake of taking the sample output.
              See the elves and everything! http://angband.oook.cz

              Comment

              Working...
              😀
              😂
              🥰
              😘
              🤢
              😎
              😞
              😡
              👍
              👎