Commit 58d5fb24 authored by DailyShana's avatar DailyShana

new

フルメタルフォーゼ・アルカエスト
parent 7d28acac
......@@ -2,7 +2,13 @@
function c28016193.initial_effect(c)
--fusion material
c:EnableReviveLimit()
aux.AddFusionProcFunRep(c,aux.FilterBoolFunction(Card.IsFusionSetCard,0xe1),2,true)
local e0=Effect.CreateEffect(c)
e0:SetType(EFFECT_TYPE_SINGLE)
e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e0:SetCode(EFFECT_FUSION_MATERIAL)
e0:SetCondition(c28016193.fscon)
e0:SetOperation(c28016193.fsop)
c:RegisterEffect(e0)
--pierce
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
......@@ -29,6 +35,63 @@ function c28016193.initial_effect(c)
e3:SetOperation(c28016193.desop)
c:RegisterEffect(e3)
end
function c28016193.filter(c)
return c:IsFusionSetCard(0xe1)
end
function c28016193.fscon(e,g,gc,chkfnf)
if g==nil then return true end
local f=c28016193.filter
local cc=2
local chkf=bit.band(chkfnf,0xff)
local tp=e:GetHandlerPlayer()
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
g:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local mg=g:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
if not gc:IsCanBeFusionMaterial(e:GetHandler(),true) then return false end
return f(gc) and mg:IsExists(f,cc-1,gc) end
local g1=mg:Filter(f,nil)
if chkf~=PLAYER_NONE then
return g1:FilterCount(Card.IsOnField,nil)~=0 and g1:GetCount()>=cc
else return g1:GetCount()>=cc end
end
function c28016193.fsop(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf)
local f=c28016193.filter
local cc=2
local chkf=bit.band(chkfnf,0xff)
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
eg:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local g=eg:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g1=g:FilterSelect(tp,f,cc-1,cc-1,gc)
Duel.SetFusionMaterial(g1)
return
end
local sg=g:Filter(f,nil)
if chkf==PLAYER_NONE or sg:GetCount()==cc then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g1=sg:Select(tp,cc,cc,nil)
Duel.SetFusionMaterial(g1)
return
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g1=sg:FilterSelect(tp,Auxiliary.FConditionCheckF,1,1,nil,chkf)
if cc>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g2=sg:Select(tp,cc-1,cc-1,g1:GetFirst())
g1:Merge(g2)
end
Duel.SetFusionMaterial(g1)
end
function c28016193.damcon(e,tp,eg,ep,ev,re,r,rp)
local tc=eg:GetFirst()
return ep~=tp and tc:IsSetCard(0xe1) and tc:GetBattleTarget()~=nil and tc:GetBattleTarget():IsDefensePos()
......
......@@ -2,5 +2,152 @@
function c54401832.initial_effect(c)
--fusion material
c:EnableReviveLimit()
aux.AddFusionProcFunFunRep(c,aux.FilterBoolFunction(Card.IsFusionSetCard,0xe1),aux.FilterBoolFunction(Card.IsAttackBelow,3000),2,2,true)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(EFFECT_FUSION_MATERIAL)
e1:SetCondition(c54401832.fscon)
e1:SetOperation(c54401832.fsop)
c:RegisterEffect(e1)
end
function c54401832.filter1(c)
return c:IsFusionSetCard(0xe1)
end
function c54401832.filter2(c)
return c:IsAttackBelow(3000)
end
function c54401832.fscon(e,g,gc,chkfnf)
if g==nil then return true end
local f1=c54401832.filter1
local f2=c54401832.filter2
local minc=2
local chkf=bit.band(chkfnf,0xff)
local tp=e:GetHandlerPlayer()
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
g:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local mg=g:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
if not gc:IsCanBeFusionMaterial(e:GetHandler(),true) then return false end
if aux.FConditionFilterFFR(gc,f1,f2,mg,minc,chkf) then
return true
elseif f2(gc) then
mg:RemoveCard(gc)
if aux.FConditionCheckF(gc,chkf) then chkf=PLAYER_NONE end
return mg:IsExists(aux.FConditionFilterFFR,1,nil,f1,f2,mg,minc-1,chkf)
else return false end
end
return mg:IsExists(aux.FConditionFilterFFR,1,nil,f1,f2,mg,minc,chkf)
end
function c54401832.fsop(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf)
local f1=c54401832.filter1
local f2=c54401832.filter2
local chkf=bit.band(chkfnf,0xff)
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
eg:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local g=eg:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
local minct=2
local maxct=2
if gc then
g:RemoveCard(gc)
if aux.FConditionFilterFFR(gc,f1,f2,g,minct,chkf) then
if aux.FConditionCheckF(gc,chkf) then chkf=PLAYER_NONE end
local g1=Group.CreateGroup()
if f2(gc) then
local mg1=g:Filter(aux.FConditionFilterFFR,nil,f1,f2,g,minct-1,chkf)
if mg1:GetCount()>0 then
--if gc fits both, should allow an extra material that fits f1 but doesn't fit f2
local mg2=g:Filter(f2,nil)
mg1:Merge(mg2)
if chkf~=PLAYER_NONE then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg1:FilterSelect(tp,aux.FConditionCheckF,1,1,nil,chkf)
g1:Merge(sg)
mg1:Sub(sg)
minct=minct-1
maxct=maxct-1
if not f2(sg:GetFirst()) then
if mg1:GetCount()>0 and maxct>0 and (minct>0 or Duel.SelectYesNo(tp,93)) then
if minct<=0 then minct=1 end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg1:FilterSelect(tp,f2,minct,maxct,nil)
g1:Merge(sg)
end
Duel.SetFusionMaterial(g1)
return
end
end
if maxct>1 and (minct>1 or Duel.SelectYesNo(tp,93)) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg1:FilterSelect(tp,f2,minct-1,maxct-1,nil)
g1:Merge(sg)
mg1:Sub(sg)
local ct=sg:GetCount()
minct=minct-ct
maxct=maxct-ct
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg1:Select(tp,1,1,nil)
g1:Merge(sg)
mg1:Sub(sg)
minct=minct-1
maxct=maxct-1
if mg1:GetCount()>0 and maxct>0 and (minct>0 or Duel.SelectYesNo(tp,93)) then
if minct<=0 then minct=1 end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg1:FilterSelect(tp,f2,minct,maxct,nil)
g1:Merge(sg)
end
Duel.SetFusionMaterial(g1)
return
end
end
local mg=g:Filter(f2,nil)
if chkf~=PLAYER_NONE then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg:FilterSelect(tp,aux.FConditionCheckF,1,1,nil,chkf)
g1:Merge(sg)
mg:Sub(sg)
minct=minct-1
maxct=maxct-1
end
if mg:GetCount()>0 and maxct>0 and (minct>0 or Duel.SelectYesNo(tp,93)) then
if minct<=0 then minct=1 end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg:Select(tp,minct,maxct,nil)
g1:Merge(sg)
end
Duel.SetFusionMaterial(g1)
return
else
if aux.FConditionCheckF(gc,chkf) then chkf=PLAYER_NONE end
minct=minct-1
maxct=maxct-1
end
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g1=g:FilterSelect(tp,aux.FConditionFilterFFR,1,1,nil,f1,f2,g,minct,chkf)
local mg=g:Filter(f2,g1:GetFirst())
if chkf~=PLAYER_NONE and not aux.FConditionCheckF(g1:GetFirst(),chkf) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg:FilterSelect(tp,aux.FConditionCheckF,1,1,nil,chkf)
g1:Merge(sg)
mg:Sub(sg)
minct=minct-1
maxct=maxct-1
end
if mg:GetCount()>0 and maxct>0 and (minct>0 or Duel.SelectYesNo(tp,93)) then
if minct<=0 then minct=1 end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local sg=mg:Select(tp,minct,maxct,nil)
g1:Merge(sg)
end
Duel.SetFusionMaterial(g1)
end
--フルメタルフォーゼ・アルカエスト
function c77693536.initial_effect(c)
--fusion material
c:EnableReviveLimit()
local e0=Effect.CreateEffect(c)
e0:SetType(EFFECT_TYPE_SINGLE)
e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e0:SetCode(EFFECT_FUSION_MATERIAL)
e0:SetCondition(c77693536.fscon)
e0:SetOperation(c77693536.fsop)
c:RegisterEffect(e0)
--spsummon condition
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(EFFECT_SPSUMMON_CONDITION)
e1:SetValue(aux.fuslimit)
c:RegisterEffect(e1)
--equip
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(77693536,0))
e2:SetCategory(CATEGORY_EQUIP)
e2:SetType(EFFECT_TYPE_QUICK_O)
e2:SetHintTiming(0,0x1e0)
e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
e2:SetCode(EVENT_FREE_CHAIN)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1)
e2:SetCondition(c77693536.eqcon)
e2:SetTarget(c77693536.eqtg)
e2:SetOperation(c77693536.eqop)
c:RegisterEffect(e2)
--equip fusion material
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetCode(77693536)
e3:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e3:SetRange(LOCATION_MZONE)
c:RegisterEffect(e3)
end
function c77693536.filter1(c)
return c:IsFusionSetCard(0xe1)
end
function c77693536.filter2(c)
return c:IsType(TYPE_NORMAL)
end
function c77693536.fscon(e,g,gc,chkfnf)
if g==nil then return true end
local f1=c77693536.filter1
local f2=c77693536.filter2
local chkf=bit.band(chkfnf,0xff)
local tp=e:GetHandlerPlayer()
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
g:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local mg=g:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
if not gc:IsCanBeFusionMaterial(e:GetHandler(),true) then return false end
return (f1(gc) and mg:IsExists(f2,1,gc))
or (f2(gc) and mg:IsExists(f1,1,gc)) end
local g1=Group.CreateGroup() local g2=Group.CreateGroup() local fs=false
local tc=mg:GetFirst()
while tc do
if f1(tc) then g1:AddCard(tc) if aux.FConditionCheckF(tc,chkf) then fs=true end end
if f2(tc) then g2:AddCard(tc) if aux.FConditionCheckF(tc,chkf) then fs=true end end
tc=mg:GetNext()
end
if chkf~=PLAYER_NONE then
return fs and g1:IsExists(aux.FConditionFilterF2,1,nil,g2)
else return g1:IsExists(aux.FConditionFilterF2,1,nil,g2) end
end
function c77693536.fsop(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf)
local f1=c77693536.filter1
local f2=c77693536.filter2
local chkf=bit.band(chkfnf,0xff)
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
eg:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local g=eg:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
local sg=Group.CreateGroup()
if f1(gc) then sg:Merge(g:Filter(f2,gc)) end
if f2(gc) then sg:Merge(g:Filter(f1,gc)) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g1=sg:Select(tp,1,1,nil)
Duel.SetFusionMaterial(g1)
return
end
local sg=g:Filter(aux.FConditionFilterF2c,nil,f1,f2)
local g1=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
if chkf~=PLAYER_NONE then
g1=sg:FilterSelect(tp,aux.FConditionCheckF,1,1,nil,chkf)
else g1=sg:Select(tp,1,1,nil) end
local tc1=g1:GetFirst()
sg:RemoveCard(tc1)
local b1=f1(tc1)
local b2=f2(tc1)
if b1 and not b2 then sg:Remove(aux.FConditionFilterF2r,nil,f1,f2) end
if b2 and not b1 then sg:Remove(aux.FConditionFilterF2r,nil,f2,f1) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g2=sg:Select(tp,1,1,nil)
g1:Merge(g2)
Duel.SetFusionMaterial(g1)
end
function c77693536.eqcon(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetTurnPlayer()~=tp
end
function c77693536.eqfilter(c)
return c:IsFaceup() and c:IsType(TYPE_EFFECT) and c:IsAbleToChangeControler()
end
function c77693536.eqtg(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
if chkc then return chkc:IsLocation(LOCATION_MZONE) and c77693536.eqfilter(chkc) and chkc~=e:GetHandler() end
if chk==0 then return Duel.GetLocationCount(tp,LOCATION_SZONE)>0
and Duel.IsExistingTarget(c77693536.eqfilter,tp,LOCATION_MZONE,LOCATION_MZONE,1,e:GetHandler()) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP)
local g=Duel.SelectTarget(tp,c77693536.eqfilter,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,e:GetHandler())
Duel.SetOperationInfo(0,CATEGORY_EQUIP,g,1,0,0)
end
function c77693536.eqop(e,tp,eg,ep,ev,re,r,rp)
if Duel.GetLocationCount(tp,LOCATION_SZONE)<=0 then return end
local c=e:GetHandler()
local tc=Duel.GetFirstTarget()
if not (tc:IsRelateToEffect(e) and tc:IsFaceup() and tc:IsType(TYPE_EFFECT)) then return end
if c:IsFaceup() and c:IsRelateToEffect(e) then
local atk=tc:GetTextAttack()
if atk<0 then atk=0 end
if Duel.Equip(tp,tc,c)==0 then return end
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_EQUIP)
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_OWNER_RELATE)
e1:SetCode(EFFECT_UPDATE_DEFENSE)
e1:SetValue(atk)
e1:SetReset(RESET_EVENT+0x1fe0000)
tc:RegisterEffect(e1)
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e2:SetCode(EFFECT_EQUIP_LIMIT)
e2:SetValue(c77693536.eqlimit)
e2:SetReset(RESET_EVENT+0x1fe0000)
tc:RegisterEffect(e2)
else Duel.SendtoGrave(tc,REASON_EFFECT) end
end
function c77693536.eqlimit(e,c)
return e:GetOwner()==c
end
......@@ -2,5 +2,82 @@
function c81612598.initial_effect(c)
--fusion material
c:EnableReviveLimit()
aux.AddFusionProcFun2(c,aux.FilterBoolFunction(Card.IsFusionSetCard,0xe1),aux.FilterBoolFunction(Card.IsAttackBelow,2500),true)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(EFFECT_FUSION_MATERIAL)
e1:SetCondition(c81612598.fscon)
e1:SetOperation(c81612598.fsop)
c:RegisterEffect(e1)
end
function c81612598.filter1(c)
return c:IsFusionSetCard(0xe1)
end
function c81612598.filter2(c)
return c:IsAttackBelow(2500)
end
function c81612598.fscon(e,g,gc,chkfnf)
if g==nil then return true end
local f1=c81612598.filter1
local f2=c81612598.filter2
local chkf=bit.band(chkfnf,0xff)
local tp=e:GetHandlerPlayer()
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
g:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local mg=g:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
if not gc:IsCanBeFusionMaterial(e:GetHandler(),true) then return false end
return (f1(gc) and mg:IsExists(f2,1,gc))
or (f2(gc) and mg:IsExists(f1,1,gc)) end
local g1=Group.CreateGroup() local g2=Group.CreateGroup() local fs=false
local tc=mg:GetFirst()
while tc do
if f1(tc) then g1:AddCard(tc) if aux.FConditionCheckF(tc,chkf) then fs=true end end
if f2(tc) then g2:AddCard(tc) if aux.FConditionCheckF(tc,chkf) then fs=true end end
tc=mg:GetNext()
end
if chkf~=PLAYER_NONE then
return fs and g1:IsExists(aux.FConditionFilterF2,1,nil,g2)
else return g1:IsExists(aux.FConditionFilterF2,1,nil,g2) end
end
function c81612598.fsop(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf)
local f1=c81612598.filter1
local f2=c81612598.filter2
local chkf=bit.band(chkfnf,0xff)
local fg=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_MZONE,0,nil,77693536)
local fc=fg:GetFirst()
while fc do
eg:Merge(fc:GetEquipGroup())
fc=fg:GetNext()
end
local g=eg:Filter(Card.IsCanBeFusionMaterial,nil,e:GetHandler(),true)
if gc then
local sg=Group.CreateGroup()
if f1(gc) then sg:Merge(g:Filter(f2,gc)) end
if f2(gc) then sg:Merge(g:Filter(f1,gc)) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g1=sg:Select(tp,1,1,nil)
Duel.SetFusionMaterial(g1)
return
end
local sg=g:Filter(aux.FConditionFilterF2c,nil,f1,f2)
local g1=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
if chkf~=PLAYER_NONE then
g1=sg:FilterSelect(tp,aux.FConditionCheckF,1,1,nil,chkf)
else g1=sg:Select(tp,1,1,nil) end
local tc1=g1:GetFirst()
sg:RemoveCard(tc1)
local b1=f1(tc1)
local b2=f2(tc1)
if b1 and not b2 then sg:Remove(aux.FConditionFilterF2r,nil,f1,f2) end
if b2 and not b1 then sg:Remove(aux.FConditionFilterF2r,nil,f2,f1) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL)
local g2=sg:Select(tp,1,1,nil)
g1:Merge(g2)
Duel.SetFusionMaterial(g1)
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment