Making NPCs feel more alive in my indie game | Godot devlog

  Рет қаралды 3,023

LandonDevelops

LandonDevelops

Күн бұрын

Пікірлер: 31
@LandonDevelops
@LandonDevelops 15 күн бұрын
To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/LandonDevelops/ . You’ll also get 20% off an annual premium subscription.
@timmygilbert4102
@timmygilbert4102 12 күн бұрын
I just hash time, use the hash as index in the schedule, then lerp between spot, and apply the hash of the lerp value to a list of points that encode the path between spot, spot has an animation tag for context emotes. No simulation as the map areas hold reference to possible npc relative to time, npc position is a stateless function. Random schedule entry for variations, deterministic with a seed, abuse determinism to query were a character would be at all time, useful for a pseudo simulation of knowledge without storing anything.
@LandonDevelops
@LandonDevelops 11 күн бұрын
That's a lot of words I don't understand 🤣For real though, that sounds like a much more clever solution than what I've come up with
@yt_n-c0de-r
@yt_n-c0de-r 10 күн бұрын
@@LandonDevelops Hashing is essentially calculating a very specific value from ... well... anything - objects, values, strings. A good hash is (almost) perfectly unique and as such can be referred to get destinct data(points) in a collection. And I'll try to explain it a bit more, if I understood the idea correctly. For the example mentioned in your video: hashing the times between entering the house (let's say 7:50.00) and reaching the bed (for example 5s, so 7:50.05) would give you 5 specific values (for each second) your code could refer to. When the Player enters the house, for example at 7:50.03, on loading the scene your NPC would check the time, calculate the times curent hash value and look for a hash in its own list, telling it where it should spawn. That way it "looks" like they advanced towards the bed, but have obviously not reached it yet. The idea is very good, hashes are very quick and efficient!
@LandonDevelops
@LandonDevelops 10 күн бұрын
Yeah that does sound cool! Would you then just precompute the paths and associate them with the hashes?
@yt_n-c0de-r
@yt_n-c0de-r 10 күн бұрын
@@LandonDevelops Oh sorry, I forgot about that part. Yeah, you would build a table with hashes (for times of a day an NPC would experience) and some waypoints - usually a HashMap (very popular data structure) is used. Hopefully, you'd need this only for transitional events, but could in theory every NPC could have their own hashmap for all seconds of the game day and where they should be. Maybe the OP can explain the concept better. (Now, I wonder how TLoZ:MM did it on the limited tech of N64...?)
@honaleri
@honaleri 7 күн бұрын
​​@@yt_n-c0de-r That's actually an excellent explanation, OP made it sound like wizard incantations but its straight forward once you know what those words mean. You did a great job laymenizing that information, thank you. ❤ I learned something.
@Fentiman
@Fentiman 7 күн бұрын
I would consider giving items you can pick up a floating animation with a shadow. This would make it easier to distinguish items from terrain decoration.
@LandonDevelops
@LandonDevelops 2 күн бұрын
That is a great idea!
@FillMakesGames
@FillMakesGames 14 күн бұрын
This is a cool logical way to make NPCs feel more alive! Sadly, I don’t have any NPCs in my game so I can’t steal your idea 😁 Overall, cool concept and cool video! Thank you.
@LandonDevelops
@LandonDevelops 14 күн бұрын
Thank you!
@yt_n-c0de-r
@yt_n-c0de-r 10 күн бұрын
I always like games with clockwork-mechanics, where NPCs behave like cogs in a complex machine (similar to real life, but obviously smaller). GOAP is a great way to do this. Hope to find some NPC-NPC interaction events soon ;) Reminds me of Zelda: Majora's Mask every time... ^^
@LandonDevelops
@LandonDevelops 10 күн бұрын
Yeah I really love when NPCs feel like they have their own stuff going aside from what the player is doing
@honaleri
@honaleri 7 күн бұрын
I wanted to build my system on the paradigms of persistence. So, the backend concept is very similar to what I wanted to do. Basically an invisible simulation of everything is always happening, but the player pops in to just see a small scope of it rendered in front of them. Then again, I also want the full simulation route for my game. So need/want based decisions are apart of that. I feel it's more necessary for that method of design, because if persistence matters, the players interaction with the world shouldn't break the persistence of simulation. They have to integrate seamlessly to be convincing and constructive. But, I love to see how other people have handled these things, and love to see their differing solutions. Knowing what you need to achieve is half the goal it seems sometimes. lol.
@LandonDevelops
@LandonDevelops 2 күн бұрын
That sounds like a pretty cool project! I think Dwarf Fortress does something like that where they're constantly simulating everything
@Negreb25
@Negreb25 14 күн бұрын
Good job! 👏 I really like what you did, tho i think they shouldnt come to a full stop for so long
@LandonDevelops
@LandonDevelops 14 күн бұрын
Thanks! Yeah the schedules in the actual game will definitely look different, this initial version was just a proof of concept 😊
@WRONG_WARP
@WRONG_WARP 8 күн бұрын
Hey there, this game looks super cute! If you're looking to work with a composer to write the soundtrack I'd definitely be interested in discussing that with you. Let me know!
@LandonDevelops
@LandonDevelops 2 күн бұрын
Hey thanks for reaching out! I'm actually a composer myself so I'll probably be doing most of the music myself but I'll reach out if I need any additional support!
@WRONG_WARP
@WRONG_WARP 18 сағат бұрын
@LandonDevelops Sounds good, thank you!
@sixty5notch796
@sixty5notch796 8 күн бұрын
dude, you know im not gonna use brilliant, just cause their service doesnt intrest me, but the fact that they are supporting someone with less then 1k subs? i just gained a lot of respect for brilliant. also new sub!
@LandonDevelops
@LandonDevelops 2 күн бұрын
Thank you!
@joshuaneiswinter253
@joshuaneiswinter253 12 күн бұрын
I am making my own game, but in Unity. I too am just getting to the point of wanting/needing to add NPC scheduling. You went with a very similar method as I did. I have a custom script for "waypoint" which currently consists of a time (just the hour) to leave the current waypoint and a vector3 for the location. On the NPC script I have an index and a List and if the time matches the current index's time, the counter goes up and updates the target position. I was really hoping for more .. insight.. as to how you were going to approach the zoning of the NPCs as well as what your approach to having them do something besides go to the next location. For me, (using you to bounce ideas / check high level logic) I am thinking of having an enum with different states that can get set once they reach their target position and then some kind of check for which state they are in and have an AI function/loop based on their state. As for the different areas/rooms/zones/scenes... honestly mine is still just the one area because I haven't had the mental fortitude to tackle zoning properly yet.
@LandonDevelops
@LandonDevelops 11 күн бұрын
Yeah I think a sort of "sub-FSM" using an enum would be a good idea! Once I have the insight myself, I'll be sure to share it 🤣
@yt_n-c0de-r
@yt_n-c0de-r 10 күн бұрын
How about a distict "state" datastructure that you can design yourself? Gives you more advantage and control (yes, more work too ^^), and fits FSM rather well. I love enums, they give you lots of bit operations to play with (especially in C#), but they can be a bit limited imho. They can work if you have different "types" of enums, that can be "combined" to reflect very unique state(-structures). Very interesting :D
@joshuaneiswinter253
@joshuaneiswinter253 10 күн бұрын
@@yt_n-c0de-r I already have in place things for day (number), day name (string), enum season, all of those are in a "time manager". My idea is to basically let the NPC choose what state it should be based in off of those global variables, and some local ones for the indivisible NPC. Honestly I haven't even opened it in a couple of days because I've been kind of chaise-paralysis with it. I'm probably going to take a pad of paper and pencil somewhere and sit down away from distractions and figure out what I actually need to do.
@yt_n-c0de-r
@yt_n-c0de-r 10 күн бұрын
@@joshuaneiswinter253 Just a design question: why not make "day of a week" (aka "name") an enum too? Internally they are just numbers which you can do math on and more, but also gives you type checks, easier comparison and auto complete - more code security and correctness - compared to strings. And if needed you can always get the "string" representation of the enum with less room for typos ;) I love taking time off from the screen and design on paper (it's used in the "industry" too). Take your time. It all sounds pretty well so far :D
@joshuaneiswinter253
@joshuaneiswinter253 10 күн бұрын
@@yt_n-c0de-r I originally did that, but I couldn't figure out how to blah blah = Dayname[date % 7] so I just made it a list of strings. The dictionary key will be something along the lines of "Spring3" or "Autumn25". I tried getting an NPC to use a few different navigation methods tonight but struggled and now I'm tired lol.
@zejugames5045
@zejugames5045 13 күн бұрын
Wait, what's the game again? I lost the plot!
@LandonDevelops
@LandonDevelops 12 күн бұрын
It's kind of like Stardew Valley mixed with Mount and Blade but I'm realizing that might not be the best description. I think in my next video I'll go over the whole idea of the game because I don't think I've ever actually done that lol
Multiplayer Killed my Voxel Game
7:25
Tantan
Рет қаралды 21 М.
The Singing Challenge #joker #Harriet Quinn
00:35
佐助与鸣人
Рет қаралды 41 МЛН
This Game Is Wild...
00:19
MrBeast
Рет қаралды 120 МЛН
Why I restarted my indie game dev project from SCRATCH | Godot devlog
10:37
12 Tips to Boost Your Godot Game's Performance
11:27
Deep Dive Dev
Рет қаралды 7 М.
Remaking Zelda 1, but it's hand drawn | Devlog #1
9:48
vasge
Рет қаралды 196 М.
Draw fewer tiles - by using a Dual-Grid system!
6:22
jess::codes
Рет қаралды 616 М.
Google AI search is destroying Minecraft.
8:11
Phoenix SC
Рет қаралды 426 М.
Building the Ultimate Hiring System - Indie Game Devlog
12:00
One Month of Game Development | Dream Game Devlog 1
9:31
Caleb Gilbert
Рет қаралды 110 М.
How NOT to make an indie game
22:01
Lychee Game Labs
Рет қаралды 2 МЛН
I Made My First Godot Game In 48 Hours!
8:02
ButWhyLevin
Рет қаралды 2,8 М.