(Edit: I wrote that I hadn't actually tried building a new version of the software, but I did actually study the files in all of the directories installed by the software, and I did study the source code of the program, and I am a professional software developer with decades of experience, and a GURPS GM with decades of experience, and I am confident that this is actually most likely the correct place to make the requested change (for the side-question too), and probably a syntactically-correct code change to make the requested change. Please (all ye rpg.se critics) take pity and don't downvote my answer even further just because I didn't spend hours setting up a working development environment (I don't even have a Mac and the dev environment is set up on Mac) and implement and test the changes, for an rpg.se question that just asks for code pointers.)
I haven't actually tried doing (the hours of work it would probably take to get a non-Mac dev environment working and testing) this (I don't have a Java dev environment set up, nor a Mac), but I see a very likely-looking candidate for where to edit the code to do this:
In the file:
https://github.com/richardwilkes/gcs/blob/master/src/com/trollworks/gcs/skill/SkillAttribute.java
There are sections for each attribute like:
/** The dexterity attribute. */
DX {
@Override
public String toString() {
return DX_TITLE;
}
@Override
public int getBaseSkillLevel(GURPSCharacter character) {
return character != null ? character.getDexterity() : Integer.MIN_VALUE;
}
}
And I would start by changing the
character.getDexterity() : Integer.MIN_VALUE;
part to be more like:
(character.getDexterity() / 2 + 5: Integer.MIN_VALUE);
As for how to modify attribute point costs, it looks like you'd modify the getPointsForAttribute() function (and/or the individual methods for each attribute that call it (e.g. updateStrengthInfo()), and/or look at how SheetPreferences.areOptionalStrengthRulesUsed() is used.
i.e. in https://github.com/richardwilkes/gcs/blob/master/src/com/trollworks/gcs/character/GURPSCharacter.java
private static int getPointsForAttribute(int delta, int ptsPerLevel, int reduction) {
int amt = delta * ptsPerLevel;
if (reduction > 0 && delta > 0) {
int rounder = delta < 0 ? -99 : 99;
if (reduction > 80) {
reduction = 80;
}
amt = (rounder + amt * (100 - reduction)) / 100;
}
return amt;
}