Fractal Softworks Forum

Please login or register.

Login with username, password and session length
Advanced search  

News:

Starsector 0.97a is out! (02/02/24); New blog post: Simulator Enhancements (03/13/24)

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Sinosauropteryx

Pages: [1] 2
1
Suggestions / Rescue/jailbreak missions: no more backtracking.
« on: April 04, 2021, 10:41:54 AM »
The jailbreak raid missions are some of the worst for several reasons. They demand a lot of resources (hundreds of marines on hand, reputation hits) and rarely pay well (usually 20k-60k).

The main problem I have, though, is that we must backtrack to the quest giver - within a given time frame. Backtracking is never fun, returning to a recently visited site is rarely profitable with trading, travel costs real resources, and it breaks the pattern of the other bar missions (which can all be easily ordered by urgency based on how close the deadline is).

I humbly propose one of two solutions:
1. Rescued parties are sent off on a small shuttle, or dropped off at the nearest friendly station, or otherwise are able to return to safety of their own accord after being rescued.
Or,
2. After rescue, the time limit stops, and the parties can be returned home for payment whenever is convenient.

2
I took a bar quest for producing heavy machinery at a colony, which (as I understood it) was supposed to last for years, with a payment for every month of sufficient production. After the first month of delivery, and a single payment, it was marked as completed.

3
My 0.95 vanilla save file seems to have been made completely inaccessible by a bug.

Long log in pastebin. (posting in spoiler caused forum to freak out)

https://pastebin.com/euhUM13n

4
Sometimes, even after all D-mods are removed by the Field Repairs skill every-two-months effect, the ship is still named as (D). It seems to me like if you acquire the ship with D-mods, the (D) will stay, whereas if you add D-mods to a ship by losing and recovering it, the (D) will be removed properly. (But I can't say for sure - only that the (D) is removed sometimes, not always.)

Edit: Checking again, the description also contains the "D-mod" text.
Example
[close]

5

Despite having stabilized the jump points, the gas planet in Galatia still references the system being cut off from hyperspace in its refusal to be colonized.
Whether this is actually a bug and it should be colonizable, or a lore mismatch (maybe they still don't want to colonize, because it happened once and they think it could happen again), I can't say.

6

Forgive me if this is intentional, but shouldn't this be a Luddic Church owned system? (The Wiki seems to think so, and in-game lore supports it)

7
Suggestions / "weaponFrequency" and "fighterFrequency"
« on: March 10, 2021, 12:50:35 PM »
.faction files have a scalar value, "hullFrequency," that allows certain hulls or tags to show up more/less often.

I humbly suggest that scalar values "weaponFrequency" and "fighterFrequency" be implemented, with similar functionality for making weapons and fighter wings show up more or less often.

8
Bug Reports & Support (modded) / Two autofit loadout bugs
« on: March 08, 2021, 08:16:08 PM »
Bug 1: When using autofit on a ship with modules, the modules will be fitted with weapons, but not hullmods.

Bug 2: When autofitting a ship with missile hardpoints beyond at a certain angle (+-48 degrees) they do not autofit correctly. Specifically, loadouts with Sabots in those slots seem to have a lot of problems equipping them. I have more details about the problem here: http://fractalsoftworks.com/forum/index.php?topic=17229.msg271738#msg271738

Sorry if you've heard these before.

9
Bug Reports & Support / Forum bug: Spoiler tags no longer expanding
« on: January 09, 2020, 12:05:11 PM »
For some reason, I can't click to expand spoiler tags, as of yesterday. I can't think of anything I did or that happened. So far I have tried:
- Relogging
- Clearing cookies
- Using a different browser
- Rebooting my machine
to no avail.

Anyone seen this before or have any suggestions?

Preemptive apologies if this shouldn't be here.

10
Modding / The black magic behind "modules on modules"
« on: October 29, 2019, 10:31:00 AM »
Hi, who's interested in how this guy works?

Maybe you want to make your own? Keep reading!

There's several layers to the whole thing, but I'm mostly going to focus on the primary part, how to make articulated chains of modules that can move and bend however you want them to. It might even be simpler than you expected. To start, you'll need a few things:

1. .ship file for your ship.
The only unusual thing about this is you will want a station slot for every one of your modules, and it helps to label them in a coherent way (for later). For my 8-segment snake, I made 7 station slots called "SEGMENT 1" through "SEGMENT 7." Only the location of the first slot matters, the rest can be posed in a way that looks good on the refit screen. (Their locations will be moved dynamically during battle.)
Picture Example
[close]


2. .ship files for your modules.
Mine uses a single .ship file as all the segments are the same, but they don't have to be.
What IS important is, each .ship file must have the ship's center of gravity located at the point the module attaches to the previous one, which is probably heavily offset towards the front. The module will rotate around this point.
The other important thing is each ship must have a station slot called SEGMENT. This will be the point at which the next segment is attached.
Picture Examples
[close]


3. .variant files for your ship and module, as well as ship_data.csv entries. These are done like you would a normal module ship - just make sure all segments are attached to the station slots of your mothership.


4. A container class, which I called SinuousSegment, that contains a ShipAPI, the previous SinuousSegment, and the next SinuousSegment. I also put in a method that assigns a list of child modules to an array of SinuousSegments, based on the name of the station slot they're occupying.
KT_SinuousSegment
Code
package data.scripts.util;

import com.fs.starfarer.api.combat.ShipAPI;
import java.util.List;

public class KT_SinuousSegment {
    public ShipAPI ship = null;
    public KT_SinuousSegment nextSegment = null;
    public KT_SinuousSegment previousSegment = null;

    public static void setup(KT_SinuousSegment[] segments, List<ShipAPI> ships, String[] args){

        for (int f = 0; f < segments.length; f++){
            // Iterates through SinuousSegment array and connects them in order
            segments[f] = new KT_SinuousSegment();
            if (f > 0){
                segments[f].previousSegment = segments[f-1];
                segments[f-1].nextSegment = segments[f];
            }

            // Assigns each module to a segment based on its station slot name
            for (ShipAPI s : ships) {
                s.ensureClonedStationSlotSpec();

                if (s.getStationSlot() != null && s.getStationSlot().getId().equals(args[f])) {
                    segments[f].ship = s;

                    // First module only: Assigns mothership as its previousSegment
                    if (f == 0){
                        segments[f].previousSegment = new KT_SinuousSegment();
                        segments[f].previousSegment.ship = s.getParentStation();
                        segments[f].previousSegment.nextSegment = segments[f];
                    }
                }
            }
        }
    }

    public KT_SinuousSegment(){
    }

    public KT_SinuousSegment(ShipAPI newShip) {
        ship = newShip;
        previousSegment = new KT_SinuousSegment();
        previousSegment.ship = ship.getParentStation();
        previousSegment.nextSegment = this;
    }

    public KT_SinuousSegment(ShipAPI newShip, KT_SinuousSegment newPrevious){
        ship = newShip;
        previousSegment = newPrevious;
        previousSegment.nextSegment = this;
    }

}
[close]
(Note, there's a problem with displaying code tags inside spoiler tags, so click the clipboard icon on the right and paste it into a notepad.)


5. A hullmod, which I called Sinuous Body. The bulk of the work is done here.
KT_SinuousBody
Code
package data.hullmods;

import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.combat.*;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
import com.fs.starfarer.api.combat.ShipwideAIFlags.AIFlags;
import data.scripts.util.KT_SinuousSegment;
import java.util.List;
import com.fs.starfarer.api.combat.ShipEngineControllerAPI.ShipEngineAPI;

public class KT_SinuousBody extends BaseHullMod {

    public static final int NUMBER_OF_SEGMENTS = 7;
    public static final float RANGE = 150f; // Flexibility constant. Range of movement of each segment.
    public static final float REALIGNMENT_CONSTANT = 8f; // Elasticity constant. How quickly the body unfurls after being curled up.

    private KT_SinuousSegment[] seg = new KT_SinuousSegment[NUMBER_OF_SEGMENTS];
    private String[] args = new String[NUMBER_OF_SEGMENTS];


    public String getDescriptionParam(int index, HullSize hullSize) {
return null;
}


    public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
    }

    @Override
    public void applyEffectsAfterShipCreation(ShipAPI ship, String id) {


    }


    @Override
    public boolean isApplicableToShip(ShipAPI ship) {
        return true;
    }

    @Override
    public void advanceInCombat(ShipAPI ship, float amount) {

        super.advanceInCombat(ship, amount);

        // Initiates the SinuousSegment array.
        args[0] = "SEGMENT1";
        args[1] = "SEGMENT2";
        args[2] = "SEGMENT3";
        args[3] = "SEGMENT4";
        args[4] = "SEGMENT5";
        args[5] = "SEGMENT6";
        args[6] = "SEGMENT7";

        List<ShipAPI> children = ship.getChildModulesCopy();

        advanceParent(ship,children);
        for (ShipAPI s : children){
            advanceChild(s, ship);
        }

        KT_SinuousSegment.setup(seg, children, args);

        // Iterates through each SinuousSegment
        for (int f = 0; f < NUMBER_OF_SEGMENTS; f++) {
            if (seg[f] != null && seg[f].ship != null && seg[f].ship.isAlive()) {
                try {

                    // First segment is "vanilla" / attached to mothership. Rest are pseudo-attached to previous segment's SEGMENT slot
                    if (f != 0)
                        seg[f].ship.getLocation().set(seg[f].previousSegment.ship.getHullSpec().getWeaponSlotAPI("SEGMENT").computePosition(seg[f].previousSegment.ship));


                    // Each module hangs stationary in real space, instead of turning with the mothership, unless it's at max turning range
                    float angle = normalizeAngle(seg[f].ship.getFacing() - seg[f].ship.getParentStation().getFacing());

                    // angle of module is offset by angle of previous module, normalized to between 180 and -180
                    float angleOffset = getAngleOffset(seg[f]);
                    if (angleOffset > 180f)
                        angleOffset -= 360f;

                    // angle of range check is offset by angle of previous segment in relation to mothership
                    float localMod = normalizeAngle(seg[f].previousSegment.ship.getFacing() - seg[f].ship.getParentStation().getFacing());

                    // range limit handler. If the tail is outside the max range, it won't swing any farther.
                    if (angleOffset < RANGE * -0.5)
                        angle = normalizeAngle(RANGE * -0.5f + localMod);
                    if (angleOffset > RANGE * 0.5)
                        angle = normalizeAngle(RANGE * 0.5f + localMod);

                    // Tail returns to straight position, moving faster the more bent it is - spring approximation
                    angle -= (angleOffset / RANGE * 0.5f) * REALIGNMENT_CONSTANT;

                    seg[f].ship.getStationSlot().setAngle(normalizeAngle(angle));
                } catch (Exception e) {
                    // This covers the gap between when a segment and its dependents die
                }

            } else {
                // When a segment dies, remove all dependent segments
                for (int g = f; g < NUMBER_OF_SEGMENTS; g++){
                    if (seg[g] != null && seg[g].ship != null && seg[g].ship.isAlive()) {
                        try {
                            seg[g].ship.setHitpoints(1f);
                            seg[g].ship.applyCriticalMalfunction(seg[g].ship.getAllWeapons().get(0));
                            seg[g].ship.applyCriticalMalfunction(seg[g].ship.getEngineController().getShipEngines().get(0)); // The ONLY way I've found to kill a module
                        } catch (Exception e){
                        }
                        //seg[g].ship.getFleetMember().getStatus().setDetached(0,true);
                        //seg[g].ship.getFleetMember().getStatus().applyDamage(100000);
                        //Global.getCombatEngine().removeEntity(seg[g].ship);
                    }
//                    seg[g] = null;
                }
            }
        }

    }

    private float normalizeAngle (float f){
    if (f < 0f)
            return f + 360f;
    if (f > 360f)
        return f - 360f;
    return f;
    }

    private float getAngleOffset (KT_SinuousSegment seg){
        try {
            return normalizeAngle(seg.ship.getFacing() - seg.previousSegment.ship.getFacing());
        } catch (Exception e) {
            return 0f;
        }
    }

    //////////
    // This section of code was taken largely from the Ship and Weapon Pack mod.
    // I did not create it. Credit goes to DarkRevenant.
    //////////
    private static void advanceChild(ShipAPI child, ShipAPI parent) {
        ShipEngineControllerAPI ec = parent.getEngineController();
        if (ec != null) {
            if (parent.isAlive()) {
                if (ec.isAccelerating()) {
                    child.giveCommand(ShipCommand.ACCELERATE, null, 0);
                }
                if (ec.isAcceleratingBackwards()) {
                    child.giveCommand(ShipCommand.ACCELERATE_BACKWARDS, null, 0);
                }
                if (ec.isDecelerating()) {
                    child.giveCommand(ShipCommand.DECELERATE, null, 0);
                }
                if (ec.isStrafingLeft()) {
                    child.giveCommand(ShipCommand.STRAFE_LEFT, null, 0);
                }
                if (ec.isStrafingRight()) {
                    child.giveCommand(ShipCommand.STRAFE_RIGHT, null, 0);
                }
                if (ec.isTurningLeft()) {
                    child.giveCommand(ShipCommand.TURN_LEFT, null, 0);
                }
                if (ec.isTurningRight()) {
                    child.giveCommand(ShipCommand.TURN_RIGHT, null, 0);
                }
            }

            ShipEngineControllerAPI cec = child.getEngineController();
            if (cec != null) {
                if ((ec.isFlamingOut() || ec.isFlamedOut()) && !cec.isFlamingOut() && !cec.isFlamedOut()) {
                    child.getEngineController().forceFlameout(true);
                }
            }
        }
        /* Mirror parent's fighter commands */
        if (child.hasLaunchBays()) {
            if (parent.getAllWings().size() == 0 && (Global.getCombatEngine().getPlayerShip() != parent || !Global.getCombatEngine().isUIAutopilotOn()))
                parent.setPullBackFighters(false); // otherwise module fighters will only defend if AI parent has no bays
            if (child.isPullBackFighters() ^ parent.isPullBackFighters()) {
                child.giveCommand(ShipCommand.PULL_BACK_FIGHTERS, null, 0);
            }
            if (child.getAIFlags() != null) {
                if (((Global.getCombatEngine().getPlayerShip() == parent) || (parent.getAIFlags() == null))
                        && (parent.getShipTarget() != null)) {
                    child.getAIFlags().setFlag(AIFlags.CARRIER_FIGHTER_TARGET, 1f, parent.getShipTarget());
                } else if ((parent.getAIFlags() != null)
                        && parent.getAIFlags().hasFlag(AIFlags.CARRIER_FIGHTER_TARGET)
                        && (parent.getAIFlags().getCustom(AIFlags.CARRIER_FIGHTER_TARGET) != null)) {
                    child.getAIFlags().setFlag(AIFlags.CARRIER_FIGHTER_TARGET, 1f, parent.getAIFlags().getCustom(AIFlags.CARRIER_FIGHTER_TARGET));
                } else if (parent.getShipTarget() != null){
                    child.getAIFlags().setFlag(AIFlags.CARRIER_FIGHTER_TARGET, 1f, parent.getShipTarget());
                }
            }
        }
    }
    private static void advanceParent(ShipAPI parent, List<ShipAPI> children) {
        ShipEngineControllerAPI ec = parent.getEngineController();
        if (ec != null) {
            float originalMass = 2500;
            int originalEngines = 18;

            float thrustPerEngine = originalMass / originalEngines;

            /* Don't count parent's engines for this stuff - game already affects stats */
            float workingEngines = ec.getShipEngines().size();
            for (ShipAPI child : children) {
                if ((child.getParentStation() == parent) && (child.getStationSlot() != null) && child.isAlive()) {
                    ShipEngineControllerAPI cec = child.getEngineController();
                    if (cec != null) {
                        float contribution = 0f;
                        for (ShipEngineAPI ce : cec.getShipEngines()) {
                            if (ce.isActive() && !ce.isDisabled() && !ce.isPermanentlyDisabled() && !ce.isSystemActivated()) {
                                contribution += ce.getContribution();
                            }
                        }
                        workingEngines += cec.getShipEngines().size() * contribution;
                    }
                }
            }

            float thrust = workingEngines * thrustPerEngine;
            float enginePerformance = thrust / Math.max(1f, parent.getMassWithModules());
            parent.getMutableStats().getAcceleration().modifyMult("KT_sinuousbody", enginePerformance);
            parent.getMutableStats().getDeceleration().modifyMult("KT_sinuousbody", enginePerformance);
            parent.getMutableStats().getTurnAcceleration().modifyMult("KT_sinuousbody", enginePerformance);
            parent.getMutableStats().getMaxTurnRate().modifyMult("KT_sinuousbody", enginePerformance);
            parent.getMutableStats().getMaxSpeed().modifyMult("KT_sinuousbody", enginePerformance);
            parent.getMutableStats().getZeroFluxSpeedBoost().modifyMult("KT_sinuousbody", enginePerformance);
        }
    }

}
[close]
(Line 17, line 47) First, an array of SinuousSegments and an array of Strings are created. The Strings are assigned to the names of the station slots on the mothership. (SEGMENT1, etc.)
(Line 62) Next, SinuousSegment.setup is called, passing the SinuousSegment array, ship.getChildModules(), and the String array. This leaves you with a SinuousSegment array that iterates through the segments in order, and each segment can refer to its previous or next segment.
(Line 65) Then the main for loop is called. First comes a check - is the segment alive?
(Line 67) Then a try block - this is a little inelegant, but because there is only one way to kill a module with commands, and it takes several frames to make happen, there will be a several-frame gap that will throw exceptions every time a segment with dependents dies. The try-catch just gets us through those frames.
(Line 70) Then there's the real meat, starting with the key line to making this all work:
Code
if (f != 0)
    seg[f].ship.getLocation().set(seg[f].previousSegment.ship.getHullSpec().getWeaponSlotAPI("SEGMENT").computePosition(seg[f].previousSegment.ship));
Each segment's location (other than the first segment's) is updated to be where the previous segment's SEGMENT slot is. This is the whole illusion: the module has a virtual station slot on the back of another module, and is moved there every frame.
Most other stuff within the loop after that is what determines the way the segments move. For my Quetzalcoatl, modules are set to hang unmoving as the head turns, then adjust back to "neutral" with a simulated spring action, as well as each having a limited range of movement. But it can move in any number of ways, the possibilities are endless. Just remember you're using the module's station slot's rotation to change its angle:
Code
seg[f].ship.getStationSlot.setAngle()
(Line 99) After that, the "else" to the "if alive" check. This part handles killing all the dependent segments of a segment that's died.
Everything south of that is boilerplate-type module stuff, most of which was taken from DarkRevenant's glorious Ship & Weapon Pack. Really can't thank him enough for innovating in this area (and many others).

And that's pretty much it. Once you're able to get your segments lined up the way you like, getting them to move right is just trial and error. I'm looking forward to seeing some cool stuff, happy coding!

11
Mods / [0.95a] Kingdom of Terra (v0.13.1) - Taverns in Caverns (+Hotfix)
« on: October 06, 2019, 02:15:50 PM »

In the belly of their hollow planet, the Kingdom of Terra plans its uprising! Prepare your trembling Sector for the marvels of science gone awry, and the horrors of nature unleashed!
Lore
The planet Neoterra exists co-spacially within an anomaly that opens a vast, immeasurable pocket of habitable space inside the planet's core, without affecting its gravity or other external properties. The nature of the anomaly causes "real" time to pass more slowly as one ventures deeper into the planet, which has resulted in a human population far older than the hundred-ought cycles that have passed since the planet's discovery. Conditions within the planet are exemplary for sustaining all kinds of life, and the overlapping gradients of timeflow, gravity, heat, moisture, and atmospheric composition allow for unmatched biodiversity - including immense gigafauna unseen on any conventional planet.

Neoterra is home to countless savages who, for centuries, have eked out a hand-to-mouth existence in the planet's harsh underground ecosystem. From that crucible of constant tribal warfare emerged the Kingdom of Terra, Neoterra's foremost political body, ruled by self-styled God-King Tyrannus Rex I and his court of technocrats. Having rediscovered space travel only recently (and accidentally), the Kingdom's agents wasted no time in collecting artifacts and technologies from Persean space. The secrets of these marvels are jealously guarded from the rest of the planet's inhabitants, whose colossal ignorance serves as the Kingdom's fulcrum of control over them. With deception and science creating an illusion of true godhood, the Kingdom corrals the millions-strong population into a fearsome - or, at the very least, numerous - fighting force.

Now, perhaps sipping his own communion wine, Tyrannus Rex I has set his sights on the rest of the Persean Sector, launching his Great Emergence with ambitions of conquest. And while his military doctrine may be questionable, the might of his industry - which, due to Neoterra's anomalous time passage, allows hundreds of hours of production each "outside" day - is perhaps a match for the great multi-system powers of the Sector.
[close]

Kingdom ships run the gamut from cobbled-together clunkers to impossible feats of engineering. Common themes include: close-range and melee specialization, articulated multi-module hulls, angled engines and mobility systems conferring unconventional movement, prodigious use of built-in weapons, above-average fuel capacity, and a tendency to invest in armor and hull over shields.
Ships

Slingshot-class bomber wing
A stone-age fighter at a rock-bottom price.


Goon-class heavy fighter wing
An imposing pair of barrels.


Shaman / Chieftain-class rocket bomber wings
Pyrotechnic crews.


Anchor-class heavy distraction drone
It weighs a lot.


Snaggletooth-class frigate / Fossil Fueler-class tanker
A caveman-piloted dinosaur skull (and its capacious retrofit).


Smasher-class frigate
A self-throwing brick. (Also available in pirate.)


Queen-class drone carrier
A little frigate with a big family.


Trilobite-class combat freighter / Ammonite-class carrier freighter
A multipurpose machine that masters miscellaneous missions while mounting multiple medium missiles (and its capacious carrier counterpart).


Rhino-class destroyer / Mammoth-class heavy cruiser
These fossils dig you up. (Rhino also available in jihad.)


Rascal-class frigate / Monster-class destroyer
Well-armed ships that don't pull punches.


Urchin-class frigate / Basilisk-class cruiser
Powerful posteriors producing profusions of pointy pain.


Draco-class destroyer / Wyvern-class cruiser
High-tech status symbols for the discerning aristocrat.


Pulverizer-class battleship
Wrecking ball in the front, atom bomb in the back.


Rex-class fast battleship
This rex face wrecks face.


Hatchling-class frigate / Quetzalcoatl-class battlecruiser
Electromagnetic coils.


Converted ships
Turning trash into smash.
[close]

Kingdom R&D labs are staffed with all the scientists rejected from other factions for their high-risk psych profiles.
Weapons

Grinder
Indiscriminate spark sprayer.


Boomstick / Blunderbuss
A familiar-sounding weapon, and its ornery grandfather.


Rockchucker / Avalauncher
Let he who is without sin cast the first stone.


Heckbore Cannon
It just works.


Bee Shooter
Pump 'em full of bees.


Bully Beam / Big Bully Beam
Pushy PD options.


Lava Belcher / Lava Spewer
Volcanic panic.


Grappling Beam
Animal magnetism.


CHAD Lance
Ouch!


Telekinesis Ray
Rearrange the cosmos.


Carcharos SRM
Autoloading shield-nibblers.


Pyre rocket launcher / Pyre rocket pod
Dumbfire, or the dumbest fire?


Flushpipe-class torpedo / Plunger Flushpipe launcher
Teleports behind you.


Triceratorp
Very heavy damage.


Drill Factory
An automated auger assembly
allowing amaranthine armor-annihilating attacks.


Thresher-class torpedo
Pretty much what it looks like.

And if you really like overkill...

Winnower-class meme torpedo
Achieved by breeding a Reaper with a Titan.
(This one is marked as "SYSTEM" in weapon_data.csv by default. Remove that flag to play with it - but it still won't be set to spawn in the campaign, for humanity's sake.)
[close]
[close]

Get a load of this action:
Videos & gifs

Pictures & old stuff
watch
 
[close]
[close]

Ogle the blunders of evolution:
Concept Art
Basilisk evolution
[close]
Rhino
[close]
Mammoth
[close]
Trilobite
[close]
Drill factory
[close]
Pulverizer
[close]
Quetzalcoatl early napkin math, flag, notes. Some of those To-Dos were never actually done.

[close]
[close]

Your feedback is much appreciated:
- Bug reports.
- Balance testing.
- Sprite criticism.
- Suggestions of any kind. Just post 'em in here!

Thanks to:
- Thule, xenoargh, Snrasha, DrakonST, axlemc131, Makina, HELMUT, Medikohl, J0hn Shm0, and Zen for their Spiral Arms contributions!
- DarkRevenant, for inspirational (and in parts copied) code in SWP and Interstellar Imperium!
- cycerin et al., for the same as above but from Blackrock!
- Vayra, Tartiflette, King Alfonzo, and kazi for their great walkthroughs!
- Alex, Sundog, Soren, LazyWizard, Histidine, and anyone else who was helpful in the misc modding thread and discord!
- Interestio for use of his portraits, straight from the Intertesting Portraits Pack (highly recommended)!
- HeartofDiscord, Hasp, and Inabikari for valuable balance feedback!
- yourleader, for the idea & concept drawing that inspired the Rex!
- Everyone who reported bugs (too many to name)!

Like this mod a lot?
If you're feeling generous, you can send me a tip w/ PayPal. It's very much appreciated.
If not, that's ok. This mod will always be free for all to enjoy.

I'm open to taking commissions, special requests, etc. PM me here or on Discord for more details.
[close]

Changelog
Mar 30, 2021: v0.13.1 HOTFIX released.
- Tentative fix to crash involving Queen's bee bombs.

Mar 29, 2021: v0.13 released.
- werks wiff 0.95a
- Neoterra changes:
 -- Farming replaced with Hunting & Gathering industry, supplying food and exotic beasts
 -- New commodity, exotic beasts, found exclusively on Neoterra
 -- Subterranean Foundries increases planet's fleet size by 1.5x
 -- Anomalous Interior adds large bonus to ground defense; partially offset by downgrade of Heavy Batteries to Heavy Boulders (total change x3 -> x5)
- Caveman mass-immigration. Planets captured or colonized by KoT will gain Decivilized Subpopulation after (10 * planet size) days. This can be reversed if another faction recaptures the planet before this time. (Planet capture/transfer requires Nexerelin or similar.)
- New dockside bar art & description for KoT planets. Meet contacts in style
- Mammoth: Wool patches have been tweaked graphically to clash less with damage and engine flames

Older Updates
Mar 16, 2021: v0.12 released. (Should be fully save compatible.)
- Basilisk, Urchin: Sprite reworks.
- Monster, Mammoth, Queen, Rhino, Quetz, Hatchling: Sprite touchups/additions.
- Basilisk, Urchin: Fixed a bug where the ship would stay in place instead of spinning, and an AI bug that would stop the AI from using its system.
- Carcharos SRM, slingshot bombers: No longer used by pirates.
- AI & physics improved across the board to better account for phase ships.
- Drill Factory, Avalauncher now contribute to mining in Nexerelin.
- Drill Factory now has a primary arming stage, like Squalls.
- 4 new caveladies added to portrait roster.
- More NPC interactions translated into cave-speak.
- Scenic art and more lore added to Neoterra.

Nov 24, 2020: v0.11 released.
- New ship: Rex-class fast battleship.
- Conversion ships: Hammerhead (KoT), Kite (KoT).
- New weapons: Avalauncher, Drill Factory.
- Basilisk, Urchin: Spin speed is no longer tied to frame rate; should spin and throw spikes more consistently in laggy battles.
- Rhino:  AI improved. Numerous nerfs (to offset now very powerful AI-controlled Rhino).
 -- Top speed w/ system reduced (230 -> 155)
 -- Drill damage reduced (4800 -> 3000) - also affects Mammoth
 -- Hull: 7500 -> 6500
 -- Armor: 750 -> 550
- Bee shooter: Projectile speed buffed (1000 -> 1400)
- BUGFIX: Enemy module ships retreating should no longer soft-lock the game. (Tentative fix - may revert if it messes up other mods)
- Campaign level changes:
-- Faction aggression, war decs, and bad rep events in Nexerelin/Vayra's Sector have been toned down. (no giant fleet spam - hopefully)
-- Neoterra's heavy industry variant should no longer show up in industry list (unless you're on Neoterra).
-- The faction's home system has been overhauled and expanded.
-- Neoterra: Size 9 -> size 7. grug bad at counting
-- Added caveman characters to Combat Chatter.

Aug 27, 2020: v0.10.1 HOTFIX, save compatible.
- Bugfix: Vanilla known weapon blueprints were being wiped from pirate/indie factions. This is no longer the case.
- Version file should be a little more accurate.
- Ammonite codex description added.

July 24, 2020: v0.10 released.
- New ships: Draco-class destroyer, Wyvern-class cruiser, Ammonite-class carrier freighter.
- New fighters: Shaman & Chieftain rocket bombers, Anchor really heavy fighter.
- New weapons: Pyre rocket launcher/pod, lava belcher/spewer, heckbore cannon.
- New hull mod: Overdriven Fighters.
- New high value bounty.
- Queen: Overhaul of hive bomb. Now reloads ammo over time, producing larger clouds of Wasps if left to charge longer. Damage lowered to compensate.
- Blast Dampeners hullmod now affects modules.
- "Bee-making" weapons will no longer cause chatter with Combat Chatter.
- Many melee ships are now made at least Aggressive by default. This doesn't override the personality of an onboard officer.
- Snake ships: Fixed a bug that caused AI to get stuck in a loop when facing to the right, plus other minor tweaks. Movement should be a little smoother now.
- Bully, big bully, CHAD: New sprites.
- Minor aesthetic, balance, and AI tweaks all over.
- Noteworthy balance changes:
-- Rhino/Mammoth drill: 6000 DPS -> 4800
-- Basilisk, Urchin: Middle tail sections made beefier.
-- Bully beam: 500 range -> 400
-- Big bully beam: 600 range -> 800
-- Snake ship rear-facing turret arcs: 240 -> 300
- Campaign-level changes:
-- Planet Neoterra has been added to normal trade routes.
-- The faction has been made more aggressive, generally less agreeable towards other factions, and likely to start wars.
-- Caveman portraits made available for players.
-- Vayra's Sector integration - KoT now stages raids and builds bases.

Feb 13, 2020: v0.9.5 released.
- New hullmods: Integral Density, Blast Dampeners.
- Quetzalcoatl: Nerfs.
-- Hull, armor, and shield of head segment all reduced by ~15%.
-- EMP emitter: Cooldown increased (9s -> 12s), also affects Hatchling.
-- Overdriven escape: Major speed/maneuverability cut (-40%), also affects Hatchling.
- Smasher: Divebomb nerfed (10x mass -> 7x, 80% damage resist -> 65%). Psst, use the new hull mods to bring it (mostly) back up to spec!
- Trilobyte: Buffed. Receives bonus speed in combat when not equipped with logistics hullmods.
- Flushpipe: Buffed (500en/2000emp -> 750en/2500emp)
- Pulverizer: AI improvements. Should blast off into empty space less often.
- Pulverizer system: Charge-up time increased (3s -> 4s)
- CHAD Lance: Beam will now overload hit modules, as well as the mothership.
- Commissioned Crews hullmod has been changed.

Feb 3, 2020: v0.9 released.
- New ship: Pulverizer-class battleship.
- A load of weapon nerfs:
-- Blunderbuss: Damage lowered (3200 -> 2400)
-- Flushpipe: Damage lowered (1500en/5000emp -> 500en/2000emp)
-- Flushpipe rack: OP cost raised (4 -> 5)
-- Triceratorp: Damage of submunitions lowered (1500 -> 1000)
-- Rockchucker: Fixed bug that made AI too leery of it, no stat changes
- And a buff:
-- Slingshot bomber: OP cost lowered (4 -> 0)

Jan 22, 2020: v0.8 released.
- New ships, all frigates: Rascal, Urchin, Hatchling, and Fossil Fueler.
- New weapons: Flushpipe-class torpedo (small & medium), Triceratorp-class torpedo (small & medium), Blunderbuss (medium ballistic)
- Carcharos SRM buffed: OP lowered (6 -> 3)
- Boomstick nerfed: Flux raised (200 -> 300)
- Rockchucker nerfed: Flux raised (50 -> 120)
- Quetzalcoatl buffed: Changed final tail segment's medium turret (hybrid -> universal)
- Basilisk, Monster, Quetzalcoatl: Subtle AI improvements, and fixed a bug causing AI to fail in sim opponents.
- Snaggletooth: Sprite touchup.
- Kingdom of Terra faction starts out a little less hostile to player and most factions.
- Garghool (system) has an additional jump point closer to the main planet.
- Loads of small tweaks and improvements, both aesthetic and mechanical. I couldn't possibly list them all because I forget most of them.
NOTE: I'm pretty sure this won't break saves, but it's a lot of stuff so who knows! Tread carefully.

Jan 16, 20202: v0.7.3 HOTFIX released.
- Quetzalcoatl no longer becomes a frigate permanently after losing its body. (Any existing frigate Quetz may still remain that way for the rest of its life)
- Grappling beams should no longer appear on pirate stations or ships.

Jan 14, 20202: v0.7.2 HOTFIX released.
- Fixed issue with Basilisk tail out-of-bounds exception (hopefully for good this time)
- Fixed misleading DPS readout of Grinder.

Jan 12, 2020: v0.7.1 HOTFIX released.
- Fixed crash caused by Ouroboros lacking some engines.
- Goon heavy fighter is now correctly labeled in the codex.

Jan 10, 2020: v0.7 released.
- Quetzalcoatl changes:
- - New system.
- - Substantial buffs to head segment's shield, armor, hull (at least double the survivability).
- - Body segment survivability is now concentrated more in the front segments (and received an overall small buff).
- - Body segment shield arc increased (30 -> 45).
- - Auxiliary Thrusters are now built-in, with concurrent drop in OP (150 -> 130).
- - When the body is destroyed, the head becomes a speedy little super-frigate.
- - AI improvements, movement is more slithery than ever before.
- - Changes apply to unique dreadnought version as well.
- New fighter wing: Goon-class heavy fighter.
- New skin: Rhino (LP).
- Carcharos missile: Buffed (75 -> 100 dmg). Also affects Snaggletooth version.
- Snaggletooth: Cargo capacity increased (50 -> 75).
- Queen: Shield arc increased (180 -> 360), flux pool increased (1200 -> 1800)
- Weapon distribution changes: Pirates and independents will now have limited access to more common Kingdom weapons and LPCs.
NOTE: Shouldn't break saves, BUT if you have an existing Quetzalcoatl, it might look and play a little funny.

Jan 6, 2020: v0.6 released.
Ships & Combat
- New ship: Mammoth-class heavy cruiser.
- New fighter wing: Slingshot-class bomber.
- New skin: Smasher (P).
- Returning ship: Trilobyte, with visual overhaul and some mechanical tweaks.
- Smasher: Ship system buffed (3 charges, flux cost: 1000 -> 500, distance/recovery time halved)
- Smasher, Monster: AI improvements. Will use systems to engage in melee range much more often.
- Across-the-board ship price adjustments (generally cheaper)
Faction & Campaign
- New faction flag.
- New faction portraits.
- New faction ship and person names.
- New dialogue and descriptions for some faction interactions.
- Faction markets now have access to fuel.
- The Kingdom has emerged from the shadows and is no longer hidden! (translation: I gave up trying to get the hidden market to work)
I don't think this one will break saves, though not all changes will appear if you update an existing save.

Dec 23, 2019: v0.5 released.
- Quetzalcoatl changes: Complete sprite revamp, including smaller size more in line with other capitals. Somewhat improved AI on slither movement and ship system. Ship system has been toned down significantly (3.5s duration, from 7).
- Vayra's Sector unique bounty added: Ouroboros-class dreadnought. (iiiittt's biiiiggg)
- Commissioned Crews hullmod added: Terran Density.
- Trilobyte, Bat, Verne, and Invader have been removed from fleets and markets for crimes against aesthetics. Graphical and mechanical overhauls may come in the future, in similar style to the Quetzal. (If you liked any of these ships, let me know, and I will prioritize it higher.)
Say goodbye to these ugly sprites
[close]
This one may break saves - assume it does!

Dec 5, 2019: v0.4.1 hotfix released.
- Fixed bug where Basilisk and Smasher systems wouldn't work if the ship had D-mods.
- Fixed issue with improper .csv case that caused problems on Linux.

Nov 30, 2019: v0.4 released.
- New ship: Monster-class destroyer.
- New weapon: CHAD Lance.
- Sprite touchups for Bully & Big Bully.
- Minor aesthetic changes, mostly to codex and statblocks.

Nov 12, 2019: v0.3 released.
- New weapons: Boomstick, Telekinesis Ray.
- Campaign music added.
- Version Checker integration added.
- Some small balance tweaks, notably: Verne reduced to 26 DP (was 30).
- Small aesthetic changes to faction fleet composition, codex entries, etc.
- Under-the-hood changes to improve physics and stop memory leaks.

Nov 6, 2019, 7pm EST: !HOTFIX! ay chihuahua!
- Fixed issue with Basilisk during very laggy battles, where its system would not operate.
- Slightly buffed Basilisk tail weapon to be immune to EMP/flameouts. (EMP will still disable engines, preventing system use, but weapon being disabled was visually confusing.)

Nov 6, 2019: v0.22 released.
- New ship: Basilisk-class cruiser.
- Fixed a bug where Wasp-spawning weapons would add to deployed total.

Nov 3, 2019: v0.211 released.
- BUGFIX: Issue within Nexerelin file caused crashes. (Thanks to Serpens for catching it)

Nov 3, 2019: v0.21 released.
- New ships: Smasher-class frigate, Queen-class drone carrier.
- Two new missions featuring the new ships.
- Fixed bugs and cleaned up code in Rhino drill among others.
This shouldn't break saves, let me know if it does and I'll try to post a fix.

Oct 31, 2019: v0.2 released.
- New faction: Kingdom of Terra.
(Note, the faction and its system still use a lot of placeholder and vanilla assets. Expect everything about it to improve in the future. But it works!)
- New capital ship: Invader-class battleship.
- New weapons: Carcharos SRM, Grinder.
- Buff - Improved Snaggletooth's built-in Carcharos and system, it can now fire twice as many missiles per minute.
- Nerf - Changed Verne's flux stats (capacity up, dissipation down) and turrets (2 medium -> 2 small).
- Nerf - Reduced Rhino's drill's damage reduction (90% -> 80%).
- Fixed an issue with Quetzalcoatl's bounds.
- Minor changes to ship burn levels, variants, codex stuff.
- With the new faction, availability of most hulls and weapons has been cut from other factions.
I'm unsure if this update will break saves - so treat it like it will!

Oct 26, 2019: v0.14 released.
- New ship: Quetzalcoatl-class battlecruiser.
- Hullmod icons added.

Oct 17, 2019: v0.13 released.
- New ship: Trilobyte-class combat freighter.
- New weapons: Bully Beam, Big Bully Beam, Rockchucker.
- Grappling Beam: Physics adjustment. Should work more consistently across different ship weights. (Approximately a sidegrade.)
- Rhino's Drill: Lowered rate of fire, increased damage per shot, mostly for performance during laggy battles.  (Approx sidegrade. Lower overall DPS but higher vs armor.)
- Bee Shooter: Increased DPS, decreased OP cost. (Buff)

Oct 8, 2019: v0.12 released.
- Bat-class phase destroyer added.
- Grappling Beam added.
- Adjustment to Verne's built-in hullmod and speed. (Overall buff)

Oct 7, 2019: Fixed bloated .jar file.
[close]

12
Modding / [0.9.1a] Toad Superheavy Bomber
« on: September 23, 2019, 02:26:01 PM »
https://www.youtube.com/watch?v=honXA_zHDZE

This is my first modding attempt. The idea was to make a fighter that deployed fighters. Conceptually, I like where it ended up. It's probably broken in half, but I don't think I have the experience to balance it properly. Please, let me know what needs fixing.

I've never done spriting/kitbash work before, so any critique or tips in that direction are most welcome too.

Should be set to spawn as a rare hi-tech (twice as rare as Trident). I haven't tested it in the campaign at all, so buyer beware.

Images
[close]

[attachment deleted by admin]

13
General Discussion / Changing flagships in combat
« on: September 19, 2019, 07:39:19 AM »
When I hop into an officer-driven ship during combat, does the ship retain the officer's combat skills or use my own?

14
Suggestions / Promote Officers from Rank & File
« on: September 17, 2019, 12:51:49 PM »
While flying around looking for another aggressive officer, I started wondering why there was no one with the chops among my 20,000 crew. Isn't that the logical place to look for officer material?

My suggestion: Every so often (X number of game ticks/battles/events), some individuals from the crew are added to a list for potential promotion to level 1 Lieutenant, the number of which scales based on crew number. Personality would be randomized, so that a decently sized endgame fleet (10k crew or so?) should be able to procure 10 officers of the correct personalities over the course of months/years, without having to station hunt.

15
Suggestions / More things to do with small ships/fleets
« on: August 23, 2019, 08:52:29 AM »
My favourite part of the game is the beginning. You're small and scrappy, your fleet of two frigates feels cozy and intimate. Battles never felt like so much was at stake, and like the player had so much influence, as those first few sparring matches with hounds and mudskippers. Wins were never so satisfying as beating four ships with two, or trading blows against shields until 0% combat readiness causes one to glitch out and succumb. Sure, there is spectacle in the big capital clashes, but the excitement is lessened knowing the outcome beforehand.

What I would love to see is more reasons to own and play with a small fleet of frigates, or more access to that kind of gameplay in later parts of the game. I'm talking something along the lines of:

- Contests, like tournaments sanctioned by the major powers, or maybe pirate captains who lay down bets to challenge you to 2-on-2 frigate "street" duels. A structured environment in which to play with frigate builds for real stakes.
- Missions, like the ones already in the game's main menu, but in the campaign that can be tied to progress. Maybe you get hired freelance to command someone else's fleet for a decisive battle or ambush. Succeed, receive pay, perhaps scaling with your grade. Reputation reward too.
- Some kind of exploration object or hazard that requires, or greatly prefers, small ships to interact with. Imagine some small [redacted] outpost, just 1 or 2 ships like you usually see, but they have a magnetic field that only lets in 10 DP worth of ships to battle them. (And they're guarding hella treasure.) So you are rewarded for carrying small ships, even with your endgame fleet, to participate in events like that.

Any one of those would bring the excitement of starting a new game, while letting the player keep, and further invest in his save file.

Pages: [1] 2