name: ダイノルフィア・リヴァージョン
card_text: このカード名のカードは1ターンに1枚しか発動できない。
  1:自分フィールドに「ダイノルフィア」融合モンスターが存在する場合、LPを半分払い、自分の墓地からカウンター罠カード1枚を除外して発動できる。
  この効果は、そのカウンター罠カード発動時の効果と同じになる。
  2:自分のLPが2000以下で、自分が戦闘ダメージを受けるダメージ計算時に、墓地のこのカードを除外して発動できる。
  その戦闘で発生する自分への戦闘ダメージを0にする。
external_ids: local SETCARD_ID_0 = 0x173 --ダイノルフィア
  
lua: local SETCARD_ID_0 = 0x173 --ダイノルフィア
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_CHAINING)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.condition)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target(EVENT_CHAINING))
  	e1:SetOperation(s.operation)
  	c:RegisterEffect(e1)
  	local e2 = e1:Clone()
  	e2:SetCode(EVENT_FREE_CHAIN)
  	e2:SetHintTiming(TIMING_BATTLE_END, TIMING_BATTLE_START + TIMING_BATTLE_END)
  	e2:SetTarget(s.target(EVENT_FREE_CHAIN))
  	c:RegisterEffect(e2)
  	local e3 = e1:Clone()
  	e3:SetCode(EVENT_SUMMON)
  	e3:SetTarget(s.target(EVENT_SUMMON))
  	c:RegisterEffect(e3)
  	local e4 = e1:Clone()
  	e4:SetCode(EVENT_FLIP_SUMMON)
  	e4:SetTarget(s.target(EVENT_FLIP_SUMMON))
  	c:RegisterEffect(e4)
  	local e5 = e1:Clone()
  	e5:SetCode(EVENT_SPSUMMON)
  	e5:SetTarget(s.target(EVENT_SPSUMMON))
  	c:RegisterEffect(e5)
  	local e6 = e1:Clone()
  	e6:SetCode(EVENT_TO_HAND)
  	e6:SetTarget(s.target(EVENT_TO_HAND))
  	c:RegisterEffect(e6)
  	local e7 = e1:Clone()
  	e7:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e7:SetTarget(s.target(EVENT_ATTACK_ANNOUNCE))
  	c:RegisterEffect(e7)
  	--negate damage
  	local e0 = Effect.CreateEffect(c)
  	e0:SetType(EFFECT_TYPE_QUICK_O)
  	e0:SetCode(EVENT_PRE_DAMAGE_CALCULATE)
  	e0:SetRange(LOCATION_GRAVE)
  	e0:SetCondition(s.damcon)
  	e0:SetCost(aux.bfgcost)
  	e0:SetOperation(s.damop)
  	c:RegisterEffect(e0)
  end
  function s.cfilter(c)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_FUSION) and c:IsFaceup()
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil)
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	e:SetLabel(1)
  	return true
  end
  function s.filter(c, event)
  	if not (c:GetType() == TYPE_TRAP + TYPE_COUNTER and c:IsAbleToRemoveAsCost()) then
  		return false
  	end
  	local te = c:CheckActivateEffect(false, true, false)
  	return te and te:GetCode() == event
  end
  function s.target(event)
  	return function(e, tp, eg, ep, ev, re, r, rp, chk)
  		if chk == 0 then
  			if e:GetLabel() == 0 then
  				return false
  			end
  			e:SetLabel(0)
  			return Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_GRAVE, 0, 1, nil, event)
  		end
  		e:SetLabel(0)
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  		local g = Duel.SelectMatchingCard(tp, s.filter, tp, LOCATION_GRAVE, 0, 1, 1, nil, event)
  		local te, ceg, cep, cev, cre, cr, crp = g:GetFirst():CheckActivateEffect(false, true, true)
  		Duel.PayLPCost(tp, math.floor(Duel.GetLP(tp) / 2))
  		Duel.Remove(g, POS_FACEUP, REASON_COST)
  		e:SetProperty(te:GetProperty())
  		local tg = te:GetTarget()
  		if tg then
  			tg(e, tp, ceg, cep, cev, cre, cr, crp, 1)
  		end
  		te:SetLabelObject(e:GetLabelObject())
  		e:SetLabelObject(te)
  		Duel.ClearOperationInfo(0)
  	end
  end
  function s.operation(e, tp, eg, ep, ev, re, r, rp)
  	local te = e:GetLabelObject()
  	if not te then
  		return
  	end
  	e:SetLabelObject(te:GetLabelObject())
  	local op = te:GetOperation()
  	if op then
  		op(e, tp, eg, ep, ev, re, r, rp)
  	end
  end
  function s.damcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetLP(tp) <= 2000 and Duel.GetBattleDamage(tp) > 0
  end
  function s.damop(e, tp, eg, ep, ev, re, r, rp)
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_AVOID_BATTLE_DAMAGE)
  	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e1:SetTargetRange(1, 0)
  	e1:SetReset(RESET_PHASE + PHASE_DAMAGE)
  	Duel.RegisterEffect(e1, tp)
  end
  
  
source_text: ダイノルフィア・リヴァージョン
  このカード名のカードは1ターンに1枚しか発動できない。
  1:自分フィールドに「ダイノルフィア」融合モンスターが存在する場合、LPを半分払い、自分の墓地からカウンター罠カード1枚を除外して発動できる。
  この効果は、そのカウンター罠カード発動時の効果と同じになる。
  2:自分のLPが2000以下で、自分が戦闘ダメージを受けるダメージ計算時に、墓地のこのカードを除外して発動できる。
  その戦闘で発生する自分への戦闘ダメージを0にする。
target_text: -- ダイノルフィア・リヴァージョン
  local SETCARD_ID_0 = 0x173 --ダイノルフィア
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_CHAINING)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.condition)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target(EVENT_CHAINING))
  	e1:SetOperation(s.operation)
  	c:RegisterEffect(e1)
  	local e2 = e1:Clone()
  	e2:SetCode(EVENT_FREE_CHAIN)
  	e2:SetHintTiming(TIMING_BATTLE_END, TIMING_BATTLE_START + TIMING_BATTLE_END)
  	e2:SetTarget(s.target(EVENT_FREE_CHAIN))
  	c:RegisterEffect(e2)
  	local e3 = e1:Clone()
  	e3:SetCode(EVENT_SUMMON)
  	e3:SetTarget(s.target(EVENT_SUMMON))
  	c:RegisterEffect(e3)
  	local e4 = e1:Clone()
  	e4:SetCode(EVENT_FLIP_SUMMON)
  	e4:SetTarget(s.target(EVENT_FLIP_SUMMON))
  	c:RegisterEffect(e4)
  	local e5 = e1:Clone()
  	e5:SetCode(EVENT_SPSUMMON)
  	e5:SetTarget(s.target(EVENT_SPSUMMON))
  	c:RegisterEffect(e5)
  	local e6 = e1:Clone()
  	e6:SetCode(EVENT_TO_HAND)
  	e6:SetTarget(s.target(EVENT_TO_HAND))
  	c:RegisterEffect(e6)
  	local e7 = e1:Clone()
  	e7:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e7:SetTarget(s.target(EVENT_ATTACK_ANNOUNCE))
  	c:RegisterEffect(e7)
  	--negate damage
  	local e0 = Effect.CreateEffect(c)
  	e0:SetType(EFFECT_TYPE_QUICK_O)
  	e0:SetCode(EVENT_PRE_DAMAGE_CALCULATE)
  	e0:SetRange(LOCATION_GRAVE)
  	e0:SetCondition(s.damcon)
  	e0:SetCost(aux.bfgcost)
  	e0:SetOperation(s.damop)
  	c:RegisterEffect(e0)
  end
  function s.cfilter(c)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_FUSION) and c:IsFaceup()
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil)
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	e:SetLabel(1)
  	return true
  end
  function s.filter(c, event)
  	if not (c:GetType() == TYPE_TRAP + TYPE_COUNTER and c:IsAbleToRemoveAsCost()) then
  		return false
  	end
  	local te = c:CheckActivateEffect(false, true, false)
  	return te and te:GetCode() == event
  end
  function s.target(event)
  	return function(e, tp, eg, ep, ev, re, r, rp, chk)
  		if chk == 0 then
  			if e:GetLabel() == 0 then
  				return false
  			end
  			e:SetLabel(0)
  			return Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_GRAVE, 0, 1, nil, event)
  		end
  		e:SetLabel(0)
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  		local g = Duel.SelectMatchingCard(tp, s.filter, tp, LOCATION_GRAVE, 0, 1, 1, nil, event)
  		local te, ceg, cep, cev, cre, cr, crp = g:GetFirst():CheckActivateEffect(false, true, true)
  		Duel.PayLPCost(tp, math.floor(Duel.GetLP(tp) / 2))
  		Duel.Remove(g, POS_FACEUP, REASON_COST)
  		e:SetProperty(te:GetProperty())
  		local tg = te:GetTarget()
  		if tg then
  			tg(e, tp, ceg, cep, cev, cre, cr, crp, 1)
  		end
  		te:SetLabelObject(e:GetLabelObject())
  		e:SetLabelObject(te)
  		Duel.ClearOperationInfo(0)
  	end
  end
  function s.operation(e, tp, eg, ep, ev, re, r, rp)
  	local te = e:GetLabelObject()
  	if not te then
  		return
  	end
  	e:SetLabelObject(te:GetLabelObject())
  	local op = te:GetOperation()
  	if op then
  		op(e, tp, eg, ep, ev, re, r, rp)
  	end
  end
  function s.damcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetLP(tp) <= 2000 and Duel.GetBattleDamage(tp) > 0
  end
  function s.damop(e, tp, eg, ep, ev, re, r, rp)
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_AVOID_BATTLE_DAMAGE)
  	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e1:SetTargetRange(1, 0)
  	e1:SetReset(RESET_PHASE + PHASE_DAMAGE)
  	Duel.RegisterEffect(e1, tp)
  end
  
  