Technical Devlog: Implementing Audio into my Game Engine

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 ก.ย. 2024
  • Devlog video about "Homegrown", a casual farming game I'm creating using my own engine. In preparation for the UI overhaul I'm implementing the audio system into my game engine this week.
    Support the channel on Patreon and get access to the game & code for Homegrown, the city-builder, and Equilinox:
    / thinmatrix
    Play my previous game "Equilinox":
    store.steampow...
    You can follow the progress of the game on my social media:
    Twitter: / thinmatrix
    Instagram: / thinmatrix
    Facebook: / thinmatrix
    Trello: trello.com/b/W...
    Email: thinmatrix@gmail.com
    Background music by Jamal Green:
    open.spotify.c...
    Outro music by Dannek Studio:
    / dannekstudio
    #devlog #Homegrown

ความคิดเห็น • 264

  • @ThinMatrix
    @ThinMatrix  11 หลายเดือนก่อน +276

    This is a much more technical devlog than usual so if that's not your thing then this one might not be for you (and if it is your thing then yay, enjoy!)
    We'll be back to more visual features next time with the UI makeover.

    • @Ferenc-Racz
      @Ferenc-Racz 11 หลายเดือนก่อน +13

      I love this kind of content, which is a bit more technical. Congratulation for the huge amount of progress. :)

    • @deadpl55
      @deadpl55 11 หลายเดือนก่อน +1

      I'm learning game development and i like both or them but this type of content i like most

    • @user-ob5hj5vn8c
      @user-ob5hj5vn8c 11 หลายเดือนก่อน +6

      I agree, this is the content I like the most actually! :)

    • @artymer5021
      @artymer5021 11 หลายเดือนก่อน +5

      I actually quite enjoy the more technical content. I find it not only interesting but also very inspiring. I am an aspiring game dev as well so these videos often fuel the muse haha

    • @melekRebai
      @melekRebai 11 หลายเดือนก่อน +2

      Both are great but as a non game developer i really enjoy watching technical dev logs cuz it allows me to see a different aspect of programming

  • @jprice_
    @jprice_ 11 หลายเดือนก่อน +864

    Everyone crying over unity while this mad lad just chills with his own engine. Absolute legend.

    • @Duke6598
      @Duke6598 11 หลายเดือนก่อน +47

      lmao, actually so smart from thinmatrix to do this looking at it retrospectively. Best unintended business decision

    • @faluhub
      @faluhub 11 หลายเดือนก่อน +13

      You're saying this as if it's not actually a problem that unity's doing this.

    • @pedroduran8927
      @pedroduran8927 11 หลายเดือนก่อน +32

      1. Unity fixed pricing with a 2.5% revenue cap, becoming cheaper than unreal.
      2. Making an OWN engine consumes time, you have to be VERY GOOD at math / vector programming to just have some level of a simple camera rendering a cube.
      3. Even making an engine that returns an executable application is a real PAIN. now imagine trying to produce multi-platform game on an own engine 💀
      Engines costs money because they save time and resouces. You can always go godot but it has its sharp edges too.

    • @jprice_
      @jprice_ 11 หลายเดือนก่อน

      @@pedroduran8927 Why even touch godot when king released their own engine for all to use? Both Unity and Godot have a smiliar issue - they are led by a buffoon.

    • @willcollins5121
      @willcollins5121 11 หลายเดือนก่อน

      @@pedroduran8927ehhh this is built on lwjgl cross-platform isn’t a huge issue here

  • @finalforeach
    @finalforeach 11 หลายเดือนก่อน +263

    The procedural sound system you made solved a problem I wasn't even aware of! I suspect most game devs will run into that issue at some point. Glad to be following this series.

    • @Zonix_Official
      @Zonix_Official 11 หลายเดือนก่อน +5

      I'd assume as a by product of this, when it comes to implementing Sound to your Minecraft Recreation that this will majorly help!
      Nice to see you also watching ThinMatrix, FinalForEach! :D

    • @finalforeach
      @finalforeach 11 หลายเดือนก่อน +6

      @@Zonix_Official I stand on the shoulders of giants! ThinMatrix's videos is how I learned to make good looking water graphics after all.

  • @haydenap
    @haydenap 11 หลายเดือนก่อน +124

    Man the procedural sound effect thing you did for variable interaction time is so cool. Great solution to that problem.

    • @lukasjost44
      @lukasjost44 11 หลายเดือนก่อน

      I think this is exactly how it works in Minecraft

  • @raphaelvinh
    @raphaelvinh 11 หลายเดือนก่อน +82

    Can we talk about how good this transition at 1:26 is ? good work man !

    • @alejorag
      @alejorag 11 หลายเดือนก่อน +1

      He does it a lot but everytime I see it I still marvel at it lol it just looks so clean

  • @jamesbaconreid
    @jamesbaconreid 11 หลายเดือนก่อน +100

    Love the sounds! Especially the procedural ones - that's so cool!

  • @Joshimuz
    @Joshimuz 11 หลายเดือนก่อน +19

    I appreciate the more technical videos! The procedural sound generation for the arbitrary length actions was super nice!

  • @JustATempest
    @JustATempest 11 หลายเดือนก่อน +29

    For building compound sounds, I would recommend using a builder pattern, as you're effectively building a track. You would create a compound sound with an add track method that takes a track, and returns 'this', allowing you to chain addTrack function calls, that way you don't have a block of variables defined in a row like at 12:35 with incrementing variable names like track0, 1 2 3. You've used the builder pattern with sound 2D builder I think it would work really well with compound sounds. If only to keep consistency of the code. It's still be a good idea. You're using the factory pattern, for the digging sound effect which is a good idea. When you combined with patterns, a new world opens up. Imagine a sound effect factory, that can create the sound effect you need, and using the builder pattern to configure the given sound effect as a compound sound.

  • @szabados1980
    @szabados1980 11 หลายเดือนก่อน +2

    Actually I prefer this sort of devlog videos to where only the game play features are shown. 👍👍👍

  • @sirynka
    @sirynka 11 หลายเดือนก่อน +27

    It'd be cool to change the pitch of the sound during the digging or water pouring process so the player would have an intuition on how long the action would take without even looking in the screen.

    • @ThinMatrix
      @ThinMatrix  11 หลายเดือนก่อน +15

      Nice idea!

    • @madmanmax120
      @madmanmax120 11 หลายเดือนก่อน +5

      @@ThinMatrix To add onto this, it'd be an awesome bit of polish to have, for instance when harvesting a section of crops, to have the "harvest" sound rise in pitch over subsequent harvests. So basically crop 1/5 will be the lowest pitch, 3/5 being in the middle, then 5/5 being the highest, scaling in pitch depending on the size of that particular group of crops.
      It builds a sense of rising accomplishment when you have an audio source do that, very similar in to how Minecraft does their sfx for breaking blocks. Or y'know, just implement it on a smaller scale and just do it for each individual plant. I think it'd fit right in with your farming game here!

    • @AgentM124
      @AgentM124 11 หลายเดือนก่อน +3

      And not everything has to follow this system, you could also increase the frequency at which sounds are played to give a sense of speedup.
      That way not every action sounds like a fire alarm.

  • @LifeOfMohammed
    @LifeOfMohammed 11 หลายเดือนก่อน +47

    I love how far you have come with this and like I love how good the videos are getting with all the transitions and all looks so good! Have you got a goal in mind for releasing this game? I also love the out-of-monitor transition so much haha also pretty neat you are using ur own tutorials to remember stuff!

    • @ThinMatrix
      @ThinMatrix  11 หลายเดือนก่อน +24

      Thanks! I'm currently aiming for end of next year, but that might be a bit optimistic.

    • @LifeOfMohammed
      @LifeOfMohammed 11 หลายเดือนก่อน

      @@ThinMatrix That is awesome to hear sadly I was abit to eager to try it out so its awesome you uploaded it on Patreon!

    • @Alex-fn7kj
      @Alex-fn7kj 5 หลายเดือนก่อน

      End of next year ?!! But your game and his loop already is so polished, adding new content like plant and tool and farm upgrade okay, but if you leave yourself until end of next year it mean we haven't seen half of the systems and mechanics build implemented yet, right ? 👀

  • @SharkyGamess
    @SharkyGamess 11 หลายเดือนก่อน +7

    It’s amazing what sound effects and music can do! Brings the game to life 😍 keep it up!

  • @GetaVe
    @GetaVe 11 หลายเดือนก่อน +1

    Elegant solution and it sounds like it works well. My main suggestion is less harsh sounds like metal and hard rock. And more soft crunchy sounds.

  • @msajidsarker
    @msajidsarker 11 หลายเดือนก่อน +1

    You have a brilliant mind, and you are creating the most beautiful little garden simulator to cultivate peace.

  • @justred2337
    @justred2337 11 หลายเดือนก่อน +8

    I love it how you carefully explain everything while also making a game using Java, most people just use Unity and C# to make basic stuff but you made your own engine! Would love to playtest someday, keep up the awesome work!

  • @ocleidyreve6361
    @ocleidyreve6361 11 หลายเดือนก่อน +2

    Uff Amazing video...technical videos also rocks and people like them. Thanks for taking some of our advices!!

  • @turnrp
    @turnrp 11 หลายเดือนก่อน +10

    I love these devlogs

  • @clonkex
    @clonkex 11 หลายเดือนก่อน +1

    I love the secateurs sound! So clean and calm.

  • @lucavogels
    @lucavogels 10 หลายเดือนก่อน

    Wow! The sound generator idea for the tools was really smart! 😱

  • @AustinCameron
    @AustinCameron 11 หลายเดือนก่อน +1

    Watching this while writing my own AudioController for an audio book app.

  • @bonecircuit9123
    @bonecircuit9123 11 หลายเดือนก่อน +1

    you can break the song in stems, intro, chorus, bridge and outro and then randomly play the chorus and bridge a few times in variations and cap them off with intro and outro. additional chorus and bridge chunks add to the dynamics

  • @KrAvE4KaRnAgE
    @KrAvE4KaRnAgE 11 หลายเดือนก่อน +2

    As a bit of fun, you could try recording real-world sounds of you performing these tasks! Also, adding a start sound may also be value for certain actions. Such as the sound of a spade hitting the dirt. Loving this series so much, thank you for sharing!

  • @rcookie5128
    @rcookie5128 10 หลายเดือนก่อน

    1:25 This transition was unreal!

  • @doma3058
    @doma3058 11 หลายเดือนก่อน +1

    Hey man, I really appreciate you and your videos. I used to dream of being a game developer when I was younger, and your videos were my obsession. That was probably around 2015-16 when i was 11-13 years old! Now I am in college for Cybersecurity and am so happy to start watching your content again! Thanks for sticking around man and I am real proud to see how far you have gotten. :)

  • @ramoncf7
    @ramoncf7 11 หลายเดือนก่อน +2

    Your OpenAL tutorials helped me to add sounds to my game, just for the effort and work it took you to create all those tutorials (and the OpenGL ones) I'm wishing you the best, you're an inspiration for all indie gamedevs! Thank you.

  • @SvenGarson
    @SvenGarson 11 หลายเดือนก่อน

    Oh yes - Great idea layering the sounds - Very satisfying to listen to

  • @marcruijs1039
    @marcruijs1039 11 หลายเดือนก่อน +4

    I'm currently working on making my own GUI library. Definitely taking some inspiration from this video 😬 Excited to see what you'll do with the UI!

  • @Aquillyne
    @Aquillyne 11 หลายเดือนก่อน +2

    Those procedural sounds are incredible! Bravo.

  • @SpikeStudio
    @SpikeStudio 11 หลายเดือนก่อน +1

    Audio is one of the most underrated parts of a game, so its cool to see a Devlog about it. Great audio will not be noticed, but bad audio is heard by everyone, it seems you got a great start!

  • @wiechciu0
    @wiechciu0 11 หลายเดือนก่อน +1

    That's impressive how well all of these parts work together. The procedural audio sounds really good, neat idea!

  • @ianbryant
    @ianbryant 11 หลายเดือนก่อน +3

    The procedural sounds are beast my dude.

  • @AlexScotton-Illizian
    @AlexScotton-Illizian 11 หลายเดือนก่อน +1

    Congratulations, this really adds a great layer and makes it so much more immersive. The way you've created the procedural sounds is genius and applicable for much more than an audio system.

  • @TheHanutaXD
    @TheHanutaXD 11 หลายเดือนก่อน +1

    I love the idea of the CompoundSound. Very neat :)

  • @SylvesterNumski
    @SylvesterNumski 10 หลายเดือนก่อน

    I just found your TH-cam channel. It is great! I love the technical videos too. hope the game development stays smoothly. Keep up the good work!

  • @LasseRafnDk
    @LasseRafnDk 11 หลายเดือนก่อน

    Procedural sound (including the click sound) is such a nice QOL thing, makes the game feel so polished.

  • @EdwardVarner
    @EdwardVarner 10 หลายเดือนก่อน

    Your solution to problems is always elegant and inspiring. I didn't expect to enjoy this style of video and I was sad when it ended. Well done!

  • @_stephenhubbard
    @_stephenhubbard 11 หลายเดือนก่อน +1

    1:25 dat transition though

  • @kacper2246
    @kacper2246 11 หลายเดือนก่อน

    i always find it incredibly impressive and admirable when someone creates their own game engine for a game
    love how the game looks, keep it up!

  • @cameronstroebel3333
    @cameronstroebel3333 11 หลายเดือนก่อน +1

    Very interesting episode, I enjoyed the deep dive :)

  • @Skeffles
    @Skeffles 10 หลายเดือนก่อน

    Brilliant to see how you are tackling sound. My last game had a bunch of issues with sound and I've struggled to find good videos explaining whats going on. This helped

  • @PultsMoizer
    @PultsMoizer 11 หลายเดือนก่อน +2

    Bro had the audacity to use Audacity.
    Great Video my man, really enjoying to see such a progress in more than a month!

  • @rigolus
    @rigolus 11 หลายเดือนก่อน

    I very much enjoy those more technical devlogs, do not be afraid to make more like that! :)

  • @OnlyTheVerse
    @OnlyTheVerse 11 หลายเดือนก่อน

    I'll watch your every single video at least until you finish a city building game, you have my word!

  • @j3ns
    @j3ns 11 หลายเดือนก่อน

    I love these technical devlogs 😀 but I also enjoy the other ones 😊

  • @Draconicrose
    @Draconicrose 11 หลายเดือนก่อน +1

    This is a really cool solution to the sound repetition and definitely adds juice to the game. I am thinking that as the player progresses so will the soundscape of the gameplay loop, which is neat.

  • @Genesis8934
    @Genesis8934 11 หลายเดือนก่อน +1

    Random clicks sound cool; equally cool might be a step the pitch (up to a limit) in ascending or descending order. ;)

  • @coffeefingies
    @coffeefingies 11 หลายเดือนก่อน

    The way you implemented the compound sound effects is really clever, well done. Might have to borrow that idea in the future!

  • @6ocram
    @6ocram 11 หลายเดือนก่อน

    The procedural sound effects really give a lot of life to the game. Really really good implementation :D

  • @JohnDoe-bo5yk
    @JohnDoe-bo5yk 11 หลายเดือนก่อน +1

    Ohh.. making your own engine.. thought this was just a game devlog.. now I might have to go back to your first

  • @Jadushnew
    @Jadushnew 11 หลายเดือนก่อน +2

    For me the hardest part is to decide what needs to be in a new class and separating different ideas to different files.

    • @pritamdavis
      @pritamdavis 11 หลายเดือนก่อน

      Same brother 😂

  • @feathorix8778
    @feathorix8778 11 หลายเดือนก่อน

    I am quite new to your channel and I just realized that you do not "only" develop a cozy farming game, but that you use a self-made engine, too! That's so cool, much respect! 🙂 Seems like a big benefit in the current situation, hehe.
    I really like the idea of the compound sounds, they give a nice polish to the general sound design and make the tasks feel less repetitive.
    As another comment already mentioned, it could be nice to be able to hear the progress of a task, e.g. by raising the pitch after each tile.
    Very nice devlog! :)

  • @MrOmega-cz9yo
    @MrOmega-cz9yo 11 หลายเดือนก่อน

    I like the information presented and the game is looking good!

  • @isaacgreen9495
    @isaacgreen9495 11 หลายเดือนก่อน

    That shovel sounds great!

  • @ccoodduu
    @ccoodduu 11 หลายเดือนก่อน

    This devlog was so interesting and useful! It's amazing how much sound does to a game.

  • @SaadTheGlad
    @SaadTheGlad 11 หลายเดือนก่อน

    Dude this is literally perfect, I wanted a good way to implement audio into my game and while it's not gonna be as complex as yours I wanna get some inspiration for future titles. Keep it up!

  • @Pruemedia
    @Pruemedia 11 หลายเดือนก่อน

    Super impressive work! Keep going! :)

  • @seb-astian-design
    @seb-astian-design 11 หลายเดือนก่อน +4

    Love the procedurally generated sounds! Cool way to create it! Have u thought about raising the pitch when u dig a hole? Idk it just felt would make the pop more satisfying.

  • @CurtisDoesADig
    @CurtisDoesADig 11 หลายเดือนก่อน

    Dude, the procedural sound system is amazing! That was so awesome to see in action!

  • @maxneevo
    @maxneevo 11 หลายเดือนก่อน

    The procedural sound system was such a cool solution, loving the videos!

  • @lightludology9081
    @lightludology9081 11 หลายเดือนก่อน

    This is so inspirational! As a new viewer, I'm absolutely amazed!

  • @JoelFunk
    @JoelFunk 11 หลายเดือนก่อน

    Brilliant work as always. The sounds add so much weight to the game interactions. Good job!❤

  • @natgazer
    @natgazer 11 หลายเดือนก่อน

    You inspire me so much! Despite I'm more towards meat and stuff, I'm loving your game development!

  • @possumkeys
    @possumkeys 11 หลายเดือนก่อน

    Such an absolute chad! You are a really good programmer sir! Loved the sound thing. Loved it.

  • @KuroOnehalf
    @KuroOnehalf 11 หลายเดือนก่อน +1

    Surprisingly interesting dev log. Good stuff!

  • @pixboi
    @pixboi 11 หลายเดือนก่อน

    Dude your home is so peaceful and clean, always admiring that in these videos :D

  • @mrcingo
    @mrcingo 11 หลายเดือนก่อน

    the fact that the sun is literally kissing you while you're coding is incredible

  • @epiphanyatnight8732
    @epiphanyatnight8732 11 หลายเดือนก่อน

    Would love to see a video on how you manage this project. Loved your Trello board, so simple and functional.

  • @adrianozuna875
    @adrianozuna875 11 หลายเดือนก่อน

    Man i just want to say, I'm still addicted to equilinox, it's such a good game. I have so many high hopes for this latest project

  • @gernivisser593
    @gernivisser593 11 หลายเดือนก่อน

    I love these more technical videos !!

  • @HobokerDev
    @HobokerDev 11 หลายเดือนก่อน

    Gotta say, even those placeholder samples don't sound half bad! Looking forward to the next devlog as usual!

  • @kyaniteschmidt7658
    @kyaniteschmidt7658 11 หลายเดือนก่อน

    1:27 very smooth!

  • @hippylp2306
    @hippylp2306 11 หลายเดือนก่อน

    Hey, really like your videos and the games you produce :) I also really enjoy the details you add to your videos like playing the music in the background the way your are describing it in the code :)

  • @Hessrs
    @Hessrs 11 หลายเดือนก่อน +1

    One suggestion (that you may have already done but it's hard to tell) is if you click to perform an action such as digging/planting, if you don't let go of the click but move the tile to another valid tile, that the action still performs so the user doesn't have to click each individual tile. I think this would be something that people probably won't notice if it exists but definitely would notice if it was missing. Love the technical video though!

    • @ThinMatrix
      @ThinMatrix  11 หลายเดือนก่อน +2

      Thanks! And that's already how the tools work :)

  • @360McCarthy
    @360McCarthy 11 หลายเดือนก่อน +4

    Can I just say how much I love these more technical videos! I was curious also @ThinMatrix what Java version and lwjgl version are you building the game using?

  • @FacemanArt
    @FacemanArt 11 หลายเดือนก่อน

    Super cool devlog! Loved how you approached the procedural sfx. Keep up the great work!

  • @tobias-edwards
    @tobias-edwards 11 หลายเดือนก่อน

    Really enjoyed the insight!

  • @KingofUshankas
    @KingofUshankas 10 หลายเดือนก่อน

    love the content thinmatrix!!!

  • @eidnoxon
    @eidnoxon 11 หลายเดือนก่อน +2

    Hey dude! Love your content

    • @ThinMatrix
      @ThinMatrix  11 หลายเดือนก่อน +4

      Thanks! And yeah, I'll do that during the upcoming UI updates :)

  • @dentjoener
    @dentjoener 11 หลายเดือนก่อน +1

    Amazed to spot an eclipse user in the wild 😁. Game's really starting to shape up, keep up the good work!

  • @artembordiuh2802
    @artembordiuh2802 11 หลายเดือนก่อน

    The sound system and sounds are great, most of them in my opinion are production-ready (unless of course a different feel is intended for the game). The only suggestion is the UI click sound, it's a bit loud and intrusive, and some of the sounds are spatially shifted when using earphones

  • @robvp71
    @robvp71 11 หลายเดือนก่อน

    Super inspiring and the way you structure your work.. impressive!

  • @kylemason01
    @kylemason01 11 หลายเดือนก่อน

    Epic stuff bro! Keep up the amazing hard work!

  • @Kwanzol
    @Kwanzol 11 หลายเดือนก่อน

    really liked this video :) the end result sounds great!

  • @studyASMRcoffee
    @studyASMRcoffee 11 หลายเดือนก่อน

    Wow, please talk more about the engine. Would love to hear more about it.

  • @heandog6481
    @heandog6481 11 หลายเดือนก่อน +1

    Don’t know the exact style you’re going for, but I feel like the game could be more relaxing with a less realistic style of sfx. I’m thinking more in the realm of mini motorways where it’s calming little blips and bloops that make the game somewhat relaxing and satisfying. Anyways, the more technical devlog was awesome and I really enjoyed this episode and the way you showcased and explained parts of your thought process and code!

  • @tenminutetokyo2643
    @tenminutetokyo2643 11 หลายเดือนก่อน

    That is nuts!

  • @RandomProduct
    @RandomProduct 11 หลายเดือนก่อน

    I think that explanation of audio buffering explains how games with a lot of dialogue are able to have skip functionality. It'd probably be a lot jankier if it had to load massive audio all at once, quickly, every time you hit skip

  • @thehen101
    @thehen101 11 หลายเดือนก่อน +2

    you should add a retry to creating the openal context(s), sometimes it seemed to fail for me for no reason when the CPU was under high load, but worked when retried

  • @jamesmoylan
    @jamesmoylan 11 หลายเดือนก่อน

    Later on I would love it if you could add a shop were you can buy items for maybe a house that you could buy or upgrade

  • @therhodesy
    @therhodesy 11 หลายเดือนก่อน

    Those compound sounds are fantastic... love your approach.
    I'd love to see you mention something about your testing in this project, I assume you're unit testing alot of this? ....

  • @GamesBySaul
    @GamesBySaul 11 หลายเดือนก่อน

    Great work as always! Sounds 100% make a game feel more alive, its why i like to do audio passes every now and then to get them sorted.
    The proc gen audio you have is so cool! Definitely something I want to try out at some point my self!
    Also curious, for the click sounds, you have 5 different variations, would randomising pitch not do the same? I can see it still sounding maybe too similar so maybe variations makes more sense

  • @cout970
    @cout970 11 หลายเดือนก่อน +5

    You should avoid using the class LinkedList, and instead use ArrayDeque, has the same functionality, actually even more!, uses less memory and is more performant, the implementation uses a compact array which works better with the CPU caches.

    • @ThinMatrix
      @ThinMatrix  11 หลายเดือนก่อน +4

      Good to know, thanks for the info!

    • @klaxoncow
      @klaxoncow 11 หลายเดือนก่อน +3

      Ah, good ol' data structures.
      Which to use depends on the access patterns.
      The advantage of the linked list is that insertion / removal is a fixed cost, even when you're inserting / deleting in the middle of the list. Because you're just changing some pointers (insertion is pointing the previous node at the new node and having the new node point to where the previous node used to be pointing, removal is just pointing the previous node to the node after the node to be removed, so the node is pulled out of the list).
      The disadvantage with linked list is, yes, that the nodes are allocated / deallocated individually and can be scattered throughout memory, so that's not cache-friendly. And that you always have sequential access, as you've got to start from the start and follow each link to find an item (poorer random access).
      The compact array has the advantage that it is cache-friendly, because you're packing all the items next to each other, and that you can use random access (because the item at index n is at offset "n * sizeof(item)" into the tightly packed array).
      The big disadvantage of the compact array is insertion / removal - particularly in the middle - as you've got to, for insertion, expand the size of the array, copy all the data after the insertion point further back to make room for the new data, insert the new data. For removal, you've got to copy all the data after the block to be removed forward to plug the gap (then shrink the array allocation with reallocation). Or, if you don't have dynamic reallocation for the memory, you're just recreating the whole array each time, which means copying absolutely evertyhing.
      So the problem with the compact array is that, well, it's compact. You can't have gaps, and so you have to move / copy data around. And if your data structure is large, then all that copying is going to be costly - and the big problem is also that the performance is tied to how big the data structure is, so small amounts of data copy quickly but a large data structure full of data takes longer because there's more copying.
      But note that, with the linked list, if the data structure gets large and you need random access - I need the "last but one" item, say - then because it's sequential access, I've got to step through the whole list (but one) to get to it. With a compact array, I can just grab the data at offset "(n - 1) * sizeof(item)" and instantly jump to any index.
      So which is best depends on access patterns. If there's lots of insertion / removal all the time, then the linked list wins, for not requiring any data copying. If you need random access, the compact array wins, as you can calculate and jump to any index, while you have to go through each item, one by one, with a linked list.
      There are other data structures. The "pool" is an awesome hybrid solution, often used by games.
      The actual data is stored in a compact array. You just allocate a normal compact array of n items for storage. But then you have another "index" data structure alongside it, which tracks which elements of our storage space are in use.
      When I need to insert, I scan for the first empty slot and use it. When I remove an item, I just mark that slot as empty - allowing it to be reused by subsequent allocations.
      It's a compact array, but I can now have gaps. When we insert new items, we plug the gaps. When we remove items, we create a new gap, which can be reused by a subsequent insert later on.
      But the real beauty of this approach is that the accompanying index is a different data structure. So you could use a linked list - well, two linked lists, one is a linked list of the items, the second one is a linked list of empty slots (the "free list"). You allocate the first item from the "free list" and put it on the "used" list. Removal is moving an item from the "used" list to the "free" list.
      So you can have the quick insertion / removal of a linked list, but the data itself is in a cache-friendly random access compact array. Best of both worlds, and - the big reason why games often use memory pools - is because it cuts down on calls to OS memory allocation / deallocation, as you've got a pool of memory and you just keep reusing it over and over. The only time you call the OS allocation is if the entire pool is full and you need to expand it to accommodate more. It's cache-friendly and has random access. But the accompanying index structure - keeping track of what's in the pool - can be another data structure that has its own advantages. You can use linked lists, or another compact array, or a hash table to index into your "pool" compact array storage.
      Indeed, the "pool" approach basically decouples indexing from storage. You store in the compact array, but you index into it using some other data structure (or, even more powerfully, you could even have multiple indexes - you could have a hash table on "name" and also another hash table on, say, "size" or any other data. As the index is now separate, you can have multiple indices for optimising finding the data in different ways - at the cost, because there's always a cost, of having to maintain multiple indices on insertion / removal).
      Yeah, the advantage / disadvantage of being a C / C++ programmer, we end up in the weeds of this stuff all the time. But the plus is because you've got to do this memory management stuff yourself a lot of the time, it makes you think about it all and choose the most optimal data structure for each instance (not just LinkedLists for everything, everywhere, all the time).
      But, as I say, for games, the "memory pool" is the perennial favourite. It's built on a compact array, so it's cache-friendly and random access. You reuse slots, so you're only ever hitting the OS allocation when your pool is totally full. For insertion / removal, you're not copying actual data, you're re-arranging the index that just points to the data in the pool.
      Decoupling the data from the index into the data means you could have multiple indices for different access patterns (one index on "id", one index on "name", one index on "least recently used" or whatevever) and can mix and match different indices with your underlying storage. So, for example, the index could be a stack or a list or a tree or whatever, which just provides an index into your compact array, where the real data is stored.
      Yes, sometimes, ArrayDeque will beat LinkedList, as it's cache-friendly. But it really depends on your access patterns and size of the data (if each item in the data structure is bigger than a cache line anyway, it doesn't even matter, as you can't fit it in the cache and it's a cache miss every time).
      The real thing to do is look at your access patterns and then choose accordingly. Though, sure, all other things being equal, ArrayDeque probably works for what you're doing and, therefore, will likely be the better choice. But not always.
      The underlying wisdom is that these things are always case-by-case - as it depends on how you use the data structure (e.g. do you need fast insertion / removal as you're doing it all the time? Is your access always sequential or can it be random access?).
      And, in the end, always profile it. If it's "good enough" then leave it be.
      As programming god Donald Knuth would have it: "premature optimisation is the root of all evil". Really, only optimise when you need to, as the thing's chugging and laggy, as you develop it. Do an "optimisation sweep" after you're finished coding it all to lower that "minimum spec" for your game.
      Don't optimise early. Not least because you could be wasting your time. For example, I get a sort function and then I drop down to assembly language to really optimise every last CPU instruction. Cool. It's a super-fast sort. But then I re-visit the design and algorithm. If I move this here, if I change this... cool, now there's no need to pre-sort the data on-the-fly. I don't need that super-fast sort algorithm anymore, as I've got something even faster (another Knuth quote: "the fastest code is the code that never runs").
      Do optimisation at the end - only do optimisation during development when you've got no choice, as it's just too damned slow and laggy without it - and then always optimise "top down". Start at the highest level and move down to the lower levels. There's a "directionality" to optimisation, as noted, so you don't want to just be "undoing" all your previous hard work all the time.
      Also, always start with the overall algorithm and data structures, because those are the biggest wins. Going from a linear search through an array to a hash table - from "O(n)" to "O(1)" - will massively improve your performance. So much so, that's probably all the optimisation you need to do for excellent performance on everything. If you find yourself amongst the weeds of individual instructions, then you're doing it wrong, unless it's the very last bit of optimisation you're doing right at the end (and, with deadlines, you'll probably never get there - but if you've chosen all the best algorithms and data structures from the off, you won't need to be in the weeds anyway).

    • @pritamdavis
      @pritamdavis 11 หลายเดือนก่อน +1

      ​@@klaxoncowThat's a lot to take in, but thanks for taking the time to share. Learnt something new!

    • @klaxoncow
      @klaxoncow 11 หลายเดือนก่อน +1

      @@pritamdavis Yes, apologies, as it is quite a bit of text to read. Unfortunately, it's just not a subject you can easily summarise - I mean, "data structures" is often a whole module (or two) unto itself on university courses. Like, it's a lot of text, but this is the summarised version, believe it or not. 😁

  • @julianodbz
    @julianodbz 11 หลายเดือนก่อน

    Maybe you could buy decorative things to your house and your farm with the money from the crops etc. Also, you could invest and improve the town and the stores with the money you make.

  • @MAIpeleg
    @MAIpeleg 11 หลายเดือนก่อน +1

    You know you're talented when you watch your own tutorials

    • @ThinMatrix
      @ThinMatrix  11 หลายเดือนก่อน +3

      Or just forgetful ;)

    • @MAIpeleg
      @MAIpeleg 11 หลายเดือนก่อน +1

      @@ThinMatrix you can be both!

  • @the-pink-hacker
    @the-pink-hacker 11 หลายเดือนก่อน +1

    1:47 "OpenAL library" => open audio library library.

  • @matthewboyd1834
    @matthewboyd1834 11 หลายเดือนก่อน +6

    I always wonder how do you have such a full Trello board and forward thinking plan, it'd be great if you explained ur planning process to us meer mortals. I've worked in software companies mainly in sprint and with rapidly changing software requirements but I've never worked through a project begining to end with planned steps and it's refreshing to see you doing it

    • @pritamdavis
      @pritamdavis 11 หลายเดือนก่อน

      Yes that would be very helpful

  • @Szczurek15
    @Szczurek15 11 หลายเดือนก่อน +1

    I'm in programming since I was 14. This will be 18 years now. It's not like I have spent those 18 years programming (however, in the hindsight, I wish I did). Nevertheless, I could be sitting there for a month and would never figure it out, that repetitive sound is annoying me, and some procedural generation is required. 😐 You da boss!

  • @thomasreichert2804
    @thomasreichert2804 11 หลายเดือนก่อน

    That "exceptions" even exist is the second biggest mistake in Java (after null). They enable lazy handling of unexpected events. Some newer languages avoid this. Note this is a criticism of the language, not its users.
    Thanks for the videos, they're always insightful! And your work environment is truly inspiring as well!

  • @tonyclarke8977
    @tonyclarke8977 11 หลายเดือนก่อน

    Maybe it's cool to add wild animals that attack the farm. To combat them we can buy farm cats and guard dogs. And take care of the pets. Or attract pollinators and birds of prey. This creates a ecosystem like they did in biggest little farm documentary. I think this makes the game stand out from other farm games.

  • @ezrakornfeld8436
    @ezrakornfeld8436 11 หลายเดือนก่อน

    I was at a LUG meeting so I missed the upload 😢. I can watch it now though!