Skip to content

All Comments

181 to 200 of 19724

Filter comments

Dragón Groar's NoLimits 2 Script Generator
Scripting

I don't really think this is something this forum supports, haha, but I've decided I'd add this script within a folder in the program itself as a sample extension script. It'll be there on the next version.

I believe it's not only going to be useful for those that don't code, but also for those that do to have an example of how to work with my scripts as well, so it'll be there. I'll make sure to put a link on the "Script Extension" help category to open this new samples folder, and maybe I'll even add a couple more samples I've been tinkering with... (I'll have to adapt them from functional script to a sample first, though).

View comment
Dragón Groar's NoLimits 2 Script Generator
Scripting

dg posted on May 23rd, 2026

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

DG, you are a godsend. Thank you. Please pin this or something so people can come back to it.

View comment
NoLimits 2 Weekly YouTube Roundups - Week 654
NoLimits Coaster

I won an auction in a funny way
It was cold outside, and nobody stayed
You bet I stayed
What prize ended coming my way?
My wheel, my wheel, my wheel
Talkin' 'bout my wheel, my wheel

Roundup 640

Knocking you back on a roller ride
Hear that sound screaming in your mind
Better sit down for the drop ’cause it's coming up soon
Now it’s down, down down

Roundup 641

You create it, you share it, we feature it!

-Ride_Op

View comment
Dragón Groar's NoLimits 2 Script Generator
Scripting

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

View comment
Dragón Groar's NoLimits 2 Script Generator
Scripting

ThatFlyerGuy1 posted on January 14th, 2025

CCA_Games posted on January 13th, 2025

Maybe as a bonus would be for a train to engage a lift at a slower speed then speed up when the train is fully on the lift however, I’m not sure if that is possible.

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 mph

to 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.

View comment
Dragón Groar's NoLimits 2 Script Generator
Scripting

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.

View comment
Dragón Groar's NoLimits 2 Script Generator
Scripting

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: ?s

HarryHendo20 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.

View comment
Dragón Groar's NoLimits 2 Script Generator
Scripting

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!

View comment
Exporting NL2
NoLimits Coaster

I want to publish my 3D model of Shambhala so that other people can download it and print it with a 3D printer. However, I am not sure how to upload it or which platform I should use. I would appreciate guidance on how to properly share my design and make it available for 3D printing.

View comment
NoLimits 2 Weekly YouTube Roundups - Week 654
NoLimits Coaster

It's got a mile of the steal round beams
Delivers all those thrilling feelings
Where everything was as fast as that flying ride
Now and then, when I feel its pace
It takes me away to that special place
And if I ride too long, I'd probably black out and cry

Roundup 637

Ride op! (Ooh-hoo) Where the hell is my front row? (Ooh-hoo)
What is takin' it so long (Ooh-hoo) to ride it? (eet-eet-eet)
Oh, ride op, why the hell is my front seat?
Gettin' down with another (ooh-hoo, no)
So, tell them if you see me, baby (If you see me, they shouldn't ride)

Roundup 638

Stop! Listen, what's that sound?
Everyone hands up going down!

Roundup 639

You create it, you share it, we feature it!

-Ride_Op

View comment
Education License
NoLimits Coaster

We have occasionally worked with schools to offer a bulk license for use by entire classes of students sharing computers. However, in this case everyone would need their own license. One tip though: the standard license offers the same building features for everyone. If you want to export higher quality video or do other high resolution/3D forms of media capture, only one of you would need the professional license.

-Ride_Op

View comment
181 to 200 of 19724