- Joined
- May 8, 2012
- Messages
- 240
- Reaction score
- 40
- First Language
- English
- Primarily Uses
I’m not entirely sure if there is a best practice for what I have in mind here, or whether this is the correct place to post this… let me tell you what I have in mind:
I don’t know how many of you have ever played the Ultima games, but if you ever played Ultima VI, VII and VII part 2, you probably remember one of the most memorable things about the game world: the NPC schedules.
Literally every NPC in the world of Ultima VI-VII had their own schedules- shopkeepers would tend to their shops in the morning, would go to the pub to eat at noon and at dusk, then head home and putz around their houses until it was time to sleep. Aside from the high level of interactivity with the world (you could harvest wheat, make dough and bake bread in the oven, for example, or shear sheep, spin the wool, take it to the loom, etc) this was one of the elements that made Britannia feel like an actual living world compared to so many RPGs where, for example, Granny is perpetually sweeping the front door of her house until the world ends. This feature is now typical of games like Skyrim, for example, but it Ultima was really the first franchise that put it into practice first.
It’s something I’ve always wanted to incorporate in a game, because it's a fantastic way to bring that extra little breath of life, but I’m not entirely sure how to do it gracefully with MV.
Using one of the many time systems out there is always an option, to keep track of time as well as having a day/night cycle , but there are some things I want to do that those Ultimas did so well, which is the ability to keep NPC routes and schedules. If you stood outside, say, Gaye the Clothier’s shop at 6pm, you would see Gaye come out of her shop and walk all the way to the Blue Boar for dinner, and if you were at the Boar at 7, you would see her get up and walk out of the Boar- and if you followed her out, you could follow her route all the way home. This was managed because Ultima VII was a persistent world with no separate instances to speak of, so everything happened on one gigantic world map at the time.
With RPGM Maker, we’d need to make separate screens, which makes this a little… tricky. There are a lot of things that MV would have to handle: it would need to track where each NPC is when in-transit from one location to the other (so that when you’re walking around in the street, you can see them actually moving from place to place instead of teleporting), as well as whether or not they should be on that route at all (in the case of plot-critical NPCs who may, at certain important junctures, go somewhere else entirely or disappear from the game world if they’re killed, for example- which could be handled through switch-checking.)
The player experience would be something like this:
The Player is at the local tavern at 7:02 pm.
-At 7:03, Crystal gets up from the table and heads for the door- she will go to the room above her shop, The Ugly Duchess, arriving at 7:15pm and reading at her desk until 9:00pm, when she turns in until 7am, when she opens her shop.
-At 7:20, Goofus and Gallant get up from their respective tables and walk out. They go into their meeting spot in the woods to look for luminescent mushrooms until midnight, when they go to their house. Goofus goes to bed immediately, while Gallant putzes around in his kitchen for an hour before sleeping. They both sleep until noon the next day.
-At 11pm Elena the pubmaster closes the pub while her son, Frollo, wakes up and switches shifts with his father Umberto next door at the inn. Elena kicks out anyone who is in the pub at closing time and onto the adjacent inn (who, really, is only the player and maybe one or two NPC inn patrons who go to their rooms shortly thereafter.) Frollo tends the inn until 8am, when his father wakes up and takes over for him.
We can add even more complexity: One of the NPC inn patrons is a traveling troubadour (we'll call him Tailesin) who spends a week in each town and travels between the two local towns and the city, leaving Sunday of each week for the next town (so, for example, Limoges (stays 6 days) ->travels to->Rouen (stays 6 days)->travels to->Chartres (stays 6 days). On the fourth week of each month, he travels to the forest of Brocéliande where he spends a week in the court of the Faerie Queen (the entrance to which the player can’t find until he has a certain item in his inventory), and at the beginning of the month, he returns to Limoges to start the cycle again. The player should be able to encounter said troubadour on the road.
How on earth could one replicate this in MV?
I know there are ways to do it in a primitive fashion- such as adding one of the Time plugins and set the game to switch certain switches on or off at specific times of the day/month, and have events in specific maps where those NPCs would be to reflect the action, adding instances of the NPC in every map they would conceivably be and activated via switches. Pathfinding and seeing NPCs walking from one place to another wouldn’t be possible this way, since the sheer amount of things to do would look like this:
-If the player exits the pub at the time NPC1 leaves for her house, he will see her walking outside and away from the pub when he appears in the outside area (switch switched so she’s not in the pub when the player comes back in). However, the problem with this is that if he gets into her house before she gets there physically, he will find her IN her house when he comes in. Of course, you could set it so that the switch “NPC1isHome” doesn’t get flipped until NPC1 reaches XY coordinates that have her touching the door (which would unlock the door so the player can get in)- but that would mean tracking the XY coordinates of every NPC in transit in that screen, which can bog down things like hell… and then, of course, there’s the whole trouble of how to get those switches flipped when the player is nowhere near those screens so there’d be no tracking of the particular NPC event to trigger the unlocking of the door and the “NPC1isHome” switch, in case the player does get to that screen after the NPC –should- be home.
I guess that what I’d be looking for here is having a way to have persistent instance information for each NPC and the ability to write routines for them and manipulate them in accordance with a time schedule and pertinent switches. I know that, as of recent, Stardew Valley has an NPC system that’s similar to this… I’m not entirely sure MV can pull it off.
Thoughts?
I don’t know how many of you have ever played the Ultima games, but if you ever played Ultima VI, VII and VII part 2, you probably remember one of the most memorable things about the game world: the NPC schedules.
Literally every NPC in the world of Ultima VI-VII had their own schedules- shopkeepers would tend to their shops in the morning, would go to the pub to eat at noon and at dusk, then head home and putz around their houses until it was time to sleep. Aside from the high level of interactivity with the world (you could harvest wheat, make dough and bake bread in the oven, for example, or shear sheep, spin the wool, take it to the loom, etc) this was one of the elements that made Britannia feel like an actual living world compared to so many RPGs where, for example, Granny is perpetually sweeping the front door of her house until the world ends. This feature is now typical of games like Skyrim, for example, but it Ultima was really the first franchise that put it into practice first.
It’s something I’ve always wanted to incorporate in a game, because it's a fantastic way to bring that extra little breath of life, but I’m not entirely sure how to do it gracefully with MV.
Using one of the many time systems out there is always an option, to keep track of time as well as having a day/night cycle , but there are some things I want to do that those Ultimas did so well, which is the ability to keep NPC routes and schedules. If you stood outside, say, Gaye the Clothier’s shop at 6pm, you would see Gaye come out of her shop and walk all the way to the Blue Boar for dinner, and if you were at the Boar at 7, you would see her get up and walk out of the Boar- and if you followed her out, you could follow her route all the way home. This was managed because Ultima VII was a persistent world with no separate instances to speak of, so everything happened on one gigantic world map at the time.
With RPGM Maker, we’d need to make separate screens, which makes this a little… tricky. There are a lot of things that MV would have to handle: it would need to track where each NPC is when in-transit from one location to the other (so that when you’re walking around in the street, you can see them actually moving from place to place instead of teleporting), as well as whether or not they should be on that route at all (in the case of plot-critical NPCs who may, at certain important junctures, go somewhere else entirely or disappear from the game world if they’re killed, for example- which could be handled through switch-checking.)
The player experience would be something like this:
The Player is at the local tavern at 7:02 pm.
-At 7:03, Crystal gets up from the table and heads for the door- she will go to the room above her shop, The Ugly Duchess, arriving at 7:15pm and reading at her desk until 9:00pm, when she turns in until 7am, when she opens her shop.
-At 7:20, Goofus and Gallant get up from their respective tables and walk out. They go into their meeting spot in the woods to look for luminescent mushrooms until midnight, when they go to their house. Goofus goes to bed immediately, while Gallant putzes around in his kitchen for an hour before sleeping. They both sleep until noon the next day.
-At 11pm Elena the pubmaster closes the pub while her son, Frollo, wakes up and switches shifts with his father Umberto next door at the inn. Elena kicks out anyone who is in the pub at closing time and onto the adjacent inn (who, really, is only the player and maybe one or two NPC inn patrons who go to their rooms shortly thereafter.) Frollo tends the inn until 8am, when his father wakes up and takes over for him.
We can add even more complexity: One of the NPC inn patrons is a traveling troubadour (we'll call him Tailesin) who spends a week in each town and travels between the two local towns and the city, leaving Sunday of each week for the next town (so, for example, Limoges (stays 6 days) ->travels to->Rouen (stays 6 days)->travels to->Chartres (stays 6 days). On the fourth week of each month, he travels to the forest of Brocéliande where he spends a week in the court of the Faerie Queen (the entrance to which the player can’t find until he has a certain item in his inventory), and at the beginning of the month, he returns to Limoges to start the cycle again. The player should be able to encounter said troubadour on the road.
How on earth could one replicate this in MV?
I know there are ways to do it in a primitive fashion- such as adding one of the Time plugins and set the game to switch certain switches on or off at specific times of the day/month, and have events in specific maps where those NPCs would be to reflect the action, adding instances of the NPC in every map they would conceivably be and activated via switches. Pathfinding and seeing NPCs walking from one place to another wouldn’t be possible this way, since the sheer amount of things to do would look like this:
-If the player exits the pub at the time NPC1 leaves for her house, he will see her walking outside and away from the pub when he appears in the outside area (switch switched so she’s not in the pub when the player comes back in). However, the problem with this is that if he gets into her house before she gets there physically, he will find her IN her house when he comes in. Of course, you could set it so that the switch “NPC1isHome” doesn’t get flipped until NPC1 reaches XY coordinates that have her touching the door (which would unlock the door so the player can get in)- but that would mean tracking the XY coordinates of every NPC in transit in that screen, which can bog down things like hell… and then, of course, there’s the whole trouble of how to get those switches flipped when the player is nowhere near those screens so there’d be no tracking of the particular NPC event to trigger the unlocking of the door and the “NPC1isHome” switch, in case the player does get to that screen after the NPC –should- be home.
I guess that what I’d be looking for here is having a way to have persistent instance information for each NPC and the ability to write routines for them and manipulate them in accordance with a time schedule and pertinent switches. I know that, as of recent, Stardew Valley has an NPC system that’s similar to this… I’m not entirely sure MV can pull it off.
Thoughts?

