PyWeek - Back to the drawing board - feedback
mit-mit
Cosmologicon
Cool environment! I like how you can decide to take shortcuts across the land if you know where you're going. The map seems pretty interesting. I wish there were just a couple landmarks so I could get a better sense for it all and strategize a route. Moving is so slow it's hard to figure out routes through trial and error. I found the controls pretty frustrating but that's typical for me for rowing games. I never got good at avoiding the ground, and I only ever got two animals before 5 minutes were up.
DR0ID
besides of the nice graphics there was not much gameplay. Didn't spot any animal.
Also it is somewhat funny to row the canoe over land :D
Tee
I haven't seen you submit a game in a while so I was pleasantly surprised to see your game here! :) The atmosphere is great, I like the overall concept of finding animals in a jungle river. I didn't understand however how to take a picture of an animal, I just paddled over some crocodiles, and I was also consistently running my boat ashore. So while I like what you were going for, I didn't quite get how to play it. Otherwise, I thought the visuals and feel were very cool. Hope to keep seeing you around!
ntoll
OK. That I had to install `uv` to make it work was a blip and made getting things going a bit fiddly.
Once started: this is a beautiful looking game. The voiceover artist totally nailed the Australian accent, although I wasn't sure what an Australian was doing in the Amazon rainforest..?!?! :-P
FYI, you sit in a canoe, and kneel in a kayak (or is it the other way around, I can never remember?).
More seriously, movement was a bit of an issue since I tended to over-compensate as I tried to steer and often ended up stuck on the bank or going round in circles. Clearly this is simply a game balance thing, but some way to reset without having to kill the game and start again when I got into a sticky situation would have been good.
Congratulations on the game!
speedlimit35
I tried uv install and creating virtual environment using python 3.12 on M2 Mac. In both cases I was unable to run and got this for virtual env:
/riverborn-1.0.4/src/riverborn/mgl_terrain.py:93: RuntimeWarning: coroutine 'PygameEvents.run' was never awaited
loop._clear_all()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2025-04-11 08:49:39,672 - moderngl_window.context.base.window - INFO - code: 410
Traceback (most recent call last):
File "/riverborn-1.0.4/run_game.py", line 9, in <module>
sys.exit(main())
^^^^^^
File "/riverborn-1.0.4/src/riverborn/mgl_terrain.py", line 683, in main
mglw.run_window_config(WaterApp)
File "/riverborn-1.0.4/venv/lib/python3.12/site-packages/moderngl_window/__init__.py", line 201, in run_window_config
run_window_config_instance(config)
File "/riverborn-1.0.4/venv/lib/python3.12/site-packages/moderngl_window/__init__.py", line 295, in run_window_config_instance
window.render(current_time, delta)
File "/riverborn-1.0.4/venv/lib/python3.12/site-packages/moderngl_window/context/base/window.py", line 778, in render
self.render_func(time, frame_time)
File "/riverborn-1.0.4/src/riverborn/mgl_terrain.py", line 545, in on_render
self.scene.draw(self.camera, self.light)
File "/riverborn-1.0.4/src/riverborn/scene.py", line 859, in draw
model.draw(camera, light)
File "/riverborn-1.0.4/src/riverborn/scene.py", line 320, in draw
shader_name = getattr(shader, 'label', '').lower()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/riverborn-1.0.4/venv/lib/python3.12/site-packages/moderngl/__init__.py", line 447, in label
return self.ctx.mglo.get_label(_PROGRAM, self._glo)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_moderngl.Error: glGetObjectLabelEXT failed with 0x500
Spears Dracona
I'm not really into games where the challenge comes from mastering the controls, but I know some people like that sort of thing and the paddle controls are well done for something like that. The editor features were more my cup of tea.
Anders
It was sort of like Pokemon snap. I ended up only being able to play successfully by using the canoe warp feature, but I appreciated how the shadows of the forest looked especially. Nice voice over!
ambv
Doesn't work on macOS. First because of OGG use which is not supported by CoreAudio:
Traceback (most recent call last):
File "/private/tmp/riverborn-1.0.4/.venv/bin/riverborn", line 10, in <module>
sys.exit(main())
~~~~^^
File "/private/tmp/riverborn-1.0.4/src/riverborn/mgl_terrain.py", line 683, in main
mglw.run_window_config(WaterApp)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/moderngl_window/__init__.py", line 200, in run_window_config
config = create_window_config_instance(config_cls, timer=timer, args=args)
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/moderngl_window/__init__.py", line 253, in create_window_config_instance
config = config_cls(ctx=window.ctx, wnd=window, timer=timer)
File "/private/tmp/riverborn-1.0.4/src/riverborn/mgl_terrain.py", line 351, in __init__
pyglet.media.load('ambient', self.music, streaming=True).play()
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/pyglet/media/__init__.py", line 85, in load
return _codec_registry.decode(filename, file, streaming=streaming)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/pyglet/util.py", line 175, in decode
return decoder.decode(filename, file, **kwargs)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/pyglet/media/codecs/coreaudio.py", line 175, in decode
return CoreAudioSource(filename, file)
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/pyglet/media/codecs/coreaudio.py", line 62, in __init__
err_check(ca.AudioFileOpenWithCallbacks(
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
None, self.file_obj.read_func, None, self.file_obj.getsize_func, None,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0,
^^
byref(self._audfile))
^^^^^^^^^^^^^^^^^^^^^
)
^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/pyglet/libs/darwin/coreaudio.py", line 239, in err_check
raise CoreAudioException(err, err_str_db.get(err, "Unknown Error"))
pyglet.libs.darwin.coreaudio.CoreAudioException: (1954115647, 'The file type is not supported.')
That can be fixed the easiest by requiring PyOgg as a dependency. You can also re-code the music file as MP3 or AAC. Sadly, even with those fixes, the game crashes shortly after launch with:
Traceback (most recent call last):
File "/private/tmp/riverborn-1.0.4/.venv/bin/riverborn", line 10, in <module>
sys.exit(main())
~~~~^^
File "/private/tmp/riverborn-1.0.4/src/riverborn/mgl_terrain.py", line 683, in main
mglw.run_window_config(WaterApp)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/moderngl_window/__init__.py", line 201, in run_window_config
run_window_config_instance(config)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/moderngl_window/__init__.py", line 295, in run_window_config_instance
window.render(current_time, delta)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/moderngl_window/context/base/window.py", line 778, in render
self.render_func(time, frame_time)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/src/riverborn/mgl_terrain.py", line 545, in on_render
self.scene.draw(self.camera, self.light)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/src/riverborn/scene.py", line 859, in draw
model.draw(camera, light)
~~~~~~~~~~^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/src/riverborn/scene.py", line 320, in draw
shader_name = getattr(shader, 'label', '').lower()
~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/riverborn-1.0.4/.venv/lib/python3.13/site-packages/moderngl/__init__.py", line 447, in label
return self.ctx.mglo.get_label(_PROGRAM, self._glo)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
_moderngl.Error: glGetObjectLabelEXT failed with 0x500
I really wanted to try this out, but I just had issues trying to get it to run on mac!