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
REIKAI
ygopro
Commits
df6796ad
Commit
df6796ad
authored
May 01, 2017
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/Fluorohydride/ygopro
into server-link
parents
090fbbe8
44b05a18
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
352 additions
and
68 deletions
+352
-68
gframe/deck_con.cpp
gframe/deck_con.cpp
+104
-21
gframe/deck_con.h
gframe/deck_con.h
+4
-0
gframe/drawing.cpp
gframe/drawing.cpp
+78
-20
gframe/duelclient.cpp
gframe/duelclient.cpp
+34
-6
gframe/event_handler.cpp
gframe/event_handler.cpp
+10
-5
gframe/game.cpp
gframe/game.cpp
+25
-3
gframe/game.h
gframe/game.h
+9
-0
gframe/gframe.cpp
gframe/gframe.cpp
+19
-8
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+3
-0
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+9
-0
gframe/single_duel.cpp
gframe/single_duel.cpp
+14
-0
gframe/single_mode.cpp
gframe/single_mode.cpp
+21
-3
gframe/tag_duel.cpp
gframe/tag_duel.cpp
+16
-0
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+2
-0
system.conf
system.conf
+2
-0
No files found.
gframe/deck_con.cpp
View file @
df6796ad
...
@@ -66,6 +66,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -66,6 +66,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
break
;
if
(
mainGame
->
wQuery
->
isVisible
()
&&
id
!=
BUTTON_YES
&&
id
!=
BUTTON_NO
)
if
(
mainGame
->
wQuery
->
isVisible
()
&&
id
!=
BUTTON_YES
&&
id
!=
BUTTON_NO
)
break
;
break
;
if
(
mainGame
->
wLinkMarks
->
isVisible
()
&&
id
!=
BUTTON_MARKERS_OK
)
break
;
switch
(
event
.
GUIEvent
.
EventType
)
{
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_BUTTON_CLICKED
:
{
case
irr
:
:
gui
::
EGET_BUTTON_CLICKED
:
{
switch
(
id
)
{
switch
(
id
)
{
...
@@ -157,18 +159,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -157,18 +159,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break
;
break
;
}
}
case
BUTTON_START_FILTER
:
{
case
BUTTON_START_FILTER
:
{
filter_type
=
mainGame
->
cbCardType
->
getSelected
();
StartFilter
();
filter_type2
=
mainGame
->
cbCardType2
->
getItemData
(
mainGame
->
cbCardType2
->
getSelected
());
filter_lm
=
mainGame
->
cbLimit
->
getSelected
();
if
(
filter_type
==
1
)
{
filter_attrib
=
mainGame
->
cbAttribute
->
getItemData
(
mainGame
->
cbAttribute
->
getSelected
());
filter_race
=
mainGame
->
cbRace
->
getItemData
(
mainGame
->
cbRace
->
getSelected
());
filter_atk
=
parse_filter
(
mainGame
->
ebAttack
->
getText
(),
&
filter_atktype
);
filter_def
=
parse_filter
(
mainGame
->
ebDefense
->
getText
(),
&
filter_deftype
);
filter_lv
=
parse_filter
(
mainGame
->
ebStar
->
getText
(),
&
filter_lvtype
);
filter_scl
=
parse_filter
(
mainGame
->
ebScale
->
getText
(),
&
filter_scltype
);
}
FilterCards
();
if
(
!
mainGame
->
gameConf
.
separate_clear_button
)
if
(
!
mainGame
->
gameConf
.
separate_clear_button
)
ClearFilter
();
ClearFilter
();
break
;
break
;
...
@@ -242,6 +233,31 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -242,6 +233,31 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
is_clearing
=
false
;
is_clearing
=
false
;
break
;
break
;
}
}
case
BUTTON_MARKS_FILTER
:
{
mainGame
->
PopupElement
(
mainGame
->
wLinkMarks
);
break
;
}
case
BUTTON_MARKERS_OK
:
{
filter_marks
=
0
;
if
(
mainGame
->
btnMark
[
0
]
->
isPressed
())
filter_marks
|=
0100
;
if
(
mainGame
->
btnMark
[
1
]
->
isPressed
())
filter_marks
|=
0200
;
if
(
mainGame
->
btnMark
[
2
]
->
isPressed
())
filter_marks
|=
0400
;
if
(
mainGame
->
btnMark
[
3
]
->
isPressed
())
filter_marks
|=
0010
;
if
(
mainGame
->
btnMark
[
4
]
->
isPressed
())
filter_marks
|=
0040
;
if
(
mainGame
->
btnMark
[
5
]
->
isPressed
())
filter_marks
|=
0001
;
if
(
mainGame
->
btnMark
[
6
]
->
isPressed
())
filter_marks
|=
0002
;
if
(
mainGame
->
btnMark
[
7
]
->
isPressed
())
filter_marks
|=
0004
;
mainGame
->
HideElement
(
mainGame
->
wLinkMarks
);
break
;
}
}
}
break
;
break
;
}
}
...
@@ -258,12 +274,17 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -258,12 +274,17 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
case
irr
:
:
gui
::
EGET_EDITBOX_ENTER
:
{
switch
(
id
)
{
switch
(
id
)
{
case
EDITBOX_KEYWORD
:
{
case
EDITBOX_KEYWORD
:
{
irr
::
SEvent
me
;
StartFilter
();
me
.
EventType
=
irr
::
EET_GUI_EVENT
;
break
;
me
.
GUIEvent
.
EventType
=
irr
::
gui
::
EGET_BUTTON_CLICKED
;
}
me
.
GUIEvent
.
Caller
=
mainGame
->
btnStartFilter
;
}
me
.
GUIEvent
.
Element
=
mainGame
->
btnStartFilter
;
break
;
mainGame
->
device
->
postEventFromUser
(
me
);
}
case
irr
:
:
gui
::
EGET_EDITBOX_CHANGED
:
{
switch
(
id
)
{
case
EDITBOX_KEYWORD
:
{
if
(
mainGame
->
gameConf
.
auto_search_limit
>=
0
&&
(
wcslen
(
mainGame
->
ebCardName
->
getText
())
>=
mainGame
->
gameConf
.
auto_search_limit
))
StartFilter
();
break
;
break
;
}
}
}
}
...
@@ -783,6 +804,20 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
...
@@ -783,6 +804,20 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
}
}
return
false
;
return
false
;
}
}
void
DeckBuilder
::
StartFilter
()
{
filter_type
=
mainGame
->
cbCardType
->
getSelected
();
filter_type2
=
mainGame
->
cbCardType2
->
getItemData
(
mainGame
->
cbCardType2
->
getSelected
());
filter_lm
=
mainGame
->
cbLimit
->
getSelected
();
if
(
filter_type
==
1
)
{
filter_attrib
=
mainGame
->
cbAttribute
->
getItemData
(
mainGame
->
cbAttribute
->
getSelected
());
filter_race
=
mainGame
->
cbRace
->
getItemData
(
mainGame
->
cbRace
->
getSelected
());
filter_atk
=
parse_filter
(
mainGame
->
ebAttack
->
getText
(),
&
filter_atktype
);
filter_def
=
parse_filter
(
mainGame
->
ebDefense
->
getText
(),
&
filter_deftype
);
filter_lv
=
parse_filter
(
mainGame
->
ebStar
->
getText
(),
&
filter_lvtype
);
filter_scl
=
parse_filter
(
mainGame
->
ebScale
->
getText
(),
&
filter_scltype
);
}
FilterCards
();
}
void
DeckBuilder
::
FilterCards
()
{
void
DeckBuilder
::
FilterCards
()
{
results
.
clear
();
results
.
clear
();
const
wchar_t
*
pstr
=
mainGame
->
ebCardName
->
getText
();
const
wchar_t
*
pstr
=
mainGame
->
ebCardName
->
getText
();
...
@@ -860,6 +895,8 @@ void DeckBuilder::FilterCards() {
...
@@ -860,6 +895,8 @@ void DeckBuilder::FilterCards() {
}
}
if
(
filter_effect
&&
!
(
data
.
category
&
filter_effect
))
if
(
filter_effect
&&
!
(
data
.
category
&
filter_effect
))
continue
;
continue
;
if
(
filter_marks
&&
(
data
.
link_marker
&
filter_marks
)
!=
filter_marks
)
continue
;
if
(
filter_lm
)
{
if
(
filter_lm
)
{
if
(
filter_lm
<=
3
&&
(
!
filterList
->
count
(
ptr
->
first
)
||
(
*
filterList
)[
ptr
->
first
]
!=
filter_lm
-
1
))
if
(
filter_lm
<=
3
&&
(
!
filterList
->
count
(
ptr
->
first
)
||
(
*
filterList
)[
ptr
->
first
]
!=
filter_lm
-
1
))
continue
;
continue
;
...
@@ -874,12 +911,12 @@ void DeckBuilder::FilterCards() {
...
@@ -874,12 +911,12 @@ void DeckBuilder::FilterCards() {
}
}
if
(
pstr
)
{
if
(
pstr
)
{
if
(
pstr
[
0
]
==
L'$'
)
{
if
(
pstr
[
0
]
==
L'$'
)
{
if
(
wcsstr
(
text
.
name
,
&
pstr
[
1
])
==
0
)
if
(
!
CardNameContains
(
text
.
name
,
&
pstr
[
1
])
)
continue
;
continue
;
}
else
if
(
pstr
[
0
]
==
L'@'
&&
set_code
)
{
}
else
if
(
pstr
[
0
]
==
L'@'
&&
set_code
)
{
if
(
!
check_set_code
(
data
,
set_code
))
continue
;
if
(
!
check_set_code
(
data
,
set_code
))
continue
;
}
else
{
}
else
{
if
(
wcsstr
(
text
.
name
,
pstr
)
==
0
&&
wcsstr
(
text
.
text
,
pstr
)
==
0
if
(
!
CardNameContains
(
text
.
name
,
pstr
)
&&
wcsstr
(
text
.
text
,
pstr
)
==
0
&&
(
!
set_code
||
!
check_set_code
(
data
,
set_code
)))
&&
(
!
set_code
||
!
check_set_code
(
data
,
set_code
)))
continue
;
continue
;
}
}
...
@@ -909,6 +946,8 @@ void DeckBuilder::ClearSearch() {
...
@@ -909,6 +946,8 @@ void DeckBuilder::ClearSearch() {
mainGame
->
ebScale
->
setEnabled
(
false
);
mainGame
->
ebScale
->
setEnabled
(
false
);
mainGame
->
ebCardName
->
setText
(
L""
);
mainGame
->
ebCardName
->
setText
(
L""
);
ClearFilter
();
ClearFilter
();
results
.
clear
();
myswprintf
(
result_string
,
L"%d"
,
0
);
}
}
void
DeckBuilder
::
ClearFilter
()
{
void
DeckBuilder
::
ClearFilter
()
{
mainGame
->
cbAttribute
->
setSelected
(
0
);
mainGame
->
cbAttribute
->
setSelected
(
0
);
...
@@ -921,6 +960,9 @@ void DeckBuilder::ClearFilter() {
...
@@ -921,6 +960,9 @@ void DeckBuilder::ClearFilter() {
filter_effect
=
0
;
filter_effect
=
0
;
for
(
int
i
=
0
;
i
<
32
;
++
i
)
for
(
int
i
=
0
;
i
<
32
;
++
i
)
mainGame
->
chkCategory
[
i
]
->
setChecked
(
false
);
mainGame
->
chkCategory
[
i
]
->
setChecked
(
false
);
filter_marks
=
0
;
for
(
int
i
=
0
;
i
<
8
;
i
++
)
mainGame
->
btnMark
[
i
]
->
setPressed
(
false
);
}
}
void
DeckBuilder
::
SortList
()
{
void
DeckBuilder
::
SortList
()
{
auto
left
=
results
.
begin
();
auto
left
=
results
.
begin
();
...
@@ -946,5 +988,46 @@ void DeckBuilder::SortList() {
...
@@ -946,5 +988,46 @@ void DeckBuilder::SortList() {
break
;
break
;
}
}
}
}
static
inline
wchar_t
NormalizeChar
(
wchar_t
c
)
{
/*
// Convert all symbols and punctuations to space.
if (c != 0 && c < 128 && !isalnum(c)) {
return ' ';
}
*/
// Convert latin chararacters to uppercase to ignore case.
if
(
c
<
128
&&
isalpha
(
c
))
{
return
toupper
(
c
);
}
// Remove some accentued characters that are not supported by the editbox.
if
(
c
>=
232
&&
c
<=
235
)
{
return
'E'
;
}
if
(
c
>=
238
&&
c
<=
239
)
{
return
'I'
;
}
return
c
;
}
bool
DeckBuilder
::
CardNameContains
(
const
wchar_t
*
haystack
,
const
wchar_t
*
needle
)
{
if
(
!
needle
[
0
])
{
return
true
;
}
int
i
=
0
;
int
j
=
0
;
while
(
haystack
[
i
])
{
wchar_t
ca
=
NormalizeChar
(
haystack
[
i
]);
wchar_t
cb
=
NormalizeChar
(
needle
[
j
]);
if
(
ca
==
cb
)
{
j
++
;
if
(
!
needle
[
j
])
{
return
true
;
}
}
else
{
j
=
0
;
}
i
++
;
}
return
false
;
}
}
}
gframe/deck_con.h
View file @
df6796ad
...
@@ -12,10 +12,13 @@ class DeckBuilder: public irr::IEventReceiver {
...
@@ -12,10 +12,13 @@ class DeckBuilder: public irr::IEventReceiver {
public:
public:
virtual
bool
OnEvent
(
const
irr
::
SEvent
&
event
);
virtual
bool
OnEvent
(
const
irr
::
SEvent
&
event
);
void
FilterCards
();
void
FilterCards
();
void
StartFilter
();
void
ClearFilter
();
void
ClearFilter
();
void
ClearSearch
();
void
ClearSearch
();
void
SortList
();
void
SortList
();
bool
CardNameContains
(
const
wchar_t
*
haystack
,
const
wchar_t
*
needle
);
long
long
filter_effect
;
long
long
filter_effect
;
unsigned
int
filter_type
;
unsigned
int
filter_type
;
unsigned
int
filter_type2
;
unsigned
int
filter_type2
;
...
@@ -29,6 +32,7 @@ public:
...
@@ -29,6 +32,7 @@ public:
unsigned
int
filter_lv
;
unsigned
int
filter_lv
;
unsigned
int
filter_scltype
;
unsigned
int
filter_scltype
;
unsigned
int
filter_scl
;
unsigned
int
filter_scl
;
unsigned
int
filter_marks
;
int
filter_lm
;
int
filter_lm
;
int
hovered_code
;
int
hovered_code
;
int
hovered_pos
;
int
hovered_pos
;
...
...
gframe/drawing.cpp
View file @
df6796ad
...
@@ -166,8 +166,13 @@ void Game::DrawBackGround() {
...
@@ -166,8 +166,13 @@ void Game::DrawBackGround() {
S3DVertex
*
vertex
=
0
;
S3DVertex
*
vertex
=
0
;
if
(
dField
.
hovered_location
==
LOCATION_DECK
)
if
(
dField
.
hovered_location
==
LOCATION_DECK
)
vertex
=
matManager
.
vFieldDeck
[
dField
.
hovered_controler
];
vertex
=
matManager
.
vFieldDeck
[
dField
.
hovered_controler
];
else
if
(
dField
.
hovered_location
==
LOCATION_MZONE
)
else
if
(
dField
.
hovered_location
==
LOCATION_MZONE
)
{
vertex
=
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
];
vertex
=
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
];
ClientCard
*
pcard
=
mainGame
->
dField
.
mzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
];
if
(
dInfo
.
duel_rule
>=
3
&&
pcard
&&
pcard
->
type
&
TYPE_LINK
)
{
DrawLinkedZones
(
pcard
);
}
}
else
if
(
dField
.
hovered_location
==
LOCATION_SZONE
)
else
if
(
dField
.
hovered_location
==
LOCATION_SZONE
)
vertex
=
matManager
.
vFieldSzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
][
rule
];
vertex
=
matManager
.
vFieldSzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
][
rule
];
else
if
(
dField
.
hovered_location
==
LOCATION_GRAVE
)
else
if
(
dField
.
hovered_location
==
LOCATION_GRAVE
)
...
@@ -191,6 +196,36 @@ void Game::DrawBackGround() {
...
@@ -191,6 +196,36 @@ void Game::DrawBackGround() {
driver
->
drawVertexPrimitiveList
(
vertex
,
4
,
matManager
.
iRectangle
,
2
);
driver
->
drawVertexPrimitiveList
(
vertex
,
4
,
matManager
.
iRectangle
,
2
);
}
}
}
}
void
Game
::
DrawLinkedZones
(
ClientCard
*
pcard
)
{
int
mark
=
pcard
->
link_marker
;
matManager
.
mSelField
.
AmbientColor
=
0xff0261a2
;
driver
->
setMaterial
(
matManager
.
mSelField
);
if
(
dField
.
hovered_sequence
<
5
)
{
if
(
mark
&
LINK_MARKER_LEFT
&&
dField
.
hovered_sequence
>
0
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
-
1
],
4
,
matManager
.
iRectangle
,
2
);
if
(
mark
&
LINK_MARKER_RIGHT
&&
dField
.
hovered_sequence
<
4
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
dField
.
hovered_sequence
+
1
],
4
,
matManager
.
iRectangle
,
2
);
if
((
mark
&
LINK_MARKER_TOP_LEFT
&&
dField
.
hovered_sequence
==
2
)
||
(
mark
&
LINK_MARKER_TOP
&&
dField
.
hovered_sequence
==
1
)
||
(
mark
&
LINK_MARKER_TOP_RIGHT
&&
dField
.
hovered_sequence
==
0
))
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
5
],
4
,
matManager
.
iRectangle
,
2
);
if
((
mark
&
LINK_MARKER_TOP_LEFT
&&
dField
.
hovered_sequence
==
4
)
||
(
mark
&
LINK_MARKER_TOP
&&
dField
.
hovered_sequence
==
3
)
||
(
mark
&
LINK_MARKER_TOP_RIGHT
&&
dField
.
hovered_sequence
==
2
))
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
6
],
4
,
matManager
.
iRectangle
,
2
);
}
else
{
int
swap
=
(
dField
.
hovered_sequence
==
5
)
?
0
:
2
;
if
(
mark
&
LINK_MARKER_BOTTOM_LEFT
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
0
+
swap
],
4
,
matManager
.
iRectangle
,
2
);
if
(
mark
&
LINK_MARKER_BOTTOM
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
1
+
swap
],
4
,
matManager
.
iRectangle
,
2
);
if
(
mark
&
LINK_MARKER_BOTTOM_RIGHT
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
dField
.
hovered_controler
][
2
+
swap
],
4
,
matManager
.
iRectangle
,
2
);
if
(
mark
&
LINK_MARKER_TOP_LEFT
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
1
-
dField
.
hovered_controler
][
4
-
swap
],
4
,
matManager
.
iRectangle
,
2
);
if
(
mark
&
LINK_MARKER_TOP
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
1
-
dField
.
hovered_controler
][
3
-
swap
],
4
,
matManager
.
iRectangle
,
2
);
if
(
mark
&
LINK_MARKER_TOP_RIGHT
)
driver
->
drawVertexPrimitiveList
(
&
matManager
.
vFieldMzone
[
1
-
dField
.
hovered_controler
][
2
-
swap
],
4
,
matManager
.
iRectangle
,
2
);
}
}
void
Game
::
DrawCards
()
{
void
Game
::
DrawCards
()
{
for
(
int
p
=
0
;
p
<
2
;
++
p
)
{
for
(
int
p
=
0
;
p
<
2
;
++
p
)
{
for
(
auto
it
=
dField
.
mzone
[
p
].
begin
();
it
!=
dField
.
mzone
[
p
].
end
();
++
it
)
for
(
auto
it
=
dField
.
mzone
[
p
].
begin
();
it
!=
dField
.
mzone
[
p
].
end
();
++
it
)
...
@@ -437,25 +472,48 @@ void Game::DrawMisc() {
...
@@ -437,25 +472,48 @@ void Game::DrawMisc() {
pcard
=
dField
.
mzone
[
1
][
6
];
pcard
=
dField
.
mzone
[
1
][
6
];
if
(
pcard
&&
(
pcard
->
position
&
POS_FACEUP
))
if
(
pcard
&&
(
pcard
->
position
&
POS_FACEUP
))
DrawStatus
(
pcard
,
593
,
291
,
555
,
338
);
DrawStatus
(
pcard
,
593
,
291
,
555
,
338
);
pcard
=
dField
.
szone
[
0
][
6
];
if
(
dInfo
.
duel_rule
<
3
)
{
if
(
pcard
)
{
pcard
=
dField
.
szone
[
0
][
6
];
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
426
,
394
,
438
,
414
),
0xff000000
,
true
,
false
,
0
);
if
(
pcard
)
{
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
427
,
395
,
439
,
415
),
0xffffffff
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
426
,
394
,
438
,
414
),
0xff000000
,
true
,
false
,
0
);
}
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
427
,
395
,
439
,
415
),
0xffffffff
,
true
,
false
,
0
);
pcard
=
dField
.
szone
[
0
][
7
];
}
if
(
pcard
)
{
pcard
=
dField
.
szone
[
0
][
7
];
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
880
,
394
,
912
,
414
),
0xff000000
,
true
,
false
,
0
);
if
(
pcard
)
{
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
881
,
395
,
913
,
415
),
0xffffffff
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
880
,
394
,
912
,
414
),
0xff000000
,
true
,
false
,
0
);
}
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
881
,
395
,
913
,
415
),
0xffffffff
,
true
,
false
,
0
);
pcard
=
dField
.
szone
[
1
][
6
];
}
if
(
pcard
)
{
pcard
=
dField
.
szone
[
1
][
6
];
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
839
,
245
,
871
,
265
),
0xff000000
,
true
,
false
,
0
);
if
(
pcard
)
{
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
840
,
246
,
872
,
266
),
0xffffffff
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
839
,
245
,
871
,
265
),
0xff000000
,
true
,
false
,
0
);
}
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
840
,
246
,
872
,
266
),
0xffffffff
,
true
,
false
,
0
);
pcard
=
dField
.
szone
[
1
][
7
];
}
if
(
pcard
)
{
pcard
=
dField
.
szone
[
1
][
7
];
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
463
,
245
,
495
,
265
),
0xff000000
,
true
,
false
,
0
);
if
(
pcard
)
{
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
464
,
246
,
496
,
266
),
0xffffffff
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
463
,
245
,
495
,
265
),
0xff000000
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
464
,
246
,
496
,
266
),
0xffffffff
,
true
,
false
,
0
);
}
}
else
{
pcard
=
dField
.
szone
[
0
][
0
];
if
(
pcard
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
&&
!
pcard
->
equipTarget
)
{
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
454
,
430
,
466
,
450
),
0xff000000
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
455
,
431
,
467
,
451
),
0xffffffff
,
true
,
false
,
0
);
}
pcard
=
dField
.
szone
[
0
][
4
];
if
(
pcard
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
&&
!
pcard
->
equipTarget
)
{
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
850
,
430
,
882
,
450
),
0xff000000
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
851
,
431
,
883
,
451
),
0xffffffff
,
true
,
false
,
0
);
}
pcard
=
dField
.
szone
[
1
][
0
];
if
(
pcard
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
&&
!
pcard
->
equipTarget
)
{
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
806
,
222
,
838
,
242
),
0xff000000
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
lscstring
,
recti
(
807
,
223
,
839
,
243
),
0xffffffff
,
true
,
false
,
0
);
}
pcard
=
dField
.
szone
[
1
][
4
];
if
(
pcard
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
&&
!
pcard
->
equipTarget
)
{
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
498
,
222
,
530
,
242
),
0xff000000
,
true
,
false
,
0
);
adFont
->
draw
(
pcard
->
rscstring
,
recti
(
499
,
223
,
531
,
243
),
0xffffffff
,
true
,
false
,
0
);
}
}
}
if
(
dField
.
extra
[
0
].
size
())
{
if
(
dField
.
extra
[
0
].
size
())
{
int
offset
=
(
dField
.
extra
[
0
].
size
()
>=
10
)
?
0
:
mainGame
->
textFont
->
getDimension
(
dataManager
.
GetNumString
(
1
)).
Width
;
int
offset
=
(
dField
.
extra
[
0
].
size
()
>=
10
)
?
0
:
mainGame
->
textFont
->
getDimension
(
dataManager
.
GetNumString
(
1
)).
Width
;
...
...
gframe/duelclient.cpp
View file @
df6796ad
...
@@ -1014,7 +1014,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1014,7 +1014,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
dField
.
remove_act
=
true
;
mainGame
->
dField
.
remove_act
=
true
;
else
if
(
pcard
->
location
==
LOCATION_EXTRA
)
else
if
(
pcard
->
location
==
LOCATION_EXTRA
)
mainGame
->
dField
.
extra_act
=
true
;
mainGame
->
dField
.
extra_act
=
true
;
else
if
(
pcard
->
location
==
LOCATION_SZONE
&&
(
pcard
->
sequence
==
0
||
pcard
->
sequence
==
6
)
&&
pcard
->
lscale
)
else
if
(
pcard
->
location
==
LOCATION_SZONE
&&
(
pcard
->
sequence
==
0
||
pcard
->
sequence
==
6
)
&&
(
pcard
->
type
&
TYPE_PENDULUM
)
)
mainGame
->
dField
.
pzone_act
[
pcard
->
controler
]
=
true
;
mainGame
->
dField
.
pzone_act
[
pcard
->
controler
]
=
true
;
}
}
mainGame
->
dField
.
reposable_cards
.
clear
();
mainGame
->
dField
.
reposable_cards
.
clear
();
...
@@ -1295,10 +1295,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1295,10 +1295,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
569
),
dataManager
.
GetName
(
select_hint
));
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
569
),
dataManager
.
GetName
(
select_hint
));
}
else
}
else
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
560
));
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
560
));
select_hint
=
0
;
}
else
{
mainGame
->
stHintMsg
->
setText
(
textBuffer
);
if
(
select_hint
)
{
}
else
myswprintf
(
textBuffer
,
dataManager
.
GetDesc
(
select_hint
));
mainGame
->
stHintMsg
->
setText
(
dataManager
.
GetSysString
(
570
));
}
else
myswprintf
(
textBuffer
,
dataManager
.
GetSysString
(
570
));
}
select_hint
=
0
;
mainGame
->
stHintMsg
->
setText
(
textBuffer
);
mainGame
->
stHintMsg
->
setVisible
(
true
);
mainGame
->
stHintMsg
->
setVisible
(
true
);
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_PLACE
&&
mainGame
->
chkAutoPos
->
isChecked
())
{
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_SELECT_PLACE
&&
mainGame
->
chkAutoPos
->
isChecked
())
{
unsigned
int
filter
;
unsigned
int
filter
;
...
@@ -2910,6 +2914,30 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -2910,6 +2914,30 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
WaitFrameSignal
(
40
);
mainGame
->
WaitFrameSignal
(
40
);
return
true
;
return
true
;
}
}
case
MSG_ROCK_PAPER_SCISSORS
:
{
/*int player = */
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
if
(
mainGame
->
dInfo
.
isReplay
&&
mainGame
->
dInfo
.
isReplaySkiping
)
return
true
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
PopupElement
(
mainGame
->
wHand
);
mainGame
->
gMutex
.
Unlock
();
return
false
;
}
case
MSG_HAND_RES
:
{
int
res
=
BufferIO
::
ReadInt8
(
pbuf
);
if
(
mainGame
->
dInfo
.
isReplay
&&
mainGame
->
dInfo
.
isReplaySkiping
)
return
true
;
mainGame
->
stHintMsg
->
setVisible
(
false
);
if
(
mainGame
->
dInfo
.
isFirst
)
mainGame
->
showcardcode
=
((
res
&
0x3
)
-
1
)
+
((((
res
>>
2
)
&
0x3
)
-
1
)
<<
16
);
else
mainGame
->
showcardcode
=
(((
res
>>
2
)
&
0x3
)
-
1
)
+
(((
res
&
0x3
)
-
1
)
<<
16
);
mainGame
->
showcarddif
=
50
;
mainGame
->
showcardp
=
0
;
mainGame
->
showcard
=
100
;
mainGame
->
WaitFrameSignal
(
60
);
return
false
;
}
case
MSG_ANNOUNCE_RACE
:
{
case
MSG_ANNOUNCE_RACE
:
{
/*int player = */
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
/*int player = */
mainGame
->
LocalPlayer
(
BufferIO
::
ReadInt8
(
pbuf
));
mainGame
->
dField
.
announce_count
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
dField
.
announce_count
=
BufferIO
::
ReadInt8
(
pbuf
);
...
@@ -3176,6 +3204,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3176,6 +3204,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
case
MSG_RELOAD_FIELD
:
{
case
MSG_RELOAD_FIELD
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
dField
.
Clear
();
mainGame
->
dField
.
Clear
();
mainGame
->
dInfo
.
duel_rule
=
BufferIO
::
ReadInt8
(
pbuf
);
int
val
=
0
;
int
val
=
0
;
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
int
p
=
mainGame
->
LocalPlayer
(
i
);
int
p
=
mainGame
->
LocalPlayer
(
i
);
...
@@ -3291,7 +3320,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -3291,7 +3320,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
myswprintf
(
event_string
,
dataManager
.
GetSysString
(
1609
),
dataManager
.
GetName
(
mainGame
->
dField
.
current_chain
.
code
));
myswprintf
(
event_string
,
dataManager
.
GetSysString
(
1609
),
dataManager
.
GetName
(
mainGame
->
dField
.
current_chain
.
code
));
mainGame
->
dField
.
last_chain
=
true
;
mainGame
->
dField
.
last_chain
=
true
;
}
}
mainGame
->
dInfo
.
duel_rule
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
break
;
break
;
}
}
...
...
gframe/event_handler.cpp
View file @
df6796ad
...
@@ -29,11 +29,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -29,11 +29,16 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case
BUTTON_HAND2
:
case
BUTTON_HAND2
:
case
BUTTON_HAND3
:
{
case
BUTTON_HAND3
:
{
mainGame
->
wHand
->
setVisible
(
false
);
mainGame
->
wHand
->
setVisible
(
false
);
mainGame
->
stHintMsg
->
setText
(
L""
);
if
(
mainGame
->
dInfo
.
curMsg
==
MSG_ROCK_PAPER_SCISSORS
){
mainGame
->
stHintMsg
->
setVisible
(
true
);
DuelClient
::
SetResponseI
(
id
-
BUTTON_HAND1
+
1
);
CTOS_HandResult
cshr
;
DuelClient
::
SendResponse
();
cshr
.
res
=
id
-
BUTTON_HAND1
+
1
;
}
else
{
DuelClient
::
SendPacketToServer
(
CTOS_HAND_RESULT
,
cshr
);
mainGame
->
stHintMsg
->
setText
(
L""
);
mainGame
->
stHintMsg
->
setVisible
(
true
);
CTOS_HandResult
cshr
;
cshr
.
res
=
id
-
BUTTON_HAND1
+
1
;
DuelClient
::
SendPacketToServer
(
CTOS_HAND_RESULT
,
cshr
);
}
break
;
break
;
}
}
case
BUTTON_FIRST
:
case
BUTTON_FIRST
:
...
...
gframe/game.cpp
View file @
df6796ad
...
@@ -527,10 +527,10 @@ bool Game::Initialize() {
...
@@ -527,10 +527,10 @@ bool Game::Initialize() {
ebDefense = env->addEditBox(L"", rect<s32>(260, 40 + 75 / 6, 340, 60 + 75 / 6), true, wFilter);
ebDefense = env->addEditBox(L"", rect<s32>(260, 40 + 75 / 6, 340, 60 + 75 / 6), true, wFilter);
ebDefense->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebDefense->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1324), rect<s32>(10, 62 + 100 / 6, 80, 82 + 100 / 6), false, false, wFilter);
env->addStaticText(dataManager.GetSysString(1324), rect<s32>(10, 62 + 100 / 6, 80, 82 + 100 / 6), false, false, wFilter);
ebStar = env->addEditBox(L"", rect<s32>(60, 60 + 100 / 6, 1
9
0, 80 + 100 / 6), true, wFilter);
ebStar = env->addEditBox(L"", rect<s32>(60, 60 + 100 / 6, 1
0
0, 80 + 100 / 6), true, wFilter);
ebStar->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebStar->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1336), rect<s32>(10
, 82 + 125 / 6, 80, 102 + 125
/ 6), false, false, wFilter);
env->addStaticText(dataManager.GetSysString(1336), rect<s32>(10
1, 62 + 100 / 6, 150, 82 + 100
/ 6), false, false, wFilter);
ebScale = env->addEditBox(L"", rect<s32>(
60, 80 + 125 / 6, 190, 100 + 125
/ 6), true, wFilter);
ebScale = env->addEditBox(L"", rect<s32>(
150, 60 + 100 / 6, 190, 80 + 100
/ 6), true, wFilter);
ebScale->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
ebScale->setTextAlignment(irr::gui::EGUIA_CENTER, irr::gui::EGUIA_CENTER);
env->addStaticText(dataManager.GetSysString(1325), rect<s32>(205, 62 + 100 / 6, 280, 82 + 100 / 6), false, false, wFilter);
env->addStaticText(dataManager.GetSysString(1325), rect<s32>(205, 62 + 100 / 6, 280, 82 + 100 / 6), false, false, wFilter);
ebCardName = env->addEditBox(L"", rect<s32>(260, 60 + 100 / 6, 390, 80 + 100 / 6), true, wFilter, EDITBOX_KEYWORD);
ebCardName = env->addEditBox(L"", rect<s32>(260, 60 + 100 / 6, 390, 80 + 100 / 6), true, wFilter, EDITBOX_KEYWORD);
...
@@ -549,6 +549,23 @@ bool Game::Initialize() {
...
@@ -549,6 +549,23 @@ bool Game::Initialize() {
btnCategoryOK = env->addButton(rect<s32>(135, 175, 235, 200), wCategories, BUTTON_CATEGORY_OK, dataManager.GetSysString(1211));
btnCategoryOK = env->addButton(rect<s32>(135, 175, 235, 200), wCategories, BUTTON_CATEGORY_OK, dataManager.GetSysString(1211));
for(int i = 0; i < 32; ++i)
for(int i = 0; i < 32; ++i)
chkCategory[i] = env->addCheckBox(false, recti(10 + (i % 4) * 90, 10 + (i / 4) * 20, 100 + (i % 4) * 90, 30 + (i / 4) * 20), wCategories, -1, dataManager.GetSysString(1100 + i));
chkCategory[i] = env->addCheckBox(false, recti(10 + (i % 4) * 90, 10 + (i / 4) * 20, 100 + (i % 4) * 90, 30 + (i / 4) * 20), wCategories, -1, dataManager.GetSysString(1100 + i));
btnMarksFilter = env->addButton(rect<s32>(60, 80 + 125 / 6, 190, 100 + 125 / 6), wFilter, BUTTON_MARKS_FILTER, dataManager.GetSysString(1374));
wLinkMarks = env->addWindow(rect<s32>(700, 30, 820, 150), false, dataManager.strBuffer);
wLinkMarks->getCloseButton()->setVisible(false);
wLinkMarks->setDrawTitlebar(false);
wLinkMarks->setDraggable(false);
wLinkMarks->setVisible(false);
btnMarksOK = env->addButton(recti(45, 45, 75, 75), wLinkMarks, BUTTON_MARKERS_OK, dataManager.GetSysString(1211));
btnMark[0] = env->addButton(recti(10, 10, 40, 40), wLinkMarks, -1, L"\u2196");
btnMark[1] = env->addButton(recti(45, 10, 75, 40), wLinkMarks, -1, L"\u2191");
btnMark[2] = env->addButton(recti(80, 10, 110, 40), wLinkMarks, -1, L"\u2197");
btnMark[3] = env->addButton(recti(10, 45, 40, 75), wLinkMarks, -1, L"\u2190");
btnMark[4] = env->addButton(recti(80, 45, 110, 75), wLinkMarks, -1, L"\u2192");
btnMark[5] = env->addButton(recti(10, 80, 40, 110), wLinkMarks, -1, L"\u2199");
btnMark[6] = env->addButton(recti(45, 80, 75, 110), wLinkMarks, -1, L"\u2193");
btnMark[7] = env->addButton(recti(80, 80, 110, 110), wLinkMarks, -1, L"\u2198");
for(int i=0;i<8;i++)
btnMark[i]->setIsPushButton(true);
//replay window
//replay window
wReplay = env->addWindow(rect<s32>(220, 100, 800, 520), false, dataManager.GetSysString(1202));
wReplay = env->addWindow(rect<s32>(220, 100, 800, 520), false, dataManager.GetSysString(1202));
wReplay->getCloseButton()->setVisible(false);
wReplay->getCloseButton()->setVisible(false);
...
@@ -943,6 +960,7 @@ void Game::LoadConfig() {
...
@@ -943,6 +960,7 @@ void Game::LoadConfig() {
gameConf.control_mode = 0;
gameConf.control_mode = 0;
gameConf.draw_field_spell = 1;
gameConf.draw_field_spell = 1;
gameConf.separate_clear_button = 1;
gameConf.separate_clear_button = 1;
gameConf.auto_search_limit = -1;
fseek(fp, 0, SEEK_END);
fseek(fp, 0, SEEK_END);
int fsize = ftell(fp);
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fseek(fp, 0, SEEK_SET);
...
@@ -997,6 +1015,8 @@ void Game::LoadConfig() {
...
@@ -997,6 +1015,8 @@ void Game::LoadConfig() {
gameConf.draw_field_spell = atoi(valbuf);
gameConf.draw_field_spell = atoi(valbuf);
} else if(!strcmp(strbuf, "separate_clear_button")) {
} else if(!strcmp(strbuf, "separate_clear_button")) {
gameConf.separate_clear_button = atoi(valbuf);
gameConf.separate_clear_button = atoi(valbuf);
} else if(!strcmp(strbuf, "auto_search_limit")) {
gameConf.auto_search_limit = atoi(valbuf);
} else {
} else {
// options allowing multiple words
// options allowing multiple words
sscanf(linebuf, "%s = %240[^\n]", strbuf, valbuf);
sscanf(linebuf, "%s = %240[^\n]", strbuf, valbuf);
...
@@ -1050,6 +1070,8 @@ void Game::SaveConfig() {
...
@@ -1050,6 +1070,8 @@ void Game::SaveConfig() {
fprintf(fp, "control_mode = %d\n", gameConf.control_mode);
fprintf(fp, "control_mode = %d\n", gameConf.control_mode);
fprintf(fp, "draw_field_spell = %d\n", gameConf.draw_field_spell);
fprintf(fp, "draw_field_spell = %d\n", gameConf.draw_field_spell);
fprintf(fp, "separate_clear_button = %d\n", gameConf.separate_clear_button);
fprintf(fp, "separate_clear_button = %d\n", gameConf.separate_clear_button);
fprintf(fp, "#auto_search_limit >= 0: Start search automatically when the user enters N chars\n");
fprintf(fp, "auto_search_limit = %d\n", gameConf.auto_search_limit);
fclose(fp);
fclose(fp);
}
}
void Game::ShowCardInfo(int code) {
void Game::ShowCardInfo(int code) {
...
...
gframe/game.h
View file @
df6796ad
...
@@ -36,6 +36,7 @@ struct Config {
...
@@ -36,6 +36,7 @@ struct Config {
int
control_mode
;
int
control_mode
;
int
draw_field_spell
;
int
draw_field_spell
;
int
separate_clear_button
;
int
separate_clear_button
;
int
auto_search_limit
;
};
};
struct
DuelInfo
{
struct
DuelInfo
{
...
@@ -91,6 +92,7 @@ public:
...
@@ -91,6 +92,7 @@ public:
void RefreshSingleplay();
void RefreshSingleplay();
void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv);
void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv);
void DrawBackGround();
void DrawBackGround();
void DrawLinkedZones(ClientCard* pcard);
void DrawCards();
void DrawCards();
void DrawCard(ClientCard* pcard);
void DrawCard(ClientCard* pcard);
void DrawMisc();
void DrawMisc();
...
@@ -389,6 +391,10 @@ public:
...
@@ -389,6 +391,10 @@ public:
irr::gui::IGUIWindow* wCategories;
irr::gui::IGUIWindow* wCategories;
irr::gui::IGUICheckBox* chkCategory[32];
irr::gui::IGUICheckBox* chkCategory[32];
irr::gui::IGUIButton* btnCategoryOK;
irr::gui::IGUIButton* btnCategoryOK;
irr::gui::IGUIButton* btnMarksFilter;
irr::gui::IGUIWindow* wLinkMarks;
irr::gui::IGUIButton* btnMark[8];
irr::gui::IGUIButton* btnMarksOK;
//sort type
//sort type
irr::gui::IGUIStaticText* wSort;
irr::gui::IGUIStaticText* wSort;
irr::gui::IGUIComboBox* cbSortType;
irr::gui::IGUIComboBox* cbSortType;
...
@@ -558,5 +564,8 @@ extern unsigned char draw_count;
...
@@ -558,5 +564,8 @@ extern unsigned char draw_count;
#define BUTTON_CANCEL_SINGLEPLAY 352
#define BUTTON_CANCEL_SINGLEPLAY 352
#define COMBOBOX_SORTTYPE 370
#define COMBOBOX_SORTTYPE 370
#define BUTTON_MARKS_FILTER 380
#define BUTTON_MARKERS_OK 381
#define DEFAULT_DUEL_RULE 3
#define DEFAULT_DUEL_RULE 3
#endif // GAME_H
#endif // GAME_H
gframe/gframe.cpp
View file @
df6796ad
...
@@ -131,19 +131,30 @@ int main(int argc, char* argv[]) {
...
@@ -131,19 +131,30 @@ int main(int argc, char* argv[]) {
} else if(!strcmp(argv[i], "-k")) { // Keep on return
} else if(!strcmp(argv[i], "-k")) { // Keep on return
exit_on_return = false;
exit_on_return = false;
keep_on_return = true;
keep_on_return = true;
} else if(!strcmp(argv[i], "-d")) { // Deck
if(i + 2 < argc) { // select deck
++i;
GetParameterW(ygo::mainGame->gameConf.lastdeck, &argv[i][0]);
continue;
} else { // open deck
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnDeckEdit);
break;
}
} else if(!strcmp(argv[i], "-c")) { // Create host
exit_on_return = !keep_on_return;
ygo::mainGame->HideElement(ygo::mainGame->wMainMenu);
ClickButton(ygo::mainGame->btnHostConfirm);
break;
} else if(!strcmp(argv[i], "-j")) { // Join host
} else if(!strcmp(argv[i], "-j")) { // Join host
exit_on_return = !keep_on_return;
exit_on_return = !keep_on_return;
ClickButton(ygo::mainGame->btnLanMode);
ClickButton(ygo::mainGame->btnLanMode);
ClickButton(ygo::mainGame->btnJoinHost);
ClickButton(ygo::mainGame->btnJoinHost);
break;
break;
} else if(!strcmp(argv[i], "-d")) { // Deck
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnDeckEdit);
break;
} else if(!strcmp(argv[i], "-r")) { // Replay
} else if(!strcmp(argv[i], "-r")) { // Replay
exit_on_return = !keep_on_return;
exit_on_return = !keep_on_return;
if(i < argc) {
if(i < argc) {
...
...
gframe/menu_handler.cpp
View file @
df6796ad
...
@@ -271,6 +271,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -271,6 +271,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
ebStar
->
setEnabled
(
false
);
mainGame
->
ebStar
->
setEnabled
(
false
);
mainGame
->
ebScale
->
setEnabled
(
false
);
mainGame
->
ebScale
->
setEnabled
(
false
);
mainGame
->
deckBuilder
.
filter_effect
=
0
;
mainGame
->
deckBuilder
.
filter_effect
=
0
;
mainGame
->
deckBuilder
.
filter_marks
=
0
;
mainGame
->
deckBuilder
.
result_string
[
0
]
=
L'0'
;
mainGame
->
deckBuilder
.
result_string
[
0
]
=
L'0'
;
mainGame
->
deckBuilder
.
result_string
[
1
]
=
0
;
mainGame
->
deckBuilder
.
result_string
[
1
]
=
0
;
mainGame
->
deckBuilder
.
results
.
clear
();
mainGame
->
deckBuilder
.
results
.
clear
();
...
@@ -280,6 +281,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
...
@@ -280,6 +281,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
deckBuilder
);
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
deckBuilder
);
for
(
int
i
=
0
;
i
<
32
;
++
i
)
for
(
int
i
=
0
;
i
<
32
;
++
i
)
mainGame
->
chkCategory
[
i
]
->
setChecked
(
false
);
mainGame
->
chkCategory
[
i
]
->
setChecked
(
false
);
for
(
int
i
=
0
;
i
<
8
;
i
++
)
mainGame
->
btnMark
[
i
]
->
setPressed
(
false
);
break
;
break
;
}
}
}
}
...
...
gframe/replay_mode.cpp
View file @
df6796ad
...
@@ -745,6 +745,15 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
...
@@ -745,6 +745,15 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
);
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
);
break
;
break
;
}
}
case
MSG_ROCK_PAPER_SCISSORS
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
return
ReadReplayResponse
();
}
case
MSG_HAND_RES
:
{
pbuf
+=
1
;
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
);
break
;
}
case
MSG_ANNOUNCE_RACE
:
{
case
MSG_ANNOUNCE_RACE
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
pbuf
+=
5
;
...
...
gframe/single_duel.cpp
View file @
df6796ad
...
@@ -1452,6 +1452,20 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
...
@@ -1452,6 +1452,20 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
break
;
}
}
case
MSG_ROCK_PAPER_SCISSORS
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_HAND_RES
:
{
pbuf
+=
1
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
}
case
MSG_ANNOUNCE_RACE
:
{
case
MSG_ANNOUNCE_RACE
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
pbuf
+=
5
;
...
...
gframe/single_mode.cpp
View file @
df6796ad
...
@@ -57,8 +57,13 @@ int SingleMode::SinglePlayThread(void* param) {
...
@@ -57,8 +57,13 @@ int SingleMode::SinglePlayThread(void* param) {
mainGame
->
dInfo
.
clientname
[
0
]
=
0
;
mainGame
->
dInfo
.
clientname
[
0
]
=
0
;
mainGame
->
dInfo
.
turn
=
0
;
mainGame
->
dInfo
.
turn
=
0
;
if
(
!
preload_script
(
pduel
,
fname2
,
slen
))
{
if
(
!
preload_script
(
pduel
,
fname2
,
slen
))
{
end_duel
(
pduel
);
wchar_t
fname
[
256
];
return
0
;
myswprintf
(
fname
,
L"./single/%ls"
,
open_file_name
);
slen
=
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
if
(
!
preload_script
(
pduel
,
fname2
,
slen
))
{
end_duel
(
pduel
);
return
0
;
}
}
}
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
HideElement
(
mainGame
->
wSinglePlay
);
mainGame
->
HideElement
(
mainGame
->
wSinglePlay
);
...
@@ -569,6 +574,19 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
...
@@ -569,6 +574,19 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
);
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
);
break
;
break
;
}
}
case
MSG_ROCK_PAPER_SCISSORS
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
if
(
!
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
))
{
mainGame
->
singleSignal
.
Reset
();
mainGame
->
singleSignal
.
Wait
();
}
break
;
}
case
MSG_HAND_RES
:
{
pbuf
+=
1
;
DuelClient
::
ClientAnalyze
(
offset
,
pbuf
-
offset
);
break
;
}
case
MSG_ANNOUNCE_RACE
:
{
case
MSG_ANNOUNCE_RACE
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
pbuf
+=
5
;
...
@@ -632,6 +650,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
...
@@ -632,6 +650,7 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
case
MSG_RELOAD_FIELD
:
{
case
MSG_RELOAD_FIELD
:
{
mainGame
->
gMutex
.
Lock
();
mainGame
->
gMutex
.
Lock
();
mainGame
->
dField
.
Clear
();
mainGame
->
dField
.
Clear
();
mainGame
->
dInfo
.
duel_rule
=
BufferIO
::
ReadInt8
(
pbuf
);
int
val
=
0
;
int
val
=
0
;
for
(
int
p
=
0
;
p
<
2
;
++
p
)
{
for
(
int
p
=
0
;
p
<
2
;
++
p
)
{
mainGame
->
dInfo
.
lp
[
p
]
=
BufferIO
::
ReadInt32
(
pbuf
);
mainGame
->
dInfo
.
lp
[
p
]
=
BufferIO
::
ReadInt32
(
pbuf
);
...
@@ -694,7 +713,6 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
...
@@ -694,7 +713,6 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
BufferIO
::
ReadInt8
(
pbuf
);
//chain count, always 0
BufferIO
::
ReadInt8
(
pbuf
);
//chain count, always 0
SinglePlayReload
();
SinglePlayReload
();
mainGame
->
dField
.
RefreshAllCards
();
mainGame
->
dField
.
RefreshAllCards
();
mainGame
->
dInfo
.
duel_rule
=
BufferIO
::
ReadInt8
(
pbuf
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
gMutex
.
Unlock
();
break
;
break
;
}
}
...
...
gframe/tag_duel.cpp
View file @
df6796ad
...
@@ -1480,6 +1480,22 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
...
@@ -1480,6 +1480,22 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer
::
ReSendToPlayer
(
*
oit
);
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
break
;
}
}
case
MSG_ROCK_PAPER_SCISSORS
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
WaitforResponse
(
player
);
NetServer
::
SendBufferToPlayer
(
players
[
player
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
return
1
;
}
case
MSG_HAND_RES
:
{
pbuf
+=
1
;
NetServer
::
SendBufferToPlayer
(
players
[
0
],
STOC_GAME_MSG
,
offset
,
pbuf
-
offset
);
NetServer
::
ReSendToPlayer
(
players
[
1
]);
NetServer
::
ReSendToPlayer
(
players
[
2
]);
NetServer
::
ReSendToPlayer
(
players
[
3
]);
for
(
auto
oit
=
observers
.
begin
();
oit
!=
observers
.
end
();
++
oit
)
NetServer
::
ReSendToPlayer
(
*
oit
);
break
;
}
case
MSG_ANNOUNCE_RACE
:
{
case
MSG_ANNOUNCE_RACE
:
{
player
=
BufferIO
::
ReadInt8
(
pbuf
);
player
=
BufferIO
::
ReadInt8
(
pbuf
);
pbuf
+=
5
;
pbuf
+=
5
;
...
...
ocgcore
@
c3859e4d
Subproject commit
e5e5b78d9270040e3e377bb54873a0922de7a5ba
Subproject commit
c3859e4d926aca7c77e19d939c4d588aced52889
script
@
e9d8a27f
Subproject commit
6b2388ce000829dfda768af40db69576e3527f12
Subproject commit
e9d8a27ff316dda638bf3cc1a8b71713c234f0f8
strings.conf
View file @
df6796ad
...
@@ -116,6 +116,7 @@
...
@@ -116,6 +116,7 @@
!
system
568
请选择要处理效果的卡
!
system
568
请选择要处理效果的卡
!
system
569
请选择[%
ls
]的位置
!
system
569
请选择[%
ls
]的位置
!
system
570
请选择要变成不能使用的卡片区域
!
system
570
请选择要变成不能使用的卡片区域
!
system
571
请选择要移动到的位置
!
system
1000
卡组
!
system
1000
卡组
!
system
1001
手卡
!
system
1001
手卡
!
system
1002
怪兽区
!
system
1002
怪兽区
...
@@ -358,6 +359,7 @@
...
@@ -358,6 +359,7 @@
!
system
1371
攻击↑
!
system
1371
攻击↑
!
system
1372
守备↑
!
system
1372
守备↑
!
system
1373
名称↓
!
system
1373
名称↓
!
system
1374
连接标记
!
system
1390
等待行动中...
!
system
1390
等待行动中...
!
system
1391
等待行动中....
!
system
1391
等待行动中....
!
system
1392
等待行动中.....
!
system
1392
等待行动中.....
...
...
system.conf
View file @
df6796ad
...
@@ -23,3 +23,5 @@ hide_hint_button = 1
...
@@ -23,3 +23,5 @@ hide_hint_button = 1
control_mode
=
0
control_mode
=
0
draw_field_spell
=
1
draw_field_spell
=
1
separate_clear_button
=
1
separate_clear_button
=
1
#auto_search_limit >= 0: Start search automatically when the user enters N chars.
auto_search_limit
= -
1
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