Final Submission - Aranara

Ok, I submitted my final version.

I ended up with 12 levels. I was able to incorporate all of the gameplay elements that I developed all week and overall I am very happy with the game. I think there is plenty of polishing that can be done and lots of the ideas in the levels can be expanded upon. I will do that later after a bit of recuperation!

I never did get to the bottom of the music bug on OSX (I'm pretty sure it is pyglet or avbin) and on my linux box sometimes parts of the batch do not render properly. It looks like this might be a Catalyst driver issue.

Now I am looking forward to trying out the games from everyone else!

(log in to comment)

Comments

Here is the video of the completed game (even faithfully showing the music bug!).

http://youtu.be/gOxoX0vPu0k

The actual framerate is higher than this (usually 60fps on my Mac mini) but capturing the video slows it down quite a bit.

Download of the final game: http://media.pyweek.org/dl/17/Aranara/aranara-0.2.3.tar.gz

Git repository of the game: https://code.google.com/p/aranara/
I'm having problems running the game. I'm not sure it it's better to discuss it here, or just report it on the review form, but here it goes.

line 1387, in load return riff.WaveSource(filename, file) File
"/home/nuno/Jogos/pyweek/env/lib/python2.7/site-packages/pyglet/media/riff.py",
line 201, in __init__ 'AVbin is required to decode compressed media')
pyglet.media.riff.WAVEFormatException: AVbin is required to decode compressed media

I have installed AVbin from
http://avbin.github.io/AVbin/Home/Home.html

and got the message at the end of the

process: AVbin 10 successfully installed.

but still no luck.
In my experience is better to install AVBin 11 alpha in Linux: https://github.com/AVbin/AVbin/downloads

I had a lot of problems with AVBin 10 and some wave files (specially short ones).
Thanks for the report and sorry you are having problems.

I just checked my Linux box and the AVBin I downloaded for testing was v7 I think! (https://code.google.com/p/avbin/). This appears to be way out of date compared to what reidrac is pointing to but it did work on Linux Mint 13 (64-bit).

Let me know if you are still not able to get it to work. 

Paul

I'm sorry, I upgraded to AVBin 11 alpha for 64bit linux (I'm running Fedora 16), I uninstalled and re-installed pyglet and pymunk but I still get the same error :(

It seems that whatever is looking for AVbin can't find it in my system...
It's weird. May be it is related to pyglet version... I hope my game works in your system :D
f7f5 - the following is a bit hackish but should get you up and running, albeit with no sound at all ... (this might also work for other pyglet games although you might need to add methods to DummyPlayer)

Add the following to the end of aranara/sound.py

class DummyPlayer:
    def __init__(self, *args, **kw):
        pass
    def dummy(self, *args, **kw):
        pass
    play = pause = stop = queue = dummy
    playing = False
pyglet.resource.media = DummyPlayer
pyglet.media.Player = DummyPlayer
I believe you can get the same thing by setting the environment variable PYGLET_AUDIO=silent
Thx, after adding the DummyPlayer patch I can now play the game! (the env variable solution didn't work, by the way)
Great - many thanks for following up! 
I'm getting following error:
Traceback (most recent call last):
  File "C:\Users\Marek\Downloads\pyweek\aranara-0.2.3.tar\dist\aranara-0.2.3\run_game.py", line 23, in <module>
    aranara.__main__.main(options)
  File "C:\Users\Marek\Downloads\pyweek\aranara-0.2.3.tar\dist\aranara-0.2.3\aranara\__main__.py", line 25, in main
    pyglet.resource.reindex()
  File "C:\Python26\lib\site-packages\pyglet\resource.py", line 328, in reindex
    'Backslashes not permitted in relative path'
AssertionError: Backslashes not permitted in relative path
Ok, wow - that is interesting. I looked at the pyglet code and it is actually a bit of a weird combination of os.path manipulation and then hardcoded "/" stuff. Yikes.

Two approaches here  (I don't have a windows machine to check):

1. Change line 22 in aranara/__main__.py from

    pyglet.resource.path = [
        'data', os.path.join('data', 'levelicons'), os.path.join('data', 'music'),
        os.path.join('data', 'scified2002')]

to: 

    pyglet.resource.path = [
        'data', 'data/levelicons', 'data/music',
        'data/scified2002']


I think this should work as Python on windows treats forward and back slashes the same.

2. Change line 22 to 

    pyglet.resource.path = ['data']

AND

  Go into the "data" folder and copy the contents of the sub-folders "levelicons", "music" and "scified2002" into the "data" folder.

This is the sledgehammer approach but should work also.

Let me know if it works.
LOL, I just checked the documentation in pyglets resource.py file ...

"""Paths are always case-sensitive and forward slashes are always used as path
separators, even in cases when the filesystem or platform does not do this.
This avoids a common programmer error when porting applications between
platforms."""

So, in order to prevent a common programmer error where a programmer forgets to put platform independent code in there, pyglet creates a game bug when the programmer remembers to do the right thing ;)

I guess it is a trap to catch out a programmer who thinks he knows better than to read the documentation - consider me trapped!



Hmm... Thanks for solving the first error, that was just awkward from Pyglet team :) But now I'm getting another error... :( Almost looks like it's my destiny not to run this game...

Traceback (most recent call last):
  File "run_game.py", line 23, in <module>
    aranara.__main__.main(options)
  File "C:\Users\Marek\Downloads\pyweek\aranara-0.2.3.tar\dist\aranara-0.2.3\aranara\__main__.py", line 32, in main
    start = startscreen.StartScreen('start-screen', options)
  File "C:\Users\Marek\Downloads\pyweek\aranara-0.2.3.tar\dist\aranara-0.2.3\aranara\engine\world.py", line 35, in __init__
    self.batches = collections.OrderedDict()
AttributeError: 'module' object has no attribute 'OrderedDict'
OrderedDict was added in Python2.7 are you using an earlier version of Python?

Two possible solutions (there's always two!)

1. Upgrade python (or create a virtualenv)

2. I think the game doesn't actually need the OrderedDict and an ordinary dict will work so change line 35 in aranara/engine/world.py from,

        self.batches = collections.OrderedDict()

to

        self.batches = {}

I did a quick test and it seems OK. It might cause the wrong draw order and things might disappear from view although from my test I didn't spot anything.


Another option is to monkey-patch OrderedDict into your version of Python. But I wouldn't necessarily recommend that ;) https://pypi.python.org/pypi/ordereddict