Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
ygopro-core
Commits
ad72c354
Commit
ad72c354
authored
Aug 19, 2018
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro-core
parents
1be62b3d
e09dd463
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
153 additions
and
156 deletions
+153
-156
effect.h
effect.h
+1
-3
field.cpp
field.cpp
+24
-27
field.h
field.h
+7
-6
operations.cpp
operations.cpp
+5
-10
processor.cpp
processor.cpp
+116
-110
No files found.
effect.h
View file @
ad72c354
...
@@ -351,7 +351,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
...
@@ -351,7 +351,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_FIRST_ATTACK 192
#define EFFECT_FIRST_ATTACK 192
#define EFFECT_ATTACK_ALL 193
#define EFFECT_ATTACK_ALL 193
#define EFFECT_EXTRA_ATTACK 194
#define EFFECT_EXTRA_ATTACK 194
#define EFFECT_MUST_BE_ATTACKED 195
//
#define EFFECT_MUST_BE_ATTACKED 195
#define EFFECT_ONLY_BE_ATTACKED 196
#define EFFECT_ONLY_BE_ATTACKED 196
#define EFFECT_ATTACK_DISABLED 197
#define EFFECT_ATTACK_DISABLED 197
#define EFFECT_NO_BATTLE_DAMAGE 200
#define EFFECT_NO_BATTLE_DAMAGE 200
...
@@ -418,12 +418,10 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
...
@@ -418,12 +418,10 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_ADD_SETCODE 334
#define EFFECT_ADD_SETCODE 334
#define EFFECT_NO_EFFECT_DAMAGE 335
#define EFFECT_NO_EFFECT_DAMAGE 335
#define EFFECT_UNSUMMONABLE_CARD 336
#define EFFECT_UNSUMMONABLE_CARD 336
//#define EFFECT_DISABLE_CHAIN_FIELD 337
#define EFFECT_DISCARD_COST_CHANGE 338
#define EFFECT_DISCARD_COST_CHANGE 338
#define EFFECT_HAND_SYNCHRO 339
#define EFFECT_HAND_SYNCHRO 339
#define EFFECT_ADD_FUSION_CODE 340
#define EFFECT_ADD_FUSION_CODE 340
#define EFFECT_ADD_FUSION_SETCODE 341
#define EFFECT_ADD_FUSION_SETCODE 341
#define EFFECT_RISE_TO_FULL_HEIGHT 342
#define EFFECT_ONLY_ATTACK_MONSTER 343
#define EFFECT_ONLY_ATTACK_MONSTER 343
#define EFFECT_MUST_ATTACK_MONSTER 344
#define EFFECT_MUST_ATTACK_MONSTER 344
#define EFFECT_PATRICIAN_OF_DARKNESS 345
#define EFFECT_PATRICIAN_OF_DARKNESS 345
...
...
field.cpp
View file @
ad72c354
...
@@ -2256,40 +2256,38 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack)
...
@@ -2256,40 +2256,38 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack)
effect
*
peffect
;
effect
*
peffect
;
card_vector
*
pv
=
NULL
;
card_vector
*
pv
=
NULL
;
int32
atype
=
0
;
int32
atype
=
0
;
card_vector
must_
be_
attack
;
card_vector
must_attack
;
card_vector
only_be_attack
;
card_vector
only_be_attack
;
effect_set
eset
;
card_vector
only_attack
;
// find the universal set pv
// find the universal set pv
pcard
->
direct_attackable
=
0
;
pcard
->
direct_attackable
=
0
;
for
(
auto
cit
=
player
[
1
-
p
].
list_mzone
.
begin
();
cit
!=
player
[
1
-
p
].
list_mzone
.
end
();
++
cit
)
{
for
(
auto
cit
=
player
[
1
-
p
].
list_mzone
.
begin
();
cit
!=
player
[
1
-
p
].
list_mzone
.
end
();
++
cit
)
{
card
*
atarget
=
*
cit
;
card
*
atarget
=
*
cit
;
if
(
atarget
)
{
if
(
atarget
)
{
if
(
atarget
->
is_affected_by_effect
(
EFFECT_MUST_BE_ATTACKED
,
pcard
))
must_be_attack
.
push_back
(
atarget
);
if
(
atarget
->
is_affected_by_effect
(
EFFECT_ONLY_BE_ATTACKED
))
if
(
atarget
->
is_affected_by_effect
(
EFFECT_ONLY_BE_ATTACKED
))
only_be_attack
.
push_back
(
atarget
);
only_be_attack
.
push_back
(
atarget
);
if
(
pcard
->
is_affected_by_effect
(
EFFECT_MUST_ATTACK_MONSTER
,
atarget
))
must_attack
.
push_back
(
atarget
);
if
(
pcard
->
is_affected_by_effect
(
EFFECT_ONLY_ATTACK_MONSTER
,
atarget
))
only_attack
.
push_back
(
atarget
);
}
}
}
}
pcard
->
filter_effect
(
EFFECT_RISE_TO_FULL_HEIGHT
,
&
eset
);
if
(
only_be_attack
.
size
())
{
if
(
eset
.
size
())
{
atype
=
1
;
atype
=
1
;
std
::
set
<
uint32
>
idset
;
if
(
only_be_attack
.
size
()
==
1
)
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
idset
.
insert
(
eset
[
i
]
->
label
);
if
(
idset
.
size
()
==
1
&&
only_be_attack
.
size
()
==
1
&&
only_be_attack
.
front
()
->
fieldid_r
==
*
idset
.
begin
())
pv
=
&
only_be_attack
;
pv
=
&
only_be_attack
;
else
else
return
atype
;
return
atype
;
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_ONLY_ATTACK_MONSTER
))
{
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_ONLY_ATTACK_MONSTER
))
{
atype
=
2
;
atype
=
2
;
if
(
only_
be_
attack
.
size
()
==
1
)
if
(
only_attack
.
size
()
==
1
)
pv
=
&
only_
be_
attack
;
pv
=
&
only_attack
;
else
else
return
atype
;
return
atype
;
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_MUST_ATTACK_MONSTER
))
{
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_MUST_ATTACK_MONSTER
))
{
atype
=
3
;
atype
=
3
;
if
(
must_
be_
attack
.
size
())
if
(
must_attack
.
size
())
pv
=
&
must_
be_
attack
;
pv
=
&
must_attack
;
else
else
return
atype
;
return
atype
;
}
else
{
}
else
{
...
@@ -2429,40 +2427,39 @@ bool field::confirm_attack_target() {
...
@@ -2429,40 +2427,39 @@ bool field::confirm_attack_target() {
effect
*
peffect
;
effect
*
peffect
;
card_vector
*
pv
=
NULL
;
card_vector
*
pv
=
NULL
;
int32
atype
=
0
;
int32
atype
=
0
;
card_vector
must_
be_
attack
;
card_vector
must_attack
;
card_vector
only_be_attack
;
card_vector
only_be_attack
;
card_vector
only_attack
;
effect_set
eset
;
effect_set
eset
;
// find the universal set
// find the universal set
for
(
auto
cit
=
player
[
1
-
p
].
list_mzone
.
begin
();
cit
!=
player
[
1
-
p
].
list_mzone
.
end
();
++
cit
)
{
for
(
auto
cit
=
player
[
1
-
p
].
list_mzone
.
begin
();
cit
!=
player
[
1
-
p
].
list_mzone
.
end
();
++
cit
)
{
card
*
atarget
=
*
cit
;
card
*
atarget
=
*
cit
;
if
(
atarget
)
{
if
(
atarget
)
{
if
(
atarget
->
is_affected_by_effect
(
EFFECT_MUST_BE_ATTACKED
,
pcard
))
must_be_attack
.
push_back
(
atarget
);
if
(
atarget
->
is_affected_by_effect
(
EFFECT_ONLY_BE_ATTACKED
))
if
(
atarget
->
is_affected_by_effect
(
EFFECT_ONLY_BE_ATTACKED
))
only_be_attack
.
push_back
(
atarget
);
only_be_attack
.
push_back
(
atarget
);
if
(
pcard
->
is_affected_by_effect
(
EFFECT_MUST_ATTACK_MONSTER
,
atarget
))
must_attack
.
push_back
(
atarget
);
if
(
pcard
->
is_affected_by_effect
(
EFFECT_ONLY_ATTACK_MONSTER
,
atarget
))
only_attack
.
push_back
(
atarget
);
}
}
}
}
pcard
->
filter_effect
(
EFFECT_RISE_TO_FULL_HEIGHT
,
&
eset
);
if
(
only_be_attack
.
size
())
{
if
(
eset
.
size
())
{
atype
=
1
;
atype
=
1
;
std
::
set
<
uint32
>
idset
;
if
(
only_be_attack
.
size
()
==
1
)
for
(
int32
i
=
0
;
i
<
eset
.
size
();
++
i
)
idset
.
insert
(
eset
[
i
]
->
label
);
if
(
idset
.
size
()
==
1
&&
only_be_attack
.
size
()
==
1
&&
only_be_attack
.
front
()
->
fieldid_r
==
*
idset
.
begin
())
pv
=
&
only_be_attack
;
pv
=
&
only_be_attack
;
else
else
return
false
;
return
false
;
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_ONLY_ATTACK_MONSTER
))
{
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_ONLY_ATTACK_MONSTER
))
{
atype
=
2
;
atype
=
2
;
if
(
only_
be_
attack
.
size
()
==
1
)
if
(
only_attack
.
size
()
==
1
)
pv
=
&
only_
be_
attack
;
pv
=
&
only_attack
;
else
else
return
false
;
return
false
;
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_MUST_ATTACK_MONSTER
))
{
}
else
if
(
pcard
->
is_affected_by_effect
(
EFFECT_MUST_ATTACK_MONSTER
))
{
atype
=
3
;
atype
=
3
;
if
(
must_
be_
attack
.
size
())
if
(
must_attack
.
size
())
pv
=
&
must_
be_
attack
;
pv
=
&
must_attack
;
else
else
return
false
;
return
false
;
}
else
{
}
else
{
...
...
field.h
View file @
ad72c354
...
@@ -193,6 +193,10 @@ struct processor {
...
@@ -193,6 +193,10 @@ struct processor {
chain_array
select_chains
;
chain_array
select_chains
;
chain_array
current_chain
;
chain_array
current_chain
;
chain_list
continuous_chain
;
chain_list
continuous_chain
;
chain_list
solving_continuous
;
chain_list
sub_solving_continuous
;
chain_list
delayed_continuous_tp
;
chain_list
delayed_continuous_ntp
;
chain_list
desrep_chain
;
chain_list
desrep_chain
;
chain_list
new_fchain
;
chain_list
new_fchain
;
chain_list
new_fchain_s
;
chain_list
new_fchain_s
;
...
@@ -231,10 +235,6 @@ struct processor {
...
@@ -231,10 +235,6 @@ struct processor {
effect_set_v
extram_effects
;
effect_set_v
extram_effects
;
effect_set_v
extras_effects
;
effect_set_v
extras_effects
;
std
::
set
<
effect
*>
reseted_effects
;
std
::
set
<
effect
*>
reseted_effects
;
std
::
list
<
effect
*>
delayed_tp
;
std
::
list
<
effect
*>
delayed_ntp
;
event_list
delayed_tev
;
event_list
delayed_ntev
;
std
::
unordered_map
<
card
*
,
uint32
>
readjust_map
;
std
::
unordered_map
<
card
*
,
uint32
>
readjust_map
;
std
::
unordered_set
<
card
*>
unique_cards
[
2
];
std
::
unordered_set
<
card
*>
unique_cards
[
2
];
std
::
unordered_map
<
uint32
,
uint32
>
effect_count_code
;
std
::
unordered_map
<
uint32
,
uint32
>
effect_count_code
;
...
@@ -488,7 +488,7 @@ public:
...
@@ -488,7 +488,7 @@ public:
int32
process_quick_effect
(
int16
step
,
int32
skip_freechain
,
uint8
priority
);
int32
process_quick_effect
(
int16
step
,
int32
skip_freechain
,
uint8
priority
);
int32
process_instant_event
();
int32
process_instant_event
();
int32
process_single_event
();
int32
process_single_event
();
int32
process_single_event
(
effect
*
peffect
,
const
tevent
&
e
,
effect_vector
&
tp
,
effect_vector
&
ntp
,
event_list
&
tev
,
event_list
&
ntev
);
int32
process_single_event
(
effect
*
peffect
,
const
tevent
&
e
,
chain_list
&
tp
,
chain_list
&
ntp
);
int32
process_idle_command
(
uint16
step
);
int32
process_idle_command
(
uint16
step
);
int32
process_battle_command
(
uint16
step
);
int32
process_battle_command
(
uint16
step
);
int32
process_damage_step
(
uint16
step
,
uint32
new_attack
);
int32
process_damage_step
(
uint16
step
,
uint32
new_attack
);
...
@@ -496,7 +496,8 @@ public:
...
@@ -496,7 +496,8 @@ public:
int32
process_turn
(
uint16
step
,
uint8
turn_player
);
int32
process_turn
(
uint16
step
,
uint8
turn_player
);
int32
add_chain
(
uint16
step
);
int32
add_chain
(
uint16
step
);
int32
solve_continuous
(
uint16
step
,
effect
*
peffect
,
uint8
triggering_player
);
void
solve_continuous
(
uint8
playerid
,
effect
*
peffect
,
const
tevent
&
e
);
int32
solve_continuous
(
uint16
step
);
int32
solve_chain
(
uint16
step
,
uint32
chainend_arg1
,
uint32
chainend_arg2
);
int32
solve_chain
(
uint16
step
,
uint32
chainend_arg1
,
uint32
chainend_arg2
);
int32
break_effect
();
int32
break_effect
();
void
adjust_instant
();
void
adjust_instant
();
...
...
operations.cpp
View file @
ad72c354
...
@@ -657,8 +657,7 @@ int32 field::pay_lp_cost(uint32 step, uint8 playerid, uint32 cost) {
...
@@ -657,8 +657,7 @@ int32 field::pay_lp_cost(uint32 step, uint8 playerid, uint32 cost) {
e
.
reason
=
0
;
e
.
reason
=
0
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_player
=
playerid
;
e
.
reason_player
=
playerid
;
core
.
sub_solving_event
.
push_back
(
e
);
solve_continuous
(
playerid
,
peffect
,
e
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
playerid
,
0
);
return
TRUE
;
return
TRUE
;
}
}
}
}
...
@@ -714,8 +713,7 @@ int32 field::remove_counter(uint16 step, uint32 reason, card* pcard, uint8 rplay
...
@@ -714,8 +713,7 @@ int32 field::remove_counter(uint16 step, uint32 reason, card* pcard, uint8 rplay
e
.
reason
=
reason
;
e
.
reason
=
reason
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_player
=
rplayer
;
e
.
reason_player
=
rplayer
;
core
.
sub_solving_event
.
push_back
(
e
);
solve_continuous
(
rplayer
,
peffect
,
e
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
rplayer
,
0
);
core
.
units
.
begin
()
->
step
=
3
;
core
.
units
.
begin
()
->
step
=
3
;
return
FALSE
;
return
FALSE
;
}
}
...
@@ -791,8 +789,7 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
...
@@ -791,8 +789,7 @@ int32 field::remove_overlay_card(uint16 step, uint32 reason, card* pcard, uint8
e
.
reason
=
reason
;
e
.
reason
=
reason
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_effect
=
core
.
reason_effect
;
e
.
reason_player
=
rplayer
;
e
.
reason_player
=
rplayer
;
core
.
sub_solving_event
.
push_back
(
e
);
solve_continuous
(
rplayer
,
peffect
,
e
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
rplayer
,
0
);
core
.
units
.
begin
()
->
step
=
3
;
core
.
units
.
begin
()
->
step
=
3
;
return
FALSE
;
return
FALSE
;
}
}
...
@@ -5952,8 +5949,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
...
@@ -5952,8 +5949,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
process_instant_event
();
process_instant_event
();
return
FALSE
;
return
FALSE
;
}
else
{
}
else
{
core
.
sub_solving_event
.
push_back
(
e
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
e
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
return
TRUE
;
return
TRUE
;
}
}
}
}
...
@@ -6006,8 +6002,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
...
@@ -6006,8 +6002,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
process_instant_event
();
process_instant_event
();
return
FALSE
;
return
FALSE
;
}
else
{
}
else
{
core
.
sub_solving_event
.
push_back
(
e
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
e
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
return
TRUE
;
return
TRUE
;
}
}
}
}
...
...
processor.cpp
View file @
ad72c354
...
@@ -259,7 +259,7 @@ int32 field::process() {
...
@@ -259,7 +259,7 @@ int32 field::process() {
return
pduel
->
bufferlen
;
return
pduel
->
bufferlen
;
}
}
case
PROCESSOR_SOLVE_CONTINUOUS
:
{
case
PROCESSOR_SOLVE_CONTINUOUS
:
{
if
(
solve_continuous
(
it
->
step
,
it
->
peffect
,
it
->
arg1
))
if
(
solve_continuous
(
it
->
step
))
core
.
units
.
pop_front
();
core
.
units
.
pop_front
();
else
else
it
->
step
++
;
it
->
step
++
;
...
@@ -1578,8 +1578,7 @@ int32 field::process_phase_event(int16 step, int32 phase) {
...
@@ -1578,8 +1578,7 @@ int32 field::process_phase_event(int16 step, int32 phase) {
infos
.
priorities
[
1
]
=
0
;
infos
.
priorities
[
1
]
=
0
;
}
else
{
}
else
{
core
.
select_chains
.
clear
();
core
.
select_chains
.
clear
();
core
.
sub_solving_event
.
push_back
(
nil_event
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
nil_event
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
core
.
units
.
begin
()
->
step
=
3
;
core
.
units
.
begin
()
->
step
=
3
;
}
}
return
FALSE
;
return
FALSE
;
...
@@ -1944,8 +1943,7 @@ int32 field::process_point_event(int16 step, int32 skip_trigger, int32 skip_free
...
@@ -1944,8 +1943,7 @@ int32 field::process_point_event(int16 step, int32 skip_trigger, int32 skip_free
const
chain
&
newchain
=
core
.
select_chains
[
returns
.
ivalue
[
0
]];
const
chain
&
newchain
=
core
.
select_chains
[
returns
.
ivalue
[
0
]];
effect
*
peffect
=
newchain
.
triggering_effect
;
effect
*
peffect
=
newchain
.
triggering_effect
;
core
.
select_chains
.
clear
();
core
.
select_chains
.
clear
();
core
.
sub_solving_event
.
push_back
(
nil_event
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
nil_event
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
core
.
units
.
begin
()
->
step
=
29
;
core
.
units
.
begin
()
->
step
=
29
;
return
FALSE
;
return
FALSE
;
}
}
...
@@ -1979,8 +1977,7 @@ int32 field::process_point_event(int16 step, int32 skip_trigger, int32 skip_free
...
@@ -1979,8 +1977,7 @@ int32 field::process_point_event(int16 step, int32 skip_trigger, int32 skip_free
const
chain
&
newchain
=
core
.
select_chains
[
returns
.
ivalue
[
0
]];
const
chain
&
newchain
=
core
.
select_chains
[
returns
.
ivalue
[
0
]];
effect
*
peffect
=
newchain
.
triggering_effect
;
effect
*
peffect
=
newchain
.
triggering_effect
;
core
.
select_chains
.
clear
();
core
.
select_chains
.
clear
();
core
.
sub_solving_event
.
push_back
(
nil_event
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
nil_event
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
core
.
units
.
begin
()
->
step
=
31
;
core
.
units
.
begin
()
->
step
=
31
;
return
FALSE
;
return
FALSE
;
}
}
...
@@ -2230,10 +2227,8 @@ int32 field::process_instant_event() {
...
@@ -2230,10 +2227,8 @@ int32 field::process_instant_event() {
if
(
core
.
queue_event
.
size
()
==
0
)
if
(
core
.
queue_event
.
size
()
==
0
)
return
TRUE
;
return
TRUE
;
chain
newchain
;
chain
newchain
;
effect_vector
tp
;
chain_list
tp
;
effect_vector
ntp
;
chain_list
ntp
;
event_list
tev
;
event_list
ntev
;
for
(
auto
elit
=
core
.
queue_event
.
begin
();
elit
!=
core
.
queue_event
.
end
();
++
elit
)
{
for
(
auto
elit
=
core
.
queue_event
.
begin
();
elit
!=
core
.
queue_event
.
end
();
++
elit
)
{
//continuous events
//continuous events
auto
pr
=
effects
.
continuous_effect
.
equal_range
(
elit
->
event_code
);
auto
pr
=
effects
.
continuous_effect
.
equal_range
(
elit
->
event_code
);
...
@@ -2242,22 +2237,27 @@ int32 field::process_instant_event() {
...
@@ -2242,22 +2237,27 @@ int32 field::process_instant_event() {
++
eit
;
++
eit
;
uint8
owner_player
=
peffect
->
get_handler_player
();
uint8
owner_player
=
peffect
->
get_handler_player
();
if
(
peffect
->
is_activateable
(
owner_player
,
*
elit
))
{
if
(
peffect
->
is_activateable
(
owner_player
,
*
elit
))
{
newchain
.
chain_id
=
0
;
newchain
.
chain_count
=
0
;
newchain
.
triggering_effect
=
peffect
;
newchain
.
triggering_player
=
owner_player
;
newchain
.
evt
=
*
elit
;
newchain
.
target_cards
=
0
;
newchain
.
target_player
=
PLAYER_NONE
;
newchain
.
target_param
=
0
;
newchain
.
disable_player
=
PLAYER_NONE
;
newchain
.
disable_reason
=
0
;
newchain
.
flag
=
0
;
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
&&
(
core
.
chain_solving
||
core
.
conti_solving
))
{
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
&&
(
core
.
chain_solving
||
core
.
conti_solving
))
{
if
(
owner_player
==
infos
.
turn_player
)
{
if
(
owner_player
==
infos
.
turn_player
)
core
.
delayed_tp
.
push_back
(
peffect
);
core
.
delayed_continuous_tp
.
push_back
(
newchain
);
core
.
delayed_tev
.
push_back
(
*
elit
);
else
}
else
{
core
.
delayed_continuous_ntp
.
push_back
(
newchain
);
core
.
delayed_ntp
.
push_back
(
peffect
);
core
.
delayed_ntev
.
push_back
(
*
elit
);
}
}
else
{
if
(
owner_player
==
infos
.
turn_player
)
{
tp
.
push_back
(
peffect
);
tev
.
push_back
(
*
elit
);
}
else
{
}
else
{
ntp
.
push_back
(
peffect
);
if
(
owner_player
==
infos
.
turn_player
)
ntev
.
push_back
(
*
elit
);
tp
.
push_back
(
newchain
);
}
else
ntp
.
push_back
(
newchain
);
}
}
}
}
}
}
...
@@ -2336,15 +2336,13 @@ int32 field::process_instant_event() {
...
@@ -2336,15 +2336,13 @@ int32 field::process_instant_event() {
core
.
delayed_quick_tmp
.
emplace
(
peffect
,
*
elit
);
core
.
delayed_quick_tmp
.
emplace
(
peffect
,
*
elit
);
}
}
}
}
effect_vector
::
iterator
eit
;
while
(
tp
.
size
())
{
event_list
::
iterator
evit
;
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
tp
,
tp
.
begin
());
for
(
eit
=
tp
.
begin
(),
evit
=
tev
.
begin
();
eit
!=
tp
.
end
();
++
eit
,
++
evit
)
{
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
sub_solving_event
.
push_back
(
*
evit
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
(
*
eit
),
0
,
(
*
eit
)
->
get_handler_player
(),
0
);
}
}
for
(
eit
=
ntp
.
begin
(),
evit
=
ntev
.
begin
();
eit
!=
ntp
.
end
();
++
eit
,
++
evit
)
{
while
(
ntp
.
size
()
)
{
core
.
sub_solving_
event
.
push_back
(
*
evit
);
core
.
sub_solving_
continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
ntp
,
ntp
.
begin
()
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
(
*
eit
),
0
,
(
*
eit
)
->
get_handler_player
()
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
}
}
core
.
instant_event
.
splice
(
core
.
instant_event
.
end
(),
core
.
queue_event
);
core
.
instant_event
.
splice
(
core
.
instant_event
.
end
(),
core
.
queue_event
);
return
TRUE
;
return
TRUE
;
...
@@ -2352,10 +2350,8 @@ int32 field::process_instant_event() {
...
@@ -2352,10 +2350,8 @@ int32 field::process_instant_event() {
int32
field
::
process_single_event
()
{
int32
field
::
process_single_event
()
{
if
(
core
.
single_event
.
size
()
==
0
)
if
(
core
.
single_event
.
size
()
==
0
)
return
TRUE
;
return
TRUE
;
effect_vector
tp
;
chain_list
tp
;
effect_vector
ntp
;
chain_list
ntp
;
event_list
tev
;
event_list
ntev
;
for
(
auto
elit
=
core
.
single_event
.
begin
();
elit
!=
core
.
single_event
.
end
();
++
elit
)
{
for
(
auto
elit
=
core
.
single_event
.
begin
();
elit
!=
core
.
single_event
.
end
();
++
elit
)
{
card
*
starget
=
elit
->
trigger_card
;
card
*
starget
=
elit
->
trigger_card
;
uint32
ev
=
elit
->
event_code
;
uint32
ev
=
elit
->
event_code
;
...
@@ -2363,7 +2359,7 @@ int32 field::process_single_event() {
...
@@ -2363,7 +2359,7 @@ int32 field::process_single_event() {
for
(
auto
eit
=
pr
.
first
;
eit
!=
pr
.
second
;)
{
for
(
auto
eit
=
pr
.
first
;
eit
!=
pr
.
second
;)
{
effect
*
peffect
=
eit
->
second
;
effect
*
peffect
=
eit
->
second
;
++
eit
;
++
eit
;
process_single_event
(
peffect
,
*
elit
,
tp
,
ntp
,
tev
,
ntev
);
process_single_event
(
peffect
,
*
elit
,
tp
,
ntp
);
}
}
for
(
auto
ovit
=
starget
->
xyz_materials
.
begin
();
ovit
!=
starget
->
xyz_materials
.
end
();
++
ovit
)
{
for
(
auto
ovit
=
starget
->
xyz_materials
.
begin
();
ovit
!=
starget
->
xyz_materials
.
end
();
++
ovit
)
{
pr
=
(
*
ovit
)
->
xmaterial_effect
.
equal_range
(
ev
);
pr
=
(
*
ovit
)
->
xmaterial_effect
.
equal_range
(
ev
);
...
@@ -2372,24 +2368,22 @@ int32 field::process_single_event() {
...
@@ -2372,24 +2368,22 @@ int32 field::process_single_event() {
++
eit
;
++
eit
;
if
(
peffect
->
type
&
EFFECT_TYPE_FIELD
)
if
(
peffect
->
type
&
EFFECT_TYPE_FIELD
)
continue
;
continue
;
process_single_event
(
peffect
,
*
elit
,
tp
,
ntp
,
tev
,
ntev
);
process_single_event
(
peffect
,
*
elit
,
tp
,
ntp
);
}
}
}
}
}
}
effect_vector
::
iterator
eit
;
while
(
tp
.
size
())
{
event_list
::
iterator
evit
;
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
tp
,
tp
.
begin
());
for
(
eit
=
tp
.
begin
(),
evit
=
tev
.
begin
();
eit
!=
tp
.
end
();
++
eit
,
++
evit
)
{
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
sub_solving_event
.
push_back
(
*
evit
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
(
*
eit
),
0
,
(
*
eit
)
->
get_handler_player
(),
0
);
}
}
for
(
eit
=
ntp
.
begin
(),
evit
=
ntev
.
begin
();
eit
!=
ntp
.
end
();
++
eit
,
++
evit
)
{
while
(
ntp
.
size
()
)
{
core
.
sub_solving_
event
.
push_back
(
*
evit
);
core
.
sub_solving_
continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
ntp
,
ntp
.
begin
()
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
(
*
eit
),
0
,
(
*
eit
)
->
get_handler_player
()
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
}
}
core
.
single_event
.
clear
();
core
.
single_event
.
clear
();
return
TRUE
;
return
TRUE
;
}
}
int32
field
::
process_single_event
(
effect
*
peffect
,
const
tevent
&
e
,
effect_vector
&
tp
,
effect_vector
&
ntp
,
event_list
&
tev
,
event_list
&
ntev
)
{
int32
field
::
process_single_event
(
effect
*
peffect
,
const
tevent
&
e
,
chain_list
&
tp
,
chain_list
&
ntp
)
{
if
(
!
(
peffect
->
type
&
EFFECT_TYPE_ACTIONS
))
if
(
!
(
peffect
->
type
&
EFFECT_TYPE_ACTIONS
))
return
FALSE
;
return
FALSE
;
if
((
peffect
->
type
&
EFFECT_TYPE_FLIP
)
&&
(
e
.
event_value
&
(
NO_FLIP_EFFECT
>>
16
)))
if
((
peffect
->
type
&
EFFECT_TYPE_FLIP
)
&&
(
e
.
event_value
&
(
NO_FLIP_EFFECT
>>
16
)))
...
@@ -2398,22 +2392,28 @@ int32 field::process_single_event(effect* peffect, const tevent& e, effect_vecto
...
@@ -2398,22 +2392,28 @@ int32 field::process_single_event(effect* peffect, const tevent& e, effect_vecto
if
(
peffect
->
type
&
EFFECT_TYPE_CONTINUOUS
)
{
if
(
peffect
->
type
&
EFFECT_TYPE_CONTINUOUS
)
{
uint8
owner_player
=
peffect
->
get_handler_player
();
uint8
owner_player
=
peffect
->
get_handler_player
();
if
(
peffect
->
is_activateable
(
owner_player
,
e
))
{
if
(
peffect
->
is_activateable
(
owner_player
,
e
))
{
chain
newchain
;
newchain
.
chain_id
=
0
;
newchain
.
chain_count
=
0
;
newchain
.
triggering_effect
=
peffect
;
newchain
.
triggering_player
=
owner_player
;
newchain
.
evt
=
e
;
newchain
.
target_cards
=
0
;
newchain
.
target_player
=
PLAYER_NONE
;
newchain
.
target_param
=
0
;
newchain
.
disable_player
=
PLAYER_NONE
;
newchain
.
disable_reason
=
0
;
newchain
.
flag
=
0
;
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
&&
(
core
.
chain_solving
||
core
.
conti_solving
))
{
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
&&
(
core
.
chain_solving
||
core
.
conti_solving
))
{
if
(
owner_player
==
infos
.
turn_player
)
{
if
(
owner_player
==
infos
.
turn_player
)
core
.
delayed_tp
.
push_back
(
peffect
);
core
.
delayed_continuous_tp
.
push_back
(
newchain
);
core
.
delayed_tev
.
push_back
(
e
);
else
}
else
{
core
.
delayed_continuous_ntp
.
push_back
(
newchain
);
core
.
delayed_ntp
.
push_back
(
peffect
);
core
.
delayed_ntev
.
push_back
(
e
);
}
}
else
{
if
(
owner_player
==
infos
.
turn_player
)
{
tp
.
push_back
(
peffect
);
tev
.
push_back
(
e
);
}
else
{
}
else
{
ntp
.
push_back
(
peffect
);
if
(
owner_player
==
infos
.
turn_player
)
ntev
.
push_back
(
e
);
tp
.
push_back
(
newchain
);
}
else
ntp
.
push_back
(
newchain
);
}
}
}
}
}
else
{
}
else
{
...
@@ -2609,8 +2609,7 @@ int32 field::process_idle_command(uint16 step) {
...
@@ -2609,8 +2609,7 @@ int32 field::process_idle_command(uint16 step) {
effect
*
peffect
=
newchain
.
triggering_effect
;
effect
*
peffect
=
newchain
.
triggering_effect
;
if
(
peffect
->
type
&
EFFECT_TYPE_CONTINUOUS
)
{
if
(
peffect
->
type
&
EFFECT_TYPE_CONTINUOUS
)
{
core
.
select_chains
.
clear
();
core
.
select_chains
.
clear
();
core
.
sub_solving_event
.
push_back
(
nil_event
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
nil_event
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
core
.
units
.
begin
()
->
step
=
-
1
;
core
.
units
.
begin
()
->
step
=
-
1
;
return
FALSE
;
return
FALSE
;
}
}
...
@@ -2807,6 +2806,8 @@ int32 field::process_battle_command(uint16 step) {
...
@@ -2807,6 +2806,8 @@ int32 field::process_battle_command(uint16 step) {
core
.
units
.
begin
()
->
arg2
=
1
;
core
.
units
.
begin
()
->
arg2
=
1
;
else
core
.
units
.
begin
()
->
arg2
=
0
;
else
core
.
units
.
begin
()
->
arg2
=
0
;
if
(
!
peffect
->
value
)
{
if
(
!
peffect
->
value
)
{
reset_phase
(
PHASE_BATTLE_STEP
);
adjust_all
();
infos
.
phase
=
PHASE_BATTLE
;
infos
.
phase
=
PHASE_BATTLE
;
add_process
(
PROCESSOR_PHASE_EVENT
,
0
,
0
,
0
,
PHASE_BATTLE
,
0
);
add_process
(
PROCESSOR_PHASE_EVENT
,
0
,
0
,
0
,
PHASE_BATTLE
,
0
);
}
else
{
}
else
{
...
@@ -2886,8 +2887,7 @@ int32 field::process_battle_command(uint16 step) {
...
@@ -2886,8 +2887,7 @@ int32 field::process_battle_command(uint16 step) {
effect
*
peffect
=
newchain
.
triggering_effect
;
effect
*
peffect
=
newchain
.
triggering_effect
;
if
(
peffect
->
type
&
EFFECT_TYPE_CONTINUOUS
)
{
if
(
peffect
->
type
&
EFFECT_TYPE_CONTINUOUS
)
{
core
.
select_chains
.
clear
();
core
.
select_chains
.
clear
();
core
.
sub_solving_event
.
push_back
(
nil_event
);
solve_continuous
(
peffect
->
get_handler_player
(),
peffect
,
nil_event
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
peffect
,
0
,
peffect
->
get_handler_player
(),
0
);
core
.
units
.
begin
()
->
step
=
-
1
;
core
.
units
.
begin
()
->
step
=
-
1
;
return
FALSE
;
return
FALSE
;
}
}
...
@@ -3157,6 +3157,8 @@ int32 field::process_battle_command(uint16 step) {
...
@@ -3157,6 +3157,8 @@ int32 field::process_battle_command(uint16 step) {
core
.
attacker
->
attacked_cards
.
addcard
(
core
.
attack_target
);
core
.
attacker
->
attacked_cards
.
addcard
(
core
.
attack_target
);
}
}
if
(
!
peffect
->
value
)
{
if
(
!
peffect
->
value
)
{
reset_phase
(
PHASE_BATTLE_STEP
);
adjust_all
();
infos
.
phase
=
PHASE_BATTLE
;
infos
.
phase
=
PHASE_BATTLE
;
add_process
(
PROCESSOR_PHASE_EVENT
,
0
,
0
,
0
,
PHASE_BATTLE
,
0
);
add_process
(
PROCESSOR_PHASE_EVENT
,
0
,
0
,
0
,
PHASE_BATTLE
,
0
);
}
else
{
}
else
{
...
@@ -3342,6 +3344,7 @@ int32 field::process_battle_command(uint16 step) {
...
@@ -3342,6 +3344,7 @@ int32 field::process_battle_command(uint16 step) {
||
core
.
attack_target
->
current
.
controler
!=
core
.
attack_target
->
attack_controler
||
core
.
attack_target
->
current
.
controler
!=
core
.
attack_target
->
attack_controler
||
core
.
attack_target
->
fieldid_r
!=
core
.
pre_field
[
1
])))
{
||
core
.
attack_target
->
fieldid_r
!=
core
.
pre_field
[
1
])))
{
reset_phase
(
PHASE_DAMAGE_CAL
);
reset_phase
(
PHASE_DAMAGE_CAL
);
adjust_all
();
infos
.
phase
=
PHASE_DAMAGE
;
infos
.
phase
=
PHASE_DAMAGE
;
core
.
units
.
begin
()
->
step
=
32
;
core
.
units
.
begin
()
->
step
=
32
;
return
FALSE
;
return
FALSE
;
...
@@ -4516,34 +4519,41 @@ int32 field::add_chain(uint16 step) {
...
@@ -4516,34 +4519,41 @@ int32 field::add_chain(uint16 step) {
}
}
return
TRUE
;
return
TRUE
;
}
}
int32
field
::
solve_continuous
(
uint16
step
,
effect
*
peffect
,
uint8
triggering_player
)
{
void
field
::
solve_continuous
(
uint8
playerid
,
effect
*
peffect
,
const
tevent
&
e
)
{
switch
(
step
)
{
case
0
:
{
core
.
solving_event
.
splice
(
core
.
solving_event
.
begin
(),
core
.
sub_solving_event
);
if
(
!
peffect
->
check_count_limit
(
triggering_player
))
{
core
.
solving_event
.
pop_front
();
return
TRUE
;
}
chain
newchain
;
chain
newchain
;
newchain
.
chain_id
=
0
;
newchain
.
chain_id
=
0
;
newchain
.
chain_count
=
0
;
newchain
.
chain_count
=
0
;
newchain
.
triggering_effect
=
peffect
;
newchain
.
triggering_effect
=
peffect
;
newchain
.
triggering_player
=
triggering_player
;
newchain
.
triggering_player
=
playerid
;
newchain
.
evt
=
core
.
solving_event
.
front
()
;
newchain
.
evt
=
e
;
newchain
.
target_cards
=
0
;
newchain
.
target_cards
=
0
;
newchain
.
target_player
=
PLAYER_NONE
;
newchain
.
target_player
=
PLAYER_NONE
;
newchain
.
target_param
=
0
;
newchain
.
target_param
=
0
;
newchain
.
disable_player
=
PLAYER_NONE
;
newchain
.
disable_player
=
PLAYER_NONE
;
newchain
.
disable_reason
=
0
;
newchain
.
disable_reason
=
0
;
newchain
.
flag
=
0
;
newchain
.
flag
=
0
;
core
.
continuous_chain
.
push_back
(
newchain
);
core
.
sub_solving_continuous
.
push_back
(
newchain
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
}
int32
field
::
solve_continuous
(
uint16
step
)
{
switch
(
step
)
{
case
0
:
{
core
.
solving_continuous
.
splice
(
core
.
solving_continuous
.
begin
(),
core
.
sub_solving_continuous
);
auto
&
clit
=
core
.
solving_continuous
.
front
();
effect
*
peffect
=
clit
.
triggering_effect
;
uint8
triggering_player
=
clit
.
triggering_player
;
if
(
!
peffect
->
check_count_limit
(
triggering_player
))
{
core
.
solving_continuous
.
pop_front
();
return
TRUE
;
}
core
.
continuous_chain
.
push_back
(
clit
);
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
||
!
(
peffect
->
code
&
0x10030000
)
&&
(
peffect
->
code
&
(
EVENT_PHASE
|
EVENT_PHASE_START
)))
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
||
!
(
peffect
->
code
&
0x10030000
)
&&
(
peffect
->
code
&
(
EVENT_PHASE
|
EVENT_PHASE_START
)))
core
.
conti_solving
=
TRUE
;
core
.
conti_solving
=
TRUE
;
core
.
units
.
begin
()
->
ptarget
=
(
group
*
)
core
.
reason_effect
;
core
.
units
.
begin
()
->
ptarget
=
(
group
*
)
core
.
reason_effect
;
core
.
units
.
begin
()
->
arg2
=
core
.
reason_player
;
core
.
units
.
begin
()
->
arg2
=
core
.
reason_player
;
if
(
!
peffect
->
target
)
if
(
!
peffect
->
target
)
return
FALSE
;
return
FALSE
;
core
.
sub_solving_event
.
push_back
(
c
ore
.
solving_event
.
front
()
);
core
.
sub_solving_event
.
push_back
(
c
lit
.
evt
);
add_process
(
PROCESSOR_EXECUTE_TARGET
,
0
,
peffect
,
0
,
triggering_player
,
0
);
add_process
(
PROCESSOR_EXECUTE_TARGET
,
0
,
peffect
,
0
,
triggering_player
,
0
);
return
FALSE
;
return
FALSE
;
}
}
...
@@ -4551,14 +4561,20 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
...
@@ -4551,14 +4561,20 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
return
FALSE
;
return
FALSE
;
}
}
case
2
:
{
case
2
:
{
auto
&
clit
=
core
.
solving_continuous
.
front
();
effect
*
peffect
=
clit
.
triggering_effect
;
uint8
triggering_player
=
clit
.
triggering_player
;
if
(
!
peffect
->
operation
)
if
(
!
peffect
->
operation
)
return
FALSE
;
return
FALSE
;
peffect
->
dec_count
(
triggering_player
);
peffect
->
dec_count
(
triggering_player
);
core
.
sub_solving_event
.
push_back
(
c
ore
.
solving_event
.
front
()
);
core
.
sub_solving_event
.
push_back
(
c
lit
.
evt
);
add_process
(
PROCESSOR_EXECUTE_OPERATION
,
0
,
peffect
,
0
,
triggering_player
,
0
);
add_process
(
PROCESSOR_EXECUTE_OPERATION
,
0
,
peffect
,
0
,
triggering_player
,
0
);
return
FALSE
;
return
FALSE
;
}
}
case
3
:
{
case
3
:
{
auto
&
clit
=
core
.
solving_continuous
.
front
();
effect
*
peffect
=
clit
.
triggering_effect
;
uint8
triggering_player
=
clit
.
triggering_player
;
core
.
reason_effect
=
(
effect
*
)
core
.
units
.
begin
()
->
ptarget
;
core
.
reason_effect
=
(
effect
*
)
core
.
units
.
begin
()
->
ptarget
;
core
.
reason_player
=
core
.
units
.
begin
()
->
arg2
;
core
.
reason_player
=
core
.
units
.
begin
()
->
arg2
;
if
(
core
.
continuous_chain
.
back
().
target_cards
)
if
(
core
.
continuous_chain
.
back
().
target_cards
)
...
@@ -4568,7 +4584,7 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
...
@@ -4568,7 +4584,7 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
pduel
->
delete_group
(
oit
->
second
.
op_cards
);
pduel
->
delete_group
(
oit
->
second
.
op_cards
);
}
}
core
.
continuous_chain
.
pop_back
();
core
.
continuous_chain
.
pop_back
();
core
.
solving_
event
.
pop_front
();
core
.
solving_
continuous
.
pop_front
();
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
||
!
(
peffect
->
code
&
0x10030000
)
&&
(
peffect
->
code
&
(
EVENT_PHASE
|
EVENT_PHASE_START
)))
{
if
(
peffect
->
is_flag
(
EFFECT_FLAG_DELAY
)
||
!
(
peffect
->
code
&
0x10030000
)
&&
(
peffect
->
code
&
(
EVENT_PHASE
|
EVENT_PHASE_START
)))
{
core
.
conti_solving
=
FALSE
;
core
.
conti_solving
=
FALSE
;
adjust_all
();
adjust_all
();
...
@@ -4580,26 +4596,20 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
...
@@ -4580,26 +4596,20 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
if
(
core
.
conti_player
==
PLAYER_NONE
)
if
(
core
.
conti_player
==
PLAYER_NONE
)
core
.
conti_player
=
infos
.
turn_player
;
core
.
conti_player
=
infos
.
turn_player
;
if
(
core
.
conti_player
==
infos
.
turn_player
)
{
if
(
core
.
conti_player
==
infos
.
turn_player
)
{
if
(
core
.
delayed_tp
.
size
())
{
if
(
core
.
delayed_continuous_tp
.
size
())
{
core
.
sub_solving_event
.
push_back
(
core
.
delayed_tev
.
front
());
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
core
.
delayed_continuous_tp
,
core
.
delayed_continuous_tp
.
begin
());
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
core
.
delayed_tp
.
front
(),
0
,
infos
.
turn_player
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
delayed_tp
.
pop_front
();
core
.
delayed_tev
.
pop_front
();
}
else
}
else
core
.
conti_player
=
1
-
infos
.
turn_player
;
core
.
conti_player
=
1
-
infos
.
turn_player
;
}
}
if
(
core
.
conti_player
==
1
-
infos
.
turn_player
)
{
if
(
core
.
conti_player
==
1
-
infos
.
turn_player
)
{
if
(
core
.
delayed_ntp
.
size
())
{
if
(
core
.
delayed_continuous_ntp
.
size
())
{
core
.
sub_solving_event
.
push_back
(
core
.
delayed_ntev
.
front
());
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
core
.
delayed_continuous_ntp
,
core
.
delayed_continuous_ntp
.
begin
());
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
core
.
delayed_ntp
.
front
(),
0
,
1
-
infos
.
turn_player
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
delayed_ntp
.
pop_front
();
}
else
if
(
core
.
delayed_continuous_tp
.
size
())
{
core
.
delayed_ntev
.
pop_front
();
}
else
if
(
core
.
delayed_tp
.
size
())
{
core
.
conti_player
=
infos
.
turn_player
;
core
.
conti_player
=
infos
.
turn_player
;
core
.
sub_solving_event
.
push_back
(
core
.
delayed_tev
.
front
());
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
core
.
delayed_continuous_tp
,
core
.
delayed_continuous_tp
.
begin
());
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
core
.
delayed_tp
.
front
(),
0
,
infos
.
turn_player
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
delayed_tp
.
pop_front
();
core
.
delayed_tev
.
pop_front
();
}
else
}
else
core
.
conti_player
=
PLAYER_NONE
;
core
.
conti_player
=
PLAYER_NONE
;
}
}
...
@@ -4748,18 +4758,14 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2
...
@@ -4748,18 +4758,14 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2
core
.
spsummon_state_count_tmp
[
0
]
=
0
;
core
.
spsummon_state_count_tmp
[
0
]
=
0
;
core
.
spsummon_state_count_tmp
[
1
]
=
0
;
core
.
spsummon_state_count_tmp
[
1
]
=
0
;
core
.
chain_solving
=
FALSE
;
core
.
chain_solving
=
FALSE
;
if
(
core
.
delayed_tp
.
size
())
{
if
(
core
.
delayed_
continuous_
tp
.
size
())
{
core
.
conti_player
=
infos
.
turn_player
;
core
.
conti_player
=
infos
.
turn_player
;
core
.
sub_solving_event
.
push_back
(
core
.
delayed_tev
.
front
());
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
core
.
delayed_continuous_tp
,
core
.
delayed_continuous_tp
.
begin
());
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
core
.
delayed_tp
.
front
(),
0
,
infos
.
turn_player
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
delayed_tp
.
pop_front
();
}
else
if
(
core
.
delayed_continuous_ntp
.
size
())
{
core
.
delayed_tev
.
pop_front
();
}
else
if
(
core
.
delayed_ntp
.
size
())
{
core
.
conti_player
=
1
-
infos
.
turn_player
;
core
.
conti_player
=
1
-
infos
.
turn_player
;
core
.
sub_solving_event
.
push_back
(
core
.
delayed_ntev
.
front
());
core
.
sub_solving_continuous
.
splice
(
core
.
sub_solving_continuous
.
end
(),
core
.
delayed_continuous_ntp
,
core
.
delayed_continuous_ntp
.
begin
());
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
core
.
delayed_ntp
.
front
(),
0
,
1
-
infos
.
turn_player
,
0
);
add_process
(
PROCESSOR_SOLVE_CONTINUOUS
,
0
,
0
,
0
,
0
,
0
);
core
.
delayed_ntp
.
pop_front
();
core
.
delayed_ntev
.
pop_front
();
}
else
}
else
core
.
conti_player
=
PLAYER_NONE
;
core
.
conti_player
=
PLAYER_NONE
;
pduel
->
write_buffer8
(
MSG_CHAIN_SOLVED
);
pduel
->
write_buffer8
(
MSG_CHAIN_SOLVED
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment