News:

RIP GoReds

Main Menu

Unknown Pitcher Fields

Started by AndyDeGreat, 06/08/05, 12:59:27 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

AndyDeGreat

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).

Nacho

All RBI games are played at only one stadium.  One majestic stadium.  Your theory is a waste.

nightwulf

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

Gantry

#3
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...




AndyDeGreat

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)

Gantry

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...

AndyDeGreat

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.

Gantry

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...

Gantry

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...

ultimate7

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.
Quote from: DÄrky on 11/02/10, 12:04:50 AM
The Raiders are a successful organization

Gantry

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...

Polish Rifle

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?

nightwulf

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.

Gantry

Man, I used to do stuff...

Gantry

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 ROM

Pettis - 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 U2

Pettis - 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.

Gantry

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.

Gantry

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. 


Gantry

#17
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. 

Gantry

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.

Gantry

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.