News & Blog

From 3 years to 3 days: Spring #UE4jam

We par­tic­i­pat­ed in Spring #UE4­jam! While our first project took three years and is still not re­leased, here is is what we learned while mak­ing a game in 3 days:

One big ad­van­tage of us­ing the En­gine of an­oth­er com­pa­ny is that they host great events like game jams.

At the be­gin­ning of such an event, a theme is an­nounced to which your team then gets a lim­it­ed amount of time, usu­al­ly 2-3 days, to de­vel­op a lit­tle game. For us as Vhite Rab­bit it was the first time we par­tic­i­pat­ed in such an event. Two of us, Flo­ri­an and Max­i­m­il­ian, did join one be­fore, though.

Since the size of teams was lim­it­ed to five, not all of Vhite Rab­bit were able to par­tic­i­pate:

  • Jonathan took care of code
  • Flo­ri­an took care of tex­tur­ing and in­te­grat­ing As­sets
  • Max­i­m­il­ian took care of all 3D mod­el­ing, some 3D Pos­es and even tex­tures
  • To­bias al­so took care of code
  • And Philipp Dör­flinger (check out his Sound­cloud pro­file), who is not tech­ni­cal­ly a Vhite Rab­bit, but helped us out with the sound­track for Side Trip to Won­der­land and in the past. He pro­duced the amaz­ing sound­track and all the sound ef­fects.

Spring into Action!

… was the top­ic for this year’s Spring #UE4­jam. About an hour af­ter the top­ic was an­nounced, we be­gan brain­storm­ing in a hang­outs meet­ing. The first con­crete idea we came up with was a type of time-trav­el puz­zle game in which you would change around things in the Win­ter and then “spring in­to Spring”, when all the ice has melt­ed. You would then be solv­ing some puz­zle through a kind of Rube Gold­berg ma­chine.
We do have over three years of ex­pe­ri­ence in plan­ning over­ly com­plex games and we quick­ly re­al­ized this game would nev­er be made in three days.

The nice part about this top­ic is that “spring” is a ridicu­lous­ly am­bigu­ous term. You have the boun­cy thing, the sea­son, the wa­ter source, the new-born plants… so much to work with!

Fi­nal­ly, Max­i­m­il­ian, if I re­mem­ber cor­rect­ly, came up with “Spring Clean­ing”, which brought in a new per­spec­tive. Quick­ly, the idea was re­fined in­to clean­ing up your room for “Spring Clean­ing”, but with a boun­cy spring! This idea was way more re­al­is­tic to get done in three days.

In ad­di­tion, this was great for VR: We had some tool with a spring at­tached, which again had a plunger at­tached. The en­tire thing would be held with the mo­tion con­trollers, so the main me­chan­ic was sim­ple and should be easy to im­ple­ment and un­der­stand. Al­so, the play­er is stat­ic, hence no mo­tion sick­ness. The room you cleanup con­strains view dis­tance, again, good for per­for­mance, and no mo­tion sick­ness.

The Hurdles

At the be­gin­ning of the jam we al­ready had been work­ing on a small game us­ing Un­re­al En­gine for 3 weeks, which was sup­posed to get re­leased be­fore the jam, but we did not quite make it (more about that soon!). As a re­sult, we al­ready had a bit of ex­pe­ri­ence with the (for us) new en­gine and were able to avoid fun­da­men­tal mis­takes in project set­up and struc­ture, which was great!
In­stead, some process-re­lat­ed prob­lems arose and my per­son­al way of cod­ing col­lid­ed with the fast-paced pro­gres­sion of game jams.

Short technical paragraph

(Skip if you’re not a nerd.)

For some rea­son I (Jonathan) de­cid­ed to make the en­tire project con­sis­tent­ly use C++ rather than Blue­prints. This meant trans­lat­ing the blue­prints of the UE4 project tem­plate we based the game off of in­to code rather than the vis­ual script­ing lan­guage which was used there.
This took way longer than ex­pect­ed, since I had not worked with some of those fea­tures in the en­gine be­fore. In the end, I had learned a lot of UE4 API and hav­ing over eight years of ex­pe­ri­ence with C++ al­lowed me to work a lot faster in the code rather than blue­prints.
Even more im­por­tant­ly, I was able to see prob­lems quick­er (I al­ways say “Blue­prints are Write-On­ly”, once they pass a cer­tain thresh­old of com­plex­i­ty).

In ad­di­tion a mis­con­cep­tion of how a cer­tain func­tion be­haved cost me around ten hours. I start­ed googling it way to late, be­cause I mis­per­ceived the prob­lem as be­ing spe­cif­ic to our project and code base. (See this ques­tion on the UE4 An­swer Hub for more spe­cif­ic in­fo). Once I knew that, though, I was ac­tu­al­ly able to make use of that as a trick in oth­er ef­fects/fea­tures.

Process Problems

The process re­lat­ed prob­lems were due to the art as­sets be­ing in­te­grat­ed about two hours be­fore dead­line, which re­sult­ed in not all func­tion­al­i­ty be­ing com­bined with the as­sets. The re­al­iza­tion that some of the func­tion­al­i­ty had to be adapt­ed to match the as­sets came rather late as a re­sult.

There were some mi­nor prob­lems with peo­ple chang­ing the same files si­mul­ta­ne­ous­ly, which made syn­chro­niz­ing them be­tween each oth­er dif­fi­cult and we end­ed up over­writ­ing and re­do­ing some changes ev­ery now and then.

Conclusion: Our team is nuts.

In a good way:

I have nev­er seen any­one but Max­i­m­il­ian push out a ful­ly fur­nished room, props and cus­tom hand-mod­els with up­dat­ed hand-pos­es in such a short time. On top of all of that, cre­at­ing as­sets for a VR game has slight­ly dif­fer­ent re­quire­ments than for a clas­sic game, more de­tailed ge­om­e­try, less fak­ing, but still as per­for­mant as pos­si­ble. I be­lieve the spring-clean­ing tool with the plunger at­tached to it is a mas­ter craft­ed ex­am­ple of how well he met these re­quire­ments.

Flo­ri­an ba­si­cal­ly flour­ished this week­end, while I was in deep sh*t with my code and was to busy with that to do any project man­age­ment, he took over, cre­at­ed all as­set lists, game de­sign doc­u­ment, took care of some or­ga­ni­za­tion­al work like col­lect­ing ad­dress­es for the sub­mis­sion and most of the tex­tur­ing work. He worked on get­ting Wwise in­te­grat­ed with Un­re­al En­gine and lat­er start­ed in­stalling the Ocu­lus Au­dio SDK plug­in. De­spite many frus­trat­ing mo­ments, he kept push­ing through ev­ery­thing.

To­bias was very new to Un­re­al En­gine and I am guess­ing me want­ing to write ev­ery­thing in C++ must have come al­most as a shock to him. But even though giv­en the op­tion to use blue­prints, he did ev­ery­thing in C++ (the “right” way), much fur­ther out of his com­fort zone and still he was able to com­plete all tasks. Even though he had Uni­ver­si­ty on Fri­day and Mon­day (the time shift al­lowed us to work till 6 AM on Mon­day), he ded­i­cat­ed ev­ery minute he had to this project.

Philipp was not used to be in­te­grat­ed in our way of work­ing over Slack and Hang­outs Meet­ings, but he adapt­ed rapid­ly and fit per­fect­ly in­to the team. In­stead of us ask­ing him to make cer­tain sounds, he had his own ideas, which I be­lieve made the Au­dio of this game so much greater. Af­ter all, he knew what could work and what wouldn’t. His sound­track was ab­so­lute­ly on point. It per­fect­ly re­flect­ed what we all had in mind for the game while per­fect­ly work­ing with the in­creas­ing hec­tic the game was sup­posed to con­vey in a one minute game-round.

I my­self cod­ed 22 hours in one go for the first (and hope­ful­ly last) time in my life. I con­sumed a ridicu­lous 18 cups of cof­fee dur­ing those three days - yeah, I am on a break from cof­fee right now - and I am proud how I was able to push through. Even though the first one and a half days were ba­si­cal­ly hell for me since noth­ing in my code was work­ing as ex­pect­ed from the get-go. I learned a huge amount of new UE4 API, which made me con­fi­dent for fu­ture Vhite Rab­bit projects us­ing the en­gine.

I am im­mense­ly proud of my team. I have worked in teams at Uni­ver­si­ty be­fore, but nev­er was there such a feel­ing of a com­mon flow state as with this team. Ev­ery sin­gle mem­ber of this team was in­valu­able and I con­sid­er my­self lucky to have been part of this project. (I will not re­peat this too quick­ly, though. Even my com­put­er didn’t want to start the next day).

The Future

We put tremen­dous ef­fort in­to “Spring Clean­ing Ac­tion” and since it did not quite make it to be the game we had in mind, we will clean that up (*ha­ha*) and re­lease it over on for pay what you want, which gives you the abil­i­ty to sup­port us, but at the same time al­low you to play the game even with­out pay­ing any­thing, if you are not in a sit­u­a­tion where that is an op­tion.

We be­lieve the idea has a lot of po­ten­tial and is fun, once we tweak the Spring Clean­er con­trols a bit (your clean­ing tool in the game). You will hear from us!