Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
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
List
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
YGOPRO-520DIY
ygopro
Commits
98fa5080
Commit
98fa5080
authored
Mar 14, 2021
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'patch-bot-select-deckfile' into patch-deck-category
parents
5179735f
44afc673
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1885 additions
and
816 deletions
+1885
-816
gframe/client_field.cpp
gframe/client_field.cpp
+87
-2
gframe/client_field.h
gframe/client_field.h
+6
-0
gframe/deck_con.cpp
gframe/deck_con.cpp
+4
-4
gframe/drawing.cpp
gframe/drawing.cpp
+13
-1
gframe/duelclient.cpp
gframe/duelclient.cpp
+20
-3
gframe/event_handler.cpp
gframe/event_handler.cpp
+74
-25
gframe/game.cpp
gframe/game.cpp
+88
-10
gframe/game.h
gframe/game.h
+2
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+13
-2
lflist.conf
lflist.conf
+1507
-735
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+69
-32
No files found.
gframe/client_field.cpp
View file @
98fa5080
...
@@ -29,6 +29,7 @@ ClientField::ClientField() {
...
@@ -29,6 +29,7 @@ ClientField::ClientField() {
conti_act
=
false
;
conti_act
=
false
;
deck_reversed
=
false
;
deck_reversed
=
false
;
conti_selecting
=
false
;
conti_selecting
=
false
;
cant_check_grave
=
false
;
for
(
int
p
=
0
;
p
<
2
;
++
p
)
{
for
(
int
p
=
0
;
p
<
2
;
++
p
)
{
mzone
[
p
].
resize
(
7
,
0
);
mzone
[
p
].
resize
(
7
,
0
);
szone
[
p
].
resize
(
8
,
0
);
szone
[
p
].
resize
(
8
,
0
);
...
@@ -93,6 +94,7 @@ void ClientField::Clear() {
...
@@ -93,6 +94,7 @@ void ClientField::Clear() {
pzone_act
[
1
]
=
false
;
pzone_act
[
1
]
=
false
;
conti_act
=
false
;
conti_act
=
false
;
deck_reversed
=
false
;
deck_reversed
=
false
;
cant_check_grave
=
false
;
}
}
void
ClientField
::
Initial
(
int
player
,
int
deckc
,
int
extrac
)
{
void
ClientField
::
Initial
(
int
player
,
int
deckc
,
int
extrac
)
{
ClientCard
*
pcard
;
ClientCard
*
pcard
;
...
@@ -384,6 +386,18 @@ void ClientField::ClearChainSelect() {
...
@@ -384,6 +386,18 @@ void ClientField::ClearChainSelect() {
}
}
// needs to be synchronized with EGET_SCROLL_BAR_CHANGED
// needs to be synchronized with EGET_SCROLL_BAR_CHANGED
void
ClientField
::
ShowSelectCard
(
bool
buttonok
,
bool
chain
)
{
void
ClientField
::
ShowSelectCard
(
bool
buttonok
,
bool
chain
)
{
if
(
cant_check_grave
)
{
bool
has_card_in_grave
=
false
;
for
(
size_t
i
=
0
;
i
<
selectable_cards
.
size
();
++
i
)
{
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_GRAVE
)
{
has_card_in_grave
=
true
;
break
;
}
}
if
(
has_card_in_grave
)
{
std
::
random_shuffle
(
selectable_cards
.
begin
(),
selectable_cards
.
end
());
}
}
int
startpos
;
int
startpos
;
size_t
ct
;
size_t
ct
;
if
(
selectable_cards
.
size
()
<=
5
)
{
if
(
selectable_cards
.
size
()
<=
5
)
{
...
@@ -410,6 +424,8 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -410,6 +424,8 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
wchar_t
formatBuffer
[
2048
];
wchar_t
formatBuffer
[
2048
];
if
(
conti_selecting
)
if
(
conti_selecting
)
myswprintf
(
formatBuffer
,
L"%ls"
,
DataManager
::
unknown_string
);
myswprintf
(
formatBuffer
,
L"%ls"
,
DataManager
::
unknown_string
);
else
if
(
cant_check_grave
&&
selectable_cards
[
i
]
->
location
==
LOCATION_GRAVE
)
myswprintf
(
formatBuffer
,
L"%ls"
,
dataManager
.
FormatLocation
(
selectable_cards
[
i
]
->
location
,
0
));
else
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_OVERLAY
)
else
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_OVERLAY
)
myswprintf
(
formatBuffer
,
L"%ls[%d](%d)"
,
myswprintf
(
formatBuffer
,
L"%ls[%d](%d)"
,
dataManager
.
FormatLocation
(
selectable_cards
[
i
]
->
overlayTarget
->
location
,
selectable_cards
[
i
]
->
overlayTarget
->
sequence
),
dataManager
.
FormatLocation
(
selectable_cards
[
i
]
->
overlayTarget
->
location
,
selectable_cards
[
i
]
->
overlayTarget
->
sequence
),
...
@@ -429,7 +445,8 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -429,7 +445,8 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame
->
stCardPos
[
i
]
->
setOverrideColor
(
0xff0000ff
);
mainGame
->
stCardPos
[
i
]
->
setOverrideColor
(
0xff0000ff
);
if
(
selectable_cards
[
i
]
->
overlayTarget
->
controler
)
if
(
selectable_cards
[
i
]
->
overlayTarget
->
controler
)
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffd0d0d0
);
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffd0d0d0
);
else
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
else
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
}
else
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_DECK
||
selectable_cards
[
i
]
->
location
==
LOCATION_EXTRA
||
selectable_cards
[
i
]
->
location
==
LOCATION_REMOVED
)
{
}
else
if
(
selectable_cards
[
i
]
->
location
==
LOCATION_DECK
||
selectable_cards
[
i
]
->
location
==
LOCATION_EXTRA
||
selectable_cards
[
i
]
->
location
==
LOCATION_REMOVED
)
{
if
(
selectable_cards
[
i
]
->
position
&
POS_FACEDOWN
)
if
(
selectable_cards
[
i
]
->
position
&
POS_FACEDOWN
)
mainGame
->
stCardPos
[
i
]
->
setOverrideColor
(
0xff0000ff
);
mainGame
->
stCardPos
[
i
]
->
setOverrideColor
(
0xff0000ff
);
...
@@ -449,7 +466,8 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -449,7 +466,8 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
wchar_t
formatBuffer
[
2048
];
wchar_t
formatBuffer
[
2048
];
myswprintf
(
formatBuffer
,
L"%d"
,
sort_list
[
i
]);
myswprintf
(
formatBuffer
,
L"%d"
,
sort_list
[
i
]);
mainGame
->
stCardPos
[
i
]
->
setText
(
formatBuffer
);
mainGame
->
stCardPos
[
i
]
->
setText
(
formatBuffer
);
}
else
mainGame
->
stCardPos
[
i
]
->
setText
(
L""
);
}
else
mainGame
->
stCardPos
[
i
]
->
setText
(
L""
);
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
mainGame
->
stCardPos
[
i
]
->
setBackgroundColor
(
0xffffffff
);
}
}
mainGame
->
stCardPos
[
i
]
->
setVisible
(
true
);
mainGame
->
stCardPos
[
i
]
->
setVisible
(
true
);
...
@@ -1209,6 +1227,27 @@ bool ClientField::CheckSelectSum() {
...
@@ -1209,6 +1227,27 @@ bool ClientField::CheckSelectSum() {
return
ret
;
return
ret
;
}
}
}
}
bool
ClientField
::
CheckSelectTribute
()
{
std
::
set
<
ClientCard
*>
selable
;
for
(
auto
sit
=
selectsum_all
.
begin
();
sit
!=
selectsum_all
.
end
();
++
sit
)
{
(
*
sit
)
->
is_selectable
=
false
;
(
*
sit
)
->
is_selected
=
false
;
selable
.
insert
(
*
sit
);
}
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
{
selected_cards
[
i
]
->
is_selectable
=
true
;
selected_cards
[
i
]
->
is_selected
=
true
;
selable
.
erase
(
selected_cards
[
i
]);
}
selectsum_cards
.
clear
();
bool
ret
=
check_sel_sum_trib_s
(
selable
,
0
,
0
);
selectable_cards
.
clear
();
for
(
auto
sit
=
selectsum_cards
.
begin
();
sit
!=
selectsum_cards
.
end
();
++
sit
)
{
(
*
sit
)
->
is_selectable
=
true
;
selectable_cards
.
push_back
(
*
sit
);
}
return
ret
;
}
bool
ClientField
::
check_min
(
const
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
const_iterator
index
,
int
min
,
int
max
)
{
bool
ClientField
::
check_min
(
const
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
const_iterator
index
,
int
min
,
int
max
)
{
if
(
index
==
left
.
end
())
if
(
index
==
left
.
end
())
return
false
;
return
false
;
...
@@ -1272,6 +1311,52 @@ bool ClientField::check_sum(std::set<ClientCard*>::const_iterator index, std::se
...
@@ -1272,6 +1311,52 @@ bool ClientField::check_sum(std::set<ClientCard*>::const_iterator index, std::se
||
(
l2
>
0
&&
acc
>
l2
&&
check_sum
(
index
,
end
,
acc
-
l2
,
count
+
1
))
||
(
l2
>
0
&&
acc
>
l2
&&
check_sum
(
index
,
end
,
acc
-
l2
,
count
+
1
))
||
check_sum
(
index
,
end
,
acc
,
count
);
||
check_sum
(
index
,
end
,
acc
,
count
);
}
}
bool
ClientField
::
check_sel_sum_trib_s
(
const
std
::
set
<
ClientCard
*>&
left
,
int
index
,
int
acc
)
{
if
(
acc
>
select_max
)
return
false
;
if
(
index
==
(
int
)
selected_cards
.
size
())
{
check_sel_sum_trib_t
(
left
,
acc
);
return
acc
>=
select_min
&&
acc
<=
select_max
;
}
int
l
=
selected_cards
[
index
]
->
opParam
;
int
l1
=
l
&
0xffff
;
int
l2
=
l
>>
16
;
bool
res1
=
false
,
res2
=
false
;
res1
=
check_sel_sum_trib_s
(
left
,
index
+
1
,
acc
+
l1
);
if
(
l2
>
0
)
res2
=
check_sel_sum_trib_s
(
left
,
index
+
1
,
acc
+
l2
);
return
res1
||
res2
;
}
void
ClientField
::
check_sel_sum_trib_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
)
{
for
(
auto
sit
=
left
.
begin
();
sit
!=
left
.
end
();
++
sit
)
{
if
(
selectsum_cards
.
find
(
*
sit
)
!=
selectsum_cards
.
end
())
continue
;
std
::
set
<
ClientCard
*>
testlist
(
left
);
testlist
.
erase
(
*
sit
);
int
l
=
(
*
sit
)
->
opParam
;
int
l1
=
l
&
0xffff
;
int
l2
=
l
>>
16
;
if
(
check_sum_trib
(
testlist
.
begin
(),
testlist
.
end
(),
acc
+
l1
)
||
(
l2
>
0
&&
check_sum_trib
(
testlist
.
begin
(),
testlist
.
end
(),
acc
+
l2
)))
{
selectsum_cards
.
insert
(
*
sit
);
}
}
}
bool
ClientField
::
check_sum_trib
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
)
{
if
(
acc
>=
select_min
&&
acc
<=
select_max
)
return
true
;
if
(
acc
>
select_max
||
index
==
end
)
return
false
;
int
l
=
(
*
index
)
->
opParam
;
int
l1
=
l
&
0xffff
;
int
l2
=
l
>>
16
;
if
((
acc
+
l1
>=
select_min
&&
acc
+
l1
<=
select_max
)
||
(
acc
+
l2
>=
select_min
&&
acc
+
l2
<=
select_max
))
return
true
;
++
index
;
return
check_sum_trib
(
index
,
end
,
acc
+
l1
)
||
check_sum_trib
(
index
,
end
,
acc
+
l2
)
||
check_sum_trib
(
index
,
end
,
acc
);
}
template
<
class
T
>
template
<
class
T
>
static
bool
is_declarable
(
T
const
&
cd
,
const
std
::
vector
<
int
>&
opcode
)
{
static
bool
is_declarable
(
T
const
&
cd
,
const
std
::
vector
<
int
>&
opcode
)
{
std
::
stack
<
int
>
stack
;
std
::
stack
<
int
>
stack
;
...
...
gframe/client_field.h
View file @
98fa5080
...
@@ -81,6 +81,7 @@ public:
...
@@ -81,6 +81,7 @@ public:
bool
last_chain
;
bool
last_chain
;
bool
deck_reversed
;
bool
deck_reversed
;
bool
conti_selecting
;
bool
conti_selecting
;
bool
cant_check_grave
;
ClientField
();
ClientField
();
void
Clear
();
void
Clear
();
...
@@ -106,10 +107,14 @@ public:
...
@@ -106,10 +107,14 @@ public:
void
FadeCard
(
ClientCard
*
pcard
,
int
alpha
,
int
frame
);
void
FadeCard
(
ClientCard
*
pcard
,
int
alpha
,
int
frame
);
bool
ShowSelectSum
(
bool
panelmode
);
bool
ShowSelectSum
(
bool
panelmode
);
bool
CheckSelectSum
();
bool
CheckSelectSum
();
bool
CheckSelectTribute
();
bool
check_min
(
const
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
const_iterator
index
,
int
min
,
int
max
);
bool
check_min
(
const
std
::
set
<
ClientCard
*>&
left
,
std
::
set
<
ClientCard
*>::
const_iterator
index
,
int
min
,
int
max
);
bool
check_sel_sum_s
(
const
std
::
set
<
ClientCard
*>&
left
,
int
index
,
int
acc
);
bool
check_sel_sum_s
(
const
std
::
set
<
ClientCard
*>&
left
,
int
index
,
int
acc
);
void
check_sel_sum_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
);
void
check_sel_sum_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
);
bool
check_sum
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
,
int
count
);
bool
check_sum
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
,
int
count
);
bool
check_sel_sum_trib_s
(
const
std
::
set
<
ClientCard
*>&
left
,
int
index
,
int
acc
);
void
check_sel_sum_trib_t
(
const
std
::
set
<
ClientCard
*>&
left
,
int
acc
);
bool
check_sum_trib
(
std
::
set
<
ClientCard
*>::
const_iterator
index
,
std
::
set
<
ClientCard
*>::
const_iterator
end
,
int
acc
);
void
UpdateDeclarableList
();
void
UpdateDeclarableList
();
...
@@ -146,5 +151,6 @@ public:
...
@@ -146,5 +151,6 @@ public:
//special cards
//special cards
#define CARD_MARINE_DOLPHIN 78734254
#define CARD_MARINE_DOLPHIN 78734254
#define CARD_TWINKLE_MOSS 13857930
#define CARD_TWINKLE_MOSS 13857930
#define CARD_QUESTION 38723936
#endif //CLIENT_FIELD_H
#endif //CLIENT_FIELD_H
gframe/deck_con.cpp
View file @
98fa5080
...
@@ -144,8 +144,8 @@ inline void ShowBigCard(int code, float zoom) {
...
@@ -144,8 +144,8 @@ inline void ShowBigCard(int code, float zoom) {
inline
void
ZoomBigCard
(
s32
centerx
=
-
1
,
s32
centery
=
-
1
)
{
inline
void
ZoomBigCard
(
s32
centerx
=
-
1
,
s32
centery
=
-
1
)
{
if
(
mainGame
->
deckBuilder
.
bigcard_zoom
>=
4
)
if
(
mainGame
->
deckBuilder
.
bigcard_zoom
>=
4
)
mainGame
->
deckBuilder
.
bigcard_zoom
=
4
;
mainGame
->
deckBuilder
.
bigcard_zoom
=
4
;
if
(
mainGame
->
deckBuilder
.
bigcard_zoom
<=
0.2
)
if
(
mainGame
->
deckBuilder
.
bigcard_zoom
<=
0.2
f
)
mainGame
->
deckBuilder
.
bigcard_zoom
=
0.2
;
mainGame
->
deckBuilder
.
bigcard_zoom
=
0.2
f
;
ITexture
*
img
=
imageManager
.
GetBigPicture
(
mainGame
->
deckBuilder
.
bigcard_code
,
mainGame
->
deckBuilder
.
bigcard_zoom
);
ITexture
*
img
=
imageManager
.
GetBigPicture
(
mainGame
->
deckBuilder
.
bigcard_code
,
mainGame
->
deckBuilder
.
bigcard_zoom
);
mainGame
->
imgBigCard
->
setImage
(
img
);
mainGame
->
imgBigCard
->
setImage
(
img
);
auto
size
=
img
->
getSize
();
auto
size
=
img
->
getSize
();
...
@@ -769,12 +769,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -769,12 +769,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
break
;
}
}
case
BUTTON_BIG_CARD_ZOOM_IN
:
{
case
BUTTON_BIG_CARD_ZOOM_IN
:
{
bigcard_zoom
+=
0.2
;
bigcard_zoom
+=
0.2
f
;
ZoomBigCard
();
ZoomBigCard
();
break
;
break
;
}
}
case
BUTTON_BIG_CARD_ZOOM_OUT
:
{
case
BUTTON_BIG_CARD_ZOOM_OUT
:
{
bigcard_zoom
-=
0.2
;
bigcard_zoom
-=
0.2
f
;
ZoomBigCard
();
ZoomBigCard
();
break
;
break
;
}
}
...
...
gframe/drawing.cpp
View file @
98fa5080
...
@@ -408,7 +408,7 @@ void Game::DrawShadowText(CGUITTFont * font, const core::stringw & text, const c
...
@@ -408,7 +408,7 @@ void Game::DrawShadowText(CGUITTFont * font, const core::stringw & text, const c
void
Game
::
DrawMisc
()
{
void
Game
::
DrawMisc
()
{
static
irr
::
core
::
vector3df
act_rot
(
0
,
0
,
0
);
static
irr
::
core
::
vector3df
act_rot
(
0
,
0
,
0
);
int
rule
=
(
dInfo
.
duel_rule
>=
4
)
?
1
:
0
;
int
rule
=
(
dInfo
.
duel_rule
>=
4
)
?
1
:
0
;
irr
::
core
::
matrix4
im
,
ic
,
it
;
irr
::
core
::
matrix4
im
,
ic
,
it
,
ig
;
act_rot
.
Z
+=
0.02
f
;
act_rot
.
Z
+=
0.02
f
;
im
.
setRotationRadians
(
act_rot
);
im
.
setRotationRadians
(
act_rot
);
matManager
.
mTexture
.
setTexture
(
0
,
imageManager
.
tAct
);
matManager
.
mTexture
.
setTexture
(
0
,
imageManager
.
tAct
);
...
@@ -492,6 +492,18 @@ void Game::DrawMisc() {
...
@@ -492,6 +492,18 @@ void Game::DrawMisc() {
driver
->
drawVertexPrimitiveList
(
matManager
.
vChainNum
,
4
,
matManager
.
iRectangle
,
2
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vChainNum
,
4
,
matManager
.
iRectangle
,
2
);
}
}
}
}
if
(
dField
.
cant_check_grave
)
{
matManager
.
mTexture
.
setTexture
(
0
,
imageManager
.
tNegated
);
driver
->
setMaterial
(
matManager
.
mTexture
);
ig
.
setTranslation
(
vector3df
((
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
0
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldGrave
[
0
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldGrave
[
0
][
rule
][
2
].
Pos
.
Y
)
/
2
,
dField
.
grave
[
0
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
ig
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vNegate
,
4
,
matManager
.
iRectangle
,
2
);
ig
.
setTranslation
(
vector3df
((
matManager
.
vFieldGrave
[
1
][
rule
][
0
].
Pos
.
X
+
matManager
.
vFieldGrave
[
1
][
rule
][
1
].
Pos
.
X
)
/
2
,
(
matManager
.
vFieldGrave
[
1
][
rule
][
0
].
Pos
.
Y
+
matManager
.
vFieldGrave
[
1
][
rule
][
2
].
Pos
.
Y
)
/
2
,
dField
.
grave
[
1
].
size
()
*
0.01
f
+
0.02
f
));
driver
->
setTransform
(
irr
::
video
::
ETS_WORLD
,
ig
);
driver
->
drawVertexPrimitiveList
(
matManager
.
vNegate
,
4
,
matManager
.
iRectangle
,
2
);
}
//finish button
//finish button
if
(
btnCancelOrFinish
->
isVisible
()
&&
dField
.
select_ready
)
if
(
btnCancelOrFinish
->
isVisible
()
&&
dField
.
select_ready
)
DrawSelectionLine
(
btnCancelOrFinish
,
2
,
0xffffff00
);
DrawSelectionLine
(
btnCancelOrFinish
,
2
,
0xffffff00
);
...
...
gframe/duelclient.cpp
View file @
98fa5080
...
@@ -1692,7 +1692,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1692,7 +1692,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
case
MSG_SELECT_PLACE
:
case
MSG_SELECT_PLACE
:
case
MSG_SELECT_DISFIELD
:
{
case
MSG_SELECT_DISFIELD
:
{
int
selecting_player
=
BufferIO
::
ReadInt8
(
pbuf
);
int
selecting_player
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_min
=
BufferIO
::
ReadInt8
(
pbuf
);
int
count
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
select_min
=
count
>
0
?
count
:
1
;
mainGame
->
dField
.
select_ready
=
false
;
mainGame
->
dField
.
select_cancelable
=
count
==
0
;
mainGame
->
dField
.
selectable_field
=
~
BufferIO
::
ReadInt32
(
pbuf
);
mainGame
->
dField
.
selectable_field
=
~
BufferIO
::
ReadInt32
(
pbuf
);
if
(
selecting_player
==
mainGame
->
LocalPlayer
(
1
))
if
(
selecting_player
==
mainGame
->
LocalPlayer
(
1
))
mainGame
->
dField
.
selectable_field
=
(
mainGame
->
dField
.
selectable_field
>>
16
)
|
(
mainGame
->
dField
.
selectable_field
<<
16
);
mainGame
->
dField
.
selectable_field
=
(
mainGame
->
dField
.
selectable_field
>>
16
)
|
(
mainGame
->
dField
.
selectable_field
<<
16
);
...
@@ -1767,6 +1770,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1767,6 +1770,9 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
DuelClient
::
SendResponse
();
DuelClient
::
SendResponse
();
return
true
;
return
true
;
}
}
if
(
mainGame
->
dField
.
select_cancelable
)
{
mainGame
->
dField
.
ShowCancelOrFinishButton
(
1
);
}
return
false
;
return
false
;
}
}
case
MSG_SELECT_POSITION
:
{
case
MSG_SELECT_POSITION
:
{
...
@@ -1820,6 +1826,8 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1820,6 +1826,8 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
int
count
=
BufferIO
::
ReadInt8
(
pbuf
);
int
count
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
selectable_cards
.
clear
();
mainGame
->
dField
.
selectable_cards
.
clear
();
mainGame
->
dField
.
selected_cards
.
clear
();
mainGame
->
dField
.
selected_cards
.
clear
();
mainGame
->
dField
.
selectsum_all
.
clear
();
mainGame
->
dField
.
selectsum_cards
.
clear
();
mainGame
->
dField
.
select_panalmode
=
false
;
mainGame
->
dField
.
select_panalmode
=
false
;
int
c
,
l
,
s
,
t
;
int
c
,
l
,
s
,
t
;
unsigned
int
code
;
unsigned
int
code
;
...
@@ -1835,10 +1843,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1835,10 +1843,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
if
(
code
&&
pcard
->
code
!=
code
)
if
(
code
&&
pcard
->
code
!=
code
)
pcard
->
SetCode
(
code
);
pcard
->
SetCode
(
code
);
mainGame
->
dField
.
selectable_cards
.
push_back
(
pcard
);
mainGame
->
dField
.
selectable_cards
.
push_back
(
pcard
);
pcard
->
opParam
=
t
;
mainGame
->
dField
.
selectsum_all
.
push_back
(
pcard
);
pcard
->
opParam
=
t
<<
16
|
1
;
pcard
->
select_seq
=
i
;
pcard
->
select_seq
=
i
;
pcard
->
is_selectable
=
true
;
pcard
->
is_selectable
=
true
;
}
}
mainGame
->
dField
.
CheckSelectTribute
();
if
(
select_hint
)
if
(
select_hint
)
myswprintf
(
textBuffer
,
L"%ls(%d-%d)"
,
dataManager
.
GetDesc
(
select_hint
),
myswprintf
(
textBuffer
,
L"%ls(%d-%d)"
,
dataManager
.
GetDesc
(
select_hint
),
mainGame
->
dField
.
select_min
,
mainGame
->
dField
.
select_max
);
mainGame
->
dField
.
select_min
,
mainGame
->
dField
.
select_max
);
...
@@ -3617,7 +3627,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3617,7 +3627,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
int
chtype
=
BufferIO
::
ReadInt8
(
pbuf
);
int
chtype
=
BufferIO
::
ReadInt8
(
pbuf
);
int
value
=
BufferIO
::
ReadInt32
(
pbuf
);
int
value
=
BufferIO
::
ReadInt32
(
pbuf
);
auto
&
player_desc_hints
=
mainGame
->
dField
.
player_desc_hints
[
player
];
auto
&
player_desc_hints
=
mainGame
->
dField
.
player_desc_hints
[
player
];
if
(
chtype
==
PHINT_DESC_ADD
)
{
if
(
value
==
CARD_QUESTION
&&
player
==
0
)
{
if
(
chtype
==
PHINT_DESC_ADD
)
{
mainGame
->
dField
.
cant_check_grave
=
true
;
}
else
if
(
chtype
==
PHINT_DESC_REMOVE
)
{
mainGame
->
dField
.
cant_check_grave
=
false
;
}
}
else
if
(
chtype
==
PHINT_DESC_ADD
)
{
player_desc_hints
[
value
]
++
;
player_desc_hints
[
value
]
++
;
}
else
if
(
chtype
==
PHINT_DESC_REMOVE
)
{
}
else
if
(
chtype
==
PHINT_DESC_REMOVE
)
{
player_desc_hints
[
value
]
--
;
player_desc_hints
[
value
]
--
;
...
...
gframe/event_handler.cpp
View file @
98fa5080
...
@@ -881,14 +881,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -881,14 +881,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
// text
// text
wchar_t
formatBuffer
[
2048
];
wchar_t
formatBuffer
[
2048
];
if
(
sort_list
.
size
()
)
{
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SORT_CARD
)
{
if
(
sort_list
[
pos
+
i
]
>
0
)
if
(
sort_list
[
pos
+
i
])
myswprintf
(
formatBuffer
,
L"%d"
,
sort_list
[
pos
+
i
]);
myswprintf
(
formatBuffer
,
L"%d"
,
sort_list
[
pos
+
i
]);
else
else
myswprintf
(
formatBuffer
,
L""
);
myswprintf
(
formatBuffer
,
L""
);
}
else
{
}
else
{
if
(
conti_selecting
)
if
(
conti_selecting
)
myswprintf
(
formatBuffer
,
L"%ls"
,
DataManager
::
unknown_string
);
myswprintf
(
formatBuffer
,
L"%ls"
,
DataManager
::
unknown_string
);
else
if
(
cant_check_grave
&&
selectable_cards
[
i
]
->
location
==
LOCATION_GRAVE
)
myswprintf
(
formatBuffer
,
L"%ls"
,
dataManager
.
FormatLocation
(
selectable_cards
[
i
]
->
location
,
0
));
else
if
(
selectable_cards
[
i
+
pos
]
->
location
==
LOCATION_OVERLAY
)
else
if
(
selectable_cards
[
i
+
pos
]
->
location
==
LOCATION_OVERLAY
)
myswprintf
(
formatBuffer
,
L"%ls[%d](%d)"
,
myswprintf
(
formatBuffer
,
L"%ls[%d](%d)"
,
dataManager
.
FormatLocation
(
selectable_cards
[
i
+
pos
]
->
overlayTarget
->
location
,
selectable_cards
[
i
+
pos
]
->
overlayTarget
->
sequence
),
dataManager
.
FormatLocation
(
selectable_cards
[
i
+
pos
]
->
overlayTarget
->
location
,
selectable_cards
[
i
+
pos
]
->
overlayTarget
->
sequence
),
...
@@ -1189,6 +1191,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1189,6 +1191,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
LOCATION_GRAVE
:
{
case
LOCATION_GRAVE
:
{
if
(
grave
[
hovered_controler
].
size
()
==
0
)
if
(
grave
[
hovered_controler
].
size
()
==
0
)
break
;
break
;
if
(
cant_check_grave
)
break
;
ShowMenu
(
COMMAND_LIST
,
x
,
y
);
ShowMenu
(
COMMAND_LIST
,
x
,
y
);
break
;
break
;
}
}
...
@@ -1239,6 +1243,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1239,6 +1243,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
int
command_flag
=
0
;
int
command_flag
=
0
;
if
(
grave
[
hovered_controler
].
size
()
==
0
)
if
(
grave
[
hovered_controler
].
size
()
==
0
)
break
;
break
;
if
(
cant_check_grave
)
break
;
for
(
size_t
i
=
0
;
i
<
grave
[
hovered_controler
].
size
();
++
i
)
for
(
size_t
i
=
0
;
i
<
grave
[
hovered_controler
].
size
();
++
i
)
command_flag
|=
grave
[
hovered_controler
][
i
]
->
cmdFlag
;
command_flag
|=
grave
[
hovered_controler
][
i
]
->
cmdFlag
;
command_flag
|=
COMMAND_LIST
;
command_flag
|=
COMMAND_LIST
;
...
@@ -1335,16 +1341,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1335,16 +1341,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
selected_field
=
0
;
selected_field
=
0
;
DuelClient
::
SetResponseB
(
respbuf
,
p
);
DuelClient
::
SetResponseB
(
respbuf
,
p
);
DuelClient
::
SendResponse
();
DuelClient
::
SendResponse
();
ShowCancelOrFinishButton
(
0
);
}
}
}
}
}
}
break
;
break
;
}
}
case
MSG_SELECT_CARD
:
case
MSG_SELECT_CARD
:
{
case
MSG_SELECT_TRIBUTE
:
{
if
(
!
(
hovered_location
&
0xe
)
||
!
clicked_card
||
!
clicked_card
->
is_selectable
)
if
(
!
(
hovered_location
&
0xe
)
||
!
clicked_card
||
!
clicked_card
->
is_selectable
)
break
;
break
;
if
(
clicked_card
->
is_selected
)
{
if
(
clicked_card
->
is_selected
)
{
clicked_card
->
is_selected
=
false
;
clicked_card
->
is_selected
=
false
;
int
i
=
0
;
int
i
=
0
;
while
(
selected_cards
[
i
]
!=
clicked_card
)
i
++
;
while
(
selected_cards
[
i
]
!=
clicked_card
)
i
++
;
...
@@ -1353,18 +1359,11 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1353,18 +1359,11 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
clicked_card
->
is_selected
=
true
;
clicked_card
->
is_selected
=
true
;
selected_cards
.
push_back
(
clicked_card
);
selected_cards
.
push_back
(
clicked_card
);
}
}
int
min
=
selected_cards
.
size
(),
max
=
0
;
if
(
selected_cards
.
size
()
>=
select_max
)
{
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_CARD
)
{
max
=
selected_cards
.
size
();
}
else
{
for
(
size_t
i
=
0
;
i
<
selected_cards
.
size
();
++
i
)
max
+=
selected_cards
[
i
]
->
opParam
;
}
if
(
min
>=
select_max
)
{
SetResponseSelectedCards
();
SetResponseSelectedCards
();
ShowCancelOrFinishButton
(
0
);
ShowCancelOrFinishButton
(
0
);
DuelClient
::
SendResponse
();
DuelClient
::
SendResponse
();
}
else
if
(
max
>=
select_min
)
{
}
else
if
(
selected_cards
.
size
()
>=
select_min
)
{
if
(
selected_cards
.
size
()
==
selectable_cards
.
size
())
{
if
(
selected_cards
.
size
()
==
selectable_cards
.
size
())
{
SetResponseSelectedCards
();
SetResponseSelectedCards
();
ShowCancelOrFinishButton
(
0
);
ShowCancelOrFinishButton
(
0
);
...
@@ -1372,18 +1371,37 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1372,18 +1371,37 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
else
{
}
else
{
select_ready
=
true
;
select_ready
=
true
;
ShowCancelOrFinishButton
(
2
);
ShowCancelOrFinishButton
(
2
);
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_TRIBUTE
)
{
wchar_t
wbuf
[
256
],
*
pwbuf
=
wbuf
;
BufferIO
::
CopyWStrRef
(
dataManager
.
GetSysString
(
209
),
pwbuf
,
256
);
*
pwbuf
++
=
L'\n'
;
BufferIO
::
CopyWStrRef
(
dataManager
.
GetSysString
(
210
),
pwbuf
,
256
);
mainGame
->
stQMessage
->
setText
(
wbuf
);
mainGame
->
PopupElement
(
mainGame
->
wQuery
);
}
}
}
}
else
{
}
else
{
select_ready
=
false
;
select_ready
=
false
;
if
(
select_cancelable
&&
min
==
0
)
if
(
select_cancelable
&&
selected_cards
.
size
()
==
0
)
ShowCancelOrFinishButton
(
1
);
else
ShowCancelOrFinishButton
(
0
);
}
break
;
}
case
MSG_SELECT_TRIBUTE
:
{
if
(
!
(
hovered_location
&
0xe
)
||
!
clicked_card
||
!
clicked_card
->
is_selectable
)
break
;
if
(
clicked_card
->
is_selected
)
{
auto
it
=
std
::
find
(
selected_cards
.
begin
(),
selected_cards
.
end
(),
clicked_card
);
selected_cards
.
erase
(
it
);
}
else
{
selected_cards
.
push_back
(
clicked_card
);
}
if
(
CheckSelectTribute
())
{
if
(
selectsum_cards
.
size
()
==
0
)
{
SetResponseSelectedCards
();
ShowCancelOrFinishButton
(
0
);
DuelClient
::
SendResponse
();
}
else
{
select_ready
=
true
;
ShowCancelOrFinishButton
(
2
);
}
}
else
{
select_ready
=
false
;
if
(
select_cancelable
&&
selected_cards
.
size
()
==
0
)
ShowCancelOrFinishButton
(
1
);
ShowCancelOrFinishButton
(
1
);
else
else
ShowCancelOrFinishButton
(
0
);
ShowCancelOrFinishButton
(
0
);
...
@@ -1719,6 +1737,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1719,6 +1737,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
display_cards
.
clear
();
display_cards
.
clear
();
switch
(
event
.
KeyInput
.
Key
)
{
switch
(
event
.
KeyInput
.
Key
)
{
case
irr
:
:
KEY_F1
:
case
irr
:
:
KEY_F1
:
if
(
cant_check_grave
)
break
;
loc_id
=
1004
;
loc_id
=
1004
;
for
(
auto
it
=
grave
[
0
].
rbegin
();
it
!=
grave
[
0
].
rend
();
++
it
)
for
(
auto
it
=
grave
[
0
].
rbegin
();
it
!=
grave
[
0
].
rend
();
++
it
)
display_cards
.
push_back
(
*
it
);
display_cards
.
push_back
(
*
it
);
...
@@ -1743,6 +1763,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -1743,6 +1763,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
}
break
;
break
;
case
irr
:
:
KEY_F5
:
case
irr
:
:
KEY_F5
:
if
(
cant_check_grave
)
break
;
loc_id
=
1004
;
loc_id
=
1004
;
for
(
auto
it
=
grave
[
1
].
rbegin
();
it
!=
grave
[
1
].
rend
();
++
it
)
for
(
auto
it
=
grave
[
1
].
rbegin
();
it
!=
grave
[
1
].
rend
();
++
it
)
display_cards
.
push_back
(
*
it
);
display_cards
.
push_back
(
*
it
);
...
@@ -2316,14 +2338,22 @@ void ClientField::SetShowMark(ClientCard* pcard, bool enable) {
...
@@ -2316,14 +2338,22 @@ void ClientField::SetShowMark(ClientCard* pcard, bool enable) {
}
}
void
ClientField
::
ShowCardInfoInList
(
ClientCard
*
pcard
,
irr
::
gui
::
IGUIElement
*
element
,
irr
::
gui
::
IGUIElement
*
parent
)
{
void
ClientField
::
ShowCardInfoInList
(
ClientCard
*
pcard
,
irr
::
gui
::
IGUIElement
*
element
,
irr
::
gui
::
IGUIElement
*
parent
)
{
std
::
wstring
str
(
L""
);
std
::
wstring
str
(
L""
);
wchar_t
formatBuffer
[
2048
];
if
(
pcard
->
code
)
{
if
(
pcard
->
code
)
{
str
.
append
(
dataManager
.
GetName
(
pcard
->
code
));
str
.
append
(
dataManager
.
GetName
(
pcard
->
code
));
}
}
if
(
pcard
->
overlayTarget
)
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
225
),
dataManager
.
GetName
(
pcard
->
overlayTarget
->
code
),
pcard
->
overlayTarget
->
sequence
+
1
);
str
.
append
(
L"
\n
"
).
append
(
formatBuffer
);
}
if
((
pcard
->
status
&
STATUS_PROC_COMPLETE
)
if
((
pcard
->
status
&
STATUS_PROC_COMPLETE
)
&&
(
pcard
->
type
&
(
TYPE_RITUAL
|
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
|
TYPE_SPSUMMON
)))
&&
(
pcard
->
type
&
(
TYPE_RITUAL
|
TYPE_FUSION
|
TYPE_SYNCHRO
|
TYPE_XYZ
|
TYPE_LINK
|
TYPE_SPSUMMON
)))
str
.
append
(
L"
\n
"
).
append
(
dataManager
.
GetSysString
(
224
));
str
.
append
(
L"
\n
"
).
append
(
dataManager
.
GetSysString
(
224
));
for
(
auto
iter
=
pcard
->
desc_hints
.
begin
();
iter
!=
pcard
->
desc_hints
.
end
();
++
iter
)
{
myswprintf
(
formatBuffer
,
L"
\n
*%ls"
,
dataManager
.
GetDesc
(
iter
->
first
));
str
.
append
(
formatBuffer
);
}
for
(
size_t
i
=
0
;
i
<
chains
.
size
();
++
i
)
{
for
(
size_t
i
=
0
;
i
<
chains
.
size
();
++
i
)
{
wchar_t
formatBuffer
[
2048
];
auto
chit
=
chains
[
i
];
auto
chit
=
chains
[
i
];
if
(
pcard
==
chit
.
chain_card
)
{
if
(
pcard
==
chit
.
chain_card
)
{
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
216
),
i
+
1
);
myswprintf
(
formatBuffer
,
dataManager
.
GetSysString
(
216
),
i
+
1
);
...
@@ -2469,6 +2499,11 @@ void ClientField::CancelOrFinish() {
...
@@ -2469,6 +2499,11 @@ void ClientField::CancelOrFinish() {
mainGame
->
HideElement
(
mainGame
->
wQuery
,
true
);
mainGame
->
HideElement
(
mainGame
->
wQuery
,
true
);
break
;
break
;
}
}
if
(
select_ready
)
{
SetResponseSelectedCards
();
ShowCancelOrFinishButton
(
0
);
DuelClient
::
SendResponse
();
}
break
;
break
;
}
}
case
MSG_SELECT_SUM
:
{
case
MSG_SELECT_SUM
:
{
...
@@ -2506,6 +2541,20 @@ void ClientField::CancelOrFinish() {
...
@@ -2506,6 +2541,20 @@ void ClientField::CancelOrFinish() {
if
(
mainGame
->
wCardSelect
->
isVisible
())
{
if
(
mainGame
->
wCardSelect
->
isVisible
())
{
DuelClient
::
SetResponseI
(
-
1
);
DuelClient
::
SetResponseI
(
-
1
);
mainGame
->
HideElement
(
mainGame
->
wCardSelect
,
true
);
mainGame
->
HideElement
(
mainGame
->
wCardSelect
,
true
);
sort_list
.
clear
();
}
break
;
}
case
MSG_SELECT_PLACE
:
{
if
(
select_cancelable
)
{
unsigned
char
respbuf
[
3
];
respbuf
[
0
]
=
mainGame
->
LocalPlayer
(
0
);
respbuf
[
1
]
=
0
;
respbuf
[
2
]
=
0
;
mainGame
->
dField
.
selectable_field
=
0
;
DuelClient
::
SetResponseB
(
respbuf
,
3
);
DuelClient
::
SendResponse
();
ShowCancelOrFinishButton
(
0
);
}
}
break
;
break
;
}
}
...
...
gframe/game.cpp
View file @
98fa5080
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
#include "netserver.h"
#include "netserver.h"
#include "single_mode.h"
#include "single_mode.h"
const
unsigned
short
PRO_VERSION
=
0x135
1
;
const
unsigned
short
PRO_VERSION
=
0x135
2
;
namespace
ygo
{
namespace
ygo
{
...
@@ -71,14 +71,70 @@ bool Game::Initialize() {
...
@@ -71,14 +71,70 @@ bool Game::Initialize() {
dataManager
.
LoadStrings
(
"./expansions/strings.conf"
);
dataManager
.
LoadStrings
(
"./expansions/strings.conf"
);
env
=
device
->
getGUIEnvironment
();
env
=
device
->
getGUIEnvironment
();
numFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
16
);
numFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
16
);
adFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
12
);
if
(
!
numFont
)
{
lpcFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
48
);
const
wchar_t
*
numFontPaths
[]
=
{
guiFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
textfont
,
gameConf
.
textfontsize
);
L"C:/Windows/Fonts/arialbd.ttf"
,
L"/usr/share/fonts/truetype/DroidSansFallbackFull.ttf"
,
L"/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc"
,
L"/usr/share/fonts/google-noto-cjk/NotoSansCJK-Bold.ttc"
,
L"/System/Library/Fonts/SFNSTextCondensed-Bold.otf"
,
L"/System/Library/Fonts/SFNS.ttf"
,
L"./fonts/numFont.ttf"
,
L"./fonts/numFont.ttc"
,
L"./fonts/numFont.otf"
};
for
(
const
wchar_t
*
path
:
numFontPaths
)
{
myswprintf
(
gameConf
.
numfont
,
path
);
numFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
16
);
if
(
numFont
)
break
;
}
}
textFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
textfont
,
gameConf
.
textfontsize
);
textFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
textfont
,
gameConf
.
textfontsize
);
if
(
!
textFont
)
{
const
wchar_t
*
textFontPaths
[]
=
{
L"C:/Windows/Fonts/msyh.ttc"
,
L"C:/Windows/Fonts/msyh.ttf"
,
L"C:/Windows/Fonts/simsun.ttc"
,
L"/usr/share/fonts/truetype/DroidSansFallbackFull.ttf"
,
L"/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"
,
L"/usr/share/fonts/google-noto-cjk/NotoSansCJK-Regular.ttc"
,
L"/System/Library/Fonts/PingFang.ttc"
,
L"./fonts/textFont.ttf"
,
L"./fonts/textFont.ttc"
,
L"./fonts/textFont.otf"
};
for
(
const
wchar_t
*
path
:
textFontPaths
)
{
myswprintf
(
gameConf
.
textfont
,
path
);
textFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
textfont
,
gameConf
.
textfontsize
);
if
(
textFont
)
break
;
}
}
if
(
!
numFont
||
!
textFont
)
{
if
(
!
numFont
||
!
textFont
)
{
ErrorLog
(
"Failed to load font(s)!"
);
wchar_t
fpath
[
1024
];
return
false
;
fpath
[
0
]
=
0
;
FileSystem
::
TraversalDir
(
L"./fonts"
,
[
&
fpath
](
const
wchar_t
*
name
,
bool
isdir
)
{
if
(
!
isdir
&&
wcsrchr
(
name
,
'.'
)
&&
(
!
mywcsncasecmp
(
wcsrchr
(
name
,
'.'
),
L".ttf"
,
4
)
||
!
mywcsncasecmp
(
wcsrchr
(
name
,
'.'
),
L".ttc"
,
4
)
||
!
mywcsncasecmp
(
wcsrchr
(
name
,
'.'
),
L".otf"
,
4
)))
{
myswprintf
(
fpath
,
L"./fonts/%ls"
,
name
);
}
});
if
(
fpath
[
0
]
==
0
)
{
ErrorLog
(
"Failed to load font(s)!"
);
return
false
;
}
if
(
!
numFont
)
{
myswprintf
(
gameConf
.
numfont
,
fpath
);
numFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
16
);
}
if
(
!
textFont
)
{
myswprintf
(
gameConf
.
textfont
,
fpath
);
textFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
textfont
,
gameConf
.
textfontsize
);
}
}
}
adFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
12
);
lpcFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
numfont
,
48
);
guiFont
=
irr
::
gui
::
CGUITTFont
::
createTTFont
(
env
,
gameConf
.
textfont
,
gameConf
.
textfontsize
);
smgr
=
device
->
getSceneManager
();
smgr
=
device
->
getSceneManager
();
device
->
setWindowCaption
(
L"YGOPro"
);
device
->
setWindowCaption
(
L"YGOPro"
);
device
->
setResizable
(
true
);
device
->
setResizable
(
true
);
...
@@ -710,6 +766,9 @@ bool Game::Initialize() {
...
@@ -710,6 +766,9 @@ bool Game::Initialize() {
btnBotCancel
=
env
->
addButton
(
rect
<
s32
>
(
459
,
331
,
569
,
356
),
tabBot
,
BUTTON_CANCEL_SINGLEPLAY
,
dataManager
.
GetSysString
(
1210
));
btnBotCancel
=
env
->
addButton
(
rect
<
s32
>
(
459
,
331
,
569
,
356
),
tabBot
,
BUTTON_CANCEL_SINGLEPLAY
,
dataManager
.
GetSysString
(
1210
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1382
),
rect
<
s32
>
(
360
,
10
,
550
,
30
),
false
,
true
,
tabBot
);
env
->
addStaticText
(
dataManager
.
GetSysString
(
1382
),
rect
<
s32
>
(
360
,
10
,
550
,
30
),
false
,
true
,
tabBot
);
stBotInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
,
40
,
560
,
160
),
false
,
true
,
tabBot
);
stBotInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
,
40
,
560
,
160
),
false
,
true
,
tabBot
);
cbBotDeck
=
env
->
addComboBox
(
rect
<
s32
>
(
360
,
130
,
560
,
155
),
tabBot
);
cbBotDeck
->
setMaxSelectionRows
(
6
);
cbBotDeck
->
setVisible
(
false
);
cbBotRule
=
env
->
addComboBox
(
rect
<
s32
>
(
360
,
165
,
560
,
190
),
tabBot
,
COMBOBOX_BOT_RULE
);
cbBotRule
=
env
->
addComboBox
(
rect
<
s32
>
(
360
,
165
,
560
,
190
),
tabBot
,
COMBOBOX_BOT_RULE
);
cbBotRule
->
addItem
(
dataManager
.
GetSysString
(
1262
));
cbBotRule
->
addItem
(
dataManager
.
GetSysString
(
1262
));
cbBotRule
->
addItem
(
dataManager
.
GetSysString
(
1263
));
cbBotRule
->
addItem
(
dataManager
.
GetSysString
(
1263
));
...
@@ -806,7 +865,6 @@ bool Game::Initialize() {
...
@@ -806,7 +865,6 @@ bool Game::Initialize() {
stCardListTip
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stCardListTip
->
setTextAlignment
(
irr
::
gui
::
EGUIA_CENTER
,
irr
::
gui
::
EGUIA_CENTER
);
stCardListTip
->
setVisible
(
false
);
stCardListTip
->
setVisible
(
false
);
device
->
setEventReceiver
(
&
menuHandler
);
device
->
setEventReceiver
(
&
menuHandler
);
LoadConfig
();
if
(
!
soundManager
.
Init
())
{
if
(
!
soundManager
.
Init
())
{
chkEnableSound
->
setChecked
(
false
);
chkEnableSound
->
setChecked
(
false
);
chkEnableSound
->
setEnabled
(
false
);
chkEnableSound
->
setEnabled
(
false
);
...
@@ -1123,6 +1181,7 @@ void Game::RefreshBot() {
...
@@ -1123,6 +1181,7 @@ void Game::RefreshBot() {
newinfo
.
support_master_rule_3
=
!!
strstr
(
linebuf
,
"SUPPORT_MASTER_RULE_3"
);
newinfo
.
support_master_rule_3
=
!!
strstr
(
linebuf
,
"SUPPORT_MASTER_RULE_3"
);
newinfo
.
support_new_master_rule
=
!!
strstr
(
linebuf
,
"SUPPORT_NEW_MASTER_RULE"
);
newinfo
.
support_new_master_rule
=
!!
strstr
(
linebuf
,
"SUPPORT_NEW_MASTER_RULE"
);
newinfo
.
support_master_rule_2020
=
!!
strstr
(
linebuf
,
"SUPPORT_MASTER_RULE_2020"
);
newinfo
.
support_master_rule_2020
=
!!
strstr
(
linebuf
,
"SUPPORT_MASTER_RULE_2020"
);
newinfo
.
select_deckfile
=
!!
strstr
(
linebuf
,
"SELECT_DECKFILE"
);
int
rule
=
cbBotRule
->
getSelected
()
+
3
;
int
rule
=
cbBotRule
->
getSelected
()
+
3
;
if
((
rule
==
3
&&
newinfo
.
support_master_rule_3
)
if
((
rule
==
3
&&
newinfo
.
support_master_rule_3
)
||
(
rule
==
4
&&
newinfo
.
support_new_master_rule
)
||
(
rule
==
4
&&
newinfo
.
support_new_master_rule
)
...
@@ -1138,8 +1197,23 @@ void Game::RefreshBot() {
...
@@ -1138,8 +1197,23 @@ void Game::RefreshBot() {
for
(
unsigned
int
i
=
0
;
i
<
botInfo
.
size
();
++
i
)
{
for
(
unsigned
int
i
=
0
;
i
<
botInfo
.
size
();
++
i
)
{
lstBotList
->
addItem
(
botInfo
[
i
].
name
);
lstBotList
->
addItem
(
botInfo
[
i
].
name
);
}
}
if
(
botInfo
.
size
()
==
0
)
if
(
botInfo
.
size
()
==
0
)
{
SetStaticText
(
stBotInfo
,
200
,
guiFont
,
dataManager
.
GetSysString
(
1385
));
SetStaticText
(
stBotInfo
,
200
,
guiFont
,
dataManager
.
GetSysString
(
1385
));
}
else
{
cbBotDeck
->
clear
();
cbBotDeck
->
setVisible
(
false
);
irr
::
gui
::
IGUIComboBox
*
cbDeck
=
cbBotDeck
;
FileSystem
::
TraversalDir
(
gameConf
.
bot_deck_path
,
[
cbDeck
](
const
wchar_t
*
name
,
bool
isdir
)
{
if
(
!
isdir
&&
wcsrchr
(
name
,
'.'
)
&&
!
mywcsncasecmp
(
wcsrchr
(
name
,
'.'
),
L".ydk"
,
4
))
{
size_t
len
=
wcslen
(
name
);
wchar_t
deckname
[
256
];
wcsncpy
(
deckname
,
name
,
len
-
4
);
deckname
[
len
-
4
]
=
0
;
cbDeck
->
addItem
(
deckname
);
}
});
}
}
}
void
Game
::
LoadConfig
()
{
void
Game
::
LoadConfig
()
{
FILE
*
fp
=
fopen
(
"system.conf"
,
"r"
);
FILE
*
fp
=
fopen
(
"system.conf"
,
"r"
);
...
@@ -1153,7 +1227,7 @@ void Game::LoadConfig() {
...
@@ -1153,7 +1227,7 @@ void Game::LoadConfig() {
gameConf
.
use_image_scale
=
1
;
gameConf
.
use_image_scale
=
1
;
gameConf
.
antialias
=
0
;
gameConf
.
antialias
=
0
;
gameConf
.
serverport
=
7911
;
gameConf
.
serverport
=
7911
;
gameConf
.
textfontsize
=
1
2
;
gameConf
.
textfontsize
=
1
4
;
gameConf
.
nickname
[
0
]
=
0
;
gameConf
.
nickname
[
0
]
=
0
;
gameConf
.
gamename
[
0
]
=
0
;
gameConf
.
gamename
[
0
]
=
0
;
gameConf
.
bot_deck_path
[
0
]
=
0
;
gameConf
.
bot_deck_path
[
0
]
=
0
;
...
@@ -1164,6 +1238,7 @@ void Game::LoadConfig() {
...
@@ -1164,6 +1238,7 @@ void Game::LoadConfig() {
gameConf
.
lasthost
[
0
]
=
0
;
gameConf
.
lasthost
[
0
]
=
0
;
gameConf
.
lastport
[
0
]
=
0
;
gameConf
.
lastport
[
0
]
=
0
;
gameConf
.
roompass
[
0
]
=
0
;
gameConf
.
roompass
[
0
]
=
0
;
gameConf
.
bot_deck_path
[
0
]
=
0
;
//settings
//settings
gameConf
.
chkMAutoPos
=
0
;
gameConf
.
chkMAutoPos
=
0
;
gameConf
.
chkSTAutoPos
=
1
;
gameConf
.
chkSTAutoPos
=
1
;
...
@@ -1208,7 +1283,7 @@ void Game::LoadConfig() {
...
@@ -1208,7 +1283,7 @@ void Game::LoadConfig() {
enable_log
=
atoi
(
valbuf
);
enable_log
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"textfont"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"textfont"
))
{
BufferIO
::
DecodeUTF8
(
valbuf
,
wstr
);
BufferIO
::
DecodeUTF8
(
valbuf
,
wstr
);
int
textfontsize
;
int
textfontsize
=
gameConf
.
textfontsize
;
sscanf
(
linebuf
,
"%s = %s %d"
,
strbuf
,
valbuf
,
&
textfontsize
);
sscanf
(
linebuf
,
"%s = %s %d"
,
strbuf
,
valbuf
,
&
textfontsize
);
gameConf
.
textfontsize
=
textfontsize
;
gameConf
.
textfontsize
=
textfontsize
;
BufferIO
::
CopyWStr
(
wstr
,
gameConf
.
textfont
,
256
);
BufferIO
::
CopyWStr
(
wstr
,
gameConf
.
textfont
,
256
);
...
@@ -1226,6 +1301,9 @@ void Game::LoadConfig() {
...
@@ -1226,6 +1301,9 @@ void Game::LoadConfig() {
}
else
if
(
!
strcmp
(
strbuf
,
"roompass"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"roompass"
))
{
BufferIO
::
DecodeUTF8
(
valbuf
,
wstr
);
BufferIO
::
DecodeUTF8
(
valbuf
,
wstr
);
BufferIO
::
CopyWStr
(
wstr
,
gameConf
.
roompass
,
20
);
BufferIO
::
CopyWStr
(
wstr
,
gameConf
.
roompass
,
20
);
}
else
if
(
!
strcmp
(
strbuf
,
"bot_deck_path"
))
{
BufferIO
::
DecodeUTF8
(
valbuf
,
wstr
);
BufferIO
::
CopyWStr
(
wstr
,
gameConf
.
bot_deck_path
,
64
);
}
else
if
(
!
strcmp
(
strbuf
,
"automonsterpos"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"automonsterpos"
))
{
gameConf
.
chkMAutoPos
=
atoi
(
valbuf
);
gameConf
.
chkMAutoPos
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"autospellpos"
))
{
}
else
if
(
!
strcmp
(
strbuf
,
"autospellpos"
))
{
...
...
gframe/game.h
View file @
98fa5080
...
@@ -95,6 +95,7 @@ struct BotInfo {
...
@@ -95,6 +95,7 @@ struct BotInfo {
bool
support_master_rule_3
;
bool
support_master_rule_3
;
bool
support_new_master_rule
;
bool
support_new_master_rule
;
bool
support_master_rule_2020
;
bool
support_master_rule_2020
;
bool
select_deckfile
;
};
};
struct
FadingUnit
{
struct
FadingUnit
{
...
@@ -374,6 +375,7 @@ public:
...
@@ -374,6 +375,7 @@ public:
irr
::
gui
::
IGUIStaticText
*
stBotInfo
;
irr
::
gui
::
IGUIStaticText
*
stBotInfo
;
irr
::
gui
::
IGUIButton
*
btnStartBot
;
irr
::
gui
::
IGUIButton
*
btnStartBot
;
irr
::
gui
::
IGUIButton
*
btnBotCancel
;
irr
::
gui
::
IGUIButton
*
btnBotCancel
;
irr
::
gui
::
IGUIComboBox
*
cbBotDeck
;
irr
::
gui
::
IGUIComboBox
*
cbBotRule
;
irr
::
gui
::
IGUIComboBox
*
cbBotRule
;
irr
::
gui
::
IGUICheckBox
*
chkBotHand
;
irr
::
gui
::
IGUICheckBox
*
chkBotHand
;
irr
::
gui
::
IGUICheckBox
*
chkBotNoCheckDeck
;
irr
::
gui
::
IGUICheckBox
*
chkBotNoCheckDeck
;
...
...
gframe/menu_handler.cpp
View file @
98fa5080
...
@@ -298,9 +298,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -298,9 +298,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
si
.
cb
=
sizeof
(
si
);
si
.
cb
=
sizeof
(
si
);
ZeroMemory
(
&
pi
,
sizeof
(
pi
));
ZeroMemory
(
&
pi
,
sizeof
(
pi
));
wchar_t
cmd
[
MAX_PATH
];
wchar_t
cmd
[
MAX_PATH
];
wchar_t
arg1
[
512
];
if
(
mainGame
->
botInfo
[
sel
].
select_deckfile
)
myswprintf
(
arg1
,
L"%ls DeckFile='%ls'"
,
mainGame
->
botInfo
[
sel
].
command
,
mainGame
->
cbBotDeck
->
getItem
(
mainGame
->
cbBotDeck
->
getSelected
()));
else
myswprintf
(
arg1
,
L"%ls"
,
mainGame
->
botInfo
[
sel
].
command
);
int
flag
=
0
;
int
flag
=
0
;
flag
+=
(
mainGame
->
chkBotHand
->
isChecked
()
?
0x1
:
0
);
flag
+=
(
mainGame
->
chkBotHand
->
isChecked
()
?
0x1
:
0
);
myswprintf
(
cmd
,
L"Bot.exe
\"
%ls
\"
%d %d"
,
mainGame
->
botInfo
[
sel
].
command
,
flag
,
mainGame
->
gameConf
.
serverport
);
myswprintf
(
cmd
,
L"Bot.exe
\"
%ls
\"
%d %d"
,
arg1
,
flag
,
mainGame
->
gameConf
.
serverport
);
if
(
!
CreateProcessW
(
NULL
,
cmd
,
NULL
,
NULL
,
FALSE
,
0
,
NULL
,
NULL
,
&
si
,
&
pi
))
if
(
!
CreateProcessW
(
NULL
,
cmd
,
NULL
,
NULL
,
FALSE
,
0
,
NULL
,
NULL
,
&
si
,
&
pi
))
{
{
NetServer
::
StopServer
();
NetServer
::
StopServer
();
...
@@ -309,8 +314,13 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -309,8 +314,13 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
#else
#else
if
(
fork
()
==
0
)
{
if
(
fork
()
==
0
)
{
usleep
(
100000
);
usleep
(
100000
);
wchar_t
warg1
[
512
];
if
(
mainGame
->
botInfo
[
sel
].
select_deckfile
)
myswprintf
(
warg1
,
L"%ls DeckFile='%ls'"
,
mainGame
->
botInfo
[
sel
].
command
,
mainGame
->
cbBotDeck
->
getItem
(
mainGame
->
cbBotDeck
->
getSelected
()));
else
myswprintf
(
warg1
,
L"%ls"
,
mainGame
->
botInfo
[
sel
].
command
);
char
arg1
[
512
];
char
arg1
[
512
];
BufferIO
::
EncodeUTF8
(
mainGame
->
botInfo
[
sel
].
command
,
arg1
);
BufferIO
::
EncodeUTF8
(
warg1
,
arg1
);
int
flag
=
0
;
int
flag
=
0
;
flag
+=
(
mainGame
->
chkBotHand
->
isChecked
()
?
0x1
:
0
);
flag
+=
(
mainGame
->
chkBotHand
->
isChecked
()
?
0x1
:
0
);
char
arg2
[
8
];
char
arg2
[
8
];
...
@@ -519,6 +529,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -519,6 +529,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
if
(
sel
==
-
1
)
if
(
sel
==
-
1
)
break
;
break
;
mainGame
->
SetStaticText
(
mainGame
->
stBotInfo
,
200
,
mainGame
->
guiFont
,
mainGame
->
botInfo
[
sel
].
desc
);
mainGame
->
SetStaticText
(
mainGame
->
stBotInfo
,
200
,
mainGame
->
guiFont
,
mainGame
->
botInfo
[
sel
].
desc
);
mainGame
->
cbBotDeck
->
setVisible
(
mainGame
->
botInfo
[
sel
].
select_deckfile
);
break
;
break
;
}
}
}
}
...
...
lflist.conf
View file @
98fa5080
This diff is collapsed.
Click to expand it.
ocgcore
@
242b903f
Subproject commit
4d2e3603745b8e92ab0248c9ff49174d0cbb4f5a
Subproject commit
242b903fda8ba2e17c053be465abcd9508404dec
script
@
b6819fc3
Subproject commit
216c4754fb203fe2f598fee02ace05e54f7cea55
Subproject commit
b6819fc3480b886fd6f1a840297e8df2367e0c43
strings.conf
View file @
98fa5080
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
!
system
22
主要阶段中
!
system
22
主要阶段中
!
system
23
即将结束主要阶段
!
system
23
即将结束主要阶段
!
system
24
战斗阶段中
!
system
24
战斗阶段中
!
system
25
战斗
结束阶段中
!
system
25
战斗
阶段结束时
!
system
26
结束阶段中
!
system
26
结束阶段中
!
system
27
抽卡前
!
system
27
抽卡前
!
system
28
战斗阶段开始
!
system
28
战斗阶段开始
...
@@ -80,6 +80,7 @@
...
@@ -80,6 +80,7 @@
!
system
222
是否要发动诱发效果?
!
system
222
是否要发动诱发效果?
!
system
223
稍后将询问其他可以发动的效果。
!
system
223
稍后将询问其他可以发动的效果。
!
system
224
已用正规方法特殊召唤
!
system
224
已用正规方法特殊召唤
!
system
225
叠放于[%
ls
](%
d
)下
!
system
500
请选择要解放的卡
!
system
500
请选择要解放的卡
!
system
501
请选择要丢弃的手卡
!
system
501
请选择要丢弃的手卡
!
system
502
请选择要破坏的卡
!
system
502
请选择要破坏的卡
...
@@ -485,9 +486,9 @@
...
@@ -485,9 +486,9 @@
!
system
1500
决斗结束。
!
system
1500
决斗结束。
!
system
1501
录像结束。
!
system
1501
录像结束。
!
system
1502
连接已断开。
!
system
1502
连接已断开。
!
system
1510
对方
选择了:[%
ls
]
!
system
1510
玩家
选择了:[%
ls
]
!
system
1511
对方
宣言了:[%
ls
]
!
system
1511
玩家
宣言了:[%
ls
]
!
system
1512
对方
选择了:[%
d
]
!
system
1512
玩家
选择了:[%
d
]
!
system
1600
卡片改变了表示形式
!
system
1600
卡片改变了表示形式
!
system
1601
盖放了卡片
!
system
1601
盖放了卡片
!
system
1602
卡的控制权改变了
!
system
1602
卡的控制权改变了
...
@@ -498,7 +499,7 @@
...
@@ -498,7 +499,7 @@
!
system
1607
[%
ls
]反转召唤中
!
system
1607
[%
ls
]反转召唤中
!
system
1608
怪兽反转召唤成功
!
system
1608
怪兽反转召唤成功
!
system
1609
[%
ls
]的效果发动
!
system
1609
[%
ls
]的效果发动
!
system
1610
[%
ls
](%
ls
,%
d
)成为对象
!
system
1610
[%
ls
](%
ls
,%
d
)成为对象
或目标
!
system
1611
我方抽了%
d
张卡
!
system
1611
我方抽了%
d
张卡
!
system
1612
对方抽了%
d
张卡
!
system
1612
对方抽了%
d
张卡
!
system
1613
我方受到%
d
伤害
!
system
1613
我方受到%
d
伤害
...
@@ -521,24 +522,24 @@
...
@@ -521,24 +522,24 @@
!
victory
0
x2
没有卡可抽
!
victory
0
x2
没有卡可抽
!
victory
0
x3
超时
!
victory
0
x3
超时
!
victory
0
x4
失去连接
!
victory
0
x4
失去连接
!
victory
0
x10
「被封印的艾克佐迪亚」
效果
胜利
!
victory
0
x10
「被封印的艾克佐迪亚」
特殊
胜利
!
victory
0
x11
「终焉的倒计时」
效果
胜利
!
victory
0
x11
「终焉的倒计时」
特殊
胜利
!
victory
0
x12
「毒蛇神 维诺米纳迦」
效果
胜利
!
victory
0
x12
「毒蛇神 维诺米纳迦」
特殊
胜利
!
victory
0
x13
「光之创造神 哈拉克提」
效果
胜利
!
victory
0
x13
「光之创造神 哈拉克提」
特殊
胜利
!
victory
0
x14
「究极封印神 艾克佐迪奥斯」
效果
胜利
!
victory
0
x14
「究极封印神 艾克佐迪奥斯」
特殊
胜利
!
victory
0
x15
「通灵盘」
效果
胜利
!
victory
0
x15
「通灵盘」
特殊
胜利
!
victory
0
x16
「最终一战!」
效果
胜利
!
victory
0
x16
「最终一战!」
特殊
胜利
!
victory
0
x17
「
No
.
88
机关傀儡-命运狮子」
效果
胜利
!
victory
0
x17
「
No
.
88
机关傀儡-命运狮子」
特殊
胜利
!
victory
0
x18
「混沌
No
.
88
机关傀儡-灾厄狮子」
效果
胜利
!
victory
0
x18
「混沌
No
.
88
机关傀儡-灾厄狮子」
特殊
胜利
!
victory
0
x19
「头奖壶
7
」
效果
胜利
!
victory
0
x19
「头奖壶
7
」
特殊
胜利
!
victory
0
x1a
「魂之接力」
效果
胜利
!
victory
0
x1a
「魂之接力」
特殊
胜利
!
victory
0
x1b
「鬼计惰天使」
效果
胜利
!
victory
0
x1b
「鬼计惰天使」
特殊
胜利
!
victory
0
x1c
「幻煌龙的天涡」
效果
胜利
!
victory
0
x1c
「幻煌龙的天涡」
特殊
胜利
!
victory
0
x1d
「方程式运动员胜利团队」
效果
胜利
!
victory
0
x1d
「方程式运动员胜利团队」
特殊
胜利
!
victory
0
x1e
「飞行象」
效果
胜利
!
victory
0
x1e
「飞行象」
特殊
胜利
!
victory
0
x1f
「守护神 艾克佐迪亚」
效果
胜利
!
victory
0
x1f
「守护神 艾克佐迪亚」
特殊
胜利
!
victory
0
x20
「真艾克佐迪亚」
效果
胜利
!
victory
0
x20
「真艾克佐迪亚」
特殊
胜利
!
victory
0
xffff
由于「%
ls
」
的效果
获得比赛胜利
!
victory
0
xffff
由于「%
ls
」获得比赛胜利
#counters
#counters
!
counter
0
x1
魔力指示物
!
counter
0
x1
魔力指示物
!
counter
0
x1002
楔指示物
!
counter
0
x1002
楔指示物
...
@@ -621,6 +622,10 @@
...
@@ -621,6 +622,10 @@
!
counter
0
x55
指示物(隐居者的大釜)
!
counter
0
x55
指示物(隐居者的大釜)
!
counter
0
x56
炎星指示物
!
counter
0
x56
炎星指示物
!
counter
0
x57
幻魔指示物
!
counter
0
x57
幻魔指示物
!
counter
0
x58
指示物(祢须三破鸣比)
!
counter
0
x59
落魂指示物
!
counter
0
x5a
指示物(岩战之试炼)
!
counter
0
x5b
指示物(北极天熊北斗星)
#setnames, using tab for comment
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
!
setname
0
x2
次世代 ジェネクス
...
@@ -668,7 +673,7 @@
...
@@ -668,7 +673,7 @@
!
setname
0
x1a
黑蝎 黒蠍
!
setname
0
x1a
黑蝎 黒蠍
!
setname
0
x1b
幻兽 幻獣
!
setname
0
x1b
幻兽 幻獣
!
setname
0
x101b
幻兽机 幻獣機
!
setname
0
x101b
幻兽机 幻獣機
#setname 0x1c N/A
!
setname
0
x1c
死之信息 死のメッセージ
!
setname
0
x1d
核成 コアキメイル
!
setname
0
x1d
核成 コアキメイル
!
setname
0
x1e
茧状体
C
(コクーン)
!
setname
0
x1e
茧状体
C
(コクーン)
!
setname
0
x1f
新空间侠
N
(ネオスペーシアン)
!
setname
0
x1f
新空间侠
N
(ネオスペーシアン)
...
@@ -796,7 +801,9 @@
...
@@ -796,7 +801,9 @@
!
setname
0
x7c
炎舞
!
setname
0
x7c
炎舞
!
setname
0
x7d
阳炎 ヘイズ
!
setname
0
x7d
阳炎 ヘイズ
!
setname
0
x107d
阳炎兽 陽炎獣
!
setname
0
x107d
阳炎兽 陽炎獣
!
setname
0
x7e
异热同心武器
ZW
(ゼアル・ウェポン)
!
setname
0
x7e
异热同心 ゼアル
!
setname
0
x107e
异热同心武器
ZW
(ゼアル・ウェポン)
!
setname
0
x207e
异热同心从者
ZS
(ゼアル・サーバス)
!
setname
0
x7f
霍普 ホープ
!
setname
0
x7f
霍普 ホープ
!
setname
0
x107f
希望皇 霍普 希望皇ホープ
!
setname
0
x107f
希望皇 霍普 希望皇ホープ
!
setname
0
x207f
未来皇 霍普 未来皇ホープ
!
setname
0
x207f
未来皇 霍普 未来皇ホープ
...
@@ -813,7 +820,7 @@
...
@@ -813,7 +820,7 @@
!
setname
0
x89
洞 ホール
!
setname
0
x89
洞 ホール
#setname 0x8a 虫惑 蟲惑
#setname 0x8a 虫惑 蟲惑
!
setname
0
x108a
虫惑魔 蟲惑魔
!
setname
0
x108a
虫惑魔 蟲惑魔
!
setname
0
x8b
恶餐
マリスボラス
!
setname
0
x8b
食恶
マリスボラス
#setname 0x8c 德鲁伊 ドルイド
#setname 0x8c 德鲁伊 ドルイド
!
setname
0
x8d
鬼计 ゴーストリック
!
setname
0
x8d
鬼计 ゴーストリック
!
setname
0
x8e
吸血鬼 ヴァンパイア
!
setname
0
x8e
吸血鬼 ヴァンパイア
...
@@ -927,6 +934,7 @@
...
@@ -927,6 +934,7 @@
!
setname
0
xe3
方界
!
setname
0
xe3
方界
!
setname
0
xe4
精灵剑士 エルフの剣士
!
setname
0
xe4
精灵剑士 エルフの剣士
!
setname
0
xe5
光波 サイファー
!
setname
0
xe5
光波 サイファー
!
setname
0
x10e5
光波龙 サイファー・ドラゴン
!
setname
0
xe6
花札卫 花札衛
!
setname
0
xe6
花札卫 花札衛
!
setname
0
xe7
沉默剑士 サイレント・ソードマン
!
setname
0
xe7
沉默剑士 サイレント・ソードマン
!
setname
0
xe8
沉默魔术师 サイレント・マジシャン
!
setname
0
xe8
沉默魔术师 サイレント・マジシャン
...
@@ -979,7 +987,8 @@
...
@@ -979,7 +987,8 @@
!
setname
0
x10d
魔导兽|非「魔导」 魔導獣
!
setname
0
x10d
魔导兽|非「魔导」 魔導獣
!
setname
0
x10e
进化药 進化薬
!
setname
0
x10e
进化药 進化薬
!
setname
0
x10f
枪管 ヴァレル
!
setname
0
x10f
枪管 ヴァレル
!
setname
0
x110
眼纳祭神 アイズ・サクリファイス
!
setname
0
x110
纳祭 サクリファイス
!
setname
0
x1110
眼纳祭神 アイズ・サクリファイス
!
setname
0
x111
武装龙 アームド・ドラゴン
!
setname
0
x111
武装龙 アームド・ドラゴン
!
setname
0
x112
幻崩 トロイメア
!
setname
0
x112
幻崩 トロイメア
!
setname
0
x113
灵神 霊神
!
setname
0
x113
灵神 霊神
...
@@ -998,7 +1007,7 @@
...
@@ -998,7 +1007,7 @@
!
setname
0
x11f
奈芙提斯 ネフティス
!
setname
0
x11f
奈芙提斯 ネフティス
!
setname
0
x120
调皮宝贝 プランキッズ
!
setname
0
x120
调皮宝贝 プランキッズ
!
setname
0
x121
魔妖
!
setname
0
x121
魔妖
!
setname
0
x122
女武神 ワルキューレ
!
setname
0
x122
女武神
|非「武神」
ワルキューレ
!
setname
0
x123
蔷薇 ローズ
!
setname
0
x123
蔷薇 ローズ
!
setname
0
x1123
蔷薇龙 ローズ・ドラゴン
!
setname
0
x1123
蔷薇龙 ローズ・ドラゴン
!
setname
0
x124
机械天使 機械天使
!
setname
0
x124
机械天使 機械天使
...
@@ -1015,7 +1024,7 @@
...
@@ -1015,7 +1024,7 @@
!
setname
0
x12f
蜂军
B
・
F
(ビー・フォース)
!
setname
0
x12f
蜂军
B
・
F
(ビー・フォース)
!
setname
0
x130
破械
!
setname
0
x130
破械
!
setname
0
x1130
破械神
!
setname
0
x1130
破械神
!
setname
0
x131
梦
镜
Dream
Mirror
!
setname
0
x131
梦
魔镜 夢魔鏡
!
setname
0
x132
斩机 斬機
!
setname
0
x132
斩机 斬機
!
setname
0
x133
半龙女仆 ドラゴンメイド
!
setname
0
x133
半龙女仆 ドラゴンメイド
!
setname
0
x134
王战 ジェネレイド
!
setname
0
x134
王战 ジェネレイド
...
@@ -1029,7 +1038,7 @@
...
@@ -1029,7 +1038,7 @@
!
setname
0
x13c
代码破坏者 コードブレイカー
!
setname
0
x13c
代码破坏者 コードブレイカー
!
setname
0
x13d
星义 ネメシス
!
setname
0
x13d
星义 ネメシス
!
setname
0
x13e
巴巴罗斯 バルバロス
!
setname
0
x13e
巴巴罗斯 バルバロス
!
setname
0
x13f
巡掠海魔
Plunder
Patroll
!
setname
0
x13f
海造贼 海造賊
!
setname
0
x140
魔救 アダマシア
!
setname
0
x140
魔救 アダマシア
!
setname
0
x141
六花
!
setname
0
x141
六花
#setname 0x142 黄金国 エルド
#setname 0x142 黄金国 エルド
...
@@ -1047,8 +1056,36 @@
...
@@ -1047,8 +1056,36 @@
!
setname
0
x14b
机块 機塊
!
setname
0
x14b
机块 機塊
#setname 0x14c 灵术 霊術
#setname 0x14c 灵术 霊術
!
setname
0
x314c
地灵术 地霊術
!
setname
0
x314c
地灵术 地霊術
#
setname 0x514c 水灵术 水霊術
!
setname
0
x514c
水灵术 水霊術
!
setname
0
x614c
火灵术 火霊術
!
setname
0
x614c
火灵术 火霊術
#
setname 0x914c 风灵术 風霊術
!
setname
0
x914c
风灵术 風霊術
#setname 0xa14c 光灵术 光霊術
#setname 0xa14c 光灵术 光霊術
#setname 0xc14c 暗灵术 闇霊術
#setname 0xc14c 暗灵术 闇霊術
!
setname
0
x14d
铁兽 トライブリゲード
!
setname
0
x14e
电脑堺 電脳堺
!
setname
0
x114e
电脑堺门 電脳堺門
!
setname
0
x14f
双天
!
setname
0
x150
大贤者 マギストス
#setname 0x151 双子 Twin
!
setname
0
x1151
直播☆双子
Live
☆
Twin
!
setname
0
x2151
邪恶★双子
Evil
★
Twin
!
setname
0
x152
姬丝基勒 キスキル
!
setname
0
x153
璃拉 リィラ
!
setname
0
x154
龙辉巧 ドライトロン
!
setname
0
x155
护宝炮妖 スプリガンズ
!
setname
0
x156
治安战警队
S
-
Force
!
setname
0
x157
突变体
Myutant
#setname 0x158 圣 サン
!
setname
0
x1158
圣蔓 サンヴァイン
!
setname
0
x2158
圣天树 サンアバロン
!
setname
0
x159
圣夜骑士 ホーリーナイツ
!
setname
0
x15a
人偶怪兽 ドール・モンスター
!
setname
0
x15b
惊乐 アメイズメント
!
setname
0
x15c
游乐设施 アトラクション
!
setname
0
x15d
烙印
!
setname
0
x15e
降阶魔法
RDM
!
setname
0
x15f
岩战
War
Rock
!
setname
0
x160
源质兽
Materiactor
!
setname
0
x161
溟界
!
setname
0
x162
七音服 ドレミコード
!
setname
0
x163
北极天熊 ベアルクティ
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