PageSourceSearch

https://pupwife.com/scripts/hub/arcadeHubMeta.js

js pupwife.com collected 2026-09-30 15:04:12 UTC 7,195 bytes, 249 lines download raw bytes

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.