User:Xymph/Speedrunners

Matching and linking speedrunners
When collecting information about speedrunners for their wiki articles, the first problem encountered is that quite a few players go by a variety of names/aliases between the wiki and the former and current Compet-n and DSDA sites, and that the demo sites use different identification systems.

To match them all up, I created a (single-table) database on my home server, with scripts to fill it. Initially all entries in the speedrunners category were loaded (script srLoadCat.php), then scripts for each of the demo sites matched up names/aliases and, upon manual verification/approval, added their names, IDs, demo counts and profile status to the table.
 * For former Compet-n, a pre-formatted text listing of the players list was used (srcompetnold.lst and srAddCmpnOld.php).
 * For current Compet-n, Fx kindly provides read-only MySQL access (srAddCmpnNew.php).
 * For former and current DSDA, the HTML player pages were parsed into SimpleXML objects that could then be traversed (srAddDsdaOld.php and srAddDsdaNew.php).

Listing script srGenTable.php produces the table below. Please let me know if you spot any mismatches.

From the table the speedrunners' external links sections are verified/updated/added (updateSRunners.php), and it will help in compiling record tables for maps and players. In the end, I decided to retire the (non-templated) profile links to former Compet-n as they duplicate the player profiles on current Compet-n. But because current DSDA isn't importing player profiles from former DSDA, both sites remain relevant and are included.

In the first pass, articles already in the speedrunners category are processed. In the second pass, more players are added to the category, and the above steps repeated. Players with few demos on few WADs are added manually to my database, not the category, as not everyone would be considered speedrunning. The "few" threshold is somewhat arbitrary and obviously debatable. In the third pass, more established speedrunners are added manually to the database, from which stub articles with external links are generated (createSRunner.php).

The list
The table below matches speedrunner articles with their entries on the demo sites (state of 2022-07-29 08:30 CDT).

Compet-n record tables
srUpdCatRecs.php displays the records table in one category for one WAD, including the notes column; the note numbers are defined as a look-up table in the script. It uses the WADs' existing .ini files to look up map articles for map IDs, and the above speedrunners database to look up player articles. The script can optionally verify all demo .zip links via HTTP HEAD requests, which was used once for a maintenance check.

srUpdCatRecs.sh invokes srUpdCatRecs.php for all 11 WADs in sequence to compile the entire "Current records" section for a specified category, including the two references sections with the note descriptions. The section is copy/pasted manually into the corresponding article.

srUpdWadRecs.php collects episode and full run records of each of Ultimate Doom's four episodes or for one (or all) of the ten other WADs, and updates their "Current records" sections. Always provides interactive comparison between old and new contents of the section, prior to submitting the edit.

srUpdMapRecs.php collects level run records for all maps in a specified WAD and updates their "Current records" sections, employing the usual .ini files and speedrunners database. The note numbers and descriptions are defined as look-up tables in the script. Always provides interactive comparison between old and new contents of the section, prior to submitting the edit.

srUpdPlyRecs.php collects level run records for a specified (or all) speedrunner(s) on the IWADs, if present, and generates the 8-column, color-coded table for the categories as well as the short totals table. Appended are summaries of the level run records on the PWADs and of the episode and full run records, if present. The resulting "Current Compet-n records" section is added (above "External links") or updated in the player article, with the site name wikilinked in that header only if it's the first mention on the page. Always provides interactive comparison between old and new contents of the section, prior to submitting the edit.

Original

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

Soft neutrals

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

Revitalisation

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

B.light pastels

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

Pastel Bouquet

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

Pastel World

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

Pastel Calm

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |

New

 * width="1.5%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |


 * width="6%" valign="top" |