PageSourceSearch

https://webcade.fun/ricochet

html webcade.fun collected 2026-10-08 08:26:39 UTC 9,373 bytes, 196 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" data-game="breakout">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
6  <title>Webcade — Ricochet</title>
7  <link rel="preconnect" href="https://fonts.googleapis.com">
8  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Oswald:wght@500;600;700&family=Press+Start+2P&family=VT323&display=swap" rel="stylesheet">
10  <meta name="theme-color" content="#070707">
11  <link rel="stylesheet" href="style.css?v=1025436e">
12  <!-- The cabinet's own artwork. app.js sets it as a CSS background from
13       CAB_ART, which is deferred — so without this the browser cannot even
14       start fetching the largest thing on the page until the script has run.
15       Named here rather than derived, because the preload scanner reads the
16       markup and nothing else. cabartpreloadtest.js checks this href against
17       app.js's entry for this game, so the two cannot drift apart. -->
18  <link rel="preload" as="image" href="cab-ricochet.webp" fetchpriority="high">
19
20    <link rel="manifest" href="/manifest.webmanifest">
21    <link rel="apple-touch-icon" href="/apple-touch-icon.png">
22    <link rel="icon" type="image/png" sizes="192x192" href="/icon-192.png">
23    <meta name="mobile-web-app-capable" content="yes">
24    <meta name="apple-mobile-web-app-capable" content="yes">
25    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
26    <meta name="apple-mobile-web-app-title" content="Webcade">
27    
27<script defer src="/pwa.js?v=1025436e"></script>
27
28    
28<script defer src="/push.js?v=1025436e"></script>
28
29    
29<script defer src="/mwa.js?v=1025436e"></script>
29
30    
30<script defer src="/install.js?v=1025436e"></script>
30
31    
31<script defer src="/tabbar.js?v=1025436e"></script>
31
32    
32<script defer src="/orient.js?v=1025436e"></script>
32
33  
34    
34<script src="/legacyui.js?v=1025436e"></script>
34
35    
35<script defer src="/legacytext.js?v=1025436e"></script>
35
36    
36<script defer src="/ask.js?v=1025436e"></script>
36
37  </head>
38<body>
39  <div id="stars"></div>
40
41  <header></header>
42  <!-- Telegram bridge first: nav.js and app.js both ask who the player is,
43       and inside a Mini App the answer is a signed Telegram id. In a normal
44       browser this defines a WebApp with no initData and changes nothing. -->
45  
45<script defer src="https://telegram.org/js/telegram-web-app.js"></script>
45
46  
46<script defer src="tg.js?v=1025436e"></script>
46
47  
47<script defer src="ref.js?v=1025436e"></script>
47
48  
48<script defer src="nav.js?v=1025436e"></script>
48
49
50  <main>
51    <section id="lobby">
52      <!-- One layout for every cabinet on the site. The breadcrumb, the title
53           row, the frame and the two panels under the game are identical on all
54           eighteen pages; only the marquee text, the canvas and the game script
55           differ. cabpage.js fills the category, the how-to-play tips and the
56           progress figures from the registries and the live APIs, so none of it
57           is typed into a page. -->
58      <div class="cab-col">
59        <!-- A way back, not a trail. The second crumb named the game's kind
60             ("maze muncher"), which the title one line below and the artwork
61             beside it both already say. One link out is what a page one level
62             deep actually needs. -->
63        <a class="cab-back" href="/arcade"><span aria-hidden="true">&larr;</span> Back to arcade</a>
64        <div class="cab-head">
65          <h1 class="cab-title">RICOCHET</h1>
66          <div class="cab-chips">
67            <!-- What a play costs, said once, at the top. panels.js turns this
68                 back into the coin line if the arcade is ever put on coins. -->
69            <span class="cab-tag" id="cab-mode">Free play</span>
70          </div>
71        </div>
72        <!-- What clearing a stage here is worth. The same sentence the library
73             header makes once, made again at the point of play — which is the
74             one other place it is genuinely worth saying. -->
75        <p class="cab-say">Every stage you clear is a point on today&rsquo;s board.</p>
76
77        <div class="cabinet">
78          <div class="cab-marquee">
79            <span class="cab-marquee-text" id="marquee-text">RICOCHET</span>
80          </div>
81          <div class="crt">
82            <canvas id="game" width="448" height="536"></canvas>
83            <div class="scanlines"></div>
84            <div id="overlay">
85              <div id="overlay-inner">
86                <p id="overlay-title">FREE PLAY</p>
87                <p id="overlay-sub" data-gate="CLEAR BOARD 1">EVERY STAGE YOU CLEAR IS A POINT ON TODAY&rsquo;S BOARD</p>
88                <button id="play-btn" class="coin-btn" disabled>
89                  <span class="coin-slot"></span>PLAY FREE
90                </button>
91                <p id="status"></p>
92              </div>
93            </div>
94          </div>
95          <div id="gate-bar" class="hidden"></div>
96        </div>
97
98          <!-- The controls, as a strip under the machine rather than a line of
99               small caps inside the overlay that disappears the moment a run
100               starts. cabpage.js splits the cabinet's own control hint on its
101               middots, so this is the same string app.js shows on the screen
102               and there is no second description to keep true. -->
103          <div class="cab-controls-bar" id="cab-controls-bar" hidden>
104            <span class="ccb-k">Controls</span>
105            <div class="ccb-list" id="cab-controls-list"></div>
106          </div>
107
108          <!-- Below the game: what to do, and how you are doing at it. Both are
109               filled by cabpage.js — the tips from the same table the pre-play
110               tutorial card reads, so a cabinet's advice exists in exactly one
111               place. -->
112          <section class="cab-below">
113            <div class="panel">
114              <h2>How to play</h2>
115              <div id="cab-howto"><p class="muted">&mdash;</p></div>
116            </div>
117            <div class="panel">
118              <h2>Your progress</h2>
119              <div id="cab-progress"><p class="muted">&mdash;</p></div>
120            </div>
121          </section>
122      </div>
123
124      <aside id="sidebar">
125        <!-- The three figures a player at a cabinet actually wants: what today
126             is worth, how they have done here, and where that puts them. Filled
127             by cabpage.js from /api/config and /api/me — the same endpoints the
128             leaderboard reads, so a cabinet cannot disagree with the board. -->
129        <div class="panel cab-side-stats">
130          <div class="css-row">
131            <span class="css-k">Top score</span>
132            <span class="css-v is-live" id="side-score">&mdash;</span>
133          </div>
134          <div class="css-row">
135            <span class="css-k">Your best</span>
136            <span class="css-v" id="side-best">&mdash;</span>
137          </div>
138          <div class="css-row">
139            <span class="css-k">Today&rsquo;s rank</span>
140            <span class="css-v" id="side-rank">&mdash;</span>
141          </div>
142        </div>
143        <div class="panel">
144          <h2>HIGH SCORES</h2>
145          <div id="hiscores"><p class="muted">No scores yet</p></div>
146        </div>
147      </aside>
148    </section>
149  </main>
150
151  <footer>
152    <div class="carpet"></div>
153  </footer>
154
155  <div id="dpad" class="hidden">
156    <button data-dir="up" aria-label="up">&#9650;</button>
157    <button data-dir="left" aria-label="left">&#9664;</button>
158    <div class="dpad-center"></div>
159    <button data-dir="right" aria-label="right">&#9654;</button>
160    <button data-dir="down" aria-label="down">&#9660;</button>
161  </div>
162  <button id="fire-btn" class="hidden" aria-label="fire">FIRE</button>
163
164  <div id="prize-modal" class="hidden">
165    <div id="prize-box">
166      <p id="prize-label">TODAY&rsquo;S BOARD</p>
167      <p id="prize-amount">?</p>
168      <p id="prize-detail"></p>
169      <a id="prize-room-btn" class="btn-ghost back-btn hidden" href="/prizeroom">Prize room</a>
170      <button id="prize-close" class="pixel-btn">PLAY AGAIN</button>
171    </div>
172  </div>
173
174  
174<script defer src="/vendor/solana-web3-1.95.8.min.js?v=1025436e"></script>
174
175  
175<script defer src="sfx.js?v=1025436e"></script>
175
176  
176<script defer src="juice.js?v=1025436e"></script>
176
177  
177<script defer src="konami.js?v=1025436e"></script>
177
178  
178<script defer src="avatar.js?v=1025436e"></script>
178
179  
179<script defer src="icons.js?v=1025436e"></script>
179
180  
180<script defer src="panels.js?v=1025436e"></script>
180
181  
181<script defer src="wallets.js?v=1025436e"></script>
181
182  
182<script defer src="wallet.js?v=1025436e"></script>
182
183  
183<script defer src="keys.js?v=1025436e"></script>
183
184  
184<script defer src="rng.js?v=1025436e"></script>
184
185  
185<script defer src="ricochet.js?v=1025436e"></script>
185
186  
186<script defer src="capture.js?v=1025436e"></script>
186
187  
187<script defer src="checkpoints.js?v=1025436e"></script>
187
188  
188<script defer src="coins.js?v=1025436e"></script>
188
189  
189<script defer src="initials.js?v=1025436e"></script>
189
190  
190<script defer src="touch.js?v=1025436e"></script>
190
191  
191<script defer src="playui.js?v=1025436e"></script>
191
192  
192<script defer src="app.js?v=1025436e"></script>
192
193  
193<script defer src="cabpage.js?v=1025436e"></script>
193
194  
194<script defer src="attract.js?v=1025436e"></script>
194
195</body>
196</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.