Dess M-8 Dudes

For those who don't know, I released a mobile game a couple years ago called Dess M-8. It wasn't very good, but I had some fun with it on the later levels. Since it was a complete game, I had assets. I wanted to make followers in the new game that I'm working on so I decided to use the Dess M-8 main ship.

I ended up making 5 different ships...

5 different ship styles and gun types that are unlockable in Dess M-8. Once I created the core code to ease the bots in when you pick up their item, make them smoothly idle around the player, and face enemies or the player depending on their state, it was easy to iterate new followers. It's simply making a new bullet if necessary, modifying shot speed/frequency/damage, giving the player variables to know which bot they picked up, and making sure the room spawner doesn't try to grab it on floor clear. Boom. Done. It takes about 5-10 minutes to create and test a new follower. This is super exciting. This means that if I think of a strange fire pattern or bullet type, I can give it to a follower and have a new little drone ready to go.

I'm considering making a bonus for getting all of the Dess M-8 ships. Maybe a voltron style combo drone that fires all of the bullets at once. Maybe it could fly towards enemies as well instead of waiting to shoot when they're in range. There are lots of maybes in game development. XD

I think the next thing I'll probably toy with is "chance" bullets with special effects. Bonus damage or damage over time on hit could be cool. Create a secondary "expertise" stat that when increased allows the "chance" bullets to appear more often. Basically just better RNG.

I'm feeling the game come together much better with the introduction of new items with effects beyond increasing damage, speed, fire rate, and health. This is going to be half of the bread and butter of the game. It's what will lead to zany and/or overpowered runs. The other half of the bread and butter is going to be the quest system. I have a good feeling about the quest content. I think it's going to add lots of risk/reward, exploration, and mystery to the game.

I'm still trying to nail down the lore to the game. I have a world thought out, I just need a story to give the player purpose. I'll make that my goal for tonight. Create a quick backstory and endgame.

Until next time.

_Doombrowski

Water Tiling and the Bane of My Existence

I've been putting in lots of work on "Delivery Man" lately. I've even started working on some art assets to try to expedite the process. 

Still finding some glitches in the tile code when I went to make that little video. I think it's looking pretty decent though. I know it's just water, but it's a step in the right direction. I based it off of the Pedro Medeiros tutorial. That guy has some great stuff.

On to the bane...Water sprites and tiling are not it; It's collisions and pathfinding. I've been working on this for a flippin month, and still have yet to find a reliable way to keep enemies from getting stuck in objects and each other. I have a pretty decent pathfinding script (though it makes enemies move in little circles when another enemy is blocking it's path). The main issue is showing up with these 2 phase chaser enemies that I'm working on. When they go into their dormant phase after taking X damage, they're confusing the other enemies (hence the swirly movement). It's almost like I need to make them act like floor items and be able to be pushed by other enemies and no longer avoided when they're in that dormant phase. they're also either coming out of the dormant phase full of piss and vinegar going way too fast, or they exit the phase and accelerate very slowly. It's really strange. Also, the size of the enemy changes when it goes dormant, which causes issues when it changes back into its normal size. I just made the hitbox universal for now, but it'll need to be fixed. Currently you can shoot through the top of the enemy without hitting it.

Player movement is good. That's something to be thankful for. The day I figure out enemies, I'm going to celebrate.

I'm thinking about making some vlog posts with more frequent updates on Delivery Man soon. Keep your eyes open for that.

Also, Salt Assault didn't reach the minimum IndieGoGo funding amount to claim any funds. I think I'll probably pay for a tiny print for myself. I kinda just want to have a nice copy for myself. Not sad about it. I just don't know how to market.

Going to keep cracking on Delivery Man until I have a nice vertical slice of level 1.

Until next time.

_Doombrowski

Like what you see? Consider supporting Doombrowski on Patreon for more sweet stuff including free games and special access to behind the scenes Doombrowski happenings.

Like what you see? Consider supporting Doombrowski on Patreon for more sweet stuff including free games and special access to behind the scenes Doombrowski happenings.

The Procedural Procedure - Making a Big Level From Smaller Parts

I've been pretty excited about getting my room copy and spawn system working in Game Maker Studio 2 and I figured it would be a great opportunity to explain some of the logistics to those who may be interested.

First, there was a list...

Initializing the sub-rooms to be included in the main room

Initializing the sub-rooms to be included in the main room

The above code creates a ds_list, then adds 36 variables to it, including 1,2,3,4, and a bunch of zeroes. After the list is complete, the list is shuffled.

This list will be used to create a 6x6 grid which will be the structure of the final room.

In case you've never seen a grid. I named this one Grid Vicious.

In case you've never seen a grid. I named this one Grid Vicious.

The numbers 1, 2, 3, & 4 are going to be used to identify the starting point, the item room, the shop, and the boss room. The 0s are all generic rooms.

The ds_list_add function in Game Maker only allows for a certain amount of items to be added at a time. I think it's 18? That's why the command is run multiple times instead of once with a for loop. I could have probably done a for loop for each run, but it's honestly easier to just type a bunch of zeroes. 

After the list is finished and shuffled, their positions might look something like this when placed on a grid with each list position continuing left to right and top to bottom.

So number! Much random!

So number! Much random!

Now that the list is created, we're going to put some modifiers in to make it feel more organic.

The method that I decided to use involved creating a "safe grid" by choosing specific points in the list and giving those points an option to change to a "5" if they are currently a "0". 5s will be sub rooms that can be fully obscured, or contain basically anything without obscuring the main objectives due to their positioning. The points are chosen based on their locations to guarantee that no matter how many of those 0s are changed to 5s, every other space will be accessible. 

An example of a "safe grid."

An example of a "safe grid."

Below is the script run to check the darkened squares in the example above.

The pat variable will be used to create even more variance by choosing from multiple patterns.

The pat variable will be used to create even more variance by choosing from multiple patterns.

insert_filler_rooms() script

insert_filler_rooms() script

The loop basically checks each pre-determined position of the list to see if it's a 0 or not, and if it is there's a 70% chance to change it to a 5. This will end up creating something like this:

Notice that the 5s only fill spaces that were black in the previous grid.

Notice that the 5s only fill spaces that were black in the previous grid.

There it is; The final room layout. The only addition that I made to what's above was by creating more safe grids and plugging their list positions into the insert_filler_rooms() script then assigning them to the pat == 2 and pat == 3 options.

Now that I have the ds_list that I'm going to use to spawn the room, I can use my 2 spawner objects to actually create the main room.

This is a bit more involved but I'll explain the basic function of it using the above grid.

  • o_room_spawner persistent object is created in the current room
  • o_room_spawner moves to room 1 on the ds_list that was created upon spawn
         Room 1 chooses from X potential rooms in that group
         This room will be in group 5
  • Once in the chosen group 5 room, create o_room_copier persistent object
  • Copy all instance_id, x_scale, y_scale, rotation, x_position, y_position etc. in the room minus the spawners and save them to a ds_grid using the o_room_copier object
  • After everything is copied, move to the main room
  • Once in the main room, paste the objects in their relative positions at a specific point
         I'll just call it grid_space[0,0]
  • Destroy the o_room_copier object as well as the ds_grid within it and change the amount of rooms copied to +1 in o_room_spawner
  • o_room_spawner then moves to room 2 on the list which is a 0 room

This loop continues, copying to each grid space next in line until the main room is fully populated.

The player and camera are then created, lots of instances outside of the view are shut off, and the player can start exploring.

I'm looking forward to getting some artwork put in the game to make these maps feel more alive. Lots can be done with camera movement and hiding certain things until a specific time. 

Next up is to make a better mini-map!

Lots of work to be done on code name "Delivery Man."

Until next time.

_Doombrowski

Like what you see? Consider supporting Doombrowski on Patreon for more sweet stuff including free games and special access to behind the scenes Doombrowski happenings.

Like what you see? Consider supporting Doombrowski on Patreon for more sweet stuff including free games and special access to behind the scenes Doombrowski happenings.

I'm also trying to publish a card game. Check it out at IndieGoGo.com.

I'm also trying to publish a card game. Check it out at IndieGoGo.com.

Trying to Make Another Game

Since Salt Assault has proven to have no interest, I have been working on a new game idea lately. Player movement, enemy pathfinding, camera movement, and level generation have been the primary focuses lately. 

I'm still branching on the open world dungeon crawler idea. I wrote down some dungeon generation theory yesterday that I plan on trying out today. It uses stacks which I haven't really messed with before. I'm sure it will work fine though. 

Today, I made some optimizations to enemy instances. There were some performance issues when the room spawned with a crap load of enemies in it, so I have created a couple checks that deactivate instances outside of a certain amount of padding from the view. It also reactivates enemies when they're within the padding. This will likely help when I create a minimap as well. The minimap will only show terrain and not enemies.

I'm pretty excited about getting some art for the backgrounds thrown in soon. I already have the player and 1 enemy. 

It's difficult choosing what it is I want to work on next when a game is so early in development. I know what the game needs, but I have trouble prioritizing. I try to write down as many things as possible. There's a white board in my office that I put to do lists on frequently. Maybe I just answered my own issue. Do what's on the white board.

I have nothing going on today so I'll probably crack on making the game more of a game.

Until next time.

_Doombrowski

Check out my Patreon if you're interested in helping grow Doombrowski.

Check out my Patreon if you're interested in helping grow Doombrowski.

Back into Game Maker

Recently, I decided to purchase Game Maker 2. There's this game idea that I've had for a long time that I wanted to toy around with a bit so I decided to do so with the latest and greatest version of Game Maker.

What I'm starting to make is planned to be a procedural rogue-like. Nothing really new. The idea is to take some of the feel of The Binding of Isaac, get rid of the theme and open it up a bit to make it feel less claustrophobic. 

Currently, I've made a placeholder player with basic top-down movement and the beginning of a world generator. 

The world generator has been pretty interesting to create. The idea was to create a map out of multiple rooms all put together on a grid. Sort of like how Spelunky works only with a top down game as opposed to a platformer. I have managed to create a system that will copy rooms as they are in the room editor and paste them into grid spaces in a larger room. The potential of this system is pretty amazing.

Currently, the room copier only grabs the objects, their position, and their scaling. I plan on making it be able to grab backgrounds, tiles, and the image angles of objects also.

This ugly disaster of a room. What the spawner did is pretty amazing, though.

This ugly disaster of a room. What the spawner did is pretty amazing, though.

Friday will also be the start of the Salt Assault IndieGoGo campaign. I should really be cracking on that instead of working on new game stuff but I'm more hype about the new game stuff. I think I'm going to put some money into ads on a few places and hope for the best. Maybe Mr. Cody Gough will be able to point me in the right direction.

Speaking of Cody, I'm supposed to be on an episode of the Game Life Balance US podcast tonight. Should be fun. Hopefully I can bring something to the cast.

Other than what's here, I've been playing a bunch of Dead Cells, just started Cuphead, and played through Ruiner recently. Dead Cells and Ruiner are both super sweet. Cuphead is decent, but doesn't feel like it's giving me anything that other run and gun shooters don't. The theme is fine, but it's not super cool to me.

An off topic note: Making coffee in my french press is where I've seemed to find my zen recently. It's weird.

Until next time.

_Doombrowski