Skip to content

Commit b3b9ca7

Browse files
committed
Added Character Flaws as a New Ability Category
- Introduced a new ability category, `Character Flaws`, for managing abilities with negative XP costs or effects. - Updated `CampaignOptionsAbilityInfo` and relevant enums to handle the new category. - Enhanced UI components to support the `Character Flaws` tab within the abilities sections. - Adjusted ability categorization logic to properly classify flaws based on their negative cost. - Refined `EditSpecialAbilityDialog` functionality and associated resources for seamless integration of the new category.
1 parent 899eefe commit b3b9ca7

File tree

8 files changed

+159
-129
lines changed

8 files changed

+159
-129
lines changed

MekHQ/resources/mekhq/resources/CampaignOptionsDialog.properties

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,23 +1970,29 @@ lblSkillPanelStrategy.text=Strategy
19701970
lblSkillPanelTactics.text=Tactics
19711971
## Advancement Tab
19721972
abilityContentTabs.title=Abilities
1973-
combatAbilitiesTab.title=Combat Abilities
1974-
combatAbilitiesTab.border="Abilities only matter if you know how to use them. A sharp blade is\
1973+
0combatAbilitiesTab.title=Combat Abilities
1974+
0combatAbilitiesTab.border="Abilities only matter if you know how to use them. A sharp blade is\
19751975
\ useless in the hands of someone who doesn't know how to wield it."\
19761976
<br><i>Captain Elena "Ironshadow" Kane\
19771977
<br>Problem, Meet Solution</i>
1978-
maneuveringAbilitiesTab.title=Maneuvering Abilities
1979-
maneuveringAbilitiesTab.border="Talent without discipline is like a fusion engine without a 'Mek\
1978+
1maneuveringAbilitiesTab.title=Maneuvering Abilities
1979+
1maneuveringAbilitiesTab.border="Talent without discipline is like a fusion engine without a 'Mek\
19801980
\ \u2014 powerful, but going nowhere."\
19811981
<br><i>Colonel Liana "Shadow" Voss\
19821982
<br>Axis Innovations</i>
1983-
utilityAbilitiesTab.title=Utility Abilities
1984-
utilityAbilitiesTab.border="Unique abilities? Yeah, I've got one: breaking everything I touch."\
1983+
2utilityAbilitiesTab.title=Utility Abilities
1984+
2utilityAbilitiesTab.border="Unique abilities? Yeah, I've got one: breaking everything I touch."\
19851985
<br><i>Technician Cole "Scrapheap" Drayton\
19861986
<br>The Bulwarks</i>
1987+
3characterFlawsTab.title=Flaws
1988+
3characterFlawsTab.border="They say replacing flesh with metal makes you stronger. I say it just makes you louder when you fall\
1989+
\ over."\
1990+
<br><i>Sergeant Tessa "Karen" Quinn\
1991+
<br>Bob's Bastards</i>
19871992
lblCombatAbilitiesTab.text=Combat Ability Options \u2318
19881993
lblManeuveringAbilitiesTab.text=Maneuvering Ability Options \u2318
19891994
lblUtilityAbilitiesTab.text=Utility Ability Options \u2318
1995+
lblCharacterFlawsTab.text=Character Flaw Options \u2318
19901996
lblEdgeCostPanel.text=Edge Cost
19911997
lblEdgeCost.text=Cost
19921998
lblEdgeCost.tooltip=The cost per rank of Edge.

MekHQ/resources/mekhq/resources/GUI.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ award.text=Award
123123
removeAward.text=Remove Award
124124
spendXP.text=Spend XP
125125
spendOnSpecialAbilities.text=Special Abilities
126-
costNotPossible.text=(Not Possible)
127126
costValue.format=(%dXP)
128127
abilityDesc.format=%s %s
129128
envspec_fog.text=Fog

MekHQ/resources/mekhq/resources/PersonViewPanel.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# General Properties
2-
32
# Buttons
43
lblCall1.text=<html><nobr><b>Callsign:</b></nobr></html>;
54
lblBackground1.text=<html><nobr><b>Background:</b></nobr></html>;
@@ -61,7 +60,7 @@ pnlLogHeader.title=Show Personal Log
6160
pnlLog.title=Hide Personal Log
6261
pnlKillsHeader.title=Show Kill Record
6362
pnlKills.title=Hide Kill Record
64-
lblPermanentInjury.text= permanent injury
63+
lblPermanentInjury.text=permanent injury
6564
btnMedical.tooltip=View medical details
6665
format.itemHeader=<html><b>%s:</b></html>
6766
format.kills=Kills: %d

MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,13 +2214,8 @@ protected Optional<JPopupMenu> createPopupMenu() {
22142214
cost = (int) round(spa.getCost() * intelligenceXpCostMultiplier);
22152215
cost = (int) round(cost * xpCostMultiplier);
22162216

2217-
String costDesc;
2218-
if (cost < 0) {
2219-
costDesc = resources.getString("costNotPossible.text");
2220-
} else {
2221-
costDesc = String.format(resources.getString("costValue.format"), cost);
2222-
}
2223-
boolean available = (cost >= 0) && (person.getXP() >= cost);
2217+
String costDesc = String.format(resources.getString("costValue.format"), cost);
2218+
boolean available = person.getXP() >= cost;
22242219
if (spa.getName().equals(OptionsConstants.GUNNERY_WEAPON_SPECIALIST)) {
22252220
Unit u = person.getUnit();
22262221
if (null != u) {

MekHQ/src/mekhq/gui/campaignOptions/CampaignOptionsAbilityInfo.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@
3030
import mekhq.campaign.personnel.SpecialAbility;
3131

3232
/**
33-
* The {@code AbilityInfo} class represents information about a specific ability,
34-
* encapsulating its name, the associated {@link SpecialAbility}, its active status,
35-
* and its category.
33+
* The {@code AbilityInfo} class represents information about a specific ability, encapsulating its name, the associated
34+
* {@link SpecialAbility}, its active status, and its category.
3635
*/
3736
public class CampaignOptionsAbilityInfo {
3837
private String name;
@@ -41,16 +40,15 @@ public class CampaignOptionsAbilityInfo {
4140
private AbilityCategory category;
4241

4342
/**
44-
* Enum {@code AbilityCategory} represents the categories abilities can belong to.
45-
* Categories available:
43+
* Enum {@code AbilityCategory} represents the categories abilities can belong to. Categories available:
4644
* <ul>
4745
* <li>{@code COMBAT_ABILITIES}: Abilities related to combat actions</li>
4846
* <li>{@code MANEUVERING_ABILITIES}: Abilities related to movement and maneuvering</li>
4947
* <li>{@code UTILITY_ABILITIES}: Abilities providing utility or non-combat benefits</li>
5048
* </ul>
5149
*/
5250
public enum AbilityCategory {
53-
COMBAT_ABILITY, MANEUVERING_ABILITY, UTILITY_ABILITY
51+
COMBAT_ABILITY, MANEUVERING_ABILITY, UTILITY_ABILITY, CHARACTER_FLAW
5452
}
5553

5654
/**
@@ -61,7 +59,8 @@ public enum AbilityCategory {
6159
* @param isEnabled {@code true} if the ability is enabled, otherwise {@code false}
6260
* @param category the category of the ability, represented as an {@link AbilityCategory}
6361
*/
64-
public CampaignOptionsAbilityInfo(String name, SpecialAbility ability, boolean isEnabled, AbilityCategory category) {
62+
public CampaignOptionsAbilityInfo(String name, SpecialAbility ability, boolean isEnabled,
63+
AbilityCategory category) {
6564
this.name = name;
6665
this.ability = ability;
6766
this.isEnabled = isEnabled;

MekHQ/src/mekhq/gui/campaignOptions/CampaignOptionsPane.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929

3030
import static java.lang.Math.round;
3131
import static mekhq.campaign.force.CombatTeam.recalculateCombatTeams;
32+
import static mekhq.gui.campaignOptions.CampaignOptionsAbilityInfo.AbilityCategory.CHARACTER_FLAW;
33+
import static mekhq.gui.campaignOptions.CampaignOptionsAbilityInfo.AbilityCategory.COMBAT_ABILITY;
34+
import static mekhq.gui.campaignOptions.CampaignOptionsAbilityInfo.AbilityCategory.MANEUVERING_ABILITY;
35+
import static mekhq.gui.campaignOptions.CampaignOptionsAbilityInfo.AbilityCategory.UTILITY_ABILITY;
3236
import static mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode.ABRIDGED;
3337
import static mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode.STARTUP_ABRIDGED;
3438
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createSubTabs;
@@ -51,7 +55,6 @@
5155
import mekhq.campaign.personnel.SkillType;
5256
import mekhq.campaign.universe.Faction;
5357
import mekhq.gui.baseComponents.AbstractMHQTabbedPane;
54-
import mekhq.gui.campaignOptions.CampaignOptionsAbilityInfo.AbilityCategory;
5558
import mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode;
5659
import mekhq.gui.campaignOptions.contents.*;
5760

@@ -308,12 +311,14 @@ private JTabbedPane createAdvancementParentTab() {
308311
// SPAs
309312
abilitiesTab = new AbilitiesTab();
310313

311-
JTabbedPane abilityContentTabs = createSubTabs(Map.of("combatAbilitiesTab",
312-
abilitiesTab.createAbilitiesTab(AbilityCategory.COMBAT_ABILITY),
313-
"maneuveringAbilitiesTab",
314-
abilitiesTab.createAbilitiesTab(AbilityCategory.MANEUVERING_ABILITY),
315-
"utilityAbilitiesTab",
316-
abilitiesTab.createAbilitiesTab(AbilityCategory.UTILITY_ABILITY)));
314+
JTabbedPane abilityContentTabs = createSubTabs(Map.of("0combatAbilitiesTab",
315+
abilitiesTab.createAbilitiesTab(COMBAT_ABILITY),
316+
"1maneuveringAbilitiesTab",
317+
abilitiesTab.createAbilitiesTab(MANEUVERING_ABILITY),
318+
"2utilityAbilitiesTab",
319+
abilitiesTab.createAbilitiesTab(UTILITY_ABILITY),
320+
"3characterFlawsTab",
321+
abilitiesTab.createAbilitiesTab(CHARACTER_FLAW)));
317322
// the loading of values from the campaign is built into the AbilitiesTab class so not called here.
318323

319324
// Add Tabs
@@ -445,7 +450,8 @@ private JTabbedPane createStrategicOperationsParentTab() {
445450
* @param isStartUp specifies whether this is run as part of a startup initialization
446451
* @param isSaveAction determines if this action is saving options to a preset
447452
*/
448-
public void applyCampaignOptionsToCampaign(@Nullable CampaignPreset preset, boolean isStartUp, boolean isSaveAction) {
453+
public void applyCampaignOptionsToCampaign(@Nullable CampaignPreset preset, boolean isStartUp,
454+
boolean isSaveAction) {
449455
CampaignOptions options = this.campaignOptions;
450456
RandomSkillPreferences presetRandomSkillPreferences = null;
451457
Map<String, SkillType> presetSkills = null;

0 commit comments

Comments
 (0)