Showing posts with label 3D. Show all posts
Showing posts with label 3D. Show all posts

Sunday, January 04, 2026

I must make some isocahedron gem!

This is a screenshot from @makeshifted, back in December 2022, that showed up in the last snapshot the Internet Archive could take of my twitter timeline. A repost with the annotation "3D was *that* awesome back in the Assembly 9x #demoscene days."

It showed up again a few times ago and I told to myself "you know, those stonekeys in Commander Keen ? Well, if I can make NDS 3D look that sleek, I won't need to pixelstudy them!

And it appeared again, posted by @benji__t this week-end while I'm doing my farewell tour on twitter.  

One possible system of Cartesian coordinate for the vertices of a regular icosahedron, giving the edge length 2, is: where denotes the golden ratio. -- https://en.wikipedia.org/wiki/Regular_icosahedron --

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Coxeter%27s_snub_octahedron_from_octahedron.gif/100px-Coxeter%27s_snub_octahedron_from_octahedron.gif
Oh! look at that ...  

Take a tetrahedron of psi, split summit so that it turns into a 2-edge, and voilà! isocahedron !

- - - 

those words above were written around the 19th of February, last year. I haven't written a single line of DSGL to make it appear in the infinite pyramid, and while I initially thought of using it as keygems, I realise that what they really be are the "magic stones" that you collect after defeating bosses.

Wednesday, April 16, 2025

climbing ... manuscript notes.

Quelques notes qui datent de février 2013 et qui refont surface pendant les habituelles chasses de paperasse de début juillet: comment s'y prendre pour que Bilou puisse se balancer aux signets de la school zone.

J'y note la recommandation que les morceaux de signets soient passifs dans la collision et un peu de math pour déterminer si une zone de collision classique croise ou non une "ligne" de collision, qui conviendrait mieux pour les cordes qui pendouillent.

Par contre, je ne sais pas trop dire si j'avais prévu que le signet soit fait d'un seul Gob avec une zone de collision pour chaque élément ou de plusieurs gobs ... la pages avec les lapins vont plutôt dans le sens "un seul gob", chose que le moteur "Dreamland" ne saura pas encore gérer, je dirais.

On y trouve un

state% : 3D.% {
  using RopeController;
  segment [*] F_ROPE;
}

pour un nouveau type d'objet basé uniquement sur du rendu 3D. Le fait qu'on indique des collision pour chaque segment renforce l'hypothèse d'un seul GOB composite d'un nouveau genre. On lit d'ailleurs, sur la première page

foreach (@segments):
   if (b.ymin > s.ymax || b.ymax < s.ymin) continue;
   if (s.dx * s.dy >= 0) {
     // depending on the rope's direction, there's 2 corners of the bbox to check
   } else {
     // test the other two, I presume :P
   }
   

Et une observation que "bah, peut-être qu'une verticale plutôt qu'une ligne oblique, ça ne gènerait pas tant que ça dans la plupart des cas. 

Bref: c'est confus, même pour moi, mais je veux l'avoir sous la main dans le même tag que les autres

Hi English readers. These are manuscript notes from about 12 years ago, when I first tried to figure how to deal with swinging bookmarks that you could catch and climb to. They're a bit confused and I'm unsure even I understand what's being said there. But I've got bookmarks and climbing goal revived for Bilou's Dreamland, so I'd rather have these notes around when I'll think about it. The code snippets I typed above suggests that bookmarks were intended to be a new type of segmented 3D object, which has been dismissed for the Dreamland engine

Sunday, March 10, 2024

Gob3D

There are some items in the school zone that would better be done with 3D objects. This is not quite new, but if I intend to have them in Dreamlands, likely it is time to consider them more seriously. At least, to identify the questions to be addressed.

  • How do we define hitboxes for a rotating 3D object ?
  • How do we define events that trigger when a given angle is reached ? (e.g. for state machine transition)

Je me suis laissé quelques petites notes pour quand il sera temps d'essayer de faire des objets 3D un peu plus ambitieux que les élastiques de SpongeBop pour Dreamland. Notamment des livres qui tombent et des lattes qui tournent ... Chacun d'eux ouvrant la porte à au moins tout un niveau dans mon carnet bleu.

Il faudra que je trouve le bon moyen de lier des zones de collisions aux objets 3D, pour commencer. Puis il faudra que je vérifie que j'ai bien compris comment marchaient les "display lists" pour la NDS ... Et accessoirement, faire une petite estimation du nombre "d'écrans" que compterait la school zone de DreamLands avec et sans les objets 3D, vu que pour la green zone, je suis déjà bon avec 2 niveaux ancestraux :-P

For the objects being considered here, it might be enough if rotations always happen around the origin of the model. A smashing book always rotates around its bottom line (X position irrelevant). A bridge book, around the middle of its bottom line (Z position irrelevant). A ruler bridge around its center of mass (Y position of the origin irrelevant). Sure, this does not capture all the possible things you might want to do with a 3D object in a 2D game, but it seems to be a sufficient start to me.

Now, last time I toyed with the idea of doing more than ropes in 3D, I ended up with the issue that anything that isn't hard-coded would have to use "glCallList", but I couldn't figure out how that would work. At last, I studied the registers used to control the 3D geometry engine (which turn out to match the gl* function almost 1:1) and noted that there are "command identifiers" associated with every 3D register. A call list is essentially a set of values to be written to GFX_FIFO. Writing to GFX_BEGIN (in order to implement glBegin) would be replaced by writing the command identifier for "begin vertex list", etc.

I could use a tool to craft these and adjust their parameters so that things look properly shaped.

edit: avec le "niveau de Rémi" et le niveau-anniversaire, je suis déjà à 36 écrans (contre 30 pour le 2eme monde de Kirby's Dreamland). Il y a au mieux 6 écrans à prendre dans le niveau avec tous les livres qui tombent et 2 à 3 fois autant à aller chercher dans les niveaux sans ces livres (mais avec quand-même quelque chose comme des lattes qui tournent et des bookmarks qui pendent). Je dirais que le plus raisonnable, c'est de garder les livres-3D pour un autre jeu.

Saturday, January 06, 2024

Raycasting ?

There's an awesome effect one can achieve once you have HDMA in a platformer: add depth to your background with "floors" like in DKC2 Lava lagoon. There will be complete occlusion of the 'far' background plane (wall) by the 'near' background plane (floor side), so having them scroll at different speed is 'just' a matter of updating X scrolling register at the right time. Having the floor positioned above or below the "seam line" between two walls is 'just' a matter of adjusting Y scrolling register earlier or later so that they 'skip' part of the far background art to show front background art.

The awesome part is that depth effect added with the horizontal planes, of course. That is about adjusting both X and Y scrolling registers and that will need maths to explain properly, using some pre-slanted texture as shown in the ripped contents of DKC2.

First immediate thought after I realised that it could be more than welcome in the pyramid level of Bilou's Dreamland was that it is actually an instance of the raycasting algorithm. Yeah, that infamous thing that turned ID software away from my beloved Commander Keen and sent them trashing the whole era of 2D platformers with first-person shooters. No wonder why, despite my affinty for maths and software optimization, I never ever felt tempted to code one myself. But hey, do it vertically instead of horizontally, and this is precisely what we need to decide whether to show floor, ceiling, wall or cut-through floor-to-ceiling structure.

So before trying to reconstruct the algorihtm that might have been used on SNES, let's see what it would cost us.
  • the background scene must be structured along a 2D grid. I'd say 64x64 pixels would be fine by me
  • For every scanline , we will have to step through the grid, one tile at a time, essentially checking whether one more "depth" step takes us farther than one "height" step in our case.
  • We need a direction vector associated with every scanline. That implies 192 square roots per frame, but hopefully, those computations are the same for every frame: they depend on the camera-to-screen distance and define angle used to trace through each pixel. They could be pre-computed even at compile time and stored in a look-up table.

So for every scanline Ys of the screen, (DDA) raycasting will give us a pair of (Zw, Yw) coordinates in the world that is shown on that scanline. Most likely, we don't want to compute the distance to Zw, Yw nor use that distance to adjust scrolling speed. Instead, Zw should directly be used to decide the scrolling speed. Well, unless we're on a horizontal surface, that is. Well, I can't help thinking this is overgeneral and overkill, despite übercool.

The trick in the SNES DKC2 implementation is that we have pre-rendered floors and ceilings. They already feature some depth-of-field effect. if you use them as-is. And being 440px wide, they're significantly larger than the screen (256 pixels iirc). Where does that 440 value come from ? Well, I guess this is screen_width + pattern_width, as the flat stripe shows a repeating pattern of 184 pixels. So whereever you are in the pattern, you can always have at least one full scanline ahead. The most distant line of the ceiling has only 96 pixels between two patterns, matching exactly the size of the tiled background wall. That means if the 'front' part is moving exactly at 1 pixel / frame, the tiled part should be moving at 0.52 pixel/frame so that Thales theorem is satisfied.

That size difference also tell us how far away the tiled parallax layer should be from the 184x32 parallax layer (and thus how deep the floor/ceiling objects are): they're as far from each other as the 184x32 layer is from the "camera"

  s16 xref = REG_BG1HOFS;
  s16 yref = (offset >> 2) % 192;
  s16 xamp = xref + xref / 2;
  s16 yamp = yref + yref / 2;
  int ytrigger = 224 - yamp;
  int btrigger = 192 - yref;
  int i, j;
  for (i = 0, j = 0; j < N; j++, i += 2) {
    if (j > ytrigger && j < ytrigger + 64 
|| j > ytrigger + 256) { data[i] = xamp; data[i+1] = yamp + 30; } else { data[i] = xref; data[i+1] = yref + (j >= btrigger ? 128 : 64); } }

That doesn't make the 3D-effect of DKC yet, but at least it gets me synchronous parallax with a single hardware layer.

Next step: find the zones where ceiling and floor should be shown. And there, trials and errors became too complicated to figure out. Hopefully, I found a way to analyze the problem with maths. Most of what's computed is derived from that "yref" value, which is normally the input from camera position. What I need to do is use that yref as horizontal axis and study how "triggers" that define top or bottom of areas evolve, cross and areas overlap appear or disappear. And once the (simple) maths were written, it took only half an hour to write the code to do it right.

With this graphics, that's the best I can do... let's see how it follows up once I have dedicated background.

Oh, and while I'm at it, there's a stunning online tool out there, to visit every map of every DKC SNES game: the DKC-atlas.




Sunday, November 27, 2022

Tué par la caméra

C'est devenu un problème récurrent pendant que je progresse dans les niveaux de Super Mario 3D World: tôt ou tard, je finis en-dehors du niveau, et régulièrement, c'est suite à un mauvais mouvement avec le stick-caméra.

Le jeu a fait le pari d'un mélange 2D/3D qui (globalement) marche plutôt bien. la perspective montre une généreuse partie du sol, ce qui autorise la création de "salles" dans lesquelles les quatre joueurs peuvent aller et venir, coopérer ou entrer en compétition. La manipulation des personnages y est d'ordinaire plus proche d'un Link's Awakening Switch que d'un Super Mario. ça, c'était prévisible. Elle est aussi plus proche d'un Link's Awakening Switch que d'un Mario 64, et ça, ça vaut peut-être la peine qu'on y regarde de plus près.
Dans Mario 64, le personnage peut normalement prendre n'importe quel angle sur le stick. Le contrôle est doublement direct (pour reprendre le terme défini par Kirby Kid dans The Coefficient of Clean ): la direction du stick s'applique directement à l'orientation de Mario et l'amplitude du stick s'applique directement à sa vitesse (ou à son accélération ... ma mémoire du jeu me joue un tour). En comparaison, les mouvements de Mario dans 3D World sont confinés aux 8 directions accessibles à un D-Pad, comme si le jeu avait été conçu sur SNES.

It keeps happening again and again as I play Super Mario 3D World : sooner or later, I end up out-of-path and die. And most of the time, it is because accidentally I hit the camera-stick. I believe the core issue about it is linked to the 2D/3D gameplay mixture at the core of the game -- which for most of the game works quite well. The default perspective shows a good deal of the ground, creating room where the 4 players can come and go, cooperate or compete. Character control is looking more like Link's control in the Switch Link's Awakening game, with 8-directions (as if the design had happened on SNES pad) rather than direct-orientation direct-amplitude control used in Super Mario 64.

En soi, le 3D world étant principalement consitué d'objets alignés sur une grille cubique, c'est un excellent choix de design: quand il va y avoir une passerelle un peu étroite à franchir, le joueur aura toujours moyen d'être pile dans l'axe où il ne se met pas à tomber au bout de trois pas. Mario 64, au contraire, était construit avec des polygones "libres". Une passerelle pouvait se trouver sous n'importe quel angle entre deux plate-formes qui adoptaient une géométrie polygonale quelconque (croyez-en un vieux qui y a joué au pavé numérique sur émulateur, et qui donc devait zig-zagger dans ce genre de situation)

Although Link-like controls are surprising at first, they work fairly well, and that is mostly (imho) because every object in SM3DW is aligned on a cubical grid. SM64 instead used polygons much more freely with any-angle (narrow) platforms here and there, asking for precise adjustment of Mario's direction to avoid zig-zagging. Discretised directions in SM3DW work well with discretised world objects which works fine with the original SMB blocky world design. Next they discretise camera angles by 45° as well. Maybe that's where things get me killed.

Les mouvements de caméra eux aussi ont été discrétisés. On regarde de face, de profil, ou sous un angle de 45° entre les deux. Un léger mouvement du stick droit de la switch nous fait basculer d'une perspective à l'autre dans un mouvement adouci dans le temps mais déclenché d'un coup quoi qu'il en soit. Et ça, en jeu solo, ça fait mal: le stick caméra est alors normalement sous les 4 boutons d'actions. Le moment où vous avez le plus de risque de l'accrocher par mégarde, c'est au milieu d'un saut un peu long. Pour peu que vous soyez dans un niveau qui reproduit en réalité un parcours 2D dans un moteur 3D, il ne faudra pas longtemps pour que ce changement d'orientation se traduise par un changement de la trajectoire de Mario (la direction imposée par le stick est relative à la vue, pas à Mario lui-même, or la vue vient de changer). Le temps de s'en rendre compte, il est trop souvent trop tard pour réagir et on aura au mieux le droit à 2 ou 3 wall-kicks pathétiques avant de ouahaouhouahouahoahahahahaaa au fond du niveau.

You usually have the camera presented so that level goes left-to-right as in a SMB level, but with a short knock on the right-controller stick, you can trigger a responsive-yet-smoothed 45° turn of the camera. And with the camera stick being just below the RUN and JUMP button, it plays trick on me when I'm doing a solo session: most of my accidental camera turns happen in the middle of a long jump. And since the direction of Mario is relative to the view rather than to the world, I'm suddenly heading out of the screen. If that jump happens in one of those level that actually implements a 2D course with 3D objects, that 'out of screen' actually means 'into the bottomless pit that is everywhere around'. Remember how often you thought about a 2D platformer that "that pirhana plant sure inst' as wide as the road!" ? Here you can definitely sneak behind the plant, but you also can fall off the road any time. You'll be granted a few pathetical wall-jumps before dying if you're lucky.

Et pour ne rien arranger, le jeu nous met sur la même input (stick directionnel vers le haut) deux mécaniques: avancer vers le fond de l'écran ou grimper vers le haut. On casse ici le principe d'individualité des contrôle (chaque mécanique a son morceau de manette qu'il ne partage avec aucune autre mécanique, toujours d'après le lexique de Kirby Kid).

Dans la plupart des niveaux, c'est plutôt un bon compromis: ça rend le fait d'escalader un mur spontané par rapport au déplacement sur le sol bidirectionnel, de même qu'il paraît naturel d'utiliser le DPAD vers le haut pour monter les escaliers dans un Zelda 2D (et si on avait pu y escalader les montagnes, ça aurait marché aussi). Mais revoilà les niveaux linéaires où les traceurs de parcours ont décidé de nos faire profiter de la vue splendide sur les nuages en arrière plan plutôt que de nous coller un mur devant les yeux. Soit.

As if it wasn't annoying enough, pushing the direction stick up triggers two different mechanics: it makes you walk farther away from the camera, and it let you climb up. So much for controls individuality (another coefficient of clean control identified by Kirby Kid). It is a quite nice mapping in many levels: it makes climbing a wall natural in a world where 2D floor is used, the same way pushing a DPAD up feels natural to climb up stairs in a 2D Zelda game. But then came the sideways athletic levels again, where designers wanted us to enjoy a beautiful clouds background rather than a boring wall. As soon as you add a climbable obstacle in that setup, Mario will switch from climbing to "visit those beautiful clouds far far away" in no time once you're at the top of the obstacle. 

Sauf que si vous ajoutez une grille à escalader (direction vers le haut), une fois Mario arrivé en haut de la grille, vous avez assez peu de temps pour relacher la direction 'vers le haut'. Faute de quoi, vous irez dire coucou aux jolis nuages d'un peu plus près. "Dommage", comme dirait Bowser. 

Notez que les concepteurs ont réalisé qu'il y avait un problème, et qu'ils ont ajouté une grille-de-fond par-derrière la grille-à-escalader. ça rattrapera le J.L.N qui avait mis uniquement son stick vers le haut (et donc ira s'accrocher à la grille du fond une fois arrivé en haut de la grille-qui-bouge), mais pas le papa qui avait maintenu haut et avant simultanément dans une habitude d'optimisation des mouvements sur les lianes de la Jungle Jaja.

 

Notez aussi que le problème ne se limite pas aux niveaux sans mur en arrière plan. Ici, par exemple, on est supposé se promener en rebondissant sur les fourmis invincibles tandis qu'on passe par-dessus des pics. Fort bien tant qu'on ne se met pas en tête d'utiliser la 3eme dimension pour aller s'accrocher au mur avec le costume de chat. Parce qu'en réalité il y a un espace de la taille d'un Mario entre les fourmis et le mur, donc vous pouvez parfaitement vous retrouver à les louper parce que vous êtes par-derrière alors que ce tronçon de niveau est conçu pour être joué sur un seul plan. Et vous pouvez aussi vous retrouver à tomber par-devant le niveau suite à un rebond mal calculé sur le mur du fond, naturellement.

And unfortunately, that not only happens in levels where there is no background walls. In that last video, Mario is expected to bounce around from one invincible ant to the next, which can conveniently walk in spikes. Perfect as long as you don't try to use your shiny cat costume to explore the 3rd dimension and climb the wall for a shortcut. If you try that, you're most likely going to miss the next ant because they aren't wandering just next to the wall, but one Mario away from the wall. You are perfectly able to be between monsters and the "save"-your-life wall. And you can still fall by going towards the player after you (accidentally ?) wall-jumped against that background wall.

Wednesday, August 04, 2021

In a cubical world ...

Clay-Zulah did what I had dismissed: a side-viewed, ortho-thing-ic 3D rendering of a 2D game. With a fairly nice result, I must add. The selection of objects is quite well done and there's some Kirby's Adventure vibe in the color and "textures" that manage to make us forget they are all cubes.

The perspective effect is a bit excessive to my taste, but once in motion, I must admit the result is one of the best I've seen so far for such things.

Dans la série des jeux indés dont je suis le développement sur Twitter, il y a le titre de Clay-Zulah, qui a justement opté pour un rendu orthochosique d'un monde 2D en 3D avec des objets très cubique. L'option que j'avais écartée pour un Bilou 3D à la fin du siècle dernier, donc. Et je dois dire qu'avec sa palette et son style "Kirby's Adventure", il s'en sort assez bien.

Thursday, April 08, 2021

Zoink/Fe

 Si vous vous demandez à quoi pourrait bien ressembler Ori en 3D, vous pouvez toujours essayer le jeu Fe de Zoink! studio (2018). Au niveau du gameplay, on est sur quelque-chose d'assez proche avec de l'escalade, du transport et du j'me-faufile-incognito (mais pas franchement de l'infiltration pour autant). Par contre, oubliez les techniques de ninja spiritique de 'Will of the Wisps', hein: on est plutôt sur un 'Ori Zero Mission' où on a même pas d'attaque et où il faudra faire s'affronter les créatures présentes dans le jeu entre elles pour parvenir à ses fins.

Visuellement, c'est très réussi, et ça me confirme que le 'low-poly' est tout à fait capable de me plonger dans un univers alternatif. Par contre, avec cette vision monochromatique et ce personnage tout noir capable de se tapir dans l'ombre, on est à l'anti-thèse de la lisibilité d'Ori. J'avais déjà du mal à m'orienter dans la première phase du jeu, mais quand j'ai commencer à me frotter à des monstres-piégeurs, je me suis retrouvé aussi mal embarqué que lors de ma dernière partie de Quake. J'ai fini par jeter l'éponge et regarder un let's play pour voir quel trajet prendre et m'y lancer 'en aveugle' tant il était impossible de voir à la fois mon perso, la trajectoire à prendre et le danger sur le même écran.

La musique est du grand art orchestral, quelque part entre celle de Gris, Hob et Ori sans toutefois être aussi 'iconique' que cette dernière. Il faudra que je partage ça avec ma collègue 'Sparkling' quand on sera de retour au bureau...

Un des éléments fondateur du jeu, c'est l'interaction avec les NPC. Ici, elle nécessitera au préalable de s'être "synchronisé" avec eux à l'aide du bouton "chanter" qui permet aussi d'interagir avec le monde de manière générale. Un peu l'équivalent du SAISIR/LIRE/PARLER des Zeldas post-OOT.

Ce qui est amusant, c'est qu'il y a quelque-chose d'un peu similaire dans Rime (moins mélodieux), dans Journey (les vagues d'énergie) et dans Gris (même si ça vient nettement plus tard dans le jeu). Et il y avait une mécanique un peu similaire aussi dans Juju & Peyo, même si son usage se rapprochait plus du "souffler les bougies" de Donkey Kong Returns.

Bref, une expérience sympathique mais qui ne me convient pas autant que hob, charmante mais pas autant qu'Ori (le p'tit elfe a une tête un peu flippante, quand on le voit de face, il faut dire ce qui est) et dans laquelle j'ai l'impression d'être perdu dans un monde immense plutôt que de ressentir l'excitation de l'explorer.


 



Saturday, February 06, 2021

2048 triangles

Cette histoire de Big Level Objects me turlupinait: est-ce que je ne fais pas le mauvais choix en laissant de côté le hardware 3D de la DS pour dessiner les niveaux ? Plusieurs autres homebrewers ont déjà indiqué qu'ils parvenaient sans trop de difficultés à gérer tout l'affichage d'un platformer 2D à coup de polygones sur la DS.

Bug! (1996) Saturn / PC

Given how natural "big level objects" are in 3D engines and how hackish they are in tiled-based engines, I wanted to give a second chance to the all-in-3D option. I know some homebrewers have succesfully walked to path opposite to that of New Super Mario Bros: sprite entities in 3D worlds that actually render 2.5D. Don't let yourself fooled: it's a tempting trip since the first screenshots of Bug! got printed in my favourite PC magazine.

A second tempting trait is that a 2.5D setup can make the "goal" of a level as clear as Journey's mountain. In a pure 2D platformer, you don't see where you're heading, hence the "walk to the right" stereotype.

Bon, je me suis laissé dire que les calculs pour que les graphismes tombent justes sont assez dégueulasses, ce qui a plutôt tendance à me refroidir.

Mais bon, en 1996, j'étais séduit par l'approche de la 3D par le jeu Bug! (en fin, au moins sur photo dans les magazines). Et depuis Journey, je dois reconnaître que voir dans l'arrière-plan l'objectif à atteindre, c'est une manière intéressante de travailler, tout en proposant un déplacement latéral pour les phases de plate-formes plus exigeantes. Sans doute que si j'avais vu la réalisation de Hercules, j'aurais poussé l'idée plus loin.

Donc, supposons que ... Qu'est-ce qu'elle a dans le ventre, la bête ? 2048 triangles. Ou 1024 quadrilatères (oui, on peut alimenter le chip 3D soit en triangles, soit en quads). Si on donnait un quad par tile à l'écran, il ne resterait plus que 256 polygones pour faire les personnages ou les particules. Pas énorme.

Fuzed by Relminator

One clear drawback is that the computations to get it right are ugly. Everybody who's been trying to do pixel art in Unity eventually says so, and I have no reason to believe it would be otherwise with NDS hardware. I don't mean the maths behind 3D projections here, but the setup to ensure that pixels got rendered as they are intended to, with one cell in memory exactly matching one cell on-screen.

But nonetheless, I looked up the "manuals". The NDS can render 2048 triangles or 1024 quads. That's 130% of  the number of 8x8 pixels tiles I've got on one _plane_ per screen. No doubt that if I go the 2.5D-with-GL path, I'll have to design levels with coarser objects (maybe not as coarse as Relminator's 32x32 pixels cubes), but thinking of some extra quads so that things are effectively 3D and not all flat might be necessary.

Now, to be honest, I don't really see Bilou fitting a cubical world like the one seen in Fuzed (or in Lemmings 3D), nor a origami-like world à la Mario 64. I gave that a try back in the Deluxe Paint days. Picking my best 'dirt' picture and soft-render it like if it was a Wolfenstein view. And to be honest, Badman 3 story that was rendered in a similar way look gorgeous in comparison.

Du coup, je m'attends à devoir travailler avec des objets plus larges, un peu comme ces cubes de 32x32 pixels comme on les voyaient dans le jeu "Fuzed" de Relminator. Là, avec un bon moteur on aurait 3 quads par bloc (5 avec un moteur minimaliste), et je compte un maximum de 62 cubes visibles à l'écran (donc 180 à 300 quads sur les 1024)

Bien sûr, si je veux aussi montrer une deuxième "couche", plus éloignées, les cubes seront plus petits, et donc plus nombreux.

3D made with Deluxe Paint for Badman.

Maintenant, il faut bien admettre un truc: ce genre d'esthétique toute cubique, ça n'a jamais vraiment été mon trip. J'avais fait un essai avec la fonction 'projeter une brush en 3D' de Deluxe Paint aux alentours de 1998 avec ma meilleure "texture" de terre pour refaire la cachette dans les racines de l'arbre creux de la green zone, et c'était pathétiquement catastrophique. Ça pourrait marcher un peu mieux avec la School Zone ou la pyramide, mais on devrait partir sur une esthétique plus proche de Phantom Hourglass (qui ne m'a jamais vraiment séduite non plus).

Bref, faute d'élément motivant, je reste gentiment avec mes p'tits tiles et mes p'tits sprites.

that would be 1024 quads. So we can fill the screen with 32x32 pseudo-tile and we'd have saturated the 3D pipeline of the NDS.


(cf. https://github.com/AntonioND/nitro-engine)

Sunday, June 07, 2020

Infogrames

Regis Monterrin et Florent Gorges ont obtenu une interview avec un ancien designer de jeu chez Infogrames durant la période SNES à N64: Vannara Ty, interview qui est rediffusée sur la chaîne "les petits secrets de la playhistoire". On y discute entre autres de l'évolution du projet "Schtroumpfs 64" -- un projet ambitieux, mais qui doit faire face à une période où la société ne sait pas encore sur quelle machine 3D miser et où il est donc nécessaire de faire toute la phase de pré-concept sur "ClaireFontaine Engine" parce qu'il n'est pas possible d'acheter une license de 3DStudio Max pour travailler sur un projet qui n'est pas encore validé. Mais la déclaration qui m'a retenu est la suivante:
[Peyo] n'a jamais vraiment eu de feedback négatif sur tout ce qu'on produisait. Déjà, de base, ils n'étaient pas gamer donc ils nous faisaient vraiment confiance.
Bien sûr. On a beau parler de Peyo-fils ici, le gars a la quarantaine quand le projet démarre. Pas loin de l'âge de mon e-Papou, qui ne se sera jamais vraiment à l'aise joystick en main. Alors le chasseur impérial qui sert de contrôleur à la N64 ou même les 6 boutons colorés de la SNES ... ils préfèrent sans doute laisser les spécialistes du testing (ceux qui à la fin du développement finissaient Tintin au Tibet en une vie, donc, avec des défis speedrun) de chez Infogrames leur montrer que tout marche bien que d'essayer le jeu eux même. 

Autre révélation-choc: quand Vannarra fait le design de Tintin au Tibet Le Temple du Soleil - ce titre techniquement impressionnant mais à la jouabilité difficulté monstrueuse (?) - il vient d'être engagé chez Infogrames juste après la fin du développement de Tintin au Tibet : c'est son premier jeu. C'est son stage (période d'essai?).
J'avais règlé les niveaux tellement durs que même les testeurs n'arrivaient pas à les passer. [...] Puis un jour [en revenant de vacances], les réflexes étant moins top, j'ai découvert les atrocités que j'avais faites subir aux testeurs et j'ai revu la difficulté pas mal à la baisse.
 Il nous avoue aussi qu'une fois le jeu fini, après un marathon de 10 mois uniquement là-dessus, il n'a évidemment qu'une seule envie: ne plus y toucher. Ce qui expliquer que ce soit un p'tit jeune qui ait travaillé sur le nouveau jeu, et pas le "chef" de l'équipe de Tintin au Tibet (pour peu qu'il y ait eu des chefs d'équipe à l'époque).

Saturday, April 29, 2017

Koopa 3D

Houlalaa... je retombe sur une vieille image de synthèse que j'avais réalisée dans moray/povray et présentée à la Inscene '99 ...

Quand je vous dis que la 3D, ce n'est pas pour moi, c'est pas une blague, hein.

Coming straight from my attempt to conquer the demoscene in 1999. I tried to use basic primitives (mostly spheres) to model a ray-traced koopa. This is likely the most complex model I've ever made, then had to study NURBS equation at school.

Can we agree that I'd better stick to 2D ?

Friday, April 07, 2017

Un peu de perspective ?

J'avais trouvé hob (runic games) totalement épatant, mais en faisant des essais pour le ramener à une vue 2D totalement à plat (façon Mario World ou SMB* sur NES), il faut bien reconnaître qu'on perd beaucoup de l'effet étrange, même en essayant de jouer sur des effets de lumière pour reproduire la perspective.

A peu près au même moment, je tombe pour la première fois sur la réinterprétation de Zelda II par Itchabop ... Je suis convaincu. ça donne plus de profondeur aux scènes, une ambiance plus close et à mon avis tout à fait utile pour la zone du chateau ou de la pyramide (et sans doute très bien aussi pour le temple perdu si jamais j'arrive jusque là).

(C) Ichtabop aka pxlitch2017
Hob's environment design works great because of hob's perspective. Itchabop's mockup of Zelda II conveys impressive atmosphere partly because of its perspective that put next to each others things that you can walk on and parts that are out or reach and mysterious.

Can I improve my skills and tools to get something similar in the desert and castle zone of Bilou ?


Du coup, je sors mon bloc à gribouille et je cherche un peu ...

Quelle perspective ?

Il faut qu'on reste dans quelque-chose de propice à du jeu de plate-forme. Je connais le système 1/3 pour une face 2/3 pour l'autre face, régulièrement utilisé pour un jeu façon Zelda "2D", mais même en inversant les proportions habituelle et en mettant 1/3 pour le sol et 2/3 pour les murs, c'est encore trop (cf. le tuyau de mario en bas à gauche de l'image). J'opte donc pour 1/6eme de dessus contre 5/6eme de face en espérant ne pas déchirer le continuum espace-plan.

I think I need something more subtle that the typical RPG perspective, where a cube's top would take 2/3 of the tile's height and the cube's front would be 1/3. Testing with Super Mario pipe makes me think that I should have at most 1/6th for the top and 5/6th for the front part to have a platformer-friendly perspective.

With those values, a 16-wide cube would show 2.66 pixels of "top" area -- okay, let's say 2 pixels of "top" color plus one pixels of shared "highlight" area.


Avec ces valeurs-là, un cube de 16 pixels aura approximativement 2.66 pixels de "surface horizontale" affichée. Allez, disons deux pixels pour le plat et un pixel de highlight partagé, puis 13 pixels "de face".

Et la School Zone ?

Oui, parce que pour avoir des images intéressante dans School Rush (et dans la school zone en général), j'ai déjà cherché à éviter les objets placés complètement face caméra, notamment avec les livres qui sont décalés. Plus question avec une élévation de 15° de choisir arbitrairement la taille de la tranche et la taille de la reliure. Il faudra que ça corresponde à un angle de rotation et une dimension de page qui soit cohérente. Ensuite, il faudra beaucoup plus de graphismes parce que si j'ai bien calculé, une section de 48 pixels de large correspondra à un décalage de 5 pixels et autant de variante d'un tile (mettons la transition bas/côté du livre) qu'on ne souhaite de dimension de livre (16 pixels plus large, il sera 2 pixels plus bas, etc.)

That's all nice for cubes and affordable for pencils, but big books will be more complex to handle. Their ratio will need to be studied more in-depth. The slopes to have will depend on the angle they're doing with the X axis, and they will lead to *much* more tiles just to cope with the vertical offset introduced. That's completely unpractical for the current engine. Another approach of how level map is turned into contents for the video RAM is mandatory to get the effect propagated back into the School Zone, and that won't happen any time soon.

Une horreur pour le game engine actuel

Pas question, donc, de pousser ça dans School Rush. Par contre, avec un game engine qui utiliserait la mémoire vidéo comme un "cache" pour un tileset plus grand, et avec un level editor capable de créer au besoin des versions "déphasées" horizontalement ou verticalement de n'importe quel tile, ça deviendrait envisageable.

Thursday, September 15, 2016

Le journal de Link: Cocorico: Sheik. Et après

 Cher  Journal,

Bon, je veux bien : j'ai passé 7 années en-dehors du temps après avoir fait la plus grosse boulette de ma vie, à savoir laisser entrer ganon dans le temple du temps. J'ai une super-épée donc je vais pouvoir arranger ça. Y'a une fille (?) bizarre qui me tuyaute avant même que j'aie pu faire un pas dehors "va au village cocorico, sans ça, tu ne pourras même pas entrer dans le premier temple". On y va: 'faut être gentil avec les filles.

Pour trouver quoi ? Des gens qui vivotent, qui se fichent pas mal de ce qui se passe dehors et qui n'ont pas l'air d'avoir la moindre idée de ce qu'on m'a envoyé chercher ici. Je reçois un oeuf-cocote ... je réveille un type qui sombre dans la dépression qui me fait un appel gros comme l'arbre Mojo d'aller voir comment va sa fille dans son ancien ranch. Pas l'ombre d'un autre indice... Enfin, à part le vieux Merlin qui délire à propos d'un gars qui savait voir la Vérité et qu'on a construit le puits là où il y avait sa maison et le type du moulin qui insiste sur le fait que là, maintenant, c'est bon: son moulin a bien asséché le puits. Sauf qu'on fond du puits, il n'y a rien qu'un éboulement de rochers si serrés que même une bombe n'en vient pas à bout.

Bon ...

Allons au ranch, alors. C'est qu'il n'y avait rien d'autre à faire, j'imagine. Sauf qu'au ranch, la fille s'isole dans un monologue répétitif. J'ai même pas pu lui placer que j'ai vu son père et quand je lui joue la mélodie des chevaux qu'elle prétend avoir oublié, elle m'ignore superbement.

On peut monter les chevaux, aussi. Ça c'est nouveau. Par contre, invariablement le mec m'interrompt et me flanque dehors au bout d'une minute.

Et ça ne fait pas d'avantage d'effet au vieux père déprimé d'aller lui parler de sa fille, non plus.

Tant pis, essayons le fameux temple de la forêt. Il est au bout des bois perdus, d'accord. Et il suffit de suivre la musique de Saria pour le trouver. Enfin, ça devrait, mais ça ne marche pas vu que Saria, elle ne joue plus. Je dois y aller à l'aveuglette... j'aurais du prendre un cahier à spirale avec moi pour me faire une carte, tiens: c'est pas Navi qui va m'aider: elle fait une fixette sur le village de cocorico. Même quand j'y suis, elle me dit qu'on doit y aller.

Bref, je peux aller où je veux, j'ai zéro équipement juste mon sac de bombes et mon épée qui ne sert pas à grand chose vu qu'il n'y pas de monstres dans la plaine d'Hyrule ... Mais me filer un tuyau sur ce que voulait cette tarée de Sheika. ça. bernique.

J'ai poussé une tête jusque chez les Gorons pour m'acheter une jolie tunique rouge qu'ils ne voulaient pas me vendre quand j'avais 12 ans sous prétexte que j'étais trop petit, mais il n'y a plus personne là-bas non plus.

I'm a bit disappointed by Zelda: Occarina of Time's shift from childhood to late-teenage at the temple of time. I should feel like I can explore much more, but I actually feel lost in a world where I miss my reference points and where all the friends who could explain me what to do next have been relocated somewhere else on the map, and none of the actions I could think of to progress is possible. 

I'd like to get the feedback of those who remember having played OOT for the first time. How did you figured out what to do when getting out of the Temple of Time as a grown up and realised that noone Kakariko village seemed to know anything about why Sheik of the Sheika sent you there ?

Tuesday, June 30, 2015

Reading: Ken Kutagari.

Avec le recul, ça pourrait être mon "life-changing book: 4/3". Une lecture très enrichissante qui dépasse la simple annecdote de playhistoire pour nous donner une idée assez précise des enjeux de la conception d'un équippement électronique de pointe. Complexité d'approvisionnements, choix marketting, ... comment le fait d'utiliser moins de robots pour placer les puces sur la carte-mère est la meilleure option pour baisser les coûts (et enterrer la Saturn de SEGA). De quoi quitter un moment l'artisanat du homebrew pour découvrir "le vrai monde" de la production électronique de masse, parce qu'en électronique, si on a pas la masse, on y est.

Another Great Read at Pix'n'Love editions, but this time, you too, English-readers, can enjoy it, and not only the French-Folks. Because Reiji Asukara wrote it in English under the title "Revolutionaries at Sony", published by Mac-GrawHill, obviously. It goes well beyond telling the tale of Nintendo and Sony teaming up, then splitting, then fighting to death. It gives you a complete overview of how a technical tour de force has been converted into a successful mass-market product. Retrospectively, I realise that everytime I have to understand why some idea to hack around some existing hardware to extend functionalities cannot be integrated into a finished product, I end up mapping the situation to one of the key decisions of Ken Kutagari in the PlayStation design story.

Le côté technique est malgré tout un peu léger. J'aurais aimé voir en vis-à-vis le schéma général de la PS1, voire l'organigramme de son CPU/GPU basé sur le System G... Pour ça, il me faudra faire l'étude du "psx-tek" comme j'ai étudié les DS-tek et GBA-tek, encore qu'il est probable que je laisse ça à mon ancien étudiant qui avait réussi à s'acheter une "Net Yaroze" d'occasion... Peut-être que Ce que vous avez toujours voulu savoir sur la Playstation (par Joshua Walker)
.txt donnerait quelques raccourcis, celà dit.

I would have loved the book to go a little bit more into the technical details, though. It is nice to have this discourse over the hardware evolving towards lower manufacturing costs and how it was decisive in the race against the Sega Saturn. It would have been much better to show together the motherboard layouts over the evolution. The book kind of assume that you've teared down a PSX already or that you don't want to depict the chips in your mind when it tells about it.

There's very little being said about the actual engineering of the GPU, the component that made the PSX so unique. Because it is architectured along the (now classic) model of a command FIFO and hiding the video memory from the CPU altogether, even showing the register map do not reveal a single detail about how things are structured to make the rendition of 360,000 polygons per frame possible for the first time except two words: massively parallel. There's not a single example of what "the framework" that PSX developers had to use. For the first time, afaik, a gaming console was made using a CPU that had a "kernel mode" and a "user mode", unlike microcomputers-derived CPUs in NES-SMS-Genesis-SNES. I'm left guessing the kind of functions / construction blocks might be in there, but it shed light about misunderstandings concerning the "BIOS" of the playstation line of products: magazines may have messed up BIOS, kernel and framework countless times.


Je comprends néanmoins qu'une grande partie de ce qui était présenté à l'époque comme le "BIOS" de la PS2 (pour faire bouger les cheveux) était sans doute plutôt un composant du "framework", cet ensemble de fonctions toujours grandissant mis à la disposition des développeurs de jeu pour qu'il puissent se concentrer sur leur développement. Pas uniquement des bouts de code présent sur tous les systèmes ni même des bouts de code destinés à être embarqués sur CD, mais aussi les outils de développement qui vont avec ... peut-être p.ex. un encodeur vidéo pour 3DSmax qui utiliseraient au mieux le décodeur vidéo hardware présent sur la console.

NB: je n'ai jamais eu de Playstation ni cherché à en avoir une. Aucun des jeux que mon frangin me montrera sur la sienne (après Y2K) ne me convaincront. Seul m'aura plus Rayman, que j'ai eu en version PC (, avec un pad plus capricieux mais mieux adapté à mon historique de jeu.

Wednesday, June 17, 2015

Cave Story sur (3)DS.

En 2004, après 5 ans de développement en solo, si on en croit la légende, Pixel offrait au Web Cave Story, ce que je considère personnellement comme le point de départ du jeu indé moderne. Un retour au sources graphiques et de gameplay à quelque-chose à cheval entre NES et SuperNES. Noël dernier, Je reçois de mon frère une surprise épatante: une version boîte de Cave Story 3D!

Built by a single person in 5 years, looking retro but with stunning gameplay and intriguing story revealed as you play, it turned famous and praised by the Web. I'm tempted to consider it the root of the current indie game fashion. It was surprising succesful for a 2D game 2 years before New Super Mario Bros. It is the game that made me realize that I could build Bilou's Adventure the way we dreamt it back in '94 and the look wouldn't matter if it was done right. Yes, I'm talking about Cave Story.

Somewhat 7 years later, Cave Story -- initially free on Windows -- is available on most video game consoles as official games. Sometimes as downloadable game, and sometimes as a real cartridge, like with the 3DS remake I received this Christmas. Surprised it took me so long to blog about it ?

Il a été assez difficile de m'y mettre: comparé à un Super Mario, Cave Story est un jeu exigeant de la patience, et vu mon niveau, il faut réessayer et encore réessayer. L'inertie forte du personnage combinée au pad-champignon mou et aux plate-formes miniatures d'un bloc de large mettent ma dextérité à mal. Du coup, je peux difficilement me permettre des parties de 10-15 minutes à côté de ma fille. Elle va me mettre la pression parce que j'échoue et au final, le jeu aura déterioré l'état de mes nerfs au lieu de l'améliorer. Inacceptable pour un Super Papa Bros.

Nowadays, when I play some game, it's usually as a way to entertain my kids that's also fun and relaxing for me. Something between reading a book (which I do too, even excerpts of D. Eddings, J.K. Rowling or J.RR. Tolkien) and letting them watch a cartoon... That works well with Rayman (because I know the game) or Mario (because it's designed not to trap you), but it was not working with Cave Story 3D. So I'm playing the game only in the evening, and not progressing as fast as usual.


Côté graphisme, on sent bien que le studio Nicalis n'a pas lésiné lors du portage, mais on perd malheureusement beaucoup en lisibilité de la situation. Le gameplay -- autrefois précis et nerveux -- devient flou et approximatif.

The visuals are appealing for sure. Revamped to the bones so that it works well with the stereoscopic screen although the level maps were completely flat. Not much room to move the player between front and back planes. So instead, the depth is used so that you know which part of the 3D world can be walked on, and which part is just decorative. And this is where we lost most of the requirements for fast-paced action.

Comparé à l'original, plus de séparation des plans sur base des couleurs. La seule chose qui peut véritablement servir d'indice, c'est la profondeur. Le hic, c'est qu'en mode 3D, la lecture est encore un peu plus complexe avec les effets de reflet et la nécessité de régler avec précision l'angle de vue.


It is quite hard to focus on encounters with monsters when you have to guess which platform you can land on. It gets even tighter when some sand ground hides monsters and you barely distinguish the sand from the regular ground.

Au passage, il y a moyen de choisir entre nouveaux modèles 3D (normal mode?) et stretching pathétique des sprites d'origine sur des textures à plat (story mode), ce qui ne donne vraiment pas de bons résultats lorsque le moteur décide de zoomer sur les personnages dans certains couloirs.

J'apprécie par contre le respect apporté à la bande son originale.

Definitely, for one expecting to play "the real cave story with real buttons on the go", Cave Story 3DS will be disappointing. The musics have been kept quite original. I'm not 100% convinced that the "classic" mode where you play with scaled sprites over the 3D world works much better than playing with the 3D models. In some levels, it gives a nice "original" feeling, but in other levels, where the camera zoom in to keep some secrets away, artifacts of pixel-art-to-texture conversion ruin the experience.

Autorisez moi une petite soirée de nostalgie sur le projet de Ravenworks qui aura dû s'effacer au moment du premier portage de Nicalis sur Wii (iirc).


Tuesday, December 23, 2014

Kirby 3D

Du sympa et *beaucoup* de récup dans ce nouvel opus de la chiquelette rose la plus populaire du monde Nintendo... Variante simple mais efficace des power-up centimes de vie à récolter: la couleur indique la valeur (comme les rubis d'Hyrule) et de mignonnes petites fleurs dévoileront un bonus quand on passe devant.... Allez, bonne nuit :)

I completed tonight the Kirby 3DS game I borrowed to my brother a couple of month ago. Quite cute, as one could expect. The depth exploring system doesn't add much to typical 2D gameplay (not more than offering 2 screens, at least) but it doesn't ruin the experience either. They put effort in the boosted vacuum mechanic, that's quite obvious. Using the colour of 'coins' to indicate they have higher value worked better than glueing 10 coins together. Taking note ...

Par contre, avec ses interactions avant-plan/arrière plan, son gameplay 2D dans un environnement 3D et sa structure très géométrique (contrairement à Donkey Kong Returns, beaucoup plus organique), Kirby Triple Deluxe est certainement le jeu qui vous donne la meilleure approximation de ce que j'avais en tête quand j'ai commencé à étudier le phong shading pour faire un Bilou à base de 3D, en 1998. Et les pieds de Kirby qui ne se plient pas quand il bouge vous donne aussi une bonne idée de pourquoi je n'ai pas continué dans cette voie-là après les premiers essais de rendu dans un modeleur.

Thursday, February 20, 2014

Vieux coups de crayon...


2005
 En vrac, quelques petites illustrations bilou-esques qui s'étaient glissées parmi mes documents de doctorant, et qui correspondent justement à la "zone creuse" de Bilou: L'encrier en 2005 pendant que je reluquais surtout les graphismes de petitcarreaux.fr pour améliorer mon trait,

I think I mentioned that idle timeslice between 1998 (Badman III) and 2006 (the pencil and the sharpen-her), where I mostly focused on operating systems design. While cleaning up my office, I dug a small collection of easy-to-date sketches of Bilou-related characters. 
2006
We see an inkjet from 2005, while I was attending a conference on grid computing, some pendats covering empty space between some IXP microcode in March 2006 (PhD years, just before starting the comics, afaik) and some standalone emotions of Verso-the-eraser which I would date from 2002 (or possibly late 2001 when I was finishing my master thesis ?)

2006
Un de ces crayons qui peuplait les ébauches de level design dans l'ambiance "bibliothèque 3D" de 2006 (pendant ma phase BD-couleur-photoshop). En mars de la même année, j'avais essayer de l'imaginer se déplacer en 3D avec du "tilting" pour la marche et de la rotation pour la course.
2002
Plus vieux (à mon avis vers 2002), quelques réactions de "recto-verso" dont les gags ne voulaient pas prendre, marquant ainsi la fin du "Bilou's Book".

2003
2004 ?
2003
Et pour clôturer, malgré leur arrivée tardive, voici enfin quelques gribouilles de Bilou et d'autres personnages de la School Zone datant avec précision de 2003. Curieusement, Bilou se remet à faire des grimaces qu'on ne lui connaissait plus depuis les années '90.

Plus délicat à dater, une tentative de mise en page du retour-éclair de Bilou dans la Green Zone où il devra "recharger les pouvoirs de la gemme dans le deuxième monde". Rien que ça. Le croquis est tracé au dos d'un document présentant Reiser4 (paru en '2004, et j'ai des raisons de penser que je suis tombé dessus assez rapidement après sa sortie). Côté scénaristique, ça ne marche pas suffisamment, et je reste donc calé du point de vue "Bilou's Book".