Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
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-2pick
Commits
9fedc0e4
Commit
9fedc0e4
authored
Sep 24, 2017
by
Momobako
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updcore
parent
4f14a72e
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
424 additions
and
76 deletions
+424
-76
ocgcore/1.patch
ocgcore/1.patch
+318
-0
ocgcore/field.cpp
ocgcore/field.cpp
+31
-38
ocgcore/field.h
ocgcore/field.h
+2
-1
ocgcore/operations.cpp
ocgcore/operations.cpp
+72
-36
ocgcore/processor.cpp
ocgcore/processor.cpp
+1
-1
No files found.
ocgcore/1.patch
0 → 100644
View file @
9fedc0e4
This diff is collapsed.
Click to expand it.
ocgcore/field.cpp
View file @
9fedc0e4
...
...
@@ -365,7 +365,8 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc
if
(
preplayer
==
playerid
)
{
pduel
->
write_buffer32
(
pcard
->
get_info_location
());
pduel
->
write_buffer32
(
pcard
->
current
.
reason
);
}
}
else
pcard
->
fieldid
=
infos
.
field_id
++
;
return
;
}
else
if
(
location
==
LOCATION_HAND
)
{
if
(
preplayer
==
playerid
)
...
...
@@ -419,6 +420,20 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc
}
add_card
(
playerid
,
pcard
,
location
,
sequence
,
pzone
);
}
void
field
::
swap_card
(
card
*
pcard1
,
card
*
pcard2
)
{
uint8
p1
=
pcard1
->
current
.
controler
,
p2
=
pcard2
->
current
.
controler
;
uint8
l1
=
pcard1
->
current
.
location
,
l2
=
pcard2
->
current
.
location
;
uint8
s1
=
pcard1
->
current
.
sequence
,
s2
=
pcard2
->
current
.
sequence
;
remove_card
(
pcard1
);
remove_card
(
pcard2
);
add_card
(
p2
,
pcard1
,
l2
,
s2
);
add_card
(
p1
,
pcard2
,
l1
,
s1
);
pduel
->
write_buffer8
(
MSG_SWAP
);
pduel
->
write_buffer32
(
pcard1
->
data
.
code
);
pduel
->
write_buffer32
(
pcard2
->
get_info_location
());
pduel
->
write_buffer32
(
pcard2
->
data
.
code
);
pduel
->
write_buffer32
(
pcard1
->
get_info_location
());
}
// add EFFECT_SET_CONTROL
void
field
::
set_control
(
card
*
pcard
,
uint8
playerid
,
uint16
reset_phase
,
uint8
reset_count
)
{
if
((
core
.
remove_brainwashing
&&
pcard
->
is_affected_by_effect
(
EFFECT_REMOVE_BRAINWASHING
))
||
pcard
->
refresh_control_status
()
==
playerid
)
...
...
@@ -1800,47 +1815,33 @@ void field::adjust_disable_check_list() {
void
field
::
adjust_self_destroy_set
()
{
if
(
core
.
selfdes_disabled
||
!
core
.
unique_destroy_set
.
empty
()
||
!
core
.
self_destroy_set
.
empty
()
||
!
core
.
self_tograve_set
.
empty
())
return
;
core
.
unique_destroy_set
.
clear
();
card_set
cset
;
int32
p
=
infos
.
turn_player
;
for
(
int32
p1
=
0
;
p1
<
2
;
++
p1
)
{
std
::
vector
<
card
*>
uniq_set
;
for
(
auto
iter
=
core
.
unique_cards
[
p
].
begin
();
iter
!=
core
.
unique_cards
[
p
].
end
();
++
iter
)
{
card
*
ucard
=
*
iter
;
if
(
ucard
->
is_position
(
POS_FACEUP
)
&&
ucard
->
get_status
(
STATUS_EFFECT_ENABLED
)
&&
!
ucard
->
get_status
(
STATUS_DISABLED
|
STATUS_FORBIDDEN
))
{
card_set
cset
;
ucard
->
get_unique_target
(
&
cset
,
p
);
if
(
cset
.
size
()
==
0
)
ucard
->
unique_fieldid
=
0
;
else
if
(
cset
.
size
()
==
1
)
{
auto
cit
=
cset
.
begin
();
ucard
->
unique_fieldid
=
(
*
cit
)
->
fieldid
;
}
else
{
card
*
mcard
=
0
;
for
(
auto
cit
=
cset
.
begin
();
cit
!=
cset
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
if
(
ucard
->
unique_fieldid
==
pcard
->
fieldid
)
{
mcard
=
pcard
;
break
;
}
if
(
!
mcard
||
pcard
->
fieldid
<
mcard
->
fieldid
)
mcard
=
pcard
;
}
ucard
->
unique_fieldid
=
mcard
->
fieldid
;
cset
.
erase
(
mcard
);
for
(
auto
cit
=
cset
.
begin
();
cit
!=
cset
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
core
.
unique_destroy_set
.
insert
(
pcard
);
pcard
->
temp
.
reason_effect
=
pcard
->
current
.
reason_effect
;
pcard
->
temp
.
reason_player
=
pcard
->
current
.
reason_player
;
pcard
->
current
.
reason_effect
=
ucard
->
unique_effect
;
pcard
->
current
.
reason_player
=
ucard
->
current
.
controler
;
}
}
}
else
uniq_set
.
push_back
(
ucard
);
}
}
std
::
sort
(
uniq_set
.
begin
(),
uniq_set
.
end
(),
[](
card
*
lhs
,
card
*
rhs
)
{
return
lhs
->
fieldid
<
rhs
->
fieldid
;
});
for
(
auto
iter
=
uniq_set
.
begin
();
iter
!=
uniq_set
.
end
();
++
iter
)
{
card
*
pcard
=
*
iter
;
add_process
(
PROCESSOR_SELF_DESTROY
,
0
,
0
,
0
,
p
,
0
,
0
,
0
,
pcard
);
core
.
unique_destroy_set
.
insert
(
pcard
);
}
p
=
1
-
p
;
}
c
set
.
clear
()
;
c
ard_set
cset
;
for
(
uint8
p
=
0
;
p
<
2
;
++
p
)
{
for
(
auto
cit
=
player
[
p
].
list_mzone
.
begin
();
cit
!=
player
[
p
].
list_mzone
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
...
...
@@ -1853,17 +1854,11 @@ void field::adjust_self_destroy_set() {
cset
.
insert
(
pcard
);
}
}
core
.
self_destroy_set
.
clear
();
core
.
self_tograve_set
.
clear
();
for
(
auto
cit
=
cset
.
begin
();
cit
!=
cset
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
effect
*
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_SELF_DESTROY
);
if
(
peffect
)
{
core
.
self_destroy_set
.
insert
(
pcard
);
pcard
->
temp
.
reason_effect
=
pcard
->
current
.
reason_effect
;
pcard
->
temp
.
reason_player
=
pcard
->
current
.
reason_player
;
pcard
->
current
.
reason_effect
=
peffect
;
pcard
->
current
.
reason_player
=
peffect
->
get_handler_player
();
}
}
if
(
core
.
global_flag
&
GLOBALFLAG_SELF_TOGRAVE
)
{
...
...
@@ -1872,15 +1867,13 @@ void field::adjust_self_destroy_set() {
effect
*
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_SELF_TOGRAVE
);
if
(
peffect
)
{
core
.
self_tograve_set
.
insert
(
pcard
);
pcard
->
temp
.
reason_effect
=
pcard
->
current
.
reason_effect
;
pcard
->
temp
.
reason_player
=
pcard
->
current
.
reason_player
;
pcard
->
current
.
reason_effect
=
peffect
;
pcard
->
current
.
reason_player
=
peffect
->
get_handler_player
();
}
}
}
if
(
!
core
.
unique_destroy_set
.
empty
()
||
!
core
.
self_destroy_set
.
empty
()
||
!
core
.
self_tograve_set
.
empty
())
add_process
(
PROCESSOR_SELF_DESTROY
,
0
,
0
,
0
,
0
,
0
);
if
(
!
core
.
self_destroy_set
.
empty
())
add_process
(
PROCESSOR_SELF_DESTROY
,
10
,
0
,
0
,
0
,
0
);
if
(
!
core
.
self_tograve_set
.
empty
())
add_process
(
PROCESSOR_SELF_DESTROY
,
20
,
0
,
0
,
0
,
0
);
}
void
field
::
add_unique_card
(
card
*
pcard
)
{
uint8
con
=
pcard
->
current
.
controler
;
...
...
ocgcore/field.h
View file @
9fedc0e4
...
...
@@ -345,6 +345,7 @@ public:
void
add_card
(
uint8
playerid
,
card
*
pcard
,
uint8
location
,
uint8
sequence
,
uint8
pzone
=
FALSE
);
void
remove_card
(
card
*
pcard
);
void
move_card
(
uint8
playerid
,
card
*
pcard
,
uint8
location
,
uint8
sequence
,
uint8
pzone
=
FALSE
);
void
swap_card
(
card
*
pcard1
,
card
*
pcard2
);
void
set_control
(
card
*
pcard
,
uint8
playerid
,
uint16
reset_phase
,
uint8
reset_count
);
card
*
get_field_card
(
uint32
playerid
,
uint32
location
,
uint32
sequence
);
int32
is_location_useable
(
uint32
playerid
,
uint32
location
,
uint32
sequence
,
uint8
neglect_used
=
0
);
...
...
@@ -528,7 +529,7 @@ public:
int32
get_control
(
uint16
step
,
effect
*
reason_effect
,
uint8
reason_player
,
group
*
targets
,
uint8
playerid
,
uint16
reset_phase
,
uint8
reset_count
,
uint32
zone
);
int32
swap_control
(
uint16
step
,
effect
*
reason_effect
,
uint8
reason_player
,
group
*
targets1
,
group
*
targets2
,
uint16
reset_phase
,
uint8
reset_count
);
int32
control_adjust
(
uint16
step
);
int32
self_destroy
(
uint16
step
);
int32
self_destroy
(
uint16
step
,
card
*
ucard
,
int32
p
);
int32
equip
(
uint16
step
,
uint8
equip_player
,
card
*
equip_card
,
card
*
target
,
uint32
up
,
uint32
is_step
);
int32
draw
(
uint16
step
,
effect
*
reason_effect
,
uint32
reason
,
uint8
reason_player
,
uint8
playerid
,
uint32
count
);
int32
damage
(
uint16
step
,
effect
*
reason_effect
,
uint32
reason
,
uint8
reason_player
,
card
*
reason_card
,
uint8
playerid
,
uint32
amount
,
uint32
is_step
);
...
...
ocgcore/operations.cpp
View file @
9fedc0e4
...
...
@@ -856,7 +856,7 @@ int32 field::get_control(uint16 step, effect* reason_effect, uint8 reason_player
if
((
pcard
->
get_type
()
&
TYPE_TRAPMONSTER
)
&&
get_useable_count
(
playerid
,
LOCATION_SZONE
,
playerid
,
LOCATION_REASON_CONTROL
)
<=
0
)
change
=
false
;
if
(
!
change
)
targets
->
container
.
erase
(
pcard
);
targets
->
container
.
erase
(
rm
);
}
int32
fcount
=
get_useable_count
(
playerid
,
LOCATION_MZONE
,
playerid
,
LOCATION_REASON_CONTROL
,
zone
);
if
(
fcount
<=
0
)
{
...
...
@@ -902,8 +902,6 @@ int32 field::get_control(uint16 step, effect* reason_effect, uint8 reason_player
}
card
*
pcard
=
*
targets
->
it
;
move_to_field
(
pcard
,
playerid
,
playerid
,
LOCATION_MZONE
,
pcard
->
current
.
position
,
FALSE
,
0
,
FALSE
,
zone
);
pcard
->
fieldid
=
infos
.
field_id
++
;
pcard
->
fieldid_r
=
pcard
->
fieldid
;
return
FALSE
;
}
case
4
:
{
...
...
@@ -1218,20 +1216,9 @@ int32 field::control_adjust(uint16 step) {
while
(
cit1
!=
core
.
control_adjust_set
[
0
].
end
()
&&
cit2
!=
core
.
control_adjust_set
[
1
].
end
())
{
card
*
pcard1
=
*
cit1
++
;
card
*
pcard2
=
*
cit2
++
;
uint8
p1
=
pcard1
->
current
.
controler
,
p2
=
pcard2
->
current
.
controler
;
uint8
l1
=
pcard1
->
current
.
location
,
l2
=
pcard2
->
current
.
location
;
uint8
s1
=
pcard1
->
current
.
sequence
,
s2
=
pcard2
->
current
.
sequence
;
remove_card
(
pcard1
);
remove_card
(
pcard2
);
add_card
(
p2
,
pcard1
,
l2
,
s2
);
add_card
(
p1
,
pcard2
,
l1
,
s1
);
swap_card
(
pcard1
,
pcard2
);
pcard1
->
reset
(
RESET_CONTROL
,
RESET_EVENT
);
pcard2
->
reset
(
RESET_CONTROL
,
RESET_EVENT
);
pduel
->
write_buffer8
(
MSG_SWAP
);
pduel
->
write_buffer32
(
pcard1
->
data
.
code
);
pduel
->
write_buffer32
(
pcard2
->
get_info_location
());
pduel
->
write_buffer32
(
pcard2
->
data
.
code
);
pduel
->
write_buffer32
(
pcard1
->
get_info_location
());
}
card_set
*
adjust_set
=
new
card_set
;
core
.
units
.
begin
()
->
ptarget
=
(
group
*
)
adjust_set
;
...
...
@@ -1282,36 +1269,85 @@ int32 field::control_adjust(uint16 step) {
}
return
TRUE
;
}
int32
field
::
self_destroy
(
uint16
step
)
{
int32
field
::
self_destroy
(
uint16
step
,
card
*
ucard
,
int32
p
)
{
switch
(
step
)
{
case
0
:
{
if
(
!
core
.
unique_destroy_set
.
empty
())
destroy
(
&
core
.
unique_destroy_set
,
0
,
REASON_RULE
,
5
);
return
FALSE
;
core
.
unique_destroy_set
.
erase
(
ucard
);
if
(
core
.
unique_cards
[
p
].
find
(
ucard
)
==
core
.
unique_cards
[
p
].
end
())
return
TRUE
;
card_set
cset
;
ucard
->
get_unique_target
(
&
cset
,
p
);
if
(
cset
.
size
()
==
0
)
ucard
->
unique_fieldid
=
0
;
else
if
(
cset
.
size
()
==
1
)
{
auto
cit
=
cset
.
begin
();
ucard
->
unique_fieldid
=
(
*
cit
)
->
fieldid
;
}
else
{
card
*
mcard
=
0
;
for
(
auto
cit
=
cset
.
begin
();
cit
!=
cset
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
if
(
ucard
->
unique_fieldid
==
pcard
->
fieldid
)
{
mcard
=
pcard
;
break
;
}
if
(
!
mcard
||
pcard
->
fieldid
<
mcard
->
fieldid
)
mcard
=
pcard
;
}
ucard
->
unique_fieldid
=
mcard
->
fieldid
;
cset
.
erase
(
mcard
);
for
(
auto
cit
=
cset
.
begin
();
cit
!=
cset
.
end
();
++
cit
)
{
card
*
pcard
=
*
cit
;
pcard
->
temp
.
reason_effect
=
pcard
->
current
.
reason_effect
;
pcard
->
temp
.
reason_player
=
pcard
->
current
.
reason_player
;
pcard
->
current
.
reason_effect
=
ucard
->
unique_effect
;
pcard
->
current
.
reason_player
=
ucard
->
current
.
controler
;
}
destroy
(
&
cset
,
0
,
REASON_RULE
,
5
);
}
return
TRUE
;
}
case
1
:
{
core
.
unique_destroy_set
.
clear
();
core
.
operated_set
.
clear
();
if
(
!
core
.
self_destroy_set
.
empty
())
destroy
(
&
core
.
self_destroy_set
,
0
,
REASON_EFFECT
,
5
);
case
10
:
{
if
(
core
.
self_destroy_set
.
empty
())
return
FALSE
;
auto
it
=
core
.
self_destroy_set
.
begin
();
card
*
pcard
=
*
it
;
effect
*
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_SELF_DESTROY
);
if
(
peffect
)
{
pcard
->
temp
.
reason_effect
=
pcard
->
current
.
reason_effect
;
pcard
->
temp
.
reason_player
=
pcard
->
current
.
reason_player
;
pcard
->
current
.
reason_effect
=
peffect
;
pcard
->
current
.
reason_player
=
peffect
->
get_handler_player
();
destroy
(
pcard
,
0
,
REASON_EFFECT
,
5
);
}
core
.
self_destroy_set
.
erase
(
it
);
core
.
units
.
begin
()
->
step
=
9
;
return
FALSE
;
}
case
2
:
{
core
.
self_destroy_set
.
clear
();
core
.
operated_set
.
clear
();
case
11
:
{
returns
.
ivalue
[
0
]
=
0
;
if
(
!
(
core
.
global_flag
&
GLOBALFLAG_SELF_TOGRAVE
))
return
TRUE
;
if
(
!
core
.
self_tograve_set
.
empty
())
send_to
(
&
core
.
self_tograve_set
,
0
,
REASON_EFFECT
,
PLAYER_NONE
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
else
return
TRUE
;
core
.
operated_set
.
clear
();
return
TRUE
;
}
case
20
:
{
if
(
core
.
self_tograve_set
.
empty
())
return
FALSE
;
auto
it
=
core
.
self_tograve_set
.
begin
();
card
*
pcard
=
*
it
;
effect
*
peffect
=
pcard
->
is_affected_by_effect
(
EFFECT_SELF_TOGRAVE
);
if
(
peffect
)
{
pcard
->
temp
.
reason_effect
=
pcard
->
current
.
reason_effect
;
pcard
->
temp
.
reason_player
=
pcard
->
current
.
reason_player
;
pcard
->
current
.
reason_effect
=
peffect
;
pcard
->
current
.
reason_player
=
peffect
->
get_handler_player
();
send_to
(
pcard
,
0
,
REASON_EFFECT
,
PLAYER_NONE
,
PLAYER_NONE
,
LOCATION_GRAVE
,
0
,
POS_FACEUP
);
}
core
.
self_tograve_set
.
erase
(
it
);
core
.
units
.
begin
()
->
step
=
19
;
return
FALSE
;
}
case
3
:
{
core
.
self_tograve_set
.
clear
();
core
.
operated_set
.
clear
();
case
21
:
{
returns
.
ivalue
[
0
]
=
0
;
core
.
operated_set
.
clear
();
return
TRUE
;
}
}
...
...
ocgcore/processor.cpp
View file @
9fedc0e4
...
...
@@ -480,7 +480,7 @@ int32 field::process() {
return
pduel
->
bufferlen
;
}
case
PROCESSOR_SELF_DESTROY
:
{
if
(
self_destroy
(
it
->
step
))
{
if
(
self_destroy
(
it
->
step
,
(
card
*
)
it
->
ptr1
,
it
->
arg1
))
{
core
.
units
.
pop_front
();
}
else
it
->
step
++
;
...
...
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