Pipe Nightmare
A hell of a ride (very broken but WE DID IT)
*The plumber's life is often damp and full of pitfalls...*
Connect the pipes on the top of the screen to those on the bottom in this almost-non-crashing prototype of a game!
Controls:
- Mouse left click: pick and place a pipe or swipe two pipes
- Mouse right click: rotate pipes
- Escape: quit to menu
For linux users:
The game was developed on Arch Linux and it could crash on distros with a less recent glibc, if you're in trouble you can alwasy run the game from source like this:
```
git clone https://github.com/sterco-raro/ld51.git
cd ld51
pip install -r requirements.txt
python launcher.py
```
To remove the installed dependencies, do this:
```
pip uninstall esper
pip uninstall pygame
pip uninstall pyinstaller
```
Note: you need python >= 3.10
Tools:
- custom engine using Pygame
- coded with Sublime Text
- graphics made with Adobe Photoshop
- FL Studio for audio editing
- sounds at home with professional devices
Changelog:
- Added the main menu background and logo, made during the jam but forgot to put them in the game
- Startup crashes (hopefully) fixed! Let us know if you find other issues
- Post jam release: fixed all the major bugs, now there are only the less annoying ones :wink:
*The plumber's life is often damp and full of pitfalls...*
Connect the pipes on the top of the screen to those on the bottom in this almost-non-crashing prototype of a game!
Controls:
- Mouse left click: pick and place a pipe or swipe two pipes
- Mouse right click: rotate pipes
- Escape: quit to menu
For linux users:
The game was developed on Arch Linux and it could crash on distros with a less recent glibc, if you're in trouble you can alwasy run the game from source like this:
```
git clone https://github.com/sterco-raro/ld51.git
cd ld51
pip install -r requirements.txt
python launcher.py
```
To remove the installed dependencies, do this:
```
pip uninstall esper
pip uninstall pygame
pip uninstall pyinstaller
```
Note: you need python >= 3.10
Tools:
- custom engine using Pygame
- coded with Sublime Text
- graphics made with Adobe Photoshop
- FL Studio for audio editing
- sounds at home with professional devices
Changelog:
- Added the main menu background and logo, made during the jam but forgot to put them in the game
- Startup crashes (hopefully) fixed! Let us know if you find other issues
- Post jam release: fixed all the major bugs, now there are only the less annoying ones :wink:
Comments35
Gryph0n4 Oct 2022, 00:10
Unfortunately it gives me a "BAD AT WORK" error on the exe and I cannot play it.
tlatitude4 Oct 2022, 00:22
"Birds aren't real, I promise"
tlatitude4 Oct 2022, 00:44
On windows 10 got it to run.
I made a folder sounds\ and added the following sounds
button_down.wav
button_downup.wav
button_up.wav
fart.wav
flush.wav
ld51fuckmeonmydeathbed.mp3
pipe_drop.wav
pipe_pick.wav
pipe_plop.wav
pipe_rotate.wav
rattle.wav
rattleflush.wav
snap.wav
weird.wav
https://www.soundjay.com/ is where I got sounds from
I made a folder sounds\ and added the following sounds
button_down.wav
button_downup.wav
button_up.wav
fart.wav
flush.wav
ld51fuckmeonmydeathbed.mp3
pipe_drop.wav
pipe_pick.wav
pipe_plop.wav
pipe_rotate.wav
rattle.wav
rattleflush.wav
snap.wav
weird.wav
https://www.soundjay.com/ is where I got sounds from

TheButterApple244 Oct 2022, 03:21
Got the “BAD AT WORK” error :(
tlatitude4 Oct 2022, 03:27
@sterco-raro the game needs to be zipped up with the sounds folder and possibly some other files too. The executable relies on external files to work.

sterco_raro4 Oct 2022, 09:40
Thank you all for your comments :heart: we're working on fixing these bugs! Unfortunately we exported the binaries with missing assets folder.
As for @chrisdedev I'll try it on another linux box and see what I can do, on my box it's working so I need to reproduce that error somehow.
P.S. The "BAD AT WORK" is actually a simple string left there by accident :sweat_smile:
As for @chrisdedev I'll try it on another linux box and see what I can do, on my box it's working so I need to reproduce that error somehow.
P.S. The "BAD AT WORK" is actually a simple string left there by accident :sweat_smile:
Rekko4 Oct 2022, 15:33
I'm mad that the right side of the game is just unplayable because we can't bring pieces in here, but over that that's a great game, nice audio and graphics !
Too bad there is no consequences when the liquid spread all over the pipes.
Too bad there is no consequences when the liquid spread all over the pipes.

Wouter524 Oct 2022, 15:38
Congrtz on your first LudumDare entry! I like the music very much, the sound effects and graphics are awesome too! The controls though, they seem to be a bit broken. I can't reliably drag them on the playingfield / change their positions. So I was unable to connect all the pipes at the end.
Still very impressive for a first LD-entry!
View questions out of curiosity :-)
- Is there any screen when the player wins?
- And what program did you use to make this?
- What does the 'Boh?' button do? I could not figure that one out :-)
=====
Edit, I figured it out. I see that the selecting of the pipes is toggled on-and-off while holding the mousebutton. I suspect that you used somekind of 'mousedown' event for that. If so, a bugfix could be to trigger the selecting of a pipe with the 'mouseup' event.
I think that in this case the mousedown is triggered every frame while holding down the mousebutton. Where the mouseup event is usually triggered once.
I finished the level now :-)
Still very impressive for a first LD-entry!
View questions out of curiosity :-)
- Is there any screen when the player wins?
- And what program did you use to make this?
- What does the 'Boh?' button do? I could not figure that one out :-)
=====
Edit, I figured it out. I see that the selecting of the pipes is toggled on-and-off while holding the mousebutton. I suspect that you used somekind of 'mousedown' event for that. If so, a bugfix could be to trigger the selecting of a pipe with the 'mouseup' event.
I think that in this case the mousedown is triggered every frame while holding down the mousebutton. Where the mouseup event is usually triggered once.
I finished the level now :-)

sterco_raro5 Oct 2022, 11:07
@rekko thanks a lot! I'm mad too and working to fix that issue every time I have a moment to spare :disappointed: The last two columns of the grid were interactable a couple of versions ago but I still can't locate what introduced this issue :/
We were thinking about a health bar or something to lose when there's too much spilling but couldn't make it in time :smile:
@wouter52 thank you so much for your kindness during the jam! About the dragging issue you're right, there's actually no drag n drop. I noticed that on windows the mouse events timings are a bit different than linux so I'm trying to fix it and make it feel the same on both platforms. (see below for a hopefully clearer explanation :laughing:)
To answer your questions:
- No, unfortunately we didn't have time to put a winning/losing screen in the game
- It's basically a wobbly custom engine built using pygame and esper! The backbone of the code was made during a three days "personal/fake game jam" we made a couple of months ago to test our skills
- The "Boh?" does nothing, it's a placeholder that didn't grow wings, boh in italian means "dunno" :grin:
To clarify, the mouse events are totally handmade :D there's no separation for up, down events. we basically check each time the mouse is being pressed what's the status of different variables (an active selection, last selection comes from the grid or from the inventory, etc).
To avoid millions of clicks per frame there's an "action cooldown" timer in place that needs more testing and balancing (I need to at least increase its duration).
Congratulations for completing the pipe system! And as already said, thanks all for your comments :violin:
We were thinking about a health bar or something to lose when there's too much spilling but couldn't make it in time :smile:
@wouter52 thank you so much for your kindness during the jam! About the dragging issue you're right, there's actually no drag n drop. I noticed that on windows the mouse events timings are a bit different than linux so I'm trying to fix it and make it feel the same on both platforms. (see below for a hopefully clearer explanation :laughing:)
To answer your questions:
- No, unfortunately we didn't have time to put a winning/losing screen in the game
- It's basically a wobbly custom engine built using pygame and esper! The backbone of the code was made during a three days "personal/fake game jam" we made a couple of months ago to test our skills
- The "Boh?" does nothing, it's a placeholder that didn't grow wings, boh in italian means "dunno" :grin:
To clarify, the mouse events are totally handmade :D there's no separation for up, down events. we basically check each time the mouse is being pressed what's the status of different variables (an active selection, last selection comes from the grid or from the inventory, etc).
To avoid millions of clicks per frame there's an "action cooldown" timer in place that needs more testing and balancing (I need to at least increase its duration).
Congratulations for completing the pipe system! And as already said, thanks all for your comments :violin:

Heremeus5 Oct 2022, 11:42
Same issue here as @chrisdedev, I can't run the game on Ubuntu 2022.

Zyger5 Oct 2022, 11:46
I really like the art and the idea of the game. but after playing it for a minute or two it crashes. other than that its pretty cool :)

sterco_raro5 Oct 2022, 11:59
@heremeus and @chrisdedev sorry to hear that :/ I thought we fixed the launch issues but I didn't think about compiling on different distros for compatibility
If you'd still like to try it out you can get the source code on github and run the development version like this:
```
git clone https://github.com/sterco-raro/ld51.git
cd ld51
pip install -r requirements.txt
python launcher.py
```
To clean up the dependencies installed by pip run:
```
pip uninstall esper
pip uninstall pygame
pip uninstall pyinstaller
```
Note: you need python 3.10
If you'd still like to try it out you can get the source code on github and run the development version like this:
```
git clone https://github.com/sterco-raro/ld51.git
cd ld51
pip install -r requirements.txt
python launcher.py
```
To clean up the dependencies installed by pip run:
```
pip uninstall esper
pip uninstall pygame
pip uninstall pyinstaller
```
Note: you need python 3.10

sterco_raro5 Oct 2022, 12:02
@zyger Thanks! :D we're still figuring out why it crashes after a couple of minutes though :sweat_smile:
scifi65465 Oct 2022, 14:43
cant really get the controls to work but the art looks nice. The game feels somehow really laggy, I am on windows 10.
frigusterio5 Oct 2022, 14:56
When I connect any pipe to the ones above and they start spitting liquid, the game crashes
Otherwise pretty cool
Otherwise pretty cool

Heremeus5 Oct 2022, 14:58
@sterco-raro thanks, running it directly worked (well, it started at least :smile: ). After a while it crashes with "maximum recursion depth exceeded in comparison" when the 10s timer hits. Seems to happen anytime I build a pipe with the open end into a pipe segment that does not fit. But also sometimes on a perfectly fine build.
Console log:
```
File "/home/user/ldjam/ld51/launcher.py", line 24, in
manager.run()
File "/home/user/ldjam/ld51/code/game_manager.py", line 165, in run
self.world.update()
File "/home/user/ldjam/ld51/code/world_manager.py", line 96, in update
self.worlds[self.current].process()
File "/home/user/.local/lib/python3.10/site-packages/esper/__init__.py", line 424, in process
self._process(*args, kwargs)
File "/home/user/.local/lib/python3.10/site-packages/esper/__init__.py", line 405, in _process
processor.process(*args, kwargs)
File "/home/user/ldjam/ld51/code/systems/timer.py", line 115, in process
self.grid_healthcheck()
File "/home/user/ldjam/ld51/code/systems/timer.py", line 78, in grid_healthcheck
self._healthcheck( ( self.grid.active_inputs[i][0] + 1, self.grid.active_inputs[i][1] ), "up" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 69, in _healthcheck
self._healthcheck( ( grid_pos[0] + 1, grid_pos[1] ), "down" )
// (...)
File "/home/user/ldjam/ld51/code/systems/timer.py", line 51, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] - 1 ), "left" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 63, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] + 1 ), "right" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 51, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] - 1 ), "left" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 63, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] + 1 ), "right" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 37, in _healthcheck
value = self.grid._get_at(grid_pos[1], grid_pos[0])
File "/home/user/ldjam/ld51/code/components/map.py", line 120, in _get_at
if col self.map_width: return
RecursionError: maximum recursion depth exceeded in comparison
```
Console log:
```
File "/home/user/ldjam/ld51/launcher.py", line 24, in
manager.run()
File "/home/user/ldjam/ld51/code/game_manager.py", line 165, in run
self.world.update()
File "/home/user/ldjam/ld51/code/world_manager.py", line 96, in update
self.worlds[self.current].process()
File "/home/user/.local/lib/python3.10/site-packages/esper/__init__.py", line 424, in process
self._process(*args, kwargs)
File "/home/user/.local/lib/python3.10/site-packages/esper/__init__.py", line 405, in _process
processor.process(*args, kwargs)
File "/home/user/ldjam/ld51/code/systems/timer.py", line 115, in process
self.grid_healthcheck()
File "/home/user/ldjam/ld51/code/systems/timer.py", line 78, in grid_healthcheck
self._healthcheck( ( self.grid.active_inputs[i][0] + 1, self.grid.active_inputs[i][1] ), "up" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 69, in _healthcheck
self._healthcheck( ( grid_pos[0] + 1, grid_pos[1] ), "down" )
// (...)
File "/home/user/ldjam/ld51/code/systems/timer.py", line 51, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] - 1 ), "left" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 63, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] + 1 ), "right" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 51, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] - 1 ), "left" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 63, in _healthcheck
self._healthcheck( ( grid_pos[0], grid_pos[1] + 1 ), "right" )
File "/home/user/ldjam/ld51/code/systems/timer.py", line 37, in _healthcheck
value = self.grid._get_at(grid_pos[1], grid_pos[0])
File "/home/user/ldjam/ld51/code/components/map.py", line 120, in _get_at
if col self.map_width: return
RecursionError: maximum recursion depth exceeded in comparison
```
fabula_rasa5 Oct 2022, 15:58
It's an enjoyable puzzle concept. I think it can be very fun when finished :smile_cat:
At the moment, it does indeed feel unfinished. You probably know all this already :wink:, but:
- the game crashes quite a lot;
- "buh?" button does nothing;
- for some reason, you can't place pipes on the right side of the screen (even though pipes spawn there);
- there is no end (even when you connect all the pipes, nothing happens);
- there is no real setup to the game - what are the pipes for?, where are they going?, what is the slime they are transporting?, and what is the meaning of life and existence as we know it ;)?
On the definite plus side: I like the graphics and the sounds are good as well!
Here is a screen of the crash error I got the most often:
At the moment, it does indeed feel unfinished. You probably know all this already :wink:, but:
- the game crashes quite a lot;
- "buh?" button does nothing;
- for some reason, you can't place pipes on the right side of the screen (even though pipes spawn there);
- there is no end (even when you connect all the pipes, nothing happens);
- there is no real setup to the game - what are the pipes for?, where are they going?, what is the slime they are transporting?, and what is the meaning of life and existence as we know it ;)?
On the definite plus side: I like the graphics and the sounds are good as well!
Here is a screen of the crash error I got the most often:

frozenfire925 Oct 2022, 18:08
Hey, great game name :joy: Even though it was very broken, you did it and that is the main thing in a game jam :smile: Keep on making games!

sterco_raro5 Oct 2022, 23:18
Thanks for your support even if the grame crashes like crazy :grin:
@scifi6546 @frigusterio @heremeus @frozenfire92 @fabula-rasa
We finally fixed the main bugs!!! It's 1 AM where I live so I think we'll upload the working versions tomorrow morning.
@heremeus thank you for your determination! Hopefully this fix will solve your problems (not the glibc ones though :eyes:)
@fabula-rasa the remaining questions are pretty simple:
- the "boh?" button is a feature ;) it keeps us safe from life's dangers
- unfortunately we didn't put an ending screen in the game aside from a small sfx when the pipes are connected correctly :cry:
- what if the slime is actually transporting those pipes? (42, the main answer is 42 of course)
Oh and thank you so much, now I need to rewatch the whole series to satisfy my hunger! All glory to the Hypnotoad!!
@scifi6546 @frigusterio @heremeus @frozenfire92 @fabula-rasa
We finally fixed the main bugs!!! It's 1 AM where I live so I think we'll upload the working versions tomorrow morning.
@heremeus thank you for your determination! Hopefully this fix will solve your problems (not the glibc ones though :eyes:)
@fabula-rasa the remaining questions are pretty simple:
- the "boh?" button is a feature ;) it keeps us safe from life's dangers
- unfortunately we didn't put an ending screen in the game aside from a small sfx when the pipes are connected correctly :cry:
- what if the slime is actually transporting those pipes? (42, the main answer is 42 of course)
Oh and thank you so much, now I need to rewatch the whole series to satisfy my hunger! All glory to the Hypnotoad!!
fabula_rasa6 Oct 2022, 00:20
@sterco-raro Then I shall ponder the validity of the Boh? button no longer, and I will just be grateful for its protection.
42 is indeed the one and proper answer! As is obeying the Hypnotoad. And your welcome - rewatching Futurama is never a bad thing. I can basically play the first 5 seasons in my head in my sleep by now :laughing:
42 is indeed the one and proper answer! As is obeying the Hypnotoad. And your welcome - rewatching Futurama is never a bad thing. I can basically play the first 5 seasons in my head in my sleep by now :laughing:
ChrisDeDev6 Oct 2022, 12:07
@sterco-raro yea got it working. I think the issue is your binary was not installing the required packages. When looking at the source code instructions it did install packages that I did not already have installed.

Wouter526 Oct 2022, 20:48
The fixes worked, it is much more fun to play now! Good work!

cannibalgirl6 Oct 2022, 20:56
10/10 for sounds, very immersive
i'm imagining in my mind the scene when you were acquiring the sounds using professional devices
at 4 am during the jam somewhere :heart:
maybe i'm not very smart but it took me 5 minutes to figure out that you can rotate pieces with right mouse button
(should've read the instructions with more attention...)
all written in python? sweet! good job at pushing trough
sometimes I would get double pipes in the drawer, not sure why
no crashes here!
i'm imagining in my mind the scene when you were acquiring the sounds using professional devices
at 4 am during the jam somewhere :heart:
maybe i'm not very smart but it took me 5 minutes to figure out that you can rotate pieces with right mouse button
(should've read the instructions with more attention...)
all written in python? sweet! good job at pushing trough
sometimes I would get double pipes in the drawer, not sure why
no crashes here!

sterco_raro7 Oct 2022, 00:10
@chrisdedev the binary should be self-contained so I don't know how to handle cases like yours :confused: apart from suggesting to run from source
@wouter52 Thanks!! Next time I want to try something simpler and hopefully submit a working build at the end of the jam XD A smaller scope can surely help us
(btw I think I sounded a bit rude while commenting your game, just wanted to say that it wasn't my goal :grin:)
@cannibalgirl sounds, graphics and the late night professional recordings all come from @taxiservice's own hands (and mouth) :copyright: The extra python topping is my doing, so are the random bugs still lingering around :grin: Thank you for your feedback :D (oh and I'm so happy to know the game didn't crash)
@wouter52 Thanks!! Next time I want to try something simpler and hopefully submit a working build at the end of the jam XD A smaller scope can surely help us
(btw I think I sounded a bit rude while commenting your game, just wanted to say that it wasn't my goal :grin:)
@cannibalgirl sounds, graphics and the late night professional recordings all come from @taxiservice's own hands (and mouth) :copyright: The extra python topping is my doing, so are the random bugs still lingering around :grin: Thank you for your feedback :D (oh and I'm so happy to know the game didn't crash)

Wouter527 Oct 2022, 05:45
@sterco-raro don't worry ;-) I like honest comments like that! And it did ot come across as rude at all :smile:
The scope of your game looked fine to me, there were just some technical difficlties you needed to overcome. It is common for jam-games to have so-called 'spagetticode' or 'very dirty solutions' to save time. For instance, I could not bother coming up with code that could rotate a tile 90, 180 and 270 degrees (ours works with tiles too), so I asked the artist to make 4 versions of each possible tile and then I used those ^^'
That solution is not 'very nice', but it gets the job done so to speak :-)
I don't know how your game is programmed, but what I wanted to say is: don't be scared to write very veeery dirty ccode to get the job done :-)
The scope of your game looked fine to me, there were just some technical difficlties you needed to overcome. It is common for jam-games to have so-called 'spagetticode' or 'very dirty solutions' to save time. For instance, I could not bother coming up with code that could rotate a tile 90, 180 and 270 degrees (ours works with tiles too), so I asked the artist to make 4 versions of each possible tile and then I used those ^^'
That solution is not 'very nice', but it gets the job done so to speak :-)
I don't know how your game is programmed, but what I wanted to say is: don't be scared to write very veeery dirty ccode to get the job done :-)

MorePixels7 Oct 2022, 09:40
Fun game! Didn't realise the draw button actually gave you more pipes, I thought it would Draw the game. But other than that, very fun game!

sterco_raro7 Oct 2022, 09:50
@wouter52 I'm happy to hear that ;)
Our code is very dirty :laughing: aside from that, I think you're right indeed. Maybe the scope was fine, probably the major problems were complicated maps management and the pipes system integrity check function.
The "inventory" area and the grid area share a LOT of common code but I lost myself in offsets and array referencing because I rushed that part :')
The pipes integrity check is basically a recursive function written a couple of hours before the deadline :D fun fact: I ended up rewriting that function from scratch three times, each one with a similar structure, each time without noticing that the main issue was the grid access :sweat_smile:
Our code is very dirty :laughing: aside from that, I think you're right indeed. Maybe the scope was fine, probably the major problems were complicated maps management and the pipes system integrity check function.
The "inventory" area and the grid area share a LOT of common code but I lost myself in offsets and array referencing because I rushed that part :')
The pipes integrity check is basically a recursive function written a couple of hours before the deadline :D fun fact: I ended up rewriting that function from scratch three times, each one with a similar structure, each time without noticing that the main issue was the grid access :sweat_smile:

sterco_raro7 Oct 2022, 09:55
@morepixels Thanks! We were going for a more "draft your deck" like mechanic during the first hours where the draw button should have been more straightforward :grin:
Sk Katea8 Oct 2022, 20:12
I like the Game and the graphics... the idea of it hit my weak Spot, cause i really liked this kind of games when i was young

Hora-Timer9 Oct 2022, 10:44
Wow Show!

reinhpash10 Oct 2022, 08:55
i enjoyed a lot

khaotom11 Oct 2022, 07:37
I think it's fun as a sandbox with no losing state. It was fun to just click around the parts and connect them. Maybe there is an idea for something there. I actually think the stress of trying to solve it with a time pressure would be a nightmare... in fact the original Pipe dream game should be called Pipe Nightmare and this one should be called Pipe Dream :clown:
I also dug the chill vibe of the music, and the low fi grit of the sound effects. I felt it captured the spirit of windows 95 days.
I took a look at esper, it looks interesting, might have to try it out.
I also dug the chill vibe of the music, and the low fi grit of the sound effects. I felt it captured the spirit of windows 95 days.
I took a look at esper, it looks interesting, might have to try it out.

BayLock12 Oct 2022, 05:11
Amazing game. Really catchy graphics. Some work can be done from the gameplay side and can be a made a bit more complex. I think the 10 second rule did redistricted a lot of possibilities. Please do check out my submission as well.

Sarah20 Oct 2022, 02:34
We basically DID make the same game, that's great haha. Overall it's a bit buggy but still a completed entry, so well done on that front! It looks nice as well :3
Traceback (most recent call last):
File "PyInstaller/hooks/rthooks/pyi_rth_pkgres.py", line 16, in
File "PyInstaller/loader/pyimod02_importers.py", line 499, in exec_module
File "pkg_resources/__init__.py", line 32, in
File "PyInstaller/loader/pyimod02_importers.py", line 499, in exec_module
File "plistlib.py", line 61, in
File "PyInstaller/loader/pyimod02_importers.py", line 499, in exec_module
File "xml/parsers/expat.py", line 4, in
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.36' not found (required by /tmp/_MEIhA2B02/libexpat.so.1)
[114528] Failed to execute script 'pyi_rth_pkgres' due to unhandled exception!