Fractal Softworks Forum

Please login or register.

Login with username, password and session length
Advanced search  

News:

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

Pages: 1 ... 3 4 [5] 6 7 8

Author Topic: Personal Contacts  (Read 27223 times)

Alex

  • Administrator
  • Admiral
  • *****
  • Posts: 23988
    • View Profile
Re: Personal Contacts
« Reply #60 on: August 14, 2020, 01:55:31 PM »

It's Kotlin, a language by JetBrains. You assume correctly; it compiles to java bytecode. It's actually an official language for developing Android apps, quite mature and stable.

Ah, cool - thanks for explaining!

Spoiler
I hear your point about clarity and that may be enough of an argument on its own, but I'll explain what I meant.

A method might end up looking something like this, right?

Code
connectWithGlobalFlag(Stage.GO_TO_RUINS, Stage.GET_IN_COMMS_RANGE, “$gada_gotData”);
connectWithInRangeOfCommRelay(Stage.GET_IN_COMMS_RANGE, Stage.COMPLETED);
beginWithinHyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS);
triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES);
triggerOrderFleetPatrol(planet);
endTrigger();
setTimeLimit(Stage.FAILED, MISSION_DAYS);

But it could also look like this, if you are in the mindset of "I just need to declare all of the things for this quest":

Code
connectWithGlobalFlag(Stage.GO_TO_RUINS, Stage.GET_IN_COMMS_RANGE, “$gada_gotData”);
triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES);
beginWithinHyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS);
triggerOrderFleetPatrol(planet);
connectWithInRangeOfCommRelay(Stage.GET_IN_COMMS_RANGE, Stage.COMPLETED);
setTimeLimit(Stage.FAILED, MISSION_DAYS);
endTrigger();

The lines are the same, but I reordered them. Will this fail, due to having triggerCreateFleet(...) before beginWithinHyperspaceRangeTrigger(...)?

In the example I provided, the Kotlin one, you could swap shouldShowEvent and interactionEvent and it wouldn't matter; the point is declaring them, rather the order in which they are declared.

Another benefit of passing a Trigger object to an addTrigger method is that the trigger-specific methods could be scoped to the Trigger object, rather than available anywhere in the quest definition.

A builder is another possibility;
Code
addTrigger(new HyperspaceRangeTriggerBuilder(...)
    .triggerCreateFleet(...,
        new FleetCommandBuilder()
        .orderFleetToPatrol(planet)
    )   
    .triggerCreateFleet(differentFleetParams,
        new FleetCommandBuilder()
        .orderFleetToPatrol(aDifferentPlanet)
    )
    .build()
)

This syntax also allows you to create two fleets with separate order chains (call triggerCreateFleet a second time) from the same trigger event, which I'm not sure how you'd do with the code in the blog post.

Anyway, a good deal of this is personal preference as well. Take what makes sense to you.
[close]

Gotcha. I think we're looking at this differently; the requirement that things can be declared in *any* order I don't think is workable for this. For example, you might want to find a planet, then order a fleet to patrol it, etc. Or, like, you might have several different triggers and mixing up their contents is... not a thing you can do. Each of the individual tasks would be done in a declarative-ish fashion, but the ordering very much matters. This isn't a full-on declarative model, right. It's just being that in places where it's painful to do things in a more imperative way.

The way you're doing things - I think it's (at least, to the extent of my understanding) fine! But I also think that it *definitely* requires a much higher degree of coding proficiency to do. All the extra syntax, the anonymous classes that get created, the method calls from those classes, constructor calls with parameters, etc. And I really wanted to have something that I didn't have to think about too hard when either coming back to it after a while, copy/pasting some baseline, or just switching back and forth between that and working on text or some such.

(Edit: I should say, again, thank you for explaining what you meant! I appreciate you taking the time. It sounds to me like we're doing slightly different things or perhaps with slightly different goals, or some such.)

You mentioned that, if a contact’s system gets decivilized, the contact moves to another system and lose a point of importance. Maybe if the contact gets pushed around to 0 importance, instead of fading away, they ask to join you as an officer? Then you’re not missing out, and it might be a neat narrative tie-in.

Yeah, that could be quite fun! Hmm... probably a too-unlikely event for it to come up very often, though, especially at a point where you're not yet maxed on officers.
« Last Edit: August 14, 2020, 01:59:26 PM by Alex »
Logged

SCC

  • Admiral
  • *****
  • Posts: 4112
    • View Profile
Re: Personal Contacts
« Reply #61 on: August 14, 2020, 02:04:19 PM »

I mean, there's a time-honored tradition of playing both sides against each other, so I feel like it only requires a bit of imagination to make it "make sense"! That said, all of this is to me in the category of "you could also use contacts to do <thing>". Which, sure! And it sounds like it could be cool! But the set of things like this is endless, and there are only so many ways I can say that this particular way of applying them didn't happen, and may or may not happen at some point in the future. Like, this is more in the category of a suggestion for another thing to do, and less a critique (which "missed opportunity" kind of implies), if that makes sense.
Then you can take it as a signal that players want commitment to a faction be, well, a commitment, one way or another.

You mentioned that, if a contact’s system gets decivilized, the contact moves to another system and lose a point of importance. Maybe if the contact gets pushed around to 0 importance, instead of fading away, they ask to join you as an officer? Then you’re not missing out, and it might be a neat narrative tie-in.

Yeah, that could be quite fun! Hmm... probably a too-unlikely event for it to come up very often, though, especially at a point where you're not yet maxed on officers.
In that situation, that contact would be a free mercenary, temporary officer, until the contact decides to settle elsewhere (as a contact still, or just fading into obscurity) and leaves your "employ". Or you sack 'em.
Yeah, this is really specific situation overall, especially if the risk of decivilisation has changed in the dev version...

Wispborne

  • Captain
  • ****
  • Posts: 400
  • Discord: wispborne
    • View Profile
Re: Personal Contacts
« Reply #62 on: August 14, 2020, 02:14:16 PM »

It's Kotlin, a language by JetBrains. You assume correctly; it compiles to java bytecode. It's actually an official language for developing Android apps, quite mature and stable.

Ah, cool - thanks for explaining!

Spoiler
I hear your point about clarity and that may be enough of an argument on its own, but I'll explain what I meant.

A method might end up looking something like this, right?

Code
connectWithGlobalFlag(Stage.GO_TO_RUINS, Stage.GET_IN_COMMS_RANGE, “$gada_gotData”);
connectWithInRangeOfCommRelay(Stage.GET_IN_COMMS_RANGE, Stage.COMPLETED);
beginWithinHyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS);
triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES);
triggerOrderFleetPatrol(planet);
endTrigger();
setTimeLimit(Stage.FAILED, MISSION_DAYS);

But it could also look like this, if you are in the mindset of "I just need to declare all of the things for this quest":

Code
connectWithGlobalFlag(Stage.GO_TO_RUINS, Stage.GET_IN_COMMS_RANGE, “$gada_gotData”);
triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES);
beginWithinHyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS);
triggerOrderFleetPatrol(planet);
connectWithInRangeOfCommRelay(Stage.GET_IN_COMMS_RANGE, Stage.COMPLETED);
setTimeLimit(Stage.FAILED, MISSION_DAYS);
endTrigger();

The lines are the same, but I reordered them. Will this fail, due to having triggerCreateFleet(...) before beginWithinHyperspaceRangeTrigger(...)?

In the example I provided, the Kotlin one, you could swap shouldShowEvent and interactionEvent and it wouldn't matter; the point is declaring them, rather the order in which they are declared.

Another benefit of passing a Trigger object to an addTrigger method is that the trigger-specific methods could be scoped to the Trigger object, rather than available anywhere in the quest definition.

A builder is another possibility;
Code
addTrigger(new HyperspaceRangeTriggerBuilder(...)
    .triggerCreateFleet(...,
        new FleetCommandBuilder()
        .orderFleetToPatrol(planet)
    )   
    .triggerCreateFleet(differentFleetParams,
        new FleetCommandBuilder()
        .orderFleetToPatrol(aDifferentPlanet)
    )
    .build()
)

This syntax also allows you to create two fleets with separate order chains (call triggerCreateFleet a second time) from the same trigger event, which I'm not sure how you'd do with the code in the blog post.

Anyway, a good deal of this is personal preference as well. Take what makes sense to you.
[close]

Gotcha. I think we're looking at this differently; the requirement that things can be declared in *any* order I don't think is workable for this. For example, you might want to find a planet, then order a fleet to patrol it, etc. Or, like, you might have several different triggers and mixing up their contents is... not a thing you can do. Each of the individual tasks would be done in a declarative-ish fashion, but the ordering very much matters. This isn't a full-on declarative model, right. It's just being that in places where it's painful to do things in a more imperative way.

The way you're doing things - I think it's (at least, to the extent of my understanding) fine! But I also think that it *definitely* requires a much higher degree of coding proficiency to do. All the extra syntax, the anonymous classes that get created, the method calls from those classes, constructor calls with parameters, etc. And I really wanted to have something that I didn't have to think about too hard when either coming back to it after a while, copy/pasting some baseline, or just switching back and forth between that and working on text or some such.

(Edit: I should say, again, thank you for explaining what you meant! I appreciate you taking the time. It sounds to me like we're doing slightly different things or perhaps with slightly different goals, or some such.)

Thanks for taking the time to listen! What you said makes a lot of sense. I'm used to a very different type of coding environment and different use cases for said code.

Again, I'm looking forward to seeing the final update. One of my biggest complaints with writing quests today is that I needed to read and understand most of the code in your superclasses before I could properly implement the subclass, and it looks like that's being completed addressed. Great job.
Logged
Mod: Persean Chronicles | Mod Manager: SMOL | Tool: VRAM Estimator | Tool: Forum+Discord Mod Database | If I'm inactive for 3 months, anyone can use any of my work for anything (except selling it or its derivatives).

pairedeciseaux

  • Captain
  • ****
  • Posts: 340
    • View Profile
Re: Personal Contacts
« Reply #63 on: August 14, 2020, 03:36:54 PM »

Part of what is exciting about all of this - at least to me - is that it makes this piece of the content pipeline a lot easier for me to use efficiently. More content made faster = game done faster!

Getting a productivity boost thanks to improved framework and/or tooling is always welcome. Looking forward to play the new missions/stories both you and Alex will deliver in the next release!

Logged

Alex

  • Administrator
  • Admiral
  • *****
  • Posts: 23988
    • View Profile
Re: Personal Contacts
« Reply #64 on: August 14, 2020, 03:44:07 PM »

Then you can take it as a signal that players want commitment to a faction be, well, a commitment, one way or another.

Fair enough!


Thanks for taking the time to listen! What you said makes a lot of sense. I'm used to a very different type of coding environment and different use cases for said code.

Again, I'm looking forward to seeing the final update. One of my biggest complaints with writing quests today is that I needed to read and understand most of the code in your superclasses before I could properly implement the subclass, and it looks like that's being completed addressed. Great job.

Well, you might still need to do some of that, to figure out what methods are actually there! But hopefully there would be an abundance of samples to copy/paste from (with all the new missions), and perhaps more importantly, you wouldn't need to worry about the implementation details but more just what's there. Which I guess is what you're saying!
Logged

SafariJohn

  • Admiral
  • *****
  • Posts: 3010
    • View Profile
Re: Personal Contacts
« Reply #65 on: August 14, 2020, 06:00:42 PM »

There are other places where such a non-code approach could be good: for example star system definition (unless I'm mistaken, those require Java code).

I am a programmer and I hate doing star systems. I have to do several for one of my mods right now and my productivity is low low low. Even a really basic GUI tool to lay out a system and generate the code for it would be a huge help.
Logged

errorgance

  • Ensign
  • *
  • Posts: 26
    • View Profile
Re: Personal Contacts
« Reply #66 on: August 14, 2020, 07:35:01 PM »

I like the idea of there being more to hyperspace transmissions and there being something to limit transmissions to make them more infrequent, perhaps make them lore wise semi-secure, say the signal is broadcast in all directions for all to hear,  sure you can encrypt your transmission, but someone with a high enough level AI core (or enough of them!) can de-crypt your message, eventually.
It's all about the amount of effort someones willing to dedicate to you. So say If a faction really hates YOU you can expect the occasional fleet to intercept/ambush/trail you while on missions near their factions space. Having a gamma or beta level AI core encryption will help to dissuade low and mid level attempts to de-crypt your signals. of course alpha levels of High level encryption/decryption are very much indeed yes highly illegal but very effective at encrypting signals, to the point where attempts will sometimes de-crypt into insulting messages instead of the original. Sufficient AI level of encryption may be a requisite for some paranoid contacts to accept calls.

I like the idea of intergalactic hyperspace bandwidth being limited/crowded and have associated costs, after all, Bandwidth isn't free, there should be a cost to making calls, think calling collect, both ways, each party is charged by their local relay holder. thus a call had better be important and if they don't know you, they wont take the call, so there's no point in calling people out of the blue.
Having a sufficiently high/low rep with a faction could incur increase/decrease call costs, or being outright banned from use of their relays if low enough, (unless you install a sniffer) free calls should be a perk for taking a commission.

also, I'd like to suggest something other than the proximity to the relay determining if you can use them, as this could be odd in situations when inhabited planets are far away enough they shouldn't be able to use their relay.

how about make "live" calls impossible at high relative velocities/speed? you could be calling from anywhere in system, but your fleet must be traveling at a sufficiently low speed (and not in blackout) in order to have a live conversation.
max live comms speed could also be improved by keeping say an AI core around to help compensate for higher speeds, Gama's will compensate your connection a little, beta's more, and alpha will just impersonate you, rather than compensate at even higher speeds, though your not sure why your contacts sometimes seem a bit amused at your appearance.


also, got an idea for an outlaw mission idea, hack a relay so calls are automatically received, then call this person...
...repeatedly.
give plenty of funny dialog options.
« Last Edit: August 14, 2020, 07:39:55 PM by errorgance »
Logged

SonnaBanana

  • Admiral
  • *****
  • Posts: 867
    • View Profile
Re: Personal Contacts
« Reply #67 on: August 14, 2020, 08:59:32 PM »



also, got an idea for an outlaw mission idea, hack a relay so calls are automatically received, then call this person...
...repeatedly.
give plenty of funny dialog options.

Yes yes yes, not just for pirates but also for TT and Sinedrians too!
Logged
I'm not going to check but you should feel bad :( - Alex

FooF

  • Admiral
  • *****
  • Posts: 1378
    • View Profile
Re: Personal Contacts
« Reply #68 on: August 15, 2020, 10:53:55 AM »

The call feature is turning into something more than I intended. The reference was an MMO that allowed you to get missions for the team without having to travel to the contact. Time was simply more important in that setting because you're wasting 2-8 people's time instead of just your own. It was a simple QoL improvement. If it doesn't work because physical objects have to be exchanged, so be it: all that was ever given in the MMO was information. I suppose if you could reach out to Contacts in Starsector to see what the mission is (and whether it was "worth it" to meet and accept the mission), that could be of some value but doing a bunch of work-arounds to shoehorn another game's system into this one may be more trouble than its worth!
Logged

Alex

  • Administrator
  • Admiral
  • *****
  • Posts: 23988
    • View Profile
Re: Personal Contacts
« Reply #69 on: August 15, 2020, 12:05:06 PM »

To be honest, I'm coming to about the same conclusion - it's an interesting idea, and it sounds like fun, but I'm not sure it fits. I do like the idea of using comm relays actively for something, but then if it was too useful, you'd feel like you had to deploy makeshift ones all over the place, and... this is a rabbit hole I probably shouldn't fall down just now.

(Side note, "feature most likely to be overlooked", I think, is the ability to add stable locations by interacting with a star...)
Logged

SCC

  • Admiral
  • *****
  • Posts: 4112
    • View Profile
Re: Personal Contacts
« Reply #70 on: August 15, 2020, 12:25:00 PM »

If you want to make comm relays useful, then maybe add an option to call for back-up from your faction, a friendly faction, or from your contact. Most of the time you would be asking for some fuel, but hey, maybe you're stuck in a high danger system? Or maybe you visited such a system, went a comm relay with some fuel and now you can call Remnants for a "replay 2020" option for disrupting systems or whatnot.

Arbitrated

  • Ensign
  • *
  • Posts: 4
  • Wandering Falcon Fanataic
    • View Profile
Re: Personal Contacts
« Reply #71 on: August 15, 2020, 12:55:50 PM »

RE: Officers effecting DP

I really like this idea mechanically (promotes actually having officers in the early game, instead of spamming ships and thinking about officers later down the line). What I like more, though, is that this makes DP feel more like your character's limit on how well they can control their own fleet. That is - even if you're not "giving orders", you're still managing every ship in your fleet during a battle - receiving reports of damage, PPT, their sensors detecting enemies, how many missiles they have, the status of their armor, how much flux is built up, their positions, etc. etc. etc.

An officer in a ship basically handles all those reports for you, which means you don't need to worry/pay attention to that ship, letting you deploy more ship(s) into combat. I guess in theory this means that an Ops center should lower the DP cost of the ship it's on or something but I'm not here to get into semantics about stuff like that...


RE: AI cores impersonating people.

It's funny how so many suggestions here have talked about Beta cores making "fake humans" in a sense of being still somewhat clearly an AI core, when the flavor text actually says that Beta cores can perfectly imitate a human with a bit of training. (Also, the flavor text for alpha cores talks about how they're straight up capable of making artwork, music, etc. and have been typically put to work by the Domain and/or Hegemony under the most strict supervision... Which makes me feel sad for those not so little blue balls...)


I appreciate, a lot, that there's still going to be "general missions" that show up without having to visit a contact, since I love following those in the early game for some quick cash! <3  Something somewhat related to the topic of contacts letting you get custom production in: Is there any chance for a minor rebalance to the frequency of certain ships showing up or being available? I went searching for an Odyssey to buy from the League, who IIRC is the only known supplier of them, and they had EIGHT FREAKING CONQUESTS for sale. Also, tangenting here, is there any potential for another capital ship to be added soon? As it stands, there's a bit of a variety problem since three of the eight vanilla factions (think I got them all) use, almost exclusively, the Conquest as their factional capital ship.
Logged

SCC

  • Admiral
  • *****
  • Posts: 4112
    • View Profile
Re: Personal Contacts
« Reply #72 on: August 15, 2020, 12:58:57 PM »

Actually Persean League doesn't have Odysseys, it's Tri-Tachyon only.

Serenitis

  • Admiral
  • *****
  • Posts: 1458
    • View Profile
Re: Personal Contacts
« Reply #73 on: August 15, 2020, 02:04:12 PM »

Actually Persean League doesn't have Odysseys, it's Tri-Tachyon only.
Odyssey does appear in the League faction file, but only as a priority setting. The hull isn't known so it doesn't do anything.
The Diktat definitely has access to Odyssey though.
Logged

intrinsic_parity

  • Admiral
  • *****
  • Posts: 3071
    • View Profile
Re: Personal Contacts
« Reply #74 on: August 15, 2020, 02:57:36 PM »

I'm pretty sure TT sells odysseys, its just that their faction priorities are carriers and phase ships so you almost never seem them.
Logged
Pages: 1 ... 3 4 [5] 6 7 8