From 7f18d8a6cb8c77c30ca94547746b75c4e181623c Mon Sep 17 00:00:00 2001 From: Edoardo Lolletti Date: Mon, 17 Aug 2026 03:59:51 +0200 Subject: [PATCH 1/7] use chkf when checking for available zones in fusion proc don't use tp as target player --- proc_fusion.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/proc_fusion.lua b/proc_fusion.lua index c5371df0aa..6f920305e2 100644 --- a/proc_fusion.lua +++ b/proc_fusion.lua @@ -216,7 +216,7 @@ Fusion.CheckAdditional=nil function Fusion.CheckMixGoal(tp,sg,fc,sub,sub2,contact,sumtype,chkf,...) local g=Group.CreateGroup() return sg:IsExists(Fusion.CheckMix,1,nil,sg,g,fc,sub,sub2,contact,sumtype,tp,...) and - (chkf==PLAYER_NONE or (fc:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(tp,tp,sg,fc) or Duel.GetMZoneCount(tp,sg,tp))>0) + (chkf==PLAYER_NONE or (fc:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(chkf,tp,sg,fc) or Duel.GetMZoneCount(chkf,sg,tp))>0) and (not Fusion.CheckAdditional or Fusion.CheckAdditional(tp,sg,fc,sumtype,tp)) end function Fusion.SelectMix(c,tp,mg,sg,mustg,fc,sub,sub2,contact,sumtype,chkf,...) @@ -427,7 +427,7 @@ end function Fusion.CheckMixRepGoal(tp,sg,mustg,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) if #sgmaxc+#{...} then return false end local g=Group.CreateGroup() - return Fusion.CheckMixRep(sg,g,fc,sub,sub2,contact,sumtype,chkf,tp,fun1,minc,maxc,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,sg,fc)>0) + return Fusion.CheckMixRep(sg,g,fc,sub,sub2,contact,sumtype,chkf,tp,fun1,minc,maxc,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,sg,fc)>0) and (not Fusion.CheckAdditional or Fusion.CheckAdditional(tp,sg,fc,sumtype,tp)) end function Fusion.CheckMixRepTemplate(c,cond,tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) @@ -465,7 +465,7 @@ function Fusion.CheckMixRepSelected(c,...) end function Fusion.CheckSelectMixRep(tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) if Fusion.CheckAdditional and not Fusion.CheckAdditional(tp,g,fc,sumtype,tp) then return false end - if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,g,fc)>0 then + if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc)>0 then if minc<=0 and #{...}==0 and g:Includes(mustg) then return true end return mg:IsExists(Fusion.CheckSelectMixRepAll,1,g,tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) else @@ -754,7 +754,7 @@ function Fusion.CheckMixRepUnfixSelected(c,...) end function Fusion.CheckSelectMixRepUnfix(tp,mg,sg,mustg,g,fc,sub,sub2,chkf,minc,maxc,...) if Fusion.CheckAdditional and not Fusion.CheckAdditional(tp,g,fc,sumtype,tp) then return false end - if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,g,fc)>0 then + if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc)>0 then if minc<=0 and g:Includes(mustg) then return true end return mg:IsExists(Fusion.CheckSelectMixRepUnfixAll,1,g,tp,mg,sg,mustg,g,fc,sub,sub2,chkf,minc,maxc,...) else From 8a77e57ecd08c978bedb55be1be0078ea32d55da Mon Sep 17 00:00:00 2001 From: Edoardo Lolletti Date: Mon, 17 Aug 2026 04:03:07 +0200 Subject: [PATCH 2/7] add Fusion.UseZone --- proc_fusion.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/proc_fusion.lua b/proc_fusion.lua index 6f920305e2..7dd35c1708 100644 --- a/proc_fusion.lua +++ b/proc_fusion.lua @@ -212,11 +212,12 @@ Fusion.CheckExact=nil Fusion.CheckMin=nil Fusion.CheckMax=nil Fusion.CheckAdditional=nil +Fusion.UseZone=nil --if sg1 is subset of sg2 then not Fusion.CheckAdditional(tp,sg1,fc) -> not Fusion.CheckAdditional(tp,sg2,fc) function Fusion.CheckMixGoal(tp,sg,fc,sub,sub2,contact,sumtype,chkf,...) local g=Group.CreateGroup() return sg:IsExists(Fusion.CheckMix,1,nil,sg,g,fc,sub,sub2,contact,sumtype,tp,...) and - (chkf==PLAYER_NONE or (fc:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(chkf,tp,sg,fc) or Duel.GetMZoneCount(chkf,sg,tp))>0) + (chkf==PLAYER_NONE or (fc:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(chkf,tp,sg,fc,Fusion.UseZone) or Duel.GetMZoneCount(chkf,sg,tp))>0) and (not Fusion.CheckAdditional or Fusion.CheckAdditional(tp,sg,fc,sumtype,tp)) end function Fusion.SelectMix(c,tp,mg,sg,mustg,fc,sub,sub2,contact,sumtype,chkf,...) @@ -427,7 +428,7 @@ end function Fusion.CheckMixRepGoal(tp,sg,mustg,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) if #sgmaxc+#{...} then return false end local g=Group.CreateGroup() - return Fusion.CheckMixRep(sg,g,fc,sub,sub2,contact,sumtype,chkf,tp,fun1,minc,maxc,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,sg,fc)>0) + return Fusion.CheckMixRep(sg,g,fc,sub,sub2,contact,sumtype,chkf,tp,fun1,minc,maxc,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,sg,fc,Fusion.UseZone)>0) and (not Fusion.CheckAdditional or Fusion.CheckAdditional(tp,sg,fc,sumtype,tp)) end function Fusion.CheckMixRepTemplate(c,cond,tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) @@ -465,7 +466,7 @@ function Fusion.CheckMixRepSelected(c,...) end function Fusion.CheckSelectMixRep(tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) if Fusion.CheckAdditional and not Fusion.CheckAdditional(tp,g,fc,sumtype,tp) then return false end - if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc)>0 then + if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc,Fusion.UseZone)>0 then if minc<=0 and #{...}==0 and g:Includes(mustg) then return true end return mg:IsExists(Fusion.CheckSelectMixRepAll,1,g,tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) else @@ -754,7 +755,7 @@ function Fusion.CheckMixRepUnfixSelected(c,...) end function Fusion.CheckSelectMixRepUnfix(tp,mg,sg,mustg,g,fc,sub,sub2,chkf,minc,maxc,...) if Fusion.CheckAdditional and not Fusion.CheckAdditional(tp,g,fc,sumtype,tp) then return false end - if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc)>0 then + if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc,Fusion.UseZone)>0 then if minc<=0 and g:Includes(mustg) then return true end return mg:IsExists(Fusion.CheckSelectMixRepUnfixAll,1,g,tp,mg,sg,mustg,g,fc,sub,sub2,chkf,minc,maxc,...) else From b6c43a6f53ef810530a628c5eea5c7585b4fbdb1 Mon Sep 17 00:00:00 2001 From: Edoardo Lolletti Date: Mon, 17 Aug 2026 04:03:36 +0200 Subject: [PATCH 3/7] support passing the target player and zone to contact fusion procedure requires core update --- proc_fusion.lua | 52 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/proc_fusion.lua b/proc_fusion.lua index 7dd35c1708..72cb29e322 100644 --- a/proc_fusion.lua +++ b/proc_fusion.lua @@ -865,8 +865,8 @@ function Fusion.SelectMixRepUnfix(c,tp,mg,sg,mustg,fc,sub,sub2,minc,maxc,chkf,.. return res end - -function Fusion.CreateContactProc(c,group,op,sumcon,condition,sumtype,desc,cannotBeLizard) +Fusion.CreateContactProc = aux.FunctionWithNamedArgs( +function(c,group,op,sumcon,condition,sumtype,desc,cannotBeLizard,summonToPlayer,summonToZones) if c:IsStatus(STATUS_COPYING_EFFECT) then return nil end local mt=c.__index local t={} @@ -883,13 +883,23 @@ function Fusion.CreateContactProc(c,group,op,sumcon,condition,sumtype,desc,canno e1:SetDescription(desc) end e1:SetCode(EFFECT_SPSUMMON_PROC) - e1:SetProperty(EFFECT_FLAG_UNCOPYABLE) + local effectFlag=EFFECT_FLAG_UNCOPYABLE e1:SetRange(LOCATION_EXTRA) - if sumtype then + if summonToPlayer then + e1:SetTargetRange(POS_FACEUP,summonToPlayer) + effectFlag=effectFlag|EFFECT_FLAG_SPSUM_PARAM + end + e1:SetProperty(effectFlag) + if summonToZones then + sumtype=sumtype or 0 + e1:SetValue(function(e,c) + return sumtype,ZONES_MMZ,true + end) + elseif sumtype then e1:SetValue(sumtype) end - e1:SetCondition(Fusion.ContactCon(group,condition)) - e1:SetTarget(Fusion.ContactTg(group)) + e1:SetCondition(Fusion.ContactCon(group,condition,summonToPlayer,summonToZones)) + e1:SetTarget(Fusion.ContactTg(group,summonToPlayer,summonToZones)) e1:SetOperation(Fusion.ContactOp(op)) local e2=nil if sumcon then @@ -907,27 +917,36 @@ function Fusion.CreateContactProc(c,group,op,sumcon,condition,sumtype,desc,canno Auxiliary.addLizardCheck(c) end return e1,e2 -end -function Fusion.AddContactProc(c,group,op,sumcon,condition,sumtype,desc,cannotBeLizard) - local e1,e2=Fusion.CreateContactProc(c,group,op,sumcon,condition,sumtype,desc,cannotBeLizard) +end,"handler","materialFilter","materialOperation","sumcon","condition","sumtype","desc","cannotBeLizard","summonToPlayer","summonToZones") + +function Fusion.AddContactProc(c,...) + local tab=type(c)=="table" + local e1,e2=Fusion.CreateContactProc(tab and c or c,...) + c=(tab and c["handler"] or c) if e1 then c:RegisterEffect(e1) end if e2 then c:RegisterEffect(e2) end end -function Fusion.ContactCon(f,fcon) +function Fusion.ContactCon(f,fcon,summonToPlayer,summonToZones) return function(e,c) if c==nil then return true end local m=f(e:GetHandlerPlayer()) - local chkf=c:GetControler()|FUSPROC_CONTACTFUS - return c:IsFacedown() and c:CheckFusionMaterial(m,nil,chkf) and (not fcon or fcon(e:GetHandlerPlayer())) + Fusion.UseZone=summonToZones + local chkp=summonToPlayer==1 and (1-c:GetControler()) or c:GetControler() + local chkf=chkp|FUSPROC_CONTACTFUS + local res=c:IsFacedown() and c:CheckFusionMaterial(m,nil,chkf) and (not fcon or fcon(e:GetHandlerPlayer())) + Fusion.UseZone=nil + return res end end -function Fusion.ContactTg(f) +function Fusion.ContactTg(f,summonToPlayer,summonToZones) return function(e,tp,eg,ep,ev,re,r,rp) local m=f(tp) - local chkf=tp|FUSPROC_CONTACTFUS + Fusion.UseZone=summonToZones + local chkp=summonToPlayer==1 and (1-tp) or tp + local chkf=chkp|FUSPROC_CONTACTFUS local sg=Duel.SelectFusionMaterial(tp,e:GetHandler(),m,nil,chkf) + Fusion.UseZone=nil if #sg>0 then - sg:KeepAlive() e:SetLabelObject(sg) return true else return false end @@ -938,7 +957,6 @@ function Fusion.ContactOp(f) local g=e:GetLabelObject() c:SetMaterial(g) f(g,tp,c) - g:DeleteGroup() end end --Fusion monster, name + name @@ -1042,4 +1060,4 @@ function Fusion.UnionFusOp(g,tp) Duel.SendtoDeck(g,nil,SEQ_DECKBOTTOM,REASON_COST+REASON_MATERIAL) local og=Duel.GetOperatedGroup():Filter(Card.IsLocation,nil,LOCATION_DECK) if #og>1 then Duel.SortDeckbottom(tp,tp,#og) end -end \ No newline at end of file +end From 50963fd7953f327f33da704da833c8534d8234e0 Mon Sep 17 00:00:00 2001 From: Edoardo Lolletti Date: Mon, 17 Aug 2026 04:03:52 +0200 Subject: [PATCH 4/7] Use updated proc The Sun God's Steelcage - Lava Golem --- pre-release/c101403031.lua | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/pre-release/c101403031.lua b/pre-release/c101403031.lua index 81a61472ec..e180438bcf 100644 --- a/pre-release/c101403031.lua +++ b/pre-release/c101403031.lua @@ -15,13 +15,7 @@ function s.initial_effect(c) c:RegisterEffect(e0a) --Must be either Fusion Summoned, or Special Summoned (from your Extra Deck) to your opponent's Main Monster Zone by sending the above cards from either field to the GY, but if you Special Summon this card with the second method, you can only Special Summon once for the rest of this turn c:AddMustBeFusionSummoned() - local e0b=Fusion.CreateContactProc(c,s.contactfil,s.contactop,nil,nil,1,aux.Stringid(id,0),false) - e0b:SetProperty(EFFECT_FLAG_SPSUM_PARAM+EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) - e0b:SetTargetRange(POS_FACEUP,1) - e0b:SetValue(function(e,c) - return 1,ZONES_MMZ - end) - c:RegisterEffect(e0b) + Fusion.AddContactProc({handler=c,materialFilter=s.contactfil,materialOperation=s.contactop,sumtype=1,desc=aux.Stringid(id,0),summonToPlayer=1,summonToZones=ZONES_MMZ}) --You can only Special Summon "The Sun God's Steelcage - Lava Golem" once per turn this way, no matter which method you use local e0c=Effect.CreateEffect(c) e0c:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS) @@ -96,4 +90,4 @@ end function s.damop(e,tp,eg,ep,ev,re,r,rp) local p,d=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER,CHAININFO_TARGET_PARAM) Duel.Damage(p,d,REASON_EFFECT) -end \ No newline at end of file +end From f4438af11b8390cf2f33ab2c20775b6cb751a30b Mon Sep 17 00:00:00 2001 From: Edoardo Lolletti Date: Mon, 17 Aug 2026 17:40:26 +0200 Subject: [PATCH 5/7] grab the forced zone from chkfnf flag --- proc_fusion.lua | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/proc_fusion.lua b/proc_fusion.lua index 72cb29e322..d7229b6e82 100644 --- a/proc_fusion.lua +++ b/proc_fusion.lua @@ -6,6 +6,13 @@ if not Fusion then Fusion = aux.FusionProcedure end +local ForcedUseZone=nil +local function GetForcedZone(chkfnf) + local zone=(chkfnf>>40)&0xff + if zone==0 then zone=0xff end + return zone +end + --The current reason effect that corresponds to the effect that is performing the fusion summon Fusion.SummonEffect=nil local function returnAndClearSummonEffect(value) @@ -98,6 +105,7 @@ function Fusion.ConditionMix(insf,sub,...) end Fusion.SummonEffect=summonEff local chkf=chkfnf&0xff + ForcedUseZone=GetForcedZone(chkfnf) local notfusion=(chkfnf&FUSPROC_NOTFUSION)~=0 local contact=(chkfnf&FUSPROC_CONTACTFUS)~=0 local listedmats=(chkfnf&FUSPROC_LISTEDMATS)~=0 @@ -130,6 +138,7 @@ function Fusion.OperationMix(insf,sub,...) return function(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf,summonEff) Fusion.SummonEffect=summonEff local chkf=chkfnf&0xff + ForcedUseZone=GetForcedZone(chkfnf) local c=e:GetHandler() local tp=c:GetControler() local notfusion=(chkfnf&FUSPROC_NOTFUSION)~=0 @@ -212,12 +221,11 @@ Fusion.CheckExact=nil Fusion.CheckMin=nil Fusion.CheckMax=nil Fusion.CheckAdditional=nil -Fusion.UseZone=nil --if sg1 is subset of sg2 then not Fusion.CheckAdditional(tp,sg1,fc) -> not Fusion.CheckAdditional(tp,sg2,fc) function Fusion.CheckMixGoal(tp,sg,fc,sub,sub2,contact,sumtype,chkf,...) local g=Group.CreateGroup() return sg:IsExists(Fusion.CheckMix,1,nil,sg,g,fc,sub,sub2,contact,sumtype,tp,...) and - (chkf==PLAYER_NONE or (fc:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(chkf,tp,sg,fc,Fusion.UseZone) or Duel.GetMZoneCount(chkf,sg,tp))>0) + (chkf==PLAYER_NONE or (fc:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(chkf,tp,sg,fc,ForcedUseZone) or Duel.GetMZoneCount(chkf,sg,tp))>0) and (not Fusion.CheckAdditional or Fusion.CheckAdditional(tp,sg,fc,sumtype,tp)) end function Fusion.SelectMix(c,tp,mg,sg,mustg,fc,sub,sub2,contact,sumtype,chkf,...) @@ -322,6 +330,7 @@ function Fusion.ConditionMixRep(insf,sub,fun1,minc,maxc,...) end Fusion.SummonEffect=summonEff local chkf=chkfnf&0xff + ForcedUseZone=GetForcedZone(chkfnf) local notfusion=(chkfnf&FUSPROC_NOTFUSION)~=0 local contact=(chkfnf&FUSPROC_CONTACTFUS)~=0 local listedmats=(chkfnf&FUSPROC_LISTEDMATS)~=0 @@ -354,6 +363,7 @@ function Fusion.OperationMixRep(insf,sub,fun1,minc,maxc,...) return function(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf,summonEff) Fusion.SummonEffect=summonEff local chkf=chkfnf&0xff + ForcedUseZone=GetForcedZone(chkfnf) local c=e:GetHandler() local tp=c:GetControler() local notfusion=(chkfnf&FUSPROC_NOTFUSION)~=0 @@ -428,7 +438,7 @@ end function Fusion.CheckMixRepGoal(tp,sg,mustg,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) if #sgmaxc+#{...} then return false end local g=Group.CreateGroup() - return Fusion.CheckMixRep(sg,g,fc,sub,sub2,contact,sumtype,chkf,tp,fun1,minc,maxc,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,sg,fc,Fusion.UseZone)>0) + return Fusion.CheckMixRep(sg,g,fc,sub,sub2,contact,sumtype,chkf,tp,fun1,minc,maxc,...) and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,sg,fc,ForcedUseZone)>0) and (not Fusion.CheckAdditional or Fusion.CheckAdditional(tp,sg,fc,sumtype,tp)) end function Fusion.CheckMixRepTemplate(c,cond,tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) @@ -466,7 +476,7 @@ function Fusion.CheckMixRepSelected(c,...) end function Fusion.CheckSelectMixRep(tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) if Fusion.CheckAdditional and not Fusion.CheckAdditional(tp,g,fc,sumtype,tp) then return false end - if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc,Fusion.UseZone)>0 then + if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc,ForcedUseZone)>0 then if minc<=0 and #{...}==0 and g:Includes(mustg) then return true end return mg:IsExists(Fusion.CheckSelectMixRepAll,1,g,tp,mg,sg,mustg,g,fc,sub,sub2,contact,sumtype,chkf,fun1,minc,maxc,...) else @@ -615,6 +625,7 @@ function Fusion.ConditionMixRepUnfix(insf,sub,minc,maxc,...) end Fusion.SummonEffect=summonEff local chkf=chkfnf&0xff + ForcedUseZone=GetForcedZone(chkfnf) local c=e:GetHandler() local tp=c:GetControler() local notfusion=(chkfnf&FUSPROC_NOTFUSION)~=0 @@ -646,6 +657,7 @@ function Fusion.OperationMixRepUnfix(insf,sub,minc,maxc,...) return function(e,tp,eg,ep,ev,re,r,rp,gc,chkfnf,summonEff) Fusion.SummonEffect=summonEff local chkf=chkfnf&0xff + ForcedUseZone=GetForcedZone(chkfnf) local c=e:GetHandler() local tp=c:GetControler() local notfusion=(chkfnf&FUSPROC_NOTFUSION)~=0 @@ -755,7 +767,7 @@ function Fusion.CheckMixRepUnfixSelected(c,...) end function Fusion.CheckSelectMixRepUnfix(tp,mg,sg,mustg,g,fc,sub,sub2,chkf,minc,maxc,...) if Fusion.CheckAdditional and not Fusion.CheckAdditional(tp,g,fc,sumtype,tp) then return false end - if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc,Fusion.UseZone)>0 then + if chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(chkf,tp,g,fc,ForcedUseZone)>0 then if minc<=0 and g:Includes(mustg) then return true end return mg:IsExists(Fusion.CheckSelectMixRepUnfixAll,1,g,tp,mg,sg,mustg,g,fc,sub,sub2,chkf,minc,maxc,...) else @@ -930,22 +942,18 @@ function Fusion.ContactCon(f,fcon,summonToPlayer,summonToZones) return function(e,c) if c==nil then return true end local m=f(e:GetHandlerPlayer()) - Fusion.UseZone=summonToZones local chkp=summonToPlayer==1 and (1-c:GetControler()) or c:GetControler() - local chkf=chkp|FUSPROC_CONTACTFUS + local chkf=chkp|FUSPROC_CONTACTFUS|((summonToZones and summonToZones or 0)<<40) local res=c:IsFacedown() and c:CheckFusionMaterial(m,nil,chkf) and (not fcon or fcon(e:GetHandlerPlayer())) - Fusion.UseZone=nil return res end end function Fusion.ContactTg(f,summonToPlayer,summonToZones) return function(e,tp,eg,ep,ev,re,r,rp) local m=f(tp) - Fusion.UseZone=summonToZones local chkp=summonToPlayer==1 and (1-tp) or tp - local chkf=chkp|FUSPROC_CONTACTFUS + local chkf=chkp|FUSPROC_CONTACTFUS|((summonToZones and summonToZones or 0)<<40) local sg=Duel.SelectFusionMaterial(tp,e:GetHandler(),m,nil,chkf) - Fusion.UseZone=nil if #sg>0 then e:SetLabelObject(sg) return true From 8e80b69727b44c6bf5a6c1a96072434f2efd9fbd Mon Sep 17 00:00:00 2001 From: pyrQ <30827955+pyrQ@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:19:06 +0300 Subject: [PATCH 6/7] Update proc_fusion.lua --- proc_fusion.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proc_fusion.lua b/proc_fusion.lua index d7229b6e82..82db471e5b 100644 --- a/proc_fusion.lua +++ b/proc_fusion.lua @@ -905,7 +905,7 @@ function(c,group,op,sumcon,condition,sumtype,desc,cannotBeLizard,summonToPlayer, if summonToZones then sumtype=sumtype or 0 e1:SetValue(function(e,c) - return sumtype,ZONES_MMZ,true + return sumtype,summonToZones,true end) elseif sumtype then e1:SetValue(sumtype) From 9c1ab85ceeb740bd88de905d2550878ab7cf1ecb Mon Sep 17 00:00:00 2001 From: pyrQ <30827955+pyrQ@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:34:50 +0300 Subject: [PATCH 7/7] Update c101403031.lua --- pre-release/c101403031.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pre-release/c101403031.lua b/pre-release/c101403031.lua index e180438bcf..9587238c82 100644 --- a/pre-release/c101403031.lua +++ b/pre-release/c101403031.lua @@ -15,7 +15,15 @@ function s.initial_effect(c) c:RegisterEffect(e0a) --Must be either Fusion Summoned, or Special Summoned (from your Extra Deck) to your opponent's Main Monster Zone by sending the above cards from either field to the GY, but if you Special Summon this card with the second method, you can only Special Summon once for the rest of this turn c:AddMustBeFusionSummoned() - Fusion.AddContactProc({handler=c,materialFilter=s.contactfil,materialOperation=s.contactop,sumtype=1,desc=aux.Stringid(id,0),summonToPlayer=1,summonToZones=ZONES_MMZ}) + Fusion.AddContactProc({ + handler=c, + materialFilter=s.contactfil, + materialOperation=s.contactop, + sumtype=1, + desc=aux.Stringid(id,0), + summonToPlayer=1, + summonToZones=ZONES_MMZ + }) --You can only Special Summon "The Sun God's Steelcage - Lava Golem" once per turn this way, no matter which method you use local e0c=Effect.CreateEffect(c) e0c:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)