Sb forum speech.png DiscordLink.png FacebookLink.png RedditLink.png SteamLink.png TwitterLink.png YoutubeLink.png

Difference between revisions of "Common YOLOL"

From Starbase wiki
Jump to navigation Jump to search
m (Short page description. Moved WIP notice to the top.)
(71 intermediate revisions by 5 users not shown)
Line 1: Line 1:
A collection of small common scripts meant to be easily copied and understood for the [[YOLOL|YOLOL]] beginners.
A collection of small common scripts meant to be easily copied and understood for the [[YOLOL]] beginner.


''This page is a "Work In Progress". Don't hesitate to contribute! Just make sure to respect the following rules:
''This page is a WIP. Please contribute to it! (Avoid complex scripts and the renaming of fields.)''
* Avoid complex codes. As said, These must be easily understood by beginners. If you can't simplify your scripts, please add some comments to explain the most technical parts.
* Avoid as possible to modify the [[Device fields|device fields]]. If necessary, it must be specified which field has to be renamed (left column) and/or set to a given value (right column). ''


==[[Flight control unit|Flight Control Unit]]==
==[[Fuel chamber]]==
===Standard Generator Script (Basic YOLOL Chip)===


===Single Forward/Backward Lever===
''Note: This script will require enough batteries on the ship to act as a buffer for the generator spool up time.''
Requires a center lever bound to '''"FcuForward"'''. ''Note: You can easily modify the default regular lever from most prebuilt ships and cockpit modules to be used as a center Lever. Just change the '''"LeverMinOutput"''' value from 0 to -100. Also don't forget to modify your control binds ("V" on keyboard by default).''


:FcuBackward=-:FcuForward goto1
====Default Fields====


===Speed Limiter===
:FuelChamberUnitRateLimit=100-:StoredBatteryPower/100 goto 1
Requires to modify the lever bound to '''"FcuForward"''' which shall be renamed '''"Fwd"''' and another regular lever with '''"LeverState"''' renamed '''"Limiter"'''. This script allow you to set a maximum forward speed to your ship, which is useful when you need more accurate movements (e.g. while mining or docking).


:FcuForward=:Fwd/100*:Limiter goto1
====Non Default Fields====


''Note: If you already modified your '''"FcuFoward"''' lever to be used as a '''"Single Forward/Backward Lever"''' (see above), you can use the '''"Backward"''' lever made useless as the '''"Limiter"''' lever. Just make sure you have '''"FcuForward"''' renamed '''"FwdBwd"''' instead so you can modify forward and backward thrust individually. This way your YOLOL scripts should be written as follows:''
''Note: This version of the script assumes either "'''GeneratorUnitRateLimit'''" or "'''FuelChamberRateLimit'''" (preferably the latter) are renamed to "'''limit'''", and at least one battery exists on the network with it's "'''StoredBatteryPower'''" field renamed to "'''bat'''".''


  :FcuForward=:FwdBwd/100*:Limiter goto1
  :limit=100-:bat/100 goto 1


:FcuBackward=-:FwdBwd goto1
====Tutorial Laborer====


===Turtle Mode===
''Note: The Laborer has renamed field names by default so this version will work for the tutorial ship.''
Similar to the previous script but with a button instead of a lever. '''"ButtonState"''' should be renamed '''"Turtle"''' and '''"ButtonStyle"''' set to '''"1"'''. In addition set the '''"ButtonOffStateValue"''' to '''"100"''' and the '''"ButtonOnStateValue"''' to the desired speed reduction. For example having '''"30"''' means 30% of maximum speed when the button is active.


  :FcuForward=:Fwd/100*:Turtle goto1
  :Generator=100-:Battery_1/100 goto 1


==[[Fuel chamber|Fuel Chamber]]==
===Settable on/off Generator flag===
c=(c<1)*(:Battery_1<5000)+c*(:Battery_1<9999) :Gen=c*22+0.001 goto 1
Fitting this code on the Laborer Module requires renaming at least one device. (here the Generator was renamed Gen)


The following scripts are made to be used with the ship "[[Laborer module|Laborer Module]]" rewarded during the tutorials. To make it compatible with other prebuilt or own-made ships, refer to the table below for the corresponding modifications in the [[Device fields|device fields]]. ''Note: Most scripts make the "Generator" button irrelevant as it replace its use. Some may make another use of it.''
5000 and 9999 are the start-charging and stop-charging levels. 22 is just enough charge to run the stock two box thrusters.


===Generator Script (Basic YOLOL Chip)===
This YOLOL script is inspired by the standard generator script and is further optimized.
You can set from which amount of stored battery power the generator should generate less compared to the stored battery power.
It is assumed that specific YOLOL fields are renamed:
{| class="wikitable"
{| class="wikitable"
! Ship Part !! Default Field Name !! Laborer Module Field Name
|-
| Hybrid Button || ButtonState || Generator
|-
|-
| Fuel Chamber || FuelChamberUnitRateLimit || Generator
! Ship Part !! Old YOLOL field name !! New YOLOL field name
|-
|-
| First Battery || StoredBatteryPower || Battery_1
| Every Fuel Chamber || FuelChamberUnitRateLimit || Gen
|-
|-
| Second Battery || StoredBatteryPower || Battery_2
| One Rechargeable Battery || StoredBatteryPower || Bat
|}
|}


Also, ships will require enough batteries to act as buffers during the generator spool up time. ''Note: When in use, all batteries discharge at the same rate. The more batteries you have, the slower the discharge is.''
Depending on the amount of batteries and the amount of generators, a higher or lower value can be used for the variable "a" in the script. A too high value leads to the fact that the algorithm cannot find an optimal balance for the FuelChamberUnitRateLimit/Gen.
 
===Gradual Generator Script===
Makes the fuel rate limit of the fuel chamber inversely proportional to the charge level of the batteries.
 
:Generator=100-:Battery_1/100 goto1
 
Alternatively, the script below will keep the batteries fuller by setting the fuel rate limit to its maximum when batteries are below 90% of charge.
 
:Generator=1000-:Battery_1/10 goto1
 
Additionally, you can use the "Generator" button by renaming it "Eco" so it switch fuel saving on and off with the following script. Useful for more power consuming activities like mining.
 
:Generator=100-:Eco*:Battery_1/100 goto1
 
===Flagged Generator Script===
This script set the fuel rate limit to 25% (just enough to supply 2 box thrusters with a bit of spare charge) if the level of the batteries is below 9999 and adding 50% if below 5000. 0.001% is enough fuel rate to let the generator "sleep" when the ship stand still and the batteries are full.


:Generator=25*(:Battery_1<9999)+50*(:Battery_1<5000)+0.001 goto1
====Generator Script====


===Advanced Generator Script===
// Variables for Tweaking
This script is tweakable to your ship configuration. Field names are those of the Laborer Module, except for the '''"Generator"''' button which should be renamed '''"PWR"''' so the script can control the fuel rate while the button still being functional. Optionally you can add an override lever with '''"LeverState"''' renamed '''"PWR"''' as well.
a = 9500 // If Battery Amount is lower than this, Gen is 100%
// Static variables and precalculation
c = 10000 // Max Stored Battery Power
d = 100 // 100%
e = (c-a)/d
// Final Generator Scriptline
:Gen=((:Bat<a)*d)+((:Bat>a)*((:Bat-c)*-1)/e) goto 8


MaxBattery=20000          // total capacity
====Generator Script with On/Off Button and Minimum Power Production====
LowBattery=0.99*MaxBattery // start charging below 99%
MinBattery=0.20*MaxBattery // max charge rate below 20%
MaxGenerator=100          // max fuel rate
MinGenerator=2            // min fuel rate (near 100% charge)
h=MaxGenerator c=MinGenerator          // auxiliary variables,
f=MaxBattery l=LowBattery e=MinBattery // no need to change these
r=(h-c)/(f-e) z=h-r*l a=r*(f-l)      // reboot: remove "goto9" briefly
y=:PWR-z-r*(:Battery_1+:Battery_2)+c*(y>c)+a*(y>0) :Generator=y goto9


It is assumed that the following device fields are set as explained (''Note: The "PWR" button is already set up in the Laborer Module''):
If the battery consumption is very high and the amount of rechargeable batteries is not enough until the generator produces enough power, you should consider using the following version of the script.


Use a Hybrid-Button with the following field names and values configured:
{| class="wikitable"
{| class="wikitable"
! Ship Part !! Field Name !! Set Field value
|-
|-
| "PWR" Button || ButtonOnStateValue|| 100
! Name !! Value
|-
|-
| "PWR" Button || ButtonOffStateValue|| 0  
| On || 0
|-
|-
| "PWR" Button || ButtonStyle || 1
| ButtonOnStateValue || 1
|-
|-
| "PWR" Lever (optional) || LeverMinOutput || 0  
| ButtonOffStateValue || 0
|-
|-
| "PWR" Lever (optional) || LeverMaxOutput || 200
| ButtonStyle || 1
|-
| "PWR" Lever (optional) || LeverCenteringSpeed || 0
|}
|}


==[[Material point scanner|Material Point Scanner]]==
The variable b can be used to set the minimum amount of power that the generators should generate. A too low value, can lead to the fact that the generators do not provide enough power yet and the batteries are already discharged. A too high value leads to the fuel rod consumption during standstill being too high.
 
===Material Point Scanner Script===
Requires two displays for '''"Material"''' and '''"Volume"''', two buttons to toggle the '''"Active"''' and '''"Scan"''' fields of the scanner, and a third button with '''"ButtonState"''' renamed '''"Next"''' and '''"ButtonStyle"''' set to '''"1"'''.


  :Index=(:Index+:Next)*(:Index<:ScanResults) :Next=0
// Variables for Tweaking
:Material=:Material :Volume=:Volume goto1
a = 9500 // If Battery Amount is lower than this, Gen is 100%
b = 10 // If Button is On, Gen will be at least this much
// Static variables and precalculation
c = 10000 // Max Stored Battery Power
d = 100 // 100%
e=(c-a)/d f=(d/b)
// Final Generator Scriptline
  :Gen=:On*(((:Bat<a)*d)+((:Bat>a)*(((:Bat-c)*-1)+(:Bat-a)/f)/e)) goto 9


===Automatic Material Point Scanner Script===
==[[Flight control unit]]==
This is a modified version of the above script so it can be used when the scanner is '''"Active"''' without the need of any additional buttons.
===Single lever forward/backward script (Basic YOLOL Chip)===
''Note: launching a new scan reinitialize the index to '''"0"'''.''


:Scan=1
''Note: This script assumes you have a center lever bound to FcuForward''
//Pause
:Index=Next
Next=(Next+1)*(Next<:ScanResults)
:Material=:Material :Volume=:Volume goto1


==[[Mining laser|Mining Laser]]==
====Default device fields====
''Note: [[Mining laser|Mining Lasers]] were updated to have an activation cost, which is why pulsing lasers is not economic anymore.''
===Pulsed Mining Laser===
Requires a button with '''"ButtonState"''' renamed '''"Mining"''' and '''"ButtonStyle"''' set to '''"1"'''. Reduces power consumption by continuously switching mining laser "On" and "Off" while the button is active.


  :MiningLaserOn=(1-:MiningLaserOn)*:Mining goto1
  :FcuBackward=-:FcuForward goto 1


===Configurable Pulsed Mining Laser===
==[[Material point scanner]]==
Similar to the previous script but with configurable timers for the "On" and "Off" phases of the laser.
===Material Point Scanner Script===
''Note: Each phase is calculated in a number of YOLOL "tick" (0.2sec). So in the example, the "On" phase last 2*0.2=0.4sec and the "Off" phase 3*0.2=0.6 sec, which makes the power comsumption just a bit lower than the power production of a regular generator module (= one fuel chamber and three generator units, all in tier 1).''
''Note: Additionally to two output panels for '''"Material"''' and '''"Volume"''' and two buttons to toggle '''"Active"''' and '''"Scan"''' install a third button and rename '''"ButtonState"''' to '''"Next"''' and set its '''"ButtonStyle"''' to '''1'''.''
:Material=:Material :Volume=:Volume
:Index=(:Index+:Next)*(:Index<:ScanResults) :Next=0 goto 1


  On=2 Off=3 :MiningLaserOn=(T<On)*:Mining T++ T*=T<(On+Off) goto1
===Continuous Material Point Scanner Script===
''Note: This is a modified version of the above script''
  :Material=:Material :Volume=:Volume
:Index=(:Index+:Next)*(:Index<:ScanResults) :Next=1
//pause
:Scan=1
goto 1


==[[Navigation receivers|Navigation Receiver]]==
==[[Mining laser]]==
 
===Pulsed Mining Lasers===
===Received Signal Display===
Reduces power consumption by pulsing mining lasers on and off while a button is pressed. The duration of the on and off state are each configurable in number of ticks. (One tick is about 0.2 seconds)
Requires a text panel with '''"PanelValue"''' renamed '''"Nav"'''.  
on=1 off=2 :MiningLaserOn=:ButtonState*(t<on) t++ t*=t<(on+off) goto1


==[[Navigation receivers]]==
===Receiver Signal Display===
Using a display named '''Nav'''
  if :SignalStrength>0 then goto2 else :Nav="No Signal" goto1 end
  if :SignalStrength>0 then goto2 else :Nav="No Signal" goto1 end
  :Nav=:Message+"\n"+(1000000-:SignalStrength)/1000+"km" goto1
  :Nav=:Message+"\n"+(1000000-:SignalStrength)/1000+" km" goto1
 
==[[Ore collector|Ore Collector]]==
 
===Mining Laser/ Ore Collector Swapping Power===
Requires a button with '''"ButtonState"''' renamed '''"Collecting"''' and '''"ButtonStyle"''' set to '''"1"'''. Reduces power consumption by switching ore collector "On" only if the button is active And the mining laser is "Off". ''Note: this script works best alongside the "Pulsed Mining Laser" scripts.''
 
:ToggleOn=(1-:MiningLaserOn)*:Collecting goto1
 
==[[Ship transponder|Ship Transponder]]==
 
===Outside Safezone Warning===
Requires an active transponder and either a warning button or a safety lid button. The button blink whenever you're outside of the safe zone. ''Note: the button needs to be active in order to blink.''
 
:ButtonEnableBlink=1-:InsideSafeZone goto1
 
===Stations Building Availability===
Same as the previous one, but the button blink wherever you're allowed to build a station.


:ButtonEnableBlink=:StationsAllowed goto1


[[Category:Networks|Common YOLOL]]
''This page is a WIP. Please contribute to it!''

Revision as of 19:04, 30 August 2021

A collection of small common scripts meant to be easily copied and understood for the YOLOL beginner.

This page is a WIP. Please contribute to it! (Avoid complex scripts and the renaming of fields.)

Fuel chamber

Standard Generator Script (Basic YOLOL Chip)

Note: This script will require enough batteries on the ship to act as a buffer for the generator spool up time.

Default Fields

:FuelChamberUnitRateLimit=100-:StoredBatteryPower/100 goto 1

Non Default Fields

Note: This version of the script assumes either "GeneratorUnitRateLimit" or "FuelChamberRateLimit" (preferably the latter) are renamed to "limit", and at least one battery exists on the network with it's "StoredBatteryPower" field renamed to "bat".

:limit=100-:bat/100 goto 1

Tutorial Laborer

Note: The Laborer has renamed field names by default so this version will work for the tutorial ship.

:Generator=100-:Battery_1/100 goto 1

Settable on/off Generator flag

c=(c<1)*(:Battery_1<5000)+c*(:Battery_1<9999) :Gen=c*22+0.001 goto 1

Fitting this code on the Laborer Module requires renaming at least one device. (here the Generator was renamed Gen)

5000 and 9999 are the start-charging and stop-charging levels. 22 is just enough charge to run the stock two box thrusters.

Generator Script (Basic YOLOL Chip)

This YOLOL script is inspired by the standard generator script and is further optimized. You can set from which amount of stored battery power the generator should generate less compared to the stored battery power.

It is assumed that specific YOLOL fields are renamed:

Ship Part Old YOLOL field name New YOLOL field name
Every Fuel Chamber FuelChamberUnitRateLimit Gen
One Rechargeable Battery StoredBatteryPower Bat

Depending on the amount of batteries and the amount of generators, a higher or lower value can be used for the variable "a" in the script. A too high value leads to the fact that the algorithm cannot find an optimal balance for the FuelChamberUnitRateLimit/Gen.

Generator Script

// Variables for Tweaking
a = 9500 // If Battery Amount is lower than this, Gen is 100%
// Static variables and precalculation
c = 10000 // Max Stored Battery Power
d = 100 // 100%
e = (c-a)/d
// Final Generator Scriptline
:Gen=((:Bat<a)*d)+((:Bat>a)*((:Bat-c)*-1)/e) goto 8

Generator Script with On/Off Button and Minimum Power Production

If the battery consumption is very high and the amount of rechargeable batteries is not enough until the generator produces enough power, you should consider using the following version of the script.

Use a Hybrid-Button with the following field names and values configured:

Name Value
On 0
ButtonOnStateValue 1
ButtonOffStateValue 0
ButtonStyle 1

The variable b can be used to set the minimum amount of power that the generators should generate. A too low value, can lead to the fact that the generators do not provide enough power yet and the batteries are already discharged. A too high value leads to the fuel rod consumption during standstill being too high.

// Variables for Tweaking
a = 9500 // If Battery Amount is lower than this, Gen is 100%
b = 10 // If Button is On, Gen will be at least this much
// Static variables and precalculation
c = 10000 // Max Stored Battery Power
d = 100 // 100%
e=(c-a)/d f=(d/b)
// Final Generator Scriptline
:Gen=:On*(((:Bat<a)*d)+((:Bat>a)*(((:Bat-c)*-1)+(:Bat-a)/f)/e)) goto 9

Flight control unit

Single lever forward/backward script (Basic YOLOL Chip)

Note: This script assumes you have a center lever bound to FcuForward

Default device fields

:FcuBackward=-:FcuForward goto 1

Material point scanner

Material Point Scanner Script

Note: Additionally to two output panels for "Material" and "Volume" and two buttons to toggle "Active" and "Scan" install a third button and rename "ButtonState" to "Next" and set its "ButtonStyle" to 1.

:Material=:Material :Volume=:Volume
:Index=(:Index+:Next)*(:Index<:ScanResults) :Next=0 goto 1

Continuous Material Point Scanner Script

Note: This is a modified version of the above script

:Material=:Material :Volume=:Volume
:Index=(:Index+:Next)*(:Index<:ScanResults) :Next=1
//pause
:Scan=1
goto 1

Mining laser

Pulsed Mining Lasers

Reduces power consumption by pulsing mining lasers on and off while a button is pressed. The duration of the on and off state are each configurable in number of ticks. (One tick is about 0.2 seconds)

on=1 off=2 :MiningLaserOn=:ButtonState*(t<on) t++ t*=t<(on+off) goto1

Navigation receivers

Receiver Signal Display

Using a display named Nav

if :SignalStrength>0 then goto2 else :Nav="No Signal" goto1 end
:Nav=:Message+"\n"+(1000000-:SignalStrength)/1000+" km" goto1


This page is a WIP. Please contribute to it!

Cookies help us deliver our services. By using our services, you agree to our use of cookies.