Era accuracy modules are Lua and SQL modules that revert game mechanics, drop tables, or job abilities to how they behaved during a specific expansion. Rather than mixing these reverts in with general custom modules, the repository provides dedicated folders named after each expansion.
This makes it easy to understand which changes belong to which era and to selectively enable or disable entire expansions’ worth of reverts.
Expansion folders
| Folder | Expansion | Date range |
|---|
cop/ | Chains of Promathia | September 2004 – March 2006 |
toau/ | Treasures of Aht Urhgan | April 2006 – October 2007 |
wotg/ | Wings of the Goddess | November 2007 – May 2010 |
abyssea/ | Abyssea Add-ons | June 2010 – February 2013 |
soa/ | Seekers of Adoulin | March 2013 – April 2015 |
rov/ | Rhapsodies of Vana’diel | May 2015 – July 2020 |
Placing a module in the correct folder is a convention, not a technical requirement. The server loads modules based on init.txt regardless of which folder they are in. The folder names communicate intent and help you and others reason about what the module is doing.
The rule of thumb: if a change occurred in December 2010, place the module that reverts it in the abyssea/ folder, since Abyssea is the expansion that introduced the change.
Existing era accuracy modules
cop/
| File | Description |
|---|
lua/pre_rmt_drops.lua | Restores Astral Ring to Castle Oztroja chest drops (removed in 2007 RMT countermeasures) |
toau/
| File | Description |
|---|
lua/cop_signet.lua | Reverts Signet’s effect on healing regen to pre-March 2007 behavior |
sql/mob_droplist_removal.sql | Removes ACP, AMK, ASA, and WotG items from drop tables |
sql/original_absorb_casting_time.sql | Restores pre-ToAU casting times for Absorb spells |
sql/pre_rmt_drops.sql | Removes RMT-countermeasure drop changes from 2007 |
wotg/
| File | Description |
|---|
lua/job_adjustments.lua | Reverts job ability changes introduced during the WotG era |
lua/pdif_caps_revert.lua | Restores original pDIF caps for all weapon skills (pre-2007-08-27) |
lua/weaponskills/ | Per-weapon-skill era reverts |
sql/2007_exp_tables.sql | Restores 2007 experience point tables |
sql/job_adjustments.sql | Reverts database-side job stat changes |
sql/tier_one_weapon_skills.sql | Reverts weapon skill tier data |
abyssea/
| File | Description |
|---|
lua/cop_mission_level_caps.lua | Restores CoP mission level caps removed during Abyssea |
lua/era_HNM_system.lua | Reverts HNM behavior to pre-Abyssea rules |
lua/job_adjustments.lua | Removes traits and abilities added during the Abyssea era (multiple jobs) |
lua/unlocking_a_myth.lua | Reverts Unlocking a Myth quest behavior |
sql/cop_level_restrictions.sql | Restores CoP area level restrictions |
sql/era_abilities_enmity.sql | Reverts job ability enmity values |
sql/era_spell_enmity.sql | Reverts spell enmity values |
sql/guild_item_points.sql | Restores pre-Abyssea guild item point costs |
sql/item_cooldowns.sql | Restores item cooldown values |
sql/job_adjustments.sql | Reverts database-side job changes |
sql/mob_droplist_removal.sql | Removes Abyssea-era additions from drop tables |
sql/revert_two_hours.sql | Reverts two-hour ability changes |
soa/
| File | Description |
|---|
lua/job_adjustments.lua | Reverts job ability and trait changes from the SoA era |
lua/northward.lua | Adjusts Northward-related behavior |
lua/physical_hit_cap.lua | Reverts physical hit rate cap to pre-SoA values |
lua/scavenge_data.lua | Reverts Scavenge item data |
sql/job_adjustments.sql | Database-side job stat reverts |
sql/magic_adjustments.sql | Reverts magic parameter changes |
sql/pre_2014_skill_ranks.sql | Restores pre-2014 skill rank assignments |
sql/weaponskills.sql | Reverts weapon skill database entries |
rov/
| File | Description |
|---|
lua/era_effect_composure.lua | Reverts Composure effect behavior |
lua/era_moongate_time.lua | Reverts Moongate timing |
lua/job_adjustments.lua | Reverts job adjustments from the RoV era |
lua/The_Kuftal_Tour.lua | Adjusts The Kuftal Tour quest |
sql/guild_item_points.sql | Restores pre-RoV guild item point costs |
sql/job_adjustments.sql | Database-side job stat reverts |
Loading era accuracy modules
Add the relevant folders to modules/init.txt. You can load an entire era at once or individual files:
# Load all WotG era reverts
wotg/
# Load only the pDIF cap revert
wotg/lua/pdif_caps_revert.lua
# Load multiple eras
cop/
toau/
wotg/
Writing your own era accuracy module
The process is the same as writing any Lua or SQL module. The only convention is the folder placement.
Example: reverting a pDIF cap (Lua)
This is based directly on modules/wotg/lua/pdif_caps_revert.lua. It sets pDIF caps back to { 2, 2 } across all weapon types, which was the value before the 2007-08-27 ToAU update:
modules/wotg/lua/pdif_caps_revert.lua
-----------------------------------
-- Original pDIF caps for the base game.
-- Date: 2007-08-27 (one day before the ToAU 2H update)
-----------------------------------
require('modules/module_utils')
-----------------------------------
local m = Module:new('original_pdif_caps')
xi.combat.physical.pDifWeaponCapTable[xi.skill.HAND_TO_HAND ] = { 2, 2 }
xi.combat.physical.pDifWeaponCapTable[xi.skill.DAGGER ] = { 2, 2 }
xi.combat.physical.pDifWeaponCapTable[xi.skill.SWORD ] = { 2, 2 }
xi.combat.physical.pDifWeaponCapTable[xi.skill.GREAT_SWORD ] = { 2, 2 }
-- ... all remaining weapon types ...
return m
Example: reverting a status effect duration (Lua)
This pattern overrides an ability’s use function to restore an older duration. The source comment is important — it records which version update introduced the change.
-----------------------------------
-- Arcane Circle: Revert duration from 3 minutes to 1 minute
-- Source: https://www.bg-wiki.com/ffxi/Version_Update_(02/13/2012)
-----------------------------------
require('modules/module_utils')
local m = Module:new('arcane_circle_revert')
m:addOverride('xi.job_utils.dark_knight.useArcaneCircle', function(player, target, ability)
local duration = 60 + player:getMod(xi.mod.ARCANE_CIRCLE_DURATION)
local power = 15
if player:getMainJob() ~= xi.job.DRK then
power = 5
end
power = power + player:getMod(xi.mod.ARCANE_CIRCLE_POTENCY)
target:addStatusEffect(xi.effect.ARCANE_CIRCLE, { power = power, duration = duration, origin = player })
return xi.effect.ARCANE_CIRCLE
end)
return m
Example: removing a drop from a specific era (SQL)
Place the file in the folder corresponding to when the item was added — reverting it means removing what was introduced.
modules/toau/sql/mob_droplist_removal.sql
-- Remove WotG spell scrolls that weren't available during the ToAU era
DELETE FROM mob_droplist WHERE itemId = 4702; -- Scroll of Sacrifice
DELETE FROM mob_droplist WHERE itemId = 4701; -- Scroll of Cura
DELETE FROM mob_droplist WHERE itemId = 4726; -- Scroll of Enthunder II
Tips
- Always include a source comment linking to the version update or patch notes that document the original change. This makes the module self-documenting and verifiable.
- Use the expansion date ranges in the table above to decide which folder a module belongs in — not the date you wrote the module.
- If you are not sure which expansion introduced a change,
abyssea/ is a reasonable default for changes from 2010–2013, which is the most heavily modified era.
- Era accuracy modules are disabled by default. They only take effect when you add them to
init.txt.