Skip to main content
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

FolderExpansionDate range
cop/Chains of PromathiaSeptember 2004 – March 2006
toau/Treasures of Aht UrhganApril 2006 – October 2007
wotg/Wings of the GoddessNovember 2007 – May 2010
abyssea/Abyssea Add-onsJune 2010 – February 2013
soa/Seekers of AdoulinMarch 2013 – April 2015
rov/Rhapsodies of Vana’dielMay 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/

FileDescription
lua/pre_rmt_drops.luaRestores Astral Ring to Castle Oztroja chest drops (removed in 2007 RMT countermeasures)

toau/

FileDescription
lua/cop_signet.luaReverts Signet’s effect on healing regen to pre-March 2007 behavior
sql/mob_droplist_removal.sqlRemoves ACP, AMK, ASA, and WotG items from drop tables
sql/original_absorb_casting_time.sqlRestores pre-ToAU casting times for Absorb spells
sql/pre_rmt_drops.sqlRemoves RMT-countermeasure drop changes from 2007

wotg/

FileDescription
lua/job_adjustments.luaReverts job ability changes introduced during the WotG era
lua/pdif_caps_revert.luaRestores original pDIF caps for all weapon skills (pre-2007-08-27)
lua/weaponskills/Per-weapon-skill era reverts
sql/2007_exp_tables.sqlRestores 2007 experience point tables
sql/job_adjustments.sqlReverts database-side job stat changes
sql/tier_one_weapon_skills.sqlReverts weapon skill tier data

abyssea/

FileDescription
lua/cop_mission_level_caps.luaRestores CoP mission level caps removed during Abyssea
lua/era_HNM_system.luaReverts HNM behavior to pre-Abyssea rules
lua/job_adjustments.luaRemoves traits and abilities added during the Abyssea era (multiple jobs)
lua/unlocking_a_myth.luaReverts Unlocking a Myth quest behavior
sql/cop_level_restrictions.sqlRestores CoP area level restrictions
sql/era_abilities_enmity.sqlReverts job ability enmity values
sql/era_spell_enmity.sqlReverts spell enmity values
sql/guild_item_points.sqlRestores pre-Abyssea guild item point costs
sql/item_cooldowns.sqlRestores item cooldown values
sql/job_adjustments.sqlReverts database-side job changes
sql/mob_droplist_removal.sqlRemoves Abyssea-era additions from drop tables
sql/revert_two_hours.sqlReverts two-hour ability changes

soa/

FileDescription
lua/job_adjustments.luaReverts job ability and trait changes from the SoA era
lua/northward.luaAdjusts Northward-related behavior
lua/physical_hit_cap.luaReverts physical hit rate cap to pre-SoA values
lua/scavenge_data.luaReverts Scavenge item data
sql/job_adjustments.sqlDatabase-side job stat reverts
sql/magic_adjustments.sqlReverts magic parameter changes
sql/pre_2014_skill_ranks.sqlRestores pre-2014 skill rank assignments
sql/weaponskills.sqlReverts weapon skill database entries

rov/

FileDescription
lua/era_effect_composure.luaReverts Composure effect behavior
lua/era_moongate_time.luaReverts Moongate timing
lua/job_adjustments.luaReverts job adjustments from the RoV era
lua/The_Kuftal_Tour.luaAdjusts The Kuftal Tour quest
sql/guild_item_points.sqlRestores pre-RoV guild item point costs
sql/job_adjustments.sqlDatabase-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:
init.txt
# 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.

Build docs developers (and LLMs) love