Binding of Isaac: Rebirth Wiki
Advertisement

Quand tous les monstres d'une salle sont éliminés, le jeu a une chance de donner comme récompense une ressource ou une babiole. De nombreux facteurs influencent ces récompenses, comme la Chance Chance et certains effets d'objets.

Processus[ | ]

Premièrement, le jeu génère un nombre aléatoire utilisant la formule suivante:

(nombreAléatoire * Chance * 0.1) + ressourcePourcentage

  • nombreAléatoire et ressourcePourcentage sont des nombres aléatoires compris entre 0 et 1.
  • Chance est maintenu à 0 si la chance d'Isaac est inférieure à 0 et 10 si supérieure à 10
  • Cette chance est modifiée par les objets/babioles suivants:
    • Pied Chanceux Pied Chanceux multiplie ressourcePourcentage par 0.9, puis ajoute 0.1.
    • Orteil Porte-Bonheur Orteil Porte-Bonheur multiplie la valeur finale par 0.9, puis ajoute 0.1. (Mais si Isaac a aussi Pied Chanceux et sa chance est supérieure à 0, la valeur est à la place multipliée par 0.98, plus 0.02, avec le bonus de Pied Chanceux s'appliquant toujours.)

Ce nombre est ensuite utilisé pour déterminer la récompense donnée après avoir terminé une salle, utilisant l'index suivant:

  • Rien (< 0.22, 22% de chance de base)
  • Une carte de tarot, Pilule pilule ou une babiole (0.22 - 0.3, 8% de chance de base)
    • Les 3 possibilités ont des chances égales d'être choisies, leur donnant 2.66% de chance de base chacune.
  • Une Pièce pièce (0.3 - 0.45, 15% de chance de base)
    • L'intervalle augmente à 0.3 - 0.5 (20% de chance de base) si Isaac a Ajouté dans AfterbirthCôte d'Avarice Côte d'Avarice.
  • Un Cœur cœur (0.45 - 0.6, 15% de chance de base)
    • L'intervalle diminue à 0.5 - 0.6 (10% de chance de base) si Isaac a Ajouté dans AfterbirthCôte d'Avarice Côte d'Avarice.
    • Si Isaac a Queue de Diablotin Queue de Diablotin, le cœur a 80% de chance d'être remplacé par une clé.
  • Une Clé clé (0.6 - 0.8, 20% de chance de base)
  • Une Bombe bombe (0.8 - 0.95, 15% de chance de base)
  • Un Coffre coffre (> 0.95, 5% de chance de base)
    • Si Isaac a une chance positive, la chance d'avoir un coffre augmente et toutes les autres chances diminuent.
      • Pied Chanceux/Orteil Porte-Bonheur diminuent la chance de ne rien avoir mais n'augmentent pas eux-mêmes la chance de faire apparaître des coffres.


La récompense a ensuite une chance d'être remplacée/modifiée par les ressources suivantes, dans l'ordre:

  • Une Pile pile (5% de chance de base, plus 6.67% de chance si Isaac a Ajouté dans AfterbirthPile Bouton Pile Bouton)
  • Un Ajouté dans Afterbirth Sachet sachet (2% de chance, toujours en vigueur)
  • Une carte de tarot (10% de chance si Isaac a As de Pique As de Pique)
  • Une pilule (10% de chance si Isaac a Bouchon de Sécurité Bouchon de Sécurité)
  • Une bombe (10% de chance si Isaac a Allumette Allumette)
  • Un cœur (10% de chance si Isaac a Cœur d'Enfant Cœur d'Enfant ou 2% si Isaac a aussi Queue de Diablotin Queue de Diablotin)
  • Une clé (10% de chance si Isaac a Clé Rouillée Clé Rouillée)
    • Si Isaac a plusieurs copies de ces babioles, la première à s'activer est celle qui remplace la récompense de salle.
  • Une babiole (2% de chance si Isaac a Ajouté dans Afterbirth †Fondeuse Fondeuse)
  • Queue de Guppy Queue de Guppy a 33% de chance de remplacer la récompense avec un coffre (soit gris soit doré avec des chances égales) et 22% de chance de la remplacer avec rien.
  • Contrat des Profondeurs Contrat des Profondeurs fait apparaître une copie supplémentaire de la récompense mais a 33% de chance de la remplacer avec rien.
    • Chaque contrat qu'Isaac a fait apparaître une autre copie supplémentaire de la récompense et réduit la chance pour la récompense de devenir rien par 2/3.
  • Si la partie est en mode difficile, les récompenses de cœur ont Retiré dans Repentance 66%/Ajouté dans Repentance 33% de chance d'être remplacé par rien.
  • Ajouté dans Afterbirth †Routeur Cassé Routeur Cassé a 25% de chance de créer une copie supplémentaire de la récompense si c'est une clé, pièce, cœur, bombe ou sachet.

Pseudo-code[ | ]

La logique est contenu dans ce pseudo-code:

local room = Game():GetLevel():GetCurrentRoom()
local awardSeed = room.AwardSeed
local player = Game():GetPlayer(0)
local difficulty = Game().Difficulty

local rng = RNG()
rng:SetSeed(awardSeed, 35) --5, 9, 7

local pickupPercent = rng:RandomFloat()
if (player:HasCollectible(COLLECTIBLE_LUCKYFOOT)) then
	pickupPercent = (pickupPercent * 0.9) + 0.1
end

local luck = math.max(math.min(player.Luck, 10), 0) --Clamp to 0-10

--Max luck increases the pickupPercent range from 0-1 to 0-2
--That means the more luck you have, the more likely you are to get chests.
pickupPercent = rng:RandomFloat() * luck * 0.1 + pickupPercent

if (player:HasTrinket(TRINKET_LUCKY_TOE)) then
	if (player:HasCollectible(COLLECTIBLE_LUCKYFOOT) and luck > 0) then
		pickupPercent = (pickupPercent * 0.98) + 0.02
	else
		pickupPercent = (pickupPercent * 0.9) + 0.1
	end
end

local pickupAward = COLLECTIBLE_NULL
local pickupCount = 1

if (pickupPercent > 0.22) then
	if (pickupPercent < 0.3) then
		if (rng:RandomInt(3) == 0) then
			pickupAward = PICKUP_TAROTCARD
		elseif (rng:RandomInt(2) == 0) then
			pickupAward = PICKUP_TRINKET
		else
			pickupAward = PICKUP_PILL
		end
	elseif (pickupPercent < 0.45) then
		pickupAward = PICKUP_COIN
	elseif (pickupPercent < 0.5 and player:HasTrinket(TRINKET_RIB_OF_GREED)) then
		pickupAward = PICKUP_COIN
	elseif (pickupPercent < 0.6 and (not player:HasTrinket(TRINKET_DAEMONS_TAIL) or rng:RandomInt(5) == 0)) then
		pickupAward = PICKUP_HEART
	elseif (pickupPercent < 0.8) then
		pickupAward = PICKUP_KEY
	elseif (pickupPercent < 0.95) then
		pickupAward = PICKUP_BOMB
	else
		pickupAward = PICKUP_CHEST
	end
	
	if (rng:RandomInt(20) == 0 or (rng:RandomInt(15) == 0 and player:HasTrinket(TRINKET_WATCH_BATTERY))) then
		pickupAward = PICKUP_LIL_BATTERY
	end
	
	if (rng:RandomInt(50) == 0) then
		pickupAward = PICKUP_GRAB_BAG
	end
	
	if (player:HasTrinket(TRINKET_ACE_SPADES) and rng:RandomInt(10) == 0) then
		pickupAward = PICKUP_TAROTCARD
	elseif (player:HasTrinket(TRINKET_SAFETY_CAP) and rng:RandomInt(10) == 0) then
		pickupAward = PICKUP_PILL
	elseif (player:HasTrinket(TRINKET_MATCH_STICK) and rng:RandomInt(10) == 0) then
		pickupAward = PICKUP_BOMB
	elseif (player:HasTrinket(TRINKET_CHILDS_HEART) and rng:RandomInt(10) == 0 and (not player:HasTrinket(TRINKET_DAEMONS_TAIL) or rng:RandomInt(5) == 0)) then
		pickupAward = PICKUP_HEART
	elseif (player:HasTrinket(TRINKET_RUSTED_KEY) and rng:RandomInt(10) == 0) then
		pickupAward = PICKUP_KEY
	end
	
		
	if (player:HasCollectible(COLLECTIBLE_SMELTER) and rng:RandomInt(50) == 0) then
		pickupAward = PICKUP_TRINKET
	end
end


if (player:HasCollectible(COLLECTIBLE_GUPPYS_TAIL)) then
	if (rng:RandomInt(3) != 0) then
		if (rng:RandomInt(3) == 0) then
			pickupAward = PICKUP_NULL
		end
	else
		if (rng:RandomInt(2) != 0) then
			pickupAward = PICKUP_LOCKEDCHEST
		else
			pickupAward = PICKUP_CHEST
		end
	end
end

if (player:HasCollectible(COLLECTIBLE_CONTRACT_FROM_BELOW) and pickupAward != PICKUP_TRINKET) then
	pickupCount = player:GetCollectibleNum(COLLECTIBLE_CONTRACT_FROM_BELOW) + 1
	--The chance of getting nothing goes down with each contract exponentially
	local nothingChance = math.pow(0.666, pickupCount - 1)
	if (nothingChance * 0.5 > rng:NextFloat()) then
		pickupCount = 0
	end
end

if (difficulty == 1 and pickupAward == PICKUP_HEART) then
	if rng:RandomInt(100) >= 35 then
		pickupAward = PICKUP_NULL
	end
end

if (player:HasCollectible(COLLECTIBLE_BROKEN_MODEM) and rng:RandomInt(4) == 0 and pickupCount >= 1 and
		(pickupAward == PICKUP_COIN or pickupAward == PICKUP_HEART or pickupAward == PICKUP_KEY or pickupAward == PICKUP_GRAB_BAG or pickupAward == PICKUP_BOMB) then
	pickupCount = pickupCount + 1
end

if (pickupCount > 0 and pickupAward != PICKUP_NULL) then
	local subType = 0
	for i=1, pickupCount do
		local ent = Game():Spawn(ENTITY_PICKUP, pickupAward, nearCenter, Vector(0, 0), 0, subtype, rng:Next())
		subType = ent.SubType
	end
end

Notes[ | ]

Ce pseudo-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 afin de créer ce pseudo-code.


Advertisement