Hello, Avatar!

Second Life et Programmation Créative

Aller au contenu | Aller au menu | Aller à la recherche

Keyword - Sandbox Stories

Fil des billets - Fil des commentaires

Le plus grand Tetris du (second) monde

Quand Frao Ra m'a fait visiter son château dans le ciel (voir ci dessous), il m'a appris qu'il y'avait une nouvelle sandbox sur Terminus.

Chateau Frao

Alors j'ai été visiter la place pour voir. Et comme il n'y avait personne, j'en ai profité pour y installer le plus grand Tetris du (second) monde...

Le plus grand tetris du (second) monde

C'est un vrai Tetris jouable ! Il est ici, et je ne l'avais pas encore diffusé via le groupe Hello, Avatar!
C'est à présent chose faite. Rassurez-vous, celui-là est de taille humaine :-)

FoxBlox : un véritable tour de force

En recherchant "tetris" sur SLExchange histoire de tâter un peu des produits de la concurrence, je suis tombé sur un produit qui m'a littéralement laissé sur mon séant.

FoxBlox est une véritable prouesse technique. Utilisant seulement 30 prims, ce Tetris comporte 200 cellules, et se paye le luxe d'offir un panneau d'affichage (au lieu d'un affreux llSetText), ainsi qu'un board super-décoré.

Mais le mieux, c'est que les pièces descendent de façon fluide, comme les bons vieux "sprites" des jeux d'arcades, semblant faire fi de la limite des 0.2 secondes infligées lors d'un llSetPos.

foxblox.png

Complètement abasourdi, je félicite par IM l'auteur de cette merveille, DanielFox Abernathy, en lui envoyant humblement le petit SLTris 2D open-source que j'ai eu tant de peine à réaliser, sans panneau d'affichage, moche comme tout, en seulement 41 prims...

Quelle ne fut pas ma surprise lorsque j'ai ouvert ma session... DanielFox, non seulement me remercie, mais il me confie qu'il était passé par les mêmes étapes que moi, en construisant un Tetris de 200 prims, puis de 40 prims... pour arriver à la version actuelle au bout de plusieurs semaines de travail acharné.

25 versions plus tard, il sort FoxBlox. Il m'explique en gros un procédé de texture-switching couplé à des opérations bitwise (que je qualifierais de génie à l'état pur) qui permet d'afficher un nombre impressionnant de cellules sur un seul prim. Seul inconvénient de la méthode : le nombre de combinaisons de textures est exponentiel à celui des couleurs employées. C'est pourquoi les briques apparaissent grises une fois figée.

Alors non seulement DanielFox est un scripteur extraordinaire, mais en plus c'est un gentleman très fair play : il m'a envoyé un exemplaire de FoxBlot !

Merci DanielFox, c'est typiquement ce genre de rencontre qui me font apprécier SL !

Jet de dé (pauvre Newton)

L'esprit inventif des frères Linden ne connait pas de limites. Déja, les prims transparents sur un seul côté, c'était pas mal.

Mais le moteur de physique, bonjour... Jugez-vous même : ce gros dé a tout de même trouvé le moyen de retomber en équilibre sur une arête :

de.png

Et ce, devant témoins. Vous entendez ce bruit ? C'est Newton qui se retourne dans sa tombe.

Script pour faire bondir un dé

Un simple prim cube suffira, si vous n'avez pas de dé. Faites-le de taille X=.5, Y=.5,. Z=5.

Quand on touche le dé, ce script le fait bondir en l'air, puis le laisse retomber après l'avoir fait tourner.

Si plusieurs dés sont présent et portent le même nom, ils sauteront également !

// Ce script fait sauter un dé en l'air, et le fait tourner quand on le touche
// Si plusieurs dés sont dans un rayon de 10 mètres et portent le même nom, ils sauteront en même temps.

// max de la force appliquée pour faire tourner le dé
float gMaxRotForce = .2;

// Déviation latérale max de la force appliquée pour faire sauter le dé
float gMaxLateralForce = 1;
float gMaxUpForce = 6;
float gMinUpForce = 3;

// Canal de communication et signal envoyé aux autres dés dans les parages
integer gChannel = -41354;
string  gSignal = "JUMP!";

Hop()
{
    llSetStatus(STATUS_PHYSICS, TRUE);

    // Calcule une poussée rotative aléatoire
    float Rx = llFrand(gMaxRotForce);
    float Ry = llFrand(gMaxRotForce);
    float Rz = llFrand(gMaxRotForce);
   
    // Calcule une force aléatoire qui poussera le dé vers le haut
    float Px = llFrand(gMaxLateralForce);
    float Py = llFrand(gMaxLateralForce);
    float Pz = (llFrand(gMinUpForce) + gMaxUpForce - gMinUpForce) * llGetMass();

    llApplyImpulse(<Px, Py, Pz>, FALSE);
    llApplyRotationalImpulse(<Rx, Ry, Rz> * llGetMass(), TRUE);
}

default
{
    state_entry()
    {
        llSetStatus(STATUS_BLOCK_GRAB, TRUE);
        llSetStatus(STATUS_PHYSICS, TRUE);
        llListen(gChannel, llGetObjectName(), NULL_KEY, gSignal);
    }

    touch_start(integer count)
    {
        Hop();
        llSay(gChannel, gSignal);
    }
   
    listen(integer channel, string name, key id, string message)
    {
        Hop();
    }
}
  • Si le dé ne saute pas, vérifiez si par hasard s'il ne chevauche pas un autre objet, ou s'il n'est pas enfoncé dans le sol : sortez-le de là, puis touchez-le à nouveau ou réinitialisez le script.
  • Pour créer des groupes de dés, donnez-leur des noms différents.

Si vous voulez un vrai dé beau comme tout avec des coins arrondis, vous le trouverez ici pour une misère, tout modifiable et copiable à volonté avec le code source disponible.

Navire en construction

Snapshot_034.png

Bonne discussion avec le constructeur de ce beau navire pris en photo avant qu'il ne reçoive des textures.