Maintenance for the week of March 3:
• PC/Mac: No maintenance – March 3
• NA megaservers for maintenance – March 5, 4:00AM EST (9:00 UTC) - 11:00AM EST (16:00 UTC)
• EU megaservers for maintenance – March 5, 9:00 UTC (4:00AM EST) - 16:00 UTC (11:00AM EST)
• ESO Store and Account System for maintenance – March 6, 6:00AM EST (11:00 UTC) - 4:00PM EST (21:00 UTC)

Telling stories with pathing: how to synchronize your paths.

DewiMorgan
DewiMorgan
✭✭✭
At the moment, most people who use pathing seem to have each character that paths, moving independently. This makes sense, because synchronizing them is next to impossible!

But you can still tell stories, even without the paths being perfectly synchronized!

Narrative pathing, no synch: serendipitous meetings

This works with any form of pathing: loop, ping-pong, or random.

You can tell a story with any two pathed characters, by placing some of their pads near each other, with a delay, so when their paths do happen to match up for a bit, it looks like they spent some time together.

I did this with a (winning) contest entry in one of my guilds. I had Fezez and Ezabi set up to run around the room like cats with the zoomies, but occasionally they would sit by the fire for ten seconds.

Since Ezabi's idle is to lie down, and Fezez' is to sit, I placed it so that if they were there at the same time, Fezez would be sitting over the lying Ezabi, snuggled together.

Every few cycles, their two ten-second-delay sit-downs would overlap for a bit, and it would look like Ezabi was lying there and Fezez came over to sit snuggled against her, or Fezez was lying there and Ezabi came up and flopped against him.

cgcxql444saa.jpg

I had their scampering routes follow basicaly the same path, but a little different: running up onto a cart together, then splitting up with one going over some chests, one around around the fire, and meeting up again back at the pillows.

So it would look like they would snuggle for a few seconds, then one would get up and run off, and the other would chase after them after a bit.

sc6p28no3syf.jpg

It worked well, telling a playful story of them playing together. Instead of just "cats playing independently in a room", there was a narrative being acted out!

To me, this was deeply meaningful, as this "dash, flop, and dash again" pattern of play was the exact pattern of play that my own cats, Linus and Pixel, used to have. I made the home in memory of their play, in the weeks after Linus died.

Narrative pathing, synched

But there are some narratives that you cannot tell unless the paths are perfectly synched up.

Goal
For my next contest entry (which didn't come even close to winning!) I needed Fezez and Ezabi to walk up to a house as trick-or-treaters, be greeted at the door by Sister Gelenna, then leave, and have Gelenna leave too... and then cycle and repeat.

That meant all three characters needed a loop that:
1) took the exact same time to repeat; and
2) brought them to the door in the correct order (cats perhaps a second before Gelenna).

The paths cannot be synchronized when they are random, so everyone's path would need to either be a loop, or a ping-pong. I opted for ping-pong for simplicity, though they could have been loops instead, to have the cats departure be a bit different from their approach.

ykj0i30xoi00.jpg

House
I knew that the delays you can place on pads are 0, 3 secs, 10 secs, and larger times I wasn't interested in, so I picked a home ("Exorcised Coven Cottage") that had a lengthy (more than ten seconds) walk to the front door; and which had no door in the doorway. I couldn't animate a door or curtain in the doorway, as the contest rules prevented using Add-On features like EHT triggers.

Ezabi
I placed Ezabi's path first, from the entrance to the home, along the path, to the front door of the hut. Pretty much a straight run, but needed a slight hockey-stick "elbow" at the end since the door was a little off to the left of the path. A nice simple path, the first two pads having no delay, the third set to ten seconds. I set it to ping-pong and set the speed for all pads along it to "jog".

I decided to use Ezabi's path as my "gold standard". The other two paths would need to synch up to that one. This felt important: if there are multiple paths, you need a "pace setter" path that you never change, rather than have A depend on B depend on C, and then change A to match up better with C, then realize you now need to tweak B to match the change, which affects C, and... yeah. It'd get super messy if we don't have a "single source of truth", a reliable metronome.

Fezez
Next, I placed Fezez' path next to Ezabi's. Because its "elbow" pad was on the outside of the curve around the hockey-stick section, he had slightly longer to walk, so it was clear it would not synch up without some work.

dr5bmkbddqgp.jpg

As a first step, I set his last pad to "run", and set it just a little ahead of Ezabi's at the door.

This meant that they'd both jog along the path, mostly side-by-side, but Ezabi would fall behind a little at the corner, run to catch up, and push a little ahead of his sister once he reached the door. Then, after being greeted for ten seconds, he'd scamper away, but slow down at the corner to have Ezabi catch up, and they'd lope off together back to the entrance.

So far so good, for the first cycle, but because they weren't perfectly synched, the narrative fell apart: after a few cycles, it became just two cats running back and forth to the door at different times.

In the house properties pane in the editor's "browse" window (same place you set a house to be your primary residence), there's a button to "Reset all paths". This moves every character to their pad #1, and starts them moving from there. This is how the house will usually be if someone enters it for the first time, though if an instance of the house was not unloaded from memory from the last time someone was in it, then they'll be elsewhere in the path, so you can't guarantee they'll be at their starting positions when people enter.

"Reset all paths" is essential for getting the timing perfect: reset the paths, then let them run for enough cycles to have a noticeable difference.

I didn't know about that option until too late to use it for this contest, so instead I reset just one path, trying to synch it up to another one. Though, while it is less accurate, if your characters start out at different positions, it might still be easier to compare them by resetting just one of their paths, at least for debugging large desynchs. You can reset a character's position on their path any time you edit the path. When you hit [P] to confirm your edits, is when they start up again. So you can wait until the other character gets to, say, a set marker in their path, then hit [P]. This can let you more easily compare their speed after one or two path cycles.

Say after one cycle, Fezez is two cat-lengths ahead. And each cycle, they run along that path two times (there, and back, because it's ping-pong).

So each time along the path, he's getting one cat-length ahead. Somewhere I need to make his path one cat-length longer.

There are two places I can most easily do that, on Fezez' path: his start point could move back by one cat-length, or the "elbow" pad could be tweaked. One way is just to pull that pad further out from the corner and do the timing again and see how much it changed it by. Another is to try to keep the distance between pads #2 and #3 the same (his "run" section), but make the line between #1 and #2 one cat-length longer. That's easier because that's the section they're jogging at the same speed on, so you know you definitely need "one cat-length".

Then you tweak in finer and finer increments. Say after 10 cycles, he's 1 cat-length ahead. That means losing one cat-length after walking 20 times along the path, so you need to make his path longer by 1/20th of a cat-length. I tweaked his start pad for the fine tuning, as this was simplest. It does mean that the cats don't scamper up the path exactly side-by-side, Ezabi is always a little ahead, but that felt more natural anyway than moving in exact lockstep. The "Precision Edit" mode for the pads comes in super handy for this fine-tuning.

Sister Gelenna
I timed Ezabi's loop for a dozen loops, which took a while, but was necessary to get a good measurement, and to make sure the two of them weren't desynching. It was somewhere between 24 and 25 seconds. so about 24.5 seconds. That gave me something to shoot for with Galena's path.

I then placed three pads for Galenna, two of her attending to tables in her home, one of her being at the door. I timed her loop around them: about ten seconds. I added the 10 sec delay at the door, and 3 secs on her starting pad (remember, delays on pads in the middle will be doubled!), bringing her to about the right delay, then tweaked it to be an exact multiple.

The starting pad delay is not executed when the path first starts, which meant that she arrived at the door some three seconds ahead of the cats. This was opposite to what I planned, but worked well enough visually that I didn't want to fix it: she waits for them at the door, they face each other fir seven seconds, then she walks away, and they scamper off a few seconds later.

If I had wanted to "fix" it, to have her "answer" the door after the cats arrived, I'd need to make her path a loop, with the path to the door being a few seconds longer than the path back to her start point, the easiest way being to have pad #4 over pad #2, but with a 3 second delay. This would have been a bit fiddlier, and I only had one evening to work on this, so I was just glad it worked!

2bhbwy2c3bge.jpg

Possible Improvements
As well as turning Gelenna's path into a loop, there're a few other things that could be improved.

I used Fezez, Ezabi and Sister Gelenna. They were a bad choice, because any of the three can be spoken to by a visitor, which would of course completely desynch their path from anyone else. Training dummies can't be pathed but even if they could be, they'd have a similar problem in that they can be attacked, which would likely interrupt their pathing if they had any.

So where possible, it's definitely best to stick to non-combat pets and mounts if you want synchronization. I didn't: I used Fezez, Ezabi and Sister Gelenna, because I wanted to tell that narrative. But it meant I was taking a risk that people could break the illusion for themselves.

Also, I placed the start points of the cats inside the gate. If I were doing it again, I'd likely place them outside, as then they wouldn't be doing the "turning around and coming back" where it's visible, which seems a little weird and kinda breaks the trick-or-treating narrative (though, as cats, I could totally see them coming back for a second try!).

Finally, I only found out about the "Reset all paths" option after finishing it! It could have saved me SO much time! Resetting a single character's path and trying to synch it up with another is FAR less accurate. So, the synchronization between my paths does still "drift" over time. I could have done a better job if I had known about this option!

As it was, it was around 4am and I was done! I slapped in everything vaguely spooky (burned trees, undead horse, whatever) around the map, lined the walk with all the pumpkins and yellow candles and such that I had, then put some blue lights around the door to lead the eye to it and make it an obvious destination. Then I submitted it, half-baked though it was. Unlike my winning entry, the map was only an evening's work instead of a couple of weeks, and the pathing was much simpler, (only three nodes per path instead of over a dozen!), even though it took FAR longer.

Wishes
1) I had heard a rumor that if you linked a static object with a character, that object would move and turn with that character. Then horses could pull carts, the cats could have work jack-o'lantern heads, I could have had a "door" attached to an invisible pet to open and close the door at the right time, etc. But sadly, that doesn't work :( Would be a lovely feature if they decide to add it in the future, though!

2) A feature that would make all this *incredibly* easy would be to have one option for the timing of the pads be "wait until <other character> has reached their pad <#N>" or perhaps allow pad-linking and have a "wait until there is a character at the linked pad" option. Some way to synch up paths *automatically*.

3) Some display on a path saying how long the loop would take to traverse, so that it would be easy to create other paths that are an exact multiple of that path timing.

4) Part of the reason that I stuck with 3-node paths in this second one is that in my first entry, I found that debugging the later nodes of long paths can be very painful, as you have to wait for the character to walk through all prior pads before they get to the area you're testing. It would be very helpful to have a "set this pad to be the starting pad of the loop", essentially shifting all pad numbers along the path's loop, so that the current pad became #1.

Perhaps some of these features will be added in an update, or perhaps EHT will add them?

I'd love to hear more tips on how to do cool stuff with pathing, and even to have pointed out where I've done stuff the dumb way :D
Edited by DewiMorgan on October 25, 2020 3:07AM
Sign In or Register to comment.