Space Engineers

Space Engineers

259 ratings
WHAM and LAMP Complete Guide
By Whiplash141
This is a full guide for Whip's Homing Advanced Missile Script (WHAM) and its fire control script, Launch A Missile Program (LAMP). This guide will cover all of the stuff that I could not fit on the workshop pages.

This is a full guide for for Whip's Homing Advanced Missile Script (WHAM) and its fire control script, Launch A Missile Program (LAMP). This guide will cover all of the stuff that I could not fit on the workshop pages.

This is still work in progress, and I'll keep adding to it as I remember some of the features I baked into it lol.

WHAM missile can now be configured to fly in randomized flight paths to make them harder to shoot down!

Using the latest versions of WHAM and LAMP, you can configure the Custom Data sections Evasion Parameters and Random Flight Path Parameters inside of WHAM to make missiles take a random flight path when evasion mode is activated.

You can activate evasion mode using the "evasion_on", "evasion_off", or "evasion_switch" arguments in LAMP.

LAMP is a fire control program for my homing missile script, WHAM. It allows you to fire guided Player Made Weapons (PMWs) at targets. You may be asking: "Why is it called LAMP?". Well much like a lamp, this script illuminates a target for its missiles! (*Groan*)

This script also communicates with WHAM missiles using the Inter-Grid Communications API (IGC) instead of exploits. Because of this, missiles can be sent commands mid-flight to change their behavior.

If missiles have stealth disabled, they will also show up on screens using my Turret Based Radar script. Additionally, any target that you are actively painting with camera raycast will also show up on friendly radar!

LAMP is capable of 3 guidance designation modes:
  • Camera Homing - Uses camera raycast for target tracking (colloquially referred to as LIDAR)
  • Turret Homing - Uses targeting data from AI turrets and custom turret controllers
  • Beam Riding - Missile follows your look direction much like a TOW missile

Note: This script supports camera raycast designation to a max range of 5km. Turret designation range is only limited by the max range of the grouped turret(s) themselves.

Homing Functionality
When in either of the homing designation modes, you must have a target lock before firing. If the missiles you are firing are setup with cameras, the missiles will attempt to lock on to the target themselves (Active Homing). This means that you can fire and forget them as they will track on their own.

If the missiles do not have any cameras on them, they will only fly towards a target that you are currently painting (Semi-Active Homing). See the WHAM instructions for more details about setting up missiles with cameras.
- LAMP Setup Instructions

Setup Steps
  1. Place this script in a programmable block on your firing ship.
  2. Place all required and optional blocks on your firing ship.
  3. Group all required and optional blocks in a group named: Fire Control (This IS case sensitive).
  4. Mount WHAM configured player made missiles on your ship.
  5. Run this Fire Control script with the desired arguments. See the Arguments section below.

Required Blocks
The script will automatically allow certain guidance modes based on what required blocks it finds in the "Fire Control" group.

 ... for Camera Homing:
  • Camera(s)
  • Antenna(s)

 ... for Turret Homing:
  • Turret(s) or Custom Turret Controller(s)
  • Antenna(s)

 ... for Line-of-Sight Beam Riding:
  • Antenna(s)
  • A camera or ship controller

Optional Blocks
  • Any terminal block in the group with the name tag Reference. The forward vector of this block will be used for the initial target scan direction.
  • Sound blocks: For status sounds.
  • Text panels/blocks with LCD displays (like cockpits): For status screens. Check the custom data of blocks with multiple LCD displays to configure which screen the status screen should show up on.
  • Doors: For missile silo doors. Check the custom data of the door after adding it to the group for configuration options.
  • Timers: For triggering when a specific missile is fired (or if any missile is fired). Check the custom data of the timer after adding it to the group for configuration options.
- LAMP Arguments

These arguments are valid for any guidance mode.
Fires a missile.

Restriction: In homing modes, you must be locked on.

Optional Arguments:
fire --count <number>
specifies the number of missiles to fire.

fire --range <start> <end>
restricts which missiles can be fired to the specified range.

These optional arguments can be used together:
fire --count 4 --range 1 8
would fire 4 missiles within the missile number range 1 to 8 (inclusive).
Sends a remote fire request to any WHAM missiles configured to permit remote firing. See the section "Advanced: Remote Firing Missiles" for more details.

Restriction: In homing modes, you must be locked on.
Fires all missiles.

Restriction: In homing modes, you must be locked on.
Activates flight termination system on all active missiles within the active antenna range. All blocks on the missile will be turned off, and any warheads on the missile will be detonated.
Toggles missile evasion mode on/off.
Toggles missile evasion mode on.
Toggles missile evasion mode off.
Toggles missile broadcasting on/off.
Disables broadcasting on the missile itself.
Enables broadcasting on the missile itself.
Toggles autofire on/off.
Toggles autofire on.
Toggles autofire off.
Forces all active missiles to transition to the current guidance mode. If this is run while in a homing mode with an solid lock, it will also force all of your active missiles to target your current target.
Prevents the script from being able to fire any missile until "enable_fire" is run. This is useful if you want to lock out fire control systems while you rebuild missiles from projectors.
Allows the script to fire missiles. By default, you shouldn't need to run this unless you have run the "disable_fire" argument.

Mode Switching
These arguments allow you to switch guidance modes.
Cycles between available guidance modes (Camera > Turret > Beam-riding).
Switches to camera homing mode (if allowed).
Switches to turret homing mode (if allowed).
Switches to beam riding mode (if allowed).

Camera Homing
These arguments are only relevant for camera homing.
Begins searching for lock. Will auto switch to camera homing mode.
Clears any active lock and stops searching for lock.
Switches between searching and clearing lock.
Switch between center aim and offset aim for homing modes.
Toggles topdown attack mode like a Javelin! (on planets only).

Deprecated Arguments
The following are arguments that are deprecated/outdated, but will still work.
Same as evasion_switch! Toggles missile evasion mode on/off.
Same as evasion_on! Toggles missile evasion mode on.
Same as evasion_off! Toggles missile evasion mode off.
- LAMP Custom Data

General Config
The below is a list of Custom Data configurable parameters that modify how LAMP behaves. They can be configured in the Custom Data of the programmable block that LAMP is loaded into.

Valid Values
Fire control group name
This is the group name that the script will look for that should contain all of the blocks that LAMP will use
Missile group name tag
The base group name of WHAM configured missiles.
Optional reference block name tag
Name of the optional reference block that will be used as the direction reference for initial raycast scanning in camera homing mode.
Preferred guidance mode
This specifies the default guidance mode that the script will initialize into.
Enable auto-fire
true or false
If enabled, missiles will automatically be fired once you establish a target lock in camera homing or turret homing modes
Auto-fire interval (s)
If autofire is enabled, a missile will be fired each specified number of seconds.
Auto-fire remote missiles
true or false
If true, and if autofire will trigger remote fire requests to shoot missiles on other grids. This can be useful for remote designation platforms.
Auto-fire missile limit per target
integer or none
Specifies the maximum number of missiles that autofire will shoot at each target. If value is set to none or a negative integer, there will be no limit on the number of missiles autofire will dispatch per target.
Antenna range - Idle (m)
This is the range that antennas within the Fire Control group will be set to when LAMP is not actively designating a target.
Antenna range - Active (m)
This is the range antennas withing the Fire Control group will be set to when LAMP is actively designating a target.
Use dynamic active antenna range
true or false
If true, instead of setting antennas within the Fire Control group to the range specified by the setting: Antenna range - Active (m), the antenna range will instead be automatically scaled to
distanceToTheTarget - 100
meters. This will make it harder for the enemy you are actively painting to see your antenna broadcasts.
Minimum allowed lock on range (m)
This is the minimum distance that a target must be away from you to establish a safe lock. This is primarily to prevent you from locking onto your own ship or sub-grids on your ship.
Randomized raycast scan spread (m)
Randomized spread applied to initial camera mode lock-on search scans. Large values for this will reduce the precision of precision mode targeting, but makes it easier to lock on to targets in laggy environments.
Fire order
Specifies the desired fire order of missiles.
Mode behavior:
  • NUMBER: Missiles fire from smallest missile number to largest
  • ANGLE: Missiles fire from smallest angle to target to largest
  • DISTANCE: Missiles fire from smallest distance to target to largest

Status Screen Config
The below table lists all of the configurable parameters that relate to the appearance of the LAMP status screens. These parameters live in the Custom Data of the LAMP programmable block.

Valid Values
Title bar background color
color: R,G,B
Color of the title bar background
Title text color
color: R,G,B
Color of the title bar text color
Background color
color: R,G,B
Color of the script background
Primary text color
color: R,G,B
Color of the primary text. Primary text are the labels that sit above the status text.
Secondary text color
color: R,G,B
Color of the secondary text. Secondary text are the status text that is displayed below the labels.
Status bar background color
color: R,G,B
Background color of the status bar
Selected guidance outline color
color: R,G,B
Changes the color on the outline box that surrounds the active guidance mode
Allowed guidance text color
color: R,G,B
Changes the color that allowed guidance modes are colored on the status screen.
Disallowed guidance text color
color: R,G,B
Changes the color that disallowed guidance modes are colored on the status screen.

Silo Door Config
If doors are added to the Fire Control group, you can configure them to function as silo doors for particular missiles. The following configurable values will show up in their custom data.

Valid Values
Missile number
number greater than 0
This door will be opened when this specified missile is fired.
Trigger on any fire
true or false
This specifies if this timer should be triggered ANY time a missile is fired.

Text Surface Config
The table below is for the configurable parameters that specify which surface to draw a status screen on for blocks with draw-able surfaces (like cockpits or console blocks) that are added to the Fire Control group.

Valid Values
Show on screen X
true or false
Whether or not the status screen should be drawn on a particular screen. "X" will be replaced with a number ranging from 0 to 5. The screens are numbered in the order in which they are displayed in the terminal with 0 being the first.

WHAM is an advanced homing missile script that supports a variety of features. It is quite configurable offering users options to customize things from the launch staging to the navigation constants used in the homing algorithms.

The main homing algorithms it uses are also based off of the real world Proportional Navigation control law (or ProNav) which provides pretty robust interception capabilities.

When used in conjunction with my fire control script, LAMP, missiles can be fired in homing or beam-riding configurations.

This script also utilizes the new(ish) antenna communication API instead of exploits like some scripts used (including my old one). This permits more robust communication between the firing ship and the missile mid-flight and is less hacky/cheaty.

Note: This script supports camera raycast designation to a max range of 5km.
- WHAM Setup Instructions

WHAM will not work without LAMP, so it is recommended that you set LAMP up on your firing ship first.

Setup Steps
  1. Create your missile with the required and desired optional blocks. (See the below sections)
  2. Group all of the missile blocks with the name "Missile #". The # can be any number.
    • Examples: Missile 1, Missile 22
    • The name is case sensitive!
  3. Attach the missile to your firing ship to complete the setup. If you do not attach it to the firing ship, you can still run the setup, it will just fail the launch verification step.
  4. Run the code with the argument "setup". This will use the missile number in the group you just made to auto configure the missile.
    • If you have not setup LAMP on the firing ship, the setup will fail on trying to fetch fire control antennas. This error should go away once you set up LAMP on the firing ship.

Required Blocks
A missile group requires at least the following blocks:
  • A programmable block loaded with this script
  • An antenna
  • A gyro
  • A reactor/battery
  • A remote
  • A main thruster to propel the missile

Optional Blocks
The following blocks are optional, but not required. Simply place them and add them to the missile group if you want the script to handle them.
  • Cameras (Permits active homing and warhead tripwire detonation)
  • A merge block (Highly recommended for detaching)
  • A rotor (For detaching)
  • A hinge (for detaching)
  • A connector (for detaching)
  • Side thrust
  • Artificial mass
  • Sensors - For automatic warhead detonation. No sensor action setup is required.
  • Warheads
  • Timers - These are triggered when the missile's detaches from the firing ship.
  • Side thrust
  • Thrust with "Detach" in their name (Will be used for the detach duration configurable in the PB's custom data)
  • Gas tanks - Gas tanks will be set to stockpile off when the missile is launched

Creating Multiple Missiles
Each missile that you want to fire needs a unique missile number. This is how LAMP, the fire control script, knows which missile it should fire.

Once you have completed the above setup for a single missile, simply change the group name to a new missile number and run setup as the argument. The code will automatically fix all the naming from past setup runs and configure the missile.
- WHAM Launch Staging

WHAM will go through 3 primary launch stages when being fired:
  1. Disconnect delay
  2. Detach duration
  3. Main ignition delay
The duration of each stage is relative to the previous stage. That means that the Main ignition delay is the time after the Detach duration that the main ignition should be delayed.

If you add the name tag "Detach" into a thruster's name, it will be set to full override at the end of the disconnect delay and will be set back to regular after the Detach duration has elapsed.

Also, Guidance delay can be used to delay the activation of the missile's guidance. The timing is independent of the above staging. That is to say that the Guidance delay and the Disconnect delay start at the same time and count down independently.
- WHAM Custom Data (Part 1)

The below is a list of Custom Data configurable parameters that modify how WHAM behaves. They can be configured in the Custom Data of the programmable block that WHAM is loaded into.

This section covers most of configurable parameters related to missile naming.

Valid Values
Auto-configure missile name
If the script should automatically configure the missile name based on what missile group contains the WHAM program
Missile name tag
The base name tag of the missile
Missile number
The unique missile number assigned to this WHAM program.

This value is automatically set if Auto-configure missile name is true
Fire control group name
The name of the fire control group used by LAMP on the firing ship
Detach thruster name tag
Name tag of any thrusters that should be set to max override during the detach duration

These variables control the launch staging timings used during missile launch.

Valid Values
Guidance delay (s)
Duration (in seconds) that guidance activation will be delayed.

This is measured from the moment that the fire command is received.
Stage 1: Disconnect delay (s)
Delay (in seconds) that the missile will not disconnect from the firing ship.

This is measured from the moment that the fire command is received.
Stage 2: Detach duration (s)
Duration (in seconds) after the disconnect delay that the missile will fire any detach thrusters or enable any artificial mass blocks.
Stage 3: Main ignition delay (s)
Duration (in seconds) after the detach duration that the missile will delay the main thruster ignition.

These parameters change how the angular control PID used for the gyros responds to errors in pointing. If you are not familiar with PID controllers, you might not want to fiddle with this.

Valid Values
Proportional gain
Proportional gain for the gyroscope angular control PID. Proportional gain essentially controls the "speed" of the response. Higher values will make the missile steer faster, but can also cause it to overshoot and oscillate.
Integral gain
Integral gain for the gyroscope angular control PID. Integral gain helps account for constant error offsets. In gyroscopic angular control, this is not often necessary.
Derivative gain
Derivative gain for the gyroscope angular control PID. Derivative gain is like "dampening." It will slow down the response of the PID and make it overshoot less, but values that are too high can make the system sluggish to respond to inputs and, in extreme cases, can cause the system to become unstable.

Homing Parameters
These parameters modify how the guidance algorithm responds. In general, if you are not familiar with how proportional navigation works, you probably shouldn't touch this.

Valid Values
Navigation constant
The constant used in the missile guidance algorithm to scale the lateral acceleration component derived from target relative velocity and relative position
Acceleration constant
The constant used in the missile guidance algorithm to scale the lateral acceleration component derived from target acceleration
Max aim dispersion (m)
Maximum randomized spherical dispersion from the target position in meters. Set this to something non-zero to make missile impact locations spread out. Set to 0 to disable.
Topdown attack height (m)
Height above the target that the missile will fly over the target in topdown attack mode.

Beam Riding Parameters
These parameters change how the missile behaves in Beam Riding mode.

Valid Values
Hit offset up (m)
The distance to offset the impact point of the missile up in meters.

Negative values will offset the impact point down.
Hit offset left (m)
The distance to offset the impact point of the missile left in meters.

Negative values will offset the impact point right.

Evasion Parameters
This section configures how the missile will fly in random paths when LAMP commands "Evasion" mode to activate.

Valid Values
Direction change interval (sec)
How frequently (in seconds) that the missile picks a random direction to fly in.
Max acceleration ratio
Ratio (from 0 to 1) that determines what proportion of the missile's max thrust should be allocated to make it fly randomly off course. Larger values make the missile fly much more wildly off course which makes them harder to shoot down, but it also makes it harder for the missile to hit the target.
- WHAM Custom Data (Part 2)

These parameters change how camera raycast or sensors are utilized for proximity detonation/homing.

Valid Values
Use cameras for homing
Determines if cameras on the missile will be used for active homing. If set to false, the missile will be guided in semi-active mode and only use cameras for proximity detonation.
Tripwire range (m)
Distance (in meters) that the missile will try to detonate from the target. It will use camera raycast, sensors, or state propagation to determine if it should detonate based on this range.
Minimum target size (m)
Minimum target size (in meters) that can trigger proximity detonation. You can use this to ensure that anything smaller than this size will be ignored. This is useful for ignoring small debris close to a target.
Minimum warhead arming range (m)
Minimum distance from the firing ship (in meters) that the missile is allowed to detonate.
Ignore friendlies
If proximity detonation should ignore detected friendly ships.
Ignore planets
If proximity detonation should ignore planet voxels.
Ignore target ID for detonation
If true, the missile will detonate if ANY item enters its detonation range. If false, it only detonates if the target locked item is in range.

These are miscellaneous parameters that don't necessarily fit in any other category.

Valid Values
Spin rate (RPM)
Spin rate (in RPM) of the missile about its central axis. This is different than spiraling; it is similar to a top spinning motion.
Allow remote firing
If remote firing is allowed for this missile.
Antenna name mode
Meme, Empty, Custom, MissileName, or MissileStatus
Selects the name mode of the missile antenna.
Require antenna on missile
If an antenna will be required on the missile for setup to succeed.

If remote fire is enabled, this will be forced to true.

WARNING: Setting this to false will result in degraded reliability and will prevent missiles from receiving mid-course corrections or commands from the firing ship.
- WHAM Timer Custom Data

When you add a timer to WHAM's missile group, the timer custom data will be populated with the following config.

WHAM - Stage Trigger
Valid Values
Trigger on launch stage
Intiate, Detach, Drift, Flight (or None to disable)
When the missile enters the specified launch stage, this timer will be triggered.

WHAM - Range Trigger
Valid Values
Trigger at range (m)
number (or none to disable)
Range from target that this timer will be triggered at (in meters).
Advanced: RADAR Interoperability

WHAM/LAMP has the ability interface with my Turret Based Radar and display missile locked targets.

Any ship equipped with the Turret Based Radar (version 33.1.5 or later) that is within the broadcast range of a LAMP equipped ship or a WHAM missile that is broadcasting (stealth mode off) will display targets that are locked via Camera or Turret homing modes. Items that are target locked will be surrounded by a targeting box (as pictured to the right). The color of the targeting box reflects the relationship of the target; in the default color scheme: blue is allied, yellow is neutral, red is hostile.

NOTE: If you want to increase the range of the radar, you can use the range argument, or configure a manual range override in the custom data of the radar programmable block. This will not magically increase the range that your turrets can detect things, but it will increase the range that you can plot targets networked from other sources (ie: WHAM, LAMP, other RADAR).
Advanced: Remote Firing Missiles

A WHAM configured missile can be fired from different ships using LAMP, but there is some configuration required to allow that to happen.

WHAM - Configuration
  1. Open the WHAM programmable block's Custom Data
  2. Find the setting Allow remote firing under the [Misc.] section
  3. Set it to true. It should look like this when done:
    Allow remote firing=true
  4. Click Ok to save the changes
  5. Run WHAM programmable block with the argument:

Now the missile will listen for remote firing requests sent by friendly ships using LAMP.

LAMP - Remote Firing
To remote fire a missile using LAMP, simply run the argument

When you sent a remote_fire request the following sequence will happen:
  1. LAMP will broadcast a remote fire request to all missiles within its range. This max range is defined by the Antenna range - Active (m) setting in the LAMP program's Custom Data.
  2. Any WHAM missile with Allow remote firing set to true will send a remote fire response message which includes the missile's ID and location back to the requester
  3. LAMP will ingest these messages and select:
    • ... the closest missile to the target if in Camera Homing or Turret Homing modes
    • ... the closest missile to the ship if in Beam Ride mode
  4. LAMP will then send a remote fire command to the selected missile which will trigger that WHAM missile's fire sequence

When remote firing a missile, the same restrictions for regularly firing a missile still apply. That is to say that you must have an active lock if in a homing mode to request remote firing.

LAMP - Automatic Remote Firing
LAMP can be configured to automatically fire a missile when a homing lock is established. To do this, set Auto-fire remote missiles to true in the LAMP program's Custom Data.
Addon: Missile Status Screens

If you want to display the status of individual missiles, I have a separate script that is designed to work along side WHAM/LAMP. This is not necessary for WHAM/LAMP to function, but it can be quite useful.
Useful Notes and Tips

  • More cameras on the firing ship = stronger lock. Because cameras have a raycast cooldown, more cameras allows the script to reduce the delay between scans.
    • I recommend 1 camera per every 1 km you want to scan. Any less and the lock will be very weak at range.
  • Use a status screen! It gives a very clean and concise summary of the status of the fire control script.
  • When searching for lock, the code will scan forward relative to the following blocks (ordered by priority):
    1. The camera you are actively controlling
    2. The reference block in the "Fire Control" group if specified
    3. The ship controller that you are currently controlling.
    • Place your forward facing cameras as close together as you can. When you initiate a lock_on search scan, the cameras scan directly forward. This can cause you to straddle a target if your front cameras are spread wide apart.
    • The side and rear cameras can be as spread out as much you want since those are not used for the initial lock search.
  • Camera raycast scans in a pyramid with a view angle of 90 degrees. Place cameras on all six faces on the ship to maintain lock at all angles.
  • If you add a sound block, you will hear different sounds based on lock status in homing modes.
    • A double beep each two (2) seconds indicates that you are searching for a lock
    • A single beep each second indicates that you have a good target lock
    • A warning klaxon means that the target lock is being lost. If you hear multiple of these in a row, you are likely about to lose target lock.
  • If you can stand on it, raycast will hit it. This means you can NOT raycast through windows!

  • Do yourself a favor and use a single blueprint for multiple missiles! Simply create a missile rack that has multiple missiles attached and instead of blueprinting each missile, blueprint the missile rack with the missiles attached!
  • To get the most effective target intercepts, you want your missiles to have high acceleration. More acceleration is better.
  • If a missile has cameras:
    • The missile will acquire the target being painted by the firing ship and begin tracking the target on its own. This means that you can fire and forget missiles.
    • The cameras will be used as tripwires for warheads in all modes
  • More cameras on the missile = stronger lock. This is because cameras have a raycast cooldown. More cameras allows the script to stagger scans to reduce the delay between them.
  • Place cameras on forward and all lateral faces if you can as this will give you better active homing. Camera raycasts scan in a pyramid with a view cone of 90 degrees, so for better visibility (and thus better locks), you'd want cameras on the forward and lateral faces. (The back face should never face the enemy so it is not as important).

Use the Script Replacer Block to easily update all of your WHAM scripts all at once!
Help and Questions

Please direct bug reports, requests for help, and other general questions to the respective script "Help and Questions" forums.

 >> Click Here! <<

 >> Click Here! <<

I'd like to give thanks to these fine nerds friends:
  • jonnytaco
  • Lord Commissar
  • 5URG3
  • Rose Minotaur
  • ToedPeregrine4
  • jphuffman55
  • Marchelo Marcelo

They helped me test these scripts, gave me ideas, provided encouragement, and often served as my live targets!
Whiplash141  [author] Jun 8 @ 7:33am 
They do not turn on evasion I prompted. 1) version? 2) are you using mods? 3) if so, which?
Kaнapeйкa Jun 8 @ 6:44am 
they keep tumbling in gravity, it feels like they somehow turn on evasion mode by themselves upon launch
Whiplash141  [author] Jun 4 @ 12:03pm 
Big Smoke by Klime
Alejandro'Paz Jun 4 @ 11:12am 
Does anyone know what the name of the mod that appears at the top at the beginning where the missiles shoot smoke is called?
xxmanofmemesxx May 18 @ 2:25am 
It says version "170.22.2" in the program.
Whiplash141  [author] May 17 @ 3:28pm 
Nope, that is not normal or intended. What version of WHAM is this on?
xxmanofmemesxx May 17 @ 8:02am 
I've been testing a set of cluster missiles and the only issue I have is that, when using beamride, despite being accurate and on target in space the missiles seem to be flying higher than the targeted position when in gravity. Is this normal for missiles on planets or is there something I can do to resolve this?
Whiplash141  [author] May 14 @ 11:37am 
See "Advanced: Remote Firing Missiles"
Polzergeizt May 14 @ 10:15am 
Would there be a way to paint a target from a grid, and launch a missile from a separate grid? Like to transmit the target over a laser antenna?
Whiplash141  [author] May 12 @ 8:00am 
I doubt those signal blocks will have any useful API or work without antennas or an antenna like analogue.

I can think of far too many edge cases and, in truth, I'm not all that invested in the automated firing for LAMP. I'd rather make a separate FCS script specifically for automatic firing than try and cram this logic into LAMP which is already pretty space constrained.