Skip to content

Dragón Groar's NoLimits 2 Script Generator

26 to 50 of 146
Posted February 7, 2025· Edited February 13, 2025

Hi!

Sorry for that.

First, please check that the script is complete and not modified and that it's accompanied by the folder "dgScriptGenerator" that is created when you save the script. The folder must be in the same folder as the script itself. If you move the script to a subdirectory, you need to move the folder to that subdirectory as well.

Now, if all that is correct, please check if you used any special characters or symbols in the block, section, switch or coaster names. If you did, please try removing them. The scripting language doesn't admit certain characters in variable names, and the code that makes sure the most common ones are replaced by normal ones when needed might not be perfect. Only 100% safe characters are upper and lower case letters, underscores and numbers as long as the name does not start with a number. I probably should improve the replacements anyways, so if that was the issue, let me know and I'll fix it for the next version.

EDIT: Despite not having any answer back from you yet, I've improved the replacements anyways on version 1.1.1, so if you could try to download it, load your script and regenerate it and save it replacing the old one, it would most likely fix your issue. Let me know if you do that whether it works or it doesn't. ^^

If all of the previous was correct and it still doesn't work, I will need to see your script to know what's wrong. Can you send it to me? You can either send it to me directly (DM me and I'll tell you how if that's what you want) or paste here the starting bit (if you open the script in a text editor and use the search tool for the text "*/" (without quotes), I would only need you to copy and paste here from the beginning until the */ you found for me to be able to regenerate your script and check it.)

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 ;)

I tried your software. It is excellent. I use it already 3 of my coasters.
On the other hand, I noticed inconsrances in particular with regard to the Swing Launch function. The first being on an emergency stop, the cutting propulsion but the brakes are dry which is not to be in particular by reason of security,
Whether it's Block Brake's brakes like Trim Brake's brakes. The second thing (but it is a little more personal) is that the propulsion must wait for the correct position of the Switch track behind, but in the case of toutatis at Park Asterix, the Swing Launch is in three parts ,,
The train goes propulsion once it has a millimeter on it, the switch track begins to move when it is on the hunchbacked and if however the switch track is not well positioned before the train begins its second pass there The Launch undergoes as an emergency stop.

Example with this video: https://youtu.be/9XvR1QzFlNw

On the other hand at the limit, what would be acceptable to be realistic with the magnetic brakes is to desert the brakes when the speed is below a very specific threshold.

Hi théocoaster, glad you like the program!

I'm not sure I understand your point about the "inconsistencies". However, let me tell you that once an Emergency Stop is triggered, NL2 takes control away from the block system controller (my scripts) and just stops every moving mechanism and clamps shut all block brakes automatically. My scripts can't control that, sadly, even if I wanted to. It's the same as in full manual mode. NL2 takes control over whatever you have programmed in those cases.
If, however, you meant something else, feel free to explain it again, and feel free to explain in French if you prefer. I'm not a fluent speaker, but I understand it good enough ;)

As for your second "thing", the way I've performed that kind of swing launch like Toutatis' in my recreation of Hagrid's (check this post), it works as intended because the actual switch track the train goes through is the transfer track that switches instantly, so no wait happens. It's true that if you do it with a regular merge switch and a block after it, it won't work as it should, but you can always do the trick anyways with a real, invisible, merge switch that switches instantly and a visible one synchronized to the real one that takes the appropriate time to switch. The block will be ready to launch instantly, but visually, the switch will still be changing while it does.
In any case, if you do it that way you miss on the high speed banked switch track and if you do it my way you miss on the hunchback, as you need a train-length straight track after the switch. It's a bit of a "pick your poison" in this case...
Nevertheless, I might look into improving that in the future, but as of now, it's too complicated to implement so that it works for all possible cases you can make with my generator.

So, as I said, glad you like the program, and if you have any other concerns or ideas, feel free to post them, and don't hesitate to do it in French! ;)

UPDATE 1.1.1 RELEASED

Hi! I know it's been a while and you're expecting some of the improvements I've promised during these weeks, but I thought I'd better release a small update with fixes to the issues you've been having before diving into new features that can introduce new bugs.
Therefore, this is the list of fixes included in this small update:

  • Fixed: Problem where limiting a section's speed would often produce an annoying noise of devices switching on and off very fast. A histeresis has been added to limit the amount of on/off switching to a bearable amount.
  • Fixed: Bug where blocks leading to and from storages would allow to change their maximum speed through the UI, while the code effectively applied a 5km/h limit anyways. The UI now properly disallows these changes.
  • Fixed: Bug where linked sections wouldn't properly count for isTrainBeforeStartOfSection and isTrainBehindEndOfSection. Most noticiable on simultaneous advance when set to "when end of section reached".
  • Fixed: Inconsistency: the "launch" option shouldn't be available for lift and storage blocks. These block types aren't meant to launch a train, so the option is meaningless for them.
  • Fixed: Inconsistency: the "swing-launch" option shouldn't be available for lift and storage blocks. These block types aren't meant to launch a train, so the option is meaningless for them.
  • Fixed: Inconsistency: the "swing-brake" option shouldn't be available for exits leading to lift and storage blocks. Storages are designed to receive a train slowly and lifts don't allow it to run freely backwards, so the option is meaningless for them.
  • Fixed: Bug where apparently swing-brakes wouldn't properly work on stations. I haven't actually encountered this bug, but reviewing the code for other fixes made it apparent to me, so I kinda fixed it anyway.
  • Fixed: Bug where an ugly error appeared if you closed a panel while a numeric field was empty. Now the default value for the field (usually 0) is automatically filled in instead of having the program yell at you.
  • Fixed: Bug where the "coaster name" field wouldn't properly update when loading a generated script.
  • Fixed: Bug where some characters in the coaster, block, section or switch names could lead to errors when opening the script in NL2. Names are now properly sanitized when used as variable names in the script.
  • Fixed: Bug where adjacent "Skip positions" for transfer tracks wouldn't all be skipped when the transfer track moved in one of the directions.
  • Fixed: Mistake where the placeholder for the switch position on the block exit panel would contain the wrong text.
  • Improved: Script extension made slightly easier by wrapping all generated scripts under a new abstract class that directly provides the common functions. This prevents a cast to the specific script's class when retrieving the Block System Controller, now being able to directly call the useful functions from the parent abstract class instead.

The download link is in the first post (as last time, I'm replacing the link there to make it easier to find for newcomers).

Any questions and suggestions, as always, don't hesitate to ask them right here.

bon , puisque vous me l'avez demandé gentillement je le fais en français.

J'ai essayé votre logiciel. C'est excellent. Je l'utilise déjà 3 de coasters.
D'un autre côté, j'ai remarqué des inconscription en particulier en ce qui concerne la fonction de lancement de swing. Le premier étant en arrêt d'urgence, la propulsion de coupe mais les freins sont déserrés , ce qui ne doivent pas être en particulier en raison de la sécurité, Que ce soit les freins de Block Brake comme les freins de Trim Brake. La deuxième chose (mais c'est un peu plus personnel) est que la propulsion doit attendre la position correcte de la piste de commutation derrière pour activer le launch, mais dans le cas de Toutatis at Park Asterix, le lancement de swing est en trois parties ,, Le train fait de la propulsion une fois qu'il a un millimètre dessus,
La piste de commutation commence à se déplacer lorsqu'elle est sur le bossu et si la piste de commutation n'est pas bien positionnée avant que le train ne commence sa deuxième passe là-bas, le lancement subit une sorte d'arrêt d'urgence.

Exemple avec cette vidéo: https://youtu.be/9xvr1qzflnw

D'un autre côté à la limite,
Ce qui serait acceptable d'être réaliste avec les freins magnétiques, c'est de déserter les freins lorsque la vitesse est inférieure à un seuil très spécifique.

dg posted on February 13th, 2025

  • Fixed: Problem where limiting a section's speed would often produce an annoying noise of devices switching on and off very fast. A histeresis has been added to limit the amount of on/off switching to a bearable amount.

Best way to fix this would be to instruct people to enable launch speed and set it high with a low standard speed, then to toggle between launching and standard as the train floats around the selected speed.

Posted February 19, 2025· Edited February 19, 2025

Sorry for the delay, let me answer you all.

théocoaster posted on February 13th, 2025

D'un autre côté, j'ai remarqué des inconscription en particulier en ce qui concerne la fonction de lancement de swing. [...]
La piste de commutation commence à se déplacer lorsqu'elle est sur le bossu et si la piste de commutation n'est pas bien positionnée avant que le train ne commence sa deuxième passe là-bas, le lancement subit une sorte d'arrêt d'urgence.
[...]

Je vous avais dites d’expliquer encore vôtres problèmes d’une façon différente, et si vous voulait, en Français si c’était plus simple pour vous.

Néanmoins, je crois que je vous avais comprendre correctement la première fois et, encore, les scripts n’ont pas le control de la montagne russe quand le frein d’émergence est activé ni quand la montagne russe est au mode manuel complet. C’est 100% NoLimits dans ces cas.

Pour la seconde chose, vous peut faire ce que je vous dis dans ma première réponse. Les modifications que je devrais faire pour que ça marchait parfaitement sont très grandes.

ThatFlyerGuy1 posted on February 15th, 2025

Best way to fix this would be to instruct people to enable launch speed and set it high with a low standard speed, then to toggle between launching and standard as the train floats around the selected speed.

Maybe, but I don't like when the users have to use a standard NL2 setting for something it's not meant to. I like my scripts to work like an "addon" that is as transparent as possible, aka, if you don't do anything super weird with the scripts, you can adjust and control your roller coaster with NL2's settings the same way you could do it if you weren't using the scripts.
I may still look for better options to handle this feature, though. The histeresis I added, however, really helps, and I've got to add that it also helps setting a realistic acceleration and deceleration for the movement devices (the lower the better).

SentinelParks posted on February 19th, 2025

Thank you for the update sir. May I suggest provisions for a live load (conveyor/moving) station in a future update?

Unfortunately, it is impossible to control a train's harnesses outside a station where the train must be stopped to do so, so live load stations are not something you can achieve just with a block system controller script. However, the part of it that depends on the block system controller can actually be done with the tools you already have. You just need to set a low speed for the station, continuous advance and disable the stations through an extension script. Let me gift you one that does exactly that:

import com.nolimitscoaster.*;
import dgScriptGenerator.*;

public class DisableStations extends Script {
	
	private static final String scriptName = "Disable Stations";
	
	public bool onInit() {
		// Get coaster
		Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
		if (coaster == null) {
			System.err.println(scriptName + ": Not attached to coaster");
			return false;
		}
		
		// Get block system controller for coaster
		if (!DgScriptGeneratorManager.isBlockSystemControllerRegistered(coaster)) {
			System.err.println(scriptName + ": couldn't find block system controller");
			return false;
		}
		DgBlockSystemController blockSystemController = DgScriptGeneratorManager.getBlockSystemController(coaster);
		
		// Load resource with stations names
		String remainingStations = Tools.loadTextFileFromResource(getResourcePathForId("stations"));
		
		// Get blocks we need to manage and disable them
		while (remainingStations.length() > 0) {
			// Extract current station from list
			int splitAt = remainingStations.indexOf('\n',0);
			String currentStation = splitAt != -1 ? remainingStations.substring(0,splitAt) : remainingStations;
			if (currentStation.endsWith("\r")) currentStation = currentStation.substring(0,currentStation.length() - 1);
			remainingStations = splitAt != -1 ? remainingStations.substring(splitAt + 1) : "";
			
			// Disable current station
			BlockSetup blockToDisable = BlockSetup.findBlock(blockSystemController.getBlocks(), currentStation);
			if (blockToDisable == null) {
				System.err.println(scriptName + ": " + currentStation + " not found");
				continue;
			}
			blockToDisable.setStationDisabled();
		}
		
		return true;
	}
	
	public void onNextFrame(float tick) {}
}

You just need to add that script (copy it to a file named DisableStations.nlvm) next to the block system controller script and in its "Resource Files" tab you need to add a text file where each line is a station name, and give it the resource id "stations". Trains passing the stations you disabled will permanently behave in passthrough mode (as if the station was a brake).
Let that script also serve as an example for those that know Java on how to extend the generated scripts. ;)

After that, you need to solve the restraints issue, but that's up to you. You need a 3D train to be able to open and close restraints per car at will and use track triggers to do it. That's nothing my scripts can fix on their own sadly...

Hope this was useful to you all. ;)

dg posted on February 19th, 2025

Sorry for the delay, let me answer you all.

Je vous avais dites d’expliquer encore vôtres problèmes d’une façon différente, et si vous voulait, en Français si c’était plus simple pour vous.

Néanmoins, je crois que je vous avais comprendre correctement la première fois et, encore, les scripts n’ont pas le control de la montagne russe quand le frein d’émergence est activé ni quand la montagne russe est au mode manuel complet. C’est 100% NoLimits dans ces cas.

Pour la seconde chose, vous peut faire ce que je vous dis dans ma première réponse. Les modifications que je devrais faire pour que ça marchait parfaitement sont très grandes.

merci beaucoup

If I understand your question correctly, you're asking if, when doing a dueling coaster, you need to do them together in the same coaster or in two different coasters in NL2 and if you need one or two scripts.
The answer is easy: one script per NL2 coaster. If you're doing each track of the dueling coaster in a separate coaster in NL2, you'll need two scripts. If you're doing both tracks together in the same coaster in NL2, you'll need one script with all the blocks in both tracks. You can choose to do it one way or the other, but not mix both ways. ;)

By the way, I am actually planning a dueling station sync feature (if both stations have trains on them and one is ready to go (dispatched) but the other isn't, hold the first station until the second is also dispatched), but it's not fully ready yet, so it'll be added most likely in the next update. However, if you want to use that feature, I can advance that you'll need to use one single coaster for both tracks, so if you want to benefit from that in the future, do your dueling coaster with all tracks in the same coaster in NL2 and just one script. ;)

When I have them under the same coaster this happens:

Exception: ArrayIndexOutOfBoundsException
at public dgScriptGenerator.BlockExit dgScriptGenerator.BlockSetup.getAutomaticExit() in file ...\dgScriptGenerator\BlockSetup.nlvm in line 142
at private void Nascar.processBlock(dgScriptGenerator.BlockSetup) in file ...\Nascar.nlvm in line 867
at public void Nascar.onNextFrame(float) in file ...\Nascar.nlvm in line 497
at public final void com.nolimitscoaster.Script.run()

If you're wondering Nascar.nlvm is what I named the generated script.

I can't really tell without actually seeing your script (unfortunately, the line number depends on your specific setup), but judging by the error alone, I'd bet you've set up a block with no exits. Could you please check that?
If that's not the case, I'll need to see your script...

Great then.
In any case, I will fix that ugly error and add some kind of warning when generating the script if a block has no exits.

Apologies for the lack of response. Life got in the way lol. I have started working on it with a different project alltogether, (due to me not wanting to deal with 5 train ops for my first scripted coaster), I have a different project I wanna use it for, one thats not nearly as complicated.

Rmaster_Studios posted on March 3rd, 2025

Apologies for the lack of response. Life got in the way lol. I have started working on it with a different project alltogether, (due to me not wanting to deal with 5 train ops for my first scripted coaster), I have a different project I wanna use it for, one thats not nearly as complicated.

Don't worry. We all have a life and they all get constantly in the way ;)

It's fine. If you still have any issues, let me know. In any case, the last update, 1.1.1, might have fixed the issues you were having anyway. It'd be good for my peace of mind to know if it did, so if you can still check if loading your script to the generator (version 1.1.1), generating it again and saving it again fixes the issue, I'd be really greatful. ^^

And, of course, best luck with those projects ;)

Posted March 17, 2025· Edited March 17, 2025

UPDATE 1.2.0 RELEASED

Hi! I'm back with a new update to the Script Generator. In this occasion I bring some of the promised fixes as well as some of the promised new features!
The list of changes in this update:

  • Changed: New layout: the need for a space to add certain new options required a slight layout change. There are now more tabs and the buttons under the title bar have been moved. Also, the UI icons have been changed with icons from FontAwesome Free.
  • Added: Warning when loading a script whose name doesn't match. If you're like me and copy-paste a script before doing a maybe-breaking change, you may have also accidentally opened the wrong one some time. The Script Generator will now let you know if you've opened a script whose file name is not what it was saved as. If you decide to save it, it will still save it with the right name, not with the current one, unless you modify the "Coaster name" as well.
  • Added: Idle lift option: allows to select how lifts should run when they're idle/free. Options are "Stop" (Script Generator default for non-block lifts), "Crawl" (NL2 default and Script Generator default for block lifts) and "Run" (full-speed).
  • Added: Options for blocks with no exits: if you accidentally leave a block with no exits, you will now be warned about it. If it was intentional, you may now "disconnect" the block, and even have the E-Stop trigger if the disconnected block is invaded by a train.
  • Added: Brake behaviour. Did you know that the brakes in some coaster styles require (air) pressure to open (they're normally closed), while others require pressure to close (they're normally open)? The programming of these two styles is often slightly different, specially in the "Approaching" state (N/O brakes wait for the train closed, while it's common that N/C brakes wait for the train open and close as the train passes some part of the section). This new setting lets you manually choose which programming you want to use. The default NL2 styles are automatically handled correctly unless overriden. For custom styles, if in doubt, normally open brake programming is the safest choice.
  • Added: Synchronized block leaving (for dueling coasters). Allows to make a block wait before releasing a train until other block(s) can also do so simultaneously. May be bypassed in manual block mode. Limitation: all blocks must belong to the same coaster.
  • Speed limiting:
    • Added: More speed limiting "areas". For block exits, aside from the block exit speed already available, a new one can be selected for when the train is going over the section's end. Similarly, for block entrances, a separate speed can now be selected for when the train is still not fully inside the section.
    • Fixed: Annoying noise. Still trying to tackle this in increasingly better ways. The current approach, and probably the best one unless NL2 adds some new feature that opens new options, is to reverse the transports to stop accelerating the train instead of turning them off. As the sound effect being played is always the same one (transports turning on), NL2 makes it wait until the previous sound has finished before starting a new one.
    • Improved: Speed limits can now be ignored. Mainly with script extension in mind, but not only, leaving a speed limit blank instead of setting it to 0 doesn't change the currently applied limit (instead of resetting it to its max like when it's set to 0). The limits are still reset when the block is freed and when the train hits the block's trigger.
  • Improved: Swing-brake behaviour. Some tests after the speed limit changes showed issues with the previous behaviour (mainly caused by the speed limit changes), so the swing-brake behaviour was changed. If you're updating a coaster that used this feature to the new version, make sure you test the swing-brakes and adjust them again accordingly.
  • Improved: Refactored block code to use a section behind it to control the track mechanisms (analogous to how NL2 works). (This translates to: "it's easier to add and change stuff without breaking things".)
  • Script extension:
    • Added: Manual block disconnection: allows to disconnect a block that otherwise would be functional, mainly to allow live modifications to a ride's programming.
    • Improved: Exposed the BlockExit property "changeAutoDirection" (through a getter+setter) to allow live modifications to a ride's programming.
  • Other minor fixes

Of course, as well as all that, some of the internal code of the Script Generator has been rewritten as part of a constant effort to make the addition of new script features easier.

As always, the download link is updated in the first post.

Any questions and suggestions, don't hesitate to ask them right here.

Posted March 21, 2025· Edited March 21, 2025

This is an error I got: Error in File 'BlueSpace.nlvm' in Line 397, Column 54: Unknown symbol 'POSITION_'
...1 error(s), 0 warning(s)

Line 397 is the first "new LinkedSection(StationMultimovehelperSection,LinkedSection.POSITION_-1)"
Here's the section of code that No Limits is saying has the error:

	// Setup the possible exits each block has
		StationBlock.setExits(new BlockExit[]{
			new BlockExit(LiftBlock,BlockExit.DIRECTION_FRONT,false,BlockExit.SIM_ADV_WHENBEHINDENDOFSECTION,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
				},
				new LinkedSection[]{
					new LinkedSection(StationMultimovehelperSection,LinkedSection.POSITION_-1)
				},
				new LinkedSection[]{
					new LinkedSection(StationMultimovehelperSection,LinkedSection.POSITION_-1)
				},
				new BlockSetup[]{
				}
			),
			new BlockExit(TransferTrackBlock,BlockExit.DIRECTION_BACK,false,BlockExit.SIM_ADV_NONE,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
					new BlockExitSwitch(TransferTrackSwitch,0)
				},
				new LinkedSection[]{
				},
				new LinkedSection[]{
				},
				new BlockSetup[]{
				}
			)
		});
		LiftBlock.setExits(new BlockExit[]{
			new BlockExit(MidCourseFrictionsBlock,BlockExit.DIRECTION_FRONT,false,BlockExit.SIM_ADV_NONE,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
				},
				new LinkedSection[]{
				},
				new LinkedSection[]{
				},
				new BlockSetup[]{
				}
			)
		});
		MidCourseFrictionsBlock.setExits(new BlockExit[]{
			new BlockExit(BlockBrakeBlock,BlockExit.DIRECTION_FRONT,false,BlockExit.SIM_ADV_NONE,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
				},
				new LinkedSection[]{
				},
				new LinkedSection[]{
				},
				new BlockSetup[]{
				}
			)
		});
		BlockBrakeBlock.setExits(new BlockExit[]{
			new BlockExit(TransferTrackBlock,BlockExit.DIRECTION_FRONT,false,BlockExit.SIM_ADV_NONE,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
					new BlockExitSwitch(TransferTrackSwitch,0)
				},
				new LinkedSection[]{
				},
				new LinkedSection[]{
				},
				new BlockSetup[]{
				}
			)
		});
		TransferTrackBlock.setExits(new BlockExit[]{
			new BlockExit(StationBlock,BlockExit.DIRECTION_FRONT,false,BlockExit.SIM_ADV_NONE,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
					new BlockExitSwitch(TransferTrackSwitch,0)
				},
				new LinkedSection[]{
				},
				new LinkedSection[]{
				},
				new BlockSetup[]{
				}
			),
			new BlockExit(BlockBrakeBlock,BlockExit.DIRECTION_BACK,false,BlockExit.SIM_ADV_NONE,0,-1,-1,0,false,0,-1,BlockExit.SWING_OFF,0,false,
				new BlockExitSwitch[]{
					new BlockExitSwitch(TransferTrackSwitch,0)
				},
				new LinkedSection[]{
				},
				new LinkedSection[]{
				},
				new BlockSetup[]{
				}
			)
		});
Posted March 21, 2025· Edited March 21, 2025

CCA_Games posted on March 20th, 2025

This is an error I got: Error in File 'BlueSpace.nlvm' in Line 397, Column 54: Unknown symbol 'POSITION_'
...1 error(s), 0 warning(s)

Line 397 is the first "new LinkedSection(StationMultimovehelperSection,LinkedSection.POSITION_-1)"
Here's the section of code that No Limits is saying has the error:

[...]

Hi! Sorry, it seems that by adding one function to the lists, the code changed what list format it should use for the exit and entrance linked sections lists, which has allowed you to set up an invalid linked section. ("POSITION_-1" should be either "POSITION_BEFORE" or "POSITION_AFTER", -1 is an invalid value derived from an error, so NL2 has no clue what to do with that.)

I've fixed that issue and checked some more stuff around the lists that might have broken down and will be releasing a hotfix update as soon as possible.

Sorry for the issue. ^^'
And thanks for notifying me!

P.S.: A note: it seems to me by looking at the code you generated that you're trying to use the same section as an exit linked section and an entrance linked section at the same time. This is not what you should be doing. If the "helper" section is some kind of feeder for the lift, leave it only as an "entrance" linked section on the station -> lift exit. If it's some kind of kicker right after the station, leave it as an "exit" linked section on that same exit. By being an exit or entrance linked section, the block will be considered to extend to include that linked section while this exit is active, so if you were to set it as both an exit and entrance linked section, that section would be part of both blocks, which is not what it should be. The generator shouldn't let you do that, though, but it did because those lists were broken on the last update...

UPDATE 1.2.1 HOTFIX RELEASED

This is a quick hotfix release after I was notified that there was an issue with the exit and entrance linked sections feature.
The fixes included are:

  • Fixed: exit and entrance linked sections list style was broken after a feature was added to the lists. Style fixed.
  • Fixed: exit and entrance linked sections list shouldn't allow to add those that are already assigned for the next block.
  • Fixed: block exit setup panel: after closing it and re-opening it, the exit tab would be open, but the last used tab would be selected on the tab buttons.

As always, the download link is updated in the first post.

26 to 50 of 146