Explanation for improved range:
1. Find a hullmod that do the same (Integrated Targeting Unit). Find script it uses (starsector-core\data\hullmods\IntegratedTargetingUnit.java). Open it with something (even notepad is enough, but advanced things would be better)
2. Read it carefully.
Spoiler
package data.hullmods;
import java.util.HashMap;
import java.util.Map;
import com.fs.starfarer.api.combat.BaseHullMod;
import com.fs.starfarer.api.combat.MutableShipStatsAPI;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
public class IntegratedTargetingUnit extends BaseHullMod {
private static Map mag = new HashMap();
static {
mag.put(HullSize.FIGHTER, 0f);
mag.put(HullSize.FRIGATE, 10f);
mag.put(HullSize.DESTROYER, 20f);
mag.put(HullSize.CRUISER, 40f);
mag.put(HullSize.CAPITAL_SHIP, 60f);
}
public String getDescriptionParam(int index, HullSize hullSize) {
if (index == 0) return "" + ((Float) mag.get(HullSize.FRIGATE)).intValue() + "%";
if (index == 1) return "" + ((Float) mag.get(HullSize.DESTROYER)).intValue() + "%";
if (index == 2) return "" + ((Float) mag.get(HullSize.CRUISER)).intValue() + "%";
if (index == 3) return "" + ((Float) mag.get(HullSize.CAPITAL_SHIP)).intValue() + "%";
return null;
}
public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
stats.getBallisticWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
stats.getEnergyWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
}
@Override
public boolean isApplicableToShip(ShipAPI ship) {
return !ship.getVariant().getHullMods().contains("dedicated_targeting_core") && !ship.getVariant().getHullMods().contains("advancedcore");
}
public String getUnapplicableReason(ShipAPI ship) {
if (ship.getVariant().getHullMods().contains("dedicated_targeting_core")) {
return "Incompatible with Dedicated Targeting Core";
}
if (ship.getVariant().getHullMods().contains("advancedcore")) {
return "Incompatible with Advanced Targeting Core";
}
return null;
}
}
3. Find part, that
actually do this improvement. Here it is (
Bluish are my comments. Here and after):
public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
Determine when effect is applied. Here - "BeforeShipCreation", in other words, each time you make any loadout changes, like weapons or hullmods.
stats.getBallisticWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
Adds bonus for ballistic weapons.
stats.getEnergyWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
Adds bonus for energy weapons.
}
4. Determine which variables are used there. Take a look at the last part: .modifyPercent(
id,
(Float) mag.get(hullSize));
id - is an id of a ship. It's already announced in applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String
id). Just do nothing.
(Float) mag.get(hullSize) - announced by:
private static Map mag = new HashMap();
static {
mag.put(HullSize.FIGHTER, 0f);
mag.put(HullSize.FRIGATE, 10f);
mag.put(HullSize.DESTROYER, 20f);
mag.put(HullSize.CRUISER, 40f);
mag.put(HullSize.CAPITAL_SHIP, 60f);
}
It means, that value determined by size. You can use this as it is if you need different values for different hullsizes or replace with a static float variable for all. Second option is easier to me, but it would be easier to you just make all values from static {} to be the same, like:
(yeah, I know it's stupid. Still easier for newbie) private static Map mag = new HashMap();
static {
mag.put(HullSize.FIGHTER, 10f);
mag.put(HullSize.FRIGATE, 10f);
mag.put(HullSize.DESTROYER, 10f);
mag.put(HullSize.CRUISER, 10f);
mag.put(HullSize.CAPITAL_SHIP, 10f);
}
That is for +10% for all.
5.See what import you need. Here - pretty much you need is all:
Spoiler
import java.util.HashMap;
import java.util.Map;
import com.fs.starfarer.api.combat.BaseHullMod;
import com.fs.starfarer.api.combat.MutableShipStatsAPI;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
6. Compile significant data into one piece:
Spoiler
//A) Head with imports:
package data.hullmods;
import java.util.HashMap;
import java.util.Map;
import com.fs.starfarer.api.combat.BaseHullMod;
import com.fs.starfarer.api.combat.MutableShipStatsAPI;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
//B) Your hullmod class name:
public class YourHullmodNameHere extends BaseHullMod {
//C) All the variables you need further:
private static Map mag = new HashMap();
static {
mag.put(HullSize.FIGHTER, 10f);
mag.put(HullSize.FRIGATE, 10f);
mag.put(HullSize.DESTROYER, 10f);
mag.put(HullSize.CRUISER, 10f);
mag.put(HullSize.CAPITAL_SHIP, 10f);
}
//D) Effect applying section:
public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
stats.getBallisticWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
stats.getEnergyWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
}
//E) I think we forget "}" from public class IntegratedTargetingUnit extends BaseHullMod {, lets add it:
}
Lets see what we have:
Spoiler
package data.hullmods;
import java.util.HashMap;
import java.util.Map;
import com.fs.starfarer.api.combat.BaseHullMod;
import com.fs.starfarer.api.combat.MutableShipStatsAPI;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
public class YourHullmodNameHere extends BaseHullMod {
private static Map mag = new HashMap();
static {
mag.put(HullSize.FIGHTER, 10f);
mag.put(HullSize.FRIGATE, 10f);
mag.put(HullSize.DESTROYER, 10f);
mag.put(HullSize.CRUISER, 10f);
mag.put(HullSize.CAPITAL_SHIP, 10f);
}
public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
stats.getBallisticWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
stats.getEnergyWeaponRangeBonus().modifyPercent(id, (Float) mag.get(hullSize));
}
}
This will not do description parameters. You always can add it later if you wish.
Should work. Also, you would need CSV. Next post, as this is too long.