EN /HU | Belépés

Impostor BBS

A Definitely not an Impostor puzzle/ARG játék utáni terminálja: aki végigjátszotta, kap egy személyes kódot, ide hozza a nevével együtt, és megtudja, mi jön ezután.

Elérhető: teletypegames.org:2324, böngészőben a bbsweb-en, és a TTG Gate BBS-en át is

Áttekintés

Ruby alkalmazás a rubbs gemre építve, mint a Teletype BBS. Maga a rubbs is ebből a boardból vált ki (rubbs 0.1.0). Egy porton két arca van:

  • Modern — ANSI/xterm, 80 oszlop (SyncTERM, NetRunner, PuTTY, bbsweb).
  • Commodore 64 — PETSCII 40×25-ön, ugyanaz a terminál saját képernyőkkel, C64-es terminálprogramhoz WiFi-modem mögött.

A hívás a rubbs BBS::Terminal kérdésével indul: a RETURN elfogadja a telnetválaszokból vett tippet, az 1 a modern arcot, a 2 a C64-et választja.

Egy hívás menete

  1. A board elkéri a játékos nevét és személyes kódját.
  2. A kódot egy sózott algoritmus fejti vissza, és a névhez ellenőrzi. A névből csak az első három karakter számít, levágás és nagybetűsítés után (a NORMAN és a NORBERT kódja ugyanaz).
  3. Jó kód esetén egy rövid azonosítás jön, aztán egy gratuláló képernyő és a játék utáni menü: a játékos visszajelzést és egy e-mail-címet hagyhat a hírekhez.
  4. A kihallgatás végén (vagy elutasított kódnál) a board megköszöni a hívást, és NO CARRIER-rel bont.

Minden munkamenet, sikeres vagy sem, egy sor a data/sessions.csv-ben:

TXT
session_id,timestamp,player_name,code,feedback,email

A sor a név és a kód beérkezésekor íródik, aztán helyben frissül, ahogy a visszajelzés és az e-mail megjön. Az IMPOSTOR_BBS_SESSIONS máshová teszi a fájlt; a compose a data/-t mountolja, így a rekordok túlélik az újraindítást.

Kód generálása

Egy játékosnév személyes kódját a parancssori eszköz adja, a nevet az IMPOSTOR_BBS_PLAYER_NAME-ből olvassa:

BASH
IMPOSTOR_BBS_PLAYER_NAME=norman bin/generate_code
# => 2J5GFN

Doorként

A repó két dolog: az impostor gem (lib/impostor*, screens/), vagyis a kihallgató terminál a szabályaival, és körülötte az önálló board. Egy másik rubbs-board behúzhatja a gemet, és doorként futtathatja ugyanezt a terminált, saját munkamenet-tárral (a Teletype BBS 2026-11-01-ig így tett; azóta ez a 2324-es board a terminál egyetlen helye):

RUBY
gem 'impostor', git: 'https://git.teletypegames.org/bbs/impostor-bbs.git'

require 'impostor'
sessions = Impostor.sessions_store('data/impostor_sessions.csv')
door :impostor, Impostor::Modern.flow(sessions: sessions), label: '&Impostor'

C64-es hívó az Impostor::Petscii.flow(sessions: sessions)-t kapja. A flow végén a door ENTER-t kér, és visszaadja a hívót a gazda-BBS-nek. A gazda Gemfile.lock-ja rögzíti a revíziót, így egy itteni változás csak az ottani lock-bumppal ér el a doorig.

A motorháztető alatt

Útvonal Mi ez
bbs.rb Belépési pont: egy ImpostorBBS, a BBS::Terminal a két arccal
lib/domain/impostor_bbs.rb A kompozíciós gyökér: beolvassa a környezetet, felépíti a munkamenet-tárat
lib/ui/modern.rb, lib/ui/petscii.rb A board arcai: a gem flow-jai, aztán elköszönés és NO CARRIER
lib/impostor.rb, lib/impostor/ A gem: a kihallgatás flow-ja, Impostor::Modern, Impostor::Petscii, a kódgenerátor (a Lua eredeti Ruby-portja)
screens/modern/, screens/petscii/ A két arc üdvözlő és gratuláló képernyője
bin/generate_code A kódgenerátor parancssori eszköze

Környezet: BBS_PORT, BBS_MAX_SESSIONS (rubbs) és IMPOSTOR_BBS_SESSIONS; az env-example az alapértékekkel együtt sorolja fel őket.

A masterre pusholva Woodpeckerből élesedik (RuboCop, compose-ellenőrzés, ci-deploy impostor-bbs); a konténer impostor-bbs, a /srv/stacks/impostor-bbs-ben, a nyilvános port 2324, a data/ megmarad a deployok között. Az entrypoint induláskor frissíti a rubbs-t. A többi board a BBS-hálózat oldalon van.