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
57599149
Commit
57599149
authored
Dec 14, 2019
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro-core
parents
859dcc52
26d97c90
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
34 additions
and
174 deletions
+34
-174
card.cpp
card.cpp
+19
-122
field.cpp
field.cpp
+7
-47
operations.cpp
operations.cpp
+4
-1
processor.cpp
processor.cpp
+4
-4
No files found.
card.cpp
View file @
57599149
...
...
@@ -1151,7 +1151,8 @@ int32 card::is_link_marker(uint32 dir) {
return
(
int32
)(
get_link_marker
()
&
dir
);
}
uint32
card
::
get_linked_zone
()
{
if
(
!
(
data
.
type
&
TYPE_LINK
)
||
current
.
location
!=
LOCATION_MZONE
)
if
(
!
(
data
.
type
&
TYPE_LINK
)
||
current
.
location
!=
LOCATION_MZONE
||
get_status
(
STATUS_SUMMONING
|
STATUS_SUMMON_DISABLED
|
STATUS_SPSUMMON_STEP
))
return
0
;
int32
zones
=
0
;
int32
s
=
current
.
sequence
;
...
...
@@ -1207,131 +1208,27 @@ void card::get_linked_cards(card_set* cset) {
pduel
->
game_field
->
get_cards_in_zone
(
cset
,
linked_zone
>>
16
,
1
-
p
,
LOCATION_MZONE
);
}
uint32
card
::
get_mutual_linked_zone
()
{
if
(
!
(
data
.
type
&
TYPE_LINK
)
||
current
.
location
!=
LOCATION_MZONE
)
if
(
!
(
data
.
type
&
TYPE_LINK
)
||
current
.
location
!=
LOCATION_MZONE
||
get_status
(
STATUS_SUMMONING
|
STATUS_SUMMON_DISABLED
|
STATUS_SPSUMMON_STEP
))
return
0
;
int32
zones
=
0
;
int32
p
=
current
.
controler
;
int32
s
=
current
.
sequence
;
if
(
s
>
0
&&
s
<=
4
&&
is_link_marker
(
LINK_MARKER_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
s
-
1
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_RIGHT
))
zones
|=
1u
<<
(
s
-
1
);
}
if
(
s
<=
3
&&
is_link_marker
(
LINK_MARKER_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
s
+
1
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_LEFT
))
zones
|=
1u
<<
(
s
+
1
);
}
if
(
s
==
0
&&
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
5
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM_LEFT
))
zones
|=
1u
<<
5
;
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
6
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
(
16
+
6
);
}
if
(
s
==
1
&&
is_link_marker
(
LINK_MARKER_TOP
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
5
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM
))
zones
|=
1u
<<
5
;
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
6
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
(
16
+
6
);
}
if
(
s
==
2
&&
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
5
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM_RIGHT
))
zones
|=
1u
<<
5
;
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
6
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
(
16
+
6
);
}
if
(
s
==
2
&&
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
6
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM_LEFT
))
zones
|=
1u
<<
6
;
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
5
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
(
16
+
5
);
}
if
(
s
==
3
&&
is_link_marker
(
LINK_MARKER_TOP
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
6
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM
))
zones
|=
1u
<<
6
;
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
5
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
(
16
+
5
);
}
if
(
s
==
4
&&
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
6
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM_RIGHT
))
zones
|=
1u
<<
6
;
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
5
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
(
16
+
5
);
}
if
(
s
==
5
)
{
if
(
is_link_marker
(
LINK_MARKER_BOTTOM_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
0
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
0
;
}
if
(
is_link_marker
(
LINK_MARKER_BOTTOM
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
1
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
1
;
}
if
(
is_link_marker
(
LINK_MARKER_BOTTOM_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
2
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
2
;
}
if
(
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
4
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
(
16
+
4
);
}
if
(
is_link_marker
(
LINK_MARKER_TOP
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
3
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
(
16
+
3
);
}
if
(
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
2
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
(
16
+
2
);
}
}
if
(
s
==
6
)
{
if
(
is_link_marker
(
LINK_MARKER_BOTTOM_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
2
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
2
;
}
if
(
is_link_marker
(
LINK_MARKER_BOTTOM
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
3
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
3
;
}
if
(
is_link_marker
(
LINK_MARKER_BOTTOM_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
4
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
4
;
}
if
(
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
2
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
(
16
+
2
);
}
if
(
is_link_marker
(
LINK_MARKER_TOP
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
1
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
(
16
+
1
);
}
if
(
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
0
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
(
16
+
0
);
uint32
linked_zone
=
get_linked_zone
();
uint32
icheck
=
0x1
;
for
(
uint32
i
=
0
;
i
<
7
;
++
i
,
icheck
<<=
1
)
{
if
(
icheck
&
linked_zone
)
{
card
*
pcard
=
pduel
->
game_field
->
player
[
p
].
list_mzone
[
i
];
if
(
pcard
&&
(
pcard
->
get_linked_zone
()
&
(
1u
<<
s
)))
zones
|=
icheck
;
}
}
icheck
=
0x10000
;
for
(
uint32
i
=
0
;
i
<
7
;
++
i
,
icheck
<<=
1
)
{
if
(
icheck
&
linked_zone
)
{
card
*
pcard
=
pduel
->
game_field
->
player
[
1
-
p
].
list_mzone
[
i
];
if
(
pcard
&&
(
pcard
->
get_linked_zone
()
&
(
1u
<<
(
s
+
16
))))
zones
|=
icheck
;
}
}
return
zones
;
...
...
field.cpp
View file @
57599149
...
...
@@ -763,53 +763,13 @@ int32 field::get_szone_limit(uint8 playerid, uint8 uplayer, uint32 reason) {
}
uint32
field
::
get_linked_zone
(
int32
playerid
)
{
uint32
zones
=
0
;
for
(
uint32
i
=
1
;
i
<
5
;
++
i
)
{
card
*
pcard
=
player
[
playerid
].
list_mzone
[
i
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_LEFT
))
zones
|=
1u
<<
(
i
-
1
);
}
for
(
uint32
i
=
0
;
i
<
4
;
++
i
)
{
card
*
pcard
=
player
[
playerid
].
list_mzone
[
i
];
if
(
pcard
&&
pcard
->
is_link_marker
(
LINK_MARKER_RIGHT
))
zones
|=
1u
<<
(
i
+
1
);
}
if
((
player
[
playerid
].
list_mzone
[
0
]
&&
player
[
playerid
].
list_mzone
[
0
]
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
||
(
player
[
playerid
].
list_mzone
[
1
]
&&
player
[
playerid
].
list_mzone
[
1
]
->
is_link_marker
(
LINK_MARKER_TOP
))
||
(
player
[
playerid
].
list_mzone
[
2
]
&&
player
[
playerid
].
list_mzone
[
2
]
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
)))
zones
|=
1u
<<
5
;
if
((
player
[
playerid
].
list_mzone
[
2
]
&&
player
[
playerid
].
list_mzone
[
2
]
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
||
(
player
[
playerid
].
list_mzone
[
3
]
&&
player
[
playerid
].
list_mzone
[
3
]
->
is_link_marker
(
LINK_MARKER_TOP
))
||
(
player
[
playerid
].
list_mzone
[
4
]
&&
player
[
playerid
].
list_mzone
[
4
]
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
)))
zones
|=
1u
<<
6
;
for
(
uint32
i
=
0
;
i
<
2
;
++
i
)
{
card
*
pcard
=
player
[
playerid
].
list_mzone
[
i
+
5
];
if
(
pcard
)
{
if
(
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM_LEFT
))
zones
|=
1u
<<
(
i
*
2
);
if
(
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM
))
zones
|=
1u
<<
(
i
*
2
+
1
);
if
(
pcard
->
is_link_marker
(
LINK_MARKER_BOTTOM_RIGHT
))
zones
|=
1u
<<
(
i
*
2
+
2
);
}
}
if
((
player
[
1
-
playerid
].
list_mzone
[
2
]
&&
player
[
1
-
playerid
].
list_mzone
[
2
]
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
||
(
player
[
1
-
playerid
].
list_mzone
[
3
]
&&
player
[
1
-
playerid
].
list_mzone
[
3
]
->
is_link_marker
(
LINK_MARKER_TOP
))
||
(
player
[
1
-
playerid
].
list_mzone
[
4
]
&&
player
[
1
-
playerid
].
list_mzone
[
4
]
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
)))
zones
|=
1u
<<
5
;
if
((
player
[
1
-
playerid
].
list_mzone
[
0
]
&&
player
[
1
-
playerid
].
list_mzone
[
0
]
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
||
(
player
[
1
-
playerid
].
list_mzone
[
1
]
&&
player
[
1
-
playerid
].
list_mzone
[
1
]
->
is_link_marker
(
LINK_MARKER_TOP
))
||
(
player
[
1
-
playerid
].
list_mzone
[
2
]
&&
player
[
1
-
playerid
].
list_mzone
[
2
]
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
)))
zones
|=
1u
<<
6
;
for
(
uint32
i
=
0
;
i
<
2
;
++
i
)
{
card
*
pcard
=
player
[
1
-
playerid
].
list_mzone
[
i
+
5
];
if
(
pcard
)
{
if
(
pcard
->
is_link_marker
(
LINK_MARKER_TOP_LEFT
))
zones
|=
1u
<<
(
4
-
i
*
2
);
if
(
pcard
->
is_link_marker
(
LINK_MARKER_TOP
))
zones
|=
1u
<<
(
3
-
i
*
2
);
if
(
pcard
->
is_link_marker
(
LINK_MARKER_TOP_RIGHT
))
zones
|=
1u
<<
(
2
-
i
*
2
);
}
for
(
auto
&
pcard
:
player
[
playerid
].
list_mzone
)
{
if
(
pcard
)
zones
|=
pcard
->
get_linked_zone
()
&
0xff
;
}
for
(
auto
&
pcard
:
player
[
1
-
playerid
].
list_mzone
)
{
if
(
pcard
)
zones
|=
pcard
->
get_linked_zone
()
>>
16
;
}
return
zones
;
}
...
...
operations.cpp
View file @
57599149
...
...
@@ -2532,7 +2532,6 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
return
FALSE
;
}
case
7
:
{
returns
.
ivalue
[
0
]
=
core
.
operated_set
.
size
();
adjust_instant
();
raise_event
(
&
core
.
operated_set
,
EVENT_SSET
,
reason_effect
,
0
,
setplayer
,
setplayer
,
0
);
process_instant_event
();
...
...
@@ -2541,6 +2540,10 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
core
.
hint_timing
[
setplayer
]
|=
TIMING_SSET
;
add_process
(
PROCESSOR_POINT_EVENT
,
0
,
0
,
0
,
FALSE
,
FALSE
);
}
return
FALSE
;
}
case
8
:
{
returns
.
ivalue
[
0
]
=
core
.
operated_set
.
size
();
return
TRUE
;
}
}
...
...
processor.cpp
View file @
57599149
...
...
@@ -2466,6 +2466,10 @@ int32 field::process_battle_command(uint16 step) {
core
.
attacker
->
set_status
(
STATUS_ATTACK_CANCELED
,
FALSE
);
core
.
attacker
->
attack_controler
=
core
.
attacker
->
current
.
controler
;
core
.
pre_field
[
0
]
=
core
.
attacker
->
fieldid_r
;
if
(
core
.
chain_attack
&&
core
.
chain_attacker_id
!=
core
.
attacker
->
fieldid
)
{
core
.
chain_attack
=
FALSE
;
core
.
chain_attacker_id
=
0
;
}
effect_set
eset
;
filter_player_effect
(
infos
.
turn_player
,
EFFECT_ATTACK_COST
,
&
eset
,
FALSE
);
core
.
attacker
->
filter_effect
(
EFFECT_ATTACK_COST
,
&
eset
);
...
...
@@ -2598,10 +2602,6 @@ int32 field::process_battle_command(uint16 step) {
case
7
:
{
if
(
!
core
.
units
.
begin
()
->
arg1
)
{
core
.
phase_action
=
TRUE
;
if
(
core
.
chain_attack
&&
core
.
chain_attacker_id
!=
core
.
attacker
->
fieldid
)
{
core
.
chain_attack
=
FALSE
;
core
.
chain_attacker_id
=
0
;
}
core
.
attack_state_count
[
infos
.
turn_player
]
++
;
check_card_counter
(
core
.
attacker
,
5
,
infos
.
turn_player
);
core
.
attacker
->
attack_announce_count
++
;
...
...
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