Xpendable
Members-
Posts
66 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
Xpendable's Achievements
16-Bit Artificial Intelligence (4/7)
5
Reputation
-
I tried this theme a few days ago and it crashed my BigBox halfway through the day several days in a row. I don't know if there is somehow a memory leak or something. Note that I only have 4 GB of ram. I am not on the latest beta. Don't know the exact revision, but my BigBox says 11.8 in the bottom right corner from the menu. I went back to my previous theme and have not suffered any crashes.
-
BigBox is now crashing on startup with the latest beta: (Inner Exception) (Inner Exception) Operation is not supported on this platform. App: Big Box Version: 11.9-beta-1 Type: System.PlatformNotSupportedException Site: Source: (Outer Exception) Could not find Windows Runtime type 'Windows.ApplicationModel.Package'. App: Big Box Version: 11.9-beta-1 Type: System.TypeLoadException Site: System.Collections.Generic.List`1[Unbroken.LaunchBox.Windows.Integrations.Xbox.Xbox+ExporterIssuer] ComputeInvalidProperty() Source: Unbroken.LaunchBox.Windows at Unbroken.LaunchBox.Windows.Integrations.Xbox.Xbox.ComputeInvalidProperty() at Unbroken.LaunchBox.Windows.Integrations.Xbox.Xbox.GetInstalledGameIds() at TaskDefinition.FillFocusPredicate(TaskDefinition ) at Unbroken.LaunchBox.Windows.Data.DataManager.CollectInvalidMock(String instance) at System.Threading.Tasks.Parallel.<>c__DisplayClass33_0`2.<ForEachWorker>b__0(Int32 i) at System.Threading.Tasks.Parallel.<>c__DisplayClass19_0`1.<ForWorker>b__1(RangeWorker& currentWorker, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(Exception source) at System.Threading.Tasks.Parallel.<>c__DisplayClass19_0`1.<ForWorker>b__1(RangeWorker& currentWorker, Int32 timeout, Boolean& replicationDelegateYieldedBeforeCompletion) at System.Threading.Tasks.TaskReplicator.Replica`1.ExecuteAction(Boolean& yieldedBeforeCompletion) at System.Threading.Tasks.TaskReplicator.Replica.Execute() (Outer Exception) One or more errors occurred. (Could not find Windows Runtime type 'Windows.ApplicationModel.Package'.) (Could not find Windows Runtime type 'Windows.ApplicationModel.Package'.) (Could not find Windows Runtime type 'Windows.ApplicationModel.Package'.) (Could not find Windows Runtime type 'Windows.ApplicationModel.Package'.) App: Big Box Version: 11.9-beta-1 Type: System.AggregateException Site: Void Run[TState](ReplicatableUserAction`1, System.Threading.Tasks.ParallelOptions, Boolean) Source: System.Threading.Tasks.Parallel at System.Threading.Tasks.TaskReplicator.Run[TState](ReplicatableUserAction`1 action, ParallelOptions options, Boolean stopOnFirstFailure) at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(Exception source) at System.Threading.Tasks.Parallel.ThrowSingleCancellationExceptionOrOtherException(ICollection exceptions, CancellationToken cancelToken, Exception otherException) at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IList`1 list, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, Action`1 body) at Unbroken.LaunchBox.Windows.Data.DataManager.Load(Boolean settingsOnly, Boolean forceReloadAll) at QueueDefinition.FillFocusPredicate(Object , Boolean settingsOnly, Boolean forceReloadAll, QueueDefinition ) at Unbroken.LaunchBox.Windows.Data.DataManager..ctor(Boolean bare, Boolean settingsOnly) at Unbroken.LaunchBox.Windows.BigBox.App..ctor() at Unbroken.LaunchBox.Windows.BigBox.BigBoxProgram.Main() Recent Log: 8:34:39 AM Exception
-
I've implemented this as a program and it is working. Here's the source code (and compiled EXE) that you can download in GitHub. Use at your own risk. https://github.com/Xpendable172/BigBoxLauncher You will need to edit the BigBoxLauncher.exe.config file and update the path to your BigBoxSettings.xml, and you will need to edit the LastPlatform entry in BigBoxLauncher.exe.config to the name of your platform that you want to force BigBox to use as LastPlatform. Case matters! Not sure what will happen to BigBox if you misspell the entry. Also, this program does not ACTUALLY launch BigBox. It could easily be done but I felt that was overkill for what I needed.
-
Thanks, yes, that's it. I didn't see it because it was missing from my file when I checked because I had turned off the RememberLastPlatform feature and then turned it back on, but instead of exiting BigBox, I rebooted (via the Reboot command in BigBox)... It didn't write out the LastPlatform value. But when I exited it out normally, I checked the file, and it was indeed written. So I'll just write my code to insert the node if it is missing, and change the value to my intended platform "MAME" when it is already present.
-
That gave me an idea. If I can figure out where the last viewed platform is actually stored (and this seems to be not obvious to me as of yet - I've scanned all of the XML files a couple of times and don't see where this is saved), I could write a C# program that starts before BigBox that changes the last viewed platform to my desired value, saves the file, then closed. Then BigBox would launch. (I'd wrap both of these program in a batch file so they run in sequence). Then no matter what, BigBox will always start with my desired platform. I just have to figure out where this value is stored. I might have to use some file watchers to see what changes between runs.
-
I have about 8 platforms on my system. I also have an automatic system reboot configured for 6:30am daily. I've noticed that BigBox saves the last platform the user was in only if BigBox is user-exited. If the system gets rebooted by the OS, BigBox does not remember this was the current platform and reverts back to what it was set to when BigBox was last user-exited. I want to have BigBox ALWAYS start with my MAME platform, and I do not want to disable the other platforms. Is there any way to force this regardless of which was the last platform when BigBox was user-exited? Or can BigBox be changed to save the current platform whenever it changes (and do a flush so that this gets written immediately and not cached by the .NET filesystem)? Or is there a command-line argument that I could pass to force it to a specific platform on startup?
-
Jason, Assuming a platform has more than 1 game, is it possible to add a rule if the next title is the same as the previous title to select again? It's weird that the wheel would spin and land on exactly the same game back-to-back.
-
I've updated to the latest beta (11.3.beta 12). I haven't had a chance to watch it for any length of time, but it seems much better so far!
-
Yeah, after I posted this, it occurred to me that's probably pretty close to what you are already doing. No, I haven't had a chance to update yet. I didn't realize the update was available already. I will try it sometime over the next few days.
-
Jason, I've got a solution for that. What if you implemented logic to compute a random number that is always within a max spin range of the current position? You can even make it configurable to be +/- 100, +/- 200, etc. That way you will always be randomly picking a title that is within range of the current position and never spinning further than the max "search" range. The beauty of this is it will scale well regardless of whether you have 100 titles, 1000 titles, 10,000 titles. int maxrange = 200; int halfrange = maxrange / 2; // if maxrange = 200, then we are looking for a range that is +/- 100. int minvalue = curPos - halfrange; int maxvalue = curPos + halfrange; if (minvalue < 0) { // Since the minvalue < 0, we need to shift the range to the right. // For example, if curPos = 40, the minvalue would be -10 and maxvalue would be 90. After shifting, // the new range would be minvalue = 0 and maxvalue = 100. maxvalue += Math.abs(minvalue); minvalue = 0; if (maxvalue > maxtitle-1) maxvalue = maxtitle-1; // truncate range if the number of titles is less than your maxrange. } else if (maxvalue > maxtitle-1) { // Since the maxvalue > then the maxtitle-1, we need to shift the range to the left. If maxtitle = 1000 and // maxrange is 1005, we need to shift the entire range to the left by 5 so that the mavalue = maxtitle-1. minvalue -= maxvalue - maxtitle-1; maxvalue = maxtitle-1; if (minvalue < 0) minvalue = 0; // truncate range if the number of titles is less than your maxrange. } int newrandom = Random.Next(minvalue, maxvalue); // random number. For example, if curPos = 300 and maxRange = 200, then range is (300,400)
-
Thanks, Jason. I'll have a go at it. Another way you could do it which would always ensure that every game has the same odds of appearing next (1/577 in my case) would be to make note of the current position, then randomly select a number between 0 and MAX -1 (567 in my case) and then compute whether you need to go forward or backwards and by how many steps. while (newPos == curPos) { newPos = (get your random number between 0 and Max) if (newPos < curPos) { // Go backwards steps = curPos - newPos; } else if (newPos > curPos) { // Go forward steps = newPos - curPos; } } Now you can calculate how to spin the wheel so that it lands on the chosen game. But I get this a bit more complex, and maybe the tweaks you've made for the next Beta will take care of the problem.
-
I watched my arcade machine and wrote down every game it spun to for the past 45 minutes. This is what I observed. Platform is set to Atari 2600 (with 577 titles). I've color-coded all the matching repeat entries. Challenge (8:58) Bacherlor Party (8:59) 2600 1.00 Files (9:00) Amidar (9:01) Bachelor Party (9:02) Breakout Atlantis (9:03) Col "N" (9:04) Astro Attack (9:05) Beamrider (9:06) Col "N" (9:07) Bachelor Party (9:07) Breakout (9:08) Centipede (9:09) Bank Heist (9:10) 2-in-1: Frostbite and River Raid (9:11) Atari Video Cube (9:12) 2 Pak Special Blue: Dungeon Master, Creature Strike (9:13) Blueprint (9:13) Blackjack (9:14) 2 Pak Spcial Yellow: Warrior,Frogger (9:15) Bionic Breakthrough (9:16) Bank Heist (9:17) Bridge (9:18) Air Raid (9:19) Berzerk (9:20) Cat Trax (9:18) Boing! (9:19) China Syndrome (9:20) Armor Ambush (9:21) Beamrider (9:22) Cakewalk (9:23) Computer Chess (9:23) Bermuda Triangle (9:24) Communist Mutants From Space (9:25) Chase the Chuck Wagon (9:26) Circus Atari (9:27) 128-in-1 Junior Console (9:28) Chase the Chuck Wagon (9:29) Atlantis (9:30) Bionic Breakthrough (9:31) Climber 5 Berzerk Berenstain Bears Atlantis So BigBox selected 45 entries over 45 minutes, and 19 of those titles repeated, some more than twice. So... 42% of the entries were repeats. It looks like it is picking a random number and using that as an offset to spin the wheel X number of entries forward or X number of entries backward. I noticed that every spin over the this time frame was within the first 98 entries of my 577 titles. It never made it higher than the 98th entry, which is Communist Mutants From Space. This makes sense since the platform is alphabetically sorted by title, and this game is the 98th entry in the Windows folder, also sorted alphabetically. My Attract Mode settings are: Enable Attract Mode (checked) Switch Between Platforms/Filters (unchecked) Wait Time: 1 Minute Time In-Between Movements: 40 seconds Maximum Speed: 20 milliseconds Minimum Speed: 200 milliseconds
-
I agree with polygonslayer and DOS76. I think something is wrong with the randomizer somehow. It might be worth doing some debugging and logging out the number chosen each time to a file and compare the results. My arcade machine is right next to my office where I work from home, and I often stare at watching it. It's definitely goofy.
-
Sorry, but I know a lot more about how random numbers work than you think. I'm not saying no game should ever be repeated. What I'm saying is the same 10 games should not be repeated 5-10 times within 60 samples when the range is 1000+ games. Something is statistically wrong with the number generator if is generating the same sets of numbers over and over and over again. I should only have a 1/1000 chance of seeing the same number on each random number generation. Instead, I'm seeing the same game 1/10 times, consistently, or something like that. That is wrong. If that happened once in awhile, it would be correct, but when it happens 1 out of very 10 random games, and the other games are also happening at the same frequency... there's something wrong.
-
I have my BigBox Attract mode set to spin the wheel within the platform it is current on, and I have set to spin every 60 seconds. I've noticed that it tends to pick the same small set of games over and over again, despite having 1000+ roms on a single platform. For example, in a span of 1 hour, it will hit the same game several times. Statistically that should not be possible if it is supposed to be randomly picking a game. How is the game being selected? I suspect there could be a bug in the implementation.