name: Ogre
card_text: During your opponent's turn, when your opponent declares a second direct attack during the same Battle Phase, you can Special Summon this card from your hand. When you do, this card's ATK and DEF becomes equal to the ATK and DEF of the first monster that attacked directly this turn, if it is still face-up on the field. The turn this card is Special Summoned with this effect, your opponent cannot select monsters other than this card as an attack target while this card is face-up on the field.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_CUSTOM + id)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.operation)
  	c:RegisterEffect(e1)
  	--atk/def up
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_DEFCHANGE)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_F)
  	e2:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e2:SetCondition(s.adcon)
  	e2:SetOperation(s.adop)
  	c:RegisterEffect(e2)
  	if not s.global_check then
  		s.global_check = true
  		s[0] = 0
  		s[1] = 0
  		local ge1 = Effect.CreateEffect(c)
  		ge1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge1:SetCode(EVENT_ATTACK_ANNOUNCE)
  		ge1:SetOperation(s.check)
  		Duel.RegisterEffect(ge1, 0)
  		local ge2 = Effect.CreateEffect(c)
  		ge2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge2:SetCode(EVENT_ATTACK_DISABLED)
  		ge2:SetOperation(s.check2)
  		Duel.RegisterEffect(ge2, 0)
  		local ge3 = Effect.CreateEffect(c)
  		ge3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge3:SetCode(EVENT_PHASE_START + PHASE_DRAW)
  		ge3:SetOperation(s.clear)
  		Duel.RegisterEffect(ge3, 0)
  	end
  end
  function s.check(e, tp, eg, ep, ev, re, r, rp)
  	local tc = eg:GetFirst()
  	if Duel.GetAttackTarget() == nil then
  		s[1 - tc:GetControler()] = s[1 - tc:GetControler()] + 1
  		if s[1 - tc:GetControler()] == 1 then
  			s[2] = tc
  			tc:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END, 0, 1)
  		elseif s[1 - tc:GetControler()] == 2 then
  			Duel.RaiseEvent(tc, EVENT_CUSTOM + id, e, 0, 0, 0, 0)
  		end
  	end
  end
  function s.check2(e, tp, eg, ep, ev, re, r, rp)
  	local tc = eg:GetFirst()
  	if tc:GetFlagEffect(id) ~= 0 and Duel.GetAttackTarget() ~= nil then
  		s[1 - tc:GetControler()] = s[1 - tc:GetControler()] - 1
  	end
  end
  function s.clear(e, tp, eg, ep, ev, re, r, rp)
  	s[0] = 0
  	s[1] = 0
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetTurnPlayer() ~= tp and Duel.GetAttackTarget() == nil and s[tp] == 2
  end
  function s.target(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.operation(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	Duel.SpecialSummon(c, SUMMON_VALUE_SELF, tp, tp, false, false, POS_FACEUP)
  end
  function s.adcon(e, tp, eg, ep, ev, re, r, rp)
  	return e:GetHandler():GetSummonType() == SUMMON_TYPE_SPECIAL + SUMMON_VALUE_SELF
  end
  function s.adop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = s[2]
  	if c:IsFaceup() and c:IsRelateToEffect(e) then
  		if tc and tc:GetFlagEffect(id) then
  			local e1 = Effect.CreateEffect(c)
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetCode(EFFECT_SET_ATTACK_FINAL)
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  			e1:SetValue(tc:GetAttack())
  			c:RegisterEffect(e1)
  			local e2 = e1:Clone()
  			e2:SetCode(EFFECT_SET_DEFENSE_FINAL)
  			e2:SetValue(tc:GetDefense())
  			c:RegisterEffect(e2)
  		end
  		--at limit
  		local e3 = Effect.CreateEffect(c)
  		e3:SetType(EFFECT_TYPE_FIELD)
  		e3:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
  		e3:SetRange(LOCATION_MZONE)
  		e3:SetTargetRange(0, LOCATION_MZONE)
  		e3:SetValue(s.atlimit)
  		e3:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END)
  		c:RegisterEffect(e3)
  	end
  end
  function s.atlimit(e, c)
  	return c ~= e:GetHandler()
  end
  
  
source_text: Ogre
  During your opponent's turn, when your opponent declares a second direct attack during the same Battle Phase, you can Special Summon this card from your hand. When you do, this card's ATK and DEF becomes equal to the ATK and DEF of the first monster that attacked directly this turn, if it is still face-up on the field. The turn this card is Special Summoned with this effect, your opponent cannot select monsters other than this card as an attack target while this card is face-up on the field.
target_text: -- Ogre
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_CUSTOM + id)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.operation)
  	c:RegisterEffect(e1)
  	--atk/def up
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_ATKCHANGE + CATEGORY_DEFCHANGE)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_F)
  	e2:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e2:SetCondition(s.adcon)
  	e2:SetOperation(s.adop)
  	c:RegisterEffect(e2)
  	if not s.global_check then
  		s.global_check = true
  		s[0] = 0
  		s[1] = 0
  		local ge1 = Effect.CreateEffect(c)
  		ge1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge1:SetCode(EVENT_ATTACK_ANNOUNCE)
  		ge1:SetOperation(s.check)
  		Duel.RegisterEffect(ge1, 0)
  		local ge2 = Effect.CreateEffect(c)
  		ge2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge2:SetCode(EVENT_ATTACK_DISABLED)
  		ge2:SetOperation(s.check2)
  		Duel.RegisterEffect(ge2, 0)
  		local ge3 = Effect.CreateEffect(c)
  		ge3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge3:SetCode(EVENT_PHASE_START + PHASE_DRAW)
  		ge3:SetOperation(s.clear)
  		Duel.RegisterEffect(ge3, 0)
  	end
  end
  function s.check(e, tp, eg, ep, ev, re, r, rp)
  	local tc = eg:GetFirst()
  	if Duel.GetAttackTarget() == nil then
  		s[1 - tc:GetControler()] = s[1 - tc:GetControler()] + 1
  		if s[1 - tc:GetControler()] == 1 then
  			s[2] = tc
  			tc:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END, 0, 1)
  		elseif s[1 - tc:GetControler()] == 2 then
  			Duel.RaiseEvent(tc, EVENT_CUSTOM + id, e, 0, 0, 0, 0)
  		end
  	end
  end
  function s.check2(e, tp, eg, ep, ev, re, r, rp)
  	local tc = eg:GetFirst()
  	if tc:GetFlagEffect(id) ~= 0 and Duel.GetAttackTarget() ~= nil then
  		s[1 - tc:GetControler()] = s[1 - tc:GetControler()] - 1
  	end
  end
  function s.clear(e, tp, eg, ep, ev, re, r, rp)
  	s[0] = 0
  	s[1] = 0
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetTurnPlayer() ~= tp and Duel.GetAttackTarget() == nil and s[tp] == 2
  end
  function s.target(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.operation(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	Duel.SpecialSummon(c, SUMMON_VALUE_SELF, tp, tp, false, false, POS_FACEUP)
  end
  function s.adcon(e, tp, eg, ep, ev, re, r, rp)
  	return e:GetHandler():GetSummonType() == SUMMON_TYPE_SPECIAL + SUMMON_VALUE_SELF
  end
  function s.adop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = s[2]
  	if c:IsFaceup() and c:IsRelateToEffect(e) then
  		if tc and tc:GetFlagEffect(id) then
  			local e1 = Effect.CreateEffect(c)
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetCode(EFFECT_SET_ATTACK_FINAL)
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_DISABLE)
  			e1:SetValue(tc:GetAttack())
  			c:RegisterEffect(e1)
  			local e2 = e1:Clone()
  			e2:SetCode(EFFECT_SET_DEFENSE_FINAL)
  			e2:SetValue(tc:GetDefense())
  			c:RegisterEffect(e2)
  		end
  		--at limit
  		local e3 = Effect.CreateEffect(c)
  		e3:SetType(EFFECT_TYPE_FIELD)
  		e3:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
  		e3:SetRange(LOCATION_MZONE)
  		e3:SetTargetRange(0, LOCATION_MZONE)
  		e3:SetValue(s.atlimit)
  		e3:SetReset(RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END)
  		c:RegisterEffect(e3)
  	end
  end
  function s.atlimit(e, c)
  	return c ~= e:GetHandler()
  end
  
  