name: Black
card_text: When this card is activated: You can add 1 "Rose Dragon" monster from your Deck or GY to your hand. Face-up monsters on the field become Plant monsters. If this card is destroyed: Inflict 100 damage to your opponent for each Plant monster in your GY and banishment, then if this card was destroyed by the effect of "Black Rose Dragon", inflict 2400 damage to your opponent. You can only use this effect of "Black Rose Garden" once per turn. You can only activate 1 "Black Rose Garden" per turn.
external_ids: local CARD_ID_0 = 73580471 --Black Rose Dragon
  local SETCARD_ID_0 = 0x1123 --Rose
  
lua: local CARD_ID_0 = 73580471 --Black Rose Dragon
  local SETCARD_ID_0 = 0x1123 --Rose
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH + CATEGORY_GRAVE_ACTION)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	--race
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_CHANGE_RACE)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetTargetRange(LOCATION_MZONE, LOCATION_MZONE)
  	e2:SetValue(RACE_PLANT)
  	c:RegisterEffect(e2)
  	--damage
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 1))
  	e3:SetCategory(CATEGORY_DAMAGE)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_F)
  	e3:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e3:SetCode(EVENT_CUSTOM + id)
  	e3:SetRange(LOCATION_GRAVE + LOCATION_REMOVED)
  	e3:SetCountLimit(1, id)
  	e3:SetCondition(s.damcon)
  	e3:SetTarget(s.damtg)
  	e3:SetOperation(s.damop)
  	c:RegisterEffect(e3)
  	if not s.global_check then
  		s.global_check = true
  		local ge1 = Effect.CreateEffect(c)
  		ge1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge1:SetCode(EVENT_DESTROYED)
  		ge1:SetOperation(s.checkop)
  		Duel.RegisterEffect(ge1, 0)
  	end
  end
  function s.checkop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.RaiseEvent(eg, EVENT_CUSTOM + id, re, r, rp, ep, ev)
  end
  function s.thfilter(c)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER) and c:IsAbleToHand()
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(aux.NecroValleyFilter(s.thfilter), tp, LOCATION_DECK + LOCATION_GRAVE, 0, nil)
  	if g:GetCount() > 0 and Duel.SelectYesNo(tp, aux.Stringid(id, 0)) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  		local sg = g:Select(tp, 1, 1, nil)
  		Duel.SendtoHand(sg, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, sg)
  	end
  end
  function s.cfilter(c)
  	return c:IsFaceupEx() and c:IsRace(RACE_PLANT)
  end
  function s.damcon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not eg:IsContains(c) then
  		return false
  	end
  	if not re or not re:IsActivated() then
  		e:SetLabel(0)
  		return true
  	end
  	local rc = re:GetHandler()
  	if not rc then
  		e:SetLabel(0)
  		return true
  	end
  	if c:IsReason(REASON_EFFECT) and (eg:IsContains(re:GetHandler()) and rc:GetPreviousCodeOnField() == CARD_ID_0 or not eg:IsContains(re:GetHandler()) and rc:IsCode(CARD_ID_0)) then
  		e:SetLabel(1)
  	else
  		e:SetLabel(0)
  	end
  	return true
  end
  function s.damtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local dam = Duel.GetMatchingGroupCount(s.cfilter, tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, nil) * 100
  	if dam > 0 then
  		if e:GetLabel() == 1 then
  			dam = dam + 2400
  		end
  		Duel.SetTargetPlayer(1 - tp)
  		Duel.SetTargetParam(dam)
  		Duel.SetOperationInfo(0, CATEGORY_DAMAGE, nil, 0, 1 - tp, dam)
  	end
  end
  function s.damop(e, tp, eg, ep, ev, re, r, rp)
  	local p = Duel.GetChainInfo(0, CHAININFO_TARGET_PLAYER)
  	local dam = Duel.GetMatchingGroupCount(s.cfilter, tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, nil) * 100
  	if dam > 0 then
  		local val = Duel.Damage(p, dam, REASON_EFFECT)
  		if val > 0 and Duel.GetLP(p) > 0 and e:GetLabel() == 1 then
  			Duel.BreakEffect()
  			Duel.Damage(p, 2400, REASON_EFFECT)
  		end
  	end
  end
  
  
source_text: Black
  When this card is activated: You can add 1 "Rose Dragon" monster from your Deck or GY to your hand. Face-up monsters on the field become Plant monsters. If this card is destroyed: Inflict 100 damage to your opponent for each Plant monster in your GY and banishment, then if this card was destroyed by the effect of "Black Rose Dragon", inflict 2400 damage to your opponent. You can only use this effect of "Black Rose Garden" once per turn. You can only activate 1 "Black Rose Garden" per turn.
target_text: -- Black
  local CARD_ID_0 = 73580471 --Black Rose Dragon
  local SETCARD_ID_0 = 0x1123 --Rose
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH + CATEGORY_GRAVE_ACTION)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	--race
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_CHANGE_RACE)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetTargetRange(LOCATION_MZONE, LOCATION_MZONE)
  	e2:SetValue(RACE_PLANT)
  	c:RegisterEffect(e2)
  	--damage
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 1))
  	e3:SetCategory(CATEGORY_DAMAGE)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_F)
  	e3:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e3:SetCode(EVENT_CUSTOM + id)
  	e3:SetRange(LOCATION_GRAVE + LOCATION_REMOVED)
  	e3:SetCountLimit(1, id)
  	e3:SetCondition(s.damcon)
  	e3:SetTarget(s.damtg)
  	e3:SetOperation(s.damop)
  	c:RegisterEffect(e3)
  	if not s.global_check then
  		s.global_check = true
  		local ge1 = Effect.CreateEffect(c)
  		ge1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge1:SetCode(EVENT_DESTROYED)
  		ge1:SetOperation(s.checkop)
  		Duel.RegisterEffect(ge1, 0)
  	end
  end
  function s.checkop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.RaiseEvent(eg, EVENT_CUSTOM + id, re, r, rp, ep, ev)
  end
  function s.thfilter(c)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER) and c:IsAbleToHand()
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(aux.NecroValleyFilter(s.thfilter), tp, LOCATION_DECK + LOCATION_GRAVE, 0, nil)
  	if g:GetCount() > 0 and Duel.SelectYesNo(tp, aux.Stringid(id, 0)) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  		local sg = g:Select(tp, 1, 1, nil)
  		Duel.SendtoHand(sg, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, sg)
  	end
  end
  function s.cfilter(c)
  	return c:IsFaceupEx() and c:IsRace(RACE_PLANT)
  end
  function s.damcon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not eg:IsContains(c) then
  		return false
  	end
  	if not re or not re:IsActivated() then
  		e:SetLabel(0)
  		return true
  	end
  	local rc = re:GetHandler()
  	if not rc then
  		e:SetLabel(0)
  		return true
  	end
  	if c:IsReason(REASON_EFFECT) and (eg:IsContains(re:GetHandler()) and rc:GetPreviousCodeOnField() == CARD_ID_0 or not eg:IsContains(re:GetHandler()) and rc:IsCode(CARD_ID_0)) then
  		e:SetLabel(1)
  	else
  		e:SetLabel(0)
  	end
  	return true
  end
  function s.damtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local dam = Duel.GetMatchingGroupCount(s.cfilter, tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, nil) * 100
  	if dam > 0 then
  		if e:GetLabel() == 1 then
  			dam = dam + 2400
  		end
  		Duel.SetTargetPlayer(1 - tp)
  		Duel.SetTargetParam(dam)
  		Duel.SetOperationInfo(0, CATEGORY_DAMAGE, nil, 0, 1 - tp, dam)
  	end
  end
  function s.damop(e, tp, eg, ep, ev, re, r, rp)
  	local p = Duel.GetChainInfo(0, CHAININFO_TARGET_PLAYER)
  	local dam = Duel.GetMatchingGroupCount(s.cfilter, tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, nil) * 100
  	if dam > 0 then
  		local val = Duel.Damage(p, dam, REASON_EFFECT)
  		if val > 0 and Duel.GetLP(p) > 0 and e:GetLabel() == 1 then
  			Duel.BreakEffect()
  			Duel.Damage(p, 2400, REASON_EFFECT)
  		end
  	end
  end
  
  