Posts for qqwref

1 2
6 7
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Great job! Not surprised this game is bottable, but it's very cool to see the results. I like this kind of run a lot more than the out-of-bounds any% stuff.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
FractalFusion wrote:
And of course, the simplest answer to why a roll-over exists is: "The developers didn't care."
IMO it was probably intentional. Good players at that time would be used to arcade machines with scores that rolled over. If you're doing a high score run, you can keep track of how many times it rolled over. That way you can accommodate people who might play for hours in a row, without having to add extra digits. On the other hand, a reachable score cap which makes high score competition impossible.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I just finished a low-optimization run of 100%, which you can see at User movie #638166865030533079. Encode: Link to video I extensively used the info from this thread, so thanks a lot jlun2! I lost a few minutes collecting chests that were near my way, because it turns out you can get enough coins in the levels without losing time, especially with the chain/hit system which seems to give you at least 2 coins per thing you destroy on your way to the Wulf. To make an optimized TAS, you would also want to understand RNG better for things like shop contents (I had to go to one more shop than I wanted for the Drooler) and bonus levels, as well as look into the level-end transitions, and test out a lot of route options since many more animals are available. Fun fact, selling treasure doesn't actually give you the same amount for every shop. It's 50G for the first two shops, then 45G for two, 40G for two, and 35G for the last two. Really weird since you can just warp to the first shop for 10G.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
It feels wrong to me to require completing all puzzles in Time Trial, since from the perspective of a player without memory watch, the mode simply gives you a new puzzle every time, and stores your best overall time. The game doesn't appear to look or act differently if all puzzles are completed, and as far as I can tell, will simply keep giving you puzzles you've already done. One could theoretically consider every Time Trial puzzle "unique content", but that argument could then be brought over to other games as well which generate puzzles randomly. If some logic game generates a random puzzle using a PRNG, it may only have, say, 65536 possible puzzles; should a TAS solve every single one? The fact that Mario's Picross has hard-coded "random" puzzles is just an implementation detail. On a wider level, the "unique content" rule should probably be clarified to say it's for games whose main mode has "infinite" looping levels. There are many games where a huge number of slightly different paths are possible, such as Undertale where there are 93 different endings and a "True 100%" speedrun that saw all of them took 27 hours - I don't think we should argue that a 100% run of the game must do that, simply because some slightly different content is available at each branch.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I support the message and agree that things in the US really need to change. However, a few parts rub me the wrong way, because they feel like an attack on any reader who doesn't agree. Specifically, the paragraph about "refusal to speak is implicit support of the status quo" and the final "Silence is Violence". I think the statement would be perfectly fine if those were removed. A possible site rule could be: submission texts may contain any extraneous/personal information or opinions, as long as they don't make anyone feel unwelcome.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
It sounds like you're suggesting that the microphone can only be used when the game explicitly asks for it. That seems generally reasonable and probably what any TAS of a mic-enabled game would actually do, although I can imagine someone might want to save time by starting to add sound through the microphone slightly before the game explicitly asks for it. However, I think there is a fundamental difference between inserting CDs and inserting audio data through the microphone. CDs (or 'images' as the rules say) are inserted into the place where the console expects to read game data, and furthermore, much of the data given to the game in practice is copyrighted data that we should not be storing (specifically, other games). To compare, the microphone is a peripheral specifically designed to take input from the user, and the input used that way is generally not copyrighted media, but some semi-random information the user themself generates. Even if we pass a pre-existing audio file to the game's mic data reader, as is done in Bizhawk, all we're really doing is exactly controlling what a user inputs into the system. This is the same as what a TAS already does with the controller buttons, and ought to be treated the same: any input is valid and it's up to the TASer to choose input that completes the run quickly.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Wow, crazy videos by Matt Shepcar. I can't believe I didn't hear about those before. He also has a "100%" run of this game (well, collecting all items with no damage in the main levels, then reaching the credits by beating the first Neo Land level, but he doesn't do the remaining Neo Land levels or formally achieve Master class). I think by "cheat bot" he means some kind of program that finds the fastest way through a level. Then he makes a TAS by putting those input sequences together, and records that. I found this half writeup he did: https://medium.com/message/building-a-cheat-bot-f848f199e76b He mentions writing up the rest but there's no other articles linked to that account. Although it's not really relevant to TASing, I'd be interested to see the fastest possible ingame times for all levels, and for the challenge levels of both games. If someone gets his solver maybe that could be computed as well.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
jlun2 wrote:
Was thinking of doing that for 100%, once I finish the any% and figure out the order to do the sidequests.
Ah, cool that you're considering 100%! I don't know if there's a writeup on the internet of exactly what you need, but I have one from a few years ago when I was thinking of maybe doing a speedrun. You do need to buy the compass and all animals (what's available differs by vendor, so you probably need to visit each one). If you can't afford the camera the first time you're in the village, it probably makes sense to get it before world 7 and do the photos as you clean up some fetch quests. You don't get more % for finishing a level with a better treasure, but you do need all gold treasures for the challenge mode later, so if a level has an item as its treasure or the chests take too long, you'll need to run through it twice.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Ooh, cool to see you working on it - seems like a good game for a TAS. As far as avoiding the wolf, it seems like in the later stages he can often be tricked to fall into a gap by jumping or briefly letting go of left/right at the right time. If it's a death pit, you don't have to do anything else to avoid him for that level and can just run as fast as possible. It doesn't make sense from a publishable-movies standpoint (since it only exists as part of 100% and that's too repetitive), but I think it would also be really cool to see time-attack mode TAS'd. It's the same levels, but with no story and a very restricted set of animals, plus each level has an ingame timer.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
partyboy1a wrote:
Is this game purely deterministic, even the Joker tiles? In that case, it should be possible to use a SAT solver to find the optimal solutions, like I did it for Polarium. That would be a difficult but doable task, as it requires you to describe the game and the solution as a set of non-changeable boolean variables (whenever a variable would possibly change its value in the usual context, you need to invent a new variable at that moment). The good thing is that you wouldn't have to worry that much about optimizations and memory usage, as these are all done by the highly optimized SAT solver in that case. I haven't seen your solver. Most of the solutions look very good, and I'm sure you put a lot of effort into making these movies. Definitely good enough for Vault, maybe good enough for Moons.
Yeah, the game's deterministic; it even has a rule that if a tile is going to change to two different colors at once, it doesn't change at all. The idea of SAT solving is very interesting, and I'd love to hear more. I'm not sure how this kind of game could be turned into boolean variables, though; you'd have to turn both the moves and the whole piece joining rule somehow. Would it involve something like describing every possible shape/location and then writing out how every move can affect those? And thanks to you and everyone else for the interest in this run! :)
Tangent wrote:
Maybe I'm missing something. [snip] Edit: Ah, this is one of those "not optimal solutions due to cut scene" things, isn't it? It really... irks me.
Yeah, that gives a 43-move solution (tying the best one I know of), but it is 58 frames slower because of the pairing cutscenes. I could also make a movie with the fewest-moves solutions I know about, if people are interested. I assumed that this game would end up in the Vault, so only going for fastest real time made sense.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I ran through 100%, up to and including stage 8: http://tasvideos.org/userfiles/info/26553525549446392 This includes getting all 125 stars (4 from tutorials) and completing the 5 extra levels in stages 1-7. I also reset to skip cutscenes. The 3-of-a-kind cutscenes take a while but I have a feeling skipping them would just lead to the level not recording. For a little extra entertainment, I did each stage's levels in a different order without wasting time. The orders for levels 1-7 have something to do with the extra levels' shapes (for instance, level 1 goes in a spiral). As for the Club levels... it seems like painting blocks with a Painter takes 10 extra frames per move (no matter how many pieces are painted), and joining Jokers takes 10 extra frames per wave of recoloring. I'm going to see if I can find a way to work this kind of thing into my program.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I've been searching for TAS-optimized solutions for the shape and 3-of-a-kind challenges, as well as the five bonus levels for each stage (only levels 2, 5, and 7 have multiple colors). These are all on the old spreadsheet. For now, I'd say I'm done with that part. I'm pretty happy with what I found, but improvements are always possible and welcome. This means that the last optimization hurdle is the Club levels. Apart from having to add all the special blocks into the optimizing program, I've noticed another problem: some types of blocks cost time, and the program is set up to think in terms of movecount, not time. Specifically, the Painter block costs a constant number of frames for every turn where at least one block is painted, and the Joker blocks have a cascade effect which costs more time the further a triggered joker is from the triggering block. The Joker only appears in two short levels, so we can probably get away without coding to it, but the Painters are pretty common and occur in long levels, so optimizing that will be important for the Club part of 100%. Finally, a lot of cutscenes (e.g. tournament explanation, stage start, stage clear) can be skipped with a reset - the game assumes you watched them and won't show them again. I don't know if this saves time or not yet, and I'll look into this for both any% and 100%.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I coded in some shape-checking functionality, and using that I was able to find some pretty good solutions to all of the bonus-shape and 3-of-a-kind puzzles. They are up on my website (http://mzrg.com/games/denki/shapes-GBA.shtml and http://mzrg.com/games/denki/3kind-GBA.shtml) as well as on the Google Doc (https://docs.google.com/spreadsheets/d/1TdpN7CvHJjB83i2X-MG4hhWs4Ekixljh1znb5TpwRVI). I wasn't sure if I would be able to do 8-10, since that one is really nasty, but I eventually did end up with a solution after a bunch of trial and error, and doing partial solves to see how to get one or two more matches without ruining the shapes I wanted to set up. So, even after a bunch of optimizations I've already made, it's longer than any solution I have for anything else, with the current one weighing in at 217 moves. Much better than the 371-move solution the FAQ gives for 7-9, though :p Here's the current solver program. It has a bunch of #define options for checking for pairs, keeping track of joins, forcing shapes, etc., some of which are only set up for the suboptimal search function I've been using. The idea is that you can change the #define statements and recompile as necessary. C++ can be a bit cumbersome, but I need the speed, since searches already take quite a while and there are 200+ puzzles. http://pastebin.com/kXm3KLvB
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I went through and finished a full any% run: User movie #25736156978858764 Time is 31:42.21 [113614 frames]. Making the TAS itself went really quickly because of TAStudio and AdituV's lua script. I tried to optimize menuing and text, but I'm not an experienced TASer, so it's quite probable I missed something. For a fun sidenote, earlier today I was bored and tried to make a Denki Blocks puzzle with the longest possible solution. I played around with it in my tester program and got 874 moves. Here's what it looks like (the blues need to be solved):
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I've got solutions for the remining Puzzle Master puzzles written up, so you can key those in if you don't mind a bit of cheating :) A lot of the ones near the end are pretty nasty even if you're careful. I don't actually have a sequence for all of the stars yet, but through careful playing and ASchultz's FAQ I could get most of them. He's missing a bunch of the harder ones (so I am too), and as a general rule not all of his move sequences actually work. I think the Club puzzles actually require 20 for each row (2+3+4+5+6) so you would need 100 out of 125. And yeah, the bonus Club puzzles don't require stars, you just have to beat the first 25. A few timings I just did on 2x1, from last button press to the level screen showing again: - Pairing one block takes 313 frames - Pairing three blocks at once takes 313 frames (0 extra) - Nice Pair! takes 493 frames (180 extra) - 3 of a Kind! takes 734 frames (421 extra) due to the star cutscene That 3-of-a-kind penalty only really matters for 1-4, because only that and 6-2 require a pair or more (and in 6-2 a 3 of a kind is impossible). Good to know though. Also, on 2x5, same timing: - Pairing takes 313 frames (whether or not we hit the par time/move!) - Bonus Shape takes 673 frames (360 extra)
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Bump. I ran through all of the remaining levels without a 1-pair solution, and tried to find better solutions (or convince myself they are certainly or probably impossible). I used the technique of starting partway through a solution I already have, which can sometimes give solutions that are only a few moves off the current best. That Javascript program in the previous post came in really handy for that! There are still a bunch of levels where I couldn't find solutions (or couldn't find good ones), but this should be good for now. The new solutions are on the Google Doc. While we plan out the levels and make a WIP... I'm thinking about maybe a 100% run too. I'd at least like to max out the trophy room. I'm pretty sure that requires completing all main-game levels (30 in the first 7 areas and 25 in the last), plus the 30 Club levels (which require enough stars in the main levels to unlock). It might be cool to also get all available stars, which is only a small difference and will definitely feel more complete. You can get stars by making a bonus shape (1 star) or a 3-of-a-kind (3 stars) on certain levels, and since the ingame par is irrelevant, we would only have to complete those levels once, getting the bonuses as we go. Right now, I can find some 3-of-a-kind and bonus shape solutions, but it's not easy since it's common to end up with incompatible shapes, so I can only really get solutions if they're relatively easy. My plan is to add some code where you can set a fixed shape, and get rid of any positions with shapes that can't be part of that shape. For instance, in 1x15, the bonus shape doesn't include any 2x2 blocks, so if we ever form a 2x2 block we know we have made a wrong move. For 3-of-a-kind puzzles, this will help make sure the pieces all form part of the same goal shape.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Cool lua stuff, and nice to see the improved Stage 1. I expect the improvements will only become more important after the start, since there are more and more colors and thus more chances to save joins. I put together a program to test solutions. There's a lot of code but most of it is just ported from the C program. Choose the level first, and then you can paste in a move sequence or add and subtract moves with the buttons. Hopefully this is a bit easier than loading up the emulator, and it'll also give you textual positions from partyway through a solution that you can then feed into my program. http://mzrg.com/games/denki/tester.html I also ran the program a bunch to generate more solutions (with no 2-of-a-kinds, or with 2 matches instead of just 1 or 3) but there's a lot of output, so I'll post stuff later after I've looked at it. ----------------------------- EDIT: I looked through the output, and also tried out a new heuristic (in the suboptimal solver, it keeps the best solutions in terms of the sum of the minimum distance for each color, not the overall minimum distance). Sometimes it saves moves and sometimes it doesn't. I put my big table of solutions up as a sheet on the planning spreadsheet. There are always more improvements that can be made, but this is enough to chart out a potential run of the whole thing. I used rough timings of 85 frames for each match and 180 for a pair/3-of-a-kind cutscene, but those are probably not super accurate, so when two solutions are close it's probably worth testing both.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Ah, that's cool about the 6 frames thing. That means those long waits for matches or pairs are worth even more moves. Does that just apply to any solution, or just a series of moves in the same direction? Punishing a join with a number of moves doesn't really make sense with the way my program works. However, yesterday I added some code to only allow ONE join per level, and then I ran it on all the levels with multiple joins (on the 10000-per-depth suboptimal mode), and it came up with lots of interesting new solutions. Here are all the ones with no pair or 3-of-a-kind cutscene: 1x10: L2 D2 R4 L U2 L U2 L U (16) 1x20: U6 R D12 R12 U9 D3 L D L2 (47) 1x22: D2 L2 D2 L D2 L3 D L D2 L2 U R L2 (22) 1x23: R5 D R D L2 D L3 U3 L D L D2 (22) 2x2: R4 D2 R U5 R2 U3 R2 L U L2 U L3 U L D R D4 U3 L U L D L D2 L2 R D R2 (51) 2x4: D6 L D R D R2 D2 U R3 D R4 D2 R D R (28) 2x10: R3 D3 R D2 R4 U R2 (16) 2x11: L D5 L U7 R U L U L3 D2 L3 D L2 (29) 2x13: L2 U2 L U L2 U L6 U L U R2 D3 R3 U2 L U4 D2 L U L2 U2 R2 U3 (46) 2x15: R3 D4 R2 D U6 R U R U L2 U L D2 R5 D L D2 R (36) 2x21: R U R2 U R6 U3 R2 D2 R D L D L D L U2 L3 D2 R L U L U L U R3 D R3 D2 L3 U R3 L2 D3 U R L D3 U R3 (70) 2x25: U R U3 L3 U L D5 R U2 L U R4 D R3 D5 L U (35) 3x4: R D R D R L2 D L D L2 D R D L U2 L D R U R3 U D R D R3 D L D L U D L D L U R U2 (45) 3x14: D4 L3 D L D R2 D R U L U2 L4 U6 R3 U L U4 L2 D4 R D3 R U3 L U L2 D (56) 3x15: R4 L D L6 D R D U R3 U R U D R D2 R D R2 D3 (33) 3x18: U3 R2 U L2 U9 L4 U3 L R U L5 U L D2 L D2 L2 D R2 U L2 R U2 R U R U L U2 D L (59) 3x22: L2 D2 L D L U R6 U L3 U L U2 L D2 L U R3 (30) 4x3: R7 U2 R U3 R U2 R2 L9 R6 U R U D L7 R6 U2 (52) 4x5: D2 R L2 D2 L U2 L2 D2 L U4 L D2 L2 R2 D L2 D L D L U L D R D R2 D R D U2 L R2 D4 L (53) 4x8: U L U2 L U L D R U R2 U2 L2 U4 L5 R D2 R D R5 D R D3 L2 D4 L2 U5 D L3 D2 L D L2 (63) 4x9: R D R2 D R U3 R2 U R U2 R U2 R U3 L3 R2 D2 L2 U2 R3 U (37) 4x10: R8 D2 R D L D4 L D2 R2 L2 U R2 (27) 4x13: U2 L U6 L D L D L2 U L2 D3 L D L R3 D R L U3 R U D R3 L U L2 D L D2 L D2 L D R D (54) 4x21: D L D2 R D2 U L D L D U R2 U2 L5 R D2 U R2 U2 L D2 L4 U2 R U2 L3 U (46) 4x24: D3 R2 U R U D2 R2 D L D4 R2 L D2 U2 L D L U L2 D5 R D U R U L D L2 (45) 5x2: U4 L2 D L D L U2 L2 U (15) 5x4: L R D R D2 L D L4 D L U4 L R2 U3 L2 U R2 D R2 U L U (35) 5x6: R U2 L3 D L U4 L R U (15) 5x10: L D2 R D R3 D2 U R3 U2 L5 U2 L R D L D2 (29) 5x11: L2 D L2 D2 U L2 U2 L2 U R U R U5 L2 R U2 R D L D8 L D U2 L (44) 5x18: L3 R2 D L3 U5 L2 U2 R2 D3 L2 D L D2 L (30) 6x1: U2 R3 U R4 U3 L U2 L U L3 U2 L U L2 D L D3 R D U R6 (41) 6x7: R2 U L D2 R6 D3 L U3 R U4 L5 R U3 L10 D R D2 U R3 D R (53) 6x8: L2 U R2 L U2 R D3 L4 R U (18) 6x9: L U L U L R U2 L U4 R2 U2 R U3 D R U2 R7 D5 U R3 D R (43) 6x16: R D R L U3 L U R2 D L2 R U R U L2 U2 R (23) 6x17: L D R D L D2 L D3 L5 D4 R U L2 D U2 D L2 (30) 6x23: R3 D5 R D2 L D L2 D L3 U2 R L2 U R U2 R2 L U R2 D2 L5 R D (43) 7x1: R4 D4 L4 D4 R4 D3 L D L U L2 D L5 D R U L U L2 U L3 R2 L U (50) 7x6: D2 L U2 L2 U2 L D4 R4 U2 R3 U3 R U L D L2 U4 L D L2 R4 U7 D L2 U L5 R U R U2 R (66) 7x8: R U5 L U L U L3 U4 R2 U2 R U6 D2 L4 U L U2 (38) 7x14: U3 L2 U L2 R2 U D L2 D4 R D2 R U R L U L2 (28) 7x17: R D2 L D U L U L3 U3 L2 R U3 L U D L D U L U L2 D3 R D U L R U2 (40) 7x18: R3 D3 U L4 U2 L2 U L2 U L (20) 7x20: U R2 U L U R U2 L U R (12) 8x1: R U R2 U3 L U L2 U5 D R2 U2 R U3 L U L3 D L D L U2 L D2 L D L4 U3 L (49) 8x5: U2 L D2 L U R U L2 U3 L5 R4 U2 R3 L U R2 D L2 U R4 D U L U L D L D R D R3 D R L2 U D2 R3 L U D L2 D3 U R3 L U3 D3 R3 (85) 8x6: D3 L2 U2 L3 U L2 D R3 D L D2 U2 L U D L U L2 U R12 D2 L2 (47) 8x16: U3 L D L U L7 U R2 L U2 L U L U R2 U2 L U L U2 L4 U R2 D2 R U (44) There were also solutions for 1x16, 2x1, 2x18, 3x9, 4x15, 6x10, 6x20, and 7x22 that only had one join but made a pair or 3 of a kind. I'm going to try to add some code to ignore pair solutions and then re-run those.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
I'm done getting decent solutions for all the normal levels, and I put all those solutions on the website. So we at least have a baseline solution for everything. I'm planning on putting all my level strings into a single pastebin, to make things easier if you want to try to optimize them. EDIT: Here it is: http://pastebin.com/PLk9tARB I'm also planning on playing through all the solutions and checking the number of ticks for each one. I'd like to reorganize the Google Doc a bit, if you're OK with it - I'd like (a) an extra column for whether the best solution gets an extra cutscene (pair / 3 of a kind / shape), and (b) each level sorted not by proposed order but by estimated ticks. Proposed order should be very quick to figure out when we actually TAS each level, and for planning, the number of ticks would give us a much better sense of what we should try to improve.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Sure, I'm willing to share it. It's not the most user-friendly thing ever, but it does its job. Not sure what you mean by sharing or degenerate states, but I do avoid positions that clearly don't have enough moves left to match up the pieces. I haven't tried extremely large depth-first searches but I imagine they'd take forever without some heuristics about what moves to try first. http://pastebin.com/HRHi4698 Here are a lot of details about the program: The format of a puzzle is a 256-length string of digits: 0 is empty space, 1 is a wall, 2-4 are colors that need to be paired up to solve the puzzle, and 5-7 are any other colors that don't need to be paired up. This string can contain any extra newlines, so I usually have it broken into the 16 rows for readability. After the string, you can put a | and then a number to give a movecount goal which the program will try to beat; the default is 100. The input file is at least one of these puzzles with newlines between them, and I run the program with "denki.exe < levels.txt". The basic heuristic is a "minimum distance" function, which puts a lower bound on the number of moves it must take to pair up the necessary colors. This provides some basic pruning, as we can throw out positions where moves so far + minimum distance >= goal. This is only based on the walls, not on other pieces, so it works really well on mazelike puzzles and not as well on puzzles with very large pieces that can only move a little. There is also a "looksSolvable" function. Normally this just returns 1 (true), but for some puzzles writing a small custom function and recompiling the program can help by forcing the program to avoid positions that I know will make the puzzle unsolvable, like pairing certain pieces too early. There are a bunch of different solving functions: - iterativeDeepeningSolve: (old) try a depth-first search with depth 0, depth 1, ... - singleMapSolve: try a breadth-first search, storing every position in a hashmap, so we can ignore positions we've already seen. If the map gets too big, kill the search. - moduloMapSolve: same as singleMapSolve, but keep a small rotating list of maps storing the positions in depths i, i+1, i+2, etc. and ignore positions in any of the currently used maps. If the maps get too big in total, kill the search. - moduloMapSuboptimalSolve: same as moduloMapSolve, but have a size limit on each map, and when it gets too big throw out positions with high (minimum distance + penalty * number of groups) to keep the "best" positions. I use this one a lot, and penalties 0, 1, and 5 seem good - often one will catch a solution the others won't. This one will never run out of memory but of course it will often miss fast solutions because it throws out intermediate states. 10000 states per map works okay; 100k is better but very slow. - iterativeDeepeningSolve2: try a depth-first search with depth 0, depth 1, etc. and try to cache recently seen positions so we can . Shouldn't run out of memory but may take extremely long to find optimal solutions. Right now I would use moduloMapSolve for optimal solves and moduloMapSuboptimalSolve for suboptimal. Some things I haven't figured out yet: - Figure out a minimum-distance function that takes other pieces into account, such as knowing we have to move around the big fixed piece in 6-3 or 3-13. - Write a fast algorithm for "can this set of pieces still form into this shape". This would make build-a-shape bonus puzzles solvable, as well as some of the harder puzzles where the board/piece geometry means a specific shape must be made to complete the puzzle. - Handle the case of a piece blocking a hallway, like in the level 2 bonus levels. If something is stuck, we can't go around it, and we have to match pieces on each side of the obstruction, prune the position. - Figure out which pieces can go where and prune positions based on that. For instance, if the only way between two areas is a 1-wide horizontal hallway then we can't match vertical 1x2 blocks on either side of it.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
What a coincidence! I'm the guy who made that website/program, and I've actually been recently getting into the game again. In the past week or so I've been optimizing some existing solutions and finding decent solutions for puzzles I didn't have a good one for yet (mostly in the later areas), and I think I'm nearly satisfied with the GBA levels for now. I've been also thinking about TASing this lately, but haven't started yet. It's cool and surprising to see someone else interested in this game, especially since you have started work on a TAS! Would you be interested in collaborating? Finding and proving optimal solutions is pretty tough for a lot of the levels, even with a computer program, as the number of states often expands exponentially. So sometimes 100+ move solutions can be proved optimal, but other times you can't even reach 20 moves without running out of memory (in my case about 10 million states can be stored in RAM at once). So, for most of the game, suboptimal solutions are the way you have to go. My program can generate some pretty impressive suboptimal solutions although, of course, the heuristic I use works better on some levels than others. For the hardest levels, I've had to start off by doing some moves (anywhere from a handful to 50+) and letting the program optimize the rest. So there will always be room for improvement, but if we try our best we can end up with solutions that are pretty tough to beat. As for "Nice Pair"/"Three Of a Kind"/"Bonus Shape", I definitely agree it's worth it to avoid them when possible. This should mainly be a problem in the earlier levels because a lot of those are gimmes, whereas in the later levels they can be very difficult and shouldn't show up in optimal solutions. Something that will be a problem throughout is completing colors; it'll save time to finish two or more colors on the same move, but it may not always be possible to avoid that without wasting more moves than it's worth. I think all of these requirements can be worked into the program, to look for solutions with various constraints and see if they are worth using instead of the unconstrained one. I can try to
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
This looked absolutely incredible, with the two ships moving flawlessly to "collect" all the bullets while maintaining the right color, and working together to destroy groups of both colors. It's great to see a shooting game TAS that isn't just dancing around bullets.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Well, the RBA any% route people use in Banjo-Kazooie is pretty close to low%. The Banjo speedrun leaderboard lists a bunch of RBA runners if you want to check them out. That route only requires 810 notes and 41 jiggies, which is minimal. I wouldn't really call it a proper low% though, because they don't go for the minimum number of moves - it should definitely be possible to skip some moves at the expense of speed and fast jiggies. It's also possible to entirely skip Mumbo tokens, by transforming into a washing machine to get free transformations, although a low% run wouldn't need to do that :p
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Bump. In case anyone's interested in this game, I made an unoptimized TAS (only ~3k rerecords) of this game, in a "low%" category where the goal is to collect as little as possible. Although the movement is not very precise it may give you some ideas if you want to do a high-quality TAS of Grunty's Revenge. For instance, you can skip fire eggs now. http://www.youtube.com/watch?v=RtiLsOjf69U I'd be happy to upload the movie file if anyone wants it.
Experienced Forum User, Published Author, Player (138)
Joined: 8/27/2004
Posts: 165
Apart from all the awesome pi references outside of the video itself, I really felt like this was a better submission than the pony one. More cool stuff happens, it's more memorable, it's more interesting to watch (nothing I wanted to skip past), and it feels more like the user input is completely controlling the game. It's also much more elegant, as it not only inserts the code very quickly, but also skips the multiple input stages of the pony one. Custom graphics and music is pretty impressive for sure, and as a coder I can appreciate how much data had to be inserted for that to be a possibility. However, the way this TAS was able to put an animation on the screen, with new graphics tiles, while also displaying digits of pi, all synced to the music, just blew me away. The pony version was a good demonstration, but this is the kind of thing I would show to friends who don't know about TASes.
1 2
6 7