Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Prof. 9
Jan 3, 2015
Looking forward to this LP. OSS is a vastly underrated game and brings a lot of tiny, subtle tweaks that make the game just that bit better. Always a shame to see fans of the series recommend newcomers to skip BN1, because it's one of the most streamlined BN games IMO, and one of my favorite to play through.

By the way, Haruka's--and a number of other people's--mugshots did get adjusted in OSS; they changed the colors a bit to make them less dull, which helps them fit in better with the new mugshots.

I ended up contributing a little bit to this translation with some final testing and editing. It also uses the tooling that I originally developed for EXE4.5 to handle the text in the game.

giver336 posted:

Mornin' and Morning? Prof 9, since you whine about these in Chrono X, I'm gonna whine about these to you, too. :v:
Giver pls. Add GutsMan G

Adbot
ADBOT LOVES YOU

Prof. 9
Jan 3, 2015

Hobgoblin2099 posted:

Also, I didn't realize that Match wasn't just setting the ovens on fire but burning people to death in their homes. :stare:
I think he only did that in Lan's case because he discovered the FireProgram and needed more time to extract it. At least I don't think any NPCs mention houses burning down. We see with the Aqua and ElecPrograms later that it does take quite a while to extract a SuperProgram.

Prof. 9
Jan 3, 2015

giver336 posted:

For those of you in the audience that know sorts and searches, this is basically just the binary search. There's a reason it's one of the most efficient sorts. If you halve the number of options available each time, you only need 7 chances to guarantee success.
I believe it's actually possible to do it in at most 6 chances, since the game immediately tells you if you got a digit right. The speedrun does it. Incidentally, 6 is also the number of chances the game gives you before one of the digits changes.

Prof. 9
Jan 3, 2015
So to briefly explain this RNG glitch that Giver touched on... It's kinda something you really have to 'get', it's hard to explain why this happens, but I'll try my best to make it as accessible as possible. This got kinda long whoops You will need to be a little familiar with the mathematical concepts of the modulo operation (basically just getting the remainder of a division) and bitwise operations in order to fully understand this post (but don't worry, it's pretty easy, and you'll hopefully be able to get the point even if you don't fully understand it).

First, a brief introduction into RNGs if you're not familiar with the concept.

As you probably know, RNG stands for Random Number Generator and it's a mathematical function that spits out random numbers in case the game wants to :rolldice: for something. More specifically, an RNG is pseudo-random, which basically means that it produces a fixed sequence of numbers based on the current "seed" value. Usually this "seed" is the previous RNG result. The key principle is that since the player cannot know the current "seed" value, they therefore cannot predict the sequence of numbers that the RNG will output next. Note that the RNG result is not equal to the result you actually see reflected in the game; if you roll a die in a game, and it shows a number between 1 and 6, the actual RNG result will be a number between 0 and 2 billion (in the case of MMBN1), from which the die roll result is calculated (usually via a modulo operation).

If you're familiar with RNG manipulation from, say, Pokémon, or speedrunning, you might know that this key principle can be broken if you're persistent enough, and if the game's developers didn't do a good job of protecting against RNG manipulation. If you know the formula the game uses for its RNG, then you can figure out, in advance, the full sequence of numbers that the RNG will generate, and the corresponding die roll results shown in-game. You could then repeatedly roll dice and note down the results, and then cross check with your sequence of numbers to deduce the current RNG seed. For example, in MMBN1 speedruns, the RNG always starts from a known initial state when you hit Continue on the title screen, and so if you hold down a direction on the D-pad you'll always run into the same fight with the same chip draw.

With the introduction out of the way...

All the Capcom-developed MMBN games on GBA/DS use the following function to generate a new RNG result:
  • Load the current seed.
  • Bitwise rotation left by 1 bit.
  • Add 1.
  • Exclusive OR with 0x873CA9E5.
  • Save result as new seed.
  • Right-shift the new seed by 1 bit and return it as the result.
The game also advance the RNG on every frame the game is on the overworld (in the case of BN1) even when it doesn't need any random numbers.

As far as I know this doesn't correspond with any other RNG algorithm out there. If you Google the parameter 0x873CA9E5 (or its decimal notation, 2268899813), all you'll find are results referring to MMBN. I guess they just rolled their own algorithm and figured it was good enough without properly testing for randomness or something.

:regd11:

In Battle Network 1, when you inspect a random Mystery Data (I'll call them Green Mystery Datas or GMDs for simplicity's sake), it will determine the item you get as soon as you press A/B to advance the text "MegaMan accessed the mystery data...". This is done via two consecutive RNG calls, where the first determines whether you get Zennys or a BattleChip, and the second one determines how many Zennys or what BattleChip you get.
  • RNG call 1: gets a random number between 0 and 1. If 0, you get a BattleChip; if 1, you get Zennys.
  • RNG call 2: gets a random number between 0 and 15. This number is used as the index of a BattleChip/Zennys drop table holding 16 entries. There are generally 4 unique drops per table, and by adding duplicate entries the developers could control the rarity of the drop.
Now here is the tricky part. I mentioned before that the RNG result is actually a number between 0 and 2 billion, and the way the game converts this to the desired range by doing a modulo operation. In the case of RNG call 1 it would do modulo 2, and for call 2 it would do modulo 16. It just so happens that 2 and 16 are both powers of 2, and because of this, the modulo operation is equivalent to doing a bitwise AND operation. (This is not the case when you do a modulo operation with a number that's not a power of 2.)

It might not be immediately obvious, but this last part actually violates the RNG principle that I outlined above, namely that you cannot predict the next RNG result if you don't know the current seed. It turns out that if you know part of the RNG result, then you also know part of the current seed, and you can actually make predictions about the next possible RNG seed + result.

I think the easiest way to demonstrate this is by an example, so it's time to do some math.

Let's step into the shoes of the game for a bit. Suppose that the player is in Undernet 11, and has just accessed a GMD, so we need to figure out what item to give them. Let's assume that we will be giving them a CannBall A chip. Okay, let's take a look at the BattleChip drop table for Undernet 11 GMDs:

0: Ratton2 J
1: Ratton2 J
2: Ratton2 J
3: Ratton2 J
4: Ratton2 J
5: CannBall A
6: Recov120 F
7: Recov120 F
8: Recov120 F
9: Recov120 F
10: Recov120 F
11: Recov150 L
12: Recov150 L
13: Recov150 L
14: Recov150 L
15: Recov150 L


As you can see the other 3 chips each have a total of 5 entries, so they are more likely to be chosen than CannBall A. That's how the game's developers control the rarity of these chips. Anyway, we want to hand out a CannBall A, so we need to hit index 5 for the second RNG call. We'll call the result of the first RNG call 'A' and the result of the second RNG call 'B'

Let's assume that we got result 5 for the second RNG call. That means we got the RNG result, 'B', and did a modulo 16 operation on that, which equaled to 5:

B mod 16 = 5

Because 16 is a power of 2, this simplifies to a bitwise AND operation on the lower 4 bits:

B and 15 = 5

If we represent B as a binary number (so only using 0s and 1s), that means B must follow the following pattern. The lowest 4 bits of B are 0101 in binary, which is 5 in decimal. For any bits we don't know the value of, I've put an 'x'.

B = xxxxxxxxxxxxxxxxxxxxxxxxxxxx0101

Well, let's go back to the RNG formula that the MMBN games use.
  • Load the current seed.
  • Bitwise rotation left by 1 bit.
  • Add 1.
  • Exclusive OR with 0x873CA9E5.
  • Save result as new seed.
  • Right-shift the new seed by 1 bit and return it as the result.
Knowing the result, which is B in this case, we can work our way backwards to find out what the previous seed was.

First, undo the right-shift by 1 bit:

B' = xxxxxxxxxxxxxxxxxxxxxxxxxxx0101x

Then, undo the exclusive OR (XOR) with 0x873CA9E5. Luckily, this is the same as just doing a XOR with the same number again. If we represent 0x873CA9E5 as a binary number we get:

10000111001111001010100111100101

So let's do another XOR on B' with that number, and we get:

B' = xxxxxxxxxxxxxxxxxxxxxxxxxxx0111x

Now we need to undo the "add 1". This is a bit tricky as we don't know the lowest bit of B'. We know it's either a 0 or 1, though. Let's just account for both cases:

B' = xxxxxxxxxxxxxxxxxxxxxxxxxxx01110
or
B' = xxxxxxxxxxxxxxxxxxxxxxxxxxx01111

Okay, so now let's subtract 1 from that number.

B' = xxxxxxxxxxxxxxxxxxxxxxxxxxx01101
or
B' = xxxxxxxxxxxxxxxxxxxxxxxxxxx01110

Finally, we need to undo the bitwise rotation. This is simple enough:

B' = 1xxxxxxxxxxxxxxxxxxxxxxxxxxx0110
or
B' = 0xxxxxxxxxxxxxxxxxxxxxxxxxxx0111

So what now? We applied the RNG formula that the game uses, but in reverse. In order to obtain the final result of 5, we now know that the input seed value that was used follows the pattern 1xxxxxxxxxxxxxxxxxxxxxxxxxxx0110 or 0xxxxxxxxxxxxxxxxxxxxxxxxxxx0111.

Alright. Now let's look at the first RNG call of a GMD again. If the result is 0, then you get a BattleChip; if it's 1, you get Zennys. Well, we supposed that the player would be getting the CannBall A drop. That means the result of that RNG call was 0. Let's look at the RNG formula again.
  • Load the current seed.
  • Bitwise rotation left by 1 bit.
  • Add 1.
  • Exclusive OR with 0x873CA9E5.
  • Save result as new seed.
  • Right-shift the new seed by 1 bit and return it as the result.
Okay, so specifically the last two steps are the ones we're interested in. We just worked out the pattern for the input seed for RNG call 2, which is also the output seed for RNG call 1. So we know that the "new seed" produced in RNG call 1 follows that pattern we found.

Alright. So for RNG call 1, the "new seed" is 1xxxxxxxxxxxxxxxxxxxxxxxxxxx0110 or 0xxxxxxxxxxxxxxxxxxxxxxxxxxx0111... So let's do the final step of the RNG formula and get the result for RNG call 1.

Right-shift the new seed by 1 bit and return it as the result.

A = 01xxxxxxxxxxxxxxxxxxxxxxxxxxx011
or
A = 00xxxxxxxxxxxxxxxxxxxxxxxxxxx011

Alright, so the RNG result for RNG call 1, A, was one of the above patterns. Now we need to convert this to the range [0, 1]. Well, this was done via a modulo operation by 2, which is equivalent to bitwise AND by 1. Let's do that now:

Result = A and 1 = 1

Wait a sec. Result = 1? But that means we should be getting Zennys! Huh? What's going on here? :psyboom:

We went from the assumption that the player gets a CannBall A drop, but then concluded that they get Zennys. Clearly, this is a contradiction--which means our original assumption does not hold. Yes, that means that it is impossible to get a CannBall A drop from an Undernet 11 GMD!

For the same reason, it's also impossible to get the 5,000 Zennys drop in Undernet 10 in OSS. This is because this drop, originally 10,000 Zennys in BN1, occupied two slots in the Zennys drop pool, one of which can never be chosen due to this RNG quirk. When the underpaid interns developers who made OSS reduced the drop to 5,000 and removed one of its slots in the drop pool to make it rarer, they actually removed the one that could be chosen. So now, all you'll find in Undernet 10 in terms of Zenny is 10z, 20z, 30z and sadness. Fortunately, CannBall A is the only unique item that's unobtainable due to this glitch. FtrSword L, even though it only occupies 1 slot in the pool for Undernet 9, is still obtainable, because the slot that it's in, isn't one that's excluded by the RNG quirk. And later games aren't affected (as much...) due to changes in how they handled GMDs.

:ms:

This is the MMBN RNG quirk in a nutshell. By doing two RNG calls right after one another, where both results use a modulo operation with a power of 2, the second RNG result ends up being biased or skewed depending on the result of the first RNG result. And because of this, certain combinations of results are impossible to get. I use the name "RNG carryover glitch" for this, since the result of some RNG call ends up carrying over into the next one.

You might be thinking, well, if the RNG quirk does that to GMDs, then I bet there are other things that it might affect. And actually, the answer is yes! There are a number of other, completely unrelated things in different MMBN games that are affected by this glitch. It is somewhat rare due to the specific requirements needed to get this glitch, but one good example is battle selection in Undernet 2 in MMBN4. That area has 4 battles with Wood viruses, but if you have Jungle equipped, you will find that you almost always only get 2 of those 4 battles, because RNG carryover glitch occurs if you get a random encounter in that exact situation, unless your step counter is very high (e.g. after an expired SneakRun). It just so happens that one of those 2 battles has a Battle GMD in it which can drop 3 BugFrags, so this actually makes it the most efficient strategy for farming BugFrags in MMBN4. Another example is that some GMDs in Battle Network 4 and 5 will only give specific drops based on the location in the map where they spawned, so if you only check one GMD spawn point in a map, it's possible you won't see all the chips it drops.

It's interesting to note that Capcom did eventually figure out that this quirk occurs, because in Battle Network 6, whenever the game needs to roll the dice, they actually do a number of bogus RNG calls and discard those results, just to advance the seed value and eliminate the effects of the carryover, before getting the final RNG result.

By the way, Greiga Master is pushing out an update to the translation patch soon which will also fix the RNG quirk for GMDs, so you'll be able to get CannBall A as God intended. Hooray!

Prof. 9 fucked around with this message at 02:20 on Jul 15, 2018

Prof. 9
Jan 3, 2015

giver336 posted:

OK, now for a change. In the original Battle Network 1 script, MegaMan says "...But remember you have weekend class this week?". So this is clearly a change. It was likely due to a change in how holidays work in :japan: Perhaps any savvy goons in the comments can elaborate. Now it just looks like Lan doesn't know what day it is, rather than what week he has weekend class.
This has to do with a real-world change in Japanese school weeks. In 2001, when EXE1 was released, Japanese school weeks were Monday to Saturday (so 6 days) with the exception of the second and fourth Saturday of the month. The original conversation went something like this:

MegaMan: Lan, wake up and get to school.
Lan: It's Saturday, so there's no school.
MegaMan: But it's the third Saturday of the month, so you do have school.

That doesn't really make much sense in English, so BN1 just opted to change it to "weekend class".

But in 2002, Japanese school weeks were changed to a 5 day week (Monday to Friday) instead, so this conversation couldn't be carried over to OSS, as it no longer made sense. So instead we got the new line which has MegaMan realizing it's actually Friday. The OSS translation editors chose to carry over this change to the English script as well.

giver336 posted:

You guys didn't change this to "jack out". 0/10 localization.

I guess it kinda works if you imagine that MegaMan needs to pull out of the system? But yeah, this should really be jack out.
Apparently it didn't say "plug out" in the Japanese script, so yeah.

Prof. 9
Jan 3, 2015

giver336 posted:

About time! Is Mayl literally the only person on that bus?
These guys were too:



Yes, that's a thing. Kai's, who only appears in the spin-off Mega Man Battle Chip Challenge, backstory is that he was on the bus that was about to explode, and seeing Lan's heroic actions inspired him to get his poo poo together and start taking NetBattling serious.

Incidentally, BCC also adds that Ms. Madd/ColorMan had locked the doors and turned the heating on full blast, causing everyone to get dizzy and/or pass out.

Prof. 9
Jan 3, 2015

Rigged Death Trap posted:

Skullman is D probably because Skull in japanese is Dokuro.
I thought this too, but then what is ShadowMan's T supposed to stand for?

Prof. 9
Jan 3, 2015
Power Plant Comp: the dungeon that was so universally hated that its designer Masakazu Eguchi publicly apologized for it in an interview.



Not me, though. If you can look past the trial-and-error nature of the puzzle there's a lot to like here. Probably one of my favorite chapters in the series. Also one of the hardest, I could never get past this point as a kid.

Prof. 9
Jan 3, 2015
Actually, there is a refight version of Mega Man SF:

https://www.youtube.com/watch?v=59XtN4ZGVe0

He's got 1500 HP and all of his moves hit harder and come out faster. Sadly, you were only able to fight him at an event in Japan. From what we can tell Capcom used a special ROM just for this event, as there's no combat data for this version of Mega Man SF in the retail game.

Prof. 9
Jan 3, 2015
ClockMan's original name (from his fan submitted design) was Clock Genius. I like to believe that's why he has the geeeeenius shtick.

Prof. 9
Jan 3, 2015
Mega Man SF's lock-on ability is pretty neat, but there aren't that many chips that really need it. His shield can be useful, but has a long cooldown time (and it eats your Buster charge), plus it really does leave you wide open after it wears off. Though I could see it being useful on Bass.

On the other hand, MegaMan.EXE gets the far stronger Buster, which deals 80 damage per charge shot when maxed out (96 against the LifeVirus!), compared to SF's paltry 30 damage. Single player-wise, it's especially useful for taking out MagicMan's and the LifeVirus's virus summons.

Prof. 9 fucked around with this message at 03:10 on Sep 29, 2018

Prof. 9
Jan 3, 2015

rannum posted:

indebted to Duo & all his plans because he revived her.
Wait, he did what now?

rannum posted:

They also made Wily her foster father!
They did what now? :raise:


Hobgoblin2099 posted:

He becomes less... something by the time 3 comes around.

He also saves Geo at the end of 2, so he's not exactly a villain.
Doesn't he basically swear to kill Geo somewhere down the line in 3's sequel hook?

Prof. 9
Jan 3, 2015

Blaze Dragon posted:

Also I don't think he's ever called MegaMan Star Force, whenever he's referred to as Shooting Star Rockman in SF3 (every time he transforms) it's just replaced with "MegaMan" in the English version.
Actually, in Star Force 3 only, they do in fact use that name at a couple points in the game.



His status screen also reads MEGA MAN SF. There's another WAZA Wizard who spells out his full codename EM Wave Change ID "003" Mega Man Star Force, but I don't have a screenshot of that as I believe it's only a temporary NPC.

On the other hand, we also have the Super Smash Bros. trophy which was named Star Force Mega Man. But since the official game used Mega Man Star Force (and never Star Force Mega Man), we decided to go with that in the OSS translation.

Incidentally, SF3 is also where they started calling him Mega Man (with space) rather than MegaMan (no space), but that would've looked really inconsistent in OSS alongside MegaMan.EXE, so we ended up dropping the space again.

Prof. 9 fucked around with this message at 05:14 on Nov 1, 2018

Prof. 9
Jan 3, 2015

BlazeEmblem posted:

Alternately, they weren't done programming the fight by the time of the first demo. That makes a bit more sense.
As far as I'm aware the TGS demo preceded the Nintendo Channel demo.

Prof. 9
Jan 3, 2015
I'm probably biased but I'd say this is my favorite Humor in the series. There's just a lot more potential for jokes when you bring these characters together as opposed to just having the standard set of Lan/Geo's friends to work with.

Prof. 9
Jan 3, 2015

Dr. Fetus posted:

Was that reference in the Japanese version, or was that something the translators added in?
It was referencing a different drama series in the Japanese version.

Prof. 9
Jan 3, 2015
"Scroll" means background graphics, e.g. maps. Whereas "Object" is foreground graphics, i.e. sprites.

Prof. 9
Jan 3, 2015
I hope everyone enjoyed the LifeVirus SP fight! This is something I had been wanting to make for a while and Giver's LP was as good an opportunity as any. The possibilities were somewhat more limited here since all the changes needed to fit into an Action Replay DS code, so something like adding new sprites was out of the question. (Though I did end up having to add in a small '2' graphic for the LifeVirus's 200 HP aura). Despite that, I'm quite happy with how it turned out.

TuKeZu posted:

Maybe the real superboss is the friends we made along the way wrestling with Action Replay DS, I can't get the LifeVirus SP code to work on the JP version no matter what I do (I found out there's like a 107 line limit or something, but splitting the code into three just gives me a white screen on boot)
I guess that's what happens when you make an ARDS cheat for emulators. They all have different quirks with regards to how they process cheats, so I had to make the cheat way longer than it needs to be.

I've created a shorter version of the cheat and split it up into two parts that are both less than 107 lines; could you try that and see if it works? It's been added to the Pastebin.

Adbot
ADBOT LOVES YOU

Prof. 9
Jan 3, 2015
Thanks! I just added some extra lines to the code in the Pastebin that might make things a little easier on the ARDS by only applying the patch once rather than constantly. If that doesn't work I guess the code really is just too large for the game to handle.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply