A game where you have to complete levels in only six moves.
Sounds easy? Well, all of the ways you may think of going about it may sound easy, but when it comes down to the right way, you'll be having a tough time trying to find it...
Also, the game does have music, you just have to turn it on first. You can turn it on in-game or from the Settings Menu.
Note: The Source Code was built in Python 2, though it should be able to work in Python 3.
Day 1 - Game Concept and Start of an Engine
Today was a pretty rough start, not going to lie.
I didn't think 6 was going to be picked (I thought it was a little to vague), so I didn't brainstorm as many ideas for it beforehand. I was a little frustrated as usually I know what I'm going to build before the competition starts because I already have a couple of ideas in place. Since I didn't have as many for 6, I was a little bit disappointed with the few things I was able to think of.
I decided to go with a simple mini game where you have only 6 moves to complete a 6x6 level, where you have to find the right path that uses 6 or less moves to get out of the level. There are different obstacles and objects, such as walls, doors (which can be unlocked by keys), and portals.
Here's a small screenshot of what I have so far (no fancy graphics yet):
I have a pretty early start tomorrow, so I'm going to go to bed.
Day 2 - Game Engine, Level Design, SFX and Music, and More Features
Wow, what a day. I got a whole bunch of things done today, and it was really surprising. I feel like the progress I made today made up for the lack of progress I made yesterday, and maybe a little more.
Today I decided to make it so the Player can move in 8 different directions, and they can choose where they want to go by clicking on an adjacent tile that is open for them to go to. I created a system where I can load TMX files and turn them intro a sprite map (more about that later). I also created a system for myself that allows me to link objects to other objects (like a key to a door), which can be pulled from a text file and turned into data values inside sprites which will then do something when the trigger object is interacted with (like when you collect a key it unlocks a door).
SFX and Music
Usually I don't get to this until the last day or two. But today, I created all the Sound Effects for Moving, Clicking, Completing a Level, Dying, Teleporting, as well as Picking up Keys and Gems. I spent around an hour today creating two Game Loops, one for the Menu Screen, and the other for early Gameplay. I got some of my folks to listen to it and they had a better reaction to how it sounded than I thought they would, as I have had minimal experience composing (maybe a couple of times in Band Class a year or two back). I'm interested to see how other people think of it and how well they think it fits with the gameplay and scenario.
For creating levels, I decided to learn this new module called PyTMX, which basically just loads TMX format maps into Python for use with Pygame and other modules. I also learned how to use Tiled, which you may have heard of, which is a TMX map editor and TSX tileset creator. This saved me a whole bunch of time, as I remember in my PyWeek 25 and 24 entries I was spending hours transferring a level from paper to computer. Now I can do it in less than ten minutes, which I'm really excited about because it'll give me a lot more time to expand on the game and increase its quality.
I was able to design 3 Tutorial Levels, 5 Easy Levels, and 2 Intermediate Levels, which took me less than 2 hours at most. As the difficulty increases, I decided to gradually introduce new obstacles and objects to the player so they can get used to using it and learning how to use it to their advantage or how to avoid it.
I added a lot of new in-game obstacles and objects today that can help / harm the player, such as:
- Hidden Walls that Appear when you cross an imaginary line.
- Conveyor Belts which allow you to move farther while using less turns.
- Hidden Traps which you can't see, and when you step on them they instantly kill you.
- Crumbling Floors (Temporary Name) is basically a floor where when you step off of it, it will crumble away and reveal a trap so you can't walk back on that tile again.
As mentioned in the last section, I created a Tutorial for learning the ropes of the game, and introducing the first, and probably the simplest obstacle in the game. I'm going to get some friends to play it tomorrow to see if there is anything they don't understand or are confused about the Tutorial and I'll fix it after that.
Some other Miniature Features I added:
- A Restart Level Function
- A Full screen Mode
- An Indication that tells you whether the Tile you are hovering over is open and that you can move to it.
Basic UI Design
This PyWeek I tried to speed up my workflow by making it much easier to create Text and Buttons. Earlier I was spending a while trying to correctly position, center, copy, paste, and modify code from different text renders. So I created a whole bunch of easy functions where I can just put in text, specify where I want it, and wether I want it centered, and ta-da, I just saved myself 2 minutes of my time.
More Specifically, I created some menus:
- Main Menu Screen
- Pause Screen
- Settings Screen (temporarily empty)
- How to Play Screen (temporarily empty)
I still haven't worked much on Graphics yet, as I'm going to wait until I've completed all of the Levels to do that, but for now, here's a screenshot of the Tutorial:
I've still got lots to do tomorrow, so I'm going to get to bed.
Day 3 - Graphics, Animations, and More Levels
Today was a productive day. Not as productive as it could've been, but it still was very productive.
So I got a funny award yesterday saying my Screenshot looked like a IChing Hexagram. I had absolutely no idea what that was so I looked it up and it did look a lot like my minimalist temporary graphics I had. That reminded me I actually need to start making Graphics, so thank you for whoever gave me that award. So I spent a couple of hours in Photoshop today putting together some pixel tiles and objects for use in game, and ultimately this is what the result was:
I also switched fonts from the Default Pygame font to a cooler pixel font to match with the pixel graphics.
Another awesome thing I did today is I created animations for the Player (which is now a cute little slime). I made it look smoother when you move from tile to tile and when you enter portals. I also made it so he bobs up and down as time goes on. There was one other block that I spent a lot of time on today so I decided to make some temporary animations for it, which was the portal.
Here's a demo of the new animations in-game:
I sort of had what I guess you could call a "writers block" but for Level Design. I was only to make 3 Levels today because I got a little too obsessed over making the levels just the right amount of difficulty. Though I was still able to churn out some quality levels.
In the end, it was a productive day and I'm happy with what I was able to accomplish. See you all tomorrow.
Day 4 - More Animations, Graphics, and more Levels
I didn't do much today for a couple of different reasons (mostly I was stuck and I didn't know how to move on with one thing, but I eventually just decided to do something else). But I'll post here anyway just for the sake of it.
I've added a new system for animating blocks, and I added animations for keys and traps (though the traps have a bit of a weird animation). I added graphics for Doors and Hidden Traps.
I wasn't able to make as many levels as I usually do, as I sort of got stuck on making them today. I kept on obsessing over the difficulty of the level without it being to complex and still trying to be able to fit everything I was going to put in inside a 5x5 square. I'm starting to think about re-doing some of the levels to make them less boring and a little complex, but I don't exactly know how to do that just yet, I'll think about it a little more tonight.
Day 5 - Level Re-Design, More Tricks, More Graphics
So today was a bit more productive. I figured out a way I could overcome my Level Design Obstacle, and it seems to be working generally well.
When I design and order different levels, I like to make it gradually harder by slowly introducing new objects. I thought about my dilemma I had last night and I thought about if I introduced a different obstacle that could help me design more complex levels earlier in the game. That obstacle, oddly, was the Conveyor Belt. It helped me create it so you can reach harder places of the level in less amount of time, and possibly even mislead you to the point where your stuck (as you can't go backwards on a conveyor belt that's facing towards you). So I tried it out, and I was able to design some more generally complex levels, though it did take me a little bit to think of them and I didn't make too many of them, but hey, quality and not quantity, right?
I also added some more tricks to make it more deceiving and puzzling, including some of the following:
- Walls can also disappear now, so it opens up some new pathways but more decisions to make.
- Selected Conveyor Belts can switch directions every move, so you'll either be able to come back the way you came or have to spend another move getting the conveyor belt to go in the direction you're going in.
I added some pretty nice graphics for conveyor belts, and you can clearly see which direction they are going in. I also made the Exit Staircase stand out a little more, I'm not sure if it's a big enough contrast and if it stands out enough, what do you guys think? (Look at the screenshot below)
(It's the green flag if you can't tell)
Also, is it just me or did anybody else notice that today is the 27th of March (in my timezone) during the 27th PyWeek? I thought that was sort of neat and I thought I'd point it out.
I'm going to bed, as I'm getting up early tomorrow and I have a bit of homework I need to do as well.
Day 6 - Level Re-Design Finished, Playtesting, More Audio
Today went much better, as I was able to redesign all of the levels to the point were I have some moderately challenging levels. They're not over the top hard, but they're not easy to where the levels pointless. I think I made around 7 - 10 levels today, but it could've been from yesterday (I barely slept last night so my brain has kind of checked out today, so I don't know).
And then I got somebody to play test the game today. I thought it was going to be too easy and that they could whip through the levels in seconds (which is what I had been doing to test for bugs). I thought I was going to have to make them even harder for there to even be a point in playing them.
But alas, that was only my perspective, and I was totally incorrect.
From what I saw, it seemed challenging, and I watched them take a bit to figure out where they needed to go, whether it be planned or by trial and error. They said it seemed tricky and it sort of hooked them in for a second or there too, which was great. It was very encouraging to see that I was taking a step in the right direction and it inspired me to keep on going strong.
I also created two new background music loops for the game, both having completely different styles/themes or whatever you want to call it. One of them I built off of the little thinking song from Jeopardy, as I thought it would fit in a puzzle game where you have to think about what you're going to do next and where you are going. Another one I made seemed sort of evil, sort of like you were in this situation where you were stuck and each thing you did had a negative outcome.
Also no screenshot today because I didn't work on Graphics at all, so there's nothing new to see there.
I still have a lot of homework to do and I have a test tomorrow so I have to get studying, and I have a whole bunch of things I need to finish with the game, so I'm going to get to bed.
Day 7 - How To Play and Level Select Screens, Graphical Fixes + Some Animations
To be honest, the game is pretty much done. I could turn it in right now and be content with what I built this week. But I don't have the "content" mindset. Everything's got to the best I can make it. And that's what I'm going to do.
Anyways, here's what I did today:
Level Selector and How to Play Screen
I started drafting a How to Play Screen this morning and planning out everything I was going to write and diagrams and other visual aids. I got one of my family members to proofread it later in the afternoon, and it ended up being mostly clear and not much I needed to change. So I got that done with no problems.
Then there's the level select screen. This one was a little bit harder to make. Originally I was going to have all of the levels on one screen, with a screenshot that you can click on to start the level. Unfortunately, when those screenshots got resized by Pygame, they looked about as bad as a blurry photo that looked like a crusty JPEG, if you know what I mean. So I decided to only put one screenshot on the entire screen, and you can just hit scroll through which level you want to pick.
Graphical Fixes and Animations
So I decided to mess a little bit with some of the Graphics today. I didn't really like how the Audio and Music Buttons came out when you see them in game, so I decided to re-do them. I also started sketching out a Logo for the game as well.
I also created a pretty cool animation today that when your player runs into a wall, it makes a splat sound and he squishes into the shape of an X, so I thought that was kind of cool. Here's a video of it:
Here's another screenshot of one of the later levels as well:
Big Day Tomorrow, Good Luck to you all, and get some sleep tonight.