name: Assault
card_text: After activation, treat this card as an Equip Card, and equip it to a monster you control. Once per turn, during the equipped monster's attack, you can send 1 monster with 1000 or less ATK from your hand to the Graveyard during the Damage Step to have the equipped monster gain the ATK of the sent monster, until the End Phase.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_EQUIP)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.operation)
  	c:RegisterEffect(e1)
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local c = e:GetHandler()
  	local cid = Duel.GetChainInfo(0, CHAININFO_CHAIN_ID)
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetCode(EFFECT_REMAIN_FIELD)
  	e1:SetProperty(EFFECT_FLAG_OATH)
  	e1:SetReset(RESET_CHAIN)
  	c:RegisterEffect(e1)
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e2:SetCode(EVENT_CHAIN_DISABLED)
  	e2:SetOperation(s.tgop)
  	e2:SetLabel(cid)
  	e2:SetReset(RESET_CHAIN)
  	Duel.RegisterEffect(e2, tp)
  end
  function s.tgop(e, tp, eg, ep, ev, re, r, rp)
  	local cid = Duel.GetChainInfo(ev, CHAININFO_CHAIN_ID)
  	if cid ~= e:GetLabel() then
  		return
  	end
  	if e:GetOwner():IsRelateToChain(ev) then
  		e:GetOwner():CancelToGrave(false)
  	end
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_MZONE) and chkc:IsFaceup()
  	end
  	if chk == 0 then
  		return e:IsCostChecked() and Duel.IsExistingTarget(Card.IsFaceup, tp, LOCATION_MZONE, 0, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_EQUIP)
  	Duel.SelectTarget(tp, Card.IsFaceup, tp, LOCATION_MZONE, 0, 1, 1, nil)
  	Duel.SetOperationInfo(0, CATEGORY_EQUIP, e:GetHandler(), 1, 0, 0)
  end
  function s.operation(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsLocation(LOCATION_SZONE) then
  		return
  	end
  	if not c:IsRelateToEffect(e) or c:IsStatus(STATUS_LEAVE_CONFIRMED) then
  		return
  	end
  	local tc = Duel.GetFirstTarget()
  	if tc:IsRelateToEffect(e) and tc:IsFaceup() then
  		Duel.Equip(tp, c, tc)
  		--atkup
  		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:SetHintTiming(TIMING_DAMAGE_STEP)
  		e1:SetRange(LOCATION_SZONE)
  		e1:SetCountLimit(1)
  		e1:SetProperty(EFFECT_FLAG_DAMAGE_STEP)
  		e1:SetCondition(s.atkcon)
  		e1:SetCost(s.atkcost)
  		e1:SetOperation(s.atkop)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		c:RegisterEffect(e1)
  		--Equip limit
  		local e2 = Effect.CreateEffect(c)
  		e2:SetType(EFFECT_TYPE_SINGLE)
  		e2:SetCode(EFFECT_EQUIP_LIMIT)
  		e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  		e2:SetValue(s.eqlimit)
  		e2:SetReset(RESET_EVENT + RESETS_STANDARD)
  		c:RegisterEffect(e2)
  	else
  		c:CancelToGrave(false)
  	end
  end
  function s.eqlimit(e, c)
  	return e:GetHandler():GetEquipTarget() == c or c:IsControler(e:GetHandlerPlayer())
  end
  function s.atkcon(e, tp, eg, ep, ev, re, r, rp)
  	local a = Duel.GetAttacker()
  	local ph = Duel.GetCurrentPhase()
  	return a == e:GetHandler():GetEquipTarget() and ph == PHASE_DAMAGE and not Duel.IsDamageCalculated()
  end
  function s.cfilter(c)
  	return c:IsType(TYPE_MONSTER) and c:IsAttackBelow(1000) and c:IsAbleToGraveAsCost()
  end
  function s.atkcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TOGRAVE)
  	local g = Duel.SelectMatchingCard(tp, s.cfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	e:SetLabel(g:GetFirst():GetAttack())
  	Duel.SendtoGrave(g, REASON_COST)
  end
  function s.atkop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local a = Duel.GetAttacker()
  	if c:IsRelateToEffect(e) and a:IsRelateToBattle() and a:IsFaceup() then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UPDATE_ATTACK)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END)
  		e1:SetValue(e:GetLabel())
  		a:RegisterEffect(e1)
  	end
  end
  
  
source_text: Assault
  After activation, treat this card as an Equip Card, and equip it to a monster you control. Once per turn, during the equipped monster's attack, you can send 1 monster with 1000 or less ATK from your hand to the Graveyard during the Damage Step to have the equipped monster gain the ATK of the sent monster, until the End Phase.
target_text: -- Assault
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_EQUIP)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.operation)
  	c:RegisterEffect(e1)
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local c = e:GetHandler()
  	local cid = Duel.GetChainInfo(0, CHAININFO_CHAIN_ID)
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetCode(EFFECT_REMAIN_FIELD)
  	e1:SetProperty(EFFECT_FLAG_OATH)
  	e1:SetReset(RESET_CHAIN)
  	c:RegisterEffect(e1)
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e2:SetCode(EVENT_CHAIN_DISABLED)
  	e2:SetOperation(s.tgop)
  	e2:SetLabel(cid)
  	e2:SetReset(RESET_CHAIN)
  	Duel.RegisterEffect(e2, tp)
  end
  function s.tgop(e, tp, eg, ep, ev, re, r, rp)
  	local cid = Duel.GetChainInfo(ev, CHAININFO_CHAIN_ID)
  	if cid ~= e:GetLabel() then
  		return
  	end
  	if e:GetOwner():IsRelateToChain(ev) then
  		e:GetOwner():CancelToGrave(false)
  	end
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_MZONE) and chkc:IsFaceup()
  	end
  	if chk == 0 then
  		return e:IsCostChecked() and Duel.IsExistingTarget(Card.IsFaceup, tp, LOCATION_MZONE, 0, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_EQUIP)
  	Duel.SelectTarget(tp, Card.IsFaceup, tp, LOCATION_MZONE, 0, 1, 1, nil)
  	Duel.SetOperationInfo(0, CATEGORY_EQUIP, e:GetHandler(), 1, 0, 0)
  end
  function s.operation(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsLocation(LOCATION_SZONE) then
  		return
  	end
  	if not c:IsRelateToEffect(e) or c:IsStatus(STATUS_LEAVE_CONFIRMED) then
  		return
  	end
  	local tc = Duel.GetFirstTarget()
  	if tc:IsRelateToEffect(e) and tc:IsFaceup() then
  		Duel.Equip(tp, c, tc)
  		--atkup
  		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:SetHintTiming(TIMING_DAMAGE_STEP)
  		e1:SetRange(LOCATION_SZONE)
  		e1:SetCountLimit(1)
  		e1:SetProperty(EFFECT_FLAG_DAMAGE_STEP)
  		e1:SetCondition(s.atkcon)
  		e1:SetCost(s.atkcost)
  		e1:SetOperation(s.atkop)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		c:RegisterEffect(e1)
  		--Equip limit
  		local e2 = Effect.CreateEffect(c)
  		e2:SetType(EFFECT_TYPE_SINGLE)
  		e2:SetCode(EFFECT_EQUIP_LIMIT)
  		e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  		e2:SetValue(s.eqlimit)
  		e2:SetReset(RESET_EVENT + RESETS_STANDARD)
  		c:RegisterEffect(e2)
  	else
  		c:CancelToGrave(false)
  	end
  end
  function s.eqlimit(e, c)
  	return e:GetHandler():GetEquipTarget() == c or c:IsControler(e:GetHandlerPlayer())
  end
  function s.atkcon(e, tp, eg, ep, ev, re, r, rp)
  	local a = Duel.GetAttacker()
  	local ph = Duel.GetCurrentPhase()
  	return a == e:GetHandler():GetEquipTarget() and ph == PHASE_DAMAGE and not Duel.IsDamageCalculated()
  end
  function s.cfilter(c)
  	return c:IsType(TYPE_MONSTER) and c:IsAttackBelow(1000) and c:IsAbleToGraveAsCost()
  end
  function s.atkcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TOGRAVE)
  	local g = Duel.SelectMatchingCard(tp, s.cfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	e:SetLabel(g:GetFirst():GetAttack())
  	Duel.SendtoGrave(g, REASON_COST)
  end
  function s.atkop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local a = Duel.GetAttacker()
  	if c:IsRelateToEffect(e) and a:IsRelateToBattle() and a:IsFaceup() then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UPDATE_ATTACK)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END)
  		e1:SetValue(e:GetLabel())
  		a:RegisterEffect(e1)
  	end
  end
  
  