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

90 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.