Page 1 of 2

Autopilot for Oolite

Posted: Tue May 14, 2024 8:07 pm
by hiran
I just stumbled across this article describing how to milk-run with automation:
http://www.jeffmcaffee.com/creating-a-simple-bot/

Impressive, the concept works by simply pushing keyboard events into Oolite. Plus the script looks at the screen to validate where it's going. Just like - ummm - me when flying here and there.

Would that be a base for an OXP or be more suitable for an external tool as it is now? Or should we pretend it does not exist? Or is this a job for the debug console?

Re: Autopilot for Oolite

Posted: Tue May 14, 2024 10:19 pm
by phkb
hiran wrote: Tue May 14, 2024 8:07 pm
Would that be a base for an OXP or be more suitable for an external tool as it is now?
You could OXP the entire thing, if you wanted, without needing to use an external tool. If fact, you could do it better, because you could interrogate the game state in a far more exhaustive and accurate way.
hiran wrote: Tue May 14, 2024 8:07 pm
Plus the script looks at the screen to validate where it's going. Just like - ummm - me when flying here and there.
I'd challenge the idea that the script is looking at the screen. The script is "assuming" a certain game state based on the results of keypresses beforehand. For instance, the script to buy/sell furs will fail every time if you have SW Economy installed, which adds 3 extra commodities. The script is not checking to see if "Furs" is highlighted - it's "assuming" furs is highlighted because in the default game that's where you end up if you press "8" and then "down arrow" 11 times.

Re: Autopilot for Oolite

Posted: Wed May 15, 2024 4:24 am
by hiran
phkb wrote: Tue May 14, 2024 10:19 pm
You could OXP the entire thing, if you wanted, without needing to use an external tool. If fact, you could do it better, because you could interrogate the game state in a far more exhaustive and accurate way.
That's what I thought as well. And then I thought we might want to create a custumizable set of autopilot maneuvers, with one of the possibilities being the milk run. Another one could be evading pirates.

If done properly we could even communicate the game state as text and feed it into a generic pre-trained processor to see what keys it would press.
phkb wrote: Tue May 14, 2024 10:19 pm
hiran wrote: Tue May 14, 2024 8:07 pm
Plus the script looks at the screen to validate where it's going. Just like - ummm - me when flying here and there.
I'd challenge the idea that the script is looking at the screen. The script is "assuming" a certain game state based on the results of keypresses beforehand. For instance, the script to buy/sell furs will fail every time if you have SW Economy installed, which adds 3 extra commodities. The script is not checking to see if "Furs" is highlighted - it's "assuming" furs is highlighted because in the default game that's where you end up if you press "8" and then "down arrow" 11 times.
I referenced the first of four pages. On the third this guy discusses taking screenshots and interpreting those. That is necessary to reliably navigate to the planet/station. And may be reused elsewhere.

With that technology he can create autopilots for any game.

And this seems to have worked. The guy published the scripts here: https://github.com/jmcaffee/oolite_bot
I have not tested them though.

Re: Autopilot for Oolite

Posted: Wed May 15, 2024 10:46 pm
by phkb
hiran wrote: Wed May 15, 2024 4:24 am
I referenced the first of four pages. On the third this guy discusses taking screenshots and interpreting those. That is necessary to reliably navigate to the planet/station. And may be reused elsewhere.
The trouble is, this method is completely dependent on a number of factors:
(1) The screen size *cannot* change. He even says so: "As long as you always play with the game window at the same size, these coordinates will not change." So, every instance of the autopilot would need to be customised for the local game window.
(2) The HUD cannot change. He is assuming the space compass will be in exactly the same location, with the exact colors as he used to build the script. Any deviation from that standard and you need to reconfigure the script to work with the new layout.
(3) The list of commodities cannot change. The script expects Textiles to be after food, then radioactives, then slaves, and so on. Any additional commodities that throw out this order will result in breakage.

While his method is clever and instructive, and achieves his goal within a limited set of parameters, I can't see this method coping with the mix of mods that tend to get loaded. It's really only effective for the base game, and even then it's limited to a fixed game window.

If you're after a fully integrated auto-pilot/auto-trade system, our scripting environment is much better suited to the job.

Re: Autopilot for Oolite

Posted: Thu May 16, 2024 4:24 am
by hiran
Yes I also believe what he achieved could have been done better in an OXP. He took a different approach and that's what I like:

He controlled Oolite without requiring internal knowledge.
He used simply Bash and a few command line tools.

Likely I'd not try to OXP this as that would be quite a lock-in. OXPs cannot access the disk or network.
Via debug console this could be controlled from outside yet still have access to the game's internal state.

Re: Autopilot for Oolite

Posted: Thu Jun 13, 2024 4:40 am
by hiran
hiran wrote: Thu May 16, 2024 4:24 am
Yes I also believe what he achieved could have been done better in an OXP. He took a different approach and that's what I like
Ok, meanwhile I learned what this guy achieved is not achievable via OXPs: at least the ship's speed cannot be controlled.

See viewtopic.php?p=296660#p296660

Re: Autopilot for Oolite

Posted: Thu Jun 13, 2024 8:01 am
by phkb
I’m pretty sure you can set the ship velocity via JS. It’s a vector though, so you can’t just do player.ship.speed = 320;. I can’t get to an environment to test this right now, but I’m almost certain it would work.

Re: Autopilot for Oolite

Posted: Thu Jun 13, 2024 8:17 am
by phkb
If you’re looking for an example mod, see the “Fuel Injection Cruise Control” mod. It’s doing things at injector speeds, but the logic would be the same for normal speeds.

Re: Autopilot for Oolite

Posted: Thu Jun 13, 2024 8:12 pm
by hiran
phkb wrote: Thu Jun 13, 2024 8:17 am
If you’re looking for an example mod, see the “Fuel Injection Cruise Control” mod. It’s doing things at injector speeds, but the logic would be the same for normal speeds.
This page should list fhe scripts although I am not yet sure what snippet to look at.
https://ooliteproject.github.io/oolite- ... ntrol.html

Edit: this looks like a speed setting to me:

Code: Select all

// velocity adjustment method
p.velocity = p.vectorForward.multiply(parseFloat(p.maxSpeed * p.injectorSpeedFactor) * ps._accel);

Re: Autopilot for Oolite

Posted: Sun Jun 30, 2024 9:23 am
by Cholmondely
hiran wrote: Wed May 15, 2024 4:24 am
phkb wrote: Tue May 14, 2024 10:19 pm
You could OXP the entire thing, if you wanted, without needing to use an external tool. If fact, you could do it better, because you could interrogate the game state in a far more exhaustive and accurate way.
That's what I thought as well. And then I thought we might want to create a custumizable set of autopilot maneuvers, with one of the possibilities being the milk run. Another one could be evading pirates.

If done properly we could even communicate the game state as text and feed it into a generic pre-trained processor to see what keys it would press.
phkb wrote: Tue May 14, 2024 10:19 pm
hiran wrote: Tue May 14, 2024 8:07 pm
Plus the script looks at the screen to validate where it's going. Just like - ummm - me when flying here and there.
I'd challenge the idea that the script is looking at the screen. The script is "assuming" a certain game state based on the results of keypresses beforehand. For instance, the script to buy/sell furs will fail every time if you have SW Economy installed, which adds 3 extra commodities. The script is not checking to see if "Furs" is highlighted - it's "assuming" furs is highlighted because in the default game that's where you end up if you press "8" and then "down arrow" 11 times.
I referenced the first of four pages. On the third this guy discusses taking screenshots and interpreting those. That is necessary to reliably navigate to the planet/station. And may be reused elsewhere.

With that technology he can create autopilots for any game.

And this seems to have worked. The guy published the scripts here: https://github.com/jmcaffee/oolite_bot
I have not tested them though.
Hiran: could you help me create a page on McAfee's Oolite_bot for our wiki? Do you know if anybody has tried it out yet?

So far all there seems to be is the two links to github and to his website.

Re: Autopilot for Oolite

Posted: Mon Jul 01, 2024 9:47 pm
by hiran
Cholmondely wrote: Sun Jun 30, 2024 9:23 am
I referenced the first of four pages. On the third this guy discusses taking screenshots and interpreting those. That is necessary to reliably navigate to the planet/station. And may be reused elsewhere.

With that technology he can create autopilots for any game.

And this seems to have worked. The guy published the scripts here: https://github.com/jmcaffee/oolite_bot
I have not tested them though.
Hiran: could you help me create a page on McAfee's Oolite_bot for our wiki? Do you know if anybody has tried it out yet?

So far all there seems to be is the two links to github and to his website.
[/quote]

I'm willing to help. So far I do not know of anyone having tried the documented approach. But as I learned you cannot control the ship from within an OXP this kind of autopilot seems the only viable alternative. It is worth keeping that knowledge.

So what wiki page should we create? And would it not be worth validating the scripts first?

Re: Autopilot for Oolite

Posted: Mon Jul 01, 2024 10:10 pm
by Cholmondely
hiran wrote: Mon Jul 01, 2024 9:47 pm
I referenced the first of four pages. On the third this guy discusses taking screenshots and interpreting those. That is necessary to reliably navigate to the planet/station. And may be reused elsewhere.

With that technology he can create autopilots for any game.

And this seems to have worked. The guy published the scripts here: https://github.com/jmcaffee/oolite_bot
I have not tested them though.
Cholmondely wrote: Sun Jun 30, 2024 9:23 am
Hiran: could you help me create a page on McAfee's Oolite_bot for our wiki? Do you know if anybody has tried it out yet?

So far all there seems to be is the two links to github and to his website.
hiran wrote: Mon Jul 01, 2024 9:47 pm
I'm willing to help. So far I do not know of anyone having tried the documented approach. But as I learned you cannot control the ship from within an OXP this kind of autopilot seems the only viable alternative. It is worth keeping that knowledge.

So what wiki page should we create? And would it not be worth validating the scripts first?
I can create the basic page with the links and whatnot. But it will also need a description (and possibly even some pretty pictures) of the working bot if you think you can manage to get it working...

Re: Autopilot for Oolite

Posted: Tue Jul 02, 2024 5:48 am
by Wildeblood
hiran wrote: Mon Jul 01, 2024 9:47 pm
But as I learned you cannot control the ship from within an OXP this kind of autopilot seems the only viable alternative.
It's just wrong to say that, hiran. The player ship object has literally hundreds of properties, and most are read/write. There are a handful of important ones that are still read-only, and you found the most obvious and important one in player.ship.speed. But, the blanket statement that one "cannot control the ship from within an OXP" is misleading, and overly pessimistic.

Consider yourself admonished, for spreading pessimism.

Re: Autopilot for Oolite

Posted: Tue Jul 02, 2024 6:22 am
by hiran
Wildeblood wrote: Tue Jul 02, 2024 5:48 am
It's just wrong to say that, hiran. The player ship object has literally hundreds of properties, and most are read/write. There are a handful of important ones that are still read-only, and you found the most obvious and important one in player.ship.speed. But, the blanket statement that one "cannot control the ship from within an OXP" is misleading, and overly pessimistic.

Consider yourself admonished, for spreading pessimism.
From my desk the possibilities for autopilot are too limited. That is all I am stating.

I'd be delighted to be proven wrong and see a proof of concept. Do you know any?

Re: Autopilot for Oolite

Posted: Tue Jul 02, 2024 7:06 pm
by hiran
I just had a closer look at Jeff's solution. It uses xdotool to fire off keyboard input into Oolite.
xdotool works with X.org display server. However since a couple of years Ubuntu migrated towards the Wayland display server - and xdotool cannot deal with that.
Now there might be something like kdotool, dotool but they all require some extra effort.