• Advertisement
Sign in to follow this  

Unity Zombie game wave difficulty progression

This topic is 2018 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello,

Well, here's an interesting theoratical question.
I'm making a zombie game in Unity for school's finals projects, and I just started work on the wave manager script.
Everything is going fantastically so far, but I was just wondering, since I couldn't find any articles anywhere online, how exactly do games typically plan their difficulty progression? How should I construct the formula to decide how many spawns should be on every wave?

I could always go with a simple straightforward calculation of something like waveSpawns = wave*4, but that just doesn't seem right at all.
I want to know what methods are usually used in zombie games, or even just any other game that uses similiar difficulty progression logic.

Thanks alot for any input.

Share this post


Link to post
Share on other sites
Advertisement
Tough question. If you know where to look, I'm sure there's a million articles, with theory and formulas, but in the end it all comes down to extensive testing. My suggestion is to pick a curve, say, an exponential plus a sine:

Difficulty(t) = a * exp( b * t + c ) + d * sin( e * t )

Where t is time and a, b, c, d and e are constants to be defined. Find the best values for a, b, c, d and e by play testing the hell out of it. And if necessary, don't be afraid to override the equation at certain parts of the game, if it's not working very well there.

If you're curious, I came up with that curve because similar shapes come up when I google search for "difficulty curve games". They all look like some exponential with local peaks and valleys, so I made this thing up. I've plotted it with a few values here at fooplot.com, click here.

How to translate that into something usable in your game is up to you, as it depends on what you're doing. Sounds like you're going for a tower defense thing (the term "wave" gave it away). Besides the number of enemies in each wave, it can be tricky to translate difficulty into something more solid, because enemies can be 'different' and the difficulty associated with each class would depend on the way the player is preparing (or not preparing), so good luck with that! :)

Share this post


Link to post
Share on other sites
It mostly comes down to play testing, once you have an idea of what difficulty requires what spawn count you can try to do some curve fitting. I guess the hardest part is finding the appropriate group of people, for the play tests, that represent your target audience. Edited by Mussi

Share this post


Link to post
Share on other sites
I think I read something from Valve about this... and they described it as a fairly complicated thing.
Personally I'd just make it as in most tower defense games: fixed waves by design and more and more playtesting.

Share this post


Link to post
Share on other sites

How should I construct the formula to decide how many spawns should be on every wave?

Having more than one aspect to vary the difficulty enhances the feeling that the difficulty rises non-linear even if you have quite linear formulas in the background. I once did a very simple tower-defence game where instead of just using the number of enemies spawned I also increased their speed and toughness as well as the spawn speed. The first wave started off with all values set to 1 and then I began to increase a random stat every new wave. This had the effect, that even a wave with few enemies could be quite hard to beat and that it didn't feel like the AI was just beating you by increasing the number of enemies. Of course this was far from balanced and it might be a good idea to weight the values somehow, but as Mussi wrote, in the end finding the perfect balance is a matter of testing.

Share this post


Link to post
Share on other sites
Right, so playtesting it is then.
A little too early in development for that, but I'll keep it in mind.
Thanks alot all of you(Upvoted everyone) =)

By the way, though, the game is a traditional zombie survival game, not a tower defense. I'm mainly using CoD Zombies as reference.

Share this post


Link to post
Share on other sites
You should be careful not to make too hard; while play-testing, keep in mind that through extensive testing you'll get rather good at your game. Easy for you won't be as easy for mister Joe Bloggs, coercing randomers to playtest for you could be a good idea.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
  • Advertisement
  • Popular Tags

  • Advertisement
  • Popular Now

  • Similar Content

    • By 3dmodelerguy
      So I am building a turn based rogue-like (think CDDA). The game is going to have a very large map (up to 1000's x 1000's) however to alleviate most of that I obviously can't render everything so there will just be render a certain radius around the player and just load in and out data as the player moves.
      The next major system I am prototyping is making interactive tiles destructible and pretty much everything will be destructible besides basic landscape (cars, doors, windows, structures, etc. will be destructible)
      While I am only rendering a certain amount of tiles around the player, I want to keep the amount of colliders active at one time to be as small as possible for performance and currently the tilemap tool I use automatically merges colliders together.
      So instead of creating a separate colliders for each of these tiles and having the destructible behavior tied to that object (which my tilemap tool would allow me to do) I was thinking that I would store an array of all the X and Y locations for the interactive tilemap layer and let the tilemap manage the colliders. 
      Then when I hit a collider on the interactive tilemap layer, instead of of getting the behavior for how to deal with the destruction for that tile from that game object, I would pull it from the array I mentioned earlier based on the tile I attempt to interact with which I already have.
      Does this sound like a good approach? Any other recommendations would be welcomed.
    • By NDraskovic
      Hey guys,
      I have a really weird problem. I'm trying to get some data from a REST service. I'm using the following code:
       
      private void GetTheScores() { UnityWebRequest GetCommand = UnityWebRequest.Get(url); UnityWebRequestAsyncOperation operation = GetCommand.SendWebRequest(); if (!operation.webRequest.isNetworkError) { ResultsContainer rez = JsonUtility.FromJson<ResultsContainer>(operation.webRequest.downloadHandler.text); Debug.Log("Text: " + operation.webRequest.downloadHandler.text); } } The problem is that when I'm in Unity's editor, the request doesn't return anything (operation.webRequest.downloadHandler.text is empty, the Debug.Log command just prints "Text: "), but when I enter the debug mode and insert a breakpoint on that line, then it returns the text properly. Does anyone have an idea why is this happening?
      The real problem I'm trying to solve is that when I receive the text, I can't get the data from the JSON. The markup is really simple:
      [{"id":1,"name":"Player1"},{"id":2,"name":"Player2"}] and I have an object that should accept that data:
      [System.Serializable] public class ResultScript { public int id; public string name; } There is also a class that should accept the array of these objects (which the JSON is returning):
      [System.Serializable] public class ResultsContainer { public ResultScript[] results; } But when I run the code (in the debug mode, to get any result) I get an error: ArgumentException: JSON must represent an object type. I've googled it but none of the proposed solutions work for me.
      Also (regardless if I'm in the debug mode or not) when I try to do some string operations like removing or adding characters to the GET result, the functions return an empty string as a result
      Can you help me with any of these problems?
      Thank you
    • By nihitori
      The Emotional Music Vol. I pack focuses on beautiful and esoteric orchestral music, capable of creating truly emotive and intimate moods. It features detailed chamber strings, cello and piano as the main instruments, resulting in a subtle and elegant sound never before heard in video game royalty-free music assets.

      The pack includes 5 original tracks, as well as a total of 47 loops based on these tracks (long loops for simple use and short loops for custom / complex music layering).

      Unity Asset Store link: https://www.assetstore.unity3d.com/en/#!/content/107032
      Unreal Engine Marketplace link: https://www.unrealengine.com/marketplace/emotional-music-vol-i

      A 15 seconds preview of each main track is available on Soundcloud:
       
    • By RoKabium Games
      Another one of our new UI for #screenshotsaturday. This is the inventory screen for showing what animal fossils you have collected so far. #gamedev #indiedev #sama
  • Advertisement