1

I'll try to be both brief and thorough.

I am following the tcod Rouguelike tutorial at the following link:

http://rogueliketutorials.com/tutorials/tcod/

I am using PyCharm Community Edition, though I don't think that much matters. All was going well until the end of Part 4, where we implemented an FOV for the player. When I try to run the main engine using the following code (given in tutorial):

def recompute_fov(fov_map, x, y, radius=1, light_walls=True, algorithm=0):
libtcod.map_compute_fov(fov_map, x, y, radius, light_walls, algorithm)

The compiler spits out the following error:

File "C:\Users\drago\anaconda3\envs\Roguelike\lib\site-packages\tcod\libtcodpy.py", line 3320, in map_compute_fov
    m.compute_fov(x, y, radius, light_walls, algo)
AttributeError: 'NoneType' object has no attribute 'compute_fov'

Process finished with exit code 1

I at least know enough to know it's talking about the tcod package itself. But I didn't understand. Thankfully, PyCharm gave me a little insight...

PyCharm's insight on libtcod.map_compute_fov

So I followed its advice and changed libtcod.map_compute_fov to libtcod.map.compute_fov

It gave me another error:

File "C:\Users\drago\PycharmProjects\Roguelike\map_objects\fov_functions.py", line 13, in recompute_fov
    libtcod.map.compute_fov(fov_map, x, y, radius, light_walls, algorithm)
TypeError: compute_fov() takes from 2 to 5 positional arguments but 6 were given

Process finished with exit code 1

So, once again, PyCharm was able to tell me about this new function, and how it used different values. Instead of an FOV_map, it uses something called pov, and that pov requires an array of 2 values. It also has something to do with transparency, which at this point is going over my head for the purpose of what I want to accomplish.


I'm still learning Python, thus the tutorial. I get what an array is. But I have no idea how to make my existing code work with this new function/module (I get the two mixed up), since the old one was depreciated.

Any help would be appreciated.

I am using Python 3.8 as well.

deceze
  • 510,633
  • 85
  • 743
  • 889
R3TURN-0
  • 83
  • 1
  • 9
  • Does your script have the `import tcod as libtcod` import documented in the part 0 of the tutorial? `'NoneType' object has no attribute 'compute_fov'` is raised because `libtcod` is `None` when you call `libtcod.compute_fov(...)` – Aaron Jun 12 '20 at 12:52
  • I do... Both in the main engine and in fov render functions. – R3TURN-0 Jun 17 '20 at 15:07
  • I should have paid closer attention, the exception is raised from a class of the library and it's not `libtcod` that is `None`, sorry about the misdirection. My python is rusty and I'm not familiar with those libraries, I can only hope you'll find someone else to help ! – Aaron Jun 17 '20 at 15:34

1 Answers1

1

I was just having this same problem and found that putting

def recompute_fov(fov_map, x, y, radius, light_walls=True, algorithm=0):
    libtcod.map_compute_fov(fov_map, x, y, radius, light_walls, algorithm)

at end of the code in fov_functions.py fixed the

"AttributeError: 'NoneType' object has no attribute 'compute_fov'"

problem i was having like you.

here is how the tutorial author (as of part 4) had fov_functions.py set up:

import libtcodpy as libtcod


def initialize_fov(game_map):
    fov_map = libtcod.map_new(game_map.width, game_map.height)

    for y in range(game_map.height):
        for x in range(game_map.width):
            libtcod.map_set_properties(fov_map, x, y, not game_map.tiles[x][y].block_sight,
                                       not game_map.tiles[x][y].blocked)

    return fov_map


def recompute_fov(fov_map, x, y, radius, light_walls=True, algorithm=0):
    libtcod.map_compute_fov(fov_map, x, y, radius, light_walls, algorithm)

here is the link to the code as of part 4 that the author puts at the end of each part of the tutorial: https://github.com/TStand90/roguelike_tutorial_revised/tree/part4 this is where i found the fov_functions file that i compared to mine

Where the author puts the code at the end of each part: https://i.stack.imgur.com/AgjCp.png

Hopefully this helps you out!

Dakkah
  • 26
  • 1