truthsayer

Visualizes and manages Dune the Board Game state


License
MIT
Install
pip install truthsayer==0.10.10

Documentation

Truthsayer

This module allows to visualize the state of Dune the boardgame. The motivation for it is to build a bot allowing to play Dune online via Discord on the Truthsayer Discord channel.

Examples

You can generate a map of Arrakis as follows

from truthsayer.processor import Caretaker, OriginatorTruthsayer

meta = {
    'factions': {},
    'usernames': {},
    'user_ids': {},
    'texts': {
        'promo_top': 'Truthsayer Discord',
        'promo': 'Join us for more Dune games!',
        'game_id': '#21762',
        'game_turn': 6,
        'game_phase': 'Battle',
        'qr': 'https://discord.gg/VVYM22Hs2t',
        'commands': []
    }
}

originator = OriginatorTruthsayer(meta=meta)
caretaker = Caretaker(originator)

originator.render('images/originator/originator00.jpg')

originator.join(1, '@marek', '#467263')
caretaker.backup()

originator.join(5, '@renzokuken', '#387843')
caretaker.backup()

originator.join(3, '@zylwia', '#198264')
caretaker.backup()

originator.render('images/originator/originator01.jpg')

originator.join(2, '@andy', '#430293')
caretaker.backup()

originator.join(4, '@john', '#098532')
caretaker.backup()

originator.join(6, '@somedude', '#130539')
caretaker.backup()

originator.render('images/originator/originator02.jpg')

originator.randomize('factions')
caretaker.backup()

originator.render('images/originator/originator03.jpg')

originator.initgame()
caretaker.backup()

originator.render('images/originator/originator04.jpg')

originator.ship('emperor', 'plastic_basin', 'R13', 4)
caretaker.backup()

originator.render('images/originator/originator05.jpg')

originator.move('atreides', 'arrakeen', 'R10', 'hole_in_the_rock', 'R9', 3)
caretaker.backup()

originator.render('images/originator/originator06.jpg')

arrakis_cartography

We can move the storm, undo moves, cause Spiceblow and change sprite assets

originator.storm('R9')
caretaker.backup()

originator.render('images/originator/originator07.jpg')

originator.spiceblow('sihaya_ridge', 5)
caretaker.backup()

originator.render('images/originator/originator08.jpg')

# try to undo the move
caretaker.undo()

originator.render('images/originator/originator09.jpg')

originator.config('spice_token', 'spiceglow', 500)
caretaker.backup()

originator.render('images/originator/originator10.jpg')

arrakis_cartography

Now few examples how to draw cards and conduct the battle phase

# draw some cards
originator.draw('player_1', 'treachery')
caretaker.backup()

originator.draw('player_1', 'treachery')
caretaker.backup()

originator.draw('player_2', 'treachery')
caretaker.backup()

originator.draw('player_2', 'treachery')
caretaker.backup()

# initiate battle
hand_player_1 = originator.hand('player_1')
hand_player_2 = originator.hand('player_2')

print('player_1 hand')
print(hand_player_1)

print('player_2 hand')
print(hand_player_2)

originator.battle('player_1', 'player_2')
caretaker.backup()

originator.deployment('player_1', 3)
caretaker.backup()

originator.lead('player_1', 'thufir_hawat')
caretaker.backup()

originator.treachery('player_1', hand_player_1['cards'][0])
caretaker.backup()

originator.deployment('player_2', 4)
caretaker.backup()

originator.lead('player_2', 'alia')
caretaker.backup()

originator.treachery('player_2', hand_player_2['cards'][0])
caretaker.backup()

originator.render('images/originator/originator11.jpg', battle=True)

arrakis_cartography

Improve the Truthsayer experience

  1. To allow our bot to suggest territory names in commands try to convince Discord to increase the limits on number of choices from 25 to at least 42.

Credits

Game assets from Sorvan's website.

For vectorizing regions on the map we used the summerstyle editor.

For creating transparency on the battle wheels used online png tools.