Sunday, June 5, 2022

PyWeek33: Quantum Entanglement

"Quantum Entanglement" was a team entry by Team MYCTL (for which I was part of) for PyWeek 33, (March 2022), a twice yearly video game development competition that gets competitors to build a complete game from scratch in seven days using the python programming language. This competition's theme was "My Evil Twin", and we made a 2D puzzle game where you control two scientists (one good and one evil) walking around within their respective labs, but where the controls for each character are linked to the same keyboard presses. The aim of the game is to direct the "good" scientist to a goal "green crystal" while ensuring that the evil scientist does not touch any of the "evil" items he has lying around in his lab space.

This was my first go at trying to "coordinate" a team entry (bigger than two members) and it was super enjoyable and a great learning experience: we had a good mix of different skills in the team and experience levels ranging from early programming experience to professional software devs, and from no game jam experience to very experienced game jam competitors. I learnt a good amount about managing a git repo with slightly larger teams (something I can say I'm probably not very good at!) and had a lot of fun working with others in different creative capacities: we even managed to get a game story going with a script and voice acting which was super cool :).

There were a lot of really cool puzzle concepts amongst the other entries for this year's jam: I think it was something to do with the theme that made for a lot of cool ideas, and lots around trying to control two characters (twins) simultaneously. I liked our concept, and would have liked to be able to spend more time trying to think through all the emergent mechanics that come out of the rule sets we came up with (but 7 days goes so quickly!).

The general premise of the mechanics was that each character is controlled by the same common set of ASDW direction commands: each character's environment is different however, so depending on how their character interacts with their map (i.e. one character runs up against a wall while the other continues to travel in free space) the "state" of each player (i.e. position in world) can be different. The general aim of the game is to guide the "good" character to a goal location (green crystal) while making sure the "evil" character does not touch any of the "evil" objects/squares in their map:

Using this mechanic, we developed a few different types of levels:

  • Early levels just presented each world with enough clutter to make the player concentrate on both worlds at once, but you could win by just guiding each player along the same overall path
  • Later levels would start to require that the player changes the relative offset between characters by pushing one up against a wall that the other did not have in their map: this would often be required to traverse a path that was offset from one world to the next.
  • Final levels would start to build on this complexity by requiring some combination of these effects.
Overall the jam was a lot of fun, and we ended up coming second in the teams division with an overall score of 4.04/5.0 which I think we were all happy with.

Game Playthough:


Extensions on game puzzle mechanic: I think the general idea for the mechanic we had here was pretty solid and I've been wanting to explore this idea in a bit more detail: I generally don't think making puzzle games is my strength, so I'm keen to explore this a bit further, and I'll be looking into this in a future post.

Sunday, October 24, 2021

PyWeek32: Temporal Anomaly

"Temporal Anomaly" was my solo entry for PyWeek 32 (September 2021), a twice yearly video game development competition that gets competitors to build a complete game from scratch in seven days using the python programming language. This competition's theme was "Neverending", and I made a sci-fi story-driven 2D action game in which the main character is stuck in a never-ending time loop. The game requires you to guide your character around the inside of a derelict science vessel in deep space, using your laser gun recoil in the zero-G environment. As you experience and re-experience the same events through several iterations of the time loop, you pick-up clues that allow you to out-smart your arch-nemesis, the evil Dr. Ubel and save the day by avoiding a catastrophe that tears a hole in the fabric of space-time itself.

This was a really fun entry to make: I ended up using the python arcade library (instead of my usual pygame), which was quite nice and made a lot of things more convenient. I also made heavy use of PyMunk for 2D collision physics. Voice acting for the story was also a big feature for this one: I recruited me wife to play one of the roles and I did the other two: it was really fun, we had a full script and everything. 

  


I was super chuffed to win the solo division and overall winner with a score of 4.44/5.0, which makes it the highest overall rated game in PyWeek history! Super excited :) ... 

You can download the game in source version here (requires python, python arcade, pygame and pymunk).

Playthrough Video:

Sunday, December 20, 2020

Hollow Knight Softie

 

My son and I have been playing a lot of Hollow Knight on Switch lately (eagerly waiting for any more news on the release for Silksong!). In fact I played the game when it first came out almost (more than?) two years ago, and I remember I got about halfway through and then things just got a bit too hard :) and I moved on to other games. Recently my son picked up the game (with relatively little platformer experience) but already he is well past where I got up to (young minds learn new skills so fast), so I decided to start a new game again and I've been loving it.

Anyway, I decided it was time to get the old needle and thread out again and do another softie, this time making a little Knight. He will be a Christmas present for my son (who otherwise said he wants Silksong for Christmas, but we will have to wait for that one :)). I might end up making a few additional accessories and maybe even a Hornet doll to go with him if I'm feeling bored over the holidays!

Merry Christmas for 2020!


Edit (Feb 2021): So I also ended up making a Hornet doll, because it was fun and and an extra birthday present for my son. Making softies is addictive :)




Tuesday, December 1, 2020

PyWeek 30: Marooned

"Marooned" was my solo entry for PyWeek 30 (September 2020), a twice yearly video game development competition that gets competitors to build a complete game from scratch in seven days using the python programming language. This competition's theme was "Castaway", and I made a 3D platforming game where you play as an astronaut that is stranded in an asteroid field after your spacecraft was forced to self-destruct. The game requires you to try and build items that will help you on your quest to repair and re-launch your escape pod by using the scraps and debris that you find around you. While on the asteroid field, you encounter hostile alien lifeforms that escaped from your ship, so the game has a mixture of platforming and 3D shooting as well. 





I had a lot of fun making this one, and was pretty happy that I managed to get most assets of the game up and running (code, art, modelling, music, sound) myself, without having to rely on many third-party ones (I had to use a few fonts and textures from external, free sources). The game ended up coming second in the solo division with a score of 3.96/5.0, so I was pretty happy with the result :).

Playthrough Video:

You can also download the game and play in from source (required Python, Pygame and PyOpenGL) here.




Saturday, November 28, 2020

LowRezJam 2020: "Blur"

"Blur" was my solo entry to the LowRezJam 2020, a game jam where you have to make a game with a maximum resolution of 64x64 pixels. I decided to make a sound-driven story game where you play an astronaut trying to safety navigate their spacecraft back to Earth after an explosion on the spacecraft. The general idea of the game is that you regain consciousness after the accident and are experiencing temporary loss of vision: the game begins with a resolution of 1x1 pixel. As you start to regain your sense and get you spacecraft back in order, your vision slowly starts to return as the game progresses from 2x2 pixels to 4x4 pixels to 8x8 pixels and eventually 64x64 pixels by the end of the game. With the help of ground control over the radio you need to problem solve your way through malfunctioning subsystems, power restarts, communication failures, fire in the cabin and eventually safely re-enter your spacecraft back down to the ground.



I had a lot of fun making this game: because it was so dependant on sound, it relied pretty heavily on some voice acting, a script and various sound effects, so it was a good learning experience trying to do a lot of this stuff for the first time in a game. It made me realise too that making sound-driven games is really hard to get right and find good puzzles and mechanics.




The game was programmed in Python/Pygame and there are both Windows and Mac OSX builds of the game (made via PyInstaller) that are available, as well as the game source code, here:

"Blur" by mit-mit on itch.io (https://mit-mit-mit-mit.itch.io/blur)


Saturday, June 27, 2020

Game Music

As much as I enjoy working on code and game design for game jams, recently I've been having a lot of fun working on audio and music: I think game music is really cool to work on, because like with film, the music has to support the themes, atmosphere, pacing and story that's going on in the game. I think game music is fun too, because it's easy to draw from lots of different genres and styles of music, and people accept that game music can sound a bit quirky.

I've worked on music for a couple of recent jams:


https://soundcloud.com/user-349094787/improbable-mission-force-medley
"Improbable Mission Force" (https://pyweek.org/e/pw---__/) was a PyWeek 28 Entry for the theme "Tower" that I worked on with some PyWeek veterans: I did the music/audio and a bunch of 2D artwork, plus some script and voice-acting: was super fun. Game started off in a sort of Die Hard-like 2D shooter, but then halfway through the jam our graphics-guy showed us the player character art, which was a bit more like xXx so the music made a bit of a turn from action-orchestra to punk and guitars, and some how synths got in there and it was lots of fun.


https://soundcloud.com/user-349094787/bunker-builder
"Bunker Builder" (https://alakajam.com/8th-alakajam/874/bunker-builder/) was an Alakajam #8 entry I worked on the audio for: I took a lot of inspiration from the the soundtrack to WarGames.




https://soundcloud.com/user-349094787/el-ratto
"El Ratto" (https://karhal.itch.io/el-ratto) was an entry to the Historically Accurate Game Jam #2, in April 2020 for the theme "Black Death": this one was fun because I got to do a bit a research on medieval music, and had a go at playing with traditional instruments.

https://soundcloud.com/user-349094787/hackr0ute
"Hack::R0ute" (https://alakajam.com/scorespace-alakajam/961/hackr0ute/) was an entry to the ScoreSpace x Alakajam Game Jam in June 2020 for the theme "Connections". I worked on audio/music for the game.

I'll keep posting new music I do for jams and other games to my Soundcloud page here:

https://soundcloud.com/user-349094787

Monday, June 8, 2020

French Knitting

So with the world falling apart around us with coronavirus, we are all stuck at home and getting pretty bored. My older son built a french-knitter out of a toilet roll and some paddle pop sticks (just like I remember doing as a kid also) and started making endless lengths of woollen cord. It looked like fun, and I wanted to join in: but I didn't really want to make cord: I thought it would be cool to make something that would be more useful, and I was interested to understand how the principle of simple french knitting extended to larger spools. So, we went ahead and built this one:

It's about 20 cm in diameter and is made up of 22 pegs and knits a tube about 10cm in diameter. My son quickly took it over and started creating tubes that you tie off at one end so they are kind of like a baby's beanie. It was pretty cool: he ended up making sleeping bags for toys and giving some away to the neighbours and other people we know.

I don't think I was quite satisfied yet, so as a next logical progression, we built this one:

This weighed in at a slightly more impressive 40 cm and 51 pegs: put together with some old Ikea cardboard packaging. This was a bit more useful for me as it knitted a tube approximately 20 cm in diameter which makes a good sized winter scarf. Only problem is it does take along time to knit: I guess I'm not a seasoned knitter, so it seemed like a long time to me: at fifty-ish pegs per round and an approximately 2 meter scarf needing 210 rounds across 7 colours, there were about 10,500 stitches involved, which took me about 3 weeks of work, working about 45-60 minutes a night ... it's the sort of thing I'd probably do once just to satisfy my curiosity, but probably won't try again :). I got about half way through my second colour (orange as pictured above) before my fingers started to blister and I couldn't go on :) ... I ended up breaking a kebab stick in half and using it as a make-shift knitting needle, which worked a treat: craft for me is strictly using hackish, inappropriate tools to get the job done :).



Actually, working on this project has re-affirmed for me how much I don't really like repetitive manual work, even if knitting is sort of relaxing, I guess. I'm pretty chuffed with my cool scarf, though. I'm thinking about putting a bit of research into building my own automatic tube-knitting machine, so I guess there might be a part two to this post if I end up building something.