1/** 2 * Arcade hub â game catalog, featured picks, aisle categories. 3 */ 4(function (global) { 5 'use strict'; 6 7 /** @type {string[]} */ 8 var FEATURED_HREFS = [ 9 'pupocalypse.html', 10 'terrarium.html', 11 'idlefish.html', 12 'petsim.html', 13 'dnd.html' 14 ]; 15 16 /** 17 * @type {Record<string, { 18 * title: string, 19 * tagline: string, 20 * icon: string, 21 * accent: string, 22 * preview?: string, 23 * badges?: string[] 24 * }>} 25 */ 26 var ARCADE_GAMES = { 27 'pupocalypse.html': { 28 title: 'Pupocalypse', 29 tagline: 'roguelike puppy chaos, survive the burst', 30 icon: 'fa-burst', 31 accent: '#ff4d8d', 32 preview: 'pupocalypse', 33 badges: ['New'] 34 }, 35 'terrarium.html': { 36 title: 'Moss Jar', 37 tagline: 'tend a slow moss jar ecosystem', 38 icon: 'fa-jar', 39 accent: '#7cb87a', 40 preview: 'terrarium', 41 badges: ['New'] 42 }, 43 'idlefish.html': { 44 title: 'Idle Fish', 45 tagline: 'feed fish, watch the tank grow', 46 icon: 'fa-fish', 47 accent: '#3ecfff', 48 preview: 'idlefish' 49 }, 50 'petsim.html': { 51 title: 'Pet Sim', 52 tagline: 'take care of a virtual pet', 53 icon: 'fa-paw', 54 accent: '#c8a8ff', 55 preview: 'petsim' 56 }, 57 'dnd.html': { 58 title: 'D&D Whimsy', 59 tagline: 'tabletop chaos with oomfs', 60 icon: 'fa-dice-d20', 61 accent: '#ffb347', 62 preview: 'dnd', 63 badges: ['Multiplayer'] 64 }, 65 'plong.html': { 66 title: 'Plong', 67 tagline: 'classic paddle pong energy', 68 icon: 'fa-table-tennis-paddle-ball', 69 accent: '#00f5d4', 70 preview: 'plong', 71 badges: ['Multiplayer'] 72 }, 73 'puggle.html': { 74 title: 'Puggle', 75 tagline: 'peg-hitting puppy peggle vibes', 76 icon: 'fa-dog', 77 accent: '#ff9ecd', 78 preview: 'puggle' 79 }, 80 'puppyJump.html': { 81 title: 'Puppy Jump', 82 tagline: 'bounce higher, don\'t fall', 83 icon: 'fa-arrow-up', 84 accent: '#ffe45e', 85 preview: 'puppyJump' 86 }, 87 'breakout.html': { 88 title: 'Breakout', 89 tagline: 'smash bricks with the ball', 90 icon: 'fa-gamepad', 91 accent: '#b388ff', 92 preview: 'breakout' 93 }, 94 'pupchinko.html': { 95 title: 'Pupchinko', 96 tagline: 'plinko drops and lucky bounces', 97 icon: 'fa-circle-dot', 98 accent: '#ff6bcb', 99 preview: 'pupchinko' 100 }, 101 'golf.html': { 102 title: 'Mini Golf', 103 tagline: 'putt through silly courses', 104 icon: 'fa-golf-ball-tee', 105 accent: '#7ddf64', 106 preview: 'golf' 107 }, 108 'jigsaw.html': { 109 title: 'Jigsaw', 110 tagline: 'snap puzzle pieces together', 111 icon: 'fa-puzzle-piece', 112 accent: '#8ec5ff', 113 preview: 'jigsaw' 114 }, 115 'fetch.html': { 116 title: 'Fetch', 117 tagline: 'throw the ball, good dog', 118 icon: 'fa-baseball', 119 accent: '#ffa94d', 120 preview: 'fetch' 121 }, 122 'trivia.html': { 123 title: 'Trivia Party', 124 tagline: 'party trivia with the crew', 125 icon: 'fa-circle-question', 126 accent: '#ffd166', 127 preview: 'trivia', 128 badges: ['Multiplayer'] 129 }, 130 'kablingo.html': { 131 title: 'Kablingo', 132 tagline: 'word game experiment', 133 icon: 'fa-font', 134 accent: '#a78bfa', 135 preview: 'kablingo', 136 badges: ['WIP'] 137 }, 138 'cubing.html': { 139 title: 'Cubing', 140 tagline: 'rubik timer and cube tools', 141 icon: 'fa-cube', 142 accent: '#f72585', 143 preview: 'cubing' 144 }, 145 'defense.html': { 146 title: 'Tower Defense', 147 tagline: 'place towers, hold the line', 148 icon: 'fa-chess-rook', 149 accent: '#90be6d', 150 preview: 'defense', 151 badges: ['WIP'] 152 }, 153 'polyrhythm.html': { 154 title: 'Polyrhythmism', 155 tagline: 'stack rhythms and beats', 156 icon: 'fa-music', 157 accent: '#4cc9f0', 158 preview: 'polyrhythm' 159 }, 160 'trainer.html': { 161 title: 'Aim Trainer', 162 tagline: 'quick clicks for sharp reflexes', 163 icon: 'fa-crosshairs', 164 accent: '#ef476f', 165 preview: 'trainer' 166 } 167 }; 168 169 /** @type {Array<{ id: string, title: string, subtitle: string, icon: string, games: string[] }>} */ 170 var ARCADE_CATEGORIES = [ 171 { 172 id: 'classics', 173 title: 'Classics', 174 subtitle: 'the games that started the cabinet row', 175 icon: 'fa-gamepad', 176 games: [ 177 'plong.html', 178 'puggle.html', 179 'puppyJump.html', 180 'breakout.html' 181 ] 182 }, 183 { 184 id: 'puzzle', 185 title: 'Puzzle & Skill', 186 subtitle: 'thinky games and satisfying runs', 187 icon: 'fa-puzzle-piece', 188 games: [ 189 'pupchinko.html', 190 'golf.html', 191 'jigsaw.html', 192 'kablingo.html', 193 'cubing.html', 194 'trainer.html' 195 ] 196 }, 197 { 198 id: 'multiplayer', 199 title: 'Party & Multiplayer', 200 subtitle: 'play with oomfs in realtime', 201 icon: 'fa-users', 202 games: [ 203 'trivia.html' 204 ] 205 }, 206 { 207 id: 'idle', 208 title: 'Idle & Care', 209 subtitle: 'slow games that grow while you are away', 210 icon: 'fa-seedling', 211 games: [ 212 'terrarium.html', 213 'idlefish.html', 214 'petsim.html' 215 ] 216 }, 217 { 218 id: 'experiments', 219 title: 'Experiments', 220 subtitle: 'half baked but fun to poke at', 221 icon: 'fa-flask', 222 games: [ 223 'defense.html', 224 'polyrhythm.html', 225 'fetch.html' 226 ] 227 } 228 ]; 229 230 function normalizeHref(href) { 231 if (!href) return ''; 232 var key = href.replace(/^\//, '').split('?')[0].split('#')[0]; 233 if (!/\.html$/i.test(key)) key += '.html'; 234 return key; 235 } 236 237 function getGame(href) { 238 var key = normalizeHref(href); 239 return ARCADE_GAMES[key] || null; 240 } 241 242 global.ArcadeHubMeta = { 243 featured: FEATURED_HREFS, 244 games: ARCADE_GAMES, 245 categories: ARCADE_CATEGORIES, 246 normalizeHref: normalizeHref, 247 getGame: getGame 248 }; 249})(typeof window !== 'undefined' ? window : this);
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.