Resource icon

Advanced Scene Switcher 1.25.5

Rozenman

New Member
Hi all,
I encountered a strange problem: I load a package of images into the Image Slide Show source parameters, then create an action to set the slideshow parameters and click the 'Get Current Settings' button (this set of pictures should appear on a certain date, at a certain lecture, and according to this scheme I have a whole month of different lectures was compiled). A text entry appears immediately, probably in JSON format. But if I want to edit the list of images in an old lecture, I take an entry from the old action, copy this entry to the clipboard and add the necessary lines in a text editor, after which I transfer it from the clipboard back to the action. At the same time, I am sure that there are no mistakes in the vocabulary. However, the action is not executed - the images are not loaded into the slideshow settings. What am I doing wrong?

In other words, how to correctly enter a text task into the macro action for installing images in a slideshow?

Please tell me. Thanks!
 

Warmuptill

Active Member
Hi all,
I encountered a strange problem: I load a package of images into the Image Slide Show source parameters, then create an action to set the slideshow parameters and click the 'Get Current Settings' button (this set of pictures should appear on a certain date, at a certain lecture, and according to this scheme I have a whole month of different lectures was compiled). A text entry appears immediately, probably in JSON format. But if I want to edit the list of images in an old lecture, I take an entry from the old action, copy this entry to the clipboard and add the necessary lines in a text editor, after which I transfer it from the clipboard back to the action. At the same time, I am sure that there are no mistakes in the vocabulary. However, the action is not executed - the images are not loaded into the slideshow settings. What am I doing wrong?

In other words, how to correctly enter a text task into the macro action for installing images in a slideshow?

Please tell me. Thanks!
Does the action do what it is supposed to with the "original" settings you acquired via the "Get Current Settings" button?
(Just trying to understand if it is an issue of the action not working at all or with the inputs provided)

If this does work as intended with the "original" settings can you please share the "modified" settings, which do not work, and the "original" settings as a reference?
Thank you!

And yes you are correct that OBS is storing source settings in JSON format. :)
 

Rozenman

New Member
Does the action do what it is supposed to with the "original" settings you acquired via the "Get Current Settings" button?
(Just trying to understand if it is an issue of the action not working at all or with the inputs provided)

If this does work as intended with the "original" settings can you please share the "modified" settings, which do not work, and the "original" settings as a reference?
Thank you!

And yes you are correct that OBS is storing source settings in JSON format. :)
If you do 'Get current settings', then everything works fine. But if the text that appeared after this in the action setting, for the sake of experiment, is copied to the clipboard, and then returned back to these settings, without even changing anything, it does not work.
 

Rozenman

New Member
P. S. I had an idea: today after the lecture I will try to repeat the experiment, but on the condition that the names of all folders and files will be given only in Latin. If it starts working, then the reason will become clear. If not, I'll send you text settings.
 

Rozenman

New Member
I checked - I replaced the names of folders and files exclusively with Latin ones. Unfortunately, it doesn't work.

[{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/2 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/3 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/4 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/5 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/6 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/7 Dafne monaster.jpg”},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/1 Dafne monaster.jpg"}]
 

Bairespm

Member
Hi, maybe you can help me with something
It's probably very simple and I'm not realizing how to achieve it.


In a scene A I have 4 videos, and I need the following to happen

video 1 - play
when it finishes playing

video 2 - play
when it finishes playing

video 3 - play
when it finishes playing

video 4 - play
when it finishes playing

Change scene to "X scene"


I clarify: "Sequence" does not work, it only runs the first macro but does not continue with the following ones automatically for it to do so I must change it manually

I clarify something else,
VLC playlist does not work either, because in some videos that have audio at the beginning, it plays them cut off, it is not fluid. between video and video

I have achieved it by making 4 scenes with 1 video each, and then a macro that controls the playback when it ends to change the scene.
Even so, I am looking to simplify it into a scene and a macro, which is why I am asking for help here.
thanks for your time.
any idea? @Warmuptill
 

AaronD

Active Member
video 1 - play
when it finishes playing

video 2 - play
when it finishes playing

video 3 - play
when it finishes playing

video 4 - play
when it finishes playing

Change scene to "X scene"


I have achieved it by making 4 scenes with 1 video each, and then a macro that controls the playback when it ends to change the scene.
Even so, I am looking to simplify it into a scene and a macro, which is why I am asking for help here.
thanks for your time.
Your "workaround" here, is what I would do anyway:
(last macro in that set of three)

I have lots of scenes with few things in each, usually just one in each, and switch scenes instead of sources. Seems to work much better that way, like PowerPoint slides except with live media.

If you're getting lost with so many "slides"/scenes, use their names to help organize. I have a naming convention for a different purpose - some of my macros use regexes on the current scene name to do different things for different categories - but I think you get the idea:
1714057436242.png

1714057612340.png

1714057620967.png

The Open Sound Control action controls the DAW that handles all of my audio. OBS is silent except to get a video soundtrack out of it and into the DAW, and to get the final mix out of the DAW and into the recording/stream.

The Websocket action controls a second instance of OBS, which also has Adv. SS, so that all the production work can be done from this one.
This rig has two simultaneous outputs, that are different enough to need two complete instances. I *might* be able to use the projector and Source Record plugin creatively to make one instance do both, but it's a lot more straightforward to have a dedicated instance for each, and connect their controls like this.
 

Bairespm

Member
Your "workaround" here, is what I would do anyway:
(last macro in that set of three)

I have lots of scenes with few things in each, usually just one in each, and switch scenes instead of sources. Seems to work much better that way, like PowerPoint slides except with live media.

If you're getting lost with so many "slides"/scenes, use their names to help organize. I have a naming convention for a different purpose - some of my macros use regexes on the current scene name to do different things for different categories - but I think you get the idea:
View attachment 103501
View attachment 103502
View attachment 103503
The Open Sound Control action controls the DAW that handles all of my audio. OBS is silent except to get a video soundtrack out of it and into the DAW, and to get the final mix out of the DAW and into the recording/stream.

The Websocket action controls a second instance of OBS, which also has Adv. SS, so that all the production work can be done from this one.
This rig has two simultaneous outputs, that are different enough to need two complete instances. I *might* be able to use the projector and Source Record plugin creatively to make one instance do both, but it's a lot more straightforward to have a dedicated instance for each, and connect their controls like this.


Thank you but I don't understand, I don't think it's what I really want to do... you are probably referring to another question that may have been asked.
 

Warmuptill

Active Member
I checked - I replaced the names of folders and files exclusively with Latin ones. Unfortunately, it doesn't work.

[{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/2 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/3 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/4 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/5 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/6 Dafne monaster.jpg"},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/7 Dafne monaster.jpg”},{"hidden":false,"selected":false,"value":"/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/1 Dafne monaster.jpg"}]
One of the quotation mark characters results in the string not being valid JSON.
A is used instead of a ".
This is the reason why nothing happens.

You can find the fixed JSON string here:
Code:
[
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/2 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/3 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/4 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/5 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/6 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/7 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/1 Dafne monaster.jpg"
    }
]


Hi everyone
Can sombody help me how to do the next function:
"wait until scene is current then do"
I think I will need more information about what you are trying to set up.
In general if you want to "wait for a scene" you should probably use the "Scene" condition type.
Example.png


I guess you could simply set up a number of macros similar to the following:
1714065986432.png

1714066050849.png

1714066075778.png

1714066112969.png

You might have to configure your media sources to not automatically play when switching to Scene A.
Hope that helps! :)
 

Bairespm

Member
One of the quotation mark characters results in the string not being valid JSON.
A is used instead of a ".
This is the reason why nothing happens.

You can find the fixed JSON string here:
Code:
[
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/2 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/3 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/4 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/5 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/6 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/7 Dafne monaster.jpg"
    },
    {
        "hidden": false,
        "selected": false,
        "value": "/Users/alexeyshadrin/Dropbox/@ 1 PROFILE SCHOOL/@ NATIONAL ART/TEMP/1 Dafne monaster.jpg"
    }
]



I think I will need more information about what you are trying to set up.
In general if you want to "wait for a scene" you should probably use the "Scene" condition type.
View attachment 103506


I guess you could simply set up a number of macros similar to the following:
View attachment 103507
View attachment 103508
View attachment 103509
View attachment 103510
You might have to configure your media sources to not automatically play when switching to Scene A.
Hope that helps! :)
Thank you, but what I need is for each time I go to scene A to play a different one randomly, not to repeat it until everyone has passed. Is it possible?
 

AaronD

Active Member
Thank you but I don't understand, I don't think it's what I really want to do... you are probably referring to another question that may have been asked.
I might have done a bit of a stretch all at once.

For the immediate question, I'd do it the way that I linked, not the rest of that last post.

The way that I linked makes a LOT of scenes, which might need them to be better organized than just a flat list. Thus, the naming convention as a sort of folder structure without actually having folders.

Then there's what *else* you can do with that naming convention...

Thank you, but what I need is for each time I go to scene A to play a different one randomly, not to repeat it until everyone has passed. Is it possible?
That's the first time I've seen that you wanted random.

Back to the separate-scene-per-thing, you can then have a macro for each that simply switches to its assigned scene. Then use the Random action to pick which of those macros to run.

Again, OBS really seems to work a lot better if you have a bunch of simple scenes. Don't try to use the scenes themselves as folders.

But if you really had to, I guess you could set up each of the individual macros to reconfigure the one giant scene. Then the "master" macro has at least two actions: 1) Random to pick one of those configuration macros, followed by 2) Scene Switch to that one giant scene.
 

Rozenman

New Member
One of the quotation mark characters results in the string not being valid JSON.
A is used instead of a ".
This is the reason why nothing happens.

You can find the fixed JSON string here:
Understood. There was an idea that couldn’t use regular text editors. I tried a specialized JSON-editor and it worked. Thank you very much!
 

fencer

New Member
I think I will need more information about what you are trying to set up.
In general if you want to "wait for a scene" you should probably use the "Scene" condition type.
Yes, you are right, I want to make function's work when I have sequence of scenes and I want to record all of them when the sequence is changed.
I made macros:
- to turn record on when the 1st scene is current ,last scene is previous and recording is off;
- to turn record off when the 1st scene is current ,last scene is previous and recording is on;
Now Im looking for solution how to check scene sequence with timeout and if it had changes turn record on the 1st scene starts, and turn record off when the last scene ends.
 

AaronD

Active Member
Yes, you are right, I want to make function's work when I have sequence of scenes and I want to record all of them when the sequence is changed.
I made macros:
- to turn record on when the 1st scene is current ,last scene is previous and recording is off;
- to turn record off when the 1st scene is current ,last scene is previous and recording is on;
Now Im looking for solution how to check scene sequence with timeout and if it had changes turn record on the 1st scene starts, and turn record off when the last scene ends.
So...every time you transition from scene A to scene B, you want the recording to toggle? On that specific transition, if it was running, you want it to stop; and on the same transition, if it was stopped, you want it to start?

If so, then you might do something like this, just off the top of my head:
  • Variable:
    • State Machine
  • Macro: Detect Transition
    • Conditions (only on change):
      • If Previous Scene is A
      • And if Current Scene is B
    • Actions:
      • Variable "State Machine" = "TOGGLE"
  • Macro: Start Recording
    • Conditions:
      • If Variable "State Machine" == "TOGGLE"
      • And if Recording Stopped
    • Actions:
      • Variable "State Machine" = "RUNNING"
      • Recording Start
  • Macro: Stop Recording
    • Conditions:
      • If Variable "State Machine" == "TOGGLE"
      • And if Recording Running
    • Actions:
      • Variable "State Machine" = "STOPPED"
      • Recording Stop
You could probably do the same thing with just two values of the "State Machine" variable, with the two blocking values (RUNNING and STOPPED) being the same, but having them different makes it slightly more readable, and could allow yet another set of macros to know the status of this machine just with that, and do something accordingly. (if the Start or Stop macro is paused, then the State Machine variable will stay as TOGGLE...)
 

ndfan77

New Member
@Warmuptill, et. al.

Before I jump into a rather detailed set of questions I'd first like to say I greatly appreciate Adv Scene Switcher, and the time and effort you've obviously put into it.

I hope I'm not overlooking something, but after spending several days digging through Adv Scene Switcher functionality (and searching) I can't find a "clean" way to do something that seems fairly common.

We stream twice a week -- once on Wednesday and again on Sunday (worship services). The Wednesday stream has a dedicated stream key and the Sunday stream has a dedicated stream key. There's nothing else different between the services (as far as OBS goes), so only one set of (rather involved) macros is needed to manage the OBS life cycle for both services (which are triggered by hotkeys, either directly, or indirectly through an AutoIT menu).

So..., in our case it seems like we need a way to conditionally set an Adv Scene Switcher variable based on day of week -- in the actions of a macro (not as the trigger). So the hotkey-triggered macro that manages the livestream startup for both Wednesday and Sunday can conditionally set the right stream key based on the day of week before starting the livestream -- within the list of actions for that macro.

I initially tried using a different macro (triggered by date / day of week) to set an Adv. Scene Switcher variable to the appropriate stream key (and then the macro that starts the livestream used that variable to set the OBS stream key before starting the stream). But..., if "Perform actions only on condition change" is enabled, Adv. Scene Switcher doesn't always run a macro triggered only on day of week (my guess is that if Adv. Scene Switcher isn't running when the day of week actually changes at midnight, it doesn't recognize the macro hasn't fired yet when OBS starts on a different day). If "Perform actions only on condition change" is not set, there is no reliability issue because the macro is running every 300ms, 100% of the time -- which is almost certain to occur before the livestream startup macro is initiated by hotkey. But..., having a macro run 3x a second 100% of the time just to make sure a variable is set accurately based on day of week, doesn't seem like a particularly clean/elegant approach.

If a macro triggered only on day of week shouldn't immediately trigger the next time OBS is run on a different day by design (the macro is ordered above the macro that manages livestream start), than it seems like the next most-elegant way(s) of potentially addressing this need would be:
  • Having a way to set Adv Scene Switcher variables to a program's stdout output (so we can call PowerShell to produce a needed value).
  • Or, a way to set Adv Scene Switcher variables to a program's exit code, and then:
  • Have a way to conditionally set an Adv Scene Switcher variable based on another variable's value (preferably with a value for true and a different value for false).
From what I can tell the ability to do things conditionally within macro actions is currently a bit limited in this regard(?) -- unless I missed something?

So right now I'm resigned to thinking the only way to cleanly set the stream key based on day of week is to have AutoIt set an environment variable to it before launching OBS. (But that's also not as clean as I'd prefer because it means AutoIt has to know about stream keys and, the environment variables won't be set if OBS is started separately from AutoIt.)

TIA...
 

AaronD

Active Member
@Warmuptill, et. al.

Before I jump into a rather detailed set of questions I'd first like to say I greatly appreciate Adv Scene Switcher, and the time and effort you've obviously put into it.

I hope I'm not overlooking something, but after spending several days digging through Adv Scene Switcher functionality (and searching) I can't find a "clean" way to do something that seems fairly common.

We stream twice a week -- once on Wednesday and again on Sunday (worship services). The Wednesday stream has a dedicated stream key and the Sunday stream has a dedicated stream key. There's nothing else different between the services (as far as OBS goes), so only one set of (rather involved) macros is needed to manage the OBS life cycle for both services (which are triggered by hotkeys, either directly, or indirectly through an AutoIT menu).

So..., in our case it seems like we need a way to conditionally set an Adv Scene Switcher variable based on day of week -- in the actions of a macro (not as the trigger). So the hotkey-triggered macro that manages the livestream startup for both Wednesday and Sunday can conditionally set the right stream key based on the day of week before starting the livestream -- within the list of actions for that macro.

I initially tried using a different macro (triggered by date / day of week) to set an Adv. Scene Switcher variable to the appropriate stream key (and then the macro that starts the livestream used that variable to set the OBS stream key before starting the stream). But..., if "Perform actions only on condition change" is enabled, Adv. Scene Switcher doesn't always run a macro triggered only on day of week (my guess is that if Adv. Scene Switcher isn't running when the day of week actually changes at midnight, it doesn't recognize the macro hasn't fired yet when OBS starts on a different day). If "Perform actions only on condition change" is not set, there is no reliability issue because the macro is running every 300ms, 100% of the time -- which is almost certain to occur before the livestream startup macro is initiated by hotkey. But..., having a macro run 3x a second 100% of the time just to make sure a variable is set accurately based on day of week, doesn't seem like a particularly clean/elegant approach.

If a macro triggered only on day of week shouldn't immediately trigger the next time OBS is run on a different day by design (the macro is ordered above the macro that manages livestream start), than it seems like the next most-elegant way(s) of potentially addressing this need would be:
  • Having a way to set Adv Scene Switcher variables to a program's stdout output (so we can call PowerShell to produce a needed value).
  • Or, a way to set Adv Scene Switcher variables to a program's exit code, and then:
  • Have a way to conditionally set an Adv Scene Switcher variable based on another variable's value (preferably with a value for true and a different value for false).
From what I can tell the ability to do things conditionally within macro actions is currently a bit limited in this regard(?) -- unless I missed something?

So right now I'm resigned to thinking the only way to cleanly set the stream key based on day of week is to have AutoIt set an environment variable to it before launching OBS. (But that's also not as clean as I'd prefer because it means AutoIt has to know about stream keys and, the environment variables won't be set if OBS is started separately from AutoIt.)

TIA...
Soo...:
  • You need to keep everything the same, including changes, except for a different specific stream key depending on the day of the week?
  • The macro that sets that stream key also does a lot more that needs to stay the same?
That screams to me to use a variable, set by its own dedicated macro or set of macros (one for each day of the week, with just that one action), but:
  • Setting that variable doesn't work reliably?
Now it seems to me like a "race condition", as the software world calls it. If the code that uses something, happens before the code that sets it, then of course it doesn't work right. If you have variable timing between those two parts, then sometimes it works and sometimes it doesn't, and that variable timing can be wildly random compared to the system speed. Does that sound like what it's doing? If you look at the variable afterwards, is it correct, and that correct value was not used?

Do you have the box checked to "run in parallel"? If my understanding is correct, the macros that don't, run sequentially, down the list in that order. The ones that do, all (nominally) start at the same time as the rest of the list does. What actually happens is that the system schedules them to run in whatever time slots it has available at that moment, and it's effectively random which of those "threads", as we call them, actually runs first. (or which ones actually do run together, on a multithreaded CPU - but the entire system has hundreds of threads, and the CPU only has 4 or 8 or something like that, so the scheduling is still necessary and still ends up sequential in a practically random order)

Multithreaded reliability is not trivial at all! Only if it really would work on completely separate, unsynchronized machines, does the complexity collapse into something easy to think about. So if you need them to interact closely, don't run them in parallel. If you then need that to respond faster, make it scan faster (decrease the interval). Mine is set as fast as it goes, at 50ms, just as a matter of course.
 

AaronD

Active Member
Have a way to conditionally set an Adv Scene Switcher variable based on another variable's value (preferably with a value for true and a different value for false).
I've been saying occasionally for a long time, that this has already become its own programming language. Probably even Turing Complete. Treating it like that, reveals some glaring omissions compared to most programming languages, one of which is inline conditionals.

For the list of non-parallel macros, you might imagine this pseudocode:
C-like:
while(true)
{
    sleep(SCAN_INTERVAL);
 
    if (MACRO_1_CONDITIONS)
    {
        MACRO_1_ACTION_1;
        MACRO_1_ACTION_2;
        MACRO_1_ACTION_3;
        ...
    }
 
    if (MACRO_2_CONDITIONS)
    {
        MACRO_2_ACTION_1;
        MACRO_2_ACTION_2;
        MACRO_2_ACTION_3;
        ...
    }
 
    if (MACRO_3_CONDITIONS)
    {
        MACRO_3_ACTION_1;
        MACRO_3_ACTION_2;
        MACRO_3_ACTION_3;
        ...
    }
 
    ...
}
What it doesn't do, and would be incredibly useful, is:
C-like:
while(true)
{
    sleep(SCAN_INTERVAL);
 
    if (MACRO_1_CONDITIONS)
    {
        MACRO_1_ACTION_1;
        MACRO_1_ACTION_2;
        MACRO_1_ACTION_3;
        ...
    }
 
    if (MACRO_2_CONDITIONS)
    {
        MACRO_2_ACTION_1;
        if (SOMETHING_ELSE)         // <--------
        {
            MACRO_2_ACTION_2;
            MACRO_2_ACTION_3;
        }
        MACRO_2_ACTION_4;
        ...
    }
 
    if (MACRO_3_CONDITIONS)
    {
        MACRO_3_ACTION_1;
        MACRO_3_ACTION_2;
        MACRO_3_ACTION_3;
        ...
    }
 
    ...
}
At that point, why not add a python tab? It's already a mature language with a TON of features in addition to this, and lots of existing documentation and tutorials, and designed for beginners to pick up quickly and "just use". Each condition would then be a function with arguments/parameters that returns true or false, and you'd put them in your own if's and use python's logic to combine them. Actions would also be predefined functions in the new Adv. SS library...

A "code generator" might be useful as well, mostly to discover what exists to be able to use, and that could be heavily based on the existing GUI. Just limit the generator to one condition or one action, and a button to either put on the clipboard or insert at the cursor, the function call that corresponds to what it's set for at that moment.
 
Last edited:
Top