(https://i.imgur.com/1MINnAl.png)
v3.0.9
A collection of one-off quests.
Download (https://github.com/wispborne/persean-chronicles/releases/download/3.0.9/Persean-Chronicles-3.0.9.zip)
3.0.9 is a compatibility update with no other changes.
The next update will be 3.1.0 and contain the next part of the Telos arc.
requires LazyLib 2.8 or later (http://fractalsoftworks.com/forum/index.php?topic=5444.0)
requires MagicLib 1.1.3 or later (https://fractalsoftworks.com/forum/index.php?topic=25868.0)
All updates are save-compatible unless the first number changes (1.1.x to 1.2.x is ok, but 1.x.x to 2.x.x is not).
May be added to existing saves, but not removed afterwards.
Source Code (https://github.com/wispborne/persean-chronicles) • Previous Versions (https://github.com/wispborne/persean-chronicles/releases)
(https://img.shields.io/github/downloads/wispborne/persean-chronicles/3.0.9/total?color=blue&logo=github) (https://github.com/wispborne/persean-chronicles) (https://img.shields.io/github/downloads/wispborne/persean-chronicles/total?color=blue&logo=github&label=downloads%40total) (https://github.com/wispborne/persean-chronicles)
To get started, simply check around at bars.
Features
- Over 7,000 11,000 words.
- Various degrees of branching stories (nothing too wild, but some quests can end differently or even base your rewards on your decisions).
- A unique ship (Telos quest).
- Custom music (Depths & Telos quests).
- No anime.
2022 edit: or catgirls.
2023 edit: or shipgirls.
Quests
- Karengo (questline)
- Dragons: A expedition takes you up close and personal with some wildlife.
- Depths: Following 'Dragons', an expedition takes you deep underwater.
- Telos: Following 'Depths', you investigate an extinct mini-faction - and their ships.
- Nexerelin's random systems (Corvus Mode) is not supported for 'Telos' and the quest will not appear.
- Will be released in three phases; only the first phase is out currently.
- Riley: A woman books a ride with your fleet to visit family.
- Nirvana: Some scientists need you to perform a cargo delivery.
- Laborer: A down-on-his-luck worker wants off-world.
Ship
Telos Frigate
(https://i.imgur.com/fLrsSGk.png)
Writing Samples
Dragons
A cheer goes up from the men, especially the drunk ones. Karengo starts to hand out death and accident waivers and to collect money for the expedition. Suddenly, his expression darkens and he cocks his head, listening to an earpiece. "Listen up!" he yells, "Seems my regular pilot got in the way of some disreputable folk! We need ourselves a ship and a captain to bring this lot to Jangala! Who's brave enough? Who else wants to make history?"
> "Captain Wisp, at your service. We leave at dawn!"
You wake up significantly after dawn with empty bottles and unconscious men strewn all over the ship's mess hall. Karengo peels himself off the floor and offers you a crooked smile, shielding his eyes from the light. "Alright, Wisp," he says, "let's do this."
Riley
On the way, she told you stories of her past, mostly of time shared with her father.
As a young teen, they spent summers riding horse mechs through the forest, looking for beehives to steal honey from; At age 19, she broke her ankle hoverboarding a restricted mountain peak. Her father rescued her, avoiding the police to hike up with a medical kit; She talks about his wild birthday gifts to her each year, always a different piece of clothing with embedded AI that was just beyond what was technically allowed by law.
As you watch, she shows how her shirt warms and constricts if it detects stress, mimicking a hug.
She doesn't mention it, but it's clear she is concerned that she'll arrive too late to say goodbye.
Nirvana
"Are you Captain Wisp, captain of the Kestrel?" asks one of the men, and when you nod in confirmation they all grin. "Allow me to introduce myself. I'm David Rengel, and these are my associates, Fiona Jeffrey and Mike Robbins. We are members of a scientific team in the employ of the Nirvana Stellar Engineering company, perhaps you have heard of it?"
Telos
At last, the corridor levels out and flares into a small amphitheater. Low, padded benches are arranged in a scattered circle. A blue crest hangs at the far end, with the word ‘TELOS’ embossed beneath. The room is minimally decorated, even accounting for the seismic devastation from the bombardment. Sheaves of paper, music stands and paintings of paradise worlds litter the cracked floor.
Splayed across the benches are a dozen desiccated bodies. Even in death, they are holding hands, as if in silent prayer.
Karengo sweeps past the scene to a door on the far side and steps through. "Here's what we came for!" he calls. Stepping back out, he hands you one of two capped syringes, the contents gray.
<paragraph redacted>
> "I'm gonna need to know a lot more."
> "Right after you."
> Wait until later
>> Inject yourself <<
You sink the plunger deep into your right leg. The gray liquid drains from the barrel and you feel a wave of cold spreading from the site. Karengo watches intently, uncharacteristically quiet, as you take a seat on a stair and wait.
You black out.
Quests & Starting Conditions (minor spoilers)
Spoiler
- Riley: Starts from a planet with pop 6 or greater.
- Karengo I - Dragons: Starts from a planet with pop 5 or greater.
- Karengo II - Depths: Starts from a planet with pop 5 or greater and 30 days after successfully completing Dragons.
- Karengo III - Telos: Starts from an Independent planet with pop 5 or greater and 30 days after successfully completing Depths.
- Nexerelin's Random Mode (Corvus Mode) is not supported for Telos and the quest will not show up.
- The bar prompt for this is "Delivery to Earth".
- Nirvana: Starts from an Independent planet with pop 4 or greater once you are at least level 8 (ie not a nobody).
- Laborer: Starts from a planet with pop 3 or greater and the Mining industry.
Bugs? Suggestions? Questions? Want me to talk about why you should be coding in Kotlin instead of Java until you can't take it any more? Ping me on Discord (https://fractalsoftworks.com/forum/index.php?topic=11488.0) @wispborne, or just leave a comment in this thread.
Changelog
https://github.com/wispborne/persean-chronicles/blob/HEAD/changelog.md
Known Issues
- After the Telos fight, your fleet may appear to fly sideways on the campaign layer. This is purely visual and fixes itself after a fight.
- After the Telos fight, all battle sizes are small. This is fixed by saving and restarting the game.
- If other mods add systems with hostile patrolling fleets, those systems may still be chosen as quest targets.
Current Priorities
- Finishing Phase 2 of the Telos questline, which includes a new ship, tons of dialog, a new ability, new music, and more.
- My modding time is balanced between Persean Chronicles, SMOL, MagicLib, the unofficial mod database, and working on a new comparison tool, so progress is slow (plus, I'm slow).
Other Mod Authors
Supports modSettings.json (https://starsector.fandom.com/wiki/Category:Modding#Cross-mod_integration_via_the_modSettings.json_file_and_data.2Fconfig.2FmodFiles_folder) for blacklisting systems.
Credits
Avanitia for proof-reading and providing an incredible amount of feedback.
Selkie for Telos ship sprites (creator of many boats).
Nia for Telos effects and sprites (master of effects).
SleepyFish for Telos sprites (transparency consultant).
Haplogynae (https://soundcloud.com/haplogynae) for Telos music.
MesoTroniK (https://soundcloud.com/mesotronik) for Depths music.
Inventor Raccoon for Secrets of the Frontier, which was a light in the darkness of 0.95a questbuilding.
Market condition code in Depths inspired by Tartiflette's Unknown Skies.
President Matt Damon for code help.
Many others on Discord for help, support, reports, and being a motivating community
And of course Fractal Softworks for this incredible game
"AI" Generated Content
- The NPC portraits were created using SeverianVoid's LoRa and the RPG v4 checkpoint (and then hand-edited by me, poorly).
- Illustrations (images shown during dialog) were created using MidJourney (and then hand-edited by me, poorly).
License
- Everything except music and images: GPLv3.
- Music & Images, including ships, excluding AI art: Do not use any part of without permission, do not redistribute without permission.
- AI content: use however you want, I don't own it.
- Music may be used with the permission of the artist, without needing my permission.
Oh, story mod! Fantastic!
Does this use the library you were working on for a backend?
It does! That can be found here: https://github.com/wispborne/questgiver although the readme is probably a little out of date.
Here's what the beginning of the Nirvana quest looks like, in code:
class Nirvana_Stage1_BarEvent : AutoBarEventDefinition<Nirvana_Stage1_BarEvent>(
questFacilitator = NirvanaQuest,
createInteractionPrompt = {
para { game.text["nirv_stg1_prompt"] }
},
onInteractionStarted = { },
textToStartInteraction = { game.text["nirv_stg1_startBarEvent"] },
pages = listOf(
Page(
id = 1,
onPageShown = {
para { game.text["nirv_stg1_pg1_para1"] }
para { game.text["nirv_stg1_pg1_para2"] }
para { game.text["nirv_stg1_pg1_para3"] }
},
options = listOf(
Option(
// accept
text = { game.text["nirv_stg1_pg1_opt1"] },
onOptionSelected = {
it.goToPage(2)
}
),
Option(
// decline
text = { game.text["nirv_stg1_pg1_opt2"] },
onOptionSelected = { navigator ->
navigator.close(doNotOfferAgain = false)
}
)
)
),
I had a lot of unique bugs caused by how complex I made this, hehe.
Hey i know that this question doesnt regard you mod, but how did you do that github download counter widget thing?
https://shields.io/category/downloads
(https://img.shields.io/github/downloads/wispborne/persean-chronicles/1.0.1/total?color=blue&logo=github) (https://github.com/wispborne/persean-chronicles)
(https://img.shields.io/github/downloads/wispborne/persean-chronicles/total?color=blue&logo=github&label=downloads%40total) (https://github.com/wispborne/persean-chronicles)
Code:
[url=https://github.com/wispborne/persean-chronicles][img]https://img.shields.io/github/downloads/wispborne/persean-chronicles/1.0.1/total?color=blue&logo=github[/img][/url]
[url=https://github.com/wispborne/persean-chronicles][img]https://img.shields.io/github/downloads/wispborne/persean-chronicles/total?color=blue&logo=github&label=downloads%40total[/img][/url]
You can also hit "Reply" to a post and it'll show you the "code" used to write the post :)
Decided to add this mod when I started a new 0.95a modded save, and I'm in love. So far I've encountered Karengo and Riley, and let me say... Awesome work!
I'll mark my thoughts on them as spoiler for good measure.
Spoiler
Karengo is quite the character. His adventures are really fun (and dangerous. Guy is an adrenaline junkie, I swear. Hah)
Riley's story was very touching, I went with the more empathetic route (going with her to see her father, holding her, etc.) and was pleasantly surprised by how wholesome the whole story was.
I noticed that she says she'll return to the big city, and that she'll find her way back at some point...does that mean we can meet her again somewhere?
I look forward to finding more of these quests. Thank you for making this mod! ;D
question: Spoiler
is the nirvana questline a one off thing? like drop this people and get easy 200k credits? just saying cause 60 cycles is pretty long
question: Spoiler
is the nirvana questline a one off thing? like drop this people and get easy 200k credits? just saying cause 60 cycles is pretty long
Spoiler
Yup. There mayyyyy be some extra dialog if you come back after 55 cycles, but definitely no credits/items/anything material. You can fly away after your delivery, job done. They are well funded!
I can confirm the Karengo and Riley content works fine in .95.1aRC6. Haven't gotten the other quests yet, but from reading the thread they sound less important, and also, like they might naturally take forever to trigger. (Red Planet took like 15 cycles to trigger for me in the new patch, cf.)
Thank you for confirming! And yeah, with how common bar events are now, it might take a while for the others to randomly show up.
Although the Depths riddles are very fun and I want more like that, I like the long term potential world-building impacts in the Riley storyline the most. It's just so personal and touching by comparison to vanilla; in a game where Crew is a commodity and the main plotline is certified weapons-grade High-Concept Sci-Fi Rigmarole, having some human emotion and natural-feeling backstory is like opening a window in an abattoir.
That is a large part of what I was going for, so that's great to hear. Makes the sector feel a bit more like it has people in it, not just Population.
Also, I wanted to ask, how does the Depths quest choose a target world? It happened to pick a Decivilized Subpopulation Terran world in literally the best system in the sector (tons of planets, nearly all the right market conditions represented), so the text made enough sense talking about the locals. Same system had a research station with a Biofactory Embryo. Free Port enabled. Part of me is wondering if the mod alters the system, or if it has criteria that helps it pick a really good one naturally?
No alteration, you just got lucky! All it does is look for specific planet types and prioritize decivved, then uncolonized planets.
Here's the actual code...it's somewhat readable? Maybe?
val DEPTHS_PLANET_TYPES = listOf(
"terran",
"terran-eccentric",
"water",
"US_water", // Unknown Skies
"US_waterB", // Unknown Skies
"US_continent" // Unknown Skies
)
game.sector.starSystemsAllowedForQuests // Avoid blacklisted systems
.filter { it.id != playersCurrentStarSystem?.id }
.filter { system -> system.solidPlanets.any { planet -> planet.typeId in DEPTHS_PLANET_TYPES } }
.prefer { it.distanceFromPlayerInHyperspace > minimumDistanceFromPlayerInLightYearsToPlaceDepthsPlanet }
.sortedBy { it.distanceFromCenterOfSector }
.flatMap { it.solidPlanets }
.prefer { it.faction.id == Factions.NEUTRAL } // Uncolonized planets
.filter { planet -> planet.typeId in DEPTHS_PLANET_TYPES }
.toList()
.run {
// Take all planets from the top half of the list,
// which is sorted by proximity to the center.
val possibles = this.take((this.size / 2).coerceAtLeast(1))
WeightedRandomPicker<PlanetAPI>().apply {
possibles.forEach { planet ->
when {
planet.market?.hasCondition(Conditions.DECIVILIZED) == true -> {
game.logger.i { "Adding decivved planet ${planet.fullName} in ${planet.starSystem.baseName} to Depths candidate list" }
add(planet, 3f)
}
planet.market?.size == 0 -> {
game.logger.i { "Adding uninhabited planet ${planet.fullName} in ${planet.starSystem.baseName} to Depths candidate list" }
add(planet, 2f)
}
else -> {
game.logger.i { "Adding planet ${planet.fullName} in ${planet.starSystem.baseName} to Depths candidate list" }
add(planet, 1f)
}
}
}
}
.pick()!!
}
Thank you! It's funny to me how the part I focus on the least - the colony drug modifier - is one of the most important things about the mod. Makes perfect sense, of course, as gameplay effects are always very important, whereas story/lore stuff is largely secondary.
Still working on the next questline. I can't promise it'll be the highest quality, or the most fun, or the most interesting, but it'll at least be the longest and most varied! And whatever else, the new ships are fun, I think. Unique super-ships with very high maneuverability and damage but paper hulls; your typical glass cannon. The visual effects are pretty, too, if I do say so myself.
Ship teaser:
Spoiler
(https://i.imgur.com/fLrsSGk.png)
crash after the Telos Distress Call Battle (the flashback one)...
772874 [Thread-3] ERROR com.fs.starfarer.combat.CombatMain - java.lang.NullPointerException
java.lang.NullPointerException
at exerelin.campaign.SectorManager.reportBattleFinished(SectorManager.java:289)
at com.fs.starfarer.campaign.CampaignEngine.reportBattleFinished(Unknown Source)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript.onTelosBattleEnded(Telos2BattleScript.kt:187)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript.advance(Telos2BattleScript.kt:161)
at com.fs.starfarer.title.Object.for$Oo.o00000(Unknown Source)
at com.fs.starfarer.combat.super.new.super(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advanceInner(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advance(Unknown Source)
at com.fs.starfarer.combat.CombatState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Persean Chronicles v3.0.5
https://github.com/wispborne/persean-chronicles/releases/download/3.0.5/Persean-Chronicles-3.0.5.zip
edit: Get this hotfix and replace the file in the jars folder to fix a crash after the Telos battle: https://cdn.discordapp.com/attachments/1117521396197769378/1125498892495093821/PerseanChronicles.jar
(I will release it properly when I have time)
Fixed
- Riley no longer pays you just for starting a new game (thanks to ganegrei).
- Possible crash after the Telos battle ends.
- Another crash after the Telos battle ends (if you did not take the <redacted>).
Added
- New boss dreadnaught (unobtainable, for now) in Telos quest, the Firebrand.
tip: Annoyed by having to install a bunch of bugfixes? Try out my SMOL mod manager for one-click updates ;)
https://fractalsoftworks.com/forum/index.php?topic=24348.0
Spoiler
(https://cdn.discordapp.com/attachments/1117521396197769378/1124134877881700482/1985.png)
looks like there's yet another post-telos combat crash. it seems to be the same crash reported by papasan. relevant logs:
844729 [Thread-3] INFO wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript - Telos battle ended. Did player win? false
844754 [Thread-3] INFO com.fs.starfarer.loading.LoadingUtils - Loading JSON from [DIRECTORY: C:\Program Files (x86)\Fractal Softworks\Starsector\starsector-core\..\mods\Nexerelin (data/config/exerelin/factionTraits.json)]
844758 [Thread-3] INFO exerelin.campaign.StatsTracker - Tracker tracking battle
846191 [Thread-3] ERROR com.fs.starfarer.combat.CombatMain - java.lang.NullPointerException
java.lang.NullPointerException
at progsmod.data.campaign.EngagementListener.reportBattleFinished(EngagementListener.java:62)
at com.fs.starfarer.campaign.CampaignEngine.reportBattleFinished(Unknown Source)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript.onTelosBattleEnded(Telos2BattleScript.kt:203)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript.advance(Telos2BattleScript.kt:172)
at com.fs.starfarer.title.Object.for$Oo.o00000(Unknown Source)
at com.fs.starfarer.combat.super.new.super(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advanceInner(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advance(Unknown Source)
at com.fs.starfarer.combat.CombatState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:750)
there's also an issue with ship loadouts, apparently, though it doesn't seem to be related to the crash.
568968 [Thread-3] WARN wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleCoordinator - Unable to refit null 36f43ae.
java.lang.NullPointerException
at wisp.questgiver.wispLib.ExtensionsKt.refit(Extensions.kt:451)
at wisp.questgiver.wispLib.ExtensionsKt.refit$default(Extensions.kt:419)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleCoordinator.createInitialEnemyFleet(Telos2BattleCoordinator.kt:181)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleCoordinator.startBattle(Telos2BattleCoordinator.kt:97)
at wisp.perseanchronicles.telos.pt2_dart.Telos2SecondLandingDialog$14$1$1.invoke(Telos2SecondLandingDialog.kt:129)
at wisp.perseanchronicles.telos.pt2_dart.Telos2SecondLandingDialog$14$1$1.invoke(Telos2SecondLandingDialog.kt:127)
at wisp.questgiver.v2.json.PagesFromJson$1$4$1$1.invoke(PagesFromJson.kt:118)
at wisp.questgiver.v2.json.PagesFromJson$1$4$1$1.invoke(PagesFromJson.kt:116)
at wisp.questgiver.v2.InteractionDialogLogic$PageNavigator.onOptionSelected(InteractionDialogLogic.kt:215)
at wisp.questgiver.v2.InteractionDialog.optionSelected(InteractionDialog.kt:55)
at com.fs.starfarer.ui.newui.classsuper$1.o00000(Unknown Source)
at com.fs.starfarer.ui.newui.OoOO.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.n.buttonPressed(Unknown Source)
at com.fs.starfarer.ui.I.Ò00000(Unknown Source)
at com.fs.starfarer.ui.I.processInput(Unknown Source)
at com.fs.starfarer.ui.W.super(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:750)
---
[Thread-3] WARN wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript - Unable to refit null 36f4167.
java.lang.NullPointerException
at wisp.questgiver.wispLib.ExtensionsKt.refit(Extensions.kt:451)
at wisp.questgiver.wispLib.ExtensionsKt.refit$default(Extensions.kt:419)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleCoordinator.createEugelFleetReinforcements(Telos2BattleCoordinator.kt:229)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleScript.<init>(Telos2BattleScript.kt:29)
at wisp.perseanchronicles.telos.pt2_dart.battle.Telos2BattleCoordinator.startBattle(Telos2BattleCoordinator.kt:112)
at wisp.perseanchronicles.telos.pt2_dart.Telos2SecondLandingDialog$14$1$1.invoke(Telos2SecondLandingDialog.kt:129)
at wisp.perseanchronicles.telos.pt2_dart.Telos2SecondLandingDialog$14$1$1.invoke(Telos2SecondLandingDialog.kt:127)
at wisp.questgiver.v2.json.PagesFromJson$1$4$1$1.invoke(PagesFromJson.kt:118)
at wisp.questgiver.v2.json.PagesFromJson$1$4$1$1.invoke(PagesFromJson.kt:116)
at wisp.questgiver.v2.InteractionDialogLogic$PageNavigator.onOptionSelected(InteractionDialogLogic.kt:215)
at wisp.questgiver.v2.InteractionDialog.optionSelected(InteractionDialog.kt:55)
at com.fs.starfarer.ui.newui.classsuper$1.o00000(Unknown Source)
at com.fs.starfarer.ui.newui.OoOO.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.n.buttonPressed(Unknown Source)
at com.fs.starfarer.ui.I.Ò00000(Unknown Source)
at com.fs.starfarer.ui.I.processInput(Unknown Source)
at com.fs.starfarer.ui.W.super(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:750)
there were over 60 of these refit errors, though i only grabbed the first ones that were discernably different
edit: additional note. there's a moment between defeating the initial fleet and eugel spawning in where it's possible to end combat early, though this just takes you back to the previous <relive combat> dialogue, where you can restart the combat as per usual. it doesn't crash the game if you do this, though. maybe eugel's related to the crash in some way?
telos quest was started during 3.0.6 using console commands, though i only started doing the quest after upgrading to 3.0.7
the 3.0.6 folder was deleted before extracting 3.0.7
nexerelin is enabled, random sector is not
Hey man, this mod has had a permanent spot in my modlist ever since you first released it, but I just recently had the chance to experience the beginning of the new Telos storyline and felt compelled to come here to let you know I've been blown away.
All the other older little quests have offered good writing and atmosphere (the depths quest "poem" was a bit silly maybe, but the writing is very aware of it), the only downside I could think of is they had little impact in the actual game, but as their primary focus was giving some more flavor to the setting there's very little to complain about. This first Telos chapter, though, wow: writing is very good, how the mission works Spoiler
with the flashback battle
is very ingenious and detailed, plus you even get a reward that matters this time. I'm very eager to see the next chapter(s), thank you so much.
BTW, right now I'm starting a new campaign, just encountered the Riley quest again and was wondering Spoiler
whether you would consider adding a resolution that actually lets Riley become an officer in our fleet. Perhaps if you give all the answers that already do give disposition increases with her and ask her and her core-ified father to come with in that last dialogue choice. She could have a custom officer skill to represent her father, or he could himself be an ai core officer too I guess. That would be much simpler and quicker than adding completely new quest appearances for them - as some had asked in the past - while still having the advantage of getting a little something that's impactful to carry along the whole playthrough to remember all that happened.
One of the things I feel are still missing in the game are officers that don't feel completely random but are actual npcs with a bit of personality and previously presented backstory. Only the UAF mod (that I can think of) has yet done something similar (a couple officers as a reward for a mission where they are given some backstory), I feel the Riley quest would very much fit this kind of scenario (even though her, as a character, isn't depicted as the "spacer" type: but one can learn).
Hey man, this mod has had a permanent spot in my modlist ever since you first released it, but I just recently had the chance to experience the beginning of the new Telos storyline and felt compelled to come here to let you know I've been blown away.
Thank you!
All the other older little quests have offered good writing and atmosphere (the depths quest "poem" was a bit silly maybe, but the writing is very aware of it), the only downside I could think of is they had little impact in the actual game, but as their primary focus was giving some more flavor to the setting there's very little to complain about. This first Telos chapter, though, wow: writing is very good, how the mission works Spoiler
with the flashback battle
is very ingenious and detailed, plus you even get a reward that matters this time. I'm very eager to see the next chapter(s), thank you so much.
Again, thank you - all feedback I wholly agree with. Poor rewards were always the number one "issue" with Pers Chron imo - the whole mod is a bit of a love letter to EV Nova, and the first two Karengo quests were written for Endless Sky, which is why all you got as a reward was credits (with the exception of the second Karengo quest, where I tried to improve things slightly with that planetary condition).
As you noted, I tried to take things up a few notches with the Telos quests, taking cues from SotF and many other great mods that have added campaign content in the last few years. When I started Pers Chron, vanilla barely had any one-off story quests, but Alex and David have really focused on that in the last couple of patches.
The Telos stuff takes way longer, but I've gotten a lot of help with it (music by Haplo, sprites by Selkie, Sleepfish, and Nia, plus feedback from others) - and I'm bouncing between quite a few different projects at this point.
BTW, right now I'm starting a new campaign, just encountered the Riley quest again and was wondering Spoiler
whether you would consider adding a resolution that actually lets Riley become an officer in our fleet. Perhaps if you give all the answers that already do give disposition increases with her and ask her and her core-ified father to come with in that last dialogue choice. She could have a custom officer skill to represent her father, or he could himself be an ai core officer too I guess. That would be much simpler and quicker than adding completely new quest appearances for them - as some had asked in the past - while still having the advantage of getting a little something that's impactful to carry along the whole playthrough to remember all that happened.
One of the things I feel are still missing in the game are officers that don't feel completely random but are actual npcs with a bit of personality and previously presented backstory. Only the UAF mod (that I can think of) has yet done something similar (a couple officers as a reward for a mission where they are given some backstory), I feel the Riley quest would very much fit this kind of scenario (even though her, as a character, isn't depicted as the "spacer" type: but one can learn).
Spoiler
It has come up before, yeah, and my current thought is that it'd just be strange. Why would you give a musician command of one of your ships and the crew on board? Or her AI-ified father, who is a career AI researcher? I could pull the old "when he was young he had his own ship" but...I dunno, it seems out of place. Unless it's simply nepotism, and they're officers with no skills at all. As you said, they could learn but still - it wouldn't make much sense except for Game Logic.
Adding Riley as a Contact would be a neat bonus, and being able to follow up on things if you visit the planet again (or have Stelnet).
But you, at best, are a kind, expensive taxi driver to Riley; someone to talk to for a few weeks when she needed someone to talk to, someone who provided the emotional support that most decent people would provide, and then gone. She may stay on the planet you left her at, or she may eventually book a ride on a cheaper, slower passenger ship back to her own planet where her life - her house/apartment, friends, job, maybe lover(s) - are. For sure, you were an integral part of the most surprising and emotional part of her life, but home is home, and it's not in space, not without good reason.
Karengo, on the other hand, is probably going to be an officer. He's made for the uncertainties and opportunities of space; a showman, a narcissist, and a bit of a daredevil. Plus, he'll be able to fly those fancy new ships you get...
Karengo, on the other hand, is probably going to be an officer. He's made for the uncertainties and opportunities of space; a showman, a narcissist, and a bit of a daredevil. Plus, he'll be able to fly those fancy new ships you get...
Yeah, in my current campaign he already sort of is, heh. I edited the save to give one of my officers his portrait, and now he pilots the Telos frigate ;) . Actually, I was planning Spoiler
to be a cheater and give him the destroyer or cruiser that already are in the game files waiting for the next chapters, but I've noticed they are still a bit buggy, they sometimes start spinning around with no way of stopping, so that will have to wait :P Their spritework is already pretty awesome though.
As for Riley, I understand your point, and I agree storywise it's much more consistent the way it is. I'm happy to see that might be what you are planning for Karengo though, as, like I mentioned, the reason why I suggested it for Riley and her father too in the first place is indeed the lack of any other alternative that has some personality and uniqueness. Some mods already offer contacts with quite a bit of depth, backstory and a bunch of dialogues to read through (not necessarily all of them a good read, perhaps, but at the very least they try and it's better than nothing), vanilla itself does a pretty decent job for a couple of main story related ones, but officers have been widely neglected as far as I know. Which is a shame, as you actually see their random faces and interact with them constantly, much more often than with contacts, as they have a very significant role in the gameplay loop.
I find quite surprising the classic rpg idea of questing around to recruit "followers" hasn't really caught on in Starsector, neither vanilla nor modded. I guess the main turnoff is the fact that once a character is an officer then that's it, they just become an item that gives bonuses to ships, the game really doesn't allow for further interactions with them other than mechanical ones (assigning and leveling according to one ship or the other), so all the story content, dialogues and whatnot would have to happen *before* that, which is kinda constraining. Plus, it could be said that the role of "followers" is kinda taken by the ships themselves, I suppose. Still, everytime I finish the main storyline and then keep sandboxing with my team of random officers with the same face as the next four station administrators, I kinda regret the plot didn't let me, for instance, offer Scylla and Elissa to actually come with my fleet as lieutenants (even if as puny lvl 1 officers with perhaps just some knowledge of sort of vaguely fitting skills like field modulation), while showing all together the finger to Baird.
Oh well, I digress: in any case, thanks again for your work. As you can tell, this is a "little" mod that tends to stick in the mind of the players. Which tells everything there is to say about how well it's written.
Bug report.
It's been many cycles since I did the Telos quest in my current run, but I just recently noticed something pretty strange going on with an independent station (in this case the Kassadar one from Tahlan's Shipworks; as such, I'm not sure whether there might be some mod compatibility thing going on, or if it could have happened with any other vanilla independent station: my guts tell me the latter, as that colony isn't particularly special except for it having a custom submarket for modded ships, but it's just a feeling). The station seems to eternally be engaged in battle against an invisible fleet: at least on the sector view, as when you look at your military options in the colony menu, you can see the fleet is tagged as Luddic Church and definitely looks like your Telos flashback mission one, with that unique capital and the horde of Hegemony ships.
If you get there with the transponder off the menu allows you to "aid the attacking forces" (which should also trigger if you are hostile to the independents), but when you go into the actual battle there's no other ships, only yours. If you are instead recognized, you can only participate in the battle as a defender if you are hostile to the Luddic Church (as per usual): however, even if you destroy the fleet - which in this case does indeed spawn in the battlefield - the station will remain in that "engaged in battle" mode as before, only against an empty "unknown attack fleet".
I even tried destroying the orbital station with a kill console command and wait for it to regenerate after the repairs, but as soon as it respawned the engaged in battle situation kicked back in.
Only other experiment I did was trying to invade the colony (with Nex) to see if the issue would persist after the faction change: and unfortunately the permanent battle engagement does come back as soon as the station is repaired even after the takeover. Only, this time you can't even see any "military option" in the colony menu, nor you can interact with the supposedly ongoing battle in any way. However, at that point you can remove the orbital station alltogether from the colony management menu, and when you build a new one from scratch, finally the problem seems not to come back.
Now, as aforementioned, my game has been going perfectly fine for many cycles since I first noticed the issue and even much before that since when it triggered (I'd think during the Telos quest, for obvious reasons, although I have no proof of that), so nothing too bad is probably going on and the bug is relatively harmless. Even if it doesn't cause leaks, crashes or similar severe issues though, a station permanently in such an engaged mode might mess with certain things such as raids, Nex invasions logic et cetera: it being tied to an independent colony - at least in my case - definitely lowers the chances of such events overlapping (IE: no faction tries to invade independent planets in Nex), but I can't be sure the same would apply under different conditions.
I guess Kassadar could have been the colony where I got the Telos mission (it's a size 5+ independent market as required by the mission to trigger, and one I visit very often as I play with Nia's ships a lot), but it was relatively early game, it's been a couple weeks, so I definitely can't confirm that as I don't remember, don't even have a save from back then anymore. I would imagine perhaps you had to anchor the flashback mission fleet to something for it to work, and the code fails at removing it afterwards? Just speculation, of course, you obviously know much better what might be going on under the hood.
Spoiler
(https://i.ibb.co/1M9FCH2/persean01.jpg) (https://ibb.co/1M9FCH2) (https://i.ibb.co/LndbdZs/persean02.jpg) (https://ibb.co/LndbdZs) (https://i.ibb.co/3s9G9SF/persean03.jpg) (https://ibb.co/3s9G9SF)
Well, in my game I might have just solved it with the console (removeindustry - addindustry to the Kassadar star fortress: just like manually dismantling and rebuilding it after an invasion, the phantom fleet goes away). So all looks fine now (not that anything was really problematic before either, as mentioned, but still, better safe than sorry).
Should it help you for troubleshooting, here in the spoiler tag my current modlist, in case it could be something there what unintentionally calls for that fleet. It's actually quite a bit more lightweight than usual, as in this run I removed several faction/content mods I used to play with simply because I was getting annoyed at the lack of a real sorting function for weapons, which becomes a nightmare in the late game if you have too much modded content in it.
Spoiler
{"enabledMods": [
"$$$_trailermoments",
"pantera_ANewLevel40",
"adjustable_skill_thresholds",
"AttunedDriveField",
"combatactivators",
"lw_console",
"customizablestarsystems",
"DetailedCombatResults",
"diableavionics",
"edshipyard",
"fleet_journal",
"GrandColonies",
"illustrated_entities",
"IndEvo",
"interestingportraitspack",
"Imperium",
"timid_xiv",
"lw_lazylib",
"lockedAndLoaded",
"lunalib",
"MagicLib",
"Mayasuran Navy",
"more_ship_names",
"wisp_NeutrinoDetectorMkII",
"nexerelin",
"objects_analysis",
"officerExtension",
"wisp_perseanchronicles",
"planet_search",
"portrait_changer",
"assortment_of_things",
"Recovery_Shuttles_Buff",
"roider",
"Rugged_Construction_buff",
"scalartech",
"SEEKER",
"bruh_ship_browser",
"swp",
"Solar_Shielding_Buff",
"stelnet",
"scf",
"tahlan",
"Terraforming & Station Construction",
"timid_tmi",
"underworld",
"US",
"whichmod",
"shaderLib",
"ShipCatalogVariantEditor"
]}
I am, absolutely, speechless. I (finally) got Riley's quest and just..I did not expect it to have the "interaction" that it had. (Non-story spoiling spoilers v) Spoiler
The random "conversation" popups mid-flight on your way to her destination, all the different choices once you arrive there with somewhat completely different outcomes..
This is that bit of story-telling I'm missing in the main game, that just, adds something "human" to the game, characters with a deeper meaning that isn't
all about destroying one another or something but shows a human side of people in the sector that feels missing.
Thank you for making this. It may be a "small" thing, but to me at least had a surprisingly big impact as I was minding my business doing the "usual"
Starsector stuff and suddenly came across something so, different.
If you may allow me, I'd like to use your mod as inspiration and/or base/template to make more of such stories as its something I've wanted to mod into
the game for the longest time. Of course with all credits due cause this mod deserves every bit of attention it gets <3
tried this on .97, the Riley quest crashes...
656720 [Thread-3] ERROR com.fs.starfarer.combat.CombatMain - java.lang.NoSuchMethodError: com.fs.starfarer.api.util.Misc.adjustRep(Lcom/fs/starfarer/api/characters/PersonAPI;FLcom/fs/starfarer/api/campaign/TextPanelAPI;)V
java.lang.NoSuchMethodError: com.fs.starfarer.api.util.Misc.adjustRep(Lcom/fs/starfarer/api/characters/PersonAPI;FLcom/fs/starfarer/api/campaign/TextPanelAPI;)V
at wisp.perseanchronicles.riley.Riley_Stage4_Dialog$1.invoke(Riley_Stage4_Dialog.kt:19)
at wisp.perseanchronicles.riley.Riley_Stage4_Dialog$1.invoke(Riley_Stage4_Dialog.kt:17)
at wisp.questgiver.v2.InteractionDialog.init(InteractionDialog.kt:27)
at com.fs.starfarer.ui.newui.classsuper.void.void(Unknown Source)
at com.fs.starfarer.ui.newui.classsuper.<init>(Unknown Source)
at com.fs.starfarer.ui.newui.classsuper.<init>(Unknown Source)
at com.fs.starfarer.campaign.CampaignState.startEncounterInvolvingPlayerFleet(Unknown Source)
at com.fs.starfarer.campaign.BaseLocation.advance(Unknown Source)
at com.fs.starfarer.campaign.StarSystem.advance(Unknown Source)
at com.fs.starfarer.campaign.CampaignEngine.advance(Unknown Source)
at com.fs.starfarer.campaign.CampaignState.advance(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.super(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:750)