Submission #8995: Winslinator's GBA Simon in 06:02.30

(Link to video)
Game Boy Advance
baseline
BizHawk 2.9.1
21639
59.7275005696058
687
PowerOn
Submitted by Winslinator on 4/2/2024 2:23:12 PM
Submission Comments
Simon was originally a tabletop or handheld memory game that many of us probably had as kids. Did this really need a GBA port??

Objectives

  • Aims for maximum score
  • Uses hardest difficulty (level 4)
  • Genre: Board game
You earn one point per sequence you re-enter correctly. You can score a maximum of 31 points, after which the game declares "You Win".

How can you even gain or lose time in this game?

Besides pressing all the correct inputs as early as possible, what else is there to even optimize? Well, there are actually certain input sequences that lose small amounts of time. Let's say on your second turn, you have to re-enter the sequence green, red. That would require sending a Left input then an Up input on the very next frame. Now let's say the sequnce is green, green instead. Now you would have to input Left twice, but cannot do so one frame after the other like before, as the game will assume you've simply held the Left button once for two frames. Therefore, you must separate any identical subsequent inputs with a 1-frame gap. Not only would this be 1 frame lost for this turn, but all subsequent turns as well, for a total loss of 30 frames. This means, the earlier these duplicate subsequent inputs happen in the input sequence, the more costly they will be. In this TAS, we also aim to minimize frames lost in this manner by choosing a favorable input sequence.

RNG

The input sequence for the game is set when pressing Start on the Simon title screen; you cannot manipulate the sequence mid-game by delaying input. Therefore, the only practical way to manipulate the input sequence is by waiting more frames on the main title screen. The question is, how could we quickly filter out what title screen start frame yields the fastest game? After all, that would be a lot of games to check.
Luckily, RNG is extremely predictable in this game. Let's say from the 1st start frame you would be given a sequence of 31 inputs. The 2nd start frame would have instead started with the last 30 inputs of the 1st start frame, plus one new one at the end. The 3rd start frame would then start with the last 30 inputs of the 2nd start frame plus one new one at the end, and so forth. This extremely simple pattern continues indefinitely. So with each frame you wait on the title screen, you're essentially "shifting" a predetermined sequence of inputs by one.

TASing Process

The first frame we can start from on the title screen is frame 602, so this will be our baseline test. Turns out, this one wastes a total of 104 frames due to duplicate subsequent inputs. This means we only need to determine the first 104 inputs in the list to see if any other start frames could be faster. Once you know the input list, you can calculate the finishing time of any start frame with a fairly simple Excel sheet.
Remarkably, the fastest game after I processed each start frame through the input list was frame 602, the very first one. It accumulates 104 wasted frames from identical subsequent inputs, plus zero for no wait at the title screen. Start frame 638 on the other hand wasted the least number of frames from duplicate subsequent inputs at 69. However, it also had to wait 36 extra frames on the title screen for a total of 105 (one more than start frame 602!)
Below is a table of the input list, the start frames they correspond to, and the end frames only for the games which were candidates for being fastest.
  • Input Start End
  • L 602 21639
  • R 603
  • U 604
  • L 605
  • R 606
  • D 607
  • U 608
  • 608
  • U 609
  • L 610
  • R 611
  • 611
  • R 612
  • 612
  • R 613
  • U 614
  • 614
  • U 615 21643
  • L 616
  • D 617
  • U 618
  • D 619
  • R 620
  • L 621
  • D 622
  • L 623
  • 623
  • L 624
  • 624
  • L 625
  • D 626
  • U 627
  • L 628
  • U 629
  • 629
  • U 630
  • D 631
  • 631
  • D 632
  • L 633
  • D 634
  • 634
  • D 635 21644
  • U 636
  • D 637
  • 637
  • D 638 21640
  • U 639
  • L 640
  • D 641
  • R 642
  • 642
  • R 643 21651
  • U 644
  • D 645
  • U 646
  • D 647
  • R 648
  • L 649
  • U 650
  • D 651
  • R 652
  • U 653
  • L 654
  • R 655
  • L 656
  • 656
  • L 657
  • U 658
  • 658
  • U 659
  • D 660
  • U 661
  • 661
  • U 662
  • 662
  • U 663
  • 663
  • U 664
  • R 665
  • 665
  • R 666
  • L 667
  • U 668
  • R 669
  • L 670
  • U 671
  • 671
  • U 672
  • L 673
  • D 674
  • U 675
  • D 676
  • U 677
  • R 678
  • U 679
  • R 680
  • 680
  • R 681
  • 681
  • R 682
  • U 683
  • L 684
  • 684
  • L 685
  • R 686
  • D 687
  • 687
  • D 688
  • R 689
  • L 690
  • R 691
  • 691
  • R 692
  • 692
  • R 693
  • 693
  • R 694
  • D 695
  • 695
  • D 696
  • 696
  • D 697
  • L 698
  • 698
  • L 699
  • R 700
  • U 701
  • L 702
  • R 703
  • L 704
  • R 705
  • 705
  • R 706
  • L 707

Darkman425: Simon says claim this for judging.
Darkman425: Simon says post some judging notes.
This one was interesting to read about. The RNG being fixed upon going past the title screen does make for a simplified, albeit tedious, process to check for the fastest possible sequence. It makes for an interesting RNG manipulation challenge: how much time would one need to wait for the faster sequences to make up for waiting for said sequence? The answer for this version of Simon gives an interesting final result: just use the very first possible sequence despite all of the repeated inputs. Nice work on figuring that out!
Simon says "Accepting to Standard".

despoa: Processing...
Last Edited by despoa 19 days ago
Page History Latest diff List referrers