Documentation Index
Fetch the complete documentation index at: https://mintlify.com/zshall/program-guide/llms.txt
Use this file to discover all available pages before exploring further.
data/guide.xml is the single source of truth for every piece of program data in Television Simulator ‘99. It drives the channel grid displayed in the Channel 12 Prevue-style guide, controls which channels are watchable and which one loads on startup, supplies the rotating ad copy shown in the left panel, and injects red notice banners for special announcements. All of this is parsed at startup by a jQuery AJAX call in tv.js and stored in window.guideData for the entire session.
File location
Document structure
The file follows a straightforward hierarchy: a root<guide> element contains one <videos> block, one <ads> block, and any number of <channel> elements.
The
<videos> block is present in the XML file but Channel 12 does not read from it. The Channel 12 class hardcodes its YouTube video ID directly in its show() method (videoId: '9NSVU4Gv_wA'). If you build a custom channel that reads <video> entries from the guide data, you can populate this block and query it via guideData.find('video') — but no channel in the default codebase currently does so.Channel element
Each<channel> element represents one row in the guide grid. The attributes that control its behaviour are:
| Attribute | Required | Description |
|---|---|---|
number | ✅ | The channel number shown in the guide and used to switch to the channel. Must match the class name Channel{number} registered in tv.js. |
name | ✅ | Short station identifier displayed in the leftmost column of the grid, e.g. PRV, KCBS, ESPN. Keep it to around 6 characters for the best fit. |
watchable | — | When present (value "watchable"), the channel appears in the listings grid and the TV will load it when that number is selected. Omit to have the channel’s listings silently ignored. |
default | — | When present (value "default"), this channel loads automatically at startup. Only one channel should carry this attribute. Channel 12 (PRV) is the default in the shipped data. |
noticeonly | — | When present, the channel’s row is skipped in the guide table — no channel box or listings are rendered — but any <notice> child elements still produce red banner rows. Useful for service-wide alerts not tied to a specific channel. |
Listing element
<listing> elements are the individual program slots. They are children of a <channel> and each maps to one cell (or a colspan-merged cell) in the guide row.
| Attribute | Required | Description |
|---|---|---|
timeslot | ✅ | Half-hour index from midnight. See the timeslot reference table below. |
type | — | Controls cell appearance. Only "movie" has special treatment: it renders the cell with a blue gradient background ($blue-gradient in the SCSS). All other values — including "1", "9", and ".5" as used throughout the shipped guide.xml — render as plain listing cells with no visual distinction. |
rating | — | Content rating string displayed as-is in the guide, e.g. G, TV-PG, TV-MA, R, PG-13. |
continuous | — | Set to "continuous" to signal that the show spans multiple timeslots. The guide logic uses getFirstListing() to walk backwards from the current timeslot, so a continuous show will fill cells that have no explicit listing of their own. |
<listing> is the programme title and is rendered as the cell body in the guide table.
Notice element
A<notice> element inside any <channel> produces a full-width red banner row above that channel’s listing row. This mirrors the emergency-notice style seen on real 1990s Prevue Guides.
Both
<notice> and <ad> content is passed through jQuery’s .html(), so standard HTML tags are valid. You can use <p>, <br/>, <strong>, and similar inline elements inside both. Entities like & and < must still be properly escaped because the document is parsed as XML.Ads section
The<ads> block supplies the rotating promotional copy shown in the left panel of the Channel 12 guide screen. Each <ad> element specifies how many seconds it stays on screen before fading to the next one.
| Attribute | Description |
|---|---|
duration | Number of seconds this ad stays visible before nextAd() is called. Defaults to 30 if omitted. |
nextAd() method in Channel12 checks this.adList.length <= 1 before cycling; if you provide only one <ad>, the rotation stops after the first display and the same ad remains on screen. To get a cycling loop, provide at least two <ad> entries.
If the <ads> block is empty, the left panel displays the static text "THIS SPACE FOR RENT".
Timeslot reference
Timeslots are half-hour indices starting at midnight (timeslot0 = 12:00 AM). The guide automatically displays the three timeslots closest to the current wall-clock time. Use this table to place programmes at the right time of day:
| Timeslot | Time | Timeslot | Time | Timeslot | Time |
|---|---|---|---|---|---|
| 0 | 12:00 AM | 16 | 8:00 AM | 32 | 4:00 PM |
| 1 | 12:30 AM | 17 | 8:30 AM | 33 | 4:30 PM |
| 2 | 1:00 AM | 18 | 9:00 AM | 34 | 5:00 PM |
| 3 | 1:30 AM | 19 | 9:30 AM | 35 | 5:30 PM |
| 4 | 2:00 AM | 20 | 10:00 AM | 36 | 6:00 PM |
| 5 | 2:30 AM | 21 | 10:30 AM | 37 | 6:30 PM |
| 6 | 3:00 AM | 22 | 11:00 AM | 38 | 7:00 PM |
| 7 | 3:30 AM | 23 | 11:30 AM | 39 | 7:30 PM |
| 8 | 4:00 AM | 24 | 12:00 PM | 40 | 8:00 PM |
| 9 | 4:30 AM | 25 | 12:30 PM | 41 | 8:30 PM |
| 10 | 5:00 AM | 26 | 1:00 PM | 42 | 9:00 PM |
| 11 | 5:30 AM | 27 | 1:30 PM | 43 | 9:30 PM |
| 12 | 6:00 AM | 28 | 2:00 PM | 44 | 10:00 PM |
| 13 | 6:30 AM | 29 | 2:30 PM | 45 | 10:30 PM |
| 14 | 7:00 AM | 30 | 3:00 PM | 46 | 11:00 PM |
| 15 | 7:30 AM | 31 | 3:30 PM | 47 | 11:30 PM |
| — | — | — | — | 48 | 12:00 AM (next day) |