Melvor Idle: v1.2.2 -> v1.3 Data Migration Guide
Automatic Data Migration
To assist in the transition between v1.2.2 and v1.3's data formats we have created an automatic data migration script. To use it, simply hit the button below and select a data package you wish to upgrade. An upgraded version of the file will be downloaded, as well as a log about any data that could not be automatically upgraded (if any).
Using this guide
This guide outlines the changes that have been made to the data package format. Each change is outlined with a severity level, and markers for if automatic data migration can fix them.
Severity Levels
- BREAKING: Indicates a change to the format that breaks the previous functionality
- DEPRECATED: Indicates a change to the format where properties have been superseded by new properties. The old properties will be removed in a future game update
- OTHER: Indicates a change to the format that does not break existing functionality, and generally requires no action
Markers
- 🛠: Indicates that the change is automatically fixed by the data upgrade script
- ❗: Indicates that the change cannot be automatically fixed, and requires manual editing
- 🛠❗: Indicates that the change is partially fixed by automatic data migration, and may require manual fixes
Changes to the Data Package Format
Ancient Relics
- 🛠 OTHER: The unused
description
property has been removed
Combat/Slayer Areas & Dungeons
-
❗ BREAKING: Removed the
skillUnlockCompletions
property from Dungeons, as this is now controlled by Gamemode data -
🛠 DEPRECATED: Slayer Area Effects
modifier
property ->modifiers
(Uses standard modifier format) -
🛠 DEPRECATED: The
combatAreaDisplayOrder
,slayerAreaDisplayOrder
anddungeonDisplayOrder
game data properties should be replaced by theareas
property of a modification for a Combat Area Category
Conditional Modifiers
-
🛠 BREAKING: Removed the
DOT
,Effect
,IsStunned
,IsSleeping
conditions in favour of the newCombatEffectGroup
andCombatEffect
conditions - ❗ BREAKING: Removed the
IsFighting
condition
Gamemodes
- ❗ BREAKING: Skill Level Cap increases and unlocks have been refactored for Ancient Relic like gamemodes.
-
The following properties have been removed:
overrideLevelCap
,allowDungeonLevelCapIncrease
,skillCapIncreasesPre99
,skillCapIncreasesPost99
,autoLevelSkillsPre99
,autoLevelSkillsPost99
,skillCapRollsPre99
,skillCapRollsPost99
-
To set the initial level caps of skills use the
defaultInitialLevelCap
andinitialLevelCaps
properties -
To allow the increase of skill level caps when meeting requirements, use the
levelCapIncreases
property in conjunction with theskillLevelCapIncreases
game data property -
To allow the purchase of skill level caps, use the
levelCapCost
andabyssalLevelCapCost
properties -
To control when skills are unlocked in the gamemode use the
useDefaultSkillUnlockRequirements
andskillUnlockRequirements
properties - In order to facilitate the conversion between the old and new formats in saves:
-
set the
pre99RollConversion
property to a level cap increase equivalent to the oldskillCapRollsPre99
andskillCapIncreasesPre99
properties -
set the
post99RollConversion
property to a level cap increase equivalent to the oldskillCapRollsPost99
andskillCapIncreasesPost99
properties -
Note: To prevent save data loss, gamemodes with the
allowDungeonLevelCapIncrease
property set to true will throw an error when attempted to be loaded
Items
Equipment/Weapon Items
-
🛠 DEPRECATED: The
damageReduction
equipment stat should be replaced by theresistance
equipment stat with thedamageType
property set tomelvorD:Normal
Readable Items
-
🛠 BREAKING: The
title
property of theswalData
property now uses a single lang string id instead of the old category + id format
Token Items
-
🛠 BREAKING: Token items that were able to be claimed for Mastery Pool XP are now
their own item type of
MasteryToken
Item Upgrades
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Magic Spells
-
🛠 BREAKING: The
spellType
andspellTier
properties have been removed from Attack Spells, and should be replaced with thecategories
property -
🛠 BREAKING: The
targetModifiers
property of Curse spells has been removed and should be replaced with theeffect
property -
🛠 BREAKING: The
specialAttack
property of Archaic Spells has been renamed tospecialAttackID
-
🛠 DEPRECATED: The
standardSpells
,ancientSpells
andarchaicSpells
game data properties have been replaced with a new unifiedattackSpells
property
Modifiers
- 🛠❗ BREAKING: The modifier system has been refactored and many modifiers have been removed
-
Any modifiers that provided a chance to apply an effect in combat have been removed in favour of the
new Combat Effects system. Most data types that support modifiers now support an optional
combatEffects
property for this purpose - Automatic Data Migration is able to convert these, with the exception of conditional modifiers, and data types that do not support combat effects. These will be logged in the data migration output
-
Modifiers that were providing bonuses to the combat stats of a character's target have been removed.
Most data types that support modifiers now support an optional
enemyModifiers
(or an equivalent) property for this purpose instead -
Automatic Data Migration is able to convert these, with the exception of data types that do not
support
enemyModifiers
(or an equivalent) property. These will be logged in the data migration output - Some modifiers have been removed as their implementation was better suited for the conditional modifiers system. Most data types that support modifiers now also support conditional modifiers.
-
Automatic Data Migration is able to convert these, with the exception of data types that do not
support
conditionalModifiers
. These will be logged in the data migration output - Modifiers which did not have any functionality, or were providing one off effects to items have been removed
- 🛠 DEPRECATED: Several modifiers have been renamed or combined together. The old names of these modifiers are still valid and can be loaded via a data package
Monsters
- 🛠 DEPRECATED:
gpDrops
->currencyDrops
Pets
-
🛠 BREAKING: The
langHint
property now uses a single lang string id instead of the old category + id format
Shop Purchases
-
🛠 DEPRECATED: For the
cost
property:gp
,slayerCoins
,raidCoins
->currencies
Skill Data
All Skills
-
🛠 DEPRECATED:
ancientRelics
,completedAncientRelic
->ancientRelicSets
Agility
-
🛠 BREAKING: Agility Skill Data no longer has an
elitePillars
property. All pillars should now be defined using thepillars
property. Pillars are now distinguished by the new mandatoryslot
property. -
🛠 DEPRECATED: Agility Obstacles and Pillars
gpCost
andscCost
->currencyCosts
-
🛠 DEPRECATED: Agility Obstacles
gpReward
andscReward
->currencyRewards
Archaeology
Archaeology Dig Sites
-
🛠 DEPRECATED:
mapCreationCost.gp
andmapCreationCost.sc
->mapCreationCost.currencies
-
🛠 DEPRECATED:
mapUpgradeCost[i].gp
andmapUpgradeCost[i].sc
->mapUpgradeCost[i].currencies
Archaeology Museum Rewards
- 🛠 DEPRECATED:
gp
andsc
->currencies
Astrology
Constellations
-
🛠 BREAKING: The
modifiers
property now uses the standard modifier data format, and theincrementValue
property has been removed -
🛠 OTHER: The unused
gpReward
,scReward
anditemRewards
properties have been removed
Cartography
Points of Interest
-
🛠 BREAKING: The
activeModifiers
property has been replaced by theactiveStats
property -
🛠 DEPRECATED: For the
fastTravel.unlockCosts
property:gp
andsc
->currencies
-
🛠 DEPRECATED: For the
discoveryRewards
property:gp
andsc
->currencies
Hexes
-
🛠 DEPRECATED: For the
travelCost
property:gp
andsc
->currencies
World Map Mastery Bonuses
- 🛠 DEPRECATED:
gp
andsc
->currencies
Paper Making Recipes
-
🛠 DEPRECATED: For the
costs
property:gp
andsc
->currencies
Refinement Slot Costs
- 🛠 DEPRECATED:
gp
andsc
->currencies
Random Travel Events
-
🛠 DEPRECATED: For the
rewards
property:gp
andsc
->currencies
Cooking
Cooking Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Cooking Categories
-
🛠❗ BREAKING: Now require a
modifierName
property, which is the name used for a category in modifier descriptions. An optionalmodifierNameLang
property has also been added for lang string use. Automatic data migration adds a placeholder property value that you will need to manually set.
Crafting
Crafting Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Farming
Farming Recipes
-
🛠 BREAKING:
grownNameLang
property now uses a single lang string ID instead of the old category + id format
Farming Plots
- 🛠 DEPRECATED:
gpCost
->currencyCosts
Fishing
-
🛠 BREAKING:
specialItems
are now defined on a per Realm basis, and now must be defined as an array of realm + drops
Fletching
Fletching Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Mining
Mining Rocks
- 🛠 DEPRECATED:
type
->category
Action Event Matchers
-
🛠 DEPRECATED: Mining Action Event Matchers
oreTypes
->categories
Runecrafting
Runecrafting Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Action Event Matchers
- 🛠 DEPRECATED:
subcategories
->subcategoryIDs
Herblore
Herblore Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Slayer
-
🛠 DEPRECATED: Slayer Task Requirements
tier
->category
Smithing
Smithing Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Summoning
Summoning Recipes
-
🛠 DEPRECATED:
gpCost
andscCost
->currencyCosts
Thieving
Thieving NPCs
- 🛠 DEPRECATED:
maxGP
->currencyDrops
Township
Tasks
- 🛠 BREAKING: Normal Tasks and Casual Tasks now have separate data formats
-
Normal Tasks now only support
items
,monsters
,skillXP
,numPOIs
andnumRefinements
as goals -
Casual Tasks now only support
items
,monsters
,monsterWithItems
andskillXP
as goals - Normal Tasks
category
property now accepts the ID of a task category - Casual Tasks no longer have a
category
property - Normal Tasks no longer have a
requirements
property - The unused
name
property has been removed - The unused Tutorial task category has been removed
-
🛠 DEPRECATED:
rewards
property for Township Casual/Normal tasks:gp
andslayerCoins
->currencies
Woodcutting
Trees
-
🛠 BREAKING: Removed the
canDropRavenNest
property in favour of therandomProducts
property
Special Attacks
-
🛠 BREAKING: The format for the
prehitEffects
andonhitEffects
properties of Special Attacks no longer define combat effects, and instead reference registered combat effects and their configuration -
🛠 BREAKING: The
consumesStacks
property has been replaced with a newconsumesEffect
property -
🛠 BREAKING: The mechanism for performing a Normal Attack when a Special Attack's
effects are active has been changed from being automatic based on the effects + damage to an optional
canNormalAttack
property