Saturday, July 11, 2020

The Beginnings Of This Journey...

In 1996, a game came out for the PC which established a hobby that has remained with me to this day.  Meridian59 was the game and it is considered by many to be the start of the modern graphical MMO genre.  You can read about the history of MMOs here.  Suffice to say, this game was amazing to me.  I played it for a long time as the industry grew to many dozens of MMORPGs.  I eventually moved on to other games, enjoying some of the best online experiences available.  Notable and monumental to me were Star Wars Galaxies (no longer available except from a few emulators like this), Ultima Online, EverQuest 2, LOTRO, Eve Online and RuneScape, all of which still have a place on my desktop.  The top spot since about 2009 has been Wurm Online.  Fortunately, my wonderful wife has patiently allowed me to enjoy this hobby throughout our 33 years of marriage.  Thank you, Precious!

Being a software developer by trade, I suppose it is only natural, if not inevitable that I would end up at this place in my life.  To relax, I have always jumped into a good crafting game to make and sell things, which is why I think Wurm Online has held me for so long.  But that is another article for another time.  In recent years, I have found  myself  playing games with an eye not as a gamer but as a developer.  It is a strange transformation.  I went from wanting to learn how a game was played to thinking how I would do something differently than the developers.  This progressed into habits of jotting down ideas, designs, features, and systems that only existed in my mind.  I kept asking myself, if I created a system for this or that, what would it look like and how would it work?  This documentation has accumulated into an embarrassing amount of amorphous content.  To be honest, more than a few times this thought process has completely ruined my gaming enjoyment.  I have to constantly remind myself to be careful not to let it happen.

One day I came to the realization that I wanted to make my own game.  "After all, I am a developer," I told myself.  Since I had no game development experience, I spent a ridiculous amount of time researching platforms and game engines, most of which had steep learning curves and used technologies I was not familiar with.  However, I did have development experience and a skill-set.  I thought how I might take those skills and translate them into a development platform for a game.  For example, taking one of my early concepts, I poked around Google until I was able to find a library for gauges... Yes gauges.  I jumped into WinForms and took off with simulating a crafting system idea I had.  Unfortunately, the following image is all that remains of that effort.

An Early Crafting Concept
This concept involved mixing ingredients to ultimately affect the properties of a component that would be attached to a game item -- think socketed weapons.  There was much intangible satisfaction for me during that time of creativity.  It was pure joy adding random reagents affected by so-called inhibitors and promotors to keep the volatility of my catalyst in the green, while attempting to step through the grades without damaging the catalyst too much.  Each step advanced one of the six properties listed to the right of the catalyst.  Naturally, WinForms was not a game engine and would provide no practical platform.  But I do not think that was my goal back then.  My goal was to test myself!  I wanted to see if my ideas were actually enjoyable.  After all, hobbies are meant to be enjoyable and if they are not, what is the point?  Therefore, games ought to be enjoyable, I thought.

While WinForms was not even a consideration in my mind, there was another set of skills under my hat that I could tap into.  Web browsers have been a very successful platform for gaming, and I had some web development skills.  I decided to dive into making a website that would be a platform for hosting an online game.  This was my first real attempt at bringing my ideas to fruition.  I worked hard for many months on my game concept.  It would be a tile-based 2D game world with some RPG elements, but mainly a sandbox crafting game.  I setup my solution like I would in any real-world application.  I created my data engine, object factory, logic engine, and services console (for real-time updates) as well as my web server to serve up the game.  I also added a WinForms application called the Data Manager to ease management of my game content stored in the database.

Creating the map system was pure joy!  Everything was data-driven.  The player would make a move in a direction which would then summon the updated set of tiles and refresh the page.  I was actually quite surprised how responsive and performant JavaScript coupled with SignalR could be.  But then, it was only running on my local machine.  What kind of lag would it have if I served it up from the web?  I never found out.  The following is the first screenshot I ever took of the "game."

First Screenshot of the Web Game
This was meant to represent a castle with a moat.  The yellow square was my "character".  Each tile had 4 sides which could display the walls in a top-down fashion.  This small feat really encouraged me.  I went back and re-worked the tile images until it looked like this.

The Castle
It was during this time that I learned how to work with vector graphics using Inkscape.  I wanted to use vector graphics because they can be scaled with no loss of quality.  However, due to the limitations with vector web libraries, I ended up having to convert them to raster (pixel) graphics.  This took me back to my old staple image editor Paint.NET.  Work on this game continued for several months.  I borrowed some public domain game assets and expanded into different tilesets.  I added trees and a growth engine.  I also mocked up a game screen with various windows, including a map window, chat, inventory, etc.  By this time I was focused on making my game similar to a MUD, only with a more visual aspect to it.

A MUDDY Look
I wanted the world to have more depth than a flat 2D map.  This led me to modify the game engine to provide a Z-level for an underworld.  The player could dig a hole to get access to a single underground level.  The result looked like this.

The Underworld
I eventually determined that I would pursue less of a MUD style and more of a graphic-centered game.  This meant moving the map from the far left to the center of the screen with everything else around it.  I was also heavily involved in trying to solidify my UI design tools.  Much was going on as my mind went in all kinds of directions.  I added the code to hide the outside world when a player entered a building.  I added the appropriate walking sound effects for indoors and out.  In the next screenshot, the player stands outside the door of a 6-tile house (top down).  The hole leading to the underworld is just northeast with a convenient ladder leading down.

A Roof and a Ladder
I was also focusing on what I believed would be a necessary immersive component.  I wrote a weather engine that would run via the console app on the server.  It would simulate seasons, cloud cover, wind strength and direction, temperature and humidity, all based on the time of year.  Of course, this meant providing all of the necessary sounds and visuals for the weather system as well.  More graphics, and a "real" player were added to the beautiful clouds that would roll by above when the weather engine was running.  As you can see, the UI was in constant transformation as I experimented with different technologies such as floating and collapsing div panels.

A Weather Engine
 I was able to add a mini map to the game as well as convenient buttons around the map.  It is amazing how often a game is transformed during development.  Things get worked and re-worked over and over.  It is for this reason that many developers rely on an 80/20 rule.  Get the feature 80 percent complete and then move on to another feature or else you will never be able to move on.  There is a lot of truth in that, and I admit it is a weakness of mine not to follow it sometimes.

The Mini Map
Another side project was adding the ability for the Data Manager, that WinForms application, to feed a map directly into the database records.  Up to this point, I was writing SQL scripts to add map tiles to the game.  This was very tedious as I had no way to visualize what it would look like.  The process to feed a map into the database involved identifying a standard set of tile colors to use to represent the various tile types and then reading the bitmap image file into a stream, parsing the colors of each pixel, and creating the tile records based off the color.  The wide screenshot below shows a test map image on the right with the game rendering the player standing at the northern mouth of the river.

Using Images to Create Maps
One of the last screenshots I took of this early game attempt shows yet more UI changes.  At this point, I was beginning to think about inventory code.

Inventory
Facing the UI hurdles around inventory control led me to set this project aside even though I had something I was working on and I was making progress with it.  But enthusiasm gave way to reality.  I began to see the deeper I went in my development of this web server, the more I had to fight with the technologies and tools I was using to make it.  I was sure that the road ahead was a dead end.  Setting aside the project was not easy.  I kept thinking about it and wanting to pick it back up, but I forced myself not to.  I had to step back and re-think my technology stack.  If I wanted to make a game, I needed to choose a game engine.  I needed proper tools.  I went back to my game engine research.

Next time, the quest for a real game engine.

No comments:

Post a Comment

Feel free to leave a comment. All comments are moderated.