├── .eslintrc.json ├── .gitignore ├── .stylelintrc ├── .vscode ├── extensions.json └── settings.json ├── README.md ├── package.json ├── pnpm-lock.yaml ├── public ├── fonts │ ├── entercommand.ttf │ ├── entercommand.woff │ └── entercommand.woff2 ├── gallinerica-logo.png ├── images │ ├── avatars │ │ ├── bronze.png │ │ ├── gold.png │ │ ├── king.png │ │ ├── normal.png │ │ └── silver.png │ ├── beer-sprite.png │ ├── beer.png │ ├── belt-sprite.png │ ├── belt.png │ ├── briefcase-sprite.png │ ├── briefcase.png │ ├── cabin-sprite.png │ ├── cabin.png │ ├── chicken-podium.png │ ├── chicken-sprite.png │ ├── chicken.png │ ├── crown-sprite.png │ ├── crown.png │ ├── fire-sprite.png │ ├── fire.png │ ├── gallinerica-logo.png │ ├── gallinerica.png │ ├── ice-sprite.png │ ├── ice.png │ ├── icons-old │ │ ├── beer.png │ │ ├── briefcase.png │ │ ├── crown.png │ │ ├── fire.png │ │ ├── ice.png │ │ ├── magic.png │ │ ├── package.png │ │ ├── radioactive.png │ │ ├── rocket.png │ │ └── voltage.png │ ├── icons │ │ ├── beer-icon.png │ │ ├── beer.png │ │ ├── briefcase-icon.png │ │ ├── briefcase.png │ │ ├── crown-icon.png │ │ ├── crown.png │ │ ├── dificil.png │ │ ├── extremo.png │ │ ├── facil.png │ │ ├── fire-icon.png │ │ ├── fire.png │ │ ├── ice-icon.png │ │ ├── ice.png │ │ ├── magic-icon.png │ │ ├── magic.png │ │ ├── normal.png │ │ ├── package-icon.png │ │ ├── package.png │ │ ├── radioactive-icon.png │ │ ├── radioactive.png │ │ ├── resize │ │ ├── rocket-icon.png │ │ ├── rocket.png │ │ ├── voltage-icon.png │ │ └── voltage.png │ ├── levels │ │ ├── easy-x2.png │ │ ├── easy.png │ │ ├── extreme-x2.png │ │ ├── extreme.png │ │ ├── hard-x2.png │ │ ├── hard.png │ │ ├── normal-x2.png │ │ ├── normal.png │ │ └── resize │ ├── magic-sprite.png │ ├── magic.png │ ├── moon-sprite.png │ ├── moon.png │ ├── niv3k.png │ ├── package-sprite.png │ ├── package.png │ ├── radioactive-sprite.png │ ├── radioactive.png │ ├── resize │ ├── rocket-sprite.png │ ├── rocket.png │ ├── stop-sprite.png │ ├── stop.png │ ├── sun-sprite.png │ ├── sun.png │ ├── voltage-sprite.png │ └── voltage.png └── libs │ ├── tmi.js (1).map │ └── tmi.min.js ├── sources ├── cabin.png ├── chickens │ ├── beer.png │ ├── briefcase.png │ ├── chicken.png │ ├── chickens-sheet.png │ ├── chickens.aseprite │ ├── crown.png │ ├── duck.png │ ├── duck2.png │ ├── fire.png │ ├── gifs │ │ ├── beer.gif │ │ ├── briefcase.gif │ │ ├── chicken.gif │ │ ├── duck.gif │ │ ├── fire.gif │ │ ├── ice.gif │ │ ├── king.gif │ │ ├── magic.gif │ │ ├── packed.gif │ │ ├── radioactive.gif │ │ ├── rocket.gif │ │ └── voltage.gif │ ├── ice.png │ ├── magic.png │ ├── package.png │ ├── podium.png │ ├── radioactive.png │ ├── rocket.png │ ├── stop.png │ └── voltage.png ├── cinta v1.gif ├── cinta-animada v1-sheet.png ├── cinta-animada v2.gif ├── difficulty │ ├── difficulty-icons.aseprite │ ├── easy.png │ ├── extreme.png │ ├── hard.png │ └── normal.png ├── feather.png ├── gallinerica.png ├── gold.gif ├── icons │ ├── beer-icon.png │ ├── briefcase-icon.png │ ├── crown-icon.png │ ├── fire-icon.png │ ├── ice-icon.png │ ├── icons.aseprite │ ├── magic-icon.png │ ├── package-icon.png │ ├── radioactive-icon.png │ ├── rocket-icon.png │ └── thunder-icon.png ├── leaderboard │ ├── badges.aseprite │ ├── bronze.png │ ├── death.png │ ├── gold.png │ ├── king.png │ ├── leaderboard-chickens-sheet.png │ └── silver.png ├── logo-gallinerica-x2.png ├── logo-gallinerica.png ├── moon.png ├── numerica-jam.aseprite ├── screenshot-day-1.png ├── screenshot-day-2.png ├── screenshot-day-3.png ├── screenshot-day-4.png ├── stop-sprite.png ├── stop.png ├── sun.png └── title-logo.png ├── src ├── components │ ├── BeltMachine.js │ ├── ChickenBackground.js │ ├── ChickenBoard.js │ ├── ChickenCounter.js │ ├── ChickenNPC.js │ ├── ChickenPodium.js │ ├── ChickenPool.js │ ├── FlagSystem.js │ ├── GameScreen.js │ ├── HomeCabin.js │ ├── NumberList.js │ └── StopPlatform.js ├── index.css ├── index.html ├── index.js └── modules │ ├── difficulty.js │ ├── icons.js │ └── shuffle.js └── vite.config.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint-config-manzdev", 3 | "rules": { 4 | "max-lines": [ 5 | "error", 6 | 300 7 | ] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | !.vscode/settings.json 26 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-manzdev", 3 | "rules": { 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "stylelint.vscode-stylelint", 5 | "esbenp.prettier-vscode" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // updated 2022-03-08 07:16 2 | // https://github.com/antfu/vscode-file-nesting-config 3 | { 4 | "[javascript]": { 5 | "editor.defaultFormatter": "dbaeumer.vscode-eslint" 6 | }, 7 | "[html]": { 8 | "editor.defaultFormatter": "vscode.html-language-features" 9 | }, 10 | "[css]": { 11 | "editor.defaultFormatter": "stylelint.vscode-stylelint" 12 | }, 13 | "editor.codeActionsOnSave": { 14 | "source.fixAll.eslint": true, 15 | "source.fixAll.stylelint": true 16 | }, 17 | "editor.formatOnSave": true, 18 | "eslint.enable": true, 19 | "stylelint.enable": true, 20 | "css.validate": false, 21 | "scss.validate": false, 22 | "less.validate": false, 23 | "explorer.compactFolders": false, 24 | "javascript.validate.enable": false, 25 | "emmet.includeLanguages": { 26 | "jsx": "html", 27 | "vue": "html", 28 | "html": "html", 29 | "javascript": "html" 30 | }, 31 | "explorer.fileNesting.enabled": true, 32 | "explorer.fileNesting.expand": false, 33 | "explorer.fileNesting.patterns": { 34 | ".gitignore": ".gitattributes, .gitmodules, .gitmessage, .mailmap, .git-blame*", 35 | "*.js": "$(capture).js.map, $(capture).min.js, $(capture).d.ts", 36 | "*.jsx": "$(capture).js", 37 | "*.ts": "$(capture).js, $(capture).*.ts", 38 | "*.tsx": "$(capture).ts", 39 | "index.d.ts": "*.d.ts", 40 | "shims.d.ts": "*.d.ts", 41 | "go.mod": ".air*, go.sum", 42 | ".env": "*.env, .env*, env.d.ts", 43 | "dockerfile": ".dockerignore, dockerfile*", 44 | "package.json": ".browserslist*, .circleci*, .codecov, .editorconfig, .flowconfig, .gitlab*, .gitpod*, .huskyrc*, .jshintrc, .mocha*, .node-version, .nodemon*, .npm*, .nvmrc, .pm2*, .pnpm*, .prettier*, .releaserc*, .sentry*, .stackblitz*, .tazerc*, .travis*, .vscode*, .watchman*, .yarnrc*, api-extractor.json, appveyor*, ava.config.*, azure-pipelines*, build.config.*, crowdin*, cypress.json, dangerfile*, gulp*, jasmine.*, jenkins*, jest.config.*, jsconfig.*, karma*, lerna*, nest-cli.*, netlify*, nodemon*, nx.*, package-lock.json, playwright.config.*, pm2.*, pnpm*, prettier*, pullapprove*, puppeteer.config.*, renovate*, rollup.config.*, tsdoc.*, tsup.config.*, turbo*, vercel*, vetur.config.*, vitest.config.*, webpack.config.*, workspace.json, yarn*", 45 | "readme.md": "authors, backers.md, changelog*.md, code_of_conduct.md, codeowners, contributing.md, contributors, copying, credits, governance.md, history.md, license*, maintainers, readme*, security.md, sponsors.md", 46 | "cargo.toml": "cargo.lock, rust-toolchain.toml, rustfmt.toml", 47 | "gemfile": ".ruby-version, gemfile.lock", 48 | "vite.config.*": "*.env, .babelrc, .codecov, .env*, .mocha*, .postcssrc.*, api-extractor.json, ava.config.*, babel.config.*, cypress.json, env.d.ts, index.html, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", 49 | "vue.config.*": "*.env, .babelrc, .codecov, .env*, .mocha*, .postcssrc.*, api-extractor.json, ava.config.*, babel.config.*, cypress.json, env.d.ts, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", 50 | "nuxt.config.*": "*.env, .babelrc, .codecov, .env*, .mocha*, .postcssrc.*, api-extractor.json, ava.config.*, babel.config.*, cypress.json, env.d.ts, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", 51 | "next.config.*": "*.env, .babelrc, .codecov, .env*, .mocha*, .postcssrc.*, api-extractor.json, ava.config.*, babel.config.*, cypress.json, env.d.ts, jasmine.*, jest.config.*, jsconfig.*, karma*, next-env.d.ts, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", 52 | "svelte.config.*": "*.env, .babelrc, .codecov, .env*, .mocha*, .postcssrc.*, api-extractor.json, ava.config.*, babel.config.*, cypress.json, env.d.ts, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*", 53 | "remix.config.*": "*.env, .babelrc, .codecov, .env*, .mocha*, .postcssrc.*, api-extractor.json, ava.config.*, babel.config.*, cypress.json, env.d.ts, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, remix.*, svgo.config.*, tailwind.config.*, tsconfig.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Gallinérica](sources/logo-gallinerica-x2.png) 2 | 3 | ## ¿Qué es Gallinérica? 4 | 5 | Gallinérica es un juego para Twitch, donde los streamers podrán colocar su canal y permitir que los espectadores jueguen. En este documento se habla más de la parte técnica, orientada para desarrolladores. 6 | 7 | > Si quieres saber más sobre el juego (como jugador), visita la página de [Gallinérica en Itch.io](https://manzdev.itch.io/gallinerica). 8 | 9 | ## ¿Con qué está desarrollado Gallinérica? 10 | 11 | Gallinérica no está desarrollado con ningún motor de videojuegos ni framework. Si te interesa alguno te recomendaría [Phaser](https://phaser.io/) o [Godot](https://godotengine.org/). Se realizó como reto en Javascript vanilla, utilizando exclusivamente HTML, CSS y Javascript. Para aislar las funcionalidades, utilizamos WebComponents, que es una tecnología Javascript nativa. 12 | 13 | Esta desarrollado por [Manz](https://links.manz.dev/), gráficos diseñados por [BlurSoul_](https://twitter.com/blursoul_) y ayuda de maxi83c en diseño y código. 14 | 15 | Tienes más información aquí: 16 | 17 | - HTML: https://lenguajehtml.com/html/ 18 | - CSS: https://lenguajecss.com/css/ 19 | - Javascript: https://lenguajejs.com/javascript/ 20 | - WebComponents: https://lenguajejs.com/webcomponents/ 21 | 22 | 23 | ## ¿Dónde fue desarrollado Gallinérica? 24 | 25 | Gallinérica es un juego que participa en la [JAM de Numérica](https://itch.io/jam/numerica-twitch-jam) de @RothioTome, donde hay que realizar un juego para Twitch similar a [Numérica](https://rothiotome.itch.io/numerica). 26 | 27 | El juego se desarrolló durante 4 streams de Twitch, que de momento, puedes ver en mi canal de Youtube: 28 | 29 | ### Día 1: Base del juego 30 | 31 | - Layout principal del juego (CSS) 32 | - Mecanismo de cintas transportadoras (Javascript) 33 | - Pollos moviendose en las cintas (Javascript/CSS) 34 | - Mecanismo de comunicación con Twitch (Javascript) 35 | 36 | ![Gallinérica: Día 1 de Desarrollo](sources/screenshot-day-1.png) 37 | 38 | - Youtube: https://youtu.be/B7NIXdiA35g 39 | 40 | ### Día 2: Mecánica principal 41 | 42 | - Implementación de tipos de pollos (CSS) 43 | - Mecanismo de comunicación con Twitch (Javascript) 44 | - Tabla de líderes del juego (Javascript) 45 | 46 | ![Gallinérica: Día 2 de Desarrollo](sources/screenshot-day-2.png) 47 | 48 | - Youtube: https://youtu.be/CabQJ3sYkMQ 49 | 50 | ### Día 3: Perfeccionamiento del juego 51 | 52 | - Niveles de dificultad (Javascript) 53 | - Rachas de pollos seguidos (Javascript/CSS) 54 | 55 | ![Gallinérica: Día 3 de Desarrollo](sources/screenshot-day-3.png) 56 | 57 | - Youtube: https://youtu.be/k6i65SCt838 58 | 59 | ### Día 4: Corrección de problemas y últimos detalles 60 | 61 | - Atardecer y amanecer: fondos mejorados (CSS/Javascript) 62 | - Estadísticas de pollos gallinificados/condenados 63 | - Añadido "altar" central de pollos 64 | - Niveles de dificultad perfeccionados (puedes puntuar negativo) 65 | - Modificación aleatoria de números en niveles altos 66 | 67 | ![Gallinérica: Día 4 de Desarrollo](sources/screenshot-day-4.png) 68 | 69 | - Youtube: https://youtu.be/zWS61oeBVBM 70 | 71 | ## Estructura del juego 72 | 73 | El juego es open source, con licencia GPL y puedes modificarlo, ampliarlo o utilizarlo para aprender, sólo te pido que cites y menciones el original en el juego. 74 | 75 | Si quieres modificar el código, aquí va una ayudita de lo que utilizamos: 76 | 77 | - [Vite](https://lenguajejs.com/automatizadores/vite/guia-tutorial-inicial-de-vite/), como automatizador para gestionar el desarrollo, concretamente usamos [mkweb](https://manz.dev/software/mkweb/). 78 | - [gh-pages](https://www.npmjs.com/package/gh-pages) para el despliegue en GitHub Pages. 79 | - [ESLint](https://www.npmjs.com/package/eslint-config-manzdev) y [StyleLint](https://www.npmjs.com/package/stylelint-config-manzdev) para indicar errores de código. 80 | - [Aseprite](https://www.aseprite.org/) para el diseño del pixel art. 81 | 82 | La estructura del juego es la siguiente: 83 | 84 | ``` 85 | En src/components/: 86 | 87 | - BeltMachine.js # Cintas transportadoras 88 | - ChickenBackground.js # Fondo de transcurso del día 89 | - ChickenBoard.js # Tabla de récords 90 | - ChickenCounter.js # Estadísticas de pollos 91 | - ChickenNPC.js # Pollos NPC de la cinta 92 | - ChickenPodium.js # Pollos NPC de rachas 93 | - ChickenPool.js # Contenido de la cinta transportadora 94 | - FlagSystem.js # Sistema de rachas de pollos 95 | - GameScreen.js # Pantalla principal del juego 96 | - HomeCabin.js # Cabinas laterales del juego 97 | - NumberList.js # Panel inferior de números 98 | - StopPlatform.js # Altar central de pollo 99 | 100 | En src/modules/: 101 | 102 | - difficulty.js # Módulo que gestiona la dificultad del juego 103 | - icons.js # Módulo que gestiona el panel de números 104 | - shuffle.js # Módulo con el algoritmo Fisher-Yates 105 | 106 | En src/sources/: 107 | 108 | Aquí tienes todos los gráficos (originales incluidos) por cortesía de [BlurSoul_](https://twitter.com/blursoul_) 109 | ``` 110 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gallinerica", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "rm -rf dist && vite build", 9 | "preview": "vite preview", 10 | "deploy": "gh-pages -d dist" 11 | }, 12 | "devDependencies": { 13 | "eslint": "^8.46.0", 14 | "eslint-config-manzdev": "^0.0.2", 15 | "gh-pages": "^5.0.0", 16 | "stylelint": "^15.10.2", 17 | "stylelint-config-manzdev": "^0.0.10", 18 | "vite": "^4.4.5" 19 | }, 20 | "keywords": [], 21 | "license": "ISC" 22 | } -------------------------------------------------------------------------------- /public/fonts/entercommand.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/fonts/entercommand.ttf -------------------------------------------------------------------------------- /public/fonts/entercommand.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/fonts/entercommand.woff -------------------------------------------------------------------------------- /public/fonts/entercommand.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/fonts/entercommand.woff2 -------------------------------------------------------------------------------- /public/gallinerica-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/gallinerica-logo.png -------------------------------------------------------------------------------- /public/images/avatars/bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/avatars/bronze.png -------------------------------------------------------------------------------- /public/images/avatars/gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/avatars/gold.png -------------------------------------------------------------------------------- /public/images/avatars/king.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/avatars/king.png -------------------------------------------------------------------------------- /public/images/avatars/normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/avatars/normal.png -------------------------------------------------------------------------------- /public/images/avatars/silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/avatars/silver.png -------------------------------------------------------------------------------- /public/images/beer-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/beer-sprite.png -------------------------------------------------------------------------------- /public/images/beer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/beer.png -------------------------------------------------------------------------------- /public/images/belt-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/belt-sprite.png -------------------------------------------------------------------------------- /public/images/belt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/belt.png -------------------------------------------------------------------------------- /public/images/briefcase-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/briefcase-sprite.png -------------------------------------------------------------------------------- /public/images/briefcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/briefcase.png -------------------------------------------------------------------------------- /public/images/cabin-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/cabin-sprite.png -------------------------------------------------------------------------------- /public/images/cabin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/cabin.png -------------------------------------------------------------------------------- /public/images/chicken-podium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/chicken-podium.png -------------------------------------------------------------------------------- /public/images/chicken-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/chicken-sprite.png -------------------------------------------------------------------------------- /public/images/chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/chicken.png -------------------------------------------------------------------------------- /public/images/crown-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/crown-sprite.png -------------------------------------------------------------------------------- /public/images/crown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/crown.png -------------------------------------------------------------------------------- /public/images/fire-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/fire-sprite.png -------------------------------------------------------------------------------- /public/images/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/fire.png -------------------------------------------------------------------------------- /public/images/gallinerica-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/gallinerica-logo.png -------------------------------------------------------------------------------- /public/images/gallinerica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/gallinerica.png -------------------------------------------------------------------------------- /public/images/ice-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/ice-sprite.png -------------------------------------------------------------------------------- /public/images/ice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/ice.png -------------------------------------------------------------------------------- /public/images/icons-old/beer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/beer.png -------------------------------------------------------------------------------- /public/images/icons-old/briefcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/briefcase.png -------------------------------------------------------------------------------- /public/images/icons-old/crown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/crown.png -------------------------------------------------------------------------------- /public/images/icons-old/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/fire.png -------------------------------------------------------------------------------- /public/images/icons-old/ice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/ice.png -------------------------------------------------------------------------------- /public/images/icons-old/magic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/magic.png -------------------------------------------------------------------------------- /public/images/icons-old/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/package.png -------------------------------------------------------------------------------- /public/images/icons-old/radioactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/radioactive.png -------------------------------------------------------------------------------- /public/images/icons-old/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/rocket.png -------------------------------------------------------------------------------- /public/images/icons-old/voltage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons-old/voltage.png -------------------------------------------------------------------------------- /public/images/icons/beer-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/beer-icon.png -------------------------------------------------------------------------------- /public/images/icons/beer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/beer.png -------------------------------------------------------------------------------- /public/images/icons/briefcase-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/briefcase-icon.png -------------------------------------------------------------------------------- /public/images/icons/briefcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/briefcase.png -------------------------------------------------------------------------------- /public/images/icons/crown-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/crown-icon.png -------------------------------------------------------------------------------- /public/images/icons/crown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/crown.png -------------------------------------------------------------------------------- /public/images/icons/dificil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/dificil.png -------------------------------------------------------------------------------- /public/images/icons/extremo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/extremo.png -------------------------------------------------------------------------------- /public/images/icons/facil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/facil.png -------------------------------------------------------------------------------- /public/images/icons/fire-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/fire-icon.png -------------------------------------------------------------------------------- /public/images/icons/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/fire.png -------------------------------------------------------------------------------- /public/images/icons/ice-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/ice-icon.png -------------------------------------------------------------------------------- /public/images/icons/ice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/ice.png -------------------------------------------------------------------------------- /public/images/icons/magic-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/magic-icon.png -------------------------------------------------------------------------------- /public/images/icons/magic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/magic.png -------------------------------------------------------------------------------- /public/images/icons/normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/normal.png -------------------------------------------------------------------------------- /public/images/icons/package-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/package-icon.png -------------------------------------------------------------------------------- /public/images/icons/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/package.png -------------------------------------------------------------------------------- /public/images/icons/radioactive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/radioactive-icon.png -------------------------------------------------------------------------------- /public/images/icons/radioactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/radioactive.png -------------------------------------------------------------------------------- /public/images/icons/resize: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | INPUT=$1 4 | 5 | convert $INPUT-icon.png -filter point -resize 200%x200% ${INPUT%.*}.png 6 | -------------------------------------------------------------------------------- /public/images/icons/rocket-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/rocket-icon.png -------------------------------------------------------------------------------- /public/images/icons/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/rocket.png -------------------------------------------------------------------------------- /public/images/icons/voltage-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/voltage-icon.png -------------------------------------------------------------------------------- /public/images/icons/voltage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/icons/voltage.png -------------------------------------------------------------------------------- /public/images/levels/easy-x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/easy-x2.png -------------------------------------------------------------------------------- /public/images/levels/easy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/easy.png -------------------------------------------------------------------------------- /public/images/levels/extreme-x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/extreme-x2.png -------------------------------------------------------------------------------- /public/images/levels/extreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/extreme.png -------------------------------------------------------------------------------- /public/images/levels/hard-x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/hard-x2.png -------------------------------------------------------------------------------- /public/images/levels/hard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/hard.png -------------------------------------------------------------------------------- /public/images/levels/normal-x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/normal-x2.png -------------------------------------------------------------------------------- /public/images/levels/normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/levels/normal.png -------------------------------------------------------------------------------- /public/images/levels/resize: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | INPUT=$1 4 | 5 | convert $INPUT -filter point -resize 200%x200% ${INPUT%.*}-x2.png 6 | -------------------------------------------------------------------------------- /public/images/magic-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/magic-sprite.png -------------------------------------------------------------------------------- /public/images/magic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/magic.png -------------------------------------------------------------------------------- /public/images/moon-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/moon-sprite.png -------------------------------------------------------------------------------- /public/images/moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/moon.png -------------------------------------------------------------------------------- /public/images/niv3k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/niv3k.png -------------------------------------------------------------------------------- /public/images/package-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/package-sprite.png -------------------------------------------------------------------------------- /public/images/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/package.png -------------------------------------------------------------------------------- /public/images/radioactive-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/radioactive-sprite.png -------------------------------------------------------------------------------- /public/images/radioactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/radioactive.png -------------------------------------------------------------------------------- /public/images/resize: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | INPUT=$1 4 | 5 | convert $INPUT -filter point -resize 300%x300% ${INPUT%.*}-sprite.png 6 | -------------------------------------------------------------------------------- /public/images/rocket-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/rocket-sprite.png -------------------------------------------------------------------------------- /public/images/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/rocket.png -------------------------------------------------------------------------------- /public/images/stop-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/stop-sprite.png -------------------------------------------------------------------------------- /public/images/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/stop.png -------------------------------------------------------------------------------- /public/images/sun-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/sun-sprite.png -------------------------------------------------------------------------------- /public/images/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/sun.png -------------------------------------------------------------------------------- /public/images/voltage-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/voltage-sprite.png -------------------------------------------------------------------------------- /public/images/voltage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/public/images/voltage.png -------------------------------------------------------------------------------- /public/libs/tmi.js (1).map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["./build/tmi.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","client","Client","./lib/client","2","request","_","api","options","callback","url","get","uri","isURL","isNode","merge","method","json","isExtension","headers","xhr","XMLHttpRequest","open","name","setRequestHeader","responseType","addEventListener","ev","readyState","status","response","send","callbackName","Math","round","random","window","data","document","body","removeChild","script","createElement","src","includes","appendChild","./utils","3","global","commands","eventEmitter","EventEmitter","logger","parse","timer","extraUtils","ws","WebSocket","MozWebSocket","opts","this","setMaxListeners","channels","connection","identity","clientId","maxReconnectAttempts","Infinity","maxReconnectInterval","reconnect","reconnectDecay","reconnectInterval","reconnecting","reconnections","reconnectTimer","secure","emotes","emotesets","currentLatency","globaluserstate","lastJoined","latency","Date","moderators","pingLoop","pingTimeout","reason","username","userstate","wasCloseCalled","level","debug","log","setLevel","forEach","part","index","theArray","channel","inherits","prototype","methodName","handleMessage","message","_this","isNull","emit","JSON","stringify","params","msg","msgid","tags","badges","key","isBoolean","prefix","command","currDate","getTime","emits","clearTimeout","warn","info","server","port","setInterval","setTimeout","error","close","clearInterval","timeout","joinQueue","queue","joinChannels","union","self","add","bind","run","nullArr","noticeArr","msgidArr","channelTrueArr","channelFalseArr","noticeAndNull","noticeAndMsgid","basicLog","mods","split","toLowerCase","filter","endsWith","slice","vips","remainingHost","isNaN","parseInt","splice","plan","planName","unescapeIRC","prime","streakMonths","recipient","giftSubCount","methods","sender","viewers","msgSplit","duration","deletedMessage","disconnect","connect","push","isJustinfan","getUsername","_updateEmoteset","hasOwnProperty","slow","minutes","value","nick","isSelf","indexOf","from","autohost","count","extractNumber","actionMessage","_this2","Promise","resolve","reject","_openConnection","once","err","onmessage","_onMessage","onerror","_onError","onclose","_onClose","onopen","_onOpen","justinfan","password","event","_this3","parts","str","_this4","_this5","_getPromiseDelay","_sendCommand","delay","fn","_this6","promiseDelay","then","chan","_sendMessage","_this7","splitLine","Object","keys","id","emote","isRegex","emoteRegex","emoteString","transformEmotes","sets","_this8","Authorization","replace","Client-ID","res","getOptions","getChannels","isMod","_this9","utils","tmi","./api","./commands","./events","./extra-utils","./logger","./parser","./timer","4","followersonly","followersonlyoff","r9kbeta","r9kbetaoff","seconds","slowoff","action","ban","clear","color","newColor","_this10","commercial","_this11","deletemessage","messageUUID","_this12","emoteonly","_this13","emoteonlyoff","_this14","followersmode","followersmodeoff","host","target","_this15","remaining","join","_this16","mod","_this17","_this18","leave","ping","_this19","parseFloat","r9kmode","r9kmodeoff","raw","say","startsWith","substr","slowmode","slowmodeoff","subscribers","_this20","subscribersoff","_this21","_this22","isInteger","unban","_this23","unhost","_this24","unmod","_this25","unvip","_this26","vip","_this27","_this28","whisper","_this29","message-type","message-id","thread-id","5","_events","_maxListeners","undefined","isFunction","arg","isNumber","isObject","_typeof","isUndefined","Symbol","iterator","obj","constructor","String","searchString","position","defaultMaxListeners","TypeError","types","values","val","apply","concat","type","er","handler","len","args","listeners","arguments","Array","addListener","listener","m","newListener","warned","console","trace","on","g","charAt","substring","removeListener","fired","searchFor","k","list","removeAllListeners","ret","listenerCount","evlistener","emitter","6","levenshtein","s1","s2","caseSensitive","cost_ins","cost_rep","cost_del","l1","l2","i1","i2","c0","c1","c2","tmp","p1","p2","raffle","init","raffleChannels","enter","pick","floor","reset","isParticipating","symbols","line","charCode","charCodeAt","ceil","uppercase","chars","u_let","match","7","levels","currentLevel","formatDate","fatal","8","isString","explode","emoticons","space","regex","RegExp","unescapeHtml","exec","test","lastIndex","transformed","nextspace","rawTags","tag","pair","9","defaultDelay","next","at","10","process","actionMessageRegex","justinFanRegex","unescapeIRCRegex","ircEscapedChars","s",":","obj1","obj2","isFinite","_isFinite","_x","toString","int","toNumber","time","replaceAll","x","safe","addWord","word","date","hours","getHours","mins","getMinutes","ctor","superCtor","super_","TempCtor","chrome","runtime","assign","input","lastSpace","lastIndexOf","num","precision","factor","pow","arr1","arr2","hash","_process","11","12","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","Item","array","noop","nextTick","title","browser","env","argv","version","versions","off","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask"],"mappings":"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","file":"./build/tmi.min.js"} -------------------------------------------------------------------------------- /public/libs/tmi.min.js: -------------------------------------------------------------------------------- 1 | var tmi=(()=>{var oe=Object.defineProperty;var k=(n,e)=>oe(n,"name",{value:e,configurable:!0});var T=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var j=T(()=>{});var q=T((ke,J)=>{var v=class{constructor(){this._events=new Map,this._maxListeners=0}setMaxListeners(e){return this._maxListeners=e,this}emit(e,...s){if(e==="error"&&(!this._events.has("error")||!this._events.get("error").length))throw s[0]instanceof Error?s[0]:TypeError('Uncaught, unspecified "error" event.');let t=this._events.get(e);return t?(t.forEach(i=>i.apply(this,s)),!0):!1}emits(e,s){for(let t=0;t=this._maxListeners)throw Error(`Max listeners exceeded for event '${e}'`);return t.push(s),this}once(e,s){let t=k((...i)=>{this.removeListener(e,t),s(...i)},"onceListener");return this.on(e,t)}off(e,s){let t=this._events.get(e);if(!t)return this;let i=t.indexOf(s);return i===-1?this:(t.splice(i,1),t.length===0&&this._events.delete(e),this)}removeAllListeners(e){return e?this._events.delete(e):this._events.clear(),this}listeners(e){return this._events.get(e)||[]}listenerCount(e){return this._events.get(e)?this._events.get(e).length:0}};k(v,"EventEmitter");v.prototype.addListener=v.prototype.on;v.prototype.removeListener=v.prototype.off;v.EventEmitter=v;v.defaultMaxListeners=10;J.exports=v});var G=T((Ce,H)=>{var L=class{constructor(){this._levels={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},this._currentLevel="error"}_log(e,s){if(this._levels[e]{var ne=/^\u0001ACTION ([^\u0001]+)\u0001$/,re=/^(justinfan)(\d+$)/,ae=/\\([sn:r\\])/g,ce=/([ \n;\r\\])/g,le=/^oauth:/i,V={s:" ",n:"",":":";",r:""},W={" ":"s","\n":"n",";":":","\r":"r"},he=F.exports={hasOwn:(n,e)=>({}).hasOwnProperty.call(n,e),promiseDelay:n=>new Promise(e=>setTimeout(e,n)),isInteger(n){return typeof n!="string"&&typeof n!="number"?!1:!isNaN(Math.round(n))},justinfan:()=>`justinfan${Math.floor(Math.random()*8e4+1e3)}`,isJustinfan:n=>re.test(n),channel(n){let e=(n||"").toLowerCase();return e[0]==="#"?e:`#${e}`},username(n){let e=(n||"").toLowerCase();return e[0]==="#"?e.slice(1):e},token:n=>n?n.replace(le,""):"",password(n){let e=he.token(n);return e?`oauth:${e}`:""},actionMessage:n=>n.match(ne),unescapeHtml:n=>n.replace(/\\&\\;/g,"&").replace(/\\<\\;/g,"<").replace(/\\>\\;/g,">").replace(/\\"\\;/g,'"').replace(/\\'\\;/g,"'"),unescapeIRC(n){return!n||typeof n!="string"||!n.includes("\\")?n:n.replace(ae,(e,s)=>s in V?V[s]:s)},escapeIRC(n){return!n||typeof n!="string"?n:n.replace(ce,(e,s)=>s in W?`\\${W[s]}`:s)},inherits(n,e){n.super_=e;let s=k(function(){},"TempCtor");s.prototype=e.prototype,n.prototype=new s,n.prototype.constructor=n}}});var z=T((ve,B)=>{var N=M(),E=/\S+/g;function U(n,e,s=",",t="/",i){let o=n[e];if(o===void 0)return n;let h=typeof o=="string";if(n[`${e}-raw`]=h?o:null,o===!0)return n[e]=null,n;if(n[e]={},h){let u=o.split(s);for(let b=0;bU(n,"badges"),badgeInfo:n=>U(n,"badge-info"),emotes:n=>U(n,"emotes","/",":",","),emoteRegex(n,e,s,t){E.lastIndex=0;let i=new RegExp(`(\\b|^|\\s)${N.unescapeHtml(e)}(\\b|$|\\s)`),o;for(;(o=E.exec(n))!==null;)i.test(o[0])&&(t[s]=t[s]||[],t[s].push([o.index,E.lastIndex-1]))},emoteString(n,e,s,t){E.lastIndex=0;let i;for(;(i=E.exec(n))!==null;)i[0]===N.unescapeHtml(e)&&(t[s]=t[s]||[],t[s].push([i.index,E.lastIndex-1]))},transformEmotes(n){let e="";return Object.keys(n).forEach(s=>{e=`${e}${s}:`,n[s].forEach(t=>e=`${e}${t.join("-")},`),e=`${e.slice(0,-1)}/`}),e.slice(0,-1)},formTags(n={}){let e=Object.entries(n).map(([s,t])=>`${N.escapeIRC(s)}=${N.escapeIRC(t)}`);return e.length?`@${e.join(";")}`:null},msg(n){let e={raw:n,tags:{},prefix:null,command:null,params:[]},s=0,t=0;if(n.charCodeAt(0)===64){if(t=n.indexOf(" "),t===-1)return null;let i=n.slice(1,t).split(";");for(let o=0;os?(e.command=n.slice(s),e):null;for(e.command=n.slice(s,t),s=t+1;n.charCodeAt(s)===32;)s++;for(;s{var A=class{constructor(e){this.queue=[],this.index=0,this.defaultDelay=e===void 0?3e3:e}add(e,s){this.queue.push({fn:e,delay:s})}next(){let e=this.index++,s=this.queue[e];if(!s)return;let t=this.queue[this.index];if(s.fn(),t){let i=t.delay===void 0?this.defaultDelay:t.delay;setTimeout(()=>this.next(),i)}}};k(A,"Queue");Q.exports=A});var K=T((Te,Z)=>{var me=typeof global!="undefined"?global:typeof window!="undefined"?window:{},Y,ue=(Y=me.WebSocket)!=null?Y:j(),pe=q(),fe=G(),R=z(),de=X(),m=M(),P=class extends pe{constructor(e){var s,t,i,o,h,u,b,w,C,x,S,O,r,a;super(),this.opts=e!=null?e:{},this.opts.channels=(s=this.opts.channels)!=null?s:[],this.opts.connection=(t=this.opts.connection)!=null?t:{},this.opts.identity=(i=this.opts.identity)!=null?i:{},this.opts.options=(o=this.opts.options)!=null?o:{},this.clientId=(h=this.opts.options.clientId)!=null?h:null,this._globalDefaultChannel=m.channel((u=this.opts.options.globalDefaultChannel)!=null?u:"#tmijs"),this._skipMembership=(b=this.opts.options.skipMembership)!=null?b:!1,this.maxReconnectAttempts=(w=this.opts.connection.maxReconnectAttempts)!=null?w:1/0,this.maxReconnectInterval=(C=this.opts.connection.maxReconnectInterval)!=null?C:3e4,this.reconnect=(x=this.opts.connection.reconnect)!=null?x:!0,this.reconnectDecay=(S=this.opts.connection.reconnectDecay)!=null?S:1.5,this.reconnectInterval=(O=this.opts.connection.reconnectInterval)!=null?O:1e3,this.reconnecting=!1,this.reconnections=0,this.reconnectTimer=this.reconnectInterval,this.currentLatency=0,this.latency=new Date,this.secure=(r=this.opts.connection.secure)!=null?r:!this.opts.connection.server&&!this.opts.connection.port,this.pingLoop=null,this.pingTimeout=null,this.wasCloseCalled=!1,this.reason="",this.ws=null,this.emotes="",this.emotesets={},this.username="",this.channels=[],this.globaluserstate={},this.userstate={},this.lastJoined="",this.moderators={},this.log=(a=this.opts.logger)!=null?a:new fe;try{this.log.setLevel(this.opts.options.debug?"info":"error")}catch(p){}this.opts.channels.forEach((p,f,_)=>_[f]=m.channel(p)),this.setMaxListeners(0)}api(){throw new Error("The Client.api() method has been removed.")}handleMessage(e){var h,u,b,w,C,x,S,O;if(!e)return;this.listenerCount("raw_message")&&this.emit("raw_message",JSON.parse(JSON.stringify(e)),e);let s=m.channel((h=e.params[0])!=null?h:null),t=(u=e.params[1])!=null?u:null,i=(b=e.tags["msg-id"])!=null?b:null,o=e.tags=R.badges(R.badgeInfo(R.emotes(e.tags)));for(let r in o){if(r==="emote-sets"||r==="ban-duration"||r==="bits")continue;let a=o[r];typeof a=="boolean"?a=null:a==="1"?a=!0:a==="0"?a=!1:typeof a=="string"&&(a=m.unescapeIRC(a)),o[r]=a}if(e.prefix===null)switch(e.command){case"PING":this.emit("ping"),this._isConnected()&&this.ws.send("PONG");break;case"PONG":{this.currentLatency=(new Date().getTime()-this.latency.getTime())/1e3,this.emits(["pong","_promisePing"],[[this.currentLatency]]),clearTimeout(this.pingTimeout);break}default:this.log.warn(`Could not parse message with no prefix: 2 | ${JSON.stringify(e,null,4)}`);break}else if(e.prefix==="tmi.twitch.tv")switch(e.command){case"002":case"003":case"004":case"372":case"375":case"CAP":break;case"001":[this.username]=e.params;break;case"376":{this.log.info("Connected to server."),this.userstate[this._globalDefaultChannel]={},this.emits(["connected","_promiseConnect"],[[this.server,this.port],[null]]),this.reconnections=0,this.reconnectTimer=this.reconnectInterval,this.pingLoop=setInterval(()=>{var f;this._isConnected()&&this.ws.send("PING"),this.latency=new Date,this.pingTimeout=setTimeout(()=>{this.ws!==null&&(this.wasCloseCalled=!1,this.log.error("Ping timeout."),this.ws.close(),clearInterval(this.pingLoop),clearTimeout(this.pingTimeout))},(f=this.opts.connection.timeout)!=null?f:9999)},6e4);let r=(w=this.opts.options.joinInterval)!=null?w:2e3;r<300&&(r=300);let a=new de(r),p=[...new Set([...this.opts.channels,...this.channels])];this.channels=[];for(let f=0;f{this._isConnected()&&this.join(_).catch(y=>this.log.error(y))})}a.next();break}case"NOTICE":{let r=[null],a=[s,i,t],p=[i],f=[s,!0],_=[s,!1],y=[a,r],d=[a,p],c=`[${s}] ${t}`;switch(i){case"subs_on":this.log.info(`[${s}] This room is now in subscribers-only mode.`),this.emits(["subscriber","subscribers","_promiseSubscribers"],[f,f,r]);break;case"subs_off":this.log.info(`[${s}] This room is no longer in subscribers-only mode.`),this.emits(["subscriber","subscribers","_promiseSubscribersoff"],[_,_,r]);break;case"emote_only_on":this.log.info(`[${s}] This room is now in emote-only mode.`),this.emits(["emoteonly","_promiseEmoteonly"],[f,r]);break;case"emote_only_off":this.log.info(`[${s}] This room is no longer in emote-only mode.`),this.emits(["emoteonly","_promiseEmoteonlyoff"],[_,r]);break;case"slow_on":case"slow_off":break;case"followers_on_zero":case"followers_on":case"followers_off":break;case"r9k_on":this.log.info(`[${s}] This room is now in r9k mode.`),this.emits(["r9kmode","r9kbeta","_promiseR9kbeta"],[f,f,r]);break;case"r9k_off":this.log.info(`[${s}] This room is no longer in r9k mode.`),this.emits(["r9kmode","r9kbeta","_promiseR9kbetaoff"],[_,_,r]);break;case"room_mods":{let $=t.split(": "),I=($.length>1?$[1]:"").toLowerCase().split(", ").filter(D=>D);this.emits(["_promiseMods","mods"],[[null,I],[s,I]]);break}case"no_mods":this.emits(["_promiseMods","mods"],[[null,[]],[s,[]]]);break;case"vips_success":{let $=(t.endsWith(".")?t.slice(0,-1):t).split(": "),I=($.length>1?$[1]:"").toLowerCase().split(", ").filter(D=>D);this.emits(["_promiseVips","vips"],[[null,I],[s,I]]);break}case"no_vips":this.emits(["_promiseVips","vips"],[[null,[]],[s,[]]]);break;case"already_banned":case"bad_ban_admin":case"bad_ban_anon":case"bad_ban_broadcaster":case"bad_ban_global_mod":case"bad_ban_mod":case"bad_ban_self":case"bad_ban_staff":case"usage_ban":this.log.info(c),this.emits(["notice","_promiseBan"],d);break;case"ban_success":this.log.info(c),this.emits(["notice","_promiseBan"],y);break;case"usage_clear":this.log.info(c),this.emits(["notice","_promiseClear"],d);break;case"usage_mods":this.log.info(c),this.emits(["notice","_promiseMods"],[a,[i,[]]]);break;case"mod_success":this.log.info(c),this.emits(["notice","_promiseMod"],y);break;case"usage_vips":this.log.info(c),this.emits(["notice","_promiseVips"],[a,[i,[]]]);break;case"usage_vip":case"bad_vip_grantee_banned":case"bad_vip_grantee_already_vip":case"bad_vip_max_vips_reached":case"bad_vip_achievement_incomplete":this.log.info(c),this.emits(["notice","_promiseVip"],[a,[i,[]]]);break;case"vip_success":this.log.info(c),this.emits(["notice","_promiseVip"],y);break;case"usage_mod":case"bad_mod_banned":case"bad_mod_mod":this.log.info(c),this.emits(["notice","_promiseMod"],d);break;case"unmod_success":this.log.info(c),this.emits(["notice","_promiseUnmod"],y);break;case"unvip_success":this.log.info(c),this.emits(["notice","_promiseUnvip"],y);break;case"usage_unmod":case"bad_unmod_mod":this.log.info(c),this.emits(["notice","_promiseUnmod"],d);break;case"usage_unvip":case"bad_unvip_grantee_not_vip":this.log.info(c),this.emits(["notice","_promiseUnvip"],d);break;case"color_changed":this.log.info(c),this.emits(["notice","_promiseColor"],y);break;case"usage_color":case"turbo_only_color":this.log.info(c),this.emits(["notice","_promiseColor"],d);break;case"commercial_success":this.log.info(c),this.emits(["notice","_promiseCommercial"],y);break;case"usage_commercial":case"bad_commercial_error":this.log.info(c),this.emits(["notice","_promiseCommercial"],d);break;case"hosts_remaining":{this.log.info(c);let $=isNaN(t[0])?0:parseInt(t[0]);this.emits(["notice","_promiseHost"],[a,[null,~~$]]);break}case"bad_host_hosting":case"bad_host_rate_exceeded":case"bad_host_error":case"usage_host":this.log.info(c),this.emits(["notice","_promiseHost"],[a,[i,null]]);break;case"already_r9k_on":case"usage_r9k_on":this.log.info(c),this.emits(["notice","_promiseR9kbeta"],d);break;case"already_r9k_off":case"usage_r9k_off":this.log.info(c),this.emits(["notice","_promiseR9kbetaoff"],d);break;case"timeout_success":this.log.info(c),this.emits(["notice","_promiseTimeout"],y);break;case"delete_message_success":this.log.info(`[${s} ${t}]`),this.emits(["notice","_promiseDeletemessage"],y);break;case"already_subs_off":case"usage_subs_off":this.log.info(c),this.emits(["notice","_promiseSubscribersoff"],d);break;case"already_subs_on":case"usage_subs_on":this.log.info(c),this.emits(["notice","_promiseSubscribers"],d);break;case"already_emote_only_off":case"usage_emote_only_off":this.log.info(c),this.emits(["notice","_promiseEmoteonlyoff"],d);break;case"already_emote_only_on":case"usage_emote_only_on":this.log.info(c),this.emits(["notice","_promiseEmoteonly"],d);break;case"usage_slow_on":this.log.info(c),this.emits(["notice","_promiseSlow"],d);break;case"usage_slow_off":this.log.info(c),this.emits(["notice","_promiseSlowoff"],d);break;case"usage_timeout":case"bad_timeout_admin":case"bad_timeout_anon":case"bad_timeout_broadcaster":case"bad_timeout_duration":case"bad_timeout_global_mod":case"bad_timeout_mod":case"bad_timeout_self":case"bad_timeout_staff":this.log.info(c),this.emits(["notice","_promiseTimeout"],d);break;case"untimeout_success":case"unban_success":this.log.info(c),this.emits(["notice","_promiseUnban"],y);break;case"usage_unban":case"bad_unban_no_ban":this.log.info(c),this.emits(["notice","_promiseUnban"],d);break;case"usage_delete":case"bad_delete_message_error":case"bad_delete_message_broadcaster":case"bad_delete_message_mod":this.log.info(c),this.emits(["notice","_promiseDeletemessage"],d);break;case"usage_unhost":case"not_hosting":this.log.info(c),this.emits(["notice","_promiseUnhost"],d);break;case"whisper_invalid_login":case"whisper_invalid_self":case"whisper_limit_per_min":case"whisper_limit_per_sec":case"whisper_restricted":case"whisper_restricted_recipient":this.log.info(c),this.emits(["notice","_promiseWhisper"],d);break;case"no_permission":case"msg_banned":case"msg_room_not_found":case"msg_channel_suspended":case"tos_ban":case"invalid_user":this.log.info(c),this.emits(["notice","_promiseBan","_promiseClear","_promiseUnban","_promiseTimeout","_promiseDeletemessage","_promiseMods","_promiseMod","_promiseUnmod","_promiseVips","_promiseVip","_promiseUnvip","_promiseCommercial","_promiseHost","_promiseUnhost","_promiseJoin","_promisePart","_promiseR9kbeta","_promiseR9kbetaoff","_promiseSlow","_promiseSlowoff","_promiseFollowers","_promiseFollowersoff","_promiseSubscribers","_promiseSubscribersoff","_promiseEmoteonly","_promiseEmoteonlyoff","_promiseWhisper"],[a,[i,s]]);break;case"msg_rejected":case"msg_rejected_mandatory":this.log.info(c),this.emit("automod",s,i,t);break;case"unrecognized_cmd":this.log.info(c),this.emit("notice",s,i,t);break;case"cmds_available":case"host_target_went_offline":case"msg_censored_broadcaster":case"msg_duplicate":case"msg_emoteonly":case"msg_verified_email":case"msg_ratelimit":case"msg_subsonly":case"msg_timedout":case"msg_bad_characters":case"msg_channel_blocked":case"msg_facebook":case"msg_followersonly":case"msg_followersonly_followed":case"msg_followersonly_zero":case"msg_slowmode":case"msg_suspended":case"no_help":case"usage_disconnect":case"usage_help":case"usage_me":case"unavailable_command":this.log.info(c),this.emit("notice",s,i,t);break;case"host_on":case"host_off":break;default:t.includes("Login unsuccessful")||t.includes("Login authentication failed")?(this.wasCloseCalled=!1,this.reconnect=!1,this.reason=t,this.log.error(this.reason),this.ws.close()):t.includes("Error logging in")||t.includes("Improperly formatted auth")?(this.wasCloseCalled=!1,this.reconnect=!1,this.reason=t,this.log.error(this.reason),this.ws.close()):t.includes("Invalid NICK")?(this.wasCloseCalled=!1,this.reconnect=!1,this.reason="Invalid NICK.",this.log.error(this.reason),this.ws.close()):(this.log.warn(`Could not parse NOTICE from tmi.twitch.tv: 3 | ${JSON.stringify(e,null,4)}`),this.emit("notice",s,i,t));break}break}case"USERNOTICE":{let r=o["display-name"]||o.login,a=(C=o["msg-param-sub-plan"])!=null?C:"",p=m.unescapeIRC((x=o["msg-param-sub-plan-name"])!=null?x:"")||null,_={prime:a.includes("Prime"),plan:a,planName:p},y=~~(o["msg-param-streak-months"]||0),d=o["msg-param-recipient-display-name"]||o["msg-param-recipient-user-name"],c=~~o["msg-param-mass-gift-count"];switch(o["message-type"]=i,i){case"resub":this.emits(["resub","subanniversary"],[[s,r,y,t,o,_]]);break;case"sub":this.emits(["subscription","sub"],[[s,r,_,t,o]]);break;case"subgift":this.emit("subgift",s,r,y,d,_,o);break;case"anonsubgift":this.emit("anonsubgift",s,y,d,_,o);break;case"submysterygift":this.emit("submysterygift",s,r,c,_,o);break;case"anonsubmysterygift":this.emit("anonsubmysterygift",s,c,_,o);break;case"primepaidupgrade":this.emit("primepaidupgrade",s,r,_,o);break;case"giftpaidupgrade":{let $=o["msg-param-sender-name"]||o["msg-param-sender-login"];this.emit("giftpaidupgrade",s,r,$,o);break}case"anongiftpaidupgrade":this.emit("anongiftpaidupgrade",s,r,o);break;case"announcement":{let $=o["msg-param-color"];this.emit("announcement",s,o,t,!1,$);break}case"raid":{let $=o["msg-param-displayName"]||o["msg-param-login"],I=+o["msg-param-viewerCount"];this.emit("raided",s,$,I,o);break}default:this.emit("usernotice",i,s,o,t);break}break}case"HOSTTARGET":{let r=t.split(" "),a=~~r[1]||0;r[0]==="-"?(this.log.info(`[${s}] Exited host mode.`),this.emits(["unhost","_promiseUnhost"],[[s,a],[null]])):(this.log.info(`[${s}] Now hosting ${r[0]} for ${a} viewer(s).`),this.emit("hosting",s,r[0],a));break}case"CLEARCHAT":if(e.params.length>1){let r=(S=e.tags["ban-duration"])!=null?S:null;r===null?(this.log.info(`[${s}] ${t} has been banned.`),this.emit("ban",s,t,null,e.tags)):(this.log.info(`[${s}] ${t} has been timed out for ${r} seconds.`),this.emit("timeout",s,t,null,~~r,e.tags))}else this.log.info(`[${s}] Chat was cleared by a moderator.`),this.emits(["clearchat","_promiseClear"],[[s],[null]]);break;case"CLEARMSG":if(e.params.length>1){let r=t,a=o.login;o["message-type"]="messagedeleted",this.log.info(`[${s}] ${a}'s message has been deleted.`),this.emit("messagedeleted",s,a,r,o)}break;case"RECONNECT":this.log.info("Received RECONNECT request from Twitch.."),this.log.info(`Disconnecting and reconnecting in ${Math.round(this.reconnectTimer/1e3)} seconds..`),this.disconnect().catch(r=>this.log.error(r)),setTimeout(()=>this.connect().catch(r=>this.log.error(r)),this.reconnectTimer);break;case"USERSTATE":e.tags.username=this.username,e.tags["user-type"]==="mod"&&(this.moderators[s]||(this.moderators[s]=[]),this.moderators[s].includes(this.username)||this.moderators[s].push(this.username)),!m.isJustinfan(this.getUsername())&&!this.userstate[s]&&(this.userstate[s]=o,this.lastJoined=s,this.channels.push(s),this.log.info(`Joined ${s}`),this.emit("join",s,m.username(this.getUsername()),!0)),e.tags["emote-sets"]!==this.emotes&&(this.emotes=e.tags["emote-sets"],this.emit("emotesets",this.emotes,null)),this.userstate[s]=o;break;case"GLOBALUSERSTATE":this.globaluserstate=o,this.emit("globaluserstate",o),e.tags["emote-sets"]!==void 0&&e.tags["emote-sets"]!==this.emotes&&(this.emotes=e.tags["emote-sets"],this.emit("emotesets",this.emotes,null));break;case"ROOMSTATE":if(m.channel(this.lastJoined)===s&&this.emit("_promiseJoin",null,s),e.tags.channel=s,this.emit("roomstate",s,e.tags),!m.hasOwn(e.tags,"subs-only")){if(m.hasOwn(e.tags,"slow"))if(typeof e.tags.slow=="boolean"&&!e.tags.slow){let r=[s,!1,0];this.log.info(`[${s}] This room is no longer in slow mode.`),this.emits(["slow","slowmode","_promiseSlowoff"],[r,r,[null]])}else{let r=~~e.tags.slow,a=[s,!0,r];this.log.info(`[${s}] This room is now in slow mode.`),this.emits(["slow","slowmode","_promiseSlow"],[a,a,[null]])}if(m.hasOwn(e.tags,"followers-only"))if(e.tags["followers-only"]==="-1"){let r=[s,!1,0];this.log.info(`[${s}] This room is no longer in followers-only mode.`),this.emits(["followersonly","followersmode","_promiseFollowersoff"],[r,r,[null]])}else{let r=~~e.tags["followers-only"],a=[s,!0,r];this.log.info(`[${s}] This room is now in follower-only mode.`),this.emits(["followersonly","followersmode","_promiseFollowers"],[a,a,[null]])}}break;case"SERVERCHANGE":break;default:this.log.warn(`Could not parse message from tmi.twitch.tv: 4 | ${JSON.stringify(e,null,4)}`);break}else if(e.prefix==="jtv")switch(e.command){case"MODE":t==="+o"?(this.moderators[s]||(this.moderators[s]=[]),this.moderators[s].includes(e.params[2])||this.moderators[s].push(e.params[2]),this.emit("mod",s,e.params[2])):t==="-o"&&(this.moderators[s]||(this.moderators[s]=[]),this.moderators[s].filter(r=>r!==e.params[2]),this.emit("unmod",s,e.params[2]));break;default:this.log.warn(`Could not parse message from jtv: 5 | ${JSON.stringify(e,null,4)}`);break}else switch(e.command){case"353":this.emit("names",e.params[2],e.params[3].split(" "));break;case"366":break;case"JOIN":{let[r]=e.prefix.split("!"),a=this.username===r;a&&m.isJustinfan(this.getUsername())?(this.lastJoined=s,this.channels.push(s),this.log.info(`Joined ${s}`),this.emit("join",s,r,!0)):a||this.emit("join",s,r,!1);break}case"PART":{let[r]=e.prefix.split("!"),a=this.username===r;if(a){this.userstate[s]&&delete this.userstate[s];let p=this.channels.indexOf(s);p!==-1&&this.channels.splice(p,1),p=this.opts.channels.indexOf(s),p!==-1&&this.opts.channels.splice(p,1),this.log.info(`Left ${s}`),this.emit("_promisePart",null)}this.emit("part",s,r,a);break}case"WHISPER":{let[r]=e.prefix.split("!");this.log.info(`[WHISPER] <${r}>: ${t}`),m.hasOwn(e.tags,"username")||(e.tags.username=r),e.tags["message-type"]="whisper";let a=m.channel(e.tags.username);this.emits(["whisper","message"],[[a,e.tags,t,!1]]);break}case"PRIVMSG":if([e.tags.username]=e.prefix.split("!"),e.tags.username==="jtv"){let r=m.username(t.split(" ")[0]),a=t.includes("auto");if(t.includes("hosting you for")){let p=0,f=t.split(" ");for(let _=0;_: ${p}`),this.emits(["action","message"],[[s,e.tags,p,!1]])):(this.log[r](`[${s}] <${e.tags.username}>: ${p}`),this.emits(["chat","message"],[[s,e.tags,p,!1]]))}}break;default:this.log.warn(`Could not parse message: 6 | ${JSON.stringify(e,null,4)}`);break}}connect(){return new Promise((e,s)=>{var t,i;this.server=(t=this.opts.connection.server)!=null?t:"irc-ws.chat.twitch.tv",this.port=(i=this.opts.connection.port)!=null?i:80,this.secure&&(this.port=443),this.port===443&&(this.secure=!0),this.reconnectTimer=this.reconnectTimer*this.reconnectDecay,this.reconnectTimer>=this.maxReconnectInterval&&(this.reconnectTimer=this.maxReconnectInterval),this._openConnection(),this.once("_promiseConnect",o=>{o?s(o):e([this.server,~~this.port])})})}_openConnection(){let e=`${this.secure?"wss":"ws"}://${this.server}:${this.port}/`,s={};"agent"in this.opts.connection&&(s.agent=this.opts.connection.agent),this.ws=new ue(e,"irc",s),this.ws.onmessage=this._onMessage.bind(this),this.ws.onerror=this._onError.bind(this),this.ws.onclose=this._onClose.bind(this),this.ws.onopen=this._onOpen.bind(this)}_onOpen(){var e;!this._isConnected()||(this.log.info(`Connecting to ${this.server} on port ${this.port}..`),this.emit("connecting",this.server,~~this.port),this.username=m.username((e=this.opts.identity.username)!=null?e:m.justinfan()),this._getToken().then(s=>{let t=m.password(s);this.log.info("Sending authentication to server.."),this.emit("logon");let i="twitch.tv/tags twitch.tv/commands";this._skipMembership||(i+=" twitch.tv/membership"),this.ws.send(`CAP REQ :${i}`),t?this.ws.send(`PASS ${t}`):m.isJustinfan(this.username)&&this.ws.send("PASS SCHMOOPIIE"),this.ws.send(`NICK ${this.username}`)}).catch(s=>{this.emits(["_promiseConnect","disconnected"],[[s],["Could not get a token."]])}))}_getToken(){let e=this.opts.identity.password,s=typeof e=="function"?e():e;return Promise.resolve(s)}_onMessage(e){e.data.trim().split(`\r 7 | `).forEach(t=>{let i=R.msg(t);i&&this.handleMessage(i)})}_onError(){this.moderators={},this.userstate={},this.globaluserstate={},clearInterval(this.pingLoop),clearTimeout(this.pingTimeout),this.reason=this.ws===null?"Connection closed.":"Unable to connect.",this.emits(["_promiseConnect","disconnected"],[[this.reason]]),this.reconnect&&this.reconnections===this.maxReconnectAttempts&&(this.emit("maxreconnect"),this.log.error("Maximum reconnection attempts reached.")),this.reconnect&&!this.reconnecting&&this.reconnections<=this.maxReconnectAttempts-1&&(this.reconnecting=!0,this.reconnections++,this.log.error(`Reconnecting in ${Math.round(this.reconnectTimer/1e3)} seconds..`),this.emit("reconnect"),setTimeout(()=>{this.reconnecting=!1,this.connect().catch(e=>this.log.error(e))},this.reconnectTimer)),this.ws=null}_onClose(){this.moderators={},this.userstate={},this.globaluserstate={},clearInterval(this.pingLoop),clearTimeout(this.pingTimeout),this.wasCloseCalled?(this.wasCloseCalled=!1,this.reason="Connection closed.",this.log.info(this.reason),this.emits(["_promiseConnect","_promiseDisconnect","disconnected"],[[this.reason],[null],[this.reason]])):(this.emits(["_promiseConnect","disconnected"],[[this.reason]]),!this.wasCloseCalled&&this.reconnect&&this.reconnections===this.maxReconnectAttempts&&(this.emit("maxreconnect"),this.log.error("Maximum reconnection attempts reached.")),!this.wasCloseCalled&&this.reconnect&&!this.reconnecting&&this.reconnections<=this.maxReconnectAttempts-1&&(this.reconnecting=!0,this.reconnections++,this.log.error(`Could not connect to server. Reconnecting in ${Math.round(this.reconnectTimer/1e3)} seconds..`),this.emit("reconnect"),setTimeout(()=>{this.reconnecting=!1,this.connect().catch(e=>this.log.error(e))},this.reconnectTimer))),this.ws=null}_getPromiseDelay(){return Math.max(600,this.currentLatency*1e3+100)}_sendCommand({delay:e,channel:s,command:t,tags:i},o){return new Promise((h,u)=>{if(this._isConnected())(e===null||typeof e=="number")&&(e===null&&(e=this._getPromiseDelay()),m.promiseDelay(e).then(()=>u("No response from Twitch.")));else return u("Not connected to server.");let b=R.formTags(i);if(typeof s=="string"){let w=m.channel(s);this.log.info(`[${w}] Executing command: ${t}`),this.ws.send(`${b?`${b} `:""}PRIVMSG ${w} :${t}`)}else this.log.info(`Executing command: ${t}`),this.ws.send(`${b?`${b} `:""}${t}`);typeof o=="function"?o(h,u):h()})}_sendMessage({channel:e,message:s,tags:t},i){return new Promise((o,h)=>{var S;if(this._isConnected()){if(m.isJustinfan(this.getUsername()))return h("Cannot send anonymous messages.")}else return h("Not connected to server.");let u=m.channel(e);if(this.userstate[u]||(this.userstate[u]={}),s.length>500){let r=s,a=r.slice(0,500).lastIndexOf(" ");a===-1&&(a=500),s=r.slice(0,a),setTimeout(()=>this._sendMessage({channel:e,message:r.slice(a),tags:t}),350)}let b=R.formTags(t);this.ws.send(`${b?`${b} `:""}PRIVMSG ${u} :${s}`);let w=Object.assign({},this.userstate[u],{emotes:null}),C=(S=this.opts.options.messagesLogLevel)!=null?S:"info",x=m.actionMessage(s);x?(w["message-type"]="action",this.log[C](`[${u}] *<${this.getUsername()}>: ${x[1]}`),this.emits(["action","message"],[[u,w,x[1],!0]])):(w["message-type"]="chat",this.log[C](`[${u}] <${this.getUsername()}>: ${s}`),this.emits(["chat","message"],[[u,w,s,!0]])),typeof i=="function"?i(o,h):o()})}getUsername(){return this.username}getOptions(){return this.opts}getChannels(){return this.channels}isMod(e,s){let t=m.channel(e);return this.moderators[t]||(this.moderators[t]=[]),this.moderators[t].includes(m.username(s))}readyState(){return this.ws===null?"CLOSED":["CONNECTING","OPEN","CLOSING","CLOSED"][this.ws.readyState]}_isConnected(){return this.ws!==null&&this.ws.readyState===1}disconnect(){return new Promise((e,s)=>{this.ws!==null&&this.ws.readyState!==3?(this.wasCloseCalled=!0,this.log.info("Disconnecting from server.."),this.ws.close(),this.once("_promiseDisconnect",()=>e([this.server,~~this.port]))):(this.log.error("Cannot disconnect from server. Socket is not opened or connection is already closing."),s("Cannot disconnect from server. Socket is not opened or connection is already closing."))})}};k(P,"ClientBase");Z.exports=P});var se=T((Se,ee)=>{var _e=K(),l=M(),g=class extends _e{action(e,s,t){return s=`ACTION ${s}`,this._sendMessage({delay:this._getPromiseDelay(),channel:e,message:s,tags:t},(i,o)=>i([l.channel(e),s]))}announce(e,s){return this._sendMessage({channel:e,message:`/announce ${s}`},(t,i)=>t([l.channel(e),s]))}ban(e,s,t){return s=l.username(s),t=t!=null?t:"",this._sendCommand({channel:e,command:`/ban ${s} ${t}`},(i,o)=>this.once("_promiseBan",h=>h?o(h):i([l.channel(e),s,t])))}clear(e){return this._sendCommand({channel:e,command:"/clear"},(s,t)=>this.once("_promiseClear",i=>i?t(i):s([l.channel(e)])))}color(e,s){return e=s!=null?s:e,this._sendCommand({channel:this._globalDefaultChannel,command:`/color ${e}`},(t,i)=>this.once("_promiseColor",o=>o?i(o):t([e])))}commercial(e,s){return s=s!=null?s:30,this._sendCommand({channel:e,command:`/commercial ${s}`},(t,i)=>this.once("_promiseCommercial",o=>o?i(o):t([l.channel(e),~~s])))}deletemessage(e,s){return this._sendCommand({channel:e,command:`/delete ${s}`},(t,i)=>this.once("_promiseDeletemessage",o=>o?i(o):t([l.channel(e)])))}emoteonly(e){return this._sendCommand({channel:e,command:"/emoteonly"},(s,t)=>this.once("_promiseEmoteonly",i=>i?t(i):s([l.channel(e)])))}emoteonlyoff(e){return this._sendCommand({channel:e,command:"/emoteonlyoff"},(s,t)=>this.once("_promiseEmoteonlyoff",i=>i?t(i):s([l.channel(e)])))}followersonly(e,s){return s=s!=null?s:30,this._sendCommand({channel:e,command:`/followers ${s}`},(t,i)=>this.once("_promiseFollowers",o=>o?i(o):t([l.channel(e),~~s])))}followersonlyoff(e){return this._sendCommand({channel:e,command:"/followersoff"},(s,t)=>this.once("_promiseFollowersoff",i=>i?t(i):s([l.channel(e)])))}host(e,s){return s=l.username(s),this._sendCommand({delay:2e3,channel:e,command:`/host ${s}`},(t,i)=>this.once("_promiseHost",(o,h)=>o?i(o):t([l.channel(e),s,~~h])))}join(e){return e=l.channel(e),this._sendCommand({delay:void 0,channel:null,command:`JOIN ${e}`},(s,t)=>{let i="_promiseJoin",o=!1,h=k((b,w)=>{e===l.channel(w)&&(this.removeListener(i,h),o=!0,b?t(b):s([e]))},"listener");this.on(i,h);let u=this._getPromiseDelay();l.promiseDelay(u).then(()=>{o||this.emit(i,"No response from Twitch.",e)})})}mod(e,s){return s=l.username(s),this._sendCommand({channel:e,command:`/mod ${s}`},(t,i)=>this.once("_promiseMod",o=>o?i(o):t([l.channel(e),s])))}mods(e){return e=l.channel(e),this._sendCommand({channel:e,command:"/mods"},(s,t)=>{this.once("_promiseMods",(i,o)=>{i?t(i):(o.forEach(h=>{this.moderators[e]||(this.moderators[e]=[]),this.moderators[e].includes(h)||this.moderators[e].push(h)}),s(o))})})}part(e){return this._sendCommand({delay:null,channel:null,command:`PART ${e}`},(s,t)=>this.once("_promisePart",i=>i?t(i):s([l.channel(e)])))}ping(){return this._sendCommand({delay:null,command:"PING"},(e,s)=>{var t;this.latency=new Date,this.pingTimeout=setTimeout(()=>{this.ws!==null&&(this.wasCloseCalled=!1,this.log.error("Ping timeout."),this.ws.close(),clearInterval(this.pingLoop),clearTimeout(this.pingTimeout))},(t=this.opts.connection.timeout)!=null?t:9999),this.once("_promisePing",i=>e([parseFloat(i)]))})}r9kbeta(e){return this._sendCommand({channel:e,command:"/r9kbeta"},(s,t)=>this.once("_promiseR9kbeta",i=>i?t(i):s([l.channel(e)])))}r9kbetaoff(e){return this._sendCommand({channel:e,command:"/r9kbetaoff"},(s,t)=>this.once("_promiseR9kbetaoff",i=>i?t(i):s([l.channel(e)])))}raw(e,s){return this._sendCommand({channel:null,command:e,tags:s},(t,i)=>t([e]))}reply(e,s,t,i={}){if(typeof t=="object"&&(t=t.id),!t||typeof t!="string")throw new Error("replyParentMsgId is required.");return this.say(e,s,{...i,"reply-parent-msg-id":t})}say(e,s,t){return e=l.channel(e),s.startsWith(".")&&!s.startsWith("..")||s.startsWith("/")||s.startsWith("\\")?s.slice(1,4)==="me "?this.action(e,s.slice(4)):this._sendCommand({channel:e,message:s,tags:t},(i,o)=>i([e,s])):this._sendMessage({delay:this._getPromiseDelay(),channel:e,message:s,tags:t},(i,o)=>i([e,s]))}slow(e,s){return s=s!=null?s:300,this._sendCommand({channel:e,command:`/slow ${s}`},(t,i)=>this.once("_promiseSlow",o=>o?i(o):t([l.channel(e),~~s])))}slowoff(e){return this._sendCommand({channel:e,command:"/slowoff"},(s,t)=>this.once("_promiseSlowoff",i=>i?t(i):s([l.channel(e)])))}subscribers(e){return this._sendCommand({channel:e,command:"/subscribers"},(s,t)=>this.once("_promiseSubscribers",i=>i?t(i):s([l.channel(e)])))}subscribersoff(e){return this._sendCommand({channel:e,command:"/subscribersoff"},(s,t)=>this.once("_promiseSubscribersoff",i=>i?t(i):s([l.channel(e)])))}timeout(e,s,t,i){return s=l.username(s),(t!=null?t:!1)&&!l.isInteger(t)&&(i=t,t=300),t=t!=null?t:300,i=i!=null?i:"",this._sendCommand({channel:e,command:`/timeout ${s} ${t} ${i}`},(o,h)=>this.once("_promiseTimeout",u=>u?h(u):o([l.channel(e),s,~~t,i])))}unban(e,s){return s=l.username(s),this._sendCommand({channel:e,command:`/unban ${s}`},(t,i)=>this.once("_promiseUnban",o=>o?i(o):t([l.channel(e),s])))}unhost(e){return this._sendCommand({delay:2e3,channel:e,command:"/unhost"},(s,t)=>this.once("_promiseUnhost",i=>i?t(i):s([l.channel(e)])))}unmod(e,s){return s=l.username(s),this._sendCommand({channel:e,command:`/unmod ${s}`},(t,i)=>this.once("_promiseUnmod",o=>o?i(o):t([l.channel(e),s])))}unvip(e,s){return s=l.username(s),this._sendCommand({channel:e,command:`/unvip ${s}`},(t,i)=>this.once("_promiseUnvip",o=>o?i(o):t([l.channel(e),s])))}vip(e,s){return s=l.username(s),this._sendCommand({channel:e,command:`/vip ${s}`},(t,i)=>this.once("_promiseVip",o=>o?i(o):t([l.channel(e),s])))}vips(e){return this._sendCommand({channel:e,command:"/vips"},(s,t)=>this.once("_promiseVips",(i,o)=>i?t(i):s(o)))}whisper(e,s){return e=l.username(e),e===this.getUsername()?Promise.reject("Cannot send a whisper to the same account."):this._sendCommand({delay:null,channel:this._globalDefaultChannel,command:`/w ${e} ${s}`},(t,i)=>this.once("_promiseWhisper",o=>o&&i(o))).catch(t=>{if(t&&typeof t=="string"&&t.indexOf("No response from Twitch.")!==0)throw t;let i=l.channel(e),o=Object.assign({"message-type":"whisper","message-id":null,"thread-id":null,username:this.getUsername()},this.globaluserstate);return this.emits(["whisper","message"],[[i,o,s,!0]]),[e,s]})}};k(g,"Client");g.prototype.followersmode=g.prototype.followersonly;g.prototype.followersmodeoff=g.prototype.followersonlyoff;g.prototype.leave=g.prototype.part;g.prototype.slowmode=g.prototype.slow;g.prototype.r9kmode=g.prototype.r9kbeta;g.prototype.uniquechat=g.prototype.r9kbeta;g.prototype.r9kmodeoff=g.prototype.r9kbetaoff;g.prototype.uniquechatoff=g.prototype.r9kbeta;g.prototype.slowmodeoff=g.prototype.slowoff;ee.exports=g});var ge=T((Ie,ie)=>{var te=se();ie.exports={client:te,Client:te}});return ge();})(); 8 | //# sourceMappingURL=tmi.min.js.map 9 | -------------------------------------------------------------------------------- /sources/cabin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/cabin.png -------------------------------------------------------------------------------- /sources/chickens/beer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/beer.png -------------------------------------------------------------------------------- /sources/chickens/briefcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/briefcase.png -------------------------------------------------------------------------------- /sources/chickens/chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/chicken.png -------------------------------------------------------------------------------- /sources/chickens/chickens-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/chickens-sheet.png -------------------------------------------------------------------------------- /sources/chickens/chickens.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/chickens.aseprite -------------------------------------------------------------------------------- /sources/chickens/crown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/crown.png -------------------------------------------------------------------------------- /sources/chickens/duck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/duck.png -------------------------------------------------------------------------------- /sources/chickens/duck2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/duck2.png -------------------------------------------------------------------------------- /sources/chickens/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/fire.png -------------------------------------------------------------------------------- /sources/chickens/gifs/beer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/beer.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/briefcase.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/briefcase.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/chicken.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/chicken.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/duck.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/duck.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/fire.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/fire.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/ice.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/ice.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/king.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/king.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/magic.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/magic.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/packed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/packed.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/radioactive.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/radioactive.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/rocket.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/rocket.gif -------------------------------------------------------------------------------- /sources/chickens/gifs/voltage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/gifs/voltage.gif -------------------------------------------------------------------------------- /sources/chickens/ice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/ice.png -------------------------------------------------------------------------------- /sources/chickens/magic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/magic.png -------------------------------------------------------------------------------- /sources/chickens/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/package.png -------------------------------------------------------------------------------- /sources/chickens/podium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/podium.png -------------------------------------------------------------------------------- /sources/chickens/radioactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/radioactive.png -------------------------------------------------------------------------------- /sources/chickens/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/rocket.png -------------------------------------------------------------------------------- /sources/chickens/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/stop.png -------------------------------------------------------------------------------- /sources/chickens/voltage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/chickens/voltage.png -------------------------------------------------------------------------------- /sources/cinta v1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/cinta v1.gif -------------------------------------------------------------------------------- /sources/cinta-animada v1-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/cinta-animada v1-sheet.png -------------------------------------------------------------------------------- /sources/cinta-animada v2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/cinta-animada v2.gif -------------------------------------------------------------------------------- /sources/difficulty/difficulty-icons.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/difficulty/difficulty-icons.aseprite -------------------------------------------------------------------------------- /sources/difficulty/easy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/difficulty/easy.png -------------------------------------------------------------------------------- /sources/difficulty/extreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/difficulty/extreme.png -------------------------------------------------------------------------------- /sources/difficulty/hard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/difficulty/hard.png -------------------------------------------------------------------------------- /sources/difficulty/normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/difficulty/normal.png -------------------------------------------------------------------------------- /sources/feather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/feather.png -------------------------------------------------------------------------------- /sources/gallinerica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/gallinerica.png -------------------------------------------------------------------------------- /sources/gold.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/gold.gif -------------------------------------------------------------------------------- /sources/icons/beer-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/beer-icon.png -------------------------------------------------------------------------------- /sources/icons/briefcase-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/briefcase-icon.png -------------------------------------------------------------------------------- /sources/icons/crown-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/crown-icon.png -------------------------------------------------------------------------------- /sources/icons/fire-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/fire-icon.png -------------------------------------------------------------------------------- /sources/icons/ice-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/ice-icon.png -------------------------------------------------------------------------------- /sources/icons/icons.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/icons.aseprite -------------------------------------------------------------------------------- /sources/icons/magic-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/magic-icon.png -------------------------------------------------------------------------------- /sources/icons/package-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/package-icon.png -------------------------------------------------------------------------------- /sources/icons/radioactive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/radioactive-icon.png -------------------------------------------------------------------------------- /sources/icons/rocket-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/rocket-icon.png -------------------------------------------------------------------------------- /sources/icons/thunder-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/icons/thunder-icon.png -------------------------------------------------------------------------------- /sources/leaderboard/badges.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/badges.aseprite -------------------------------------------------------------------------------- /sources/leaderboard/bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/bronze.png -------------------------------------------------------------------------------- /sources/leaderboard/death.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/death.png -------------------------------------------------------------------------------- /sources/leaderboard/gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/gold.png -------------------------------------------------------------------------------- /sources/leaderboard/king.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/king.png -------------------------------------------------------------------------------- /sources/leaderboard/leaderboard-chickens-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/leaderboard-chickens-sheet.png -------------------------------------------------------------------------------- /sources/leaderboard/silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/leaderboard/silver.png -------------------------------------------------------------------------------- /sources/logo-gallinerica-x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/logo-gallinerica-x2.png -------------------------------------------------------------------------------- /sources/logo-gallinerica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/logo-gallinerica.png -------------------------------------------------------------------------------- /sources/moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/moon.png -------------------------------------------------------------------------------- /sources/numerica-jam.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/numerica-jam.aseprite -------------------------------------------------------------------------------- /sources/screenshot-day-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/screenshot-day-1.png -------------------------------------------------------------------------------- /sources/screenshot-day-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/screenshot-day-2.png -------------------------------------------------------------------------------- /sources/screenshot-day-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/screenshot-day-3.png -------------------------------------------------------------------------------- /sources/screenshot-day-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/screenshot-day-4.png -------------------------------------------------------------------------------- /sources/stop-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/stop-sprite.png -------------------------------------------------------------------------------- /sources/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/stop.png -------------------------------------------------------------------------------- /sources/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/sun.png -------------------------------------------------------------------------------- /sources/title-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManzDev/gallinerica/89baff1bfbce97271f0afee36cee823fe5d9dbcd/sources/title-logo.png -------------------------------------------------------------------------------- /src/components/BeltMachine.js: -------------------------------------------------------------------------------- 1 | import { NUMBERS } from "@/modules/difficulty.js"; 2 | 3 | const SPEED = { 4 | 0: "0ms", 5 | 1: "800ms", 6 | 2: "600ms", 7 | 3: "400ms", 8 | 4: "200ms" 9 | }; 10 | 11 | class BeltMachine extends HTMLElement { 12 | constructor() { 13 | super(); 14 | this.attachShadow({ mode: "open" }); 15 | } 16 | 17 | static get styles() { 18 | return /* css */` 19 | :host { 20 | --width: 192px; 21 | --height: 96px; 22 | --speed: 0ms; 23 | } 24 | 25 | .container { 26 | width: var(--width); 27 | height: var(--height); 28 | background: url("images/belt-sprite.png"); 29 | animation: belt-animate var(--speed) steps(4) infinite; 30 | } 31 | 32 | @keyframes belt-animate { 33 | 0% { background-position: 0; } 34 | 100% { background-position: -768px; } 35 | } 36 | 37 | :host([stop]) .container { 38 | animation-play-state: paused; 39 | } 40 | `; 41 | } 42 | 43 | connectedCallback() { 44 | this.name = this.getAttribute("name"); 45 | this.render(); 46 | document.addEventListener("CHANGE_DIFFICULTY", (ev) => { 47 | const value = Number(NUMBERS[ev.detail]); 48 | this.setSpeed(value); 49 | }); 50 | document.addEventListener("TOGGLE_MACHINE", (ev) => this.toggle(ev.detail.name)); 51 | } 52 | 53 | toggle(name) { 54 | if (name === this.name) { 55 | this.toggleAttribute("stop"); 56 | } 57 | } 58 | 59 | setSpeed(value) { 60 | this.style.setProperty("--speed", SPEED[value]); 61 | } 62 | 63 | render() { 64 | this.shadowRoot.innerHTML = /* html */` 65 | 66 |
67 | 68 |
`; 69 | } 70 | } 71 | 72 | customElements.define("belt-machine", BeltMachine); 73 | -------------------------------------------------------------------------------- /src/components/ChickenBackground.js: -------------------------------------------------------------------------------- 1 | const TIME_TO_CHANGE = 5 * 60000; 2 | 3 | class ChickenBackground extends HTMLElement { 4 | constructor() { 5 | super(); 6 | this.attachShadow({ mode: "open" }); 7 | } 8 | 9 | static get styles() { 10 | return /* css */` 11 | :host { 12 | --time: 5s; 13 | 14 | position: absolute; 15 | width: var(--game-width); 16 | height: var(--game-height); 17 | z-index: -1; 18 | } 19 | 20 | .container { 21 | position: absolute; 22 | background-color: #0098dc; 23 | background-image: radial-gradient(transparent 20%, #0009 90%); 24 | width: 100%; 25 | height: 100%; 26 | transition: background-color var(--time); 27 | } 28 | 29 | .moon, 30 | .sun { 31 | position: absolute; 32 | } 33 | 34 | .moon { 35 | --size: 64px; 36 | 37 | width: var(--size); 38 | height: var(--size); 39 | background: url("images/moon-sprite.png"); 40 | translate: 575px 200px; 41 | transform: translateY(350px); 42 | transition: transform var(--time); 43 | } 44 | 45 | .sun { 46 | --size: 64px; 47 | 48 | width: var(--size); 49 | height: var(--size); 50 | background: url("images/sun-sprite.png"); 51 | translate: 125px 200px; 52 | transition: transform var(--time); 53 | } 54 | 55 | :host(.night) .sun { transform: translateY(350px); } 56 | :host(.night) .moon { transform: translateY(0px); } 57 | 58 | :host(.night) .container { background-color: #0e071b } 59 | `; 60 | } 61 | 62 | connectedCallback() { 63 | this.render(); 64 | } 65 | 66 | start() { 67 | setInterval(() => this.classList.toggle("night"), TIME_TO_CHANGE); 68 | } 69 | 70 | render() { 71 | this.shadowRoot.innerHTML = /* html */` 72 | 73 |
74 |
75 |
76 |
`; 77 | } 78 | } 79 | 80 | customElements.define("chicken-background", ChickenBackground); 81 | -------------------------------------------------------------------------------- /src/components/ChickenBoard.js: -------------------------------------------------------------------------------- 1 | const profileChicken = { 2 | 0: "url(images/avatars/king.png)", 3 | 1: "url(images/avatars/silver.png)", 4 | 2: "url(images/avatars/bronze.png)", 5 | 3: "url(images/avatars/normal.png)", 6 | 4: "url(images/avatars/normal.png)" 7 | }; 8 | 9 | class ChickenBoard extends HTMLElement { 10 | constructor() { 11 | super(); 12 | this.attachShadow({ mode: "open" }); 13 | this.init(); 14 | } 15 | 16 | init() { 17 | this.table = {}; 18 | this.lastWinner = null; 19 | } 20 | 21 | static get styles() { 22 | return /* css */` 23 | :host { 24 | --color: #ffd700; 25 | } 26 | 27 | .container { 28 | width: 250px; 29 | height: 155px; 30 | padding: 6px; 31 | } 32 | 33 | .box { 34 | background: #13122e; 35 | } 36 | 37 | .box:nth-child(2) { 38 | padding: 0 4px; 39 | } 40 | 41 | .box:nth-child(3) { 42 | text-align: center; 43 | } 44 | 45 | .streak { 46 | --color: lime; 47 | } 48 | 49 | .user { 50 | display: grid; 51 | grid-template-columns: 20px 1fr 35px; 52 | gap: 0 6px; 53 | font-family: EnterCommand, sans-serif; 54 | font-size: 28px; 55 | color: var(--color); 56 | padding: 3px; 57 | } 58 | 59 | .avatar { 60 | background-image: var(--image); 61 | width: 20px; 62 | height: 24px; 63 | animation: animate 1s steps(4) infinite; 64 | } 65 | 66 | @keyframes animate { 67 | 0% { background-position: 0; } 68 | 100% { background-position: -80px; } 69 | } 70 | `; 71 | } 72 | 73 | connectedCallback() { 74 | this.render(); 75 | } 76 | 77 | addPoint(username) { 78 | this.lastWinner = username; 79 | this.table[username] = (this.table[username] || 0) + 1; 80 | this.render(); 81 | } 82 | 83 | subPoint(username) { 84 | this.table[username] = (this.table[username] || 0) - 1; 85 | this.render(); 86 | } 87 | 88 | getLeaderBoard() { 89 | const entries = Object.entries(this.table); 90 | const usersList = entries.map(([username, points]) => ({ username, points })); 91 | const leaderBoard = usersList.sort((a, b) => b.points - a.points); 92 | return leaderBoard.slice(0, 5); 93 | } 94 | 95 | renderTable() { 96 | const leaderBoard = this.getLeaderBoard(); 97 | 98 | const html = leaderBoard 99 | // .filter(({ points }) => points > 0) 100 | .map(({ username, points }, index) => { 101 | const streakClass = this.lastWinner === username ? "streak" : ""; 102 | 103 | return /* html */` 104 |
105 |
106 |
${username}
107 |
${points}
108 |
`; 109 | }); 110 | 111 | return html.join(""); 112 | } 113 | 114 | render() { 115 | this.shadowRoot.innerHTML = /* html */` 116 | 117 |
118 | ${this.renderTable()} 119 |
`; 120 | } 121 | } 122 | 123 | customElements.define("chicken-board", ChickenBoard); 124 | -------------------------------------------------------------------------------- /src/components/ChickenCounter.js: -------------------------------------------------------------------------------- 1 | class ChickenCounter extends HTMLElement { 2 | constructor() { 3 | super(); 4 | this.attachShadow({ mode: "open" }); 5 | this.stats = { 6 | chickenify: 0, 7 | doomed: 0 8 | }; 9 | } 10 | 11 | static get styles() { 12 | return /* css */` 13 | :host { 14 | --color: #ffd700; 15 | position: absolute; 16 | } 17 | 18 | .container { 19 | width: 250px; 20 | height: 155px; 21 | padding: 6px; 22 | } 23 | 24 | .box { 25 | background: #13122e; 26 | } 27 | 28 | .box:nth-child(2) { 29 | padding: 0 4px; 30 | } 31 | 32 | .box:nth-child(3) { 33 | text-align: center; 34 | } 35 | 36 | .streak { 37 | --color: lime; 38 | } 39 | 40 | .user { 41 | display: grid; 42 | grid-template-columns: 20px 1fr 35px; 43 | gap: 0 6px; 44 | font-family: EnterCommand, sans-serif; 45 | font-size: 28px; 46 | color: var(--color); 47 | padding: 3px; 48 | } 49 | 50 | .avatar { 51 | background-image: var(--image); 52 | background-size: 96px; 53 | width: 24px; 54 | height: 24px; 55 | } 56 | 57 | .user:nth-child(2) .avatar { 58 | scale: 1 -1; 59 | } 60 | `; 61 | } 62 | 63 | connectedCallback() { 64 | this.render(); 65 | document.addEventListener("CHICKEN_EXIT", (ev) => this.counterChicken(ev.detail.isChickenify)); 66 | } 67 | 68 | counterChicken(isChickenify) { 69 | if (isChickenify) { this.addChickenify(); } else { this.addDoomed(); } 70 | this.render(); 71 | } 72 | 73 | renderTable() { 74 | return /* html */` 75 |
76 |
77 |
Gallinificados
78 |
${this.stats.chickenify}
79 |
80 |
81 |
82 |
Condenados
83 |
${this.stats.doomed}
84 |
`; 85 | } 86 | 87 | addChickenify() { 88 | this.stats.chickenify++; 89 | } 90 | 91 | addDoomed() { 92 | this.stats.doomed++; 93 | } 94 | 95 | render() { 96 | this.shadowRoot.innerHTML = /* html */` 97 | 98 |
99 | ${this.renderTable()} 100 |
`; 101 | } 102 | } 103 | 104 | customElements.define("chicken-counter", ChickenCounter); 105 | -------------------------------------------------------------------------------- /src/components/ChickenNPC.js: -------------------------------------------------------------------------------- 1 | import { getLevels } from "@/modules/difficulty.js"; 2 | 3 | class ChickenNPC extends HTMLElement { 4 | constructor() { 5 | super(); 6 | this.attachShadow({ mode: "open" }); 7 | this.isChickenified = false; 8 | this.isMove = true; 9 | this.animation = null; 10 | this.sanitizeAnimation = null; 11 | } 12 | 13 | static get styles() { 14 | return /* css */` 15 | :host { 16 | --image: url("images/chicken-sprite.png"); 17 | --width: 96px; 18 | --height: 96px; 19 | } 20 | 21 | :host(.radioactive) { --image: url("images/radioactive-sprite.png"); } 22 | :host(.voltage) { --image: url("images/voltage-sprite.png"); } 23 | :host(.package) { --image: url("images/package-sprite.png"); } 24 | :host(.beer) { --image: url("images/beer-sprite.png"); } 25 | :host(.fire) { --image: url("images/fire-sprite.png"); } 26 | :host(.crown) { --image: url("images/crown-sprite.png"); } 27 | :host(.rocket) { --image: url("images/rocket-sprite.png"); } 28 | :host(.ice) { --image: url("images/ice-sprite.png"); } 29 | :host(.briefcase) { --image: url("images/briefcase-sprite.png"); } 30 | :host(.magic) { --image: url("images/magic-sprite.png"); } 31 | 32 | .username { 33 | width: 250px; 34 | background: indigo; 35 | transform: translateX(-100px); 36 | } 37 | 38 | .username-container { 39 | position: absolute; 40 | top: -50px; 41 | padding: 10px 20px; 42 | color: #fff; 43 | z-index: 20; 44 | font-family: EnterCommand, sans-serif; 45 | font-size: 35px; 46 | text-align: center; 47 | width: var(--width); 48 | } 49 | 50 | .container { 51 | width: var(--width); 52 | height: var(--height); 53 | background: var(--image); 54 | animation: idle 400ms steps(4) infinite; 55 | transform: translateX(-100%); 56 | position: relative; 57 | } 58 | 59 | :host([is-podium]) { 60 | transform: scale(50%); 61 | } 62 | 63 | :host([is-podium]) .container { 64 | transform: none; 65 | } 66 | 67 | @keyframes idle { 68 | 0% { background-position: 0; } 69 | 100% { background-position: -384px; } 70 | } 71 | `; 72 | } 73 | 74 | getType() { 75 | return this.classList.item(0); 76 | } 77 | 78 | spawn() { 79 | const keyframes = [{ transform: "translateX(350%)" }]; 80 | const options = { 81 | duration: getLevels().TIME_TO_TRANSLATE, 82 | fill: "forwards" 83 | }; 84 | 85 | this.animation = this.container.animate(keyframes, options); 86 | this.animation.finished.then(() => this.onStop()); 87 | } 88 | 89 | leave() { 90 | this.isMove = true; 91 | const keyframes = [ 92 | { transform: "translateX(350%)" }, 93 | { transform: "translateX(800%)" } 94 | ]; 95 | const options = { 96 | duration: getLevels().TIME_TO_TRANSLATE, 97 | fill: "forwards" 98 | }; 99 | this.animation = this.container.animate(keyframes, options); 100 | this.animation.finished.then(() => this.onExit()); 101 | } 102 | 103 | onStop() { 104 | this.sendToggle("bm2"); 105 | this.isMove = false; 106 | setTimeout(() => this.onContinue(), getLevels().TIME_TO_WAIT); 107 | } 108 | 109 | onContinue() { 110 | this.sendToggle("bm2"); 111 | this.leave(); 112 | } 113 | 114 | sendToggle(name) { 115 | const event = new CustomEvent("TOGGLE_MACHINE", { composed: true, bubbles: true, detail: { name } }); 116 | document.dispatchEvent(event); 117 | } 118 | 119 | sanitize(username) { 120 | this.isChickenified = true; 121 | 122 | const keyframes = [ 123 | { filter: "brightness(0) invert(1) drop-shadow(0 0 0 gold)" }, 124 | { filter: "brightness(0) invert(1) drop-shadow(0 0 10px gold)" }, 125 | { filter: "brightness(0) invert(1) drop-shadow(0 0 0 gold)" } 126 | ]; 127 | 128 | this.addName(username); 129 | 130 | this.sanitizeAnimation = this.container.animate(keyframes, 1000); 131 | this.sanitizeAnimation.finished.then(() => this.restore()); 132 | } 133 | 134 | addName(username) { 135 | const divContainer = document.createElement("div"); 136 | divContainer.classList.add("username-container"); 137 | const div = document.createElement("div"); 138 | divContainer.append(div); 139 | div.textContent = username; 140 | div.classList.add("username"); 141 | this.container.prepend(divContainer); 142 | 143 | const keyframes = [ 144 | { transform: "translate(0, 0)", opacity: 1 }, 145 | { transform: "translate(0, -25px)", opacity: 0 }, 146 | ]; 147 | const textOptions = { 148 | duration: 1000, 149 | delay: 1000, 150 | fill: "forwards" 151 | }; 152 | 153 | divContainer.animate(keyframes, textOptions); 154 | } 155 | 156 | restore() { 157 | this.classList.remove(this.getType()); 158 | } 159 | 160 | onExit() { 161 | const isChickenify = this.classList.item(0) === null; 162 | const event = new CustomEvent("CHICKEN_EXIT", { detail: { isChickenify }, composed: true, bubbles: true }); 163 | document.dispatchEvent(event); 164 | this.remove(); 165 | } 166 | 167 | connectedCallback() { 168 | this.render(); 169 | this.container = this.shadowRoot.querySelector(".container"); 170 | document.addEventListener("visibilitychange", (ev) => { 171 | if (document.hidden) this.pause(); 172 | else this.unpause(); 173 | }); 174 | } 175 | 176 | pause() { 177 | this.animation && this.animation.playState === "running" && this.animation.pause(); 178 | this.sanitizeAnimation && this.sanitizeAnimation.playState === "running" && this.sanitizeAnimation.pause(); 179 | } 180 | 181 | unpause() { 182 | this.animation && this.animation.playState === "paused" && this.animation.play(); 183 | this.sanitizeAnimation && this.sanitizeAnimation.playState === "paused" && this.sanitizeAnimation.play(); 184 | } 185 | 186 | render() { 187 | this.shadowRoot.innerHTML = /* html */` 188 | 189 |
190 |
`; 191 | } 192 | } 193 | 194 | customElements.define("chicken-npc", ChickenNPC); 195 | -------------------------------------------------------------------------------- /src/components/ChickenPodium.js: -------------------------------------------------------------------------------- 1 | class ChickenPodium extends HTMLElement { 2 | constructor() { 3 | super(); 4 | this.attachShadow({ mode: "open" }); 5 | } 6 | 7 | static get styles() { 8 | return /* css */` 9 | :host { 10 | --size: 32px; 11 | } 12 | 13 | .container { 14 | width: var(--size); 15 | height: var(--size); 16 | background: url("images/chicken.png"); 17 | animation: animated 400ms steps(4) infinite; 18 | transform: translate(var(--x, 0), 0); 19 | } 20 | 21 | @keyframes animated { 22 | 0% { background-position: 0px; } 23 | 100% { background-position: -256px; } 24 | } 25 | `; 26 | } 27 | 28 | init() { 29 | this.x = 0; 30 | } 31 | 32 | update() { 33 | const delta = -1 + Math.floor(Math.random() * 3); 34 | const x = this.x + delta; 35 | this.style.setProperty("--x", `${x}px`); 36 | } 37 | 38 | connectedCallback() { 39 | this.init(); 40 | this.render(); 41 | setInterval(() => this.update(), 500); 42 | } 43 | 44 | render() { 45 | this.shadowRoot.innerHTML = /* html */` 46 | 47 |
48 |
`; 49 | } 50 | } 51 | 52 | customElements.define("chicken-podium", ChickenPodium); 53 | -------------------------------------------------------------------------------- /src/components/ChickenPool.js: -------------------------------------------------------------------------------- 1 | import "@/components/ChickenNPC.js"; 2 | import "@/components/StopPlatform.js"; 3 | import { ICONS } from "@/modules/icons.js"; 4 | import { getLevels } from "@/modules/difficulty.js"; 5 | 6 | class ChickenPool extends HTMLElement { 7 | constructor() { 8 | super(); 9 | this.attachShadow({ mode: "open" }); 10 | this.isWaiting = false; 11 | } 12 | 13 | static get styles() { 14 | return /* css */` 15 | :host { 16 | display: inline-block; 17 | width: 100%; 18 | } 19 | 20 | .container { 21 | width: 100%; 22 | height: 200px; 23 | overflow-x: hidden; 24 | position: relative; 25 | display: flex; 26 | align-items: end; 27 | } 28 | 29 | /* 30 | stop-platform { 31 | position: relative; 32 | z-index: 10; 33 | } 34 | */ 35 | 36 | chicken-npc { 37 | position: absolute; 38 | } 39 | `; 40 | } 41 | 42 | connectedCallback() { 43 | this.render(); 44 | // this.startSpawnChicken(); 45 | } 46 | 47 | startSpawnChicken() { 48 | this.isWaiting = false; 49 | this.timer = setInterval(() => this.spawnChicken(), getLevels().TIME_TO_SPAWN_NEW_CHECK); 50 | } 51 | 52 | getMainChicken() { 53 | const chickens = [...this.shadowRoot.querySelectorAll(".container > *")]; 54 | const stopChicken = chickens.find(chicken => chicken.isMove === false); 55 | return stopChicken; 56 | } 57 | 58 | resetAndWait(time) { 59 | this.isWaiting = true; 60 | clearInterval(this.timer); 61 | this.timer = null; 62 | setTimeout(() => this.startSpawnChicken(), time); 63 | } 64 | 65 | spawnChicken() { 66 | if (document.hidden) { 67 | return; 68 | } 69 | 70 | const chicken = document.createElement("chicken-npc"); 71 | 72 | const n = Math.floor(Math.random() * ICONS.length); 73 | chicken.classList.add(ICONS[n]); 74 | 75 | this.shadowRoot.querySelector(".container").append(chicken); 76 | chicken.spawn(); 77 | } 78 | 79 | render() { 80 | this.shadowRoot.innerHTML = /* html */` 81 | 82 |
83 | 84 |
`; 85 | } 86 | } 87 | 88 | customElements.define("chicken-pool", ChickenPool); 89 | -------------------------------------------------------------------------------- /src/components/FlagSystem.js: -------------------------------------------------------------------------------- 1 | import "@/components/ChickenPodium.js"; 2 | 3 | const MAX_CHICKEN = 10; 4 | 5 | class FlagSystem extends HTMLElement { 6 | constructor() { 7 | super(); 8 | this.attachShadow({ mode: "open" }); 9 | this.lastStreak = null; 10 | } 11 | 12 | static get styles() { 13 | return /* css */` 14 | .container { 15 | width: 100%; 16 | height: 100%; 17 | display: flex; 18 | flex-direction: column; 19 | align-items: center; 20 | justify-content: end; 21 | } 22 | `; 23 | } 24 | 25 | addChicken() { 26 | const size = this.container.querySelectorAll("chicken-podium").length; 27 | if (size < MAX_CHICKEN) { 28 | const chicken = document.createElement("chicken-podium"); 29 | this.container.append(chicken); 30 | } 31 | } 32 | 33 | removeChickens() { 34 | const chickens = [...this.container.querySelectorAll("chicken-podium")]; 35 | chickens.forEach(chicken => chicken.remove()); 36 | } 37 | 38 | connectedCallback() { 39 | this.render(); 40 | this.container = this.shadowRoot.querySelector(".container"); 41 | } 42 | 43 | render() { 44 | this.shadowRoot.innerHTML = /* html */` 45 | 46 |
47 |
`; 48 | } 49 | } 50 | 51 | customElements.define("flag-system", FlagSystem); 52 | -------------------------------------------------------------------------------- /src/components/GameScreen.js: -------------------------------------------------------------------------------- 1 | import { setLevel, currentDifficulty } from "@/modules/difficulty.js"; 2 | import "@/components/BeltMachine.js"; 3 | import "@/components/ChickenBackground.js"; 4 | import "@/components/HomeCabin.js"; 5 | import "@/components/ChickenPool.js"; 6 | import "@/components/NumberList.js"; 7 | import "@/components/ChickenBoard.js"; 8 | import "@/components/ChickenCounter.js"; 9 | import "@/components/FlagSystem.js"; 10 | 11 | class GameScreen extends HTMLElement { 12 | constructor() { 13 | super(); 14 | this.attachShadow({ mode: "open" }); 15 | } 16 | 17 | static get styles() { 18 | return /* css */` 19 | :host { 20 | --goal-container-height: 1fr; 21 | --pool-container-height: 100px; 22 | --belt-container-height: 96px; 23 | --opts-container-height: 110px; 24 | 25 | display: inline-block; 26 | } 27 | 28 | .container { 29 | width: var(--game-width); 30 | min-height: var(--game-height); 31 | background: transparent; 32 | box-sizing: border-box; 33 | 34 | display: grid; 35 | grid-template-rows: var(--goal-container-height) var(--pool-container-height) var(--belt-container-height) var(--opts-container-height); 36 | } 37 | 38 | .goal-container { 39 | background: 40 | var(--level, none) no-repeat top 172px center, 41 | url("images/gallinerica-logo.png") no-repeat top 32px center; 42 | display: grid; 43 | grid-template-columns: 96px 1fr; 44 | } 45 | 46 | .chicken-board-container { 47 | display: flex; 48 | justify-content: end; 49 | } 50 | 51 | .twitch { 52 | font-family: EnterCommand, sans-serif; 53 | font-size: 2rem; 54 | color: #fff; 55 | display: flex; 56 | flex-direction: column; 57 | justify-content: end; 58 | text-align: center; 59 | position: relative; 60 | height: 115px; 61 | transform: translate(30px, 190px); 62 | z-index: 15; 63 | padding: 35px; 64 | border-radius: 2px; 65 | left: -25px; 66 | top: -15px; 67 | background: #000; 68 | box-shadow: 5px 5px 0 #0004; 69 | } 70 | 71 | .twitch span { 72 | color: gold; 73 | } 74 | 75 | .twitch input { 76 | margin-top: 5px; 77 | padding: 4px; 78 | border: 2px solid #fff; 79 | color: #fff; 80 | background: transparent; 81 | z-index: 10; 82 | font-family: EnterCommand, sans-serif; 83 | font-size: 2rem; 84 | color: gold; 85 | max-width: 175px; 86 | text-align: center; 87 | } 88 | 89 | .twitch button { 90 | border: 0; 91 | border-radius: 2px; 92 | padding: 6px 0; 93 | margin-top: 6px; 94 | font-family: EnterCommand, sans-serif; 95 | font-size: 2rem; 96 | color: #eee; 97 | background: linear-gradient(#0863a5, #1283d1); 98 | box-shadow: 0 7px 0 #0b5a92,0 8px 3px #0000004d; 99 | z-index: 15; 100 | transition: all 0.15s; 101 | cursor: pointer; 102 | } 103 | 104 | .twitch button:active { 105 | color: #888; 106 | background: linear-gradient(to bottom, #0006, #0008), linear-gradient(#0863a5, #1283d1); 107 | transform: translateY(5px); 108 | box-shadow: 0 2px 0 #0b5a92,0 3px 3px #0000004d; 109 | } 110 | 111 | .pool-container { 112 | display: flex; 113 | align-items: end; 114 | } 115 | 116 | chicken-board { 117 | transform: translateY(90px); 118 | } 119 | 120 | .belt-container { 121 | display: flex; 122 | align-items: end; 123 | } 124 | `; 125 | } 126 | 127 | showLevel(level) { 128 | this.style.setProperty("--level", `url("images/levels/${level}-x2.png")`); 129 | } 130 | 131 | connectedCallback() { 132 | this.render(); 133 | 134 | const button = this.shadowRoot.querySelector(".twitch button"); 135 | button.addEventListener("click", () => this.connectToTwitch()); 136 | 137 | const input = this.shadowRoot.querySelector(".twitch input"); 138 | input.addEventListener("keydown", (ev) => { 139 | ev.key.toLowerCase() === "enter" && button.click(); 140 | }); 141 | } 142 | 143 | startGame() { 144 | setLevel(1); 145 | this.showLevel(currentDifficulty); 146 | const chickenPool = this.shadowRoot.querySelector("chicken-pool"); 147 | const chickenBackground = this.shadowRoot.querySelector("chicken-background"); 148 | 149 | chickenPool.startSpawnChicken(); 150 | chickenBackground.start(); 151 | 152 | document.addEventListener("keydown", ({ key }) => { 153 | const isAllowed = /^1|2|3|4$/.test(key); 154 | if (isAllowed && !chickenPool.isWaiting) { 155 | setLevel(key); 156 | this.showLevel(currentDifficulty); 157 | chickenPool.resetAndWait(5000); 158 | } 159 | }); 160 | } 161 | 162 | connectToTwitch() { 163 | const channel = this.shadowRoot.querySelector(".twitch input").value.trim().toLowerCase().replace("#", ""); 164 | 165 | if (!channel) return; 166 | 167 | this.shadowRoot.querySelector(".twitch").remove(); 168 | 169 | // eslint-disable-next-line 170 | this.client = new tmi.Client({ 171 | channels: [channel] 172 | }); 173 | 174 | this.client.connect(); 175 | 176 | const numberList = this.shadowRoot.querySelector("number-list"); 177 | const chickenPool = this.shadowRoot.querySelector("chicken-pool"); 178 | const chickenBoard = this.shadowRoot.querySelector("chicken-board"); 179 | const flagSystem = this.shadowRoot.querySelector("flag-system"); 180 | 181 | this.startGame(); 182 | 183 | this.client.on("message", (channel, tags, message, self) => { 184 | const number = Number(message); 185 | const username = tags.username; 186 | const isNumber = /^[0-9]$/.test(message); 187 | 188 | if (isNumber) { 189 | const mainChicken = chickenPool.getMainChicken(); 190 | const mainType = mainChicken ? mainChicken.getType() : null; 191 | 192 | let okNumber = null; 193 | if (mainType) { 194 | okNumber = numberList.getNumber(mainType); 195 | } 196 | 197 | if (number === okNumber) { 198 | if (!mainChicken.isChickenified) { 199 | if (chickenBoard.lastWinner === username) { 200 | flagSystem.addChicken(); 201 | } else { 202 | flagSystem.removeChickens(); 203 | } 204 | mainChicken.sanitize(username); 205 | chickenBoard.addPoint(username); 206 | } 207 | } else if (okNumber) { 208 | if (currentDifficulty !== "easy") { 209 | chickenBoard.subPoint(username); 210 | } 211 | } 212 | } 213 | }); 214 | } 215 | 216 | render() { 217 | this.shadowRoot.innerHTML = /* html */` 218 | 219 |
220 | 221 |
222 | 223 |
224 |
225 | Conectar al canal: 226 | 227 | 228 |
229 | 230 | 231 |
232 |
233 |
234 | 235 |
236 |
237 | 238 | 239 | 240 | 241 | 242 |
243 |
244 | 245 |
246 |
`; 247 | } 248 | } 249 | 250 | customElements.define("game-screen", GameScreen); 251 | -------------------------------------------------------------------------------- /src/components/HomeCabin.js: -------------------------------------------------------------------------------- 1 | class HomeCabin extends HTMLElement { 2 | constructor() { 3 | super(); 4 | this.attachShadow({ mode: "open" }); 5 | } 6 | 7 | static get styles() { 8 | return /* css */` 9 | :host { 10 | --width: 96px; 11 | --height: 192px; 12 | 13 | position: relative; 14 | z-index: 10; 15 | } 16 | 17 | .container { 18 | width: var(--width); 19 | height: var(--height); 20 | background: url("images/cabin-sprite.png"); 21 | } 22 | `; 23 | } 24 | 25 | connectedCallback() { 26 | this.render(); 27 | } 28 | 29 | render() { 30 | this.shadowRoot.innerHTML = /* html */` 31 | 32 |
33 |
`; 34 | } 35 | } 36 | 37 | customElements.define("home-cabin", HomeCabin); 38 | -------------------------------------------------------------------------------- /src/components/NumberList.js: -------------------------------------------------------------------------------- 1 | import { getPermutation } from "@/modules/icons.js"; 2 | 3 | class NumberList extends HTMLElement { 4 | constructor() { 5 | super(); 6 | this.attachShadow({ mode: "open" }); 7 | } 8 | 9 | static get styles() { 10 | return /* css */` 11 | :host { 12 | 13 | } 14 | 15 | .container { 16 | border-top: 4px solid #000; 17 | background: #fff; 18 | height: 100%; 19 | display: flex; 20 | gap: 10px; 21 | justify-content: center; 22 | align-items: center; 23 | padding-top: 5px; 24 | box-sizing: border-box; 25 | } 26 | 27 | .item { 28 | display: flex; 29 | flex-direction: column; 30 | align-items: center; 31 | justify-content: center; 32 | } 33 | 34 | .circle { 35 | width: 58px; 36 | height: 58px; 37 | display: grid; 38 | place-items: center; 39 | } 40 | 41 | .item img { 42 | --size: 48px; 43 | 44 | image-rendering: crisp-edges; 45 | width: var(--size); 46 | height: var(--size); 47 | 48 | filter: 49 | drop-shadow(0 0 0 #000a) 50 | drop-shadow(1px 0 0 #000a) 51 | drop-shadow(0 1px 0 #000a) 52 | drop-shadow(-1px 0 0 #000a) 53 | drop-shadow(0 -1px 0 #000a) 54 | drop-shadow(0 0 2px #000a); 55 | } 56 | 57 | .item span { 58 | font-family: EnterCommand, sans-serif; 59 | font-size: 2rem; 60 | text-shadow: 0 0 2px #0006; 61 | } 62 | `; 63 | } 64 | 65 | getNumber(icon) { 66 | const values = Object.values(this.icons); 67 | const index = values.findIndex(item => icon === item); 68 | 69 | return index; 70 | } 71 | 72 | getIcon(number) { 73 | return this.icons[number]; 74 | } 75 | 76 | renderIcons() { 77 | this.icons = getPermutation(); 78 | 79 | const keys = Object.values(this.icons); 80 | const icons = keys.map((icon, index) => /* html */` 81 |
82 |
83 | 84 |
85 | ${index} 86 |
`); 87 | 88 | return icons.join(""); 89 | } 90 | 91 | connectedCallback() { 92 | this.render(); 93 | document.addEventListener("RANDOMIZE_NUMBER", () => this.render()); 94 | } 95 | 96 | render() { 97 | this.shadowRoot.innerHTML = /* html */` 98 | 99 |
100 | ${this.renderIcons()} 101 |
`; 102 | } 103 | } 104 | 105 | customElements.define("number-list", NumberList); 106 | -------------------------------------------------------------------------------- /src/components/StopPlatform.js: -------------------------------------------------------------------------------- 1 | class StopPlatform extends HTMLElement { 2 | constructor() { 3 | super(); 4 | this.attachShadow({ mode: "open" }); 5 | } 6 | 7 | static get styles() { 8 | return /* css */` 9 | :host { 10 | --size: 192px; 11 | } 12 | 13 | .container { 14 | width: var(--size); 15 | height: var(--size); 16 | background: url("images/stop-sprite.png"); 17 | transform: translate(290px, 0px); 18 | } 19 | `; 20 | } 21 | 22 | connectedCallback() { 23 | this.render(); 24 | } 25 | 26 | render() { 27 | this.shadowRoot.innerHTML = /* html */` 28 | 29 |
30 |
`; 31 | } 32 | } 33 | 34 | customElements.define("stop-platform", StopPlatform); 35 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: EnterCommand; 3 | src: 4 | url("fonts/entercommand.woff2") format("woff2"), 5 | url("fonts/entercommand.woff") format("woff"), 6 | url("fonts/entercommand.ttf") format("truetype"); 7 | } 8 | 9 | :root { 10 | --game-width: 768px; 11 | --game-height: 640px; 12 | } 13 | 14 | body { 15 | background: #1f1b26; 16 | } 17 | 18 | game-screen { 19 | display: block; 20 | width: var(--game-width); 21 | margin: auto; 22 | } 23 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Gallinérica 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 |
19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import "@/components/GameScreen.js"; 2 | -------------------------------------------------------------------------------- /src/modules/difficulty.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line 2 | export let currentDifficulty = "easy"; 3 | export let randomizeNumbersTimer = null; 4 | 5 | const DIFFICULTY = { 6 | easy: { 7 | TIME_TO_SPAWN_NEW_CHECK: 6000, 8 | TIME_TO_TRANSLATE: 6000, 9 | TIME_TO_WAIT: 4000 10 | }, 11 | normal: { 12 | TIME_TO_SPAWN_NEW_CHECK: 4000, 13 | TIME_TO_TRANSLATE: 5000, 14 | TIME_TO_WAIT: 2500, 15 | }, 16 | hard: { 17 | TIME_TO_SPAWN_NEW_CHECK: 2500, 18 | TIME_TO_TRANSLATE: 4000, 19 | TIME_TO_WAIT: 1500, 20 | }, 21 | extreme: { 22 | TIME_TO_SPAWN_NEW_CHECK: 2000, 23 | TIME_TO_TRANSLATE: 3000, 24 | TIME_TO_WAIT: 1000, 25 | } 26 | }; 27 | 28 | const LEVELS = { 29 | 1: "easy", 30 | 2: "normal", 31 | 3: "hard", 32 | 4: "extreme" 33 | }; 34 | 35 | export const NUMBERS = Object.fromEntries(Object.entries(LEVELS).map(([id, level]) => [level, id])); 36 | 37 | export const setLevel = (level) => { 38 | randomizeNumbersTimer = null; 39 | currentDifficulty = LEVELS[level]; 40 | if ((currentDifficulty === "hard") || (currentDifficulty === "extreme")) { 41 | enableRandomizeNumbers(); 42 | } 43 | const event = new CustomEvent("CHANGE_DIFFICULTY", { composed: true, bubbles: true, detail: currentDifficulty }); 44 | document.dispatchEvent(event); 45 | }; 46 | 47 | const enableRandomizeNumbers = () => { 48 | randomizeNumbersTimer = setInterval(() => { 49 | const event = new CustomEvent("RANDOMIZE_NUMBER", { composed: true, bubbles: true }); 50 | document.dispatchEvent(event); 51 | }, 60000); 52 | }; 53 | 54 | export const getLevels = () => DIFFICULTY[currentDifficulty]; 55 | -------------------------------------------------------------------------------- /src/modules/icons.js: -------------------------------------------------------------------------------- 1 | import { shuffle } from "@/modules/shuffle.js"; 2 | 3 | export const ICONS = [ 4 | "beer", 5 | "briefcase", 6 | "crown", 7 | "fire", 8 | "ice", 9 | "magic", 10 | "package", 11 | "radioactive", 12 | "rocket", 13 | "voltage" 14 | ]; 15 | 16 | export const getPermutation = () => { 17 | const icons = shuffle(ICONS); 18 | const entries = icons.map((item, index) => [index, item]); 19 | return Object.fromEntries(entries); 20 | }; 21 | -------------------------------------------------------------------------------- /src/modules/shuffle.js: -------------------------------------------------------------------------------- 1 | export const shuffle = (array) => { 2 | let m = array.length; 3 | let t; 4 | let i; 5 | 6 | while (m) { 7 | // Pick a remaining element… 8 | i = Math.floor(Math.random() * m--); 9 | 10 | // And swap it with the current element. 11 | t = array[m]; 12 | array[m] = array[i]; 13 | array[i] = t; 14 | } 15 | 16 | return array; 17 | }; 18 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import path from "node:path"; 3 | 4 | const isGitHubPages = true; 5 | const folderName = path.basename(process.cwd()) + "/"; 6 | const mode = process.env.NODE_ENV === "production" ? "production" : "development"; 7 | const base = mode === "production" && isGitHubPages ? "/" + folderName : "/"; 8 | 9 | export default defineConfig({ 10 | root: "src", 11 | base, 12 | mode, 13 | envDir: "../", 14 | publicDir: "../public", 15 | resolve: { 16 | alias: { 17 | "@": new URL("./src", import.meta.url).pathname 18 | } 19 | }, 20 | build: { 21 | outDir: "../dist", 22 | assetsDir: "./" 23 | } 24 | }); 25 | --------------------------------------------------------------------------------