Busy Dreaming is an MMO RPG FPS built entirely in a threejs gaming engine I’ve created from scratch on-off for 2months. This is all inspired by Ultima Online, and Star Wars Galaxies. The game has a few bugs but it’s 100% online, multiplayer, and rather enjoyable.
An ode to Diablo 1 character selection, the camera flys in a circle around the scene I built in a ‘scene builder’ that simply lets me push a scene into place without having to write code. Here I have a few screenshots to show you around the area and show off some cool GLB, grass, and a little encampment.
Start screen, far bottom right under the broken FPS tool is a button to change how many trees render, if you have a slow computer, I’d recommend editing this area, apologies if it’s buggy as it’s a back burner issue/concern, ideally I will learn over time what’s a good amount of grass VS trees on a given planet. However much testing is needed to move that direction. Especially when it comes to lights, and the amount of lights…
Games that, in my opinion, held their own because they had their own economics, AND taming.. Each server ran a little differently based on minerals acquired by users in game, it was a rather complex, high commitment situation, only those who put in the work would essentially manage the economics of the game.
Some examples of the skill trees in progress.
Back in my day… crafting was exceptionally high quality, making the game a lot of fun. I’ve started with what I consider the base/foundation; mining, crafting, inventory, water excavating, creating ingots, creating a bank/vault, using mining equipment that happens over a period of time and you check on those machines, craft-ables that help you dig faster,… perhaps I will focus on the technical aspects now.
Taming, I find important for youth adoption, I found when I was young - I hated getting into battles, my heart rate spiked, I didn’t like how I felt, I was immature, didn’t know a lot about breathing. My son, I notice he feels the same way about big battle situations, wants to stand on the sidelines and look within, enjoys sniping, sneaking, but would much rather go far away from the battle, and click a button to tame an animal. Here the threats are more logical, you see them coming, and the stress levels are reduced, so with that said I find taming not only helpful to bringing more people into a big game, but also a great way to learn the mechanics of getting ‘near’ dangerous situations.
Systems/Services in place;
| actor-sim-service.js |
|---|
| animation-blend-service.js |
| bootstrap-service.js |
| character-progression-service.js |
| combat-ability-service.js |
| combat-service.js |
| data-cache-service.js |
| data-flush-service.js |
| db-service.js |
| excavation-persistence-service.js |
| fire-service.js |
| fps-rig-service.js |
| grass-blade-estimate.js |
| harvest-persistence-service.js |
| harvest-service.js |
| inventory-actions-service.js |
| inventory-persistence-service.js |
| inventory-service.js |
| light-config-service.js |
| milestone-persistence-service.js |
| neon-sync-service.js |
| particle-fx-service.js |
| passive-extractor-service.js |
| pet-service.js |
| player-bootstrap-service.js |
| realtime-state-service.js |
| redis-service.js |
| robot-animation-config-service.js |
| robot-pet-service.js |
| robot-type-manifest-service.js |
| saved-grass-service.js |
| saved-scenes-service.js |
| saved-ships-service.js |
| saved-stories-service.js |
| saved-trees-service.js |
| session-cookie.js |
| session-service.js |
| silo-bank-service.js |
| sqlite-service.js |
| structure-service.js |
| tame-service.js |
| taming-persistence-service.js |
| tree-config-service.js |
| water-service.js |
| world-layout-service.js |
| world-lease-service.js |
| world-service.js |
Some pickles;
I made the world flat, it made it easy to add mining, the game was easy to push forward, elevation change in mining was easier math, and even water effects that flow and settle in the lowest areas was a great situation to figure out… however this felt rather strange/indifferent to do when i made the world a sphere.
Moving to a sphere has challenged my ability to spawn my little glb NPCs. I realize this is more of a me problem, now I have to figure out how to re-associated the interesting digging/mining situation on a sphere.
Also, going to sphere has changed the way things “sit” on the sphere. I think I spend several days working on just getting grass to “lay” on the sphere, and several days just trying to get the grass to then “lay flat” in a scene.
Scene creation I found to be much more predictable on flat surfaces, however now I’m having to manage two variations of how grass can sit on a tree, grass that will sit on sphere, grass that is on a flat surface, and grass that is just placed in a certain area.
I’m automating spawning trees, this can be a dicey situation because on a computer 6 years old, you may see 40-60fps, and something from this year, maybe 120fps… I’ve left the tool to change the tree in the login screen.
Lighting in threejs;
I find lighting to be exceptionally challenging, currently I’m thinking it’s a simple game mechanic that limits lighting based on characters level. If a character is a low level, their lighting is consumed by whatever mechanical robot has lights. It’s a very “dark” game where I want to introduce threejs planets that are “lit” like a sun that rotates around on a schedule. This means lighting becomes consistently important in game. However, it’s a challenge. Today, I remedially turn off lights based on what is nearby. In future though, I’d love to get better at lighting as I feel it adds a special surprise to games that most aren’t thinking about today. For example, if it’s pitch dark and I’m scared to move forward, I could send my robot to inspect, that lighting from far away is mesmerizing in game so this is very exciting.
Lighting comes from NPCs, I have created glb bots that have a glow, or emit lights like a flash light. Hence the lighting studio app being so pivotal for making this game possible, which I’m using to duplicate the character / glb 5 10 20 X so I can see how it degrades FPS per computer. I test across 3 computers, old alienware, and 2 different m5 macs. I’m learning if I’m not on top of subtle testing on lighting in threejs, I’m rather doomed.
A few “in game” pics.
First person view, third person view, kiting view (for people who run away and shoot behind them), and DOTA over head view. If in first person, hit + to escape and get your moue back. I should def add that to game lol.
Local dev VS cloud;
I’m creating an entire game engine, from a lighting studio, where I can change where lights are siting and anchor them to bones, a rigging studio where I can adjust all the glb animations and fine tune them, I’m hardcore in weeds with meshy and low poly variations, while still letting meshy hammer in textures, and feels like an infinite loop of NPC possibilities.
Going from local dev to cloud has ultimately sacrificed my ability to move fast, now I’m always worried if “multi player suffering” because I made a movement in local dev mode, so a lot of back n forth and I do wish I had waited longer to add multiplayer.
Infra to enable competitive FPS MMO experience:
Quick high level of how/what/why; Using github auth2, redis, sqlite, postgresql for backend, javascript heavy frontend, and meshy to help with idea to reality with characters, npcs, and various static assets. I’m running into a ton of little things that are fun to work through and I have no end-game or strategy on monetizing this game. I’m 39, I’ve always played MMO RPGs and first person shooters, this is living out my dreams. Probably have spent a few hundred dollars or more in cursor primarily, swapping between opus 4.5 and 4.7, occasionally I get less “thinking” and “cheaper” llms to support. However due to the nature/gravity of this software, I had to use the big boy LLMs often to move this forward.
- digital ocean redis is what users see mainly, $6/month plan
- redis flows to sqlite as a hot storage and vice versa
- sqlite occasionally updates a cold storage in a rate that enables me to stay in the free tier using neon (cloud postgres)
Why I picked a sphere?
I noticed in most games online, the world is flat, like when I was running around in star wars galaxies. I assume it’s because it would have been hard, and I can admit, yea it’s hard. However I feel a sphere generates the ability to do multi worlds.
Have you built any plant dioramas using threejs? I have, and I was also adding cameras to different moons around saturn, and different variations to this style, and found “what would have been like to live on the moon” and “speed up the amount it can travel” or what would it be like to live on Haley’s comment?
This abstraction taught me… Perhaps if i stay busy dreaming, a lot more can come of a game. So I’ve added the ability to fly.
Why I don’t like the sphere… Camera gets funny on the poles, north and south. I’ve created a silly red line to block people and bots but bots get stuck in it, npcs are unpredictable and stupid right now. However I think it wont be that hard to figure this out, but perhaps it’s over my ski’s and just blocking it with a sill invisible wall is fine for now, and perhaps i can block it with a big beautiful building or plant of some sort.
Flying in game;
If you hit J, you bounce off the planet and turn into a mini drone. Here you can actually slip off the gravitational pull of the planet and float away into nothing. A beautiful mistake. Ugh this is where I stopped. I was thinking I could have another threejs glb float by, and simply “scoop you up” in the mouth of the ship, like a ship bay scoops you up. Idk..
Once gravity loses control, it’s a ghost land. Interstellar space. Here I want to add more spheres, more planets, different NPCs.
Grass and Tree studio;
I found some videos about how to do the math for grass, and it’s been really intensely satisfying to play with the impact of grass and changing wind… However I don’t think I’m done here. Just because I create millions of blades of grass doesn’t mean I necessarily should do it every time.
Here’s where I digress, it’s an unknown known at every corner lol..
Excuse verbose.
I’m excited about technology, typing helps me learn about what I’m doing.
Some quick notes;
I struggle with posting about my work online because i view this more of an expression myself, simple artwork. I’m not open to new projects, sorry I do not have time, and i dont want to entertain any job offers, nor any debates/arguments.
blah..
The hard part is over for me, getting it online was the hard part, and maybe sharing it here, today, will help bring back some fun again. I’m more of a project starter in my realm, and without koolaid I will start something else.
I’m not entirely sure I have time to push this game into the future that I’ve been dreaming about, between home schooling, exercise, and building platforms for clients, I wish I could duplicate myself..
More so, I’m busy dreaming.












