If you believe this content violates Code of conduct please provide details below. All reports are strictly confidential.
Crytek staff entered four teams into this year’s Global Game Jam. Check out game one, Homebound, and get advice on how to create games quickly in our interview with the team who made it.
CRYENGINE was proud to once again be a sponsor of Global Game Jam and staff at our HQ in Frankfurt joined thousands of developers around the world to form teams and create a game in just 48 hours. The theme for this year was “What home means to you” and teams were challenged to interpret the brief in whichever way they liked. Crytek entered four teams and today we’re checking out Homebound from Team Tower, and interviewing some of the developers who took part in the challenge.
Want to play it? Hit this link: https://globalgamejam.org/2019/games/team-towers-h...
Read on to find out how the team approached the task and pick up some advice about creating your game quickly in our interview with Alex Klinger, Software Engineer, Viktor Ikkes, Senior Cinematic Designer, Matthias Otto, Senior Level Designer, and Jean-Baptiste Herve, Junior Software Engineer.
Hey guys. What was your main role on the team?
Alex: I was the main programmer. I coordinated the coding between me and Jean-Baptiste and designed the technical architecture of the game. My main time went into creating the player and controls, the pedestrians, level logic, and a lot of Flow Graph nodes which allowed us to “script” the game. For example, I added nodes to enable or disable the player and the pedestrians, or to trigger events when the player walked through an area. I also worked on some props in CryDesigner for dressing scenes like a trash bin or a bus station.
Matthias: Creative director! Or more accurately, level designer and technical designer. I plugged the things together.
Jean-Baptiste: I was a programmer on the team. I joined Crytek in early January, and I am quite new to CRYENGINE, so I learned a lot during the game jam. It was cool to see the amazing work from my team. I “only” did the car and traffic system, including the code that spawns and moves the cars.
Viktor: I did most of the art stuff, including modeling and the minimal texturing we had in the game. I also made the intro cinematic.
How did you guys come up with the concept for Homebound?
Viktor: Right after the topic was announced we quickly pitched all our possible ideas on the board.
Jean-Baptiste: I think we all wanted to describe home as a feeling, but at the beginning all our ideas seemed too complicated for 48 hours. Once we had the idea of representing the relief of getting home the rest came naturally.
Matthias: The original idea was from Alex and was about traffic and how it’s a challenge to get home. While that serves as a gameplay purpose it didn’t really fit the topic of “What home means to you.” So we came up with the idea of the warm light in the distance that’s your main goal. We wanted the cold and dark theme to contrast with the warm light of your home, a comfortable place to arrive at. We wanted to start with a warm beginning, in a bar with company. From there we go through this dark passage until we reach home, where you get a good feeling having arrived safely.
Alex: To begin with we had the idea of creating a cleaning simulation, since we could all relate to that and we thought it would be funny. But after discussing for a while we started to talk about what feels like home to us or what we feel when we think about home. We all agreed that home is a feeling of being comfortable and relaxed. You should be happy to be there. In order to capture the feeling of being comfortable at home we came up with the idea of a game where you want to get home.
I think everyone can relate to that feeling, when you just want to be at home and do nothing. Especially when you have been away for a while. That is why we wanted the outside world to be as uncomfortable as possible, giving the player motivation to get home.
What advice do you have about creating a game so quickly?
Alex: In my opinion the most important thing is to keep the scope proportionally small and define a lot of stretch goals in case you have some time left. Our base scope for the game was just “a player who can move on a 2D grid and has to avoid cars in order to reach the final level goal.”
We started by creating the first prototype to see if the game would be fun and identify what potential issues could be. Since the scope was so small, after just two hours we already had the player and a white box level, which you could play from beginning to end. This enabled us to quickly test features and plan our next steps. After that we added more and more content to the game and polished it. My general advice would be don’t over-think or over-design the game and just do one thing after the other.
Matthias: Know your strengths and weaknesses and approach the task with passion and a great attitude. Also understanding the skills in the team is important. We had everyone in exactly the right role.
Viktor: You have to know how long things take you to make and how much you can do in the given time. Balance your quality and quantity towards the time constraint.
What features in CRYENGINE did you use to create the game so quickly?
Matthias: The Environment Editor and the genius lighting system quickly gave us the look of the game which we really liked. I wanted to use the volumetric clouds to get a nice stormy ambience. Also that came for free and no assets were required.
Apart from the cars, we have chained dogs as obstacles. It’s a pure use of CRYENGINE physics and Flow Graph, both of which are very powerful. My advice for other developers would be that it’s a good idea to look into existing projects to see how things are being done, and then start experimenting yourself.
Alex: For programming I used almost only C++ and components. All logic written for the game was a component you could add to an entity. We also used the experimental Schematyc to compose our entities. For example, the player was composed out of multiple default components, like a mesh, rigid body, constraints, and one custom one I wrote in C++ to create the player controls. This saved us a lot of time because I didn’t need to implement everything from scratch, but instead used what the engine already provides.
My recommendation for programmers who want to create something as quickly as we did would be to use a lot of the existing components and try to make your custom components as modular as possible. Another thing we used a lot for the level scripting logic and controls were Flow Graph nodes. For most components like the “Player Component” or the “Vehicle Spawn Component” I created Flow Graph nodes which allowed our level designer to control them and create simple level logic with them. For example, we could enable or disable the vehicle spawner when the player walked past a certain point in the level just in Flow Graph, which is way faster than doing all that just in code.
Since I had some time remaining at the end and we didn’t really have much programming work left I started to create some meshes for the level. I used CryDesigner for that because it is really easy to use and immediately converts the mesh into a “cgf”, the CRYENGINE geometry format. We also used the designer to create the rough level white box and then added details to it later, which allowed us to create such a big level.
Viktor: CRYENGINE is really quick for working with 3D models. If needed, the first blockout can be done with the Designer Tool in the engine very quickly, and then sent to any DCC tool if further work is needed. The exporter plugins for DCC tools make it easy to update single and multiple objects and quickly check how things look in the engine with a single button click.
I also used Track View to make the intro cinematic. Just auto-record some cameras and objects, re-time the keys to get your desired pacing, and then start polishing the animation curves in the Curve Editor.
Jean-Baptiste: I used a lot of raycasts in my car avoidance system. We feared it would use a lot of resources, but it actually ran really smoothly. I was expecting something convoluted, but I found component creation quite easy and fast to write for C++.
Even if it wasn’t part of my role, and it’s bugged in our game due to the time constraint, the rain effect of the game is amazing. It was fast to add and brings a lot to the atmosphere of the game.
What was the best part of your game jam dev experience?
Alex: To be honest, the best part for me was the overall freedom we had. Normally when you’re working on a game or an engine for a long time you need to properly design the system and think about what could be potential problems with it, or how it could be extended at a later point. But everyone knew we only had a limited amount of time, so we just did whatever worked for us in that moment. It was cool to see the game evolving at such a rapid pace and to see how well our vision from the beginning turned out in the end.
Matthias: It was great to work together with a small group of people and make so much progress in so little time.
Jean-Baptiste: After creating my first component, and seeing our first iterations with light and rain, I realized how powerful CRYENGINE was, without being complicated. As a developer, I felt like I could do so much more than what I was used to with the other engines that I’ve used in the past.
Viktor: Creating so much in such a short period of time is great!
What did you find most challenging about the event?
Alex: I would say the most challenging part for me, and yes it’s kind of a no-brainer, was to get every single part of game done in that short period of time. We needed gameplay logic, level scripting logic, cutscenes, sound, music, meshes and so on. I’m quite impressed with what we achieved in that time
Matthias: We had a lot of ideas and I think the challenge is to stop at some point and accept that what we have will actually be enough. I would rather have a polished experience over feature creep!
Viktor: You have to let go of details and ideas sometimes. There is just not enough time to do them all. Finding the right moment to stop adding ideas is hard, especially in the beginning when there are no reference points to compare to. You have to try to keep the whole picture in mind all the time.
What would you have done differently?
Alex: Not much. I think we chose a pretty good approach and also made a pretty fitting game for the theme. Maybe we wasted a little bit too much time on certain parts of the game, for example the bar interior and cutscene, but it’s not easy to predict how much time something will take. I would also probably try to stop adding new things to the game at the last minute. The last hours of the game jam were quite stressful because we kept adding new things to the game or reworking parts of it.
Jean-Baptiste: I would have tried to build more systems. But in the end I think that the good thing about our game is its simplicity.
Viktor: I think we could have merged our content earlier. Some things just break when you try to squeeze in all the different content from all members in the team in the last moments!
Full Credits for Homebound:
Jean-Baptiste Herve, Junior Software Engineer for CRYENGINE
Viktor Ikkes, Senior Cinematic Designer for Hunt: Showdown
Lukas Keil, Junior Audio Designer for Crytek Audio
Gabriel Yakir Ketteler, Community Developer for CRYENGINE
Alexander Klinger, Software Engineer for CRYENGINE
Matthias Otto, Senior Level Designer for Hunt: Showdown
Marcel Lichner, System Administrator, Crytek
Michaela Mrazkova, Junior HR Assistant, Crytek
Stay tuned for more on the other entries from Crytek teams in this year’s Global Game Jam. We’ll also be looking to make Homebound and the other Crytek entries available on the CRYENGINE Marketplace so you can check them out in the engine. We look forward to your feedback in the comments, on the forum, and via Facebook and Twitter, and don’t forget to join the community and CRYENGINE staff members over on Discord.
- Your CRYENGINE Team
Is nice to heard all those tips about c++ and Schematyc , but i am really disappointed the code is not shared in github or something, would be much better so we all can learn from there