Sunday, December 20, 2009

Indie Game Developers Market Report

An exclusive report on RPG Maker based indie game developers will be soon available for sale. This report aims to empower companies who plan to develop supporting technologies for these indie game developers. Any company with a budget of several tenth thousands dollars for a given project will greatly benefit from this report. The report includes:
  • Indie Game Developer Profiles and Demographics
  • Potential Profit Margins and Return On Investment
  • Sales Arguments and Counter Arguments
  • Risk Assessment and Analysis
  • A Real-Life Case Study: L10nTool for RPG Maker
Take no chance and get your facts straight! No other software developer has dared to develop an RPG Maker compatible commercial product for indie game developers. My experience can serve you well. Contact me if you are interested to purchase this upcoming report.

Tuesday, December 15, 2009

Anonymous Lies

Dubious messages written by anonymous authors are a common problem on many blogs including mine. Examining publicly the reply messages on my own blog has proven to be ineffective and the continuous harassment lead me to turn moderation on once again.

A curious message written by an anonymous author, Liar Liar, appeared on Eyes For Lies. The self-confessed pathological liar writes an arguably honest message on his or her perspective about himself or herself. I will examine that message in this blog post and share my appreciation along the way.

Friday, December 11, 2009

Contemptuous Apology

There are seven (7) emotions discovered to be universal until now. The lesser known of these emotions is contempt. Contempt is a feeling or attitude of moral superiority or disdain. Every emotion can be experienced toward others or oneself, including contempt.

A contemptuous apology can be as obvious as it appears to be or notably difficult to identify. The latter is likely to be more frequent because an obvious contemptuous apology will generally immediately provoke anger from the person who receives it and deprive the deceptive person from the benefits of an apology.

Monday, November 30, 2009

Detecting Deception in an Apology

I have written an essay that was too long to publish here. This is a follow-up article on apologies. The excerpt can be read as follows:

This is an essay on Detecting Deception in an Apology (DDinA) using statement analysis. The approach presented in this essay aims to be accessible to the general public by focusing on the basic elements of statement analysis and provides the ability to be manually performed in a reasonably short time with an acceptable appreciation of the truthfulness and sincerity in an apology.


Wednesday, November 25, 2009

Anatomy of an Apology

An apology is used to express one's regret or remorse for the harm and pain he or she has caused. A apologetic person can seek forgiveness but may also try to heal his or her own pain. It can also be an effective action toward reconciliation, whether it is in a personal or business relationship. A complete, meaningful and proper apology requires certain elements to convince the person one apologizes to that it is sincere.

An Apology Should Contain...
  • Accountability
  • Acknowledgement
  • Taking Responsibility
  • Expressing Regrets
  • Asking for Forgiveness
  • Pledge, Promise
  • Form of Restitution

Accountability
An apologetic person should present a detailed account of the situation for which it requires an apology. The specificity will convince the person that you are sincere and will increase the likelihood to be believed when you will tell the person that you are genuinely willing to take full responsibility for your actions. Failing to provide an accurate account of the events may also entirely invalidate your apology, for the simple reason that you should apologize for the same situation the person expects an apology for.

Acknowledgement
An apologetic person should acknowledge the damage or pain done by his or her actions. The specificity will convince the person that you fully understand the consequences of your actions and will also increase the likelihood to be believed when you will tell the person that you are genuinely willing to take full responsibility for your actions. Failing to provide an accurate acknowledgement may also convince the person that you are careless about the consequences of your actions and becomes a failure to validate the person's feelings.

Taking Responsibility
An apologetic person should provide a statement in which he or she takes full responsibility for his or her actions in the situation. Recognizing your role in the situation and taking responsibility for the consequences of your actions is an important step before apologizing. Offering excuses, explanations or any form of rationalization for your actions will appear as an attempt to diminish your role in the situation and avoid taking responsibility for your actions.

Expressing Regrets, Asking for Forgiveness, and a Promise
An apologetic person should express his or her regrets or remorses at this point. The preamble has been laid out in a detailed manner and in such way that your regrets accompanied with an apology will be heard and, most likely, believed. Ask for forgiveness but don't force it and don't expect it. This is where you hand back the power to the person, in a great act of humility. A sincere promise that it won't happen again may also help to obtain forgiveness and eventually rebuild a relationship.

Form of Restitution
An apologetic person should offer a form of restitution, whenever possible, to repair the damages done. This is an opportunity to make it right and possibly remedy the situation. A detailed statement including the actions taken to correct the problem and expressing your commitment to avoid the same mistakes in the future will be highly regarded by the person you are apologizing to.

A Final Word...
The lack of sincerity at any point may defeat and completely invalidate your efforts to apologize. Be clear, accurate and do not bring unrelated matter in your apology. There is no point to apologize when an apologetic person only seeks to gain from the apology. An apology is being at the mercy of another and recognizing that you are a fallible person, which is one of the reasons why people take too long to apologize (or never do).

Take time to reflect upon what you did wrong but don't let a situation unresolved for months because it may well have degraded to a point that it is impossible to fix, especially in the situations where the harm is extreme. Never assume a problematic situation is minor. Give time for the person to think about your apology but don't expect a response and don't push for one.

all this for a better world...

Monday, November 09, 2009

Personality on Paper (follow up)

You may remember the personality survey that I have prepared some time ago. I have written a small application to compile raw data in a meaningful manner and in such way to make it possible for me to interpret the data. The results are simply amazing.

The results are used to create a statistical model and the data itself is anonymous. Few of the participants have already been contacted among those who left their email address. It may take few more weeks to process all the data and type a summary. Those who have not participated yet, see the link below and leave your email address if you are interested to be contacted about the results.

I have deliberately left any explanations and instructions aside on the first round to study how people would approach the survey. The most recurring question is about the meaning of the numbers. The closest number to a trait means the highest value for this specific trait. There are two opposing traits per question to chose from, which means that it is either one or another, or simply none of them (e.g. 3).

Scoring three (3) is a bit problematic because it should not happen very often, but yet may happen; it means that you should reconsider your scoring each time that you score 3 on a question and make sure it is truthful. Those who scored the most 3s were either clueless about themselves or dishonest in their answers. There are also people who have scored only or mostly positive traits, which is too flattering to be true: it is a sign of dishonesty or self-deceit.

Thanks to everybody who have participated so far...

Saturday, October 24, 2009

Crab Soup

I have prepared a wonderful crab and corn soup yesterday. Forget about fake crab, we're talking about the real thing. 'Reminds me, sometimes I watch weird cooking shows on television. Ramsay's Kitchen Nightmares would be one instance. Gordon Ramsay has also another popular television show named Hell's Kitchen and its sixth season has recently concluded.

Hell's Kitchen is not exactly what I would call quality programming and it's more entertainment than instructional; but it does not mean there's nothing of interest.

Ramsay's management is definitively noticeable. He yells, verbally abuses, throws food at people, kick garbage cans and whatnot! He is a straight-talker, makes no compromises and rarely compliments his staff. “He is a bad boss,” most people would utter without hesitation nor any further investigation. Ramsay nevertheless claims to have a 85% staff retention rate since 1993 (see here).

Your ideal boss is charming, calm, polite, and tells you that you are the best. He pays you lunch at times and it all makes you feel good. You feel respected. Popularity has a direct correlation with the ability to hide one's true feelings. Basically, it means the better the liar, the more popular.

Such an idealized boss as described above might as well be a psychopath. “Psychopaths are typically very likable”, according to an article entitled “Is Your Boss a Psychopath?” (quiz here). Psychologist Robert Hare thoroughly studied criminal psychopaths and developed a checklist, Psychopathy Checklist Revised (PCL-R), that has also been applied to corporate world. Be aware of what you wish, because it might become true (and not exactly what you expect).

I expect from people working for me discipline, honesty and take responsibility for their actions. It's a tough ride on anyone because it is demanding and exhausting. One could say that my personality is mostly being serious. Ramsay would say that I am too soft when it comes to management, even though others would instead say that I am overly demanding. Isn't it a strange world?

Monday, September 28, 2009

Advanced Software Testing using Simulation

The famous quote from Donald E. Knuth could be an interesting opening for this blog post. Unfortunately, the practice is overly cliché and would most likely dilute further the initial meaning of its author. Software testing remains a practical approach to proof softwares, whether it is manual or automated testing, whereas mathematical proofs are the theoretical approach.

Simulation can be useful to bring software testing a step further by simulating a user, or multiple users, performing a series of tasks through the software to be tested, with or without meaningful actions, but always within a certain set of parameters.

We are currently working on such simulation system. Each scenario is a compound based on a sequence of user inputs, which are collected and stored into a database. Most scenarios developed in software testing are usually based on a normal usage in order to prove the software works as intended. The existing scenarios will be subsequently mutated multiple times using probabilities, that is, the likelihood such or such user input can occur, similarly as in a Monte Carlo Simulation. Scenarios are also constructed from scratch using statistical sampling, where the value of a certain user input in a given context might or might not have a greater weight in its probability to be triggered.

The simulation system runs multiple scenarios simultaneously against multiple instances of the software during its entire development cycle on a dedicated server, on a 24/7 basis, and reports failed scenarios accordingly. The failed scenarios are then ran step-by-step by the software engineers so as to catch and correct defects.

Technologies are sometimes surprising and exciting...

Tuesday, September 15, 2009

Life has been much more peaceful lately, which is a good thing. My attention is fully focused on my other on-going projects but also learning Norwegian. I spend an average of one hour a day when I learn a new language. It can be more depending on the necessity of learning the language.

I have been spending an increasing number of hours learning Norwegian. Learning sessions are organized among learning the written and spoken language.

I have acquired "Norvégien Sans Peine" (Norwegian With Ease) from Assimil. Assimil publishes many language learning books and I have bought about 10 of them throughout the years. Their method is certainly not the best if only for being overly passive but when you are used to the formulae, it comes as easy as it gets and one can learn quickly.

Internet is also a great source of learning in that respect. I have managed to watch TV series on the web, offered at no cost, such as "330 Skvadronen" and "Hellstrøm rydder opp".

There are people who believe that learning a language should be undertaken with courses, books, audio, and so many other so-called tools. Some of them pour a fortune in this! My approach? A small book + a plane ticket.

The secret is really in the effort you are willing to put in to learn...

Friday, September 04, 2009

Bokmål

Jeg lærer norsk. Ingen nordmenn her? Skriv meg en epost eller en kommentar.

Friday, July 31, 2009

To See Is To Believe

Shall you find a small video presentation of L10nTool and Deployment User-Modifiable Script utilities in action at the following URL. Enjoy.

Sunday, July 26, 2009

A New Member Has Joined Forces

My software design team has the pleasure to welcome its new member and join forces to deliver high-quality products. Ksenia is from Tolyatti, Russia and will fulfill a graphic designer position within my team. She is experienced, skilled, passionate and with great enthusiasm and attitude.

Let's have a warm welcome for Ksenia...

Friday, July 24, 2009

Personality on Paper

While my career focuses on technologies, I am constantly intrigued and interested in human kind. It should not be overseen by technologists because technologies should be for people. I'd like to collect data about your personality and I have created a survey. It should take only few minutes of your time. Anonymously or not, as you wish.

Wednesday, July 15, 2009

A Survivor Made It Through

Pavel has officially joined our forces as of today. He was awarded a long-term contract with us. His collaboration is noticeable on L10nTool and Deployment User-Modifiable Script. Furthermore, he also managed to make a small contribution to Squeak community under my mentorship. A series of exciting new projects is awaiting Pavel...

L10nTool and Deployment User-Modifiable Script are few weeks away to be released.

Tuesday, June 16, 2009

Deployment Utility in Numbers

Deployment User-Modifiable Script facilitates, simplifies and automates the deployment process of RPG Maker XP/VX games, in the perspective of their distribution. This is a preparation system that aims to gather miscellaneous resources related to a game, perform its assembly and deliver a final end-user installer. The process is entirely automated through a set of predefined tasks and the outcome of this automation is one or more Stand-Alone Installer(s) for Windows™. The system also allows users to define their own tasks to be inserted in the process.

Deployment User-Modifiable Script has now reached the maturity of a beta version. This is undoubtedly the most tested tool in the RPG Maker community. The best way to express the work behind the utility is to unveil some statistics about it. The statistics are generated automatically by various tools such as CLOC (Count Lines Of Code), RCov (Code Coverage), Test::Unit, and RSpec (Behaviour Driven Development). These numbers have been calculated today and on the current source code.

The Core Application

Core Application863LinesOfCode
Default Internal Messages224LinesOfCode
Default Deployment Configuration37LinesOfCode
Total 1124 LinesOfCode

Unit Tests

Core Application112Tests655Assertions1841LinesOfCode
Custom Tasks16Tests67Assertions149LinesOfCode
Internal Resource10Tests19Assertions74LinesOfCode
Hash Extension20Tests34Assertions143LinesOfCode
Kernel Extension5Tests6Assertions27LinesOfCode
Helpers54LinesOfCode
Total 2288 LinesOfCode
163 Tests, 781 Assertions

Behaviour Driven Development

StandardUserScenario16Examples8Contexts159LinesOfCode


Grand Total 3571 LinesOfCode

Total Coverage 83.1%, Code Coverage 82.4%

Deployment User-Modifiable Script is bundled with other utilities such as L10nTool but can also be bought separately. The official release should be around August. Write us to get more information or to participate in our beta testing programme.

Friday, May 15, 2009

Internship Report: First Month

This is the true story of a journey taken by a young country boy from Saint-Petersburg. His quest to become a great warrior has just started a month ago and it's not without pain nor without difficulties. Countless hours of daily training are to become the foundations of a veritable warrior.

The daily training routine includes warming up and exercises. Each new day begins and ends with reading and updating notes and reviewing comments related to previously or ongoing assignments. Taking notes is encouraged on a periodical basis and at any moment as deemed necessary. Pavel has written more than 90 pages of notes during his first month.

Pavel is self-taught and has no prior formal education in computer science. No big deal when talent and hard work kick in. He has probably written few thousands lines of code during the course of his internship but eventually barely few hundreds made it to the core application. A young warrior never gives up upon repeated failures.

The apprentice has to learn the fundamentals of software engineering in every aspect. He has been restlessly working under my mentorship but never hesitated to read more about various subjects given to him.

Old Habits Die Hard

The first phases of a learning process can be afflictive and every day turns out to be a struggle with one's own mind. The old adage “Old Habits Die Hard” cannot be more true. The real downside of the first month of Pavel's internship is all about old habits coming back over and over. The internal struggle makes it painful to move forward and it's necessary to go repeatedly over the newly acquired knowledge until it's fully mastered.

How hard is it to work within a Software Design team?

You would have to ask Pavel. It's extremely demanding in term of creativity, knowledge, adaptivity, discipline, being able to work under extreme pressure and overly exacting quality standards.

Consequently, Pavel has managed to complete less than few assignments. Sporadically. Pavel is currently working on L10nTool and, its related projects, Onion and Deployment User-Modifiable Script.

coming up next month
Let's see how much this young mind has soaked in...

Wednesday, May 06, 2009

ScriptManager for RPG Maker

ScriptManager is a tool part of an SDK for RPG Maker, which empowers indie developers with the ability to manipulate RPG Maker scripts databases using command line interface. The utility is in design (planning phase) and should provide the following commands:

copy
Duplicate a script within an RGSS{1, 2} scripts database. A script can be copied using either its script name or identification number. It accepts an optional parameter to define a new copy name.
delete
Delete a script within an RGSS{1, 2} scripts database. A script can be deleted using either its script name or identification number.
export
Export one or more scripts from an RGSS{1, 2} scripts database into Ruby source code file(s). A script can be exported using either its script name or identification number.
gem
RubyGem interface to RGSS{1, 2} scripts database. It can install, uninstall, list and update RubyGems and its dependencies into an RGSS{1, 2} scripts database.
help
Provide help for individual commands.
import
Import one or more Ruby source code files into an RGSS{1, 2} scripts database. A script name can be defined using an optional parameter.
rename
Rename a script within an RGSS{1, 2} scripts database. A script can be renamed using either its script name or identification number.
list
List scripts from an RGSS{1, 2} script database. List displays identification number, script name, sanitized filename, script size. The output can optionally be sorted or unsorted.
meta
Show generated meta data related to an RGSS{1, 2} scripts database. Meta data from a specific script can be shown using either its script name or identification number.
version
Show the version of the program.

Something is missing
? Different expectations?

Write a comment and tell us more about what you think.

Monday, May 04, 2009

What's Cooking?

Cooking is a hobby of mine. Not that I have much time for hobbies. Nevertheless, my interest in cooking came up by an unanticipated coincidence. And, let's be honest, I like tasty food.

The challenge is to cook an exciting, vibrant and delicious meal for 7 or 8 guests for an upcoming birthday party. I am currently bouncing ideas for a menu and it reads so far as follow:

starters
gazpacho soup
citrus grilled lobster salad


main course
duck breast with green olives and/or black cherries sauce
accompanied with rocket and Parmesan salad

dessert
dough softly poached in maple syrup
and served on warm hazelnuts,
covered with warm maple syrup,
and topped with a leaf of mint


Saturday, April 25, 2009

Saturday, April 18, 2009

RGSS Player : A View on Its Product Perspective

[The] world of Indie Developers would greatly benefit from the implementation of a RGSS Player for MacOS X. Expanding their market to an entire new popular platform is without a doubt an enchanting idea. Following up on a series of articles written here, we shall pass the immediate and obvious questions to focus on what an Indie Developer would get from licensing a RGSS Player for MacOS X.
  • RGSS Player for MacOS X
  • Deployment User-Modifiable Script
  • Porting Games Developer Manual
  • One-Year Free Updates and Bug Fixes
  • One-Year Limited Developer Support
  • Flexible Licensing Scheme
Also, Indie Developers can benefit from additional services:

Porting and Further Technical Assistance
Porting RPG Maker VX/XP games from Windows to MacOS X is a simple and straightforward process. Nevertheless, let's face it, some games might be harder than others to port. A game extensively relying on Win32, Win32OLE, and any other OS-centric API will require to port those parts of the code to Cocoa. Some Indie Developers might have a very ecletic and unusual deployment scenario. Take your pick. The extended assistance is all about going the extra mile for a subscribed Indie Developer.

Porting Games For Developers
Some Indie Developers have no experience porting to MacOS X nor own Apple computers and might be interested to have their games ported by us. We can painlessly port any games from/to Windows and MacOS X.

Non-Profit, Non-Commercial Games License
We are currently evaluating the possibility to allow passionate developers to get their free games on MacOS X. There are plenty of existing RPG Maker VX/XP games that would also benefit from being available on another platform. Games made by developers who do not aim commercial activities. We are interested to hear about you as well.

Something is missing? Different expectations?
Write a comment and tell us more about what you think.

Friday, April 17, 2009

Onion 0.0.2 has been released

Onion, or Array Onion, allows peeling an array like an onion. It shreds one layer after another, from the outer inwards the inner nested array, according to the given depth. Infinite depth (or greater than current nested array depth) is equivalent to Array#flatten.

gem install Onion

Version 0.0.2 introduces few changes:
  • Improved Performances
  • 100% Code Coverage
  • You Can Now peel!
  • Small Bug Fix

Thursday, April 16, 2009

The Shop Around The Corner

I was blessed with an Apple Authorized Reseller on my door step during my childhood. The feeling of walking around in the store was no less than ecstatic. I was dreaming of something different than a PC, different from the DOS world, different from the overly ridiculous Windows 3.11. Something hardly affordable to the young lad that I was...

The store owner always been nice to us despite we would probably never buy a PowerPC on our own. Oh, boy! We must have been annoying. He was also doing programming on MacOS and would show me the cool things he did. He often had stories about the Mac Universe that was making us dreaming even more.

This is how I have been introduced to Mac. And I have fond memories.

"Hello, Mac Community!", especially Inside Mac Games fellows.

Thanks to Cobra Blade for writing a little bit about my project: RGSS Player for MacOS X.

Wednesday, April 08, 2009

A New Member Has Joined Forces

My software design team has the pleasure to welcome its new member and join forces to deliver high-quality products. Pavel is from Saint-Petersburg, Russia and will fulfill an intership and then a junior position within my team. He is a young, vibrant, passionate and skilled programmer.

Pavel will be working on L10nTool as his first assignment. He shall work on the completion of the existing code, tests and documentation. He will then be entitled to add new features such as RPG Maker XP support.

Let's have a warm welcome for Pavel...

Monday, April 06, 2009

Pea in a Box

There is a pea in a box and it is dry.
Pour some water, my little friend.

And then the box is filled with water.
There is a pea in a box and it is floating.

The box, however, suddenly begins to leak.
And soon it soaks water and shatters to pieces.

Crate is an incredible tool used to deploy Ruby applications to end-users. It magically creates self-contained statically compiled binaries. Crate is flexible and package applications the right way. The tool can target multiple platforms. In Theory, That Is.


Crate is developed on MacOS X, AFAIK. There is no instructions given on how-to use Crate on Windows. It clearly doesn't work as advertised. What are the current elements of concerns?
  • Poor documentation
  • Too many requirements
  • Fully Microsoft® Windows Awkward
  • Lack of integration with IDEs
  • Doesn't work as advertised
  • Overly forgiving policies on building rules
  • Very little control over dependencies
  • Painfully slow
Requirements
Crate uses MinGW, MSYS, MinDTK and many other UNIX tools. These are mandatory in order to compile packages used in your applications. Even if you only need Ruby, don't forget that it has its own requirements to be compiled as well.

Unfortunately, your pain is not over once the software requirements are met. The system is absolutely Windows unfriendly and despises your long path names with spaces. This will force you to hack your way in and run Crate from a valid UNIX path. It seems also impossible to either set and use CC environment variable or pass a reference down to MAKE in order to use a different compiler than cc (MinGW has gcc). A symbolic link is necessary. Moreover, as a complementary annoyance, I had to create a Bourne shell script to use Ruby from my Windows installation.

That's nothing you would say. Right. I just mean that it currently doesn't work right off the box.

Advertisement
The tutorial provided by the author of Crate is relatively straightforward. I am sure that it is absolutely great for those who can actually make it work. However, on the Windows platform, this tutorial won't work at all. The requirements met will only give you the keys to ...nothing. Nothing else than a working script that won't be able to compile properly. Some to many modifications are likely to be necessary. Likewise, I have unsuccessfully tried to produce a simple test by reducing its requirements from both the tutorial and Ruby.

Integration
Using Crate through MSYS rather than just using MinGW tools makes it challenging to integrate the process within your favourite IDE. I would like to have a deployment process that can go through all steps automatically and from one source (e.g. my own packaging script).

This is undoubtedly possible to manage files in the generated directory structure and then compile within MSYS by sharing a common UNIX valid directory. Then, you would have to figure out how to run Crate in MSYS from your IDE. Oh, wait. Shall we catch the output in your console pane? Unlikely! Besides, MSYS is also painfully slow.

forgivemefor¡havesinned
Crate is a series of recipes for Rake. Heavily relying on Rake to performs its tasks, Crate completely hides the low-level operations such as unpacking, patching, and compiling dependencies. This would be wonderful if only it wouldn't be so forgiving and continue executing its recipes until the very end, without stopping on critical errors. Furthermore, there is apparently very little control over the low-level operations such as compiling (Ruby, zlib, and friends).

And So...
The fact remains that Crate is perfect for my needs by its definition. It's just not mature enough for now. I have been in contact with its author, Jeremy Hinegardner, in the hope to bring progress to Crate For Windows. His track record includes the famous RubyGem amalgalite providing SQLlite support for Ruby. Therefore, the future of Crate is most likely a sure thing...

...there is a pea in a box

Wednesday, April 01, 2009

Oh, dear. Let's not forget about the famous RGSS script named SDK (Standard Development Kit). Either some tasteless humour or pure ignorance from the authors of the script. RPG Maker designers, please, just keep in mind that SDK is not SDK. Or, well, Software Development Kit related here is fundamentally different from the so-called Standard Development Kit. That must be April's Fool for them but on a yearly basis.

Monday, March 30, 2009

SDK for RPG Maker

[The] future is upon us. Game designers can serve themselves up with some RPG Maker Kool-Aid as a handy tool to implement their vision. RPG wet dreams brought to you by a convivial and convenient tool, allowing its designers to deal with databases, maps, events and so forth without the hassles of programming the game from the ground up.

Designers can extend the existing engine according to their needs because the inner strength of RPG Maker comes from its powerful Ruby based engine. Yet, as a curious phenomenon, you cannot do everything that comes into your Ruby mind. The future is upon us... but not exactly.

Integrated Development Environment
Scintilla might be fine as an enhanced text editor but it's no replacement for a well-rounded Integrated Development Environment (IDE). Remember, RPG Maker only partially uses Scintilla. Things get from worse to worst when you just cannot do anything (or mostly) of the following...

(NetBeans, Eclipse, SciTE, vim, etc)
Project Management | Syntax highlight and completion | Refactoring
debugging | profiling | regression testing | RubyGems
Revision Control | Build Automation

RPG Maker succeeds with designers because it's easy-to-use and easier to create RPG games. Developers are however left dying on the road. RPG Maker does not support a complete software development life cycle (see here too). And that's probably why there are not so many commercial games based on RPG Maker VX/XP in spite of their userfriendly software and working right out-of-the-box engine.

Testing, Testing, ...
...is someone listening? Debugging RPG Maker games is a mysterious process in which you have to deal with unexpected error pop-up windows or print outs of your own. You've got this state-of-the-art programming language but you're sent back in the 70s. Japanese might just be fan of John Travolta for what I know.

A serious indy developer would think twice before investing money in developing on such engine. It is extremely costly to develop and maintain an engine that is mostly human-tested. And human does make mistakes. Ruby provides many testing frameworks, for unit testing (xUnit style) or Behavior Driven Development (RSpec provides BDD support). None can be used directly within RPG Maker, and painfully outside.

Furthermore, and beyond regression testing, error messages should not be volatile as a pop-up window but rather available in a log. It's matter of being traceable. Most IDEs usually lists errors in a window pane. Ruby from command line would simply print out errors on stderr.

Profiling Code
Computers must have reached some new heights to allow game developers to live without a code profiler. How is it possible to find and fix bottlenecks and optimize code otherwise? A profiler is a software performance analysis tool and is fundamentally different from a Benchmark tool. Ruby has various tools for these respective tools, namely ruby-prof and Benchmark module. None of which are included in RPG Maker.

The One-Man Team
There is no such thing as a one-man team. Period. If you got a team, it is because you have more than one person working on a project, otherwise it's one-man effort and that's it. The point is that even being an indy developer means to have staff at one time or another. RPG Maker is unfortunately inadequate in many ways for team work.

RPG Maker is not designed with collaborative work in mind. There is no way to provide revision control of neither the source code nor its resources. It might be more trivial to manage external resources but it is limited to accessible files. Binary files can hardly be diff'd. Collaborative work also means a team working at the same time on a given project. By not integrating revision control within RPG Maker, it's hardly possible to always work on up-to-date resources, code and data. Integration and collision management are always manually managed, leaving the burden to preferrably only one person. Release process (see Build Automation below) also partially rely on revision control to track, manage, and fix defects in a software according to its version(s).

RPG Maker is not natively supporting revision system of choice, such as Subversion, CVS or so. Shame on Enterbrain.

Build Automation
Let's have a special word about Build Automation. This is something a software or game maker cannot live without. An automated build in the context of RPG Maker might mean to package a game, insert localized resources (documentation, texts, graphics and/or music, etc.), DRMizing your game or simply code sign it with your certificate. You would naturally consider using L10nTool to localize texts.

Fortunately, this can be mostly done outside RPG Maker using standard tools. Rake is mostly used by Rubyist, Ant is my current personal favourite, and Make could be used for the nostalgics. Rake is probably the best choice for indy developers leaning on RPG Maker.

It's however always interesting to know that build automation is fully integrated with IDEs nowadays. There are also few things that are not trivial to do without full integration, such as dynamically inserting scripts (or partially change databases) in RPG Maker according to build automation rules.

RubyGems
Ruby programmers are well familiar with RubyGems, the package manager for Ruby libraries. There are several thousands packages available online. They are called Gems for a very good reason: this is truly a treasure. Now, you've got a powerful Ruby-based product to make RPG games and you are prohibited to use RubyGems. Wankers! Why on earth Enterbrain wouldn't make it easy to use RubyGems, I'll never know...

Brave New World
Imagine a world where you would have everything listed here at the tip of your fingers. The real possibility to deliver high quality, well rounded, fully featured RPG games RPG Maker-based. Your games would finally get the treatment they deserve with SDK for RPG Maker. Real tools for real developers.

Your fantasies would also become true. You could spruce up your games with real-time image effects using RMagick. Or, yet, add physics with Chipmunk: Game Dynamics. Writing softwares like L10nTool would be a joyful ride in a park.

But, wait, that's not all!

You could easily create an online game with Ruby's networking feature. Perhaps, your MMORPG dream comes true. An RGSS Player as a server with a handful of databases and multiples RGSS Players as clients connecting to your virtual world. A world that can evolve.

Software Development Kit
An SDK would basically let you develop, test, debug, package and deploy your games within an IDE and a collaborative environment. Something along this line...

Sunday, March 29, 2009





This is an incredible work. PatrickBoivin pays attention to details and thoroughly executes his craft. He is a self-taught French-Canadian filmmaker from Montréal, Québec.




Friday, March 27, 2009

Onion

I have created a small RubyGem for Ruby's Array class in order to circumvent the complexity of nested arrays when gathering information from a specific format to another. This is used in a real project, namely L10nTool.

Onions have layers. Ogres have layers.

Onion, or Array Onion, allows peeling an array like an onion. It shreds one layer after another, from the outer inwards the inner nested array, according to the given depth. Infinite depth (or greater than current nested array depth) is equivalent to Array#flatten.

This is not the most stunning code one would have written but it fully passes its Unit Tests. Though some more tests have to be written. Also, it is an insignificant part of L10nTool. The export feature creates references for the import feature. These references are telling the import feature the location (id, accessors, etc.) and which database each translated text should be replaced at. Constructing cross references among multiple targets and databases, while abiding to the desired format, became easier with Onion.

That would perhaps be interesting for Hashes as well.
Difficult to say considering that it would be of no use for myself.

? ...why are you crying

Many reasons brought me to create a RubyGem and publish it in the open source community. Firstly, I would like to be more familiar with the process in general. Secondly, it's great to improve a piece of work to have peer reviews. Finally, hopefully, it will be helpful to others and give back to the community.

The project page is located at http://rubyforge.org/projects/onion/. It should be available on standard RubyGems server shortly.

All right, throw me stones little monkeys!

Wednesday, March 25, 2009

RGSS Player : A View on Its Implementation

[We] shall further elaborate on the implementation of a RGSS Player due to the popular demand. The overwhelming demand leaves me no other choice. Well, when your blog is as popular as mine, you really take a demand from a single individual seriously.

Enterbrain does not provide source code for its RPG Maker VX nor any other products as far as I know. Thus, the legitimate question arises on how one would port RPG Maker VX/XP RTP (Run Time Package) to another platform.

...truth to be told

Because it is important to respect the work of others and avoid legal nightmares, it does mean to completely rewrite the engine from scratch. This can be done using non-intrusive techniques (without reverse engineering per se) such as creating classes according to either RGSS{1, 2} specifications, writing tests to assess both RPG Maker and our own engines and make sure they have exact same behaviour, and so on.

Run Time Package

Run Time Package is mainly composed of a (1) RGSS Player, (2) Ruby Game Scripting System and (3) Ruby. This is packaged in a lovely executable (GAME.EXE) and dynamic link library (e.g. RGSS202E.DLL). Moreover, the RGSS Player has to be able to read the various databases available, scripts and decrypt encrypted archive (GAME.RGSS2A). Finally, SCRIPTS.RVDATA is loaded and executed once the RGSS Player is fully initialized. The graphics, audio, fonts, etc. bundled with RTP are cosmetic (and usually user-content) and does not affect the RGSS Player as long as they are available in a valid format supported by the engine.

? ...did you know

The Script Editor within RPG Maker VX uses partial features from Scintilla (SCINTILLA.DLL or SCILEXER.DLL) and let you edit SCRIPTS.RVDATA. The scripts deal with high level features of the game engine and, contrary to RGSS itself, its source code is fully available to the game designer. Concretely, it means that one can design a game using Enterbrain RPG Maker VX on Windows and would be able to run mostly unchanged on any platform a RGSS player is available.

{Ruby + RGSS}.exe
That's right. In a nutshell, the famous RPG Maker RGSS Player is RGSS classes on top of a Ruby interpreter embedded into executable files.
Consequently, one has to be able to reproduce RGSS classes and deal with low level programming {graphics, audio, decrypting, native GUI, etc.}, as well as being able to embed a Ruby interpreter in an EXE or DLL file.

There are few tools to create executable files with an embedded Ruby interpreter. Each have various limitations that might be problematic, such as, being limited to single or few target platforms, overly outdated, overly limited, still experimental, etc. My best guess is that RPG Maker uses Exerb.

It is really straightforward to implement a RGSS Player in principle but let's not forget that there are around 50 classes per RGSS specification, requires the ability to properly wrap up a Ruby interpreter into an executable file on the desired platform(s), writing hundreds tests, handling low level programming, which are different for each platform, and so forth. Ultimately, Ruby might also not be supported on some desired platforms, such as Nintendo Wii, AFAIK, and hence would require to port Ruby first.

Next time, we could have an overview of the possibilities offered with
an SDK for RPG Maker...

Wednesday, March 18, 2009

Of Mice and Men

So much for John Steinbeck.

Once upon a time, I had a mouse named Logitech MX 620. It was a long long time ago. A little while has passed after I purchased it in a local store but just enough to be unable to return the so-called four-legged living creature, that had actually no tail either. Unfortunately, I have encountered a problem for the first time with a Logitech mouse: the left click would sparsely double click on single click.

It's the instantaneous death of a brand name! It's difficult to trust a brand that has failed miserably in your hands.

Lenny, don't die on me please!

A brand new Logitech MX 1100 has been given to me as a present few days ago. So touching, isn't it? I sincerely hope that it will survive to my very own professional stress test: my daily usage in the workplace. Nevertheless, it is comfy and rich of features. It has DPI buttons, which let you adjust your mouse readings on the fly. I am not a big fan of huge mouse but it's so comfortable that it's difficult to complain about its size. Logitech says that this model is perfect for people who spend more than 8 hours on a computer. And it seems quite right on a first impression.

Did trust in the brand name came back?

I strongly believe that one has to closely monitor his or her favourite companies and have an appreciation regarding to quality of their products. My experience with hardware companies, from the inside, taught me that the inner guts are not necessarily as beautiful as the product has been advertised. You might just get the worst lemon in the world. The answer is: never trust a brand, be faithful to your needs only.

Now let's see how this mouse handles the pressure...

Tuesday, March 17, 2009

:) :) :)

Friday, March 13, 2009

Smalltalk

Smalltalk is an environment and programming language that has shaped modern computing ever since its creation in late 70s. One could go in length discussing its innovations and how they have influenced everybody, from developers to end-users including children. Truth to be told, perhaps you're in the entirely wrong domain of expertise if you don't know about Smalltalk1.

There are many commercial and open source implementations of Smalltalk. Each and every implementation has so-called common roots2 with a variable level of compatibility and are otherwise tremendously different.

VisualWorks is a commercial Smalltalk implementation to be noticed, it truly empowers your commercial applications. It's a solid, state-of-the-art and multi-platform Smalltalk. I also used to enjoy IBM VisualAge For Smalltalk... oh, time changes... and it was quite costly...

Whereas Squeak Smalltalk set the pace in the open source world with its wonderful, media oriented, experimental Smalltalk dialect. GNU Smalltalk deserves an honourable mention, powerful though mostly text-based (no UI).

What's up with Smalltalk anyway ?, shall you ask.

I'm lovin' it. Squeak is my favourite at the moment. It's great to transform a design into a working prototype. It is entirely self contained and allows you to do anything your wicked mind can conceive. Smalltalk is a totally reflective system usually written in itself, which means that you have complete control over your destiny.

Prototypes are more than often a specification nightmare, if only for their incompleteness. The very dynamic nature of Smalltalk makes it possible to grow an application through an incomplete specification. Moreover, instant results become not very far from reach. The early possibility to use your prototype is not only a great motivation but allows you to get in touch with human usability sooner.

Smalltalk community is pioneer in unit testing3 and every dialect includes a unit test frameworks as far as I know. Test driven development will give you the opportunity to make your prototype safe and sound. You can enter a test-fix-and-refactor phase as your prototype specification changes or yet whenever you pass from prototype to application.

bonus: a round and well written prototype can truly serve as foundation for an application.

Hold tight. It is still early for me to reveal (or unveil) my current projects using Squeak. Meanwhile, get in touch with Squeak Smalltalk or Scratch for fun4.

So long, Marianne.
  1. Therefore, hurry up to google it and make yourself knowledgeable. =)
  2. ANSI Smalltalk is the unifying de facto standard.
  3. SUnit is the inspiration for xUnit frameworks, thanks to Kent Beck.
  4. Scratch is written in Squeak Smalltalk.

Tuesday, March 10, 2009

RGSS Player for MacOS X

The idea is taunting me. It's beyond explanation. Perhaps even hopeless. Very little commercial games are based on RPG Maker XP/VX, reaching the incredible number of (5) five. And I do not have my very own game(s) based on either engines to fully benefit (and profit) from such venturous project. The maker and player fans would love it but they wouldn't pay for it, would they? The task at hands is tremendous. Consequently, the perspective of implementing a RGSS Player for MacOS X is borderline suicidal.

Yet, the challenge is compelling.

Developing an emulator is like building robots. It's exciting. An emulator is a form of computer simulation that seeks to replicate exactly the behaviour of a given system. This can be built according to specifications and non-intrusive tests since it focuses on behaviour, which will certainly prevent regardlessly taking apart other's work.

Specifications outline that each RGSS{1, 2} system has more than 50 classes on top of existing Ruby classes. RGSS1 and RGSS2 have compatible classes but some things actually differ: the latter has new classes, new methods and sometimes different behaviour. Databases are only the outcome of these classes and straightforward once you have the classes defined. The fancy scripts included with RPG Maker, or yet even custom scripts, only require Ruby+RGSS to work.

Emulating RGSS would mean to comply to one or both specification by implementing its classes, low level specifics {graphics, audio, etc.}, regression tests and an entire release process to produce a shiny new and wonderful binary file, installer, etc. This is a tremendous work. It has to flawlessly run RPG Maker games on MacOS X after all.

An interesting outcome from such project is that it would eventually allow a more up-to-date approach to programming RPG Maker games, because it's a step away to create an SDK that can be used in your favourite Ruby IDE (NetBeans, Eclipse, SciTE, vim, etc). There are many features not available in RPG Maker's Script Editor, if only for syntax completion, refactoring, being able to easily use RubyGems, and running unit tests or RSpec.

Will this project ever see the light of the day ?

Thank you for asking, Miss Daisy! There is absolutely no certainty about an eventual release. However, designing prototypes, proof-of-concepts and custom softwares are usually my daily bread. I might write a prototype some day just for the kick. Though commercial demand could get things started. Right now, I am mostly taking notes related to this more-than-uncertain project.

Saturday, March 07, 2009

L10n Tool for RPG Maker

So much for a public life. I usually keep my projects for myself. Let's face it, I am a secretive person. Nevertheless, I have decided to present some pieces of an ongoing project for your own displeasure.

Rationale
The motivation behind this project is to provide localization (a.k.a. L10n) facilities in order to deliver a multilingual, or at least localized version of, any game produced with RPG Maker VX. This project has to seamlessly integrate a translation process and yet without any major changes in an implementation of a product based on RPG Maker. Therefore, L10n Tool for RPG Maker is the way to go.

Features
  • Import and Export RPG Maker Texts and Dialogues
  • Smart Extraction and Representation
  • Support standard gettext PO and POT file formats
  • PoEdit-based translation process
Editions
L10n Tool for RPG Maker is available in different editions according to the purpose of their target audience. These editions are shipped with the standard product.

Master Edition
This edition provides complete support for releasing a localized version of an RPG Maker based product. This includes, without limiting to, importing and exporting data and prepackaging localized products.

Translator Edition
This edition provides import features and Strings database support, allowing translators to fill in and test with ease their translation. It truly allows translators to test their translation live and without having to deal with the hassles of RPG Maker.

Release Edition
This edition provides runtime facilities in order to support in-code strings localization. A small script is inserted in your product to be able to retrieve translated data from Strings database, a customly built database. This is the only feature exposed to the end-users.

Effective Translation Process
The translation process is greatly improved by extracting and annotating data from RPG Maker databases (smart extraction and representation) and, then, use the outcome in an organized manner with a specialized Computer-Aided Translation (CAT) software. PoEdit is a CAT software providing a seamless translation workflow with a Translation Memory (TM). Translators can create reusable building blocks for their translation as they translate with the help of PoEdit's TM. The Translation Memory then suggest nearby or exact matches on untranslated sentences, marked to be reviewed by the translator. It is also possible to run a spell checker, which you definitively cannot do within RPG Maker. This will save tremendous amount of time and yet provide an ultimate quality translation. Bigger, faster, better.

Currently supports RPG Maker VX.
Possibility to support RPG Maker XP.

Disclaimer: L10n Tool for RPG Maker does not include an RPG Maker license; you have to buy your own copy. There is no official name for this product, it is however affectionately called L10nTool. Nothing to do with Enterbrain in any way at all. No affiliation to PoEdit whatsoever.

Customers
BlossomSoft is using L10n Tool for RPG Maker on their current hot title Eternal Eden [demo|buy]. Buy their game. =)