name: 狂戦士の魂
card_text: 「狂戦士の魂」は1ターンに1枚しか発動できない。
  1:自分フィールドのモンスターが直接攻撃で相手に1500以下のダメージを与えた時、手札を全て捨てて発動できる。
  自分のデッキの一番上のカードをめくり、それがモンスターだった場合、そのモンスターを墓地へ送り、相手に500ダメージを与える。
  その後、モンスター以外がめくられるまでこの効果を(最大で7回)繰り返す。
  めくったカードがモンスター以外だった場合、そのカードをデッキの一番上に戻す。
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DECKDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_BATTLE_DAMAGE)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.condition)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return ep ~= tp and eg:GetFirst():GetControler() == tp and ev <= 1500 and Duel.GetAttackTarget() == nil
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local g = Duel.GetFieldGroup(tp, LOCATION_HAND, 0)
  		g:RemoveCard(e:GetHandler())
  		return g:GetCount() > 0 and g:FilterCount(Card.IsDiscardable, nil) == g:GetCount()
  	end
  	local g = Duel.GetFieldGroup(tp, LOCATION_HAND, 0)
  	Duel.SendtoGrave(g, REASON_COST + REASON_DISCARD)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsPlayerCanDiscardDeck(tp, 1)
  	end
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local count = 8
  	while count > 0 and Duel.IsPlayerCanDiscardDeck(tp, 1) and Duel.GetLP(1 - tp) > 0 do
  		if count < 8 then
  			Duel.BreakEffect()
  		end
  		Duel.ConfirmDecktop(tp, 1)
  		local g = Duel.GetDecktopGroup(tp, 1)
  		local tc = g:GetFirst()
  		if tc:IsType(TYPE_MONSTER) then
  			Duel.DisableShuffleCheck()
  			Duel.SendtoGrave(tc, REASON_EFFECT + REASON_REVEAL)
  			if tc:IsLocation(LOCATION_GRAVE) then
  				Duel.Damage(1 - tp, 500, REASON_EFFECT)
  				count = count - 1
  			else
  				count = 0
  			end
  		else
  			count = 0
  		end
  	end
  end
  
  
source_text: 狂戦士の魂
  「狂戦士の魂」は1ターンに1枚しか発動できない。
  1:自分フィールドのモンスターが直接攻撃で相手に1500以下のダメージを与えた時、手札を全て捨てて発動できる。
  自分のデッキの一番上のカードをめくり、それがモンスターだった場合、そのモンスターを墓地へ送り、相手に500ダメージを与える。
  その後、モンスター以外がめくられるまでこの効果を(最大で7回)繰り返す。
  めくったカードがモンスター以外だった場合、そのカードをデッキの一番上に戻す。
target_text: -- 狂戦士の魂
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DECKDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_BATTLE_DAMAGE)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.condition)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return ep ~= tp and eg:GetFirst():GetControler() == tp and ev <= 1500 and Duel.GetAttackTarget() == nil
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local g = Duel.GetFieldGroup(tp, LOCATION_HAND, 0)
  		g:RemoveCard(e:GetHandler())
  		return g:GetCount() > 0 and g:FilterCount(Card.IsDiscardable, nil) == g:GetCount()
  	end
  	local g = Duel.GetFieldGroup(tp, LOCATION_HAND, 0)
  	Duel.SendtoGrave(g, REASON_COST + REASON_DISCARD)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsPlayerCanDiscardDeck(tp, 1)
  	end
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local count = 8
  	while count > 0 and Duel.IsPlayerCanDiscardDeck(tp, 1) and Duel.GetLP(1 - tp) > 0 do
  		if count < 8 then
  			Duel.BreakEffect()
  		end
  		Duel.ConfirmDecktop(tp, 1)
  		local g = Duel.GetDecktopGroup(tp, 1)
  		local tc = g:GetFirst()
  		if tc:IsType(TYPE_MONSTER) then
  			Duel.DisableShuffleCheck()
  			Duel.SendtoGrave(tc, REASON_EFFECT + REASON_REVEAL)
  			if tc:IsLocation(LOCATION_GRAVE) then
  				Duel.Damage(1 - tp, 500, REASON_EFFECT)
  				count = count - 1
  			else
  				count = 0
  			end
  		else
  			count = 0
  		end
  	end
  end
  
  