Jump to content


All Activity

This stream auto-updates

  1. Past hour
  2. A note on attributes/ratings, buckets, and design intent in MVP for roster construction One thing that can trip people up when looking at MVP Baseball’s rosters is that not all ratings behave the same way. In MVPEdit, you'll see that some go from 0–99, others cap at 15, and some don’t even go past 2. At first glance, that looks messy or inconsistent. Actually, it's not. Just like with splines, this is one of those cases where EA wasn’t trying to simulate baseball pitch-by-pitch. They were trying to simulate how baseball feels over time, using math that stays stable and readable. Once you understand what each rating scale is for, the whole thing clicks. MVP doesn’t use ratings as power meters The biggest thing to understand is this: MVP doesn’t treat ratings as raw “how good is this guy” numbers. Instead, ratings answer two different questions: What kind of player is this? How often should that player succeed or fail within that role? Those are very different questions, and MVP uses different scales to answer each one. The 0–15 scale: defining the type of player Most core skills in MVP, things like plate discipline, fielding, arm accuracy, range, bunting, and durability ultimately resolve to a 0–15 scale internally. This scale isn’t so much about precision but classification. Think of it as the game asking “Is this an elite defender, an average one, or a liability?” and “Is this hitter disciplined, reckless, or somewhere in between?” Once the game places a player into one of these buckets, that classification stays fairly stable. A guy doesn’t suddenly become a different hitter because he gained a point or two. He has to move tiers. That’s why MVP feels consistent. Players don’t randomly swing between greatness and uselessness. The 0–99 scale: weighting outcomes inside the bucket Here’s the important part, and this is where a lot of people get tripped up: the 0–99 ratings you see in menus aren’t ignored. They’re used as weights inside the bucket. So two players might both land in the same 0–15 tier, but: the one with a higher 0–99 rating will reach the better results in that tier more often the one with a lower rating will drift toward the weaker outcomes more frequently This is why a 92 and a 97 don’t feel wildly different on any single swing, great players separate themselves over a season, not an at-bat, and elite hitters feel reliable instead of explosive. Buckets define what’s possible. Weights define how often it happens. That’s a very baseball-friendly way to think about skill, honestly. Why some ratings go to 100 A few attributes, especially Speed, and offensive ratings like Contact and Power vs handedness are treated differently and go all the way to 100. That’s because these affect things that need smooth, continuous movement: how fast a player runs how much ground they cover how far a ball travels Speed in particular touches everything: baserunning, steals, defense, recovery. Those systems benefit from finer granularity, so EA let them behave more like true analog values. The 0–2 scale: tendencies, not talent Team and manager tendencies (steal, hit-and-run, bunt, pinch hit, intentional walk) use an even smaller scale: 0–2. This isn’t about ability at all. It’s about preference. Think of it like this: 0 = avoids this 1 = neutral / situational 2 = looks for this opportunity EA wasn’t trying to model managerial genius here. They were encoding identity. A lot of datafile blocks combine small preference flags with player traits and situation, instead of relying on a single “smart” decision. EA's design intent: Just like splines, this approach lets EA balance a lot of competing goals: Players feel different without being chaotic Ratings matter without dominating outcomes Small changes don’t break the game Seasons feel realistic instead of streaky The game stays readable and fair Most importantly, it avoids a trap a lot of sports games fall into where one rating point should never decide a baseball play. So with MVP it was a smart design choice where, ratings don’t decide outcomes, they just nudge probability. It also explains why they never designed the game using a numeric OVR system: it’s an honest reflection of how MVP evaluates players as profiles and tendencies rather than exact point totals. How this ties into the gameplay blocks Once you understand buckets and weights, the rest of the datafile will begin to make sense: <cpubatter> uses buckets to decide if a swing makes sense <batterai> assigns a contact-quality tier, weighted by ratings <batter> expresses that tier within capped, controlled ranges <pitcher> defines reliability curves, not dominance <hitnrun> blends preferences, ratings, and context into tactics Every system is speaking the same internal language. The quiet brilliance here Put all of this together and you get a really clean design throughline: Buckets instead of raw stats Weights instead of guarantees Splines instead of linear decay Bars instead of fake precision Even when it's all math under the hood the game still *feels* like baseball.
  3. Next chunk I found is called <stealtune>. <stealtune> — “Should we run here?” <stealtune> is the CPU’s steal attempt filter. It doesn’t decide the physics of the jump, the catcher’s pop time, or tag windows. It decides whether the CPU even tries, by stacking situational “common sense” rules with a few player-tool buckets (speed/steal vs catcher/pickoff). Think of it like a manager’s clipboard: “With this count, this runner, this catcher, this pitcher… are we running or are we staying put?” EA's design intent: Based on the stock values, EA was trying to make stealing: Rare for slow guys (hard “no” gate) Only modestly encouraged for elite thieves (small positive boosts) Heavily suppressed by strong-armed catchers (big negative) Less common in “wrong” situations (2 outs, 2 strikes, big score diff) Predictable enough to feel fair (so the CPU doesn’t look psychic or cheesy) It’s conservative by design. EA wants steals to exist, but not dominate pacing. What <stealtune> is responsible for How often the CPU attempts steals How strongly runner tools matter (Speed + Steal) How strongly battery tools discourage attempts (Pickoff + Catcher arm/accuracy) Situational suppression (outs/strikes/base/handedness/score) A baseline/team tendency (ManagerRating) How <stealtune> works Each time the CPU considers stealing a base, it starts with a neutral “urge,” then applies modifiers: Situation penalties (global “don’t be dumb” rules) Runner bucket modifiers (Speed + Steal skill ranges) Battery bucket modifiers (Pickoff + Catcher arm strength/accuracy ranges) Score context penalties (stop running in blowouts) ManagerRating baseline tendency The output is basically: green light / no green light. Situation penalties (flat, always applied when the condition is true) 2Outs_R1st = -30 With 2 outs and a runner on 1st, EA strongly discourages stealing. Intent: avoid “erase the inning” outs and keep offense flowing. 2_Strikes = -10 With two strikes, discourage steal attempts. Intent: don’t run into outs when the batter might K anyway. R2nd = -20 With a runner on 2nd, discourage steal logic (usually affects double-steal style behavior / unnecessary risk). LHP_R1st = -20 Lefty pitcher with runner on 1st is treated as riskier (lefties hold runners better on average). RHP_R2nd = -20 This is a bit more “engine-specific,” but intent is still clear: a certain handedness/base context combo reduces attempts. Translation: EA bakes in “baseball common sense” as negative modifiers so the CPU isn’t reckless. Speed buckets (the big gate) SpeedMin = 0.85 SpeedMax = 1.00 SpeedMod = +10 This means: if the runner’s speed is in the top bucket (0.85–1.00), the CPU becomes more willing to run. SpeedLowMin = 0.00 SpeedLowMax = 0.63 SpeedLowMod = -100 This is not subtle. This is EA saying: “If you’re slow, you are basically forbidden from stealing.” Probably one of the strongest “anti-cheese” guardrails in the entire datafile. Steal rating buckets (Low/Med/High) Steal A (low skill) StealAMin = 0.00 StealAMax = 0.64 StealAMod = -3 Steal B (mid skill) StealBMin = 0.79 StealBMax = 0.89 StealBMod = +3 Steal C (high skill) StealCMin = 0.90 StealCMax = 1.00 StealCMod = +6 Notice the gaps: 0.65–0.78 isn’t defined here. That usually means those values fall into a “neutral/no modifier” zone. What does this mean? Elite steal ratings help, but they’re not allowed to overpower the rest of the logic. Pickoff threat buckets (pitcher holding runners) Pickoff A (weak hold) PickOffAMin = 0.00 PickOffAMax = 0.50 PickOffAMod = +5 If the pitcher is bad at holding runners, stealing becomes more attractive. Pickoff B (strong hold) PickOffBMin = 0.90 PickOffBMax = 1.00 PickOffBMod = -5 If the pitcher is elite at holding runners, attempts drop. EA keeps this as a light nudge (+/- 5), not a hard gate. Catcher arm strength buckets (big deal) Weak arm (run on him) CatcherArmStrAMin = 0.00 CatcherArmStrAMax = 0.50 CatcherArmStrAMod = +5 Strong arm (don’t run) CatcherArmStrBMin = 0.90 CatcherArmStrBMax = 1.00 CatcherArmStrBMod = -15 This is the strongest negative besides SpeedLowMod. EA is basically saying: “Catcher cannon matters more than almost anything else.” Catcher arm accuracy buckets (secondary) Inaccurate throws encourage running CatcherArmAccAMin = 0.00 CatcherArmAccAMax = 0.50 CatcherArmAccAMod = +5 Accurate throws discourage running CatcherArmAccBMin = 0.90 CatcherArmAccBMax = 1.00 CatcherArmAccBMod = -5 EA weights accuracy less than strength, which makes sense. Score differential suppression (pacing / realism) ScoreDiffA ScoreDiffAMin = 5 ScoreDiffAMax = 9 ScoreDiffAMod = -30 ScoreDiffB ScoreDiffBMin = 10 ScoreDiffBMax = 100 ScoreDiffBMod = -50 Translation: in blowouts, stop running. EA is protecting pacing and “sportsmanship” feel. Manager/team tendency ManagerRating = 17 This is almost certainly a baseline aggressiveness/tendency scaler used by AI teams. You can think of it as “default green light tendency,” then everything else pushes it up or down.
  4. Today
  5. 6/10, 40 seconds. Freakin cricket questions
  6. 5 out of 10, 57 seconds. Par for the course on Tuesday.
  7. So, for our next block we're going to cover another block called <cpubatter>. <cpubatter> - the brain of the AI hitter The <cpubatter> block governs how the CPU decides to swing. It does not control player ratings, swing animations, bat speed, or ball physics. Instead, it defines the CPU hitter’s perception, judgment, and confidence at the plate. In practical terms, this block answers questions like: Does the CPU think this pitch is hittable? How confident is it in swinging at what it’s seeing? How much does pitch location matter? How does the count influence aggressiveness? How wrong is the CPU allowed to be? If ratings describe who the hitter is, <cpubatter> describes how that hitter thinks during the at-bat. <cpubatter> operates blind to contact outcomes though. It only evaluates whether a swing is justified, not whether it will be successful. EA's design intent: EA was not trying to build a true simulation of human pitch recognition or hitter psychology. The goal was to create a CPU batter that feels believable, fair, and consistent, while remaining scalable across difficulty levels and stable on mid-2000s hardware. Rather than using deterministic physics or advanced AI, EA relied on probability weighting, zone-based confidence, and controlled error to simulate decision-making. EA’s intent: Keep CPU behavior predictable but not robotic Avoid unfair or omniscient CPU hitting Preserve game pacing (fewer 12-pitch at-bats, fewer extreme outcomes) Make difficulty adjustments possible without rewriting logic Ensure results feel earned rather than scripted The result is a system that creates the illusion of intelligence through math, not true awareness. What <cpubatter> is responsible for The <cpubatter> block controls the decision-making layer of hitting. Everything here happens before contact, power, or ball trajectory are calculated. Specifically, it governs: How accurately the CPU “reads” a pitch How much pitch speed and movement can fool the CPU Whether the CPU decides to swing or take How pitch location affects confidence How count and situation influence aggression How much human-like error is allowed This block does not determine how hard the ball is hit or where it lands, only whether the swing attempt happens and how confident the CPU is that its timing window is acceptable to swing. Strike Zone Context (Hot/Warm/Cold) All Hot, Warm, and Cold references in this block refer strictly to strike-zone quadrants, not player streaks or momentum. The game divides the strike zone into a 3×3 grid, and each pitch is evaluated based on where it crosses that grid. Hot zones = areas where the hitter is strong Cold zones = areas where the hitter is weak Warm zones = neutral or average comfort These values adjust how confident and aggressive the CPU is when the pitch passes through those zones, especially when combined with count and discipline logic. The hot and cold zones influence willingness to swing, not contact quality or power. How the CPU Batter "Thinks" Pitch Recognition The CPU does not see the pitch perfectly. Instead, it predicts the pitch path with built-in uncertainty.. EA’s intent: Fast pitches should be harder to read Breaking pitches should occasionally fool the CPU Prediction error should scale with difficulty The CPU should sometimes act with confidence despite incomplete information This creates swings that look early, late, or poorly judged without feeling random. Discipline and Swing Decisions Once the pitch is “seen,” the CPU decides whether to swing. EA’s intent: Prevent constant chasing of bad pitches Keep walk totals reasonable Avoid overly patient CPU hitters Make count matter without stalling the game This is where plate discipline lives, not as a rating, but as a behavior filter layered on top of pitch recognition. Contact vs Power Bias The CPU is not always primarily swinging to do damage. In this block, EA intentionally biased the system toward contact over power to: Increase balls in play Reduce empty swings Create more organic rallies Avoid arcade-style outcomes Power is still present, but since this is the first block in the hitting model, it's handled downstream in <batter> and <batterai> Timing Confidence and Error Tolerance Even correct decisions can produce imperfect swings. EA’s intent: Allow early and late swings Prevent perfect timing every pitch Add natural variance to outcomes Avoid repetition in contact results This keeps the CPU from feeling mechanical or unfair. Tuning Considerations This block is safe to tune when adjustments are made with intent and restraint. High-impact tuning areas: Hot vs Cold zone confidence gaps Discipline behavior in hitter’s vs pitcher’s counts Pitch recognition error on high velocity Protection behavior with two strikes Areas to adjust carefully: Global swing decision values Prediction blending values Overall contact or power bias Small changes here can dramatically alter CPU behavior. Final Notes: The <cpubatter> block is best understood as the CPU’s eyes and judgment, not its strength. EA designed this system to preserve pacing, protect fairness, simulate intelligence without true AI, and funnel outcomes toward believable middle ground. Contact quality is evaluated later by <batterai>, and final outcomes are shaped by <batter>.
  8. Marlins acquired OF Esteury Ruiz from the Dodgers for RHP Adriano Marrero.
  9. 9/10 77 seconds, what a lucky day
  10. Yesterday
  11. It's just the opposite. Learning how this works under the hood just makes it more magical!
  12. 9/10, 74 seconds. Very pleasantly surprised by this score.
  13. No, not at all. What you are doing here is fascinating. There was so much more about that game then I thought we knew and you just proved it.
  14. Andrew Heaney announced his retirement from professional baseball. Joe Kelly Announces End Of His Playing Career. Rangers signed RHP Nabil Crismatt to a minor league contract.
  15. Thank you for the kind words! I just hope in explaining how MVP "works" I don't ruin the magic for folks
  16. I don't want to interrupt you but I just wanted to let you know I jumped in here awhile ago, saw the content and length of your posts and then I exited this thread to go and make a cup of coffee. Armed with my coffee I returned and read your findings. You may be one of the most amazing modders we have here and this once again confirms what I have always thought. Thank you.
  17. A note on splines and design intent in <pitcher> One thing that comes up repeatedly in MVP’s datafile is the heavy use of splines. Instead of applying effects in straight lines or flat percentages, EA often defines curves that control how things change over time, especially for pitching, and you'll see this in the <pitcher> block. At a high level, a spline is just a way of saying: “This doesn’t change evenly. It changes in phases.” And that turns out to be a very baseball-friendly idea. Why splines make sense for a baseball game In real baseball, pitchers don’t slowly lose effectiveness one pitch at a time. Most of the time, a pitcher looks fine…until they don’t. Velocity might hold steady, command might be sharp, and then suddenly mistakes start leaking over the plate. So EA didn’t try to simulate this with true physics or biomechanics. Instead, they used curves (splines) to shape how pitching effectiveness, accuracy, and fatigue evolve during an outing. So early in the game: pitchers are protected from random breakdowns command and effectiveness are stable outcomes are readable and consistent In the middle: small signs of decline appear mistakes become slightly more common nothing feels broken yet Late in the outing: effectiveness drops faster execution becomes less reliable the risk of leaving a pitcher in too long increases quickly This, oddly enough, matches how baseball feels, even if it’s not modeling the underlying mechanics. It's all just math. How this works with stamina ratings MVP already rates stamina on a 99 scale, but rather than treating stamina like a simple fuel bar, EA uses it to control how quickly a pitcher moves along these curves. So high-stamina pitchers stay in the “safe” part of the curve longer and hold their stuff deeper into games. Low-stamina pitchers reach the decline phase earlier, and lose effectiveness more quickly. The curve itself defines what happens as fatigue sets in. Stamina just determines when you get there. EA's design intent and why it was so effective Looking at the stock curves in <pitcher>, a few things stand out to me: Early innings are intentionally protected Decline is gradual at first, then accelerates Late-game drop-off is sharp rather than slow and linear To me this wasn’t done for realism but moreso to support consistent pacing, readable outcomes, believable late-game tension and stable CPU bullpen management. So instead of unpredictable randomness, EA built structured pressure into the game, which is crazy in 2005. Splines kinda let EA balance a lot of competing goals: pitchers feel strong early without being overpowered fatigue matters without ruining the first few innings late-game decisions feel meaningful CPU managers behave predictably games don’t devolve into chaos or endless walks All of this contributes to why MVP “feels right”. Using spline curves in this way shows that EA wasn’t trying to model baseball pitch-by-pitch. They were trying to model baseball rhythms, where there's stability early, pressure late, and consequences for pushing too far. That design choice is a big reason the game still holds up today.
  18. So we're gonna move on to a new block, since we've covered hitting through <batter> and <batterai>: <pitcher> <pitcher> — how pitches are chosen, shaped, and wear down The <pitcher> block controls how pitches behave once they’re thrown. Unlike hitting, MVP Baseball does not split pitching into multiple layers. There’s no separate “pitcher AI” block and no dedicated decision brain. Everything ( pitch reliability, execution error, fatigue, risk, and situational pressure) lives together in this one block. So rather than asking “What pitch should I throw?”, the game asks a simpler question: Given the situation, how good is this pitch allowed to be? That design choice tells you a lot about how EA thought about pitching for MVP. They didn't want it to be an active decision maker to the gameplay, which is why there is no AI block for pitchers. What <pitcher> is responsible for This block governs the pitch-side constraints of the game. It doesn’t guarantee strikeouts or weak contact, and it doesn’t try to outthink the hitter. Instead, it quietly shapes how reliable a pitch is allowed to be in the moment. In practice, <pitcher> controls: How effective different pitch types can be How accurate a pitch can realistically be How often pitches miss their spot How fatigue slowly degrades execution How riskier pitches behave under pressure How runners and repeated batters affect performance How CPU and user pitching are kept fair It doesn’t decide outcomes directly. Those emerge from how this block interacts with the hitting system we've mapped. EA's overall design intent EA treated pitching as a stabilizing force, not a star. Rather than building “smart” pitchers, they focused on consistency, fairness, and pacing. Pitching was meant to create structure so hitters could drive the drama. So the goal wasn’t to simulate a pitcher’s mind, but to simulate the limits of pitching over time. EA’s intent: Keep pitching readable and consistent Prevent pitchers from dominating the game Make fatigue matter without being abrupt Allow mistakes to happen naturally Balance risk and safety without explicit AI logic That’s why MVP pitching often feels conservative. It's not designed to steal the spotlight but to be the supporting cast member in the show. How <pitcher> works Think of this block as a set of overlapping pressures acting on every pitch. Pitch effectiveness (what a pitch can do) Different pitches are allowed to be effective in different ways. Fastballs, breaking balls, and offspeed pitches all have their own ceilings and shapes. Rather than hard cutoffs, EA used smooth curves so effectiveness changes gradually as fatigue builds or pressure increases. A pitcher doesn’t suddenly “lose it”, they slowly become less sharp over time. This is pitching’s version of fudging: smoothing the edges so performance feels human instead of binary. Accuracy and execution error No pitch is thrown perfectly. This block defines how far a pitch is allowed to miss its intended location, especially for the CPU. Importantly, it’s about execution uncertainty versus the pitcher choosing poorly. Even a good idea can result in a slightly missed pitch. EA used this to: Avoid pinpoint accuracy every throw Keep misses believable Prevent pitching from feeling robotic If you’ve ever felt like a pitch “just leaked back over the plate,” this is where that comes from. Situation and pressure Pitching changes when runners are on base or when a hitter sees the same pitcher repeatedly. This block gently accounts for that. With runners on: Execution gets a little harder Accuracy slips slightly Risk increases Against the same batter: Effectiveness tapers off Mistakes become more likely These aren’t dramatic switches though, just nudges that make the game feel alive without being scripted. Fatigue, risk, and wear Fatigue is one of the most important parts of this block, and EA handled it carefully. Rather than punishing pitchers suddenly, fatigue: Gradually increases execution error Reduces pitch effectiveness Raises the cost of risky pitches High-risk pitches just become harder to execute cleanly rather than just outright failing. Injury risk exists mainly to discourage abuse, not to punish normal play. This is why pitchers feel worn down before they ever feel “broken.” CPU and user fairness Because pitching input differs between CPU and user, EA added normalization values to keep outcomes fair. The goal here was parity over realism. The way the values look in this block tell me that EA felt like user pitching shouldn’t feel easier or harder simply because of the control scheme, and CPU pitching shouldn’t feel inhuman. Most players never notice this layer which means it’s doing its job. How <pitcher> fits into the larger system Hitting in MVP is layered. Pitching is not. There’s no pitching “brain” deciding strategy. Instead, pitching sets the boundaries within which hitters operate. <cpubatter> decides whether to swing <batterai> evaluates how good the swing was <batter> expresses the result <pitcher> quietly limits how sharp, accurate, and reliable pitches can be That’s why most variance in MVP comes from hitting, not pitching. EA wanted offense to feel dynamic and reactive, with pitching acting as the steady counterweight. Tuning considerations This block is powerful, but it rewards restraint. Good areas to adjust: Fatigue curves Accuracy miss floors Runner-on-base penalties Same-batter effectiveness drops Risk vs safety balance Areas to be careful with: Pitch effectiveness ceilings Global accuracy values CPU miss bias Injury thresholds If pitching becomes too strong, it will overpower the default/refined hitting system you’ve likely modified. KC's Note: The only thing that can be done here as far as tuning is make the execution drift (misses, fatigue, loss of "feel" or "stuff) more believable, which can be done in this block. EA's existing values here work extremely well and most of the focus in MVP, based on the most effective blocks in the datafile is on hitters reacting and not the pitchers dictating. Final notes The <pitcher> block isn’t about intelligence. It’s about control under pressure. EA designed pitching to be dependable, readable, and fair but not dominant. The excitement of MVP Baseball comes from hitters reacting to gradually degrading pitch quality, not from pitchers outthinking batters, so once you see pitching as the stabilizer rather than the driver, the entire offensive engine makes sense.
  19. 8/10, 58 seconds. I got surprisingly easy questions today.
  20. I'll move on to the next section here: <batterai> — How good was that swing, really? If <batter> defines the rules and limits of hitter-side contact, then <batterai> determines how the game evaluates a swing at the moment of contact before those limits are applied. This block doesn't decide whether a swing happens, and it does not produce final outcomes. Instead, <batterai> blends everything the engine knows at contact: Timing, pitch context, hitter tendencies, and zone context into a judgment of contact quality. That judgment is then handed off to <batter>, which shapes, caps, and smooths the final result. Think of <batterai> as the evaluator, not the finisher. What <batterai> is responsible for <batterai> is responsible for grading the swing, not executing it. Specifically, it determines: How clean or compromised the contact was Which tier of contact the swing qualifies for How much exit velocity the swing is eligible to generate How strongly timing, pitch type, and pitch speed factor in How pitch location and hot/cold zones influence quality How pull vs opposite-field intent affects effectiveness It does not: Set launch angle directly Decide spin or trajectory Override the limits defined in <batter> Those responsibilities belong downstream. How <batterai> works At a high level, <batterai> evaluates the swing by weighing multiple inputs and blending them, rather than calculating a single score. Timing (important, but capped) Timing influences how cleanly the swing was executed: early, late, or well-timed swings are evaluated differently. However, timing is deliberately bounded. EA’s intent: Timing should matter, but it should not dominate. Poor timing isn’t instantly fatal, and good timing doesn’t automatically guarantee elite results. This is where much of the game’s “forgiveness” lives. Directional intent (aim) Directional input is treated as intent, not precision. Left/right input biases pull vs opposite-field contact. Up/down input biases swing plane and launch tendencies. Crucially, <batterai> treats aim as a probability influence, not a command. The game asks whether the swing made sense for the pitch thrown, not whether the player aimed perfectly. This is why aiming in MVP feels advisory rather than literal. Pitch context <batterai> evaluates the pitch itself, including: Pitch speed Pitch type Pitch location This allows the engine to reward swings that match the pitch, for example, staying back on offspeed or getting on top of a low pitch without requiring modern sequencing or tunneling systems. The goal was to reward pitch recognition without making the system harsh or opaque. Hitter attributes Hitter ratings feed into <batterai> as eligibility modifiers, not guarantees. Higher-rated hitters: Reach higher contact tiers more often Are less penalized by imperfect execution Lower-rated hitters: Can still square the ball But do so less consistently This preserves variety and prevents outcomes from feeling scripted or deterministic. Hot and cold zones Hot and cold zones act as contextual multipliers, nudging contact quality up or down based on pitch location. Stock values (roughly ±10%) show clear intent: Zones should be noticeable, but never overpowering. A hot zone increases the odds of better contact but does not guarantee it. From contact quality to ball speed Rather than outputting a single “contact score,” <batterai> routes the swing into a contact-quality tier. That tier determines: Which exit-velocity ranges are eligible Which up/down angle biases apply How strongly pull or opposite-field influence is allowed <batter> then takes over and expresses that qualification within its defined limits. Tuning considerations <batterai> is one of the most powerful and sensitive blocks in the datafile. It should be treated as a fine-tuning layer, not a blunt instrument. Take a "measure twice, cut once" approach on this block. Good tuning targets: Contact-quality spread (reducing all-or-nothing outcomes) Timing forgiveness range Pitch-speed penalties Hot/cold zone influence strength Pull vs opposite-field balance Areas to approach carefully: Global contact-quality multipliers Max/min ball-speed modifiers Timing influence weights Small changes here ripple through the entire hitting experience. Final notes <batterai> exists to answer one question: How good was that swing, really? EA designed this block to live in a gray area between perfect and bad, between skill and chaos. It ensures that: Good ideas don’t always succeed Bad ideas don’t always fail Skill shows up over time, not every swing Outcomes stay readable and fair Most importantly, <batterai> only makes sense in conversation with <batter>. <batterai> evaluates the swing <batter> expresses and stabilizes the result That relationship is where MVP’s hitting feel truly comes from.
  21. Before changing any values in datafile.txt, it helps to understand what this file was designed to do in the first place, so I will take my time to explain it as best as I could, picking up where the datafile guys left off. For starters, MVP Baseball 2005 is a game that doesn't simulate baseball the way modern games do. It doesn’t calculate true physics, real bat-ball collision math, or adaptive strategy. Instead, the engine relies on predefined outcome ranges (what you can think of as buckets) that decide how an at-bat, pitch, or batted ball is likely to play out. The datafile itself controls how often the game chooses each outcome, not whether the outcome exists. The hitting mechanics in MVP start with three blocks that we can build a mental model for: <cpubatter> that basically decides whether a swing happens at all <batterai> that basically decides how good that swing qualifies as <batter> that basically decides how that qualifying swing is expressed Let's start on the first starting block in the datafile, which is <batter>. I will just break every section down by what it's intent is first then explain the values. It's easier to learn what makes the game "tick" this way by just building a map every step of the way. <Batter> - So you made contact on a swing, now what? <batter> determines how the swing behaves physically and visually once it happens. This block controls the bat–ball interaction layer: timing windows, contact quality ranges, launch angles, spin, power scaling, and how “good” or “bad” contact is translated into on-field results. Think of this block as the hitter's hands, bat and swing path. This block applies to CPU hitters and Human hitters. EA's Design Intent: EA’s goal with <batter> wasn't to simulate real-world bat physics. Instead, they aimed to create repeatable, readable outcomes that feel right to baseball fans while remaining stable across difficulty levels and input timing variance. So rather than calculating true collision physics, EA used: Tuned timing windows Weighted launch angles Spin ranges Power compression and expansion Contextual modifiers (inside/outside, hot/cold zones) EA’s intent: Make contact quality readable to the player Reward good timing without guaranteeing outcomes Prevent extreme results from slight mistakes Keep ball trajectories believable, not literal Funnel outcomes toward baseball-appropriate distributions This is why MVP has a very distinctive "feel" even though it is not physics-driven in the modern sense, and because pitching in MVP is designed to remain stable and conservative, <batter> plays a crucial role in preventing hitter-side systems from producing unrealistic outcomes. What <batter> is responsible for: The <batter> block controls swing execution and ball outcome shaping. Specifically, it governs: Swing timing windows and forgiveness How early/late swings are penalized Launch angle ranges for different contact types How power ratings are scaled or suppressed Ball spin (topspin vs backspin) Inside vs outside pitch handling Contact compression (hard vs soft contact) Bunt behavior and variability This block doesn't decide whether contact happens, only what kind of contact results once a swing connects. How it works: Note: There's a lot of entries with "fudge", and you might wonder what that means. Basically "fudge" is a programmer term for softening/smoothing the edges on systems so outcomes feel varied, natural and fun instead of completely scripted. So if you were basically on time for a swing for example, the game won't punish you for 3 or so milliseconds that you were off. That's what "fudging" does. Contact and Power Translation This block defines how contact quality turns into power and exit velocity. Key ideas EA baked in: Contact and power are related but separate Perfect contact does not guarantee max power Poor contact can still result in fair balls Power is capped and shaped, not linear You can see this in values like: BestHitPower WorstHitPower Sweetspot_power No_Power_Mod Hot_Power_Mod Warm_Power_Mod Cold_Power_Mod EA’s intent: Prevent weak hitters from hitting unrealistic bombs Keep star hitters dangerous without breaking the game Make mishits matter Preserve believable distance variance This is one reason MVP rarely produces “cheap” home runs. Launch Angle and Ball Trajectory Launch angle is not a single value but a range shaped by modifiers. Values like: Bat_launch_angle Power_launch_angle Contact_launch_angle Min_vert_power Max_vert_power Grounder_Adjust Longball_Adjust …work together to determine whether a ball: Rolls Skips Lines Carries Dies at the track EA’s intent: Avoid laser-flat trajectories Keep fly balls from all looking the same Ensure ground balls exist as a meaningful outcome Make power swings trade consistency for lift This is why MVP produces such a recognizable mix of liners, choppers, and deep flies. Sweet Spot and Bat Geometry The bat is treated as a zone, not a point. Values like: Sweetspot_pos Sweetspot_power Bat_length BAT_LENGTH BAT_YCENTER BAT_ZCENTER Bat_Y_off Bat_Z_off Define: Where good contact happens How forgiving the bat is How much off-center hits are penalized EA’s intent: Reward good timing without demanding perfection Allow “jam shots” and “end-of-the-bat” hits Make contact quality feel analog, not binary Inside vs Outside Pitch Behavior EA explicitly treated inside and outside pitches differently. Values like: Inside_power Outside_power Inside_factor Outside_factor Inside_pos Control how pitch location relative to the hitter affects: Pull power Opposite-field contact Jammed swings Rollovers EA’s intent: Make pitch location matter Encourage realistic spray patterns Prevent all swings from producing identical results Reward pulling mistakes, not everything This is subtle, but hugely important for realism. Spin and Ball Movement Spin is handled as a bounded modifier, not true physics. Values such as: Hit_Spin Min_spin_RPM Max_spin_RPM MIN_TOPSPIN_VAL MAX_TOPSPIN_VAL INSIDE_SPIN_VAL OUTSIDE_SPIN_VAL Control how much the ball: Carries Dives Skips Hooks or slices EA’s intent: Prevent knuckleball chaos Keep trajectories readable Add variation without unpredictability Shape hits visually as much as mechanically Bunt Behavior Bunting is fully defined in this block. Values like: Bunt_Speed_MPH Bunt_Var_MPH Bunt_launch_angle Bunt_vert_compress Bunt_Aim_Comp Bunt_max_lead EA’s intent: Make bunting situational, not dominant Prevent drag bunt abuse Keep bunts readable for fielders Preserve risk/reward balance Tuning Considerations <batter> is one of the safest blocks to tune, provided you respect its role. High-value tuning areas: Exit velocity ceilings Launch angle spread Grounder vs fly ball balance Sweet spot forgiveness Spin limits Areas to adjust carefully: Power modifiers Bat geometry values Contact compression Small changes can dramatically alter hit variety. Final Notes: The <batter> block is the engine room of hitting outcomes. EA designed it to: Feel responsive Look believable Produce variety Avoid extremes Protect pacing It's not trying to be realistic physics, but moreso trying to nail the feel of baseball outcomes. Once you understand this, this block becomes far less intimidating on what you can modify and far more expressive given that you can essentially reshape MVP's offensive identity here.
  22. I haven't even gotten into the datafile stuff which is a much bigger deal, but we need to understand how the game was designed and the developers' intent, which I can talk about at length
  23. This will be my new obsession within this 21 years old game, thanks for the kickstart.
  24. Hello Omarito, thanks for responding, unfortunately, because you took so much time, me and a couple of friends who are actually still modding decided to take the matter into our own hands and created an alternate ID List, which everyone can visit it on the link below. I don't plan to make another topic to take this one down, just DM for ID requests, thank you. https://docs.google.com/spreadsheets/d/1ASQtlqFwDEE1ZYj-x0n9gqQpxRH3jwvA/edit?usp=sharing&ouid=104183578849908287938&rtpof=true&sd=true
  25. Orioles re-signed RHP Zach Eflin to a one-year, $10 million contract. Marlins signed RHP Pete Fairbanks to a one-year, $13 million contract. Blue Jays signed 1B/OF Jorge Burgos to a minor league contract. Yankees signed RHP Travis MacGregor to a minor league contract. Guardians signed RHP Pedro Avila to a minor league contract.
  26. Thank you. Reading baseball books during cold winters has helped me.
  27. 7/10 91 seconds. great job Y4L
  28. 9 out of 10, 51 seconds. The questions were not that bad for me to be this slow.
  1. Load more activity


×
×
  • Create New...