Shapeworld! banner

Shapeworld!

10 devlogs
27h 37m 10s

A realtime computer simulation of Disney's Animal Kingdom and guests, to investigate how different theme park management strategies (fastpass) impact ride wait times.

Every single guest is individually simulated, with a (not LLM!! Actual symbol…

A realtime computer simulation of Disney’s Animal Kingdom and guests, to investigate how different theme park management strategies (fastpass) impact ride wait times.

Every single guest is individually simulated, with a (not LLM!! Actual symbolic decisions!!) brain that decides which ride to go on based on personal preference and queuing times.

Simulation of Fastpass, FP+, and Genie+ are all theoretically supported.

Unlike defunctland’s, this project has agents pathfind and physically walk to each attraction (walk time counted in calculations), and accounts for online queue time checking and online fastpasses in the agents’ behavior.

Inspired by Defunctland’s shapeland!

Again! No LLMs or machine learning, all the agents are driven symbolically by user defined rules.

Built with Godot! :3

A demo executable is included, but this project is really meant to be ran in-editor :) Also there’s a demo video :O

Demo Repository

Loading README...

Kip

Shipped this project!

I created a full computer simulation of guest behavior in Disney’s Animal Kingdom, built in Godot!

The project’s inspired by Defunctland’s shapeland (go watch the video it’s really good). Instead of dealing with pure data, this project simulate every single park guest in the theme park, they physically walk through a 3D map of the park, and make decisions based on wait times and fastpass.

The project also adds support for online waittimes checking and digital fastpass to the guests’ brains, so the simulation should be more accurate.

Kip

Made a (Very bad) trailer :)
Released on github!
Wrote some more stuff in the Readme too :o

Ready for shipping!

0
Kip

rehauled the fastpass algorithm… again….

turns out shapeland’s fastpass is (technically) not broken, but they combined the virtual and physical queue into one queue.

So I’m switching my fastpass return window algorithm to virtual queue 80:20 queue time estimation now
agents will now also recognize fastpass loopholes and take advatange of them, when the fastpass line is not saturated it will typically be faster (way faster) than standby

to combat this a minimum 40 minute wait is added to fastpass

plus added more readme

project should be ready for release!

here’s a image of the terrible waittime estimation I have to do now dear god it’s awful, but it works well and performance doesn’t seem to take a hit so I’ll take it!

Attachment
Attachment
Attachment
0
Kip

Finished writing the very long readme :o

currently exporting the project, hopefully soon ready for release :3

Attachment
0
Kip

Spent a lot of time tweaking and fixing the fastpass system, and alot more.
added activity roaming, fixed character controller, added path sampling navigation mode for better performance, realized the original shapeland implements fastpass in a completely wrong way so I kindof fixed it in my project, redid fastpass again, wrote documentation, arhghhghghg

anyways heres a big chunk of rant I wrote about how shapeland’s fastpass system is completely broken

Attachment
0
Kip

Fixed the issue where agents refuse to move if they picked an activity to be the first thing they did.

Also apparantly there’s a lot of agents that would rather go watch 5 consecutive 30 minute shows back-to-back

eh :3

also forgot to limit navmesh area so now agents are walking on highways outside of parks to go to a ride

it’s kind of funny so I’m keeping it lol like
WHY ARE YOU HERE

Attachment
Attachment
Attachment
0
Kip

Fixed a bunch of bugs about Fastpass and activites,

added a new pathfinding simulation mode! When the simulation is too fast, the navmesh agents will overshoot its targets when using velocity obstacle avoidance, so now they will automatically switch to a custom path sampling method for moving. The paths are also now cached so performance is increased.

However I decided to make activity guest roam to a random point on the park, which drastically reduced performance again lol since now there’s so many pathfinding agents alive at the same time, but I think it makes the park more lively, and somehow it also increases ride wait times????

Attachment
1

Comments

Kip
Kip 4 days ago

also oh yeah now every guest keep a log of what they did every minute

Kip

omg it’s done it’s done it’s done it’s done it’s done

Finished coding the agents’ brains, now they will pick a ride to go to when idle, based on preference and alot of factors.

The most notable is how agents manage fastpasses. When the agent owns a (or multiple) fastpass they haven’t redeemed yet, when they choose another ride to go on (or activity to do) they will estimate how much time it takes to walk to the ride, wait in line, ride the ride, and walk from this ride to the fastpass ride. This way the agents make sure they won’t miss the fastpass. However since it’s an estimate some agents will miss the deadline (by design), in which the system accounts for this and expires their fastpass. The time estimation changes dynamically based on if checking waittimes online is allowed.

Activities are also supported, which is something ~10min long the agents can do anywhere, anytime, like sightseeing or getting food. Currently the agents just do the activities close to where they’re idle to, which isn’t particularily pretty so I might chanage that.

There’s still some minor algorithm bugs, but I feel it’s working pretty okay. Maybe I’ll add some data collection :)

0
Kip

omg it actually works!!
Spent a lot of work, but now queuing is added! also fast pass is added.
Agents can also get and redeem (multiple) fastpasses, when the wait time is too long.

the yellow ones are walking, white is idle (deciding), pink is standby queue, blue is fast pass queue, green is on ride. Blue orbs on top of an agent means they have at least one fast pass (they can hold max of three at a time)

The whole system works surprisingly well, next would be adding activities, weighted ride selection, actively goes to redeem fastpasses, and perhaps online fastpasses (genie+) as well.

0
Kip

The agents’ pathfinding is done, working on the queue system now.
How wait times is calculated is ported from Defunctland’s shapeland project, which itself is (i think) taken from how Disney calculates waittimes and fastpass distribution.

Anyways p1 is how shapeland (and I assume Disney) calculates how many fastpasses to give out. waittimes is calculated by simulating each run of the ride until the last person in the queue gets to ride, so this can accurately account for fastpass guests “cutting the line”.

Fastpasses are basically a virtual queue. Since a ride’s capacity and throughput is basically static, the system calculates how long a fastpass guest would have to wait in line, prints that time on the ticket, and the guest can go do whatever else they want.

Optimization is a biiiig problem thooo

Currently I can have ~3000 agents in the map before going to ~3FPS, but I predict most of that comes from pathfinding. If most of the agents are waiting in line most of the time, I assume the performance will be increased :3 All of the rendering is now batched anyways soooo

Attachment
Attachment
0
Kip

yep. this is a ten hour devlog :)

This was suppose to be just a short personal project to be done in a day, but it has balloned up so much I gotta take advantage of it for flavortown.

I’m recreating shapeland! from Defunctland (https://www.youtube.com/watch?v=9yjZpBq1XBE), basically a computer simulation of guests in theme parks, and how different fastpass policies impact wait times.

Defunctland’s solution is purely data based without travel times, so I’m making a realtime simulation of agents that physically move across the map. The map is based on Disney’s Animal Kingdom in Florida (ok not florida themed but safari themed, but it’s funny to call it the florida themed theme park in the already florida themed florida)

The simulation is done in Godot, with some optimizations done to handle large crowds. While the agents are object oriented instead of ECS, rendering is offloaded to a central batching manager and drawn as instanced multimeshes. The pathfinding is A* navmesh.

I try to replicate almost all features from the original shapeland, including activities, weighted randomness, and if time allows, fastpass.

1

Comments

Kip
Kip 8 days ago

Each agent is moving independently, selecting a ride to go to, walking there, and then going to another ride. Actual brains of the agents are to be implemented next. Currently I’m testing optimization and pathfinding, so the agents immediately go to another ride instead of queueing and riding.