Committing game dev crimes to finish my game

  Рет қаралды 84,290

Luke Muscat

Luke Muscat

Күн бұрын

FEED THE DEEP IS OUT NOW! store.steampow...
Next time someone asks me why I don't make tutorials on game dev or programming or Unity, I'm going to point them to this video.
#gamedev #development #devlog #indiegame

Пікірлер: 478
@szevvy
@szevvy Ай бұрын
Well I will certainly be contacting my lawyers about this grave injustice against me 😂😂😂
@KindOfWitch
@KindOfWitch 29 күн бұрын
can you publish a video explaining please?
@tylergust8881
@tylergust8881 28 күн бұрын
@@KindOfWitch This was sarcasm, hes not gonna sue...
@KindOfWitch
@KindOfWitch 28 күн бұрын
@@tylergust8881 no I mean explaining the thing that he was interrupted with. did you even read the comment? edit: ratio lol
@fonzy675
@fonzy675 28 күн бұрын
I really wanted to see the explanation. Getting enemy AI to work is my current biggest roadblock for my game 😅
@blarghblargh
@blarghblargh 26 күн бұрын
@@fonzy675 search "navmesh" and "A-star" and it should give you the info you're looking for
@some_antics
@some_antics Ай бұрын
Luke talking about how rare clipping out of bounds is: speedrunners: *taking notes furiously*
@CERISTHEDEV
@CERISTHEDEV Ай бұрын
I would say its more of a Speedrunners: *ramming into a wall furiously*
@JasonMitchellofcompsci
@JasonMitchellofcompsci 20 күн бұрын
Speedrunners slow the video from 8x to 7x speed.
@VGamingJunkieVT
@VGamingJunkieVT 18 күн бұрын
The best kinds of bugs are ones that require deliberate effort and allow things like sequence breaking.
@halfbakedproductions7887
@halfbakedproductions7887 15 күн бұрын
@@VGamingJunkieVT My favourite one was a glitch in Two Worlds that allowed you to complete the whole game in just 2-3 minutes. All you had to do was run past the guards at the start then the final boss was spawned somewhere in the distance. Reach him, attack him, some NPCs join in, he dies - final cutscene rolls showing a completely different part of the game world. It was truly remarkable and I've never seen anything like it. I also heard aboue one of the Test Drive games where you could apparently cheat the time trial stages by reversing. Never seen that one in action though.
@VanillaSpooks
@VanillaSpooks Ай бұрын
"Is it really a crime if everyone does it?" lol
@WiLL-ob3yk
@WiLL-ob3yk Ай бұрын
I don't think this holds up in court hahahahah
@ultimaxkom8728
@ultimaxkom8728 Ай бұрын
I always tell this to myself everytime I play in my Dungeon & Basement.
@danielyoutubechannel407
@danielyoutubechannel407 Ай бұрын
Prohibition moment
@Nevir202
@Nevir202 Ай бұрын
I think you'll find that the answer to to that question depends on how much the authorities dislike you.
@VanillaSpooks
@VanillaSpooks Ай бұрын
@@Nevir202 unfortunately true.
@Chen_Ash
@Chen_Ash Ай бұрын
The "chum" thing is the craziest crime, i'm going to have nightmares about that one
@lukemuscat
@lukemuscat Ай бұрын
Haha yeah I know it's actually so bad. There are a few like that and I am not proud.
@edwardperkins1225
@edwardperkins1225 Ай бұрын
Why's checking by it name bad, and what's the correct solution to identify it?
@ziwuri
@ziwuri Ай бұрын
@@edwardperkins1225 I'm not a programmer/dev, but I thought you could just refer to a specific defined game object for the game to react to
@cuboniac123
@cuboniac123 Ай бұрын
A better way, in Unity, is to have attach an empty script onto the chum object called Chum and when checking it in code if that object is Chum is to call the TryGetComponent function. This way when checking, you check via the component/script attached to the object. The reason it isn't recommended to check by name is that one small typo can lead to headaches in the future when debugging.
@cate01a
@cate01a Ай бұрын
@@edwardperkins1225 afaik searching by name is cringe because if you have another thing called a chum bucket then your code will still think its the chum and not sure but afaik the proper way to know what type of thing is the right type of thing, is to use "tags", where you can tell any object that it's any tag you want so then you'd have your chum object and give it a custom chum tag, and then it should all work fine
@Capiosus
@Capiosus Ай бұрын
for the raycasting to find if the player is stuck: 1. cast upward ray to hit a wall, note the coords of hitting the wall as coord1 2. move a smidgeon upwards, cast a ray down, if the coords of the hit wall match coord1, count one intersection, and repeat step 1, otherwise, count 2 intersections, and repeat step 1. This assumes your walls are infinitely thin. also it IS possible to pass by more than 2 intersections while doing this and fail, but at that point just blame the map.
@lorenzogiuliani3724
@lorenzogiuliani3724 Ай бұрын
He could have evaded the problem entirely by using physics2d.raycastAll, but oh well
@lukemuscat
@lukemuscat Ай бұрын
Ohhhh thats a great idea!
@lavatasche2806
@lavatasche2806 Ай бұрын
​@@lukemuscat Hey, does RaycastAll not work? I see that you are using it in your code snippet. It should not stop at the first point hit and be exactly what you are looking for?
@Braszx
@Braszx 28 күн бұрын
can't he just check if the players position is within the navmesh enemies use to path around the map rather than doing any raycasts at all? If the position is outside the auto generated navmesh of the cave, then you should be able to know via .NavMesh.SamplePosition. Can have it check after the map is regenerated, then move player to the nearest sampleposition found (this returns closest position on navmesh within radius).
@majeestic3712
@majeestic3712 20 күн бұрын
Or just use RaycastAll :)
@Gambit-YT
@Gambit-YT Ай бұрын
Skipping the “correct solution” is how I finally finished a game. And finding a balance between the “correct” and “fast” solution is something I’m still trying to learn
@insentia8424
@insentia8424 Ай бұрын
While what I am about to say is purely opinion, I hope it can help you in finding the right balance for you: "Correct solution" is extremely case by case basis. Just because something was the best solution in some game, doesn't mean it will be the same in yours. The fast solution will usually be best, because you get to see how it affects everything you made quicker and can readjust sooner to hone in on the design that feature needs and then you slowly turn it into the "correct solution" over time. Also, going with the "correct solution" from the start puts restrictions on future design of other stuff, and will usually result in less flexibility in how you can add new things. Whereas with fast it'll be easier to add new things and then you can just correct everything once you have all needed features added. One, because it's not very sophisticated yet. And two, because there is less attachment and less of sunk cost fallacy creating a barrier in redesigning it. Being stuck with the "correct solution" will force you into planning rather than developing... And you won't get the "correct solution" right of the bat anyways, no matter how much you plan, unless it's something you already have a huge amount of experience making.
@ultimaxkom8728
@ultimaxkom8728 Ай бұрын
Reconsider *_"correct_*_ solutions"_ Consider: *_optimal_*_ solutions;_ the upper intersection of *_best_*_ and _*_fast_*_ solutions._ Contrast: *_suboptimal_*_ solutions._
@marcsh_dev
@marcsh_dev Ай бұрын
Game Jams are fantastic to help figure that out Granted, theyre basically a hackathon from beginning to end, but youll get a feeling for when its a good time to hack, and what/how to
@Gambit-YT
@Gambit-YT Ай бұрын
@@marcsh_dev I completely agree. I had about 8 months of experience but never finished anything. Entering a game jam was the only reason I finished my first game
@TheFreshestResh
@TheFreshestResh 18 күн бұрын
Trying to find the golden ratio between the correct and fast solution is the dichotomy at the center the working man
@NihongoWakannai
@NihongoWakannai 27 күн бұрын
"In months of testing I've only seen this bug twice" You'll end up getting 10 reports of it on launch day lmao
@lukemuscat
@lukemuscat 27 күн бұрын
So true haha. I remember we had some bad bug in Fruit Ninja early on and we got like over 3000 complaints or something nutty in like 24 hrs :|
@uncletiggermclaren7592
@uncletiggermclaren7592 Ай бұрын
I have wish listed this, and will buy it. Will I be able to name my character . . .Chum?.
@Cyberfishofant
@Cyberfishofant Ай бұрын
They'll probably be "Player"
@lucbloom
@lucbloom Ай бұрын
Only when you call them “Link” will something special happen…
@Omazeee
@Omazeee Ай бұрын
“Good practices” isn’t in my vocabulary. My projects are one mechanic away from imploding at all times Edit: Thanks for the likes🙏! I create video game content creation on my channel. Feel free to check it out if you’re interested! If not all good, keep living your life😁!
@randompandemonium4823
@randompandemonium4823 Ай бұрын
I just use nested if statements for everything
@toolazytobeoriginal4587
@toolazytobeoriginal4587 Ай бұрын
A true game dev veteran
@diamondyoshi6649
@diamondyoshi6649 Ай бұрын
Same here. I use Scratch, so my projects are always imploding until I FINALLY do what the Scratch gods demand of me.
@diamondyoshi6649
@diamondyoshi6649 Ай бұрын
@@randompandemonium4823 :(
@compositeboson123
@compositeboson123 Ай бұрын
your footbal game looks cool, good luck
@timothycooke5561
@timothycooke5561 Ай бұрын
"Except it's not quite that easy, is it?" Hahaha, so relatable
@EmiWi
@EmiWi Ай бұрын
I love all the subtle humour in the video, from cutting off Szevvy, to the whole "but it's never that easy is it" bit. It doesn't seem overdone and is just put in very slickly into the video while not diminishing the final quality. Actually brilliant.
@jglyons1447
@jglyons1447 25 күн бұрын
Hollow knight pfp w
@flameofthephoenix8395
@flameofthephoenix8395 Ай бұрын
0:52 I do everything by the book, it's just that I made my own book...
@ilkeryoldas
@ilkeryoldas Ай бұрын
So, we name our player "chum" got it
@hatsukotaro
@hatsukotaro Ай бұрын
I love that you used the summoning salt music for the speedrun joke lmao
@druidofpies
@druidofpies 15 күн бұрын
I’m a solo indie dev and this is super refreshing to see. A lot of game dev is concrete, but even more is smoke and mirrors, especially as the project progresses. Dodgy checks, scanning every object in the world and checking if it’s name contains “chum”, and brute-forcing extremely edge-case physics is all part of the process, and I’m really happy I’m not the only one. It only has to work just well enough, it doesn’t have to be perfect, and that’s all part of the fun imo. It does increase the nerves when I think about releasing someday and having everything break for a week or two, but we’ll cross that bridge when we get to it, if we get to it! Staying strong, we’ll finish this project eventually here’s hoping
@BrandonGrimshaw
@BrandonGrimshaw Ай бұрын
I mean Szevvy really is just that efficient. The brute force raycast wiggle is really clever, even if it makes me cry a little. Also congrats! Can't wait to play on the 16th :)
@CrimsoneArtsPrivateaccount
@CrimsoneArtsPrivateaccount Ай бұрын
12:24 Bro is NOT summer salt 😭🙏
@roguegamingvoid4854
@roguegamingvoid4854 Ай бұрын
2:41 damn szevvy is quick
@lFunGuyl
@lFunGuyl Ай бұрын
Can I just say thank you again for sharing your game dev journey with us? I know similar things have been said before, but you had a huge impact on my childhood, and I am now a game developer myself. It is just so flippin' cool to get to watch your creative process, and to know you're out there doing the stuff that I want to do. Thank you for sharing your journey! Looking very much forward to playing the game!
@ExayoPodloga
@ExayoPodloga Ай бұрын
0:20 so you're telling me that in the code of the game I'm about to play, there's a house made of ascii characters? :o
@cloud_and_proud
@cloud_and_proud Ай бұрын
Probably not, since the code that's in the release version is compiled into a format that's only readable to the computer. I don't actually know for sure that's how compilers work, but I'm guessing they remove comments (comments being stuff in the code that isn't run but is there for humans viewing the code)
@CheesecakeMilitia
@CheesecakeMilitia Ай бұрын
I mean comments by definition are not included in compiled executables, unfortunately.
@ultimaxkom8728
@ultimaxkom8728 Ай бұрын
A programmer and a silly-ous humor walks into a bar. The bar burst up in flames.
@yugiohk574
@yugiohk574 Ай бұрын
​@@cloud_and_prouddepending on the unity build settings, it's possible to build the game with the whole source code available to anyone, but I doubt he would do that
@WalterMan
@WalterMan 29 күн бұрын
@@yugiohk574even if he does build it that way, the comments are still removed.
@joseisraelasmen4490
@joseisraelasmen4490 Ай бұрын
16:24 Rhythm game inside a diving game made by the developer of fruit ninja and jetpack joyride before gta6 is crazy 💀💀🙏🙏🙏🙏
@SpectraTheFox1
@SpectraTheFox1 Ай бұрын
14:35 “If it works, Don’t touch it”
@scarletbat7410
@scarletbat7410 Ай бұрын
I really needed this, iv been working on a project and was losing confidence in my work cause I felt like I was jerry rigging somethings to just work. 😅
@iantaggart3064
@iantaggart3064 18 күн бұрын
When I was working on my game earlier today, there was a glitch that caused the player to rocket through all 10 levels in less than a second. Instead of trying to find the cause of it, I just made it so that when you entered a new level, it waits one second before unlocking the door. It worked like a charm and I still have no idea why that happened.
@snugpig
@snugpig Ай бұрын
14:49 Reminds me about undertale's massive if statement for the dialogue!
@_Jitesh_
@_Jitesh_ Ай бұрын
The only crime you committed was to cut poor Szevvy like that 😭2:41
@AntonLejon
@AntonLejon Ай бұрын
True! And, unfortunately for Szevvy, also hilarious.
@lukemuscat
@lukemuscat Ай бұрын
Haha yeah I asked him to record something and I told him I was going to cut him off. He had a great little rant about reticulating splines, but the shorter I cut it, the funnier I thought it was :D
@bonicle7610
@bonicle7610 Ай бұрын
​@lukemuscat ahh man i really wanna hear the rant now it sounds interesting 😔
@cryptkeeper
@cryptkeeper Ай бұрын
@@lukemuscat Sims reference? :D
@lukemuscat
@lukemuscat Ай бұрын
Haha yes!
@Garniy_Hlopchik
@Garniy_Hlopchik 15 күн бұрын
In my game, I'm planning to have just a single dark tile that can only be placed out of bounds, and have it have a trigger, which teleports you straight to the backrooms as a little secret level lol
@showcase0525
@showcase0525 19 күн бұрын
Props to the including the "unofficial" speedrun synthwave track. For those who know, and appreciate that genre, it was a nice add.
@swaan-dev
@swaan-dev 6 күн бұрын
"But it's not quite that easy is it" This line and the discussion of edge cases for raycasting gave me traumatic flashbacks to my uni Computational Geometry course
@yfehler
@yfehler Ай бұрын
The summoning salt reference is brilliant!
@htspencer9084
@htspencer9084 Ай бұрын
"could not repro" triggered some trauma 😂
@fille.imgnry
@fille.imgnry Ай бұрын
lol, love the ”interview” with the guy that built the nav system.
@monkey_crystal6254
@monkey_crystal6254 Ай бұрын
GIVE US THE SZEVVY CUT
@mltprpz
@mltprpz 17 күн бұрын
3:47 PANNENKOEK REFERENCE!!! ur so real for this thank you mr Muscat
@SuperDutchrutter
@SuperDutchrutter Ай бұрын
Love this video. It’s great to see how you work around, mitigate and hack through difficulties in your game design.
@lukemuscat
@lukemuscat Ай бұрын
Thanks!
@korok2619
@korok2619 9 күн бұрын
this is honestly inspiring, it's important to remind ourselves that "done" is infinitely better than "perfect" as an objective to give yourself!
@Eitrum
@Eitrum Ай бұрын
So when it comes to player being outside the map, if you already have a NavMesh for the enemies, you can utilize that one to teleport player to closest NavMesh point. You can also generate a special NavMesh for the player that lets you filter all playable areas. If player is not close to a NavMesh point, you teleport to the closest or last point the player was standing on. This eliminates the issues of dealing with raycasts and edge cases where you teleport outside the map. Worst case scenario is teleporting to other side of a wall, but at this point you would need a wall you can get into for it to be effective.
@BlaCKM00n333
@BlaCKM00n333 22 күн бұрын
as a software engineer and unity developer i find this video not only entertaining to watch, but also very funny and educational. true crimes is deep branching in your code and comparing with strings
@flameofthephoenix8395
@flameofthephoenix8395 Ай бұрын
3:39 That's fairly reasonable, sometimes I impulsively decide to program something formatted weirdly then have to constantly reformat all my data because of it, in this case you did that but without you being the one responsible for the strange formatting.
@AuroDev
@AuroDev Ай бұрын
Genius! Why have I never thought about adding an ascii house to my code?! I've been just looking at my ugly code like chump.
@Trianull
@Trianull Ай бұрын
Wait, if you needed to give the enclosed caves a tiny hole for shadows to work, wouldn't that mean that you are never "inside" a shadow zone unless stuck in a wall? Why not just use the same check to deal with clipping into walls instead of a dozen raycasts?
@lukemuscat
@lukemuscat Ай бұрын
Really good point! I actually started doing it this way, but then realised that there are a few areas where there is level geometry that isn't part of the cave check system (think set pieces and level objects that are not cave walls). So I figured the ray might be a more thorough check!
@MusselManEmil
@MusselManEmil Ай бұрын
Writing code is like setting up cables behind the TV. As long as it works, nobody has to know about the tangled horrors that are behind.
@Dionny
@Dionny Ай бұрын
This is my favourite video of yours tbh. Gave me a good laugh
@skaruts
@skaruts 24 күн бұрын
_"Game development is all about figuring out ways to get things done without actually doing them."_ - Chad Cuddigan (Delver dev)
@vladcalin
@vladcalin 5 күн бұрын
100% agree. I was having an issue with some particles firing up when a scene loaded, and couldn't figure out how to make them not do that. So instead, I added a transition and some animations at the start of the scene (also to make it more juicy) and while that runs, the particles are set to be completely transparent. So they still fire, but they can not be seen for 1 or 2 seconds while the scene "intro" is running. If it works, it works.
@NFSCsapat
@NFSCsapat 2 күн бұрын
I dont have the money, but I'm also making a game, and try to see every other game/gamedev with a sense of critique. Without seeing your page: This game has such a unique and creative gameplay, and also the graphics really complement it, I would say it's a hit :D After seeing the page:Maaan you nailed it :D I would've put the seconds video first tho, since people want to see just the game first, and If it's interesting to them, they will want to know more, and that's when I would've show the "introduction" video :) Keep in mind, I never delivered a game, and hope this changes with my current scope, and the help of my friends, and also money, so I'm saying all this from a developer background, and a lifelong gamer pov. Hope I can try out your game once, I bet it's DEEPLY engaging :D
@mugileaguegaming1769
@mugileaguegaming1769 Ай бұрын
3:40 - There's an official Unity NavMesh Component package that solves this exact issue. You can have NavMeshes on walls, ceilings, whatever, you want. It also works like the current NavMesh system, it just localizes on the object you attach the component to, so whenever you edit the map, you can update that in one click. 11:04 - This is... odd? RaycastAll should, by definition, not stop on it's first target -- at least, that's how it works in 3D. At that point it is behaving like a standard raycast. I suspect this is a bug related to something else other than the RaycastAll behavior. How I would solve this is doing what you did with the RaycastAll, check if it is an odd number of points, then sort the hits by distance and getting the point closest to the player and having that point + offset in the direction of the raycast + tolerance to be the teleport point. Alternatively, if I'm still wrong, you could, for precision, do a second raycast going the opposite direction and get the point closest to the player. And if for some reason that doesn't work at all, assuming all traversable places a player can go are on the NavMesh, you could sample the NavMesh at the player's position and teleport them to the closest point (this is more compute intensive). Also, I don't know how your player object is set up, but if it is a physics object and a collider suddenly spawns on it, the physics object like CharacterController, if a collider is suddenly spawned on the player and they move a bit, Unity will "autocorrect" them by jumping them to a valid point, but it's not reliable as it might teleport the player outside the playable area. Sorry, I know you mentioned this is shipped and done, but in case you were still wondering, I didn't want you to gaslight yourself thinking these were impossible. Maybe keep in mind for your next project. At the end of the day, if it works it works.
@lukemuscat
@lukemuscat Ай бұрын
1. Oh I had NO IDEA about the NavMesh solve, that's really good to know! 2. So I just went back and looked at the RaycastAll stuff and now my brain is broken haha. Like I could have SWORN the documentation said RaycastAll in 2D stops (it doesn't).I remember trying to do it as a single ray as I assume that's how it works, and then ran into the issue... but as you mentioned maybe that was actually an unrelated bug and I conflated the two? And yes this is all excellent learning for the next project, thanks! :)
@lukemuscat
@lukemuscat Ай бұрын
Ohhhh wait I think I remember now. Although the RaycastAll 2D does indeed continue on, I believe it wont return the SAME collider multiple times. It only returns an array of unique colliders, not every instance of it crossing any collider. So it will only return the first crossing, not the crossing out to the other side. So it doesn't exactly stop like I said in the video, but for the purposes of testing the same collider again, it does.
@mugileaguegaming1769
@mugileaguegaming1769 Ай бұрын
​@@lukemuscat Ah, wait, I think you're right -- it's not that RaycastAll will only return unique colliders, it's that it can only return hits where the side of the collider is facing opposite of the direction of the raycast. So think of "backface culling" in 3D graphics, it will register the raycast going INTO a collider, but OUT OF the collider on the other side -- if that makes sense. In that case, yeah, you'd have to run two RaycastAlls in opposing directions to get points away from and points towards the player, then append them to a combined list of Vectors and sort them by distance from the player. Sorry, I guess I'm invested because I had to do something similar in my project in 3D (RaycastAll, checking odds/evens, etc.) to solve a different problem, and now that you mentioned it, I remember running into what I described above.
@omnipresentsnowflake4698
@omnipresentsnowflake4698 22 күн бұрын
"tentacle monster rat king" is a wonderful thing and would be amazing to find
@igorgiuseppe1862
@igorgiuseppe1862 23 күн бұрын
2:48 if the enemy run fast enough that you cant follow him, you can just teleport him when offscreen to the desired destination. it will save a lot of processing power
@BetaTester704
@BetaTester704 7 күн бұрын
Race conditional load/save system is horrifying, good work
@skylarmuffin8145
@skylarmuffin8145 Ай бұрын
why not just shoot a single ray from the camera at the players location, and have a layer mask for all the meshes that are not water, so if the ray collides then you know the player is out of bounds, then shoot 4 rays in each direction (Up, Down, Left Right) and get the closest change and teleport the player there, that way you're only using 1 ray when the player is not stuck every time you decide to shoot a ray, and not how ever many rays is needed to reach the top, and 5 rays in total, not how ever many rays to reach the top times 3? + it also fixes the possibility where you go into a wall, but the first possible safe space is quite away up from where you currently are, I would imagine this to be quite frustrating if it did happen and fixes the edge case of the gap being so small you could jump over it bc you're never sending out another ray.
@lukemuscat
@lukemuscat Ай бұрын
Good question, and I hadn't thought of that approach. But I THINK the issue is that the cave mesh is a tilemap composite collider, which is essentially a collection of edge colliders. So I believe a ray from the camera to player will never intersect that line. (assuming you mean firing a ray "in" to the screen). The other option would be for the tilemap collider to be a polygon composite instead, but that hadn't occurred to me until right now!
@skylarmuffin8145
@skylarmuffin8145 Ай бұрын
@@lukemuscat hahah Glad I could help ^-^ Im super excited to play your new game.
@BitBeginnings
@BitBeginnings 9 күн бұрын
1:07 How have I gone my whole life not noticing! Great video.
@AetherXIV
@AetherXIV 24 күн бұрын
the most common cause of me abandoning projects is the code not feeling airtight. I think that's too unrealistic, so thank you for sharing.
@AI__Machine
@AI__Machine Ай бұрын
I read the title and thumbnail as "committing game dev war crimes"
@johnathan8241
@johnathan8241 28 күн бұрын
Me too. And I haven't realized it until I see your comment.
@MagicPlayersRox
@MagicPlayersRox 10 күн бұрын
Theoretical fix to getting stuck in the walls you could detect if the background of the character is a solid wall or not and then teleport the player to the nearest playable space in using a circle around the player to find the nearest playable space
@gawain0
@gawain0 11 күн бұрын
As a programmer who also makes games, some of these are funky, but like, it's not thaaaat bad (gotta love that programming sorcery!) One of my favorite personal game dev crimes is when I was making a 2D platformer/metroidvania style game (still need to go back and finish it...) and I implemented variable jump height by just making the jump button reverse gravity for only the player. It's stupid, it's silly, but it works great and is somehow actually super customizable.
@kyjmo
@kyjmo Ай бұрын
Very clever “crimes”! I enjoyed this it makes me feel less bad about some of the hack things I do! Game looks awesome as well!
@PRINTORO
@PRINTORO 20 күн бұрын
“1. Battle pass” *“NOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!”*
@xXsillysussyXx
@xXsillysussyXx Ай бұрын
12:28 not the HOME music playing LOL
@Electroshockist
@Electroshockist 26 күн бұрын
For the chum, you could probably use collision masks. Just make it so nothing collides with the deep except chum or vice versa. Learning about collision masks was a total game-changer(pun intended) for me.
@FurMuzzleGames
@FurMuzzleGames 26 күн бұрын
Hey Luke, i just wanted to say thank you. Of course for fruit ninja and so, but i want to say THANK YOU specifically for this video. Currently i too work on a solo project, (with no prior expierience, just from watching tutorials) which is way to ambitious for me. It already took me 1.5 years and i still need at least another year to finish it. And the last couple weeks i struggled with a lot of bugs, and i was really frustrated and down, thinking about quitting this project. Somehow, i was able to solve most of the problems. But my game feels like duck tape is holding everything together. And after you said that its normal in game development, that everything is a card house barely holding together, you really gave me some new energy. This video really brought me back on track. So from a random dude on the internet, to another random dude on the internet. Thank you from the bottom of my heart.❤
@htspencer9084
@htspencer9084 Ай бұрын
It's kind of depressing we now live in a world where when you talk about AI in video games you have to explicitly make clear that we're not talking about a large language model or neural network >.
@pitori.
@pitori. 27 күн бұрын
I will never get used to how you talk about how you made two of the best mobile game ever like if it was nothing
@crazycatgamer21
@crazycatgamer21 24 күн бұрын
Ironically, I found this video on August 16th.
@dnoldGames
@dnoldGames 23 күн бұрын
About the Navmesh thingy. The A* Projects Free Version is perfect for 2D Pathfinding on a few enemies, as the free version does not provide multi-threading, but the paid version does. It even supports local avoidance. I really use it everywhere.
@nemo9396
@nemo9396 23 күн бұрын
Thank you so much for this video, I wish there were more of this.
@blackdoc6320
@blackdoc6320 Ай бұрын
Honestly using the same texture for multiple effects should be commended. Lowers file size (not by much but still) and if it's properly instanced it improves performance as well.
@AlexFigar
@AlexFigar Ай бұрын
To determine if a point is inside or outside a collision shape, you can traverse the path from the perspective of a point (in this case the players position) and add up the amount of turning along the way. If it adds up to a full 360 rotation, it's inside. If it adds up to zero its outside.
@jimmijamjams
@jimmijamjams 21 күн бұрын
You've got me thinking. From the images for the hacked enemy movement it looks like a "perpendicular universe". Great hack btw!
@vast634
@vast634 24 күн бұрын
Be unclean when prototyping to iterate fast, be clean during development to avoid a mess, be unclean shortly before release to get things done.
@fonzy675
@fonzy675 28 күн бұрын
Man casually builds a Klein bottle to fix shadow occlusio.
@husseinkobeisi5022
@husseinkobeisi5022 18 күн бұрын
This is the most motivational game dev video ever! Thank you.
@3OnGamer3
@3OnGamer3 Ай бұрын
As a game Programmer myself i definitely want to see the bad code you wrote. Massively entertaining
@greenfrog9702
@greenfrog9702 Ай бұрын
The hack house better be an unlockable hidden level too
@ipga13
@ipga13 Ай бұрын
Damn, you did Szevvy dirty!
@ambiguousname
@ambiguousname Ай бұрын
For Physics2D.Raycast, one solution I could see is grabbing the bounds or vertex data of the first Collider2D you intersect with. Specifically, if your tile map uses the same collider for each generated piece (I'm assuming a PolygonCollider2D or EdgeCollider2D), then it could be a problem of just detecting whether or not you're inside the polygon (youtube isn't allowing me to send links, but I was able to find a C# implementation on StackOverflow quickly). Not sure what your setup looks like though, and I'm sure the solution you have is perfectly workable. Congratulations on shipping the game!
@ianbelletti6241
@ianbelletti6241 14 күн бұрын
The in wall check would be easier if you produced two simultaneous rays, one horizontal, the other vertical. If the player is inside a wall then both would produce an odd number.
@hyperphrog69
@hyperphrog69 11 күн бұрын
3:12 when I eventually try making a game myself, I'll remember to orient it correctly
@deloptin545
@deloptin545 14 күн бұрын
im still confused why you mentioned "unless something goes wrong, you should never be in an odd number of ShadowCasters" and then proceeded to not use that to check if something went wrong :P it felt like you were foreshadowing the solution to being inside collision
@-Pedry
@-Pedry 22 күн бұрын
Since its procedural generation.. My aproach for detecting open areas and how avalible/spawnable they are is generating circles when generating the map.. Just an idea.. Dont know if it would work in practise.. After generating the map make another iteration through the map in a tiled order and spawn a circle thats as big as the "spawnable area". If the circle collides with the map, destroy it and move to the next tile. If the circle fits, dont destroy it, and run a resize function on the circle before continuing tiled iteration of the map. resize function is just to make the circle fit better inside the map, it might scale until it hits a wall, when hitting a wall it takes the point it collided with, moves the circle in the oposite direction by like half or a third of a tile, then continues scaling, maybe it tries the reposition twice before rescaling incase it is inside a weird cave with multiple edges sticking out, and when the resize function fails due to collitions like 3 times, it stops, returns the function and the tiled map iteration continues, also circles detect collitions with themselves so not too many spawn, then just use these circles as a list of spawnable areas with the circles size being an indicator of what fits inside it, also while playing the game, you could have more circles spawn on map changing events around the area a change happens, by firs resizing circles in the area and then tiling through that area specifically, of major map changes occur, put the circles that should change in a list and iterate the list each frame with a set iteration speed.. ETC ETC... OMG i feel like i can go ON and ON about these kinds of "tricks and cheats", i love the video man, keep it up! Your video popping up on my feed is making me now move on and look for more videos like this because these things are such an integral part of game development its almost fundamental id say. again thanks for the vid!
@-Pedry
@-Pedry 22 күн бұрын
Also quick FYI, i wrote this in the span of 2 min and the idea came from the top of my head, reading it again i already see things that are problematic, but i can also list how to instantly fix them lmao, ask if you are curious, im aware that its doggo poopoo as it is lmao, if u wanna use it, flesh it out or be creative and take inspiration, imma go watch more content like this 🤤
@Danee2108
@Danee2108 11 күн бұрын
Can't wait till speedrunners find the wall clipping glitch
@flameofthephoenix8395
@flameofthephoenix8395 Ай бұрын
10:00 Ah, I've used this method before, for a filling algorithm! I just used a quad tree where each branch would check if it intersects a line of what you want to fill in, if it does then the branch is too big for the level of complexity so it will split, otherwise it will check if the center of the branch is contained in the shape using this method then fill in the whole branch if even one pixel is contained since assuming the branch doesn't intersect the lines then all pixels contained in it will be the same in terms of whether they're contained or not, and if the branch shrinks too much it will simply be rendered as an outline.
@GSSecondBranch
@GSSecondBranch Ай бұрын
12:28 I love the summoning salt haha also parallel universes
@lukemuscat
@lukemuscat Ай бұрын
Haha yeah, the @SummoningSalt and @GeoWizard soundtracks are just so iconic to me.
@htspencer9084
@htspencer9084 Ай бұрын
Imagine navigating in the fourth dimension in order to get to like, burger king 😂
@tucan7112
@tucan7112 29 күн бұрын
"I guess theres like enough layers of duck tape on this boy to keep it solid" is an amazing quote
@digitalxcaffeine
@digitalxcaffeine 27 күн бұрын
Great video; I love seeing how others solve problems like this. Game dev is hard and we do the best we can with the tools and knowledge we have. Nothing is perfect, but that doesn't mean it doesn't work! Finishing and shipping is a huge mountain to climb, so I've got nothing but kudos for you!
@Keegadorf
@Keegadorf Ай бұрын
Becoming a developer taught me that it’s a miracle that any game works at all. Game looks great by the way! Can’t wait to play it
@beezow7113
@beezow7113 14 күн бұрын
perpendicular universe made me chuckle
@htspencer9084
@htspencer9084 Ай бұрын
The best practice is shipping, everything else is optimism!
@flameofthephoenix8395
@flameofthephoenix8395 Ай бұрын
11:35 You could just store a list with all the lines then do it with your own solution. Additionally, if you use your own solution then you can optimize it better, for instance, since you're only looking at the lines above the point you don't need to worry about ones to the left and right, so you can segment the X axis into an array where each segment stores all the lines in the range of the X axis it covers, by doing this you can significantly reduce the number of lines you need to check, however in a game that takes place on an infinite plane you'll have to do some clever trickery, luckily you don't have to segment consistently, a float loses precision at large ranges so your segments don't need to be smaller than the float precision meaning you can scatter your segment's unevenly, however it is still too many segments to store all at once so you can use a binary tree spanning across the entire floating point range to tell you which segments are needed to be stored at a given time. However, there is another problem, if you check for intersection and your ray lies right on a vertex between two lines then it will count twice for both lines, but this can be solved fairly easily.
@dominicstocker5144
@dominicstocker5144 24 күн бұрын
„Jaywalking“ is just crossing the street. So weird that it is criminalised.
@acolombiansfwrdevlpr
@acolombiansfwrdevlpr 18 күн бұрын
I’m breaking one of the fundamental rules: I’m not planning! I’m making a video game driven by inspiration (the engine as a canvas) I know the story I want to tell and I’m building everything around it PS:. I’m making videos with advances each day I could work on it. I don’t know how to get financing or exposition. I’m gonna check this channel out! PS2:. I rather use an art product making approach that a software development one. I have not experience working with the video game industry but I’m Sr. Software developer. I’m looking for work as a tech artist (IDK the pipeline)
@Greenman4890
@Greenman4890 29 күн бұрын
Oh my god that navmesh hack lmao, that's wild. I respect the hustle really
@TorQueMoD
@TorQueMoD 28 күн бұрын
Looks like a cool game! Good job. Congrats on your release :)
@WeatherStone
@WeatherStone Ай бұрын
i am working on a godot tile-based 3d game, for 3d godot uses gridmap(basically a 3d tilemap) but godot doesnt have gridmap autotiling, so i use an invisible tilemap, set my 3d tiles as vector2's, add a few rules by code, and translate them back to the gridmap, problem solved =)
@LuizMoratelli
@LuizMoratelli 25 күн бұрын
I love this videos showing what we do sometimes to fix the problems, great job!
@irr3v
@irr3v 23 күн бұрын
The first one about re-using texture for VFX… that’s just normal VFX stuff lol
@DreadKyller
@DreadKyller 14 күн бұрын
With the chum one, if you're going to do string comparison better at least to do it as a tag instead of as part of the name, have a tag for "Chum" and gameObject.tag instead. But a safer way would be one of two things, you could create a marker component and add it to the Chum and check if the component exists, or better yet, properly setup physics layers, have a custom physics layer for Chum and make the collision detection have a layer filter that only allows that physics layer. Obviously as the game is done not that useful, but if you run into similar situations later. I also noticed in your code you use a fair amount of hardcoded magic values basically, probably best to turn them into constants, that way you can name what each represents, and if you change them the change is automatically available everywhere it was used. For example say the string "Chum" was used in multiple places but later you want to rename it, you may update it in some places but forget it elsewhere. But overall, these crimes are pretty small compared to ones other games have committed, the Chum one is the only one in this video that may give me nightmares.
@DreadKyller
@DreadKyller 14 күн бұрын
Though with your out of bounds detection it seems exploitable if done well. When in bounds if the ray hits the vert corner it may incorrectly report an odd number of collisions, this is fine as you said because you perform multiple tests offset and if even a single one returns even you count it as in bounds. Well if you're out of bounds and a single ray hits the tip of a spike it would incorrectly report an even value and consider the player in-bounds. Furthermore the next point above the player when they go out of bounds may be far from where they entered, and thus could be used to teleport up large distances if it can be reliably performed. A possibly better option would be to store the player's last in-bounds location periodically and if they're detected out of bounds put them back there. Alternatively if you want a really hacky way to do this, have locations defined within the playable space, and when out of bounds move player to the closest of those in-bound locations, though similar to the upwarping such a system may be exploitable if people can reliably trigger it.
@occularmalice
@occularmalice Ай бұрын
I may or may not have committed one or more of these game dev crimes. Maybe. I refuse to elaborate on the grounds that it may incriminate me.
@GodofGrunts
@GodofGrunts 13 күн бұрын
I don't know about Unity, but in Godot there is a "Group" system. This would allow you to put the chum into it's own "Chum" group, then you can check if any object entering the area is part of that "Chum" group and then do whatever. Similar to what you did I guess, but does prevent the naming issue if you made a new fish called "ChummyFish" or something.
How I designed Jetpack Joyride
41:15
Luke Muscat
Рет қаралды 1,5 МЛН
The Best Games from GMTK Game Jam 2024
23:45
Game Maker's Toolkit
Рет қаралды 347 М.
WILL IT BURST?
00:31
Natan por Aí
Рет қаралды 43 МЛН
Electric Flying Bird with Hanging Wire Automatic for Ceiling Parrot
00:15
小丑和白天使的比试。#天使 #小丑 #超人不会飞
00:51
超人不会飞
Рет қаралды 36 МЛН
My 10 YEAR Indie Game Development Journey
23:58
ThinMatrix
Рет қаралды 571 М.
When Optimisations Work, But for the Wrong Reasons
22:19
SimonDev
Рет қаралды 970 М.
6 DEVS Compete to make the BEST GAME for $5,000
32:37
Blackthornprod
Рет қаралды 194 М.
The Best Game Dev You've Never Heard Of
19:33
Cubit
Рет қаралды 53 М.
Are Hollow Knight's Worst Charms Really That Bad?
15:09
BlueSR
Рет қаралды 253 М.
It's Hard To Make Games
18:01
Acerola
Рет қаралды 231 М.
Making a difficult game about fitting in - Acerola Jam 0
19:17
jess::codes
Рет қаралды 361 М.
I Played 100% of The Planet Crafter
2:09:07
Floydson
Рет қаралды 422 М.
Making a game about lil guys is fun and hard
12:10
Radnyx
Рет қаралды 158 М.