name: Vulmina,
card_text: Pendulum Scale = 1
  [ Pendulum Effect ]
  If a monster(s) is Special Summoned by your Trap effect (except during the Damage Step): You can target 1 card on the field; return it to the hand, then you can Special Summon this card. You can only use this effect of "Vulmina, Statue of the Sacred Dragon" once per turn.
  ----------------------------------------
  [ Monster Effect ]
  When an opponent's monster declares an attack: You can place this monster in your Pendulum Zone, and if you do, return the opponent's monster to the hand. You can only use this effect of "Vulmina, Statue of the Sacred Dragon" once per turn. If this card in the Monster Zone is destroyed: You can place this card in your Pendulum Zone.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.EnablePendulumAttribute(c)
  	--place and NegateAttack
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_TOHAND)
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	--pendulum
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_DESTROYED)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCondition(s.pencon)
  	e2:SetTarget(s.pentg)
  	e2:SetOperation(s.penop)
  	c:RegisterEffect(e2)
  	--special Summon
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 2))
  	e3:SetCategory(CATEGORY_TOHAND)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e3:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e3:SetProperty(EFFECT_FLAG_DELAY + EFFECT_FLAG_CARD_TARGET)
  	e3:SetRange(LOCATION_PZONE)
  	e3:SetCountLimit(1, id + o)
  	e3:SetCondition(s.spcon)
  	e3:SetTarget(s.sptg)
  	e3:SetOperation(s.spop)
  	c:RegisterEffect(e3)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	local at = Duel.GetAttacker()
  	return at:IsControler(1 - tp)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	local at = Duel.GetAttacker()
  	if chk == 0 then
  		return at:IsRelateToBattle() and at:IsAbleToHand() and (Duel.CheckLocation(tp, LOCATION_PZONE, 0) or Duel.CheckLocation(tp, LOCATION_PZONE, 1))
  	end
  	Duel.SetTargetCard(at)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, at, 1, 0, 0)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) and Duel.MoveToField(c, tp, tp, LOCATION_PZONE, POS_FACEUP, true) and c:IsLocation(LOCATION_PZONE) then
  		local at = Duel.GetFirstTarget()
  		if at:IsControler(1 - tp) and at:IsType(TYPE_MONSTER) then
  			Duel.SendtoHand(at, nil, REASON_EFFECT)
  		end
  	end
  end
  function s.pencon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return c:IsPreviousLocation(LOCATION_MZONE) and c:IsFaceup()
  end
  function s.pentg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.CheckLocation(tp, LOCATION_PZONE, 0) or Duel.CheckLocation(tp, LOCATION_PZONE, 1)
  	end
  	local c = e:GetHandler()
  	if c:IsLocation(LOCATION_GRAVE) then
  		Duel.SetOperationInfo(0, CATEGORY_LEAVE_GRAVE, c, 1, 0, 0)
  	end
  end
  function s.penop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.MoveToField(c, tp, tp, LOCATION_PZONE, POS_FACEUP, true)
  	end
  end
  function s.cfilter(c, tp)
  	local typ, se, sp = c:GetSpecialSummonInfo(SUMMON_INFO_TYPE, SUMMON_INFO_REASON_EFFECT, SUMMON_INFO_REASON_PLAYER)
  	return se and typ & TYPE_TRAP ~= 0 and se:IsActivated() and sp == tp
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.cfilter, 1, nil, tp)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local c = e:GetHandler()
  	if chkc then
  		return chkc:IsAbleToHand()
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(Card.IsAbleToHand, tp, LOCATION_ONFIELD, LOCATION_ONFIELD, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RTOHAND)
  	local g = Duel.SelectTarget(tp, Card.IsAbleToHand, tp, LOCATION_ONFIELD, LOCATION_ONFIELD, 1, 1, nil)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, g, 1, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local tc = Duel.GetFirstTarget()
  	local c = e:GetHandler()
  	if tc and tc:IsRelateToEffect(e) and Duel.SendtoHand(tc, nil, REASON_EFFECT) ~= 0 and tc:IsLocation(LOCATION_HAND) then
  		if
  			Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  			and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  			and c:IsRelateToEffect(e)
  			and c:IsLocation(LOCATION_PZONE)
  			and Duel.SelectYesNo(tp, aux.Stringid(id, 3))
  		then
  			Duel.BreakEffect()
  			Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  		end
  	end
  end
  
  
source_text: Vulmina,
  Pendulum Scale = 1
  [ Pendulum Effect ]
  If a monster(s) is Special Summoned by your Trap effect (except during the Damage Step): You can target 1 card on the field; return it to the hand, then you can Special Summon this card. You can only use this effect of "Vulmina, Statue of the Sacred Dragon" once per turn.
  ----------------------------------------
  [ Monster Effect ]
  When an opponent's monster declares an attack: You can place this monster in your Pendulum Zone, and if you do, return the opponent's monster to the hand. You can only use this effect of "Vulmina, Statue of the Sacred Dragon" once per turn. If this card in the Monster Zone is destroyed: You can place this card in your Pendulum Zone.
target_text: -- Vulmina,
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.EnablePendulumAttribute(c)
  	--place and NegateAttack
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_TOHAND)
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	--pendulum
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_DESTROYED)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCondition(s.pencon)
  	e2:SetTarget(s.pentg)
  	e2:SetOperation(s.penop)
  	c:RegisterEffect(e2)
  	--special Summon
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 2))
  	e3:SetCategory(CATEGORY_TOHAND)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e3:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e3:SetProperty(EFFECT_FLAG_DELAY + EFFECT_FLAG_CARD_TARGET)
  	e3:SetRange(LOCATION_PZONE)
  	e3:SetCountLimit(1, id + o)
  	e3:SetCondition(s.spcon)
  	e3:SetTarget(s.sptg)
  	e3:SetOperation(s.spop)
  	c:RegisterEffect(e3)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	local at = Duel.GetAttacker()
  	return at:IsControler(1 - tp)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	local at = Duel.GetAttacker()
  	if chk == 0 then
  		return at:IsRelateToBattle() and at:IsAbleToHand() and (Duel.CheckLocation(tp, LOCATION_PZONE, 0) or Duel.CheckLocation(tp, LOCATION_PZONE, 1))
  	end
  	Duel.SetTargetCard(at)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, at, 1, 0, 0)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) and Duel.MoveToField(c, tp, tp, LOCATION_PZONE, POS_FACEUP, true) and c:IsLocation(LOCATION_PZONE) then
  		local at = Duel.GetFirstTarget()
  		if at:IsControler(1 - tp) and at:IsType(TYPE_MONSTER) then
  			Duel.SendtoHand(at, nil, REASON_EFFECT)
  		end
  	end
  end
  function s.pencon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return c:IsPreviousLocation(LOCATION_MZONE) and c:IsFaceup()
  end
  function s.pentg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.CheckLocation(tp, LOCATION_PZONE, 0) or Duel.CheckLocation(tp, LOCATION_PZONE, 1)
  	end
  	local c = e:GetHandler()
  	if c:IsLocation(LOCATION_GRAVE) then
  		Duel.SetOperationInfo(0, CATEGORY_LEAVE_GRAVE, c, 1, 0, 0)
  	end
  end
  function s.penop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.MoveToField(c, tp, tp, LOCATION_PZONE, POS_FACEUP, true)
  	end
  end
  function s.cfilter(c, tp)
  	local typ, se, sp = c:GetSpecialSummonInfo(SUMMON_INFO_TYPE, SUMMON_INFO_REASON_EFFECT, SUMMON_INFO_REASON_PLAYER)
  	return se and typ & TYPE_TRAP ~= 0 and se:IsActivated() and sp == tp
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.cfilter, 1, nil, tp)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local c = e:GetHandler()
  	if chkc then
  		return chkc:IsAbleToHand()
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(Card.IsAbleToHand, tp, LOCATION_ONFIELD, LOCATION_ONFIELD, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RTOHAND)
  	local g = Duel.SelectTarget(tp, Card.IsAbleToHand, tp, LOCATION_ONFIELD, LOCATION_ONFIELD, 1, 1, nil)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, g, 1, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local tc = Duel.GetFirstTarget()
  	local c = e:GetHandler()
  	if tc and tc:IsRelateToEffect(e) and Duel.SendtoHand(tc, nil, REASON_EFFECT) ~= 0 and tc:IsLocation(LOCATION_HAND) then
  		if
  			Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  			and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  			and c:IsRelateToEffect(e)
  			and c:IsLocation(LOCATION_PZONE)
  			and Duel.SelectYesNo(tp, aux.Stringid(id, 3))
  		then
  			Duel.BreakEffect()
  			Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  		end
  	end
  end
  
  