phill

phill makes a game

Recommended Posts

Hi all,

 

I was talking with folks in the #gamedev slack channel about how to keep myself motivated and accountable as a hobbyist game developer and they suggested that it'd be a good idea to put myself out there in the public and commit to a devlog. So here I am.

 

My plan involves weekly goal setting, some brief brainstorming, and then a review at the end of each week of what I achieved. I don't think I'll put up any test builds or anything, but I might do some .gifs. Fair warning that my art assets will be bad, because I tend to reuse random old assets or make them deliberately super shitty so that the look of the game doesn't obscure/compensate for the mechanics.

 

The game I'm making is trying to be a thoughtful top-down/billboard 2D combat game with a focus on movement and avoidance of attack patterns. I want to layer a roguelike resource management game on top of that, but players won't get to that bit if the inner loop sucks so I'm focusing on the combat mechanics first.

 

Anyway, watch on as I try to guilt myself into doing the thing that I like to do in my spare time.

Share this post


Link to post
Share on other sites

27/01 to 03/02


Goals:

  1. Develop a state machine for a new enemy that jumps to attack the player.
  2. Refactor the enemy ‘type’ system for lifting groups of enemies. I’m currently using a weird maths thing rather than having an array that I can loop through.
  3. Make a building that spawns enemies and waits for the player to attack before moving them all out of their Idle state.

Goals scratch:
State machine:

  • Idle: Dummy state for the moment. Will eventually be a kind of pre-idle state where the enemies move around and do little idle animations. Waits for a signal from the building that spawned it to kick the jumper to its neutral state. -> Neutral
  • Neutral: Checks whether the player is close or far away (radii TBD) and either moves to attack or retreat states. -> Attack | -> Retreat.
  • Attack: Sets destination x,y to the player’s current future position in a second. Telegraphs the attack with a circle with a growing radius and increasing opacity. Moves to position with a jump that goes through everything (not sure if jumps off screen, or just appears to be far above everything). Is stunned for a short time on landing. -> Idle.
  • Retreat: Does a short hop directly away from the player. -> Idle

Refactor types:

  • This one is actually just a pain to explain, so I'll just say it’s definitely achievable.

Building spawn:

  • Have a list of the types and numbers of enemies to spawn, plus their initial positions, stored in the building. Can use ds_ for this.
  • Then need to loop through the list of enemy IDs to let ‘em rip. Would be nice to maybe have an order function built in so that later I can layer fights a bit better rather than every man for himself. Though I could also achieve this by reusing an old bit of ‘battle circle’ code within the enemy state machine. Which could give them more interesting combat.

Share this post


Link to post
Share on other sites
7 hours ago, clyde said:

Cool. What engine are you using?

 

Using Gamemaker 2. I've used gamemaker studio for ages but the new one is quite an improvement.

Share this post


Link to post
Share on other sites

Glad to see you've started this! I'm excited to see images and read updates of your progress. Best of luck!

Share this post


Link to post
Share on other sites
6 hours ago, Travis said:

Glad to see you've started this! I'm excited to see images and read updates of your progress. Best of luck!

 

Thanks Travis! I appreciate that you guys pushed me to do it. I've already accomplished more in a couple of days than I would in a week. :)

Share this post


Link to post
Share on other sites

Review 27/01- 03/02

 

Goals:

1. New enemy that jump attacks

I did this! It actually took way longer than I thought it would, as I had to relearn all my old-ass physics calculations/algebra in general. Thanks heaps to @Lork who linked me to this very good post about how to make ballistic projectiles look nice. The finished product looks roughly like this (sans debug text, and using my CBF assets):

2. Refactor the enemy ‘type’ system

I didn't do this! I actually spent way too long trying to fix this tiny little issue which doesn't really affect anything, before deciding that I'd have to completely re-do the way I do stacks of enemies. This probably is going to happen, but I may delay it while I get more important things like the extra AI behaviours going.

 

3. Building spawning stuff

I did this! I won't post an image of enemies sitting around not doing anything, but it works, and now I can make a start on trying to get interesting spawn behaviours/layers so the player isn't just instantly overwhelmed with enemies.

 

Additional Stuff:

  • Fixed an issue where the player walking against a building would cause them to transition between idle and walk states every frame and look like they were having a seizure.
  • Worked on my Wizard Jam 4 game a bit to add in some fun extras for the gang.

New goals up next!

 

Share this post


Link to post
Share on other sites
3 minutes ago, phill said:

27/01/2017 to 03/02/2017 Review

 

Goals:

1. New enemy that jump attacks

I did this! It actually took way longer than I thought it would, as I had to relearn all my old-ass physics calculations/algebra in general. Thanks heaps to @Lork who linked me to this very good post about how to make ballistic projectiles look nice. The finished product looks roughly like this (sans debug text, and using my CBF assets):

 

This is looking really good. My only comment would be that the shadow (I assume that's the rectangle) should be getting smaller while the blob is getting bigger. I only noticed this after being hypnotized by the gif for a long while.

Share this post


Link to post
Share on other sites
1 minute ago, Travis said:

 

This is looking really good. My only comment would be that the shadow (I assume that's the rectangle) should be getting smaller while the blob is getting bigger. I only noticed this after being hypnotized by the gif for a long while.

 

Oh! I should have taken that out, it's the hitbox for the enemy, i.e. where he's actually travelling rather than what I'm drawing him doing. Actually, you've now prompted me to make one of my next goals figuring out how to make the jumps work with obstacles in the middle of them, thanks! :D

Share this post


Link to post
Share on other sites


04/02 - 09/02

Shorter period this time as I go back on shift next week, so I'll be completely unable to work on anything for two weeks from Thursday the 9th. I'm going to adjust my goals accordingly!

Goals:

  1. Improve jumping enemy to deal with obstacles between start and end points, and also give him an AoE effect on landing to make it a bit more tricky to dodge.
  2. Enemy spawning layers and timings.

Goals Scratch:

Jumping enemy:

 

AoE attack is fairly easy, I'll just check if the player is within a radius of the landing point and switch the player to their 'hit' state if they are. At the moment, the jumping enemy can collide with obstacles if they are in the way of the direct line between the enemy and the player. It looks really weird because even if the obstacle is, say, 32x32px (e.g. not apparently 'tall' enough to stop the enemy jump) and the enemy is halfway through the jumping animation, it'll collide and slide off in either the x or y directions. This also mucks up the calculation of the ending of jump animation, making it so it does not line up with the actual hitbox: http://imgur.com/OY6oyAg. So either I have to basically just say that it'll never collide with obstacles during its jump (which may end up looking weird, I'm going to have to test it) or I have to figure out a way of sorting out which obstacles it should be allowed to jump over. The latter will probably be pretty tricky and involve some depth calculations, which should be interesting.

 

Enemy spawning:

The basis of the game will be throwing enemies into buildings, within mini-arenas. So I need to make sure that enemies spawn in a reasonable way, so as not to completely overwhelm the player, and to make the gameplay a bit more interesting and varied. I think the best way to do this would have a pool of enemies that the arena can pull from, each worth a certain number of points depending on their difficulty. Then for each wave, the arena makes up a new squad of enemies with a max number of points dependent on a difficulty modifier (TBD how that would be calculated). So I'm going to make a start on that kind of system.

 

Building System:

I'm thinking a bit forward on this one, as when I was writing out my system on the enemy spawning I started thinking about what kind of spawning I actually needed? In terms of player incentives and how to make combat something that can be nuanced, rather than just kill all the things. So here are some scratch thoughts on a system so that I can ask people's opinion at a later date:

General building/arena system:

  • Each arena will have one building(/objective.)
  • This building can be made up of different sections, but a basic version would be an object that takes up the entirety of the North side of an arena. More advanced/interesting versions could be buildings that occupy different sides of the arena as a function of time, or weak points that open after fulfilling a requirement.
  • The arena's Building has a HP that needs to be filled.
  • The player fills this by throwing stunned enemies into it.
  • Each enemy is worth a certain amount of HP, dependent on their difficulty.
  • Enemies spawn in waves.
  • There is no time limit, but there is a meta variable that determines how many waves the player can face per overall day (day/night progression cycle is the outer loop). So the player is incentivised to be efficient with their combat and not kill too many enemies, but use all of them to throw into the building.

Share this post


Link to post
Share on other sites

Review 04/02 - 09/02

Goals:

1. Improve jumping enemy

I did this! I ended up going with the idea of making the jumping enemy not collide with any obstacles during the jump. I'll have to make sure that I keep an eye out on any mechanics that I add that can mess with this. At the moment it's fine because he will be jumping to a player position every time, and the player can't be anywhere 'illegal' (e.g. inside a wall). But if I start doing something like spawning in obstacles, I'll need to do a check on landing in the case that between starting the jump and landing, an obstacle is spawned at his landing point. Overall though, happy with the behaviour and the dynamic that it introduces to the player movement:

I do still need to work on their behaviours a little bit to try and catch situations where they are all jumping at the same time and/or landing on the same point. Otherwise with my current position handling you end up with weird-looking behaviour like this:

---

 

2. Enemy spawning layers and timings

I did this, sort of! I've got a fairly simple system going wherein I have a pool of points and spawn enemies at set locations. But it seems a little too specific. I'm going to have a think about how to properly structure the pool of points so that the player isn't seeing the same enemies each time, like different ways of weighting enemies when they haven't made an appearance for a while, how to ensure certain enemies are included after wave X, and all that jazz. It's a strangely fun thing to think about. Anyway, here's me resetting the game to see what results I get:

 

Share this post


Link to post
Share on other sites

09/02 - 23/02

 

This is a longer period, as I'm going back on shift at work. I work pretty long days so afterwards I'm usually knackered so won't have much in the way of energy to work on gamedev stuff. So I'm going to set myself some more manageable/idea-driven goals rather than coding. Then hopefully when I'm off shift again I'll have some pseudo code straight in my head to just jam out.

 

Goals

1. Come up with a new enemy. At the moment I'm thinking about a guy that avoids your dash by zigzagging when you try to dash at him, with a cooldown on the zigzag. It'd be a neat little thing to try and calculate when a player was dashing near him.

2. Figure out the building system. I want to try and figure out exactly how I want to incentivise the player to be efficient. Whether it's by bonuses for throwing multiple enemies into the building at once, or by doing it in a certain order. I don't just want the player to be able to throw each enemy one by one into the building without any requirements if they want to get the best result.

Share this post


Link to post
Share on other sites

I love in the spawning gif how the orange ones hang back while the rest charge and then they pounce. Cool. Cool.

Share this post


Link to post
Share on other sites

Review 09/02 - 23/02

Goals

1. Come up with a new enemy

I did this! I've got some pseudo-code for a new enemy that moves based on triangular movement paths, and moves differently if the player is dashing or just walking towards them.

 

2. Figure out the building system

I did this! I figured that I want to have enemy (worker) waves be one of the currencies of the game. The player will be incentivised to use the fewest waves of workers to complete a building so that they can use any saved waves to complete other buildings. This has had implications on a few other mechanics (which I'll detail in my next post), but I think it's a fairly elegant solution to the problem of how to get players to focus on combining enemies and using the mechanics of the worker/building system without feeling rushed by something like a time limit.

  • Worker waves are one of the primary currencies of the game.
  • Players have X worker waves per 'day' to build up as many buildings as possible.
  • Each building is its own arena that the player selects to enter and build up.
  • When a player enters a building arena, a set of workers are spawned on a button press.
  • The player can pick up and throw workers at the building to build it.
  • Each worker is worth a certain number of building points (BP) scaled to their base difficulty.
  • Combining workers by throwing them into each other is the way to build up scaling amounts of 'building points' or BP.
  • Need to introduce a stun system to help facilitate this.
  • Can also have a bonus combination of workers that represents a large number of BP but is difficult to pull off.
  • Either can have this be lock and key (a bonus requirement that is guaranteed to be in each worker wave) or be free form/procedural.
  • Also need to consider what the motivation for buildings will be.
  • Perhaps there's events that occur between each shift (a horde) that come and destroy things or don't based on what has been built, and the ultimate goal is to get to some goal of completing all buildings and repelling the horde entirely.
  • This could be the workers getting drunk and rowdy during the night and wrecking everything.

  • Progression could be that you start at a really small mine site, and they don't break that much. So the player only has to be a little efficient to get the mine complete.

  • Work your way up to a massive minesite that has heaps of different guys where you can't waste a single worker, must combine everyone to survive.

  • Roguelike elements where your BP damage can go up for certain workers, or you go through 'training courses' that allow you to combine certain enemies together that you couldn't before.

  • Balancing this so that the slip into it being out of control and nigh on impossible to fix everything (and maybe being impossible, but the player is able to build up over roguedeaths) will be really interesting.

 

Now I just need to figure out how player health/death fits into all this. I'll be making that a goal for the next week. :)

Share this post


Link to post
Share on other sites

These mechanics are sounding really interesting. Looking forward to you getting things hashed out.

Share this post


Link to post
Share on other sites

23/02 to 3/03


Goals:

  1. Develop a state machine for a new mini boss-type enemy that takes a couple of hits to become able to be thrown.
  2. Work on the player-driven spawning system as described in my previous post. This will probably take a bit of mucking about to make it future proof (e.g. handling the addition of enemies to the pool of possible enemies, scaling, etc.).
  3. Work on outer loop by creating an arena select, and putting together a few slightly different arena layouts.

Goals scratch:
Mini boss:

  • When hit by other workers, does not lose momentum, just adds emote (of some sort) above head.
  • Has a number of hits before becoming stunned. 
  • When stunned, player can pick mini boss up (can't be combined).
  • Maybe the type of enemy that player uses to stun can influence end result of mini boss damage? e.g. if mini boss has 3 hp before being stunned, 3 different enemies gives him more overall BP damage than if 2 different types of enemies used.
  • Slow move + full-screen cross as an attack hitbox.

 

Spawning system:

In idle state:

  • Start with a static pool of points that can be spent on spawning.
  • Check if there are enemies in the room.
  • If there's not, when the player presses spawn button, move to spawn state.

In spawn state:

  • Empty pool points by spending them on enemies and putting them in a 'to spawn' list.
  • Run through the list and spawn the enemies in the level.
  • Decrease the player's number of waves to generate by one.
  • Go back to idle state.

 

Arenas:

Create level select map where the player selects which building they want to enter and try and build (thinking something like the overworld maps from Mario/shovel knight).

In level select, show BP required for building to be complete, enemies that spawn there, and any other relevant stats.

  • How to do this though? 
  • Overall controller object that is persistent through rooms, keeps track of stats.

 

Share this post


Link to post
Share on other sites

 

Edited by phill
This post went way funky for some reason. Reposted this and the next post in the most-recent comment.

Share this post


Link to post
Share on other sites

Review 23/02 - 03/03
This wasn't the best week in the world. I went through some serious self-doubt and general depression, so ended up spending a lot more time watching Netflix and playing non-competitive games than I did actually coding. Anyway, I'm feeling a bit better this week, so hopefully I can turn some of these yellows and reds into greens.
Goals
1. Develop a state machine for a new mini boss-type enemy that takes a couple of hits to become able to be thrown.
I didn't do this! I came up with the pseudo code, but then I kind of got lost in the other goals, so I didn't end up coding him up. I'm going to make this the first priority after I finish off the next two things, since I'm kind of deep into them.


2. Work on the player-driven spawning system as described in my previous post. This will probably take a bit of mucking about to make it future proof (e.g. handling the addition of enemies to the pool of possible enemies, scaling, etc.).
I sort of did this! I have implemented a system that the player can use to spawn waves, and those waves are made up of a pool that can be accessed and changed by other systems. But it definitely doesn't feel complete without the outer loop to make it more interesting. So I'm claiming a half-victory on this one.


3. Work on outer loop by creating an arena select, and putting together a few slightly different arena layouts.
I sort of did this! Goodness but did I get stuck on this. I pretty quickly complete the arena select, but then I got stuck thinking about the future in terms of how the arenas would retain their attributes. I don't know why it stumped me so badly, but I still haven't fully sorted out everything. I think it's because I got a particular idea of how to do it, which wasn't the most ideal, and I kept trying to hammer that instead of backing up and retrying with something different. So that's my main goal for the next week.

 

04/03 to 11/03

Goals:

  1. Finish up the arena select/arena creation/arena stats tracking system. This may take a while as I try and find the best way to at least attempt to future-proof it.
  2. Work on at least one new enemy as described above.

Goals scratch:

Share this post


Link to post
Share on other sites

Sorry to hear you were having a rough time, but it seems like you chilled out and have recovered, which is good. Making more progress!

Share this post


Link to post
Share on other sites

There is a lot of depth mentioned above and I am very curious to see things come together. I am enjoying watching things progress thus far. I hope you are feeling good and that things are working out.

Share this post


Link to post
Share on other sites
On 03/03/2017 at 3:54 PM, Travis said:

Sorry to hear you were having a rough time, but it seems like you chilled out and have recovered, which is good. Making more progress!

 

On 08/03/2017 at 8:43 AM, theschap said:

There is a lot of depth mentioned above and I am very curious to see things come together. I am enjoying watching things progress thus far. I hope you are feeling good and that things are working out.

 

Thanks guys <3. I really appreciate the comments and support, means a lot when I really have zero people in my town that do this stuff. This and the slack are my gamedev community, as cheesy as that sounds!

 

Review 04/03 to 11/03

Goals

1. Finish up the arena select/arena creation/arena stats tracking system. This may take a while as I try and find the best way to at least attempt to future-proof it.

I did this! Here's a video the day that I finally cracked the code on the system:

 

And here's one where I implemented it back into my main project file so that I could use a player rather than the power of imagination:

 

I was going to take that first video out, but I kind of like how it shows the before and after of a framework and then that framework as put back into the actual game. I think it's a valuable lesson/thing to keep in mind for me as a fledgling gamedev.

 

2. Work on at least one new enemy as described above.

I didn't do this! This is now priority number one for my next few days before I go back to work. It'll actually be nice to go back to trying to program behaviour after the more database-y stuff I've done over the past couple of weeks.

 

Share this post


Link to post
Share on other sites

11/03 to 15/03

Shorter period as I'm going back to work, so my gamedev will go back on pause while I'm on shift.

Goals:

  1. At least one new enemy as per the two designs I mentioned in previous posts.
  2. Map out how to structure the outer loop of the game, i.e. bonuses, worker scaling, building and destruction loop, etc.

Share this post


Link to post
Share on other sites

Lol what if the mini bosses were workers union representatives/osha inspectors.. a game about workplace standards violation. For real though nice progress thus far :). I think finding a way to motivate yourself is crucial and it seems like you've cracked it. Looking forward to see where you take this. 

Share this post


Link to post
Share on other sites
10 hours ago, infamous space turtle said:

Lol what if the mini bosses were workers union representatives/osha inspectors.. a game about workplace standards violation. For real though nice progress thus far :). I think finding a way to motivate yourself is crucial and it seems like you've cracked it. Looking forward to see where you take this. 

 

You're pretty close to the main theme actually! I want to theme it around a series of mine sites/construction yards whereby the workers are used to build the different buildings. Then they get drunk and smash things up overnight! So an inspector type worker is definitely something I've considered and actually have some mechanics written down for it. :)

 

Thanks for the support mate, I really appreciate it! As I said in the post up there, my town (Darwin) does not have a lot of gamedevs in it (none other than me, afaik) so this is basically my community atm. <3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now