This version is out - you can download it here.Changes as of September 13, 2013Miscellaneous:
- Added "hide hullmods that can't be installed" checkbox to hull mod selection dialog
- Updated all missions to work with new battle mechanics (deployment etc) and use background planets
- Added small CR and hull bars to fleet member icons (visible in ship deployment dialog, fleet interaction dialog)
- Autoresolve (AI vs AI only): will now properly not "deploy" certain ships for CR purposes
- Adjusted max armor damage reduction to 85%
- Weapon tweaks:
- Vulcan: reduced flux/shot to 1 (was 3), increased damage to 25 per shot (was 15)
- Autopulse: increased number of charges to 20 (was 15)
- Updated fleet member tooltip - organized stats into "logistical data" and "combat performance", color-coded
Modding:
- Added InteractionDialogImageVisual (used to specify image data for an interaction dialog)
- Added to SectorEntityToken:
- setCustomInteractionDialogImageVisual()/getCustomInteractionDialogImageVisual()
- Can be used to override standard visuals in standard dialogs for planets, orbital stations, and jump points
- Added to SettingsAPI: JSONArray getMergedSpreadhsheetDataForMod(String idColumn, String path, String masterMod)
- Added ShipSystemAPI.getId()
- Beam weapons now respect angle offsets
Changes as of September 05, 2013Complete combat sound overhaul
Miscellaneous:
- Improved "target view" ('z') in combat - now offsets the center of the screen based on the location of the player's ship
- Updated Codex UI to take advantage of higher resolutions. Doesn't quite fit in 1024x768 at the moment.
- Augmented Engines and Unstable Injector now increase the maximum burn level by 1
- Made the accident report dialog look nicer
- Accidents can now cause a loss of CR, with damage (or outright ship destruction) likely for ships already at low CR. Mothballed ships are exempt from these types of accidents.
- Brawler: increased flux capacity and dissipation; increased armor. Does not lose CR over time in combat.
- Added "Elite" variant, found in several fleet compositions
- Target reticule now shows target's CR
- Added autoresolve option for handling pursuit of a fleeing enemy fleet
- Can pick ships to use for pursuit
- No risk to chosen ships, but does cost them CR
- Sub-par results compared to personally controlling the battle
- Deploying more ships gets better (but still sub-par) results
- Adjusted campaign fleet AI to help avoid clumping
- Changed the maximum armor damage reduction to 85% (was: 75%)
- Added shield flux/dam display to refit screen, alongside shield arc and flux/second
- Command-Q will now exit the game on a Mac
Core campaign UI revamp
- Logistics display in the bottom left of the screen
- Buttons to call up tabs in the lower left/bottom of screen, even when a "tab" is being shown
- Tabs can use more space depending on the screen resolution
- Uses "tripad" style to match the interaction dialog style
- Keeps track of whether the game was paused before a tab is shown; will not unpause on exit if it was
Combat control scheme:
- Changed default autofire toggles to Ctrl + 1/2/3/4/5 (Was: Shift + 1/2/3/4/5)
- Shift is now a default strafe + turn to cursor key, functionality can be mapped to any other key, does not require turn keys to be held to work
- Missile weapons with low ammo can now be set on autofire
Skills and aptitudes:
- Combat aptitude: increases maximum CR, reduces CR deployment cost of flagship (by 30% at level 10)
- Field Repairs:
- Increases supplies that can be spent on emergency repairs (tentatively 3 per day per level)
- Level 5 perk: +50% to chance to repair friendly disabled ships after combat
- Level 10 perk: -30% supplies required for ship repairs (but not maintenance)
- Reduced OP bonus from Mechanical Engineering and Computer Systems to 1% per level (was: 2%)
Modding:
- Sound overhaul means most of the sound ids have changed and the files/filenames for core sounds are new
- Added to MutableShipStatsAPI:
- MutableStat getBeamShieldDamageTakenMult();
- MutableStat getMissileShieldDamageTakenMult();
- MutableStat getProjectileShieldDamageTakenMult();
- MutableStat getEnergyShieldDamageTakenMult();
- MutableStat getKineticShieldDamageTakenMult();
- MutableStat getHighExplosiveShieldDamageTakenMult();
- MutableStat getFragmentationShieldDamageTakenMult();
- Added to CharacterCreationData:
- public static final String HYPERSPACE_NAME_TOKEN;
- String getStartingLocationName();
- void setStartingLocationName(String startingLocationName);
- Vector2f getStartingCoordinates();
- Added to SectorAPI:
- LocationAPI getRespawnLocation();
- void setRespawnLocation(LocationAPI respawnLocation);
- Vector2f getRespawnCoordinates();
- Missile AI is now fully moddable
- Added ModPlugin.picMissileAI(MissileAPI missile, ShipAPI launchingShip)
- AI must implement MissileAIPlugin interface
- Can give commands to the missile using MissileAPI.giveCommand()
- Added ShieldAPI.setActiveArc(float activeArc)
- Calling SectorEntityToken.setFaction() will properly update indicator color
- Fixed bug where beam weapon animations were not loaded
- Added optional "fadeActivationSoundOnChargedown" parameter to .system files, defaults to "true".
- Fleet/faction color representation more true to actual color specified in the .faction file
- Added to SoundAPI:
- void setVolume(float newValue);
- void setPitch(float pitch);
- void setLocation(float x, float y);
Bugfixing:
- When switched to an enemy ship view (by setting a target and pressing 'z'), will go back to player ship if the target is lost in the fog of war
Changes as of August 15, 2013Miscellaneous:
- Campaign movement:
- Adjusted Navigation skill to improve the maximum burn stat of ships, based on hull size (+5/5/3/3/2 at level 10)
- Adjusted base travel speed (increased)
- Removed travel speed bonus for not being near a planet
- +5 maximum burn for entire fleet in "deep" hyperspace (i.e. not near a star/gas giant jump point)
- Improved star graphics
- Phase ships:
- +50 speed/improved acceleration while phased
- ~50% increased flux dissipation rate
- Combat command UI right-click behavior adjustments:
- Right-clicking on a destroyer or above with only bombers selected will create a Strike assignment
- When creating a waypoint but having 0 command points, will update button state once a new command point is gained
- Adjusted some combat assignment tooltip contents
- Repair mechanics:
- "Emergency repairs" fleetwide stat; starts at 5, supply use for these repairs doesn't affect logistics
- Maximum total repairs performed (in supplies/day) are emergency repairs + unused logistics capacity (i.e. if "emergency repairs" are at 5, and the logistics use is 10/25, maximum total repairs per day are 20.)
- New ship: Construction Rig
- Available in Askonia, also delivered occasionally by certain convoys and part of certain fleet compositions
- Increases the amount of repairs on a single ship in the fleet (in order of logistical priority), using its built-in Repair Gantry
- Multiple rigs do not stack on a single ship but apply to multiple ships instead
- No weapons or combat capability to speak of, has a flare launcher for defense
- New ship: Ox-class Tug
- Available in Askonia, other places
- Increases the maximum burn of the slowest ship in the fleet by 1, using its built-in Monofilament Tow Cable
- Up to 4/3/2/1 cables can be applied to capital ships/cruisers/destroyers/frigates at a time
- Consumes a lot of fuel
- No weapons or combat capability to speak of, has a flare launcher for defense
Modding:
- Hulls can now have built-in hullmods
- "builtInMods" key in .ship file
- see data/hulls/crig.ship for an example
- Star specification in planets.json, pertaining :
- Added:
- starCoronaSprite
- starCoronaColor
- starCoronaSizeMult
- atmosphereThickness and atmosphereThickness now ONLY apply to the narrow bright ring around the star, not the whole corona
- Removed starHaloBrightness (extraneous)
- See Repair Gantry hullmod for implementation of the Construction Rig's repair functionality
- Code is in com/fs/starfarer/api/impl/campaign/RepairGantry.java (in starfarer.api.zip)
- See Monofilament Tow Cable hullmod for implementation of the Ox's functionality
- Code is in com/fs/starfarer/api/impl/campaign/TowCable.java (in starfarer.api.zip)
- Added PD_ONLY weapon hint
- Must be used with PD hint
- PD + PD_ONLY -> weapon will only target missiles
- PD + PD_ONLY + ANTI_FTR -> weapon will only target missiles and fighters
- Added:
- SectorAPI.getAllFactions()
- LocationAPI
- void removeSpawnPoint(SpawnPointPlugin point)
- List<SpawnPointPlugin> getSpawnPoints()
- boolean activeThisFrame(); // determine when non-current location is active
- SectorEntityToken:
- String getCustomDescriptionId()
- void setCustomDescriptionId(String customDescriptionId)
- CombatFleetManagerAPI:
- DeployedFleetMemberAPI getDeployedFleetMember(ShipAPI ship)
- AssignmentTargetAPI createWaypoint(Vector2f location)
- AssignmentInfo createAssignment(CombatAssignmentType type, AssignmentTargetAPI target, boolean useCommandPoint)
- void giveAssignment(DeployedFleetMemberAPI member, AssignmentInfo assignment, boolean useCommandPointIfNeeded)
- void orderRetreat(DeployedFleetMemberAPI member, boolean useCommandPointIfNeeded);
- void orderSearchAndDestroy(DeployedFleetMemberAPI member, boolean useCommandPointIfNeeded)
- void orderSearchAndDestroy()
- void orderFullRetreat()
- CombatEngineAPI:
- float getTotalElapsedTime(boolean includePaused)
- float getElapsedInLastFrame()
- MutableCharacterStatsAPI
- long getXP()
- int getLevel()
- WeaponAPI:
- EveryFrameWeaponEffectPlugin getEffectPlugin()
- float getCurrHealth();
- float getMaxHealth();
- void repair();
- ShipEngineControllerAPI:
- List<ShipEngineAPI> getEngines()
- ShipEngineAPI:
- Vector2f getLocation()
- boolean isActive()
- boolean isSystemActivated()
- String getStyleId()
- boolean isDisabled()
- void disable()
- MissileAPI.getEngineController()
- DamagingProjectileAPI.isFading()
- ArmorGridAPI:
- int [] getCellAtLocation(Vector2f loc)
- MutableShipStatsAPI:
- MutableStat getBeamDamageTakenMult();
- MutableStat getMissileDamageTakenMult();
- MutableStat getProjectileDamageTakenMult(); // non-missile, non-dps
- MutableStat getEnergyDamageTakenMult();
- MutableStat getKineticDamageTakenMult();
- MutableStat getHighExplosiveDamageTakenMult();
- MutableStat getFragmentationDamageTakenMult();
- HullModEffect:
- void advanceInCampaign(FleetMemberAPI member, float amount)
- void advanceInCombat(ShipAPI ship, float amount)
- Added BuffManagerAPI (to manage temporary ship stat modifications in the campaign)
- FleetMemberAPI:
- void setStatUpdateNeeded(boolean statUpdateNeeded);
- BuffManagerAPI getBuffManager();
- Only one instance of a HullModEffect will be created per application session, rather than one per call to any method
- Removed FogOfWarPlugin, use EveryFrameCombatPlugin instead (see com.fs.starfarer.api.impl.combat.EscapeRevealPlugin for example, in starfarer.api.zip)
- Removed BattleObjectivesEffectsPlugin and FleetPointsFromBattleObjectivesPlugin, both are no longer used. See data/config/battle_objectives.json for new way of working with objectives.
- Added ScopeDescription.ALL_FIGHTERS
- Drones will now fire at targets under fog of war (only an issue with very long-range drones)
Bugfixing:
- "Deflection" (Evasive Action level 10 perk) now correctly reduces damage taken instead of doubling it. Ouch.
Changes as of July 27, 2013Hyperspace
- Travel consumes fuel based on the distance travelled (i.e. sitting in place does not consume fuel)
- Fleets that run out of fuel drift towards the nearest star or gas giant and automatically fall into its gravity well
- Hyperspace jump point/gravity well generated by the star can only be used if you have a high navigation skill, places the fleet in a random location near the star
Miscellaneous:
- Added ring systems (i.e. around gas giants and such), purely visual
- Scuttling a ship now yields a bit of fuel in addition to supplies
- Messages (about supply convoy arrivals and such) only shown while within that system
- Updated missions to work w/ new deployment/combat mechanics:
- Turning the Tables
- Wolf Pack
- Hornet's Nest
- Optimized save file size (roughly 2x smaller for the same amount of game data)
- Lowered sound volume for weapon impacts doing minimal damage
- Added placeholder planet interaction dialog (shows planet graphic, can't do anything except "Leave")
- Added map icon for jump points
- Resupplying AI fleets will now restock fuel as well
- AI has some rudimentary knowledge about hyperspace (will pursue through jump points if close enough, will move through jump points if the destination it's headed to isn't in-system)
- Increased after-flameout flameout immunity time for fighters to 10 seconds (was 3)
Modding:
- StarSystemAPI:
- addRingBand() - for creating ring systems based on custom textures
- Added "isGasGiant" parameter to planet definitions in planets.json
- Added version of StarSystemAPI.autogenerateHyperspaceJumpPoints()
- Optionally auto-generates system entrances at gas giants
- Optionally auto-generates two-way jump point on the fringes of the system
- (Both of the above could also be done manually)
- Weapons not in any group will still have their EveryFrameWeaponEffectPlugin.advance() called
- Added to SectorAPI:
- List<String> getAllEmptyVariantIds();
- List<String> getAllFighterWingIds();
- Added to settings.json:
- maxArmorDamageReduction: armor damage reduction cap
- dpsToHitStrengthMult: used to compute vs-armor "hit strength" for beam weapons
- onHitEffect now works for missiles, plasma shots
- proximity fuse behaviorSpec now works on plasma shots
- proximity fuse behaviorSpec now supports onHitEffect (see flak_shot.proj for commented-out example)
- Added WeaponAPI.getSprite() - returns SpriteAPI for the current weapon frame. Can be used to enable additive blending (glowy weapon sprite animations), adjust sprite color/transparency dynamically, etc
- Made ship hull styles fully moddable (shield color, explosion color, etc)
- Configured in data/config/hull_styles.json
- Can add new, fully-custom styles
- Can set custom engine/shield/etc sounds per style in sounds.json (see "engine_loop" for an example, can use custom style IDs there)
- Engine styles:
- Can now be specified directly under "style" (i.e.: "style":"midlineFlare", as opposed to "style":"CUSTOM","styleId":"midlineFlare"). Old way still works.
- All vanilla engine styles can be overridden using engine_styles.json
- Styles for LOW_TECH, MIDLINE, and HIGH_TECH extracted to engine_styles.json (as examples)
- Added to ShipAPI:
- void setSprite(String cat, String key)
- ShipEngineControllerAPI getEngineController()
- ShipEngineControllerAPI:
- Enables using decorative weapons-as-custom-engine-glows, among other things
- Methods:
- boolean isAccelerating();
- boolean isAcceleratingBackwards();
- boolean isDecelerating();
- boolean isTurningLeft();
- boolean isTurningRight();
- boolean isStrafingLeft();
- boolean isStrafingRight();
- Ship and fighter AI is now fully moddable
- Added ModPlugin.pickShipAI(FleetMemberAPI member, ShipAPI ship)
- Can set a specific AI based on the ship, possible to create a custom AI for a single ship in the campaign or in a mission, for example
- AI must implement ShipAIPlugin interface
- Can give commands to the ship using ShipAPI.giveCommand() (which is what the player input/current AIs do)
- Requires full implementation. The basic functions a general-purpose AI should perform are:
- Maneuvering
- Weapon fire, active group selection, autofire toggling
- Flux venting
- Respecting the fog of war, map bounds
- Retreating (picking the right map edge, using travel drive, etc)
- Front/omni shield, phase cloak use
- Obeying assignments from the command system
- CombatFleetManagerAPI.getAssignmentFor(ShipAPI ship)
- "Locking" the controls for retreating, out-of-CR ships (boolean ShipAPI.controlsLocked())
- Ship system usage
- Fighter return to carrier, landing/taking off, wing formations etc
- Fighter landing requires using:
- ShipAPI to manage landing animations
- FighterWingAPI to figure out whether/where to return
- FighterLaunchBayAPI to actually land
- Does NOT have to handle weapon autofire; can just toggle groups on/off
- Quite possible I missed something "special" that the core implementation does.
- Drone AI is now fully moddable
- Added ModPlugin.pickDroneAI(ShipAPI drone, ShipAPI mothership, DroneLauncherShipSystemAPI system)
- Needs to implement ShipAIPlugin interface
- Responsible for all manevering/firing/etc and following drone system orders and spec
- Weapon autofire AI is also fully moddable
- Added ModPlugin.pickWeaponAutofireAI(WeaponAPI weapon)
- Can be specified per-weapon
- AI must implement AutofireAIPlugin interface
- Basic concerns for a general implementation are what to fire at, when to fire, target leading (considering captain/crew skill), avoiding friendly fire, respecting weapon hints from weapon_data.csv, etc.
- Added numerous methods to API to give enough info for the AI to do its work
- Added:
Bugfixing:
- Fixed campaign fleet AI bug relating to picking random locations to patrol
Changes as of July 11, 2013Hyperspace:
- Jump points/wormholes for travel between star system and hyperspace
- Travel through hyperspace to another system, same as in-system travel
- Added new star system ("Askonia")
- More details to come in the form of further patch notes and/or blog post
Fighter mechanics changes
- Fighters return to carriers individually rather than as a whole wing
- Replacement fighters are added one at a time by flight decks
- Wing can not be taken out of combat unless it has no fighters left and no replacements are being prepped
- New assignment: fighter rendezvous, wings wait there to regain full strength
- Bombers will wait to regain full strength at "rally strike force" (if available)
- Replacements cost CR, can not be produced when CR drops to 0.
- No more direct supply consumption by fighter repairs, instead supplies are consumed by CR recovery
- In the campaign:
- Fighter wings can not be lost if there are any ships with a flight deck in the fleet
- Without a ship with a flight deck, fighter wing losses can not be replaced even out-of-combat
- Damaged fighters are repaired immediately (and at no cost), regardless of whether a flight deck is available
- Hangar space removed
CR-related:
- Weapons/engines being disable no longer affects CR. Instead, taking hull damage does.
Miscellaneous:
- "Transfer Command" now starts close to the destination ship if the flagship hasn't been deployed yet, allowing for a quick initial command transfer
- Ships being delivered to stations are actually mothballed and present in the fleet; participate in retreat-style battles if a convoy escorting these is attacked
- Ships delivered to stations will randomly replace ships already at the station if the total number exceeds 50, items delivered to stations will randomly replace stacks already present at station if the total number exceeds 100
- Ensures the inventory doesn't stagnate
- Increased amount of cargo and ships delivered to stations
- Added "maximum burn" stat to ships; determines travel speed
- Lowest value in fleet is used
- No penalty for having many ships
- Temporarily removed "Coordinated Maneuvers" skill
- Added maximum travel speed to fleet tooltip in travel screen
Modding:
- Expanded RepairTrackerAPI with logistics-related stuff
- In-combat repairs can no longer go above 100%
- Fixed bug with WeaponAPI.setPD(false) not working for weapons that have the PD hint
- Fleets delivering ships will drop off all "mothballed" ships at the station
- Old-style delivery (using getMothballedShips()) still works
- Adjustments to CampaignPlugin:
- Methods that select a plugin for a particular task (battle creation, autoresolve implementation, interaction dialog, etc) now return a priority alongside the implementation
- Highest-priority plugin gets used
- Seven priorities, lowest to highest:
- CORE_GENERAL - used by core only
- MOD_GENERAL - mods overriding general behavior (i.e. "default planet interaction")
- CORE_SET - used by core only
- MOD_SET - mods overriding behavior for a subset of entities, i.e. "interaction with jungle planets")
- CORE_SPECIFIC - used by core only
- MOD_SPECIFIC - mods overriding behavior for a specific entity, i.e. "interaction with Corvus IIA" or "interaction with mission target", etc
- HIGHEST - should only be used by mod compilations to resolve conflicts between component mods
- InteractionDialogPlugin
- Added methods to highlight text in tooltips/set highlight colors
- Rows starting with a '#' in .csv files will now be skipped
- Custom orbits (create a custom implentation of OrbitAPI, then use SectorEntityToken.setOrbit())
- Added:
- BaseLocation:
- FactoryAPI:
- createCircularOrbit()
- createJumpPoint()
- SectorEntityToken:
- SectorAPI
- setCurrentLocation(), other related stuff
- void addScript(EveryFrameScript script) - scripts that run every frame.
- JumpPointAPI
- StarSystemAPI:
- getLightColor()
- setLightColor()
- initStar() - removed color paramater, use PlanetAPI.getSpec() and PlanetAPI.applySpecChanges() instead
- PlanetSpecAPI - dynamically adjust various visual properties of planets after they're added to the campaign
Bugfixing:
- Fixed crash caused by double-clicking on the command shuttle in the command UI
- Fixed issue where selecting a carrier and right-clicking on an enemy ship to order an attack would not work
Changes as of May 24, 2013New fleet management:
- New stat: "logistics", expresses maximum supply consumption that can be handled effectively
- Supplies consumed by: ship maintenance, crew, marines, repairs, being over capacity in fuel/cargo/personnel
- Logistics stat limited by number of personnel in the fleet
- New stat: maximum repair capacity, how many supplies per day can be spent for repairs
- Player can adjust actual value to anything from 0 to the maximum
- Logistics rating - from 100% to 0%, 0% at double the maximum consumption
- Reduces maximum CR for all ships by up to 50% at 0% LR
- Ships at maximum CR only consume 10% of the maintenance cost in supplies, but the full value is counted against the logistics rating
- Accidents now based on low logistics rating instead of being over capacity, overall severity reduced
- Supplies cost increased 20x
- New fleet member settings:
- Mothball: maintenance cost reduced to a minimum, provides no fuel/cargo/etc capacity, starts at 0% CR when restoring to full capability
- Logistical Priority: designated ship(s) get crew and supplies for repairs first. Both are evenly distributed, first between priority ships, then the leftover between the rest of the ships.
- Maximum crew level: sets the maximum level of crew to use on a given ship, if possible (i.e. if it's set to "green" and elite crew is all that's left, elite crew will be used.)
- Crew being understrength reduces both current and maximum CR, but does not automatically mean a ship can't be deployed into battle
- New fleet screen UI (work in progress)
- Fleet points removed from the campaign (remain as "deployment points" in combat)
Miscellaneous:
- Revamped "Load Game" dialog
- Improved how the items look
- Added indicator for iron mode
- Added two levels of mod compatibility warnings if the game detects a mismatch between the enabled mods and the mods used by the save
- Shows tooltip with detailed mod breakdown (enabled at last save, ever enabled for save, currently enabled) for each save
- Games with warnings and severe warnings re: mod compatibility are auto-sorted to the bottom of the list. Aside from that, most recent saves are on top.
- Fleet deployment dialog: can right-click to set status directly from "deploy" to not deploy (useful for ships that would otherwise cycle through "deploy", "deploy left", etc)
- Changed behavior of "all" button in deploy dialog - now sets all ships to "deploy", have to press "deploy" to actually deploy them. Useful for flanking deployment assignments in pursuit scenarios.
- Sensor Array now provides a 10% damage bonus to all weapons (was: 25% range bonus)
- Updated admiral AI to work with new battle mechanics
- Renamed log file to "starsector.log"
- "Second in command" option (autoresolve) no longer available to the player (possibly a temporary measure, depending on things)
- Added brief system description to ship tooltip
- Added tooltip delay to settings
- Added messages/sound cues warning of 1) CR starting to lower due to extended deployment and 2) CR reaching malfunction levels
New boarding mechanics:
- Goal is to make boarding a way to acquire new types ships rather than to acquire *more* ships, thus the risks associated with boarding are very high - on average, should be more than the cost to buy the same ship
- Boarding takes place as a series of choices in the new encounter dialog
- Both marines and crew can be used to board, marines are much more effective
- At the end of the encounter, one of the losing side's ships disabled in any of the engagements has a chance to be repaired by its crew. The winning side has a number of options:
- Board it: requires picking a number of combat-ready ships for the job - only the crew capacity of these may be used for boarding), and one of:
- Hard dock: best chance of success, high chance of losing ALL ships in the boarding action to a self-destruct. As harsh as it sounds.
- Launch assault teams from a distance: low chance of success, requires more marines to succeed, high chance of enemy escaping
- Engage with nearby ships: enemy ship will either be disabled, destroyed, or manage to escape
- Let it go: enemy ship will be able to escape
- If the player loses a battle, similar mechanics for the AI kick in (though at this point it will always pick the "engage" option)
- Increased marine cost 10x
- Fighter wings can not be boarded
Ship AI:
- Fixed issue where a retreating ship being pursued would go off the map on the left or right border and then proceed to retreat while out of bounds
Modding:
- Added SettingsAPI.getDescription(String id, Type type) for retrieving entries from descriptions.csv
Added SectorAPI.getPersistentData(), used for saving arbitrary data in the savegame
Replaced MutableCharacterStatsAPI.getFriendly/EnemyShipRepairChance() with getShipRepairChance() due to changing mechanics
Expanded ShipVariantAPI. Combined with FleetMemberAPI.setVariant(), should be enough to allow mods to dynamically create custom variants.
Fixed bug where the order in which weapon firing offsets were specified did not work correctly for recoil with multiple barreled weapons (recoil would always go right-to-left instead of in the firing order)
- Fixed bug where script to be called on completion of a GO_TO_LOCATION_AND_DESPAWN assignment neved got called
- Fixed combat crash caused by ships w/o any weapons at all
- Autoresolve algorithm changed, is now fully moddable
Bugfixing:
- Fixed autofire targeting bug (was not properly determining which target is closest to current weapon facing)
- Fixed visual Doom artefacts
- Fixed rare crash when clicking on retreating ship in the command view
- Fixed bug where icons for weapons with barrels above the main turret would render below the turret sprite
- "Reset" button for missions now actually works
Changes as of March 23, 2013Ship AI:
- Fixed issue that was causing ships to drift in a slightly wrong direction sometimes (they'd consider a velocity "close enough" to the desired one when it really wasn't)
Miscellaneous:
- Added new combat map generation code
- Larger maps, objectives farther from borders
- Number of objectives ranges from 2 to 4, no more 5-objective maps
- Control group management can now be done in the fleet deployment dialog
- Decorative, background parallaxing planet added to campaign battle depending on where the battle takes place
- Missions only: removed random post-battle capture
Battle mechanics:
- In an "escape" scenario, pursuing frigates and fighter wings can be deployed on the flanks (clicking on them cycles through "deploy", "deploy left", and "deploy right")
- Deployed but non-combat-ready ships (possible in "escape" scenario):
- Have their controls locked and try to retreat off the top of the map
- Can not be commanded or transferred command to
- Do not benefit from the 0-flux speed boost
- Exiting mid-battle:
- Finishes the battle as a victory if the enemy is in full retreat
- Exits to main menu from campaign otherwise, unless iron mode, in which case it exits the game
- Never results in battle being auto-resolved
Modding:
- Added FluxTrackerAPI.isEngineBoostActive()
- Added AnimationAPI.get/setAlphaMult()
- Core implementation of BattleCreationPlugin now resides in the api jar in an impl package
- Added Global.getCombatEngine()
- Added Global.getLogger(Class), returns log4j logger for that class
- Ammo regen timer only starts when ammo is below full
- Planets can be marked as "background", will move around depending on where on the map the view is, can define the area that maps to the full extent of the map
- When loading JSON files, errors will now report correct line number (instead of always being line 1)
- strings.json now merged when multiple mods supply the file
- Added SettingsAPI methods to get strings from strings.json, get/set dev mode state, get color from settings
- ModPlugin now has the following methods:
- void onApplicationLoad() throws Exception;
- void onNewGame();
- void onEnabled(boolean wasEnabledBefore);
- void onGameLoad();
- void beforeGameSave();
- void afterGameSave();
- Mods can add things to existing games (using the "onEnabled" method)
- generators.csv is now deprecated, use ModPlugin.onNewGame instead.
- Added "newGameCreationEntryPoint" to "plugins" section in settings.json
- Mods can now register implementations of the CampaignPlugin interface, with the following:
- String getId();
- boolean isTransient();
- boolean isMod();
- InteractionDialogPlugin pickInteractionDialogPlugin(SectorEntityToken interactionTarget);
- BattleCreationPlugin pickBattleCreationPlugin(SectorEntityToken opponent);
- Mods can create custom dialogs on interaction with any entity, i.e. a planet, a fleet, or an asteroid
- Added CampaignUIAPI interface, moved addMessage methods from SectorAPI there, added some other methods to it, added SectorAPI.getCampaignUI(), deprecated all SectorAPI.addMessage methods
- Mods can present a custom dialog to the player at any time via CampaignUIAPI.showInteractionDialog(). The dialog is highly flexible.
- Core fleet interaction dialog uses the same interaction dialog (code for plugin can be seen in com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl)
- Allows custom UI widgets to some extent
- OpenGL rendering, ability to bind loaded textures (can load new textures by adding them to the "graphics" section of settings.json)
- Custom input processing
- Example implementation of of custom UI widget in com.fs.starfarer.api.impl.campaign.ExampleCustomUIPanel
- All it does is grab the sprite for the Wolf and render it at the mouse coordinates on top of a quad background
- Added BaseModPlugin and BaseCampaignPlugin - provide default impls of all methods, extend those classes rather than implementing the respective interfaces to minimize impact of new methods being added to the interfaces (since default impls of those will be added to the Base*** implementations)
Bugfixing:
- Fixed bug where gaining experience while having 0 crew would result in a divide by zero
- Fixed bug that caused some issues during sound loop playback under some very specific circumstances
Changes as of March 13, 2013Combat readiness ("CR"):
- Added to create tighter link between combat and campaign layers
- Each ship has a rating between 0 and 100%, maximum affected by crew level/skills/supply availability
- Affects damage taken, speed/maneuverability, turret turn rate
- Particularly low CR results in not loaded missile racks and random weapon & engine malfunctions
- Random malfunctions only occur at a very low CR rating and are crippling, so deploying ships at that CR level is a tactic of last resort
- Ships with extremely low CR may not be deployed for combat, unless escaping, in which case their controls are locked to forward movement and their shields/weapons are inactive
- Recovering CR takes time and consumes supplies, making it less economical (and risky, should an unexpected battle occur afterwards) to deploy an overwhelming force against an enemy and hopefully leading to more even battles even if the player's fleet outnumbers the enemy
- Frigates (and potentially a few destroyers) have a limited "peak readiness" time in combat, after which CR begins to drop to represent combat stresses on the ship. The goal here is to prevent indefinite kiting tactics from being effective - frigates are now on a timer to do their job.
- CR reduction due to combat, occurs after combat:
- Per-ship deployment cost (higher of base deployment cost, or CR used up after peak readiness has passed)
- Extra CR lost by retreating ships, but only if the engagement was lost
- Extra CR cost for using missile weapons in combat, based on ammo remaining
- Extra CR cost for suffering a flameout of weapons being disabled by damage
- Combat effects of CR (current, will likely change):
- No deployment below 10%
- Chance of malfunction below 20%
- Reduced missile ammo at below 30%, missile weapons at 0 ammo at 10%
- Penalty to speed/damage taken/rate of fire below 50%, bonus above 60%
- +-10% speed, +-10% damage taken, +-25% rate of fire
- Ship system goes offline at 0%
- Maximum and current CR affected by fraction of crew complement, ships can be deployed with less than their skeleton crew, though their CR will be lowered
Campaign battles mechanics:
- Take place as a series of engagements, that is, a single "battle" may involve several head-on engagements and a pursuit of one side's remaining ships
- Only two battle types are a head-on engagement by the two fleets, or one fleet escaping and the other in pursuit
- After a head on engagement, winning side picks one of three options:
- Harry the retreating enemy forces: reduces the CR of any enemy ships left in reserve, reduces pursuit range if enemy tries to escape
- Send out salvage teams: increases salvage (supplies, fuel, weapons, etc) recovered from wrecks from the previous engagement
- Stand down: deployed ships recover CR (amount equal to deployment cost), but can't pursue if the enemy retreats, and allows the enemy to disengage regardless of their fleet size. Can still "harry" (see below).
- When one side tries to disengage, the other side has the following options (availability of these depends on results of prior engagements):
- Pursue: forces an "escape" style battle
- Harry the retreating enemy forces: reduces the CR of all enemy ships
- Let them go: ends the encounter with no penalty for the enemy fleet
- Side that won the last engagement can disengage with no risk, regardless of the size of their fleet
Battle mechanics changes:
- Ships enter battle with "travel drive" engaged, moving at high speed for several seconds, and retreating ships engage travel drive a few grid squares away from the border (both work to reduce the amount of time spent fighting near a border, or trying to chase a ship across it)
- Maps are bigger, with objectives farther away from the borders
- Battle objectives no longer provide fleet points, only ship bonuses
- Conceptually, objectives are no longer present on the battlefield to begin with, but are deployed by your ships at suitable locations. (The objective sprites are not to scale.)
- Default battleSize increased from 100 to 200
- Changes to how escape works:
- The escaping side has to have at most 80 fleet points worth of ships (otherwise, can't "escape" and must engage in a head-on battle)
- All of the escaping ships start out deployed partway up the map and must retreat off the top border of the map
- All civilian ships and carriers are automatically given the "Retreat" order (may be countermanded)
- Pursuing forces deploy on the bottom or sides of the map to chase down escaping ships
- "Escape" map is fairly long vertically
Ship AI:
- Improved aim against moving targets with hardpoint weapons at high crew accuracy levels, better at actually executing the mathematically-correct firing solution. Most visible with fast ships circling each other.
- Marginally improved logic for detecting danger for deciding whether to lower or raise shields
- Reduced incidence of ship deciding to turn away from its target to take some potential (and not incoming) hits on armor
Miscellaneous:
- Player can retreat their flagship by pressing "enter" when within 2000 pixels of the retreat border and facing towards it. Retreat popup dialog is gone.
- X button in the top right corner and Alt-F4 now close the game
- Scrollbars are now draggable/clickable/etc
- Phase Skimmer will now face towards the mouse cursor when it comes out of the skim, unless there's a target set, in which case it'll point towards the target. Phase Teleporter behavior is unchanged.
- Added "shield arc" indicator to refit screen
- Combat aptitude now raises maximum CR for piloted ship instead of providing a damage bonus
- Increased top speed and acceleration for most frigates
- Pre-combat ship tooltips now only show essential information, can be expanded to show full information by pressing F1
- Added "Battle size" setting to gameplay settings screen, range is from 100 to 500 with the default at 200. (Other changes to the gameplay make this an ok setting to adjust without disturbing balance ... overmuch.)
- "Fleet points" are now "Deployment points" and only matter for deploying ships in battle (campaign-level details TBD)
- Adjusted deployment points values for all ships and fighter wings - reduced for a few frigates, raised slightly for larger ships
- Ships traveling over their top speed (due to zero-flux coasting, for example) will automatically engage maneuvering thrusters to slow down
- Flux bar now shows some activity when the flux level is at 0 while flux is being generated and dissipated at a faster rate
- Removed default keybinding of Alt-A/D for strafe
Modding:
- Battle objectives are now fully moddable (see data/config/battle_objectives.json)
- Backgrounds smaller than 2048x2048 now work properly
- Fixed bug with setOwner() not working on beam projectiles (pulse laser shots, etc)
- "alwaysAnimate" now works for beam weapons, too
- WeaponAPI.getCooldownRemaining() now returns 0 when a weapon is firing or charging up, instead of the full refire delay
- Added to ShipAPI:
- void setRenderBounds(boolean renderBounds);
- Added to BoundsAPI:
- void clear();
- void addSegment(float x1, float y1, float x2, float y2);
- void addSegment(float x2, float y2);
- Added SpriteAPI (utility for rendering in custom UI panels)
- Added to SettingsAPI:
- SpriteAPI getSprite(String filename);
- SpriteAPI getSprite(String category, String id);
- InputStream openStream(String filename);
- String loadText(String filename);
- JSONObject loadJSON(String filename);
- JSONArray loadCSV(String filename);
- float getScreenWidth();
- float getScreenHeight();
- Added ModPlugin interface:
- void onApplicationLoad()
- more likely to come here (for save/load/new game management by mods)
- Malformed mod_info.json no longer stops the game from starting, any errors reading it are still logged
- Added engineGlowMaxBlend parameter to ship system modifications, governs how far towards the engineGlowColor the engine's default color is shifted at max system effect level
- Added to MutableShipStatsAPI:
- MutableStat getWeaponMalfunctionChance();
- MutableStat getEngineMalfunctionChance();
- MutableStat getMaxCombatReadiness();
- StatBonus getCRPerDeployment();
- StatBonus getPeakCRDuration();
- StatBonus getCRLossPerSecond();
- MutableStat getBaseSupplyUsePerDay();
- MutableStat getBaseRepairRatePercentPerDay();
- MutableStat getBaseRepairCost();
- Removed MutableShipStatsAPI.getRepairTimeBonus() - its effects can be fully accomplished using other stats
- Added to WeaponAPI:
- Combat readiness effects in combat fully moddable (see the "plugins" section in settings.json)
- Removed battleSize from settings.json, added minBattleSize and maxBattleSize that control the range of the settings slider instead
- Added:
- EngagementResultForFleetAPI
- CrewCompositionAPI
- A bunch of other stuff
Bugfixing:
- Fixed bug with sounds still playing at a very low volume if the volume was set to 0
- Engine hum sound loop will no longer continue playing if an engine is disabled while active
- Added some manual cleaning of allocated direct buffers to speed things along. End result *should* be a reduced chance of OutOfMemory errors.
- Fixed bug with two sounds playing at once when decreasing maxed out skill in character screen
- Fixed bug where drones would sometimes be unable to keep up with the ship that launched them
- Fixed but with decorative slots occasionally making their way into weapon groups (i.e., Sensor Dish on the Onslaught)
- Fixed bug that allowed phase ships to fire while cloaked if prevented from uncloaking by overlapping with an object
- Firing arcs no longer show up on disabled/destroyed ships
- Fixed "white background after a while" bug (only affected some video cards, apparently)
- Holding "C" and "S" at the same time no longer results in the ship decelerating twice as fast as normal
- Fixed Burn Drive AI bug where it was only looking 1000 units ahead for missiles, as opposed to the entire burn distance
- Fixed Fortress Shield AI bug where it would stop trying to aim the shield while the system was on
- Fixed bug where activating Maneuvering Jets immediately after a flameout would trigger another flameout