Page 1 of 1

Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Fri Nov 03, 2023 2:13 am
by Glsl2
Hello everyone, I am trying to experiment with an idea I had for a mod. In the mod, I want a beacon-like device to give a slowdown effect (negative speed) to machines around it. Another specification I have is that the machine must have no module slots.

After looking through the documentation I cannot figure out how to do this or if this can even be done. Any advice on this matter would be greatly appreciated.

Re: Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Fri Nov 03, 2023 3:43 am
by sparr
I'm not sure about negative effects, but a common way to achieve the other sort of behavior you're describing is to have a visible dummy entity, and then an invisible entity that does the real work, which would be a beacon with a module in it, all handled transparently by the mod so the player only ever interacts with the dummy entity.

Re: Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Fri Nov 03, 2023 10:06 am
by Glsl2
I see. But how do I attach a invisible entity to the visible entity? Is it done in the control.lua file?

Re: Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Fri Nov 03, 2023 2:06 pm
by BrainGamer_
Glsl2 wrote: Fri Nov 03, 2023 10:06 am I see. But how do I attach a invisible entity to the visible entity? Is it done in the control.lua file?
Yes you would need to use runtime scripting for this behaviour

Re: Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Fri Nov 03, 2023 6:27 pm
by Glsl2
Can you advise me on how to do this. I have limited experience with the control.lua file.

So after a bit of trial and error I have figured out how to create an invisible entity at the location of the visible entity. How do I use the visible entity to configure the invisible entity?

Re: Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Fri Nov 03, 2023 6:50 pm
by sparr
You would need to register event handlers for when the visible entity gets built, and create the invisible entity. And when the visible entity is destroyed/mined, remove the invisible entity.

Configuring the invisible entity could happen when they player opens the GUI for the visible entity, just create your own GUI next to it. https://mods.factorio.com/mod/combinator-text is a mod of mine that adds a GUI alongside the vanilla combinator GUI, and there are many other examples in other mods.

Re: Allow beacons-like machine to give an effect without any modules in it to surrounding machines

Posted: Sat Nov 04, 2023 2:04 am
by Glsl2
Erm. While trying to place a machine that creates the invisible entity I got a crash. It's not very descriptive, it says something is wrong with the fluid box, "requestedCount <= prototypes.size() was not true." I have attached the log file below. I assume something is wrong with my fluid box prototype declaration, but I can't figure it out.

Code: Select all

    name = "heat-distributer-visible",
    type = "assembling-machine",
    icon = "filepath"/heat_distribution_plate.png",
    icon_size = 64,
    gui_title_key = "heat-distributer-visible",
    
    fixed_recipe = "use-steam-to-heat",
    energy_usage = "300W",
    crafting_categories = {"crafting"},
    crafting_speed = 1,

    tile_width = 2,
    tile_height = 2,
    collision_box = {{-1.2, -1.2}, {1.2, 1.2}},
    selection_box = {{-1.5, -1.5}, {1.5, 1.5}},

    energy_source = {
        type = "fluid",
        scale_fluid_usage = false,
        fluid_usage_per_tick = 3,
        fluid_box = {
            base_area = 1,
            height = 2,
            base_level = -1,
            pipe_covers = pipecoverspictures(),
            burns_fluid = false,
            pipe_connections =
            {
                {type = "input", position = {1.5, 0.5}, filter = "super-heated-steam"},
                {type = "input", position = {-1.5, 0.5}, filter = "super-heated-steam"}
            },
            production_type = "input"
        }
        
    },

    minable = {mining_time = 0.5, result = "heat-distributer-visible"}
factorio-current.log
(8.68 KiB) Downloaded 39 times

Edit: I have fixed the crash by changing the type to generator and changed energy_source to electric and added fluid_box