Jump to content
  • Advertisement

Dynamic Difficulty

Sign in to follow this  
Ed Welch

665 views

image.png.00ea27a80d2b5b008113f5c601eb2818.png

Typically, at the start of a game you are presented with the game difficulty menu, as above. Players should choose the level according to their experience. The problem with this is that the player really has no idea how easy the "Novice" level really is. I know some games where the easy level is actually quite challenging (it's easy for the game developers, but only because they understand how the AI works). For this reason, a lot of players always choose the easiest level, just to be on the safe side, but then they run the risk of a boring game, because it's not challenging enough.

I decided to solve this problem by having no menu at all. Instead, the game automatically adjusts difficulty based on certain statistics. I found out afterwards, that in fact a lot of games do this already (https://en.wikipedia.org/wiki/Dynamic_game_difficulty_balancing). However, I treat the combat difficulty separate to resource management difficulty.
I rate the players proficiency in battle according to a few statistics. I consider a player to be inexperienced if their soldiers are not taking cover and if they aren't getting interrupts. Difficulty mainly affects how the AI behaves. For a player with a high difficulty level more enemy combatants will be smarter - they will take better cover, be more alert and try to flank more often.

image.png.78ba28ad0b4ac311fa383f85f28e7fde.png

In Merc Tactics the difficulty level (score) is displayed when the inventory screen is open. This is a number between 0 and 10.

I still haven't implemented the resource management difficulty yet. This parameter is based on how well the player spends his money. I.e. a player that wastes money repairing weak weapons gets a lower rating.

The Dynamic Difficulty feature is implemented in the latest 0.6 Demo.

Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

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
  • Advertisement
  • Advertisement
  • Blog Entries

  • Similar Content

    • By Wolfebytes
      I am currently an undergrad several months from graduation. My major is in Game Programming and Development. During the course of my studies, we've had a few modeling classes and I really took to it and feel that is the direction I really want to go, specifically I would love to become a character artist. I keep hearing about your portfolio being super important, but I've really never been able to find out what kind of work is best to put into my portfolio. There's no "put 2 of these and 1 of those in," kind of tips. I get that I'll want to put some characters I've modeled in there, but I guess what I really want to know is, if I want my portfolio to be noticed and taken seriously for a character artist position, what is the best way to present it? Since most of my courses have dealt more with programming, I need to build everything for my modeling portfolio on the side, outside of class on my own time. I know there are no specific numbers like: put 3 realistic humans, 2 robots, a creature, and a stylistic character in your portfolio. But as a general rule is there some kind basic guideline or tips for what to make to get your portfolio off to a good start?
    • By Kjell Andersson
      Genifect 2.0 OpenFX plugin has been released by Dual Heights Software.
      New in 2.0 is the Materialized Bevel filter which creates bevel and lighting effects for texts and symbols. Using MatCap textures you can create advanced and realistic lighting effects on 2D-text and logos to make it look like it was made out of gold, copper or any other material that you can find a MatCap texture for on the Internet.

      Genifect is an OpenFX plugin that works with the major compositing software for video and animation including Nuke, DaVinci Resolve/Fusion, Vegas Pro and Natron to name a few.
      Visit the official Genifect page to learn more: https://www.dualheights.se/genifect/
       

      View full story
    • By Kjell Andersson
      Genifect 2.0 OpenFX plugin has been released by Dual Heights Software.
      New in 2.0 is the Materialized Bevel filter which creates bevel and lighting effects for texts and symbols. Using MatCap textures you can create advanced and realistic lighting effects on 2D-text and logos to make it look like it was made out of gold, copper or any other material that you can find a MatCap texture for on the Internet.

      Genifect is an OpenFX plugin that works with the major compositing software for video and animation including Nuke, DaVinci Resolve/Fusion, Vegas Pro and Natron to name a few.
      Visit the official Genifect page to learn more: https://www.dualheights.se/genifect/
       
    • By jb-dev
      This is how loading screens will look like. I still have no idea whenever or not I could show things like tips or anything alike...
    • By Programmer One
      I'm currently writing a 2D game engine from scratch for Android. The first iteration of the engine is just going to use the Android Canvas view for drawing. At some point, I want to support OpenGL ES - but not until I finish this first project (which is a very simply game based on this engine). Right now, I'm dealing with Sprites and I've encountered a design challenge that I'm not entirely sure which direction I should go.
      For the sprite bitmaps, I've decided to go down the sprite atlas route (as opposed to individual image files). I'm using Texture Packer and I've written a custom JSON exporter. I didn't really want to limit myself too much, so I decided I'd support sprite rotation and trimming in order to save as much space I can in the atlas. I backed off from supporting polygon trimming for now. If you're unfamiliar with Texture Packer, it's essentially a tool that will allow you to import individual sprite frames, organize them into folders and then have the application generate a sprite map and corresponding coordinate data file. This application supports trimming any blank (alpha) space around the sprite images in order to pack them closer together. It also supports rotation if it makes the image fit better.
      What I'm trying to figure out now is how to deal with loading the sprite image data. Currently, I'm at the point where I can deserialize the JSON map data into "Sprite Frame" objects. These objects contain information about each frame. My format allows grouping of sprite frames in order to organize frames that correspond to the same animation. In essence, the sprite frame object has:
      The original (untrimmed) size of the sprite image. The original position of the sprite image within it's bounding box. The rect of where the image is in the sprite atlas. A flag indicating if it had been trimmed. A flag indicating if it has been rotated (CW). This will give me all the information I need to draw the image onto the Canvas. If I didn't support all the other fancy features I want (packed rotation, trimming) and pre-transformation (i.e. mirroring a sprite so I can reuse it for things like changing the walking animation without having to pack in more sprites), then drawing the image from the sprite atlas onto the canvas would be as simple as a simple Canvas.drawBitmap([Source Bitmap], [Destination Rect], [Source Rect]).
      But, since the image I'd be drawing MIGHT have been rotated, trimmed or otherwise transformed, I can't just simply blit it onto the Canvas. I'd first would need to apply some transformations in order to "undo" changes that were done during packing. This means I would need to either:
      Slice out the child image from the sprite atlas into a new bitmap, and apply the "unpacking" transformations (i.e. rotate back, realign, etc). Apply a transformation to the Canvas itself. (I don't think I want to go down this road since I've read that transforming the Canvas tends to be rather slow). So, I'm probably left with having to create smaller bitmaps from the sprite atlas and then keep those in memory for as long as I would need them. So, for a single sprite character, I'd be looking at around 36 sprite frames (9 different animations, each with 4 frames). What I'm concerned about is memory consumption. So now I'm thinking:
      I should read in all the sprite bitmaps from the sprite atlas and shove them into an LRU cache. This means all the sprite image data is now in memory, all ready to go for whatever animation sequence and frame I want. Once I'm done with the atlas, I dispose of it and just work with what I have in memory. I can perform this caching when I load levels and then clear items from the cache that I no longer need. I should just keep the sprite atlas, blit directly from that onto the canvas, and get rid of the fancy packing features so that I don't have to process any transformations. The only problem with this approach is that I will also have to shelve shearing and rotation on the sprite object itself. TL;DR: Am I being overly memory conscientious or having a couple frames of sprite data in memory not a super big deal?
       
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!