Skip to content

Latest commit

 

History

History
378 lines (309 loc) · 50.8 KB

README.md

File metadata and controls

378 lines (309 loc) · 50.8 KB

Game-Development Links

This is a collection of useful game-development links including, but not restricted to, development with MonoGame.

During the process of developing our game I came across a large variety of websites that I found very useful.
This page is a collection of all of them baring a short description. I will check in every month or so and update this list accordingly.
Let me mention that I didn't record those links in any particular order and that the sites, I link to in this section, may contain much more than the description of the link suggests. Chances are that I didn't even look through each and every page of every single site before finding it helpful and bookmarking it. These are just the pages I found searching for solutions for the problems in the various fields of interest you inevitably stumble over when starting to write a game.

I tried to sort every link-table it in a way that should benefit your learning curve (most complex subjects last).

If you want to contribute just fork this repo, make changes and then a pull request.

Contributions are welcome!

If you like this repo, please don't forget to star it. Thank you.

Table of Contents

Theory

Link Lists

Here are other link-lists to browse.

Tutorial Sites

No specific order.

Lookup Tables

This section contains tables that I found useful during game-development.

  • Color Charts - You want to set a color, but you can't see it? This site has proven most useful for me. There is not a single day that I don't visit it. It contains all the named colors you may use directly in XNA (or windows respectively), sorted the way you want. He has some more stuff going on at his blog, but frankly I didn't have the time to look into it.
  • File Format Lookup Table - Extremely useful lookup-page for all possible file-formats along with detailled information about them. Thx to AcidFaucent for pointing that one out.

Mathematics And Stuff

This section contains articles about mathematical problems. You can't do without.

Programming Guides

This section contains tips about how to structure your programs or how to achieve certain tasks necessary for game-deployment.

General

  • Shadow-Copying of applications - You want your installer to delete itself in windows? You might come to a point where you'll end up writing your setup or updating your application, where you want to unload a program, that is currently running. In general that's not easily possible, but this project might help. We circumvented the issue by using a WIX setup (you are able to run programs before and afterwards that are not present on the disk, but in the GAC, which is very nice; We deleted the install-directory that way by running a C# deletion-program leaving no trace of the game whatsoever).
  • Repositioning the cursor - You want to reposition or clamp the windows cursor to or within a window? On a multi-monitor setup you should prevent the mouse cursor from leaving the monitor your customer is playing on. Here you'll find the proper interop-calls (I'm sure you know this site).
  • Saving the state of your game - You want to create a save-game? This is a very quick and elegant method to accomplish this by using XML.
  • Get special folders - You want to save your save-game in %appdata%? This page shows you how to get the paths of these special directories regardless of the version of windows your customer is running. Necessary to avoid "no write permission" errors on saving any game-data.
  • Multi CPU usage - You want to use all of the CPU cores on your customer's machine? You may want to use .NET's new parallels framework or, if you are stuck with an older .NET framework, write one of your own.
  • 'Non-Blocking' synchronization - You want your code synchronized without blocking waits? This is the premier-league of multi-threaded-programming. It's very difficult and subtle. Fasten your seatbelts, you're in for some ride.
  • Do Events and Delegates Create Garbage? - A nice article testing and explaining what creating and calling delegates and events (using lambda or not) does in respect to garbage.
  • Decompress DXT textures - You want to manually decompress DXT Format Files? There are not many reasons for you to want to do this, but nevertheless. Here it is.
  • Super Nerd Boy - Mike's Blog about the experience of making a 2D platformer hero jump the right way.
  • The Guide to Implementing 2D Platformers - This article is about all the basics you have to consider when implementing a 2D platformer... Tiles, slopes, ladders, bitmasks... Pretty much the works.
  • Map Collision Detection And Slope Implementation - VermillionTower wrote a blog post about his experiences when programming Thornbridge Saga. Nice read. Good tips.
  • Voxel Engine - Some years ago Charles Barros dedicated some time to making a Voxel Engine for Unity. He wrote about the most important parts and also linked some interesting articles there.

AI

  • Pathfinding.js - A very nice graphical animated presentation of the most common pathfinding algorithms. Very nice way to visualize the differences.
  • Introduction to A-Star - One of the nicest explainations I've ever read. Interactive too.
  • A Star Example - A good in-depth introduction and the article points to a few production-ready implementations as well.
  • XNA Game Studio - Pathfinding - The good old article about an A-Star implementation from MS.
  • Path-Finding - You want your hero to find the right way? This is a good implementation of the A-Star Algorithm. You have to modify it of course, because the garbage collector would kill you in no time, but it's a good starting point.
  • A-Star algorithm implementation in C# - A CodeProject article explaining much about the A-Star algorithm and has a production-ready implementation to download.
  • Shortest Path - A nice explanation of the Jump-Point-Search algorithm along with illustrations.
  • EpPathFinding - A nice C# library that comes with a demo, is production ready and implements the Jump-Point-Search algorithm.
  • SharpNav Github stars - A complete and portable pathfinding library in C#. MIT license.
  • NGraph Github stars - A fast path finding library for arbitrary graphs. Play with a demo or watch it on YouTube.

XNA / MonoGame

Graphics And Effects

  • The Book Of Shaders - You want to use shaders and don't know what that is? Then this site is a good place to start.
  • World- View- and Projection Transformation Matrices - A really nice article along with images covering the basics of transformation matrices and how they are commonly used in 3D graphics programming.
  • Matrix Naming Convention - A very nice and short article about how to name your transformation matrices and what benefit that brings.
  • 3D model drawing guide - You want to draw a 3D model in XNA? This guide shows, step by step, how to draw a mesh in XNA. Nicely done, thank you very much.
  • A 2D Transform Library Github stars - Nice library from Alois Deniel. It provides base MonoGame-objects for managing relative transforms in a 2D space. So if you want to link your object to another one and you want it them to move together, this is your library (also pivot points, tweening, etc...).
  • 2D circles and lines - Want to draw 2D using XNA? Well. Then you're in for a treat! It's impossible to do that without completely destroying the performance of your game. But since you're inevitably sitting on a high-performance-graphics-workhorse already, you may draw 3D as well. These links show you how.
  • 2D circles and lines
  • Premultiplied alpha and alpha-blending - You want to understand the intricacies of this subject? Well. Here is the Master of XNA for you. May I present: Shawn Hargreaves...
  • Post processing effects - You want a bloom-filter? This tutorial explains the usage and limitations of such an effect.
  • Dynamic 2D shadows - You want a flashlight in your 2D game? This is one of the most popular tutorial-sites out there. I cannot thank Catalin enough for his efforts making this site.
  • 2D Crepuscular God Rays - This article covers the topic of doing god-rays in a 2D environment.
  • 2D Metaballs in XNA - Nice article that explains how to get an evenly distributed surface from particles, like the effects in World of Goo.
  • Depth-Sorting sprites - Shawn Hargreaves himself on how to order your sprites before drawing.
  • The half-pixel offset - In XNA or MonoGame driven games you will see a Vector(.5f, .5f) added on a projection matrix sometimes. Here is why.
  • And another one on the half-pixel - This is Microsofts explanation for it.
  • Premultiply Alpha for textures loaded via FromStream - This is a snippet of code that leverages the GPU to quickly premultiply alpha for textures that are loaded using Texture2D.FromStream which bypasses the preprocessing provided by the content projects.
  • How to Generate Shockingly Good 2D Lightning Effects - Lightning has plenty of uses in games, from background ambience during a storm to the devastating lightning attacks of a sorcerer. In this tutorial, the author explains how to programmatically generate awesome 2D lightning effects: bolts, branches, and even text.
  • Geometry Tracks - Tire Tracks Tutorial - Another fine tutorial by Kosmonautgames about how to generate 2D or 3D trails and tracks. Thank you so much for your great posts.
  • Drawing Antialiased Lines With OpenGL - Nice article describing a method to generate smooth lines using primitives.
  • 2D Visibility - Nice article explaining 2D visibility with a ray-casting algorithm. You know, the videos of 2D games where you move a lightsource and the visibility-fog moves around in real-time. With examples in Haxe 3, a cross platform compiling language. So it's almost certain that you can use the code directly. MIT-like license. So nice for commercial use as well.
  • Deferred Rendering In XNA - A nice tutorial from Catalin Zima explaining the basics of deferred rendering providing code examples.
  • 2D Deferred Lighting - A nice article explaining several 2D lighting techniques. Nice read.
  • How to project decals - A Wolfire blog post about how to project your decals in 3D.

Networking

Spatial Partitioning

  • Spatial Partitioning - Spatial Partitioning - an overview.
  • CollisionGrid - This is the way to go for evenly distributed objects in a small 2D space.
  • Quadtree - This is the way to go for unevenly distributed objects in a 2D space.
  • Octree - This is the way to go for unevenly distributed objects in a 3D space.

HLSL Shaders

  • Graphics Pipeline Diagram - You are stuck programming your shader and don't know what happens and when? This is a very popular site about XNA game development in general. This particular page contains a very useful diagram of the graphics rendering pipeline, that may lighten things up a bit during dark, non-comprehending times (you will have that, I promise).
  • HLSL language reference - Want to know how HLSL works? This is Microsoft's HLSL reference. Nothing more, nothing less.
  • Crash Course in HLSL - A crash-course in HLSL covering vertex- and pixel-shaders from the almighty Catalin Zima.
  • Dark Secrets of Shaders - A ATI article about shader optimizations in general. Great read.
  • Specifying Compiler Targets - The Microsoft reference for specifying compiler targets in HLSL shaders. A nice list and explanation of the shader-levels supported by DX.
  • Direct3D Feature Levels - A list and explanation of the various feature levels and of what effects and resources you are allowed to use with each.
  • Wiggle Effect - Want your background to wiggle? Then this tutorial is for you. Presented to you by digitalerr0r, a great site for HLSL tutorials.
  • XBR - Filter - Nice code for implementing an xBR filter that helps you to upscale your sprites without showing pixels. Thanks to Jjagg and Kosmonautgames for adapting that code for MonoGame.
  • Bloom Post Process Filter - Want your game to shine? This tutorial explains the use of post process filters and the bloom filter. Many pictures. Expertly commented. Recommended.
  • GPU Driven Terrain Mapping - You want to render your terrain given a low-res terrain-map-texture? This example uses a low-res terrain-map-texture (where the information which tile to draw is encoded in the colors) to render a terrain. Advanced and only usable under certain circumstances, but worth the time.
  • Deferred Engine Playground Github stars - Deferred rendering engine written to make developing and understanding custom shaders easier.
  • ShaderFrog - A online web-based shader editor providing WYSIWYG. Nice project.
  • WPF Shader Effects Library - This one contains many cool effect files easy to adopt for your game. It's under the Ms-PL license which should be ok as long as you don't publish the source-code. There is a video demonstrating the effects along with a narration.
  • Maximizing Depth Buffer Range and Precision - The guys from Outerra explain some ways to enhance depth-buffering on current hardware.
  • Depth Precision - Another short article about the precision of a depth buffer and how to enhance it. Features a nice graph-calculator.
  • Creating Vast Game Worlds - Avalanche Studios - A nice presentation from the SigGraph 2012 conference featuring many screenshots. They talk about how to make such huge worlds work, the impact on the rendering engine, the scene-design and the player.
  • 2d Refraction Shader example for SpriteBatch - Nice blogpost from willmotil containing a load of shaders to play around with.

Audio

  • XACT audio tutorials - You want to make noise, but you don't know how? This is a very elaborate collection of very useful tutorials starting from "Audio in XNA" and ending with "3D Audio Effects". Very straight forward and many screenshots.
  • Attenuation / Doppler pitch shifting in XACT - You want your close sprites to be louder than the ones far away? Very elaborate Microsoft tutorial on creating attenuation and doppler-pitch-shifting using XACT. Nice, step by step and many screenshots.

Procedural Generation

Practice

Components

This stuff here is either directly ripped from our game or from other libraries. For you to take and use as you like.

  • Object Pool Github stars - This is a lock-free object pool. One of the integral parts of any game-engine.
  • Collision Grid Github stars - Used in the broad-phase of collision detection. Faster than a Quad-Tree. Description is inside.
  • SplitStopWatch Github stars - Want to debug timings and you like a pretty console-output using split-times, etc? Take this.
  • ThreadPool Github stars - Want to do async work but the methods you like to call all have different signatures? This is a very fast implementation of a fill-and-start thread pool.
  • Per Pixel Collision Github stars - Want to know how to do matrix-transformations? Want to know if two textures collide with pixel-precision? Take this, but read the readme.md first. It explains why using this technique in a production environment is a bad idea.
  • XNA Examples - MonoGame Port Github stars - An almost complete MonoGame port of the good old XNA examples from MS.
  • A Textbox For MonoGame Github stars - This repository contains an editable, multi-language, event-driven textbox for MonoGame that supports selection, special characters, SHIFT-CTRL combinations with cursor-keys and cut/copy/paste.
  • A Finite State Machine Github stars - This project implements a Finite-State-Machine (FSM) designed to be used in games. Furthermore it implements even a Stack-Based-FSM (SBFSM). So you may tell it to 'continue with the last state before the active one'. You describe your FSM using a nice and well documented DSL (Domain Specific Language).

Libraries

Here you find game-engines, extensions, etc.

Game Engines

  • MonoGame Github stars - XNA continued! By leveraging C# and other .NET languages on Microsoft and Mono platforms you can write modern, fast, and reliable game code.
  • MonoGame.Extended Github stars - An awesome extension library for MonoGame dealing with additional stuff that was out-of-scope for MonoGame.
  • Nez Github stars- Another great extension library. Very comprehensive.
  • Corund Github stars - Corund is a 2D game engine for mobile games, based on Monogame (open implementation of XNA). Inherit from a variety of existing objects and behaviours to easily compose a game or a prototype.
  • Simplex Engine Github stars - Free alternative to Game Maker Studio 2, porting and flavoring GML to C#, running on MonoGame.
  • Lost Astronaut's Game Creation Framework an AGPL game engine written for WinAPI entirely in C++ that handles graphics, games and other functionality, the product of a 15 year long project only recently released as open source

Physics

  • Aether Physics 2D Github stars - Very nice library from nkast you might know from the MonoGame board. It's a very nicely written 2D collision detection system that sports all possible kinds of stuff like joints, friction, motors, fluid dynamics, buoyancy, and so on...

UI

  • EmptyKeys - A very cool multi-platform UI library based on XAML.
  • Nuclex - An older framework written for XNA.
  • Nez Github stars - This extension library also contains a port of LibGDX Scene 2D UI.
  • Squid Github stars - SQUID is an SDK to create user interfaces for games and other 2D/3D realtime applications, using a Retained Mode system. SQUID does not depend on a certain rendering engine, you can use it with any engine you like, on any platform that supports the .NET 2.0 framework. Squid is free and maintained by IONSTAR Studios.
  • MonoGame Gui4U - Simple. A port from XNA Simple GUI
  • Neoforce-Mono Github stars - A MonoGame port of the NeoForce controls. Pretty comprehensive.
  • GeonBit.UI Github stars - Is the UI / HUD system of the GeonBit engine, exported as an independent MonoGame extension under the MIT license. It is a MonoGame-based game engine, designed to build 3d dungeon crawler and FPR (first person rogue) games.
  • Myra Github stars - A nice, albeit very young, GUI framework for MonoGame. Cool if you'd like to contribute.

Shadows And Lighting

  • Penumbra Github stars - 2D lighting with soft shadows for MonoGame.
  • LightingEngine Github stars - Felsir open-sourced his lighting code. Nice implementation. Give it a try.

Map Editors

  • Tiled - An awesome editor for all kinds of maps. Freeware and if you search for a MonoGame loader for the maps generated by this beauty, then look for MonoGame.Extended.

Networking

  • Lidgren Github stars - One of the major players when it comes to connecting your game-clients. Definitely worth a look.
  • RakNet Github stars - One of the major players as well.

Connectors

  • Steamworks.NET Github stars - A .NET wrapper for the SteamWorks API.
  • Facepunch.Steamworks Github stars - Another popular Steamworks integration, where you can use native C# code (instead of calling functions manually) to communicate with the steam servers.

Tools

Build tools, deployment tools, etc.

  • ProtoBuild - If you wanna do cross-platform development this tool will help you to keep your project-files in order.

  • wyBuild - You want to have an updating game (maybe self-updating)? A tool to create and deliver AND install updates manually or automatically in any given .NET language. This one saved and saves our butts during the alpha-testing stage.

  • Intel - Graphics Performance Analyzers - A nice tool to get performance data from your GPU.

  • Renderdoc Github stars - A sandalone graphics performance debugging tool. Nice work. Available on GitHub.

  • Convert to Icon - You want your own mouse-cursor? When programming a game in XNA you come to a point when you want your own mouse-cursor. This program helps you to convert your image-files to an icon-file. And it's completely online.

  • DXT Compression - You want to compress the textures of your game on your own? Normally you'd use the content-loader-pipeline of XNA (don't fear; the content-loader-pipeline does almost everything automatically), but if you can't use it, then you'll be stuck with this when you're trying to get compressed textures to your graphics-card.

  • Using Platform Specific Libraries from a Platform Agnostic Project - We've all had this problem. You want to use a library, but that comes in x86 or x64 flavor and your game should use the 'AnyCPU' target. This article describes how you can switch between the libraries on demand after editing the project file directly. Works like a charm, although it just determines the currently used context and replaces the files accordingly. So you cannot really build an 'AnyCPU' project using this method because the build-result will be fixed to the context used on your computer at compile-time.

  • Asset Forge (~20 USD) Asset Forge allows anyone to create 3D models and 2D sprites using building blocks. Models are compatible with most available game engines.

    Installers And Setup

    • Inno Setup - This is a nice, free for commercial use, installer that is surprisingly versatile. Not really suited for more complex stuff.
    • WiX - Windows Installer XML - THE gold standard for building setups. Can get pretty messy with more complex stuff though.
    • NSIS - That's the installer package MonoGame uses for its installer. Nice to handle, open source.

Legal Stuff And Licenses

One important thing: When searching for legal advice concerning licenses you'll be pretty much out of luck. Most of the time people tell you that they won't give 'legal advice' since the legal ramifications resulting from such an advice are just too awful. So I won't do that either. You'll have to read for yourself and don't just take my word for it. So, for what it's worth, here are some useful links and the comments are just my humble opinion.

Copyright

If you'd like to make money with your game, these licenses here are your friends. They allow you to use the code / asset / whatever, retain the original license, maybe do some sort of attribution of the original author, but don't prohibit you selling your work for money.

Copyleft

Essentially and if there is no change in the text of the license in the work you're trying to use, the following licenses are viral. If you use code under such a license, you'll have to adapt your license to theirs. Not great if you'd like to make some money with your game later on.

  • Copyleft - Explanation of copyleft and what it's used for.
  • GNU GPL - Beware: Copyleft.
  • CC-BY-SA - Like CC-BY, but copyleft.

Artistic Material

All the sites I link to in this paragraph contain "free for commercial use" material, although they may contain non-free material as well. It's your responsibility to check before you use it. You won't be able to dodge the fight with the even or odd license-text when dealing with creative content, so you might as well get over it and try to get a grasp on things.

Mixed

  • Open Game Art - A site containing a rather limited collection of open art, but still, worth a look.
  • Gamedeveloper Studio - Looking for game assets? Are you looking for professional quality assets for your games? Would you like to cut your development time in half? This site contains some royalty free content.
  • Kenney Kenney, a game studio that creates a wide array of games and game assets for other developers to use (for free!). All assets are high quality 2D, 3D, UI and sound assets.

Would you prefer not to invest hundreds or thousands of dollars into your title?

Graphics

You want a sky-, grass- or other texture? These sites contain, besides other stuff, free-for-commercial-use textures.

  • http://telias.free.fr/
  • http://www.cgtextures.com/
  • https://remos.itch.io/isometric-tree-sprites
  • SoundImage - Eric Matyas - Very large and cool library of original music-pieces, textures and sounds all licensed under a public license that only reqires proper attribution as stated on the About-page 'Section 3 – License Conditions.'. Despite the name it contains really great textures (seamless ones as well). It is neatly explained again on the home-page of this site. Thanks Eric Matyas. Great work. Please consider donating a small amount of money for all the hard work.
  • TreeIt - A nice piece of work from EVOLVED software. Thanks. Procedurally generates 3D trees you are free to use in your games.
  • Kenney Kenney, a game studio that creates a wide array of games and game assets for other developers to use (for free!). All assets are high quality 2D, 3D, UI and sound assets.

Fonts

You want to write something on the screen without getting sued? These sites contain, besides other stuff, many free-for-commercial-use fonts (you'll have to read the licenses though).

Sounds

You've got no sound yet? These sites contain, besides other stuff, free-for-commercial-use samples.

  • http://www.mediacollege.com/downloads/sound-effects/
  • http://www.partnersinrhyme.com/pirsounds/WEB_DESIGN_SOUNDS_WAV/BUTTONS.shtml
  • incompetech - Kevin MacLeod - Very large library of CC music made by Kevin MacLeod requiring only correct attribution. This guy inspired Eric Matyas to do what he does best. Thank you for that.
  • SoundImage - Eric Matyas - Very large and cool library of original music-pieces, textures and sounds all licensed under a public license that only reqires proper attribution as stated on the About-page 'Section 3 – License Conditions.'. It is neatly explained again on the home-page of this site. Thanks Eric Matyas. Great work. Please consider donating a small amount of money for all the hard work.
  • Echo Blue Music - Devynn - Large library with music, albums and sound-effects with astonishing quality from an accomplished artist. Thanks Devynn for sharing. (CC by 4.0 license, completely free for commercial use, just attribute correctly as stated on the page).
  • Acapela-Box - Very hight quality test-to-speech engine with nice voices. Achives almost natural sounding speech. Download costs a bit, but at very reasonable rates.
  • Kenney Kenney, a game studio that creates a wide array of games and game assets for other developers to use (for free!). All assets are high quality 2D, 3D, UI and sound assets.

Open Sourced Games

Here is a list of completed open-sourced games. Feel free to add to this per PR. Thx.

  • Infiniminer - A game Markus Persson regarded as inspiration when creating Minecraft. Only maintained for about a year, subsequently released under the MIT license. Craftworkgames exported it from google-code to GitHub. The original master-branch on GitHub is no longer maintained.
  • Apolune - A game and game framework packed into one, released by Lost Astronaut Studios