Binding of Isaac: Rebirth Wiki
Advertisement

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 Curse of the Labyrinth Fléau du Labyrinthe rend l'étage beaucoup plus grand.

  • Si l'étage n'est pas un XL ou Ajouté dans Afterbirth †Stage The Void icon 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.
    • Ajouté dans Repentance 1 impasse est ajoutée si Isaac a Tête Réduite Tête Réduite.

Ensuite, les salles spéciales sont générées dans les impasses.

Les salles spéciales sont générées dans l'ordre suivant:

  • Salle du Boss Salle du Boss (garantie).
    • Si l'étage est un XL, deux salles du boss seront générées côte-à-côte.
    • Ajouté dans Afterbirth † Plusieurs salles du boss sont générées dans Stage The Void icon Néant.
  • Salle Super Secrète Salle Super Secrète (garantie).
    • Ajouté dans Repentance Deux salles super secrètes sont générées si Isaac a Luna Luna.
  • Boutique Boutique (garantie pour les 3 premiers Chapitres).
  • Salle du Trésor Salle du Trésor (garantie pour les 3 premiers Chapitres).
  • Ajouté dans Repentance Planétarium 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é Salle de Dé ou Salle de Sacrifice 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 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 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 Antre du Diable cette partie).
    • Ajouté dans Repentance Une salle maudite additionnelle est générée à chaque étage si Isaac a Tête Réduite Tête Réduite. Une impasse supplémentaire est aussi générée pour pouvoir la placer.
  • Salle du Mini-Boss 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 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 Salle de Défi Royale dans le deuxième étage du chapitre et une salle de Défi normale autrement.
  • Coffre-Fort Coffre-Fort ou Salle d'Arcade 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.
    • Ajouté dans Repentance 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 Chambre Propre ou Chambre Sale 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 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 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.
    • Ajouté dans Afterbirth † Une salle secrète additionnelle sera générée si Isaac a Carte Scindée Carte Scindée.
    • Ajouté dans Repentance Une salle secrète additionnelle sera générée si Isaac a Luna Luna, 3 s'il a aussi la Carte Scindée.
  • Ajouté dans Repentance Salle Ultra Secrète Salle Ultra Secrète (garantie).
  • Ajouté dans Afterbirth † 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: Retiré dans Repentance 5 seulement / Ajouté dans Repentance 1-10 (1 et 10 sont plus rares)
      • 2ème étage du chapitre en mode difficile: Retiré dans Afterbirth † 10 / Ajouté dans Afterbirth † / Retiré dans Repentance 10-15 / Ajouté dans Repentance 5-15 (5 est plus rare)
      • Les étages XL comptent comme Retiré dans Repentance le 1er étage du chapitre / Ajouté dans Repentance les deux
      • Les chapitres 5 et 6 comptent comme Retiré dans Repentance le 1er étage du chapitre / Ajouté dans Repentance le 2ème
      • Néant en mode normal: 5-10 (Ajouté dans Repentance et 20)
      • Néant en mode difficile: 5-15 / Ajouté dans Repentance 5-20

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.


Advertisement