You had me at barely playable. :) I love the autumn colors and the wind sound fx!
Brandon Saiz
Creator of
Recent community posts
Thank you! I have been keeping up. I've done something every single day since submitting. A lot of the time it's just doing some pixel art. This morning I woke up dying to refactor this project. It was fun timing to see your comments on the same morning. Thanks for playing and I'll likely see you at the next jam!
Final Devlog for Duck, Duck! It's a Goose!
Tomorrow's the award stream and we wrap up this little journey of 2 and a half weeks. I've taken some time today to review some of my code. It's the first time I've opened it since fixing a large bug after submission. I opened up a doc and took some notes - mostly on my player object's script, and here are some things I noticed.
First -- and I knew this was happening while it was happening -- this junk is so spaghetti. Rushed for time, I hard coded variables in. I made calls to the singleton (and back) just to make things work in a hurry. It's sloppy and needs a lot of cleaning up to work with it again. I can also see my lack of experience in coding show through. I have many instances where a function takes care of some things that were already done in the process function. Many other lines are repeated in the process function. The best example is turning on and off the collisions based on the direction the player is swimming. There's no reason for this to happen any more than once per tick, and it was best be suited in it's own function because of that. I think. And that's what I mean - I don't really know. This makes sense to me:
Is the player moving left or right? Is the player swimming down? Great. Hey collision function, we've answered these questions. Can you turn on a particular collision accordingly and make sure the rest are off?
Second - I'm not customization friendly on a lot of fronts. I have a node for the main music loop of the game. It's attached to the player, which honestly is fine. The player's driving the game, so when they die, their music should die with them. But why a node, and not an export variable? It seems better that the level designer can pick which track plays quickly, especially if I ever wanted to do different biomes or level types. My only guess as to why I did that is that I have never really gotten as far as sound in my games. I usually quit tutorials before then, and my own projects definitely never make it that far.
Speaking of music, the sound of the fish jaws (a Zippo lighter) is attached to the player and not whatever enemy jaws are happening. It's fine. It worked just fine. But it means the player is figuring out what hit it and then making that thing make noise. Seems like a good way to be not scalable. What if I want a level with miniature submarines + 50 other things that don't belong in a duck pond? Will I group all of them and then hard code their sounds into the player? That's nuts.
Lastly, for now: I want more empty nodes when I get crazy with things like collision shapes. Like just for organizational purposes. This looks ugly:

So anywho, I am planning on skimming through the rest of my project, making notes, and refactoring a ton. I want to see if I can manage to do that without breaking it. And then, maybe, I'll get around to those dead fish powerups and scoreboard interactions I wanted from the start. Thanks for reading and showing up for this event. It's been life changing. Truly. <3
I enjoyed this! I think the little eyeballs getting bigger when you click on the birds is great. I think you did a great job with the collisions - a little leeway so the game knew what I was doing. It's cool you can pause and mute the music :)
Did you do all the art and music yourself? I like that the open pond is an option. it's a soothing background when I get distracted by something else. Great job!
I was watching the submissions like an obsessive birder waiting for yours to drop. That one animation with the head shake was one of my highlights for the trailer showcase. :) as for me, im going to take a break - maybe until the end of my next irl performance mid-october. But im definitely going to be doing jams for a long time to come in my life. This was so cool :)
I finished my game late last night, and I gotta tell you - I was not prepared for how I felt. Or how I feel. The first feeling was elation. I've struggled for a long time with this weird sense of guilt from dropping in an out of various hobbies and projects. I have a ferocity that I tend to attack things with, and that gives way as soon as I get to the boring parts. So after years and years of trying, I was just about at a point in my life where ever completing a game felt like a joke.
This jam came along at the perfect time. It was Godot only, small teams, and a duration that seemed perfect for my schedule. I figured - why not just submit something - even if it's a super-simple game, it will be a finished product. Early on, I teamed up with someone else - another first time jammer. The night before the project we both had second thoughts. How will we collaborate if we don't even know how to do our own thing? How do we use github from multiple machines? Personally, I was afraid of getting stuck in a problem and holding up the timeline.
So solo-dev it was. I started out with some rules for myself: 1 - dump anything I couldn't figure out before I went to bed each night. I did not want to waste any time on features that would never work. 2. - keep track of anything I didn't make myself the moment I download it, no matter if I was using it as a placeholder or not. 3. make a complete game, no matter how simple.
And I did it. I made a game and I am elated. I can't wait for the judges to try it, and the feedback from friends and community members has been extremely gratifying.
I'm also really tired and sad it's over. It feels like the post-show blues I've been getting at the end of performances since starting that hobby. It's good though. Sadness is not a disqualifying factor from doing this again. :D
yes! For the record, I do have the player character coded to "float" on the top of the water. It's been nice for making sure air bubbles disappear from code and checking fish behavior without getting kicked in the head 😀
I wonder how far I would have gotten if I didn't immediately love the floating feeling of the player 🤔
I have made art! Listen. I know lingcod don't typically live in the ponds that ducks and geese hang out in. But this is a video game, and I love lingcod. They're viscious (like geese) and have always reminded me of dragons. I can't imagine what it would be like to see one of those things in their element, and not dragged up onto my fishing boat.

Today has been my most focused and productive day! I have four things left before I can call this a game! I need sound effects! That will be tomorrow as I have the house to myself for much of the day. I have great plans for this, and I think they will make people laugh. I have to make a credits screen. I don't have a lot to say on it, so I will likely just make a simple screen. I also need to fill out my level for the player, and add some complexity (randomness and ramping difficulty) to the environment. Finally, I've got to complete some damage and death animations for enemies and the player.
Those are the "must haves". I'd also like to finish up adding a functioning online scoreboard, but I spent a lot of time working on that already to no avail, so it might get cut. Also on the chopping block are status bars for the player's O2 levels and health. Again - I'm struggling with the features and have already spent a lot of time in failure. Maybe that will be a post submission exercise for me. Need to get better for the next jam, right?
Anyway, I'm also rehearsing for a play at the moment. On my way home I had this lovely view. That's the Maverick of Deadliest Catch fame. I wonder how many lingcod they've killed.

Today was the showcase for game previews, and the reveal of Taco Meat, my protagonist. You can watch my 1 minute video here. When I watched it during the show stream (which you can see the VOD here), I was struck by how slow it looks. It truly is just a preview. There's no real challenge once you know how to swim around. I was also struck by how much I love my simple, 4 frame animation for the controllable character. I can see, given more time, having a lot of fun plugging in my own art as placeholders for future projects. Part of the reason I bought a chrome book was to get me away from my gaming rig (and, sometimes, away from Rocket League), and next to my wife on the couch while she watches TV (probably something post-apocalyptic and/or dystopian).
I'm overwhelmed by the long weekend. I did not get much (any?) done today. I'm in a play w 3 hour rehearsals sat and sun, and woke to a killer headache after battling with trying to use the particle system until late. I watched the showcase after rehearsal and then helped my wife move a bunch of bricks. I'm brain tired and the next parts of development (fine tuning the enemies, creating the level, implementing a high score tracker, and making sound fx) are going to take time. My brain tends to not meet challenges until that time is pressing, but I also have Monday off, so I have zero dopamine to give.
One step at a time. Tonight, I'm going to pick one thing (not something I don't need like particles!) and get it done. Maybe I start with something simple. I don't have a restart key yet! I can do that tonight!
Update! My teaser video is complete! I spent the morning relearning how to make use the godot tiling system. I had tried to do it on the Chromebook, but it's way too small of a screen and the build isn't... built for it. On my linux build, the lower part of the screen gets clipped just a little bit. So options don't quite work correctly when I'm clicking on them. And since tile building happens in those down there regions, it was quite cumbersome.
It was great seeing the game with some terrain built in. I had been testing features in what I call the Fish Tank. It's massive and blue and there's no containment, so the characterbody can float past the water, and it's easy to get lost as to whether the player is moving up and at what speed. 

The most rewarding part of this whole jam for me has been the creation of a bubble generator. I wanted random air bubbles to sustain the player, so I created something that would count the child node markers of the generator and use them as the spawn points. In the below image, I've placed a marker in each of the large plants. If I want to decrease the time between bubbles, I can either place duplicate markers in the same spot, or use fewer markers. The feature was so exciting for me because no one told me to do it. As I was making the air bubbles, I was already thinking "how can I make placing the spawn points easier?" and my brain came up with this on my own. It's got a built in timer as it's first child node, and I knew to code the thing to skip that node! I felt like I was thinking as a programmer and not just as some tutorial-follower old man. That's not to disparage tutorial-followers. It's what I've been doing for years, and watching smart people do these types of things (and talk about them) is part of why this idea for a system came so intuitively.

And now - it's time to work on my duck call! sound fx time!
Starting is always the hardest thing. Or is it? I've always been a little bit good at starting things. Not so much dishes when they're piled up at the end of the night and the dishwasher is still clean and full. But hobbies, for sure. It's the finishing part that's next to impossible. But I had a new Chromebook for spending time on the couch, with my wife, and I had this weird, clunky, 4.0 Linux build of Godot to work with. I decided to dive into a hobby that's eluded me since I taught myself the basics of C++ and DirectX out of textbooks around 2004.
With game programming, it's always the complicated things that bog me down until I get frustrated and quit. Everything starts to feel like a poorly designed plastic seal on the inside of a sour cream container that's only going to drive me mad and end up slathering my fingers in a nasty condiment. So when the theme for the jam was announced: Duck, Duck, Goose, I decided to go as simple as possible. It's my first game. Let's keep the scope down and have fun! I grabbed some bird assets, some underwater tiles, and an idea for a silly action game.

I needed a protagonist to keep the player underwater for as long as possible, and I had been wanting to try out some of the free sprite creation tools that are out there. I spent a surprisingly short amount of time on Piskel making my simply animated "bad guy". 
After a bit more than a week, I've got the bones of something that seems quite fun, and I spent much of yesterday getting some UI and a title screen done. It's the area where I bomb out pretty quick doing tutorials, so I made this one super quick and stuck to a lot of what I already know. Maybe there will be time to refine it over the weekend, but -- at last, I reveal my title screen!
you may notice that those are not geese butts sticking out of the water. That's right -- my placeholder has been replaced by some original artwork, and I have a protagonist. You'll have to wait for that reveal until Saturday's showcase! I've got progress bars to learn!!
