Dragón Groar's NoLimits 2 Script Generator
dg
bonjour dg , alors je tiens encore à vous remercier pour vous conseils. malheureusement pour mon stryker coaster à multipasse , je n'arrive à rien , j'ai toujours un probléme quelque-part.
est ce que je peux vous passer le dossier de ma map , ou éventuellement peut-être rajouter une fonction "plusieurs passages" pour les zones de freins.
One thing I think would be cool is if you could sync transfer tracks for a dueling coaster like maybe the new YoY or possibly stardust racers
Something for the Next update I would recommend is to note that having a Swing-Brake not trigger requires the exit block parameters launch function check. I spent a good moment wondering why a Swing-Brake kept triggering with 1 train every time.
if i have no scripting experience will this be of help to me because i want to use complex scripts in my coasters but coding does not really make sense to me and would also take awhile to learn.
ugh26 posted on August 7th, 2025
if i have no scripting experience, will this be of help to me because i want to use complex scripts in my coasters, but coding does not really make sense to me, and would also take a while to learn.
Yeah, this helps as you don't have to code unless you're doing something very complex.
CCA_Games posted on August 8th, 2025
Yeah, this helps as you don't have to code unless you're doing something very complex.
Ok I've tried the program a bit and I'm just completely lost on most the buttons mean and how to get any custom script to work. Is there any more in depth explanations than what is in the quick help panel of the program?
A question I have is how to use the dive coaster release mode on a lift. It doesn’t seem to work as every time the train just rolls right through.
I cannot load into the program at all if you guys could check into it thatd be great
I was able to get the script into Nolimits 2, but I am getting an error. Any ideas?
Error in File in Line 336, Column 1: Not a package: ?s
I made a tutorial for this tool.
Hi ive been trying to use this program and its pretty cool, you must of worked really hard on it! However, whenever i use the sccript it gives me i always get this error: "Error in File 'BlockSections.nlvm' in Line 135, Column 1: Not a package: ?s
...1 error(s), 0 warning(s)", do you know how to fix it because its getting abit annoying now
Please could you help me, whenever i use the script and try to play my coaster, the train doesnt move and i get this error: Error in File 'BlockSections.nlvm' in Line 140, Column 1: Not a package: s
...1 error(s), 0 warning(s)
HarryHendo20 posted on October 28th, 2025
Please could you help me, whenever i use the script and try to play my coaster, the train doesnt move and i get this error: Error in File 'BlockSections.nlvm' in Line 140, Column 1: Not a package: s
...1 error(s), 0 warning(s)
Did u copy the 2nd script into your park folder ?
Im getting an error that states "at private void xcl.processBlock(dgScriptGenerator.BlockSetup) in file /Users/[my name]/documents/com.nolimitscoaster.nolimits2/Giga xcl 2/xcl.nlvm in line 858", "at public void xcl.onNextFrame(float) in file /Users/[my name]/Documents/com.nolimitscoaster.nolimits2/Giga xcl 2/xcl.nlvm in line 638" and "at public final void com.nolimitscoaster.Script.run()" I have no clue what this could be for. Does anyone know how to fix this?
does some1 know how to make a dual load station setup? ive got a switch track to enter trains to the left then to the right and again to the left and so on but on exit, this didnt really work and idk how to fix it. from what i can tell, the left station tries to position the switch, then the right, the right train leaves and as soon as the launch block is clear, the same happens again with the right train leaving the station, instead of the left one
funnily enough the default closed circut mode has no problems with this setup
i'd use a custom script but idk how to do the multi move
my setup is:
Wait=>StationFork=> (Station L1 => Station L2) OR (R1 => Station R2) => StationMerge => L1_Block => Rest of the circut and irrelevant blocks => Wait
this setup contains no swing launches/swing brakes
i tried to modify the code but i dont understand it
edit: part of the problem, i think, is that the dual stations are completely overkill/useless.
the problem is, that the limiting factor for the dispatch arent the stations, but the launch block clearence
CaoskingYT posted on January 25th, 2026
does some1 know how to make a dual load station setup? ive got a switch track to enter trains to the left then to the right and again to the left and so on but on exit, this didnt really work and idk how to fix it. from what i can tell, the left station tries to position the switch, then the right, the right train leaves and as soon as the launch block is clear, the same happens again with the right train leaving the station, instead of the left one
funnily enough the default closed circut mode has no problems with this setup
i'd use a custom script but idk how to do the multi move
my setup is:
Wait=>StationFork=> (Station L1 => Station L2) OR (R1 => Station R2) => StationMerge => L1_Block => Rest of the circut and irrelevant blocks => Wait
this setup contains no swing launches/swing brakes
i tried to modify the code but i dont understand it
What you need to do is, at the block right before the switc,h go into the exit configuration and go into the block exit setup and then you can have it switch between exits. This is within the program itself.
CCA_Games posted on January 25th, 2026
What you need to do is, at the block right before the switc,h go into the exit configuration and go into the block exit setup and then you can have it switch between exits. This is within the program itself.
i fixed it by timing how long a train takes to exit (160s ish so dual load station needed frfr) and just setting the minimum dispatch intervall to that. now this behaviour i mentioned only occurs ones and after that everything works out
ur idea seems interesting but i dont know how good it would work in practice
tbh i dont really like my solution but that is only because 160 seconds makes the entire system just obsolete
hey does any1 know how to open files on linux? i can get it running, generate scripts etc but i need to copy them out manually. if i try to do anything with files, like opening or saving them, the program just freezes. i run the app via proton and other apps can open files just fine via the proton file explorer emulator thingy. is the program using a custom file browser? if yes why and as a simple fix, if there is a good reason to do so, if this is the case, could you allow pasting code from clipboard?
an addidtion request i have would be some information on why certain features are unavailable (like multimove)
i dont know if this is a bug, but when i have a swing launch after adding a multimove station, both features are permanently disabled on the entire coaster
Hi guys!
Sorry for being away for so long, but I've been having some weird issues with my computer lately that prevented me from working with NL2 normally. Add to that a weird breaking bug I found before that happened, when testing the last version I was preparing for release, which got me stuck for weeks until I temporarily moved to other urgent stuff in my life, and this has been close to dead for almost a year. That one's on me, sorry.
I've recently fixed my computer (well, kinda, but enough for NL2 in any case) and I've just got back to this project again, and good news, the bug I couldn't fix earlier, I think I've fixed it quite fast this time... It only took not remembering what I'd done earlier and looking into it again from the start with a fresh mind... (I still have to make sure I fixed it right though...)
So, I'll try to test 1.2.2 (or maybe it'll be 1.3.0 by now, idk yet) during the next days and slowly catch up with the conversation here, answer your unanswered questions and for those that have DM'd me, I'll also check your chats and try to answer hopefully during next week.
Sorry for being gone for so long, but at least for now, I'm back. ;)
P.S.: I'll soon let you know the exact updates list for 1.2.2 (or whatever number it finally is), so stay tuned!
Ok, let's start answering stuff.
For everyone mentioned here, in any case, I'm about to release version 1.3.0 with a lot of fixes (the biggest ones will be listed, but I also did lots of minor ones that won't), so feel free to recheck in the new version as soon as it's out. Other than that...
CCA_Games posted on July 28th, 2025
One thing I think would be cool is if you could sync transfer tracks for a dueling coaster like maybe the new YoY or possibly stardust racers
I've considered adding a function to make easier to do something like the dual transfer tracks found in some old Arrows (at least to prevent one transfer track colliding with the other). That sounds like it could be useful for what you say as well, but I haven't made any progress towards it yet and I don't know if I will end up adding that...
CCA_Games posted on July 30th, 2025
Something for the Next update I would recommend is to note that having a Swing-Brake not trigger requires the exit block parameters launch function check. I spent a good moment wondering why a Swing-Brake kept triggering with 1 train every time.
Fair point, I've tried to clarify this better in the feature's help.
CCA_Games posted on August 30th, 2025
A question I have is how to use the dive coaster release mode on a lift. It doesn’t seem to work as every time the train just rolls right through.
Unfortunately that doesn't seem to work at all in scripted mode. Neither does the shuttle coaster's lifts "2nd pass gentle release", which I bet works in a similar way internally. That's just something we can't control from a script unless the NL2 devs add the corresponding functions and variables in their API.
123Rollercoasters123 posted on October 3rd, 2025
I cannot load into the program at all if you guys could check into it thatd be great
Hi! I'm not sure if you're still experiencing issues or even checking this topic, but if you still can't launch it, feel free to let me know more details so that I can help you. For example, if you're using Windows or Mac, which OS version and what's happening when the program doesn't load (is there an error?).
B0B posted on October 9th, 2025
I was able to get the script into Nolimits 2, but I am getting an error. Any ideas?
Error in File in Line 336, Column 1: Not a package: ?sHarryHendo20 posted on October 26th, 2025
Hi ive been trying to use this program and its pretty cool, you must of worked really hard on it! However, whenever i use the sccript it gives me i always get this error: "Error in File 'BlockSections.nlvm' in Line 135, Column 1: Not a package: ?s
...1 error(s), 0 warning(s)", do you know how to fix it because its getting abit annoying now
It might be because you're using an invalid name on the coaster, a block or other element. If you're still having the issue, can you please send me your scripts so that I can check? I have improved the invalid name detection on the next version, but still it'd be useful to know what you're doing wrong.
bjornmeansbear posted on December 6th, 2025
Im getting an error that states "at private void xcl.processBlock(dgScriptGenerator.BlockSetup) in file /Users/[my name]/documents/com.nolimitscoaster.nolimits2/Giga xcl 2/xcl.nlvm in line 858", "at public void xcl.onNextFrame(float) in file /Users/[my name]/Documents/com.nolimitscoaster.nolimits2/Giga xcl 2/xcl.nlvm in line 638" and "at public final void com.nolimitscoaster.Script.run()" I have no clue what this could be for. Does anyone know how to fix this?
Hi! That part you copied is not actually the error, it's the location of the error in your script, which is useless to me without your script, so if you're still having the issue, please copy the previous line to those as well and ideally send me your script if you can so that I can see what the error could be about.
CaoskingYT posted on January 25th, 2026
does some1 know how to make a dual load station setup? [...]
Yes, there is always some fighting between both stations to try and get control of the switch. I remember studying how to fix this and not reaching any useful idea about it, but I can always try again. Besides, increasing the load/dispatch times, which would be the reallistic reason why you'd need a dual station, fixes it as you've seen. What CCA_Games told you would be what you'd need to do on the waiting brake to split the trains to each station upon their arrival.
CaoskingYT posted on January 26th, 2026
hey does any1 know how to open files on linux? i can get it running, generate scripts etc but i need to copy them out manually. if i try to do anything with files, like opening or saving them, the program just freezes. i run the app via proton and other apps can open files just fine via the proton file explorer emulator thingy. is the program using a custom file browser? if yes why and as a simple fix, if there is a good reason to do so, if this is the case, could you allow pasting code from clipboard?
Yes, the program was using a custom file browser because Unity doesn't like the native one at all. I found a plugin that lets me implement the native browser, though, so that will hopefully be fixed by next version. Let me know if it works for you!
CaoskingYT posted on January 28th, 2026
an addidtion request i have would be some information on why certain features are unavailable (like multimove)
i dont know if this is a bug, but when i have a swing launch after adding a multimove station, both features are permanently disabled on the entire coaster
And last, but not least, yeah, that's a bug... It should be fixed on next version. Adding that information dynamically could prove a bit tricky to implement, so don't expect that soon, but I take note. Besides, with the bug fixed, there shouldn't be any unavailability cases that are not explained in the features' helps, and which are clearly incompatible.
UPDATE 1.3.0 RELEASED
Now I'm really back on track! Despite taking this long, I'll still consider this a minor update, though. Here come some of the fixes to the things you've been talking about and a couple of new things to play with.
The main updates are (other minor fixes might have happened as well):
- Fixed: swing launches didn't reset speed limits correctly.
- Fixed: on the first launch of the Generator, a exception would appear related to not finding the preferences file. This is properly handled now.
- Added: on the first launch of the Generator, there will now be a welcome message and the settings will automatically show.
- Fixed: speed units were being displayed incorrectly on the Block Exit panel.
- Fixed: brake behaviour gave out errors in NoLimits 2 if it wasn't "Auto".
- Fixed: entrance and exit Linked Sections weren't being set properly in the script, so they didn't work.
- Fixed: simultaneous advance (aka multimove) had some edge cases when it wouldn't work well if a Linked Section was out of what NoLimits 2 considers to be the block.
- Added: simultaneous advance: more options for points to start advancing the next train
- Added: experimental native file browser support. The custom built-in file browser can still be selected from the settings menu if the native one doesn't work.
- Script extension: added more isTrain...() check methods, added getTrainsOnSection(), added getNumberOfTrainsOnSection(); all of them considering Linked Sections.
- Added: new macOS distribution system, now with DMG packages (zips will still be available just in case).
As always, the download link is updated in the first post.
Please note: I can't test macOS properly, and especially the inclusion of the native file browser support might have made that build unstable (introducing crashes). If you experience any issue let me know and, while I can't make any promise about it, I'll do my best to fix it.
ThatFlyerGuy1 posted on January 14th, 2025
It totally is possible.
Hello ThatFlyerGuy1, how did you go about this?
dg posted on February 11th, 2025
With the current script generator version you have two options, the easy, crappy one and the harder, nicer one.
The easy one is, if you only want the train to be released faster or slower, just set the lift speed on NL2 to the faster of both speeds and set the maximum speeds either for the lift exit towards the next block or for the previous block's exit to the lift (in the entrance section). The crappy part is that you only get two speeds: before and after the lift trigger.
The harder one sadly requires a small bit of custom scripting. My scripts intentionally expose a few functions that you can use, for example, for that. You can check the help topic "Advanced: extend script" for further detail, but if you know how to make a simple TrackTriggerListener script, just do that and then get your coaster's BlockSystemController script like the help topic indicates. Then, you can use:
BlockSetup liftBlock = BlockSetup.findBlock(blockSystemController.getBlocks(),"YOUR_LIFT_NAME");and use the functions
liftBlock.limitSpeed(double speedLimit); // speedLimit is taken in m/s liftBlock.limitSpeedKmh(double speedLimit); // speedLimit is taken in km/h liftBlock.limitSpeedMph(double speedLimit); // speedLimit is taken in mphto apply a speed limit to the lift when the train hits certain triggers.
I've actually been looping around how to let this happen automatically based on trigger names, but NL2's API doesn't let me check trigger names if I don't already know a trigger's full name to get a reference to it first, so it's hard to think of a good way to do it...For next version I added to my notes based on CCA_Games' feedback to include a function to allow for more "speed areas" so to say (different speeds for "train entering section", "train fully inside but before trigger", "train passed trigger, not yet actually leaving section", "first car past section end (leaving)") but I still have lots to code for that to work...
If you need further explanation or clarification, including not knowing how to make a simple TrackTriggerListener, don't hesitate to ask ;)
Hello DG,
I tried the easy option and I could not get the lift to behave in the way I need where it accelerates some of the way up. I have zero scripting knowledge so the second option while helpful to most, is sadly meaningless to me.
In addition, I tried using the variable lift speed package from Greneey on steam but it won't work with the generated script. I am at a loss for what to do. I tried also breaking the lift up into two parts but the first part accelerates too quickly and is already up to speed when the train approaches.
SentinelParks posted on May 18th, 2026
Hello DG,
I tried the easy option and I could not get the lift to behave in the way I need where it accelerates some of the way up. I have zero scripting knowledge so the second option while helpful to most, is sadly meaningless to me.In addition, I tried using the variable lift speed package from Greneey on steam but it won't work with the generated script. I am at a loss for what to do. I tried also breaking the lift up into two parts but the first part accelerates too quickly and is already up to speed when the train approaches.
Hi. With the current tools built in the generator, you can define 4 different speeds for the lift: before the train is fully on the lift section, before the lift trigger (you must set these two in the previous block, in the exit that leads to your lift, in the "Next block entrance" tab), after the lift trigger and after the train has started leaving the lift (you must set these two in the lift itself, in the exit that leads to your next block). With the built-in tools, that's as much as you can do.
If you want to get a bit wet on the scripting territory, that's where my second option comes into play. I hope to be able to add some easier trigger-based speed control, but it's hard to come up with an easy way to set it up when the script can't read the triggers the coaster has (it's a feature missing from NL2).
I've downloaded Greneey's package and looked at their code. Let me give you here a modified+simplified version that works with my generator's scripts. You will have to do minor modifications to it to work in your case, though. Check the lines that contain comments (they start with // and are shown in grey here) to see what you have to do. Paste the code into a file named DgVariableLiftSpeeds.nlvm. After modifying it, just add it to your coaster like you did with your main script and set up as many triggers as you want.
import com.nolimitscoaster.*;
import dgScriptGenerator.*;
// Script derived from Greneey's Variable Lift Speed package, heavily modified to work with DragónGroar's Script Generator
public class DgVariableLiftSpeeds extends Script implements TrackTriggerListener {
private String scriptName = "DG's Variable Lift Speeds Script";
private Coaster coaster;
private DgBlockSystemController blockSystemController;
private BlockSetup block;
private TrackTrigger[] trackTriggers;
private double[] trackTriggerSpeeds;
public bool onInit () {
coaster = sim.getCoasterForEntityId(getParentEntityId());
if (coaster == null) { System.err.println(scriptName + ": " + "Script is not attached to a coaster."); return false; }
blockSystemController = DgScriptGeneratorManager.getBlockSystemController(coaster);
// In the next line, replace YOUR_LIFT_NAME with your actual lift name, as setup on the NL2 editor and the Script Generator. Don't remove the "double quotes".
block = BlockSetup.findBlock(blockSystemController.getBlocks(),"YOUR_LIFT_NAME");
if (block == null) { System.err.println(scriptName + ": " + "No block selected."); return false; }
// Setup here the number of triggers the section will have.
int triggersNumber = 1;
trackTriggers = new TrackTrigger[triggersNumber];
trackTriggerSpeeds = new double[triggersNumber];
// Here go your track triggers. Duplicate this next two code lines as many times as the number you set up before.
// Each trigger will change the train's speed to its specified target value.
// Keep in mind that the speed set on the NL2 editor needs to be higher. The script can't push the speed faster than what is set up there.
// Don't forget to change the number between brackets each time you duplicate the lines, to indicate a different track trigger number, starting with 0 and going up.
trackTriggers[0] = coaster.getTrackTrigger("YOUR_TRACK_TRIGGER_NAME");
trackTriggerSpeeds[0] = 5.0;
// Example (feel free to remove the // at the beginning and use these lines as well):
//trackTriggers[1] = coaster.getTrackTrigger("YOUR_SECOND_TRACK_TRIGGER_NAME");
//trackTriggerSpeeds[1] = 5.0;
for (int i = trackTriggers.length - 1; i >= 0; i--) {
if (trackTriggers[i] != null) {
trackTriggers[i].addTrackTriggerListener(this);
} else {
System.err.println(scriptName + ": " + "No trigger found at index " + i + ". Ignoring.");
}
}
return true;
}
public void onNextFrame (float tick) {}
private void setLiftTargetSpeed (double targetSpeed) {
// Here, select (by removing the // at the beginning) which of the following functions you want to use depending on the units of the speed you set up earlier.
//block.limitSpeed(targetSpeed); // speed is specified in m/s
//block.limitSpeedKmh(targetSpeed); // speed is specified in km/h
//block.limitSpeedMph(targetSpeed); // speed is specified in mph
}
public void onTrainEntering (TrackTrigger trigger, Train train) {
for (int i = trackTriggers.length - 1; i >= 0; i--) {
if (trigger == trackTriggers[i]) {
setLiftTargetSpeed(trackTriggerSpeeds[i]);
}
}
}
public void onTrainLeaving (TrackTrigger trigger, Train train) {}
}
Don't forget that, for the script coming out of the generator not to interfere with your custom speed limits, the 4 speed limits I mentioned earlier must all be empty (you must see the "No change" text). Keep in mind that the generated script will ALWAYS reset the speed limits when the block is reset (aka during a coaster mode change), when the train hits the block's trigger (where it would stop if the next block was occupied), during a swing launch and when the block is freed. You might want to consider adding some extra triggers or playing with the built-in fields as well as with the customized script to do exactly what you want to do.
Any other thing you may need, don't hesitate to ask :D
~DG

Yes, that's it then. I've just checked the code and I didn't include that method for SectionSetup, since it's equivalent to calling
getCoasterSection().isTrainOnSection()(getCoasterSection() gives you the NL2 API Section object), so feel free to revert your section back to a non-block section and change your check with that (A_Section.getCoasterSection().isTrainOnSection()instead ofA_Section.isTrainOnSection()), and that should fix it as well...