Having problems with Libtcodpy

1k Views Asked by At

I'm writing a roguelike with libtcodpy. It works, but when I run this listing: http://kooneiform.wordpress.com/2009/03/29/241/ at the bottom of the page is a full listing and a few others I've tried, I get errors such as this:

FYI I'm on Windows and do have the libtcodpy.py, SDL.dll, libtcod-mingw.dll files and they do work when following the tutorial that is most popular for libtcodpy.

For the listing above I receive this specific error:

$ python roguelike_practice2.py
Traceback (most recent call last):
  File "roguelike_practice2.py", line 165, in <module>
    draw()
  File "roguelike_practice2.py", line 98, in draw
    libtcod.console_set_foreground_color(0, libtcod.white)
AttributeError: 'module' object has no attribute 'console_set_foreground_color'

I also on that same program encounter the exact same issue with console_set_background_color, console_print_left. None work. All with the same error.

For other listings such as this one:

#!/usr/bin/python

###imports###

import os

import libtcodpy as libtcod

###utility functions###

def get_key(key):
    if key.vk == libtcod.KEY_CHAR:
        return chr(key.c)
    else:
        return key.vk

###global constants and variables###


window_width = 46
window_height = 20

first = True
fov_px = 9
fov_py = 10
fov_recompute = True
fov_map = None
fov_colors =    {
                'dark wall' : libtcod.Color(0, 0, 100),
                'light wall' : libtcod.Color(130, 110, 50),
                'dark ground' : libtcod.Color(50, 50, 150),
                'light ground' : libtcod.Color(200, 180, 50)
                }
fov_init = False
fov_radius = 4

do =    {
        'up'    : (0, -1),
        'down'  : (0, 1),
        'right' : (1, 0),
        'left'  : (-1, 0)
        }

keys =  {
        'i' :                   do['up'],
        'k' :                   do['down'],
        'j' :                   do['left'],
        'l' :                   do['right'],
        libtcod.KEY_UP :        do['up'],
        libtcod.KEY_KP8 :       do['up']
        }

smap = ['##############################################',
        '#######################      #################',
        '#####################    #     ###############',
        '######################  ###        ###########',
        '##################      #####             ####',
        '################       ########    ###### ####',
        '###############      #################### ####',
        '################    ######                  ##',
        '########   #######  ######   #     #     #  ##',
        '########   ######      ###                  ##',
        '########                                    ##',
        '####       ######      ###   #     #     #  ##',
        '#### ###   ########## ####                  ##',
        '#### ###   ##########   ###########=##########',
        '#### ##################   #####          #####',
        '#### ###             #### #####          #####',
        '####           #     ####                #####',
        '########       #     #### #####          #####',
        '########       #####      ####################',
        '##############################################',
        ]


###drawing###


def draw():
    global fov_px, fov_py, fov_map, first
    global fov_init, fov_recompute, smap

    if first:
        wh = window_height
        ww = window_width
        first = False
        libtcod.console_clear(0)
        libtcod.console_set_fore(0, ww, wh, libtcod.white)
        libtcod.console_print_left(0, 1, 1, libtcod.BKGND_NONE,
                       "IJKL : move around")
        libtcod.console_set_fore(0, ww, wh, libtcod.black)
        libtcod.console_put_char(0, fov_px, fov_py, '@',
                     libtcod.BKGND_NONE)

        for y in range(window_height):
            for x in range(window_width):
                if smap[y][x] == '=':
                    libtcod.console_put_char(0, x, y,
                                 libtcod.CHAR_DHLINE,
                                 libtcod.BKGND_NONE)

    if not fov_init:
        fov_init = True
        fov_map = libtcod.map_new(window_width, window_height)
        for y in range(window_height):
            for x in range(window_width):
                if smap[y][x] == ' ':
                    libtcod.map_set_properties(fov_map, x, y, True, True)
                elif smap[y][x] == '=':
                    libtcod.map_set_properties(fov_map, x, y, True, False)

    if fov_recompute:
        fov_recompute = False
        libtcod.map_compute_fov(fov_map, fov_px, fov_py, fov_radius, True)

    for y in range(window_height):
        for x in range(window_width):
            affect, cell = 'dark', 'ground'
            if libtcod.map_is_in_fov(fov_map, x, y): 
                affect = 'light'
            if (smap[y][x] == '#'): 
                cell = 'wall'
            color = fov_colors['%s %s' % (affect, cell)]
            libtcod.console_set_back(0, x, y, color, libtcod.BKGND_SET)


###game state updates###


def update(key):
    global fov_py, fov_px, fov_recompute, smap

    key = get_key(key)
    if key in keys:
        dx, dy = keys[key]
        if smap[fov_py+dy][fov_px+dx] == ' ':
            libtcod.console_put_char(0, fov_px, fov_py, ' ',
                                           libtcod.BKGND_NONE)
            fov_px = fov_px + dx
            fov_py = fov_py + dy
            libtcod.console_put_char(0, fov_px, fov_py, '@',
                                           libtcod.BKGND_NONE)
            fov_recompute = True

###initialization and main loop###


font = os.path.join('fonts', 'arial12x12.png')
libtcod.console_set_custom_font(font, libtcod.FONT_LAYOUT_TCOD | libtcod.FONT_TYPE_GREYSCALE)

libtcod.console_init_root(window_width, window_height, 'Python Tutorial', False)

while not libtcod.console_is_window_closed():
    draw()
    libtcod.console_flush()
    key = libtcod.console_wait_for_keypress(True)
    update(key)
    if key.vk == libtcod.KEY_ESCAPE:
        break

I receive the following errors, again I have all the needed files in the folder and am on Windows.

Error for listing 2:

Traceback (most recent call last):
  File "roguelike_practice1.py", line 167, in <module>
    draw()
  File "roguelike_practice1.py", line 100, in draw
    libtcod.console_set_fore(0, ww, wh, libtcod.white)
  File "c:\Users\cshenkan\CloudStation\Programming\Libtcod\Project 2\libtcodpy.p
y", line 764, in console_set_fore
    _lib.TCOD_console_set_fore(con, x, y, col)
  File "c:\Python27\lib\ctypes\__init__.py", line 378, in __getattr__
    func = self.__getitem__(name)
  File "c:\Python27\lib\ctypes\__init__.py", line 383, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'TCOD_console_set_fore' not found

I run into this TCOD_console_set_fore error a bunch. But say I comment that out, I get the same error but with another function such as TCOD_console_set_back, and others.

Not sure why I'm getting these errors. Using Python 2.7.9 32 bit, and libtcod 1.5.1 I believe. Running Windows 7 64 bit. Keep in mind I can get other programs to run that don't require any of those set_foreground and variation functions, or the print_left function or whatever other functions aren't working. But I'm sure it one or two issues affecting all the functions that wont work. \

If anyone has any ideas, I've spent a ton of time looking online to no avail for info. And the forum for libtcod takes days for administrator approval to join - lame.

Anyway thanks in advance! Ask me any questions or if you need clarification.

2

There are 2 best solutions below

0
On BEST ANSWER

TCOD 1.5.1 renamed some functions, so that is why your two listings are crashing.

Version 1.5.1 renamed console_set_foreground_color to console_set_default_foreground,console_set_background_color to console_set_default_background, console_set_fore and console_set_back to console_set_char_foreground and console_set_char_background respectively, and console_wait_for_keypress has been replaced with sys_wait_for_event.

Also, console_print_left has been replaced by console_print_ex, which has an extra 'alignment' parameter between background and the string to print.

0
On

It appears that those functions were deprecated in 1.5.1. I can find them in 1.5.0, but neither in 1.5.1 nor 1.5.2. I think you would have to use console_print_ex or console_print_rect_ex instead. Otherwise you could off course switch back to 1.5.0.