Files
core2026/docs/architecture/legacy-engine-economy.md
T

3.4 KiB
Raw Blame History

Legacy Economy and Monthly Updates

This document summarizes the legacy economic pipeline: monthly income, maintenance, population growth, city supply recalculation, and nation level updates. References include legacy/hwe/func_time_event.php, legacy/hwe/sammo/Event/Action/*, and legacy/hwe/sammo/TurnExecutionHelper.php.

Entry Points

  • TurnExecutionHelper::executeAllCommand()
    • Calls runEventHandler(PRE_MONTH)preUpdateMonthly()turnDate()runEventHandler(MONTH)postUpdateMonthly().
  • Event actions under legacy/hwe/sammo/Event/Action/ execute concrete economic updates.

Monthly Income (ProcessIncome)

Event/Action/ProcessIncome distributes gold and rice on schedule:

  • Collects all nations and cities, groups generals per nation.
  • Computes income using:
    • getGoldIncome() / getRiceIncome() from func_time_event.php.
    • getWallIncome() for rice from walls (same file).
  • Applies nation tax rate (rate_tmp) and salary ratio (bill).
  • Pays generals by dedication via getBill().
  • Updates nation_env.prev_income_{gold|rice} and logs to history.

Key dependencies:

  • GameConst::$basegold, GameConst::$baserice for minimum reserves.
  • GameConst::$resourceActionAmountGuide for action amounts.
  • iAction::onCalcNationalIncome() for nation-type modifiers.

Semiannual Maintenance (ProcessSemiAnnual)

Event/Action/ProcessSemiAnnual applies upkeep and growth:

  • City stats decay by 1% (agri/comm/secu/def/wall).
  • Population growth via popIncrease():
    • Uses tax rate (rate_tmp) and security.
    • Nation type can adjust via onCalcNationalIncome('pop', ...).
  • General and nation resources decay (15% bands based on thresholds).

War Income and Casualties (ProcessWarIncome)

Event/Action/ProcessWarIncome:

  • Converts city.dead into national gold income (supply-based war income).
  • Returns 20% of dead to population (pop += dead * 0.2), then clears dead.

City Supply and Isolation (UpdateCitySupply)

Event/Action/UpdateCitySupply:

  • BFS from each nation capital through CityConst paths to mark supply = 1.
  • Unsupplied cities (supply = 0) receive 10% stat/pop loss monthly.
  • Generals in unsupplied cities lose 5% crew/train/atmos.
  • Cities with trust < 30 become neutral (nation = 0), and officers are reset.

Nation Level Updates (UpdateNationLevel)

Event/Action/UpdateNationLevel:

  • Nation level increases based on number of level≥4 cities.
  • On level-up:
    • Grants gold/rice bonus.
    • Logs global and national history.
    • Initializes nation_turn rows for new chief levels.
    • Runs a unique-item lottery (deterministic RNG tagged nationLevelUp).

City Trade Rates (RandomizeCityTradeRate)

  • Once per month, adjusts city.trade with deterministic RNG:
    • Probability depends on city level.
    • Trade rate ranges 95105 when triggered.

RNG Notes

Economic events using RNG seed with UniqueConst::$hiddenSeed and a feature-specific tag:

  • RandomizeCityTradeRate: hiddenSeed + 'randomizeCityTradeRate' + year + month
  • UpdateNationLevel: hiddenSeed + 'nationLevelUp' + year + month + nationID

Open Questions / Follow-ups

  • preUpdateMonthly(), postUpdateMonthly(), and turnDate() live in legacy/hwe/func_time_event.php and legacy/hwe/func.php; their full side effects should be expanded alongside this document.