{"id":43032086,"url":"https://github.com/davidchilin/werewolves_game","last_synced_at":"2026-03-02T10:04:07.840Z","repository":{"id":298993609,"uuid":"1001769057","full_name":"davidchilin/werewolves_game","owner":"davidchilin","description":"werewolves (mafia) self-hosted webgame server (python, apk). No Narator needed, does automatic death and vote logic.","archived":false,"fork":false,"pushed_at":"2026-02-22T08:34:38.000Z","size":2075,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-22T10:46:18.522Z","etag":null,"topics":["android","chaquopy","docker","flask","game","kotlin","mafia","multiplayer","multiplayer-browser-game","python","self-hosted","werewolves"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidchilin.png","metadata":{"files":{"readme":"README.de.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-14T01:44:16.000Z","updated_at":"2026-02-22T08:33:25.000Z","dependencies_parsed_at":"2026-03-02T10:04:00.763Z","dependency_job_id":null,"html_url":"https://github.com/davidchilin/werewolves_game","commit_stats":null,"previous_names":["davidchilin/werewolves_game"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/davidchilin/werewolves_game","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidchilin%2Fwerewolves_game","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidchilin%2Fwerewolves_game/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidchilin%2Fwerewolves_game/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidchilin%2Fwerewolves_game/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidchilin","download_url":"https://codeload.github.com/davidchilin/werewolves_game/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidchilin%2Fwerewolves_game/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29998095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T09:59:02.300Z","status":"ssl_error","status_checked_at":"2026-03-02T09:59:02.001Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","chaquopy","docker","flask","game","kotlin","mafia","multiplayer","multiplayer-browser-game","python","self-hosted","werewolves"],"created_at":"2026-01-31T08:06:17.675Z","updated_at":"2026-03-02T10:04:07.826Z","avatar_url":"https://github.com/davidchilin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[🇺🇸 English](README.md) | [🇬🇹 Español](README.es.md)\n![](https://repository-images.githubusercontent.com/1001769057/79681f17-e6ca-4261-bbb5-22fa20221af8)\nEin funktionsreiches, selbst gehostetes Echtzeit-Multiplayer-Spiel für soziale\nDeduktion. Entwickelt mit Python (Flask) und WebSockets, hat sich dieses Projekt\nvon einem einfachen Experiment zu einem voll spielbaren Partyspiel entwickelt,\ndas 24 einzigartige Rollen, mobile \"Pass-and-Play\"-Unterstützung, mehrere\nSprachen und komplexe Siegbedingungen unterstützt.\n[Installationsanleitung](#setup-und-ausführung) oder Serverprogramm\nherunterladen für\n[Android(apk) und Linux(x86)](https://github.com/davidchilin/werewolves_game/releases)\n\n## **Beschreibung**\n\nDieses Projekt ist eine webbasierte Implementierung des klassischen Partyspiels\nWerwölfe (Die Werwölfe von Düsterwald). Spieler (mindestens 4, idealerweise 7+)\ntreten einer Lobby mit einem einzigartigen Spielcode bei, erhalten geheim Rollen\nzugewiesen (Dorfbewohner, Wolf oder Seherin) und durchlaufen dann abwechselnd\n\"Nacht\"- und \"Tag\"-Phasen. Während der Nacht wählen die Wölfe heimlich einen\nSpieler aus, um ihn zu eliminieren, und die Seherin kann die Rolle eines\nSpielers untersuchen. Während des Tages diskutieren die Spieler und stimmen ab,\num jemanden zu lynchen, den sie für einen Wolf halten. Das Spiel unterstützt\nkomplexe Interaktionen: durch Amor verbundene Liebende, Kettenreaktions-Tode\n(Honigtopf/Jäger), Rollen mit Solo-Sieg (Serienmörder/Narr) und einen\n\"Geistermodus\", bei dem tote Spieler das Ergebnis noch beeinflussen können.\n\nDas Spiel ist so konzipiert, dass es neben einem separaten Video- oder\nSprachchat (wie _Jitsi Meet_ oder Zoom) gespielt wird, wo die\nEchtzeit-Diskussion und Täuschung stattfinden ODER persönlich unter Verwendung\nvon einem bis mehreren Geräten im **Pass-and-Play**-Modus.\n\n## **Hauptfunktionen**\n\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/lobby.jpg\" width=\"50%\" align=\"right\"/\u003e\n\n- **📱 Pass-and-Play-Modus:** Spielen Sie mit einem einzigen Telefon (oder\n  mehreren), das im Raum herumgereicht wird. Die Benutzeroberfläche leitet die\n  Spieler an, ihre Identität zu bestätigen, bevor ihr privater Rollenbildschirm\n  angezeigt wird.\n- **👻 Geistermodus:** Tote Spieler sind nicht nur Zuschauer. Wenn aktiviert,\n  haben Geister eine kleine Chance, während der Anklage- und\n  Lynch-Abstimmungsphase teilzunehmen.\n- **🎭 24 Einzigartige Rollen:** Einschließlich komplexer Rollen wie\n  **Alpha-Werwolf**, **Prostituierte**, **Anwalt** und **Serienmörder**.\n- シ **Mehrere Sprachen** - Spielen Sie ein einzelnes Spiel gleichzeitig in\n  mehreren Sprachen.\n- **🏆 Solo-Siegbedingungen:** Neutrale Rollen wie das **Monster**, der **Narr**\n  oder der **Demente Dorfbewohner** können alleine gewinnen und\n  Teamzugehörigkeiten ignorieren.\n\n- **Robuste Admin-Kontrollen:** Der erste Spieler, der beitritt, wird\n  Administrator und hat die Fähigkeit:\n  - Spieler aus der Lobby auszuschließen.\n  - Das Spiel zu starten, sobald genügend Spieler beigetreten sind (mindestens\n    4).\n  - Benutzerdefinierte Zeitdauern (in Sekunden) für die Nacht-, Anklage- und\n    Lynch-Abstimmungsphasen festzulegen.\n  - Einen neuen Spielcode festzulegen.\n  - Chat nur für Admins zu aktivieren.\n  - **Pass-and-Play** und **Geistermodus** einzuschalten.\n- **Persistente Sitzungen:** Spieler können ihren Browser aktualisieren oder\n  kurzzeitig die Verbindung trennen, ohne ihren Platz im Spiel zu verlieren\n  (obwohl der Timer möglicherweise inkorrekt ist).\n- **Live-Spiel-Updates und Chat:** Die Benutzeroberfläche aktualisiert sich für\n  alle Spieler in Echtzeit über WebSockets und zeigt Phasenwechsel,\n  Spielerstatus, Spielchat und Spielprotokoll-Ereignisse an.\n- **Dynamische Rollenzuweisung:** Zu Beginn des Spiels werden den Spielern\n  zufällig und geheim Rollen zugewiesen.\n  - Der \"Zufällige Rollen\"-Button berechnet eine ausgewogene Aufstellung\n    basierend auf Rollengewichtungen (positiv für Dorfbewohner, negativ für\n    Wölfe).\n- **Automatischer Spielablauf \u0026 Siegbedingungen:** Das Spiel durchläuft\n  automatisch die Phasen. Nach jedem Tod (durch einen Wolfsangriff, eine\n  Lynch-Abstimmung) prüft das System auf Siegbedingungen:\n  - **Dorfbewohner gewinnen:** Wenn alle Wölfe eliminiert wurden.\n  - **Wölfe gewinnen:** Wenn die Anzahl der lebenden Wölfe gleich oder größer\n    ist als die Anzahl der lebenden Nicht-Wölfe.\n  - **🏆 Solo-Siegbedingungen:** Neutrale Rollen wie das **Monster**, der\n    **Narr** oder der **Demente Dorfbewohner** können alleine gewinnen und\n    Teamzugehörigkeiten ignorieren.\n  - Wenn eine Siegbedingung erfüllt ist, wird allen Spielern ein \"Game\n    Over\"-Bildschirm angezeigt, der das gewinnende Team, den Grund für den Sieg\n    und eine Liste aller Spieler und ihrer finalen Rollen zeigt.\n\n## **Spielphasen**\n\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/game_over.png\" width=\"50%\" align=\"right\"/\u003e\n\n- **Nachtphase:**\n\n  - Die Phase endet, wenn entweder der Timer abläuft ODER alle Wölfe und die\n    Seherin ihre Aktionen eingereicht haben.\n  - Nach den Aktionen der Nacht prüft das Spiel, ob eine Siegbedingung erfüllt\n    wurde, bevor es fortfährt.\n\n- **Anklagephase:**\n\n  - Die Phase endet, wenn entweder der Timer abläuft ODER alle lebenden Spieler\n    eine Anschuldigung erhoben haben.\n  - Lebende Spieler stimmen ab, um eine Person anzuklagen.\n  - Geister haben eine 25%ige Chance anzuklagen.\n  - Eine Live-Zählung der Anschuldigungen wird neben dem Namen jedes Spielers\n    angezeigt.\n  - Tie-Break-Logik (Bei Gleichstand): Wenn es einen Gleichstand für den\n    meistbeschuldigten Spieler gibt:\n    - Wenn der Gleichstand zwischen nur zwei Spielern besteht, findet keine\n      Lynch-Abstimmung statt.\n    - Wenn der Gleichstand zwischen mehr als zwei Spielern besteht, wird die\n      Anklagephase einmal neu gestartet. Ein zweiter Gleichstand führt dazu,\n      dass keine Lynch-Abstimmung stattfindet.\n\n- **Lynch-Abstimmungsphase:**\n\n  - Wenn ein einzelner Spieler die meisten Anschuldigungen hat, beginnt ein\n    Prozess.\n  - Die Phase endet, wenn entweder der Timer abläuft ODER alle lebenden Spieler\n    abgestimmt haben.\n  - Lebende Spieler stimmen mit \"Ja\" oder \"Nein\", um den angeklagten Spieler zu\n    lynchen. Eine \"Ja\"-Mehrheit ist erforderlich. Geister haben eine 10%ige\n    Chance, während der Lynch-Abstimmung abzustimmen.\n  - Wenn der Timer abläuft, stimmt jeder nicht abstimmende Spieler standardmäßig\n    mit \"Nein\".\n  - Eine detaillierte Zusammenfassung, wer mit \"Ja\" und \"Nein\" gestimmt hat,\n    wird im Spielprotokoll angezeigt.\n  - Nach der Abstimmung prüft das Spiel, ob eine Siegbedingung erfüllt wurde,\n    bevor es zur Nacht übergeht.\n\n- **Allgemeine Tagesphasen-Aktionen:** Lebende Spieler können abstimmen, die\n  Tagesphase vorzeitig zu beenden (Minimum 30 Sekunden) und den Anklageprozess\n  zu starten. Wenn eine Mehrheit Schlafen wählt, wechselt das Spiel zur Nacht.\n\n## **Rollen**\n\nDas Spiel unterstützt jetzt **24 einzigartige Rollen**:\n\n### 🌻 Das Dorf\n\n- **Dorfbewohner (Villager):** Keine Kräfte. Müssen zusammenarbeiten, um alle\n  Werwölfe zu finden und zu eliminieren.\n- **Seherin / Zufällige Seherin (Seer):** Untersucht jede Nacht die Rolle eines\n  Spielers.\n- **Leibwächter (Bodyguard):** Schützt einen Spieler nachts vor dem Tod.\n- **Hexe (Witch):** Hat einen **Heiltrank** und einen **Gifttrank**.\n- **Jäger (Hunter):** Wenn er getötet wird, erschießt er ein Ziel seiner Wahl.\n- **Amor (Cupid):** Verlinkt zwei Liebende. Wenn einer stirbt, stirbt der\n  andere.\n- **Bürgermeister (Mayor):** Seine Stimme zählt als Tie-Breaker (bei\n  Gleichstand). Kann einen Nachfolger ernennen.\n- **Prostituierte (Prostitute):** Blockiert die Fähigkeit eines Spielers, indem\n  sie ihn besucht.\n- **Anwalt (Lawyer):** Macht einen Klienten am nächsten Tag immun gegen\n  Lynchjustiz.\n- **Enthüller (Revealer):** Kann sofort einen Wolf töten, stirbt aber selbst,\n  wenn er einen Dorfbewohner enthüllt.\n- **Märtyrer (Martyr):** Gewährt jemandem beim Sterben ein \"2. Leben\" (Rüstung).\n- **Zäher Dorfbewohner (Tough Villager):** Überlebt den ersten Anschlag auf sein\n  Leben.\n- **Wildes Kind (Wild Child):** Wählt ein Vorbild. Wenn das Vorbild stirbt, wird\n  es zum Werwolf.\n\n### 🐺 Das Rudel\n\n- **Werwolf (Werewolf):** Muss mit anderen Wölfen zusammenarbeiten, um\n  Dorfbewohner zu eliminieren, bis sie die Mehrheit haben.\n- **Alpha-Werwolf:** Gewinnt nur, wenn er der letzte überlebende Wolf ist.\n- **Rache-Werwolf (Backlash Werewolf):** Ein Wolf, der wie ein Jäger agiert,\n  wenn er getötet wird.\n- **Zäher Werwolf (Tough Werewolf):** Ein Wolf mit Rüstung (überlebt einen\n  Treffer).\n- **Hexenmeister (Sorcerer):** Arbeitet mit Wölfen zusammen. Kann Seher/Hexen\n  finden, aber nicht töten.\n\n### 🎭 Neutral \u0026 Solo (Chaos)\n\n- **Serienmörder (Serial Killer):** Tötet jede Nacht. Gewinnt, wenn er der\n  letzte Überlebende ist.\n- **Narr (Fool):** Gewinnt, wenn er selbst gelyncht wird.\n- **Dementer Dorfbewohner (Demented Villager):** Scheint gut zu sein, gewinnt\n  aber, wenn das Dorf zerstört wird.\n- **Monster:** Immun gegen Wolfsangriffe. Gewinnt, wenn es mit 1 Wolf allein\n  gelassen wird.\n- **Honigtopf (Honeypot):** Wenn er getötet wird, stirbt der Mörder\n  (Vergeltung).\n\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/game_screen.png\" width=\"80%\" align=\"center\"/\u003e\n\n## **Setup und Ausführung**\n\nUm dieses Projekt lokal auszuführen, befolgen Sie diese Schritte:\n\n1.  **Repository klonen:**\n\n    ```bash\n    git clone [https://github.com/davidchilin/werewolves_game.git](https://github.com/davidchilin/werewolves_game.git)\n    cd werewolves_game\n    ```\n\n    oder laden Sie werewolves_game-master.zip herunter und entpacken Sie es in\n    den Ordner werewolves_game.\n\n2.  **Bearbeiten** Sie die Datei `.env.werewolves`. Ändern Sie\n    _FLASK_SECRET_KEY_ zu etwas*langes_zufaelliges, \\_CORS_ALLOWED_ORIGINS* zur\n    gewünschten Webadresse des Spiels wie:\n    http://127.0.0.1:5000,http://ihre.ip.hier:5000,https://ihre.seite.hier:5000\n    ODER lassen Sie es leer, um CORS zu deaktivieren und jede Seite zu\n    verwenden.\n\n3.  **ENTWEDER** über Dockerfile ausführen (Schritte 3A \u0026 5) **ODER** über\n    docker-compose (Schritte 3B \u0026 5) **ODER** lokal installieren und ausführen\n    (Schritte 3C-5).\n\n    A. Docker bauen und ausführen. Sie können den im Browser verwendeten Port\n    zum Beispiel auf 8080 ändern: -p 8080:5000.\n\n    ```bash\n    docker build -t werewolves_game .\n    docker run -p 5000:5000 --name werewolves_game werewolves_game\n    ```\n\n    B. Docker Compose bauen und ausführen.\n\n    ```bash\n    docker compose -f dockerfiles/docker-compose.yml up --build\n    docker compose -f dockerfiles/docker-compose.yml up\n    ```\n\n    Für die nginx docker compose Version: bearbeiten Sie die Datei\n    `.env.werewolves`: NGINX_PORT auf den gewünschten Port (Standard 5000) und\n    server_name in nginx.conf\n\n    ```bash\n    docker compose -f dockerfiles/docker-compose-nginx.yml up --build\n    docker compose -f dockerfiles/docker-compose-nginx.yml up\n    ```\n\n    C. Erstellen und aktivieren Sie eine virtuelle Umgebung:\n\n    - Windows:\n\n      ```bash\n      python -m venv venv\n      .\\venv\\Scripts\\activate\n      ```\n\n    - macOS / Linux:\n      ```bash\n      python3 -m venv venv\n      source venv/bin/activate\n      ```\n\n4.  **Abhängigkeiten installieren:**\n\n    ```bash\n    pip install Flask Flask-SocketIO python-dotenv\n    ```\n\n5.  **App ausführen:**\n\n    ```bash\n    FLASK_APP=app.py flask run -h 0.0.0.0\n    ```\n\n    ODER alternativ für bessere Leistung und Sicherheit die Flask-App über Ihren\n    bevorzugten GAME_PORT und gunicorn ausführen:\n\n    ```bash\n    pip install gunicorn gevent\n    export GAME_PORT=5001\n    gunicorn --worker-class gevent -w 1 -b 0.0.0.0:$GAME_PORT app:app\n    ```\n\n    UND wenn Sie LetsEncrypt für SSL verwenden, können Sie gunicorn mit SSL\n    bereitstellen und Ihre Zertifikate mit `deploy_certs.sh` kopieren, auch\n    update `.env.werewolves` USE_HTTPS=false:\n\n    ```bash\n    sudo ./deploy_certs.sh cpu_user_name my.site.com\n    export GAME_PORT=5001\n    gunicorn --worker-class gevent -w 1 -b 0.0.0.0:$GAME_PORT   --certfile=./ssl_certs/fullchain.pem   --keyfile=./ssl_certs/privkey.pem   app:app\n    ```\n\n6.  **Zugriff auf das Spiel:** Öffnen Sie Ihren Webbrowser und gehen Sie zur\n    Webadresse und dem Port des Spiels, die in\n    `.env.werewolves CORS_ALLOWED_ORIGINS` eingestellt sind. Standard:\n    `http://127.0.0.1:5000`. Öffnen Sie mehrere Tabs oder Browser, um\n    verschiedene Spieler zu simulieren, die dem Spiel beitreten. Der anfängliche\n    Spielcode ist `W` und der erste Spieler, der beitritt, ist **Admin**.\n\n### Spielkonfiguration (config.py)\n\n- DEFAULT_LANGUAGE: Auf \"es\" oder \"de\" setzen, um den Serverstandard zu ändern.\n- TIME_NIGHT / TIME_ACCUSATION: Standarddauer ändern (Sekunden).\n- PAUSE_DURATION: Sekunden zum Pausieren zwischen Phasen (um Text zu lesen).\n- DEFAULT_ROLES: Welche Rollen bei einem Neustart automatisch ausgewählt sind.\n\n### Eigene Rollen hinzufügen\n\n1. roles.py: Erstellen Sie eine Klasse, die von Role erbt. Definieren Sie team,\n   night_action, etc.\n2. app.py: Importieren Sie Ihre neue Rolle und fügen Sie sie zum AVAILABLE_ROLES\n   Dictionary hinzu.\n3. static/game.js: Fügen Sie den Rollenschlüssel (const) hinzu und aktualisieren\n   Sie updateRoleTooltip Farben/Icons.\n4. static/en.json (und andere): Fügen Sie Name/Beschreibung zum \"roles\" Objekt\n   hinzu.\n\n### Lokalisierung / Sprachenübersetzung hinzufügen\n\nUm Ihre Sprache hinzuzufügen, müssen Sie eine Sprachdatei hinzufügen, zum\nBeispiel „static/de.json“ für Deutsch UND „templates/index.html“ bearbeiten\n(fügen Sie „option value“ und „loginTranslations“ hinzu).\n\n### Android App\n\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/android.jpg\" width=\"50%\" align=\"right\"/\u003e\n\nSehen Sie sich das unter\n[Releases](https://github.com/davidchilin/werewolves_game/releases) an. Stellen\nSie einfach sicher, dass sich alle Spieler im gleichen WLAN befinden. Alle in\nAndroid Studio zu erstellenden Dateien befinden sich in Ordner **android**.\nBewegen werewolves_game python, static, templates, img hinein\n`android/app/src/main/python/`\n\n### Lizenz\n\nVerbreitet unter der GNU GPL v3 Lizenz. Siehe [LICENSE](LICENSE) für weitere\nInformationen.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidchilin%2Fwerewolves_game","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidchilin%2Fwerewolves_game","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidchilin%2Fwerewolves_game/lists"}