Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411518 Posts in 69377 Topics- by 58431 Members - Latest Member: Bohdan_Zoshchenko

April 28, 2024, 03:46:44 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsAo
Pages: 1 ... 32 33 [34] 35 36 ... 41
Print
Author Topic: Ao  (Read 98218 times)
Alain
Level 10
*****



View Profile WWW
« Reply #660 on: February 04, 2022, 01:11:29 AM »

The way you wrote it makes me think about old murder mystery series like Murder, She Wrote or some Hercule Poirot, but you're the one doing the thinking (meaning the player).

I had to think of these series as well, I loved to watch these on TV when I was younger.

Thanks for letting us in on your procress, great job as always, Prinsessa!
Logged

oldblood
Level 10
*****

...Not again.


View Profile
« Reply #661 on: February 04, 2022, 07:59:03 AM »

Hey Princessa, wow these updates are a joy to read and I can feel the excitement you have for this project coming through. Really feels like you're having some big breakthroughs with what this project truly is. Keep these updates coming!
Logged

ChrisLSound
Level 1
*



View Profile WWW
« Reply #662 on: February 04, 2022, 08:26:48 AM »

Great to see everything falling into place for you! It definitely sounds like quite a lot of content to make, but hopefully it'll be a nice thing to work on when you need a change of pace from the other aspects of development. Smiley
Logged

I make video/tabletop games and music!
gustavolsson
Level 0
**


View Profile
« Reply #663 on: February 04, 2022, 11:06:48 AM »

Looks great!

Maybe I don't understand the intent fully but can't you have the relationship on the connection instead of on the node "end point"? I mean each node could have a single end point but depending on the type of connection the meaning is different, and the type of connection could be labeled on the curve connecting the two nodes.

I can't imagine rewriting parts of the game in another engine just to prototype, I admire your dedication Smiley
Logged
oahda
Level 10
*****



View Profile
« Reply #664 on: February 04, 2022, 12:45:55 PM »

Thanks, everyone! <3

How about lies? could someone retell the events in a way that isn't true? maybe it could create like a paradoxical 'past' with things not quite aligning. The same person in two places at once, for example.

You got it! Hand Thumbs Up Left Well, hello there!

The way you wrote it makes me think about old murder mystery series like Murder, She Wrote or some Hercule Poirot, but you're the one doing the thinking (meaning the player).

I had to think of these series as well, I loved to watch these on TV when I was younger.

I do like these kinds of shows!

Really feels like you're having some big breakthroughs with what this project truly is.

Yes!

It definitely sounds like quite a lot of content to make, but hopefully it'll be a nice thing to work on when you need a change of pace from the other aspects of development. Smiley

Oh, for sure! c:

Maybe I don't understand the intent fully but can't you have the relationship on the connection instead of on the node "end point"? I mean each node could have a single end point but depending on the type of connection the meaning is different, and the type of connection could be labeled on the curve connecting the two nodes.

If I'm understanding you correctly, I tried mocking up something like that here too.

Ended up deciding against it because:

  • You need to be able to focus on the fact that a particular connection exists for a specific character (e.g. "Fennel has a child" by selecting "child" on Fennel's node, but "Bayleaf has a parent" by selecting "parent" on Bayleaf's node, or "Fennel's child is Bayleaf" by selecting "Bayleaf" on Fennel's node etc.).

  • You don't necessarily always have all of your nodes and connections visible at once so I want everything to be right there on the node itself so you don't have to follow the lines to see what the info actually is.

  • You don't always have the full info (you know Fennel has a child but not who it is) in which case the right side will just say for example "(someone)" and there won't be any connecting line at all yet.

  • I think it will be hard to follow and organise if you have all of the lines coming out of the same connector.

Bit wordy, does it make sense? Cheesy

I can't imagine rewriting parts of the game in another engine just to prototype, I admire your dedication Smiley

Surprisingly quick to more or less copypaste some of the C++ code and adjust it to C# Grin
Logged

gustavolsson
Level 0
**


View Profile
« Reply #665 on: February 05, 2022, 02:55:08 AM »

...
Ended up deciding against it because:

  • You need to be able to focus on the fact that a particular connection exists for a specific character (e.g. "Fennel has a child" by selecting "child" on Fennel's node, but "Bayleaf has a parent" by selecting "parent" on Bayleaf's node, or "Fennel's child is Bayleaf" by selecting "Bayleaf" on Fennel's node etc.).

  • You don't necessarily always have all of your nodes and connections visible at once so I want everything to be right there on the node itself so you don't have to follow the lines to see what the info actually is.

  • You don't always have the full info (you know Fennel has a child but not who it is) in which case the right side will just say for example "(someone)" and there won't be any connecting line at all yet.

  • I think it will be hard to follow and organise if you have all of the lines coming out of the same connector.

Bit wordy, does it make sense? Cheesy

Makes sense! I think the "you don't always have the full info" the most compelling counter-argument to that design.

Surprisingly quick to more or less copypaste some of the C++ code and adjust it to C# Grin

:O
Logged
oahda
Level 10
*****



View Profile
« Reply #666 on: February 06, 2022, 03:47:00 PM »

50

Conversation

No longer just copying old systems into the Unity prototype, but trying new ones out there first. Nodes came first with the last update. Now I'm figuring out how to have characters talk to you and help you deduce things.

Chatbot

That's basically what it is! Cheesy Compare the GIF in the last post to this new one:



You'll notice it's a lot more robotic, but the cool thing is that underlyingly it's dynamic and not so hardcoded for any particular conversation, tho as a proof of concept still more so than the final version will be.

Defaults

Basically it takes into account what kind of info you've selected, if there's a thread ongoing, how things relate to each other and so on, and adjusts what's said accordingly. Just so that it works in general.

Specifics

Of course the point of the game is to be story-driven, and I want to tailor as much dialogue as I can muster to make these people feel real and move things forward. Thus defaults will have to come in multiple variations and more importantly I have to be able to override defaults where desired.

Data

For those specifics, as well as in order to get all the possible connections into the game, I wanted to figure out a data-driven approach. I mocked something up:

Code:
"infos":
{
"tarragon-birds-inseparable":
{
"witnesses": ["tarragon", "mustard", "fennel", "bayleaf"],
"parts":
[
{
"target": "tarragon",
"label": "inseparable",
"value":
{
"type":  "profile",
"value": "birds"
}
},
{
"target": "birds",
"label": "inseparable",
"value":
{
"type":  "profile",
"value": "tarragon"
}
}
]
}
}

So that's how you might mark up the inseparable relationship between Tarragon and the birds, as well as a list of the people who'd be able to give you this info. Not everything would necessarily be strings, and perhaps types of relationships would be declared somewhere else and referenced in the info parts, but yeah.

Then comes the magic part:

Code:
"connections":
{
"tarragon-birds-inseparable":
{
"paths":   [["tarragon", "birds"], ["birds", "tarragon"], ["birds-surround-tarragon"]],
"results": [{"type": "info", "value": "tarragon-birds-inseparable"}]
}
}

You tell the game what paths you can take to unlock a particular connection; here you can either select Tarragon's profile followed by the birds', or the other way around, or even the snapshot node of the birds surrounding Tarragon in-world, and the relationships as outlined in the info markup we just saw will be the result.

And a C# adaptation of this kind of data is indeed what drives the stuff you saw in the GIF above. Smiley

Code:
m_connections.Add
(
    "t-inside-th",
    new Connection
    {
        paths = new string[][]
        {
            new string[]{"t-tf-inseparable", "tf-surround-th"},
            new string[]{"tf-surround-th", "t-tf-inseparable"}
        },
        results = new ResultConnection[]
        {
            new ResultConnection
            {
                type = TypeResultConnection.unlock,
                value = "t",
                comments = new Textbox[]
                {
                    new Textbox
                    {
                        text = "Oh, my goodness! How did I not realise?! Let's go over there right away!",
                        speaker = Subject.NPCM
                    }
                }
            }
        }
    }
);

That's the connection setup for sussing out where Tarragon is in the present by combining Tarragon's inseparability from the birds with their surrounding a particular building. And a tailored, specific response from Mustard specified right there in the data, like I alluded to before.

In the final version this stuff is supposed to live in data files and not in code, more like the JSON format shown before this.

Conclusions

So I've done some back and forth over the last few days between trying to think up how to make this all work and trying to code some of it up and dealing with unforeseen issues, the usual. In the final game I'll also need localisation hooks, but in the prototype of course it's just hardcoded for English.

One thing I want to change is to allow you to select different questions from a dropdown when you select a piece of info, so if you select a name you can either start a thread involving that person, or you might just ask in general "what can you tell me about this person?". I think this dropdown will appear even if there only is one option, just to allow you to preview your question and choose not to ask it if it's not what you had in mind.

We're not far from getting something up and running in the real game now!

Logged

Alain
Level 10
*****



View Profile WWW
« Reply #667 on: February 06, 2022, 11:46:46 PM »

Thanks for sharing your chatbot Wink You mentioning localisation sends shivers down my spine, because your game is so complex with regards to text and narration. But I am sure you will tackle it once the time has come!
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #668 on: February 07, 2022, 02:21:25 AM »

Wow, that looks really good! I'm wondering about how it will scale, perf and/or storage wise. Network graphs have a nasty tendency to explode in size, right?

I feel like you're reinventing logic programming, except more practical (might be good to look into for potential optimization strategies though)
Logged
oahda
Level 10
*****



View Profile
« Reply #669 on: February 07, 2022, 09:02:03 AM »

Glad you like it! Grin

You mentioning localisation sends shivers down my spine, because your game is so complex with regards to text and narration. But I am sure you will tackle it once the time has come!

Cheesy It sounds a little scary, but I think this system will run mostly on prewritten responses anyway so it doesn't need to be super clever.

I'm wondering about how it will scale, perf and/or storage wise. Network graphs have a nasty tendency to explode in size, right?

So the mockup is of the raw human-readable markup; the runtime representation won't be quite the same, and already in the Unity prototype there are lookup tables and stuff to quickly check available connections for any given piece of info rather than going through everything, things like that Smiley But we'll see how it works out when there's more data!

I feel like you're reinventing logic programming, except more practical (might be good to look into for potential optimization strategies though)

Took a peek, and now that was intimidating! Cheesy I think this system will be a lot simpler. The data itself doesn't really need to define any conversation logic, just give the game some hints that a normally programmed system can take care of (or just override it all together with those tailored responses half the time).
Logged

oahda
Level 10
*****



View Profile
« Reply #670 on: February 10, 2022, 05:21:12 PM »

51

Three

Another year has flown by since the devlog was started Who, Me?



That's where the proper version of the game is at now. A good offset to the blockiness about to follow~

Twenty

Tried to finish up as much as I could of the Unity prototype of the intro/tutorial and put it into a long GIF with some wipe transitions to skip some bits. Writing and time between events is just roughed out (dam won't break so soon for instance), but it conveys the idea.



I've been telling myself that when I finally get this stuff sorted, that's when I can up the devlog from 10% to 20%, so here goes!



Then to now

The order of things has been a bit odd, hasn't it?

I feel like the last year went into a weirdly belated preproduction. Got a lot of the story and characters done and the mechanics more or less solidified. And then finally this prototyping in Unity. And now having stepped over that threshold it feels like the game is finally materialising.

But then that's following two previous years of doing technical stuff and graphics as well, so there is already a foundation for that blocky stuff to be transferred to when it feels good. Weird!

Now and ahead

I'll keep doing things in Unity for a bit more. There are some more things that need prototyping like the new way of branching character schedules, so I might as well figure it out in the quicker and dirtier way there first and then transfer whatever solution I end up with in a clean way to the real game later. I feel like I'm saving a lot of time this way.

All in all I'm excited about the current progress and I've managed to work at a steady pace recently. Hope it continues!

Once again huge thanks to everybody who's been hanging out in this thread <3

Logged

Alain
Level 10
*****



View Profile WWW
« Reply #671 on: February 11, 2022, 12:42:32 AM »

Congratulations on the anniversary and the step to 20%! It has been a pleasure to follow your progress over the past years.
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #672 on: February 11, 2022, 02:21:01 AM »

Woop woop! That's double the progress from before!
Logged
ChrisLSound
Level 1
*



View Profile WWW
« Reply #673 on: February 14, 2022, 07:31:46 AM »

Congratulations! It's been great following this Smiley
Logged

I make video/tabletop games and music!
vdapps
Level 5
*****


Head against wall since 2013


View Profile WWW
« Reply #674 on: February 18, 2022, 08:50:46 AM »

Congrats to anniversary, to progression update and to your steady pace on development! Gentleman I'm looking forward for next updates. Coffee
Logged

oahda
Level 10
*****



View Profile
« Reply #675 on: February 20, 2022, 09:21:30 AM »

Thank you so much, everyone!



52

People

I worked out the branching schedule stuff so decided to do something else for a bit. Wanted to try and figure out the most time-efficient way to deal with all those characters so that I can get them into the game reasonably quickly, with a workflow that makes it easy to make changes that get applied to all of them automatically if necessary.



Main idea was to be able to use the same mesh, rig and animations for everyone with the right setup. Searched/read/watched a bunch of stuff and learnt of some cool things I could make use of.

Base model

Still a bit wonky in places (arms are too long but I already got all the pics for this post~) but my main worry to begin with has been good topology that will bend and deform properly. Lots of helpful info online for that!



Another concern is I wanted as few polygons as possible not just to render smoothly, but because it's just hard to work with a mesh that's too complex. It's also modelled with at least one layer of clothes in mind for every character so I saved some polygons not having to define the curvier areas that much as well.

Non-destructive workflow

The second picture of the model has Blender's subdivision surface modifier applied. This adds some geometry and smooths things out but works procedurally so does not permanently change the mesh and I can keep working on the lowpoly one. This means I lose some degree of control, and that there are places where I do end up with more polygons than I really need, but I think the tradeoff is worth it in this case.

Customisation

This is the cool part. Blender allows you to set up "shape keys" to blend between variations on your mesh. So I can add one called "arms" and make the arms of the model thicker and then I can set a percentage between that and the original thickness. This is also non-destructive and can be slid right back. The base mesh is the one with the smallest variations, so that's why its shoulders are so narrow.



It's basically a character creator like in a 3D RPG right there in the program! I also set this up for the face:



Gonna add stuff for eyes and brows as well to help make characters distinct, but those are textures.

Finally I also set one up for baby proportions of the whole body and head. So to make a child, I increase that slider and shrink the skeleton of the mesh to match.

Logged

oldblood
Level 10
*****

...Not again.


View Profile
« Reply #676 on: February 20, 2022, 09:27:40 AM »

Awesome stuff, Prinsessa. I know its still WIP, but I already like the look you're going for here and it seems like a pretty scaleable way to handle more rapid character creation. I'll be honest, I think at some level I'm going to miss the little 'pill people' though haha. Looking forward to seeing how this evolves with time.
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #677 on: February 20, 2022, 12:10:17 PM »

Reject humanoids, return to capsule-people

Nah, jk, looking great!
Logged
Alain
Level 10
*****



View Profile WWW
« Reply #678 on: February 20, 2022, 11:35:31 PM »

It is great to see some behind the scenes of your 3D work. Your characters are super cute!
Logged

oahda
Level 10
*****



View Profile
« Reply #679 on: February 24, 2022, 06:35:36 AM »

Thank you all!

No love for the original birdoids? Cheesy



As a tiny update, I now control the properties with visible handles:



It's a cool visual thing, but the main reason I do it this way now is because it seems to be the only way in Blender to make a linked copy (i.e. one where changes to the original also show up in the copies) with its own values for the shape keys (if I edit the percentage of keys directly, all linked copies change).

I create a separate Blender file, link the character in from the original file, and turn it into a library override (Blender 3's version of what was previously a "proxy"). That gets us a fancy linked copy where you can pose any skeletal rig independently.

I've added a rig separate from the person's skeleton—all the controllers in the GIF are actually bones—where the position of each bone drives the value of the shape key (you can right-click a shape key in the list and "add driver" to set this up). I added a constraint to each bone so it can only move on one axis within a range.

I'm learning a lot! Apparently this is also how people do those cool controllers for facial expressions and stuff with an outline of a face, by assigning custom (modelled) shapes to the bones and shifting the face geometry with shape keys.
Logged

Pages: 1 ... 32 33 [34] 35 36 ... 41
Print
Jump to:  

Theme orange-lt created by panic