Skip to content

Contract Overhaul Project: Added Functionality for Covert Contracts - #9829

Merged
HammerGS merged 29 commits into
MegaMek:mainfrom
IllianiBird:covertContracts
Aug 26, 2026
Merged

Contract Overhaul Project: Added Functionality for Covert Contracts#9829
HammerGS merged 29 commits into
MegaMek:mainfrom
IllianiBird:covertContracts

Conversation

@IllianiBird

@IllianiBird IllianiBird commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

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

  • Manual testing

  • This PR is focused on one issue or RFE. Large refactoring or accessibility work is in its own PR
  • Every file in the diff has a deliberate change (no stray formatting, no unrelated files)
  • Tests added or updated, if this implements a rule or changes campaign state
  • Javadoc literals use {@code true} / {@code null} rather than bare or quoted text
  • Dev team only: if AI tools were used, the AI Assisted Development label is applied, and I can
    explain and have verified the result

@IllianiBird IllianiBird self-assigned this Aug 26, 2026
@IllianiBird
IllianiBird requested a review from a team as a code owner August 26, 2026 01:05
@IllianiBird IllianiBird added GUI/UX User interface and user experience Stacked PR Built on another open PR: review and merge that one first; this retargets to main automatically labels Aug 26, 2026
@codecov

codecov Bot commented Aug 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 25.90476% with 389 lines in your changes missing coverage. Please review.
✅ Project coverage is 22.21%. Comparing base (5c78f7e) to head (be40c0a).
⚠️ Report is 7 commits behind head on main.

Files with missing lines Patch % Lines
...kets/contractMarket/ContractNegotiationDialog.java 0.00% 232 Missing ⚠️
...campaign/mission/contract/io/ContractXmlCodec.java 41.79% 37 Missing and 2 partials ⚠️
...g/markets/contractMarket/ContractEditorDialog.java 0.00% 39 Missing ⚠️
...contractGeneration/AbstractContractGeneration.java 0.00% 30 Missing ⚠️
...i/campaignOptions/contents/ContractMarketPage.java 0.00% 10 Missing ⚠️
...alog/markets/contractMarket/ContractCardPanel.java 0.00% 10 Missing ⚠️
...hq/campaign/mission/contract/AbstractContract.java 42.85% 7 Missing and 1 partial ⚠️
.../mission/contract/contractData/ContractNature.java 46.15% 5 Missing and 2 partials ⚠️
...g/markets/contractMarket/ContractDossierPanel.java 0.00% 5 Missing ⚠️
.../contract/contractData/NonNegotiableTermsData.java 81.81% 1 Missing and 1 partial ⚠️
... and 6 more
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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 (AbstractContractDeterminationPay with 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.

IllianiBird and others added 2 commits August 26, 2026 11:47
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@HammerGS
HammerGS merged commit f8ec0d0 into MegaMek:main Aug 26, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

GUI/UX User interface and user experience Stacked PR Built on another open PR: review and merge that one first; this retargets to main automatically

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants