Indie Games

Indie Games

What are indie games and the state of game development

An indie game is a video game that is developed by individuals or small teams without a publisher. Indie games tend to be created by hobbyists and small development teams, often using low budgets and pre-existing game engines. They typically focus on innovative game mechanics, storytelling and aesthetics rather than high-end graphics. Some well-known indie games are Minecraft, Stardew Valley, Undertale, Terraria, Papers Please and Limbo.


Opportunity

There are a few key opportunities for young developers interested in learning how to create indie games:

  1. Access to game engines and tools - There are many free and cheap game engines and tools available that make it easy for beginners to get started, like Unity, Unreal Engine, Godot, Construct 2, etc. These provide everything needed to create 2D and 3D games without much technical expertise.

  2. Online tutorials and communities - There are tons of tutorials, courses and communities online that provide guidance and help for aspiring indie game developers. Sites like Udemy, YouTube and game development subreddits can help you learn the basics and troubleshoot issues.

  3. Low barrier to entry - Compared to other fields, indie game development has a relatively low barrier to entry in terms of costs, technical expertise and team size needed. One motivated person with a good idea can get started.

  4. Flexibility and creativity - Indie game development allows for a lot of creative freedom and experimentation. Young developers can explore new game mechanics, storytelling techniques and art styles without many restrictions.

  5. Marketplaces to publish and monetize games - Stores like Steam, Itch.io and mobile app stores provide platforms for indie games to be published and sold, giving young developers a chance to make money from their creations.

So in summary, the many free or cheap tools, online learning resources, low costs and flexibility make indie game development a great opportunity for young programmers to explore their creativity and learn new skills.


Money

Indie game developers can make money in various ways:

• Publishing and selling their games - This is the most direct way to make money. Indie games can be published on PC marketplaces like Steam and Itch.io, as well as mobile app stores like Google Play and the App Store. They can then sell their games and take a cut of the sales.

• Selling in-game items - Some indie games make money through in-game purchases of things like cosmetic items, upgrades, hints, etc. This is commonly known as "freemium" model.

• Advertising - Indie games, especially mobile games, can integrate ads and make money from ad impressions and clicks. However, too many ads can negatively impact the player experience.

• Crowdfunding - Indie developers can launch crowdfunding campaigns on sites like Kickstarter and Indiegogo to raise funds for game development. Backers are typically offered rewards like early access, exclusive content, etc.

• Sponsorships and partnerships - Some indie games are able to secure sponsorships from companies to feature their products or brands within the game in exchange for money.

• Hiring out their skills - Indie developers can supplement their income by working as freelance game developers or contractors for studios. They can apply their skills to make games for others.

However, it should be noted that only a small percentage of indie games are commercially successful. Most indie developers have day jobs to support themselves while working on their passion projects. But for those that do hit it big, the upside can be significant financially and in terms of recognition.


Benefits

Besides monetary compensation, there are several other valuable benefits of making an indie game:

  1. Creative freedom and control - Indie developers have almost complete creative freedom and control over their games. They can pursue their own artistic visions without interference from publishers or investors. This allows for more experimentation and innovation.

  2. Sense of accomplishment - Successfully completing and releasing your own game gives a tremendous sense of accomplishment and pride. It is a testament to your skills, perseverance and creativity.

  3. Learning and skill development - Making games is a great way to learn new skills, both technical and non-technical. You develop problem-solving, project management, marketing and communication skills in addition to programming knowledge.

  4. Community building - Indie games often foster passionate communities of players who share a love for your creation. Interacting with and growing this community can be very rewarding.

  5. Career opportunities - Releasing successful indie games can open up new career opportunities in the game industry. It demonstrates your skills and experience to potential employers.

  6. Intrinsic motivation - For many indie developers, making games is a passion project they pursue the joy of creating, not just for monetary gains. The work is intrinsically motivating.

  7. Flexible schedule - As an indie developer, you have freedom and flexibility over your schedule. You can work on your game whenever and wherever you want.

So in summary, along with potential financial benefits, making indie games provide opportunities for creative expression, skill development, community building, career growth and an intrinsically motivating and flexible lifestyle - all of which can be extremely valuable for indie game developers.


AAA Studios

A triple-A studio (AAA studio) refers to a large video game development studio, typically with a big budget and staff. Some key characteristics of AAA studios are:

• Huge budgets - AAA games typically have multi-million dollar budgets, often in the $100-200 million range. This allows for high production values.

• Large teams - AAA studios employ hundreds or even thousands of developers, artists, designers and others to work on their games. Team sizes can reach over a thousand people.

• Well-known publishers - AAA games are usually published by major publishers like EA, Ubisoft, Activision Blizzard, Take Two Interactive, etc.

• High-end graphics and technology - AAA games push the limits of available technology and graphics. They utilize the latest game engines and hardware.

• Mainstream appeal - AAA games tend to target mass market appeal. They aim for the broadest possible audience and highest sales.

• Established franchises - Many AAA studios work on sequels and follow-ups to well-known and established game franchises.

• Long development cycles - Due to their scope and ambitions, AAA games often have development cycles of 3-5 years and sometimes much longer.

Some examples of AAA game studios are Naughty Dog (Uncharted, The Last of Us), Rockstar Games (Grand Theft Auto, Red Dead Redemption), Insomniac Games (Spider-Man, Ratchet & Clank), and BioWare (Mass Effect, Dragon Age).

In contrast, indie game studios typically have much smaller budgets, teams and scope. AAA and indie games often represent opposite ends of the video game development spectrum.


Looking for Jobs

There are a few ways an indie game developer can be hired by a AAA studio:

  1. Impress with their indie games - If an indie developer creates successful and impressive indie games, it can catch the attention of AAA studios and recruiters. The games act as a showcase of the developer's skills and vision.

  2. Apply directly - Indie developers can simply apply directly for open positions at AAA studios through their websites or job boards. Having shipped indie games can strengthen their resume and portfolio.

  3. Get recommended - Other developers and contacts within AAA studios can recommend promising indie talent to the studios. A personal recommendation goes a long way.

  4. Be acquired - In some cases, AAA studios may acquire an indie studio or team that has produced successful games. The indie developers then join the AAA studio through the acquisition.

  5. Work as a contractor first - Some indie developers first start by contracting or freelancing for AAA studios. If they prove their worth, they may then be offered a full-time position.

  6. Network at events - Industry events like GDC and PAX are great opportunities for indie developers to network, meet recruiters and show off their work. This can lead to job offers.

  7. Have the right skills - AAA studios look for developers with skills relevant to their current needs. So indie developers should focus on technologies and specializations that the AAA studios value.

The key is for indie developers to ship outstanding games that demonstrate their abilities. This builds a reputation and online presence that makes AAA recruiters take notice. Industry networking can also help indie devs get on the radar of major studios and recruiters. Following these strategies, many successful AAA developers actually started their careers in indie game development.


Languages

Some of the best languages for indie game developers are:

• C++ - C++ is one of the most popular and widely used languages for game development. It offers high performance and closeness to hardware that is important for games. Many game engines like Unreal and Unity also use C++ as their primary language.

• C# - C# has become increasingly popular for indie game development in recent years, especially with Unity. It offers a more manageable syntax compared to C++ while still providing good performance.

• Lua - Lua is a lightweight scripting language that is often used alongside C++ for rapid game prototyping and scripting in-game logic. It has a simple syntax and is easy to embed into C++ applications.

• Python - Python is another commonly used scripting language for game development. It's simple, cross-platform and has a large standard library. Python can be used for rapid prototyping, AI, simulation and data-driven development.

• JavaScript - JavaScript powers most web-based games. It can also be used with game engines like Unity, Construct 2, BabylonJS, Phaser and Impact to create browser and desktop games.

• OpenGL - OpenGL is a cross-platform API for rendering 2D and 3D graphics. Knowing OpenGL can give developers more control and flexibility over the graphics in their games.

• C# and Unity - As mentioned, C# and the Unity game engine have become a great combination for indie game developers, offering a productive, visual development environment.

Those are some of the main languages that offer the performance, capabilities and approachability needed for creating indie games. Of course, indie developers can also use higher-level languages and engines that abstract away some of the complexities. The important thing is to choose technologies that fit your game's needs and your preferred development style.


Go & Rust

Go and Rust can both be used for game development, though they are not as common as C++. Some pros and cons:

Go:

Pros:

  • Go is a simple, clean and productivity-focused language. This makes it appealing for indie game development.

  • Go code is very readable and maintainable.

  • Go has a large standard library and good support for concurrency.

Cons:

  • Go is not a systems programming language, so it lacks some low-level features needed for optimal performance in games.

  • Go's garbage collection may not be ideal for real-time applications like games.

  • There are not many game development libraries and tools available for Go.

Rust:

Pros:

  • Rust has a strong focus on performance, safety and memory management. This makes it well-suited for systems programming and games.

  • Rust enforces memory safety without garbage collection, which is ideal for real-time applications.

  • Rust has a growing ecosystem of game development libraries and crates.

Cons:

  • Rust has a steeper learning curve compared to languages like C++ and C#.

  • Tooling for Rust is still maturing.

  • Rust does not have the large existing codebase and community of C++ for game development.

So in summary, while Go and Rust are not the most popular choices for game development currently, they do have some advantages - performance, memory management and language design - that make them viable options, especially for indie developers. As their ecosystems mature, they could become more mainstream for game development. But for now, C++ remains the de facto standard, with C# gaining ground through Unity.


Game Engines

A game engine is a software that provides a framework for developing and running games. Game engines typically include features such as:

  • A rendering engine for 2D or 3D graphics

  • Audio and sound effects

  • Physics simulation

  • AI

  • Scripting support

  • Animation tools

  • Asset management

  • Networking

  • Platform abstractions

Game engines allow developers to focus on creating the game logic and content while the engine handles lower-level tasks.

The top 3 game engines are:

  1. Unity - A very popular cross-platform 2D and 3D engine. Easy to learn, visual scripting, asset store, etc. Used for both indie and AAA games.

  2. Unreal Engine - A powerful 3D engine used for many AAA titles. Known for its high-fidelity graphics and visual scripting. Can be difficult to learn for beginners.

  3. Godot - An open-source 2D and 3D engine. Free to use, good community. Best for indie developers on a budget. Still lacks some advanced features of commercial engines.

Other popular game engines include CryEngine, Source 2, Buildbox, Cocos2d, Construct, GameMaker Studio and RPG Maker. The best engine for your game depends on factors like your budget, timeline, platforms, game genre and team experience.

So in summary, game engines provide an important framework for developing games, abstracting away lower-level details and giving developers tools to focus on the game design. Unity, Unreal and Godot are currently the top 3 most popular choices, each with their own pros, cons and target audiences.


Tools

Here are some other tools that can be used to create an indie game, besides game engines:

• Graphics software - Tools like Photoshop, GIMP, Illustrator and Blender can be used to create 2D/3D art assets for your game like characters, textures, UI elements, etc.

• Audio software - Programs like Audacity and FL Studio can help you record, edit and compose sound effects and music for your game.

• Animation software - Tools like Spine, Synfig and Blender can help you create 2D/3D animations for your game characters and objects.

• Level editors - Dedicated level editors like Tiled and Unreal Editor (part of Unreal Engine) can help you design game levels more easily.

• Physics engines - Separate physics engines like Bullet and Box2D can provide physics simulation for your game.

• AI libraries - AI libraries like TensorFlow and AIBrain can help you add basic or advanced AI/machine learning to your game.

• Code editors - You'll need a good code editor like Visual Studio Code, Sublime Text or Atom to write code for your game.

• Version control - Using a VCS like Git can help you manage your game's source code and collaborate with a team.

• Asset stores - You can purchase or download ready-made game assets from stores like the Unity Asset Store and Unreal Marketplace to speed up development.

• Screen capture/recording - Tools like OBS Studio and Camtasia can help you capture footage of your game to create trailers, demonstrations or Let's Plays.

• Bug trackers - Bugs will inevitably crop up, so using a tracker like GitHub Issues or Jira can help you organize and fix them efficiently.

So in short, besides game engines, many other development, design, audio, physics, AI and productivity tools can be leveraged to create an indie game - especially when combined together in an organized workflow.


Game Map

A map in game development refers to the level or world that the player interacts with and explores. Maps play a crucial role in game development as they provide the context and environment for gameplay.

The role of maps in game development includes:

  • Providing the playable area or boundaries for the game. Maps define where the player can and cannot go.

  • Dividing the game world into different regions, areas and levels. Maps act as checkpoints and progression points in the game.

  • Placing game objects like enemies, items, obstacles, etc. Maps contain the interactive elements that the player encounters.

  • Defining level design elements like lighting, textures, terrain, pathways, etc. Maps create the visual style and environment for the game.

  • Implementing level mechanics like puzzles and challenges. Maps provide the context for gameplay mechanics.

A map editor is a tool that allows game developers to visually create and modify maps or levels. Map editors typically provide:

  • Visual placement of game objects

  • Terrain sculpting tools

  • Brush tools for painting textures, objects, etc.

  • Prefabs and reusable objects

  • Layer support

  • Snapping grids and guidelines

  • Ability to test maps in the game engine

  • Ability to export maps to the game engine format

Many game engines have their own integrated map editors. For example, the Unreal Editor and Unity Editor. There are also third-party map editors like Tiled, Hexels and Watabou.

So in summary, maps or levels are the virtual worlds and environments that players explore and interact with in games. Map editors provide an easy visual interface for game developers to efficiently design and modify maps. Both maps and map editors play an essential role in game development.


Other Concepts

Some other key concepts important for a software engineer to become a game developer are:

• Game objects and components - Most game engines use a component-based entity system where game objects are composed of reusable components. Understanding this paradigm is important.

• Game loop - The main loop that runs the game and updates all game objects. Knowledge of how the game loop works and optimizing it is critical.

• Physics - Concepts like forces, collisions, joints, triggers, etc. A good grasp of physics is needed to implement realistic movement and interactions in games.

• Animation - Techniques like sprite animation, skeletal animation and blend trees. Animation gives life to game characters and objects.

• Pathfinding - Algorithms like A*, Dijkstra and Jump Point Search for autonomous navigation of NPCs.

• AI - Concepts like finite state machines, behavior trees, rule-based AI and machine learning. AI is needed for intelligent NPCs.

• Scripting - Most game engines use a scripting language for flexibility. Understanding the scripting API and language is important.

• Asset management - Techniques for efficiently organizing, importing and using game assets.

• Memory management - Games require optimized memory usage. Concepts like object pooling are important.

• Multi-threading - Multi-threading is crucial for performance and optimization in games.

• Networking - For multiplayer games. Concepts like client-server architecture, UDP, replication, etc.

• Audio - Incorporating sound effects, music and voiceovers to enhance the player experience.

So in summary, besides maps and levels, a software engineer looking to transition into game development should focus on learning concepts like physics simulation, animation, pathfinding, AI, scripting, asset management, memory optimization, multi-threading, networking and audio-in the context of games. Mastering these topics in addition to traditional software engineering knowledge will help a lot.


Game Jam

A game jam is an event where game developers come together to quickly create a game within a short period, usually within 48 to 72 hours. Game jams have several purposes:

• Learning - Participants can learn new game development skills and techniques by working on a project under time constraints.

• Networking - Game jams are a great way to meet and collaborate with other game developers. This can lead to future projects and partnerships.

• Inspiration - The theme or constraints of the jam can inspire new game ideas and creative solutions.

• Fun - Game jams are meant to be an enjoyable and social experience for participants.

Typically a game jam will have:

• A theme - All games created during the jam must follow a certain theme. This could be based on a word, genre, mechanics, art style, etc.

• Constraints - Additional limitations are often placed to encourage creativity. For example, a maximum number of colors, a specific control scheme, etc.

• Prizes (optional) - Some game jams award prizes for the best games created during the event. But the primary purpose is participation, not competition.

Participants in a game jam can form teams or work individually. They use game engines and tools to quickly prototype their game concepts and bring them to a playable state within the time limit.

At the end of the jam, participants showcase and playtest their games. Feedback is shared and lessons are learned from the tight deadline and constraints of the event.

In summary, game jams are fun, social events that help game developers learn, network, get inspired and prototype game concepts rapidly - all within a short time frame, usually a weekend. They are a great exercise for anyone interested in game development.


Kind of games

Here are some types of games that are well-suited for indie game development:

• 2D Platformers - These have relatively simple and well-defined mechanics but can still be very fun and challenging. They don't require heavy 3D graphics or large teams.

• Puzzle Games - Puzzles have a timeless appeal and can be developed with minimal resources. Many popular indie puzzle games like Braid, Monument Valley, etc.

• Retro-style Games - Emulating retro 8-bit or 16-bit graphics and sound is achievable for indie developers. Titles like Shovel Knight have been very successful.

• Casual Games - Games with simple mechanics and quick sessions aimed at a broad audience. Things like match-3, time management, etc. These can generate steady revenue through ads or IAPs.

• Roguelikes - Procedurally generated levels and permadeath keep content fresh. Risk of Rain 2 and The Binding of Isaac are popular indie roguelikes.

• Visual Novels - These narrative-driven games are text and image heavy with few interactive elements. They are relatively easy to develop but require strong writing.

• Tycoon/Management Games - Sim-lite games that simulate the management of a business or organization. Can have broad appeal and don't require the most advanced tech.

• Arcade-style Games - Reviving classic arcade genres like shoot 'em ups, racing, etc. in a modern way can still be fun for players.

• Minimalist Games - Games with very simple mechanics and graphics but that explore a core concept in an innovative way. Examples: Monument Valley, Proteus.

In general, 2D games, games with minimal graphics requirements, and those with a narrow but well-defined scope tend to be the most suitable for small indie teams. The key is to focus on what you can achieve with limited resources while still creating a compelling gameplay experience.

Hope this gives you some good ideas for the types of games you could develop as an indie! Let me know if you have any other questions.


Steam Page

Steam is a digital distribution platform developed by Valve Corporation. It allows users to buy and play video games on their computers. Some key points about Steam:

• Steam is a popular store for purchasing PC games both new releases and older titles.

• Users can download and install games purchased on Steam to their computer.

• Steam has features like cloud saves, friend lists, groups, discussions, and more.

• Developers can publish their games on Steam, making it available to Steam's large user base.

• Developers create a "Steam page" for their game, which contains information about the game, screenshots, trailer, and system requirements.

• Steam takes a cut (usually 30%) of game sales as a fee for using their platform.

• Steam offers features specifically for developers like community features, DRM integration, and Steamworks tools/APIs.

• Steam has over 90 million monthly active users, making it a major distribution platform for PC games.

• Popular features for players include Steam Workshop for player mods, Steam Controller configuration, and Steam Link for streaming games.

So in summary, a "Steam page" refers to the informational page that a game developer creates for their game on the Steam store. This Steam page contains:

• Game title and description • Game screenshots and artwork • Trailer video • System requirements
• Release date • Developer and publisher information • User reviews • Pricing information

The Steam page is an important part of marketing a game on Steam and giving potential players an overview of what the game is about.


Step by Step

Here is a high-level step by step process for building an indie game:

  1. Come up with a game concept - Think of the core gameplay mechanic, theme, genre and any unique selling points. Write down your vision for the game.

  2. Create game design documents - Write up documents that describe the game mechanics, features, levels, story, characters, UI, etc. This will help define the scope of your project.

  3. Choose an engine - Decide if you will use a game engine like Unity or Unreal Engine, or build your own from scratch. Engines provide tools and features to speed up development.

  4. Build a prototype - Create a very basic version of your game to test out the core gameplay mechanics and get early feedback. This can help validate and iterate on your idea.

  5. Design assets - Create concepts and then full art assets like character sprites, environment artwork, UI, and any other visual elements. Outsource if needed.

  6. Code the game - Program the core functionality like player movement, interactions, menus, saving/loading, etc. Integrate your art assets.

  7. Add content - Create levels, puzzles, enemies, bosses, cutscenes and other gameplay content.

  8. Test and iterate - Get feedback from playtesters, fix bugs, polish and balance the game. Iterate on your designs based on what works and what doesn't.

  9. Prepare for release - Package your game for relevant platforms, and create a store page, trailer, screenshots, and other marketing materials.

  10. Launch the game! - Publish your game on relevant stores and platforms like Steam, Itch.io, App Store, Google Play, etc. Promote and market your game.

  11. Post-launch support - Listen to player feedback, release patches and updates, and create additional content through DLC or sequels if successful.

That covers the major milestones in indie game development at a high level. The process is iterative - you'll often go back and adjust or improve earlier steps based on insights gained later. But this should give you a good roadmap to get started!


Join community: Discover, Twitter Friends

Did you find this article valuable?

Support Software Engineering by becoming a sponsor. Any amount is appreciated!