|
|||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
|
|
#21 (permalink) |
|
Hall Of Famer
Join Date: Feb 2002
Location: Scheduleslovakia
Posts: 5,613
|
Suggestion:
Let OOTP recreate, at the user's discretion, the various strike/lockout/war shortened or altered seasons that have occurred during MLB's history. Reason: At the moment, the seasons which in the real world were shortened or altered due to various events are not recreated in OOTP. So, for example, the 1918 season is played out in full in a historical league even though in reality it was shortened considerably due to WWI. Allowing this option for historical leagues means the following seasons which suffered some sort of disruption could be recreated in the game: 1918, 1972, 1981, 1985, 1990, 1994, 1995, and 2001 (the 1976 and 1980 seasons would also make the list if spring training disruptions are included). To make these shortened/altered historical seasons even more immersive, news stories should be triggered on the appropriate dates which relate the background to the disruptions, just like real-world newspaper stories did. Priority: Medium/High.
__________________
. "We choose to go to the moon in this decade and do the other things not because they are easy, but because they are hard. Because that goal will serve to organize and measure the best of our abilities and skills, because that challenge is one we are willing to accept, one we are unwilling to postpone, and one which we intend to win." . Last edited by Le Grande Orange : 08-18-2007 at 04:23 PM. |
|
|
|
|
#22 (permalink) |
|
Hall Of Famer
Join Date: Feb 2002
Location: Scheduleslovakia
Posts: 5,613
|
Suggestion:
Historical leagues should use the real tiebreaking playoff game procedures actually used in the majors. Reason: The rules regarding how two-way ties are resolved via playoff games have changed over the years. Also, the game still does not do three-way tiebreaking playoffs correctly at all. These sorts of issues should be resolved, since it's getting these kinds of little details correct which really add a feeling of polish to the game. I have just about all the rules needed to do tiebreaking playoff games correctly, so it shouldn't be that hard to get them correctly implemented into the game. With the historically correct rules implemented, that means that a two-way tie in the NL before 1969 would use a best-of-3 series to break, while in the AL before 1957 a one-game playoff would be used and from 1957-1968 a best-of-3 series would be used, and so on. Priority: Medium. (At the very least, the game should use the correct current MLB methods to resolve ties.)
__________________
. "We choose to go to the moon in this decade and do the other things not because they are easy, but because they are hard. Because that goal will serve to organize and measure the best of our abilities and skills, because that challenge is one we are willing to accept, one we are unwilling to postpone, and one which we intend to win." . |
|
|
|
|
#23 (permalink) |
|
All Star Reserve
Join Date: Dec 2005
Location: Las Vegas, Nev
Posts: 957
|
Financials
Suggestion: Limit all players salaries to be limited to the actual top salary of a given year. I really hate seeing one get over $100,000 in the 20's.
Reason: A limiting factor on players and team total payroll. bringing both in line with historical numbers. Priority: High, for me at least.
__________________
Elder Statesman of the Boardhttp://www.soxxcountry.com/ site with Duffys Tavern Live OOTP Chat Room Soxx World of Baseball Commissioner |
|
|
|
|
#24 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
New defensive ratings calculations based on historical fielding stats. I have already created the reference file of each position 1871-2006 for OOTP to do the calculations in these ormulas. 1. OF and IF Range ratings To calculate the defensive Range ratings of OF’ers and IF’ers we take the player’s Put Outs per Game at a given position and divide it by the League Average Put Outs per Game at that same position, we then multiply this result by the standard range baseline of a given position in OOTP. OOTP uses different baseline averages or different positions, for example the standard or average range of a SS is greater than that of a 1Bmen. In the 3-y recalc mode we can use the position stats from he 3-yr spans and calculate the ratings against the positional averages of those spans found in he fielding-reference file. There should also be an option to base fielding ratings on “career totals” in which OOTP will take a player’s entire career average of a stat per game played and divide it by the average of the league during his career span. (PPOg/LPOg) * Position Baseline = Range rating PPOg = Player Put Outs per Game LPOg = League Put Outs per Game Position Baseline = standard or average rating of a given position 2. OF and Catcher Arm ratings To calculate OF and Catcher Arm ratings we use both the Assist totals and Double Play totals of OF’ers and Catchers. We do this because Assist totals for these players are often low and do not tell the whole story. Turning a DP as an OF requires throwing out a runner on a tag up which generally is a big play in a game and is a higher skilled play than throwing out a runner trying to stretch a single into a double. Take a Player’s Assists per Game divided by the League Average of Assists per Game for that position, then take a Player’s Double Plays per Game divided by League Average Double Plays per Game at that position. Add these two totals together and divide by two, then multiply by the Baseline Average of OF or Catcher for Arm rating. [((PAg/LAg) + (PDPg/LDPg))/2] * Position Baseline = Arm rating PAg = Player Assists per Game LAg = League Assists per Game PDPg = Player Double Plays turned per Game LDPg = League Double Plays turned per Game at that position Position Baseline = standard or average rating of a given position 3. IF Arm rating To calculate IF Arm ratings we the Player’s Assists per Game divided by the League Average Assists per Game at a given position, then multiply this by the position baseline. (PAg/LAg) * Position Baseline = Arm rating PAg = Player Assists per Game LAg = League Assists per Game Position Baseline = standard or average rating of a given position 4. IF and Catcher Turn Double Play rating To calculate IF and Catcher Turn DP ratings we use their Double Plays turned per Game at a position divided by the League Average Double Plays turned per Game at that position, then multiply that by the position baseline. (PDPg/LDPg) * Position Baseline = Turn DP rating PDPg = Player Double Plays turned per Game LDPg = League Double Plays turned per Game at that position Position Baseline = standard or average rating of a given position 5. Pitcher Range/Arm/Turn Double Play ratings To calculate Range, Arm, and Turn DP ratings for pitchers we use their Averages of Put Outs, Assists and Turn DP ratings on a per 9 IP basis (instead of a per Game basis) then multiply that by the pitcher baseline averages for each category. (PPO9/LPO9) * Position Baseline = Range rating PPO9 = Pitcher Put Outs per 9 IP LPO9 = League Pitcher Put Outs per 9 IP Position Baseline = standard or average rating of a given position (PA9/LA9) * Position Baseline = Arm rating PA9 = Pitcher Assists per 9 IP LA9 = League Pitcher Assists per 9 IP Position Baseline = standard or average rating of a given position (PDP9/LDP9) * Position Baseline = Turn Double Play rating PDP9 = Pitcher Double Plays turned per 9 IP LDP9 = League Picher turn DP per 9 PIP Position Baseline = standard or average rating of a given position 6. Prevent Error rating To calculate Prevent Error ratings for each position take 1 minus the League Average FLD% at a given position divided by 1 minus a Player’s FLD% at a given position, then multiply that by the Baseline prevent Error rating for that position. The 1 minus FLD% gives us the error frequency, which is what we really want to compare. FLD% = (PO+A)/(PO+A+E) ((1 - LFLD)/(1 – PFLD)) * Position Baseline = Prevent Error rating PFLD = Player’s Fielding percentage at a given position LFLD = League Fielding percentage at a given position Position Baseline = standard or average rating of a given position 7. Positional Overall Defensive Ratings For each position we can rate their Range/Arm/Turn DP/Error abilities to come up with an Overall number that is essentially a summary of their skill at a given position. Different position will have these things weighted differently. OF’ers for instance have most of their value in their Range since their primary defensive skill is catching fly balls, whereas 3Bmen have most of their value in their Arm since most of the outs they are involved in require them to make a throw. The method is to take a player’s rating in a category and divide it by the “norm” for that position’s category. For example, if average Range for a 3Bmen is 35 and a player has a 42 range at 3B, then 42/35 = 1.2, we do this calculation for each of the categories we are using then multiply them by a certain factor to weight them, divide by 10, then multiply by some overall total we call “average”, like 65. This rating has no impact on the simulation, it will be used mainly as a reference for the user to determine who is a better overall defender at a position. The AI could also potentially put these overall ratings to use. Here are the weights for each position based somewhat on Bill James weights in Win Shares: RelRa = Relative Range (Player Range at a position divided by position baseline) RelAr = Relative Arm (Player Arm at a position divided by position baseline) RelDP = Relative Turn DP (Player Turn DP at a position divided by position baseline) RelEr = Relative Error (Player Error rating at a position divided by position baseline) Overall = Some average overall rating, possibly 50 or 65. This baseline will be the same regardless of a position being evaluated. So an average 2Bmen might receive a 65 and an average OF would also receive a 65. Catcher: [((RelAr * 5) + (RelDP * 2) + (RelEr * 3))/10] * Overall 1Bmen: [((RelRa * 1) + (RelAr * 4) + (RelDP * 2) + (RelEr * 3))/10] * Overall 2Bmen: [((RelRa * 1) + (RelAr * 3) + (RelDP * 4) + (RelEr * 2))/10] * Overall 3Bmen: [((RelRa * 2) + (RelAr * 5) + (RelDP * 1) + (RelEr * 3))/10] * Overall SS: [((RelRa * 2) + (RelAr * 4) + (RelDP * 3) + (RelEr * 1))/10] * Overall OF: [((RelRa * 5) + (RelAr * 3) + (RelEr * 2))/10] * Overall Reason All of the elements are already in OOTP to get historical fielding ratings correct, we just need to use these formulas to analyze the histoical fielding stats from he DB to onvert them into the corresponding fielding ratings. Priority High (MUST have) Last edited by Garlon : 09-22-2007 at 10:31 PM. |
|
|
|
|
#25 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
New Speed rating calculation for historical players based on their stats. Speed rating A player’s Speed rating refers to how often he attempts to steal a base. To accurately determine Speed ratings we need to take Stolen Base Attempts (SB + CS) and divide by the number of times a player reached first base, which are his singles, walks, and hit by pitch. (SBA/RFB) * Speed Baseline Average = Speed rating SBA = player stolen base attempts. (Stolen Bases + Caught Stealing) RFB = player's times reaching first base. (BB + HBP + H - 2B - 3B - HR) Note how doubles, triples, and HRs have been eliminated so that all we are left with essentially is BB + HBP + Singles. Reason This new formula for Speed rating will provide more realistic stolen base totals for individual players and it will also work in conjunction with a new league totals modifier for stolen base attempts. Stolen Bases have always been a sore spot for histoical simmers, but we can get SB's as accurate as the DIPS categories with th league toals modifiers. Priority High (MUST have) |
|
|
|
|
#26 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
Additional League Totals Modifer categories. The data to calculate these modifiers are already in the era_stats.txt file 1. Double Play League Totals Modifier This modifier, like the modifiers for the DIPS totals, will keep Double Plays per Game on a historically accurate rate from year to year. At the end of a season, we take the League Expected Double Plays Turned per Team Game next season and divide it by the simulated Double Play totals per Team Game of this season. Multiply the current DP modifier total by this result to get the DP modifier for next season. (NDPg/SDPg) * Current Modifier = New Double Plays Modifier NDPg = Next year’s Double Plays per Team Game SDPg = This year’s simulated Double Plays per Team Game 2. Groundball Percentage League Totals Modifier OOTP is based upon a 55% GB:FB ratio in terms of outs recorded. We can create a modifier that keeps the league at this constant level, or if historical data can be generated, the GB% of a given season in history. This modifier essentially corrects for any slight imperfection there may be in player fielding ratings relative to one another and corrects for the quality of defensive players in the league. 3. OF Assist Modifier In earlier days of baseball OF Assists were far more common than they are today. We have OF Assists per Team Game data, so it should be possible to influence the frequency of OF Assist plays in the simulation. Note, the data in the fielding-ref file is 1/3 OF Assists per Team Game since there are 3 OF positions and the file is used for creating fielding ratings. OOTP will need to tally up all of the OF Assist in the league at the end of a season, then divide by 3, then divide by Team Games and compare it to next year’s expected ratio. 4. Stolen Base Attempt League Totals Modifier We have the data for Stolen Base Attempts per Team Game for 1871-present in the era_stats file. To calculate the modifier take next year’s League SBA per Team Game divided by this season’s simulated SBA per Team Game, then multiply the result by the modifier currently in place. Stolen Base Attempts are SB +CS. (NSBAg/SSBAg) * Current Modifier = New SBA Modifier for next season. NSBAg = Next season’s Stolen Base Attempts per Team Game SSBAg = This Season’s simulated Stolen Base Attempts per Team Game 5. Stolen Base Success Modifier Different periods of baseball had different success rates of stealing bases. This modifier would essentially affect player Stealing Ability ratings. (HSP/SSP) * Current Modifier = Stealing Ability Stolen Base Success Modifier HSP = Next year's Historical Stolen Base Success Percentage SSP = This season's Simulated Stolen Base Success Percentage 6. Sacrifice Hits League Totals Modifier This is a minor issue, but we could probably get more realistic Sacrifice totals with a league totals modifier here too. If we do this, it will also eliminate the need to adjust the Bunting strategy setting after initial import in historical simulations. I'm guessing that a player's SAC rating is based on either Sacrifices per AB or per Plate Appearance. If so, then we can create a modifier to do the rest of the work. Like with the other ratings, this would affect how OOTP "sees" a player's SAC rating. The modifier should be able to increase or decrease how often Sacrifices are made then to match historical ratios. In the era_stats.txt file there is a field labeled SAC/AB which is league Sacrifices per AB for all seasons 1871-2006. (HS/SS) * Current Modifier = Sacrifice Hits League Totals Modifier HS = Next year's Historical Sacrifices per AB ratio SS = This season's simulated Sacrifices per AB ratio Reason The addition of these new league totals modifiers coupled with the new formulas for the speed and defensive ratings should give us historicaly accurate SB's, SB%, Double Plays, and OF Assists. This will have a significant positive impact on producing more realistic histoical league E.R.A. as well. Priority High (MUST have) |
|
|
|
|
#27 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
New pitcher Endurance rating calculation based on historical stats. Pitcher Endurance rating We need an option to have pitcher endurance be evaluated on a 3-yr span basis or on a career basis. The Endurance rating we need to calculate is for a pitcher’s primary role, SP or RP. However, pitchers who are primarily starters often pitch some games in relief and pitchers who are primarily relievers do start games from time to time. We can adjust for this by eliminating the IP from their non-primary role. We will assume that a SP who pitches in relief throws 3 IP, and a reliever who starts throws 6 IP. For SPs (a SP is a pitcher who stats at least 50% of his Games Pitched) we take Games Pitched minus Games Started to find his relief appearances, then we multiply his relief appearances by 3 IP (9 IPouts), then subtract these relief innings from his total IP to get his IP as a SP, divide by Games Stated and we have his IP per GS or Endurance as a SP. For relief pitchers, multiply their GS by 6 IP (18 IPouts) and subtract this from their total IP to get their IP in relief, then take Games Pitched minus Games Started to get their relief appearances, divide Relief IP by Relief Appearances to get a pitcher’s IP per Relief Appearance which is his relief Endurance. SP Endurance: {[IP - ((G - GS)*3)]/GS} RP Endurance: {[IP - (GS*6)]/(G - GS)} Reason Endurance will be more representative of what a pitcher did in his primary role and will result in better pitcher selection and usage by the AI. Priority High (MUST have) |
|
|
|
|
#28 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
Historical Accuracy Report OOTP should have a running html report page that shows how accurate the simulated league totals were to actual historical ratios found in the era-stats.txt file. The categories: -BA -2B per AB -3B per AB -HR per AB -BB per AB -HBP per AB -K per AB -Sac per AB -OBP -SLG -OPS -SB Attempts per Team Game -SB% -E.R.A. -ERC -CG% -Relievers per Team Game -Double Plays per Team Game -OF Assists per Team Game -FLD% Reason The addition of a simple page like this could really do alot to bring more people over to the game for historical simulations. The report will demonstrate the accuracy of historical simulations and should have a positive impact on any published review of the historical aspect of the game. Priority High (MUST have) |
|
|
|
|
#29 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
Improved Formula for 2B and 3B in League Totals Modifiers. The current formula compares next year’s expected ratio of 2B per AB to this season’s simulated ratio of 2B per AB. The same goes for 3B. The formula works well, but we can make it more accurate. Instead of using per AB for the calculation, we should be using per hit. The formula should be: (N2Bh)/(S2Bh) * Current Modifier N2Bh = Next Year’s Expected 2B/H S2Bh = Simulated 2B/H The formula would be the same for triples. We might even want to go with 2B/(H – HR). I think we should try tests with per Hit first though. Reason Right now when the historical league expected BA increases from season to season, the historical ratio of 2B per AB also increases, while the ratio of 2B per Hit remains the same. Right now I believe the LTM's inadvertently may be giving doubles and triples extra boosts or reductions during such instances. If the modifiers for doubles and triples are calculated on a per Hit basis, then doubles and triples should track better as league BA changes. End result will be better historical accuracy. Priority High (MUST have) |
|
|
|
|
#30 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
New Historical Development Mode. It's not worth going into alot of detail right now. I sent Markus the designs and files for implementing it into this year's game, but time restraints and other more pending fixes took precedent even though he wanted to code it into the game. Reason This will be the historical simmer's dream mode basically. Historical players will not "bust" nor will scrubs come out of nowhere to become superstars, at the same simmers will not be able to "cheat" and look at a player's historical stats to know exactly when he will have his big season (i.e. Maris 1961 or Dawson 1987). I have also designed it so that the ratings "cliff" is pushed back to age 37, meaning that "average players" have declined to the point where they need to be replaced whereas superstars (Ruth, Maddux) will still have high enough ratings to hang on and contribute for several more seasons. This is an additional development mode, not a replacement for anything currently in the game. Priority High (MUST have) |
|
|
|
|
#31 (permalink) |
|
All Star Starter
Join Date: Jun 2004
Posts: 1,018
|
Suggestion
Consoldiate the 1-yr, 3-yr, and 5-yr recalc modes into one mode called "Real" Development. These 3 options are overkill (redundant). The goal of these modes is to provide the closest possible simulated results to yearly stats for players so that player development tracks along with the real-life performance. What we can do to achieve this end is dump the 1-yr and 5-yr recalc altogether, and make a slight modification to the 3-yr ratings calculations formula. Right now in 3-yr recalc OOTP derives player ratings from their real life stats from their current season, the previous season, and the next season...what we should do is put double the weight on the current season. For example, Ty Cobb in 1911 will have his ratings based on 1910+1911+1911+1912. This essentially becomes a 4-yr recalc, since the current season gets weighted twice. Reason Consolidating these recalc modes into just 1 mode makes the game less confusing to simmers and the use of this modified 3-yr recalc formula should outperfom the current recalc modes. Priority High (MUST have) |
|
|
|
|
#32 (permalink) |
|
Bat Boy
Join Date: Apr 2007
Location: Georgia, USA
Posts: 7
|
Suggestion
Better representation of the Pacific Coast League, especially the "open classification" years; support for the "what if" scenario of the PCL going major Reason The PCL's stint as an "open classification" league, with ambitions of becoming a third major league, is one of the more fascinating "what if" scenarios of the post-war period. If the PCL's ambitions had panned out, subsequent moves and expansions would have turned out very differently. (Indeed, expansions may hardly have taken place at all, as a precedent would have been set for promoting the strongest minor-league clubs and leagues--as is widely done in the rest of the world--instead of creating whole new clubs out of thin air.) One requirement for making this easier, more enjoyable, and more complete to simulate would be detailed PCL rosters for the immediate post-war years; as I understand it, that is beyond the OOTP team's purview. There are, however, many other things the game developers could do, such as: 1) Improve support for the PCL's (uniquely long) schedule in its heyday, perhaps even making it automatically accurate right out of the box. 2) Make it possible to have three or four major American leagues (including allowing multiple options for post-season play between them). 3) Improve the interaction between major and independent minor league teams generally (transfers, contract buyouts, competition in scouting and signing unsigned talent, etc.); and fully simulate Open Classification status in particular. 4) Design the historical league structure with promotion of teams and leagues from AAA/Open to Major status, and league mergers, in mind. (Those with more OOTP experience than I could add to these brief points, I'm sure. I'm still a tyro here.) Making the game more amenable to simulating the PCL open classification experiment and its what-ifs would strengthen the game's support for other non-major and competing-major leagues as well (Negro Leagues, Federal League, Mexican League, etc.). Priority High for PCL buffs; at least Medium for all historical simmers Last edited by KevinTMC : 09-25-2007 at 09:53 AM. |
|
|
|
|
#33 (permalink) |
|
All Star Starter
Join Date: May 2002
Location: The Lonely Mountain
Posts: 1,648
|
Suggestion: Include the recalc option for those of us who want to start in the 19th century. Priority: High, at least for some of us.
__________________
"The only way to oblige men to speak well of us is to act well." -- Voltaire |
|
|
|
|
#34 (permalink) |
|
Minors (Triple A)
Join Date: May 2003
Location: New Jersey
Posts: 253
|
Suggestion:
Allow the user to modify the Historical ID of a player within the game. Reason: 1. The Historical ID can be used for much more than just storing the Lahman ID, especially if you are creating pseudo-Lahman databases. 2. Currently, there is no way to correct this if something is wrong with the imported data. 3. You cannot create a player manually (i.e. not importing a single historical player) with a Historical ID. Priority: Low |
|
|
|
|
#35 (permalink) |
|
Minors (Rookie Ball)
Join Date: Jun 2006
Posts: 45
|
Suggestion:
(Sorry if this doesn't below here.) Different historical financial coefficients for different leagues/countries. Reason: If I am playing with a historical Japanese and a historical American league and set the finances differently for each league during the 1st season (using two historical DBs), the financials seems to reset to the numbers for the American league after the first season. Priority: Low-medium. |
|
|
|
|
#36 (permalink) |
|
Minors (Rookie Ball)
Join Date: Jun 2006
Posts: 45
|
Suggestion:
Ability to import from a Lahman-like historical DB with your own major league equivalency settings. Reason: For those that have made historical databases for either foreign leagues or minor leagues, they can import historical stats from these leagues and still get realistic player ratings. Priority: Low-medium. |
|
|
|
|
#38 (permalink) |
|
Bat Boy
Join Date: Apr 2002
Location: Las Vegas, NV
Posts: 10
|
Suppress all development, finances, free agency, etc.
Suggestion: Somewhere embedded in OOTP's powerful engine, have a mode available that provides REPLAYS only (bypassing OOTP's development engine), much like Strat, APBA, and ActionPC Baseball. This should include the ability to structure simple drafts from free agent and rookie pools as they evolve within the structure of these leagues.
Reason: OOTP would attract many more "traditional" replay and draft league gamers who don't have the time or interest to make Financial or GM type decisions (coaches, etc.). Critical Implementation Factor: This "traditional" mode needs to be easily selectable and NOT require tweaking every option to find the right combination of toggles that produces this gameplay mode. I know I may be in the minority, but there's a bunch of us "over 40" crowd that still wants to focus on historical drafting leagues. |
|
|
|
|
#39 (permalink) |
|
Minors (Rookie Ball)
Join Date: Feb 2006
Posts: 20
|
Salary information derived from the Lahman's database.
I would like to see salary averages based on actual salaries. I've played historical leagues where, in 1980, superstars were demanding $2MM. That's not right. |
|
|
|
|
#40 (permalink) |
|
Minors (Double A)
Join Date: May 2006
Location: American, residing in Canada
Posts: 191
|
Suggestion:
Ability to "sim" Major League Baseball, from 1901 to present day, without having to "micro-manage" teams and players year by year (this should be done automatically). Reason: I posted a couple threads requesting this earlier this year. I want to be able to run a historical/realistic/fictional league, with relatively accurate history as reference, not statistically, but in terms of players playing for the right team(s) in the right year... (stats do not have to be exact hence the fictional part) I want to sim from 1901 to present day, without having to stop the sim in 1918 to manually put Babe Ruth onto the Yankees roster. Currently this is necessary. Priority: High. Others felt the same way. Thanks.
__________________
"Keep on rockin in the free world" - Neil Young ____________________ MLB - A's/Padres NFL - Bears/Chargers NCAA (Football) - Huskies/Sooners |
|
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|