Page 1 of 1
Can I bring the palyers ship to a full stop, in a script?
Posted: Sat Dec 23, 2023 4:11 pm
by Gwydion
I'm playing with a mission. I have a story and time line on paper and am currently checking the things I can and cannot do and tweaking the story to suit. I found this quicker than writing the code in full then have to test from the beginning again, or jump through stages.
Anyway, I have a part when the player is most likely heading at full speed towards a space station and I pop up a message for them to read. Since I don't want to crash the player into the station and well, err um, kill them I thought I could stop the players ship or divert it off course. Because crashing into the station would be annoying.
So far I cannot find any entity or ship or player.ship methods to do that. I did find performFlee(), performFlyToRangeFromDestination(), these need a target but that might not be set to the station yet, and they only seem to be for NPC. There was also performHold() and perfomStop() but these appear to be for NPC ships and do nothing for the player.ship when used from the debug console or JS script. I also played around with player.ship.thrust and maxThrust, speed and maxSpeed.
Since I don't want to kill the commander doing the mission any solution that stops a crash would work.
Any ideas?
Re: Can I bring the players ship to a full stop, in a script?
Posted: Sat Dec 23, 2023 5:40 pm
by Cholmondely
Another mission! Gosh!!
That's you, Killer Wolf (maybe something involving both his Isis Interstellar company and Zaonce), and possibly Phkb (HIMSN?).
Does it involve Raxxla?
For Oolite, generally, I feel that missions can be very important (I've not played too many of them).
Several of the Galaxies are "fleshed out" by missions. I'm thinking particularly of The Assassins Guild and G7, and The Iron Raven and G8. But Ionics rebuilds the North East of G2 and Resistance Commander rejigs the South of G6.
So! More power to both your elbows and those of KW & Phkb!
Re: Can I bring the palyers ship to a full stop, in a script?
Posted: Sat Dec 23, 2023 6:24 pm
by Gwydion
Sorry, it's in Galaxy 2, so nothing to do with Zaonce or Isis Interstellar or even HIMSN. No not even in Raxxla.
I have only done a few those from Galaxy 1 and I loved them.
Re: Can I bring the players ship to a full stop, in a script?
Posted: Sat Dec 23, 2023 6:55 pm
by Cholmondely
Gwydion wrote: ↑Sat Dec 23, 2023 6:24 pm
Sorry, it's in Galaxy 2, so nothing to do with Zaonce or Isis Interstellar or even HIMSN. No not even in Raxxla.
I have only done a few those from Galaxy 1 and I loved them.
Don't know if it is relevant, but DGill is doing some absolutely wonderful things with his updating of the Feudal States.oxp, so if matters Feudal are involved it might be worth dropping him a line.
Also, you might wish to exclude some OXPs which you feel might ruin the plot (
https://wiki.alioth.net/index.php/Cheating contains a list of these)
And - since you seem to understand this sort of stuff,
Library.oxp is jam-packed with goodies for people writing missions. It is not all properly documented (premature death of author), but the older predecessor,
CCL, has some of the missing documentation. NPC mugshots, medals, animations & star-maps, music/sound organisation,
etc. CCL contained other stuff - which I presume is still tucked away inside Library.OXP - including a script for analysing whether the player is up to the challenge -
and another for managing in-flight missions screens.
Sadly, the only OXP written which used this stuff was Vector (only works on v.1.77.1 or earlier) - Svengali died before he was able to update it for Library.oxp
Svengali did write some proof-of-concept oxps which you will find linked to the Library.oxp & CCL.oxp wiki pages.
Dear old phkb has managed to decipher some of the workings of some of the above...
Re: Can I bring the palyers ship to a full stop, in a script?
Posted: Sat Dec 23, 2023 7:23 pm
by Gwydion
And - since you seem to understand this sort of stuff, Library.oxp is jam-packed with goodies for people writing missions.
Ah, thanks for the pointer to library.oxp I have as it install as it was needed by some OXP's I but never looked inside. Something to do tomorrow instead of dusting and vacuuming yay!
I tend to read a lot and there is a lot of documentation for Oolite, before you even get to the forums
I've been trawling through a lot of OXP's by or supported by phkb Norby and Thargoid. Mainly as they have created missions I've completed or OXP's that are generating random ships and using mission screens. Don't get me wrong there have been many others but I like the way they write code. It's the same style as I was brought up with and I'm too old to change my style now.
Thanks again, Choimondely.
Re: Can I bring the palyers ship to a full stop, in a script?
Posted: Sun Dec 24, 2023 1:55 am
by Switeck
In the OXZ called:
oolite.oxp.Thargoid.RetroRockets.oxz
Inside it, in its retroRockets.js file, on line 38.
There seems to be a line you're interested in:
player.ship.velocity = player.ship.velocity.subtract(player.ship.vectorForward.multiply(player.ship.maxSpeed*3));
Stands to reason if that value can be changed in that way, it can also be set to 0, like so:
player.ship.velocity = 0;
For even more cleverness, you could save the velocity into a temporary variable before changing it and reinstate that same velocity after the mission screen is done being displayed.
var a = player.ship.velocity;
player.ship.velocity = 0;
(sometime later...)
player.ship.velocity = a;
(I'm not sure this will all work, but hopefully this helps!)
[...In hindsight, player.ship.velocity is probably a vector array of sorts, so setting it to a simple 0 may not work!]
Re: Can I bring the palyers ship to a full stop, in a script?
Posted: Sun Dec 24, 2023 3:58 am
by phkb
You can do it a couple of ways.
will bring the player ship to an immediate stop. You'll need to make a note of what the maxSpeed was beforehand, though, because you'll need to change it back again, otherwise the player won't be able to move.
You can also do this:
Code: Select all
player.ship.thrust = 0;
player.ship.velocity = [0,0,0];
Again, make a note of what the values were beforehand, so you can set them back again when you're ready.
It's also worth noting, that while mission screens are now permitted during flight (in Oolite 1.91), you can't lock out the player. That is, you can't use
allowInterrupt: false
on your mission screen. If you want to present a choice to the player, they *will* be able to skip the choice, press F1 and get back to flying.
Re: Can I bring the palyers ship to a full stop, in a script?
Posted: Tue Dec 26, 2023 10:58 am
by Gwydion
Thank you for the replies and answers, I can now stop the ship when the mission screen is displayed and get going again when it goes away. (I think I was having a Friday afternoon after coming back from the pub, moment).
It's also worth noting, that while mission screens are now permitted during flight (in Oolite 1.91), you can't lock out the player. That is, you can't use allowInterrupt: false on your mission screen. If you want to present a choice to the player, they *will* be able to skip the choice, press F1 and get back to flying.
That will not be a problem as the message screen only has an "OK" option.
[...In hindsight, player.ship.velocity is probably a vector array of sorts, so setting it to a simple 0 may not work!]
Thanks for the warning, I found that Thargoid was using something along the lines of:
ps.velocity = ps.velocity.subtract(ps.vectorForward.multiply(maxspeed * 3));
This changes the forward vector to a new value and keeps the vector valid.
Thanks for all the help, and I hope every one had a good mid winter break.
Re: Can I bring the players ship to a full stop, in a script?
Posted: Sun Jan 21, 2024 9:23 am
by Cholmondely
Gwydion wrote: ↑Tue Dec 26, 2023 10:58 am
... I hope every one had a good mid winter break.
How was yours?