name: Driangle,
card_text: If 3 or more Level 10 monsters are in your field, GY, and/or banishment, while this card is in your hand: You can Special Summon this card. If this card is Special Summoned: You can send the top card of your Deck to the GY; this card gains 500 ATK, then if the card sent to the GY was a monster, inflict 1000 damage to your opponent, otherwise, you can send the new top card of your Deck to the GY. You can only use each effect of "Driangle, Dragon of the Dark Deep" once per turn.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--special summon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.spcon)
  	e1:SetTarget(s.sptg)
  	e1:SetOperation(s.spop)
  	c:RegisterEffect(e1)
  	--atk up
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_DAMAGE + CATEGORY_TOGRAVE + CATEGORY_DECKDES)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCountLimit(1, id + o)
  	e2:SetCost(s.atkcost)
  	e2:SetTarget(s.atktg)
  	e2:SetOperation(s.atkop)
  	c:RegisterEffect(e2)
  end
  function s.cfilter(c)
  	return c:IsFaceupEx() and c:IsLevel(10)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE + LOCATION_GRAVE + LOCATION_REMOVED, 0, 3, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  function s.atkcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsPlayerCanDiscardDeckAsCost(tp, 1)
  	end
  	Duel.DiscardDeck(tp, 1, REASON_COST)
  	local g = Duel.GetOperatedGroup()
  	if g:GetFirst():IsType(TYPE_MONSTER) then
  		e:SetLabel(100)
  	else
  		e:SetLabel(200)
  	end
  end
  function s.atktg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	if e:GetLabel() == 100 then
  		e:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_DAMAGE)
  	elseif e:GetLabel() == 200 then
  		e:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_TOGRAVE + CATEGORY_DECKDES)
  	end
  end
  function s.atkop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) and c:IsFaceup() then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UPDATE_ATTACK)
  		e1:SetValue(500)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  		if not c:IsHasEffect(EFFECT_REVERSE_UPDATE) then
  			if e:GetLabel() == 100 then
  				Duel.BreakEffect()
  				Duel.Damage(1 - tp, 1000, REASON_EFFECT)
  			elseif e:GetLabel() == 200 and Duel.IsPlayerCanDiscardDeck(tp, 1) and Duel.SelectYesNo(tp, aux.Stringid(id, 2)) then
  				Duel.BreakEffect()
  				Duel.DiscardDeck(tp, 1, REASON_EFFECT)
  			end
  		end
  	end
  end
  
  
source_text: Driangle,
  If 3 or more Level 10 monsters are in your field, GY, and/or banishment, while this card is in your hand: You can Special Summon this card. If this card is Special Summoned: You can send the top card of your Deck to the GY; this card gains 500 ATK, then if the card sent to the GY was a monster, inflict 1000 damage to your opponent, otherwise, you can send the new top card of your Deck to the GY. You can only use each effect of "Driangle, Dragon of the Dark Deep" once per turn.
target_text: -- Driangle,
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--special summon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.spcon)
  	e1:SetTarget(s.sptg)
  	e1:SetOperation(s.spop)
  	c:RegisterEffect(e1)
  	--atk up
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_DAMAGE + CATEGORY_TOGRAVE + CATEGORY_DECKDES)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCountLimit(1, id + o)
  	e2:SetCost(s.atkcost)
  	e2:SetTarget(s.atktg)
  	e2:SetOperation(s.atkop)
  	c:RegisterEffect(e2)
  end
  function s.cfilter(c)
  	return c:IsFaceupEx() and c:IsLevel(10)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE + LOCATION_GRAVE + LOCATION_REMOVED, 0, 3, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  function s.atkcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsPlayerCanDiscardDeckAsCost(tp, 1)
  	end
  	Duel.DiscardDeck(tp, 1, REASON_COST)
  	local g = Duel.GetOperatedGroup()
  	if g:GetFirst():IsType(TYPE_MONSTER) then
  		e:SetLabel(100)
  	else
  		e:SetLabel(200)
  	end
  end
  function s.atktg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	if e:GetLabel() == 100 then
  		e:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_DAMAGE)
  	elseif e:GetLabel() == 200 then
  		e:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_TOGRAVE + CATEGORY_DECKDES)
  	end
  end
  function s.atkop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) and c:IsFaceup() then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UPDATE_ATTACK)
  		e1:SetValue(500)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  		if not c:IsHasEffect(EFFECT_REVERSE_UPDATE) then
  			if e:GetLabel() == 100 then
  				Duel.BreakEffect()
  				Duel.Damage(1 - tp, 1000, REASON_EFFECT)
  			elseif e:GetLabel() == 200 and Duel.IsPlayerCanDiscardDeck(tp, 1) and Duel.SelectYesNo(tp, aux.Stringid(id, 2)) then
  				Duel.BreakEffect()
  				Duel.DiscardDeck(tp, 1, REASON_EFFECT)
  			end
  		end
  	end
  end
  
  