YoYoGames / GameMaker-Bugs

Public tracking for GameMaker bugs
26 stars 8 forks source link

Project Fails To Build! 2024.6.0.157 #6574

Closed mistletoe closed 4 months ago

mistletoe commented 4 months ago

Description

Simply put, project will not compile now. Error is below. I've tried with smaller, less-complex projects, and they compiled OK. This project uses a bunch of sprite-sheets and hundreds of sprites.

I'm wondering if this is related to the changes in Sprite collision bounds as described in the changelog, given the context?

[EDIT]

Just set Affinity to CPU0, limited threads to 1 in Compiler settings. No dice. Same error is thrown on build.

Killed everything else but Chrome, killed AV. No dice.

Let me know if you need the project to reproduce. I'm dead in the water, lol. I guess today I'll work on graphics, heh.

[/EDIT]

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.AggregateException: One or more errors occurred. (Index was outside the bounds of the array.) ---> System.IndexOutOfRangeException: Index was outside the bounds of the array. at GMAssetCompiler.GMSprite.CreateMask(GMBitmap32 _frame, Int32 _bboxmode, eGMSpriteColKind _kind, Int32 _tolerance) at GMAssetCompiler.GMSprite.GetMask() at GMAssetCompiler.WADSaver1.<>c__DisplayClass113_0.<WriteSprites>b__0(KeyValuePair2 _kvp, ParallelLoopState state, Int64 index) at System.Threading.Tasks.Parallel.<>cDisplayClass32_02.<ForEachWorker>b__2(Int32 i, ParallelLoopState state) at System.Threading.Tasks.Parallel.<>c__DisplayClass19_02.b1(RangeWorker& currentWorker, Int64 timeout, Boolean& replicationDelegateYieldedBeforeCompletion) --- End of stack trace from previous location --- at System.Threading.Tasks.Parallel.<>c__DisplayClass19_02.<ForWorker>b__1(RangeWorker& currentWorker, Int64 timeout, Boolean& replicationDelegateYieldedBeforeCompletion) at System.Threading.Tasks.TaskReplicator.Replica.Execute() --- End of inner exception stack trace --- at System.Threading.Tasks.TaskReplicator.Run[TState](ReplicatableUserAction1 action, ParallelOptions options, Boolean stopOnFirstFailure) at System.Threading.Tasks.Parallel.ForWorker[TLocal,TInt](TInt fromInclusive, TInt toExclusive, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Func4 bodyWithLocal, Func1 localInit, Action1 localFinally) --- End of stack trace from previous location --- at System.Threading.Tasks.Parallel.ForWorker[TLocal,TInt](TInt fromInclusive, TInt toExclusive, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Func4 bodyWithLocal, Func1 localInit, Action1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IList1 list, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Action3 bodyWithStateAndIndex, Func4 bodyWithStateAndLocal, Func5 bodyWithEverything, Func1 localInit, Action1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable1 source, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Action3 bodyWithStateAndIndex, Func4 bodyWithStateAndLocal, Func5 bodyWithEverything, Func1 localInit, Action1 localFinally) at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable1 source, ParallelOptions parallelOptions, Action3 body) at GMAssetCompiler.WADSaver1.WriteSprites(IList1 _data, Stream _s, IFF _iff) at GMAssetCompiler.IFFChunkHandler1.Save(Stream _stream, IFF _iff) at GMAssetCompiler.IFF.WriteChunks(Stream _stream, TextWriter _out) at GMAssetCompiler.WADSaver1.Save(GMAssets _assets, Stream _stream, List1 _extraFilenames, Dictionary2 _extraAttributes) at GMAssetCompiler.IFFSaver.Save(GMAssets _assets, String _name) at GMAssetCompiler.Program.CompileProject(GMAssets _file) at GMAssetCompiler.Program.Reentry(String[] _args) at System.RuntimeMethodHandle.InvokeMethod(Object target, Void arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span1 copyOfArgs, BindingFlags invokeAttr) --- End of inner exception stack trace --- at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span1 copyOfArgs, BindingFlags invokeAttr) at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) at Igor.Program.ExecuteAssetCompiler(String _args) at Igor.WindowsBuilder.Compile(Boolean _exe) at Igor.WindowsBuilder.Deploy(Boolean _exe) at Igor.WindowsBuilder.Run() at System.RuntimeMethodHandle.InvokeMethod(Object target, Void arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

Expected Change

Not sure what's going on here. Looks like something wrong in parallelized code having to do with Sprites here.

Steps To Reproduce

  1. Start GameMaker
  2. Attempt to build.
  3. See the issue.
  4. I haven't tried forcing the application to run single-threaded yet.

How reliably can you recreate this issue using your steps above?

Always

Which version of GameMaker are you reporting this issue for?

2024.6.0 (Monthly)

Which operating system(s) are you seeing the problem on?

Windows 11

Which platform(s) are you having trouble building this project for?

Windows

Are you running GameMaker from inside your Steam library?

Yes

Contact Us Package Attached?

Sample Project Added?

sanbox-irl commented 4 months ago

this internal compiler error often goes away after running a Clean in the IDE

mistletoe commented 4 months ago

I already tried the basics like that. I clean at least a few times a day.

[EDIT] Going into Game Options / Windows / Graphics and selecting Preview button reveals a binary file for the game with the .win extension, but nothing else. Sprite sheets weren't built successfully.

I've updated Visual Studio Community Edition 2022 to the latest build, in case that mattered.

Hmmm.... maybe it's the .NET change?

IDK what else to try here, lol.[/EDIT]

mistletoe commented 4 months ago

For now, I'm back to working on a manual install of 2024.4.1.152. No issues getting the game to build a Runtime. IDK what changed with Texture Groups, but everything I'm seeing here looks like that's where the issue is; my project's OK, just not with the newest IDE on Steam. Super-bummed, I am massively looking forward to using Physics Raycasts and playing with the depth-buffer :-)

stuckie commented 4 months ago

Thanks for reporting this, but in order to confirm the problem and then investigate a fix we need you to send us small project which already shows this issue to ensure we see exactly what you see and then learn why this problem is caused.

Please report this issue again, but ensure you have a suitable project open at the time you open the bug reporter and that you allow GameMaker to include the project.

Thanks!

Why Have You Asked Me For A Sample?

YYDan commented 4 months ago

"I've updated Visual Studio Community Edition 2022 to the latest build, in case that mattered." - just to quickly point out that speculatively/"randomly" updating external tools is usually only likely to make things worse ;)

Always, always, always read our setup guides before updating SDKs, Visual Studio, Xcode, Android Studio, whatever... We link to the required tools guide on the Help menu inside GameMaker and on the release notes, plus we would explicitly tell you in advance in the release notes if you needed to update one of these tools.

It won't be due to the in-game collision changes, but that error does imply that one (or more) of your sprites is failing to be read/compile correctly, yes. If you can work out which sprite(s) causes the fail, then a small project which just contains those sprites would be perfect. Thanks.

mistletoe commented 4 months ago

Fair re: updating tools. But hey, I figured it was still in the requirements, and maybe you folks were keeping Visual Studio a little more up to date: I only upgrade it when I want to produce a VCC for publisher review.

But that leaves me with a big problem. How on Earth am I going to find the sprite in question?

There are hundreds, and the error message doesn't include a Sprite's name, which means I'm staring at a big pile of hay and a very small needle. Any hints about what I'm supposed to go looking for would be helpful.

I'm going to make a random presumption here: whatever's causing this error isn't a corrupt PNG import. That would have caused the errors in the past, too. I'm not adding dozens of PNGs a day at this point in production, generally. So it's much, much more likely that the change has something to do with something unusual I may have done with a Sprite. For example, if I've placed a Sprite's hitbox somewhere "absurd", would that trigger this?

[EDIT]In the name of Science (and well, because I really, really wanna see the physics raycast, lol) I'll make a copy of the project and start the process of finding out which Sprite has caused this; I'll swap out all of the Sprites with a simple square, set the hitbox to Rectangle, and keep going until the Runtime builds again. At least then we'll know where the error occurred, if not why.[/EDIT]

mistletoe commented 4 months ago

2024.6.1.160 resolves this bug. Yay, I get to play with Physics Raycast tomorrow and break new things ;-)