Search Unity

Showcase Share Our DOTS Showcases

Discussion in 'Entity Component System' started by Antypodish, Nov 22, 2020.

  1. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    HI all.

    I was thinking that we have general WIP thread, letting show of users their projects.
    However it would be nice, to have at least similar thread in purpose, but solely with focus on DOTS.
    I think that could encourage people on capabilities and usability of DOTS, specially when many packages are still in preview.

    By officials, we have been showcased few projects already. I.e.

    Megacity

    upload_2020-11-22_10-30-25.png

    https://unity.com/megacity

    Spellsoul Universe
    (is there a blog somewhere?)



    Or

    FPS Sample with Live Link

    upload_2020-11-22_10-44-15.png

    https://unity.com/releases/2019-3/dots-sample

    Each is bringing great source of knowledge, where presenting and discussing challenges and solutions.


    Join and Share Too

    Hence I would like to invite anyone, to share their works and prototypes with some screenshots and vids if you have one, made of course using DOTS. Please add few words, where DOTS is applied and maybe what kind of challenges you faced so far.
     
    lclemens, andreiagmu, NotaNaN and 4 others like this.
  2. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    So if I may, I let it started.

    My most recent work is using L-System (Lindenmayer Systems), to generate plants. I converted its algorithm to DOTS and now testing in practice.

    I growth my procedural DOTS garden, using Unity 2020.2 Entities 0.16.0



    Original vid, with 150k entities. But I have updated version above.

    Each plant is procedural generated and in this particular case scenario, it has created close to 150k 300k entities. If watching carefully, you can spot new plants popping out, every so often in random places and start growing.

    Currently using 3 type of meshes, to represent different parts of plants, with applied translation and scaling. Branch, as cube, sphere as tree canopy. And another sphere as leaf, flower, or fruit. Shader Graph with URP and HybridRenderer 0.10.0 is used, to apply color variations in jobs.

    Mind I run it in editor, so sure there are some overheads. But current sample is GPU bound rather than CPU. As far I tested, single plant generation with burst, is at least 6 time faster.
     
    Last edited: Nov 24, 2020
  3. ElliotB

    ElliotB

    Joined:
    Aug 11, 2013
    Posts:
    289
    I think this is a very nice idea and it would be interesting to see what others have been making!

    To help learn ECS I made a space battle simulator - I picked it because most people are already familiar with these kind of games and know what to expect.

    The full project source is available here: https://github.com/ElliotB256/ECSCombat.



    There are a few features worth noting:
    • There are a few different behaviors that ships can perform - attacking, roaming, escorting, etc.
    • Each ship has equipment, and each equipment item is an entity itself. These entities can be damaged or destroyed during combat. For instance, you might notice some of the smaller ships start moving slower once their engine is destroyed, or they may lose a weapon mid-battle.
    • There are a range of combat calculations performed. For example, weapons have an effective range that changes their damage. Hit calculations are based on the accuracy of the weapon and the speed and evasion rating of the target ship - small fighters are good at dodging. Shields can intercept attacks.
    • There are different types of weapon, such as projectile or instant hit. The weapons typically spawn an attack entity, which is then used to apply the intended effect to a target. For instance, a laser cannon is an entity with TargettedTool and InstantEffect components, which spawns an attack entity with Attack, Damage, Target.

    My next plan is to try this project as a web build using tiny, so I've been waiting for tiny to allow custom materials and material properties.
     
    Yuan_Huo, lucidniht, rdjadu and 22 others like this.
  4. iamarugin

    iamarugin

    Joined:
    Dec 17, 2014
    Posts:
    883
    I've partially integrated DOTS into an existing project. It is called "Rocket Science" and this is a space simulator like KSP, but with the Solar system in real scale.

    I used DOTS for heavy parts of the game. Firstly, it was quadtree planet generation in real scale using heightmaps for large details and noise for small. Second part where DOTS was useful is for orbits generation and updating.

    The first problem I faced is using long-running jobs (but it is pretty much solved now except for JobHandle.CombineDependencies). Second is that all quads and orbits have unique meshes (but the same material) so I could not use Hybrid Renderer. Graphics.DrawMesh was the solution here, but it is not that fast as it could be.

    Other than that using DOTS was the best decision I've ever made in this project. Planet generation takes less than 1ms in total (thanks to long-running jobs). And code became much cleaner.



     

    Attached Files:

    • next.png
      next.png
      File size:
      1.9 MB
      Views:
      546
    • next2.png
      next2.png
      File size:
      1.8 MB
      Views:
      551
    • 3.png
      3.png
      File size:
      1.8 MB
      Views:
      553
    • 8.png
      8.png
      File size:
      1.9 MB
      Views:
      548
    Last edited: Mar 24, 2022
  5. bb8_1

    bb8_1

    Joined:
    Jan 20, 2019
    Posts:
    100
    This is my small pre-pre-alpha game(3D multiplayer space simulation/arcade type of game) written in C# ( Unity3d/DOTS/Netcode) - currently because of low budget :( tested only locally (intention is that game should be similar to Elite Dangerous/bsgo) :

    edit : must add that currently working more on a single player updated for 0.50 using dots physics 0.50 new input system etc :

    later i intend to upgrade whole project to be multiplayer
     
    Last edited: May 8, 2022
  6. Timboc

    Timboc

    Joined:
    Jun 22, 2015
    Posts:
    238
    Nice idea for a post!

    Mine's more on the tool side - a Tween lib & Timeline for working with hybrid & pure. Hoping it helps a bit with the pain of animating things. Edit-time previews, serialized animations you can reuse and nest and much more. Love the performance of course but what I'm really focussing on is a great workflow.
    GIF 15-10-2020 15-24-26.gif

    Old captures and it's not that clear but these spheres are animated individually in an open subscene, reusing this one anim & preview. Of course with entities you can comfortably animate 10s of thousands all burst, multi-threaded etc as you'd expect.
    GIF 19-07-2020 22-47-06.gif
    Still some way to go but working hard on trying to finish it up.
    Looking forward to seeing what else gets posted!
    (Always interested in following other dotty people - I'm @timboc_ on the twitters)
     
    Last edited: Nov 23, 2020
    Kryptonite94, rdjadu, LzzzQ and 22 others like this.
  7. davenirline

    davenirline

    Joined:
    Jul 7, 2010
    Posts:
    987
    We're using DOTS for pathfinding, rendering, and some gameplay logic for this game:



     
    Last edited: Sep 21, 2021
    rdjadu, lclemens, Roy-Hu and 8 others like this.
  8. Hanoke

    Hanoke

    Joined:
    Oct 30, 2016
    Posts:
    6
    Hello everyone, I want to share my project too.
    It was a solo developed, 4 months project. You can control a train which carries thousands of cargo boxes from a station to another.
    Each cargo box's positions are updated by dots individually. On the railroad, enemy drones appear and you can shoot them.
    Systems calculate (loco+railcars)'s net force, friction, gravity etc. and adjust train's speed accordingly.
    Except UI, it was a fully dots game.
    Here is a video:
     
    Last edited: Dec 9, 2021
    rdjadu, lclemens, Roy-Hu and 8 others like this.
  9. DV_Gen

    DV_Gen

    Joined:
    May 22, 2021
    Posts:
    14
    I'm going to bump this because it was linked recently and somehow I missed it in my earlier lurking. I'll post some actually content later.
    I'd also like to add that if any of you post random things on Twitter, I've been pretty much monopolizing the #UnityDOTS tag recently and I would love to see more things officially tagged. I know a few that post things without the tag, and I'm hoping to see more sharing with the tag as DOTS becomes used more and more. I'm always super excited to see the projects everyone is doing.
     
    NotaNaN, Antypodish, TWolfram and 5 others like this.
  10. LudiKha

    LudiKha

    Joined:
    Feb 15, 2014
    Posts:
    140
    Great idea!

    Here's my crowd simulation:

     
  11. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    Looks really fancy.
    How you animate characters? Unity animation, or custom approach?
     
    JediNizar and bb8_1 like this.
  12. davenirline

    davenirline

    Joined:
    Jul 7, 2010
    Posts:
    987
    Post your fire simulation here, too.
     
    JediNizar and bb8_1 like this.
  13. JediNizar

    JediNizar

    Joined:
    Nov 13, 2016
    Posts:
    111
    Was asking my self the same question...
     
    Antypodish and bb8_1 like this.
  14. jdtec

    jdtec

    Joined:
    Oct 25, 2017
    Posts:
    302
    In the youtube comments of @LudiKha videos where people have asked about animation he has liked an answer that said: 'GPU Skinning, in short, you bake your animations into textures and move vertices in the geometry shader.'

    And on another comment has linked to Joachims GPU texture animation project.

    So it's probably safe to say that he's using GPU texture animation.

    The other videos on the channel are pretty cool too.
     
    Antypodish and bb8_1 like this.
  15. mmankt

    mmankt

    Joined:
    Apr 29, 2015
    Posts:
    49
    Had a thread with this but here's a shipped PC/PS4 VR game based on early ECS (still with inject api):



     
    flyer19, Cpoject, rdjadu and 18 others like this.
  16. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    Yeah, I remember while ago, seeing your earlier progress. Really liked it. Thx for sharing.
    Staying faithful to inject huh? :p

    Ah thats cool. Thx for sharing the findings.
    That explains, how it has been achieved so many animated units.

    I tried Joachim's animation code myself, few months ago.
     
    bb8_1 likes this.
  17. mmankt

    mmankt

    Joined:
    Apr 29, 2015
    Posts:
    49
    Thanks! Well, we held to the old version of ECS because the game was done when they released the new query api (The PC version was already released and I was porting it to ps4), at the time there was no significant gain in moving to it imo - maybe some better burst performance but the project was DoA so we didn't invest in it further. I was a bit limited in what I could 'burst' but managed to get it running well enough on a ps4 :)
     
  18. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    Stickied it for now, it's nice that people can share and learn from each other's projects in one place, and DOTS will benefit from it too!
     
    Mikael-H, NotaNaN, AcidArrow and 6 others like this.
  19. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    Awesome! What challenges did you encounter in getting VR working with DOTS? It's a particular use case for me and I'm worried much is missing from the API surface / compatible components...
     
    JediNizar, TWolfram and bb8_1 like this.
  20. mikaelK

    mikaelK

    Joined:
    Oct 2, 2013
    Posts:
    284
    I have been working on this targeting plugin. I have second version coming, which will allow multiple targeting systems, actions and targeting instructions.

    Here i direct link to video:


    And yes its not tied to any platform. You do not need vr-goggles/packages to use the plugin. How to toggle vr-support for the plugin is on the documentation.

    I came with this idea after playing several VR-games and noticed that object picking differs quite a lot. Mostly the targeting or the object-finding behavior. I think there is a demand for quality VR-games, which are time consuming to produce.

    Currently I have been making on more example scenes for the next release. Next version will have examples on how to use the plugin for creating smart weapon targeting on top down shooter and tower defense like games. The end goal is to also add edge detection, so players can also filter + detect edges for sneaking and moving scenarios reducing the need for adding trigger colliders everywhere.

    The plugin is mostly done. The only thing I'm adding is a chunk detection system + tests for it that will allow to increase the targeting systems to thousands and still have + 60-90 fps depending on the kind of environment.
    https://assetstore.unity.com/packages/tools/game-toolkits/targeting-system-1-0-62547
     
    Last edited: Jun 9, 2021
    rdjadu, lclemens, DV_Gen and 2 others like this.
  21. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    Ah nice, it is for VR right?
    Can you please post vid and few words description in this thread too, so there is more content than just a link to asset store? You can just edit your post.
     
    JediNizar and bb8_1 like this.
  22. JediNizar

    JediNizar

    Joined:
    Nov 13, 2016
    Posts:
    111
    Yeah Dots and VR is still some Mystery for me too
     
  23. mikaelK

    mikaelK

    Joined:
    Oct 2, 2013
    Posts:
    284
    yes, updated the post.
     
    Antypodish likes this.
  24. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    Superb, appreciated.
     
  25. mmankt

    mmankt

    Joined:
    Apr 29, 2015
    Posts:
    49
    At that time it was 'just working', didn't have any major problems. We used LWRP , no idea how it would work with Hybrid renderer right now. Our VR code to handle interactions and headset input were classic prefabs that acted as input to the simulation, so the VR part was done in a classical way. The ECS battle simulation didn't care about the player in VR and what he was doing, so for example using a turret with your hands would just trigger a Command to the battle system to simulate bullets firing etc. Also grabbing a unit and throwing it into the battle would produce a command that you threw this unit here with this force and only then it would actually produce an entity that would join the battle. So there was a clear separation between the battle and vr interactions.
     
    Mikael-H, mariandev, NotaNaN and 2 others like this.
  26. hippocoder

    hippocoder

    Digital Ape

    Joined:
    Apr 11, 2010
    Posts:
    29,723
    Aha makes perfect sense, so the VR part was classic mono, makes a lot of sense for your game type.
     
  27. jvik

    jvik

    Joined:
    Apr 8, 2014
    Posts:
    2
    I am a student from Breda University Of Applied Sciences and together with my team we have released our game,
    Vedelem: The Golden Horde for free on steam:
    https://store.steampowered.com/app/1517150/Vedelem_The_Golden_Horde/


    It is a real time strategy and survival game where you build up your fortress to defend against the massive Mongolian invasion.
    It is using DOTS for all gameplay logic and supports big battles (10k units).

    We have been working on it for 8 months and recently done a interview with TurboMakesGames about our process developing this game.
    Check it out here:


    We have developed vertex animations tools to efficiently animate a lot of units.
    These tools are open source and you can check them out here:
    https://github.com/maxartz15/VertexAnimation

    If you are interested feel free to check it out!
     
    Last edited: Jun 26, 2021
  28. Arberk

    Arberk

    Joined:
    Feb 3, 2014
    Posts:
    5
    I'm working on a game called Power Of Slide. All the logic is done with ECS (except UI). I am using Havok Physics to simulate physics. The project was started as a training project to learn Unity DOTS. Here is the gameplay:

     
  29. Ashkan_gc

    Ashkan_gc

    Joined:
    Aug 12, 2009
    Posts:
    1,124
    Last edited: Aug 1, 2021
    lclemens, Sab_Rango, Emanx140 and 4 others like this.
  30. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    Cool stuff guys. Keep it comming. It shows how DOTS tech can be used successfully in various projects ;)
    @Ashkan_gc would you mind me ask you, to update post, so people can see video in the post as well.
    Adding link from youtube vid should embed it automatically.
    You can keep your links too, if you like. Thx.
     
  31. Ashkan_gc

    Ashkan_gc

    Joined:
    Aug 12, 2009
    Posts:
    1,124
    @Antypodish Did so. It was my first time doing this so thanks for the tip.
     
    Antypodish likes this.
  32. Krajca

    Krajca

    Joined:
    May 6, 2014
    Posts:
    347
  33. Ashkan_gc

    Ashkan_gc

    Joined:
    Aug 12, 2009
    Posts:
    1,124
    We create scriptable objects based on parameters, considerations and actions defined in the AI Editor UI.
    Then we generate code for calculating AI based on those actions and their considerations.
    We also generate a MonoBehavior called AIAgent which is attached to entities and contains all entity parameters which should be attached to the entity.
    There is a conversion script which converts the scriptable objects to blob assets so we can run the generated AI code which is a single system which uses burst and is parallel.
    Then user code sets entity paramters and the AISystem calcualtes the current action and it can be read from the AIAgent component by the users and users can execute the chosen action.

    Each parameter at the moment is an IComponentData but later on we will make a single component which is a pack of floats because that will lead to less cache misses.

    Also for now the AI runs every x seconds but we want to divide the work between multiple frames so one frame will not have a big time lost due to the AI.
     
    Emanx140, Krajca and Antypodish like this.
  34. Timboc

    Timboc

    Joined:
    Jun 22, 2015
    Posts:
    238
    I've stalled on my project a bit due to the main thread overhead of scheduling jobs & the dependency chain with small numbers of entities. I'm curious - if you've had similar issues. i.e. can I ask how much main thread time your systems take end-to-end for e.g. <10 agents? In my case I struggle to get cpu overhead to <0.5ms for a single entity and < 1ms for a single gameobject (in a build, fully bursted & using Run() or Schedule() where possible).
     
    Krajca likes this.
  35. Krajca

    Krajca

    Joined:
    May 6, 2014
    Posts:
    347
    Do you have any materials on code generating?
     
  36. Ashkan_gc

    Ashkan_gc

    Joined:
    Aug 12, 2009
    Posts:
    1,124

    Ultimately one should use Roslyn or some templating language but we here just did string concatenation and manipulation and stored the results in .cs files in the project folder.

    @xoofx Had a github repo for a good templating language which unity's own AI planner is using but I forgot the name of it (reason of the mention)
     
  37. pixelsplit

    pixelsplit

    Joined:
    Sep 16, 2013
    Posts:
    173
    Hey,

    just wanted to share our released Early Access game "Indoorlands". It uses Unity ECS for economy system and park visitor simulation. It is a heavily hybrid approach, but I think this is one of the great strengths that devs need to know about -- it is not either ECS OR GameObjects. It can easily be both. But surely we'll want to port as much of the hybrid stuff to ECS as possbile (if helpful in terms of performance or code structure).


    Here is a early prototype GIF where we tested ECS simulated visitor pathfinding + movement. I think it was something about 20k Units.
    EDIT: Somehow it doesn't want to embed... here is the link: https://cdn.discordapp.com/attachments/646457470255890443/703698371499524237/wusel.gif


    For the pathfinding we use the A* pathfinding project with a system which translates the paths to ECS. This is probably one of the main points to improve on (custom pathfinding instead of Recast Graph etc.).

    I think in general we just used half of the features and could optimize way more, but it was such a blast using ECS. When we started understanding the data-based thinking in context of our game + how the API works it made click. Really looking forward to using this in other projects too. Unity, don't abandon this, please :p

    Our STEAM page: https://store.steampowered.com/app/1378890/Indoorlands/

    Best regards
    Bennet from Pixelsplit
     
    rdjadu, lclemens, BeeNvizzio and 13 others like this.
  38. hidingspot

    hidingspot

    Joined:
    Apr 27, 2011
    Posts:
    87
    Very cool! Thanks for sharing, and congrats on the early access Steam release!

    I agree about using a mix of standard Unity in combination with entities, utilizing each where they make the most sense. That's what I'm doing with my weekend project. The player characters, visual effects, and UI are mostly standard GameObjects, while all the enemies/foliage/projectiles are entities. Granted, it's just my side project, so it's nice to see a game actually released on Steam which make use of entities. Best of luck as you develop toward final release!
     
    pixelsplit likes this.
  39. PolarTron

    PolarTron

    Joined:
    Jun 21, 2013
    Posts:
    94
    Earlier this year I decided to do a 100% server authoritative multiplayer game using DOTS, making my own networking solution. I've learned most from the Overwatch Networking GDC video and reading up on prediction models.

    I've managed to leave the DOTS Physics System almost untouched right in the middle of my simulation group which allows me to re-use it for rollbacks.

    I could never have done this with GameObjects. The performance increase of Jobs & Burst is easily 1000x with this many entities.

    Here's a video of my prototype. 50 bots atm but I've tested it with 500 and it works, though the game lasts for too long so 100 is where I'll set the limit I think.
     
    Bagazi, lclemens, BeeNvizzio and 7 others like this.
  40. davenirline

    davenirline

    Joined:
    Jul 7, 2010
    Posts:
    987
  41. PhilSA

    PhilSA

    Joined:
    Jul 11, 2013
    Posts:
    1,926
    Just for fun, I wanted to see what kind of completely ridiculous weapons DOTS & VFXGraph would allow us to have in games with their powers combined, so I made this little test.

    The weapon in this video spews out 10k bullets per second. Each bullet is a regular instantiated Entity with a meshRenderer; no pooling and no special optimizations of any sort. And each one of them does raycasts for hit detection + calculations for "stretching" the bullet mesh relatively to its velocity on every frame. In short; it's a very straightforward implementation that doesn't do any clever tricks

    Bullet hit VFX & bullet hole decals are handled with VFXGraph, using only one graph instance to handle all hit VFX instances (each new VFX is a "spawn new particles here" event sent to one single VFXGraph instance in the scene). This technique is a bit complex to work with at the moment, but the VFXGraph devs are working on implementing something called "VFX instancing", which should make this technique much more accessible

    The scene below never drops under 70fps on my old PC from 2013 (intel Core i5 4690k, 4 cores/threads), and there are roughly 50k simultaneous bullets in-flight at the peak

     
    Last edited: Sep 18, 2021
  42. davenirline

    davenirline

    Joined:
    Jul 7, 2010
    Posts:
    987
    Cpoject, rdjadu, FlavioIT and 10 others like this.
  43. walaber_entertainment

    walaber_entertainment

    Joined:
    Jul 10, 2017
    Posts:
    30
    I'm making a brand-new game in the JellyCar series, this new project is based on an updated version of my 2D soft-body physics library, which I've ported to DOTS/ECS to make the new game in Unity.


    All of the physics and gameplay are ECS, Visuals are GameObject meshes, with the (constantly changing) vert positions and triangulation calculated in an ECS system.
     
    rdjadu, lclemens, NikiWalker and 14 others like this.
  44. JohnnyTurbo

    JohnnyTurbo

    Joined:
    May 17, 2017
    Posts:
    42
    Recently I decided to recreate Conway's Game of Life using Unity DOTS and document my development process along the way. I want to use this project as a way to experiment with different types of performance optimizations and implementing data oriented concepts.

    Of course I am open to suggestions on things I can improve on, add in, or experiment with. To avoid cluttering up this thread too much, I'll make a dedicated forum post for this in the coming weeks where I go into some more written detail about what I've done so far, plan to do, and use as a place for people to post feedback about the project.

    If you do have any suggestions or feedback for now, feel free to comment on the video or post in my Discord community - https://tmg.dev/Discord

    Anyways here is the first iteration of "Turbo's Game of Life" enjoy!



    Code on GitHub: https://tmg.dev/GameOfLifeV2-Code
    Build files to play around with: https://tmg.dev/GameOfLifeV2-Build

    Update: I've created a dedicated forum thread for this project and will be posting further, in-depth written updates on there!
    https://forum.unity.com/threads/devlog-turbos-game-of-life.1194421/
     
    Last edited: Nov 10, 2021
    dherault, Ryiah, MD_Reptile and 10 others like this.
  45. davenirline

    davenirline

    Joined:
    Jul 7, 2010
    Posts:
    987
    Sab_Rango, lclemens, PutridEx and 2 others like this.
  46. Krajca

    Krajca

    Joined:
    May 6, 2014
    Posts:
    347
    Did you try using an array instead of an entity per cell? It should be much much faster. And your solution for material changing can be faster than this but instead of changing materials you can add material override to your entity and change that.
     
    varnon likes this.
  47. psuong

    psuong

    Joined:
    Jun 11, 2014
    Posts:
    126
    Hey, just saw this post and wanted to a plug in a tool I have been working on!

    I've been working on NimGui, a 1 Draw Call Immediate Mode GUI for Unity. This utilizes Burst and the C# Job System to build a 1 draw call UI. The static API an be called from MonoBehaviour Update() or SystemBase OnUpdate() methods and was mainly built so I can easily display some statistics in MonoBehaviours and SystemBase.

    Here's a video of the 1 draw call UI that's currently in progress:

    1 Draw Call UI


    Similarly, I have my own forum post here which I'll mainly be updating as I build up the tool: https://forum.unity.com/threads/in-...aw-call-immediate-mode-gui-for-unity.1171601/

    Update

    Update! I've released NimGui to the Asset Store and Itch.
     
    Last edited: Mar 30, 2022
    FlavioIT, lclemens, koiq and 12 others like this.
  48. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,780
    How we can verify, if it used DOTS?
     
  49. Ashkan_gc

    Ashkan_gc

    Joined:
    Aug 12, 2009
    Posts:
    1,124
  50. bb8_1

    bb8_1

    Joined:
    Jan 20, 2019
    Posts:
    100
    Found this video on yt - author says it's DOTS based project