Dragón Groar's NoLimits 2 Script Generator
dg posted on June 2nd, 2025
(Réponse pour théocoaster en Français au dessous)
Hi! Sorry for the weeks of silence. I've been a bit busier than I wanted.
Firstly, théo:
Yes, you can do what you want the same way I explained before, but simply ignoring all the "has to be a perfect circle" and "3D trains" things. You can make a track following the diagram I added.
Then, what you would need to do in the generator is add 3 different exits for the brake block between the switches. The first and second ones are swing-launches towards the same brake requiring the switches to be in the straight position. Remember to enable swing-brake for the cases when the train is forced to stop (swing-brakes are skipped if the train can leave immediately). The third exit leads to the station area and requires the exit switch to be in the curve position.
Now, the magic is to set the "change auto exit" dropdown in the first exit to the second exit, in the second to the third and in the third to the first again. That way, when the train takes the first exit, it does its first lap and changes to the second exit, which makes it do the second lap and change to the exit towards the station to leave the track, after which the next train would take the first exit again.You can, of course, also do that with a transfer table instead of switches, and even do some more complex things if you want.
I hope that solved your doubt now. Don't hesitate to ask back if that's not the case. :)
Next, CCA_Games:
Multimove can't stop the second train until the first one has fully left the station. This might lead to the state "In Station" missing the "center of section" trigger to connect the station handler, which makes the train skip the station. I'll check it anyways, but take into account that if your train is already skipping the trigger, the right fix is not to connect the station handler late (the train will already be out of its home position), you need to adjust the timing of the second train being allowed into the station so that the first train fully leaves before the second reaches the end of the section.
There are some more options on the "continuous advance" dropdown added for next version which might also help, but really, consider adjusting your speeds and block lengths to fix it instead of waiting for my fix, as it will be a fail-safe fix, not a proper one.
Unfortunately, NoLimits 2's API does not provide any way to control a device's acceleration or deceleration, and while it doesn't provide any way for the speed either and I programmed my own, acceleration is a bit harder to program in. The best way I can think of to do it right now is divide your launch in different sections and enable more or less sections depending on the desired acceleration, but that's not something my Script Generator can do right now. You could use my scripts as a base and extend them to either do that or raise the section's speed limit at your desired rate, but be warned, I don't think it's going to be an easy or reliable thing to program.
In summary, yes, NoLimits has some limits ^^
And back to théo:
My Hagrid recreation used a much older version of my Script Generator that didn't really work very well... the script was much more complex and supported much less features, so the swing-launch it does was coded in manually, so while the positioning of the tracks I explain there is still valid, you can't really consider it up to date in terms of scripting.
In any case, if you may add some more details about what you want to do and where you are stuck, I may be able to help better. ^^
(Français pour théo)
Oui, vous pouvez faire ça comme j'avais expliqué avant, mais vous pouvez ignorer tous les « doit être un cercle parfait » et « trains 3D ». Vous pouvez faire la voie comme le dessin j'ajoutais.
Puis, ce que vous devriez faire dans le Script Generator c'est ajouter 3 sorties pour le block de frein entre les switches. La première et la deuxième sont swing-launches vers le même frein et avec les switches dans la position droit. N'oubliez pas activer le swing-brake pour les cas où le train doit s'arrêter (les swing-brakes sont passés si le train peut sortir immédiatement.). La troisième sortie marche vers la voie de la gare et requis que le switch de sortie est dans la position courbe.
La magique maintenant c'est établir le déroulant « Change Auto Exit » (changer sortie automatique) dans la première sortie pour changer vers la deuxième, dans la deuxième sortie vers la troisième et dans la troisième vers la première encore. Comme ça, quand le train fait la première sortie, il fait le premier tour et changes vers la deuxième sortie, qui le fait faire une deuxième tour et changer vers la sortie vers la gare pour sortir de la voie principale, après quoi le prochain train prendra la première sortie encore.Vous pouvez, bien sûr, faire ça avec une table transfert en lieu des switches, et vous pouvez faire des choses plus complexes si vous voulez aussi.
J'espère que ça résout vos doutes. N'hésitez pas de faire une nouvelle question si ce n’est pas le cas. :)
Pour l'autre message :
Ma recréation de Hagrid utilisez une version trop vielle de mon Script Generator qui ne marchait pas trop bien... le script était plus complexe et n'avait pas autant des fonctions, donc le swing-launch il fait était programmé manuellement. Donc, l'explication sur la position des voies est toujours valide, mais pas le script.
Dans tout cas, si vous ajoutez plus de détails sur ce que vous voulez faire et où soit-vous bloqué, je pourrais vous aider mieux. ^^
bonjour dg.
alors déjà merci pour vos suggestions qui vont m'aider , déjà pour mon stryker coaster.
et concernant mon Intamin, pour mieux comprendre voici le schéma de gestion des blocks :
gare -> launch 1 (classique)
-> launch 2 (entrée en front) -> fléche (entrée en front) -> launch 2 (passage en back) -> track switch + trim brake launch -> top hat (passage en back) -> middle brake (passage en back)
-> track switch (passage en back) -> final brake (arrivée en back) -> et vice versa.
petite info , le launch 2 , il n'a plus de track switch , le block est passé en table de transfert de la même maniére que pour hagrid coaster (bien que cette fois elle fait la longueur de la table c'est la longueur du launch block). bien qu'il n'y ait pas de trim brake launch devant (je peux éventuellement le rajouter) mais il y en a un derriére.
si vous avez besoin de plus de précisions je peux vous passer mon discord si vous le souhaitez.
Unfortunately, NoLimits 2's API does not provide any way to control a device's acceleration or deceleration, and while it doesn't provide any way for the speed either and I programmed my own, acceleration is a bit harder to program in. The best way I can think of to do it right now is divide your launch in different sections and enable more or less sections depending on the desired acceleration, but that's not something my Script Generator can do right now. You could use my scripts as a base and extend them to either do that or raise the section's speed limit at your desired rate, but be warned, I don't think it's going to be an easy or reliable thing to program.
In summary, yes, NoLimits has some limits ^^
Ah damn, well good to know. I'll see if I can try to just make more sections.
I seem to be having a issue. Now when I open up the script generator the window looks almost blank with only the header along with placeholders. When I try to open a script I get this error Message:
NullReferenceException: Object reference not set to an instance of an object
ScriptGenerator.LoadManager+<>c__DisplayClass0_0.<Load>g__LoadFromFile|0 (System.String path) (at <7f3f9d38703443589c23d45ffcd23488>:0)
ScriptGenerator.FileBrowserPanelController.Accept () (at <7f3f9d38703443589c23d45ffcd23488>:0)
ScriptGenerator.FolderViewPanel.AcceptItem (ScriptGenerator.FolderItem item) (at <7f3f9d38703443589c23d45ffcd23488>:0)
ScriptGenerator.FolderItem.DoubleClick () (at <7f3f9d38703443589c23d45ffcd23488>:0)
ScriptGenerator.FolderItem.OnButtonClick () (at <7f3f9d38703443589c23d45ffcd23488>:0)
UnityEngine.Events.InvokableCall.Invoke () (at <6869b1608d104370ab4484f8f699b3fc>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <6869b1608d104370ab4484f8f699b3fc>:0)
UnityEngine.UI.Button.Press () (at <a7b1030172e94d56a9a51974caee9dba>:0)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at <a7b1030172e94d56a9a51974caee9dba>:0)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at <a7b1030172e94d56a9a51974caee9dba>:0)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at <a7b1030172e94d56a9a51974caee9dba>:0)
UnityEngine.EventSystems.EventSystem:Update()
CCA_Games posted on June 6th, 2025
I seem to be having a issue. Now when I open up the script generator the window looks almost blank with only the header along with placeholders. When I try to open a script I get this error Message:
NullReferenceException: Object reference not set to an instance of an object
[...]
That's an error I found recently. It only happens when you launch the program for the first time. It tries to create the preferences file and read it back before it's even created, which obviously fails, and the rest just cascades from there. I've already fixed it in the code, and for you it should be "fixed" by just opening the program again (the preferences file should already exist, so there's no longer an issue with it). Needless to say, it will be fixed in the next version ^^
théocoaster posted on June 2nd, 2025
bonjour dg.
alors déjà merci pour vos suggestions qui vont m'aider , déjà pour mon stryker coaster.
et concernant mon Intamin, pour mieux comprendre voici le schéma de gestion des blocks :
gare -> launch 1 (classique)
-> launch 2 (entrée en front) -> fléche (entrée en front) -> launch 2 (passage en back) -> track switch + trim brake launch -> top hat (passage en back) -> middle brake (passage en back)
-> track switch (passage en back) -> final brake (arrivée en back) -> et vice versa.
petite info , le launch 2 , il n'a plus de track switch , le block est passé en table de transfert de la même maniére que pour hagrid coaster (bien que cette fois elle fait la longueur de la table c'est la longueur du launch block). bien qu'il n'y ait pas de trim brake launch devant (je peux éventuellement le rajouter) mais il y en a un derriére.si vous avez besoin de plus de précisions je peux vous passer mon discord si vous le souhaitez.
(Français au dessous)
Again, my Hagrid’s recreation was not using the same Swing-Launch feature you’re using, it was done manually, so I can’t really tell you “what I did” back then.
Now, I still don’t know what your exact problem is, but anyway, you should have set up the following blocks and exits:
- Station -> Launch 1 (forwards, no launch, no swing-launch, no swing-brake)
- Launch 1 -> Launch 2 (forwards, launch, no swing-launch, no swing-brake, transfer required on curve entrance position)
- Launch 2 -> MCBR (backwards, launch, swing-launch, no swing-brake, transfer required on straight entrance position)
- MCBR -> Final (backwards, no? launch, no swing-launch, no swing-brake, final switch required on track position)
- Final -> Station (forwards, no launch, no swing-launch, no swing-brake, final switch required on station position)
The swing-launch on Launch 2 can be starting towards the exit (backwards) or against the exit (forwards), it doesn’t matter because the train comes into the block at a speed. The only difference between both options is where to launch first when the train is stopped or needs to stop.
Your spike should be connected on the transfer track in the same position as the straight entrance, but on the other side of the track. If you want to add trims to either side of the launch, you need to include them as Linked Sections in Launch 2.
And the middle brake (MCBR) might need different parameters, but I’ve considered a classic MCBR. If you want something like Voltron’s booster block, for example, you’d need (backwards, launch, swing-launch, no swing-brake, switch required…) and swing-brake enabled in the exit Launch 2 -> MCBR instead.
Last, you might be encountering a bug in how NoLimits 2 handles blocks in Scripted mode. To sum up, front spikes are not counted in any block (if you enable blocks spline display, they will be black), which messes up with the Swing-Launch. To fix this, what I've done in my tests is set the rest of the spike (usually free normal track) as an Empty (No device) No-Block Lift section and include this section as a Linked Section in the Launch. Interestingly, in Normal (non-scripted) mode, front spikes are considered part of the previous block. I've reported this bug to the NoLimits dev team, but as of today, it's not been fixed yet.
Hope that solves your doubts. If it doesn’t let me know more specifically what problem you are facing or where you are stuck to help you further.
(FR)
Encore, ma recréation de Hagrid’s n’utilise pas la même fonction Swing-Launch que vous utilisez, elle est programmée manuellement, donc je ne peux pas vous dire “qu’est-ce que j’avais fait” là.
Puis, je ne sais pas encore quel est votre problème exactement, mais en tout cas, vous devriez configurer ces blocks et sorties-ci :
- Gare -> Launch 1 (avant, pas de launch, pas de swing-launch, pas de swing-brake)
- Launch 1 -> Launch 2 (avant, launch, pas de swing-launch, pas de swing-brake, voie transfert requis à la position de l’entrée courbée)
- Launch 2 -> MCBR (arrière, launch, swing-launch, pas de swing-brake, voie transfert requis à la position de l’entrée droite)
- MCBR -> Final (arrière, pas de launch ?, pas de swing-launch, pas de swing-brake, switch finale requis à la position de la voie)
- Final -> Gare (avant, pas de launch, pas de swing-launch, pas de swing-brake, switch finale requis à la position de la gare)
Le swing-launch au Launch 2 peut être commençant vers la sortie (arrière) ou contre la sortie (avant), ce n’est pas important parce que le train vient vers le block avec vitesse. La seule différence entre les deux options c’est la direction du premier lancement quand le train est arrêté dans le block.
Votre spike doit se connecter à la table transfert à la même position qui se connecte l’entrée droite, mais dans l’autre côté de la voie.
Et le middle brake (MCBR) peut avoir besoin des paramètres différentes, mais j’ai considéré un MCBR classique. Si vous voulez faire quelque-chose comme le block booster à Voltron, par exemple, vous auriez besoin de (arrière, launch, swing-launch, pas de swing-brake, switch requis…) et swing-brake activé dans la sortie Launch 2 -> MCBR à la place.
Dernière, vous pouvez avoir trouvé un bug avec comme NoLimits 2 s’occupe des blocks au Scripted mode. Pour résumer, les spikes avant ne sont pas considérées une partie d’aucun block (si vous activez la visualisation de spline des blocks, elles sont noires), qui mis en désordre le Swing-Launch. Pour corriger ceci, ce que j’ai fait dans mes tests c’est établir le reste du spike (habituellement voie libre normale) comme une section Lift vide (Device None) No-Block et inclure ce section comme une Linked Section dans le launch. De façon intéressante, au mode Normale (pas Scripted), les spikes avant sont considérées comme une partie du dernier block. J’ai rapporté ce bug aux devs de NoLimits, mais à ce jour, il n'est pas corrigé.
J’espère que ceci résoudre vos doutes. Si c’est pas le cas, faites-moi savoir plus spécifiquement quel problème avez-vous exactement ou où êtes-vous bloqué pour vous aider mieux.
dg posted on June 6th, 2025
That's an error I found recently. It only happens when you launch the program for the first time. It tries to create the preferences file and read it back before it's even created, which obviously fails, and the rest just cascades from there. I've already fixed it in the code, and for you it should be "fixed" by just opening the program again (the preferences file should already exist, so there's no longer an issue with it). Needless to say, it will be fixed in the next version ^^
(Français au dessous)
Again, my Hagrid’s recreation was not using the same Swing-Launch feature you’re using, it was done manually, so I can’t really tell you “what I did” back then.
Now, I still don’t know what your exact problem is, but anyway, you should have set up the following blocks and exits:
- Station -> Launch 1 (forwards, no launch, no swing-launch, no swing-brake)
- Launch 1 -> Launch 2 (forwards, launch, no swing-launch, no swing-brake, transfer required on curve entrance position)
- Launch 2 -> MCBR (backwards, launch, swing-launch, no swing-brake, transfer required on straight entrance position)
- MCBR -> Final (backwards, no? launch, no swing-launch, no swing-brake, final switch required on track position)
- Final -> Station (forwards, no launch, no swing-launch, no swing-brake, final switch required on station position)
The swing-launch on Launch 2 can be starting towards the exit (backwards) or against the exit (forwards), it doesn’t matter because the train comes into the block at a speed. The only difference between both options is where to launch first when the train is stopped or needs to stop.
Your spike should be connected on the transfer track in the same position as the straight entrance, but on the other side of the track. If you want to add trims to either side of the launch, you need to include them as Linked Sections in Launch 2.
And the middle brake (MCBR) might need different parameters, but I’ve considered a classic MCBR. If you want something like Voltron’s booster block, for example, you’d need (backwards, launch, swing-launch, no swing-brake, switch required…) and swing-brake enabled in the exit Launch 2 -> MCBR instead.Last, you might be encountering a bug in how NoLimits 2 handles blocks in Scripted mode. To sum up, front spikes are not counted in any block (if you enable blocks spline display, they will be black), which messes up with the Swing-Launch. To fix this, what I've done in my tests is set the rest of the spike (usually free normal track) as an Empty (No device) No-Block Lift section and include this section as a Linked Section in the Launch. Interestingly, in Normal (non-scripted) mode, front spikes are considered part of the previous block. I've reported this bug to the NoLimits dev team, but as of today, it's not been fixed yet.
Hope that solves your doubts. If it doesn’t let me know more specifically what problem you are facing or where you are stuck to help you further.
(FR)
Encore, ma recréation de Hagrid’s n’utilise pas la même fonction Swing-Launch que vous utilisez, elle est programmée manuellement, donc je ne peux pas vous dire “qu’est-ce que j’avais fait” là.
Puis, je ne sais pas encore quel est votre problème exactement, mais en tout cas, vous devriez configurer ces blocks et sorties-ci :
- Gare -> Launch 1 (avant, pas de launch, pas de swing-launch, pas de swing-brake)
- Launch 1 -> Launch 2 (avant, launch, pas de swing-launch, pas de swing-brake, voie transfert requis à la position de l’entrée courbée)
- Launch 2 -> MCBR (arrière, launch, swing-launch, pas de swing-brake, voie transfert requis à la position de l’entrée droite)
- MCBR -> Final (arrière, pas de launch ?, pas de swing-launch, pas de swing-brake, switch finale requis à la position de la voie)
- Final -> Gare (avant, pas de launch, pas de swing-launch, pas de swing-brake, switch finale requis à la position de la gare)
Le swing-launch au Launch 2 peut être commençant vers la sortie (arrière) ou contre la sortie (avant), ce n’est pas important parce que le train vient vers le block avec vitesse. La seule différence entre les deux options c’est la direction du premier lancement quand le train est arrêté dans le block.
Votre spike doit se connecter à la table transfert à la même position qui se connecte l’entrée droite, mais dans l’autre côté de la voie.
Et le middle brake (MCBR) peut avoir besoin des paramètres différentes, mais j’ai considéré un MCBR classique. Si vous voulez faire quelque-chose comme le block booster à Voltron, par exemple, vous auriez besoin de (arrière, launch, swing-launch, pas de swing-brake, switch requis…) et swing-brake activé dans la sortie Launch 2 -> MCBR à la place.Dernière, vous pouvez avoir trouvé un bug avec comme NoLimits 2 s’occupe des blocks au Scripted mode. Pour résumer, les spikes avant ne sont pas considérées une partie d’aucun block (si vous activez la visualisation de spline des blocks, elles sont noires), qui mis en désordre le Swing-Launch. Pour corriger ceci, ce que j’ai fait dans mes tests c’est établir le reste du spike (habituellement voie libre normale) comme une section Lift vide (Device None) No-Block et inclure ce section comme une Linked Section dans le launch. De façon intéressante, au mode Normale (pas Scripted), les spikes avant sont considérées comme une partie du dernier block. J’ai rapporté ce bug aux devs de NoLimits, mais à ce jour, il n'est pas corrigé.
J’espère que ceci résoudre vos doutes. Si c’est pas le cas, faites-moi savoir plus spécifiquement quel problème avez-vous exactement ou où êtes-vous bloqué pour vous aider mieux.
merci dg. alors oui pour le "trim lift" je l'ai fait mais avec un trim brake (non launch) en mettant la décélération au plus faible. ce qui permet de maintenir le block en occupation.
merci beaucoup pour tes aides précieuses , que je vais bien prendre soin.
cordialement , théo urbain.
My Multi Move Issue, which I've talked about before, seems to happen on every coaster I've used Multi Move on. After a good number of cycles with a quick dispatch I see the train forgets the station exist and continues on while the station block says (In Station). This seems to happen when the train leaves the station before the train behind it parks in the block behind it. It continues and by the time it's in the station the train in front is on a linked section but not the station.
CCA_Games posted on June 11th, 2025
[...] After a good number of cycles with a quick dispatch I see the train forgets the station exist and continues on while the station block says (In Station). [...] It continues and by the time it's in the station the train in front is on a linked section but not the station.
Huh, it's weird and possible at the same time. I've been adding some tweaks to multimove with linked sections after your initial comment and I've detected some weird behaviour. Last time I touched the code a few days ago, I left it pending to solve an issue with the end-of-section detection when the section has linked sections, which I hope fixes all that. And after I figure that out, I think I can release the update I've been preparing. You'll have more multimove options by then (with and without Linked Sections) and those considering Linked Sections should work better hopefully.
For now, if you can avoid Linked Sections at the exit of a multimove station, everything will work better. You can always just leave the transports after the station as regular transports and they'll work automatically like they do in normal mode. Linking them to the station just makes them work in unison with the station and extend the block until them, but again, it may give issues with multimove, so for now my suggestion is to avoid that...
Hello. I'm having trouble figuring out how to have dual (inline) stations for my recreation of Maverick at Cedar Point. When dispatched, the first train advances out of Station 1 and into the first launch (like it should), but then the second train from Station 2 stops in Station 1 and repeats the loading process. The second train is supposed to pass through Station 1 and wait at the beginning of the first launch until the first train has cleared the Launch 1 Block.
Not 100% sure on this but set both stations to 1 pass and it should work well if you have an even amount of trains. Make sure to do this in the script generator.
ur.boy_kevinnn posted on June 23rd, 2025
Hello. I'm having trouble figuring out how to have dual (inline) stations for my recreation of Maverick at Cedar Point. When dispatched, the first train advances out of Station 1 and into the first launch (like it should), but then the second train from Station 2 stops in Station 1 and repeats the loading process. The second train is supposed to pass through Station 1 and wait at the beginning of the first launch until the first train has cleared the Launch 1 Block.
Hello ur.boy_kevinnn,
As CCA-Games has indicated, you need to use the "Passes" setting to let trains pass through stations without using them. Unfortunately, NoLimits 2 doesn't let scripts read the Passes value as set on the Editor's Block Settings window, so I included it independently in the Script Generator. You can find it as "Station passes" on the Block Properties window. For your specific configuration, set it on both stations to "1" (skip 1 train between each train you make stop in the station).
And a small extra detail, that should work well regardless of how many trains there are in the track (odd or even). If the number of trains is even, each train will always stop in the same station, but if the number of trains is odd, the trains will stop each time on a different station. Maverick has 6 trains (source: RCDB), but most of these coasters that have two inline loading stations, as far as I know, usually operate with an odd number of trains, which normally results in less waiting for the trains (and guests) at the end of the ride before being able to enter the stations. I don't know if that's Maverick's case, since I've never been to Cedar, so if you've been or know people that have been, trust them better than me on that.
(To clarify, they may have an even number of trains, but run an odd number, keeping the extra train for maintenance and repairs while having the ride running at 100% capacity.)
P.S.: As far as I know, Maverick also has a bit of multi-move in its stations, so you can also enable that with the "Simultaneous Advance" setting ;)
Thank you so much CCA-Games and dg! That works, but when using multi-move, the train in the waiting area collides with the train from Station 2 as it is making its way through Station 1. It seems it is trying to advance to the first launch as well (when it should be stopping in Station 1). When not using multi-move, everything does what it's supposed to, so I guess there's something wrong with the feature.
ur.boy_kevinnn posted on June 23rd, 2025
[...] when using multi-move, the train in the waiting area collides with the train from Station 2 as it is making its way through Station 1 [...]
The feature is not wrong per-se, but it's a simple one and relies in your fine-tuning of the coaster to prevent collisions. You're overriding the block system after all...
It works best if all of the blocks involved in the multi-move have the same transport speed and acceleration/deceleration and are the same length. Besides, I recommend spacing the trains an extra bit by selecting the "when end of section reached" option instead of "when starting to leave", which requires a much more precise setting.
In any case, I think I will add an extra warning and tip on the feature's help for next version.
dg Yep, there were some indiscrepancies between the acceleration and deceleration values. Just curious, when do you plan for the next update to come out?
ur.boy_kevinnn posted on June 24th, 2025
[...] when do you plan for the next update to come out?
I've been trying to fix some issues I found with the multimove feature when paired with Linked Sections. As soon as I finish fixing all the stuff around that, I will upload the next update with all the things I've been mentioning lately. I don't really have an ETA though, because I'm doing it on my free time as you know, so I really pick it up when I have time and feel motivated to do it.
Do you know if there is a way to keep the brakes closed when a train is on the block before the trigger, as well as when it's free? I have a final brake that also acts as a final trim, so when the Train is going through the layout, the brakes are open since it's on the block. When it's Idle or Free, the brakes are closed like I want them. I'd like it so they stay closed until the train hits the trigger on the block, then it can lower when it's at the target speed. Also, when I change the brake behavior, it gives me an error when the ride starts: Unknown symbol 'BRAKE_BEHAV_NORMALLY_OPEN'. I'm on V1.2.1 of the script Generator, and I generated the first version of the script on this version.
Yes, that's a bug I'm aware of and have already fixed for the next version. It's a stupid bug, tbh, but I somehow missed it last time.
By setting it to normally open, as you're trying to do, you'd be able to do what you want. I'm also planning, although most likely not for the next version, which I want to release as soon as I can fix the issues with Multi-Move and Linked Sections, to allow to select a brake behaviour independently for each brake.
Meanwhile, if you want to manually fix the error, set the brake behaviour to what you want and then edit your script and substitute BRAKE_BEHAV_NORMALLY_OPEN with BRAKE_BEHAV_NORM_OPEN and the error should disappear.
Something I'm not sure I've mentioned before, but wanted to make sure so it might be integrated into the next update. When selecting any multi-move option, it removes the swing launch ability, vice versa. This makes sense for why one would disable the other; however, this disables it throughout the entire block generator with no way that I see to reset it.
Well spotted!
That's an easy-to-fix reset bug.
Essentially, it's not that it's disabled throughout the entire block generator or that there's no way to reset it. It's that the block exit panel was not resetting the availability status of those fields when loading a new block exit. I've already added the appropriate resets and it should be working next version.
Meanwhile, it's enough with forcing the panel to recheck the availability status again by changing the other option to "Disabled". That should enable both options again.
Thanks for telling me!
I'm trying out the script extension thing. I made a script that sets the lift hill speed to a slower speed if a specified block contains a train. I was wondering if there is a way to see if a train is on a section. I've been using .isTrainOnSection() method, and I just get an error that it's an Unknown method.
EDIT: Also, something I wanted to do for a future coaster is have an unload station under permanent bypass when there are a certain number of trains. Would I just get the amount of trains on storage tracks, or is there a train count that excludes trains in storage areas?
It'd be trains in storage areas, however in the real world this would be done by disabling the station itself rather than by counting circuiting trains.
CCA_Games posted on July 18th, 2025
I'm trying out the script extension thing. I made a script that sets the lift hill speed to a slower speed if a specified block contains a train. I was wondering if there is a way to see if a train is on a section. I've been using .isTrainOnSection() method, and I just get an error that it's an Unknown method.
Yes, it should be the .isTrainOnSection() method from any BlockSetup object returned by the BlockSetup.findBlock([...]) function. You also have .isTrainOnBlock(), which additionally returns true if a train is not on the block section itself (or any Linked Sections), but is within the block area (aka block is considered as "OCCUPIED" by NoLimits). I'm not sure why it's giving you that error, but feel free to copy-paste here the complete error and the relevant part of the script if you need more help.
EDIT: Also, something I wanted to do for a future coaster is have an unload station under permanent bypass when there are a certain number of trains. Would I just get the amount of trains on storage tracks, or is there a train count that excludes trains in storage areas?
There's no predefined function neither in NoLimits nor in the generated scripts to count the trains excluding those in storage areas, but you can easily loop through the trains and count only those that are not lashed to track (see the Scripting API > Class Overview > com.nolimitscoaster.Train > .isLashedToTrack() boolean function). Since parked trains are lashed to track always, that will give you the amount of trains that are actually out on the main track.
Additionally, as ThatFlyerGuy1 mentions:
It'd be trains in storage areas, however in the real world this would be done by disabling the station itself rather than by counting circuiting trains.
You can also set some kind of switch to enable or disable the station. You can use an invisible transfer track with minimal switch time, add it to your generated script and read its value from your extension script, then tweak the station accordingly. Then, by switching to manual block mode, you can enable or disable the unload station easily by switching the transfer table.
This is the Script:
import com.nolimitscoaster.*;
import dgScriptGenerator.*;
public class VariableLifthill extends Script {
BlockSetup TheLiftHill;
BlockSetup Nextblock;
SectionSetup A_Section;
public bool onInit()
{
Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
DgBlockSystemController blockzonemanager = DgScriptGeneratorManager.getBlockSystemController(coaster);
TheLiftHill = BlockSetup.findBlock(blockzonemanager.getBlocks(), "Lift");
Nextblock = BlockSetup.findBlock(blockzonemanager.getBlocks(), "Final Frictions");
A_Section = SectionSetup.findSection(blockzonemanager.getSections(), "Block Extender 1");
return true;
}
public void onNextFrame(float tick)
{
if (Nextblock != null)
{
if (Nextblock.isTrainOnBlock() || A_Section.isTrainOnSection())
{
TheLiftHill.limitSpeedMph(2.5);
}
else
{
TheLiftHill.limitSpeedMph(0);
}
}
}
}
Have you checked to see if A_Section isn't null? Doing that should help debug your issue. Are you certain your section name is accurate?
I think the issue is because it was a SectionSetup object and not a BlockSetup. I fixed it and got the same result by making it a block with 0g of braking force, and making it a disconnected block. This was for a Gravity Group Shuttle Coaster, where I wanted a slower lift if everything wasn't set for the train to release from the lift. I also took ThatFlyerGuy1 and dg's method of having a fast switch track position determine whether or not Unload Station was skipped. I did it this way as It would probably be easier programming-wise, but also because, let's say a park didn't have staffing but wanted all trains running they could disable the Unload Station without removing capacity. I'm not sure how useful that is, though.
EDIT: After Further Testing With 1 Less Train, a Train Comes back in time to achieve Theoretical Capacity without stopping in the Unload Station, so I made a second script that just sees how many trains are on the Storage Tracks and disables or enables the Unload Station.

(Réponse pour théocoaster en Français au dessous)
Hi! Sorry for the weeks of silence. I've been a bit busier than I wanted.
Firstly, théo:
Yes, you can do what you want the same way I explained before, but simply ignoring all the "has to be a perfect circle" and "3D trains" things. You can make a track following the diagram I added.
Then, what you would need to do in the generator is add 3 different exits for the brake block between the switches. The first and second ones are swing-launches towards the same brake requiring the switches to be in the straight position. Remember to enable swing-brake for the cases when the train is forced to stop (swing-brakes are skipped if the train can leave immediately). The third exit leads to the station area and requires the exit switch to be in the curve position.
Now, the magic is to set the "change auto exit" dropdown in the first exit to the second exit, in the second to the third and in the third to the first again. That way, when the train takes the first exit, it does its first lap and changes to the second exit, which makes it do the second lap and change to the exit towards the station to leave the track, after which the next train would take the first exit again.
You can, of course, also do that with a transfer table instead of switches, and even do some more complex things if you want.
I hope that solved your doubt now. Don't hesitate to ask back if that's not the case. :)
Next, CCA_Games:
Multimove can't stop the second train until the first one has fully left the station. This might lead to the state "In Station" missing the "center of section" trigger to connect the station handler, which makes the train skip the station. I'll check it anyways, but take into account that if your train is already skipping the trigger, the right fix is not to connect the station handler late (the train will already be out of its home position), you need to adjust the timing of the second train being allowed into the station so that the first train fully leaves before the second reaches the end of the section.
There are some more options on the "continuous advance" dropdown added for next version which might also help, but really, consider adjusting your speeds and block lengths to fix it instead of waiting for my fix, as it will be a fail-safe fix, not a proper one.
Waking_Giants:
Unfortunately, NoLimits 2's API does not provide any way to control a device's acceleration or deceleration, and while it doesn't provide any way for the speed either and I programmed my own, acceleration is a bit harder to program in. The best way I can think of to do it right now is divide your launch in different sections and enable more or less sections depending on the desired acceleration, but that's not something my Script Generator can do right now. You could use my scripts as a base and extend them to either do that or raise the section's speed limit at your desired rate, but be warned, I don't think it's going to be an easy or reliable thing to program.
In summary, yes, NoLimits has some limits ^^
And back to théo:
My Hagrid recreation used a much older version of my Script Generator that didn't really work very well... the script was much more complex and supported much less features, so the swing-launch it does was coded in manually, so while the positioning of the tracks I explain there is still valid, you can't really consider it up to date in terms of scripting.
In any case, if you may add some more details about what you want to do and where you are stuck, I may be able to help better. ^^
(Français pour théo)
Oui, vous pouvez faire ça comme j'avais expliqué avant, mais vous pouvez ignorer tous les « doit être un cercle parfait » et « trains 3D ». Vous pouvez faire la voie comme le dessin j'ajoutais.
Puis, ce que vous devriez faire dans le Script Generator c'est ajouter 3 sorties pour le block de frein entre les switches. La première et la deuxième sont swing-launches vers le même frein et avec les switches dans la position droit. N'oubliez pas activer le swing-brake pour les cas où le train doit s'arrêter (les swing-brakes sont passés si le train peut sortir immédiatement.). La troisième sortie marche vers la voie de la gare et requis que le switch de sortie est dans la position courbe.
La magique maintenant c'est établir le déroulant « Change Auto Exit » (changer sortie automatique) dans la première sortie pour changer vers la deuxième, dans la deuxième sortie vers la troisième et dans la troisième vers la première encore. Comme ça, quand le train fait la première sortie, il fait le premier tour et changes vers la deuxième sortie, qui le fait faire une deuxième tour et changer vers la sortie vers la gare pour sortir de la voie principale, après quoi le prochain train prendra la première sortie encore.
Vous pouvez, bien sûr, faire ça avec une table transfert en lieu des switches, et vous pouvez faire des choses plus complexes si vous voulez aussi.
J'espère que ça résout vos doutes. N'hésitez pas de faire une nouvelle question si ce n’est pas le cas. :)
Pour l'autre message :
Ma recréation de Hagrid utilisez une version trop vielle de mon Script Generator qui ne marchait pas trop bien... le script était plus complexe et n'avait pas autant des fonctions, donc le swing-launch il fait était programmé manuellement. Donc, l'explication sur la position des voies est toujours valide, mais pas le script.
Dans tout cas, si vous ajoutez plus de détails sur ce que vous voulez faire et où soit-vous bloqué, je pourrais vous aider mieux. ^^