1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
<?php
require_once __DIR__ . '/_lib.php';
$rsData = runescape_data();
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="description" content="RuneScape / OSRS fan page by SillyLaird." />
<meta property="og:title" content="RuneScape — SillyLaird" />
<meta property="og:description" content="RuneScape / OSRS fan page by SillyLaird." />
<meta property="og:image" content="https://www.sillylaird.ca/assets/img/lain.png" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.sillylaird.ca/gaming/runescape/" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="ja_JP" />
<meta property="og:locale:alternate" content="zh_CN" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="RuneScape — SillyLaird" />
<meta property="og:description" content="RuneScape / OSRS fan page by SillyLaird." />
<meta name="twitter:image" content="https://www.sillylaird.ca/assets/img/lain.png" />
<link rel="canonical" href="https://www.sillylaird.ca/gaming/runescape/" />
<link rel="alternate" hreflang="x-default" href="https://www.sillylaird.ca/gaming/runescape/" />
<link rel="alternate" hreflang="en" href="https://www.sillylaird.ca/gaming/runescape/" />
<link rel="alternate" hreflang="zh" href="https://www.sillylaird.ca/gaming/runescape/index_zh.php" />
<link rel="alternate" hreflang="ja" href="https://www.sillylaird.ca/gaming/runescape/index_jp.php" />
<title>RuneScape — SillyLaird</title>
<link rel="icon" href="https://www.sillylaird.ca/assets/img/lain.png" />
<link rel="stylesheet" href="/assets/css/fonts.css" />
<link rel="stylesheet" href="/assets/css/site.css" />
<link rel="stylesheet" href="/assets/css/skeleton.css" />
<link rel="stylesheet" href="/assets/css/pages/computers.css" />
</head>
<body>
<a class="skip-link" href="#main">Skip to content</a>
<?php include '../../partials/header.php'; ?>
<main id="main" class="wrap">
<section aria-labelledby="rs-title">
<h1 id="rs-title">RuneScape (OSRS)</h1>
<nav class="colon-nav" aria-label="RuneScape page sections">
<strong>::Servers::</strong>
<?php foreach ($rsData['eras'] as $era): ?>
<a href="#era-<?= htmlspecialchars($era['id'], ENT_QUOTES, 'UTF-8') ?>-title"><?= htmlspecialchars($era['title'], ENT_QUOTES, 'UTF-8') ?></a> |
<?php endforeach; ?>
<a href="#servers-links-title">Links</a>
<strong>::Scrapbook::</strong>
<a href="#servers-bank-title">Bank Pics</a>
<strong>::Official::</strong>
<a href="https://oldschool.runescape.wiki/" target="_blank" rel="noopener noreferrer">OSRS Wiki</a>
</nav>
<div class="machine">
<div class="machine-row">
<img class="machine-thumb" src="/assets/img/runescape.png" alt="RuneScape" loading="lazy" decoding="async">
<div class="machine-facts">
<div class="machine-info">
<strong>Page added:</strong> 2026-07-25<br>
<strong>Last revised:</strong> 2026-07-25
</div>
<?php if ($rsData['welcome']): ?>
<?php runescape_render_welcome($rsData['welcome']); ?>
<?php else: ?>
<div class="machine-title machine-title--sub">Welcome</div>
<ul class="contact-list">
<li>A small fan page / launch pad — official OSRS plus private servers, grouped by era.</li>
<li>Servers listed below are unofficial preservation projects, not affiliated with Jagex Ltd.</li>
<li>Bookmark <a href="/gaming/runescape/">/gaming/runescape/</a> directly — server hosts change over time.</li>
</ul>
<?php endif; ?>
</div>
</div>
</div>
</section>
<?php foreach ($rsData['eras'] as $era): ?>
<section aria-labelledby="era-<?= htmlspecialchars($era['id'], ENT_QUOTES, 'UTF-8') ?>-title">
<h2 id="era-<?= htmlspecialchars($era['id'], ENT_QUOTES, 'UTF-8') ?>-title" class="section-accent-title"><?= htmlspecialchars($era['title'], ENT_QUOTES, 'UTF-8') ?></h2>
<?php if ($era['subtitle'] !== ''): ?><p class="muted"><?= htmlspecialchars($era['subtitle'], ENT_QUOTES, 'UTF-8') ?></p><?php endif; ?>
<?php $eraImgSrc = runescape_image_src($era['image']); ?>
<?php if ($eraImgSrc !== ''): ?>
<img class="rs-era-banner" src="<?= htmlspecialchars($eraImgSrc, ENT_QUOTES, 'UTF-8') ?>" alt="<?= htmlspecialchars($era['title'], ENT_QUOTES, 'UTF-8') ?>" loading="lazy" decoding="async">
<?php endif; ?>
<?php foreach ($era['servers'] as $srv): ?>
<?php runescape_render_server($srv); ?>
<?php endforeach; ?>
</section>
<?php endforeach; ?>
<!-- Screenshots are managed at /admin.php?section=runescape — placeholder-box slots
show until real ones are uploaded there; no manual editing needed. -->
<section aria-labelledby="servers-bank-title">
<h2 id="servers-bank-title" class="section-accent-title">My Bank / Screenshots</h2>
<?php if ($rsData['screenshots']): ?>
<div class="placeholder-grid">
<?php foreach ($rsData['screenshots'] as $shot): ?>
<figure class="rs-shot">
<img src="<?= htmlspecialchars(runescape_screenshot_src($shot['filename']), ENT_QUOTES, 'UTF-8') ?>"
alt="<?= htmlspecialchars($shot['caption'] !== '' ? $shot['caption'] : 'RuneScape screenshot', ENT_QUOTES, 'UTF-8') ?>"
loading="lazy" decoding="async">
<?php if ($shot['caption'] !== ''): ?>
<figcaption class="muted"><?= htmlspecialchars($shot['caption'], ENT_QUOTES, 'UTF-8') ?></figcaption>
<?php endif; ?>
</figure>
<?php endforeach; ?>
</div>
<?php else: ?>
<p class="muted">Placeholder — swap these for real bank/inventory screenshots later.</p>
<div class="placeholder-grid">
<div class="placeholder-box">Add screenshot 1</div>
<div class="placeholder-box">Add screenshot 2</div>
<div class="placeholder-box">Add screenshot 3</div>
</div>
<?php endif; ?>
</section>
<section aria-labelledby="servers-links-title">
<h2 id="servers-links-title" class="section-accent-title"><?= htmlspecialchars($rsData['links_section']['title'], ENT_QUOTES, 'UTF-8') ?></h2>
<?php if ($rsData['links_section']['items']): ?>
<ul class="contact-list">
<?php foreach ($rsData['links_section']['items'] as $item): ?>
<li><a href="<?= htmlspecialchars($item['url'], ENT_QUOTES, 'UTF-8') ?>" target="_blank" rel="noopener noreferrer"><?= htmlspecialchars($item['label'], ENT_QUOTES, 'UTF-8') ?></a><?= $item['desc'] !== '' ? ' — ' . htmlspecialchars($item['desc'], ENT_QUOTES, 'UTF-8') : '' ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php if ($rsData['links_section']['disclaimer'] !== ''): ?>
<p class="muted"><?= htmlspecialchars($rsData['links_section']['disclaimer'], ENT_QUOTES, 'UTF-8') ?></p>
<?php endif; ?>
</section>
</main>
<?php include '../../partials/footer.php'; ?>
</body>
</html>
|