I have had some wonderful things happen.
The first is, I married my wife. This happened 8 years ago (I asked her), and its been a fun trip so far. But the best thing is, we keep growing. In this case, I decided that I trusted her to a new level, and I asked her a question: Would she be willing to design a schedule for me?
I struggle with scheduling. More specifically, I struggle with “how much should I be available for others” and life balance.
I also told her of the desire within me to work on this game. Its been an omnipresent inside push since 1991. And there’s so much of it, in the past, when I open up the gates, it floods over and drowns out everything, and burns me out quickly. And.. I don’t know if she understands, but she’s accepting of me, and nurturing of me.
So, I gave her the guidelines of what I had to fit into my life, and she drew me up a plausible schedule. It includes:
- Time for Us to Go to the Gym Together. (DATE!)
- TIme for Us to Watch TV (DATE!)
- TIme for Us to Eat Dinner (DATE!)
AND, it also includes:
- WORKING! like, to get income and pay mortgage and stuff.
- DAILY NAPS! (omg) (concession: I get home later in the evening)
- PLAYTIME! (go work on my project or my latest game or whatever)
As it is wife-suggested, I believe it has a high WAF. (Wife Approval Factor).
So with this established, I can now relax, and let this project flow. It may flow slow, or it may go very fast, but its accounted for.
Managing the Flow
“Honey, what are you doing?”
As I sit there, leaned back, eyes closed. That is how much stuff is shifting through my brain. Its going very fast. Its like a probe algorithm trying to sort things out. How the heck do I capture this?
Well, in the end, its what gets committed to github: https://github.com/sunnywiz/dotnetmud2015
But its also going to be blog posts here. I run into a quandry. Do I:
- First do something, then write about it? (and not change it ever again)
- Think about it, and say “I think its going to be something like this” (and then run the risk of never doing it)
- Write something, write the equivalent of documentation here, but put a caveat on it of “this might change in the future”
The 2nd and 3rd options seem to be the way to go. In general, everything is “here’s what is intended at this time, things may change in the future”, kinda like pre-documenatation.
I’m going to tag them here with the tag “dotnetmud”.
Overall Project Desires: Intended
I want to write:
- A very basic server engine. This deals with client connections, disconnects, reconnections, some level of polling things, etc.
- A very simple mud library:
- users logging in (no save choose your nickname)
- in a room
- can see other players in the room and on the global players list
- can move from room to room
- emote and say
- using a custom web client
- This is a “sample documentation” game to illustrate the various parts of the client/server communication, such as events and polling.
- Using the above two things, a very simple space game:
- users log in to a ship floating in space
- can fly around in space (thrust, rotate)
- can see other players’ ships as well
- maybe will have some missiles to make it fun
- using HTML5 canvas web client
Then, the fun stuff can happen, where I start making a more advanced game of sort, building on the above. While trying to keep the above nicely packaged. This is where my space game really happens, and/or my 2D mud game.
Topics Considered So Far
These could all be individual blog posts. Either before, or after, code. All of these have been handled already by industry, I want to expose them for my use with my game(s)
- Using signal/R – how chatty is it actually, how fast can you poll?
- server and client time sync – when you’re dealing with “at server time ST, ship is at X,Y going at DX,DY velocity” => go render intermediate frames till next server update, you need to get very specific about Servertime ST vs client time CT. There’s a lot of work around here.
- server and client poll loops (next post, it got too long in here)
- how generic or hard-coded to make events and polling – I keep waffling. I start to write something generic, and then realize how much plumbing I’m putting off to the game, and then go back to hard coded. It’s the difference between:
- client->server: UpdatePlayerListRequest; server->client: UpdatePlayerListResponse
- client->server: Event(“UpdatePlayerListRequest”), server->client: Event(“UpdatePlayerListResponse”)
- The former puts some game-specific code at the server level; the second avoids that problem but makes for a lot more argument marshalling and passing. I keep going back to the first one.
- In Space, dealing with unlimited-space addressing
- enumerate the things within distance 10 from me from closest to furthest.
- answer: its similar to voronoi indexing, but more like i-nodes in the original unix file system.
So, yeah, my brain is alive with the sound of code self-organizing. Easy there big boy .. need to do the long haul, not the short burnout.
And I love my wife. She is awesome.