M.S. Farzan's Blog, page 4
December 11, 2019
Entromancy: Hacker Battles is NOW AVAILABLE!
Hey agents!I'm so excited to share that Entromancy: Hacker Battlesis NOW AVAILABLE atDriveThruCards!
Entromancy: Hacker Battles is a cyberpunk fantasy tabletop card game for 2 players. In Entromancy: Hacker Battles, you and your friends will take the roles of hackers and engage in fast-paced, strategic card battles to deploy devastating programs and attempt to overcome each other’s security protocols.


Competitive Card Game Mechanics. Draw cards to build and unleash devastating programs upon your opponents while gaining bit points to overcome their security protocols.Customizable Gameplay. Choose from five distinct specializations and multiple objective cards for a new experience every time you play.Expandable Up to 4 Players. Engage in fast-paced 2-player card battles where strategy is paramount to victory, and add extra decks to play with up to 4 players.TCG Gameplay, Reimagined. Experience strategic card battle mechanics without having to collect extra cards to succeed.We can't wait for you to play!-M. S. Farzan
Entromancy: Hacker Battles is a cyberpunk fantasy tabletop card game for 2 players. In Entromancy: Hacker Battles, you and your friends will take the roles of hackers and engage in fast-paced, strategic card battles to deploy devastating programs and attempt to overcome each other’s security protocols.


Competitive Card Game Mechanics. Draw cards to build and unleash devastating programs upon your opponents while gaining bit points to overcome their security protocols.Customizable Gameplay. Choose from five distinct specializations and multiple objective cards for a new experience every time you play.Expandable Up to 4 Players. Engage in fast-paced 2-player card battles where strategy is paramount to victory, and add extra decks to play with up to 4 players.TCG Gameplay, Reimagined. Experience strategic card battle mechanics without having to collect extra cards to succeed.We can't wait for you to play!-M. S. Farzan
Published on December 11, 2019 09:00
November 22, 2019
Not-So-Super Villains is Now Available!
I'm excited to share that Not-So-Super Villains is now available on DriveThruRPG!
Not-So-Super Villains is a comic book-inspired, one-page super villain RPG. In Not-So-Super Villains, you’ve been hit with a cosmic blast that has enabled you with super powerful mutations, while also accentuating some of your best and worst personality traits. You’ve thought long and hard about using your newfound powers for good...but that’s no fun!Click here to download Not-So-Super Villains for free on DriveThruRPG!-M. S. Farzan and The Nightpath Publishing Team
Not-So-Super Villains is a comic book-inspired, one-page super villain RPG. In Not-So-Super Villains, you’ve been hit with a cosmic blast that has enabled you with super powerful mutations, while also accentuating some of your best and worst personality traits. You’ve thought long and hard about using your newfound powers for good...but that’s no fun!Click here to download Not-So-Super Villains for free on DriveThruRPG!-M. S. Farzan and The Nightpath Publishing Team
Published on November 22, 2019 11:46
November 17, 2019
Take a Tour of Unity 2D!
Get an overview of Unity's 2D features to help streamline your game development and workflow!Happy watching!-M. S. Farzan
Published on November 17, 2019 11:25
How to Set Up an Integrated Development Environment (IDE)
Learn how to set up an Integrated Development Environment (IDE) to help streamline your coding workflow!Happy watching!-M. S. Farzan
Published on November 17, 2019 11:24
October 31, 2019
What 2D Game Engine to Use for Your Next Game
If you're shopping around for an engine for your next 2D game, this article will provide some things to consider that may help in your discernment process.Do note that I'm not attempting to cover every 2D game engine out there; nor am I positioning one engine or framework over another. These recommendations are from my personal experience using different engines and frameworks for prototyping.And if you'd prefer to watch rather than read, I've created a video version of this post (26 minute watch):ReactAt first glance, you might be thinking, "React is a front end framework for making interactive websites. It's not a game engine!" And you'd be mostly correct.React doesn't provide native support for game development basics, like, for example, 2D physics, but it does handle state extremely well. If you're already a JavaScript developer and willing to pair React with something like boardgame.io to make a simple 2D game, you could potentially get a prototype up and running pretty quickly.For all other types of 2D games, you'll want to look elsewhere.UnityUnity has made itself ubiquitous in the 2D and 3D game development spaces. I'd position it as an excellent 3D game engine, and a serviceable 2D one.The Unity editor is fairly complex, with a lot of nested menus that take some time to wrap your head around (check out this article for a tour of its 2D features). If you don't already have a background in C#, which Unity uses for scripting, you'll want to brush up on it prior to learning Unity, as doing so will ease your overall learning curve.Unity also does a lot of things the "hard way" when it comes to 2D game development, which doesn't feel native compared to other game engines. Creating a 2D game world in Unity, for example, feels like you're shoehorning a 2D plane into a large 3D space, and things like animation and pixel perfection are more clunky than in other 2D-specific engines.You can make any type of 2D game with Unity if you're willing to wrestle with the editor and underlying 3D idiosyncrasies. It has extensive community support, and you'll find that working with C# is a delight. Additionally, Unity's Asset Store has all kinds of art and templates for you to download and purchase, but buyer beware: you might spend as much time rewriting someone else's code to fit your project as you would just starting from scratch.Unity is, in general, free to use, but pricing becomes more complex if you want to use everything it has to offer (see this page for more details).GodotGodot is a free and open source 2D and 3D game engine that supports GDScript, C#, and even C++ and Python if you're willing to do a lot of the heavy lifting to make them work. It supports a node-style workflow and is super lightweight.If you're a) willing to invest in learning GDScript or b) already super good at C#, C++, or Python, you'll probably be fine in Godot, particularly if you like working with open source software. If not, you may get easily frustrated, as there isn't nearly as much support for C# or other languages as there is for GDScript. Still, Godot is a pleasant engine with which to work, and although it may not have the same pedigree and community support as something like Unity, if you're a self-starter you might feel well at home.Construct 3If you just want to make 2D games and don't care about programming language or subscription fees, you'll find Construct 3 to have everything you need to get a demo up and running, and quickly. All of your work will be done in a browser, using drag-and-drop tools (and custom JavaScript support if you need it).Don't expect to have a meaningfully productive experience with Construct 3 for free, however. There's a simple demo that you can try out, but impactful game development with Construct 3 is locked behind a paywall, and a subscription at that.Game Maker Studio 2Game Maker Studio 2 has a user-friendly editor that supports a proprietary language called, appropriately, Game Maker Language (GML), along with visual scripting. It also has a lot of tutorials, great community support, and an asset store (which comes with the same caveats as Unity's, above).The general workflow of Game Maker Studio 2 and doing things like animating sprites, setting up your game world, and so on, are straightforward and intuitive. GML might not be your cup of tea if you're coming from another, more widely-used programming language, and I would not recommend it as your first introduction to learning how to code. It employs some of the basic concepts of programming, but not important details such as coding best practices or how to write clean code.Additionally, you can try Game Maker Studio 2 with a free 30-day trial, but will need to pay to continue to use it after that time.Phaser 3If you want to code everything and learn a lot about the JavaScript ecosystem while doing it, check out Phaser 3 (or wait for Phaser 4, which is on the way).Phaser is a lightweight and powerful JavaScript framework for making 2D games. Whereas Phaser 2 was extremely well-documented and had excellent community support, Phaser 3 is quite the opposite. There's good official documentation and a bunch of examples (without much context around them, it must be said), and a dreadfully small amount of tutorials.Expect to build everything yourself, but if you're looking for ES6 or TypeScript support, or if you really want to polish your skills as a JavaScript developer, you'll be able to go a long way with Phaser 3.In the interest of fairness, I should mention a two other 2D game engines that have been recommended to me since I started writing on the topic: LÖVE 2D, which uses Lua, and MonoGame, which supports C#. I haven't used either of them (or others, such as PyGame), and can't speak to their usefulness, but they may be worth checking out.Let me know which 2D game engine you wind up using, and why!This article originally appeared on freeCodeCamp.
Published on October 31, 2019 14:52
What 2D Game Engine to Use in 2019
Find out what 2D game engine you should use to make your next game!Happy watching!-M. S. Farzan
Published on October 31, 2019 14:52
How to Choose a Programming Language and Escape Tutorial Purgatory
Deciding on a programming language can be extremely challenging and time-consuming as there are dozens of options out there, with a lot of conflicting information. In this article, I'll share some options based on my own experience learning to code, with suggestions for how to choose a programming language, escape tutorial purgatory, and make progress as a developer.Here's a video version of this post if you'd prefer (11 minute watch):Scenario #1: You Know What You Want to BuildOften, in articles such as these (or in the "What Coding Language Should I Learn?" infographics with which you're probably intimately familiar), you're asked to think critically about what you want to build after you've learned to code.This approach is useful if you have some idea about what it is that you want to do with a programming language after learning it, but not so much if you just want to learn to code, as was my experience. I'll cover both scenarios in this article.If you do know what direction you want to take your coding career after learning a programming language, you'll most likely have an easier time figuring out which language to learn first. Here are some suggestions in that case.Front End Development: JavaScript (and HTML/CSS)If you already know that you want to work on the "front end" of websites - meaning, anything the user sees when they come to a website - you should begin your coding journey with learning JavaScript. You'll probably start out by learning HTML and CSS, which form the backbone of just about every website, and then begin adding JavaScript to enhance functionality and interactivity to your sites.JavaScript is fairly ubiquitous as a programming language, and has an easier on-ramp than other, lower level languages like C++. It's a great jumping-off point if you don't know what you want to learn...but more on that later.Back End Development: Python, C#, or JavaScript (and SQL)Let's say you're more interested in learning about the guts of websites, managing the "back end" and trying your hand at database administration. You've got a lot of options here, and the most straightforward path is Python, which is a beginner-friendly language that has mature frameworks (e.g. Django and Flask) for back end development.You also can't go wrong with C#, which will expose you to Microsoft's .NET ecosystem and a programming language that, once you get into the weeds with it, is a pleasure with which to work. And if you're thinking of going "full stack" - meaning, you want to do front end and back end development - you might consider learning JavaScript, which has younger but highly prized back end frameworks like Express and Koa. Doing so will also ease your learning process as you'll be using the same language to code both stacks.Whichever language you choose for back end development, you'll most likely also wind up adding SQL to your toolbox for database management, so put that on your radar.2D Game Development: JavaScript or C#I've written elsewhere about what engine you should use to make 2D games, but here's the skinny.There are a lot of 2D game engines, many of which may or may not suit your fancy as a game developer, and each with their own benefits, idiosyncrasies, and learning curve. Some of them, like Game Maker Studio 2, for example, utilize their own proprietary languages to run scripts, but I'd actually recommend you first learn JavaScript or C#, even if you're considering using a different game engine in the long run.With JavaScript, you can use frameworks like Phaser to make 2D games, or fully-featured engines like Construct 3 (which actually uses drag-and-drop development with room for custom scripts). If you choose to learn C# instead, you'll work with Unity 2D, or perhaps MonoGame - but I'd actually recommend starting with non-engine tutorials (e.g. .NET)to get a good handle on the language first.Learning JavaScript or C# will give you the foundational coding knowledge you'll need to tackle another game engine, like Game Maker, while also providing you with things like programming best practices and clean code organization.3D Game Development: C# or C++There are a lot of options for learning to code for 3D game development, and I'd suggest you start with C# or C++. In fact, unless you're super tech savvy or already have a background in programming, I'd recommend for you to start with C# and work your way down to C++. You'll have an easier learning curve and will learn fundamental programming concepts without having to deal with things like memory management and lower-level code.You'll probably wind up learning both in any case, but if you start with C#, you can tinker around with Unity 3D, and then make your way to C++ with Unreal Engine 4.Data Science/Machine Learning: PythonAlthough there are options in other languages for learning data science/analysis and machine learning, Python is currently the gold standard for this realm of coding. It's a fairly straightforward language to learn and will expose you to good programming habits and widely-used frameworks, so you can't go wrong here.Scenario #2: You Don't Know What You Want to BuildThere's the distinct possibility that you've spent days, weeks, or even months searching through articles, videos, reddit posts, and Stack Overflow questions reading about programming languages, and still have no idea where to invest your time because you don't know what you want to build.I've been there. It's annoying.My recommendation to you, trite as it may seem, is to just pick one. Literally any one of them, even if they're not listed here. Go learn JavaScript. Or Python. Or Rust. Or Haskell.OK, maybe not Haskell. But pick something, and stick with it long enough to learn the basics and see if there's a possibility that you might like using that language to build with it. And keep in mind two things as you do so:Set a time limit for yourself. Like, "I'm going to take the next three months to learn JavaScript using freeCodeCamp tutorials." If, at the end of that period, you feel like you're making progress and it's interesting to you, keep going! If not, it may be time to reconsider your choice of language and see if there's something out there that might be a better fit for you.Build something that's not in your tutorials. This is a crucial step in your growth as a developer. I'll cover it in the next section.Scenario #3: You're Stuck in Tutorial PurgatoryIf you've found yourself doing tutorial after tutorial, on the same or different websites, without ever actually feeling like you're making progress, you may be really frustrated with the experience of learning to code. I've been there, and can help.The first step is to consider what programming tutorials are good for, and what they are not. Most online tutorials - particularly ones that allow you to code right in the browser - are excellent for teaching you how to program.They are not, on the other hand, good for teaching you how to be a programmer.The best tutorials will expose you to fundamental coding concepts and require you to apply that knowledge to solve puzzles and projects. They're wonderful learning tools that can, if used beyond their scope, become crutches that will stifle your learning.A programmer, for example, doesn't sit around all day doing tutorials. A programmer programs, and that's precisely what you need to do to make progress after you've mastered the basics.The best way to make progress as a developer is to pick a project in your language of choice and set out to do it. If you're learning JavaScript, for example, you might choose to build a simple website with HTML/CSS and add some interactivity with jQuery. You'll probably start out by setting up an integrated development environment, immediately forgetting how to do something that you learned in your tutorials, get frustrated, head to Google, find the answer, and keep going. Then you'll make progress, get stuck, search Stack Overflow, scratch your head at the official documentation, maybe share your code with someone, and repeat the whole process.And you'll be doing exactly what programmers do when building a new project.Finally, you really can't go wrong with what programming language you choose, even if it's not on this list. If you wind up picking one, learning the basics, making a project, and deciding it's not for you, that experience will actually still help you in the long run. The information you'll learn in the process will be useful, irrespective of whatever language you end up using for your projects.You can do it!-M. S. FarzanThis article originally appeared on freeCodeCamp.
Published on October 31, 2019 14:50
How to Choose a Programming Language in 2019
Find out what programming language you should learn and how to escape tutorial purgatory!Happy watching!-M. S. Farzan
Published on October 31, 2019 14:50
How I escaped from tutorial purgatory and learned to code - and how you can, too.
Context: I'm a tabletop game developer and digital marketer, and, having spent a long time around games and computers, decided I wanted to learn to code about 3 years ago.I set off as many do by searching, at great length, for what language I should learn, and where from, returning to this topic several times over the course of my journey. I came across several threads suggesting one language or learning platform over another, and thought to share my particular experience in case it's helpful for someone else in the same discernment process.Disclaimer: I'm not a professional programmer, and although I am using my skills to benefit my work (you can read about my search for a prototype framework here), coding continues to be additive to my main work rather than a source of income, whatever that tells you.Also disclaimer: I'm not attempting to position one language or learning platform over another, and I quite obviously haven't tried to learn every language out there, on every platform. The following is just my experience trying to figure out the most sensible way forward in an admittedly confusing environment.You can also skip to the bottom for the TL;DR.Prologue: C++I'm not quite sure if I already knew that C++ was and continues to be a cornerstone in video game development. Maybe I saw it in one of those "What Programming Language Should I Learn" infographics that are around. But I wanted to know more about how games are made and how to talk to the computer. I'm pretty tech-friendly and have built or tinkered with my own PCs, thinking that might lend itself to the experience of learning how to code.Holy smokes, was I way out of my depth. I did a few tutorials online (I think through learncpp or similar) and soon realized that I would need more guidance to understand basic object oriented programming principles, in perhaps a more readily accessible language, than I was finding in learning C++.HTML, CSS, JavaScript, and PythonBefore embarking on this adventure, I already had a little HTML experience, and came across Codecademy. I very much liked the ability to do tutorials from within the browser and without having to set up an IDE (doing so for C++ had been a trying experience). I quickly consumed all of Codecademy's lessons on HTML and CSS. The natural path from that point was to do the JavaScript course, which I enjoyed. But I soon found myself in "tutorial purgatory" (not my reference), working through the Python course and others.I should also mention that I completed Codecademy's courses as a free user, not wanting to pay a subscription fee for what they were offering at the time, which included projects and mentor support.I learned a lot of basics from Codecademy and general OOP principles, but didn't wind up applying much of it without a clear path forward. I returned to my search (who am I kidding, I've spent a LOT of time concurrently researching other languages, learning platforms, and bootcamps throughout the whole process) and decided I wanted to learn more about game development through courses on Unity.C#I found Ben Tristem's Unity course on one of Udemy's perennial 10000% off sales, and worked diligently through the tutorials to build clones of 2D brick breaking and other games. I learned just enough C# to get by but not enough to feel confident in making anything myself.Unity itself was probably more of a roadblock here than Tristrem and co.'s instruction, which was actually quite good. The Unity editor is a beast of an engine, with a lot of good tools that are impenetrable to a novice user (again, you can read more about my experience with Unity here).I still feel like I learned a lot from the courses and the simple act of being exposed to C# and Unity's desired work flow, but wasn't getting enough out of the experience to continue. A friend of mine tipped me to take a look at freeCodeCamp, which is where I went next.Back to JavaScriptOn first blush, freeCodeCamp has the look of a less flashy Codecademy or Treehouse. But I liked how straightforward the tutorials were and didn't need to get past a paywall to make progress. I picked up where I left off with learning HTML and CSS, making good progress until I got to the Responsive Web Design projects that are required to finish the first section and receive a certification.I can say with certainty that this was the moment (or series of moments) of my ejection from tutorial purgatory. For a novice with no real professional web design experience, and a willingness to figure out my own solutions without Googling the answer, the projects were hard. I eventually won out and made a couple of silly sites that satisfied the requirements, but the experience spurred me to work through several more freeCodeCamp tutorials on JavaScript front end libraries and back end frameworks.More importantly, I started to work on my own web-related projects on CodePen and game projects using a bunch of different engines. I also started using Python to do some basic social analytics in my day job, and found it helpful.Post-Tutorial PurgatoryFast forward much time later, and I'm now working on several game-related projects in Phaser and Unity (most notably, a digital prototype for a tabletop card game I'm developing). I've spent a whole heck of a lot of time in framework documentation and Stack Overflow looking for answers and best practices for stuff (linking this post one more time for good measure). I also have developed friendships with a few colleagues who are themselves programmers, and it's been helpful to run code by them for advice and feedback.One thing that's been helpful about working on my own projects is just the basic experience of setting up a workflow. Learning to use the command line and Git in concert with setting up NPM and a code editor, for example, was eye opening (particularly coming from CodePen, which just does everything for you). For better or worse, most tutorials don't expose you to the nit and grit of the tools that you'll need to get your work done, and there's a lot to be learned.If you're reading this and looking for the "and I just got my first job as a programmer!" statement, I'm sorry to disappoint! That hasn't been my objective (at least thus far), but I do have some basic TL;DR learnings to share that may be helpful for anyone who's also on the search for a programming language or how to escape from tutorial purgatory.TL;DRJavaScript:Pro: A very good entry point into learning object oriented programming, particularly if you're interested in any kind of web development (front or back end). You can learn this through most platforms, but my experience was best served by freeCodeCamp.Con: Many sites will tell you that it "just runs in your browser" so you "don't have to set up an IDE" and is thus easier to learn, but this mindset will only take you so far. If you're going to do any meaningful development with popular JavaScript frameworks (React, Vue, Express, etc.), you'll wind up setting up something IDE-adjacent with a code editor, package manager, dependencies, etc., without the kind of support you'd get from, say, setting up .NET or similar.Python:Pro: Super friendly for newcomers if the curly braces in other languages are intimidating at first, and a good point of entry if you're interest in getting into back end programming or data science. I had a good initial onboarding experience through Codecademy.Con: Your options are a little limited if you're looking to get into front end or game development. There are frameworks, for example, that allow you to make games (PyGame, for instance), but if you're specifically looking into game development, you'd be better served elsewhere.C#:Pro: A very pleasant language that's well-supported by Microsoft and the open source community. With it, you can do back end development, make desktop apps, create games (mostly with Unity but there are other engines like Monogame out there). It may be an unpopular opinion, but I'd recommend first learning C# through Microsoft tutorials or elsewhere and then learning Unity to ease some of the cognitive load imposed by the editor's complexity.Con: Not much to speak of here, unless you really don't like Microsoft or really do want to work on front end web development (I suppose you could look into Blazor, but I wouldn't recommend starting here). I could speak volumes about how Unity can improve its user experience, for example, but C# itself is great.General Thoughts on Learning and Escaping Tutorial Purgatory:One of my frustrations in my process of asking the question "what programming language should I learn?" was what I felt was the insufficient answer of "well, what do you want to build?" I encountered this answer a lot, and don't think it's the right way of approaching learning how to program if you don't already know what you want to do with it. A beginner doesn't have enough context to know what they can build, let alone the route to get there (unless they're the type of person that just wants to make games or just wants to land a job as a web developer).A better answer would be to say, "try a few tutorials on different sites and in different languages, and see if something strikes you as interesting. If it does, stick with it; if it doesn't, pick one at random and see where it takes you. The stuff you'll learn will help irrespective of what you actually wind up doing."Additionally, if you can force yourself to get out of the tutorial ecosystem and just make anything outside of the protected environment that's been set up for you, it'll help teach you things you'll need to eventually know, such as setting up an IDE, searching for answers to questions, and sharing your work.I hope this post is helpful for others out there who are searching for a programming language or a way to escape tutorial purgatory and build cool stuff. And I'd love to hear about your experiences, too!This article originally appeared on freeCodeCamp.
Published on October 31, 2019 14:45
I attempted to make the same 2D game prototype in React, Unity, Godot, Construct, Game Maker, and Phaser. Here's what I found.
I'm a tabletop game developer. In designing a new card game, I decided to build a digital prototype to help me run simulations and easily share a proof of concept with collaborators.I have some background in JavaScript and C#, and I set out as many do: by spending an inordinate amount of time in "what framework should I use" threads and reading documentation without actually making anything.Flash forward many months, and I've now spent more time working in (and wrestling with) React, Unity, Godot, Construct 3, Game Maker Studio 2, and Phaser 3, in an attempt to understand what makes them tick.Admittedly, I think I've spent way more time in each of them than necessary to make my little game, and I probably could have just stuck with the first one and blundered my way through the prototype. I'm hoping the below info will be helpful for anyone else who is shopping around for an engine or framework.Bunch of caveats: I'm not attempting to sell one engine or framework over the others, and I'm also not suggesting that one or any of these frameworks will work for your game better than another. I'm also not comparing pricing, back end functionality, or platform deployment. So depending on your requirements, the below information might be of differing value to you.Additionally, this experience is based on development for a 2D card game, so I won't be discussing 3D engines, physics, etc.You can also skip to the bottom for the TL;DR.The PrototypeMy game, Entromancy: Hacker Battles, is a competitive cyberpunk card game with TCG-light mechanics. You can read more on our website or watch how it's meant to be played in this video. But suffice it to say that, as a card game, it requires a potential digital framework to support basic things like state management, UI, drag-and-drop UX, and back end hooks for implementing multiplayer.Given these requirements, I explored the following frameworks and engines to see which one would be most suitable for making my game...instead of actually making the game (I'm happy to say that now that I've settled on a framework, I'm making a lot more progress).You can access a playable version here, and although the game is further along than the live prototype would suggest, this version is pretty stable (in Chrome at least).ReactHaving already built a character generator prototype in React for a tabletop RPG I designed, I thought a natural step would be to give the framework a spin for the card game. I found state management to be a breeze (it's what React does, after all), whereas implementing simple drag-and-drop functionality for cards proved to be a nightmare.There are some libraries out there that can help with basic drag-and-drop (e.g. React DnD), but I found that with a card game, I needed a more elegant solution for dropzones, as Hacker Battles is very specific about which cards can be played where, and when.This experience led me to check out boardgame.io, which can work in tandem with React. But this ultimately required me to learn another framework on top of an existing framework, which was less than ideal for my purposes.UnityOut of general interest, I had spent a lot of time in Unity doing tutorials and learning how to use the editor before attempting to remake the card game prototype with it. The asset store is a great resource, and there's so much documentation, official and unofficial, out there that I was confident I could find an answer to any issue I might encounter.My experience with Unity thus far has been a mixed bag. I really enjoy working in C#, and anything code-related has been a relatively pain-free experience. However, Unity is very specific about its implementation and can feel counter-intuitive at times.The editor, on the other hand, is a bear to work with. To harness Unity's full potential, you need to spend a good long while wrestling with the UI to understand where everything is and how to use it. It's also desperately behind the times with 2D game development, clearly attempting to flatten a primarily 3D engine into a 2D plane, with mixed results.To be fair, I quite enjoy working in the Unity editor, clunky as it is. But if you're looking for a 2D game engine, your quality of life will be a lot higher elsewhere (watch a video on Unity's animation system or achieving pixel perfection and you'll see what I mean).Ultimately, Unity's handling of the 2D space is a bit more complex than I need for my prototype, but I will return to it for other types of games.Also, a sidebar that might be useful to some: I was initially extremely excited about the asset store, with the idea that I could purchase a card game template that would make the development process that much easier for me. It didn't work out. Most of them were MTG/Hearthstone/etc. clones that would require just as much development time on my part to restructure them for my card game as it would to just start from scratch. GodotMy first thought upon encountering Godot was: "open source game engine that supports C#? Sign me up!" Then I downloaded it, worked through a couple of basic tutorials, and had it crash on build. Hurm.Several Google searches, reinstalls, and hairs pulled later, I figured out it had something to do with my version of VS Build (I think?), which led me down a separate rabbit hole. I knew from experience that other engines - Unity chief among them - could cause game-breaking issues completely outside of your own code, but this was an annoying hurdle that likely colored the rest of my experience with Godot.In terms of the editor, I quite liked Godot's node-based implementation, which I actually found counter-intuitive coming from Unity's prefabs, but eventually warmed to. I'd actually go as far as to say that its 2D functionality is better than Unity's, but it's missing the community, asset store (see sidebar above), and especially, the documentation that Unity has. If you're intending in working in C# with Godot, for example, be prepared to look for answers in the engine's custom GDScript and then translating them to C#.I have heard, however, of people experiencing great success with Godot while using GDScript, so if you're willing to invest the time to learn it you might enjoy what Godot has to offer.Construct 3In the caveats that I listed above, I mentioned that I'm not including pricing as a point of discussion. Still, I feel like I need to bring it up with Construct 3, as it turned out to be impactful in my experience.Unlike the other game engines listed here, which are, for the most part, free to use (Game Maker Studio 2 has a 30-day free trial), the vast majority of Construct's functionality is behind a pay wall, and a subscription fee at that. Ugh.I really, really like the cut of Construct's jib for simple 2D games. The editor feels a bit like an upgrade from MS Paint, but it handles sprite and object management really well, and is just plain easy to use. I don't love that it uses a "visual scripting" style, but they've recently added the feature of writing plain old JavaScript and it seems to more or less work.I was able to spin up a very rudimentary architecture for the prototype in a brief amount of time before closing the Construct 3 demo (which runs in a browser)...and then trying it all again later with a new demo. I feel like, at least for this card game, I could do a lot with Construct 3, but I'm just not willing to pay $99/year (or more, as a business) for a prototype.Game Maker Studio 2YoYo Games has clearly done a lot of work to make Game Maker Studio 2 accessible and easily navigable, and it shows. Of all of the engines that I've used for this project, I like the GMS editor the most. For a small project, it's easy to find your way around and go about your business. I suspect, however, that a larger project might get out of hand pretty quickly.This might be influenced by Game Maker Studio's proprietary language, GML (although GMS 2 supports visual scripting, which I did not use). It works, but if you're coming to it from another OOP language (or, truly, any other widely used language), you might scratch your head at the implementation or figuring out how to do some things. If you're a beginner or willing to spend time figuring out how GMS wants you to use GML, you'll probably be fine.I experienced some quirkiness with Game Maker Studio's drag-and-drop functionality - namely, mouse pointer detection upon dragging is a little wonky and requires some scaffolding to make work correctly.I think - and this is totally personal preference and laziness on my part - that if GMS offered the ability to use another, non-proprietary programming language, I would spend the time to do more damage here. I'm all for leveling up multiple skills while working, whereas spending the time to become an expert in the GMS editor and GML without being able to easily apply that knowledge elsewhere doesn't seem worthwhile.Still, it's a pretty workable 2D editor, and although the community support may not be on par with Unity's, it's still pretty good. Beware, also, that once your free trial is up, you'll have to pay to continue using Game Maker Studio 2.Phaser 3Phaser is a lightweight, open-source JavaScript game framework. There are some Phaser IDEs around, but if you're of the sort that wants to work primarily in code, you might wind up here, using Atom, Sublime, or your favorite editor.Phaser 2 was and is widely used and well-documented with a ton of tutorials to draw upon. Phaser 3 is the opposite. It has a comparatively high learning curve for beginners, with a bunch of examples and not a lot of context around them.A lot of the tutorials out there support Phaser 2, and while the learning is transferable, the code is not. Additionally, the devs recently announced that they'll be moving support to Phaser 4 (and TypeScript rather than ES6), which is not great if you've spent time working in Phaser 3.If you're not a professional programmer (I'm not) and up-to-speed with ES6 classes and JavaScript best practices (I wasn't), you might become quickly frustrated with Phaser's lack of handholding and having to set up your own IDE and work flow (I was).However, I've found it to be a powerful, lightweight framework that does a lot of things in a much more streamlined fashion than other game engines. Drag-and-drop functionality for the card game has been a relative breeze, and the ability to separate card types into classes (sort of like Unity's prefabs) has compartmentalized some of the cognitive load that this kind of game requires.If you're a front end developer, you might like or be comfortable with hard coding pixel coordinates for everything, but sheesh, is this painstaking work. Additionally, if you're not up-to-speed on everything JavaScript, you'll most likely be searching for answers in non-Phaser circles and then applying them to your project, which has its own benefit, I suppose.One other note in case it's not clear: Phaser 3 does have quite a bit of official documentation and examples, but it doesn't have the community or Stack Overflow answers that a lot of other game engines enjoy. If you run into an issue or can't figure something out, you'll have to figure out your own solution or post your question on the Phaser Discord server, which has been helpful in my experience.ConclusionGiven all of the above, the prototype I've stuck with and continue to iterate upon is the one I've built with Phaser 3. I realize that this may be anti-climactic, as Phaser isn't inherently "better" than the other frameworks and engines at 2D game development (except for, perhaps, React, which isn't trying to be a competitor in the digital game space).Phaser does, however, seem to handle drag-and-drop and game loop management for Hacker Battles more smoothly, and for my purposes, that's important. I also enjoy that using Phaser is requiring me to invest more heavily in the JavaScript ecosystem(s) and communities, but I'm interested in doing that anyway so it feels like a bonus.If you're more of the "what can I use to build something quickly and not care about the context in which the engine is situated" type, YMMV.TL;DRReact: great for front end development. Wouldn't use it for games, particularly drag-and-drop.Unity: you can make any type of 2D game if you're willing to wrestle with the editor and underlying 3D idiosyncrasies. Great community support, and C# is awesome. Asset store exists, but may not be useful for your purposes.Godot: open source and supports GDScript, C#, even C++ and Python if you're willing to do a lot of the heavy lifting. Good 2D implications but not nearly as much community support as something like Unity. Also, my experience was buggy.Construct 3: really easy to use, high barrier to entry because of the subscription paywall. Visual scripting may get on your nerves if you're looking to use or learn code, although there is now some JavaScript support.Game Maker Studio 2: user-friendly editor with good community support. GML or visual scripting might not be your cup of tea if you're coming from another more popular programming language, but hey, when in Rome. Also, requires payment after a 30-day free trial.Phaser 3: expect to code everything, and do a lot of searching to figure out how to make things work. It's working for me for this particular game and prototype, but Phaser 4 is on the way, so there's that.I hope this post is useful in your own search and discernment process. I'd love to hear about your own experience(s), too, with any of these frameworks/engines or others!This article originally appeared on freeCodeCamp.
Published on October 31, 2019 14:25


