It could be interesting if sometimes you could find other faction contacts on your worlds - a Tri-Tachyon trader who stays on your world to manage trade routes, or a Hegemony diplomat/military attaché, for example. Holding out for such a contact would be inefficient for a player who wants to improve their standing with a specific faction, but a lucky player could take advantage of those contacts to streamline their core world visits. Those contacts could also have a lower maximum importance, too - after all, if they were really that important why have they been sent to someone else's planet instead of staying at their organization's HQ?
Hmm, yeah - like I mentioned earlier, the "how you get contacts" bit isn't exactly an area that's seen a lot of focus. It doesn't *need* is, specifically - I think the system works fine if you just get contacts without much trouble - but those sorts of things could all be interesting, for sure!
This is awesome! Pumped to see creating quests become more accessible.
It was fun/gratifying to see the specific shift from an imperative to a declarative system for the quests; I wrote my own wrapper to make quests declarative already, although yours is, of course, far more accessible and comprehensive.
Spoiler
https://github.com/davidwhitman/Gates-Awakened/blob/master/src/main/kotlin/org/wisp/gatesawakened/midgame/MidgameQuestBeginning.ktclass MidgameQuestBeginning : BarEventDefinition<MidgameQuestBeginning>(
shouldShowEvent = { Midgame.shouldOfferQuest(it) },
interactionPrompt = {
addPara {
"You spot a familiar tattoo; a grey circle around the eye of a $manOrWoman" +
" in the corner of the bar, glowing a faint white. " +
"You realize that it looks a bit like a ${mark("Gate")}."
}
},
textToStartInteraction = {
"Move in for a closer look at the tattooed $manOrWoman's tripad screen."
},
onInteractionStarted = {
planetWithCache = Midgame.planetWithCache!! // Must exist for quest to be offered
}
.......
Cool! Yeah, going more declarative seems like very much the way to go. Finding the right balance is tricky, though, but I'm happy with where it's landed. And, yeah, what you've posted looks pretty solid, too. Same general idea, looks like - using a base class with some methods/data members to facilitate a declarative approach.
I'm assuming you're using a language that works on top of a jvm and compiles into Java bytecode? Not identifying offhand what it is - clojure, maybe?
Note: Below, I critique some example code from the blog post without full context of the rest of the API. What's more, this is *your* codebase and your project - please feel free to ignore my critique; I have my own baby codebase, I understand and won't be offended.
I do have a question; how much will the order in which you call methods in this new, declarative API matter?
That is, I presume that you must first call beginTrigger(...), then define triggers, and then endTrigger(). Is that the case, and if so, why not add a class to define a trigger so that the order that quest bits are declared doesn't matter (like a Builder pattern)?
eg
beginWithTrigger(
new HyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS, new TriggerConditions() {
triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES);
triggerSetStandardAggroPirateFlags();
triggerFleetAllowLongPursuit();
triggerPickLocationAtInSystemJumpPoint(planet.getStarSystem());
triggerSpawnFleetAtPickedLocation(“$gada_pirate”, null);
triggerOrderFleetPatrol(planet);
}
);
Hmm. Honestly, I'm not sure that syntax is an improvement over having an endTrigger() call. It's an extra line and a bunch of extra syntax that imo reduces clarity - not that there's a *huge* difference.
But I think maybe we're talking about slightly different things. In my approach, you call beginTrigger() and endTrigger() to define a trigger; the various triggerXXXX methods are "what you do within the trigger", not separate triggers, right. The order of those calls may or may not matter depending on what they are, specifically.
Actually - I don't understand what you mean by "so that the order that quest bits are declared [in] doesn't matter". So I think I might just be missing something of what you mean.
Something to steal from that system if you feel so inclined: after you reach a certain trust status with the contact, you can "call" them without physically being in front of them. So in this system, perhaps after level 4(?), you get access to a direct (encrypted!) line with the contact so that you can communicate directly. Perhaps you still have to be near a Comm Relay but you get the idea.
Hmm, yeah. I've been thinking about something like this! The idea of unlocking it at a certain rep level is a very good one, though.
The question is how to "sell" a real-time conversation over hypercomm. It's all pretty vague about whether that's actually possible or not... and whatever solution there needs to be able to utilize the same exact interaction text; otherwise it's way too much work to be viable.
Perhaps you can't say too much yet but will the rewards of these missions be non-standard? Credits, ships, and weapons are fine at first but by end game you're swimming in them. I presume blueprints, AI cores, Nanoforges, etc. will also be offered eventually, as well. But what about useful Intel like a completely surveyed system (with a high-value planet) or the locations of rare derelicts (like the Legion XIV)? I can think of other things more exotic but toward mid-game, I know that rewards that save me time or reduce the tedium factor are precious.
Most of it is standard. Anything that ends up being a *common* reward from these kinds of missions would be standard by definition, though...
But, yeah, I have some TODO items specifically regarding special items and blueprints - though that'd have to be more rare, or those items become "standard" as well. Story missions, on the other hand, are more likely to give you things that are entirely non-standard, because those missions are one-offs, as well.
Finally, and I don't know how much espionage you're planning, I think it would be really cool if one contact put a hit out on another existing contact of yours (I could imagine Underworld contacts doing this!) Maybe the (lucrative) reward is worth it, maybe it isn't...but it adds a level of choice.
Hah! I actually had a TODO item for exactly this being a "complication" for an assassination mission. Not sure I want to go ahead with it, though; it's perhaps a bit too dark for my taste.
2. Hope if we're going to give incentives to player colonies to fill orders that we've had some tweaks to the late game economy so that isn't an automatic declaration of galactic war like it is now.
I've got a TODO item to look at this, somewhere...
3. I love the changes. As always i enjoy seeing more player decision and depth added. I'm sure it's going to come with some tweaking but the concept is great, and I'm hoping plays into other systems as well (black market cough cough).
Yeah, we'll see where it ends up. A lot of potential avenues for expansion here!
The real important revelation in the blog post is that titanium teeth are a thing in the Sector wait, a "Coronal Hypershunt"??
Ha!
Oh, nice, we can draw GUI bars in a TooltipMakerAPI now
You can add relationship bars and importance bars, but I'm afraid the code is pretty specific and it's not "general purpose bar".
But hey, on the bright side - TooltipMakerAPI now supports adding tooltips to the UI elements in it, via .addTooltipToPrevious(TooltipCreator creator).
Future scenarios I'm having fun imagining:
- Handmade named characters as special contacts, perhaps even the faction leaders themselves. "I get jobs from the Lion of Sindria himself!"
- [REDACTED] contact when
Those sound like fun indeed. And would be pretty easy to do. Well, easy on the technical side; the real effort with these kinds of things is the actual mission content.
Is this eventually going to tie in with the relationships you build up with random people across the sector (ie. station staff, fleet commanders, etc)? At the moment that is a very much unfinished and placeholder system which I always thought was going to be replaced eventually. Maybe that's in the plans for another update?
To the extent that some of these people can become contacts, yes. E.G. when it's generating a military mission at a bar, it'll look for military-type people already in existence at the market and only create a new one if there isn't one already. So you might for example hand in a bunch of AI cores and (IIRC?) raise the rep with that person and then run into them at a bar and have a much higher starting relationship if they become a "contact".
This is a little off topic but how's the balancing going so far for story points, by the way? I imagine that since the last blog post about them there has been a lot of playtesting, is the rate in which we acquire them unchanged?
Not as much as you'd think; it doesn't make too much sense to playtest the campaign until all of these things are in. I did do a bunch of combat testing when tuning the high-level "special" bounties - since the balance is different now, with less capital ship heavy fleets, and the player skills being different, and so on. But as far as campaign playtesting, there hasn't really been any.
(Actually, that resulted in some combat changes I'm very excited about that make objectives relevant in an "actually fun" way...)
What about a fourth type of contact, Scientific, whose interests revolve around surveys, scannings and Domain-era artifacts of various types?
Fun fact: there's a (currently unused) "Science" contact tag. So - maybe? The amount of content that can be added here is literally endless. The corollary to that is only a small percentage of what's actually possible can possibly actually be in the game.