Mosquito Studios Discord
Everything you need to know about the Arcane Odyssey Armor Builder.
This documentation covers how to use the builder and explains the game mechanics behind it, from stat formulas to jewel calculations. Use the sidebar on the left to get around, open a folder and click any topic to load it here.
The Arcane Odyssey Armor Builder is a full loadout planning tool. Here's a quick rundown of what it supports:
| Feature | Description |
|---|---|
| Armor Equipping | Pick armor pieces for each slot and configure modifiers, enchants, and jewels. |
| Weapons & Tools | Equip weapons and tools based on your stat build to gain additional stats and unlock armor variants. |
| Filtering & Sorting | In-depth filters and sort options to quickly find exactly what you need. |
| Build Saving | Save builds to your browser or export portable build codes. |
| Build Sharing | Generate a share link to send your loadout to anyone instantly. |
| Random Builds | Generate a random build or reset your current one in a single click. |
Found an issue or missing info in the docs? Let us know on Discord.
Who made it, how it works, and what it stores.
The Arcane Odyssey Armor Builder is a project by Mosquito Studios, made to help Arcane Odyssey players plan armor builds without doing math in their heads or testing pieces one at a time in-game. Plan it out here first, then take it in-game knowing exactly what you're going for.
The builder is written entirely in HTML, CSS, and JavaScript with no frameworks and no backend. It runs completely in your browser, which means none of your build data is ever sent to or stored on any server. Everything stays on your device.
All item information is sourced from data.json and new-data.json: data.json – contains processed, in-game stats for items whose raw values are unknown. These items are scaled up or down to match different levels. new-data.json – contains raw stats for items that need to be calculated rather than scaled. Calculations are performed to determine their final values at each level.
What modifiers are and what they do.
We can divide modifiers into 3 categories: normal modifiers, crew modifiers and atlantean essence. Crew modifiers allow atlantean essence to also be present while normal modifiers lock atlantean essence from being there if they are present. We also have modifiers that behave specially. These are imbued, gilded and atlantean essence.
On every armor piece, there is one slot dedicated to modifiers. There is also one slot for Atlantean which can be locked if a normal modifier is present.
What it does and where it comes from.
Atlantean can be applied to an item in two ways: by opening chests in the Arcane Odyssey Dark Sea, or by using an Atlantean Essence on any item. The essence method allows Atlantean to be applied universally, regardless of item type. Unlike standard modifiers, Atlantean does not grant fixed stats. Instead, it follows a priority check in this exact order:
Power → Defense → Size → Dexterity → Range → Haste
It scans the item for the first stat in this sequence that is completely absent. If a stat is already present, even as a negative value, Atlantean skips it and continues down the list. Once it finds the first non-present stat, it applies a significant boost to that stat, far exceeding the strength of typical modifiers.
If all listed stats are already present, it defaults to boosting Power.
As a trade-off for its strength and flexibility, Atlantean always applies +1 Insanity to the user.
| Stat | Atlantean Boost |
|---|---|
| Power | 0.7875 power every 10 levels |
| Defense | 6.75 defense every 10 levels |
| Size | 2.175 size every 10 levels |
| Dexterity | 2.175 dexterity every 10 levels |
| Range | 2.175 range every 10 levels |
| Haste | 2.175 haste every 10 levels |
What it does and where it comes from.
Imbued is arguably the strongest modifier in Arcane Odyssey, if applied to the right item.
It can only be obtained from treasure charts in Sky Islands, making it relatively rare.
It boosts every stat that is above 0.
Stats that are 0 or negative are ignored.
If the item has only one positive stat, Imbued will be worth as much as a normal behaving modifier (for example, Blasted or Archaic).
However, when an item has multiple positive stats, Imbued scales:
For each additional positive stat, the total modifier value increases by 20%.
That increased total value is then split evenly across all positive stats.
This means that each individual stat will receive a smaller boost compared to a single-stat item, but the combined total stat gain is significantly higher, this makes Imbued very strong on multi-stat armors.
For example, an item with 1 positive stat will get 100% modifier value, an item with 2 positive stats will have each of these stats gaining 60% modifier value (120% global) and an item with 6 positive stats will have each of these stats gaining 33.3% modifier value (200% global)
Imbued is not hardcoded per stat. Instead, it uses a scaling formula that allows it to dynamically calculate gains for any positive stat without manual tuning.
The base value is calculated as:
$$\text{base} = \frac{0.15 \cdot \text{armorLevel}}{\text{totalItemStats}} \cdot \left(0.8 + 0.2 \cdot \min(\text{totalItemStats}, 6)\right)$$
Where:
armorLevel is the level of the armor being modified.
totalItemStats is the number of positive stats on the item.
min(totalItemStats, 6) is used to cap the scaling bonus at 6 positive stats, preventing excessive gains on items with many stats.
In plain text, this is:
base = (0.15 × armorLevel) ÷ totalItemStats × (0.8 + 0.2 × min(totalItemStats, 6))
To get the final gain for each stat, multiply the base by the stat-specific gain multiplier:
| Stat | Gain Multiplier |
|---|---|
| Power | 1 / 3 |
| Defense | 3 |
| Other | 1 |
What it does and where it comes from.
Gilded is a modifier that can only be found from Mythical treasure charts at their final spot, more precisely, every item dug up from that final spot will be Gilded.
Gilded is not complicated, it just does something no other Modifiers do, it adds a jewel slot to any item it is applied to and it can be applied on more items than most other modifiers.
What it does and how it works.
Power is a primary stat alongside defense.
Power increases the damage done by player (Spells, Weapon Skills, Techniques), where each point of power increases the damage by a flat amount that depends on the specific Spell/Skill/Technique.
It isn't possible to calculate a percentage of how much stronger you are with Power, as it depends entirely on every attacks and their power affinities.
What it does and how it works.
Defense is a primary stat alongside power.
Defense increases your maximum HP. Unlike most stats, it is not percentage based - each point of defense will increase maximum health by 1.
To calculate a percentage of how much stronger you are with Defense, divide your defense stat by your base HP and multiply the result by 100:
$$\text{percentage} = \frac{\text{defenseValue}}{100 + 9 \cdot (\text{playerLevel} - 1)} \cdot 100$$
Where:
defenseValue is the amount of defense the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = defenseValue ÷ (100 + 9 × (playerLevel - 1)) × 100
What it does and how it works.
Size is a secondary stat alongside dexterity, range, haste, resistance, regeneration, and pierce.
Size increases the size of all kinds of attacks. It also increases the knockback of attacks.
To calculate a percentage of how much stronger you are with Size, use the standard formula for secondary stats with a weight of 0.6:
$$ \text{percentage} = \left( \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.1 \cdot \text{sizeValue} + 4))^3 + \frac{0.15 \cdot \text{sizeValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big) \cdot 0.6}{100} \right) \cdot 100 $$
Where:
sizeValue is the amount of size the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = (1.35 × (1.44 × log(0.1 × sizeValue + 4) ^ 3 + 0.15 × sizeValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) × 0.6 ÷ 100) × 100
What it does and how it works.
Dexterity is a secondary stat alongside size, range, haste, resistance, regeneration, and pierce.
Dexterity decreases the startup time and endlag for attacks, increases the fire rate of multi-attack spells, and even decrease the reload time of firearm-type weapons such as Flintlocks or Muskets.
To calculate a percentage of how much stronger you are with Dexterity, use the standard formula for secondary stats with a weight of 0.55:
$$ \text{percentage} = \left( \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.1 \cdot \text{dexterityValue} + 4))^3 + \frac{0.15 \cdot \text{dexterityValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big) \cdot 0.55}{100} \right) \cdot 100 $$
Where:
dexterityValue is the amount of dexterity the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = (1.35 × (1.44 × log(0.1 × dexterityValue + 4) ^ 3 + 0.15 × dexterityValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) × 0.55 ÷ 100) × 100
What it does and how it works.
Range is a secondary stat alongside size, dexterity, haste, resistance, regeneration, and pierce.
Range affects projectile speed and attack range. Range also increases the traversal speed of travel moves (Crash, Jab, Rushdown, weapon grabs, etc) at 50% efficiency and increases the distance at which placed skills can be aimed at 25% efficiency.
To calculate a percentage of how much stronger you are with Range, use the standard formula for secondary stats with a weight of 0.7:
$$ \text{percentage} = \left( \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.1 \cdot \text{rangeValue} + 4))^3 + \frac{0.15 \cdot \text{rangeValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big) \cdot 0.7}{100} \right) \cdot 100 $$
Where:
rangeValue is the amount of range the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = (1.35 × (1.44 × log(0.1 × rangeValue + 4) ^ 3 + 0.15 × rangeValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) × 0.7 ÷ 100) × 100
What it does and how it works.
Haste is a secondary stat alongside size, dexterity, range, resistance, regeneration, and pierce.
Haste reduces the cooldown period of spells, techniques, skills, and rites.
To calculate a percentage of how much stronger you are with Haste, use a modified version of the standard formula for secondary stats:
$$ \text{percentage} = \left( \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.2 \cdot \text{hasteValue} + 4))^3 + \frac{0.15 \cdot \text{hasteValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big)}{100} \right) \cdot 100 $$
Where:
hasteValue is the amount of haste the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = (1.35 × (1.44 × log(0.2 × hasteValue + 4) ^ 3 + 0.15 × hasteValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) ÷ 100) × 100
The modified formula uses 0.2 × value with no weight factor, so the calculation treats the stat uniformly.
What it does and how it works.
Resistance is a secondary stat alongside size, dexterity, haste, range, regeneration, and pierce.
Resistance decreases damage taken while casting an attack.
To calculate a percentage of how much stronger you are with Resistance, use the standard formula for secondary stats with a weight of 0.525:
$$ \text{percentage} = \left( \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.1 \cdot \text{resistanceValue} + 4))^3 + \frac{0.15 \cdot \text{resistanceValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big) \cdot 0.525}{100} \right) \cdot 100 $$
Where:
resistanceValue is the amount of resistance the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = (1.35 × (1.44 × log(0.1 × resistanceValue + 4) ^ 3 + 0.15 × resistanceValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) × 0.525 ÷ 100) × 100
What it does and how it works.
Regeneration is a secondary stat alongside size, dexterity, haste, range, resistance, and pierce.
Regeneration grants the player a percent of their damage dealt back to them as health instantaneously. The damage affinity of whatever casted the skill and damage increase from charging the skill are the only 2 factors that affect the regenerated health amount on top of the base damage of the skill. The Power armor stat, and similar forms of damage increase, do not affect the amount healed. Regeneration's lifesteal mechanic has a 0.05s buffer after being healed.
To calculate a percentage of how much stronger you are with Regeneration, use the standard formula for secondary stats with a weight of 0.5:
$$ \text{percentage} = \left( \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.1 \cdot \text{regenerationValue} + 4))^3 + \frac{0.15 \cdot \text{regenerationValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big) \cdot 0.5}{100} \right) \cdot 100 $$
Where:
regenerationValue is the amount of regeneration the player has.
playerLevel is the level of the player.
In plain text, this is:
percentage = (1.35 × (1.44 × log(0.1 × regenerationValue + 4) ^ 3 + 0.15 × regenerationValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) × 0.5 ÷ 100) × 100
What it does and how it works.
Pierce is a secondary stat alongside size, dexterity, range, haste, resistance, and regeneration.
Pierce increases damage against targets with high defense, increases how much damage goes through blocking (excluding the resistance stat) and inflicts the armor pierced status effect for 10 seconds, which reduces the effectiveness of the target’s secondary armor stats by a percentage based on how much pierce the user has. The block bypass effect of pierce is reduced by 90% when the target is parrying.
To calculate the multiplier for Pierce, use the standard formula for secondary stats with a weight of 1:
$$ \text{multiplier} = \frac{1.35 \cdot \Big( 1.44 \cdot (\ln(0.1 \cdot \text{pierceValue} + 4))^3 + \frac{0.15 \cdot \text{pierceValue}}{0.1} + 0.15 \cdot \sqrt{\text{playerLevel}} - 0.79 \Big) \cdot 1}{100} $$
Where:
pierceValue is the amount of pierce the player has.
playerLevel is the level of the player.
In plain text, this is:
multiplier = 1.35 × (1.44 × log(0.1 × pierceValue + 4) ^ 3 + 0.15 × pierceValue ÷ 0.1 + 0.15 × sqrt(playerLevel) - 0.79) × 1 ÷ 100
You can then use this multiplier to calculate damage increase in different situations. Like against player, NPC or boss
What it does and how it works.
Warding is a tertiary stat alongside drawback, and insanity.
Warding is a stat that counteracts Insanity. It will delay insanity effects at a rate of 1+((Warding x 2)*0.1), and also adds on the Warding value to the base wait time in between effects. (Meaning if the base wait time is 0 and you have Warding 6, the base wait time would be 6).
You cannot calculate a percentage for Warding because it does not make the player stronger in a direct way like other stats do.
What it does and how it works.
Drawback is a tertiary stat alongside warding, and insanity.
Drawback is a negative stat that causes the user to take 1% of their base health in damage whenever they use an attack. In exchange, items with drawback usually possess greater stats than normal items. For comparison, the normal health regeneration is 1% of a user's max health (.75% of health excluding defense for combat) per second.
To calculate how much damage you take from drawback every attack, use the following formula:
$$ \text{damage} = \frac{(100 + 9 \cdot (\text{playerLevel} - 1)) \cdot \text{drawbackValue}}{100} $$
Where:
drawbackValue is the amount of drawback the player has.
playerLevel is the level of the player.
In plain text, this is:
damage = (100 + 9 × (playerLevel - 1)) × drawbackValue ÷ 100
What it does and how it works.
Insanity is a tertiary stat alongside warding, and drawback.
Insanity is a negative stat that can be found on armor, which, as a stat, can only be found on items found in the Dark Sea through the Atlantean modifier (which then increases/adds other stats). Insanity causes strange occurrences such as hallucinations, temporary blindness, and fake damage numbers to occur on afflicted players. The higher this value is, the more frequently effects of insanity will occur, and the more intense they get. It's worth noting that environmental insanity CAN STACK with armor. For example, if you go to Akursius Keep (1 passive insanity), and equip 4 Atlantean armor pieces, it will result in Insanity 5. This does not work with potions however. Having 2 insanity from armor and getting hit by an Insanity 3 potion will only result in Insanity 3.
You cannot calculate a number for Insanity because it makes the player weaker through visual effects.
What they are and what they do.
Players can fuse two jewels at a jewelcrafting table to create a fused jewel. The resulting jewel retains only a portion of each source jewel's stats, then adds those reduced values together. The retention multiplier differs by stat.
| Stat | Multiplier |
|---|---|
| Power | 3/5 |
| Defense | 3/5 |
| Regeneration | 3/5 |
| Pierce | 3/5 |
| Resistance | 3/5 |
| Size | 2/3 |
| Dexterity | 2/3 |
| Range | 2/3 |
| Haste | 2/3 |
| Drawback | 1/2 |
For the full formula and a worked example, see Fused Jewels Calculation.
The full formula and a step-by-step example.
$$\text{levelFactor} = \frac{\text{playerLevel}}{10}$$
For each stat on a jewel:
If the jewel is a Painite and the stat is defense:
scaled = ⌊188 × playerLevel ÷ 175⌋
If the stat is power:
scaled = round(rawStat × scalingValue × levelFactor)
Otherwise:
scaled = ⌊rawStat × scalingValue × levelFactor⌋
Once each jewel's stats are scaled to their final value, the fusion formula is applied identically for both paths. For each stat that appears on either jewel:
$$\text{fusedStat} = \sum_{i=1}^{n} \Big\lfloor \text{scaledValue}_i \times r + \delta \Big\rfloor$$
Where:
scaledValuei is the scaled value of that stat on jewel i (0 if the jewel does not have that stat).
r is the retention multiplier for the stat, from the table on the Fused Jewels page. If a stat is not listed, r defaults to 0.6.
δ (delta) is 0.5 for power, 1 − ε (epsilon) for defense when either source jewel is an Agate, Amethyst, Diamond, Onyx, or Defense Jewel, and 0 for all other stats.
⌊ ⌋ denotes floor, applied per jewel individually before summing.
In plain text:
fusedStat = floor(scaledA × r + δ) + floor(scaledB × r + δ)
Drawback uses its reduction multiplier (1/2) but no scaling and no floor, it is applied directly to the raw value.
Fusing a Malachite (power: 0.071429, size: 0.075) with a Painite (drawback: 1, defense: 0.326) at player level 175.
Step 1, compute levelFactor:
levelFactor = 175 ÷ 10 = 17.5
Step 2, scale Malachite:
power: round(0.071429 × 3.5 × 17.5) = round(4.37502...) = 4
size: ⌊0.075 × 5 × 17.5⌋ = ⌊6.5625⌋ = 6
Step 3, scale Painite:
Painite has drawback ≥ 0.5, so defense uses the Painite formula instead of the standard one:
defense: ⌊188 × 175 ÷ 175⌋ = ⌊188⌋ = 188
drawback: non-scaling stat, raw value = 1
Step 4, fuse Power (r = 3/5, δ = 0.5):
Malachite: ⌊4 × 3/5 + 0.5⌋ = ⌊2.9⌋ = 2
Painite has no power: ⌊0 × 3/5 + 0.5⌋ = ⌊0.5⌋ = 0
Fused Power = 2 + 0 = 2
Step 5, fuse Size (r = 2/3, δ = 0):
Malachite: ⌊6 × 2/3⌋ = ⌊4⌋ = 4
Painite has no size: ⌊0 × 2/3⌋ = 0
Fused Size = 4 + 0 = 4
Step 6, fuse Defense (r = 3/5, δ = 0):
Painite is not an Agate, Amethyst, Diamond, Onyx, or Defense Jewel, so δ = 0.
Malachite has no defense: ⌊0 × 3/5⌋ = 0
Painite: ⌊188 × 3/5⌋ = ⌊112.8⌋ = 112
Fused Defense = 0 + 112 = 112
Step 7, fuse Drawback (non-scaling, multiplier = 1/2, no floor):
Malachite has no drawback: 0
Painite: 1 × 1/2 = 0.5
Fused Drawback = 0 + 0.5 = 0.5
Result:
| Stat | Final Value |
|---|---|
| Power | 2 |
| Size | 4 |
| Defense | 112 |
| Drawback | 0.5 |
What they are and what is their purpose.
Scaling values are constants used in formulas to calculate raw stats into final values.
You can find the scaling value below for each stat:
| Stat | Scaling Value |
|---|---|
| Power | 3.5 |
| Defense | 27 |
| Size | 5 |
| Dexterity | 5 |
| Range | 5 |
| Haste | 5 |
| Resistance | 5 |
| Regeneration | 5 |
| Pierce | 5 |
| Warding | - |
| Drawback | - |
| Insanity | - |
Stats with no scaling values simply don't need them as they don't scale at all.
What they are and what is their purpose.
Efficiency points, also known as EP are used to determine the overall efficiency of an armor piece by averaging each stat into a single value for comparison.
| Stat | Efficiency Point Value | Efficiency Point per Stat |
|---|---|---|
| Power | 3 | 1 efficiency point = 3 power |
| Defense | 9 | 1 efficiency point = 9 defense |
| Size | 1 | 1 efficiency point = 1 size |
| Dexterity | 1 | 1 efficiency point = 1 dexterity |
| Range | 1 | 1 efficiency point = 1 range |
| Haste | 1 | 1 efficiency point = 1 haste |
| Resistance | 1 | 1 efficiency point = 1 resistance |
| Regeneration | 1 | 1 efficiency point = 1 regeneration |
| Pierce | 1 | 1 efficiency point = 1 pierce |
| Warding | 1.5 | 1 efficiency point = 1.5 warding |
| Drawback | -2 | 1 efficiency point = -2 drawback |
| Insanity | -3 | 1 efficiency point = -3 insanity |
To calculate the efficiency points of an item, you will use one of two formulas based on the stat then add every result together:
If the stat is warding, drawback, or insanity, use this formula:
(statValue * epValue) * (playerLevel / 10)
Otherwise, use this formula:
statValue * epValue