Génération d'Eden

De Binding of Isaac: Rebirth Wiki
Aller à : navigation, rechercher

Ceci est une analyse de la manière dont le jeu génère aléatoirement les différentes caractéristiques d'Eden. Noter que cette analyse fut réalisée par BLouBLue sur la version 1.05 (pré-Afterbirth). Ainsi, elle peut maintenant être obsolète.

Lancement[modifier | modifier le wikicode]

Quand le jeu est lancé, la principale chose à savoir est que celui-ci dérive un tas de sub-graines qui sont utilisées par les instances RNG dédiées aux objets, babioles, consommables, monstres, générations des étages et à la gestion des personnages.

Cela permet de jouer une partie légèrement différemment, tout en ayant les mêmes objets aux mêmes endroits (pour la plupart, ce n'est pas tout à fait vrai).

Une sub-graine de "personnage" spécifique est utilisée pour la génération d'Eden. Cette instance RNG est utilisée durant deux phases:

  1. La génération des cœurs, des consommables et attributs, avant l'initialisation du niveau;
  2. Le choix aléatoire des cartes, des pilules, des babioles et des objets, après l'initialisation du niveau.

Il est remis à la sub-graine du personnage avant chaque phase. Cela signifie que les mêmes nombres aléatoires peuvent sortir du RNG dans le même ordre pour les deux phases.

Cœurs[modifier | modifier le wikicode]

Les cœurs sont la première chose à être générée. Le jeu essaye de son mieux de donner 3 cœurs entiers, cœurs rouges et cœurs d'âme confondus:

  1. Le jeu choisit aléatoirement x = 0 à 3 cœurs rouges;
  2. Il choisit aléatoirement entre 0 et (3 - x) cœurs d'âme;
  3. Si aucun cœur rouge n'est choisit la première fois, le jeu garantit au joueur au moins 2 cœurs d'âme.

Il ne peut y avoir aucun cœur noir lors de cette phase. Les objets donnés par la suite peuvent excéder ces limites.

Clés, bombes et pièces[modifier | modifier le wikicode]

Eden a 1/3 chance de commencer avec soit des clés, soit des bombes, soit des pièces. Si cette chance a été accordée, voici les sorties possibles:

  1. Eden commence avec 1 clé;
  2. Eden commence avec 1 ou 2 bombes;
  3. Eden commence avec 1 à 5 pièces.

Les objets données par la suite peuvent octroyer des consommables supplémentaires, amenant le total au-dessus de ces limites.

La chance de commencer avec un consommable est calculée comme suit:

// rand(min,max) renvoie un integer aléatoire entre min (inclus) et max (exclus)
if( (rand(0,3) > 0) && (rand(0,2) > 0) ) 
{ // 2/3 chance * 1/2 chance = 1/3 chance totale
    /* le joueur obtient un consommable */
    tmp = rand(0, 3); // soit 0, 1 ou 2
    if(tmp == 1)
        donne 1 clé
    else if(tmp == 2)
        donne 1 + rand(0,2) bombes
    else
        donne 1 + rand(0,5) pièces
}

Attributs[modifier | modifier le wikicode]

Attributes are based off Isaac's base attributes. An additive modifier (float value) is randomly chosen for each of the 6 attributes:

Attribut Écart de modification d'Eden
dégâts -1.00 à +1.00
vitesse -0.15 à +0.15
cadence de tir -0.75 à +0.75
hauteur des larmes -5.00 à +5.00
vitesse des larmes -0.25 à +0.25
chance -1.00 à +1.00

Voici à quoi ressemble la partie d'initialisation des attributs:

// personnageRng.Random() renvoie une valeur float entre 0.0 et 1.0
Joueur->modificateurAttributDégâts         = (personnageRng.Random() * 2.0f) + -1.0f;
Joueur->modificateurAttributVitesse        = (personnageRng.Random() * 0.3f) + -0.15f;
Joueur->modificateurAttributCadenceTir     = (personnageRng.Random() * 1.5f) + -0.75f;
Joueur->modificateurAttributPortee         = (personnageRng.Random() * 10.0f) + -5.0f;
Joueur->modificateurAttributVitesseLarmes  = (personnageRng.Random() * 0.5f) + -0.25f;
Joueur->modificateurAttributChance         = (personnageRng.Random() * 2.0f) + -1.0f;

Objets[modifier | modifier le wikicode]

Les pilules, cartes, babioles et objets sont choisis après la génération du niveau. Deux phases se déroulent:

  1. Donne au joueur une chance d'avoir soit une pilule, soit une carte, soit une babiole;
  2. Tente de choisir 1 objet activable et 1 objet passif.

Alors, lors de la consommation d'une marque d'Eden, il y a:

  • 1/3 chance d'obtenir une babiole;
  • 1/6 chance d'obtenir une pilule;
  • 1/6 chance d'obtenir une carte;
  • 1/3 chance de ne rien obtenir.

Ces options sont mutuellement exclusives. On ne peut obtenir une babiole et une carte ou pilule. Voici à quoi ressemble la routine réelle:

if(personnageRng.Random(3) > 0) { // 2/3 chance d'obtenir une pilule, une carte ou rien
    if(personnageRng.Random(2) > 0) { // 2/3 * 1/2 chance de ne rien obtenir
        ne donne rien
    }
    else { // 2/3 * 1/2 chance d'obtenir une pilule ou une carte
        if(characterRng.Random(2) > 0) { // 1/3 * 1/2 chance de générer une pilule
            donne une pilule aléatoire
        }
        else { // 1/3 * 1/2 chance de générer une carte
            donne une carte aléatoire
        }
    }
}
else { // 1/3 chance d'obtenir une babiole
    donne une babiole aléatoire
}

En savoir plus sur la manière dont les objets de chaque type sont sélectionnés:

Voici comment est réalisée la sélection des cartes, en pseudo-code:

// estRunesPermis et estCartesSpecialesPermis sont mis sur false lors de l'initialisation d'Eden.
// Les ID des cartes peuvent être trouvés dans les fichiers xml du jeu
// rngCarte.Random(min,max) renvoie un integer aléatoire entre min (inclus) et max (exclus)
// rngCarte.Random(max) renvoie un integer aléatoire entre 0 (inclus) et max (exclus, donc max-1 est la limite supérieure)
if(rngCarte.Random(25) > 0) // 24/25 chance 
{
    if(rngCarte.Random(10) || !estRunesPermis ) 
    {
        bool tmp = (rngCarte.Random(5) != 0) || !estCartesSpecialesPermis ;
        if(tmp == false) 
        {
            carte_premiere = CARD_2_OF_CLUBS;
            carte_derniere = CARD_JOKER;
        }
        else
        {
            carte_premiere = CARD_0_THE_FOOL;
            carte_derniere = CARD_XXI_THE_WORLD;
        }
    }
    else
    {
        carte_premiere = RUNE_DESTRUCTION_HAGALAZ;
        carte_derniere = RUNE_RESISTANCE_ALGIZ;
    }
}
else 
{
    carte_premiere = CARD_CHAOS_CARD;
    carte_derniere = CARD_SUICIDE_KING;
}

return rngCarte.Random(carte_premiere , carte_derniere + 1);

Objets[modifier | modifier le wikicode]

Le jeu tente 101 fois de remplir l'emplacement d'objet activable et celui d'objet passif. À chaque essai, il choisit aléatoirement un ID d'objet entre 1 et 346.

Il y a quelques ID d'objets désactivés qui demandent au jeu de re-choisir un nouvel ID et de passer à la prochaine tentative:

  • #43: "Pills here!", un objet activable ne faisant rien et ressemblant à une pilule.
  • #59: "Tarot Card", un objet passif ressemblant à une carte et ne faisant rien.
  • #61: Littéralement rien, et n'est pas défini dans items.xml.
  • #235: Non disponible
  • #238: Key Piece 1
  • #239: Key Piece 2
  • #263: Non disponible

Le premier candidat valide (objet débloqué) pour l'emplacement actif ou passif est sélectionné, et ne peut pas être écrasé par les tentatives ultérieures (il y a 101 tentatives peu importe le résultat).

Ces objets sont donnés au joueur après les 101 tentatives, que les deux emplacements aient été remplis ou non.

Par conséquent, Eden peut commencer pour le mieux avec 1 objet activable et 1 objet passif. Il est hautement improbable qu'une graine existante puisse donner à Eden seulement 1 ou aucun objet.

Comme rien ne pèse certains objets spécifiquement, chaque combo d'objets a probablement environ 0.005% de chance d'être obtenu. Matériel de test: 1000 graines avec Eden.


SmallIsaac.png The Binding of Isaac: Rebirth SmallIsaac.png

MainPageAttributes.png Attributs MainPageBosses.png Boss TarotCard.png Cartes et Runes MainPageChapters.png Chapitres Red heart.png Consommables MainPageBabies.png Co-op
MainPageChallenges.png Challenges MainPageObjects.png Éléments interactifs Isaac's Tears Icon.png Item pools MainPageMonsters.png Monstres Magic Mushroom Icon.png Objets Isaac App.png Personnages
BlueBlue.png Pilules MainPageRooms.png Salles MainPageSeeds2.png Graines MainPageAchievements.png Succès Guppy App.png Transformations The Left Hand Icon.png Babioles