name: Antidote
card_text: 2+ Level 3 monsters
  (Quick Effect): You can detach 1 material from this card, then target 1 monster on the field whose current ATK or DEF is different from its original value; its ATK/DEF become their original values, also if you targeted a monster on your field, it cannot be destroyed by battle or card effects this turn. Once per turn, if another monster(s) is Special Summoned to your field and this card has 3 or more materials (except during the Damage Step): You can make that monster(s) gain 900 ATK.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddXyzProcedure(c, nil, 3, 2, nil, nil, 99)
  	c:EnableReviveLimit()
  	--change atk
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_ATKCHANGE)
  	e1:SetType(EFFECT_TYPE_QUICK_O)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET + EFFECT_FLAG_DAMAGE_STEP)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCost(s.atkcost)
  	e1:SetTarget(s.atktg)
  	e1:SetOperation(s.atkop)
  	c:RegisterEffect(e1)
  	--increase atk
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_ATKCHANGE)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCode(EVENT_CUSTOM + id)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCountLimit(1)
  	e2:SetCondition(s.atkcon2)
  	e2:SetTarget(s.atktg2)
  	e2:SetOperation(s.atkop2)
  	c:RegisterEffect(e2)
  	aux.RegisterMergedDelayedEvent(c, id, EVENT_SPSUMMON_SUCCESS)
  end
  function s.atkcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():CheckRemoveOverlayCard(tp, 1, REASON_COST)
  	end
  	e:GetHandler():RemoveOverlayCard(tp, 1, 1, REASON_COST)
  end
  function s.arkfilter(c)
  	return c:IsFaceup() and (not c:IsAttack(c:GetBaseAttack()) or (not c:IsType(TYPE_LINK) and not c:IsDefense(c:GetBaseDefense())))
  end
  function s.atktg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and s.arkfilter(chkc)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.arkfilter, tp, LOCATION_MZONE, LOCATION_MZONE, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_FACEUP)
  	local g = Duel.SelectTarget(tp, s.arkfilter, tp, LOCATION_MZONE, LOCATION_MZONE, 1, 1, nil)
  	if g:GetCount() > 0 and g:GetFirst():IsControler(tp) then
  		e:SetLabel(1)
  	end
  end
  function s.atkop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if tc:IsRelateToEffect(e) and tc:IsLocation(LOCATION_MZONE) then
  		if s.arkfilter(tc) then
  			local e1 = Effect.CreateEffect(c)
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  			e1:SetCode(EFFECT_SET_ATTACK_FINAL)
  			e1:SetValue(tc:GetBaseAttack())
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  			tc:RegisterEffect(e1)
  			local e2 = Effect.CreateEffect(c)
  			e2:SetType(EFFECT_TYPE_SINGLE)
  			e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  			e2:SetCode(EFFECT_SET_DEFENSE_FINAL)
  			e2:SetValue(tc:GetBaseDefense())
  			e2:SetReset(RESET_EVENT + RESETS_STANDARD)
  			tc:RegisterEffect(e2)
  		end
  		if e:GetLabel() == 1 then
  			local e3 = Effect.CreateEffect(c)
  			e3:SetType(EFFECT_TYPE_SINGLE)
  			e3:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
  			e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  			e3:SetValue(1)
  			e3:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END)
  			tc:RegisterEffect(e3)
  			local e4 = e3:Clone()
  			e4:SetCode(EFFECT_INDESTRUCTABLE_EFFECT)
  			tc:RegisterEffect(e4)
  		end
  	end
  end
  function s.cfilter(c, tp)
  	return c:IsControler(tp)
  end
  function s.atkcon2(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.cfilter, 1, nil, tp) and not eg:IsContains(e:GetHandler())
  end
  function s.atkfilter(c, e, tp)
  	return c:IsControler(tp) and (not e or c:IsRelateToEffect(e)) and c:IsType(TYPE_MONSTER) and c:IsFaceup() and c:IsLocation(LOCATION_MZONE)
  end
  function s.atktg2(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return eg:IsExists(s.atkfilter, 1, nil, nil, tp) and e:GetHandler():GetOverlayCount() > 2
  	end
  	local g = eg:Filter(s.atkfilter, nil, nil, tp)
  	Duel.SetTargetCard(g)
  end
  function s.atkop2(e, tp, eg, ep, ev, re, r, rp)
  	local g = eg:Filter(Card.IsRelateToChain, nil)
  	for tc in aux.Next(g) do
  		if tc:IsType(TYPE_MONSTER) and tc:IsFaceup() and tc:IsLocation(LOCATION_MZONE) then
  			local e1 = Effect.CreateEffect(e:GetHandler())
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetCode(EFFECT_UPDATE_ATTACK)
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  			e1:SetValue(900)
  			tc:RegisterEffect(e1)
  		end
  	end
  end
  
  
source_text: Antidote
  2+ Level 3 monsters
  (Quick Effect): You can detach 1 material from this card, then target 1 monster on the field whose current ATK or DEF is different from its original value; its ATK/DEF become their original values, also if you targeted a monster on your field, it cannot be destroyed by battle or card effects this turn. Once per turn, if another monster(s) is Special Summoned to your field and this card has 3 or more materials (except during the Damage Step): You can make that monster(s) gain 900 ATK.
target_text: -- Antidote
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddXyzProcedure(c, nil, 3, 2, nil, nil, 99)
  	c:EnableReviveLimit()
  	--change atk
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_ATKCHANGE)
  	e1:SetType(EFFECT_TYPE_QUICK_O)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET + EFFECT_FLAG_DAMAGE_STEP)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCost(s.atkcost)
  	e1:SetTarget(s.atktg)
  	e1:SetOperation(s.atkop)
  	c:RegisterEffect(e1)
  	--increase atk
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_ATKCHANGE)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCode(EVENT_CUSTOM + id)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCountLimit(1)
  	e2:SetCondition(s.atkcon2)
  	e2:SetTarget(s.atktg2)
  	e2:SetOperation(s.atkop2)
  	c:RegisterEffect(e2)
  	aux.RegisterMergedDelayedEvent(c, id, EVENT_SPSUMMON_SUCCESS)
  end
  function s.atkcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():CheckRemoveOverlayCard(tp, 1, REASON_COST)
  	end
  	e:GetHandler():RemoveOverlayCard(tp, 1, 1, REASON_COST)
  end
  function s.arkfilter(c)
  	return c:IsFaceup() and (not c:IsAttack(c:GetBaseAttack()) or (not c:IsType(TYPE_LINK) and not c:IsDefense(c:GetBaseDefense())))
  end
  function s.atktg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and s.arkfilter(chkc)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.arkfilter, tp, LOCATION_MZONE, LOCATION_MZONE, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_FACEUP)
  	local g = Duel.SelectTarget(tp, s.arkfilter, tp, LOCATION_MZONE, LOCATION_MZONE, 1, 1, nil)
  	if g:GetCount() > 0 and g:GetFirst():IsControler(tp) then
  		e:SetLabel(1)
  	end
  end
  function s.atkop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if tc:IsRelateToEffect(e) and tc:IsLocation(LOCATION_MZONE) then
  		if s.arkfilter(tc) then
  			local e1 = Effect.CreateEffect(c)
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  			e1:SetCode(EFFECT_SET_ATTACK_FINAL)
  			e1:SetValue(tc:GetBaseAttack())
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  			tc:RegisterEffect(e1)
  			local e2 = Effect.CreateEffect(c)
  			e2:SetType(EFFECT_TYPE_SINGLE)
  			e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  			e2:SetCode(EFFECT_SET_DEFENSE_FINAL)
  			e2:SetValue(tc:GetBaseDefense())
  			e2:SetReset(RESET_EVENT + RESETS_STANDARD)
  			tc:RegisterEffect(e2)
  		end
  		if e:GetLabel() == 1 then
  			local e3 = Effect.CreateEffect(c)
  			e3:SetType(EFFECT_TYPE_SINGLE)
  			e3:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
  			e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  			e3:SetValue(1)
  			e3:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END)
  			tc:RegisterEffect(e3)
  			local e4 = e3:Clone()
  			e4:SetCode(EFFECT_INDESTRUCTABLE_EFFECT)
  			tc:RegisterEffect(e4)
  		end
  	end
  end
  function s.cfilter(c, tp)
  	return c:IsControler(tp)
  end
  function s.atkcon2(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.cfilter, 1, nil, tp) and not eg:IsContains(e:GetHandler())
  end
  function s.atkfilter(c, e, tp)
  	return c:IsControler(tp) and (not e or c:IsRelateToEffect(e)) and c:IsType(TYPE_MONSTER) and c:IsFaceup() and c:IsLocation(LOCATION_MZONE)
  end
  function s.atktg2(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return eg:IsExists(s.atkfilter, 1, nil, nil, tp) and e:GetHandler():GetOverlayCount() > 2
  	end
  	local g = eg:Filter(s.atkfilter, nil, nil, tp)
  	Duel.SetTargetCard(g)
  end
  function s.atkop2(e, tp, eg, ep, ev, re, r, rp)
  	local g = eg:Filter(Card.IsRelateToChain, nil)
  	for tc in aux.Next(g) do
  		if tc:IsType(TYPE_MONSTER) and tc:IsFaceup() and tc:IsLocation(LOCATION_MZONE) then
  			local e1 = Effect.CreateEffect(e:GetHandler())
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetCode(EFFECT_UPDATE_ATTACK)
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  			e1:SetValue(900)
  			tc:RegisterEffect(e1)
  		end
  	end
  end
  
  