LD40 Post-Mortem: TARJECTORIES 2
Play and Rate TARJECTORIES 2
If you're looking for ratings, rate my game, and I'll rate yours. I love feedback, and it's important to me that I always reciprocate with a fair and honest review of your game.
Theme struggles
I often have a hard time coming to terms with the theme. It seems that when a theme is announced, I either have an immediate good idea, in which case I enjoy my weekend and produce something decent, or I have no ideas at all, and after a few hours of trying to come up with something, I give up and bow out.
I know a lot of people have this problem, you always hear a lot of complaints about the theme, whatever it is. And I know that despite this grumbling, there's always a few thousand games produced each jam, and at least a couple dozen of them each time are well worth playing, regardless of what the theme is.
I guess what I'm saying is: it's me, isn't it. Somehow or other, I need to figure out how to tap into and unleash my creativity, but I don't know yet how to do it.
That said, I also think that there are definitely problems with the theme selection process, such that we could collectively do better. I think that will be a topic for another post.
"The more you have, the worse it is" isn't a bad theme. I just couldn't come up with any good ideas on Friday. I kept thinking of two things: the game of golf, where more strokes is worse, and "Mo' Money, Mo' Problems".
I briefly considered trying to make a basic golf game, which would be a fun programming challenge, but I ultimately just wasn't enthusiastic about it.
I wanted to immerse myself in game dev this weekend one way or another, so while I was waiting for inspiration to strike, on Saturday I returned to my LD38 project, TARJECTORIES, which I hadn't touched since about a week after deadline, and went through my TODO list. I had always wanted to make the game go to 3+ planets, but didn't because I was worried that too many planets would make the level unwinnable. But after trying it out for a bit, it turned out that I could always figure out a way to hit all the targets, although in some cases it was very difficult, and it seemed that I could get up to about 5 planets to fit on a screen.
This "more planets = more problems" aligned "close enough" with the LD40 theme, so I decided to swallow my pride and take the cop-out approach of working on an old game, rather than try to come up with a brand new game. I'm not proud of my creativity fail, but at least I got to work on game dev this weekend. On the other hand, LDJam is all about developers, and as a developer I got to enjoy the experience of revisiting some old code and improving it and adding features to it, and that's a different sort of experience from doing something from scratch, and it's good to have those sort of experiences too.
The Game

First, I needed to clean up the old project.
I recently started actually using my github account, so I created a new repo for the project, and uploaded the old files to it. Then I opened it in GMS and tried to compile it to make sure it still ran. The only problem I had was that I had a variable called global.score, and at some point since LD38, YYG released an update that made it impossible to override the name of built-in variables, which there is already a built-in global GML variable called score. So no biggie, just remove "global." from all my calls to score, and use the built-in variable.
Next, I had some code cleanup to do, and some feature ideas and tweaks that I'd wanted to work on in the post-compo phase, but never got around to. It turned out that I spent almost the entire weekend just doing this. It's nice to have months ago documented all the things I had wanted to do, and not have to re-discover them.
- Convert game from a 2-room game to 1 room to clean up and eliminate redundant code.
- Game over object disappears when you press any key; it says Esc or R. should only respond to Esc or R.
- In oPlanet destroy event, destroy the sprite so it doesn’t leak memory.
- Use a timer to force Level Up reading time.
- Use timing to display one line of text at a time at level end, to guide player’s eyes
- LevelUp next level countdown chime
- completion percentage should be x100
- countdown timer seconds should be shorter than real seconds, skip zero
- check WASD controls - D&S might do same thing
Taking care of these things took a decent chunk of Saturday, but was worth it because it made the project easier to work on. The biggest time sink was getting rid of the second rmGame -- in my LD38 weekend, I first worked on the game as a single-planet game, and once I had it working well, I decided to try adding planets, and had all kinds of problems that I had to spend the rest of the weekend debugging. I wasn't using source control at the time, so rather than risk screwing up my functioning 1-planet room, I duplicated it and added a second planet, and some control code to advance from the first room to the second room after 9 levels completed. The result of this was a lot of redundant code, and some odd bugs resulting from the room transition, and as well from some assumptions that I'd put into the code for the oPlanet without realizing it -- there was a lot of code in oPlanet, and some of it was written assuming that there would only ever be one planet in existence at a time. I spent so much time during LD38 weekend working around those assumptions that I never got to consolidate the project down to one game room. This weekend, I had the time, and I got it done.
Once I had the game working again, I went about improving it. These improvements are all minor. I had the thought that on a 3+ planet level, a planet might block another planet, making it very difficult to hit targets on the far planet. The solution I had in mind was to make the planets destructible, and I had a pretty good idea of how to do it. But as it was a completely new feature, I ended up working on it last, only after I'd finished cleaning up, tweaking, and testing existing features.
There are many differences between TARJECTORIES and TARJECTORIES 2, but most of them are rather subtle.
- Game levels are now more random. Originally the procedurally generated levels had a stable seed, so every play produced the same random values, resulting in the same levels. I liked that about the original game, as it gave different players the same experience, which made it possible for them to compare their performance against each other, and as well to become familiar with the levels and figure out different approaches, improving their skill.
- Level timer and time bonus has been nixed. I wanted to give the player incentive to play quickly, but I found that the game rewards patience and careful aiming more than speed, and in a lot of the 2-planet levels, due to the rotation speeds of the worlds it's not feasible to predict a reasonable amount of time to set the timer to. For a level with two very slow rotating planets, it can take a long time for a shot to line up.
- Par bonus. So instead of a timer bonus, I came up with the idea to replace it with a "par" system. I award bonus points for every shot under par when you complete a level. I think this works better.
- Dashboard tweaks. Originally the dashboard was as much for me to be able to see the state of variables while I was testing/debugging as it was for the player to see relevant information for the game. I tried to re-think the dashboard to make it all about the player. I got rid of things that were stable enough that they no longer needed to be debugged, and anything that was plain enough from the visual look of the level. I also changed the color of the text to yellow, which I think stands out a bit better. And I moved the Shot Power from the dashboard text, and created a power meter on the bottom of the screen.
- Level progression is a bit more accelerated. Feedback from the original was that the early levels progressed too slowly, so I sped things up a bit. Now there's just 5 1-planet levels, and we get up to 3-planet levels by level 11. There are 24 levels in total, where the original game only had 18.
- Scoring tweaks galore. The basic scoring math for the game is pretty simple: 1000 points for a direct hit, multiplied by 2^n for each consecutive hit. 500 points for an indirect hit, and loss of the consecutive hit bonus. A timer bonus of 10 points per tick on the countdown remaining in the level. A perfection bonus for clearing a level of all targets with direct hits and no misses, equal to 10000 points per target, raised to the power of the number of planets. It turns out that the consecutive hit bonus and the perfect bonus on multi-world levels was just way too much. So I capped the consecutive hit bonus at 1000 * 2^8, or 256,000 points, and I changed the perfect bonus to something much more reasonable.
I didn't end up including the destructible planet mechanic. It turns out, I can beat any 5-planet level I've played so far (and I've played a few dozen) without having to resort to destroying a planet. I worked out a way to create deformable sprites, and built a working proof of concept for it very quickly, but then integrating it with my game hit a few snags late Sunday, and I decided to leave it out for the Jam release, even though there's still plenty of time before deadline to work on it. I might go back later and work on it, but I haven't decided yet whether it's really necessary.
Future plans
My future plans for the project are to come up with some more interesting enemies and some different weapons, which will turn this into a different sort of game. I would describe TARJECTORIES as a leisurely, relaxing target practice game. Adding enemies will change this quite a bit, and really make an entirely new game. I think I will probably continue to develop the basic engine of TARJECTORIES, with an eye toward making a very different game from it, that will make this game look like a tech demo.
What went well
- github. I <3 github so much. After years of going "ugh, to learn git I have to get better at command line and figure out how to set all this stuff up by myself" I was like "You know, for $7/mo in order to have private repos, that's not so bad for them to do the setup for me." My workflow is so much better working with github. I've learned to focus my development on one change per commit, and to make many, frequent commits. I think I made close to 20 commits to my repo over the weekend.
- Writing old code that I could happily return to. So often when a programmer revisits old code that they wrote months or years ago, they find an ugly mess that they don't recognize any longer. But I did not have that experience this time. It took me a little bit of time to get my head back into the project, but not much.
What didn't go well
- Theme inspiration. This is on me, I don't want to blame the theme. But I need to figure out how to come up with ideas once the theme is announced. I find that it's not enough to just come up with a game idea that is inspired by the theme; I also have to come up with something that I am excited about, that I can do, and that I can do in a single weekend. That's a tall order. I have a lot more thoughts about theme that are still swirling in my head, so I expect in time once they condense I'll post more about it. But right now I really would like to hear from people who are successful with finding inspiration in theme about how they do it, and try to learn from them.
Source: ldjam.com archive