La génération d'étage est le processus que le jeu utilise pour créer chaque étage. Chaque étage a ses propres exigences de taille, du nombre de salles spéciales et du nombre d'impasses qu'il faut.
Processus[ | ]
Premièrement, le jeu détermine combien de salles vont être générées dans l'étage. Les derniers étages ont plus de salles et Fléau du Labyrinthe rend l'étage beaucoup plus grand.
- Si l'étage n'est pas un XL ou Néant:
- NombreDeSalles = 3.33 × ProfondeurÉtage + 5-6 (maximum de 20)
- Si l'étage est un XL:
- NombreDeSalles = 1.8 × (3.33 × ProfondeurÉtage + 5-6) (maximum de 45)
- Si l'étage est le Néant:
- NombreDeSalles = 50-59
- 2-3 salles en plus sont ajoutées si le joueur joue en mode difficile
- 4 salles en plus sont ajoutées si l'étage a Fléau de L'Égaré.
Puis le nombre minimum d'impasses que l'étage doit générer.
- Tous les étages doivent avoir au moins 5 impasses:
- 1 impasse est ajoutée à tous les étages sauf le premier.
- 1 impasse est ajoutée aux étages XL.
- 2 impasses sont ajoutées au Néant.
- 1 impasse est ajoutée si Isaac a Tête Réduite.
Ensuite, les salles spéciales sont générées dans les impasses.
- Les salles spéciales sont placées dans l'ordre depuis l'impasse la plus loin de la salle de départ à la plus proche.
- Si toutes les impasses dans un étage sont occupées par des salles spéciales, plus aucune salle spéciale ne peut être générée.
- Coffre, Chambre Noire et Néant génèrent seulement des salles du boss et des salles secrètes/ salles super secrètes (et un Cimetière dans la Chambre Noire).
Les salles spéciales sont générées dans l'ordre suivant:
- Salle du Boss (garantie).
- Si l'étage est un XL, deux salles du boss seront générées côte-à-côte.
- Plusieurs salles du boss sont générées dans Néant.
- Salle Super Secrète (garantie).
- Deux salles super secrètes sont générées si Isaac a Luna.
- Boutique (garantie pour les 3 premiers Chapitres).
- Aussi garantie dans le Chapitre 4 si Isaac a Pièce d'Argent.
- Aussi garantie dans le Chapitre 5 si Isaac a Couronne Sacrée ou Couronne Impure).
- Ne sera pas générée dans les troisième Tour d'Honneur et plus.
- Salle du Trésor (garantie pour les 3 premiers Chapitres).
- Aussi garantie dans le Chapitre 4 si Isaac a Couronne Sanglante.
- Aussi garantie dans le Chapitre 5 si Isaac a Couronne Sacrée ou Couronne Impure).
- Si l'étage est un XL, deux salles du Trésor seront générées.
- Planétarium (1% de chance de base d'être généré dans les 3 premiers chapitres mais ne sera pas généré au-delà. Éviter de rentrer dans les salles du Trésor et obtenir certains objets et babioles peuvent augmenter cette chance).
- Salle de Dé ou Salle de Sacrifice (1 chance sur 7 (~14%) de base, plus 1 chance sur 4 indépendante pour un total de 5 chances sur 14 (~36%) si la vie totale d'Isaac est égale ou plus grande que son nombre de réceptacles de cœur).
- Si une salle de Sacrifice est générée, elle a 1 chance sur 50 de base de devenir une salle de Dé, plus 1 chance sur 5 indépendante pour un total de 27 chances sur 125 (~22%) si Isaac a 2 clés ou plus.
- Bibliothèque (1 chance sur 20).
- Le code regarde une variable spécifique qui est supposée augmenter les chances de génération de Bibliothèque si un livre a été touché mais cette variable n'est jamais définie.
- Salle Maudite (1 chance sur 2, plus 1 chance sur 4 indépendante pour un total de 5 chances sur 8 (~63%) si Isaac est entré dans un Antre du Diable cette partie).
- Une salle maudite additionnelle est générée à chaque étage si Isaac a Tête Réduite. Une impasse supplémentaire est aussi générée pour pouvoir la placer.
- Salle du Mini-Boss (1 chance sur 4, plus 1 chance sur 3 indépendante pour un total d'une chance sur 2 (50%) si c'est le premier étage).
- Salle de Défi (garantie si la vie totale d'Isaac est égale ou plus grande que son nombre de réceptacles de cœur. Ne sera pas générée autrement).
- Ne sera pas généré dans le premier étage et a 50% de chance dans le deuxième étage.
- Sera toujours une Salle de Défi Royale dans le deuxième étage du chapitre et une salle de Défi normale autrement.
- Coffre-Fort ou Salle d'Arcade (garantie si Isaac a 5 pièces ou plus et que c'est le deuxième étage du chapitre. Ne sera pas générée autrement).
- Si une salle d'Arcade est générée, elle a 1 chance sur 10 d'être un Coffre-Fort à la place, plus 1 chance sur 3 indépendante pour un total de 2 chances sur 5 (40%) si Isaac a 2 clés ou plus.
- Si Isaac a 2 clés ou plus mais moins de 5 pièces, un Coffre-Fort sera généré à la place. Si Isaac a 5 pièces ou plus mais moins de 2 clés et et si la chance sur 10 de devenir un Coffre-Fort passe, ni salle d'Arcade ni Coffre-Fort ne seront générés.
- Chambre Propre ou Chambre Sale (1 chance sur 50, plus 1 chance sur 5 indépendante pour un total de 27/125 (~22%) si Isaac a un demi-cœur rouge ou moins et pas de cœur d'âme ou 1 cœur d'âme ou moins et aucun cœur rouge/d'os).
- Les chances d'avoir une chambre propre ou sale sont égales.
- Seront uniquement générées dans les 3 premiers Chapitres.
- Salle Secrète (garantie).
- Chaque position potentielle a un poids de départ entre 10 et 14, réduit de 3 si elle n'a que 2 salles avoisinantes et réduit de 6 si elle n'a qu'une salle avoisinante. La position avec le plus de poids sera choisie.
- En pratique, cela veut dire qu'une salle secrète sera extrêmement susceptible d'avoir au moins 2 salles adjacentes, à moins que ce soit le premier étage, où occasionnellement une sera placée dans une impasse à cause du manque de position pour la placer.
- Ne sera jamais placée à côté d'une salle du boss, salle super secrète, une autre salle secrète ou la salle de départ si l'étage est le Coffre ou la Chambre Noire.
- Une salle secrète additionnelle sera générée si Isaac a Carte Scindée.
- Une salle secrète additionnelle sera générée si Isaac a Luna, 3 s'il a aussi la Carte Scindée.
- Chaque position potentielle a un poids de départ entre 10 et 14, réduit de 3 si elle n'a que 2 salles avoisinantes et réduit de 6 si elle n'a qu'une salle avoisinante. La position avec le plus de poids sera choisie.
- Salle Ultra Secrète (garantie).
- Un cimetière sera placé si l'étage est la Chambre Noire.
- Puis enfin, les salles normales sont choisies.
- Chaque salle a un niveau de difficulté, qui est choisi selon l'étage actuel du chapitre et si le joueur joue en mode difficile ou pas.
- 1er étage du chapitre en mode normal: 1-5
- 2ème étage du chapitre en mode normal: 5-10
- 1er étage du chapitre en mode difficile: 5 seulement / 1-10 (1 et 10 sont plus rares)
- 2ème étage du chapitre en mode difficile: 10 / 10-15 / 5-15 (5 est plus rare)
- Les étages XL comptent comme le 1er étage du chapitre / les deux
- Les chapitres 5 et 6 comptent comme le 1er étage du chapitre / le 2ème
- Néant en mode normal: 5-10 ( et 20)
- Néant en mode difficile: 5-15 / 5-20
- Chaque salle a un niveau de difficulté, qui est choisi selon l'étage actuel du chapitre et si le joueur joue en mode difficile ou pas.
Pseudo-Code[ | ]
Certaines parties de la génération d'étage sont basées sur le pseudo-code suivant:
--Pseudo lua code pour le nombre de salles d'un étage. NumberOfRooms = Min(20, Rand(0, 1) + 5 + Floor(StageId * 10 / 3)) if CurseOfTheLabyrinth then NumberOfRooms = Min(45, Floor(NumberOfRooms * 1.8)) elseif CurseOfTheLost then NumberOfRooms += 4 end if StageId == 12 then --The Void NumberOfRooms = 50 + (Rand() % 10) end if IsHardDifficulty then NumberOfRooms += 2 + Rand(0, 1) end --Pseudo lua code pour le nombre d'impasses qu'un étage doit avoir. MinDeadEnds = 5 if StageId ~= 1 then MinDeadEnds += 1 end if CurseOfTheLabyrinth then MinDeadEnds += 1 end if StageId == 12 then MinDeadEnds += 2 end --Les impasses sont triées par la distance depuis la salle de départ. --Par exemple, la salle de boss dans l'impasse la plus loin, la super secrète est placée dans la prochaine impasse la plus loin. --DequeueDeadend redimensionne l'impasse. C'est important de le noter car cela veut dire que la plupart des impasses sont changées en une salle 1x1 à la fin. PlaceRoom(ROOM_BOSS, DequeueDeadend()) --Super Secret PlaceRoom(ROOM_SUPERSECRET, DequeueDeadend()) --Shop if StageId < 7 or (StageId < 9 and HasTrinket(SilverDollar)) and VictoryLap < 3 then PlaceRoom(ROOM_SHOP, DequeueDeadend()) end --Treasure if StageId < 7 or (StageId < 9 and HasTrinket(BloodyCrown)) then PlaceRoom(ROOM_TREASURE, DequeueDeadend()) end --Dice and Sacrifice if StageId < 12 then local deadend = DequeueDeadend() --resizes the room :( if deadend ~= nil then local roomType = nil if Rng() % 50 == 0 or (Rng() % 5 == 0 and GetNumKeys() > 1) then roomType = ROOM_DICE else roomType = ROOM_SACRIFICE end if Rng() % 7 == 0 or (Rng() & 3 == 0 and GetHearts() + GetSoulHearts() >= GetMaxHearts()) then PlaceRoom(roomType) else QueueDeadend(deadend) end end end --Bibliothèque local deadend = DequeueDeadend() if deadend ~= nil then if Rng() % 20 == 0 or (Rng() & 3 == 0 and GetStateFlag(STATE_BOOK_PICKED_UP)) then PlaceRoom(ROOM_LIBRARY, deadend) else QueueDeadend(deadend) end end --Salle Maudite local deadend = DequeueDeadend() if deadend ~= nil then if Rng() & 1 == 0 or (Rng() & 3 == 0 and GetStateFlag(STATE_DEVILROOM_VISITED)) then PlaceRoom(ROOM_CURSE, deadend) else QueueDeadend(deadend) end end --Mini-Boss local boss = GetMiniBossRoom() --mini boss is picked based on floor, STATE_ULTRAPRIDE_SPAWNED and rng local deadend = DequeueDeadend() if deadend ~= nil then if Rng() & 3 == 0 or (Rng() & 2 == 0 and StageId == 1) then PlaceRoom(boss, deadend) else QueueDeadend(deadend) end end --Salle de Défi local deadend = DequeueDeadend() if deadend ~= nil then if (Rng() & 1 == 0 or StageId > 2) and GetHearts() + GetSoulHearts() >= GetMaxHearts() and StageId > 1 then PlaceRoom(boss, deadend) else QueueDeadend(deadend) end end --Coffre-Fort et Arcade local deadend = DequeueDeadend() if deadend ~= nil then local roomType = nil if Rng() % 10 == 0 or (Rng() % 3 == 0 and GetNumKeys() > 1) then roomType = ROOM_CHEST else roomType = ROOM_ARCADE end if GetNumCoins() >= 5 and (StageId == 2 or StageId == 4 or StageId == 6 or StageId == 8) then PlaceRoom(roomType) else QueueDeadend(deadend) end end --Chambre if StageId < 7 then local deadend = DequeueDeadend() if deadend ~= nil then local roomType = nil if Rng() & 1 == 0 then roomType = ROOM_ISAACS else roomType = ROOM_BARREN end local maxHearts = nil if GetPlayerType() == PLAYER_THELOST or GetPlayerType() == PLAYER_XXX or GetPlayerType() == PLAYER_THESOUL then maxHearts = GetMaxHearts() else maxHearts = GetMaxHearts() + GetBoneHearts() * 2 end local second = false if (GetHearts() < 2 and GetSoulHearts() <= 0) or (maxHearts <= 0 and GetSoulHearts() <= 2) then second = true end if Rng() % 50 == 0 or (Rng() % 5 == 0 and second) then PlaceRoom(roomType) else QueueDeadend(deadend) end end end --Salle Secrète TryPlacingSecret() if HasTrinket(TRINKET_FRAGMENTED_CARD) or HasItem(ITEM_LUNA) then TryPlacingSecret() end --Cimetière if StageId == 11 and StageType == 0 then --Dark Room PlaceGrave(DequeueDeadend()) end
Notes[ | ]
Ce code vient du dépôt GitHub de Blade. (Blade est aussi connu sous le nom de blcd / Will.) Il a fait de l'ingénierie inverse sur le jeu utilisant un désassembleur pour créer ce pseudo-code.
The Binding of Isaac: Rebirth |
---|
Succès
Défis
Marques de Complétion
Objets
Babioles
Personnages Collection • Banque d'Objets • Historique des versions • Modding • Musique |