Friday, September 28, 2012

Design ideas

Ok, so I have a sandbox testing playground of a game. But what to do with it next? Here are some of my ideas.


  • post-apocalyptic settings
    • broken technology everywhere
    • placement in space (old space station? stars visible through windows?)
      • still partially functional
      • main goal is to repair station (collecting necessary spare parts while moving through levels)
      • levels are not fully accessible at start, you need to push correct buttons, levers to open some previously inaccessible corridors
    • main character is a small robot (or robots?)
      • body is basically a rotating sphere with some levitating head/arms
      • cute stylisation as in contrast to bleak world


  • navigate through maze of corridors, get to the exit, fix given engine part, etc.
  • use abilities, solve puzzles to unlock inaccessible level parts
  • interactive environment: buttons, levers, inverse gravity fields, doors, elevators
  • with level progress growing set of abilities (pushing buttons, controlling gravity, controlling elevators, moving objects, etc.)
  • isometric top down camera?
  • co-op gameplay:
    • two robots with differing set of abilities
      • one can push buttons (opens door for other robot)
      • other robot can jump, move object (cover the hole in ground for other robot to cross)
      • ...
    • need to cooperate to unlock the path for other robot
    • good for singleplayer (switching between robots) as well as for multiplayer (each player one robot)

Thursday, September 27, 2012

Cookbook: UDK simple data save/load from disk

Have you ever wondered how to store simple data (save game) somewhere on the disk with UDK?

Simplest way that I discovered is usage of existing config system API. Let's present its usage on simple temporary leaderboard system that I use:

  • create a new config file (for example MyLevelLeaderboard.ini)
  • create script file that specifies its content

   1:  Class LevelLeaderboard extends Object
   2:      PerObjectConfig
   3:      Config(MyLevelLeaderboard);
   5:  var config float bestTime; //specify variables
   6:  var config int bestScore;
   7:  var config int bestSteps;
  • access and edit data via script

   1:  local LevelLeaderboard LL;
   3:  //load old bests (for current level), creates file if not existing
   4:  //second parameter specifies subsection name in ini file
   5:  LL = new(None,WorldInfo.GetMapName(false)) class'LevelLeaderboard';
   7:  //update values
   8:  LL.bestTime = FMin(totalTime,LL.bestTime);
   9:  LL.bestScore = FMax(totalScore,LL.bestScore);
  10:  LL.bestSteps = FMin(totalSteps,LL.bestSteps);
  11:  LL.SaveConfig();  //save changes

  • resulting  MyLevelLeaderboard.ini file looks like this

   1:  [testlevel1 LevelLeaderboard]
   2:  bestTime=73.390839
   3:  bestScore=4600
   4:  bestSteps=218
   6:  [testlevelpuzzles LevelLeaderboard]
   7:  bestTime=2.615733
   8:  bestScore=100
   9:  bestSteps=3
  11:  [simplelevel LevelLeaderboard]
  12:  bestTime=95.921692
  13:  bestScore=6700
  14:  bestSteps=336

Cookbook: Getting started with UDK

I'll try to post here some tips on UDK and its usage ups and downs, as I'm encountering them.

First steps:

  1. Essentially you need your UDK install, grab it from
  2. As a programmer, I recommend using some (your favorite) version control system, for your created/edited files. I'm currently using free TortoiseHg (which is Mercurial). Its big advantage is the ability to work without any server/internet connection (basically it's its own server)
  3. use your favorite IDE for files editing (notepad++ is good). I'm currently using VisualStudio2010 due to its fast search options and scrollbar highlighting (with free Productivity Power Tools extension). I have also Visual Assist installed to speed up file lookup, snippets, etc. In Visual Studio it is advised to create a custom solution and you can add some post build step to be able to compile unreal script ("call %UDK_INSTALL_DIR%\Binaries\Win64\UDK.exe make")
  4. grab UnCodeX, which is basically a tree overview of all classes and dependencies in unrealscript of your UDK install (your changes included). This is strongly recommended!
  5. you can find help on internet, remember, if you have encountered some problem somebody before you probably had had the same problem and already solved it! Best sources are:


  • try as much as possible to create new files and not edit existing ones (you'll avoid problems with moving to newer UDK releases), this applies to unrealscript as well as data packages! Keep clear dir structure (you need to be able to find it)!
    • my example:
         BallPuzzler - all my code
      Config - all custom and edited configs are here
         UDK_Project - all my data packages
      Flash - scaleform menu
      Movies - BINK videos
      Splash - custom splash screen
    • create your custom configs (for example for input):
      • usage in code:

   1:  class BallPuzzlerInput extends PlayerInput within BallPuzzlerController
   2:   config(BallPuzzlerInput);
      • you actually create default config (e.g. DefaultMyCoolConfig.ini), engine will on startup create UDK version of it (i.e. UDKMyCoolConfig.ini)
      • still in code you refer to it without prefix, i.e. config(MyCoolConfig)
    • there is unfortunately one exception that I haven't found a way to avoid: UDKGame\Config\DefaultEngine.ini, here you'll have to put your edits to make things work...
      • let's take a look at what needs to be edited in DefaultEngine.ini:

   1:  [URL]
   2:  Map=SimpleMainMenu.udk  //name of your default map (used by Unreal FrontEnd when cooking game!)
   3:  LocalMap=SimpleMainMenu.udk
   5:  [Engine.ScriptPackages]
   6:  +NonNativePackages=BallPuzzler //add your script package to be recognized by engine
   8:  [UnrealEd.EditorEngine]
   9:  +EditPackages=BallPuzzler //add your script package to be recognized by editor

      • some additional non-essential changes:

   1:  [Engine.Engine]
   2:  GameViewportClientClassName=BallPuzzler.BallPuzzlerViewportClient //overrides default class that sends messages to loading screen!
   4:  [FullScreenMovie]
   5:  +StartupMovies=Logo //currently NOT working (UDK July 2012), I had to replace original startup video (Logo.bik in Movies dir)
   6:  LoadMapMovies=Transition //specify your transition movie (.bik in Movies dir)

Wednesday, September 26, 2012

My UDK project (intro)

Maybe you all know that feeling. A dream to do something on our own without the necessity to bend our ideas according to some bosses and company rules/views.

Being a developer with 2 released multiplatform AAA titles (Mafia 2 and TopSpin4 by 2K Czech) and currently working as a part of Warhorse Studios on a new historic RPG IP (Hammerheart), I've always wanted to do something independent (and not to mention my increasing interest in growing indie scene with lots of quality games coming out lately...).

As my time possibilities are limited (part time contract for Warhorse studios), I've chosen as a testing environment UDK by Epic Games. I know it's scripting only, but lot of things are already prepared and engine is quite accomplished and usable on mobile platforms as well.

Truth be told, many things are really complicated to achieve (and slow to learn) but nevertheless, I have now some very simple prototype of a platformer game.

You can check some raw video footage:

or follow me on twitter: