2023-24 Football Statistics - Saginaw Valley

Yds 324.5
Rush 164.5
Pass 160.0
Pts/game 25.7
Yds allowed 298.3
Rush allowed 115.2
Pass allowed 183.1
Pts allowed/game 23.9
Schedule Summary
Overall (Pct.)6-5 (.545)
Conference (Pct.) 3-3 (.500)
StreakWon 2
Home4-2
Away2-3
Neutral0-0
Full Scores and Schedule »
Recent Games
Oct 7 at Ferris State L, 38-17
Oct 14 at St. Xavier (Ill.) W, 32-10
Oct 21 Wayne State W, 17-10
Oct 28 at Davenport L, 24-21
Nov 4 Northern Michigan W, 62-17
Nov 11 at Michigan Tech W, 38-21
Statistics category Overall Conf
Games 11 6
Scoring 283 169
Points per game 25.7 28.2
Total offense 3569 1871
Yards per game 324.5 311.8
Passing yards 1760 1007
Comp-Att-Int 166-268-9 98-151-5
Passing yards per game 160.0 167.8
Passing yards per attempt 6.6 6.7
Passing yards per completion 10.6 10.3
Passing touchdowns 11 7
Rushing yards 1809 864
Rushing attempts 457 235
Rushing yards per game 164.5 144.0
Yards per rush 4.0 3.7
Rushing touchdowns 19 10
1st downs 191 103
Rushing 1st downs 101 53
Passing 1st downs 72 39
Penalty 1st downs 18 11
1st downs per game 17.4 17.2
3rd-down conversions 56-158 29-82
3rd down % 35% 35%
4th-down conversions 11-19 4-7
4th down % 58% 57%
Kick returns (No.-Yards) 26-428 13-250
Kick return average 16.5 19.2
Punt returns (No.-Yards) 14-105 4-19
Punt return average 7.5 4.8
Field goals 10-14 5-7
Field goal % 71.4% 71.4%
PATs 35-35 22-22
PAT % 100.0% 100.0%
Punts (No.-Yards) 57-2247 31-1171
Average per punt 39.4 37.8
Red zone scores 30-37 15-16
Red zone % 81% 94%
Red zone touchdowns 21-37 11-16
Red zone touchdown % 57% 69%
Fumbles-lost 13-8 8-5
Fumbles recovered 3 2
Defensive INTs 15 10
Interception returns (No.-Yds) 15-251 10-205
Interception return average 16.7 20.5
Defensive TDs 5 5
Tackles 690 397
Sacks 27 9
Penalties 84 40
Penalty yards 753 347
Time of possession per game 29:37 29:02
Home Attendance 14,583 8,164
Home Attendance average 2,431 2,722
Passing
No. Name Yr Pos gp comp att pct yds y/g y/a td int lg effic
2 Mike O'Horo So. QB 11 98 154 63.6% 1064 96.7 6.9 8 3 36 134.9
7 Willie Taylor Jr. QB 7 21 37 56.8% 311 44.4 8.4 2 3 53 129.0
5 Jairus Grissom Sr. WR 7 22 40 55.0% 217 31.0 5.4 1 1 21 103.8
17 Mason McKenzie Fr. QB 3 24 35 68.6% 161 53.7 4.6 0 2 18 95.8
4 Nick Patterson Fr. QB 1 1 2 50.0% 7 7.0 3.5 0 0 7 79.4
  Totals     11 166 268 61.9% 1760 160.0 6.6 11 9 53 123.9
  Opponent     11 146 275 53.1% 2014 183.1 7.3 21 15 70 128.9
Rushing
No. Name Yr Pos gp rush yds y/g avg td lg fum lost
3 Terrance Brown R-Fr. RB 11 136 733 66.6 5.4 6 67 3 2
2 Mike O'Horo So. QB 11 94 299 27.2 3.2 6 47 2 1
23 Tyler Amos Jr. RB 10 62 220 22.0 3.5 2 14 1 1
24 Nick Johnson Jr. RB 10 47 153 15.3 3.3 2 9 - -
5 Jairus Grissom Sr. WR 7 23 82 11.7 3.6 0 47 3 2
17 Mason McKenzie Fr. QB 3 20 69 23.0 3.5 2 43 - -
34 Austin Bills So. RB 8 10 56 7.0 5.6 1 16 - -
1 Derrick Hinton Jr. Sr. WR 11 12 47 4.3 3.9 0 14 3 1
4 Nick Patterson Fr. QB 1 2 44 44.0 22.0 0 39 - -
6 Arron Foulkes Jr. WR 11 17 38 3.5 2.2 0 16 - -
7 Willie Taylor Jr. QB 7 17 31 4.4 1.8 0 12 - -
30 Jaquon Howard R-Fr. RB 6 3 21 3.5 7.0 0 19 - -
9 Derek Bryant So. SL 9 3 9 1.0 3.0 0 10 - -
6D Micah Cretsinger Jr. LB 11 1 9 0.8 9.0 0 9 - -
16 Eric Craft So. WR 11 1 5 0.5 5.0 0 5 1 1
25 Sam Dersa So. SL 11 2 5 0.5 2.5 0 3 - -
2D Christian Ellison R-Fr. DB 9 1 0 0.0 0.0 0 0 - -
1R Ryan Cornelius So. RB 1 1 -3 -3.0 -3.0 0 0 - -
  Totals     11 457 1809 164.5 4.0 19 67 13 8
  Opponent     11 423 1267 115.2 3.0 9 87 10 3
Receiving
No. Name Yr Pos gp rec rec/g yds y/g avg td lg
1 Derrick Hinton Jr. Sr. WR 11 52 4.7 595 54.1 11.4 4 53
6 Arron Foulkes Jr. WR 11 25 2.3 287 26.1 11.5 2 32
16 Eric Craft So. WR 11 21 1.9 232 21.1 11.0 2 31
3 Terrance Brown R-Fr. RB 11 17 1.5 172 15.6 10.1 2 34
25 Sam Dersa So. SL 11 10 0.9 98 8.9 9.8 0 19
23 Tyler Amos Jr. RB 10 9 0.9 46 4.6 5.1 0 16
9 Derek Bryant So. SL 9 6 0.7 44 4.9 7.3 0 18
89 Mitchell DeBrincat So. TE 10 5 0.5 32 3.2 6.4 0 11
19 Jalen Williams So. TE 4 4 1.0 75 18.8 18.8 0 29
10 Kevin Swift Jr. WR 1 3 3.0 33 33.0 11.0 0 16
5 Jairus Grissom Sr. WR 7 2 0.3 18 2.6 9.0 0 9
24 Nick Johnson Jr. RB 10 2 0.2 3 0.3 1.5 0 3
86 Tylor McCoon So. TE 5 2 0.4 16 3.2 8.0 0 9
34 Austin Bills So. RB 8 1 0.1 9 1.1 9.0 0 9
6D Micah Cretsinger Jr. LB 11 1 0.1 11 1.0 11.0 0 11
0R Jamari Thomas Fr. WR 1 1 1.0 7 7.0 7.0 0 7
84 Raid Zerki R-Fr. WR 2 1 0.5 38 19.0 38.0 0 38
  Totals     11 165 - 1754 159.5 10.6 11 53
  Opponent     11 146 - 2014 183.1 13.8 21 70
Kicking
No. Name Yr Pos gp fgm fga pct lg xpm xpa pct pts
47 Ryan Heicher Jr. K 11 10 14 71% 44 35 35 100% 65
  Totals     11 10 14 71% 44 35 35 100% 65
  Opponent     11 8 13 62% 45 31 32 97% 55
Punting
No. Name Yr Pos gp punt yds avg lg in20 fc tb blk
47 Ryan Heicher Jr. K 11 47 1898 40.4 69 21 9 2 0
40 Branden Fischer So. K 4 5 189 37.8 48 0 0 0 0
86 Tylor McCoon So. TE 5 5 160 32.0 57 1 0 0 0
  Totals     11 57 2247 39.4 69 22 9 2 0
  Opponent     11 63 2284 36.3 51 10 21 2 2
Returns
No. Name Yr Pos kr yds avg td lg pr yds avg td lg
30 Jaquon Howard R-Fr. RB 11 224 20.4 0 33 - - - - -
11 Andrew Holston Jr. DB 3 55 18.3 0 27 - - - - -
9 Derek Bryant So. SL 3 43 14.3 0 25 - - - - -
25 Sam Dersa So. SL 2 43 21.5 0 30 - - - - -
6 Arron Foulkes Jr. WR 2 27 13.5 0 19 - - - - -
26 Carrington Pryor Fr. DB 1 20 20.0 0 20 - - - - -
6D Micah Cretsinger Jr. LB 1 15 15.0 0 15 - - - - -
34 Austin Bills So. RB 1 1 1.0 0 1 - - - - -
7D Jasper Beeler R-Fr. DB 1 0 0.0 0 0 - - - - -
20 Elijah Gordon So. DB 1 0 0.0 0 0 2 37 18.5 0 0
1 Derrick Hinton Jr. Sr. WR - - - - - 10 66 6.6 0 15
28 Derek Thomason Jr. LB - - - - - 1 2 2.0 0 2
  Totals     26 428 16.5 0 33 14 105 7.5 0 15
  Opponent     44 966 22.0 2 94 19 177 9.3 1 57
All-Purpose
No. Name Yr Pos gp rush rcv pr kr yds ypg
3 Terrance Brown R-Fr. RB 11 733 172 - - 905 82.3
1 Derrick Hinton Jr. Sr. WR 11 47 595 66 - 708 64.4
4 Nick Patterson Fr. QB 1 44 - - - 44 44.0
30 Jaquon Howard R-Fr. RB 6 21 - - 224 245 40.8
10 Kevin Swift Jr. WR 1 - 33 - - 33 33.0
6 Arron Foulkes Jr. WR 11 38 287 - 27 352 32.0
2 Mike O'Horo So. QB 11 299 - - - 299 27.2
23 Tyler Amos Jr. RB 10 220 46 - - 266 26.6
17 Mason McKenzie Fr. QB 3 69 - - - 69 23.0
16 Eric Craft So. WR 11 5 232 - - 237 21.5
84 Raid Zerki R-Fr. WR 2 - 38 - - 38 19.0
19 Jalen Williams So. TE 4 - 75 - - 75 18.8
24 Nick Johnson Jr. RB 10 153 3 - - 156 15.6
5 Jairus Grissom Sr. WR 7 82 18 - - 100 14.3
25 Sam Dersa So. SL 11 5 98 - 43 146 13.3
9 Derek Bryant So. SL 9 9 44 - 43 96 10.7
26 Carrington Pryor Fr. DB 2 - - - 20 20 10.0
11 Andrew Holston Jr. DB 6 - - - 55 55 9.2
34 Austin Bills So. RB 8 56 9 - 1 66 8.3
0R Jamari Thomas Fr. WR 1 - 7 - - 7 7.0
7 Willie Taylor Jr. QB 7 31 - - - 31 4.4
20 Elijah Gordon So. DB 11 - - 37 0 37 3.4
89 Mitchell DeBrincat So. TE 10 - 32 - - 32 3.2
86 Tylor McCoon So. TE 5 - 16 - - 16 3.2
6D Micah Cretsinger Jr. LB 11 9 11 - 15 35 3.2
28 Derek Thomason Jr. LB 10 - - 2 - 2 .2
  Totals     11 1809 1754 105 428 4096 372.4
  Opponent     11 1267 2014 177 966 4424 402.2
Scoring
No. Name Yr Pos pts pts/g rush rec kr pr int fum xpm fgm 2pt misc
47 Ryan Heicher Jr. K 65 5.9 - - - - - - 35 10 0 0
3 Terrance Brown R-Fr. RB 48 4.4 6 2 - - - - - - 0 0
2 Mike O'Horo So. QB 36 3.3 6 - - - - - - - 0 0
6D Micah Cretsinger Jr. LB 24 2.2 0 0 0 - 4 - - - 0 0
1 Derrick Hinton Jr. Sr. WR 24 2.2 0 4 - 0 - - - - 0 0
23 Tyler Amos Jr. RB 12 1.2 2 0 - - - - - - 0 0
16 Eric Craft So. WR 12 1.1 0 2 - - - - - - 0 0
6 Arron Foulkes Jr. WR 12 1.1 0 2 0 - - - - - 0 0
24 Nick Johnson Jr. RB 12 1.2 2 0 - - - - - - 0 0
17 Mason McKenzie Fr. QB 12 4.0 2 - - - - - - - 0 0
34 Austin Bills So. RB 6 0.8 1 0 0 - - - - - 0 0
2D Christian Ellison R-Fr. DB 6 0.7 0 - - - 1 - - - 0 0
  Totals     283 25.7 19 11 0 0 5 0 35 10 0 0
  Opponent     263 23.9 9 21 2 1 1 0 31 8 2 0
Defense
No. Name Yr Pos gp tkl ast tot tkl/g sck yds tfl yds ff fr yds int yds brup blk
6D Micah Cretsinger Jr. LB 11 59 41 100.0 9.1 3.5 21 15.0 54 3 0 0 8 167 4 0
5D Alfred Dailey Jr. Jr. LB 10 40 31 71.0 7.1 1.0 11 6.0 29 1 0 0 0 0 2 1
4D Brandon Rawls So. LB 11 44 21 65.0 5.9 1.0 10 15.5 52 0 0 0 0 0 0 0
20 Elijah Gordon So. DB 11 31 13 44.0 4.0 0.0 0 2.5 30 0 0 0 2 0 3 2
90 Adom LeDuc R-Fr. DL 11 20 16 36.0 3.3 6.5 34 8.5 36 0 1 0 0 0 0 0
22 Mikey Woolridge Sr. DB 9 23 12 35.0 3.9 0.0 0 1.0 2 0 1 0 0 0 4 0
1D Leonard Henry IV Jr. DL 11 14 17 31.0 2.8 4.5 29 6.5 33 0 0 0 0 0 1 0
45 Harold Irby III Jr. DL 11 17 14 31.0 2.8 1.0 4 4.0 9 1 0 0 0 0 1 1
8 Dante Barthwell Jr. DB 11 19 7 26.0 2.4 2.0 10 7.5 19 0 0 0 1 7 3 0
99 Jemarrlowe Sykes Jr. DL 11 14 12 26.0 2.4 2.5 20 6.0 25 0 1 0 0 0 0 0
7D Jasper Beeler R-Fr. DB 11 14 11 25.0 2.3 0.0 0 2.5 4 0 0 0 1 13 0 1
43 Brady Devereaux Jr. LB 11 10 13 23.0 2.1 1.0 4 2.5 10 0 0 0 0 0 1 0
52 Carson Berenyi Jr. DL 11 13 9 22.0 2.0 0.5 2 1.5 4 0 0 0 0 0 2 0
2D Christian Ellison R-Fr. DB 9 20 2 22.0 2.4 0.0 0 0.0 0 0 0 0 1 47 5 0
56 Brannen Goodman Sr. DL 7 7 5 12.0 1.7 1.5 12 1.5 12 0 0 0 0 0 0 0
3D Jacoby Sanders So. DB 10 9 3 12.0 1.2 0.0 0 0.5 1 0 0 0 1 0 3 0
28 Derek Thomason Jr. LB 10 6 5 11.0 1.1 0.0 0 0.0 0 0 0 0 0 0 0 0
96 Jacob Spencer Jr. DL 10 5 5 10.0 1.0 1.0 6 2.0 7 0 0 0 0 0 1 0
94 Timothy Alonzo Jr. So. DL 8 4 5 9.0 1.1 0.0 0 1.0 3 0 0 0 0 0 0 0
27 Jaden Bevier R-Fr. LB 9 7 1 8.0 .9 1.0 7 1.0 7 0 0 0 0 0 0 0
54 Xavier Chasen R-Fr. DL 4 4 3 7.0 1.8 0.0 0 0.5 1 0 0 0 0 0 0 0
25 Sam Dersa So. SL 11 5 0 5.0 .5 0.0 0 0.0 0 0 0 0 0 0 0 0
13 DJ Voltz R-Fr. DB 9 4 1 5.0 .6 0.0 0 0.0 0 0 0 0 0 0 2 1
18 Kameron Davenport R-Fr. DB 4 3 1 4.0 1.0 0.0 0 0.0 0 0 0 0 0 0 1 0
11 Andrew Holston Jr. DB 6 3 1 4.0 .7 0.0 0 0.0 0 0 0 0 0 0 0 0
33 Colin Kraatz R-Fr. LB 4 3 1 4.0 1.0 0.0 0 0.0 0 0 0 0 0 0 0 0
41 Josh Rau R-Fr. LB 2 4 0 4.0 2.0 0.0 0 0.0 0 0 0 0 0 0 0 0
42 Isaiah Robinson Jr. LB 8 2 2 4.0 .5 0.0 0 0.0 0 0 0 0 0 0 0 0
29 Josh Brown R-Fr. DB 6 3 0 3.0 .5 0.0 0 1.0 3 0 0 0 0 0 1 0
32 Basil Hampton Jr. R-Fr. DB 5 2 1 3.0 .6 0.0 0 1.0 1 0 0 0 0 0 0 0
38 Ryan Wennerstrom Sr. LS 11 2 1 3.0 .3 0.0 0 0.0 0 0 0 0 0 0 0 0
89 Mitchell DeBrincat So. TE 10 2 0 2.0 .2 0.0 0 0.0 0 0 0 0 0 0 0 0
47 Ryan Heicher Jr. K 11 2 0 2.0 .2 0.0 0 0.0 0 0 0 0 0 0 0 0
58 James McDonald Fr. LB 3 1 1 2.0 .7 0.0 0 0.0 0 0 0 0 0 0 0 0
97 Brogan Wiler R-Fr. DL 3 2 0 2.0 .7 0.0 0 0.0 0 0 0 0 0 0 0 0
77 Connor Cracchiolo Jr. OL 11 1 0 1.0 .1 0.0 0 0.0 0 0 0 0 0 0 0 0
40 Branden Fischer So. K 4 1 0 1.0 .3 - - 0.0 - - - - - - - -
59 Logan Hekkema So. DL 3 1 0 1.0 .3 0.0 0 0.0 0 0 0 0 0 0 0 0
24 Nick Johnson Jr. RB 10 1 0 1.0 .1 0.0 0 0.0 0 0 0 0 0 0 0 0
21 Danny Mason Jr. DB 1 1 0 1.0 1.0 0.0 0 0.0 0 0 0 0 0 0 0 0
92 Jesse Powell So. DL 1 1 0 1.0 1.0 0.0 0 0.0 0 0 0 0 0 0 0 0
93 Kadyn Warner R-Fr. DL 3 0 1 1.0 .3 - - 0.5 1 - - - - - - -
53 Ryan Whitely So. OL 11 1 0 1.0 .1 0.0 0 0.0 0 0 0 0 0 0 0 0
  Totals     11 432 258 690.0 62.7 27.0 170 88.0 343 5 3 0 15 251 35 6
  Opponent     11 427 286 713.0 64.8 21.0 139 69.0 251 6 8 17 9 124 27 0
Passing
There was a problem with a Velocity script
Page/httpd/prestosports/site-public/WEB-INF/themes/generic/stats-bios-template
ErrorInvocation of method 'getTeamIDs' in class com.prestosports.render.storage.database.DatabasePage threw exception java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 33,822 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago. at /httpd/prestosports/site-public/WEB-INF/themes/generic/stats-bios-template[line 30, column 26]
Page source:
1: ## PICK UP OPTIONS
2: $website.include("options")
3: #set ($options = $request.getAttribute("options"))
4: #set ($locale = "en_us")
5: #set ($locale = $options.get("locale"))
6: #set ($showconf = true)
7: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide"))
8: #set ($showconf = false)
9: #end
10: #set ($paginate = false)
11: #if ($options.get("stats_individual_pagination") and $options.get("stats_individual_pagination").equalsIgnoreCase("yes"))
12:   #set ($paginate = true)
13: #end
14: #set ($limit = $options.get("stats_individual_limit"))
15: 
16: #set ($isSharedMeets = true)
17: #if ($sport and $sport.statistics == true)
18:   #set ($isSharedMeets = false)
19: #end
20: 
21: #set ($isIncluded = $website.isIncluded())
22: 
23: #set ($isAjax = false)
24: #if ($request.getParameter('ajax').length() > 0)
25:   #set ($isAjax = true)
26: #end
27: 
28: #set ($idLength = 0)
29: #set ($idLength = $formatter.escapeXml($request.getParameter("id")).length())
30: #set ($teamCount = $page.getTeamIDs().size())
31: 
32: #set ($teamId = '')
33: #if ($request.getParameter("teamId").length() > 0)
34:   #set ($teamId = $request.getParameter("teamId"))
35: #end
36: 
37: #set ($isSingleTeam = false)
38: #if ($teamId.length() != 0 or $teamCount == 1)
39:   #set ($isSingleTeam = true)
40: #end
41: 
42: #if ($teamCount == 1 and (not $isIncluded) and $idLength == 0 and not $isSharedMeets)
43:   $website.decorate("")
44:   #set ($targetURL = "${page.url}/../teams?view=lineup")
45:   $response.sendRedirect($targetURL)
46:   #stop
47: #end
48: 
49: #set ($pos = "")
50: #set ($pos = $formatter.escapeXml($request.getParameter("pos")))
51: 
52: #if ($pos.length() == 0 and $briefsDefaultCategoryPosition and not $isIncluded and not $isSharedMeets)
53:   $website.decorate("")
54:   #set ($targetURL = "${page.url}?pos=" + $briefsDefaultCategoryPosition)
55:   #if($briefsDefaultSorting and $briefsDefaultSorting.containsKey($briefsDefaultCategoryPosition))
56:       #set ($targetURL = $targetURL + "&sort=" + $briefsDefaultSorting.get($briefsDefaultCategoryPosition))
57:   #end
58:   #if($paginate)
59:     #set ($targetURL = $targetURL + "&page=1")
60:   #end
61:   #if($limit)
62:     #set ($targetURL = $targetURL + "&limit=" + $limit)
63:   #end
64:   $response.sendRedirect($targetURL)
65:   #stop
66: #end
67: 
68: ## We want to leave this undefined so we can test for that
69: #set ($minEsc = $formatter.escapeXml($request.getParameter("min")))
70: #if ($minEsc.length() > 0)
71:   #set ($min = $minEsc)
72: #end
73: 
74: #set ($cansort = $formatter.escapeXml($request.getParameter("cs")))
75: 
76: ## #set ($labels = $labels.get($positions.get($pos)))
77: 
78: #set ($url = $request.requestURI)
79: #set ($paginationParameters = "")
80: #if($paginate and $!request.getParameter("page"))
81:   #set ($paginationParameters = $paginationParameters + "&page=1")
82: #end
83: #if($limit and $!request.getParameter("limit"))
84:   #set ($paginationParameters = $paginationParameters + "&limit=" + $limit)
85: #end
86: 
87: #set ($view = "")
88: #set ($view = $formatter.escapeXml($!request.getParameter("view")))
89: 
90: #set ($restriction = "0")
91: #set ($restrictionEsc = $formatter.escapeXml($request.getParameter("r")))
92: #if ($restrictionEsc.length() > 0)
93:   #set ($restriction = $restrictionEsc)
94: #end
95: 
96: $website.include("standings?tmpl=stats-standings-abbr-template")
97: #set ($teamAbbr = $request.getAttribute("teamAbbr"))
98: 
99: #*
100: <!--
101: Debug
102: URL: $url
103: isIncluded: $isIncluded
104: View: ${view}
105: Position: $pos
106: Sort: $sort
107: isAjax: $isAjax
108: isSharedMeets = $isSharedMeets
109: page.getTeamIDs.size() = $page.getTeamIDs().size()
110: teamId = $teamId
111: page.teams.entrySet() = $page.teams.entrySet().size()
112: isSingleTeam = $isSingleTeam
113: -->
114: *#
115: 
116: #if ($locale == "en_us")
117:   #set ($defLabel = "Defense")
118: #elseif ($locale == "en_gb")
119:   #set ($defLabel = "Defence")
120: #end
121: 
122: #macro(printBriefsCategories $r)
123: #set ($ariaLabel = "Overall Stats")
124: #if ($r == "1")
125: 	#set ($ariaLabel = "Conference Stats")
126: #end
127: #set ($briefsCategories = [])
128:   #if ($teamId.length() == 0 && $briefsCategoriesLabels)
129:   <div class="tab-container secondary clearfix" data-module="stats/tabs" data-type="secondary">
130:   <div class="tab-nav" data-module="jscroll" data-momentum="false">
131:   <div>
132:   <ul class="clearfix">
133: 
134:     #if($briefsCategoriesLabels.containsKey("Game"))
135: 
136:       ## So we need to print Season, Games and Minutes (for some sports)  tabs
137: 
138:       #set($briefsCategoriesSeason = $briefsCategoriesLabels.get("Season"))
139:       #set($briefsCategoriesGame = $briefsCategoriesLabels.get("Game"))
140:       #set($briefsCategoriesMinutes = $briefsCategoriesLabels.get("Minutes"))
141:       ## Iterate over the brief categories labels
142: 
143:       #set ($isFirstCategory = true)
144:       #foreach($briefsCat in $briefsCategoriesSeason.entrySet())
145:         #set($briefsCatKey = $briefsCat.key)
146:         #set($briefsCatLabel = $briefsCat.value)
147: 
148:       <li class="tabs-category" data-skip="true"><span>$briefsCatLabel:</span></li>
149:         #foreach($briefsCatGame in $briefsCategoriesGame.entrySet())
150:           #if($briefsCatGame.value == $briefsCatLabel)
151:             #set($gamePos = $briefsCatGame.key)
152:           #end
153:         #end
154: 
155:         ## Print the Game stuff
156:         #set($gameDefaultSorting = $briefsDefaultSorting.get($gamePos))
157:         <li #if ($pos == $gamePos) class="active" #end>
158:           <a href="${url}?sort=$gameDefaultSorting&view=${view}&pos=${gamePos}&r=${r}${paginationParameters}" role="button" aria-label="${ariaLabel}: ${briefsCatLabel}: game">Game</a>
159:         </li>
160: 
161:         ## Print the Season stuff
162:         #set($seasonDefaultSorting = $briefsDefaultSorting.get($briefsCatKey))
163:         #if ($pos.length() == 0 || $pos == $briefsCatKey)<li class="active">#else <li> #end
164:           <a href="${url}?sort=$seasonDefaultSorting&view=${view}&pos=${briefsCatKey}&r=${r}${paginationParameters}" role="button" aria-label="${ariaLabel}: ${briefsCatLabel}: season">Season</a>
165:         </li>
166: 
167:         #if ($briefsCategories.add({ "pos" : $gamePos}))#end
168:         #if ($briefsCategories.add({ "pos" : $briefsCatKey, "isFirstCategory" : $isFirstCategory}))#end
169: 
170:         #if ($isFirstCategory)
171:           #set ($isFirstCategory = false)
172:         #end
173: 
174:         #if ($briefsCategoriesMinutes)
175:           #foreach($briefsCatMinutes in $briefsCategoriesMinutes.entrySet())
176:             #if($briefsCatMinutes.value == $briefsCatLabel)
177:               #set($minutesPos = $briefsCatMinutes.key)
178:             #end
179:           #end
180: 
181:           ## Print the minutes stuff
182:           #set($minutesDefaultSorting = $briefsDefaultSorting.get($minutesPos))
183:           <li #if ($pos == $minutesPos) class="active" #end>
184:             <a href="${url}?sort=$minutesDefaultSorting&view=${view}&pos=${minutesPos}&r=${r}${paginationParameters}" role="button" aria-label="${ariaLabel}: ${briefsCatLabel}: minutes">Minutes</a>
185:           </li>
186: 
187:           #if ($briefsCategories.add({ "pos" : $minutesPos}))#end
188: 
189:         #end
190:       #end
191:     #else
192: 
193:       ## So there are no Games or minutes subgroup for this sport so just print the categories
194:       #set($briefsCategoriesSeason = $briefsCategoriesLabels.get("Season"))
195:       #foreach($briefCat in $briefsCategoriesSeason.entrySet())
196:         #set($categoryLabel = $briefCat.value)
197:         #set($briefCatKey = $briefCat.key)
198: 
199:         #if($locale == "en_gb")
200:           #if($categoryLabel == "Defense")
201:             #set($categoryLabel = "Defence")
202:           #end
203: 
204:           #if($categoryLabel == "Defensemen")
205:             #set($categoryLabel = "Defencemen")
206:           #end
207:         #end
208: 
209:         #set($categorySort = $briefsDefaultSorting.get($briefCatKey))
210: 
211:         ## Check if the current position category can set a sorting that comes
212:         ## from antoher tabs category or maybe from a stat alphabet-filter-column
213: 
214:         #if($briefKeepPreviousSorting)
215:           #if($briefKeepPreviousSorting.contains($pos) && $briefKeepPreviousSorting.contains($briefCatKey))
216:             #set($categorySort = $sort)
217:           #end
218:         #end
219: 
220:         <li #if ($pos == ${briefCatKey}) class="active" #end>
221:           <a href="${url}?sort=$!categorySort&view=$!view&pos=$!briefCatKey&r=$!r${paginationParameters}" role="button" aria-label="${ariaLabel}: ${categoryLabel}">$categoryLabel</a>
222:         </li>
223: 
224:         #if ($briefsCategories.add({ "pos" : $briefCatKey }))#end
225: 
226:       #end
227:     #end
228: 
229:   </ul>
230:   </div>
231:   </div> ## tab-nav
232: 
233:   <div class="tab-panels clearfix">
234:   #foreach ($category in $briefsCategories)
235:     #set ($isActive = false)
236: 
237: #*
238: <br><br><br>
239: 	$briefsCategories <br >
240:     DEBUG <br>
241:     r = $r <br>
242:     restriction = $restriction <br>
243:     pos = $pos <br>
244:     category.pos = $category.pos <br>
245: 	isFirstCategory = $isFirstCategory
246: <br><br><br>
247: *#
248: 
249: 	#if ($r == $restriction && ($pos == $category.pos || (!$pos && $isFirstCategory) || $briefsCategories.size() == 1))
250:       #set ($isActive = true)
251:     #end
252: 
253:     #if ($isActive)
254:       <div class="tab-panel active">
255:           #printPlayers($category.pos, $r)
256:       </div>
257:     #else
258:       <div class="tab-panel tab-panel-ondemand"></div>
259:     #end
260:   #end
261:   </div>
262: 
263:   </div> ## tab-container
264: 
265:   #else
266:     #printPlayers($pos, $r)
267:   #end
268: #end  ## printBriefsCategories
269: 
270: #macro(printPlayerName $isIncluded $individual)
271:   #if ($isIncluded)
272:     ${individual.firstName}
273:   #elseif ($individual.firstName.length() > 0)
274:     ${individual.firstName.substring(0, 1)}
275:   #end
276:   ${individual.lastName}
277: #end
278: 
279: #macro(printPlayers $p $r)
280:   #set ($briefs = $briefs.get($positions.get($p)))
281:   <div class="stats-wrap clearfix">
282:     <div class="stats-box stats-box-alternate full clearfix">
283:       <div class="scrollable">
284:         <div>
285:           <table>
286:             <tr class="thead accent-bg">
287:               #if ($isIncluded)
288:                 <th class="text">No.</th>
289:               #elseif ($sort != 'name' && ! $isSharedMeets)
290:                 <th class="text">Rk</th>
291:               #end
292: 
293:               <th class="text pinned-col" title="Name">
294:                 #if ($cansort == 'n' || $isSharedMeets)
295:                   Name
296:                 #else
297:                   <button value="${url}?sort=name&view=${view}&pos=${p}&r=${r}${paginationParameters}"
298:                           class="sortable"
299:                           aria-label="sort table using name">
300:                     Name
301:                   </button>
302:                 #end
303:               </th>
304: 
305:               #if ($isIncluded)
306:                 <th>Yr</th>
307:                 <th>Pos</th>
308:               #elseif ($isSharedMeets)
309:                 <th>Yr</th>
310:               #else
311:                 <th>&nbsp;</th>
312:               #end
313: 
314:               ## Hack for now
315:               #set ($pos = "")
316:               #set ($pos = $formatter.escapeXml($request.getParameter("pos")))
317:               #set ($labels = $labels.get($pos))
318: 
319:               #foreach ($key in $briefs.keySet())
320:                 #if ($cansort == 'n')
321:                   <th>${briefs.get($key)}</th>
322:                 #else
323:                   <th>
324:                     <button value="${url}?sort=${key}&view=${view}&pos=${p}&r=${r}${paginationParameters}"
325:                             title="$!{labels.get($key)}"
326:                             class="sortable"
327:                             aria-label="sort table using ${briefs.get($key)}"
328:                     >
329:                       ${briefs.get($key)}
330:                     </button>
331:                   </th>
332:                 #end
333:               #end
334:             </tr>
335: 
336:             #set ($showCount = 0)
337:             #set ($rankValue = "abb")
338:             #set ($counter = 0)
339: 
340:             #foreach ($individual in $individuals)
341:               #if ($restriction == "1")
342:                 #set ($stats = $individual.statsConference)
343:               #else
344:                 #set ($stats = $individual.stats)
345:               #end
346: 
347:               #set ($individualPosition = "")
348:               #set ($individualPosition = $individual.position)
349:               #set ($posVec = $individualPosition.split("/"))
350:               #set ($individualPosition = $posVec[0])
351: 
352:               #set ($show = "")
353: 
354:               #set ($showAllPlayers = $options.get("stats_show_all_players"))
355:               #set ($showPosition = $lineupShowPosition && $lineupShowPosition.containsKey($p))
356:               #set ($showStat = $lineupShowStat && $lineupShowStat.containsKey($p))
357:               #if (!$showAllPlayers.equalsIgnoreCase("yes") and ($showPosition or $showStat or $min))
358:                 #if ($showPosition)
359:                   #set ($indPositionsList = $lineupShowPosition.get($p))
360:                   #foreach ($indPos in $indPositionsList)
361:                     #if ($individualPosition.equalsIgnoreCase($indPos))
362:                       #set ($show = "y")
363:                     #end
364:                   #end
365:                 #end
366: 
367:                 #if ($showStat)
368:                   #set ($statsList = $lineupShowStat.get($p))
369:                   #foreach ($statElem in $statsList)
370:                     #if ($stats.get($statElem) > 0)
371:                       #set ($show = "y")
372:                     #end
373:                   #end
374:                 #end
375: 
376:                 #if ($min)
377:                   #set ($test = 0)
378:                   #set ($test = $stats.get($min))
379:                   #if ($test > 0)
380:                     #set ($show = "y")
381:                   #end
382:                 #end
383:               #else
384:                 #set ($show = "y")
385:               #end
386: 
387:               #if ($show.length() > 0)
388:                 #set ($showCount = $showCount + 1)
389:                 <tr>
390:                     #if ($isIncluded)
391:                       <td class="text">${individual.uniform}</td>
392:                     #elseif ($sort != 'name' && ! $isSharedMeets)
393:                       <td class="text">
394:                         ## Need to figure out what value is
395:                         #set ($value = ${stats.get($sort)})
396:                         #if (!($value == $rankValue))
397:                         ##This is a new rank value... let's update our ranking
398:                           #set ($rank = $showCount)
399:                           #set ($rankValue = $value)
400:                         #end
401:                         #if($request.getParameter("page"))
402:                           ${individual.getRank()}
403:                         #else
404:                           ${rank}
405:                         #end
406:                       </td>
407:                     #end
408: 
409:                     <td class="text pinned-col">
410:                       #if ($isSharedMeets)
411:                         ${individual.firstName} ${individual.lastName}
412:                       #else
413:                         #if ($page.contentType == "tournament/bios")
414:                           <a href="players/${individual.pageName}">
415:                             #printPlayerName($isIncluded, $individual)
416:                           </a>
417:                         #else
418:                           <a href="${page.url}/${individual.pageName}">
419:                             #printPlayerName($isIncluded, $individual)
420:                           </a>
421:                         #end
422:                       #end
423:                     </td>
424: 
425:                     #if ($isIncluded)
426:                       <td>$!{individual.year}</td>
427:                       <td>
428:                         #if($individual.positionAbbreviation)
429:                           $!individual.positionAbbreviation
430:                         #else
431:                           $!individual.position
432:                         #end
433:                       </td>
434:                     #elseif ($isSharedMeets)
435:                       <td>$!{individual.year}</td>
436:                     #else
437:                       #set ($teamname = "")
438:                       #set ($teamname = $individual.team)
439:                       #set ($teamname = $teamAbbr.get($individual.teamId))
440:                       #set ($teamname = $teamAbbr.get($individual.team))
441:                       <td class="text">
442:                         #if ($teamname.length() > 0)
443:                           <a href="teams?id=$!{individual.teamId}">${teamname}</a>
444:                         #end
445:                       </td>
446:                     #end
447: 
448:                     #foreach ($key in $briefs.keySet())
449:                       #set ($value = "-")
450:                       #set ($value = $formatter.formatNumber(${stats.get($key)}, $!formats.get($key)))
451:                       <td #if ($key == $sort) class="sort" #end>
452:                         #if ($value.length() > 0)
453:                           $value
454:                         #else
455:                           -
456:                         #end
457:                       </td>
458:                     #end
459:                   </tr>
460:               #end ## showing
461:             #end ## foreach individual
462: 
463:             #if ($isIncluded)
464:               #set ($teamStats = $request.getAttribute("teamStats"))
465:               <tr class="totals">
466:                 <td>&nbsp;</td>
467:                 <td class="text pinned-col">Totals</td>
468:                 <td>&nbsp;</td> ## YR
469:                 <td>&nbsp;</td> ## POS
470:                 #foreach ($key in $briefs.keySet())
471:                   #set ($value = "-")
472:                   #set ($value = $formatter.formatNumber(${teamStats.get($key)}, $!formats.get($key)))
473:                   <td #if ($key == $sort) class="sort" #end>
474:                     #if ($value.length() > 0)
475:                       $value
476:                     #else
477:                       -
478:                     #end
479:                   </td>
480:                 #end
481:               </tr>
482: 
483:               <tr class="totals">
484:                 <td>&nbsp;</td>
485:                 <td class="text pinned-col">Opponent</td>
486:                 <td>&nbsp;</td> ## YR
487:                 <td>&nbsp;</td> ## POS
488:                 #foreach ($key in $briefs.keySet())
489:                   #set ($keyopp = "${key}opp")
490:                   #set ($value = "-")
491:                   #set ($value = $formatter.formatNumber(${teamStats.get($keyopp)}, $!formats.get($key)))
492:                   <td #if ($key == $sort) class="sort" #end>
493:                     #if ($value.length() > 0)
494:                       $value
495:                     #else
496:                       -
497:                     #end
498:                   </td>
499:                 #end
500:               </tr>
501:             #end
502: 
503:             #if ($individuals.size() == 0)
504:               <tr class="totals">
505:                 <td colspan="5">
506:                   #if ($isSharedMeets)
507:                     This team's roster is empty
508:                   #elseif ($hasBiosBeforeFilter)
509:                     No players meet the minimum
510:                   #else
511:                     No stats are available at this time
512:                   #end
513:                 </td>
514:               </tr>
515:             #end
516:             #if($totals)
517:               <tfoot>
518:                   <tr class="font-weight-bold">
519:                       <td colspan="3" class="text-center">TOTALS</td>
520:                        #foreach ($key in $briefs.keySet())
521:                           #set ($value = "-")
522:                           #set ($value = $formatter.formatNumber(${totals.get($key)}, $!formats.get($key)))
523:                           <td class="text-right text-nowrap" #if($key == $sort) #end>
524:                               #if ($value.length() > 0)
525:                                   $value
526:                               #else
527:                                   -
528:                               #end
529:                           </td>
530:                       #end
531:                   </tr>
532:               </tfoot>
533:             #end
534:           </table>
535:           #if($request.getParameter("page"))
536:             Page ${request.getParameter("page")}/${totalPages} - Showing: ${showCount}, Total: ${individualsTotalLength} Players
537:           #end
538:         </div>
539:       </div> ## scrollable
540:     </div> ## stats-box
541:   </div> ## stats-wrap
542: #end ## printPlayers
543: 
544: ### END MACROS ###
545: 
546: ## TEAMS LAYOUTS FOR SHARED MEETS
547: #if ($isSharedMeets && !$isSingleTeam)
548: 
549: #set ($teams = $tool.sorter.sort($page.teams.entrySet(), "value"))
550: #set ($teamsThreshold = 20)
551: 
552: #if ($page.title.length() > 0)
553:   <h1>$page.title</h1>
554: #else
555:   <h1>Teams</h1>
556: #end
557: 
558: #if ($teams.size() > $teamsThreshold)
559: 
560: #set ($alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
561: 
562: <div class="alphabet-filter" data-module="stats/alphabet-filter">
563: <div class="alphabet-filter-chars">
564:   <span class="alphabet-filter-border"> | </span>
565:   #foreach ($alphabet in $alphabets.split(""))
566:     #if ($alphabet.length() > 0)
567:       <a href="#alphabet-filter-${alphabet}" class="alphabet-filter-char">$alphabet</a>
568:       <span class="alphabet-filter-border"> | </span>
569:     #end
570:   #end
571: </div> ## alphabet-filter-char
572: 
573: <div class="alphabet-filter-list">
574:   <div class="alphabet-filter-column">
575:       #set ($lastAlphabet = "")
576:       #set ($counter = 0)
577: 
578:       #foreach ($team in $teams)
579:         #set ($teamName = $team.value)
580: 
581:         #if ($teamName.charAt(0) != $lastAlphabet)
582:           #set ($counter = $counter + 1)
583:           #if ($counter > 1)
584:             </div> ## alphabet-filter-section
585:           #end
586:           #if ($counter == 8 || $counter == 15)
587:             </div> ## alphabet-filter-column
588:             <div class="alphabet-filter-column">
589:           #end
590:           #set ($lastAlphabet = $teamName.charAt(0))
591:           <div class="alphabet-filter-section" id="alphabet-filter-${lastAlphabet}">
592:             <h4 class="alphabet-filter-char-title">| $lastAlphabet |</h4>
593:         #end
594:         <a href="${page.url}?teamId=${team.key}" class="alphabet-filter-link">$teamName</a>
595:       #end
596:       </div> ## alphabet-filter-section
597:       </div> ## alphabet-filter-column
598: </div> ## alphabet-filter-list
599: </div> ## alphabet-filter
600: 
601: #else ## plain list
602: 
603: <div class="stats-wrap clearfix">
604:   <div class="stats-box full clearfix">
605:     <table>
606:       #foreach ($team in $teams)
607:         <tr><td class="text"><a href="${page.url}?teamId=${team.key}">$team.value</a></td></tr>
608:       #end
609:       #if ($teams.size() == 0)
610:         <tr><td>There are no teams that match this criteria</td></tr>
611:       #end
612:     </table>
613:   </div>
614: </div>
615: 
616: #end ## teams threshold
617: 
618: ## TEAMINFO ROSTER LAYOUT
619: #elseif ($isIncluded && $view == 'roster')
620:   #set ($baseball = $sport && $sport.XMLCode == "bsgame")
621:   <div class="stats-wrap clearfix">
622:     <div class="stats-box stats-box-alternate full clearfix">
623:       <div class="scrollable">
624:         <div>
625:           <table>
626:             <tr class="thead accent-bg">
627:               <th class="text">No.</th>
628:               <th class="text pinned-col">Name</th>
629:               <th>Position</th>
630:               <th>Year</th>
631:               <th>Player Status</th>
632:               #if ($baseball)
633:                 <th>Height</th>
634:                 <th>Weight</th>
635:                 <th>Bats</th>
636:                 <th>Throws</th>
637:                 <th>DOB</th>
638:                 <th>Hometown</th>
639:               #end
640:             </tr>
641:             #foreach ($individual in $individuals)
642:               <tr data-additional-roster-status="$additionalRosterStatus" data-player-status="$individual.playerStatus" data-active="$individual.active" #if($additionalRosterStatus && $individual.playerStatus == "Inactive") class="table-warning #if(!$wiki.valid()) d-none #end" #end>
643:                 <td class="text">
644:                   ${individual.uniform}
645:                 </td>
646:                 <td class="text pinned-col">
647:                   <a href="${page.url}/${individual.pageName}">${individual.firstName} ${individual.lastName}</a>
648:                 </td>
649:                 <td>
650:                   #if ($individual.positionAbbreviation)
651:                     $!individual.positionAbbreviation
652:                   #else
653:                     $!individual.position
654:                   #end
655:                 </td>
656:                 <td>$!{individual.year}</td>
657:                 <td>
658:                   #if($additionalRosterStatus)
659:                      $individual.playerStatus
660:                  #elseif ($individual.active)
661:                      Active
662:                    #else
663:                      Inactive
664:                    #end
665:                 </td>
666:                 #if ($baseball)
667:                   <td>$!{individual.dataMap["height"]}</td>
668:                   <td>$!{individual.dataMap["weight"]}</td>
669:                   <td>$!{individual.dataMap["bats"]}</td>
670:                   <td>$!{individual.dataMap["throws"]}</td>
671:                   <td>$!{individual.dataMap["born"]}</td>
672:                   <td>$!{individual.dataMap["hometown"]}</td>
673:                 #end
674:               </tr>
675:             #end
676:           </table>
677:         </div>
678:       </div>
679:     </div>
680:   </div>
681: 
682: ## SHARED MEETS PLAYERS
683: #elseif ($isSharedMeets)
684: 
685: #if ($teamId)
686:   #set ($playersPageTitle = $page.title)
687:   #foreach($team in $page.teams.entrySet())
688:     #if ($teamId == $team.key)
689:       #set ($playersPageTitle = $team.value)
690:     #end
691:   #end
692:   <h1>$playersPageTitle</h1>
693: #end
694: 
695: #printPlayers($pos, $restriction)
696: 
697: ## PLAYERS / LINEUP
698: #else
699: 
700: ## do not show these options on the lineup page
701: #if (not $isIncluded)
702: 
703:   #if ($isAjax)
704:     $website.decorate('')
705:       #printPlayers($pos $restriction)
706:     #stop
707:   #end
708: 
709:   #if ($page.contentType == "stat/bios")
710:     ## ARCHIVES
711:     <div class="align-right">$website.include("navbar-playerstats-archive?tmpl=schedule-archive-list-template")</div>
712:   #end
713: 
714:   #if ($page.title.length() > 0 && !$isSharedMeets)
715:     <h1>$page.title</h1>
716:   #end
717: 
718:   #if ($minimum.length() > 0)
719:     <div class="clearfix align-right">$!minimum</div>
720:   #end
721: 
722:   #if ($showconf && !$isSharedMeets)
723:     <div class="tab-container primary clearfix" data-module="stats/tabs" data-type="primary">
724:       <div class="tab-nav" data-module="jscroll" data-momentum="false">
725:         <div>
726:           <ul class="clearfix">
727:             <li #if ($restriction == "0")class="active"#end>
728:               <a href="${url}?sort=${sort}&view=${view}&pos=${pos}&r=0${paginationParameters}">Overall</a>
729:             </li>
730:             <li #if ($restriction == "1")class="active"#end>
731:               <a href="${url}?sort=${sort}&view=${view}&pos=${pos}&r=1${paginationParameters}">Conference</a>
732:             </li>
733:           </ul>
734:         </div>
735:       </div>
736: 
737:       <div class="tab-panels clearfix">
738:         <div class="tab-panel
739: 			#if ($restriction.equals("0"))
740: 				active
741: 			#else
742: 				#if ($teamId.length() != 0 || !$briefsCategoriesLabels) tab-panel-ondemand #else tab-panel-primary-ondemand #end
743: 			#end">
744:           #printBriefsCategories(0)
745:         </div>
746:         <div class="tab-panel
747: 			#if ($restriction.equals("1"))
748: 				active
749: 			#else
750: 				#if ($teamId.length() != 0 || !$briefsCategoriesLabels) tab-panel-ondemand #else tab-panel-primary-ondemand #end
751: 			#end">
752:           #printBriefsCategories(1)
753:         </div>
754:       </div>
755:     </div> ## tab-container overall/conf
756:   #else
757:     #printBriefsCategories($restriction)
758:   #end
759: 
760: #else
761:   #printBriefsCategories($restriction)
762: #end ## not isIncluded
763: #end ## LAYOUTS
764: 
765: $wiki.su

Rushing
No. Name Yr Pos gp rush yds y/g avg td lg fum lost
3 Terrance Brown R-Fr. RB 6 71 374 62.3 5.3 4 56 3 2
2 Mike O'Horo So. QB 6 46 133 22.2 2.9 2 18 2 1
23 Tyler Amos Jr. RB 5 26 87 17.4 3.3 1 9 - -
24 Nick Johnson Jr. RB 5 27 83 16.6 3.1 1 9 - -
17 Mason McKenzie Fr. QB 2 19 54 27.0 2.8 1 43 - -
34 Austin Bills So. RB 5 7 44 8.8 6.3 1 16 - -
4 Nick Patterson Fr. QB 1 2 44 44.0 22.0 0 39 - -
30 Jaquon Howard R-Fr. RB 4 3 21 5.3 7.0 0 19 - -
7 Willie Taylor Jr. QB 3 7 18 6.0 2.6 0 8 - -
6 Arron Foulkes Jr. WR 6 9 11 1.8 1.2 0 11 - -
1 Derrick Hinton Jr. Sr. WR 6 4 10 1.7 2.5 0 14 2 1
6D Micah Cretsinger Jr. LB 6 1 9 1.5 9.0 0 9 - -
16 Eric Craft So. WR 6 1 5 0.8 5.0 0 5 1 1
9 Derek Bryant So. SL 5 1 1 0.2 1.0 0 1 - -
1R Ryan Cornelius So. RB 1 1 -3 -3.0 -3.0 0 0 - -
5 Jairus Grissom Sr. WR 3 6 -19 -6.3 -3.2 0 4 - -
  Totals     6 235 864 144.0 3.7 10 56 8 5
  Opponent     6 247 931 155.2 3.8 6 87 5 2
Receiving
No. Name Yr Pos gp rec rec/g yds y/g avg td lg
1 Derrick Hinton Jr. Sr. WR 6 37 6.2 416 69.3 11.2 3 53
3 Terrance Brown R-Fr. RB 6 15 2.5 146 24.3 9.7 2 34
16 Eric Craft So. WR 6 13 2.2 145 24.2 11.2 1 20
6 Arron Foulkes Jr. WR 6 13 2.2 104 17.3 8.0 1 22
23 Tyler Amos Jr. RB 5 3 0.6 2 0.4 0.7 0 2
10 Kevin Swift Jr. WR 1 3 3.0 33 33.0 11.0 0 16
9 Derek Bryant So. SL 5 2 0.4 10 2.0 5.0 0 7
89 Mitchell DeBrincat So. TE 5 2 0.4 21 4.2 10.5 0 11
86 Tylor McCoon So. TE 4 2 0.5 16 4.0 8.0 0 9
19 Jalen Williams So. TE 2 2 1.0 34 17.0 17.0 0 29
34 Austin Bills So. RB 5 1 0.2 9 1.8 9.0 0 9
6D Micah Cretsinger Jr. LB 6 1 0.2 11 1.8 11.0 0 11
25 Sam Dersa So. SL 6 1 0.2 6 1.0 6.0 0 6
5 Jairus Grissom Sr. WR 3 1 0.3 9 3.0 9.0 0 9
0R Jamari Thomas Fr. WR 1 1 1.0 7 7.0 7.0 0 7
84 Raid Zerki R-Fr. WR 1 1 1.0 38 38.0 38.0 0 38
  Totals     6 98 - 1007 167.8 10.3 7 53
  Opponent     6 76 - 1037 172.8 13.6 11 58
Kicking
No. Name Yr Pos gp fgm fga pct lg xpm xpa pct pts
47 Ryan Heicher Jr. K 6 5 7 71% 44 22 22 100% 37
  Totals     6 5 7 71% 44 22 22 100% 37
  Opponent     6 6 9 67% 41 19 20 95% 37
Punting
No. Name Yr Pos gp punt yds avg lg in20 fc tb blk
47 Ryan Heicher Jr. K 6 26 1011 38.9 56 12 6 0 0
86 Tylor McCoon So. TE 4 5 160 32.0 57 1 0 0 0
  Totals     6 31 1171 37.8 57 13 6 0 0
  Opponent     6 28 1073 38.3 51 6 7 1 0
Returns
No. Name Yr Pos kr yds avg td lg pr yds avg td lg
30 Jaquon Howard R-Fr. RB 7 173 24.7 0 33 - - - - -
9 Derek Bryant So. SL 2 31 15.5 0 25 - - - - -
25 Sam Dersa So. SL 1 30 30.0 0 30 - - - - -
6D Micah Cretsinger Jr. LB 1 15 15.0 0 15 - - - - -
34 Austin Bills So. RB 1 1 1.0 0 1 - - - - -
7D Jasper Beeler R-Fr. DB 1 0 0.0 0 0 - - - - -
1 Derrick Hinton Jr. Sr. WR - - - - - 4 19 4.8 0 12
  Totals     13 250 19.2 0 33 4 19 4.8 0 12
  Opponent     26 648 24.9 2 94 8 95 11.9 1 57
All-Purpose
Scoring
Defense
Download roster: FRO (First Last) | FRO (Last, First) FRX (First Last) | FRX (Last, First)
Date Opponent Score yds pass c-a comp % rush r y/r int fum tack sac pen yds top
Aug 31 Winona St. W, 34-24 496 90 6-11 55% 406 56 7.3 2 1 57.0 1 110 30:40
Sep 9 Northwood W, 31-8 394 164 12-16 75% 230 53 4.3 0 0 55.0 7 75 33:27
Sep 16 at Truman L, 21-7 230 149 13-21 62% 81 26 3.1 1 0 74.0 1 87 22:59
Sep 23 Indianapolis L, 35-10 273 196 20-38 53% 77 39 2.0 2 0 52.0 2 80 32:41
Sep 30 Grand Valley State L, 55-14 142 108 14-30 47% 34 40 0.8 1 0 58.0 2 51 29:41
Oct 7 at Ferris State L, 38-17 256 107 12-17 71% 149 40 3.7 0 1 70.0 2 58 27:34
Oct 14 at St. Xavier (Ill.) W, 32-10 305 154 17-31 55% 151 48 3.1 - - 55.0 7 54 31:47
Oct 21 Wayne State W, 17-10 194 81 10-18 56% 113 29 3.9 1 2 89.0 2 55 18:03
Oct 28 at Davenport L, 24-21 352 164 23-33 70% 188 40 4.7 1 0 62.0 2 95 32:33
Nov 4 Northern Michigan W, 62-17 458 247 15-23 65% 211 40 5.3 5 1 64.0 0 33 28:44
Nov 11 at Michigan Tech W, 38-21 469 300 24-30 80% 169 46 3.7 2 0 54.0 1 55 37:36
Apr 19 2024 Red Feather Classic Spring Game   - - - - - - - - - - - - -
  gp td fg xpt 2pc dxp saf pts ppg
Total 11 36 10 35 0 0 1 283 25.7
Conference 6 22 5 22 0 0 0 169 28.2
Exhibition - - - - - - - - -
 
-
Home 6 21 7 21 0 0 0 168 28.0
Away 5 15 3 14 0 0 1 115 23.0
Neutral - - - - - - - - -
 
-
Wins 6 27 8 26 0 0 1 214 35.7
Losses 5 9 2 9 0 0 0 69 13.8
 
-
August 1 4 2 4 0 0 0 34 34.0
September 4 8 2 8 0 0 0 62 15.5
October 4 11 3 10 0 0 1 87 21.8
November 2 13 3 13 0 0 0 100 50.0
  gp ppg pts yd/g pass y/g rush y/g tkl/g int fum rec sack td
Total 11 23.9 263 298.3 183.1 115.2 62.7 15 3 27 5
Conference 6 27.5 165 328.0 172.8 155.2 66.2 10 2 9 5
Exhibition - - - - - - - - - - -
 
-
Home 6 24.8 149 288.7 159.2 129.5 62.5 11 3 14 3
Away 5 22.8 114 309.8 211.8 98.0 63.0 4 0 13 2
Neutral - - - - - - - - - - -
 
-
Wins 6 15.0 90 212.8 136.0 76.8 62.3 10 3 18 3
Losses 5 34.6 173 400.8 239.6 161.2 63.2 5 0 9 2
 
-
August 1 24.0 24 239.0 182.0 57.0 57.0 2 0 1 0
September 4 29.8 119 342.0 212.8 129.3 59.8 4 1 12 1
October 4 20.5 82 316.3 187.0 129.3 69.0 2 1 13 1
November 2 19.0 38 204.5 116.5 88.0 59.0 7 1 1 3
Date Opponent Score Attend
Aug 31 Winona St. W, 34-24 1,414
Sep 9 Northwood W, 31-8 2,689
Sep 16 at Truman L, 21-7 4,126
Sep 23 Indianapolis L, 35-10 2,316
Sep 30 Grand Valley State L, 55-14 5,085
Oct 7 at Ferris State L, 38-17 3,124
Oct 14 at St. Xavier (Ill.) W, 32-10 400
Oct 21 Wayne State W, 17-10 3,079
Oct 28 at Davenport L, 24-21 1,112
Nov 4 Northern Michigan W, 62-17 0
Nov 11 at Michigan Tech W, 38-21 1,191
Apr 19 2024 Red Feather Classic Spring Game   -