Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

 
Advanced search

1395992 Posts in 67324 Topics- by 60456 Members - Latest Member: Mersy

October 19, 2021, 04:43:30 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsNumbrawler - a fast-paced action game about crunching numbers
Pages: [1]
Print
Author Topic: Numbrawler - a fast-paced action game about crunching numbers  (Read 549 times)
Benjamus_Prime
Level 1
*



View Profile WWW
« on: September 22, 2021, 02:05:53 PM »

Hello everyone! I'm putting together a top-down action game called Numbrawler. Each enemy is represented with a number, and gameplay will revolve around using a grappling hook to throw enemies into each other, subtracting their values from each other. The aim is for gameplay to be fast-paced and strategic, requiring the player to consider how they want to use the enemies on the screen.

My goals for developing this game are:
  • After over 15 years working with Game Maker, learn to use Unity and C#
  • Learn to use FMOD Studio for audio implementation
  • Get practice with tight, focused game design principles

I thought I'd start this devlog early in the process, so I can document my whole design process. Here's how the prototype looks so far:



The mechanics shown here are the basis of the main gameplay:
  • Every enemy has a rank, represented by a number.
  • The player has a grappling hook, which can target enemies and bumpers. The player will move to the target, and then throw the target behind them. If a thrown enemy collides with another enemy, their ranks will be subtracted. For example, if a 1 collides with a 3, the 3 will become a 2, and the 1 will be destroyed.
  • Enemies also have shields, which can be reduced with the player's gun. Enemies can only be grappled if their shield is depleted. Higher rank enemies will have more shield than lower rank enemies.
Enemies will spawn into the field endlessly, and the goal of the game will be to achieve a high score before eventually being overwhelmed.

I was inspired by this newsletter by Rami Ismail to think about the "core" of a game. Essentially, how I've understood it is that a game's core is a central feeling or motivation that a player gets from the game. The mechanics should then directly support that core experience. Here's how I've conceptualized my main ideas for Numbrawler so far:


And that's about it for now! I don't know how far this idea will go, so I'll just have to see how it feels as the prototype develops. Hope to be back with more soon!
« Last Edit: September 28, 2021, 08:27:13 PM by Benjamus_Prime » Logged
Benjamus_Prime
Level 1
*



View Profile WWW
« Reply #1 on: September 28, 2021, 08:26:07 PM »

Small update today. Just working out the look and feel of the game to get an idea of where I'm going. Starting to hone in on an art style:



Obviously still lots of placeholders here, but it's a direction! Never really done this kind of animation before, or used high-res art for a game—so I'm learning lots of new tools all at once!

I decided on a hexagon theme for all the shield visuals in order to unify them. It will be really important for the player to be able to easily tell which enemies are out of shield & can be grappled, so I'm planning out how to make that visual distinction. Hopefully will have more to show on that soon!
Logged
Benjamus_Prime
Level 1
*



View Profile WWW
« Reply #2 on: October 07, 2021, 10:51:58 PM »

Update time! Lots of progress on the visuals, including a more complete tileset, an animation and texture on the grapple rope, a more polished animation for enemy shields, and a blazing trail for throwing enemies:



I also implemented some more dynamic wandering AI for the blobs. I wanted a system that would make their movements more organic, and allow them to avoid clumping together or running into walls. I used a system that checks a set of directions around them, applies weights to them based on desired direction and obstacles, and chooses the direction with the highest weight. You can see it in action here:



I based my system on the one in this Game Endeavor devlog video:






The green lines represent positive weights for desirable directions, and the red lines negative weights for undesirable directions. The white line represents the blob's current movement direction, and you can see it interpolating between the colored lines. The system works roughly as follows:
  • The blob has an ideal wandering direction, which is determined by sampling Perlin noise. The way that works is like this:

    This is an example of Perlin noise taken from the Unity documentation:

    Each blob chooses a random y coordinate to sample at, and the x coordinate is chosen by runtime. The values are converted from a range of (0,1) to (-1,1), and then used to cause the blob's ideal wandering direction to meander left and right at random.
  • Each blob considers 16 directions around it. Each direction is weighted by the cosine of the angle between it and the ideal wandering direction. The direction with the highest positive weight is chosen as the target direction.
  • Blobs consider walls and other enemies as obstacles, in order to prevent them from clinging to walls or clumping together. When an obstacle comes into range along one of the scanned directions, an additional "ideal direction" is added to the system in the opposite direction of the scanned direction and scaled by the proximity of the obstacle (so the desire to move away from the obstacle gets stronger as the obstacle gets closer).
  • That's it! Some small details help to make it smoother, such as:
    • Enemies don't stop moving if they're overlapping with another enemy, and they try to move in opposite directions from each other.
    • Blobs change their target direction faster if they're currently moving in an undesirable (red) direction. This makes it so that if they cross paths with another enemy or run straight into a wall, they can turn around more quickly.
That's all for now! Next up, I'll be implementing a chasing behavior for the blobs when they get close to the player.
Logged
thehorseman007
Level 0
**


View Profile
« Reply #3 on: October 10, 2021, 10:10:11 AM »

I like the artwork, the logic of your game, simply nice and good, Keep up the good work.  Smiley
Good Luck.
Logged
Benjamus_Prime
Level 1
*



View Profile WWW
« Reply #4 on: October 11, 2021, 04:59:30 PM »

I like the artwork, the logic of your game, simply nice and good, Keep up the good work.  Smiley
Good Luck.

Thank you very much for the kind words! Greatly appreciate it Toast Left

~~

Blob chasing behavior

I implemented the chasing behavior for the blobs, and fixed up a few small issues to get the behavior feeling more natural. The wandering system turned out to be robust enough that all I needed to do to add chasing was just make the blobs' "desired direction" point toward the player. Their ability to avoid walls and other enemies was already enough to allow them to navigate simple obstacles while chasing the player.



The blobs will begin pursuit if the player is within range and line of sight, and continue chasing until the player gets out of range or behind cover for at least 3 seconds—that way, blobs can chase around corners, but are still pretty easy to get away from.


Enemy concepts

With the 1s mostly done, it's time to start working out the other enemies. There will be exactly nine, and I want each one to have a meaningful role. I've started sketching out concepts for the first five:





Each enemy should enhance the core gameplay in some way. The player will be balancing several considerations from moment to moment, such as:
  • At this moment, should I be shooting, or grappling?
  • Are the enemies in a favorable position? (If enemies are grouped up, they're not safe to grapple, because you'll be putting yourself in danger)
  • If I get surrounded, is there a shield-less enemy available somewhere that I could grapple to to escape?
  • Should I use this enemy to throw at another, or try to throw another at it?
  • Which enemies require my immediate attention, and which ones can I leave alone for now?
  • If I hit enemy A with enemy B, what will the result be? Will that result be good or bad? (For example, hitting a 6 with a 1 will produce a 5. If 5s are hard to manage, it may be best to try hitting the 6 with something else instead.)
These are some of the main ways I think the gameplay will be interesting. Each enemy design should play into these points somehow, providing some sort of wrinkle or advantage, so that these questions are always interesting in the flow of gameplay. For example, the 4 in my sketches (the ghost) may be difficult to throw, because you'll need to be careful of their retaliation if you shoot at them; but they also may be difficult to hit with another enemy, because you'll need to throw it in a way that the 4 can't dodge. The best answer to this won't always be the same, so it will be up to the player to decide how to approach it.
Logged
wolfsden
Level 0
**

Wolfsden logo


View Profile WWW
« Reply #5 on: October 11, 2021, 05:20:45 PM »

Love your enemy sketches and overall design notes  Kiss
Logged
Benjamus_Prime
Level 1
*



View Profile WWW
« Reply #6 on: October 14, 2021, 03:59:49 PM »

Love your enemy sketches and overall design notes  Kiss

Thank you so much!!

~~

More concept sketches

Made another page of concept sketches, leaving just the 9 left to design. I decided I'll leave the 9 concept for later and focus on implementing the first eight first; that way, I can test the first concepts in-game, and use the 9 to fill any potential gaps.



Twos

With that done, I started getting to work implementing the 2s. They're very basic behavior-wise: always ignoring the player and other enemies, moving in straight diagonal lines, and stopping intermittently to fire off four diagonal bullets. When they start moving again, they pick whichever diagonal direction that lets them move the farthest without hitting a wall.



You can see I also added a number to show each enemy's rank. Originally I wanted to incorporate these numbers into the enemy designs themselves (you can see this on the 1s... I'll remove those numbers later). I quickly realized this would create a lot of readability issues—especially for enemies who need to face different directions. It's important that the player always be able to easily see an enemy's rank and shield, so I opted for large block numbers instead.

Moving forward, I think I'm going to focus on implementing new enemies with placeholder graphics again. As much as I like to see the concepts fully realized, it's a lot of work to animate in this style, and I'd hate to have that work go unused if an enemy concept ends up not working out in testing.
Logged
Benjamus_Prime
Level 1
*



View Profile WWW
« Reply #7 on: Today at 01:55:02 PM »

Big update today! I've added prototypes for the 3s and 4s. No artwork for them yet, but their mechanics are in, so let's talk about how they work!

Threes

The 3s are aggressive boulder enemies which charge toward the player when in range. They wander around like the 1s, and when they detect the player, they pause for a moment, and then charge forward until they hit a wall:



Obviously, there's a problem here. It's too easy to duck around a corner and make them run right into a wall! They need to be able to navigate simple obstacles to find a better vantage point to charge from. Here's how that looks:



To accomplish this, the 3s use A* pathfinding as long as the player is behind a wall. Once the player is in sight again, they stop chasing and resume aiming.

They still have some issues to work out—for example, they have a hard time seeing you if you're standing against a wall. But it's good enough for a prototype, so that's where I'll leave them for now!

Fours

The 4s are little ghosts who mostly mind their own business. They also move like the 1s, but more slowly and smoothly. They don't care about the player—unless you shoot at them, in which case, they'll angrily lunge toward you!



Their field of vision is important: If you try to throw an enemy at them, and they see it coming, they will phase through it. Right now this is shown by the 4 turning blue. Notice how it only dodges if the thrown enemy passes through its field of vision and is coming toward it.



There are some interesting strategic ramifications from these mechanics. If you want to use a 4 to throw at another enemy, you'll have to contend with it lunging at you. It's easy enough to deal with on its own, but may force you into a bad position with other enemies around. However, if you want to instead throw an enemy at a 4, you may need to pull off a tricky angle. Each way has its own benefits and challenges, but this complexity is balanced out by the fact that they put very little pressure on the player unless you start attacking them.

Wrap-up

With four enemies implemented, you can start to see the gameplay taking shape: switching between offense and evasion, planning how to use each enemy, and having to carefully consider your position.



Next up will be the 5s, which have the most complex behavior out of all my sketches. I'll have to see how well they work out in practice, and possibly simplify them if they don't have the desired effect on gameplay. Until next time!
Logged
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic