npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

werewolf-brain

v2.2.2

Published

Werewolf game brain

Downloads

23

Readme

Build Status

Werewolf-Brain

Werewolf-Brain (or wwb) is a JavaScript library for the creation of scenarios to play the party card game Ultimate Werewolf. There are several ways to craft fun games with this library. For more on usage, check out the examples section below.

Installing

If you use npm, npm install werewolf-brain. Otherwise, download the files from here and add them to the project.

What does it do?

Creates new scenarios based on the number of players, or available cards, given a template and the script for the night calls. Moderators can then use these scenarios to set up Werewolf games. The number of players is not limited. If the current deck of cards can't have a game with all the players, the library will give you a game with the maximum number of players that it could calculate in 5000 tries.

We use a game object to describe a scenario. This object contains the number of players, the game weight, the selected language pack lang and the deck itself. The game weight gives you an idea of how balanced is the game. Positive weight means a game in favor to the Villagers, negative means the opposite: a game in favor to the other non-Villagers cards. The deck is an array of cards, you can find the details in the next section.

Game Object

Game for p players, weight w and the cards ( v Villagers and f Werewolves, m masons, etc. ). Each card has a role and a description, which depends on the selected language pack en.

    const game = {
        deck : [
            { key: 'villager', amount: v, role: 'Villager', description: 'Villager description'},
            { key: 'werewolf', amount: f, role: 'Werewolf', description: 'Werewolf description'},
            { key: 'mason', amount: m, role: 'Mason', description: 'Mason description'}
        ],
        language: en,
        weight : w,
        players : p
    };

Templates

| Card \ Template | Basic | Novice | Amateur | Wolfpack | Competent | Vampires | |-----------------|-------|--------|---------|----------|-----------|----------| | Apprentice Seer | - | - | - | - | 1 | - | | Big Bad Wolf | - | - | - | 1 | - | - | | Bodyguard | - | - | - | - | 1 | - | | Cult Leader | - | - | - | - | 1 | - | | Cupid | - | - | - | - | 1 | - | | Cursed | - | - | - | - | 1 | 1 | | Diseased | - | - | - | - | 1 | - | | Doppelgänger | - | - | - | - | 1 | - | | Dream Wolf | - | - | - | 1 | - | - | | Drunk | - | - | - | - | 1 | 1 | | Fruit Brute | - | - | - | 1 | - | - | | Lone Wolf | - | - | - | 1 | - | - | | Lycan | - | - | - | - | 1 | - | | Martyr | - | - | - | 1 | - | - | | Mason | - | - | - | - | 3 | 3 | | Mayor | - | 1 | 1 | 1 | 1 | 1 | | Minion | - | - | - | - | 1 | - | | Prince | - | - | 1 | 1 | 1 | 1 | | Seer | - | 1 | 1 | 1 | 1 | 1 | | Sorcerer | - | - | - | - | 1 | 1 | | Spellcaster | - | - | - | - | 1 | 1 | | Tanner | - | - | 1 | - | 1 | 1 | | Vampire | - | - | - | - | - | 8 | | Villager | 20 | 20 | 20 | 20 | 20 | 20 | | Werewolf | 12 | 12 | 12 | 12 | 12 | 12 | | Wild Child | - | - | - | - | 1 | - | | Witch | - | - | - | - | 1 | 1 | | Wolf Cub | - | - | - | - | 1 | 1 |

Examples

Get all template registered

    const wwb = require('werewolf-brain');
    const templates = wwb.getDecks();

Get all cards registered

    const wwb = require('werewolf-brain');
    const cards = wwb.getCards();

Cards Object

    const cards = { 
        apprentice_seer: 4,
        aura_seer: 3,
        beholder: 2,
        big_bad_wolf: -9,
        bloody_mary: 1,
        bodyguard: 3,
        bogeyman: -6,
        chupacabra: 4,
        count_dracula: -2,
        cult_leader: 1,
        cupid: -2,
        cursed: -3,
        dire_wolf: -4,
        diseased: 3,
        doppelganger: -2,
        dream_wolf: -5,
        drunk: 3,
        fortune_teller: 0,
        fruit_brute: -3,
        ghost: 2,
        hoodlum: 0,
        hunter: 3,
        insomniac: 3,
        leprechaun: 5,
        little_girl: 0,
        lone_wolf: -4,
        lycan: -1,
        mayor: 2,
        mason: 2,
        martyr: 3,
        minion: -6,
        moderator: 0,
        nostradamus: 1,
        old_hag: 1,
        old_man: 0,
        pacifist: -1,
        p_i: 3,
        priest: 3,
        prince: 3,
        sasquatch: -2,
        seer: 7,
        sorcerer: -3,
        spellcaster: 1,
        tanner: 1,
        the_count: 5,
        thing: 3,
        tough_guy: 3,
        troublemaker: 2,
        vampire: -7,
        village_idiot: 2,
        villager: 1,
        virginia_woolf: -2,
        werewolf: -6,
        wild_child: 0,
        witch: 4,
        wolf_cub: -8,
        wolf_man: -9,
        wolverine: -4 
    };

Get available language packs

    const wwb = require('werewolf-brain');
    const languages = wwb.getLanguages();

Create new scenario

The function getGame allows you to start a new game using all the cards currently registered and the default language which is English (en). In this example we are starting a new game with 8 players. The function will return a game object which is described above.

    const wwb = require('werewolf-brain');
    const players = 8;
    const game = wwb.getGame(players);

You can customize the game passing an option object as an aditional parameter. The next example creates a game in Spanish.

    const wwb = require('werewolf-brain');
    const players = 8;
    const options = { 
        language: 'es'
    }
    const game = wwb.getGame(players, options);

Night calls

The function getScriptFromDeck gives you the calls you need at night to moderate a game.

    const wwb = require('werewolf-brain');
    const players = 8;
    const game = wwb.getGame(players);
    const calls = wwb.getScriptFromDeck(game.deck);

If you need the calls in another language, pass the desired as follows.

    const wwb = require('werewolf-brain');
    const players = 8;
    const game = wwb.getGame(players);
    const calls = wwb.getScriptFromDeck(game.deck, 'es');

Create a new scenario using a template

The function getGame lets you start a new game with only the template cards. In this example we need a game for 12 players who only know about the cards of Werewolves, Villagers, Seer and Mayor cards. In this case, which is intended for new players, the Novice template is an excellent option. The function will return a game object.

    const wwb = require('werewolf-brain');
    const players = 12;
    const options = { 
        deckName: 'Novice'
    };
    const game = wwb.getGame(players, options);

Create a new scenario using custom template or cards

The function getGame allows you to start a new game using a custom deck. This feature enables the creation of new roles or the use of more cards than the ones included in a single bundle. In this example we are adding another seer (normally 1), some aditional villagers (normally 20) and a new role Van Helsing (this new role has the ability to chase vampires every night). The function will return a game object.

Note: using this function requires an update to the language pack when new cards are added. For each new card, add the role and the description in the desired language.

    const wwb = require('werewolf-brain');
    const players = 17;
    const customCards = { 
        mason: 3,
        minion: 1,
        prince: 1,
        seer: 1,
        spellcaster: 1,
        tanner: 1,
        vampire: 8,
        van_helsing: 1,
        villager: 30,
        werewolf: 12,
        wolf_cub: 1,
    };
    const options = { 
        deck: customCards
    };
    const game = wwb.getGame(players, options);

Create new unfair scenario

The function getGame gives you the ability to start a new game with a higher rate of unbalance using all cards currently registered. In this example we are starting a new unfair game with 12 players. The function will return a game object.

    const wwb = require('werewolf-brain');
    const players = 12;
    const options = { 
        mode: 'CHAOS'
    };
    const game = wwb.getGame(players, options);

Note: use the function getModes to check current game modes.

Create a new unfair scenario using a template

The function getGame allows you to start a new unfair game with the template cards only. In this example we are creating an unfair game for 9 players who know all 'Amateur' template cards.

    const wwb = require('werewolf-brain');
    const players = 9;
    const options = { 
        deckName: 'Amateur',
        mode: 'CHAOS'
    };
    const game = wwb.getGame(players, options);

Create a new unfair scenario using custom template or cards

The function getGame allows you to start a new unfair game using a custom deck. In this example we are adding another martyr (normally 1), some aditional Werewolves (normally 12) and a new role Serial Killer this new role visits a house and kills everyone every night. The function will return a game object.

Note: using this function requires an update to the language pack when new cards are added. For each new card, add the role and the description in the desired language.

    const wwb = require('werewolf-brain');
    const players = 22;
    const customCards = { 
        martyr: 2,
        mason: 3,
        minion: 1,
        prince: 1,
        seer: 1,
        serial_killer: 1,
        spellcaster: 1,
        tanner: 1,
        vampire: 8,
        villager: 20,
        werewolf: 18,
        wolf_cub: 1,
    };
    const options = { 
        deck: customCards,
        mode: 'CHAOS'
    };
    const game = wwb.getGame(players, options);