name: Revolution
card_text: If you Synchro Summon a "Power Tool" monster or a Level 7 or 8 Dragon monster, this card in your hand can also be used as material. You can only use this effect of "Revolution Synchron" once per turn. If you control a Level 7 or higher Synchro Monster while this card is in your GY: You can send the top card of your Deck to the GY, and if you do, Special Summon this card, also its Level becomes 1. You can only use this effect of "Revolution Synchron" once per Duel.
external_ids: local SETCARD_ID_0 = 0xc2 --Power
  
lua: local SETCARD_ID_0 = 0xc2 --Power
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--hand synchro
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetCode(EFFECT_EXTRA_SYNCHRO_MATERIAL)
  	e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id)
  	e1:SetValue(s.matval)
  	c:RegisterEffect(e1)
  	--register HOpT
  	local e0 = Effect.CreateEffect(c)
  	e0:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_CONTINUOUS)
  	e0:SetCode(EVENT_BE_PRE_MATERIAL)
  	e0:SetProperty(EFFECT_FLAG_EVENT_PLAYER + EFFECT_FLAG_CANNOT_DISABLE)
  	e0:SetLabelObject(e1)
  	e0:SetCondition(s.hsyncon)
  	e0:SetOperation(s.hsynreg)
  	c:RegisterEffect(e0)
  	--spsum self
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 0))
  	e2:SetCategory(CATEGORY_DECKDES + CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id + 1 + EFFECT_COUNT_CODE_DUEL)
  	e2:SetCondition(s.spcon)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  end
  function s.matval(e, c)
  	return c:IsType(TYPE_SYNCHRO) and (c:IsLevel(7, 8) and c:IsRace(RACE_DRAGON) or c:IsSetCard(SETCARD_ID_0))
  end
  function s.hsyncon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return r == REASON_SYNCHRO and s.matval(nil, c:GetReasonCard()) and c:IsPreviousLocation(LOCATION_HAND)
  end
  function s.hsynreg(e, tp, eg, ep, ev, re, r, rp)
  	e:GetLabelObject():UseCountLimit(tp)
  end
  function s.cfilter(c)
  	return c:IsFaceup() and c:IsLevelAbove(7) and c:IsType(TYPE_SYNCHRO)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.IsPlayerCanDiscardDeck(tp, 1) and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_DECKDES, nil, 0, tp, 1)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	if Duel.DiscardDeck(tp, 1, REASON_EFFECT) ~= 0 then
  		local oc = Duel.GetOperatedGroup():GetFirst()
  		local c = e:GetHandler()
  		if oc:IsLocation(LOCATION_GRAVE) and c:IsRelateToEffect(e) and Duel.SpecialSummonStep(c, 0, tp, tp, false, false, POS_FACEUP) then
  			local e1 = Effect.CreateEffect(c)
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetCode(EFFECT_CHANGE_LEVEL)
  			e1:SetValue(1)
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  			c:RegisterEffect(e1, true)
  		end
  		Duel.SpecialSummonComplete()
  	end
  end
  
  
source_text: Revolution
  If you Synchro Summon a "Power Tool" monster or a Level 7 or 8 Dragon monster, this card in your hand can also be used as material. You can only use this effect of "Revolution Synchron" once per turn. If you control a Level 7 or higher Synchro Monster while this card is in your GY: You can send the top card of your Deck to the GY, and if you do, Special Summon this card, also its Level becomes 1. You can only use this effect of "Revolution Synchron" once per Duel.
target_text: -- Revolution
  local SETCARD_ID_0 = 0xc2 --Power
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--hand synchro
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetCode(EFFECT_EXTRA_SYNCHRO_MATERIAL)
  	e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id)
  	e1:SetValue(s.matval)
  	c:RegisterEffect(e1)
  	--register HOpT
  	local e0 = Effect.CreateEffect(c)
  	e0:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_CONTINUOUS)
  	e0:SetCode(EVENT_BE_PRE_MATERIAL)
  	e0:SetProperty(EFFECT_FLAG_EVENT_PLAYER + EFFECT_FLAG_CANNOT_DISABLE)
  	e0:SetLabelObject(e1)
  	e0:SetCondition(s.hsyncon)
  	e0:SetOperation(s.hsynreg)
  	c:RegisterEffect(e0)
  	--spsum self
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 0))
  	e2:SetCategory(CATEGORY_DECKDES + CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id + 1 + EFFECT_COUNT_CODE_DUEL)
  	e2:SetCondition(s.spcon)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  end
  function s.matval(e, c)
  	return c:IsType(TYPE_SYNCHRO) and (c:IsLevel(7, 8) and c:IsRace(RACE_DRAGON) or c:IsSetCard(SETCARD_ID_0))
  end
  function s.hsyncon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return r == REASON_SYNCHRO and s.matval(nil, c:GetReasonCard()) and c:IsPreviousLocation(LOCATION_HAND)
  end
  function s.hsynreg(e, tp, eg, ep, ev, re, r, rp)
  	e:GetLabelObject():UseCountLimit(tp)
  end
  function s.cfilter(c)
  	return c:IsFaceup() and c:IsLevelAbove(7) and c:IsType(TYPE_SYNCHRO)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.IsPlayerCanDiscardDeck(tp, 1) and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_DECKDES, nil, 0, tp, 1)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	if Duel.DiscardDeck(tp, 1, REASON_EFFECT) ~= 0 then
  		local oc = Duel.GetOperatedGroup():GetFirst()
  		local c = e:GetHandler()
  		if oc:IsLocation(LOCATION_GRAVE) and c:IsRelateToEffect(e) and Duel.SpecialSummonStep(c, 0, tp, tp, false, false, POS_FACEUP) then
  			local e1 = Effect.CreateEffect(c)
  			e1:SetType(EFFECT_TYPE_SINGLE)
  			e1:SetCode(EFFECT_CHANGE_LEVEL)
  			e1:SetValue(1)
  			e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  			c:RegisterEffect(e1, true)
  		end
  		Duel.SpecialSummonComplete()
  	end
  end
  
  