Selling Overhead

Is what this Gamasutra article called the recent trend in game development to sell “the things that usually end up on the game studio’s cutting room floor”. It’s talking about things like Early Access, selling the game while it’s being developed, and mostly about selling the “Prologue” to Metal Gear Solid V and selling access to Double Fine’s Amnesia Fortnight.

First of all, I don’t think it’s really surprising in this age where Publishers are mostly going the way of the dinosaurs and more developers retaking control of their creations and trying to hit the audience directly, saving money while still trying to make hiqh-quality (i.e. expensive) titles. The money has to come from somewhere.

The writer stresses the Double Fine and Metal Gear Solid V angle a lot, Double Fine selling access to their prototypes (things we usually couldn’t, and probably shouldn’t see) and Metal Gear Solid being split into (at least) two parts with the first one serving as “prologue” whose content might or might not later also appear in the full game, but I would like to point out two counter examples and say that, once again, when satisfaction is concerned, it’s all about expectations.


The current customer expects that when she pays 60$ for a new game it will contain at least 10-20 hours of meaningful gameplay. Whether this is reasonable considering what we pay for movies, music, etc… is a different discussion – this is what we currently expect. In the days of the first StarCraft it was reasonable to sell a main game for 60$ and then an expansion with more missions and story for 30$. We then evolved the model of selling the main game for 60$ and tiny bundles of story/gameplay/extras for 5-15$ and lately we’ve also added alphafunding. Some of these models seem weird but, again, it’s all about expectations. And also honesty and transparency. (Here come the two examples).

  1. Decent Early Access Games/Developers – Look at Mojang, Vlambeer and all the others that decided to go the alphafunding/early access route but did it candidly. Mojang sold Minecraft from the very early (and sometimes broken versions) but they were honest about it. They said the game is in development, it might break, and you’re actually paying for the game’s development as it is being developed. The customers were promised that, they were promised that the game will be updated and improved and they won’t have to pay more despite the initial entry fee always increasing. And fucking hell, that model works for them. Vlambeer went with Steam Early Access for Nuclear Throne. They were upfront in saying that the game is in development, it will be cheaper after it’s done and there will be no sales or bundles until release. They said that this is only for those who want to support the developers during development. And they live-stream development and upload a new build every week. Which is awesome. They promised specific things and they deliver on what the customers expect from that.
  2. Stoic went a bit of a different route with The Banner Saga. They started from a Kickstarter campaign, raised funds and used those funds to start development. Roughly a year later, they released Factions, the Free-To-Play competitive version of the game featuring their beautiful art but mostly consisting of just the combat aspect of the game. They did that because they saw that development will take longer than previously expected and they wanted to put out something that people can play. But, mostly, they did that so they could get more help (than just backers) with fine tuning the combat aspect (the main game loop in The Banner Saga) and bring it to a mirror polish, thus making the final game better for everyone. But, they released it free to play. Meaning, you could play the “no-campaign” version of the game for free and if you wanted to, you could sink some money into it to fund development of the full game. They told gamers what to expect and they delivered on those promises, honestly and ethically. Then, another year later, you could buy the campaign-full, complete version of the game for a very competitive price of 25$.

Conclusion: I don’t think there is a right or wrong way to develop or sell your game. The only wrong thing is no fulfilling your customer’s expectation. Yes, sometimes those expectations are not up to you and you can roll with it or sit in the corner and cry. But, if you notice it, the only times gamers rise in uproar about how a game is sold/played/whatever is when it doesn’t fulfill expectations. I don’t know exactly how the Metal Gear Solid V thing is going to work but if Ground Zeros is selling for 30$ and The Phantom Pain will sell for 60$ and Ground Zeros won’t deliver at least half the satisfaction of The Phantom Pain and/or The Phantom Pain will actually contain some, half and especially most or all of the gameplay of Ground Zeros, you can definitely expect an uproar.


Posted in Gaming, IT, Practice, Programming, Thinking Out Loud by with comments disabled.

My Coding Conventions

When I run my own company or lead a brand new team, everyone will follow coding conventions. My Coding Conventions!

Here they are, to the best of my current knowledge and by probable order of importance.

  1. Every method will be documented! That includes purpose, parameters, proper usage, etc…
  2. Every property will be documented! Yes. Exactly the same.
  3. Every class will be documented! Especially about recommended uses and where it is suppose to go.
  4. Every public field which is not incredibly obvious will also be documented!
  5. Every conditional block will be an actual block, with parentheses. Even if it’s one line!
  6. Starting parentheses always get a new line! Exception: if it’s a conditional or property and it fits in one line.
  7. Every method shall appear in full before its first use. This makes the code more readable! Do It!
  8. Design for any part of the program should be ironed out ahead of time and with as much detail as reasonableness allows.
  9. To be continued… (Suggestion welcome)

Posted in IT, Practice, Programming, Thinking Out Loud by with 6 comments.

Fun With LINQ Expressions, Lambda Functions and Ternary Operators

At work, we work with Unity. Unity comes with its own IDE, MonoDevelop.

MonoDevelop sucks. I hate the way it looks. I hate the way it folds code. I hate the way it unfolds everything every time you save. I like the way it finds files and classes but that’s about the only thing I like about it. And I have to use it for debugging.

However, I don’t have to use it for actual coding. I use Visual Studio 2013 because we already have it and it’s a pretty good tool. It does lack some advanced capabilities and so I installed the ReSharper plugin which adds a lot of power to VS and makes it even much more useful.

What I like about ReSharper is that it suggested a lot of improvements to my code and actually taught me more about LINQ expssions and Lamda functions. I already knew and much liked Ternary operators. I think that all of them make code more lean and prettier and easier to read as it makes it more legible in actual English.

The C Trenary operator is “?”. You use it like this: “(condition) ? (variable if true) : (variable if false)”. Much easier than “if (condition) then return variable1 else return variable2”.

Lambda functions are a kind of anonymous function that is much easier and shorter to write. So, instead of writing “delegate(KeyValuePair<long, string> pair) { do something with pair }” and shoving all that into a callback, you just write “pair => do something with pair”. It doesn’t look like a big improvement but it is in the long run.

LINQ expssions are a sort of C# extensions that provide more functionality to a lot of data structures in a way that make them very generic and very easy to understand.

Which brings me to my example of how I used all of them together to get a very powerful operation done in what is, technically, a single line of code that is also easy to read. Code has been obfuscated to protect the innocent.

List<AClass> AClassList = AListOfStringListPairs.Select(stringListPair => stringListPair.Key != specificKey ? stringListPair.Value.First() : null).ToList();

In English, notice the translation isn’t difficult, I take a List of pairs, where each pair is a string and a list of classes, and filter out the heads of every list whose string fulfill my required predicate and put those into a new list which I can later use.

With out LINQ or Lambda, at least, this code would have been 3-4 times longer if not more. So I like this a lot. There is only one problem: Because of an unavoidable constraint of our development method, we can’t use some specific collection method which LINQ uses almost all of the time. So I can’t use most LINQ expssions. Which sucks.

But not as much as MonoDevelop.

Posted in Life, Practice, Programming, Thinking Out Loud, Work by with 2 comments.

Our Game is the First of the Unity Blog 2014 Global Game Jam Selection

See the post here.

Interesting Tidbits:

  1. There were 2292 Unity games in the 2014 Global Game Jam out of 4291 total (That’s more than 50%).
  2. The Unity blog decided to feature 4 games they found to be interesting (That’s less than 0.2%, of only the Unity games).
  3. Our game was number one on that list.
  4. Dropbox, where I hosted the web version of the game, is probably getting Slashdotted right now.
  5. If isn’t, it should be. I’ll go help with that. By posting to Slashdot.
  6. This game took ten people about 30 hours to make. From scratch. Including a few hours of sleep.
  7. At one point, seven of them occupied a table meant for one.
  8. This was me and Maayan’s first GGJ.
  9. I knew one and a half of the other people on the team. Maayan knew one.
  10. I would like to think that we had two major factors playing in our favour for recognition:
  1. We had a good strong team, covering well all the majour requirements, and each one contributed to the vision.
  2. We hit on a very good combination of interesting, challenging, good looking, well sounding, cute, competitive and overall fun gameplay.
  • This was and is incredibly awesome.

  • Posted in Gaming, Less Interesting News, Maayan, Programming by with comments disabled.

    The Results Are In!

    And you can see the awesome game we made at the Global Game Jam on my Projects page.

    The Global Game Jam Game page is right here.

    And thanks to everyone for a great time and great work.

    And our Music and Sound Designer is Alon Kaplan, starring as Sir Not-Appearing-in-this-Picture.

    Posted in Gaming, IT, Life, Maayan, Programming by with comments disabled.

    My Kind of Jam

    Global Game Jam.

    Don’t try to reach me until Saturday night.

    Posted in Gaming, IT, Life, Programming by with comments disabled.

    Not Everything Can Have a Title

    אתמול התחיל בקצת דכאון. זה היה מין יום של כל-הדאגות-שבדרך-כלל-יש-בחיים-ובדרך-כלל-אתה-מצליח-לקטרג-בירכתי-המוח-אבל-לפעמים-פתאום-נופלות-עליך-בכל-הכוח.

    אז הייתי מבואס כל הבוקר. לדבר עם מעין עזר לרומם את רוחי. אבל זאת לא הייתה הבעיה העיקרית. יום לפני חזרתי מוקדם הביתה כי פשוט לא היה מה לעשות. כל המטלות שלנו נתקעו בגלל בעיות עם השרת. אותי שלחו הביתה מוקדם. ואז בבוקר, המצב לא השתפר כל כך מהר כי הצוות שאחראי על השרת רק התחיל לעבוד ולקח להם זמן להביא אותו למצב ששימושי לנו. אז את רוב הבוקר עסקנו בהתאפסות על עצמנו ותכנון לעתיד וחפירה החוצה של משימות שעד אותו רגע “חיכו לאחר כך”.

    אבל כל היום הזה השתפר פלאים כשעשינו ישיבת חברה על מצב המשחק והתכנון הכללי וביקשו רעיונות והיה לנו רעיונות והקישבו לרעיונות שלנו ודיברנו הרבה על איך דברים צריכים להעשות ומה כן או לא עובד לאילו סוגים של שחקנים. ולקראת סוף היום גם קראו לנו שוב לדבר על הרעיונות והיישומים ובאמת הקשיבו ואני הרגשתי הרבה יותר כאילו לכל אחד מאיתנו באמת יש חלק חשוב בבנייה שלו ואני לא רק מי שאומרים לו אילו לבנים לשים איפה ופשוט עושה את זה.

    אז אני סיימתי את היום מלא באנרגיה ושמח וטוב לב. עכשיו אני רק מקווה שבאמת ישתמשו במה שאמרנו ואולי גם יקראו לי אחר כך להוסיף עוד נופח נרטיבי.

    Posted in Gaming, Life, Programming, Work by with comments disabled.

    My First Day at Work

    Was yesterday. Get to know the people more and they’re all very cool people. I didn’t get a lot done but that’s how first days usually work. I still had a lot of fun and I’m still excited to go back. I already think my main issue with a new working environment – people who are fun to work with, accommodating and just all around pleasant – is covered.

    And today I’m already suppose to start contributing to the actual SCRUM goals. It’ll probably take me longer than expected for the task but it’s still taking something off their hands and clearing some schedule.

    I’ve just marked the categories for this post and it obviously goes under Life, Work but I’m still not over the fact that probably most of these posts will also go under Programming, Games.

    Posted in Life, Programming, Work by with comments disabled.

    And now it’s signed and sealed.

    I have the papers in my backpack.

    I start on December 1st and I can’t wait to get started.

    But until I explain my blogging situation to my superiors and know what I can and can’t say, everything is confidential.

    Posted in Gaming, Life, Programming, Work by with comments disabled.

    איך תיאורים גורמים לי להרגיש

    בכל המקומות שאני מחפש בהם עבודה, אני רואה המון תיאורים שונים, למה שאני מניח שהיא, אותה עבודה. רק, כל אחד מהתיאורים האלו גורמים, לפחות למראית עיני, לעבודה להישמע אחרת. וככה נוצרת סלידה מתיאורים מסויימים.

    תכנת (Tachnat) נשמע כאילו העבודה פשוטה ובנאלית ומונוטונית ומי שמבצע אותה הוא לא הרבה יותר מאשר מכונה הממירה קפה לקוד.

    תוכניתן (Tochnitan) נשמע כמו Script Kiddie, כמו מישהו שהתעסק קצת עם המיומנות ולמד לבצע כמה דברים פשוטים ולכן אפשר לתת לו כמה עבודות שחורות והוא יסתדר. לא הרבה יותר טוב מקוף עם מקלדת.

    מתכנת (Metachnet) נשמע כמו מישהו שזאת העבודה שלו. הוא הוכשר לעבודה הזאת במקום מסוים שמכבד את עצמו. הוא מכבד את עצמו וכנראה שיכול להתמודד עם רוב המשימות קרובות הקוד שאפשר לחשוב עליהן. עם תיאור כזה כבר אין לי בעיה. ככה אני הגדרתי את עצמי כשהתחלתי ללמוד.

    מפתח תוכנה (Mefate’ach Tochna) נשמע כמו מישהו שלוקח את עצמו טיפה יותר ברצינות ו/או טיפה יותר ביצירתיות מאשר מתכנת רגיל. מפתח זה גם כנראה מי שהנושא יותר קרוב לליבו ועושה את זה כי הוא אוהב את זה והיה עושה (וכנראה גם עושה את זה כרגע) גם אם לא היו משלמים לו.

    מהנדס תוכנה (Mehandes Tochna) נשמע כמו מישהו שהוסמך אפילו מעבר למתכנת פשוט. מישהו שלמד את היסודות והדקויות, כנראה באיזו שהיא אוניברסיטה מכובדת. הוא יודע לא רק לתכנת אלא גם ללכת קצת מעבר. זאת ההסמכה שיוצא איתה בוגר טכניון שהלך כל הדרך. זאת ההגדרה שאני מעדיף ברגע שיש לי דיפלומה יפה ביד.

    ארכיטקט (Architect) הוא מישהו שכבר היה מהנדס תוכנה והתעלה מעל זה. הוא כבר חושב יותר גדול משורות קוד קטנות. אני מקווה להיות כזה באיזה שהוא שלב.

    כשהייתי במיקרוסופט ביום ראשון (דרך אגב, גלידה לפני הראיון זה רעיון נהדר) שאלתי את השאלה על אפשרויות הקידום וקיבלתי את התשובה הכי טוב שיכולתי לקבל אליה: הרי כל חברה תציע אפשרויות קידום לניהול צוותים והלאה אבל במיקרוסופט דאגו לציין שזאת רק אפשרות אחת. אפשר גם להתקדם בתכנות בלבד, לכיוון של הנדסה גבוהה יותר, ארכיטקטורת תוכנה וכו’… זה כבר משהו שיותר מתאים לי.

    Posted in Humanity, Life, Programming, Thinking Out Loud by with comments disabled.