Contract Overhaul Project: Added Functionality for Covert Contracts - #9829
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #9829 +/- ##
============================================
+ Coverage 22.18% 22.21% +0.03%
- Complexity 13699 13791 +92
============================================
Files 1559 1565 +6
Lines 181895 182341 +446
Branches 28071 28143 +72
============================================
+ Hits 40354 40508 +154
- Misses 137590 137880 +290
- Partials 3951 3953 +2 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR extends the contract overhaul work by introducing a formal contract “nature” (e.g., Covert Operation), persisting it to saves, and updating the contract-market UI and generation logic so covert offers obscure employer identity until accepted. It also includes additional negotiation/pay-system refactors and new optional negotiation mechanics that integrate with the same contract pipeline.
Changes:
- Add
ContractNature(NORMAL / PROVING_GROUND / COVERT) and update contract generation + UI to support covert offers (hidden employer badge/emblem, covert enemy-selection rules). - Add optional negotiation mechanics: non‑negotiable (locked) terms and one-shot “Re‑Negotiate” (active negotiators), including XML persistence and UI rendering.
- Refactor contract pay determination into scheme classes (
AbstractContractDeterminationPaywith Chaos/CamOps implementations) and update tests accordingly.
Reviewed changes
Copilot reviewed 41 out of 41 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| MekHQ/unittests/mekhq/campaign/mission/contract/io/ContractXmlCodecTest.java | Updates codec tests for ContractNature serialization. |
| MekHQ/unittests/mekhq/campaign/mission/contract/EnemySelectionProfileTest.java | Removes now-obsolete covert objective→profile mapping assertions. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationTermsTest.java | Renames/update tests to match ChaosContractDeterminationTerms. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationPayTest.java | Adds unit tests for Chaos pay scheme calculations. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationObjectiveTest.java | Renames/update tests for objective determination class rename. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationIntensityTest.java | Renames/update tests for intensity determination class rename. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationEmployerTest.java | Renames/update tests for employer determination class rename. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/CamOpsContractDeterminationPayTest.java | Adds unit tests for CamOps pay scheme. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractGeneration/AbstractContractDeterminationPayTest.java | Adds tests for scheme selection/template method + shared transport pay. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractData/NonNegotiableTermsDataTest.java | Adds tests for locked-term mapping helpers. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractData/NegotiationStepMathTest.java | Adds tests for plateau-crossing and sacrifice/restore math. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractData/ActiveNegotiationMathTest.java | Adds tests for opposed-check scoring logic. |
| MekHQ/unittests/mekhq/campaign/mission/contract/contractData/ActiveNegotiationDataTest.java | Adds tests for active negotiation outcome record behavior. |
| MekHQ/src/mekhq/gui/dialog/markets/contractMarket/ContractNegotiationDialog.java | Adds locked-term behavior + active renegotiation UI/logic; updates sacrifice rules. |
| MekHQ/src/mekhq/gui/dialog/markets/contractMarket/ContractEditorDialog.java | Adds contract “Type” picker and non-negotiable term checkboxes. |
| MekHQ/src/mekhq/gui/dialog/markets/contractMarket/ContractDossierPanel.java | Adds covert-operation badge and improves badge spacing logic. |
| MekHQ/src/mekhq/gui/dialog/markets/contractMarket/ContractCardPanel.java | Hides employer emblem for covert offers and adds contrast helper. |
| MekHQ/src/mekhq/gui/campaignOptions/contents/MarketsOptionsModel.java | Adds model fields for new negotiation-related campaign options. |
| MekHQ/src/mekhq/gui/campaignOptions/contents/ContractMarketPage.java | Adds campaign option checkboxes for non-negotiable terms/active negotiators. |
| MekHQ/src/mekhq/campaign/mission/contract/utilities/MHQMorale.java | Passes covert flag into enemy generation. |
| MekHQ/src/mekhq/campaign/mission/contract/io/ContractXmlCodec.java | Persists ContractNature, non-negotiable terms, and active negotiation data. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosObjectiveType.java | Adds isCovertCandidate flag to drive covert contract generation chance. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationTerms.java | Renames terms-determination class. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationPay.java | Introduces Chaos pay scheme implementation class. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationObjective.java | Renames objective-determination class. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationIntensity.java | Renames intensity-determination class. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationEnemy.java | Adds covert override for enemy-selection profile. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/ChaosContractDeterminationEmployer.java | Renames employer-determination class. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/CamOpsContractDeterminationPay.java | Refactors CamOps pay into a scheme implementation class. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/AbstractContractGeneration.java | Integrates covert designation, locked terms, and new pay-scheme selector. |
| MekHQ/src/mekhq/campaign/mission/contract/contractGeneration/AbstractContractDeterminationPay.java | Introduces base pay-scheme abstraction + shared transport calculation. |
| MekHQ/src/mekhq/campaign/mission/contract/contractData/NonNegotiableTermsData.java | Adds record representing locked/non-negotiable term flags. |
| MekHQ/src/mekhq/campaign/mission/contract/contractData/NegotiationStepMath.java | Adds shared math for plateau-crossing and sacrifice caps. |
| MekHQ/src/mekhq/campaign/mission/contract/contractData/ContractObjectiveType.java | Switches certain objective enemy-selection profiles to DEFAULT (covert now handled by contract nature). |
| MekHQ/src/mekhq/campaign/mission/contract/contractData/ContractNature.java | Adds ContractNature enum with tolerant parsing for saves. |
| MekHQ/src/mekhq/campaign/mission/contract/contractData/ActiveNegotiationMath.java | Adds pure scoring functions for active negotiation outcomes. |
| MekHQ/src/mekhq/campaign/mission/contract/contractData/ActiveNegotiationData.java | Adds record for one-shot active negotiation results + per-term deltas. |
| MekHQ/src/mekhq/campaign/mission/contract/AbstractContract.java | Adds fields for nature/locked-terms/active-negotiation + hidden employer display name. |
| MekHQ/src/mekhq/campaign/campaignOptions/CampaignOption.java | Adds options for non-negotiable terms and active negotiators. |
| MekHQ/resources/mekhq/resources/ChaosContractMarketDialog.properties | Adds/updates UI strings for covert + negotiation features. |
| MekHQ/resources/mekhq/resources/CampaignOptionsDialog.properties | Adds labels/tooltips for new campaign options. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
# Conflicts: # MekHQ/src/mekhq/gui/dialog/markets/contractMarket/ContractNegotiationDialog.java
Requires #9821
Requires #9823
Requires #9824
Requires #9825
What this changes
Some contracts will now appear marked as 'Covert Operations'. These obscure the employer's identify until after the contract is accepted.
Testing
{@code true}/{@code null}rather than bare or quoted textexplain and have verified the result