Skip to content

Conversation

@FominArtmind
Copy link

@FominArtmind FominArtmind commented Feb 26, 2024

Motivation: it's great to extend loot system with grades of the item, that is, something like "Normal", "Exceptional", "Elite" like in Diablo 2. Such configuration can provide the possibility to make:
a) some additional layer of "rarity", that is, for example, it's already hard to get some great epic/legendary item with particular stats, but there are Exceptional/Elite versions of the same item that are even more hard to get
b) early game items to be more relevant in mid-late game, that is, exceptional version of armor can have armor comparable to the armor of the following grade, elite - to the armor of two grades higher etc. That is more important when there is a big list of unique legendary items, each with some very specific properties, and the player would like to have some particular item fitting into their playstyle but this item becomes obsolete due to its plain phys dmg or armor stats.

Example of usage (loottables.json):

    {
      "Object": "TreasureChest_meadows",
      "Drops": [ [0, 35], [1, 50], [2, 10], [3, 5] ],
      "Loot": [
        { "Item": "Tier0Tools",      "Weight": 6, "Rarity": [ 80, 15, 0, 5 ], "Quality": [700, 27, 1] },
        { "Item": "AxeFlint",        "Weight": 2, "Rarity": [ 80, 15, 0, 5 ], "Quality": [700, 27, 1] },
        { "Item": "Tier0Everything", "Weight": 8, "Rarity": [ 80, 15, 3, 2 ], "Quality": [700, 27, 1] },
        { "Item": "Tier1Everything", "Weight": 2, "Rarity": [ 80, 15, 4, 1 ], "Quality": [700, 27, 1] },
        { "Item": "RunestoneMagic",  "Weight": 1 }
      ],

Example of usage (legendaries.json):

    {
        "ID": "JourneyKnife",
        "Name": "$mod_epicloot_l_journey_knife",
        "Description": "$mod_epicloot_l_journey_knife_desc",
        "Requirements": {
            "AllowedItemNames": [ "$item_knife_flint", "$item_knife_chitin" ]
        },
        "SelectionWeight": 5000,
        "GuaranteedEffectCount": 4,
        "GuaranteedMagicEffects": [
            { "Type": "ModifyAttackSpeed", "Values": { "MinValue": 35, "MaxValue": 35, "Increment": 1 } },
            { "Type": "AddMovementSkills", "Values": { "MinValue": 17, "MaxValue": 21, "Increment": 1 } },
            { "Type": "ModifyMovementSpeed", "Values": { "MinValue": 7, "MaxValue": 9, "Increment": 1 } }, 
            { "Type": "ModifyJumpStaminaUse", "Values": { "MinValue": 30, "MaxValue": 40, "Increment": 1 } }
        ],
        "GuaranteedMagicEffectsExceptional": [
            { "Type": "ModifyAttackSpeed", "Values": { "MinValue": 50, "MaxValue": 50, "Increment": 1 } },
            { "Type": "AddMovementSkills", "Values": { "MinValue": 23, "MaxValue": 27, "Increment": 1 } },
            { "Type": "ModifyMovementSpeed", "Values": { "MinValue": 10, "MaxValue": 12, "Increment": 1 } }, 
            { "Type": "ModifyJumpStaminaUse", "Values": { "MinValue": 40, "MaxValue": 50, "Increment": 1 } }
        ],
        "GuaranteedMagicEffectsElite": [
            { "Type": "ModifyAttackSpeed", "Values": { "MinValue": 65, "MaxValue": 65, "Increment": 1 } },
            { "Type": "AddMovementSkills", "Values": { "MinValue": 29, "MaxValue": 33, "Increment": 1 } },
            { "Type": "ModifyMovementSpeed", "Values": { "MinValue": 13, "MaxValue": 15, "Increment": 1 } }, 
            { "Type": "ModifyJumpStaminaUse", "Values": { "MinValue": 50, "MaxValue": 60, "Increment": 1 } }
        ]
    },

Example of usage (magiceffects.json):

    {
      "Type" : "ModifyPhysicalDamage",
      "DisplayText" : "$mod_epicloot_me_modifyphysicaldamage_display",
      "Description" : "$mod_epicloot_me_modifyphysicaldamage_desc",
      "Requirements" : {
        "ExclusiveEffectTypes" : [
          "AddBluntDamage",
          "AddSlashingDamage",
          "AddPiercingDamage"
        ],
        "AllowedItemTypes" : [
          "OneHandedWeapon",
          "TwoHandedWeapon",
          "TwoHandedWeaponLeft",
          "Bow",
          "Torch"
        ],
        "ItemHasPhysicalDamage" : true
      },
      "ValuesPerRarity" : {
        "Magic" :     { "MinValue" : 10, "MaxValue" : 100, "Increment" : 1 },
        "Rare" :      { "MinValue" : 20, "MaxValue" : 40, "Increment" : 1 },
        "Epic" :      { "MinValue" : 30, "MaxValue" : 60, "Increment" : 1 },
        "Legendary" : { "MinValue" : 40, "MaxValue" : 50, "Increment" : 1 }
      },
      "ValuesPerRarityExceptional" : {
        "Magic" :     { "MinValue" : 15, "MaxValue" : 150, "Increment" : 1 },
        "Rare" :      { "MinValue" : 30, "MaxValue" : 60, "Increment" : 1 },
        "Epic" :      { "MinValue" : 45, "MaxValue" : 90, "Increment" : 1 },
        "Legendary" : { "MinValue" : 60, "MaxValue" : 75, "Increment" : 1 }
      },
      "ValuesPerRarityElite" : {
        "Magic" :     { "MinValue" : 20, "MaxValue" : 200, "Increment" : 1 },
        "Rare" :      { "MinValue" : 40, "MaxValue" : 80, "Increment" : 1 },
        "Epic" :      { "MinValue" : 60, "MaxValue" : 120, "Increment" : 1 },
        "Legendary" : { "MinValue" : 80, "MaxValue" : 100, "Increment" : 1 }
      },
      "SelectionWeight" : 18,
      "Prefixes": [
        "$mod_epicloot_me_modifyphysicaldamage_prefix1",
        "$mod_epicloot_me_modifyphysicaldamage_prefix2",
        "$mod_epicloot_me_modifyphysicaldamage_prefix3",
        "$mod_epicloot_me_modifyphysicaldamage_prefix4",
        "$mod_epicloot_me_modifyphysicaldamage_prefix5",
        "$mod_epicloot_me_modifyphysicaldamage_prefix6",
        "$mod_epicloot_me_modifyphysicaldamage_prefix7",
        "$mod_epicloot_me_modifyphysicaldamage_prefix8"
      ],
      "Suffixes": [
        "$mod_epicloot_me_modifyphysicaldamage_suffix1",
        "$mod_epicloot_me_modifyphysicaldamage_suffix2",
        "$mod_epicloot_me_modifyphysicaldamage_suffix3",
        "$mod_epicloot_me_modifyphysicaldamage_suffix4",
        "$mod_epicloot_me_modifyphysicaldamage_suffix5"
      ]
    },

Backward compatibility: similar to ItemName filter, requires FominArtmind:pr-item-name-in-magic-item, FominArtmind:pr-rolling-effect-value-distribution-change, FominArtmind:pr-luck-formula-change to be accepted first to avoid merge conflicts.

@FominArtmind
Copy link
Author

Added quality config for set bonuses. Selected by the minimum quality of the player's items the set consists of. Example of usage:

  "LegendarySets": [
    {
        "ID": "BarefootSoul",
        "Name": "$mod_epicloot_set_barefoot_soul",
        "LegendaryIDs": [
            "BlessedTatters",
            "BlessedRagPants",
            "LeatherSail"
        ],
        "SetBonuses": [
            { "Count": 3, "Effect": { "Type": "IncreaseStamina", "Values": { "MinValue": 90, "MaxValue": 90, "Increment": 1 } } },
            { "Count": 3, "Effect": { "Type": "AvoidDamageTakenLowHealth", "Values": { "MinValue": 35, "MaxValue": 35, "Increment": 1 } } },
            { "Count": 3, "Effect": { "Type": "FeatherFall" } }
        ],
        "SetBonusesExceptional": [
            { "Count": 3, "Effect": { "Type": "IncreaseStamina", "Values": { "MinValue": 135, "MaxValue": 135, "Increment": 1 } } },
            { "Count": 3, "Effect": { "Type": "AvoidDamageTakenLowHealth", "Values": { "MinValue": 45, "MaxValue": 45, "Increment": 1 } } },
            { "Count": 3, "Effect": { "Type": "FeatherFall" } }
        ],
        "SetBonusesElite": [
            { "Count": 3, "Effect": { "Type": "IncreaseStamina", "Values": { "MinValue": 180, "MaxValue": 180, "Increment": 1 } } },
            { "Count": 3, "Effect": { "Type": "AvoidDamageTakenLowHealth", "Values": { "MinValue": 55, "MaxValue": 55, "Increment": 1 } } },
            { "Count": 3, "Effect": { "Type": "FeatherFall" } }
        ]
    },

@FominArtmind
Copy link
Author

Added magic effect count distribution config per quality (example from loottables.json):

  "MagicEffectsCount": {
    "Magic":     [ [1, 80], [2, 18], [3,  2] ],
    "Rare":      [ [2, 80], [3, 18], [4,  2] ],
    "Epic":      [ [3, 80], [4, 18], [5,  2] ],
    "Legendary": [ [4, 80], [5, 18], [6,  2] ]
  },
  "MagicEffectsCountExceptional": {
    "Magic":     [ [1, 60], [2, 36], [3,  4] ],
    "Rare":      [ [2, 60], [3, 36], [4,  4] ],
    "Epic":      [ [3, 60], [4, 36], [5,  4] ],
    "Legendary": [ [4, 60], [5, 36], [6,  4] ]
  },
  "MagicEffectsCountElite": {
    "Magic":     [ [1, 20], [2, 72], [3,  8] ],
    "Rare":      [ [2, 20], [3, 72], [4,  8] ],
    "Epic":      [ [3, 20], [4, 72], [5,  8] ],
    "Legendary": [ [4, 20], [5, 72], [6,  8] ]
  },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant