You get bad numbers, nothing else matters. If your opponent rolls good numbers, it can offset your skills. And indeed, veterans of the site were complaining that they'd lost simulated World Series because of the luck factor, and all kind of baseball simulations I've seen depend on the roll of a dice or the drawing of cards. All you can do is improve your chances. The best players are those that improve their chances, but no matter what they do, if they have a streak of bad luck, they'll lose.
That's what I've been designing a baseball game simulation of my own, that gets rid of the luck factor completely. All the numbers on the player's cards are there to see by everyone, so if you can predict the lineup and pitcher that your opponent is going to use, you should be able to beat them, with strategy, not luck.
For a long time I struggled about how to procedurally generate player cards. Randomly generating them was easy, but I wanted their name to have meaning (i.e. a card for "Batman" always creates the same card.)
Finally I found my solution on random.org's persistent identifier. Looking for a string for "Batman" would always create that card, so the card being Batman had a meaning.
The first 3 numbers of the left column go to the player's VY (Velocity), the next ones go for CL (Control), the next for FG (Fielding) and the last three for defense.
The first 3 numbers of the right column go to the player's CT (Contact), the next ones go for PR (Power), the next for SD (Speed) and the last three for attack.
The remainng number (which goes to the bottom middle of the card) is energy.
I have added grades at the left of the numbers, higher numbers are generally better in the sim so players can use them as guideline to draft their players.
Velocity and Control are used when pitching. Fielding is used after the ball made contact with the oppoent's bat, or someone is attempting to stretch/steal a base against you.
Contact and Power are used when batting, Speed is used after your bat made contact with the ball, or for attempting to streths/steal a base.
The pitcher/batter mechanic is as follows. Here, the pitcher is the one on the left.
First, the first number of the Pitcher's VY is matched against the first number of the batter's CT.
Here's this master table that is used thorough the sim:
2 Beats 1, 4, 6, 9
3 Beats 2, 4, 7, 9
4 Beats 5, 6, 7, 9
5 Beats 2, 3, 6, 8
6 Beats 1, 3, 7, 8
7 Beats 1, 2, 5, 8
8 Beats 1, 2, 3, 4
9 Beats 5, 6, 7, 8
0 Loses to everything
0 Beats everything.
Beating the opponent's number doesn't mean there's a positive outcome, just that it's more likely.
If the Pitcher wins, it matches its first CL number against the next unused CT number of the batter.
If the Batter wins, it matches its first PR number against the next unused VY number of the pitcher.
So there are CLvCT and VYvPR charts with all outcomes for all possible combinations, with the CLvCT chart being generally better for the batter and the VYvPR being generally better for the batter. With the highest numbers giving the best outcomes and the lowest numbers giving the worst ones.
So, here, the first VY number is a 6, and the first CT number is a 2. 6<2 according to the master table so the batter wins. Next is VYBvPRA (second VY number against first PR number). Herb's is an 8 and Batman's is an 8.
The tying table looks as follows:
4=4. Retry (Batter-Pitcher Contact Vs. Fielding).
2=2. High Base out, out.
1=1. High 2 Bases out, out
0=0. If B2, High 2 Bases Double, Out. Else, Hit->2B.
HR = Home Run
Hit->2B = Batter to second, players forced to move advance
If B2 = If there's exactly two players on the bases
8=8 is a Triple, so everyone on the bases score, and Batman moves to third. Herb has used VYA (first VY number) and VYB (second VY number), so she'll need to use VYC (third VY number) against the next batter.
If VYvCT ties, there's a chart for CLvPR outcomes.
These outcomes may lead to deeper outcomes where the batter battles against the fielders, SDvFG, CTvFG and PRvFG, etc.
There's an "uniqueness" rule for outcomes, in where, if a pitcher has already used VYA and VYB against a batter, the next time they face it they must use VYC, and if all three have been used, their defense numbers kick off. So, if Batman was pitching and already had used his 6, 0 and 1 against some batter, the next time he'd use its 8 (first number of defense) against that player.
The same applies to all other stats like CL and FG, and once a batter has used all its numbers from CT, PR, or SD against some player, it starts using its attack numbers (simulating tiredness for some players and engaging in others.)
Finally, energy drops for pitchers every time they have faced a full rotation of batters, and batter's energy drops after the next time they face a pitcher. Once the energy is negative all their numbers are decreased by one. After a game is over all players recover 0.5 energy. This is so players have to use batters from their bench, and there's also forced timeout for pitchers so they can't pitch next game.
And that's basically it, for example games you can read previous iterations of the system, here where a simplistic variation of the system was used, with cards only having three numbers and rotating them for everything on a single chart, and here which uses this system, but grabbed the stats from Pokémon stats, and didn't have attack, defense or energy implemented.
Anyway, the problem of all this is that games take ages to mod manually, for this reason I shortened the games to 3 innings (1 inning if a side is winning by three runs, two innings if a side is winning by 1 run, and more than 3 only if the game is tied), and even then it takes me 2 hours for a single game.
I was wondering how easy would it be to create a program where you could input the data, and it outputted the outcome. Probably just one for a given PitchervBatter outcome, but it could be extended to have as input all incoming batters and fielding positions, and it'd output an entire game.
What would be the best language to program this? The speed doesn't matter, several minutes of waiting would be fine given the saved time. I'd imagine perhaps something like a PHP page where one inputs the teams and it outputs the games. Maybe even one that could grab the numbers from random.org and output the game from them?
And finally, the question on the OP, would it be worth it? I mean, if one would spend hours and hours and hours programming this perhaps those hours would be better spent simulating games manually...
Thanks for your help!