I'm looking at doing some research into the unknown fields for the pitchers over the next few days.
I'm hypothesizing at the moment that the fields have something to do with what pitches the computer throws when. So far, I've created a rom with one team with the fields at 1,2 and one team with the fields at 254,255 and I've noted a distinct lack of fastballs. Ditto for a team with the fields at 1 and 255.
However, before I continue some more, I'm wondering what research has been done into these fields, and what the outcome was (I mean, I know they control computer-controlled teams, but other than that, I'm not sure).
All RBI games are played at only one stadium. One majestic stadium. Your theory is a waste.
I got as far as setting breakpoints whenever they were loaded from RAM, and noticing that they're only used when a CPU pitcher is on the mound. Sometimes one or the other, sometimes not at all. I haven't really bothered since then though; since they have nothing to do with a human-controlled player, they became a lot less interesting.
Nightwulf
OK, here is what I've done after watching a game with break points:
First off, whatever the fuck they do, it's not too obvious. I set breakpoints when those unknown fields were called ($060E, $060F, $061E, $061F) and the frequency, fastball/slowball, ball/strike, swing/don't, etc don't give me much. It's all over the place. I couldn't figure out any sort of pattern. Pitch count doesn't seem to matter, calling u1 over u2 isn't consistent, calling one field to a lefty or right isn't consistent, fastballs or slowballs is inconsistent. So the unkown fields are called about 30-40% of the time (top of my head, didn't keep track) and don't seem to affect too much, at least in watch mode.
The only thing the code does with the unknown data is store them in RAM at $0685 (if player two is pitching) and $0695 (if player one is pitching). Once the ball is in play, those RAM values jump all over the place. I think it might have to do with where the ball is, but I'm not entirely sure. Basically they are used in some sort of initial calculaton before the ball is in play. To me this means the unknown fields only matter if the player makes contact, otherwise it doesn't change. So stratch off balls/strikes, curving ability and fastball/slowball frequency, at least to me.
Here is the kicker - if you do not use the unknown fields, they are set to one of two values - $75 (117 decimal) or $8B (139 decimal). If you throw a normal pitch, that field is always 117, if you do fastball/slowball it is either 117 or 139. So if the computer isn't pitching, your "unknowns" are one or the other.
So what have I figured out? Pretty much nothing except that the value of these fields don't matter too much. At least they don't within the range they are assigned to pitchers. I can almost safely say however that this value does not affect the computer's ability to curve or throw a fastball/slowball, they affect you only if you make contact...
Make sense? Probably not...
Interesting find. I tend to agree with you.
Looking at it closer myself though, that spot in memory is used as a ball-position variable once contact is made. However, I wonder if that might be used as some sort of adjustment to how hard the batter hits the ball. Mike Witt as a batter was getting in some pretty hard shots against Boston with FF in the slot , while all Boston seemed to get was ground ball after ground ball (when the variable was invoked)
The weird thing about 0685 and 0695 is that if it's a position, it's not left/right or up/down. Some flyballs make no change on that value for seconds at a time, even those that are traveling on an angle. I was thinking perhaps it's for a straight line flyball? Not sure at all...
Just experimented with a two-player game and 0685 and 0695 do not get called or referenced at all. So whatever it does, it's strictly for the computer...
Gantry:
I find that intriguing in any case how for human pitchers it's either 117 or 139 (and only 139 on the fast/slow pitch). It would support the power boost theory as a batter *is* more likely to go yard on either a fastball or a hanging knuckler in RBI. It also seems that the better pitchers (i.e. Nolan Ryan) have one unknown value of 105 -- a better pitcher would do a better job of keeping the ball in the park.
Well, I'm kind of wrong on that part. At least at that spot of memory... The 117/139 thing is still only for computer pitchers. 2/3rd of the time, they get one of those - the other times they pull a value out of U1 or U2 instead and it doesn't change, even if it's fast or slow...
Tried a one player game and they aren't used when a human is pitcher is on the mound. The uknown values get loaded in at the start of a game, but aren't used at all. They still take effect for for the CPU pitcher though...
Basically the area in RAM where the unknowns get stored at the beginning of a pitch for a CPU pitcher remain 00 all the time when a human is pitching. Even after the ball is in play...
Doesn't mean 117/139 isn't used, but it could be some other area of RAM for human pitchers. I too thought maybe the higher number increases the change of towering flies. I should snoop around and see if there is a similiar area for human pitchers...
Well, I did a semi-respectable look through the RAM while I was pitching and couldn't find a similar field to the $680 and $690 locations. At least not on 16-byte boundaries. Either I missed it or the unknowns are really unknown and unique to the CPU. The human pitcher has no equivilant values, even static ones. But it needs a better look, though I'm just about done fucking with this...
The only other explanation I can think of is that possibly it has something to do with the CPU fielding, I can't think of any other logical explanation if it doesn't effect the pitch at all.
The fact that it changes with a fastball or regular pitch makes me think it's probably not fielding. Whatever it does, it's minor - that is all I really know...
I don't know if you guys have tried this method but it's a technique we used in my Tecmo Super Bowl leagues to find out what the hex code meant. I apologize ahead of time if you already have done this:
1. Load up the rom in Nesticle and record a game (.nsm) file
2. Change the unknown variables to extremes (0-255)
3. Save the rom under the same name
4. Replay the movie and see what changes happen due to the changed variables
So many things were abled to be determined when we used this method and we even found how some stats were totally irrelevant.
P.S. How do you know these unknown fields are only in effect when the computer is playing?
Quote from: Polish Rifle on 12/04/07, 01:04:46 AM
P.S. How do you know these unknown fields are only in effect when the computer is playing?
Quote from: nightwulf on 06/08/05, 01:33:00 AM
I got as far as setting breakpoints whenever they were loaded from RAM, and noticing that they're only used when a CPU pitcher is on the mound.
Run the game in a 6502 debugger and set breakpoints at reads to 0x060E-0x060F (current away pitcher) and 0x061E-0x061F (current home pitcher). It's never touched unless a computer-controlled pitcher is on the mound.
Man, I used to do stuff...
Quote from: Polish Rifle on 12/04/07, 01:04:46 AM
I don't know if you guys have tried this method but it's a technique we used in my Tecmo Super Bowl leagues to find out what the hex code meant. I apologize ahead of time if you already have done this:
1. Load up the rom in Nesticle and record a game (.nsm) file
2. Change the unknown variables to extremes (0-255)
3. Save the rom under the same name
4. Replay the movie and see what changes happen due to the changed variables
So many things were abled to be determined when we used this method and we even found how some stats were totally irrelevant.
OK I did a game in watch mode between Ca and Bo and recorded a movie of the first three innings. I then used nighwulf's ROM to give Witt the lowest U1 & U2 settings and give Clemens the highest one. Left and Right are from my/batter's perspective.
OG ROMPettis - Clemens goes all the way to the right of the mound and throws an 86mph regular pitch to Pettis, who takes it inside for strike one.
Pitch two Clemens is totally to the left, throws a fastball and he hits a bouncing grounder to first, 1B grabs it and he's out. Ball crosses barely over the left side of the plate.
Decinces - Clemens all the way to the right and throws a FB, Dougie hits a single. Ball crossed the plate on the left side.
ROM with Clemens at 254 U1 and 254 U2Pettis - Clemens goes all the way to the right on the mound and throws an 86mph regular pitch to Pettis, who takes it inside for
ball one.
Pitch two Clemens is totally to the left, throws a fastball and he hits a bouncing grounder to first, but
gets a single. Clearly crosses the plate more in the middle.
Decinces - Clemens to the left of the mound, but not all the way, and throws a FB, Dougie hits a single. Ball crossed the plate on the left side.
ROM with Clemens at 254 U1 and 1 U2
Pettis - Clemens goes all the way to the right on the mound and throws a regular pitch to Pettis, who swings at it for a flyout to CF. Crosses the plate right in the middle.
ROM with Clemens at 1 U1 and 254 U2
Same exact scenario with Pettis and DeCinces as 254/254, so he clearly used data from U2 in the first two ABs.
The top of the first with Clemens at 254/254 and 1/254 ended differently, despite the fact that the first two ABs were identical. Only noting this to point out that both U1 and U2 are being used in the course of an inning. We already knew that from my research ages ago but I was thinking for a second that U2 may only get applied if you are the second team. Nope.
Just to be sure, I'm going to put U1 to 254 and 1 and keep U2 at Clemens original level. The first two ABs should be identical from the OG ROM. And they are for both settings. This means at least in my simulation U1 is never being used for Pettis. U2 is definitely being used for Pettis' first pitch but I can't say definitively after that because I think the butterfly effect comes into play after.
So here is how the first pitch looks. Attachment one is with the original 143 U2. Attachment two is the 254 U2. Attachment three is with 1 U2.
And with it at 50 and 200.
It's obvious that for this particular pitch, the higher U2 is the more to the batter's right it goes. Was hit deep flyout in 50 and a ball in 200 but not as far inside the batter as 254.
Now to figure out when U1 comes into play. Going to put U2 back to OG levels and see when the game changes compared to the original ROM with U1 set to one.
This is awesome, thanks Gantry. Finally we uncover the veil a little bit.
Well, I have a feeling this has already been figured out by someone else but it's fun to get back into RBI stuff either way.
U1 is more of the same, the lower the number the more to the left it goes. The higher the more to the right. The thing is the difference between 1 and 254 really isn't that much. So their effect isn't that great, especially when you consider that all pitchers in RBI are in the 105 to 147 range.
Next thing to do is give Clemens extreme R curve and check the results.
this is fascinating
Minimal difference setting both curves to 15 or 0, in fact some of it played out exactly the same. Maybe Clemens doesn't curve it much, but either way an extreme curve rating doesn't yield an extreme change in the effect of U1 & U2 numbers.
Edit - I may have screwed up the recording, nvm
Similar shit with Jimmy Key, the higher the number the more to the right it goes. He's an extreme lefty pitcher and one of his pitches with U1 set to 1 was WAY outside. Here's what I know now:
1) The U1 and U2 values are only used for computer pitchers
2) Sometimes neither value is used and changing them has zero effect on a pitch
3) U1/U2 can be used with fastballs, not only with normal speed pitches.
4) The lower the numbers for both, the more to the left a pitch goes.
5) The higher the numbers for both, the more to the right a pitch goes.
Probably done for now...
I noticed too that every pitcher has a lower U1 value than U2 value. But from what I can tell which value, if any, gets used is random. U1 and U2 add a random curve alteration to computer pitchers, I'm guessing so they would be less predictable.
That also leads credence to the fact that U1 and U2 are pretty much worthless for watch game or fantasy RBI stuff. The batting AI does the same thing every time given the conditions of a pitch. U1 and U2 don't give you better location or anything like that, just varies where the pitch ends up semi-randomly. But after watching these videos, the computer is going to swing the exact same way and make the same hit as soon as the ball is thrown. Ergo, I can't see U1/U2 making a lick of difference in fantasy given today's research. Sorry de snorry
Also - I think U1/U2/regular are loaded at the beginning of the AB and stay that way, doesn't vary per pitch. Didn't fully research but the one game I did with Key both pitches to Dykstra were unaffected by U1 and U2. Ditto with Pettis' first AB IIRC.
Quote from: Gantry on 09/15/18, 12:14:00 PM
That also leads credence to the fact that U1 and U2 are pretty much worthless for watch game or fantasy RBI stuff. The batting AI does the same thing every time given the conditions of a pitch. U1 and U2 don't give you better location or anything like that, just varies where the pitch ends up semi-randomly. But after watching these videos, the computer is going to swing the exact same way and make the same hit as soon as the ball is thrown. Ergo, I can't see U1/U2 making a lick of difference in fantasy given today's research. Sorry de snorry
Too small of a sample size. I'll be in touch with Peter Lipson before you know it!
(http://www.canhr.org/images/2015.08/Hear-No-Evil-See-No-Evil-Speak-No-Evil.png)
It's in the threads somewhere I believe, or maybe it was pre forum days, but I did email with Peter 15+ years ago. Super nice guy but from what I remember he didn't remember a ton of the actual specifics of the algorithms used in RBI. Also remember he ported this over from Family Stadium - most of the gameplay mechanics were created in Japan. His job was more to Americanize the game than create the actual game engine.
Linking here as well in case anyone gets to this thread via the search:
https://forums.dee-nee.com/index.php?topic=23229.0
Quote from: Turd on 09/17/18, 08:49:59 AM
Linking here as well in case anyone gets to this thread via the search:
https://forums.dee-nee.com/index.php?topic=23229.0
Somehow I forgot that I posted in there and that this discussion ever took place.
As did I, the brain is a wonderful thing