Jump to content

Modding:Weapons: Difference between revisions

From Stardew Valley Wiki
imported>Margotbean
m Text replacement - "tt>" to "samp>"
imported>Sunbeam135
No edit summary
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
← [[Modding:Index|Index]]
← [[Modding:Items|Items]]


This page explains how the game stores and parses weapon data. This is an advanced guide for mod developers.
This page explains how the game stores and parses weapon-type item data. For items in general, see [[Modding:Items]].


==Raw data==
==Overview==
Weapon sprites are in <samp>TileSheets\Weapons.xnb</samp>, and weapon data (parsed by the <samp>MeleeWeapon</samp> constructor) is in <samp>Data\Weapons.xnb</samp>. The files can be [[Modding:Editing XNB files#unpacking|unpacked for editing]]. Here's the raw data as of {{version|1.5.1}} for reference:
[[Weapons]] are tools that can be swung or used by the player to damage monsters.


{{collapse|Data|content=<syntaxhighlight lang="json">
They have [[Modding:Items#Item types|item type]] <code>(W)</code> (or <code>ItemRegistry.type_weapon</code> in C# code), their data in <samp>Data/Weapons</samp>, their in-game sprites in <samp>TileSheets/weapons</samp> by default, and their code in <samp>StardewValley.Tools.MeleeWeapon</samp> and <samp>StardewValley.Tools.Slingshot</samp>.
{
  "0": "Rusty Sword/A rusty, dull old sword./2/5/1/0/0/0/3/-1/-1/0/.02/3",
  "1": "Silver Saber/Plated with silver to deter rust./8/15/1/0/1/1/0/50/45/0/.02/3",
  "2": "Dark Sword/It's glowing with vampire energy./30/45/1.5/-10/0/0/0/-1/-1/2/.04/3",
  "3": "Holy Blade/It feels hopeful to wield./18/24/1.2/0/5/0/3/-1/-1/0/.02/3",
  "4": "Galaxy Sword/It's unlike anything you've ever seen./60/80/1/8/0/0/0/-1/-1/0/.02/3",
  "5": "Bone Sword/A very light piece of sharpened bone./20/30/.8/8/5/0/0/74/50/0/.02/3",
  "6": "Iron Edge/A heavy broadsword./12/25/1.2/-4/0/1/3/44/-1/0/.02/3",
  "7": "Templar's Blade/It once belonged to an honorable knight./22/29/1/0/10/1/3/90/50/0/0/3",
  "8": "Obsidian Edge/It's incredibly sharp./30/45/1/-2/0/0/0/121/100/0/.02/3.2",
  "9": "Lava Katana/A powerful blade forged in a pool of churning lava./55/64/1.2/0/0/3/0/-1/-1/2/.015/3.5",
  "10": "Claymore/It's really heavy./20/32/1.3/-8/0/2/3/86/50/0/.02/3",
  "11": "Steel Smallsword/A standard metal blade./4/8/1/4/0/0/0/26/-1/0/.02/3",
  "12": "Wooden Blade/Not bad for a piece of carved wood./3/7/1/0/0/0/0/3/-1/0/.02/3",
  "13": "Insect Head/Not very pleasant to wield./10/20/1/4/9/0/0/-1/-1/0/.04/3",
  "14": "Neptune's Glaive/An heirloom from beyond the Gem Sea./18/35/1.4/-2/6/2/3/-1/-1/0/.02/3",
  "15": "Forest Sword/Made powerful by forest magic./8/18/1/4/5/1/0/-1/-1/0/.02/3",
  "16": "Carving Knife/A small, light blade./1/3/.5/0/0/0/1/18/-1/0/.04/3",
  "17": "Iron Dirk/A common dagger./2/4/.5/0/0/0/1/62/50/0/.03/3",
  "18": "Burglar's Shank/A weapon of choice for the swift and silent./7/12/.5/0/5/0/1/114/100/0/.04/3.5",
  "19": "Shadow Dagger/When you hold the blade to your ear you can hear 1,000 souls shrieking./10/20/.5/0/0/0/1/80/50/0/.04/3",
  "20": "Elf Blade/Only the nimble hands of an elf could craft this./3/5/.5/0/5/0/1/-1/-1/0/.04/3",
  "21": "Crystal Dagger/The blade is made of purified quartz./4/10/1/0/10/0/1/-1/-1/0/.03/4",
  "22": "Wind Spire/A swift little blade./1/5/1/0/0/0/1/-1/-1/0/.02/3.2",
  "23": "Galaxy Dagger/It's unlike anything you've seen./30/40/1/3/0/0/1/-1/-1/0/.02/3",
  "24": "Wood Club/A solid piece of wood, crudely chiseled into a club shape./9/16/1.5/-8/0/0/2/32/-1/0/.02/3",
  "25": "Alex's Bat/The sweet spot is dented from Alex's famous Grand Slam./1/3/1/-8/0/0/2/-1/-1/0/.02/3",
  "26": "Lead Rod/It's incredibly heavy./18/27/1.5/-16/0/0/2/56/50/1/.02/3",
  "27": "Wood Mallet/The solid head packs a punch. Relatively light for a club./15/24/1.3/-4/1/0/2/68/50/0/.02/3",
  "28": "The Slammer/An extremely heavy gavel that'll send foes flying./40/55/1.5/-12/0/0/2/128/100/2/.02/3",
  "29": "Galaxy Hammer/It's made from an ultra-light material you've never seen before./70/90/1/-4/0/0/2/-1/-1/0/.02/3",
  "30": "Sam's Old Guitar/It's seen better days./1/3/1/-6/0/0/2/-1/-1/0/.02/3",
  "31": "Femur/An old, heavy bone caked in centuries of grime./6/11/1.5/-4/0/0/2/10/-1/0/.02/3",
  "32": "Slingshot/Requires stones for ammo./1/3/1/308/0/0/4/-1/-1/0/.02/3",
  "33": "Master Slingshot/Requires stones for ammo./1/3/1/308/0/0/4/-1/-1/0/.02/3",
  "34": "Galaxy Slingshot/It looks really powerful./1/3/1/308/0/0/4/-1/-1/0/.02/3",
  "35": "Elliott's Pencil/Elliott used this to write his book. It's sharp!/1/3/1/308/0/0/1/-1/-1/0/.02/3",
  "36": "Maru's Wrench/A big, metal wrench. It smells like Maru./1/3/1/308/0/0/2/-1/-1/0/.02/3",
  "37": "Harvey's Mallet/It brings back memories of Harvey's clinic./1/3/1/308/0/0/2/-1/-1/0/.02/3",
  "38": "Penny's Fryer/Penny's favorite frying pan. There's some rubbery gunk stuck to the inside./1/3/1/308/0/0/2/-1/-1/0/.02/3",
  "39": "Leah's Whittler/Leah's favorite tool for shaping driftwood./1/3/1/308/0/0/1/-1/-1/0/.02/3",
  "40": "Abby's Planchette/It's made from fine marblewood./1/3/1/308/0/0/1/-1/-1/0/.02/3",
  "41": "Seb's Lost Mace/One of Sebastian's medieval replicas./1/3/1/308/0/0/2/-1/-1/0/.02/3",
  "42": "Haley's Iron/It's searing hot and smells like Haley's hair./1/3/1/308/0/0/0/-1/-1/0/.02/3",
  "43": "Pirate's Sword/It looks like a pirate owned this once./8/14/1/4/0/0/3/40/-1/0/.02/3",
  "44": "Cutlass/A finely crafted blade./9/17/1/4/0/0/0/-1/-1/0/.02/3",
  "45": "Wicked Kris/The blade is made of an iridium alloy./24/30/.5/0/8/0/1/-1/-1/2/.06/3",
  "46": "Kudgel/A brute's companion./27/40/1.6/-10/0/0/2/107/100/0/.02/3.1",
  "47": "Scythe/It can cut grass into hay, if you've built a silo./1/3/1/0/0/0/0/-1/-1/0/.02/3",
  "48": "Yeti Tooth/It's icy cold to the touch./26/42/1/0/0/4/0/-1/-1/0/.02/3.2",
  "49": "Rapier/An elegant blade./15/25/1/4/0/0/0/100/95/2/.02/3",
  "50": "Steel Falchion/Light and powerful./28/46/1/8/5/0/0/142/100/0/.02/3.4",
  "51": "Broken Trident/It came from the sea, but it's still sharp./15/26/.5/0/8/0/1/-1/-1/2/.02/3",
  "52": "Tempered Broadsword/It looks like it could withstand anything./29/44/1.2/-6/0/3/0/135/100/1/.02/3",
  "53": "Golden Scythe/It's more powerful than a normal scythe./13/13/1/0/0/0/0/-1/-1/2/.02/4",
  "54": "Dwarf Sword/It's ancient, but the blade never dulls./65/75/1/4/0/4/0/-1/-1/0/.02/3",
  "55": "Dwarf Hammer/It emits a very faint whirring sound./75/85/1/-8/0/2/2/-1/-1/0/.02/3",
  "56": "Dwarf Dagger/It's ancient, but the blade never dulls./32/38/1/3/0/6/1/-1/-1/0/.03/3",
  "57": "Dragontooth Cutlass/The blade was forged from a magical tooth./75/90/1/0/0/0/0/-1/-1/0/.02/4",
  "58": "Dragontooth Club/This club was crafted from a magical tooth./80/100/1.3/-8/0/0/2/-1/-1/0/.02/4",
  "59": "Dragontooth Shiv/The blade was forged from a magical tooth./40/50/1/0/0/0/1/-1/-1/0/.05/5",
  "60": "Ossified Blade/A large, sharp blade formed from bone./26/42/1.1/-4/0/1/0/142/100/0/.02/3",
  "61": "Iridium Needle/The point is unbelievably sharp, even down to the atomic level./20/35/.5/0/0/0/1/-1/-1/0/.1/7",
  "62": "Infinity Blade/The true form of the Galaxy Sword./80/100/1/8/0/2/0/-1/-1/0/.02/3",
  "63": "Infinity Gavel/The true form of the Galaxy Hammer./100/120/1/-4/0/1/2/-1/-1/0/.02/3",
  "64": "Infinity Dagger/The true form of the Galaxy Dagger./50/70/1/3/0/3/1/-1/-1/0/.06/3"
}
</syntaxhighlight>}}


==Format==
==Data format==
===Melee weapons===
The weapon data in <samp>Data/Weapons</samp> consists of a string → model lookup, where...
The weapon data in <samp>Data\Weapons.xnb</samp> contains fifteen fields for melee weapons:
* The key is the [[Modding:Common data field types#Item ID|unqualified item ID]].
308/0/0/4/-1/-1/0/.02/3
* The value is model with the fields listed below.
 
===Basic weapon info===
{| class="wikitable"
{| class="wikitable"
|-
|-
! index
! field
! example value
! effect
! description
|-
|-
| 0
| <samp>Name</samp>
| ''Bone Sword''
| The internal weapon name.
| name
|-
|-
| 1
| <samp>DisplayName</samp><br /><samp>Description</samp>
| ''A very light piece of sharpened bone.''
| A [[Modding:Tokenizable strings|tokenizable string]] for the translated display name & description.
| description
|-
|-
| 2
| <samp>Type</samp>
| ''20''
| The weapon type. One of <samp>0</samp> (stabbing sword), <samp>1</samp> (dagger), <samp>2</samp> (club or hammer), or <samp>3</samp> (slashing sword).
| minimum damage ouput
|}
 
===Appearance===
{| class="wikitable"
|-
|-
| 3
! field
| ''30''
! effect
| maximum damage output
|-
|-
| 4
| <samp>Texture</samp>
| ''.8''
| The asset name for the spritesheet containing the weapon's sprite.
| knockback (weight) - determines how far the target will get pushed away when hit
|-
|-
| 5
| <samp>SpriteIndex</samp>
| ''8''
| The index within the <samp>Texture</samp> for the weapon sprite, where 0 is the top-left sprite.
| speed - determines how fast the user can attack
|}
 
===Stats===
{| class="wikitable"
|-
|-
| 6
! field
| ''5''
! effect
| added precision - decreases the chance that a strike will cause no damage
|-
|-
| 7
| <samp>MinDamage</samp><br /><samp>MaxDamage</samp>
| ''0''
| The minimum and maximum based damage caused when hitting a monster with this weapon.
| added defense - affects how much damage the user takes
|-
|-
| 8
| <samp>Knockback</samp>
| ''0''
| ''(Optional)'' How far the target is pushed when hit, as a multiplier relative to a base weapon like the [[Rusty Sword]] (e.g. <samp>1.5</samp> for 150% of Rusty Sword's weight). Default 1.
| type ("0" for stabbing sword, "1" for dagger, "2" for club/hammer, "3" for slashing sword, "4" for slingshot)
|-
|-
| 9
| <samp>Speed</samp>
| ''74''
| ''(Optional)'' How fast the player can swing the weapon. Each point of speed is worth 40ms of swing time relative to 0. This stacks with the [[speed|player's weapon speed]]. Default 0.
| The base mine level which affects the probability of [[#Mine container drops|mine container drops]].
|-
|-
| 10
| <samp>Precision</samp>
| ''50''
| ''(Optional)'' Reduces the chance that a strike will miss. Default 0.
| The minimum mine level for [[#Mine container drops|mine container drops]].
|-
|-
| 11
| <samp>Defense</samp>
| ''0''
| ''(Optional)'' Reduces damage received by the player. Default 0.
| added area of effect
|-
|-
| 12
| <samp>AreaOfEffect</samp>
| ''.02''
| ''(Optional)'' Slightly increases the area of effect. Default 0.
| critical chance
|-
|-
| 13
| <samp>CritChance</samp>
| ''3''
| ''(Optional)'' The chance of a critical hit, as a decimal value between 0 (never) and 1 (always). Default 0.02.
| critical multiplier
|-
|-
| 14
| <samp>CritMultiplier</samp>
|  
| ''(Optional)'' A multiplier applied to the base damage for a critical hit. This can be a decimal value. Default 3.
| display name (non-English files only)
|}
|}


Weapons have a hardcoded category of -98 (<samp>Object.weaponCategory</samp>).
===Game logic===
{| class="wikitable"
|-
! field
! effect
|-
| <samp>CanBeLostOnDeath</samp>
| Whether the player can [[Adventurer's Guild#Item Recovery Service|lose this tool when they die]]. Default true.
|-
| <samp>MineBaseLevel</samp><br /><samp>MineMinLevel</samp>
| ''(Optional)'' The base and minimum mine level, which affect [[#Mine container drops|mine container drops]]. Both default to -1, which disables automatic mine drops.
|}


===Slingshot===
===Advanced===
The [[slingshot]] has initial ID 32 in the weapon data, which increases by one for each upgrade level (up to 34 in the weapon data, though only 32 and 33 are obtainable without mods). All [[#Melee weapons|weapon fields]] must be specified in the weapon data to avoid errors, but only these are actually used for slingshots:
{| class="wikitable"
|-
! field
! effect
|-
| <samp>Projectiles</samp>
| ''(Optional)'' The projectiles fired when the weapon is used, which continue along their path until they hit a monster and cause damage. A separate projectile is fired for each entry in this list.


This consists of a list of models with these fields (one projectile will fire for each entry in the list):
{| class="wikitable"
{| class="wikitable"
|-
|-
! index
! field
! example value
! effect
! description
|-
|-
| 0
| <samp>Id</samp>
| ''Master Slingshot''
| The [[Modding:Common data field types#Unique string ID|unique string ID]] for the projectile within the current weapon's data.
| name
|-
| <samp>Damage</samp>
| ''(Optional)'' The amount of damage caused when the projectile hits a monster. Default 10.
|-
| <samp>Explodes</samp>
| ''(Optional)'' Whether the projectile explodes when it collides with something. Default false.
|-
| <samp>Bounces</samp>
| ''(Optional)'' The number of times the projectile can bounce off walls before being destroyed. Default 0.
|-
| <samp>MaxDistance</samp>
| ''(Optional)'' The maximum tile distance the projectile can travel. Default 4.
|-
| <samp>Velocity</samp>
| ''(Optional)'' The speed at which the projectile moves. Default 10.
|-
| <samp>RotationVelocity</samp>
| ''(Optional)'' The rotation velocity. Default 32.
|-
| <samp>TailLength</samp>
| ''(Optional)'' The length of the tail which trails behind the main projectile. Default 1.
|-
| <samp>FireSound</samp><br /><samp>BounceSound</samp><br /><samp>CollisionSound</samp>
| ''(Optional)'' The sound played when the projectile is fired, bounces off a wall, or collides with something. All three default to none.
|-
|-
| 1
| <samp>MinAngleOffset</samp><br /><samp>MaxAngleOffset</samp>
| ''Requires stones for ammo.''
| ''(Optional)'' A random offset applied to the direction of the project each time it's fired. Both fields default to 0, in which case it's always shot at the 90° angle matching the player's facing direction.
| description
|-
|-
| 9
| <samp>SpriteIndex</samp>
| ''74''
| ''(Optional)'' The sprite index in the <samp>TileSheets/Projectiles</samp> asset to draw for this projectile. Defaults to 11 (a glowing-yellow-ball sprite).
| The base mine level which affects the probability of [[#Mine container drops|mine container drops]].
|-
|-
| 10
| <samp>Item</samp>
| ''50''
| ''(Optional)'' The item to shoot. If set, this overrides <samp>SpriteIndex</samp>.
| The minimum mine level for [[#Mine container drops|mine container drops]].
 
This consists of a list of models with these fields:
{| class="wikitable"
|-
! field
! effect
|-
| ''common fields''
| See [[Modding:Item queries#Item spawn fields|item spawn fields]] for the generic item fields supported for ammo items.
 
If set to an [[Modding:Item queries|item query]] which returns multiple items, one of them will be selected at random.
|}
|}
 
Note that these are magic projectiles fired when the weapon is used, they're not aimed directly like [[slingshot]] projectiles.
|-
|-
| 14
| <samp>CustomFields</samp>
|  
| The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
| display name (non-English files only)
|}
|}
Weapons have a hardcoded category of -98 (<samp>Object.weaponCategory</samp>).


Slingshot damage is [[Slingshot#Ammunition|calculated dynamically]] regardless of the weapon data.
==Implementation notes==
===Slingshots===
* The base [[slingshot]] has <samp>ParentSheetIndex</samp> 32 in the weapon data, which increases by one for each upgrade level (up to 34 in the weapon data, though only 32 and 33 are obtainable without mods).
* Slingshot damage is [[Slingshot#Ammunition|calculated dynamically]] regardless of the weapon data.


==Mine container drops==
===Mine container drops===
When the player breaks a container in [[The Mines|the mines]], there's a chance it will drop a weapon. Here's how the weapon to drop is chosen<ref>See <samp>Utility.getUncommonItemForThisMineLevel</samp> in the game code.</ref>:
When the player breaks a container in [[The Mines|the mines]], there's a chance it will drop a weapon. Here's how the weapon to drop is chosen<ref>See <samp>Utility.getUncommonItemForThisMineLevel</samp> in the game code.</ref>:


<ol>
<ol>
<li>Match weapons whose minimum mine level ([[#Format|field 10]]) is less than the current mine level.</li>
<li>Match weapons whose [[#Game logic|minimum mine level]] is less than the current mine level.</li>
<li>From that list, match weapons with a probability check based on the gap between the base mine level ([[#Format|field 9]]) and current mine level. The probability is a bell curve centered on the base mine level:
<li>From that list, match weapons with a probability check based on the gap between the [[#Game logic|base mine level]] and current mine level. The probability is a bell curve centered on the base mine level:
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 217: Line 198:
==References==
==References==
<references />
<references />
==See also==
* [[Modding:Items]] for item data in general


[[Category:Modding]]
[[Category:Modding]]


[[ru:Модификации:Оружие]]
[[ru:Модификации:Оружие]]
[[zh:模组:武器]]

Latest revision as of 22:23, 12 January 2026

← Items

This page explains how the game stores and parses weapon-type item data. For items in general, see Modding:Items.

Overview

Weapons are tools that can be swung or used by the player to damage monsters.

They have item type (W) (or ItemRegistry.type_weapon in C# code), their data in Data/Weapons, their in-game sprites in TileSheets/weapons by default, and their code in StardewValley.Tools.MeleeWeapon and StardewValley.Tools.Slingshot.

Data format

The weapon data in Data/Weapons consists of a string → model lookup, where...

Basic weapon info

field effect
Name The internal weapon name.
DisplayName
Description
A tokenizable string for the translated display name & description.
Type The weapon type. One of 0 (stabbing sword), 1 (dagger), 2 (club or hammer), or 3 (slashing sword).

Appearance

field effect
Texture The asset name for the spritesheet containing the weapon's sprite.
SpriteIndex The index within the Texture for the weapon sprite, where 0 is the top-left sprite.

Stats

field effect
MinDamage
MaxDamage
The minimum and maximum based damage caused when hitting a monster with this weapon.
Knockback (Optional) How far the target is pushed when hit, as a multiplier relative to a base weapon like the Rusty Sword (e.g. 1.5 for 150% of Rusty Sword's weight). Default 1.
Speed (Optional) How fast the player can swing the weapon. Each point of speed is worth 40ms of swing time relative to 0. This stacks with the player's weapon speed. Default 0.
Precision (Optional) Reduces the chance that a strike will miss. Default 0.
Defense (Optional) Reduces damage received by the player. Default 0.
AreaOfEffect (Optional) Slightly increases the area of effect. Default 0.
CritChance (Optional) The chance of a critical hit, as a decimal value between 0 (never) and 1 (always). Default 0.02.
CritMultiplier (Optional) A multiplier applied to the base damage for a critical hit. This can be a decimal value. Default 3.

Game logic

field effect
CanBeLostOnDeath Whether the player can lose this tool when they die. Default true.
MineBaseLevel
MineMinLevel
(Optional) The base and minimum mine level, which affect mine container drops. Both default to -1, which disables automatic mine drops.

Advanced

field effect
Projectiles (Optional) The projectiles fired when the weapon is used, which continue along their path until they hit a monster and cause damage. A separate projectile is fired for each entry in this list.

This consists of a list of models with these fields (one projectile will fire for each entry in the list):

field effect
Id The unique string ID for the projectile within the current weapon's data.
Damage (Optional) The amount of damage caused when the projectile hits a monster. Default 10.
Explodes (Optional) Whether the projectile explodes when it collides with something. Default false.
Bounces (Optional) The number of times the projectile can bounce off walls before being destroyed. Default 0.
MaxDistance (Optional) The maximum tile distance the projectile can travel. Default 4.
Velocity (Optional) The speed at which the projectile moves. Default 10.
RotationVelocity (Optional) The rotation velocity. Default 32.
TailLength (Optional) The length of the tail which trails behind the main projectile. Default 1.
FireSound
BounceSound
CollisionSound
(Optional) The sound played when the projectile is fired, bounces off a wall, or collides with something. All three default to none.
MinAngleOffset
MaxAngleOffset
(Optional) A random offset applied to the direction of the project each time it's fired. Both fields default to 0, in which case it's always shot at the 90° angle matching the player's facing direction.
SpriteIndex (Optional) The sprite index in the TileSheets/Projectiles asset to draw for this projectile. Defaults to 11 (a glowing-yellow-ball sprite).
Item (Optional) The item to shoot. If set, this overrides SpriteIndex.

This consists of a list of models with these fields:

field effect
common fields See item spawn fields for the generic item fields supported for ammo items.

If set to an item query which returns multiple items, one of them will be selected at random.

Note that these are magic projectiles fired when the weapon is used, they're not aimed directly like slingshot projectiles.

CustomFields The custom fields for this entry.

Weapons have a hardcoded category of -98 (Object.weaponCategory).

Implementation notes

Slingshots

  • The base slingshot has ParentSheetIndex 32 in the weapon data, which increases by one for each upgrade level (up to 34 in the weapon data, though only 32 and 33 are obtainable without mods).
  • Slingshot damage is calculated dynamically regardless of the weapon data.

Mine container drops

When the player breaks a container in the mines, there's a chance it will drop a weapon. Here's how the weapon to drop is chosen[1]:

  1. Match weapons whose minimum mine level is less than the current mine level.
  2. From that list, match weapons with a probability check based on the gap between the base mine level and current mine level. The probability is a bell curve centered on the base mine level:
    level difference probability
    0 100%
    5 92%
    10 71%
    15 46%
    20 25%
    25 4%
    The difference applies in both directions; for example, two weapons whose base levels are 5 below and 5 above the current level both have a 92% chance. (The probability is calculated with a Gaussian function e-(current mine level - base mine level)2 / (2 * 122).)
  3. Find the weapon with the smallest gap between the current and base mine levels, and add it to the list. (If the item was also selected in step 2, it has two chances to drop.)
  4. From the remaining list of weapons, randomly choose one to drop.

References

  1. ↑ See Utility.getUncommonItemForThisMineLevel in the game code.

See also