Private Sub picPitchLocation_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picPitchLocation.MouseUp Dim recalc As Boolean Dim newPlay As New Data.Baseball.Play Dim advanceRunners As Boolean Dim i As Integer Dim p As New Data.Baseball.Play Dim advanceBaseCtr As Integer Dim runsScored As Integer Dim outRecorded As Boolean Play_InitializeGS(glob.currentPlay, PLAY_TYPE_PITCH) pitchPtX = e.X / 2 pitchPtY = e.Y / 2 advanceRunners = False outRecorded = False Dim f As New EventPitchEntry f.ShowDialog() If Not pitchCancel Then ' get defense if necessary If glob.currentPlay.PitchResult = PITCH_RESULT_STRIKE_SWINGING Or glob.currentPlay.PitchResult = PITCH_RESULT_STRIKE_CALLED Then If BitIsOn(glob.currentPlay.PitchFlags, PITCH_FLAGS_K_PUTOUT) Then glob.currentPlay.DefensiveSequence = PBPDefensiveSequence(glob.currentPlay.DefensiveSequence) advanceRunners = True runnersAdvanceDescription = "strikeout (putout)" End If End If If BitIsOn(glob.currentPlay.PitchFlags, PITCH_FLAGS_WILD_PITCH) Then advanceRunners = True runnersAdvanceDescription = "wild pitch" End If If BitIsOn(glob.currentPlay.PitchFlags, PITCH_FLAGS_PASSED_BALL) Then advanceRunners = True runnersAdvanceDescription = "passed ball" End If glob.currentPlay.Create(glob.conn) If glob.currentPlay.PitchResult = PITCH_RESULT_BALL Or _ glob.currentPlay.PitchResult = PITCH_RESULT_BALL_CHECK_SWING Or _ glob.currentPlay.PitchResult = PITCH_RESULT_INTENTIONAL_BALL Or _ glob.currentPlay.PitchResult = PITCH_RESULT_PITCHOUT Then recalc = False gameState.balls = gameState.balls + 1 gameState.numberOfPitches = gameState.numberOfPitches + 1 If gameState.balls >= glob.currentBaseballContestPreference.ballsPerWalk Then ' see if runners on base need to advance AdvanceRunnersByWalk() advanceRunners = False ' put the batter on base Play_InitializeGS(newPlay, PLAY_TYPE_ON_BASE) newPlay.FinalBase = 1 newPlay.Create(glob.conn) gameState.batterPlayerID = GetNextBatter() recalc = True End If End If If glob.currentPlay.PitchResult = PITCH_RESULT_STRIKE_SWINGING Or _ glob.currentPlay.PitchResult = PITCH_RESULT_STRIKE_CALLED Then gameState.numberOfPitches = gameState.numberOfPitches + 1 gameState.numberOfStrikes = gameState.numberOfStrikes + 1 recalc = False If BitIsOn(glob.currentPlay.PitchFlags, PITCH_FLAGS_K_ON_BASE) Then advanceRunners = True runnersAdvanceDescription = "strikeout (on base)" Play_InitializeGS(newPlay, PLAY_TYPE_ON_BASE) newPlay.FinalBase = 1 newPlay.Create(glob.conn) gameState.batterPlayerID = GetNextBatter() recalc = True Else gameState.strikes = gameState.strikes + 1 If gameState.strikes >= glob.currentBaseballContestPreference.strikesPerStrikeout Then outRecorded = True gameState.batterPlayerID = GetNextBatter() recalc = True End If End If End If If glob.currentPlay.PitchResult = PITCH_RESULT_FOUL_BALL Then gameState.numberOfPitches = gameState.numberOfPitches + 1 gameState.numberOfStrikes = gameState.numberOfStrikes + 1 If gameState.strikes < glob.currentBaseballContestPreference.strikesPerStrikeout - 1 Then gameState.strikes = gameState.strikes + 1 End If recalc = False End If If glob.currentPlay.PitchResult = PITCH_RESULT_HIT_BY_PITCH Then gameState.numberOfPitches = gameState.numberOfPitches + 1 ' see if runners on base need to advance AdvanceRunnersByWalk() ' put the batter on base Play_InitializeGS(newPlay, PLAY_TYPE_ON_BASE) newPlay.FinalBase = 1 newPlay.Create(glob.conn) gameState.batterPlayerID = GetNextBatter() recalc = True End If If glob.currentPlay.PitchResult = PITCH_RESULT_BALL_IN_PLAY Then gameState.numberOfPitches = gameState.numberOfPitches + 1 gameState.numberOfStrikes = gameState.numberOfStrikes + 1 Play_InitializeGS(bipPlay, PLAY_TYPE_ON_BASE) cancelFlag = False Dim eip As New EventInPlay eip.ShowDialog() If cancelFlag Then bipPlay.BallInPlayResult = 0 Data.Baseball.Play.Delete(glob.conn, glob.currentPlay.PlayID) Redraw(True) Exit Sub Else bipPlay.Create(glob.conn) advanceRunners = True runnersAdvanceDescription = "ball in play" End If Else bipPlay = New Data.Baseball.Play End If runsScored = 0 If bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_HR Then runsScored = 1 End If If bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_OUT Or bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_HRO Then outRecorded = True End If If advanceRunners Then recalc = True ' final check to make sure that the advance runners screen needs to pop up advanceBaseCtr = 0 If BasePlayers_Count(gameState.thirdBasePlayers) > 0 Then advanceBaseCtr = advanceBaseCtr + 1 If BasePlayers_Count(gameState.secondBasePlayers) > 0 Then advanceBaseCtr = advanceBaseCtr + 1 If BasePlayers_Count(gameState.firstBasePlayers) > 0 Then advanceBaseCtr = advanceBaseCtr + 1 If advanceBaseCtr = 0 Then advanceRunners = False ' do not show advance runners screen if the inning number of outs has been reached If outRecorded Then If (gameState.outs + 1) >= glob.currentBaseballContestPreference.outsPerHalfInning And _ glob.currentBaseballContestPreference.automaticallyEndInnings Then advanceRunners = False End If End If If advanceRunners Then ' manually advance all runners on base For i = 1 To 3 runnersAdvancePlayerID(i) = Nothing runnersAdvanceFinalBase(i) = Nothing Next If BasePlayers_Count(gameState.thirdBasePlayers) > 0 Then runnersAdvancePlayerID(3) = gameState.thirdBasePlayers(1) runnersAdvanceFinalBase(3) = 3 End If If BasePlayers_Count(gameState.secondBasePlayers) > 0 Then runnersAdvancePlayerID(2) = gameState.secondBasePlayers(1) runnersAdvanceFinalBase(2) = 2 End If If BasePlayers_Count(gameState.firstBasePlayers) > 0 Then runnersAdvancePlayerID(1) = gameState.firstBasePlayers(1) runnersAdvanceFinalBase(1) = 1 End If runnersAdvanceEnableOuts = False If bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_FC Then runnersAdvanceDescription = "fielder's choice" runnersAdvanceEnableOuts = True End If If bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_DP Then runnersAdvanceDescription = "double play" runnersAdvanceEnableOuts = True End If If bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_ERROR Then runnersAdvanceDescription = "error" End If If bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_HR Then For i = 1 To 3 If runnersAdvanceFinalBase(i) > 0 Then runnersAdvanceFinalBase(i) = 5 Next End If If advanceBaseCtr = 1 And (bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_FC Or _ bipPlay.ballInPlayResult = BALL_IN_PLAY_RESULT_DP) Then ' automatically mark out the runner on FC and DP when there is only one runner on base runnersAdvanceFinalBase(1) = -1 runnersAdvanceFinalBase(2) = -1 runnersAdvanceFinalBase(3) = -1 Else Dim ra As New RunnersAdvance ra.ShowDialog() End If If BasePlayers_Count(gameState.thirdBasePlayers) > 0 Then If runnersAdvanceFinalBase(3) > 3 Then If runnersAdvanceFinalBase(3) >= 4 Then runsScored = runsScored + 1 Play_InitializeOB(p, gameState.thirdBaseEvents(1), True) If runnersAdvanceFinalBase(3) = 5 Then p.finalBase = 4 p.onBaseFlags = 2 ^ ON_BASE_FLAGS_EARNED_RUN Else p.finalBase = runnersAdvanceFinalBase(3) p.onBaseFlags = 0 End If If runnersAdvanceDescription = "wild pitch" Then p.OnBaseFlags = p.OnBaseFlags + 2 ^ ON_BASE_FLAGS_WP_ADVANCE ElseIf runnersAdvanceDescription = "passed ball" Then p.OnBaseFlags = p.OnBaseFlags + 2 ^ ON_BASE_FLAGS_PB_ADVANCE End If p.Create(glob.conn) ElseIf runnersAdvanceFinalBase(3) = -1 Then Play_InitializeOB(p, gameState.thirdBaseEvents(1), False) p.onBaseResult = ON_BASE_RESULT_OUT p.Create(glob.conn) End If End If If BasePlayers_Count(gameState.secondBasePlayers) > 0 Then If runnersAdvanceFinalBase(2) > 2 Then If runnersAdvanceFinalBase(2) >= 4 Then runsScored = runsScored + 1 Play_InitializeOB(p, gameState.secondBaseEvents(1), True) If runnersAdvanceFinalBase(2) = 5 Then p.finalBase = 4 p.onBaseFlags = 2 ^ ON_BASE_FLAGS_EARNED_RUN Else p.finalBase = runnersAdvanceFinalBase(2) p.onBaseFlags = 0 End If If runnersAdvanceDescription = "wild pitch" Then p.OnBaseFlags = p.OnBaseFlags + 2 ^ ON_BASE_FLAGS_WP_ADVANCE ElseIf runnersAdvanceDescription = "passed ball" Then p.OnBaseFlags = p.OnBaseFlags + 2 ^ ON_BASE_FLAGS_PB_ADVANCE End If p.Create(glob.conn) ElseIf runnersAdvanceFinalBase(2) = -1 Then Play_InitializeOB(p, gameState.secondBaseEvents(1), False) p.onBaseResult = ON_BASE_RESULT_OUT p.Create(glob.conn) End If End If If BasePlayers_Count(gameState.firstBasePlayers) > 0 Then If runnersAdvanceFinalBase(1) > 1 Then If runnersAdvanceFinalBase(1) >= 4 Then runsScored = runsScored + 1 Play_InitializeOB(p, gameState.firstBaseEvents(1), True) If runnersAdvanceFinalBase(1) = 5 Then p.finalBase = 4 p.onBaseFlags = 2 ^ ON_BASE_FLAGS_EARNED_RUN Else p.finalBase = runnersAdvanceFinalBase(1) p.onBaseFlags = 0 End If If runnersAdvanceDescription = "wild pitch" Then p.OnBaseFlags = p.OnBaseFlags + 2 ^ ON_BASE_FLAGS_WP_ADVANCE ElseIf runnersAdvanceDescription = "passed ball" Then p.OnBaseFlags = p.OnBaseFlags + 2 ^ ON_BASE_FLAGS_PB_ADVANCE End If p.Create(glob.conn) ElseIf runnersAdvanceFinalBase(1) = -1 Then Play_InitializeOB(p, gameState.firstBaseEvents(1), False) p.onBaseResult = ON_BASE_RESULT_OUT p.Create(glob.conn) End If End If End If If runsScored > 0 Then If bipPlay.ballInPlayResult <> BALL_IN_PLAY_RESULT_DP Then bipPlay.runsBattedIn = runsScored bipPlay.Put(glob.conn) End If End If Redraw(recalc) End If End Sub