Sunday, December 07, 2014

Super State Bros.

Une tentative de mesurer la complexité du comportement de Mario dans Super Mario World, avec l'idée de le comparer à celui de Rayman, histoire de mieux comprendre comment ce genre de chose peut monter à 15K de code source. Par comparaison, le code de Bilou prend 900 lignes de script et pas loin de 20K ... La partie des "micro-contrôleurs" qui définissent les actions élémentaires combinées dans la machine d'états prend pas loin de 1300 lignes de code, soit presque 40K caractères. C'est mesuré à la grosse louche vu qu'il y a aussi parmi ces contrôleur du code qui ne concerne que SpongeBop (pour l'instant), etc. et surtout une bonne dose d'annotations pour InspectorWidget.

How complex is a platformer character behaviour ... let's say Super Mario in Super Mario World ? Does that help me understand whether 15KB of code for Rayman Origins is compact, regular or stunning -- as it looked to Pasta Games developers who converted it into Jungle Rush game ? To figure out, I tried to depict a state-machine-like representation of all the states Super Mario can take, where a different state implies different reaction to player input.

'What is a "state" ?' might you ask, and why don't we see small-vs-big or fire Mario here ? A state is not a costume it is an identifiable part of the behaviour that is distinct from a gameplay perspective. "Jump" and "Run" are different states because Mario behaves differently (gravity, friction) and because some actions are only possible while jumping while others aren't.

In figures, that sums 21 different states for Mario, 6 of them working only with specific level elements and 6 others requiring a power-up. To my surprise, Rayman Origins accounts for a quite similar number of states, mostly because punching and kick'ing suspend some actions and can be cancelled like in a fighting game, therefore asking for a dedicated state while Super Mario's fireball can be spawned without cancelling any other move. The original Rayman on PSX had much simpler behaviour, with only 11 distinct states.


En chiffres: 9 états de base pour Mario ("soulignés"), 6 états supplémentaires pour interagir avec des éléments précis des niveaux (entre parenthèses) et 6 autres états qui ne sont disponibles qu'à travers un power-up. Graphiquement, la "sprite sheet" de Super Mario World est plus vaste, mais je n'ai pas répliqué ici "saute, saute avec un champignon, saute avec une fleur de feu, saute avec une plume, saute avec yoshi" parce que tous sont identiques au niveau du code de comportement: ils réagissent de façon identique au commandes du joueur.

En comparaison, je n'ai compté que 11 états dans le comportement du premier Rayman sous DOS/PSX, dont 5 doivent être débloqués au cours de la progression du joueur. Bien moins complexe qu'un SMW, donc. Mais les baffes (qui affectent la vitesse de Rayman), les attaques-rodéo et autres glissades, les rebonds et la nage de Rayman Origins.

Le personnage de Xargon en est à 10K symboles (389 lignes de code)... Ah, oui ... il faudra que je regarde d'un peu plus près le code de Keen Dreams.

1 comment:

PypeBros said...

Donc, 38000 symboles pour le comportement de Commander Keen dans Keen dreams (pas de pogo, et on ne s'accroche pas aux rebords). Et ça sans les routines de clipping