Commit 14eb7b05 authored by Vury Leo's avatar Vury Leo

remove hack

parent c6ca93c1
--ジェノミックス・ファイター
function c42155488.initial_effect(c)
local s,id,o=GetID()
function s.initial_effect(c)
--summon with no tribute
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(42155488,0))
e1:SetDescription(aux.Stringid(id,0))
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_SUMMON_PROC)
e1:SetCondition(c42155488.ntcon)
e1:SetOperation(c42155488.ntop)
e1:SetCondition(s.ntcon)
e1:SetOperation(s.ntop)
c:RegisterEffect(e1)
--declear
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(42155488,1))
e2:SetDescription(aux.Stringid(id,1))
e2:SetType(EFFECT_TYPE_IGNITION)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1)
e2:SetTarget(c42155488.dectg)
e2:SetOperation(c42155488.decop)
e2:SetTarget(s.dectg)
e2:SetOperation(s.decop)
c:RegisterEffect(e2)
end
function c42155488.ntcon(e,c,minc)
function s.ntcon(e,c,minc)
if c==nil then return true end
return minc==0 and c:IsLevelAbove(5) and Duel.GetLocationCount(c:GetControler(),LOCATION_MZONE)>0
end
function c42155488.ntop(e,tp,eg,ep,ev,re,r,rp,c)
function s.ntop(e,tp,eg,ep,ev,re,r,rp,c)
--change base attack
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
......@@ -35,7 +36,7 @@ function c42155488.ntop(e,tp,eg,ep,ev,re,r,rp,c)
e2:SetValue(3)
c:RegisterEffect(e2)
end
function c42155488.dectg(e,tp,eg,ep,ev,re,r,rp,chk)
function s.dectg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RACE)
local rc=Duel.AnnounceRace(tp,1,RACE_ALL)
......@@ -45,7 +46,7 @@ function c42155488.dectg(e,tp,eg,ep,ev,re,r,rp,chk)
e1:SetCode(EFFECT_CANNOT_SUMMON)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetTargetRange(1,0)
e1:SetTarget(c42155488.sumlimit)
e1:SetTarget(s.sumlimit)
e1:SetReset(RESET_PHASE+PHASE_END)
e1:SetLabel(rc)
Duel.RegisterEffect(e1,tp)
......@@ -53,10 +54,10 @@ function c42155488.dectg(e,tp,eg,ep,ev,re,r,rp,chk)
e2:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
Duel.RegisterEffect(e2,tp)
end
function c42155488.sumlimit(e,c)
function s.sumlimit(e,c)
return c:GetRace()~=e:GetLabel()
end
function c42155488.decop(e,tp,eg,ep,ev,re,r,rp)
function s.decop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
if c:IsRelateToEffect(e) and c:IsFaceup() then
local rc=e:GetLabel()
......@@ -65,12 +66,12 @@ function c42155488.decop(e,tp,eg,ep,ev,re,r,rp)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_SYNCHRO_CHECK)
e1:SetValue(c42155488.syncheck)
e1:SetValue(s.syncheck)
e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
e1:SetLabel(rc)
c:RegisterEffect(e1)
end
end
function c42155488.syncheck(e,c)
function s.syncheck(e,c)
c:AssumeProperty(ASSUME_RACE,e:GetLabel())
end
--たつのこ
function c55863245.initial_effect(c)
local s,id,o=GetID()
function s.initial_effect(c)
--synchro summon
aux.AddSynchroProcedure(c,nil,aux.NonTuner(nil),1)
Synchro.AddSynchroProcedure(c)
......@@ -9,10 +10,10 @@ function c55863245.initial_effect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_SYNCHRO_MATERIAL_CUSTOM)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCondition(c55863245.syncon)
e1:SetTarget(c55863245.syntg)
e1:SetCondition(s.syncon)
e1:SetTarget(s.syntg)
e1:SetValue(1)
e1:SetOperation(c55863245.synop)
e1:SetOperation(s.synop)
c:RegisterEffect(e1)
--immune
local e2=Effect.CreateEffect(c)
......@@ -20,39 +21,46 @@ function c55863245.initial_effect(c)
e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e2:SetRange(LOCATION_MZONE)
e2:SetCode(EFFECT_IMMUNE_EFFECT)
e2:SetValue(c55863245.efilter)
e2:SetValue(s.efilter)
c:RegisterEffect(e2)
--hand synchro
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SPSUM_PARAM)
e3:SetCondition(c55863245.syncon)
e3:SetCondition(s.syncon)
e3:SetCode(EFFECT_HAND_SYNCHRO)
e3:SetTargetRange(0,1)
c:RegisterEffect(e3)
--Tatsunoko synchro mark
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SPSUM_PARAM)
e4:SetCondition(s.syncon)
e4:SetCode(id)
c:RegisterEffect(e4)
end
function c55863245.synfilter(c,syncard,tuner,f)
function s.synfilter(c,syncard,tuner,f)
return c:IsFaceupEx() and c:IsCanBeSynchroMaterial(syncard,tuner) and (f==nil or f(c,syncard))
end
function c55863245.syncheck(c,g,mg,tp,lv,syncard,minc,maxc)
function s.syncheck(c,g,mg,tp,lv,syncard,minc,maxc)
g:AddCard(c)
local ct=g:GetCount()
local res=c55863245.syngoal(g,tp,lv,syncard,minc,ct)
or (ct<maxc and mg:IsExists(c55863245.syncheck,1,g,g,mg,tp,lv,syncard,minc,maxc))
local res=s.syngoal(g,tp,lv,syncard,minc,ct)
or (ct<maxc and mg:IsExists(s.syncheck,1,g,g,mg,tp,lv,syncard,minc,maxc))
g:RemoveCard(c)
return res
end
function c55863245.syngoal(g,tp,lv,syncard,minc,ct)
function s.syngoal(g,tp,lv,syncard,minc,ct)
return ct>=minc
and g:CheckWithSumEqual(Card.GetSynchroLevel,lv,ct,ct,syncard)
and Duel.GetLocationCountFromEx(tp,tp,g,syncard)>0
and g:FilterCount(Card.IsLocation,nil,LOCATION_HAND)<=1
and aux.MustMaterialCheck(g,tp,EFFECT_MUST_BE_SMATERIAL)
end
function c55863245.syncon(e)
function s.syncon(e)
return e:GetHandler():IsSummonType(SUMMON_TYPE_SYNCHRO)
end
function c55863245.syntg(e,syncard,f,min,max)
function s.syntg(e,syncard,f,min,max)
local minc=min+1
local maxc=max+1
local c=e:GetHandler()
......@@ -60,25 +68,25 @@ function c55863245.syntg(e,syncard,f,min,max)
local lv=syncard:GetLevel()
if lv<=c:GetLevel() then return false end
local g=Group.FromCards(c)
local mg=Duel.GetSynchroMaterial(tp):Filter(c55863245.synfilter,c,syncard,c,f)
local exg=Duel.GetMatchingGroup(c55863245.synfilter,tp,LOCATION_HAND,0,c,syncard,c,f)
local mg=Duel.GetSynchroMaterial(tp):Filter(s.synfilter,c,syncard,c,f)
local exg=Duel.GetMatchingGroup(s.synfilter,tp,LOCATION_HAND,0,c,syncard,c,f)
mg:Merge(exg)
return mg:IsExists(c55863245.syncheck,1,g,g,mg,tp,lv,syncard,minc,maxc)
return mg:IsExists(s.syncheck,1,g,g,mg,tp,lv,syncard,minc,maxc)
end
function c55863245.synop(e,tp,eg,ep,ev,re,r,rp,syncard,f,min,max)
function s.synop(e,tp,eg,ep,ev,re,r,rp,syncard,f,min,max)
local minc=min+1
local maxc=max+1
local c=e:GetHandler()
local lv=syncard:GetLevel()
local g=Group.FromCards(c)
local mg=Duel.GetSynchroMaterial(tp):Filter(c55863245.synfilter,c,syncard,c,f)
local exg=Duel.GetMatchingGroup(c55863245.synfilter,tp,LOCATION_HAND,0,c,syncard,c,f)
local mg=Duel.GetSynchroMaterial(tp):Filter(s.synfilter,c,syncard,c,f)
local exg=Duel.GetMatchingGroup(s.synfilter,tp,LOCATION_HAND,0,c,syncard,c,f)
mg:Merge(exg)
for i=1,maxc do
local cg=mg:Filter(c55863245.syncheck,g,g,mg,tp,lv,syncard,minc,maxc)
local cg=mg:Filter(s.syncheck,g,g,mg,tp,lv,syncard,minc,maxc)
if cg:GetCount()==0 then break end
local minct=1
if c55863245.syngoal(g,tp,lv,syncard,minc,i) then
if s.syngoal(g,tp,lv,syncard,minc,i) then
minct=0
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
......@@ -88,6 +96,6 @@ function c55863245.synop(e,tp,eg,ep,ev,re,r,rp,syncard,f,min,max)
end
Duel.SetSynchroMaterial(g)
end
function c55863245.efilter(e,te)
function s.efilter(e,te)
return te:IsActiveType(TYPE_MONSTER) and te:GetOwner()~=e:GetOwner()
end
--モノ・シンクロン
function c56897896.initial_effect(c)
local s,id,o=GetID()
function s.initial_effect(c)
--synchro custom
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_TUNER_MATERIAL_LIMIT)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetTarget(c56897896.synlimit)
e1:SetTarget(s.synlimit)
c:RegisterEffect(e1)
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetCode(EFFECT_SYNCHRO_CHECK)
e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e2:SetValue(c56897896.syncheck)
e2:SetValue(s.syncheck)
c:RegisterEffect(e2)
--- mono effect
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetCode(id)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
c:RegisterEffect(e3)
end
function c56897896.synlimit(e,c)
function s.synlimit(e,c)
return c:IsLevelBelow(4) and c:IsRace(RACE_WARRIOR+RACE_MACHINE)
end
function c56897896.syncheck(e,c)
function s.syncheck(e,c)
if c~=e:GetHandler() then
c:AssumeProperty(ASSUME_LEVEL,1)
end
......
......@@ -3503,7 +3503,7 @@ function Synchro.CanCompleteSelection(candidates,target_level,tuner_filter,non_t
local mc=candidates[index]
for _,diff in ipairs(Synchro.GenerateVariantForCard(
state,mc,#selected+1,tc,tuner_filter,non_tuner_filter,prune_level
state,mc,#selected+1,tc,tuner_filter,non_tuner_filter
)) do
-- apply diff
local branch_state=Synchro.ApplyVariantState(
......@@ -3669,7 +3669,7 @@ function Synchro.IsSelectionValid(selection,target_level,tuner_filter,non_tuner_
selection,
tuner_filter,non_tuner_filter,
Synchro.LevelMapper,
tc,0xff
tc,math.huge
)
for _,state in ipairs(states) do
if state.tuner_count<=tuner_max
......@@ -3677,6 +3677,7 @@ function Synchro.IsSelectionValid(selection,target_level,tuner_filter,non_tuner_
and state.possible_sums[target_level]
and state.tuner_count>=tuner_min
and state.non_tuner_count>=non_tuner_min
and state.hand_count<=state.hand_count_limit
then
return true
end
......@@ -3753,7 +3754,7 @@ function Synchro.BuildStatesFromSelection(selection,tuner_filter,non_tuner_filte
for _,st in ipairs(states) do
for _,diff in ipairs(Synchro.GenerateVariantForCard(
st,card,idx,tc,tuner_filter,non_tuner_filter,prune_level
st,card,idx,tc,tuner_filter,non_tuner_filter
)) do
-- merge diff into full state
local new_state = Synchro.ApplyVariantState(
......@@ -3773,16 +3774,19 @@ function Synchro.BuildStatesFromSelection(selection,tuner_filter,non_tuner_filte
return states
end
--- @param c Card
function Synchro.IsMono(c)
return c:IsCode(56897896)
return c:IsHasEffect(56897896)~=nil
end
--- @param c Card
function Synchro.IsFlower(c)
return c:IsCode(57261568,33541430,89818984)
return c:IsHasEffect(89818984)~=nil
end
--- @param c Card
function Synchro.IsTatsunoko(c)
return c:IsCode(55863245)
return c:IsHasEffect(55863245)~=nil
end
function Synchro.SortMaterials(materials,tc,tuner_filter)
......@@ -3813,14 +3817,14 @@ function Synchro.IsHandAlter(c)
end
-- Helper to generate only the variant-specific diffs for a card
function Synchro.GenerateVariantForCard(st,card,idx,tc,tuner_filter,non_tuner_filter,prune_level)
function Synchro.GenerateVariantForCard(st,card,selected_count,tc,tuner_filter,non_tuner_filter)
local variants = {}
-- MonoSynchron first/second
if Synchro.IsMono(card) then
if st.level_mapper_priority<2 then
local firstMono = card
table.insert(variants,{
possible_sums={[(idx-1)+card:GetLevel()]=true},
possible_sums={[(selected_count-1)+card:GetLevel()]=true},
level_mapper=function(c)
return (c==firstMono) and {c:GetLevel()} or {1}
end,
......@@ -3828,7 +3832,7 @@ function Synchro.GenerateVariantForCard(st,card,idx,tc,tuner_filter,non_tuner_fi
})
elseif st.level_mapper_priority==2 then
table.insert(variants,{
possible_sums={[idx]=true},
possible_sums={[selected_count]=true},
level_mapper=function() return {1} end,
})
end
......@@ -3842,7 +3846,7 @@ function Synchro.GenerateVariantForCard(st,card,idx,tc,tuner_filter,non_tuner_fi
-- Flower Cardian override
if Synchro.IsFlower(card) and st.level_mapper_priority < 1 then
table.insert(variants,{
possible_sums={[2*idx]=true},
possible_sums={[2*selected_count]=true},
level_mapper=function() return {2} end,
level_mapper_priority=1,
})
......@@ -3867,7 +3871,7 @@ function Synchro.ApplyVariantState(st,card,diff,tuner_filter,non_tuner_filter,tc
local hand_inc=card:IsLocation(LOCATION_HAND) and 1 or 0
local possible_sums=Synchro.UpdatepossibleSums(
st.possible_sums,
st.level_mapper(card, tc),
st.level_mapper(card,tc),
prune_level
)
return {
......
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