1. Bugs in Complex Software

    Thu 11 November 2021
    By Bram
    image0

    In the picture: history's first bug.

    Complex software will be guaranteed to have bugs in it. And most of the bugs are caused by state changes.

    The human mind has limited capacity of keeping track of state (data, variables.) Hence, there is a discrepancy between what the state looks like …

  2. Switching

    Sun 07 November 2021
    By Bram
    image0

    I've been learning a lot about transistors, lately. This is because I found myself having to switch a load that would be too large for an IO pin. Here I summerize my newly gathered knowledge on them.

    A BJT transistor is switched ON/OFF using current at the base. This …

  3. Transistor

    Thu 21 October 2021
    By Bram
    image0

    I am using the TLC5928 constant current sink driver to light up my LED bar graphs.

    The neat thing about this part, is that you can set a current (for all 16 outputs) using a reference resistor. The higher the resistor, the less current the chip will output. So far …

  4. The state of Electronic Circuit Simulation Software under Ubuntu.

    Tue 19 October 2021
    By Bram

    Today, I was in need of electronic circuit simulation. Let's see what is available for Ubuntu.

    First I tried ngspice, but that seems to be text based.

    $ ngspice
    ******
    ** ngspice-34 : Circuit level simulation program
    ** The U. C. Berkeley CAD Group
    ** Copyright 1985-1994, Regents of the University of California.
    ** Copyright 2001-2020, The …
  5. The SMD Hurdle

    Fri 08 October 2021
    By Bram

    I found that programming microcontrollers and designing electronic circuits is so much more fun than modern software development for PC. I have really taken to the hobby. So much so, that I'm beginning to think a pivot is in order.

    When I started mobile game development in feb 2009, I …

  6. LED Bars

    Tue 21 September 2021
    By Bram
    image0

    Two LED bar graphs. You would think they would be much alike, but no.

    On the left: LTA-1000Y (2017 Thailand.) On the right: FJB10Y.

    The polarity is reversed. The LTA has anode on the side of the first pin. The FBJ has the cathode on the side of the first …

  7. Arduino

    Mon 20 September 2021
    By Bram

    Last year, I did a project with the Arduini Micro kit. This is an ATmega32U4 microcontroller.

    With it, I built a USB input device, with knobs, to tune my noise fields for Ring Miner.

    In that project, I was simultaneously writing USB HID data, reading turn knobs, and writing OLED …

  8. Catching a fall (procedurally.)

    Sun 04 July 2021
    By Bram

    I have been doing a lot of procedural animation, lately. Making a humanoid walk, and swing a torch at spiders.

    I also needed a proper way to catch a fall, with the legs. Because I already had the Inverse Kinematics sorted, I just needed to shift the pelvis down, and …

  9. Field Of View

    Mon 21 June 2021
    By Bram

    Computer monitors come in different aspect ratios. From the old school 4:3 to the ridiculous 32:9.

    In my 3D games, I have to choose a Field-Of-View for the camera. Wide angle, or narrow angle views? To do this, the convention is to set a fixed vertical field of …

  10. Fire in OpenGL

    Mon 14 June 2021
    By Bram

    image0

    (Just 120 particles, looks better in 60Hz and without GIF artifacts.)

    This is a quick 'n dirty approach for getting a fire visualization using OpenGL.

    Fire blends somewhat with its background, so we will be using blending. But unlike regular transparency, fire works a little different: it only adds light …

  11. Things that farming Chia will make you aware of.

    Mon 24 May 2021
    By Bram

    When you farm Chia, the proof-of-space blockchained coin, you learn a few new things.

    • Which PCIe generation your motherboard offers
    • NVMe performance
    • NVMe endurance
    • The fstrim command
    • XFS options like crc=0
    • What the term JBOD means
    • The performance of NFS over your LAN
    • The thermal characteristics of your drives …
  12. Directional Light

    Tue 04 May 2021
    By Bram

    I have implemented directional light for Practica Boxel. It simulates a harsh distant sun.

    image0

    Because there is only one bounce, there are fully black shadows with 0% light in the scene. I'm not sure I like it.

    It's main advantage is that it is easier to render in chunks, as …

  13. Partwise approach to Global Illumination?

    Mon 12 April 2021
    By Bram

    With the implementation of Practica Boxel I was able to verify that for simple (aab primitives) and small (200 blocks) scenes, you can compute indirect light at 60Hz. This is an encouraging result! (Notice the red glow in the room, as the light drops.)

    image0

    But it does leave me wanting …

  14. Practica Boxel

    Sat 30 January 2021
    By Bram

    Today, I unveiled my latest work-in-progress: "Practica Boxel." Here is the video, introducing the tool, which does WYSIWYG Global Illumination.

    In a way, it is a continuation of my SIMD-raytracer of a few years back. But when doing that (on CPU with AVX) I realised that only firing one primary …

  15. CUDA on an RTX3070, in an nutshell.

    Tue 12 January 2021
    By Bram

    CUDA terminology can overwhelm you. SM, Warp, Core, Thread, Block, Scheduler, Grid. I have been writing CUDA kernels for my RTX 3070, and I thought I would write down what I learned.

    First things first: when you write a compute kernel, you write scalar code. So in my case, doing …

  16. Revisiting Android Studio

    Tue 05 January 2021
    By Bram

    Yay, it is the year 12021 HE already. A palindrome year! And this is my first blog post for the year.

    So you are still writing Objective-C? Not going with the times, my friend. Or you are still writing C/C++ Android apps? Again, you are not making it easy …

  17. NVMe

    Mon 23 November 2020
    By Bram
    image0

    I've built a Xeon workstation, and had a lot of issues with the NVMe drive not being found by the BIOS. It would take roughly 3 reboots, before the WD SN550 would be found.

    I've replaced that drive with a Crucial NVMe drive, and since I did that, the boot …

  18. Screen Recording and Ubuntu.

    Thu 05 November 2020
    By Bram

    Recording gameplay videos on Ubuntu can be a big frustration. Here are some lessons learned.

    WM

    Compositing window managers are garbage. Get rid of the default window manager 'Mutter' and go with 'Openbox' instead. GDM3 refuses to launch a different windowmanager, so replace that too, with lightdm. *sigh*

    $ sudo apt-get …
  19. Exit vi less often.

    Tue 20 October 2020
    By Bram
    image0

    I am from the school of thought that recognizes the fact that typing is not the bottleneck for software engineering. So I am perfectly fine to use my command line, my vi and my Makefile. My peers consider me a weirdo for not using an IDE. Additionally, a powerful debugger …

  20. 7 Years

    Tue 29 September 2020
    By Bram
    image0

    Amazingly, the PC that I built has lasted me a whole 7 years. It is still a fine PC. It had one or two graphics card upgrades, and some extra RAM, but other than that, a Haswell CPU is still a perfectly fine workhorse.

    I would have continued using that …

  21. Solving Collisions

    Wed 23 September 2020
    By Bram

    I've been developing games for a long time now, but solving collisions remains a hairy subject. The Physics Engine I have used the most is OpenDE. It worked well for Little Crane. But the fact that OpenDE considers a triangle mesh as a generic 'triangle soup' as opposed to a …

  22. OpenCL on a Radeon

    Sat 19 September 2020
    By Bram
    image0

    So, the game I am currently developing was written around Procedural Generation of terrain, using the CUDA language. CUDA is great for doing GPGPU (General Purpose computing on a Graphics Processor.) It's well thought-out, and straightforward to use. It only has one drawback: it will only run on nVidia GPUs …

  23. A Random Direction.

    Thu 14 May 2020
    By Bram

    A naive way of generating a random direction d(x,y,z) would to take random values for x,y,z and then normalize the resulting vector d. But this will lead to a skewed distribution where too many samples fall in the "cube corners" directions.

    A proper way to …

  24. It is 2019. How do you develop a native Android app?

    Sun 27 October 2019
    By Bram

    Back in 2011, my first attempt on porting to Android was to compile the existing code-base as-is, in Objective-C. With a third party Stella-SDK you could pretend your Android Device was an OpenStep device, very much like an iOS device. However, this never fully worked, so had to be abandoned …

  25. Horror Vacui

    Tue 22 October 2019
    By Bram

    Aristotélēs postulated that Nature abhors a vacuum. There is probably an equivalent postulate for the Internet Age about unused computing resources.

    image0

    I've been dumbfounded many times about the ridiculous amount of bloat in software.

    Be it the 18,000 classes in an iOS app. That is 18,000 classes, mind …

  26. Google Play Experiment.

    Wed 25 September 2019
    By Bram

    In 2015, I released a successor to The Little Crane That Could on Steam for Windows, Linux, MacOS.

    image0

    In the sequel, I wanted to do something special, and decided to make the terrain deformable. This means, you can dig into the terrain, anywhere, and deposit soil anywhere. And not just …

  27. High volume, low friction art work for video games.

    Mon 02 September 2019
    By Bram

    I am a one-man indie game studio (I like to use the term INDIEvidual.) The lack of employees means that I need to shoulder all the tasks, including art work. With so many tasks, I can not afford to spend a lot of time on it. Here are some tricks …

  28. OpenGL debugging under GNU/Linux.

    Wed 17 July 2019
    By Bram

    For debugging OpenGL under GNU/Linux, there are three tools that are very similar to each other. They can capture the stream of OpenGL commands, and let you examine the state at each command. These are the tools:

    Renderdoc

    Renderdoc probably has the easiest interface, and is quite powerful in …

  29. Do Space Aliens have Fiscal Quarters?

    Thu 23 May 2019
    By Bram

    So, my Hexa Trains indie game features some outlandish planets with freaky colours. Obviously, they cannot represent Earth, as the continents are all wrong too. So, railroad building on Alien Worlds, it is then.

    image0

    So, when the time came to implement loan interest for the game, it made me realize …

  30. GKLeaderboardViewControllerDelegate has been suppl...

    GKLeaderboardViewControllerDelegate has been supplanted by the more general GKGameCenterControllerDelegate, which includes support for Achievements and Challenges as well as Leaderboards.
    To summarize:
    // the following are DEPRECATED as of iOS 7.0:
    // GKLeaderboardViewController [DEPRECATED as of iOS 7.0]
    // GKLeaderboardViewControllerDelegate [DEPRECATED as of iOS 7.0], with its one required method …
  31. Unreal

    Tue 12 February 2019
    By Bram

    After a successful exploration of unity earlier, I though I would test-drive Unreal Engine 4 to see what that is all about. Here are some random observations I made:

    • For linux, the engine and editor have to be built from source. Which is fine, but it does take an hour …
  32. Crashing apps.

    Wed 06 February 2019
    By Bram

    I'm on a mission to reduce my Android game's crashes as much as possible. And it turns out it is incredibly hard to approach a zero crash rate.

    First off, I would like you to consider this: If 1% of today's users of your app experienced a crash today …

  33. Callstack

    Thu 31 January 2019
    By Bram

    This call stack, captured from Google Play for one of my apps, shows what's fundamentally wrong with Android.

    The app didn't even finish launching, and this is how deep the complexity runs?

    backtrace:
      #00  pc 00000000000264f4  /system/lib/libharfbuzz_ng.so (hb_ot_layout_has_glyph_classes+28)
      #01  pc …
  34. Unity

    Wed 16 January 2019
    By Bram

    Two days ago, I started using the Unity3D game development tool. Interestingly, Unity3D is the most pervasive tool in the Game Dev industry... it is everywhere. I've been making games since 1982, but have never used it before.

    I'm one of those dinosaurs keeping to the old way of doing …

  35. Sprinkle, Sprinkle, Little Star.

    Sat 12 January 2019
    By Bram

    image0

    I released a new software application. It is named "Sprinkle, Sprinkle, Little Star" and is available for free for Windows and Linux.

    It is a 2D simulation of Gravity acting on a galaxy of stars. It is completely interactive, and you can paint your own galaxy onto a grid, and …

  36. Designing a Programming Language: 10Lang.

    Wed 26 December 2018
    By Bram

    I have been programming since 1982, I guess that shows my age. But in those 36 years, I have never designed nor implemented a programming language. With the current anti-C++ sentiments on Twitter, it made me ponder on what a better language would look like. So let's start the first …

  37. Joystick sampling rate in games.

    Thu 14 June 2018
    By Bram

    I investigated an interesting conundrum this morning: why was my game running so much differently on my iPad PRO? The tank was snappy, and turning aggressively on the iPad PRO, but not on Linux and Android.

    The main difference between iPad PRO and other platforms is its higher display refresh …

  38. The curious case of FPS jitter.

    Fri 11 May 2018
    By Bram

    I tried to record a video of my game this morning, and it bugged me that it wasn't 100% smooth. The game did report 60fps though, so let's find out what is going on.

    First order of business, is to graph the delta-time for each frame, instead of just reporting …

  39. Leaving Track Prints

    Wed 25 April 2018
    By Bram

    I am currently developing my, still unnamed, indiegame. This game is a 2D top down tank fight. And its main gimmick is the 100% destructible world.

    image0

    Nice destruction if I say so myself, but notice that the tanks don't leave track prints. Today, I will write about implementing track prints …

  40. Returning to iOS development.

    Tue 20 February 2018
    By Bram

    It occurred to me that the new iPad Pro 120Hz display is a great motivation to update my Little Crane game for iOS. So after a long time, I returned to my iOS codebase. Here I report some random findings.

    🔴 OS Support
    Currently, Little Crane supports iOS3.2 and up …
  41. 2017 Totals

    Fri 05 January 2018
    By Bram

    So, The Little Crane That Could is waning. Here are the 2017 results (Number of free Downloads.) It did manage to surpass a 19M lifetime downloads.

    2017

    2016

    2015

    2014

    2013

    2012

    2011

    iOS

    191K

    416K

    630K

    1300K

    3199K

    3454K

    1550K

    Android

    1100K

    1515K

    1525K

    825K

    1579K

    1656K

    Mac

    10K …

  42. Too late for the modern Gold Rush?

    Fri 15 December 2017
    By Bram

    Quick, name the one technology that is hotter that Virtual Reality or Machine Learning today. Yep... the hottest thing right now is crypto currency. But did you miss out on the gravy train?

    Well, judging from the dizzying levels of the two heavy weights in the crypto world, Bitcoin and …

  43. Profiling on Linux

    Sun 05 November 2017
    By Bram

    Speaking of profiling, I wrote an inline profiler for multi threaded Linux apps called ThreadTracer. It's quite good, as it records both wall clock time and cpu time. And on top of that, it also keeps track of pre-empted threads and voluntary context switches.

    It's a fine tool, making use …

  44. Pitting Profilers against each other.

    Fri 27 October 2017
    By Bram

    In the past, I have been using Remotery, an in-app profiler. I recently became aware of Minitrace, a similar app. So I decided to compare results.

    The good news is that when my ray tracer is working in single-threaded mode, the results are in agreement. 6ms or so is spent …

  45. sRGB Colour Space - Part Deux.

    Thu 26 October 2017
    By Bram

    In part one, I described what you need to do after simulating light before you can show it on a monitor. You need to brighten it by going from linear colour space to sRGB colour space.

    Here I talk about how to avoid polluting your calculations with non-linear data. Light …

  46. sRGB versus Linear Colour Space

    Thu 26 October 2017
    By Bram

    I keep screwing up my colour spaces, so I forced myself to write down the rationale behind it. A lot of it comes from Tom Forsyth.

    CRT monitors respond non-linearly to the signal you drive it with. If you send it value 0.5 you get less than half the …

  47. vtune permissions

    Tue 26 September 2017
    By Bram

    Note to self: before running vtune, do:

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    sudo chmod 755 /sys/kernel/debug
    sudo chown -R bram:bram /sys/kernel/debug/tracing
    

  48. Linear filtering of masked PNG images.

    Sat 26 August 2017
    By Bram

    If you render your RGBA sprites in OpenGL using...

    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )
    

    and you use GL_LINEAR filtering, then you may see black borders around your sprite edges.

    The reason for the pixel artefacts on the border (they can be white too, or another …

  49. Match 3

    Wed 23 August 2017
    By Bram

    image0

    I decided to challenge myself in writing a quick and dirty Match-3 game. Not sure, how I came up with the theme, but it occurred to me that Smileys with facial feature permutations would make for interesting content.

    I spent a full day on art, using Inkscape and OpenClipArt. A …

  50. Android users often have to do a complete reset of...

    Android users often have to do a complete reset of their device or even changing the os often as well as changing the device itself! On my iOS devices, your games keep being installed... I believe it is so for many iOS users! Therefore less downloads over time... I think …
  51. Assert your assumptions.

    Sat 05 August 2017
    By Bram

    A lot of software bugs are caused by the following scenario: The programmer assumed a certain situation and wrote code that would rely on this assumption. Very often, these mental assumptions are never made explicit, and live in the programmer's mind only. A standard weapon against these bugs in the …

  52. Android Revisited.

    Sun 18 June 2017
    By Bram

    Every year or so, I come back to Android development. And often, quite a bit has changed. On top of that, I will have forgotten gotchas, and fall in the same trap twice. Hence, I need to document my process better. So here's another Android report.

    I managed to hold …

  53. Real Time Ray Tracing for games.

    Wed 19 April 2017
    By Bram

    In 2015, I've been tinkering with a real-time photon mapper to do Global Illumination for simple voxel worlds. Recently, I thought there should be more I could do with this idea.

    So my Real Time Ray Tracing experiments are back, but with a twist. The minimalistic voxel world was a …

  54. The alternate universe without a computer mouse.

    Wed 01 March 2017
    By Bram

    Consider the de facto standard user interface for computers and computer software. It is what we call the Graphical User Interface, or GUI. Comprised of a mouse cursor and windows, sliders, buttons, scrollbars and such.

    I remember seeing my first computer mouse on a trade show. I'm going to venture …

  55. The Little Bike That Could.

    Sat 11 February 2017
    By Bram

    I am announcing my latest indie title, which is currently under development: "The Little Bike That Could."Like many of my previous titles, it comes with an exceptional physics simulation. It's been fun implementing and tweaking it. Wheelies, Stoppies, Slides and even loopings on a half-pipe are possible.

    It is …

  56. 2016 totals

    Sun 01 January 2017
    By Bram

    So, The Little Crane That Could is holding stable on Android, but dropping on other platforms. Here are the 2016 results (Number of free Downloads.)

    2016

    2015

    2014

    2013

    2012

    2011

    iOS

    416K

    630K

    1300K

    3199K

    3454K

    1550K

    Android

    1515K

    1525K

    825K

    1579K

    1656K

    Mac

    10K

    20K

    30K

    53K

    81K …

  57. Feedback

    Tue 20 December 2016
    By Bram

    Some game developers dislike reading comments and feedback so much, that they completely stop doing that. In my experience, some of it is indeed downright abusive. I shrug it off by assuming the really threatening messages are written by kids, not adults.

    But if you stop reading feedback, you will …

  58. Unable to find native library / findLibrary returned null

    Sat 26 November 2016
    By Bram

    Ever since doing Android development in 2012, I've been getting crash reports that showed my game was failing to load the shared object library that contains my native code.

    This could manifest itself as a:

    Unable to load native library: /data/data/com.sample.teapot/lib/libTeapotNativeActivity.so
    

    or sometimes …

  59. Running a fast Android Emulator on Linux with kvm.

    Thu 24 November 2016
    By Bram
    You can test your Android apps on an Android Virtual Device, instead on actual mobile hardware. If you emulate an ARM Android device, the performance will be low though. For faster emulation, it is better to emulate an x86 Android device.
    Step 1 Make sure your Intel CPU is capable …
  60. Shallow Depth of Field in Little Crane.

    Sun 20 November 2016
    By Bram

    A year ago or so, I added shallow depth of field rendering to my render engine for Little Crane 2. Because the details were getting vague, I had to refresh my mind. To do this, I've charted the flow of my render steps. I call them steps, not passes, because …

  61. Cache Friendly

    Wed 02 November 2016
    By Bram

    In my upcoming title Children of Orc the largest computational load is from the GOAP action planner that the NPCs use. I found that simple plans would be found in a millisecond. But larger plans would really tax the CPU. Especially if no plan exists to reach the goal state …

  62. Debugging Software

    Sat 24 September 2016
    By Bram

    I've always found Rob Pike's debugging story about Ken Thompson very powerful.

    Ken would just stand and think, ignoring me and the code we'd just written. After a while I noticed a pattern: Ken would often understand the problem before I would, and would suddenly announce, "I know what's wrong …

  63. New Game: Children of Orc.

    Fri 23 September 2016
    By Bram

    I have just introduced my new game to the world. It is called Children of Orc.

    Children of Orc is a real-time third-person strategy game that is set on a procedurally generated hex-planet. Check out the trailer video:

    To get published on Steam, it can use a little help with …

  64. Blender Gotchas

    Tue 20 September 2016
    By Bram

    There are many nooks and crannies in Blender that can catch you off guard. Here I will document them for reference by my future self, lest I would forget.

    By default, Blender uses CPU, to use GPU on Linux, you have to, once as root, start blender -> User Preferences -> System …

  65. Visual Studio gotchas

    Wed 30 March 2016
    By Bram

    Every time that I try to develop for windows (with Visual Studio), I have a hard time. And I do this so infrequently, that I tend to forget stuff too. I now try to make a windows version of Imhotep, Pyramid Builder.Here I will document some gotchas when developing …

  66. htr sr

    Wed 02 March 2016
    By Bram

    image0

    So these hieroglyphs (in this case, read from right to left) spells htr sr. We only know the consonants of the Ancient Egyptians, and the scholars do not know what vowels were in their words. This 'htr sr' translates to Tax Official in English.

    The twisted wick is the 'h' …

  67. Baking Lights using Blender

    Wed 27 January 2016
    By Bram

    With Blender you can bake the lights using the Cycles renderer onto light maps. For static geometry, you can get some really nice lighting with diffuse bounces for your models. This posting roughly describes how to achieve this.

    Baking requires quite a bit of computational power. It's best to do …

  68. Screen Space to Object Space in OpenGL.

    Mon 25 January 2016
    By Bram

    Something I learned today: if you want to pick a 3D object from mouse coordinates, you can go from screen space coordinates to object space but you need to pay attention to the normalization of the screen space coordinates.

    First, to get the screen space coordinate, you can use the …

  69. 2015 totals

    Fri 01 January 2016
    By Bram

    image0

    So, The Little Crane That Could on iOS is straining up hill, but still going. On Android it seems to have caught a second wind. Here are the 2015 results (Number of free Downloads.)

    2015

    2014

    2013

    2012

    2011

    iOS

    630K

    1300K

    3199K

    3454K

    1550K

    Android

    1525K

    825K

    1579K

    1656K …

  70. ARM SIMD

    Wed 29 July 2015
    By Bram

    My Pyramid Building Simulator is coming along nicely. Check out the game play video I made for it.

    So my Core i5-4570 and nVidia GTX 750Ti run this simulation at an easy 100fps at 1920x1200 pixels. It always leaves me wondering, could it possibly ever be done on mobile, 64 …

  71. Approximate functions.

    Tue 30 June 2015
    By Bram

    For game development, I often use function from the math library, as there are: sinf(), cosf(), atan2f(), acosf(), logf() and such. And these functions tend to be quite expensive in CPU cycles. However, in game development, low precision math functions will often suffice. Which means we can skip computing a …

  72. Tile sets

    Mon 22 June 2015
    By Bram

    My next game could well be a 2D tile based game. This is mainly, because I want to use my 2D grid based crowd simulation code. So here I will collect some inspiring art work I found with Google. Note: none of the images are mine, they are all copyrighted …

  73. Steaming Ahead - WEEK 07

    Fri 03 April 2015
    By Bram

    The seventh week of work since I got Steam Green-lit has come and gone. So as promised, here is a weekly update on the progress towards the Steam release of The Little Crane That Could.

    Some good news: Again, I added two new levels this week, bringing the total to …

  74. Steaming Ahead - WEEK 02

    Fri 27 February 2015
    By Bram

    The Second week of work after the Steam Green-lighting has come and gone. So as promised, here is a weekly update on the progress towards the Steam release of The Little Crane That Could.

    I'm not going to lie: this was a week of frustration. Source of the frustration was …

  75. Willarth, the release will definitely be this year...

    Sat 21 February 2015
    By Bram

    Willarth, the release will definitely be this year. I don't know yet at what price, I have to see what Valve recommends. But I don't expect it to be much more or much less than $10,-. Thank you for following this project and commenting on my blog.

  76. Steaming Ahead - WEEK 01

    Fri 20 February 2015
    By Bram

    The first week of work after the Steam Green-lighting has come and gone. So as promised, here is a weekly update on the progress towards the Steam release of The Little Crane That Could.

    I've spent this week on actually building a crane vehicle. The code base so far only …

  77. Steaming Ahead - WEEK 00

    Sun 15 February 2015
    By Bram

    Such great news, Friday 13th of February 2015: The Little Crane That Could has been green-lit, meaning my game will be published on the Steam store. Yesterday I announced that I pledge to, EACH AND EVERY WEEK, publish a progress report on my steam publication.

    So without further ado, here …

  78. Accelerating GI computations.

    Thu 29 January 2015
    By Bram
    image0

    So I have been developing a new game where a rocket engine Globally Illuminatesits environment. It started out as an AVX2 implementation, but since then I have been pursuing other acceleration techniques. For instance, can I run the photon mapping algorithm on the GPU instead? Here are some initial …

  79. Programming

    Sat 24 January 2015
    By Bram

    Programming is my passion. It is the best life-time hobby I can imagine. It all got sparked in 1982 when I played Munchkin on a friend's Videopac G7000. This pacman clone blew me away, and I desperately wanted a 'game computer'. My father replied to my plea: `No we are …

  80. Extraterrestrial spelæology

    Wed 21 January 2015
    By Bram

    So my Global Illumination experiment made some more progress. The technology demo is slowly evolving into an actual game. And the hero of this game might very well be a spelunking rocket. Maybe I should call the game Spelunking Rocket? It currently has a single Google hit, so it should …

  81. Rocket Engine Illumination

    Sun 11 January 2015
    By Bram

    So I have been playing with my real time Global Illumination renderer some more. I added a particle system to model a rocket engine. The particle system is comprised of 1024 particles. And the kicker is: each and every particle is a light source that casts both direct and indirect …

  82. 2014 totals

    Fri 02 January 2015
    By Bram

    image0

    So, The Little Crane That Could is still chugging along, but undeniably it has peaked. I hope there is life left in the brave little crane, but it may be running out of steam. Here are the 2014 results (Number of free Downloads.)

    2014

    2013

    2012

    2011

    iOS

    1300K

    3199K …

  83. More Photon Mapping

    Thu 01 January 2015
    By Bram

    In yesterday's post, I introduced my new hobby project Photon Mapping Voxels.Today, I made some more progress, and managed to properly interpolate the shading. The voxel faces in a plane now share vertices. But there is still a matter of ambiguity when shading a quad, which causes the triangle …

  84. Photon Mapping

    Wed 31 December 2014
    By Bram

    With my latest game, The Little Plane That Could launched, it gave me a good opportunity to start some experimental coding. I would like to crack the challenge of real time indirect lighting. My idea is to use voxel-geometry only, and run a photon mapper on this geometry. Because the …

  85. Tue 23 December 2014
    By Bram

    This comment has been removed by the author.

  86. What has Bram been up to?

    Wed 19 November 2014
    By Bram

    So, it's been quiet for too long on this blog. It is about time to report on what I have been up to. Why not start with a small snippet of video?

    Since July 2013 I have been mulling over the next step for my crane sim game. And as …

  87. Developing for Oculus Rift DK2

    Mon 18 August 2014
    By Bram

    I've purchased an Oculus Rift Development Kit 2. In a sense it feels like going back to my thirties. Much of my professional career was in Virtual Reality. I can't remember for how long exactly, but I think it was for 8 years or so, that I developed software and …

  88. OpenAL with Android NDK.

    Tue 22 July 2014
    By Bram

    This posting is for future reference, if I ever have to get OpenAL working again under Android's NDK. It will also be useful to my peer game developers who intend to do the same.

    Step 1

    Get an Android port of openal-soft.

    Step 2

    I like to build static libraries …

  89. Flight Simulation on touch screens.

    Wed 16 July 2014
    By Bram

    My current project is biplane combat simulator. I have been developing it under GNU/Linux, and porting it to Android. It needs a commercially viable platform to run on, and I am pretty sure GNU/Linux games are not making money at the moment. This may change with the Steam …

  90. Recording Game Play Videos

    Wed 11 June 2014
    By Bram

    This is mainly a note to future self, and also others that need to record a video of game play under Ubuntu. First off, it is of no use to use non-standard resolutions when uploading to YouTube. I recorded some videos with a vertical resolution of 608 lines, which ended …

  91. Reoccurring programming bugs

    Thu 10 April 2014
    By Bram

    Ugh, how I hate it. That feeling that you are struggling to fix an issue with your code, and you know you have battled with it before on a different project. Of course you can't remember what the fix was, and the two code bases are too different for easy …

  92. By the way, acceleration in Little Crane sim was m...

    Fri 21 March 2014
    By Bram

    By the way, acceleration in Little Crane sim was much simplified. I simply adjust the wheel velocity towards the accelerator setting with limited (but constant) torque available to do this. There is no gear box, no clutch, no rpm (other than sound effect where engine rpm and loudness go up …

  93. Car engine

    Fri 21 March 2014
    By Bram

    image0

    I like car racing simulations. I spent a lot of time playing Gran Turismo Prologue on my PS3 years ago. So I thought it would be time for me to try making my own racing game. After coding a Hover Bike and all sorts of Heavy Machinery that should be …

  94. Postscript printing

    Sat 15 March 2014
    By Bram

    I bought a laser printer recently for home office use. I went with the Ricoh Aficio SP 3510DN. What scares me is that some people sell smartchips. Apparently you need to replace a chip if you refill the toner with a non-Ricoh product. It is disgusting how printer manufacturers do …

  95. Crawling to the top.

    Thu 13 February 2014
    By Bram

    Freshly released, is v6.10 of The Little Crane That Could for linux/64bit [update: and win64]. You can get it at bram.itch.io.

    image0

    It comes with a tracked vehicle and a hill climbing level. You can see it in action on YouTube (although the game at 60fps looks …

  96. Game Lobby

    Sun 29 December 2013
    By Bram

    I am porting my game Buggy Bang! Bang! to Android. The leaderboard/matchmaking in Android has no NDK support and looks complicated. So I think I will need to roll my own online game lobby. I've written a leaderboard service before, in Python, for some of my earliest iOS games …

  97. I thought the Mass ratio thing was inherent to all...

    I thought the Mass ratio thing was inherent to all solvers, about precision error accumulation, and all, and float/double imprecision weren't helping there, as simulation equation imprecisions cannot counter its bad effects. But It's 2-3 yrs without doing physics coding some it's from memory... You could try to revive …
  98. Thanks Tuan, for all the pointers, here and on bul...

    Thu 28 November 2013
    By Bram
    Thanks Tuan, for all the pointers, here and on bullet forum.
    I'm not sure the mass-ratio is strictly a FP precision thing.
    If it was, then using doubles instead of floats would solve it.
    Yeah, I never made my sims tuneable on the fly, but I did fantasize about hooking …
  99. OpenDE and Bullet

    Wed 27 November 2013
    By Bram

    I would like my simulation of tracked vehicles to be faster, so it could possible run on mobile hardware. Currently, you need a modern desktop to do it, at the bare minimum my mid 2011 MacBook Air is even struggling. The 1.7 GHz Intel Core i5 struggles to run …

  100. Yes, offline only, but imho worth the read anyway,...

    Yes, offline only, but imho worth the read anyway, even for offline they need to speed up render too, and nice tweaks and speedup ideas lies there (most real-time algo comes from offline ones refined)
    I don't think it's a throwaway at all if you switch. I did switch from …
  101. Making a mess

    Wed 20 November 2013
    By Bram

    I call this composition "Making a mess." It takes a bit of manoeuvring, but after 15 minutes of playing in the sand, the landscape looks considerably changed.

    But the sad news is, I am still having a hard time finding a game play design for it. I've got this incredibly …

  102. Lean Code

    Thu 14 November 2013
    By Bram
    I guess my code is pretty lean.
    $ find ~/apps/LittleCrane -name \*.cpp -exec wc -l {} \; | awk '{total = total + $1}END{print total}'
    19653

    Compared to these monstrous code bases. This would designate my game as a 'simple iPhone game app' according to their classification. Also, I do not believe their …

  103. LOD, Clipping.

    Wed 16 October 2013
    By Bram

    This week I have been adding LOD (which is pretty hard for terrains, because cracks appear between the high resolution chunks and the low resolution ones.) Easier was adding frustum clipping. Actually I simply clip against the left/right/top/bottom planes, and don't bother with near/far planes.

    I …

  104. Digging it.

    Wed 09 October 2013
    By Bram

    After the dozer, I now added a digger as well. It's already pretty convincing I think. Although it does have some difficulties with boulders getting stuck between the jaws, and then suddenly and violently get expelled from the bucket. Movements are jerky, mainly because the app would not sync to …

  105. Bad ass dozer

    Mon 23 September 2013
    By Bram

    Today, I have been adding caterpillar tracks to the dozer for Little Crane 2. Personally, I think this little dozer is pretty bad ass now. The caterpillar tracks make depressions in the ground.

  106. Brand new PC

    Tue 17 September 2013
    By Bram

    I've bought a brand new PC yesterday, the last time I did that was in 2005. Since 2008 or so I switched to Mac. But porting my Little Crane game to Windows was too much of a lure, and my Mac Mini with Windows installed was not cutting it.

    Building …

  107. Scraping and Dumping

    Sun 01 September 2013
    By Bram

    I made a new video on the development of The Little Crane That Could 2. It shows a dozer that creates tyre marks in the terrain, scrapes terrain, and dumps dirt onto the terrain.

  108. To the Dark Side.

    Sat 24 August 2013
    By Bram

    I've been eschewing Microsoft for a long time now. I'm in and in a UNIX guy, and despise the horrible practices of Microsoft, in what they do to standards. Also I have been totally unimpressed by the quality of their Operating Systems. So why did I buy a copy of …

  109. Digging Dirt

    Mon 19 August 2013
    By Bram

    Now spawning dirt when voxels are scraped away from the terrain. It adds a lot to the visual appeal.

    image0image1

  110. Terrain Modification -- TAKE1

    Sat 17 August 2013
    By Bram

    It is far from perfect, but at least it is a start. Dynamic terrain modification using a digger in a voxel terrain. For now I use straight voxels, and not the marching cubes surface, as it is easier to debug.

    My plan is to spawn cube-lets as the terrain is …

  111. Packaging

    Fri 09 August 2013
    By Bram

    With the use of PortAudio I was able to get sound working on the linux port of The Little Crane That Could. And GLFW enabled me to support a joystick (currently I only support PS3 controllers.) I did have to change the GLFW source code so that it would not …

  112. OpenGL and Ubuntu

    Wed 07 August 2013
    By Bram

    So I am dusting off my old GNU/Linux PC. It's pretty antique, as I had brought it over from the old country when I immigrated into Canada so long ago. It turns out that it is so old (from 2005 or so), that it can't do 64 bit. (It …

  113. Going viral without marketing... it can happen.

    Fri 02 August 2013
    By Bram

    There is a common saying in the #indiegames scene that goes like this: Build it and the players will come.This translates to 'A good game will sell itself (without marketing.)' The current crowd wisdom in my circles is that this is utterly false.

    If someone ever hints that "just …

  114. Hey Bram, thanks for trying out PolyVox. I'll ...

    Hey Bram, thanks for trying out PolyVox. I'll put my responses here in case they are useful to other people who come across this blog.
    Firstly I'm glad it works. We test with VS and GCC and aim to keep it warning free, so we'll address the Clang warnings. Overall …
  115. Evaluating PolyVox

    Sat 27 July 2013
    By Bram

    In my pursuit of simulating soil digging, I started to evaluate the PolyVox library. This is a report on that evaluation.

    Building on MacOSX is tricky. With LLVM version 4.2 (clang-425.0.28) installed, this error comes up when compiling the very first file: fatal error: 'cstdint' file not …

  116. Redux

    Sat 27 July 2013
    By Bram

    So, my opus magnum is the game The Little Crane That Could. Every day, people tell me that they want more levels for it. The truth is, my inspiration for new tasks/puzzles to be solved with a crane is now exhausted. That is why I released a level editor …

  117. Introduction

    Sat 27 July 2013
    By Bram

    I will use this first post to introduce myself. I am a software developer from Vancouver, British Columbia. I am best known for a hit game I developed for iOS, called The Little Crane That Could. Since then, I've published many other games, none reaching the popularity of Little Crane …