In 2018, I wrote a post surveying the Common Lisp games landscape and sharing some of the tools we were using to create Spycursion. Parts of that post were dedicated to explaining why we chose Lisp in the first place; those parts have not changed (much), so I won’t rehash them here. Instead, I’ll update you on our own contribution to Lisp game development and how we got here.
If you’ve been following Spycursion for a while, you know that our first gameplay trailers were built on top of CEPL and QTools. After revealing those trailers, the most common criticisms were about graphics/aesthetics*. For that reason, among others, we knew that we wanted to redesign the client and move away from CEPL and QTools. The big question — the question on which we expended copious team discussions — was what to move to. I won’t get into the options that we looked at and ruled out. In the end, we were most excited by Raylib.
(* Fun fact: I screen recorded those videos on a machine that couldn’t handle the load, and had to reduce quality to prevent stuttering. Mea culpa.)
Raylib is a set of lightweight, open-source game libraries. It is well-documented (with examples!), actively developed with stable releases, runs on at least five operating systems plus HTML5, and has nine years of bug fixes under its belt. For us, there was only one glaring problem: Raylib is written in C. (I apologize for making you throw up in your mouth a little bit just now.) We surveyed the existing Lisp bindings for Raylib, concluded none were where we needed them to be, and decided to wrap our own. Hence, Claylib was born!
Claylib is designed to be a Lispy, beginner-friendly game toolkit. Let’s unpack those two bolded terms, because they’re both important:
Lispy means that Claylib tries to smooth over Raylib’s C semantics as much as is feasible. It is not simply a wrapper around Raylib (though you can use it for that if you prefer). Personally, I like to write Lisp, not “C in Lisp syntax.” That’s why Claylib abstracts C structs into CLOS objects and can manage memory for you using scenes (which do not exist in Raylib).
Beginner-friendly means that Claylib aims to be a fun way to learn Common Lisp, or game development, or both! Raylib itself has a similar stated goal — minus the Lisp, for some silly reason. Arguably, we didn’t have to make Claylib beginner-friendly, but understand that one of our long-term goals is to help boost the community of developers using Lisp and other “esoteric” (but powerful) languages. What better way to do that than by showing off how easy it can be to use Lisp for games, which are some of the most complex software in existence?
At the moment, Claylib is still beta quality and doesn’t have a stable release. It does have a number of examples and some high-level documentation to help you get the gist of it. If you don’t mind “writing C in Lisp syntax,” the wrapper layer that I alluded to above should have feature parity with Raylib. That includes the core, math, and GUI libraries; audio will be coming next.
Finally, for completion, a quick list of non-Claylib CL game engines:
– Trial is probably best known for being the game engine behind Kandria. Clearly suitable for a 2D game, though I don’t have any information about its 3D support. The more your game resembles Kandria (or one of the other example games they list), the better an option Trial is likely to be.
– Virality Engine has some impressive 3D demos. Its GitHub page showed no activity for awhile, but does have a few recent commits, so I hope that trend continues.
– alien-works is a framework of a number of libraries, some in CL, some with C/C++ wrappers. It focuses on performance but appears to be in an earlier stage of development than the other two.
If you decide to give Claylib a whirl, let us know how it goes! We’re excited to see what Lispers and non-Lispers alike can do with it.
(defun james ())
Greetings from your newest member of (defun games ())!
I’m James and I’m excited to join Scott, den, and Mauricio on their (defun games ()) journey.
Who am I?
I’m just a friendly neighbourhood programmer. I briefly joined the tech industry doing R&D for a telecom company after studying computer science. I admit, I enjoyed working there, but the I found it hypocritical to give my time and effort to a company whose priorities, operations, ethics, and alignment I disagree with. After that, I decided to try to make my own way and work on projects that I thought would help the world (rather than just maximizing wealth extraction). I have started some projects like a multimedia streaming service intended to be a reference implementation of my “business ethics” – which I can talk about another time – and some stubs of game ideas. I also contribute where I can to the Gentoo Linux user repository (GURU), and miscellaneous Free and Open Source Software, an idea that if you’re not familiar with I encourage you to investigate.
Why (defun games ())?
There are a few things that piqued my interest about (defun games ())… First, I was impressed with their ambitious first game concept: Spycursion, a near-future MMO focused on hacking and espionage – quite interesting if you ask me! Second, I appreciated the passion, gusto, and down-to-Earth attitude that I could ascertain from reading the (defun games ()) blog. The (defun games ()) guys aren’t your typical Silicon Valley techies carving out the shortest path to millions in profit. They’re actually interested in doing right by gamers and the industry as a whole. I relate to the team’s aspiration to push game development forward (and a little off the beaten path, using Lisp & LFE), to create interesting and useful technologies, and to run a tech company ethically (unfortunately, a rarity).
Oh, and a bonus: the Spycursion game client will be FOSS (we’re not sure about the exact license yet), meaning users could modify it or write their own client and use that instead. This is great! Not only for customization and freedom, but also for safety/privacy: users will be able to see exactly what code they are executing on their machine. And a bonus bonus: FOSS licensing means, in theory, the client could be added to the main repositories for GNU/Linux distributions like Debian, Gentoo, or Guix.
Clearly, (defun games ()) was attractive to me. So I decided to see if I could be of any help. I simply sent an email through the (defun games ()) website and subsequently met with Scott & den via video chat. Our meetings proved my optimistic first-impressions true, plus some. I liked them and I suppose they liked me, so they graciously invited me to the team and here I am!
What am I up to now?
I am working with Scott on claylib, a Common Lisp game toolkit based on raylib, which we will use to write the Spycursion client. I’m also learning Erlang/LFE from den so I can help him out on the server side down the line. I also enjoy learning music and graphics stuff, which I would love to do for Spycursion, but my skills aren’t up to snuff… yet.
Thanks to all of you patiently waiting for Spycursion and rooting for us. We’re all sure at (defun games ()) that we’re in it for the long haul. Stay tuned, friends 🙂
Recently I was reminiscing about some games that seemed not so good looking, but that would not have worked as well with “better graphics”, notice how I quoted that, because we tend to think about game graphics as good when they tend towards photorealism, or are very polished 2D pieces of art (like Cuphead). Suddenly you run into a game like “Thomas was alone”, and you think, I would not change a thing, even though all the characters are colored rectangles.
There are games where the way it looks is somehow independent of the way it plays, think of Nethack, there are people playing that in a terminal, and the graphics are just characters forming the walls, items, and enemies,
there are also people developing 2D tile sets, so a wolf looks like a wolf and not like a lowercase “d”.
And then there are people that have created a 3D interface.
The thing is, the gameplay does not change, because of the type of game it is, in this case a turn-based rogue. There are people that swear that the ascii version is better, there are some which prefer 2d graphical tile sets, and very few prefer the 3D version although it does arguably it looks more modern. Why am I talking about those things in this blog post? Well, because ultimately we will have to choose a look for our game. When you look at games like Fortnite, an ascii version most likely would not have worked. Games like Cuphead were all about achieving a certain look, in this case old time cartoons.
So, How do we decide?
A lot of you saw old versions of Spycursion here and in other places, the look was praised by some people, and criticized by others, the thing is, beauty is in the eye of the beholder.
So what are the right graphics for a game like Spycursion? For one thing we have said it is an RPG, so based on genre there are some expectations, because the more popular MMORPGs are 3D games with character customization, but in reality they range from almost photorealistic like Bless
To cute anime style like Nostale
Or maybe pixel art, like Blossom and Decay
And if we are willing to accept MUDs (Multi User Dungeons) as MMORPGs even text-based.
So, I would say that even more important than the type of graphics is the ambiance that we want to maintain, a dystopian future with some cyberpunk feel, which means the design of the environments and characters should not break the immersion by feeling out of place. You can see that this does not necessarily narrow the art style, the game could work in 2D or 3D. I would stay away from a text-based for Spycursion, due to the dynamicity of graphics compared to text, which will be important in our world, but you can make cyberpunk anime , or pixel art . We want to create a polished cohesive product, with an indie budget, so have to take decisions that will shape the look and feel of the game, without sacrificing quality. Ultimately we have to decide what polished means for Spycursion based on what we can achieve with our budget and resources based on our personal taste, with artistic sensibility the constraints often stimulate creativity, and help to unify the look of the game. We have said several times that we will open-source the front end, and that will allow other people to create different variants of it, but we have to create one that will represent our vision of the world we are creating, and which will hopefully artistically appeal to Hackers and Gamers, we believe that making the right decisions will give us a nice looking, performant and fun game.
What? We’ve had blog posts about the fact that we’re writing Spycursion in Lisp. Some call it secret alien technology. Okay, full disclosure: Lisp as a computing language was created on Earth by a human (his name was John McCarthy) back in the late 1950s. I can’t say whether or not he was inspired by beings from another world. I don’t know for sure, and even if I did, it would be a secret. I would never say. What I do know is that there is a great deal of power packed into the elegant and surprisingly simple programming language known as Lisp. Every few years, we see more modern languages (say, C++, Java, or Python) bringing in “novel” programming constructs into newer releases of the language. Yet, these exciting new constructs are frequently taken from Lisp and often have been part of Lisp since darn near the beginning.
So, it’s a great language if you’re a programmer willing to venture outside the proverbial box. But why did I start off talking about Lisps, plural, as if there were more than one? Simple: there is more than one. In fact there are many. Lisp is actually a family of programming languages. A Lisp can be quite different from other Lisps in much the same way that C++, Java, and Python are different from each other. (If you’re curious, those languages all belong to what could be called the Algol family.) What we have been generally referring to as Lisp is actually a language called Common Lisp, which is the result of an effort to consolidate features from many of the earlier Lisps into one standardized language. Common Lisp is a powerful choice, which allows our tiny team of developers to deliver you a great big gaming experience full of secrets, intrigue, and espionage in a dystopian world just waiting for you to leave your own unique mark on it.
But Spycursion is an MMO. For the three of you who don’t already know it, that means “massively multiplayer online” game. We would like you to know that we are taking that first M very seriously. No doubt you have heard about some online service that fell to its knees at some point because a mass of people all tried to connect to it at the same time. I remember, as a keen example, an evening in recent history when newscasters were reporting the increasingly certain result for a presidential election in the United States. So many people in the country were frightened by the outcome that the Canadian immigration website eventually went down that night. Some people thought this funny. Others thought it worrisome. I thought, Canada did not program its immigration website in Erlang.
So, what’s an Erlang? It’s not a Lisp (though that would certainly have been a sharp guess). It is, however, a programming language and an extremely powerful one at that, just not in the same way that Lisp is known to be powerful. Erlang was not designed to be a general purpose language with Lispy features that lets a tiny development team like ours mould the language itself into the perfect tool to build Spycursion for all of you. Erlang was designed specifically so that when hundreds of thousands (or dare we imagine, millions) of you all decide to play Spycursion at the same time, our servers don’t fall flat as if they had nothing more important to do than to provide information about immigration to Canada to panicking voters.
Erlang is a programming language whose central purpose is to do a massive number of tasks at the same time and also to create systems that never go down, ever. The downside of a language that strives to achieve what no other programming language can is that it is not general-purpose like Common Lisp. Erlang is primarily a server-side language, and so we aren’t really aiming to keep your own personal computer running. Rather, we want to make sure the computers responsible for providing you access to the world of Spycursion are able to keep that world available to you, even if you all decide to enter the game at the same time, even when we have to update our systems, even if we have hardware issues, and even if one of us has somehow missed a bug in our code. (There’s less chance of that in Erlang, but it still happens to the best of us.)
Yet, as we said, Erlang is not a Lisp. We are (defun games ()), which has Lisp right there in the name. (And we’ll give one month of free game play to the first 8 people who figure out how that makes any sense.) Sure the Spycursion client you enjoy on your computer is powered by Common Lisp, but we also want that Lispy goodness on the server side so we can fine-tune our programming language and bring you the best game possible. Unfortunately, there is almost always a trade-off when making design decisions about programming languages. If only Erlang were a Lisp so that we could harness the superpowers of both languages at the same time.
Now I am guessing that perhaps at most three of you have heard of LFE. It may be more of that secret alien technology, but it too was created on Earth by a human (his name is Robert Virding) back in the mid 2000s. LFE stands for Lisp Flavoured Erlang. As the name implies, we have Lisp and Erlang in a single programming language. We at (defun games ()) feel that it truly represents the best of both worlds. We can use the power of a Lisp to extend the language so that it is not only a gaming language, but a language oriented specifically for Spycursion. At the same time we can build the world of Spycursion on the solidly reliable and massively parallel foundation that comes with an Erlang-based application.
So, how many Lisps do we need? To provide you the best massively multiplayer online gaming experience we possibly can, we need two: Lisp Flavoured Erlang to serve you en masse and Common Lisp so we can delight you individually.
My name is Shawn Whitley, and I’m going to be helping out around here with with (defun games ())’s… fan engagement. Expect to see me soon on the Discord channel, Reddit, and anywhere folks are talking about Spycursion.
I love MMOs and have been playing them since Ultima Online. Most of the ones that followed were variations on that same theme and genre, and after 20+ years, I’ve gotten a little tired of the fantasy MMOs. Unfortunately, it’s been hard to find a science fiction that clicked for me. I still wanted to play a character, not run a starship. I like near-future, dystopic science fiction more than deep space, forgotten-earth-themed games.
The closest I got to that experience was pen and paper games (hello, fellow kids). I played Traveler, which allowed for some roleplaying and character development, but was still divorced from a modern reality.
The best dystopic game I’ve run across is Paranoia, which brings me to how I got involved with defun. Dennis (den) Drown and I became friends in junior high. He was a transfer student who came in halfway through the year. I invited him to be lab partners with me a couple of other nerdier friends of mine, and before long we realized we had a ton in common. We quickly bonded over (Advanced) Dungeons & Dragons and Commodore 64s (later 128s, not to brag), and ultimately went on to become college roommates. With no exaggeration at all, Dennis is the best GM/DM/referee around, and the Paranoia game he ran was imaginative, bewildering, and most of all fun.
So, in our first conversation in a few years, Dennis told me about Spycursion- and it resonated with me: Post-apocalyptic, Mr. Robot-esque hacking and top .1% villainy. He, Scott, and Mauricio are building the game I’ve wanted to play since I knew what an MMO was.
I’m not a developer; I’m an enthusiast. And while I won’t be doing any coding, I do feel inspired to help share the feel and function of the game. And I want to do that with the buy-in and enthusiasm of all of you who have been following these guys on their journey to create it.
In my short time on board, I can tell you that their passion is to make a game unlike any of us have seen before: a smart, immersive, exciting multiplayer experience. I look forward to hearing everyone’s comments and responding to everyone’s questions..
Here at (defun games ()) HQ, we write a lot of posts about game development. This time, I’d like to take a step back and discuss (defun games ()) itself — the company we’re building, how we’re building it, and why.
If you pay much attention to the gaming industry, it’s hard to miss the complaints about “pay-to-win” microtransactions, rushed releases, and game developer burnout. These anti-features hurt the industry in the long term, and can only lead to disappointment for everyone involved. We believe there’s a better way to build a game studio:
We believe in big, hairy, audacious games. Plenty of well-meaning folks have advised indie studios like us to start off with simple platformers or clones of popular mobile games. AAA studios, meanwhile, are infamous for rehashing the same franchises ad nauseum. While those games might be easier and/or safer to make than a cyberespionage MMO, in my humble opinion, they’re a lot less satisfying — not only to make, but also to play! That’s why we’ve dedicated ourselves to what we call Big Hairy Audacious Games. Because at the end of the day, that’s what gives us, and our games, meaning. Speaking of which….
We believe that games can be more than just entertainment. For those who choose to use it as such, Spycursion will be as much an educational tool as a game. This is not an accident! So-called “serious games” are not new, but we believe that game developers (not to mention humanity) would benefit from helping to make them more common and more popular. This topic is worthy of its own post later on. For now, you’re probably wondering how we hope to accomplish all of this…
We believe in working smarter, not harder. By taking advantage of procedural generation and other secret alien technology, we can of course save time. But we don’t do that just so we can produce more games more quickly — we do it to preserve the sanity and work-life balance of everyone who works on Spycursion and other to-be-determined games. It would be all too easy to follow the broader societal trend of “do more with less,” but we believe the end results of that are flawed products and burnout. That’s another reason why…
We believe in releasing games when they’re ready. Most AAA studios announce their games’ release dates weeks or months in advance, usually timed for the late autumn or another similarly heavy game-buying season. This is a standard “best practice” for marketing throughout the industry, which would be all well and good, if not for the inevitable technical hurdles that are also prevalent all over the industry. So what happens when marketing and development disagree? Too often, the answer is: Crunch time! We believe, as above, that forced crunch time can only lead to flawed products and burnout. Our goal is to make games that are well worth the wait (Spycursion included!), and for our fans to know that they will be, in part because…
We believe that “winning” is a skill, not a price. Remember back in the days of video game arcades, putting quarters into machines in exchange for play time fragging/dunking on your friends? And do you remember how, if you put in more quarters than your friends, your characters would become faster and stronger and have better abilities? No, I don’t remember that either, because being able to pay for a gameplay advantage would suck all the fun out of any game. We believe in fair monetization schemes that reward strategic gameplay, not wallet size.
If you’ve read this far, hopefully this paints a picture of a game studio you’d like to support… or work with. If you happen to be in the market for a startup gig and would like to help us grow (defun games ()) into the studio it’s meant to become, take a peek at the Join Our Team page for more information.
NPCs. Are they needed?, what do the game designers accomplish by using them in a MMORPG. Ever since the first MMORPGs NPCs have been there, to give you your first missions, feed you pieces of lore, buy and sell items, give you hints about the overarching goal of the game, sometimes even deceive you and make you loose valuable time or resources. The ones that give you info, normally either repeat the same things to you, or if you choose different dialog, it may give you new information, some times they will only give you new information once you give or show them something, or complete an objective. There is a story happening in the world you are going to be living in, and the other players don’t know it, so we depend on NPCs to tell the story in small chunks, as you progress.
Normally NPCs are always in the same place in a map, you will pass near them and they will have some indication that they have something to say to you, an icon floating above their heads, or some other marker, in some games they talk to you as you approach them. This works well, and has become a standard way for the designers to interact with the players, but we plan to do it a bit more interesting by giving the NPCs a life, of course we are not saying that they will be artificial life forms, that would be too ambitious and unnecessary, the most interesting interactions should be human to human, but what we are planning is for the NPCs to have motivations to move from place to place, and carry on with their own lives, that is, the shopkeeper will open and close his store, have a house to go to sleep, have a lunch break , get out of the store for this or that. Some NPCs will meet you at certain prearranged times and locations, and may change their dialog periodically, as things happen in the world.
All of these will make the NPCs in the “Real” world, feel more alive, and will give opportunities to implement other game mechanics, in the future, like heists, breaking and entering, and similar stuff.
On the other hand we will also have NPCs that will communicate with you in the “Cyber” world, mainly by chat, some will even be faceless (in other words won’t show their real identity to you), they will offer you jobs, inform you about events, ask you to go to a gathering or meet with someone, etc. They may be AFK at times, or completely disappear, whatever helps convey the story we are trying to tell.
Of course you can ignore NPCs, and try to go around the worlds of Spycursion with no purpose or background, and there may be some consequences if you fail to comply with an NPC’s request, but why would you? Our plan is to have NPCs that enhance the experience, give you valuable information, and help you get started and meet new friends and foes.
We expect to have a lot of information puzzles to put together, gathering the information and piecing together what it is beneath the surface of the daily life in this world should be as rewarding as hacking and spying more directly. Unearthing the secrets of Spycursion may change your view of the world and your alliances, and may give you an idea of what you are getting into when you decide to take a job, or hack/spy on a particular institution or individual. The NPCs may give you enough hints, to better understand the world you are living in.
There is a lot of job to do here, but we don’t have to do it all at once, and we won’t, a good set of NPC interactions will help keep the game fresh for all players, giving them an incentive to keep coming back, which is the final goal.
Hello, Spycursion fans. My name is Den Drown. I have heard at various points that there are eight or three or a handful of you. I had better introduce myself now, before you number in the hundreds or thousands. (Dare I say millions?) However many of you there are, know that I am thrilled to be part of the team bringing you Spycursion. I know you’re simply going to love this game.
How can I know this when I’m just meeting you now, virtually, on a blog post for this odd company (defun games ())? Essentially, I believe you’ll love the game for the same reason that I do. The people bringing it to you are thinking of you at every step. This is more of a challenge than you might imagine. Some of you are interested in learning some programming. Some just want to have fun. Generally, you think a dystopian world, rife with espionage and subterfuge, sounds intriguing. You are, of course, right about this, but your intrigue takes shape in various ways. Some of you feel a deep desire to make this tragic world a better place. Others feel they can understand the chaos, allowing them to manipulate it, bending it subtly to their will for fun and for profit. Finally, our greatest challenge will surely come from those among you who seek some winding path between the noble goal and the devious one. What are you looking for when you step into Spycursion?
No doubt, you’re already aware that (defun games ()) is coding Spycursion in Lisp. Believe it or not (likely a good number of game developers will not), this is a very good thing. My first experience with Lisp was way back in 1989 when I took a course in Common Lisp as an elective in the computer engineering program at North Carolina State. That was the semester I truly discovered the magic in programming. My career in software development has largely revolved around the languages of the industry (C/C++, Java and several others of their persuasion), but over the last several years I have been fortunate enough to find (or create) opportunities to design and develop systems using a number of languages that allow the coder to ultimately go beyond what is readily doable using a “mainstream” programming language. Most of these marvelous languages are members of the Lisp family.
Lisp is a key reason that I am joining Scott and Mauricio as we dedicate our blood, sweat, and tears to bring you Spycursion. Lisp does more than make it possible for a tiny team like ours to create a professional game that will thrill you, delight you, and even allow you to learn something in the process. John Foderaro called Lisp a “programmable programming language,” and it is exactly that. We are molding the very language used to create Spycursion into the perfect language to express in code the world that the game represents. To me, this beats the approach of plugging the game context into a mainstream gaming engine. It beats it by a mile.
I may be biased. Lisp has historically been considered the language of artificial intelligence, and here I am joining (defun games ()) just as I am working to finish up a PhD in cognitive computing. However, if you are already a fan of Spycursion, well before even a beta release, then I bet you can guess how AI-oriented design and Lisp are a natural foundation for a game that challenges you to survive and even thrive in a world where technology is perhaps the only thing holding everything together. In addition to AI, I will be drawing from a background in computer-telephony integration and information security. I look forward to putting these skills to use so that you may lose yourself in the dangerous and captivating, technological world that is Spycursion.
As a team of (currently) just two developers, people often ask us how we can possibly create a game as expansive as Spycursion. If you ask someone who doesn’t make games for a living about their idea of what an MMO is, the first game to pop into their head is likely to be World of Warcraft — a 16-year-old behemoth created by a company with over 4,000 employees and billions of dollars in revenue.
Fortunately for us, Spycursion is not World of Warcraft, nor is World of Warcraft synonymous with the MMO genre!
In order to “catch up” with the big players, indie studios making big games need to be creative about where to focus their efforts and where they can “cheat.” This is where procedural generation comes in. To illustrate procedural generation, I’d like you to walk through a short exercise with me: Grab a pencil and paper and draw a house. Your house should have four walls, at least one door, at least one window, and a roof. The other details are up to you.
Go ahead and draw that house now. I’ll wait.
… You don’t seem convinced that this has anything to do with procedural generation. That’s okay, do it anyway. 😉 When you’re done, send this blog post to a friend and have them draw a house as well, with the same specs. (Yes, it’s relevant, I promise.)
Now compare the two houses you and your friend have drawn. Unless you and your friend are part of the same hive mind, your two houses should look at least somewhat different. And it’s easy to understand why; the key lies in that phrase, “the other details are up to you.” Your house could be in 2D, or if you’re good, maybe it’s 3D. Maybe your house has a chimney, maybe it has landscaping. Maybe the front door has a door handle, or maybe you forgot that rather important feature. Maybe you went on an interior decorating binge and drew stuff inside the house. Maybe your house has a balcony, or an attached garage, or a rooftop garden. Maybe your house looks like it was drawn by a chimpanzee. Maybe you are a chimpanzee.
Point is, if you were to assign this task to 100 chimpanzees, you would get 100 different houses. Add in some roads, and you have a neighborhood. Have the chimps draw 100 different neighborhoods (with different specifications like density, age, residential vs. commercial zoning, etc.) and you have a city. Now replace the chimps with a computer, and there you have it — procedural generation!
With the right algorithms, a small studio can use procedural generation to create game worlds that look like this…
Or even this…
Spycursion uses procedural generation, in various places, to help generate its “real” world as well as its virtual one. In the last trailer, by contrast, neither the demonstrated city nor the internet were procedural. The city in our Kickstarter trailer was a big hand-crafted grid, and there was only one of it. The “internet” was just a couple of devices. Nowadays, our test version of the in-game internet is a graph of 10,000 devices, and that will be expanded later (and expanded by players, of course). The world can contain up to 300 cities spread across every continent, with the ability to quickly add more, should the need arise.
With the help of
chimpanzees algorithms, the two of us are working hard to bring Spycursion’s immersive twin worlds to life. Eat that, World of Warcraft.
I was looking at our previous posts and I noticed that Scott had written a bit of an overview of what the server does, but I never made any attempts to make any explanations about the client, I guess that somehow I tend to think that everybody knows, but some times is better to talk about what you think everybody knows. The client, is, after all, the most visible part of the game.
If you write a single player game, normally you can get away with having everything in a single place (the executing machine). The natural question when you have an online multiplayer game is, What can you have in your client and what must be on the server?
Let’s imagine a simple game which can be played online, “Air Hockey”, and of course, keeping it simple, just two players. Each client could have a map (the table), the assets (the paddles and puck graphics), the sound effects and music. Since each player is using a different computer to render the table, paddles, puck etc, we could quickly come up with two versions of the world, the one you see and the one your opponent sees, and that can greatly affect game-play. If you try to block the puck but it is not where you thought it should be, then you could unfairly loose a point.
Right away we understand why we need a system to make our worlds as similar as possible. So both clients must communicate with the server, and tell it where the paddle is, what is its speed, and perhaps some other information, the server in this case will communicate to both clients where the puck is, what is its speed and direction, where is your opponent’s paddle, and how it is moving, state that tells you if the puck collided and what it collided with, etc.
Now, in order to render things as synchronized as possible both clients must communicate with the server as frequently as possible, because the server is the source of truth, but at the same time there may be limitations that can cause you to not be able to receive/transmit in each frame, however the game must maintain its fluidity, so your client must be able to decide what to do when it does not receive information from the server, and then communicate to the sever what happened so it can re-sync stuff.
What happens if you get disconnected? the client should be able to determine if it lost it’s connection with the server, and have some way to get you out of the game in a way that won’t make your game crash. You might get substituted by a bot, so the other player can finish, but that is up to the server.
Now let’s complicate things a bit, imagine that somebody invented a extreme version of air hockey combined with pinball “Pinbockey!”, there might be obstacles that react to the puck when they get hit, furthermore, imagine that the placement of these things can be customized, and some players create special tables.
When this happens we will have another complication, you won’t have all possible maps in your game, the server must transmit those maps before the match starts, and your game should be able to read that information and render the map as envisioned by the level designer in reasonable time. Asides from just rendering the table, it must be able to understand what events could happen, and how do those events look and sound, all of that “protocol” should be established and the client must understand how the server will communicate the state to it, so it can render things correctly, play the appropriate sounds, etc. The main job of the client’s program is to display the world as consistently as it can to all the players, so all of them are playing the same game, and at the same time respect the physics and rules of the game in between the moments when it gets updates.
So far we have talked about a game with two players, but MMOs by definition have many players, and they could be doing things like jumping, running, engaging in conversation, interacting with the world, etc. Some of those things should be visible, and/or audible to you, each running client should create a representation of that reality which immerses each player in a single cohesive world.
Spycursion is a game with some particularities, you can hack, which means you will have devices that will connect to other devices, and that means that you will have GUIs that should react to devices, some nearby and some remote, which may at the same time be visible to other players,the client in many cases will just be a dumb terminal, or GUI and all of the things happening in this interface actually are communicated to and from the server. All of that must happen while keeping the physical world around you going, because Spycursion is also an espionage game, and people around you will be watching and hearing you and in some cases trying to gain access to your devices.
By this point you might be able to get some idea of what happens in the server and what happens in the client, the only thing I have not mentioned is that any program that is capable of showing a representation of the world that is understandable by the player could be a client for that game, so potentially several clients could be developed for a single game, and the visual appeal and performance of the client has a great deal of influence on the success of it.
I hope this was interesting to you, I tried to keep it non technical so all interested parties can get something from this post, we might revisit some of these ideas in future posts.
I hope you have fun and learn something everyday, and keep an eye on this project, which will give you an opportunity to do both,