Terri reacted to Radix for an article, Static Prop Combine in CS:GO
Static Prop Combine in Counter-Strike: Global Offensive
A step by step guide
thanks to @untor
What is Static Prop Combine?
Static prop combine, or informally speaking "autocombine", is a new feature in CS:GO's VBSP.
It allows VBSP to merge together multiple static props into a single static prop, either automatically or with user-defined rules.
What is static prop combine good for?
Static prop combine is another feature to optimize your maps. Most people might think that "the less geometry rendered the better". So if you use small props, it's easier to hide what is not visible.
That's not wrong. But there is a problem:
In Source, there is one draw call per model per material. And these draw calls are very performance-hungry.
That's where static prop combine comes into play:
By combining models sharing the same materials, less draw calls are performed, which greatly helps optimization.
Valve has stated that Nuke runs 40% faster after they implemented static prop combine.
How do I use static prop combine?
The static prop combine feature was added in 2016 with the release of the reworked de_nuke. But since then it was not (?) used by community mappers, there are no (?) guides on the Internet except this documentation.
@untor helped me to make static prop combine feature do its job. So we decided that it's time to publish a step by step guide how to use static prop combine.
We presuppose that you are already familiar with the creation of props
0. Backup your CS:GO folder (optional)
We do not take responsibility for any damage done to your files. So it's time to backup your game files now if you have not already. In general we recommend to duplicate your "Counter-Strike Global Offensive" folder, so you can use a separate installation of CS:GO for mapping while keeping the other one clean for playing.
1. Source files
You must have the source files of the models you want to be combined. Usually 3 files for each prop:
*.qc reference mesh (supported formats are *.smd, *.dmx and *.fbx) physics mesh So if you want to combine props made by you, you should already have these files.
If you want to combine props made by Valve, you will need to decompile them first. And then change the names - otherwise, the version of the prop that is packed in the VPK would overwrite your version.
In this guide we will use two different pipe props:
You can download the example files here (contains the *.qc and *.smd files) :
Browse to "...\Steam\steamapps\common\content\csgo\"
Create a folder "models". In our example we have another subfolder "example". Save the model source files there:
These are our QCs:
Restrictions for the *.qc:
Only the first $body is recognized. $model is not recognized. $appendsource and $addconvexsrc are not recognized. You can only use $upaxis Z or Y.
2. Compile your props
Your models have to be compiled from this directory now:
Open your model compile tool (I use Crowbar)
Then browse to "...\Steam\steamapps\common\content\csgo\models\example\" and compile the QCs.
The compiled model files should be in "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\models\props\example\" now.
Browse to "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\scripts\hammer\spcombinerules\"
There you will find "spcombinerules.txt". In this file the combine rules for Valves props are defined. It is a standard KeyValues-formatted text file. Each entry follows the format below.
Rename it to "spcombinerules_valve.txt" (or whatever you want) and create a new text file "spcombinerules.txt".
Then copy and paste the following into "spcombinerules.txt" and save it.
4. Stub QCs
Stub QCs are QCs which contain a base template for the QCs which static prop combine generates. Generally, they should only include:
$staticprop $surfaceprop $cdmaterials Any $texturegroups used by the models. Browse to "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\scripts\hammer\spcombinerules\qc_templates\".
In our example we create a new subfolder "example", open it and then create a text file and rename it to "pipe_combine.qc":
Copy and paste the following into "pipe_combine.qc" and save it:
5. Compile your map
Add some of our example props to your map in Hammer and compile the map.
In our example we use the following compile parameters for VBSP
Compile parameters (full list here) :
-StaticPropCombine: Merges static props together according to the rules defined in scripts/hammer/spcombinerules/spcombinerules.txt. This lowers the number of draw calls, increasing performance. It can also be used to lower the number of static props present in a map.
-StaticPropCombine_AutoCombine: Automatically generate static prop combine rules for props that VBSP deems should be combined. Note: This does not write to spcombinerules.txt.
-StaticPropCombine_ConsiderVis: Instead of using the distance limit, combine all props in the group that share visclusters.
-StaticPropCombine_SuggestRules: Lists models sharing the same material that should be added to spcombinerules.txt.
-StaticPropCombine_MinInstances <int>: Set the minimum number of props in a combine group required to create a combined prop. Tip:Valve had this set to 3 for the new Dust 2.
-StaticPropCombine_PrintCombineRules: Confirm: Prints the combine rules?
-StaticPropCombine_ColorInstances: Instances of combined props get colored.
-KeepSources: Don't delete the autogenerated QCs and unpacked model files after finishing.
-CombineIgnore_FastReflection: Combine props, even if they have differing Render in Fast Reflections settings.
-CombineIgnore_Normals: Combine props, even if they have differing Ignore Normals settings.
-CombineIgnore_NoShadow: Combine props, even if they have differing Disable Shadows settings.
-CombineIgnore_NoVertexLighting: Combine props, even if they have differing Disable Vertex lighting settings.
-CombineIgnore_NoFlashlight: Combine props, even if they have differing Disable flashlight settings.
-CombineIgnore_NoSelfShadowing: Combine props, even if they have differing Disable Self-Shadowing settings.
-CombineIgnore_DisableShadowDepth: Combine props, even if they have differing Disable ShadowDepth settings.
The combined props look exactly like the single props. So how can you be sure that the static prop combine process was successful?
- Once the map is compiled, the combined props will be packed into your *.bsp automatically.
- If you add -keepsources to the compile parameters, you can also find the combined props in "...\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\models\props\autocombine\*name of your map*\"
and their QCs in "...\Steam\steamapps\common\content\csgo\models\props\autocombine\*name of your map*\".
- If you add -StaticPropCombine_ColorInstances to the compile parameters, instances of combined props are colored in CS:GO.
7. Additional notes
- You can manually disable static prop combine for individual props with the "Disable Prop Combine" keyvalue.
- Prop scaling (Uniform Scale Override) is not supported yet (?)
- If the original props don't have a collision model, you will have to set collisions to "Not Solid" in the properties. Otherwise the combined prop will be solid (automatically generated collision mesh; causes problems).
- If the props differ in specific keyvalues, in most cases the default (e.g. Alpha) or the higher value will be used (e.g. fade distances)
- Props that differ in the below keyvalues will NOT be combined, unless manually overridden with the appropriate VBSP option:
Render in Fast Reflections (-combineignore_fastreflection) Ignore Normals (-combineignore_normals) Disable Shadows (-combineignore_noshadows) Disable Vertex lighting (-combineignore_novertexlighting) Disable Flashlight (-combineignore_noflashlight) Disable Self-Shadowing (-combineignore_noselfshadowing) Disable ShadowDepth (-combineignore_disableshadowdepth) - Props that differ in the below keyvalues will NOT be combined:
Skin Color Disable Flashlight
some fps tests with an actual map! which gives better results: " -StaticPropCombine_ConsiderVis" or prop combining based on distances? Is there a console command to display the number of performed draw calls/props? ...
Terri reacted to Radu for an article, 2018: Mapcore's Year in Review
Keeping with tradition, I'd say it's about time we took a look at what our community has achieved throughout the year. If last time I was saying how 2017 was a year of immense growth, then 2018 was surely one of significant change. And it hasn't been without its troubles and anxious moments. No change ever is, but I believe it to be for the best. We've seen some of our friends become parents, change work fields or get their first job in the industry. We've even seen a few pursue their dream projects. And for that, we have to applaud them. It takes courage to keep moving forward and to realise when it's time for something new. In the meantime, I hope this article inspires you and I wish everyone
2018: Mapcore's Year in Review
SteamVR - Gulping Goat Space Farm
by @Steve, @marnamai, @The Horse Strangler, @Sersch and others at Scraggy Rascal Studios
produced in collaboration with Valve
"Scraggy Rascal has been working with Valve to create all new SteamVR content, we've been given a lot of liberty to create these locations. Our goal was to create interesting and fun locations for the player to explore. These projects, over the last couple months, have been a crash course in Source 2,VR, project management, delivering within deadlines, working together as a team and personal growth. It has been an invaluable experience and great opportunity ... and we're just getting started!" - marnamai
Darksiders III - Art
by @The Horse Strangler and others at Gunfire Games
"Probably one of the biggest challenges the artists and designers faced on Darksiders 3 was working with both a platforming and fully connected streamed world. This meant that everything exists all the time. While we streamed levels in and out, areas couldn't intersect and we couldn't do the classic "Small exterior, big interior" swap. This was especially challenging because of how much verticality our design must support. We had a few "vistas", but for the most part every aspect of the level was accessible. If you can see it, you will likely be able to get there, jump on it, fight around it, etc. Fury, the main playable character can double jump, swing, float, glide and even rocket jump over 10 meters high. Personally for me it completely changed how I looked at art filling up a space. Every single mesh we placed impacted design. Art was design, and design was art." - The Horse Strangler
"Europa is a relaxing narrative experience. The goal with this game is to offer just enough challenge that its rewarding to get from one area to the other for more than just the visuals by using environmental hazards, platforming sequences and light puzzles that you can beat by exploring.The game is split into linear sections and wider areas, that's at the core of the game and as you play, you keep improving your characters moving ability, which will further exploration and give you the ability to solve newer light puzzles. There's none of the typical character upgrading systems, rather, the levels will offer the incremental challenges and the sense of progression. Europa's main focus lies in environmental storytelling and immersing the player in it's universe with passive storytelling, evoking awe and bliss with colorful watercolor-like art and music." - Helder Pinto
Counter-Strike: Global Offensive - Turnpike
"For a while the "Highway Restaurant" theme has been sitting in my little Concepts.txt file. When the Wingman Contest was announced, it felt like the perfect opportunity to turn this idea into a map, as its relatively small size would be fitting for the Wingman gamemode. The casual nature of Wingman made me add some elements that I would not normally add to, let's say, a Defusal map, like the TF2-esque team color coding (albeit subtle), the moving vehicles and the silly bomb target. Additionally, since the playable space is (almost) completely indoors, making it nighttime felt right, as it both emphasizes the interiors and makes for an atmospheric blorange background." - Squad
Dying Light - A New Hope
"A full-fledged custom single player campaign that ties in to the original story of the main game. It will see the main protagonist, Kyle Crane,leaving the City for the countryside to search for a specific elusive medicinal herb and bring it back to Dr. Camden who believes it could be the cure to the Harran Virus. This campaign is a one man show as I’m doing everything myself: level design, environment art/detailing, story creation, scripting/quest creation, custom dialog, custom audio, custom materials/textures, custom foliage systems, custom brushes for terrain painting/sculpting, lighting, manual nav mesh tuning, scripted NPCs…" - will2k
by @General Vivi and Michael Voeller
"Prodeus is the first person shooter of old, re-imagined using modern rendering techniques. Oh, and tons of blood, gore, and secrets. Creating Prodeus has meant a lot to us over the last year. It feels great to finally be doing something for ourselves. It can be pretty ambitious at times since there are just two of us, but I’m confident we can pull it off. Keep an eye out for the end of February for a big announcement." - General Vivi
Counter-Strike: Global Offensive - Ruby
"When I was on vacation in Portugal years ago I was so impressed by the city Lisbon that I really wanted to build a map that has the same vibe. At the time I was already working on different projects so I decided whenever I got enough time to work on a map this size I would go back. So early 2017 the moment was finally there, I went back to Lisbon to shoot (~2000) reference photos then made a list of things that are iconic for Lisbon and started working on Ruby. Adding a lot of height differation, warm colors, tile patterns and ofcourse trams was essentiental to get the Lisbon vibe." - catfood
by @dux, @PogoP and others at Unknown Worlds Entertainment
"A mix of Survival, story, mystery, resource gathering, base building with some accidental horror and plenty of deep, deep water. We had not long finished up with Natural Selection 2 and were hungry to develop a different kind of game. During development we were (and still are) a small team but the game kept getting bigger and grew into something far larger in scope than originally planned. So we soon realised that what we had could be turned into something really unique if we put our heads down and just cranked on it." - dux
Unreal Tournament 4 - Chamber
"I used Halo and Warframe artstyle as a reference. The goal of this project was to make fun and cool looking map with 100% custom art that is 100 mb in file size. To achieve that I used several advanced techniques such as custom vertex normals, deferred mesh decals, no bake, tiling base materials and masks. There are basically 5 or so texture maps used in the entire map, most of the filesize space was taken by lightmaps. I learned a lot doing this project in terms of composition, art direction and optimization. Hope you enjoy this map as much as I do!" - Ubuska
Counter-Strike: Global Offensive - Pitstop
by @Quotingmc and Quadratic
"It is not often that CS: GO receives a new game-mode, especially one as competitively focused as Wingman. I was understandably pleased at the announcement of the 2018 CSMapMakers contest for the mode. Pitstop was my entry where I set out to create a thematically bold centre piece for my portfolio. With the help of my teammate Quadratic and support from multiple Mapcore members, I learnt a lot about taking a level from a simple blockout to completion; I can say for certain I’m thrilled with the end result!" - Quoting
Black Mesa - Xen
by @JeanPaul, Adam Engels and others at Crowbar Collective
"While building Xen we had to design, iterate, and iterate (then iterate some more). We took what we thought we knew, and put it to the test. We learned how design and scope work together, and how to build momentum as a team. We are extremely proud of what we have accomplished over the year(s)! Despite the long and occasionally frustrating timeline, it has been a real testament to the commitment that this team and this community have for Half-Life." - Adam Engels
Unreal Engine 4 scene
"So I decided I would step out of my comfort zone and create a small environment in an engine I've never used before, UE4. Although I think I did a fairly decent job at the time there were ultimately many nuances I could have done better, but that is the artist dilemma. This project taught me the value of properly blocking out your environment, gathering as many references as you can and to have patience and not rush through assets, when breaking any of these rules I was punished for it. Stay tuned for my next project which will be a giant mech, coming soon Valve time TM." - Vorontsov
Counter-Strike: Global Offensive - Opal
"My goal with this project was to make a fun and compact defuse map, with a simple level flow, ample verticality, and an overlapped layout! I wanted to have interior and exterior, and break the grid a lot, to avoid having that "90 degrees grid" feel in the layout. I needed to have a vista on one side of the map to help with orientation, so I decided to make it a coastal town, inspired by those found on the island of Skopelos, Greece. Expect more updates in the near future, as I'm not yet satisfied with it. Since this is my only CSGO map, I want to put all my time and effort into it, and focus on quality instead of quantity. Thank you everybody for your support and feedback! <3" - MikeGon
Insurgency: Sandstorm - Precinct
by @Xanthi, @Squad, @Jonny Phive, @LATTEH, @Steppenwolf and others at New World Interactive
"Precinct, was a fun and challenging map to work on. We decided early on to melt District and Contact two of our very nostalgic maps together into a single large-scale urban environment. The goal was to preserve the nostalgic feeling and at the same time create something unique and fresh not just a 1:1 copy. In the block-out stage we started playing with different terrain heights, which eventually was the key to accomplish our goal. Terrain height was a bit of a trial and error process; I remember driving up a hill and not having enough torque, oops!!" -Xanthi
Counter-Strike: Global Offensive - Killhouse
"Killhouse showcases brutal duels, player reaction times, and close-quarters combat. A highly vertical layout ensures the sort of unpredictability and replayability ideal for CS:GO’s 2vs.2 "Wingman" game-mode." - FMPONE
Counter-Strike: Global Offensive - Station
by @Roald and @untor
"All experiences contribute to where I am at this point. I am just a hobbiest but I think I learned alot about level design just by doing it and enjoying it. Overal my goal is to improve myself on level design, but also enviorment art. I think I archieved a goal on level design and it's now time to continue on enviorment art. This is where untor morozov comes in. I have met untor a while ago. He made this map 'Waterfall' which was pretty populair. I liked his designs and added him as a friend. When I had this wingman map going on with positive feedback I just contacted him again to work on it with me and since this moment we have had a incredible teamwork. I am gameplay orientated and he is art orientated so we were a great couple. We just enjoyed work on this project and respected eachother and had alot of fun." - Roald
by @Yanzl and Sara Lukanc
"The Gap is a sci-fi thriller first person narrative exploration video game. You play as Joshua Hayes, a neuroscientist trying to figure out what happened, barely remembering anything about his past. It started as a project for our BA thesis and has now grown into a standalone game. It's also my first "real" indie game project, helping me learn a lot about Unreal Engine 4 and game development in general." - Yanzl
Counter-Strike: Global Offensive - Alexandra remake
"My first successful map was born 10 years ago for CS1.6. It was done in just 4 days. Since then it has been ported/improved several times on CS:S then finally on CS:GO. It always had a "dust" theme. Initially i wanted to remake it with an "inferno" style but when the new dust2 came i switched the plan to use the new assets. The map was and is frequently played on public servers especially in Eastern Europe so i had plenty of feedback to improve it. For some it's just another "dust" map, but for me it's my dust2." - Serialmapper
Far Cry 5 - Wetland Turmoil
"I wanted to try working with location design in an (imaginary) open world game for the first time, so I made this backwater cabin neighborhood. At the time I also wanted to see what the limits were in Farcry Arcade and how far I could push it. The level has fixed spawns (a limitation of the editor), but I toyed with the idea of making it work regardless from which direction the player would have approached it. The pathing and player guidance is more or less shaped like the number eight, with the church acting as an outlook. Your task is to eliminate all the bad guys. In the end I wanted to do so much more, but couldn't due to technical limitations. All in all it was a fun experience to make it." - grapen
Counter-Strike: Global Offensive - Trailerpark
by @OrnateBaboon and @Skybex
"We wanted to make a map for CSGO, using a theme that had not been seen in any previous version of Counter-Strike.The map had to incorporate everyday plausibility, provide for enough variety so that things remained visually interesting, but also be flexible enough to allow for the use of low geometry for easy grenade strategies. Being able to immediately recognize a theme in a map is always important, so with all this criteria in mind, A trailer park fitted the bill perfectly. There is still some way to go before a full release, but 2018 was a great year for progress on this project." - OrnateBaboon
Unreal Engine 4 scene
"I was inspired by games like stalker and the last of us. The goal was to make something photoreal with a lot of foliage. It took a couple of iterations but I think I achieved the goal in the end. While making this project I've had to learn a lot about Speedtree to make all the foliage, it was a really cool experience. Right now I'm in the army so unfortunately I can't make any more scenes right now, but after I'll come back I'll try to make more scenes like that." - Corvus
Overwatch - Busan
by @Minos, @[HP], @PhilipK, @IxenonI, Phil Wang, Lucas Annunziata and others at Blizzard Entertainment
"Busan was a challenging map to make. Due to the game having 12 different heroes on screen we have a somewhat limited memory budget for maps, that includes all models, textures, effects, collision data, lighting information, etc... Fitting three radically different areas (Downtown, Sanctuary and MEKA Base) into one single map budget required us to find new ways to optimize our work. In the end, we were even squeezing kilobytes out of collision data to make it all fit, no kidding! But the result speaks for itself, the map was fun to work on and we are very proud of what we accomplished!" - Minos
Counter-Strike: Global Offensive - Highlands
by @ElectroSheep, @El Moroes and @'RZL
"We wanted to make a map in Scotland because, thanks to dishonored 2, we were browsing a lot of references froms this area and we really loved it. I also went myself here in holliday after that. We asked one of our close friends to make some special props, like the police van, the taxi, the phonebox and some others. Unfortunatly the hard development of Dishonored 2 put us in a difficult state where we weren't able to work on the map. So we lost motivation. Then RZL contacted us because he didn't want the project to die so we gave him the keys. And RZL became busy too ^^. Life sometime say NO I guess, hehe. Now Highlands Is my only advanced project I still didn't finished and I'm ready to give it a try, I hope." - ElectroSheep
"Highlands...is this map is a joke? Certainly no but we can say that the development is quite longer than what we expected. Perhaps we learn well how the famous "Valve time" works? :p No seriously I think we can explain that with the motivation. Of course we were motivated to create something cool with this map but with the time and, I think, with what we live in our life we never took the time to do it correctly...I mean we never had a constant rythm on the map. This (and other personal things) led to the current statut of the map; a still "work in progress" map started in 2014. But ElectroSheep came back and his goal is to finish it, and because he's right, I'll come back too to help him. Just, be patient (again) ;)" - El Moroes
Battlefield V - Fjell
by @Puddy, @Pampers and others at DICE
"Fjell was an explosive experiment which paired a new Battlefield dynamic, planes and infantry only, with an epic gosh darn mountain top. Tackling this design combination was like dealing with a bear after you've kicked it in the balls. It was a fun challenge and even though its extreme gameplay is quite polarizing when compared to more middle-of-the-road maps, I am happy that we went there!" - Puddy
Counter-Strike: Global Offensive - Iris
by @BubkeZ and @Oliver
"Iris was born out of a shared interest in the TV-show "Seinfeld", funnily enough. One day BubkeZ noticed I had changed my Steam profile picture to a photo of "George Costanza" and just like that the wheels were in motion! In the beginning, BubkeZ had the vision of an old city environment with lots of dirty alleyways and brick architecture. We didn't want to fall in the trap of making the map look too bleak, so we came up with the idea of making a mid-century town set in autumn. While the map certainly have visual elements from the 50's, I would say the overall theme of Iris is american auto-industry. Making the old cars was definitely my favorite part of making this map!" - Oliver
Unreal Engine 4 scene
"I have always been a fan of retro and vintage, so this was like a dream to me. After watching the first season of True Detective, I immediately fell in love with the office set and the way the series was shot. I have definitely learned a lot from this project, mostly lighting techniques that can fill your scene with a story. The goal was to recreate their environment in my own style, and I'm pretty satisfied with how it turned out. I definitely wasn't expecting this much of positive feedback and I'm really thankful for this community. I want to do something with the environments, not just as a portfolio piece, but make a short film or make a small adventure game out of them." - Brightness
Counter-Strike: Global Offensive - Insertion 2
"Being the follow up to the first Insertion it will have the same overall concept with the spawning and open-world like layout. However this time it will be a more urban setting and overall higher quality art assets. I always love to make environments that feels real. And that are familiar. Its all made up. But the details and various elements in Insertion 2 is from my childhood basically. Friends that grew up in the same place I have recognizes it aswell." - Oskmos
The Door Challenge
Designing Highly Replayable Stealth Levels for Payday 2
Level Design in Max Payne: Roscoe Street Station
Effect and Cause - Titanfall 2 Level Breakdown
2017: Mapcore's Year in Review
Hurg smiles upon you all!
Terri reacted to General Vivi for an article, The Door Challenge - 2018
THE DOOR CHALLENGE!
I want to start out by welcoming you to the 2ND Door Challenge! It’s been a little over 7 Years since we held the first one! A lot has changed in our industry and new engines have made level design more accessible than ever before. With all the fresh talent coming into our industry, I think it’s important that we challenge ourselves and each other to push our creative thinking.
This challenge is meant to be for everyone to join in, from your first time level designer to your Senior and Lead Designers! Everyone is in a different place throughout their careers and it’s always fun to hone your skills on one of the most old school puzzles of our time “Get the Door Open!”. The last time we did this we had a fantastic turn out of completed and submitted puzzles! Especially since we are focusing on JUST design and scripting and NOT on art!
As this is a scripting challenge, you are encouraged to use Dev textures or simple greyscale materials and only what art assets are absolutely necessary to communicate key ideas. The point is to focus on your Scripting / Presentation / Storytelling / Puzzle Making skills.
Most entries generally took a few days to build from start to finish, so don't sweat worrying about the deadline. If you would like to get a better idea, check out some of the entries from the first door challenge.
Remembering our Past
SOLEVAL - First Place
Magnar Jenssen - Participation
Robert Yang - Participation
Jason Mojica - Participation
Rules and QA
Build a puzzle and craft a story to creatively open “The Door”! It doesn't matter whether you're entering, exiting, or just moving from one room to another - just get that DOOR OPEN!
Acceptable Engines : UE4 / Unity / Source SDK
For UE4 or Unity, you will be REQUIRED to provide an EXE of your game
For Source SDK, a simple bsp will do with info on the game you built it in. (Eg. Half-life 2, Portal 2, CS:GO, TF2)
We encourage you DON’T use Art unless needed to sell your idea. Simple meshes / Dev textures / grey textures should do fine.
You are ALLOWED to use Templates to start yourself off. Example: UE4 has a FPS , Third Person , and VR template.
You are ALLOWED to use existing scripting/ blueprints or Code to help you make your puzzle.
You CAN choose - First person, Third Person , Virtual Reality (VR)
DON’T submit anything larger than 250 mbs , we want simple entries that everyone can download.
The challenge will begin Friday, August 10th, and end Sunday, September 16th at 11:59PM US CENTRAL time (GMT -6)
Must Haves :
A zip file including your EXE or map file
2 screenshots of your scene (ATTACHED! This will help us archive our entries for posterity)
A video showing the puzzle's intended solution (hosted on youtube would be fine)
Full Name (optional)
Website or Portfolio (optional)
The original level source (and any other relevant files) for inquiring minds to examine your scripting
Judging : We will start judging the day after closing, Everyone will get 3 votes and then we will vote on the top 3 one week later. Things to think about when judging or making an entry.
Innovation - More than just a simple Door!
Theme - How close did you stay to the idea of the challenge
Readability - Was your idea clear and easy to understand?
Humor - Did you make someone laugh or enjoy your entry?
Overall - Wrap everything together! Was it awesome?
Door - Q: How much Door you got? A: Hell yes
As with the previous challenge, there will be no prize other than the pride of knowing people thought you were awesome. Woo!
Terri reacted to will2k for an article, Optimizing An Open Map in Source Engine
An open map?
Source engine, which is funnily a Quake engine on steroids (a bit of exaggeration but still), inherited the same limitations of its parents in terms of visibility calculations: BSP and PVS. This fact makes Source, as was Quake engine before, more suitable to rooms and hallways separated by portals where the BSP shines in all its glory.
Inheritably, Source does not like large open maps where the PVS is of considerable size and the over-rendering is a real issue.
If you work with Source engine, then you already know the importance of optimization in a large, detailed map. Optimization becomes even more imperative when the said map is open.
What’s an open map? Good question. The word “open” is an umbrella term to denote any map that does not have traditional hallways and corridors that connect indoors to outdoors. The map is mostly large, outdoors with an unbroken skyline; in other words, the same stuff that source engine nightmares are made of in terms of PVS and BSP.
In a traditional “hallway’d” map with twisted corridors leading to open areas followed by other hallways, and even if you “forgot” to place hints and areaportals, the geometry itself allows the engine to cut visleaves and limit visibility; granted the visleaves’ cuts will be subpar and messy and the PVS will be in excess, but still, the visibility and fps will be relatively under control. A twisted hallway is a remedy to long sight lines after all.
In an open map, and without hallways and enough geometry to help the engine, the PVS risks to be huge and the whole map could be rendered at once from any point (over-rendering). We are talking here about a severe fps killer and a potential slideshow on a medium to low range computer. Source does not like over-rendering; I repeat, Source does not like over-rendering.
I believe a screenshot should be welcome at this stage to illustrate an open map. I’ve chosen a nice medium-size map from CSGO to showcase the issue: de_stmarc.
The shot is taken in Hammer obviously, and you can immediately see that the skybox is one big unbroken body from one edge of the map to the opposite one. This is the classic definition of open map.
Let’s see this map in 2D view from the side.
I have highlighted the skybox in blue so you could see the continuous sky body all over the map. Please note that an open map can have varying skybox shapes but I’ve chosen the simple and classic one to showcase my point where it is easier to see and visualize the concept of open map.
In contrast, a “traditional” map will have several skyboxes, often not connected directly but rather through a system of indoor rooms or hallways, varying in size and shape.
I will have my map de_forlorn as example here.
I have also highlighted the skybox in blue and you can easily notice several skyboxes for CT spawn, T spawn, and Mid/bombsites. These skyboxes are not directly connected to each other but the areas related to them are linked on the lower levels through various indoor locations, some vast (like garage, tunnels…) and some small (like lab hallway…).
If you are not that comfortable with source optimization or feel that certain terms are alien to you, then please read my previous optimization papers and articles before proceeding further in this article (Previous papers can be found here Source Engine Optimization roadmap).
The necessary tools
I’m not revealing a secret when I tell you that the same tools used to optimize any map in Source are exactly the same ones used for optimizing an open map. If you were expecting some magical additional tools, I’m sorry to bust your bubble.
Since the tools are the same (nodraw, func_detail, props, hints, areaportals, occluders…), it is more about how to use them in open maps that makes all the difference.
So, how to properly optimize an open map? Well, you could always pay me to do so for you (joking…not…maybe…I dunno!!)
If the above option is off the table, then read on the rest of this article .
While in a traditional map one might get away without using horizontal hints, it is virtually impossible to skip them (pun intended) in an open map unless you want to witness single digit fps burning your eyes on the screen. They are of utmost importance to negate the "tall visleaves across the map" issue.
In a traditional map, even if you bypass adding horizontal hints, the damage in fps will mostly be local since the skyboxes are not connected and areas are mostly autonomous in terms of PVS. In case of my map “Forlorn” and referring to the 2D diagram above, if I remove horizontal hints from CT spawn, then only this area will suffer from tall visleaves and over-rendering. Obviously, this is not cool in terms of optimization, but at least the effect will be somehow restricted to this area only.
In the case of “Stmarc”, you can certainly see that not including horizontal hints will have tall visleaves seen from across the map as the skybox is one unit. The PVS will grow exponentially and the over-rendering will take its toll on the engine.
Let’s move on to some screenshots and diagrams, shall we.
This is our glorious open map in side view. The blue lines denote the skybox, the dark grey one is the ground, and the green rectangles represent solid regular world brushes such as building bases for example. The red starfish little-man-with-arms-wide-open is the player. The orange hollow rectangles denote the various visleaves that the engine would probably create in the map (most go from ground level to skybox level and this is what I refer to as “tall visleaf”).
If you know your optimization, then you certainly remember that BSP relies on “visibility from a region” approach (for a refresher, please consult my papers Demystifying Source Engine Visleaves and Source Engine PVS - A Closer Look. This simply translates to the following: the player is in visleaf A and visleaf A has direct line of sight to visleaves B, C, D, E, F, and G. The PVS for A in this case would be stored as BCDEFG. Once the engine recognizes that the player is in A, and regardless of the exact position in A, it will proceed to render the whole PVS content. Everything in visleaves BCDEFG will be rendered even though the player is at the extreme end of A and has no line of sight to most of this content.
You can immediately notice the extent of damage you will inflict on your open map if you neglect adding horizontal hints: excess PVS with additional useless content to be rendered at all times.
Now that we established the importance of these horizontal hints in open maps, the question remains: where shall I put these hints?
In the diagram above, the most logical places would be on top of the 3 green rectangles.
We added 3 horizontal hints (H1, H2, H3) on top of the 3 regular brushes in our map (the hint face neatly resting on the top of the regular brush while other faces are textured with “skip”). This will create more visleaves as can be clearly seen in the above diagram, and vvis will take more time to calculate visibility due to the increased number of leaves and portals but this is done for the greater good of humanity your map’s fps.
Now the player is in visleaf A1 and the PVS is reduced to (sit tight in your chair) A2, A3, A4, B1, B2, C3, C4, D1, E4, F3. On top of the nice result of a greatly reduced PVS (and therefore content to render), keep in mind that leaves A4, B2, C4, D1, E4, and F3 are mostly empty since they are way up touching the skybox.
Some folks will start complaining and whining: what the hell dude, I don’t have 3 green rectangles in my map; where would I put my hints?? My answer would be: deal with it!!
Joking aside, open maps will greatly differ in size, shape, geometry, and layout. What you need to do is choose 1 to 5 common height locations in your map where you would implement these hints. Medium maps with mostly uniform building heights can get away with 1 horizontal hint, while complex, large maps with various building heights can do with 4-5 hints.
If your map has a hill made of displacements that separates 2 parts of the map, then it is also a candidate for horizontal hints. You just need to insert a nodraw regular world brush inside the displacement to be used as support for the horizontal hint (the same technique can be used if you have a big non-enterable hollow building made mostly of func_detail/props/displacements).
These might not come into play as much as their horizontal siblings, however they could see a growing potential use depending on the map’s layout, geometry tightness versus openness.
I cannot go through all combinations of open maps obviously to show you how to lay vertical and corner hints; what I will do is choose one diagram representing a typical open map scenario with some scattered houses, streets, and surrounding fields. Once you see how I proceed with these hints, it will become a lot easier for you to implement them in your own map regardless of the differing geometry and layout.
Here’s our typical map viewed from top with grey lines being map borders, green rectangles being houses (solid world brushes), and our tiny red player at the rightmost part of the map. The map has a main street that goes in the middle between houses but the player is not restricted to this path only.
The diagram below shows how I would proceed with my hints for such setup.
This is basically what you get when you give a 5-year-old some crayons.
Seriously though, I just gave each hint a different color so you could discern them on the spot, otherwise it would be hard to tell where each one starts and ends.
Most of these hints go from one side of the map to the other while going from ground level to skybox top; don’t be afraid of having big hints that cross your entire map.
Notice that we have both straight vertical hints (shown from above in the diagram obviously) and corner hints; what I did is that I compartmentalized the map so wherever the player is, chances are they will have the least amount of leaves to render in the PVS (this is just a basic hint system and more fine tuning and additions could be done but you get the gist of it).
To get more details on hint placement, please refer to my paper Hints about Hints - Practical guide on hint brushes placement
If your map has enterable buildings, then it is imperative to separate indoors from outdoors using areaportals; this is top priority.
Make sure to slap an areaportal on each door, doorway, cellar door, window, roof opening, chimney, etc. that leads inside the house in question.
What about outdoor areaportals? Good call. In an open map without much regular world brushes to maneuver, it could get very tricky to set up an outdoor areaportal system to separate areas. However, you should always strive to have one, even if it is one or two areaportals across the map. The reason is very simple: the view frustum culling effect, which, coupled with hints, will yield the best results in cutting visibility around the map.
Continuing with our previous diagram, a simple outdoor areaportal system setup could be as follows (top view).
This setup will make sure that the map is split into 4 areas and whenever you are in one of them as player, the view frustum culling effect will kick in to cull as much detail as possible from the other areas.
Let me show you the setup from a side view to make it easier to visualize.
This is the same areaportal that was closest to the player in the top down view diagram but this time viewed from the side. Unlike hints where it’s fine to have one big hint going across the map, for areaportals, it is best to have several smaller ones that tightly follow the contour of the geometry eventually forming one big areaportal system.
Another possibility for outdoor areaportal system is to have a combination of vertical and horizontal (yes horizontal) areaportals.
If your map is a village for example with a highly detailed central square where most of the action takes place, a potential system could be made of several vertical areaportals that sit in every entrance to the square from adjacent streets, and a horizontal areaportal that “seals” the area and works as a “roof”.
For a practical guide on areaportals placement, please check out my article Practical guide on areaportals placement
Props fade distance
This is a really, really important tool when optimizing large open maps. In case you got distracted while I was making the announcement, I’ll go again: props fading is definitely vital when tackling open maps optimization.
What you need to do is to set an aggressive fade distance for all trivial props that do not contribute to gameplay. Players will look closely at how detailed your map is when they check it out solo on the first run; however, when the action starts and the round is underway, adrenaline, focus, and tunnel vision kick in, and all the details become a blur.
During an intense firefight, players will not notice small props and details up close, let alone at a distance. We need to use this to our advantage to fade props thus releasing engine overhead; a faded prop is not rendered anymore and engine resources will be freed and allocated elsewhere.
Your map geometry will dictate the proper fade distances, but as a rough guideline, small props could have a fade distance anywhere from 800 to 1200 units (flower pot on a window sill, small bucket at the back door, a bottle on the sidewalk…), while medium props could do with 1400-1800 range (a shrub, a power box on the wall, an antenna on the roof, wood plank, gutter pipe, fire hydrant…).
Be very careful though not to prematurely fade critical props used for cover or game tactics (car in the middle of the street, sandbags, stack of crates, dumpster on the sidewalk…).
Many people forget about this technique which is more than needed when it comes to open maps that tend to have larger average PVS than traditional maps.
I showcased in a previous article of mine the fps cost of cheap and expensive assets (Source FPS Cost of Cheap and Expensive Assets).
Get in the habit of using the low-poly model version as well as the cheap texture version in the distant non-playable areas and the high unreachable areas where players won’t have much of close contact with the environment. Potential candidates could include a distant field, the unreachable opposite bank of a river, a garden behind hedges/walls, high rooftops, the 3D sky…).
Fog/Far-z clip plane
This technique, when correctly used, can provide a big boost to your frame rate as parts of the world beyond the opaque fog won’t be rendered at all.
For this technique to work properly, your map should have a foggy/rainy/stormy/dusty/hazy/night setting (use as applicable) where a fully opaque fog won’t appear out of place. Obviously, if your map takes place in a sunny and clear day, this technique won’t work much and it will look inappropriate.
Using this is simple: For example, if your map is set in a rainy and foggy day, you just need to set the fog end distance while having its density set to 1. You will then set the far-z clip plane to something slightly higher than the maximum fog distance (if the fog end distance is 8000 units for example, the far-z could be set to 8200).
This is another good technique to reduce engine overhead and the cost of rendering.
It is true that the 3D sky is used to expand the limits of your level and decorate its surrounding, however, since it is built at 1/16 scale (and expanded in-game), it is also a nice way to decrease rendering costs. Use this to your own advantage and relocate assets in the non-playable areas with limited player interaction to the 3D sky.
One thing to keep in mind though, the 3D sky’s visleaf is rendered at all times on top of the PVS in the playable area. Do not go overboard and make an extra complex, highly expensive 3D sky or you would be defeating the purpose of this optimization technique.
You thought I forgot about occluders? Not a chance as these are the big guns when it comes to large open maps with little world brushes to use for other optimization techniques.
Let’s clear one thing first; if your map is made mostly of brushwork and displacements with little to no props, then there is absolutely no need to resort to occluders as they’d be totally useless in this case. Only when the map is loaded with models and props in an open setup with little regular world brushes that occluders come to play in force.
To place occluders, you would search for areas where these occluders could make the most impact (low fps, high traffic, props abundance) since they run in real time and are expensive, otherwise their cost would outweigh their benefit in terms of frame rate variation.
Remember that occluders rely on the player’s position and field of view relative to the occluder to calculate what gets culled. You need to place them in a way to maximize the number of props to be culled behind them when the player stands in front of these occluders.
Let’s see some examples.
We go back to our famous top down diagram; the occluder is dark blue placed on the left wall of the large house while the little black stars represent various props and models. The 2 diagonal black lines denote the player’s FOV relative to the occluder. Anything behind the occluder and within the view frustum will be culled.
That’s nice; we are able to cull 4 props but is it enough? It is not optimal as we can still do better. What if we move the occluder to the right wall of the house?
Much better if you ask me. 5 additional props were added to the culling process meaning less overhead and fewer resources to render for the engine. That is why I said earlier it is all about maximizing the impact of the occluder by placing it in a way relative to the player’s position that maximizes the number of culled models.
Here’s another example (still top down view).
The player has moved to the middle of the central street, and beyond that L-shaped house is an open field with a lot of props scattered around. One way to implement occluders is as showcased in the above diagram. Notice how I arranged 2 perpendicular occluders along the walls for the maximum occlusion effect as all of these props in the field are not rendered from that player location.
Another way to arrange occluders in this case would be diagonally across the L-shaped house (split into 2 or 3 occluders if needed to accommodate the nearby geometry; they can be floating without the need to seal an area).
If you’re feeling brave enough (you should be after reaching this far in this article), you could also add an extra occluder along the wall of the house to the left of the L-shaped house to further enhance the view frustum occlusion effect and cover more props in the field.
The most common places to add occluders in open maps include a displacement hill that separates parts of the map, a hedge that stands between a street and a field full of props, a floating wall between a house garden and the street, the walls of a large house, the walls of a tall building, a ceiling when it separates multiple levels…
To read more about occluders placement and cost, please consult my article Practical guide on occluders placement
The foundation of optimization in Source engine will be the same whether it is a traditional map or an open one. You will heavily rely on func_detail, nodraw, displacement, props… to achieve your goals but it is the way you use these tools in an open map that makes all the difference.
One might get away with being a bit sloppy with optimization in a traditional map, however, make no mistake that an open map won’t be any forgiving if you decide to skip a beat in your optimization system.
Talking about different open maps and formulating varying optimization systems for them could fill articles; I hope this article has shed enough light on the open maps optimization approach to let you easily design a system for your own map.
Terri reacted to Mapcore for an article, Day of Infamy Mapping Contest
Participants have from the 15th of September 2016 until Midnight (GMT) on the 22nd of December 2016 to create, test and upload an original or Day of Defeat inspired map for Day of Infamy (www.dayofinfamy.com)
Map included officially in game
Void Surround Sound Headphones
M330 Mouse Pad
All Wall Worm Source Modelling Tools
M330 Mouse Pad
All Wall Worm Source Modelling Tools
M330 Mouse Pad
All Wall Worm Source Modelling Tools
M330 Mouse Pad
All Wall Worm Source Modelling Tools
(*All prizes are subject to participant eligibility. No cash value. The contest Organizers and Sponsors reserve the right to change or remove the prize structure at any point with or without reason.)
In addition to the prizes stated above, GameBanana will also be offering a sub-prize for the best development blog, work in progress or tutorial created throughout the process.
This is an entirely optional part of the contest and is open to members of all communities.
To enter simply create either a development blog / work in progress page OR a level design tutorial / guide for Day of Infamy on either GameBanana, MapCore or the Insurgency Forums.
Entries must be uploaded on or before Midnight (GMT) on the 22nd of December 2016, and include “[DoI Contest]” in the title. Entries will be judged by members of the GameBanana team, as they appeared at the deadline.. No changes or updates are permitted during the judging phase.
Rules and Frequently asks Questions
The submission must be a playable map for the PC version of Day of Infamy.
Remakes of existing maps are not allowed, however maps inspired by classic DoD maps are encouraged.
Entries must be submitted to the Day of Infamy mapping contest section of BOTH GameBanana.com and the Steam Workshop before the deadline.
Multiple entries are permitted, however submissions will be judged on individual quality rather than quantity.
Team based entries are permitted, however the entrants will have to agree how to split any prizes awarded, prior to prize claim and dispatch.
It is essential to thoroughly test your submission before the deadline as entries cannot be modified during the judging phase.
Exceptions: Changes to the submission profile are permitted after the deadline, provided they are purely aesthetic and that the map file does not change. (E.g. Editing the description / screenshots)
Maps that were under creation prior to the announcement of this contest can be entered, provided a completed version has not been released for public Download.
All custom textures, models or code must be contained within the download file or embedded into the .bsp.
Authors are free to share their content on any other websites or services they wish, however the file must remain free to download and play, without requiring membership or payment.
If the submission is distributed on an external website or service, it must clearly state that the submission was created for the "GameBanana / MapCore Day of Infamy Mapping Contest 2016”.
Authors must be able to accept cash payments via paypal and will be required to fill in a prize claim form prior to payment. Winners of hardware and physical products will also be required to provide a valid shipping address.
Judges and individuals associated with organising this contest cannot enter or assist entrants.
Entries must clearly state which game mode the level is designed for.
Participant eligibility: The “GameBanana / MapCore Day of Infamy Mapping Contest 2016” is open to any individual, or teams of individuals, provided they comply with the following:
Participants may not be an employee of the “Organiser” or “Sponsors”.
Participants may not have taken part in the preparation or announcement of this
Participants may not be a direct relative, spouse, direct employee, or long term
partner of any of the above definitions (a - c).
Legal Age: This contest is open to any individual who meet the above “participant eligibility” criteria. In the event of participant who has not reached the legal age in his/her state winning one or more prizes defined below, he/she must provide contact details for the legal guardian who will claim the prize(s).
TWO (2) copies of the map are required for this contest, and must be uploaded on or before the deadline. The primary version (used for judging) must be submitted to GameBanana.com and placed in the “Day of Infamy > Mapping Contest 2016” category.
The second version must be uploaded to the Day of Infamy Steam Workshop
No changes to the downloadable file can be made during the judging phase. Please remember to ensure that all relevant custom content is included, and that your map is thoroughly tested.
Maps will be judged by the developers at New World along with the staff at MapCore and GameBanana. Each map will be scored on the following categories, and given a total score out of 100.
Gameplay (40 marks)
Visuals (30 marks)
Originality (15 marks)
Performance / Optimization (15 marks)
Terri reacted to PeteEllis for an article, Creating a Single-Player Combat Space
This article is the first installment in a three-part article that looks at the considerations for creating a single-player combat space, using a walkthrough of the first battle in ‘Killzone Mercenary’ as a working example.
Creating a Single-Player Combat Space Part 1
This article will explain how to create a combat space for a single-player campaign, using my work on ‘Killzone Mercenary’ (hereon referred to as KZM) as an example. There is already a fair amount of literature on the different methods you can use for creating a combat encounter, but I felt that none of it really discussed how to arrange the layout in closer detail, nor did they discuss where the different elements were appropriate. In my early work I tried to jam in all the concepts for encounter design without fully understanding how they affected the player’s experience. As strange as it sounds, I discovered there were times when it was better to restrict the number of elements being used to provide a much more focused and coherent experience; sometimes less is more. I will take you through an example to explain what I mean and how this can be the case.
I will use the very first combat arena in KZM as it’s a small encounter where I can explain in depth what goes into even the most basic combat space. This encounter is a fight against assault troopers who are trying to stop the player from escaping the building and reaching the objective building; the ‘Halls of Justice’. I designed bigger encounters that featured many flanking opportunities and complex circular navigability but focusing on a simple encounter allows me to explain certain techniques in detail and where I purposely removed some elements to balance the difficulty and give the player different experiences.
First of all I will explain two important aspects that must be considered for combat creation; AI metrics and weapon choice. I will then take you through a step by step walkthrough of this first encounter explaining in detail the reasons how it was designed and constructed for optimum player experience.
The design mantra ‘form follows function’ should be the basis when creating an arena layout; that is that the arrangement of geometry should derive from its purpose. The arrangement should support the function not only of the style of experience you want to create (is it a tight corridor section with close quarters combat or an open space with multiple routes and options, for example) but it should also support the main element that makes up the combat encounter; the enemy AI.
When considering the layout for the AI or non-player characters (NPCs) that will populate your environment you have to consider their metrics. These are the numerical values for how the NPCs move around and use the environment and the differences between various NPC enemy classes. This isn’t something people tend to talk about and so it can be easily forgotten or missed, yet it directly affects how your enemies will move and react.
For example, in KZM the standard enemy NPC class were the Assault Troopers. These soldiers could be given patrols and animations to perform whilst they were in an ‘unalerted’ state, just like every other enemy class. However, when they were in an alerted state their behavior changed so that they used cover points to move around the combat space. The maximum distance between cover points that an assault trooper would move was 10 meters. This meant that any cover point that was further away would not be considered, so we needed to make sure when creating combat spaces which used assault troopers that there were enough cover islands so they could move around. If there weren’t, the assault troopers would just stay in the same spot and could risk looking less intelligent.
The assault troopers also tried to maintain a distance of 15m whilst they were trading shots with the player. The behavior was that if the player got closer than this range, but not so close that they were in melee combat distance (5m), the assault troopers would retreat to this mid-range distance of 15m. They would also never choose a cover position that was closer than 15m to the player, so when we created combat spaces we had to make sure that there was enough variety of cover positions in the >15m range.
For the production of KZM we used the ‘Killzone 3’ engine and modified it for the PS Vita. In ‘Killzone 3’ the assault troopers picked their cover within a range that was further than 25m from the player, but we discovered that this was too great a distance for the enemy to still be clear and readable on the PS Vita screen. In our modified version of the KZ engine we had to reduce the combat distance to 15m, which meant that the original combat spaces we had created using the ‘Killzone 3’ metrics also needed adjusting in order for the NPCs to still work. It is an unfortunate truth that the game metrics, be it for the AI or otherwise, can change within a game’s development, which means that your combat arenas will also need to be adjusted.
The metrics for both the player and enemy weapons were also considered. As this is the start of the game we can be more certain that the player is using the default starting weapons, at least on their first playthrough, before they have earned enough credits to buy a new arsenal. Therefore, the combat distances of enemy placement were considered to be comfortably within range for the player’s assault rifle.
The enemy assault trooper archetype used assault rifles that were balanced to have a short range of <10m, and a long range of >20m. This meant that their behavior was to try and keep the player within these ranges and would thus move around the environment to try and maintain this. This was important to consider when building the environment so we could determine the amount of movement the troopers were likely to perform. This is important for balancing difficulty as a moving target is harder to hit.
As this was the opening of the game, we wanted to make it compelling in order to grasp and hold the player’s attention; we wanted to start with a bang. If the first lot of encounters in the game only included assault troopers with nothing else to differentiate them it may not have been so compelling. Therefore, we decided to include a significant Killzone enemy vehicle; the Helghast Dropship. Of course it would have been far too difficult to fight a Dropship at this point in the game, so instead it was used as an impressive introduction of enemies into the arena using the rappel ropes from the ship itself.
Using the Dropship at the end of the encounter, it was important to foreshadow its existence prior to its introduction. The level’s opening cut scene introduces the buddy character, Ivanov, and the narrative that he and the player are infiltrating the building whilst trying to avoid the searching eye of the Dropship.
The foreshadowing of the Helghast Dropship
Once the player has control they make their way up a flight of stairs learning how the movement works and feels whilst being in a safe environment. Once at the top of the stairs they enter through a door where they are introduced to the new melee attack which utilizes the touch screen on the PS Vita.
After a successful melee attack the player enters through the door to the first combat area. The composition shows the exit of the arena in the top left third of the frame. Central to the player’s view is where the first pair of enemies enter from, ensuring that their arrival is not missed.
The exit to the arena is in the top left section of the opening composition
Starting on the level above, the two assault troopers vault down into the gameplay space, to give their presence a more dramatic opening than merely walking in through a door. Their animation and movement also ensures that they catch the player’s eye if they aren’t looking in the desired direction. These vault down animations were 4m high, the standard height for a room in KZM, which meant this was a metric we had for the balcony and floor above.
Two assault troopers drop into the environment from the level above
Once the assault troopers had landed in the arena they became a lot less mobile than their standard behavior so that they were easier to shoot because, as previously mentioned, a moving target is harder to hit. As this is the very first section of combat the player encounters in the game it was important to ensure that it was easy to get to grips with.
None of the enemies were waypoint/navmesh restricted to certain areas in order to limit their movement as this could potentially lead to NPCs not behaving correctly under differing circumstances. In fact, there were only a very select few instances where we waypoint/navmesh restricted any characters in the whole of KZM; we instead crafted the environments to support the behavior we wanted from the NPCs. This was important for consistency; if you restrict areas and zones for the AI then they won’t behave consistently with what the player has learnt. This would lead to the player not being able to predict their behavior and therefore won’t be able to plan how to attack effectively.
Here, in this first section, the two assault troopers took cover at two upright pillars of high cover and an overturned sofa of low cover. They didn’t tend to venture further into the environment unless the player had for some reason retreated to the edges of the level. The reason they wouldn’t move and advance on, or flank the player was because the other cover options in front of them were within 15m of where the player was likely to be stood. This caused them to be more static and thus easier targets to allow the player to get to grips with the shooting mechanics.
I also chose to mainly use higher cover here so that when the enemies lean out of cover their shooting positions allowed the player to shoot their full body, which was a bigger target than when they poked their heads over the top of the low cover positions.
Low cover positions are great for seeing the enemies move around and change their positions, as the tops of their helmets are visible over the top of the cover. Enemies are much harder to track when they use high cover as it breaks line of sight to them, so this is usually the harder option. However, as they have restricted cover positions and weren’t moving around in this specific situation, it was the best option to use for less difficulty.
First Combat Front
A ‘front’ is the perceived line or boundary that faces the enemy and is the nearest position which combat should be engaged from. The ‘fronts’ used here create boundaries between the two sides; a front for the player and the buddy character and an opposing front for the two assault troopers. This was the simplest setup to start the player off with and it only required two sets of cover points as I didn’t want to encourage the enemy to flank the player at this stage. This section of the encounter only needed these few pieces of cover (in the image below) in order to work and the other pieces of cover were actually for further waves of combat.
The two fronts and the cover setups providing it
It’s also worth noting that the cover object which the buddy character crouches behind is positioned further forward than the arrangement of cover that the player is drawn to. This is so that the buddy character is in the player’s view so they always see the buddy’s actions and involvement. It wouldn’t be optimal to have a buddy NPC that the player rarely saw. The buddy is also kept near to the player in order to maintain a close relationship and the feeling of being a team. Empathy is directly related to proximity between characters, so if the buddy was further away from the player they would experience a much more detached feeling towards them.
Continue to part 2 or go back to the homepage.
Creating a Single-Player Combat Space Part 1
Creating a Single-Player Combat Space Part 2
Creating a Single-Player Combat Space Part 3
Copyright ©Peter Ellis 2016. Killzone™ Mercenary is the property of Sony Computer Entertainment © 2013. Killzone is a trademark of Sony Entertainment Europe. Killzone: Mercenary is a trademark of Sony Computer Entertainment America LLC.
Terri reacted to FMPONE for an article, 2015: Mapcore's Year in Review
(Art by Thurnip)
This overview proves how talented our community is. We share, give feedback and learn from one another. Lots of our members have made it into the game industry and continue to make their mark working for high-profile studios. Our articles were shared around the world and our collaborative CS:GO contest was a huge success. We can only conclude that 2015 was again a stellar year for the Core and we are looking forward to an even better 2016!
2015: Mapcore's Year in Review
It was a banner year. Here’s a taste of what our community created:
Temple of Utu by Minos
Corridor by JonnyPhive
Rails by Deh0lise
Cold Fusion by Rusk
Half-Life 2 Scene by Psy
Resort by 'RZL and Yanzl
Zoo by Squad and Yanzl
Santorini by FMPONE and Dimsane
Corridor by RaVaGe
Seat by penE
Half-Life 2 UE4 Corridor by PogoP
Tulip by catfood
Volcano by 2d-chris
Chilly UE4 Scene by TheOnlyDoubleF
High-quality original content:
Grand Prize Winner Announced
Hurg Smiles Upon You All!