name: Divine
card_text: When this card is Normal Summoned, it gets 1 of the following effects for each "Divine Dragon - Excelion" in your Graveyard when this effect resolves (your choice). These effects cannot accumulate.
  ● This card gains 1000 ATK.
  ● If this card destroys an opponent's monster by battle, it can attack once again in a row.
  ● When this card destroys a monster by battle and sends it to the Graveyard, inflict damage to your opponent equal to the ATK of the destroyed monster.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--to defense
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_TRIGGER_F + EFFECT_TYPE_SINGLE)
  	e1:SetCode(EVENT_SUMMON_SUCCESS)
  	e1:SetOperation(s.effop)
  	c:RegisterEffect(e1)
  end
  function s.effop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local ct = Duel.GetMatchingGroupCount(Card.IsCode, tp, LOCATION_GRAVE, 0, nil, id)
  	if ct > 3 then
  		ct = 3
  	end
  	if ct > 0 and c:IsFaceup() and c:IsRelateToEffect(e) then
  		local opt1 = Duel.SelectOption(tp, aux.Stringid(id, 1), aux.Stringid(id, 2), aux.Stringid(id, 3))
  		local opt2 = 0
  		local opt3 = 0
  		s.reg(c, opt1)
  		if ct < 2 then
  			return
  		end
  		if opt1 == 0 then
  			opt2 = Duel.SelectOption(tp, aux.Stringid(id, 2), aux.Stringid(id, 3)) + 1
  		elseif opt1 == 2 then
  			opt2 = Duel.SelectOption(tp, aux.Stringid(id, 1), aux.Stringid(id, 2))
  		else
  			opt2 = Duel.SelectOption(tp, aux.Stringid(id, 1), aux.Stringid(id, 3))
  			if opt2 == 1 then
  				opt2 = 2
  			end
  		end
  		s.reg(c, opt2)
  		if ct < 3 then
  			return
  		end
  		if opt1 ~= 0 and opt2 ~= 0 then
  			opt3 = Duel.SelectOption(tp, aux.Stringid(id, 1))
  		elseif opt1 ~= 1 and opt2 ~= 1 then
  			opt3 = Duel.SelectOption(tp, aux.Stringid(id, 2)) + 1
  		else
  			opt3 = Duel.SelectOption(tp, aux.Stringid(id, 3)) + 2
  		end
  		s.reg(c, opt3)
  	end
  end
  function s.reg(c, opt)
  	if opt == 0 then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UPDATE_ATTACK)
  		e1:SetValue(1000)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  	elseif opt == 1 then
  		--chain attack
  		local e1 = Effect.CreateEffect(c)
  		e1:SetDescription(aux.Stringid(id, 2))
  		e1:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  		e1:SetCode(EVENT_BATTLE_DESTROYING)
  		e1:SetCondition(s.atcon)
  		e1:SetOperation(s.atop)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  	else
  		--damage
  		local e1 = Effect.CreateEffect(c)
  		e1:SetDescription(aux.Stringid(id, 3))
  		e1:SetCategory(CATEGORY_DAMAGE)
  		e1:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_F)
  		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetCode(EVENT_BATTLE_DESTROYING)
  		e1:SetCondition(aux.bdgcon)
  		e1:SetTarget(s.damtg)
  		e1:SetOperation(s.damop)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  	end
  end
  function s.atcon(e, tp, eg, ep, ev, re, r, rp)
  	return aux.bdocon(e, tp, eg, ep, ev, re, r, rp) and e:GetHandler():IsChainAttackable()
  end
  function s.atop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.ChainAttack()
  end
  function s.damtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local c = e:GetHandler()
  	local bc = c:GetBattleTarget()
  	local dam = bc:GetAttack()
  	if dam < 0 then
  		dam = 0
  	end
  	Duel.SetTargetPlayer(1 - tp)
  	Duel.SetTargetParam(dam)
  	Duel.SetOperationInfo(0, CATEGORY_DAMAGE, nil, 0, 1 - tp, dam)
  end
  function s.damop(e, tp, eg, ep, ev, re, r, rp)
  	local p, d = Duel.GetChainInfo(0, CHAININFO_TARGET_PLAYER, CHAININFO_TARGET_PARAM)
  	Duel.Damage(p, d, REASON_EFFECT)
  end
  
  
source_text: Divine
  When this card is Normal Summoned, it gets 1 of the following effects for each "Divine Dragon - Excelion" in your Graveyard when this effect resolves (your choice). These effects cannot accumulate.
  ● This card gains 1000 ATK.
  ● If this card destroys an opponent's monster by battle, it can attack once again in a row.
  ● When this card destroys a monster by battle and sends it to the Graveyard, inflict damage to your opponent equal to the ATK of the destroyed monster.
target_text: -- Divine
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--to defense
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_TRIGGER_F + EFFECT_TYPE_SINGLE)
  	e1:SetCode(EVENT_SUMMON_SUCCESS)
  	e1:SetOperation(s.effop)
  	c:RegisterEffect(e1)
  end
  function s.effop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local ct = Duel.GetMatchingGroupCount(Card.IsCode, tp, LOCATION_GRAVE, 0, nil, id)
  	if ct > 3 then
  		ct = 3
  	end
  	if ct > 0 and c:IsFaceup() and c:IsRelateToEffect(e) then
  		local opt1 = Duel.SelectOption(tp, aux.Stringid(id, 1), aux.Stringid(id, 2), aux.Stringid(id, 3))
  		local opt2 = 0
  		local opt3 = 0
  		s.reg(c, opt1)
  		if ct < 2 then
  			return
  		end
  		if opt1 == 0 then
  			opt2 = Duel.SelectOption(tp, aux.Stringid(id, 2), aux.Stringid(id, 3)) + 1
  		elseif opt1 == 2 then
  			opt2 = Duel.SelectOption(tp, aux.Stringid(id, 1), aux.Stringid(id, 2))
  		else
  			opt2 = Duel.SelectOption(tp, aux.Stringid(id, 1), aux.Stringid(id, 3))
  			if opt2 == 1 then
  				opt2 = 2
  			end
  		end
  		s.reg(c, opt2)
  		if ct < 3 then
  			return
  		end
  		if opt1 ~= 0 and opt2 ~= 0 then
  			opt3 = Duel.SelectOption(tp, aux.Stringid(id, 1))
  		elseif opt1 ~= 1 and opt2 ~= 1 then
  			opt3 = Duel.SelectOption(tp, aux.Stringid(id, 2)) + 1
  		else
  			opt3 = Duel.SelectOption(tp, aux.Stringid(id, 3)) + 2
  		end
  		s.reg(c, opt3)
  	end
  end
  function s.reg(c, opt)
  	if opt == 0 then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UPDATE_ATTACK)
  		e1:SetValue(1000)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  	elseif opt == 1 then
  		--chain attack
  		local e1 = Effect.CreateEffect(c)
  		e1:SetDescription(aux.Stringid(id, 2))
  		e1:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  		e1:SetCode(EVENT_BATTLE_DESTROYING)
  		e1:SetCondition(s.atcon)
  		e1:SetOperation(s.atop)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  	else
  		--damage
  		local e1 = Effect.CreateEffect(c)
  		e1:SetDescription(aux.Stringid(id, 3))
  		e1:SetCategory(CATEGORY_DAMAGE)
  		e1:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_F)
  		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetCode(EVENT_BATTLE_DESTROYING)
  		e1:SetCondition(aux.bdgcon)
  		e1:SetTarget(s.damtg)
  		e1:SetOperation(s.damop)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  		c:RegisterEffect(e1)
  	end
  end
  function s.atcon(e, tp, eg, ep, ev, re, r, rp)
  	return aux.bdocon(e, tp, eg, ep, ev, re, r, rp) and e:GetHandler():IsChainAttackable()
  end
  function s.atop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.ChainAttack()
  end
  function s.damtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local c = e:GetHandler()
  	local bc = c:GetBattleTarget()
  	local dam = bc:GetAttack()
  	if dam < 0 then
  		dam = 0
  	end
  	Duel.SetTargetPlayer(1 - tp)
  	Duel.SetTargetParam(dam)
  	Duel.SetOperationInfo(0, CATEGORY_DAMAGE, nil, 0, 1 - tp, dam)
  end
  function s.damop(e, tp, eg, ep, ev, re, r, rp)
  	local p, d = Duel.GetChainInfo(0, CHAININFO_TARGET_PLAYER, CHAININFO_TARGET_PARAM)
  	Duel.Damage(p, d, REASON_EFFECT)
  end
  
  