Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - roltemurto

#1
Hello again WillLem,

Sorry for bombarding the forum board lately, but I got a new bug report.
Below I am attaching the .NET Framework error pop-up. The log file doesn't have anything up to date.
This happened after I turned my monitor off for an hour (at least this is what I am suspecting of what caused it).
When I turned it back on these errors were popped up;

Instead of this dialog box, JIT debugging would be invoked
For more details, see the end of this message.

************** Exception Text **************
System.InvalidOperationException: Bitmap region is already locked.
at: System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData)
at: System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format)
at: SLXEditor.BmpModify.DrawOn(Bitmap origBmp, Bitmap newBmp, Point pos, Func`3 doDrawThisPixel, Byte alpha)
at: SLXEditor.BmpModify.DrawOn(Bitmap origBmp, Bitmap newBmp)
at: SLXEditor.Renderer.CreateLevelImageFromLayers(String dragNewPieceKey)
at: SLXEditor.Renderer.CombineLayers(String dragNewPieceKey)
at: SLXEditor.SLXEditForm.ResetLevelImage()
at: SLXEditor.SLXEditForm.NLEditForm_Resize(Object sender, EventArgs e)
at: System.EventHandler.Invoke(Object sender, EventArgs e)
at: System.Windows.Forms.Control.OnResize(EventArgs e)
at: System.Windows.Forms.Form.OnResize(EventArgs e)
at: System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
at: System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
at: System.Windows.Forms.Control.UpdateBounds()
at: System.Windows.Forms.Control.WmWindowPosChanged(Message& m)
at: System.Windows.Forms.Control.WndProc(Message& m)
at: System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at: System.Windows.Forms.ContainerControl.WndProc(Message& m)
at: System.Windows.Forms.Form.WmWindowPosChanged(Message& m)
at: System.Windows.Forms.Form.WndProc(Message& m)
at: System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at: System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4515.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

SLXEditor
Assembly Version: 3.0.3.0
Win32 Version: 3.0.3.0
CodeBase: file:///X:/YEKELEMELER/OYUN/Lemmings/NeoLemmix_V12.14.0/SuperLemmix%203.0.2/SLXEditor.exe

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4550.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4536.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4390.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4590.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll

mscorlib.resources
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/mscorlib.resources.dll

System.Drawing.resources
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing.resources/v4.0_4.0.0.0_tr_b03f5f7f11d50a3a/System.Drawing.resources.dll

System.Windows.Forms.resources
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4084.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_tr_b77a5c561934e089/System.Windows.Forms.resources.dll

************** JIT Debugging **************
To enable JIT debugging, the jitDebugging value must be set in the
system.windows.forms section of the application's or machine's (machine.config)
.config file. The application must also be compiled with debugging
enabled.

For example:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than being handled in this dialog box.

Luckily the editor DID allow me to save the map before exiting.
The reason I'm suspecting the monitor is due to the fact that I am using displayport for connection and I believe this connection causes resolution change during turn off and wake up.
#2
When there are multiple objects, terrain etc on top of each other, with similar sizes and irregular shapes, it becomes impossible to select the desired asset.

For example on the design I am currently working on; I have a terrain piece on top of a very large piece of steel and an exit object on top of all.
I had to move the terrain back in order to align and position my exit but now I am stuck with not being able to select it because of the steel which blocking the way.

For my particular problem; an option to Show/Hide Steel (like any other layer) would solve it immediately.
Steel is the only asset type that hasn't got an option to hide/show.
I know steel is also technically a terrain, but I am referring to the distinction between steel and not steel.
Because in my example, I need to select the "not steel" terrain which is below the steel.
I fear it may not be possible to implement since the editor sees them all as terrain
but am hoping using it's flag etc would allow it.


An option in the settings or a modifier key press; that simply allow bypassing the alpha channel when selecting, would also save me right now.
I believe CTRL+Click and/or holding down the left mouse button 'sometimes' help with selecting an object which is behind of another,
but because of it's inconsistency I'm not so sure if this feature actually exists or not.

What would be a QoL update is; an actual toggle button to let the cursor prioritize and select the layer at the back/behind.

What would be an even better addition; is the layer system implementation;
Currently there is no way to tell how many layers are there or which and what layers are currently on the map.
This also makes it impossible to clean/delete an asset that has been removed/changed from the style folder,
because there is no way to select it once the editor is restarted, the level is reloaded or simply the styles has been refreshed.


If there was a file list or a layer system, that would allow;
- Eliminating the need to use the "depricated" feature. Since the assets can be selected and deleted from there,
- The ability to select/move, show/hide layers and objects individually,
- The ability to see/find assets at a glance, since it is outlined as it's selected,
- The ability to see/find how many and which assets are currently placed on a level,
  (assuming the filename is used for layer name instead of effect type)
- Make grouping and organizing much easier,
- Possibly allow to Show/Hide asset groups or groups of layers.


I hope I was able to explain the situation that I am struggling with.
Please let me know if I am missing something and if there's an already implemented way of working or selecting 'the object behind'.
Because even the marquee doesn't always help.

#3
I am trying to create sort of a tunnel with %90 opacity so you can barely see the lemmings walk behind. I want it to physically be pass-through but visually on top of everything.

OR think of a scenario of a dungeon where some of the moss textures appear in front of the lemmings which is also something I like to achieve.
I tried decoration and one way flags as effect but I can't seem to achieve this. "No overwrite" nor "Draw Last" options don't help.  I even edited the level file giving the $gadget "foreground" flag but that also didn't work.

I've been searching the internet, these forums and old documentations for reference but so far no luck.

How does one go about creating a foreground terrain/object/decoration which is occluding but pass-through?
#4
Quote from: WillLem on April 01, 2026, 01:38:24 AMGlad to hear it worked, thanks for reporting back quickly! I'll get a hotfix release out soon :)

Great news. Since you're still polishing it, I like to report another thing you may wanna look at;

I get the "Warning: Could not read editor options from SLXEditorSettings.ini. Editor uses the default settings."

This happens even though the folders and files are NOT read-only and the exe runs as administrator. I am not sure if it's related to my locale again, but I keep having to customize my settings each time.
This is what my updated ini file looks like;
# SLXEditor settings
 EditorMode          Auto
 DefaultAuthorName      E
 DefaultTemplate       
 ValidateWhenSaving     True
 Autosave               2
 AutosaveLimit          5
 PieceBrowserMode       ShowData
 AutoPinOGStyles        True
 PreferObjectName       False
 InfiniteScrolling      False
 ShowRandomButton       False
 UseAutostart           True
 GridSize               1
 GridColor              MidnightBlue
 TriggerAreaColor       Pink
 CustomMove             64
 Button_Tooltip         3

 Form_Maximized         True
 Form_Width             872
 Form_Height            469

 ShowAboutAtStartup     True
 ShowControlHints       True
 AllTabsExpanded        False
 HighlightGroups        False
 HighlightErasers       False

 LevelArrangerOpen      False
 LevelArrangerMaximized False
 LevelArrangerLocation  301,71
 LevelArrangerSize      2126,1089

 PieceBrowserOpen       False
 PieceBrowserMaximized  False
 PieceBrowserLocation   643,381
 PieceBrowserSize       1425,148

 Display                Triggers
 Display                Rulers
 Display                ScreenStart
 Display                Background
#5
Environment:
Windows 10, Turkish locale (tr-TR)
Affects both SLXEditor 3.0.2 and NLEditor 1.42

Description:
On a system with Turkish locale, the editor corrupts .nxlv files in two ways when saving:

Skill name corruption: Skill keywords such as SWIMMER are saved as SWİMMER (with a dotted capital İ). This is caused by String.ToUpper() following Turkish locale rules, where i uppercases to İ instead of I. The NeoLemmix Player does not recognize SWİMMER as a valid keyword, so the skill is ignored entirely.
Skillset data loss: The entire $SKILLSET block is saved empty. Opening an existing level with skills defined (e.g. SWIMMER 4, DISARMER 2) and doing Save As produces a file with a blank $SKILLSET block, stripping all skill assignments. This appears to be a consequence of the same issue — the editor fails to match or write skill names when the locale-aware string comparison/conversion produces unexpected characters.

Root cause:
This is a well-known .NET pitfall sometimes called the "Turkish I problem". In most languages, i.ToUpper() produces I. However, Turkish (and a small number of other locales including Azerbaijani) have a dotted/dotless I distinction: they have four separate letters — i, İ, ı, I — and their casing rules reflect this. So on any tr-TR or az-AZ system, .NET's locale-aware string methods will silently produce different results than on any other system.
This is not a UTF-8 issue — the files are encoded correctly. It is purely a string operation behavior issue. The same bug would affect any user whose Windows system locale is set to Turkish or Azerbaijani, regardless of their keyboard layout or display language.
All calls to String.ToUpper(), String.ToLower(), and String.Compare() that deal with keywords or identifiers should explicitly pass CultureInfo.InvariantCulture to guarantee consistent behavior across all locales:

csharp
// Problematic:
keyword.ToUpper()
// Fix:
keyword.ToUpper(System.Globalization.CultureInfo.InvariantCulture)

Impact:
Any level saved through the editor loses its entire skillset. The editor is completely unusable for level creation on Turkish systems.
Affected locales are not limited to Turkish. The same dotted/dotless I distinction applies in Azerbaijani (az-AZ) and Crimean Tatar (CRT) and Kazakh (KAZ) as well.