4 ms·
I've been writing a simple 2d arcade rpg a few years ago. I created a simple graph language for creating quests and started to design the system for specifying
by ajuc 5y ago
I've been writing a simple 2d arcade rpg a few years ago. I created a simple graph language for creating quests and started to design the system for specifying arbitrary quest conditions.
It started from simple things like "has player killed a monster of type X", "does player have item Y in inventory", "was the actor X in place Y already", "have player talked to actor Z about Q".
But then I thought it would be cool to add metainformation. "Have actor X seen player killing the monster Y". "Have any actor seen player talking about Q". "is there a chain of actors meeting each other from the actor that seen player killing actor X to the quest giver".
I tried to implement this naively and it turns out the amount of information is astounding. To the point that I'm still amazed our brains can do this.
- adamrezich 5y agoI was working on something just like this myself as a prototype for a kind of "immersive sim" detective game, and experienced the exact same thing. I still really like the idea and hope to return to it someday, but yeah, it's harder to model stuff like that than one would intuit.
- scollet 5y agoThat's funny you both had the same natural ideation. I had the same but for the morality/social system of an apocalyptic im-sim. I did some notebook sketching and quickly progressed into capsnet territory so I shelved it :(
- trun 5y agoSomething similar was described in this GDC talk which you may find interesting https://www.youtube.com/watch?v=HZft_U4Fc-U https://www.youtube.com/watch?v=HZft_U4Fc-U
- andrewflnr 5y agoIt sounds like you accidentally started writing a logic programming language.
- mst 5y agoThis really sounds like the sort of thing that'd be fun to implement in https://logtalk.org/ https://logtalk.org/ specifically.
- ajuc 5y agoThanks I'll look into this. I wrote the game in js+canvas so my plan was to add some js prolog or datalog implementation later on for querying. Or just use in-memory sql. The problem wasn't as much with the querying part as with the remembering part, there was just too much information that needed to be recorded every frame in case I would want to know this 1 fact half an hour later.
- mst 5y agologtalk basically takes prolog and bolts on a smalltalk-style OO system and it is kinda batshit but also utterly beautiful and even if you don't use it I hope you'll be fascinated by reading up on it. (also because it's built -atop- prolog you can potentially get it to run on a prolog-in-X implementation though I've not yet tried that ... though I'm now tempted to so I'm going to finish this comment before I nerd snipe myself)