If anyone has any suggestions or feedback, please drop a comment in. And if anyone wants more details on anything, just let me know.
Concept & Theme
The first step of the process is to come up with a concept, or list of potential concepts. For me, everything starts with a written list, and I recommend coming up with multiple ideas before gravitating to your favorite one. Take into consideration your experience level, your timeline, and your resources when deciding on a project. In other words, don’t tackle something that is over your head and you don’t have the time to complete.
One of the best ways to formulate a concept is to first develop a theme, which in turn tells a story. A theme and story will also inspire you as you develop your project. For a Counter-Strike map, such as de_cefalu_go, this may be as simple as “A small, coastal city in Sicily, which accommodates tourists, with the main attraction being a large, central church. The architecture ranges from courtyards and cafes, to hotels and a small beach. Terrorists have moved into the town in order to destroy one of two key landmarks, and counter-terrorists have been deployed to thwart their efforts.” Whereas for a longer, more complicated linear experience as with L4D2, my theme/story was “Four American tourists in Eastern Europe are holding up in a large hostel after the zombie apocalypse has plagued the Earth. Their food and water supplies are running thin, and the hostel, which was once housing multiple survivors, has caught fire forcing them to venture out in search for rescue. Their only hope is to push forward and work together.”
If you decide to work with a team of developers, such as for models, sounds, and textures, then I recommend reaching out early into the process. Make sure you are comfortable coordinating the entire process as well, or assigning a point person that you trust to do this. If the project is complex, leverage a free task/bug tracking tool. Set goals with each person and create a list of work that you want each person to accomplish (and by when).
Now that you have selected a project, start collecting reference photos -- Take your own photos and/or using resources like Google image source. Save these images in an organized manner, such as using a naming convention. E.G. castle_exterior_01, building_ornatedetail_01, etc. This may seem time consuming, but it tends to save time in the long run, especially for the bigger projects.
Create mock-ups by drawing over your reference images, drawing concepts from scratch, creating inspiration boards that are a collage of specific key areas, and drawing top-down layouts on grid-paper. If your project is large, like mine was for L4D2, buy a poster board and attach your various mock-ups so you can see your entire layout in one glance. Take notes on your mock-ups, such as where items might be well placed, what type of lighting/mood you want, etc.
When creating layouts, I use grid paper so that I can draw to scale. Also, don’t feel like you need to perfectly emulate reality when referencing images. For example, the layout of a house may not work for your game experience. Take into consideration where twists and turns are important, where you want bottle-necks versus large, open areas, and what works not only visually but best for game-play.
I also like to use tracing paper when working on areas that have multiple levels (e.g. an apartment building), so I can see how everything will vertically align before I start building it.
Rough Layout & Detailed Section
With your concept locked down, reference images organized, and mock-ups situated, you are now ready to start building your map or level. If you are working on a multiple level campaign, decide which level you want to start with (this does not have to be level 1). Start with blocky, rough layouts first, and try not to get caught up in the greater details yet. Once you have your level roughed out, detail out just a small area so that you can set a standard for the rest of the level.
Feedback & Testing
It’s important that you test often when developing your map or levels. This not only allows you to capture and fix errors easily, but it also allows you to play-test your work before the details go into place. Once your details are in, it becomes much more difficult to rework those areas. Share the level with a few friends and just get feedback on the layout, game-play, difficultly, etc. as well as the detailed area you created. Create a list of questions for them, if needed, to help guide the feedback conversation. For example: What works well and why? What areas did you not like and why? Was the frame-rate/performance good? Any bugs?
Continue to Develop
For the larger projects, start blocking out the remaining levels. Once everything is blocked out, get more feedback on the remaining levels, and then begin to detail everything. I generally follow this order when developing my levels and maps: block out, detail geometry and place large models, apply textures, add lighting, place smaller models, apply decals and overlays, and add in SFX and VFX. All along the way I am compiling and testing, as well as optimizing.
When detailing an area, I determine what details to place based on my theme and story. For example, in the lobby of my L4D2 hostel I boarded up the entrance windows, because the survivors in this building were first keeping the undead out at this location. I selected objects like the cabinets and chairs to block the windows because those were objects available to the survivors in this building. In front of the boarded up windows are piles of dead bodies, which implies a battle had taken place there, in which the survivors seemed to fair well.
When lighting an area, consider what you want your lighting to accomplish. For Counter-Strike, the game-play and balance is very important to players since this is a competitive versus style game, so I tend to use more full lighting in most areas so players can see the opponents more easily. Whereas the lighting in L4D2 serves an entirely different purpose, as it sets the creepy mood by juxtaposing dark and light areas, as well as guiding the player through the linear progression of a level without making it feel too linear. In other words, the headlights of a car will point to the next area the players need to explore whereas the dark corners are dead ends.
I recommend first promoting a little before you are ready to release your Beta, so that people start to anticipate your project. Make sure you have a realistic launch date for your Beta, so that you are not communicating false promises to your future community. When promoting, be consistent: don’t post something 10 times the first week, then only once in the next month. Also, do not over share too much content, like screenshots of every area, otherwise the project won’t feel very fresh when you actually release. Once your project does hit Beta make sure to inform any threads you may already have started of the actual release with a link to the download page. Finally, don’t confuse “promoting” with “spamming” – your Facebook friends don’t want to hear about your personal project every day.
Where to promote is really up to you, and depends on the game you are developing for. Look for forums that relate to your project and make sure to follow the forum guidelines when posting. For Steam games, you can create a steam group. If you have your own website or blog you should of course mention your project there.
Promoting doesn't have to just be text and screenshots either. As part of my promotions I like to cut together videos that show off the environments and game play.
Even if you feel incredibly confident that your project is “perfect” I strongly encourage you to release a Beta first so that you can gather feedback on game-play, balance, difficulty, and bugs. Take constructive feedback seriously and encourage a system of feedback from the players that are testing your project. Try not to take the trolling negativity too seriously either.
When my L4D2 campaign Tour of Terror was in Beta I would join games and watch YouTube videos on my campaign, while taking notes on things I could improve. I discovered that I actually learned more from a YouTube play through than I did from most written feedback.
Create and Release Updates
Make changes to your project based on good feedback and fix any bugs that have been discovered. If there are a lot of issues you may need to triage your list of feature improvements and fixes, so that you are fixing the higher priority features and issues first. Sometimes with personal projects it’s easy to say “I have unlimited time to work on this, so I will just keep adding more and more features”, however, I find that it is important to find that critical stopping point so you can call the project complete and move on to other work. Art is never perfect, and there will always be something you will look back on and say “I would do that differently if I was doing it again now”.
Your project now plays well and doesn't have any major issues. You feel you are ready to call it complete and release the final version.