Skip to content

Commit a030f37

Browse files
authored
"Enneacraft" monsters + "Deus X-Krawler" fix
Implemented a workaround to have their Continuous Effects that apply after being flipped face-up apply immediately upon being flipped up rather than having to wait for at least 1 Chain Link to resolve first.
1 parent 5c3a338 commit a030f37

4 files changed

Lines changed: 91 additions & 13 deletions

File tree

official/c62587693.lua

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,38 @@ function s.initial_effect(c)
1111
e1:SetProperty(EFFECT_FLAG_SET_AVAILABLE+EFFECT_FLAG_DAMAGE_STEP+EFFECT_FLAG_DAMAGE_CAL)
1212
e1:SetCode(EVENT_CHAINING)
1313
e1:SetRange(LOCATION_MZONE)
14-
e1:SetCondition(s.negcon)
14+
-- e1:SetCondition(s.negcon)
1515
e1:SetCost(Cost.SelfChangePosition(POS_FACEUP_DEFENSE))
1616
e1:SetTarget(s.negtg)
17-
e1:SetOperation(s.negop)
17+
-- e1:SetOperation(s.negop)
1818
c:RegisterEffect(e1)
1919
--After this card was flipped face-up, while it is in the Monster Zone, negate all monster effects activated on your opponent's field
2020
local e2a=Effect.CreateEffect(c)
2121
e2a:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
2222
e2a:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
2323
e2a:SetCode(EVENT_FLIP)
24-
e2a:SetOperation(function(e) e:GetHandler():RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,2)) end)
24+
e2a:SetOperation(function(e)
25+
local c=e:GetHandler()
26+
c:RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,2))
27+
local chain_link=Duel.GetCurrentChain()
28+
if chain_link==0 then return end
29+
local fid=c:GetFieldID()
30+
local tp=e:GetHandlerPlayer()
31+
--Workaround to have e2b apply immediately if it's flipped face-up due to its own effect
32+
local e1=Effect.CreateEffect(c)
33+
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
34+
e1:SetCode(EVENT_CHAIN_SOLVING)
35+
e1:SetCondition(function(e,tp,eg,ep,ev,re,r,rp) return Duel.GetCurrentChain()>chain_link and re:IsMonsterEffect() and rp==1-tp and Duel.GetChainInfo(ev,CHAININFO_TRIGGERING_LOCATION)==LOCATION_MZONE and c:HasFlagEffect(id) and c:IsFaceup() and not c:IsDisabled() and c:IsFieldID(fid) end)
36+
e1:SetOperation(function(e,tp,eg,ep,ev,re,r,rp) Duel.NegateEffect(ev) end)
37+
e1:SetReset(RESET_CHAIN)
38+
Duel.RegisterEffect(e1,tp)
39+
local e2=Effect.CreateEffect(c)
40+
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
41+
e2:SetCode(EVENT_CHAIN_SOLVED)
42+
e2:SetOperation(function() e1:Reset() e2:Reset() end)
43+
e2:SetReset(RESET_CHAIN)
44+
Duel.RegisterEffect(e2,tp)
45+
end)
2546
c:RegisterEffect(e2a)
2647
local e2b=Effect.CreateEffect(c)
2748
e2b:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)

pre-release/c100446020.lua

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ function s.initial_effect(c)
2121
e2:SetCode(EVENT_PHASE|PHASE_BATTLE)
2222
e2:SetRange(LOCATION_PZONE)
2323
e2:SetCountLimit(1)
24-
e2:SetCondition(s.descon)
2524
e2:SetTarget(s.destg)
2625
e2:SetOperation(s.desop)
2726
c:RegisterEffect(e2)
@@ -54,7 +53,30 @@ function s.initial_effect(c)
5453
e5a:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
5554
e5a:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
5655
e5a:SetCode(EVENT_FLIP)
57-
e5a:SetOperation(function(e) e:GetHandler():RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,3)) end)
56+
e5a:SetOperation(function(e)
57+
local c=e:GetHandler()
58+
c:RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,3))
59+
local chain_link=Duel.GetCurrentChain()
60+
if chain_link==0 then return end
61+
local fid=c:GetFieldID()
62+
local tp=e:GetHandlerPlayer()
63+
--Workaround to have e5b apply immediately if it's flipped face-up due to its own effect
64+
local e1=Effect.CreateEffect(c)
65+
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
66+
e1:SetCode(EVENT_TO_HAND)
67+
e1:SetCondition(function(e,tp,eg,ep,ev,re,r,rp) return Duel.GetCurrentChain()>chain_link and e:GetHandler():HasFlagEffect(id) and rp==1-tp and r&REASON_EFFECT>0 and eg:IsExists(Card.IsControler,1,nil,1-tp) end)
68+
e1:SetOperation(s.damop)
69+
e1:SetReset(RESET_CHAIN)
70+
Duel.RegisterEffect(e1,tp)
71+
local e2=Effect.CreateEffect(c)
72+
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
73+
e2:SetProperty(EFFECT_FLAG_DELAY)
74+
e2:SetCode(EVENT_CHAIN_SOLVED)
75+
e2:SetCondition(function() return c:HasFlagEffect(id) and c:IsFaceup() and not c:IsDisabled() and c:IsFieldID(fid) end)
76+
e2:SetOperation(function(e,tp,eg,ep,ev,re,r,rp) e1:Reset() e2:Reset() s.chainsolvedop(e,tp,eg,ep,ev,re,r,rp) end)
77+
e2:SetReset(RESET_CHAIN)
78+
Duel.RegisterEffect(e2,tp)
79+
end)
5880
c:RegisterEffect(e5a)
5981
local e5b=Effect.CreateEffect(c)
6082
e5b:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
@@ -163,8 +185,9 @@ function s.damop(e,tp,eg,ep,ev,re,r,rp)
163185
local ct=eg:FilterCount(Card.IsControler,nil,1-tp)
164186
if Duel.IsChainSolving() then
165187
--If a chain link is resolving, register a flag to deal the damage after it
188+
local c=e:GetHandler()
166189
for i=1,ct do
167-
e:GetHandler():RegisterFlagEffect(id+100,RESET_CHAIN,0,1)
190+
c:RegisterFlagEffect(id+100,RESET_CHAIN,0,1)
168191
end
169192
else
170193
--If a chain is not resolving, deal the damage right away
@@ -179,4 +202,4 @@ function s.chainsolvedop(e,tp,eg,ep,ev,re,r,rp)
179202
Duel.Damage(1-tp,ct*900,REASON_EFFECT)
180203
e:GetHandler():ResetFlagEffect(id+100)
181204
end
182-
end
205+
end

pre-release/c100446021.lua

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ function s.initial_effect(c)
2121
e2:SetCode(EVENT_PHASE|PHASE_BATTLE)
2222
e2:SetRange(LOCATION_PZONE)
2323
e2:SetCountLimit(1)
24-
e2:SetCondition(s.descon)
2524
e2:SetTarget(s.destg)
2625
e2:SetOperation(s.desop)
2726
c:RegisterEffect(e2)
@@ -54,7 +53,22 @@ function s.initial_effect(c)
5453
e5a:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
5554
e5a:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
5655
e5a:SetCode(EVENT_FLIP)
57-
e5a:SetOperation(function(e) e:GetHandler():RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,3)) end)
56+
e5a:SetOperation(function(e)
57+
local c=e:GetHandler()
58+
c:RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,3))
59+
if Duel.GetCurrentChain()==0 then return end
60+
local fid=c:GetFieldID()
61+
--Workaround to have e5b apply immediately if it's flipped face-up due to its own effect
62+
local e1=Effect.CreateEffect(c)
63+
e1:SetType(EFFECT_TYPE_FIELD)
64+
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_SET_AVAILABLE)
65+
e1:SetCode(EFFECT_CANNOT_BE_EFFECT_TARGET)
66+
e1:SetCondition(function() return c:HasFlagEffect(id) and c:IsFaceup() and not c:IsDisabled() and c:IsFieldID(fid) end)
67+
e1:SetTargetRange(LOCATION_ONFIELD|LOCATION_GRAVE,LOCATION_ONFIELD|LOCATION_GRAVE)
68+
e1:SetValue(aux.tgoval)
69+
e1:SetReset(RESET_CHAIN)
70+
Duel.RegisterEffect(e1,e:GetHandlerPlayer())
71+
end)
5872
c:RegisterEffect(e5a)
5973
local e5b=Effect.CreateEffect(c)
6074
e5b:SetType(EFFECT_TYPE_FIELD)
@@ -156,4 +170,4 @@ function s.disop(e,tp,eg,ep,ev,re,r,rp)
156170
if #rg>0 then
157171
Duel.Remove(rg,POS_FACEDOWN,REASON_EFFECT)
158172
end
159-
end
173+
end

pre-release/c100446023.lua

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ function s.initial_effect(c)
2121
e2:SetCode(EVENT_PHASE|PHASE_BATTLE)
2222
e2:SetRange(LOCATION_PZONE)
2323
e2:SetCountLimit(1)
24-
e2:SetCondition(s.descon)
2524
e2:SetTarget(s.destg)
2625
e2:SetOperation(s.desop)
2726
c:RegisterEffect(e2)
@@ -52,7 +51,28 @@ function s.initial_effect(c)
5251
e5a:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
5352
e5a:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
5453
e5a:SetCode(EVENT_FLIP)
55-
e5a:SetOperation(function(e) e:GetHandler():RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,3)) end)
54+
e5a:SetOperation(function(e)
55+
local c=e:GetHandler()
56+
c:RegisterFlagEffect(id,RESET_EVENT|RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,3))
57+
local chain_link=Duel.GetCurrentChain()
58+
if chain_link==0 then return end
59+
local fid=c:GetFieldID()
60+
local tp=e:GetHandlerPlayer()
61+
--Workaround to have e5b apply immediately if it's flipped face-up due to its own effect
62+
local e1=Effect.CreateEffect(c)
63+
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
64+
e1:SetCode(EVENT_TO_GRAVE)
65+
e1:SetCondition(function(e,tp,eg,ep,ev,re,r,rp) return Duel.GetCurrentChain()>chain_link and eg:IsExists(s.damconfilter,1,nil,tp) and c:HasFlagEffect(id) and c:IsFaceup() and not c:IsDisabled() and c:IsFieldID(fid) end)
66+
e1:SetOperation(s.damop)
67+
e1:SetReset(RESET_CHAIN)
68+
Duel.RegisterEffect(e1,tp)
69+
local e2=Effect.CreateEffect(c)
70+
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
71+
e2:SetCode(EVENT_CHAIN_SOLVED)
72+
e2:SetOperation(function() e1:Reset() e2:Reset() end)
73+
e2:SetReset(RESET_CHAIN)
74+
Duel.RegisterEffect(e2,tp)
75+
end)
5676
c:RegisterEffect(e5a)
5777
local e5b=Effect.CreateEffect(c)
5878
e5b:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
@@ -158,4 +178,4 @@ end
158178
function s.damop(e,tp,eg,ep,ev,re,r,rp)
159179
Duel.Hint(HINT_CARD,1-tp,id)
160180
Duel.Damage(1-tp,900,REASON_EFFECT)
161-
end
181+
end

0 commit comments

Comments
 (0)