Working on a TAS, maybe
2 years ago
Illinois, USA

I've been poking around with working on a TAS (tool-assisted speedrun) of this game and I've developed a few useful tools that might be able to help others who are speedrunning traditionally. If anyone wanted to collaborate on a TAS I'm very happy to do so -- I don't really have the time to commit to doing a full run on my own, and this is my first foray into TASing at all.

The most useful thing is that I've written a script to help find starting monster combinations. So if you want to know how to get a specific slate of three monsters I can help you with that. It might be possible to get every combo of the first 9 monsters in the monster list, I haven't tested it that far yet.

I dug into how the monster selection questions work -- there's 20 different memory addresses keeping track of values. 18 of these are altered by either 0 or 3 to 6 (or -3 to -6), depending on the question; the "No" response multiples all changes by -1. 2 of them are weird, and I don't know what those ones are really doing. One interesting thing is that there is also a timer -- if you don't select right away, a question becomes worth "less". This is not important in a speedrunning setting as any choice will be made before the timer has an impact, but it's interesting.

I have no idea how the game then uses this to make the decisions about what monsters you end up with.

The important part is that since I've figured all of this out, I can run a script to "try" the answers to any specific set of questions without actually running through the questions; then I can advance a tiny bit and read the monster cards selected out of memory. I used this to get a very specific starting monster slate (Dino, Gali, Naga) which I wasn't sure was even possible. I don't know if this is optimal but based on the route I'm brainstorming it was the best combo I could think of. (I don't know if this route is possible though, I'd have to get further to figure it out.)

I also made a list of all the monster IDs (which start at 0 for Tiger and run down the monster list as you'd expect) and card IDs (which are not nearly as obvious). This has more implications for making a TAS than a traditional speedrun as I've figure out how to "peek" the entire deck for both you and your opponent so I can probably eventually script in a way to ensure victory in the fewest turns possible (and manipulate RNG which I have not yet looked into at all).

Anyway if there is a Discord community or anyone wants to discuss this further let me know. Looking forward to continuing to work on this eventually and share anything interesting I find -- this game is one of my favorites to play casually and I've played through it many, many times.

RevHavoc likes this
San Diego, CA, USA

Awesome work figuring this stuff out. Unfortunately, I can't really help much other than tinkering on the PS2. But I'll try to help as much as I can if you need me to.

Does your script also take into account the difficulties (Hard, Medium, Easy) & saying yes or no to Pabs in the beginning? (Lol my 1st walkthrough video confirms the Pabs question)

I found out that these 2 variables affect the monster cards in the beginning and potential breeder cards. By playing in Hard Mode, you sometimes get random cards that aren't in the normal deck such as Nuts Oil, Support, Hot Battle, and Spark.

Really crazy if somehow you can get a Pride Env card to spawn in the beginner deck.

I'm not sure about any discords in particular other than the monster rancher discord, they are pretty active, but they don't Speedrun this game, but there were people who played it a lot on emulator when I was active on it.

I'm willing to help as much as I can. Getting a full-blown TAS would be amazing.

Illinois, USA

Ah, no, I did not know that those variables (difficulty, yes/no to Pabs at the beginning) affected the Monster Cards. That's fascinating! I'll definitely look into that next -- I'd love to know exactly how it all works because there are just so many questions and stuff. The timer-based deprecation of value of a question is just... something else. I would have never guessed that it would have an effect before I looked into this.

I think the most interesting thing from the questions is that question 12 ("Between a dog and a cat, I would like to have a dog as a pet") affects only three of the memory addresses. In some of my early experiments I found that changing that from Yes to No replaced Tiger with Hare, so I'm sure those addresses are used to figure out whether Tiger is one of the monsters.

Also haven't looked into the actual card decks -- I assumed that only the "first set" of Any Monster/Breeder Cards would show up. (In the card ID list, it starts at 1 with Tiger's Right Claw, and then proceeds through the first 9 monsters' skill cards in order; then IDs 109 to 125 are the first 7 Any Monster cards and the first 13 Breeder cards [not in that order -- the breeder and any monster cards are mixed]. Nuts Oil is in the "second set" (between Durahan and Zilla's skill cards) and Support and Spark are both in the "third set" (after Zilla) so it would seem that this isn't the case.

I'll definitely keep poking around to try to figure out how the decks are assembled and if any really interesting breeder cards show up there, and how the difficulty level affects things! Feel free to message me on Discord if you think up anything else that seems to affect the starting cards/decks -- it feels like a big puzzle to get the "ideal" starting deck (although with RNG manipulation it probably won't matter as much for a TAS -- honestly doing Tiger Right Claw/Left Claw/Horn combo three times with a couple cheaper skills from another monster, while ensuring the opponent doesn't draw dodge/block cards, would be pretty fast).

San Diego, CA, USA

LOL the TAS will be Critical Gas & Tiger Combos to finish off the stragglers.

I was recently looking into this, but got busy again (same SOB story I keep telling people).

It looks like most of the decks I was creating weren't affected by Pabs' Question (at least on Hard mode). I'm also not sure if Colt's question about keeping the Phoenix card affects anything. Currently, I don't think it does.

The majority of the breeder cards I got were always the same combo of:

Will Power Grit Mango Wild Rush Encourage

but this combination got me something different: Yes 15 means say YES to the 1st 15 questions. Then NO to the last 5. Yes to Pabs: = Yesx15 Nox5 = Tiger, Gali, Pixie; Will Power, Grit, Mango, Wild Rush, Encourage

No to Pabs: = Yesx15 Nox5 = Tiger, Gali, Pixie; Will Power, Help, Wild Rush, Hot Battle, Fake Cry

As you can see, the 'NO to Pabs' variant gave me: Help Hot Battle Fake Cry

Very Strange.

I wasn't actually writing down the time when I got Spark or Support because I wasn't actually sure what I selected as the difficulty then I deleted my notes since I was going to start over with only Hard being selected.

All I know is that it's entangled within these selections somewhere in either Medium or Easy. Yesx19 - Nox1 thru Yesx12 - Nox8

Also it looks like you're correct when it comes to the monster's skill cards since those haven't appeared to change. For example, my Gali always has: Scratch x3 Kick x2 Spin Cut x1 Thunder x3 Flame Wall x3 Lie Down x3 and from my small sample, it doesn't appear to change.

Maybe you can start with that selection I provided above and see what is actually changing in the memory address to allow those nonstandard cards to be obtained. Then the possibilities are endless :)

Illinois, USA

Definitely, thanks for the extra info! I actually just finished simulating all 1,048,576 unique combinations of questions (based on what I had started with -- hard/yes for Pabs). The most common result (49379 times) was Golem, Dino, Naga, while the rarest (1376 times) was Tiger, Suezo, Pixie. The most common individual monster was Gali, while the rarest was Naga (not a huge difference here -- 382460 for Gali down to 332498 for Naga).

I did discover that I missed something fairly obvious, in retrospect -- the first 9 addresses I identified for the question selection are directly tied to the 9 monsters, in order. No idea what the remainder are doing quite yet but it's probably tied into the breeder/any monster cards, so I have a decent starting point there.

For the first 9 addresses, the game simply takes the three highest values and uses those to determine the monsters (and the ordering). The ordering is actually what made it super obvious that this was happening -- I wrote a script to just change each address between its min and max and I could see the new monster appear in the third slot, then move to the second, then the first as it increased.

Here's a table of how each question affects each monster, if you answer "yes" to each question. For "no", just multiply the values by -1. Add them all together, and the highest three scores are your monsters.

https://i.imgur.com/rKN3T0x.png

(Note that these are the "max values" -- there is that timer attenuation I mentioned earlier but I think you'd have to linger a long time before making a decision for it to have an impact. I'll figure it out exactly sooner or later, but for speedrunning we want to go as fast as possible so the attenuation isn't really important.)

Next step is figuring out how Pabs' question response is stored, if Colt's response has a similar effect on anything, where the breeder/any monster cards are stored in memory, and then finally how those cards are determined.

I'll eventually look into the effect of difficulty but for now it might be too many variables to consider.

Edited by the author 2 years ago
BazookaBob2018 likes this
San Diego, CA, USA

Flat out amazing work on that table.

But it seems there is something going on. Not exactly sure. How exactly does that timing attenuation you mention work? Is it like milliseconds, seconds, minutes? I'm trying to figure out how I got different results.

In hard mode, I have gotten 3 different results by answering 3rd and 4th question = no The rest = yes

Speedrun walkthrough episode #1 = Hare, gali, tiger Actual Speedrun = Hare, gali, naga And just now after trying it = Hare, gali, suezo with help, hot battle, fake cry???

I wonder how that's changing the last monster? Maybe the colt question, but I didn't have time today to look at it and just tried it before going to bed.

If I have time tomorrow, I will take a look and see what exactly caused it. By looking at your table, something is indeed causing it to shift down by 3 levels consistently. Hopefully, it isn't something random like skipping the intro cutscene in the beginning. Thank you so much for taking the time to figure this stuff out.

San Diego, CA, USA

You won't believe it, it seems the character's name you input (possibly just name length) and the Colt question ARE VALID variables:

Testing Hard Difficulty Pabs Name is A No to Q3 & Q4 Yes to Everything else

NO to Pabs, NO to Colt: Hare, Gali, Tiger typical breeder cards NO to Pabs, Yes to Colt: Hare, Gali, Naga typical breeder cards Yes to Pabs, No to Colt: Hare, Gali, Naga typical breeder cards Yes to Pabs, Yes to Colt: Hare, Gali, Naga typical breeder cards Bold: Yes to Colt actually changed it??

Changed name to ZZZXXXXXXXXX (the max limit) I put YES to Cue just in case, that turns out to be a variable as well

NO to Pabs, NO to Colt: Hare, Gali, Tiger Will Power, Help, Wild Rush, Hot Battle, Fake Cry NO to Pabs, Yes to Colt: Hare, Gali, Naga typical breeder cards Yes to Pabs, No to Colt: Hare, Gali, Suezo Will Power, Help, Wild Rush, Hot Battle, Fake Cry Yes to Pabs, Yes to Colt: Hare, Gali, Naga Will Power, Help, Wild Rush, Hot Battle, Fake Cry Bold: This created a Suezo somehow??

Edited by the author 2 years ago
AndrewD42 likes this
Illinois, USA

So the time for the attenuation to occur is pretty short: 1 second (60 frames) from the start of the input window (which is 4 frames before the box appears). Between 1 second and 2 seconds, the values are all decreased in magnitude by 1. After 2 seconds they are decreased by 2.

Hare, Gali, Naga are definitely the top three for the YYNNYYY... combo: Hare (17), Gali (16), Naga (10). The next two are Tiger (9) and Suezo (7), so this (plus the attenuation) could be why you got Tiger or Suezo occasionally. If you wait 2 seconds before answering the first question but do the rest before the 1 second mark, you'd end up with Hare/Gali/Suezo instead of Hare/Gali/Naga. So it seems like, for consistent strategies, we'd want to either ensure we could go very fast or pick a combo that was very resilient to the timing issues. It's surprisingly hard to do that on the fly -- I found a few that were a bit better off, but the simplicity of the two No answers in a row, rest yes, is hard to beat for that combo. Just doing the inputs faster should make it consistent -- it starts registering inputs before you even see it on the screen. What I did was mash X for the yes answers, and for the no answers just jam right then X as soon as the screen changed. You do need to be pretty quick on those, it seems -- if you take more than a second on the first No, you get a Tiger/Naga tie, which probably breaks for Tiger I'd guess.

I'm failing to replicate any impact from Pabs or Colt's responses -- I did Yes to Pabs and No to Colt and still got Hare, Gali, Naga (and the values in memory didn't change at all).

Nice call on the name! It 100% affects the breeder cards... More specifically, I just found out that the LENGTH of the name is the ONLY variable to affect the set of breeder/any monster cards, and there are only three possible sets:

Length of name 1,4,7,10: Encourage, Wild Rush, Willpower, Mango, Grit Length of name 2,5,8,11: Spark, Wild Rush, Help, Mango, Nuts Oil Length of name 3,6,9,12: Hot Battle, Wild Rush, Help, Willpower, Fake Cry

Going to keep pushing into the game and try to figure out how it ticks.

Illinois, USA

Quick update: I've been working on figuring out how to manipulate deck selection and rewards. This has involved a lot RAM searching and I've starting doing some reverse engineering of the actual code of the game.

The basic conclusion is that the RNG advances twice per frame and this changes the makeup of the player and opponent decks by performing 1 exchange of cards in the Player's deck and 2 exchanges of cards in the Opponent's deck. I'm not sure why at this point, but I have implemented the RNG (standard C library rand() function) in Lua and have been able to simulate the deck creation process based on the number of frames to delay, which should allow me to preview and optimize both my deck and the opponent's deck.

For the rewards, it's also pretty complex but I've made a lot of progress. I do need to test some of my results so I'm not quite ready to share everything yet, but it's definitely also possible to manipulate these by delaying and changing the RNG.

Still have not worked out the best strategy for early game or the best route. My original dream was to complete the game by the first Champion's Cup, but I think it's just impossible by 1 monster. So my goal now is to see if A rank tournament rewards can be easily manipulated. If so, I've calculated that doing only A rank tournaments (aside from Daniel and Alice's fights) would result in the fewest battles to get all of the monsters -- 26 (excluding any forfeitable battles like Miller rematches, Ellie, Pabs, and 1st champion cup, most of which seem unavoidable anyways). I have a second route that goes through more of the story, along with A rank tournaments, and ends up taking 28 battles. The standard speedrun route takes 36 battles, so this should be a significant time save.

My "late game" strategy (hopefully after first tournament if I can manipulate everything) would be to use Dragon, make all guts first hand, and ensure I have the cards for Combination in the next 5 cards (with no dodge/block cards in the opponent's hand). This would do 8 damage to each enemy which kills most things. I'm not sure about when this wouldn't work as I haven't gotten that far into routing, but I think combined with 0 or 1 gut chip damage cards from Tiger or Mocchi it should work well.

I'm currently playing through somewhat casually while recording the inputs so I can get to the first tournament. I think I've chosen a poor starting slate of monsters, though, so we'll see how it goes. The nice thing about the "tourney heavy" route is it allows a lot of freedom in starting monster choice -- the only "fixed drops" are Mocchi and Suezo, so any of the other 7 monsters could be used to start with. I've played around with the idea of using Hot Battle + Gas/Flame Wall -- the issue is, there's 1 copy of Hot Battle, Hare only gets 1 copy of Gas, and Flame Wall (3 copies!) costs 4 guts. I'd need very specific scenarios to combo that with other damage (in the case I've been trying, Tiger's left claw/right claw -- a good choice since the starting cards have 3 Right and 3 Left claws) and have enemies not be able to dodge. It's a little too specific to try to find deck arrangements like that, though.

I'm looking into Dino (3 copies of Bite), Hare (3 copies of Spin Fist), and maybe Pixie to finish things off with chip damage. There's a lot of 7/8 life monsters, so something like Thunder, Bolt, or Lightning could be very useful.

I'm hesitant to start getting too far ahead of myself -- if I change anything early route I'd need to redo everything later. So I'm kind of trying to figure everything out before recording too far. I think everything up to the start of the Cue battle can remain the same (as the Yes/No inputs for the questions don't take any additional frames). This is actually less than 2 minutes worth of game (6000 frames), by the way; if you alternate circle and X every frame, the text flies right by! It's pretty crazy.

PS: I watched your walkthrough where the card selection got messed up; I think Q1 was 120 frames or more, Q2 was 60-120 frames, and Q3 was 60-120 frames, the rest being under 60 frames. This would result in 18 (Hare)/15 (Gali)/9 (Tiger)/9 (Naga). I haven't looked into how the game handles tiebreakers but my assumption is it goes with the first monster in the list, so Tiger would always win ties.

San Diego, CA, USA

Damn Andrew, that's a whole lot of info and I like the route idea. Lol going into A cup with the beginning deck.

My dude, you're going to solve this game and completely break the run. It's only a matter of time now.

AndrewD42 likes this
Illinois, USA

I'm going to need to make a full guide for the rewards at some point, but it's rather simple to explain, I think.

Each battle reward set has seven "rewards checks" that the game runs: Monster rewards, "Common" skills, "Uncommon" skills, "Rare" skills, Phoenix skills, Any Monster cards, and Breeder cards. A reward set additionally is either associated with a specific monster or not associated with any.

Monster card generation is simple -- each reward set either gives you one specific monster (NPC battle like Alice, or the Gali Cup) or two random monsters (rank A cups). The game checks if you own Phoenix to determine whether the mixed breed cards are valid rewards for the rank A cups.

For skill cards, rarity refers to how many are in each set, I guess. Maybe it's not rarity, but I'm going to stick with it since it's a pretty known thing in card games.

The "basic" monsters (Tiger - Naga) have 5 common skills, 4 uncommon skills, and 3 rare skills. The "advanced" monsters (Jell - Zilla) have 8 common skills, 2 uncommon skills, and 2 rare skills. Any monster cards and breeder cards are all equally likely to appear (tell that to Busy Time in a casual playthrough for me, please). Phoenix cards (and Reborn, actually) are special, because it's Phoenix I guess.

The weird part about this is that the distribution pattern in the rewards ends up making owning a specific "rare" card EASIER than a specific "common" card. Most reward sets have a pattern like (x+2)/(x+1)/x for common/uncommon/rare rewards, but there are SO MANY common cards that finding a specific one is really rather difficult.

As an example, Tiger's common cards are "Right Claw", "Left Claw", "Horn", "Charge", and "Lightning". His uncommon cards are "Stab", "Ice Bomb", "Roar", and "Back Roll". His rare cards are "Bolt", "Sonic Move", and "Jump". Defeating Miller gives you 6 "common", 5 "uncommon", and 4 "rare" skill cards belonging to no specific monster. (He also gives you 1 Any Monster card and 1 Breeder card.)

If you're looking for "Horn", you have a 1/125 chance to get it on each "pull", which means your overall chance of finding it (with 6 pulls) is 4.7%. If you're looking for "Back Roll", you have a 1/56 chance to get it on each pull, which means your overall chance of finding it (with 5 pulls) is 8.6%. If you're looking for "Jump", you have a 1/47 chance to get it on each pull, which means your overall chance of finding it (with 4 pulls) is 8.2%.

I haven't quite figured out which set of rewards belongs to each exact battle, but the trend is generally 6/5/4/1/1 (like Miller's example), unless it's a monster-giving battle, in which case it's usually 6/5/4/0/0.

I'm doing my first TAS run and I'm done with Miller. I'm not super satisfied with the battle with Miller but it's difficult to manipulate everything and things don't seem to line up better if I delay the RNG at all. If I can find a different way to advance the RNG that would be nice, but right now I'm kind of just stuck waiting.

I did write a script to try to find specific rewards by simulating the RNG and trying those values in the emulator (in my case I'm looking for Bite/Tail Attack/Combination for Dragon; not necessarily all 3 here, but as many of the cards total as I can get). In the next 5000 frames from where I'm at, I get 3 total cards exactly twice. The closest one is 1 of each skill card, though, which is nice. The thing is that if I'm having to wait 398 frames here then it doesn't matter how long the battle with Miller is -- in fact if I were able to advance the RNG somehow I could save time by making it take longer overall. Definitely still early days on the RNG manipulation in this game for me but I think I'm going to try to "finish" this run to gain experience.

PS: The saucer stone is pre-determined so it doesn't matter how fast you press X. Also, the AI does not cheat -- it does have specific cards in its hand. Miller did something weird though and didn't use Footwork even though I was killing his Hare, so that was definitely something... Also discarding a card or holding onto it made a difference in his AI. He used Bite to kill my Hare if I made all of my cards guts, but he used Encourage instead if I held onto a Footwork. Very, very odd... I don't know if looking into how the AI is programmed is within the "scope" of what I'm willing to do, but it's certainly interesting.

San Diego, CA, USA

Lol here I am giving bad advice to people in my video that as long as you mash fast as possible, you get the fragment.

I'm also wondering, you know how how on the PS2 you have that "Fast" Disc loading parameter. On the emulator are you also doing a "Fast" load or regular PS1 load times?

You have probably already tried these, but want to confirm:

does turning animations on/off in the battle change the RNG at all? 1.5) also just changing it between the 2 without actually battling?

  1. Selecting a card and cancelling it multiple times?

  2. Lol turning on the opponent dialogue during battle? 3.5) does the ai do different things depending on whether animations are on or off?

  3. combing a card and cancelling it?

  1. does your chosen name affect battles in some way? (Is that even possible to check?)

  2. flipping cards (only flipping them upside down and right side up multiple times but not actually casting them to the guts pile)

  3. Pressing R1 to advance card text?

  4. Pressing SQUARE to change cards to "Chart Mode"? +That emoji is meant to be an 8 lol. It defaults to it.

Edited by the author 2 years ago
Illinois, USA

Don't have answers to too many of your questions, but.. I was WRONG. The game DOES cheat. I don't know exactly the mechanics of it, but I'm in a battle with Stolatos right now and at two cards in his deck swapped for each other, so that he drew a Confusion breeder card the next turn instead of Busy Time. He then proceeds to play it next turn (which is why I noticed -- I was like, that card was NOT supposed to be in his hand, right?). (Later edit: It happened again, also with Stolatos. There seems to be something that's specifically bringing Confusion to the top of the deck when Stolatos has enough guts to play it.)

Apparently the battle AI does use RNG of some sort as I was able to avoid the "cheating swap" by delaying things by a frame. I was actually kind of thinking it could be deterministic, so that's a neat finding. I can be a little less mad about the cheating if I can manipulate it, I guess. I'll keep a look out for other examples of AI cheating -- definitely have not seen any "suddenly they have a dodge card they didn't have before in their hand". Odds are they would not have programmed that in because of Scouting -- it would be pretty awful to see that the opponent has no dodge cards and then magically they do, and I haven't seen any indication of keeping track of cards being "viewed". (I'm not saying it doesn't happen though, because the AI really does cheat in at least one way!)

For your questions:

  • I'm using Bizhawk with PSX emulation so it's "normal" load times. Fast disk speed would affect RNG by reducing the number of loading frames, but I don't think it would affect it otherwise? I have no idea how disk speed works, really!

  • I don't think most of those things affect the RNG but I haven't checked. I know some games definitely have things where inputs affect RNG. All of those are good things to try to check, for sure.

  • For Q5, I know where the player name is stored and can thus see where it's explicitly called for within the code. There are two functions that return that value as well. It's kind of used in a lot of places and I haven't delved deep enough into the code to see where it affects things -- mostly I know how battle reward generation works and a bit of the deck shuffling. I've definitely improved my own skills while working through all of this so I'd probably be able to figure it out, but I'm prioritizing doing a run first as I'm discovering a lot of interesting things as I go.

Edited by the author 2 years ago
Illinois, USA

Well, uh... I kind of obsessed about this for the last few days.

Anyway, here's a TAS of the game:

I'll start working on version 2 after the holidays. See the description on YouTube for my notes. Happy to take any suggestions or feedback either here or on YouTube.

Edited by the author 2 years ago
Illinois, USA

Version 2 is done, in 51:05.

There will probably be a version 3 that I'll try to submit to TASVideos.org. I'm also considering running a "speedrun route" TAS... and I'm thinking about doing an RTA run just to do it.

Here's the video, see the description for some more notes and discoveries. The next version will focus a lot on speeding up the pre-Dragon early game. There's a lot of time to be saved there.

BazookaBob2018 likes this
Illinois, USA

Fun thing I just learned: Ellie appears when you miss 2 tournaments. I decided to reroute things so I skipped two tournaments before meeting Ellie -- I thought this meant I'd be able to skip the Ellie battle entirely.

After completing my 2nd tournament (with its follow-up Miller battle to forfeit to), Ellie showed up and accused me of not competing in tournaments... after I literally just completed the last two in a row.

So there you have it: Ellie is unskippable after missing two tournaments. She'll show up sooner or later, whether you like it or not...

BazookaBob2018 likes this
Santa Catarina, Brazil

I used the information you provided about the questionnaire and created a tool to help with the selection of starting cards. I think it can help both casual gamers and speedrunners. https://www.monsterrancherbc.com/bc-center

I've put it together with this new website with information from the MRBC I'm currently working on. There are also recipes for all the NPC decks in the game (I believe it can help with speedruns too).

In addition, there is also DeckCreator, which is a tool to create, download (to play with mods in Tabletop Simulator) and share decks with the community.

Game stats
Followers
8
Runs
3
Players
3
Latest threads
Posted 1 year ago
16 replies
Posted 3 years ago
4 replies
Posted 5 years ago
Posted 5 years ago