Search Unity

  1. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Feedback Feedback Friday #154 - February 26 - 29 - 2021

Discussion in 'Game Design' started by Billy4184, Feb 26, 2021.

Thread Status:
Not open for further replies.
  1. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    G'day folks, it's Feedback Friday time!

    Want free design feedback for your work in progress project?

    Then you've found the right thread! Feedback Friday runs from Friday to Monday every week.

    What To Show
    • Minimally Viable Product (MVP) - Core game play > everything else
    • How To Scope Small (Unity tutorial)
    • Post a link to a playable game, preferably WebGL. If you don't have a playable game, post something substantial, not just text.
    How To Ask For Feedback
    • Be concise.
    • Specify what you want feedback on and what you don't.
    • Resist the urge to write an immediate defense. Take the time to understand their points. Remember that your friends here are taking time out of their busy schedules to help you for free.
    How To Give Feedback
    • Be positive. There's something of value in every game.
    • Focus on the design, not the designer.

    Feedback Friday #153 is here.
     
  2. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    Well, I'm late, but I'm here. Latest version: https://eternalambiguity.itch.io/ca-shooter

    Let me know if there are performance issues--I recorded the GIF below using the version I uploaded and didn't have any issues (despite the framerate of the GIF).




    The big things I spent time on were the structures seen in the GIF and the NPCs. The structures trap the NPCs. The player can shoot them to destroy them, and then once destroyed the NPC will follow a simple FSM/behavior tree (I'm not sure of the difference) - idle around until there's an enemy within a range, and at that point flee to a location and disappear from the map (since this map is so small they hit the "flee" state immediately).

    While the NPCs are trapped their health decreases as seen in the GUI (nothing happens when it hits 0 presently). Also you don't see it here, but as shown in my GIF last week the NPCs can be trapped again if they're surrounded by the blob - the blob will create the cage structure around them.

    Within the framework of this little demo the goal is still to grab the McGuffin from one room, as indicated by the "quest text" at the bottom (this and dying are the only two things that trigger ending the map), but you also have the GUI elements to the right related to saving the "workers."

    I'm interested in feedback on this gameplay - on saving and escorting the NPCs to safety, and the enemy building these structures. Escort missions are infamous for being terrible, is that the case here? Should the NPCs be smarter in any ways? Overall does this feel like it complements the previously existing gameplay?

    There's something related to all this I'm worried about: my idea has been for a single persistent map where the blob grows continually regardless of where the player is. In this demo a big part of the gameplay is getting to the NPCs before the blob can, and it's kind of fun, but in the real game I imagine any trapped NPCs to be surrounded by the blob (and be much further from the player in some cases), and furthermore for the blob to be established as the player carves out a path.

    That's not well represented here, but I'm curious about the changes I ought to make to support that kind of gameplay (giving the blob "thinner paths" to travel upon (which would in turn allow the player to better pause their advances), reducing their growth rate, increasing the delay after they're shot by the player, slowing the NPC health decrease, etc.).



    Extra discussion points:

    The structures are meant to trap the NPCs and extract "biomass" from them, though I'm not sure at present how to use that. Related to the whole blob-as-eusocial-organism thing I've imagined I can see them using both the biomass and electricity (from the power nodes) to build things, though I'm not sure what. At the very least I imagine little organic "pipes" running between structures.

    ^^^ I like that idea more each time I think about it - almost like the blob is "playing" a citybuilder/rts, and the player is going against that - but I'm curious if others think it's interesting.

    NPC activity. Right now it's just entities fleeing, but I can imagine some of them, "security officers" or something, fighting back. On the other hand there's a different vibe if the player is the only defensive/offensive force in the game. Thoughts?
     
    DanielDemidov likes this.
  3. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    Here's an idea I got looking at the video:

    How about you have a ventilation network running alongside walls and corridors etc, with ventilation ports going into each room. Imagine Alien Isolation type of thing. And the blob can spill out of a ventilation port when the player is around or if there is an objective to trap there.

    One advantage to this is that the player would be able to see the blob all the time but not always interacting with it, creating a more suspenseful atmosphere. Right now, the runaway growth of the blob all over the place just seems like a tiring thing to combat and reduces any sense of anticipation or strategy.

    So then, each time the blob spills out of a ventilation port, in a sense it is a new enemy and a new situation. And I think it might also be beneficial for the blob not to grow continually (or to grow very slowly) but to be able to retract units of itself back into the ventilation port where the player is not present, and regenerate itself forward to wherever it wants to go.

    Thoughts?
     
    EternalAmbiguity likes this.
  4. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    Some of this is related to what I was saying about my intentions for the player to arrive "late" to the party - in the real game I envision the blob already established, so it's not the player racing it for growth (see the picture below). And I agree, the speed of the growth is pretty high and not easily combated. I can handle that a couple of ways already - by making their paths thinner (so when the player shoots there's less space for them to go around the spot where the player shot), and by lowering the growth rate itself.

    Unity_2021-02-27_09-30-41.jpg

    Initially the blob did not go after the player but as was suggested (by certain individuals...:p) I added that. I wonder if it could be more granular - having it only respond when the player makes an attack? Or is it fine as-is, and needing this other system?

    I do like the ventilation idea for a couple reasons. One is it makes me think of stealth, as you imply with A:I. Shielding oneself from view somehow. I also think it would work as an interesting indicator of the blob's presence - if the ventilation shafts are clear, the blob isn't in the present area, and visa versa.
     
  5. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    I suggest put that settings into game difficulty.
     
    EternalAmbiguity likes this.
  6. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    I think it's good for the blob to operate with intentions, responding when the player is near, makes an attack or to surround a player objective.

    The way I imagine the ventilation is that the player can see what is in the ventilation duct (it has no top, and runs parallel to room walls and corridors) but cannot break into it or enter it. That way the blob is always visible, filling the ducts, but the player does not know which vent it might decide to come out of. And it can potentially retreat its growth back into the duct as a defensive strategy, and simultaneously reemerge from another vent.

    In this way the blob is 'omnipresent' but cannot always be interacted with, meaning that the player won't get firing fatigue from just mowing it down all the time.

    It's a significant diversion in the game design, but personally I think it would be worth exploring.
     
    EternalAmbiguity likes this.
  7. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    For the blob's bursting from a vent - are you thinking this would be something random, or would the player be able to influence it in any way (like by being stealthy)?
     
  8. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Hi all!
    Continued working on my game. Added a cooldown so that the player couldn´t just spam satellites and a launch success chance, which is just a random % for now. Each successfull launch gives you (apart from the net coverage) reputation, while each failed launch decreases reputation. If it is <= 0, the player loses


    Would you please share your thoughts on the chance system? Is it wise enough to use it like that? Or should some more subtle methods be implemented instead?

    By the way, do you think such a game could be interesting to play on PC?

    Thanks in advance!
     
  9. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    Regarding chances, I would suggest add some simple research feature. Nothing like research tree. But very simplistic. Maybe cost of research increases per number of researches. You could gain research per complete missions. Then based on research points, your launch success rate per distance will increase. Something like that. Keep it simple but engaging.
     
    DanielDemidov likes this.
  10. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Played for a few minutes. The idea is rather interesting, though navigating is a bit too hard without any signs or clues...
    Maybe you could add some? Or I failed to notice...
     
    Last edited: Feb 27, 2021
    EternalAmbiguity likes this.
  11. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Thanks! Thought about the research mechanic, but decided to leave it for further stages of development...
    Maybe will add sooner, after your message :)
     
    Antypodish likes this.
  12. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,629
    If you can provide a playable build, we can give you feedback on it.
     
    Billy4184 likes this.
  13. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    Yeah, hitting pretty large lags and frame drops. Is not always, but in certain occasions. But to be honest, I was running intensive application at the same time, using 35-50% of my 8 cores CPU power. So maybe after that, I will test again.
    Check your GC, memory GPU and CPU use.
     
    EternalAmbiguity likes this.
  14. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
  15. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,629
    @EternalAmbiguity - I tried to play, but it was very stuttery, and the player even seemed to pop back a few times.

    Also, the blob didn't react to bullets. They just passed straight through the blob and walls.

    What if the workers have rudimentary AI to take what looks like a smart route away from the blob? Then you could free them and leave them on their own to escape, or to get caught again in which case you'd have to free them again.

    What about flipping the purpose of ventilation shafts? They could be blob-free tunnels that provide a way to move around some limited areas. The player could choose to try to blast their way through the blob to rescue an NPC or make their way through a ventilation shaft to get closer to the NPC before having to cut a path through the blob.

    Freeing the workers seems a lot more interesting than retrieving the keycard.

    I also like the idea of the blob "playing" a city builder -- kind of like how the Zerg expand their creep in Starcraft. Maybe the goal of each level could be to free as many workers as you can and then destroy the blob's "brain". (Maybe I'm thinking too much of Ripley in Aliens extracting colonists from the aliens' gooey walls and then taking out the queen at the end.)
     
    EternalAmbiguity likes this.
  16. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    Yeah I experienced tha too few times. Even on earlier releases.
    Now, I suggest to stop on implementing features. Start investigating profiler and llresolve source sof these weird lags. Game a bit behaves as if it was multiplier. But is obviously single player. So there is fundamental performance issue.

    I was able to simulate 10s of thousends entities in my prototypes. Never had such weird performance issues. Some lower FPS yes, but no such lagging and jumping.
     
    EternalAmbiguity likes this.
  17. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    In addition, the first version has more actions (raising money and boosting popularity). Wondering whether they break the gameplay or not in terms of balance
     
  18. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,629
    Do you feel like they support and enhance the core idea? Is the game more about the on-the-ground activity of planning and getting support for your satellite launch program, or more about the technical aspects of launching a satellite such as timing?

    It would be helpful if there were some feedback when a launch fails.

    I like how the mechanics and visuals are simple and straightforward. It's a good way to go. It's less intimidating for a player to experiment with, and it's easier for you to iterate on different variations.
     
    DanielDemidov likes this.
  19. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Thanks for the feedback!
    I added them to give the player kind of a reserve tool to keep going if the situation is on the brink of a defeat. As for the focus, I think it would be better to keep it on managing resources as it works now.
    Yeah, will certainly add events with descriptions to make it more comfortable
     
  20. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    Always better, in my opinion, to have things be based on what the player is doing.
     
    EternalAmbiguity and TonyLi like this.
  21. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    Well done on putting out a playable!

    My first suggestion is to focus on the one core mechanic and forget about things like raising money and boosting popularity - until the core mechanic is already fun, these have no meaning.

    I think you have the beginning of an interesting game, but it's just a basic concept right now. Your core mechanic is launching satellites from a planet into orbit. Now the question is:

    1. What are the parameters for a good satellite launch (what skill will it need)?
    2. What are the challenges to launching a satellite
    3. How will the challenge of launching satellites dynamically change over the course of a gameplay session?

    This is the point where you can try lots of things, such as:

    - The earth is spinning and this adds a sideways curve to the flight path.
    - You have target markers to aim the satellites at.
    - You have to put satellites into different shapes/sizes of orbit.
    - There are clouds that slow the rocket down and mean your timing has to be earlier.
    - There are storms and lightning that can blow up rockets on their way up.
    - Failed launches create space wreckage that needs to be avoided.

    I would focus on only this one thing - making launching satellites fun and challenging in varied ways - before doing anything else.
     
    DanielDemidov likes this.
  22. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Thanks!
    Will try to improve it. Right now wanna add the possibility that the satellites may break down, which would require launching additional ones. Or that's not the direction you mean?

    P.S. Maybe adding different rocket components will help? Like, you can add special equipment to facilitate the launch, but it can be expensive
     
  23. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    I've actually looked at performance several times, so this is a little disheartening. There are a few things that might be causing this...

    1. The blob's backend simulation. This is on its own dedicated thread and basically involves the squares or cells next to any red blobs, checking if they can change to a red blob. It's set up to run every 50 ms I think, and as you can imagine from the full map it's going to be running on 10s, 100s, then 1000s of cells during a single iteration.

    2. NPCs. This shouldn't be happening at the beginning, but when they're freed they'll find a path (using A*) to where the player started (basically a makeshift safe area) and then move there.

    3. The blob's pathing to players or NPCs. Whenever the player or an NPC moves from one cell to another, the enemy "controller" (I've named it the dungeon master) attempts to find a path (again with A*) to them from every power node.

    Not to get too caught up in the programming, but part of the issue might be that all of the pathfinding is done with Task.Run. I need to brush up on my C#, but I think that will create a new thread every single time, rather than queuing actions on a single thread. Additionally, the check for if a cell can change to a red blob is a little convoluted and can be simplified.

    Would you guys @Antypodish and @TonyLi mind telling me your CPU specs? Number of cores and clock?

    I'll take a look at this. Again it runs fine on my system but I have 16 logical processors and I'm at ~4.2 GHz. Hopefully next week I can have something more performant.
     
  24. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    I would focus first on things related to player skill, because that's what will make someone enjoy the moment.

    I think you added a random chance of failure already? I personally dislike randomness that influences gameplay directly, since there's no skill involved. I suggest focusing on things the player can see, hear and interact with during launch.
     
    DanielDemidov likes this.
  25. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    tested on i7 8 cores 3.4Ghz.
    Game quickly become jittery.

    Why do you run path finding on run, not multi threaded? Is because of other blobs?

    You could try run in parallel. Then in a job, put all path finding blobs into MultiHashMap, with key as position and value as a blob entity. Once you got that, you grab only unique keys from MultiHashMap, and get blobs entities, which will take given space. This allows blobs take only empty space. Also, do not test A* for blobs, which have neighbors. Just in case you do so.

    You shouldn't have problem with few thousands of blobs on single thread however.
    Do you run burst?
    Do you cache as much as possible?
     
    EternalAmbiguity likes this.
  26. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Hm... will think about it, thanks! So, randomness is bad in such circumstances?
     
  27. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    For me, randomness is great for level generation and creating new experiences but is not fun when it determines whether the player succeeds or fails at a task.
     
    DanielDemidov likes this.
  28. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Maybe like this: this dot on the orbit may have diferent colours. And the player has to choose the satellite colour accordingly. If it is close to the one of the dote, the launch is successful
    ?
     
  29. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    Well that's definitely something the player can control, although satellite color strikes me as a bit meaningless.

    Maybe you have to hold the button for a certain amount of time to get velocity right, or set the amount of fuel to run out at the right spot. I suggest trying to find things that correlate with real launch problems in terms of theme, like weather, fuel, collisions, earth rotation etc.
     
    DanielDemidov likes this.
  30. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,629
    @EternalAmbiguity - I ran it on an i5 8-core 3.5 GHz Win10. Could there be a bug, or something logging stack traces?
     
    EternalAmbiguity likes this.
  31. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    Task.Run is multithreaded, is it not? Doesn't it start a new thread? This mentions that it puts it on the threadpool, but when I run ThreadPool.GetMaxThreads it returns 1600 worker threads and 200 "completionPort" threads. Thus to my limited understanding Task.Run is adding whatever's within its delegate to be run on a new thread.

    I don't fully understand your second paragraph, but part of the problem is that the pathfinding depends on the state of the object doing the pathfinding, and what's allowed to be on the path. For example a blob finding a path to the player is allowed to path through a cell that already contains itself, but not through one that contains an NPC. And of course since the player and NPCs (and the other enemies I introduced a while back) can move this has to run every time, that can't be cached.

    I've got burst handling some of the actions (mostly actual movement of the entities and things like shooting bullets) and my backend simulation itself is separate entirely.

    For the growth of the blob it's all based on the power nodes. Each power node has a set of paths to interactable objects, and blobs can grow on that path. The power nodes will update all of those paths whenever a door opens in the room they're in.

    Unity_2021-02-28_13-37-50.jpg

    So for the blobs there's a few if/else statements they go through to determine their growth probability, based on all those power node locations. However I don't think this is necessary and I can instead just store a 2D float array with probabilities, and update it from the power nodes themselves (so each blob can just check their position in the float array and get their probability).
     
  32. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    (for some reason the forum isn't letting me edit my post)

    @Antypodish and @TonyLi thanks for your CPU specs. I think it's just inefficiency in my algorithms.
     
  33. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    Oh ... why dont you use Unity Jobs? You loose out lots performance of benefits.
    Is no point using Tak threads anymore with Jobs and Burst.
    This why you may be hitting performance issues.
    I suggest, you move to Unity Jobs, as soon as possible.

    Well that now makes clear. I thought you are using DOTS at full capacity. But since don't, it will be hard to understand my point. In such case, in instead of MultiHashMap, you would be using Dictionary.

    In such case, I suggest you could try to divide map into chunk and run the path finding.
    For example, you check only 4 chunks, if path is valid and not blocked. Allowing early exit.
    When you in chunk of player, then you can test more granular path finding.
    When chunk is blocked, or fully occupied by blob, you will read just a flag and can early exit.
    Something like that.

    How many points would have your A* test at given example, to get from creep to a player?

    upload_2021-2-28_20-9-17.png
     
    EternalAmbiguity likes this.
  34. EternalAmbiguity

    EternalAmbiguity

    Joined:
    Dec 27, 2014
    Posts:
    3,144
    Yeah it's something I can probably squeeze more performance out of. But there are a few things that make it difficult to move to Burst/Jobs (not too sure about the distinction between them). For example the blob's rate of growth is a probability as mentioned, and I need to be able to compute that based on information external to the entity itself (so like using static methods and such, which I've been unable to do from within a burst foreach). And moving agents can't be fully parallel, so they don't accidentally move into the same space.

    Those bigger "chunks" for the pathfinding is something I thought about for another project (and kind of why I set it aside) but didn't really think about for this one. I'd have to learn how to deal with those bigger chunks, rather than the current system which is just kind of plug and play.

    I don't want to go too far down the rabbit hole of optimizing performance, but I obviously have a problem here. I'll see what the low-hanging fruit gets me to start off.
     
  35. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,732
    The thing about jobs, you can run them single threaded too. But then you get advantage of using burst. Burst is just massive optimization tool, which takes advantage of code structure. Don't have to be even ECS. But you need use struts instead of classes. Other than that is just single click in menu, to enable it. But code must be in Jobs.

    Using jobs, you just replace your current parallel mechanics. You can use jobs and burst even for simple thing, like iteration of an array (native Array) and some math operation on it.
    Try it on so thing simple, which requires lots of iterations. Compare before job after and after burst iż enabled.

    Atm your game seems unstable. And quickly become unpleasant to be playable due to jitter. So you need look into performance anyway. Doing it now than later is for your benefit.

    Again, you don't need touche ECS at this point. But do small incremental steps. You will find that applying DOTS burst and jobs is not that hard at all. And potential gain Is massive.
     
    EternalAmbiguity likes this.
  36. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    Would it be useful to start writing about the development of my game on Twitter so as to draw attention?
     
  37. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,629
    You never want to start too late, but at the same time you should wait until you have a solid hook that you can clearly express in just a few words.
     
  38. DanielDemidov

    DanielDemidov

    Joined:
    Apr 23, 2020
    Posts:
    123
    You mean, some attractive idea of tbe essence of the game?
     
  39. Billy4184

    Billy4184

    Joined:
    Jul 7, 2014
    Posts:
    6,006
    If you want to start posting something on Twitter, go for it. But if I were you I wouldn't put any serious effort until a basic demo of the game exists that is reflective of the final experience - it has a solid core mechanic, the key systems are all there, and someone looking at it can decide if it will be fun for them or not.

    I believe that the key to DIY marketing is consistency - particularly consistency in how you present what the game is about, and consistency of posting regularly, over a long period of time. You don't want, for example, to decide on a name and then change game ideas halfway, so that half the stuff on Twitter is no longer relevant or people get confused.

    This might be interesting for you:
     
  40. TonyLi

    TonyLi

    Joined:
    Apr 10, 2012
    Posts:
    12,629
    Yes, a hook is the core concept or feature that makes your game uniquely attractive. Ryan Clark has a good, short video series on hooks:

     
Thread Status:
Not open for further replies.