BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Jeu inspirer du liar's bar
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Une petite salle d'arcade en ligne. Chaque jeu vit dans son dossier sous public/games/, le site d'accueil les présente.檢視完整 README ↗
Une petite salle d'arcade en ligne. Chaque jeu vit dans son dossier sous
public/games/, le site d'accueil les présente.
Les jeux
server/street.js),
un mode Arcade (sept combats, son rival, un boss, une fin pour chaque
combattant, et des pièces à remettre), des replays (le moteur rejoue les
entrées : on revoit ses combats, on garde les plus beaux), des murs qu'on
brise pour passer dans la zone d'à côté, trois tenues par combattant, un
héros qui monte de niveau dans l'histoire et débloque des coiffures, des
tenues et des accessoires, des commandes tactiles réglables,
l'entraînement avec cinq défis de combos par combattant, un tutoriel
jouable, une difficulté Récit pour l'histoire, et la progression
sauvegardée en ligne avec le profil de l'arcade ; commandes tactiles sur
téléphone. Moteur dans public/shared/street/ (testé sans écran), dessin,
arènes, effets et cinématiques dans public/games/street-combat/js/.public/shared/fiesta/, tables en ligne dans server/fiesta.js.public/games/baltrou/js/musique.js) : un thème pour la table, un
pour la boutique, et un par boss. Le moteur
(public/shared/baltrou/) tient toute la run dans un objet JSON, hasard
compris : elle se range dans le navigateur et se reprend.Dans tous les jeux en ligne, une connexion qui tombe en pleine partie n'est
pas un départ : la place attend son joueur cinq minutes (un bot joue pour lui
quand c'est son tour), et il la reprend en revenant — même après avoir fermé
l'application. Le retour est automatique : la connexion se vérifie dès que
l'appli revient au premier plan, et rouvrir le jeu ramène droit dans la partie
(l'accueil de l'arcade propose aussi de la rejoindre). Voir server/hub.js,
public/shared/connexion.js et public/shared/reprise.js.
node server/index.js # ou : npm start
Aucune installation n'est nécessaire pour jouer en local : le serveur
n'utilise que les modules fournis par Node (≥ 18), y compris son
implémentation WebSocket, écrite à la main dans server/wsproto.js.
npm test # règles, équilibrage, bots, parties en ligne
Huit champions, 30 PV chacun. Chaque tour alterne un recrutement — de l'or, une taverne à rangs, un plateau de sept places — et un combat automatique contre un autre survivant. Le perdant perd le rang de taverne du vainqueur plus les étoiles de ses survivants, sous un plafond qui monte avec les tours.
TEMPO partagée avec le serveur, qui sait ainsi
quand relancer le recrutement.modes.js) : classique ; Quête (au tour 3, une quête parmi trois, qui
rapporte un serviteur exclusif, des cartes spéciales ou de l'or) ;
Anomalie (une ou deux règles spéciales pour toute la table). En local,
BRASIER_MODE=quete ou anomalie impose le genre.agir que les joueurs : mêmes
règles, même or, même réserve. Ils prennent les chaises vides au lancement,
et la chaise de quiconque quitte la partie en cours.Un jeu de rôle solo. On choisit un seul héros parmi cinq ; il part niveau 1 au pied du donjon. L'histoire tient en dix chapitres : cinq pour monter jusqu'au Dragon Cendré, cinq pour descendre vers ce qu'il gardait. Chaque chapitre a son boss, sa cinématique, et se débloque quand on l'atteint ; l'écran « Chapitres » les fait défiler et permet d'y recommencer une aventure.
shared/raid/carte.js) : chaque acte est une carte à chemins,
sept paliers et le boss au sommet. On choisit sa prochaine salle parmi
celles que son chemin relie : combat, élite, événement, marchand, feu de
camp, trésor, rencontre.personnages.js) : des compagnons se présentent en route —
toujours après le boss des trois premiers actes — jusqu'à quatre
personnages. Chacun a ses points de vie et de mana, son niveau (jusqu'à 12),
ses deux sorts (l'ultime s'apprend au niveau 3) et trois pièces
d'équipement (equipement.js) : arme, armure, bijou.bataille.js) : chaque manche, tout le monde agit une fois,
du plus rapide au plus lent. À son tour, un personnage attaque, lance un
sort, se défend ou utilise un objet. Les ennemis annoncent leur attaque
chargée à l'avance ; cinq écoles de magie se percent en cycle
(×1.5 / ×0.7). Les rencontres se règlent sur la taille du groupe.aventure.js) : expérience et or à chaque victoire, un
don à choisir aux niveaux 3, 5, 7 et 9, la chance qui pèse sur les
critiques, le butin et les choix risqués, et des événements dont les
réponses rendent plus fort, coûtent de la vie ou pèsent sur les boss à
venir.talents.js, reliques.js) : un point de
talent par niveau à placer dans deux branches par rôle ; des reliques de
groupe lâchées par les boss, vendues en boutique ou gagnées en quête ; deux
quêtes proposées par acte. En combat, chaque effet en cours se lit en
pastille verte ou rouge, et se détaille en touchant le combattant.games/raid/js/histoire.js, cinematique.js).eveils.js) : un compagnon revenu de voyage gagne une
compétence d'éveil, propre à chaque personnage.L'équilibrage est mesuré, pas deviné : un joueur automatique (ia.js, le
même que le bouton « Auto » du combat) joue des aventures entières en tête de
série fixe. Il sort du premier combat avec les deux tiers de sa vie, perd de
temps en temps contre un boss, et arrive au Dragon avec un groupe de quatre.
Les personnages et les créatures sont dessinés en pixel art paramétrique : des grilles de 16×16 décrites en données, colorées par l'école, teintées par le peuple — un orc n'a pas la peau d'un nain — et décalées pour chaque personnage. Le reste de l'animation — l'élan, le cut-in, l'encaissement, la chute — est affaire de transformations CSS déclenchées par les événements que renvoie le moteur : rien n'apparaît à l'écran qui ne soit passé par une règle.
Tout est original : noms, personnages, sorts, bestiaire et dessins. Seuls les codes du genre sont repris.
On entend un son de une à deux secondes et demie, puis on l'imite au micro. Le moteur compare chaque prise au modèle sur trois axes — mélodie (45 %), rythme (35 %) et attaques (20 %) — par autocorrélation de hauteur et corrélation d'enveloppes. Le silence qui entoure la prise est retiré avant de noter, pour la référence comme pour le joueur : sans cela, une imitation parfaite enregistrée dans une fenêtre de quatre secondes ne valait qu'une quarantaine de points.
À partir de la deuxième manche, une roue distribue bonus et sabotages. Un sabotage déforme la restitution — saturée, hachée, en écho ou remplacée par un canard — mais jamais la note, calculée sur le signal propre.
Deux équipes de trois. Les cartes arrivent toutes seules en main ; chacune coûte du ki, qui remonte d'autant plus vite que le combattant est rapide.
Les combattants sont dessinés en pixel art, générés à partir de grilles de 16×16 décrites en données plutôt qu'en images : cinq poses — repos, garde, frappe, encaisse, vaincu — déclinées en trois carrures selon les statistiques, et colorées par une palette propre à chacun. Aucun fichier à charger, donc rien qui manque hors connexion.
Le combat avance par ticks de 100 ms. Les joueurs n'attendent pas leur tour : ils envoient des intentions que le moteur applique au tick suivant. C'est ce qui donne la nervosité d'un jeu d'action tout en restant synchronisable sur le réseau, les actions étant discrètes.
L'équilibrage est tenu par les tests : chaque combattant dispose du même budget de points, et une simulation vérifie qu'aucun n'écrase ni ne subit le roster, et que les trois niveaux de difficulté sont bien ordonnés.
Vingt cartes : 6 Rois, 6 Dames, 6 As, 2 Jokers. À chaque manche la table réclame une figure, et chacun reçoit cinq cartes.
public/
index.html accueil du hub
css/hub.css
sw.js service worker : installation et jeu hors connexion
manifest.webmanifest identité « Insert Coin »
icons/
shared/ moteurs de règles, partagés client ⇄ serveur
engine.js Liar's Saloon : règles pures, aléa injecté
ai.js Liar's Saloon : bots
hasard.js aléa déterministe, partagé par les jeux
zenith/ ZÉNITH : roster, moteur, adversaires, sprites
mimic/ ÉCHO : analyse du son, sons de référence, manches
brasier/ BRASIER : serviteurs, héros, combat, partie, bots
raid/ RAID : écoles, héros, bestiaire, personnages,
équipement, carte, bataille, aventure, sprites, ia
skullking/moteur.js SKULL KING : cartes, plis, points, partie, bots
games/liars-saloon/
index.html
manifest.webmanifest identité « Liar's Saloon »
icons/
css/{base,menu,table}.css
js/{main,ui,offline,online,sfx}.js
games/zenith/ même forme : index, manifest, icônes, css, js
games/brasier/
js/{main,net,ui,arene,regles,sfx}.js navigation, réseau, recrutement, combat rejoué
games/echo/
js/{main,offline,online}.js navigation, partie sur un appareil, en ligne
js/{karaoke,avatars}.js courbe en direct, photos et bonhommes
js/{ui,audio,regles}.js rendu, micro et sabotages, règles
games/raid/
js/{main,combat,textes,regles,sfx}.js écrans de l'aventure, combat, textes, règles, sons
games/skull-king/
js/{main,table,enligne}.js solo, dessin de la table, partie en ligne
js/{cartes,score,regles,sfx}.js dessin des cartes, feuille de score, règles, sons
server/
index.js serveur autonome : statique + WebSocket
wsproto.js RFC 6455 minimal, sans dépendance
hub.js routeur : dirige chaque connexion vers son jeu
saloon.js salons de Liar's Saloon
zenith.js arènes de ZÉNITH
mimic.js salons d'ÉCHO
brasier.js tables de BRASIER, bots compris
skullking.js tables de SKULL KING, bots compris
fiesta.js tables de FIESTA, ordis compris
api/
ws.js même logique, exposée comme Function Vercel
test/
engine.test.js Liar's Saloon
zenith.test.js ZÉNITH
echo.test.js ÉCHO
raid.test.js RAID
skullking.test.js SKULL KING
enligne.test.js sessions et reprises en ligne, tables de SKULL KING
RAID n'a pas de module serveur : c'est un jeu solo, tout tient dans l'onglet.
Deux principes structurent le tout :
public/shared/ ne
connaissent ni le DOM ni Node. Le mode hors-ligne les fait tourner dans
l'onglet ; le mode en ligne les fait tourner sur le serveur. Les deux
produisent les mêmes états, donc l'interface est identique dans les deux
cas — et les règles ne peuvent pas diverger entre les modes.public/games/<slug>/.GAMES dans public/index.html.Le dépôt se déploie tel quel sur Vercel : public/ est servi en statique et
api/ws.js devient une Function WebSocket.
Limite du mode en ligne sur Vercel. Les salons vivent en mémoire. Les Functions pouvant être servies par plusieurs instances, deux joueurs arrivant sur des instances différentes ne se verraient pas. À faible trafic (des amis qui se rejoignent en même temps) cela fonctionne. Pour un usage plus large, faites tourner
server/index.jssur une machine unique (Railway, Fly, Render, un VPS…), qui n'a aucune dépendance.
Le site est une application installable (PWA) : depuis le navigateur du téléphone, « Ajouter à l'écran d'accueil » (Safari : bouton Partager ; Chrome : menu ⋮) pose une icône qui ouvre le jeu en plein écran, sans barre d'adresse.
Chaque jeu est installable séparément, avec sa propre icône et son propre point d'entrée : le hub Insert Coin depuis l'accueil, puis RAID, ÉCHO, ZÉNITH et Liar's Saloon depuis leurs pages.
Une fois la page visitée une première fois, public/sw.js met la coquille en
cache : le mode hors-ligne devient jouable sans aucune connexion, en
avion comme dans le métro. Le mode en ligne, lui, a évidemment besoin du
réseau. La stratégie de cache est « réseau d'abord, cache en secours » : une
mise à jour du site arrive dès que la connexion revient, sans risque de
servir une version périmée.
La mise en page s'adapte aux deux orientations. En paysage — où la hauteur est la ressource rare — le tapis se dimensionne sur la hauteur disponible et la barre du bas passe en ligne, pour rendre au jeu la place des boutons.
prefers-reduced-motion est respecté : la distribution, la rotation du
barillet et les secousses d'écran sont réduites ou supprimées. Tout est
jouable au clavier — Entrée pour poser, L pour accuser, Échap pour
fermer les règles. Le son se coupe depuis le menu et le choix est mémorisé.