There doesn't seem to be a thread for this SNES game yet, so I'm making this one.
I think this game's levels (while the game probably could also be solved by brute force approaches, and anyone would be free to try it that way), aren't very long and the mechanics aren't quite as straight forward as they are for some other brute-forced games, so I thought ''manual human approaches and reasoning'' may be also a viable option, and especially so if multiple different TASers are inclined to contribute to it. At least for finding optimal solutions to this game's levels, one might not even need to run the game on emulator (outside of lag maybe or testing ideas for potential exploits), which is a godsend, because unless one wants to turn the audio off, one would be tortured by the game's awful music. And this game could be something for people that want to get into TASing and want to start out with an easier game, or something for TASers to tackle during freetime or waiting times like travel times with e.g. just pen and paper to write down solutions with a short efficient notation that can be used to describe solutions clear enough to be reconstructable from the notes. So if anyone feels like thinking up candidate solutions for fastest level completions for these levels during their free time similar to how some folks solve sudokus or crossword puzzles, feel free to do so (and maybe share it here, while you're at it).
Also, in case someone wants to write a brute-force search script for a bot to solve some levels of this game, I'd suggest to make a post mentioning that it's finished & working, once that is the case, I guess, as it may be of interest for those that might be inclined to try to solve some of these by their own reasoning (depending on the degree of activity that may go into this game). And analogously, for those who are interested in solving some of these and providing their solutions via posts, I'd suggest to post their solutions after finding them, especially if they (according to the formula for calculating their time) appear to be faster than the otherwise current best solution present in any posts with solutions (or even list multiple different solution candidates per level to help exhausting the possibilities, since even sub-optimal solutions may help in finding the fastest solution, depending on what other solutions the fastest solution may be similar to), and to update their post after they found new solutions, as feedback for others to know which levels might have had a good amount of optimization or brainstorming gone into them already (just from a redundancy avoidance perspective, aswell as a perspective about what the easiest way of managing the availability of a transparent overview of the solution ideas would be). But at least for a long time there should be enough levels to optimize without having to fear that one may be redundantly trying to optimize a level that already has been perfectly optimized. Admittedly for some levels it may get bothersome trying to keep in mind the positions of Brainies if one doesn't make intermediate notes while one's trying to find a fast solution, but for many levels it shouldn't be too bad.
- - -
General level setting:
Each of the 101 levels from 00 to 100 consists of a (chess-like) board or grid of tiles with the rectangular size of 8 tile rows times 13 tile coloumns. Each of these in total 104 tiles can be either in a (by various means) universally occupied state or a not universally occupied state (the reason for this specification is that there also exist semi-occupied tiles with coloured locks that only count as occupied for Brainies of other colour than the lock's colour).
OOOOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOOOOOOOOO
OOOOOOOXOOOOO
OOOOOOOOOOOOO
OOOOOOOOOOOOO
The cursor's initial position in every single level is at the tile in the 6th tile row (counting from the top downwards), and the 8th tile coloumn (counting from left rightwards), and is demarcated with an X in the scheme above, and as pink boundary of a rectangle in level images. For all times it holds that the only sprite objects that can ever change their grid tile location on a level are Brainies & the pink rectangular cursor. All other objects represented via sprites can only stay in place or otherwise vanish for the rest of the current level attempt (until the level's time runs out) if and only if a Brainie moves onto them to their respective tile location; and the only objects that can vanish are colourd bombs, hearts, clocks, joker cards, coloured locks, and Brainies themselves. Arrows, coloured warps, bouncers, stop signs, and Brainie platforms of a level stay permanently where they are located.
- - -
Mechanics & a list of level elements and their properties:
For the game's mechanics, a grid tile is in an
universally occupied state if and only if (at least but effectively also exactly only) one of the following cases is true:
° A Brainie is located on the tile;
° The tile is a black boundary tile;
° A red stop sign occupies the tile;
° A wall sprite or environmental obstacle sprite (ranging from water, rocks, ice blocks, trees, and moon-like craters to snow barriers; which differ depending on which range of same environment using 10 consecutive levels in the 101 levels the current level is in) occupies the tile;
° A bouncer is located on the tile.
*
Cursor (uses a pink rectangular sprite): Using Up, Down, Left, or Right, the cursor can be moved around on the 8 tiles by 13 tiles grid freely, in step-size of 1 tile, and only horizontally or vertically (but not diagonally) at a time. The cursor can not move past the level boundaries (in particular, the cursor cannot loop around from 1 boundary side to another), but otherwise, nothing stops the cursor's movement within the full rectangled grid. One can (via button input) only switch the player's control away from the cursor to any Brainie (but never more than 1 at the same time), but nothing else, and in order to do so for a given Brainie, the cursor needs to be moved to the tile at which the (grid-motion-less) Brainie in question is located.
*
Brainie (they come in Smarties shape and with blue, red, green, or yellow colour): One can move any currently with the cursor selected Brainie around within any level using Up, Down, Left, Right. Whenever 1 of these direction buttons (or multiple of them, but then 1 of them takes priority) is pressed to move a Brainie, the Brainie will start to or try to unavoidably move across grid tiles towards the chosen direction until the next tile on the grid in front of the moving Brainie in the direction that it is moving (or trying to move) fits into any 1 of the following cases:
° the tile is universally occupied; and in this case the Brainie will come to a halt on the last tile that preceeds this tile.
° the tile contains an arrow; and in this case the Brainie in general can and will move onto the arrow and will continue from there as before, but in the direction that the arrow is pointing at. This can in some cases lead to softlocks in which a Brainie gets endlessly redirected from 1 arrow to another.
° the tile contains a bouncer; and in this case the Brainie will not move onto the bouncer but will continue to move back away from it in the opposite direction. This can also lead to softlocks in some cases with bouncers, warps, and/or arrows being involved.
° the tile contains a lock of a different colour than the moving Brainie's colour; and in this case the Brainie comes to a halt on the last tile that preceeds this tile.
Only when a Brainie is in a state of not moving, then (with a button press) the player can switch the control back from the Brainie and to the cursor (that travels with any Brainie, alongside it, but isn't visible when any Brainie is controlled) which will appear on the tile that this Brainie currently is located in.
*
Walls (they come with various graphics depending on the range of levels one is at): Tiles with a wall displayed in them behave like any other universally occupied tile.
*
Brainie platform (a round silver plate with a coloured dot in the center): Brainies can move onto any tile with a Brainie platform on it (provided the level structure allows it). For completing a level, a constellation needs to be reached in which all Brainies must end up on tiles with Brainie platforms without any Brainie being in motion anymore, and this has to line up in such a way that for each Brainie the Brainie's colour needs to match the Brainie platform's colour that the Brainie is sitting on. There is very few levels that have more Brainie platforms than Brainies.
*
Heart: Brainies can move onto any tile that has a heart on it (provided the level structure allows it). Whenever a Brainie moves onto a tile with a heart, the heart vanishes for the rest of the current attempt of solving the current level before the game's time runs out, and the number of times in which the player doesn't manage to complete a level within the provided time frame before the player has to restart from the beginning is increased by 1.
*
Stop sign (red octagon with white strike-through): Tiles with a stop sign on them behave the same as universally occupied tiles. Brainies cannot move onto tiles with stop signs on them.
*
Joker card: Brainies can move onto any tile that has a joker card on it (provided the level structure allows it). If and whenever (only) a Brainie moves onto a tile with a joker card on it, the joker card will disappear for the rest of the current attempt of solving the current level before the game's time runs out, and a joker card counter in the heads-up display increases by 1 but only for up to the duration of the current attempt to solve this level.
*
Bomb (these are either yellow, green, red, or blue, just like the Brainies): Brainies can move onto any tile that has a bomb on it (provided the level structure allows it). If and only if a Brainie moves onto a tile with a bomb that has the same colour as that moving Brainie while the player's current amount of collected joker cards is 0, then the Brainie will be stopped on the tile with the bomb, turns grey and then vanishes, and the level turns unwinnable for the current attempt. If one is in the same situation but with the only exception that the current amount of collected joker cards is 1 or more, then the bomb vanishes (and cannot affect Brainies anymore in the current attempt), the current amount of collected joker cards is reduced by 1, and the level continues as if the bomb didn't exist. Note that it doesn't matter what Brainie collects a given joker card, since as long as the joker card has been collected it will be used up for any Brainie that gets into such a situation. For any Brainie with different colour than the bomb's colour, the tile with the bomb behaves the same way as if there were no bomb on the tile (i.e. the bomb doesn't affect such a Brainie).
*
Lock (these are either yellow, green, red, or blue, just like the Brainies): A Brainie can move onto any tile that has a lock on it if and only if the colour of the lock matches that Brainie's colour.
*
Warp (yellow, green, red, or blue large disk): Brainies can move onto any tile that has a warp on it (provided the level structure allows it). For any colour among yellow, green, red, blue, there exist either 2 or no warps in a given level. For any Brainie with different colour than the colour of a given warp, the tile with that warp on it behaves the same way as if there were no warp on the tile (i.e. such a Brainie isn't affected by the warp). If and only if a Brainie with the same colour as the colour of a given warp moves onto a tile with that warp (starting from a different tile), then the Brainie is teleported to the 1 other tile in the level that has a warp of the same colour on it but only if there is currently no Brainie located on this other warp tile, and in this case the Brainie will continue its movement (if possible) at the other warp tile in the same direction with which it moved onto the initial warp tile (and if it comes to a halt on the 2nd warp tile it will not be teleported back); and otherwise the Brainie will also not be affected by the warp. Note that if a Brainie ends up being positioned on a tile with a warp that has the same colour as that Brainie (which can only happen if at that time another Brainie is located on the 1 other tile with a warp of the same colour), and the Brainie that is located on the other tile with a warp of that same colour moves and comes to a halt on a different tile, then as consequence of this the Brainie that is located on the tile with that warp, that has the same colour as the Brainie located on it, will stay where it is (it will not automatically be teleported once or multiple times).
*
Arrow (displayed with all 4 Brainie colours): It can happen that a Brainie moves onto an arrow, stops moving and stays on the arrow, but this is only possible if the closest tile next to this arrow in the direction of the arrow is universally occupied, or occupied by a Brainie or a stop sign or a lock of a different colour than the Brainie that is on this arrow (and for a Bouncer in this spot the effect is unknown, but there is no level with such a situation). And if a Brainie comes to a halt on an arrow, then the player will be unable to move this Brainie (in particular it is not possible to make a Brainie stop on an arrow to then move the Brainie from there into a different direction than the direction to which the arrow is pointing), and only if a move (consisting of everything that happens between the start of moving a Brainie to the end of the Brainie's motion) finishes such that at some point during the move the object that was blocking the path of the Brainie on the arrow was and stayed removed from this tile (which can only happen if a Brainie was on that tile and was moved away and ended up elsewhere, or if a lock was on that tile that was removed by a Brainie that ended up elsewhere), then as soon as this happens, the game will automatically attach a move (to the end of that move by the player) in which the Brainie that was located on this arrow continues its move. At this point it is unknown what may happen if multiple Brainies placed on arrows are ''freed'' with 1 move of another Brainie (though such a situation may be impossible to get into, but I'd assume the game either has a way of determining the order in which it moves the Brainies that formerly were on arrows, or the game may just crash). Note that ''freeing up'' a Brainie in this manner is a way in which a Brainie can be moved without the cursor being attached to or following that Brainie, nor having to move the cursor to that Brainie in order to move it.
*
Clock: If and only if a Brainie moves onto a tile with a clock on it, then the clock vanishes for the rest of the current attempt of solving the current level before the level's time runs out, and the collection of the clock seems to generally add 30 seconds to the current level's timer.
*
Bouncer (the sprite with a blue central circle and a ring around it with the 4 colours that are used for Brainies): Whenever a Brainie moves towards a bouncer (or tries to move towards it) from a neighboured tile next to the tile with the bouncer, the Brainie will not move onto the tile with the bouncer and will continue moving back in the opposite direction.
Other notes on the different level objects:
No grid tile of any level ever has at the same time 2 or more non-Brainie objects (from the above list) located on it (in case anyone is wondering about tiles that may only visually show the sprite of 1 object located on it but not the sprite of any further object located on it). The various objects are introduced step by step into the levels the further one progresses: Level 10 is the first level in which an arrow appears, level 20 is the first level in which warps appear, level 30 is the first level in which a bouncer appears, level 50 is the first level in which a lock appears, level 60 is the first level in which a bomb appears. Brainies always start out in tiles that would without the Brainies be unoccupied tiles.
- - -
Further observations, remarks and questions:
The player can press both shoulder buttons, L & R, together in order to lose 1 life and retry the current level immediately (provided there was still a life left).
It seems that pressing A as soon as it initiates the switch from the top-down view to the isometric view on the level works the fastest to get control of the cursor in order to move it around. The game appears to have no randomness at all, and it seems to have at most close to no lag during phases in which the player moves Brainies or the cursor around the level (exempting level fade-outs into the level time tallying screen & level load times that follow, which might take differently long depending on what happened in earlier frames). For getting control over a Brainie & moving it, it doesn't seem to matter if one keeps holding the input for the last direction in which one moved the cursor or releases it as soon as possible. The red Brainie has the slowest walking animation for its sprite, then yellow is faster, followed by green and then blue, but this seems to be just a visual difference.
It is unknown if anything unusual might happen if a level's timer runs out at the same time as the level is completed or as a heart is collected or a Brainie dies to a bomb or moves onto a warp or opens up a lock or collects a joker card or a clock or moves onto an arrow or bounces back from a bouncer, or at the same time as a freed Brainie would automatically be moved, regarding any lasting effects afterwards.
Apparently the cursor during its movement can move back to the tile it was just moving away from, instead of continuing further towards the last tile one made it move to, if one doesn't hold long enough towards that direction but just shortly.
Other than that, GameFAQs has some guide for the levels (
https://gamefaqs.gamespot.com/snes/588227-the-brainies/faqs/35246 ) and a list of passwords to certain levels (
https://gamefaqs.gamespot.com/snes/588227-the-brainies/cheats ).
- - -
Time costs associated to different kinds of actions:
Time cost for collecting a clock: 60 frames (since collecting a clock adds 30 seconds to a level timer and it takes the level time tally 2 frames per remaining second to finish up).
For the cursor (once control is gained over it) to start moving it takes 1 frame of delay (the 1st frame that has the directional input that makes it move). Then for every step from 1 tile to another that the cursor makes it takes the cursor 8 frames (and due to its smooth uninterrupted movement when one makes the cursor switch the direction that it goes it also holds for zigzagging paths, without costing more time than avoiding movement direction changes for the cursor's path as much as possible) and it doesn't matter if the movement is sideways or vertically or if the cursor is in the foreground or background (which is all equivalent even with the isometric perspective). Then, when the cursor reaches its destination, there is 1 frame of delay for the cursor to come to a halt, and in the same frame the next Brainie can be selected with an A press in that frame (provided there is a Brainie on that tile), but a directional input together with the A press in that frame does not yet have an effect (and needs to happen at least 1 frame later to do so).
For a Brainie to start moving at the beginning once it is selected it takes 1 frame of delay (the 1st frame that has the directional input that makes it move). The for every step from 1 tile to another that the Brainie makes it takes 8 more frames (independent of direction or depth of the Brainie in the isometric perspective). But also every time that a Brainie stops moving, followed by another directional input to make it move again (without any new Brainie being selected in between), 2 frames of movement delay occur in which the Brainie doesn't move (1 frame for the Brainie to stop moving, and then 1 frame of delay before the Brainie starts moving in the new direction) even if the directional input would make the Brainie move back in the opposite direction that it was moving; but every time a Brainie hits a bouncer there is 2 frames of delay aswell (but instead of not moving for 2 frames, it moves 1 frame further in the direction it was going, barely onto the tile with the bouncer, and then moves back out of the tile in the next frame). And whenever a Brainie stops moving without another directional input commanding it to move again, but in order to deselect the Brainie and get control back to the cursor, there is 2 frames of waiting time, consisting again of 1 frame of delay (for the Brainie to stop moving), and only in the next frame after that is the earliest frame in which A can be pressed to deselect the Brainie (which costs 1 frame aswell). When a Brainie moves onto an arrow, the arrow makes the Brainie continue moving smoothly (like the cursor) without any frames of delayed movement (even for being sent back by an arrow to where a Brainie was coming from).
The time that teleporting a Brainie takes is 29 frames. If a teleported Brainie stops moving immediately after the teleportation finished up, then there is as well 1 frame of delay for the Brainie's movement to finish up, and only as soon as the next frame after that one can place working directional input for making the Brainie walk again. If a teleported Brainie continues moving in a direction after the teleportation finished, it does not take the Brainie 1 frame of movement delay before it starts walking again.
Other time cost related notes:
The score counter appears to at least visually max out at 9999, but reaching this value has no influence on the waiting time for when the game quickly counts down the remaining level time with which a level was completed (in particular it doesn't shorten this waiting time). In expectedly rather rare cases it might be faster to wait 1 frame during a level before completing it, provided that this allows the level's timer to finish its animation for decreasing its value by 1, in order to allow the quick countdown (which appears to take 2 frames per remaining second of the level time in order to finish up) of the remaining time that follows the completion of the level to finish 1 frame earlier (provided that the long waiting time after the tally finished and before the next level loads doesn't ignore such tiny frame count differences). It seems that the movement speed of the cursor is the exact same as for moving the Brainies (and they probably use the very same mechanic but are just displayed differently).
- - -
With this knowledge a formula can be derived for the amount of frames that different level solutions take, for the purpose of comparing them:
F = 30°T + 29°W + 8°S + 3°B + 2°C + 2°D + 2°b [+ L]
with:
°
F equal to the total number of
frames (relevant for comparing different solutions of a given level);
°
T equal to the total number of clocks collected for their
time bonus;
°
W equal to the total number of times that any Brainie used a
warp from one place to another;
°
S equal to the total number of
steps that were taken from any 1 tile to the next by the cursor and all Brainies, except for tile position changes that occur to Brainies when they are teleported from 1 warp to another (and when a Brainie hits a bouncer, only the associated 2 frames of delay contribute to the time, as Brainies don't move onto tiles with bouncers on them);
°
B equal to the total number of times that a control switch happened from the cursor to select any
Brainie;
°
C equal to the total number of times that a control switch happened from any Brainie back to the
cursor;
°
D equal to the total number of pairs of
directional input commands (in which each of the 2 directional inputs makes the same Brainie move), without any other directional input command in between the pair of directional input commands, and without the Brainie that is moved that way having been deselect in between the directional input pair;
°
b equal to the total number of times that any Brainie hit a
bouncer;
°
L equal to the total number of
lag frames that occur during the given solution process for a level.
This formula may be off by 1 frame, since the formula assumes that any solution initially moves the cursor away from its starting position to select some Brainie, and in the rare case that the starting position of the cursor coincides with a tile with a Brainie on it that then is immediately selected by the cursor, the 1 frame of delay before the movement of the cursor starts doesn't apply at this point anymore. The formula also assumes that solutions never select and immediately deselect any Brainie at any time as this would be a useless 3 frames (1 frame for selecting the Brainie with A or B, 1 frame for deselecting it immediately afterwards with B or A, and 1 frame for the delay in the start of the cursor's movement) wasting move and doesn't allow a Brainie to be selected earlier by attempting to make the cursor's position jump towards another Brainie along the cursor's path.
Bouncers occur rarely in levels and would rarely be useful, and as long as the number of directional input commands and the number of control switches between Brainies is similar enough between 2 different solutions, the most significant parameters regarding frame count differences would be the number of steps and the number of times that warps were used (where 1 warp takes a little longer than 3 steps).
[colour 1][direction 1.1][direction 1.2]... [empty space][colour 2][direction 2.1][direction 2.2]... ... [empty space][colour n][direction n.1][direction n.2]... [direction n.m]
is a suitable notation for keeping track of solutions, where [colour 1], [colour 2], ..., [colour n] can each individually refer to any colour among green, yellow, red, blue, and where Up, Down, Left, Right are the available options for [direction 1.1] up to [direction n.m]. Only in levels that have multiple Brainies of the same colour, one would be required to specify further which Brainie one is referring to in the notation, and one way to do this would be to write down a Brainie of colour X as Xn if and only if it is the n-th Brainie of colour X that one finds if one searches for Brainies of that colour starting at the top left corner of the grid, and continues to search rightwards across tile rows, and moves tile row by tile row downwards with the search (and I'll be using this order for my notation).
With this notation,
° the value of B for a given solution coincides with the number of letters in the notation for the solution;
° the value of C for a given solution coincides with the number of empty spaces between the left-most & right-most letter in the notation for the solution;
° the value of D for a given solution coincides with the number of arrows in the notation for which the closest previous symbol also is an arrow.
The empty space isn't needed for the notation to make sense, but it makes viewing solutions easier and less confusing.
Example:
R^>v B^>v G^>v Y^>v. (F = 621; S = 7+11+8+11+6+11+8+11=73; B = 4; C = 3; D = 8)
B is equal to 4 in this example, because 4 (capitalized) letters (among Y, G, R, B) appear in the notation for this solution: R, B, G, Y.
C is equal to 3 in this example, because 3 empty spaces appear in the notation for this solution, namely between v & B, then between v & G, and finally between v & Y.
D is equal to 8 in this example, because 8 pairs of arrows appear in the notation for this solution, which are the following: (^,>), (>,v), (^,>), (>,v), (^,>), (>,v), (^,>), (>,v).
Since the control of Brainies can only switch back and forth with the control of the cursor,
C = B - 1 holds in general, and one may just as much shorten the total frame count formula to
F = 30°T + 29°W + 8°S + 5°B + 2°D + 2°b [+ L] (- 2)
or (for sole comparison purposes) further reduced to just
F = 30°T + 29°W + 8°S + 5°B + 2°D + 2°b [+ L].
Good systematic ways for finding new or better solutions compared to existing ones may be to e.g. take existing solutions and choose some intermediate point in the solution to change up only the moves that come afterwards, or to fix an order in which one wants to move the Brainies and then tries to search only for solutions in which the Brainies are moved in this order (followed by checking other Brainie orders), or in some cases one may be able to find a way to move a Brainie with a different route to the same end point as in a given solution, except with less time costs involved to substitute that with what the solution has. But one could aswell approach levels by trying to figure out which actions or changes or specific moves that have to happen at least at some point in any given solution to help reducing the number of options that have to be considered (depending on how restrictive the necessary conditions for solutions are that one found).
Here are some ZIPs of all levels of the game:
All levels (unmodified images of individual levels):
https://cdn.discordapp.com/attachments/396448200447361024/718944912908746782/All_The_Brainies_stages.zip
All levels (with only grid added with 10 levels each):
https://cdn.discordapp.com/attachments/396448200447361024/721188258586820668/The_Brainies_stages_with_grid_only.zip
All levels (with grid & cursor position added with 10 levels each):
https://cdn.discordapp.com/attachments/396448200447361024/721188435112624219/The_Brainies_stages_with_grid__cursor.zip
And here are images for all levels (also referred to as stages), first how they appear in the game, and then with grid and initial cursor position overlaid:
The order in which levels appear in the images is as follows (for X ranging from 0 to 9):
X0 X5
X1 X6
X2 X7
X3 X8
X4 X9
Levels 00 (on the left) to 39 (on the right), unchanged:
Levels 40 (on the left) to 69 (on the right), unchanged:
Levels 70 (on the left) to 99 (on the right), unchanged:
Levels 00 (on the left) to 39 (on the right), with grid & initial cursor position:
Levels 40 (on the left) to 69 (on the right), with grid & initial cursor position:
Levels 70 (on the left) to 99 (on the right), with grid & initial cursor position:
Level 100, withough and with grid & initial cursor position: