All sequencers consist of two basic parts: Actions and Transitions.
It's usually best to have some sort of "placeholder" to keep track of where the sequencer is at: an integer representing the current step is good for that, rather than merely driving outputs in some sort of sequential manner. You say you are using an integer, so that's good.
Your sequencer logic will then follow the basic format of:
-[On this step]-----{When these conditions are true}-----(Go to this step)-
Or, perhaps as a sample line:
+---- EQU --+ START_PB +---- MOV --+
---| StepTag |------| |-------| 10 |
| 0 | | StepTag |
+-----------+ +-----------+
Elsewhere, or here, you can also add some logic to drive the specific I/O.
+---- EQU --+ Motor01
---| StepTag |----+---( )
| 10 | |
+-----------+ |
|
+---- EQU --+ |
---| StepTag |----+
| 20 |
+-----------+
For troubleshooting, I usually prefer to set a bit, "OnStep##", rather than use the EQU as my indicator of what step I'm on, and put all the
EQU StepTag OTE OnStep##
logic at the end.
This allows me to quickly find what happens on step 75 without having to sift through dozens of EQU statements to find what is holding up that step, and to find what I/O that step is driving. Everything I need to know about step 75 is crossreferenced by OnStep75.
But that's a personal preference.