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
1
Merge Requests
1
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
nanahira
ygopro
Commits
8e433afc
Commit
8e433afc
authored
Mar 04, 2018
by
edo9300
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'refs/remotes/Fluorohydride/master'
parents
e8c08077
15d26211
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
397 additions
and
76 deletions
+397
-76
gframe/client_card.h
gframe/client_card.h
+3
-3
gframe/client_field.cpp
gframe/client_field.cpp
+12
-12
gframe/config.h
gframe/config.h
+9
-3
gframe/data_manager.cpp
gframe/data_manager.cpp
+22
-29
gframe/duelclient.cpp
gframe/duelclient.cpp
+8
-2
gframe/game.cpp
gframe/game.cpp
+6
-2
gframe/game.h
gframe/game.h
+5
-0
gframe/gframe.cpp
gframe/gframe.cpp
+18
-0
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+78
-0
gframe/menu_handler.h
gframe/menu_handler.h
+3
-1
gframe/replay.cpp
gframe/replay.cpp
+30
-0
gframe/replay.h
gframe/replay.h
+2
-0
gframe/single_mode.cpp
gframe/single_mode.cpp
+1
-0
lflist.conf
lflist.conf
+200
-24
No files found.
gframe/client_card.h
View file @
8e433afc
...
...
@@ -39,9 +39,9 @@ struct CardDataC {
unsigned
int
category
;
};
struct
CardString
{
wchar_t
*
name
;
wchar_t
*
text
;
wchar_t
*
desc
[
16
];
std
::
wstring
name
;
std
::
wstring
text
;
std
::
wstring
desc
[
16
];
};
typedef
std
::
unordered_map
<
unsigned
int
,
CardDataC
>::
const_iterator
code_pointer
;
...
...
gframe/client_field.cpp
View file @
8e433afc
...
...
@@ -654,10 +654,10 @@ void ClientField::ReplaySwap() {
(
*
cit
)
->
is_moving
=
false
;
}
mainGame
->
dInfo
.
isFirst
=
!
mainGame
->
dInfo
.
isFirst
;
mainGame
->
dInfo
.
isReplaySwapped
=
!
mainGame
->
dInfo
.
isReplaySwapped
;
std
::
swap
(
mainGame
->
dInfo
.
lp
[
0
],
mainGame
->
dInfo
.
lp
[
1
]);
std
::
swap
(
mainGame
->
dInfo
.
strLP
[
0
],
mainGame
->
dInfo
.
strLP
[
1
]);
std
::
swap
(
mainGame
->
dInfo
.
hostname
[
0
],
mainGame
->
dInfo
.
clientname
[
0
]);
std
::
swap
(
mainGame
->
dInfo
.
hostname
[
1
],
mainGame
->
dInfo
.
clientname
[
1
]);
std
::
swap
(
mainGame
->
dInfo
.
hostname
,
mainGame
->
dInfo
.
clientname
);
for
(
auto
chit
=
chains
.
begin
();
chit
!=
chains
.
end
();
++
chit
)
{
chit
->
controler
=
1
-
chit
->
controler
;
GetChainLocation
(
chit
->
controler
,
chit
->
location
,
chit
->
sequence
,
&
chit
->
chain_pos
);
...
...
@@ -1413,7 +1413,7 @@ void ClientField::UpdateDeclarableCodeType(bool enter) {
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
declarable_type
))
{
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
);
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
()
);
ancard
.
push_back
(
trycode
);
return
;
}
...
...
@@ -1422,15 +1422,15 @@ void ClientField::UpdateDeclarableCodeType(bool enter) {
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
for
(
auto
cit
=
dataManager
.
_strings
.
begin
();
cit
!=
dataManager
.
_strings
.
end
();
++
cit
)
{
if
(
DeckBuilder
::
CardNameCompare
(
cit
->
second
.
name
,
pname
)
!=
0
)
{
if
(
DeckBuilder
::
CardNameCompare
(
cit
->
second
.
name
.
c_str
()
,
pname
)
!=
0
)
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
//verified by _strings
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
declarable_type
))
{
if
(
wcscmp
(
pname
,
cit
->
second
.
name
)
==
0
)
{
//exact match
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
,
-
1
);
if
(
pname
==
cit
->
second
.
name
)
{
//exact match
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
.
c_str
()
,
-
1
);
ancard
.
insert
(
ancard
.
begin
(),
cit
->
first
);
}
else
{
mainGame
->
lstANCard
->
addItem
(
cit
->
second
.
name
);
mainGame
->
lstANCard
->
addItem
(
cit
->
second
.
name
.
c_str
()
);
ancard
.
push_back
(
cit
->
first
);
}
}
...
...
@@ -1445,7 +1445,7 @@ void ClientField::UpdateDeclarableCodeOpcode(bool enter) {
if
(
dataManager
.
GetString
(
trycode
,
&
cstr
)
&&
dataManager
.
GetData
(
trycode
,
&
cd
)
&&
is_declarable
(
cd
,
opcode
))
{
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
);
mainGame
->
lstANCard
->
addItem
(
cstr
.
name
.
c_str
()
);
ancard
.
push_back
(
trycode
);
return
;
}
...
...
@@ -1454,15 +1454,15 @@ void ClientField::UpdateDeclarableCodeOpcode(bool enter) {
mainGame
->
lstANCard
->
clear
();
ancard
.
clear
();
for
(
auto
cit
=
dataManager
.
_strings
.
begin
();
cit
!=
dataManager
.
_strings
.
end
();
++
cit
)
{
if
(
DeckBuilder
::
CardNameCompare
(
cit
->
second
.
name
,
pname
))
{
if
(
DeckBuilder
::
CardNameCompare
(
cit
->
second
.
name
.
c_str
()
,
pname
))
{
auto
cp
=
dataManager
.
GetCodePointer
(
cit
->
first
);
//verified by _strings
//datas.alias can be double card names or alias
if
(
is_declarable
(
cp
->
second
,
opcode
))
{
if
(
wcscmp
(
pname
,
cit
->
second
.
name
)
==
0
)
{
//exact match
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
,
-
1
);
if
(
pname
==
cit
->
second
.
name
)
{
//exact match
mainGame
->
lstANCard
->
insertItem
(
0
,
cit
->
second
.
name
.
c_str
()
,
-
1
);
ancard
.
insert
(
ancard
.
begin
(),
cit
->
first
);
}
else
{
mainGame
->
lstANCard
->
addItem
(
cit
->
second
.
name
);
mainGame
->
lstANCard
->
addItem
(
cit
->
second
.
name
.
c_str
()
);
ancard
.
push_back
(
cit
->
first
);
}
}
...
...
gframe/config.h
View file @
8e433afc
...
...
@@ -12,9 +12,13 @@
#include <ws2tcpip.h>
#ifdef _MSC_VER
#define myswprintf _swprintf
#define myswprintf _swprintf
#define mywcsncasecmp _wcsnicmp
#define mystrncasecmp _strnicmp
#else
#define myswprintf swprintf
#define myswprintf swprintf
#define mywcsncasecmp wcsncasecmp
#define mystrncasecmp strncasecmp
#endif
#define socklen_t int
...
...
@@ -40,7 +44,9 @@
#define SOCKET_ERRNO() (errno)
#include <wchar.h>
#define myswprintf(buf, fmt, ...) swprintf(buf, 4096, fmt, ##__VA_ARGS__)
#define myswprintf(buf, fmt, ...) swprintf(buf, 4096, fmt, ##__VA_ARGS__)
#define mywcsncasecmp wcsncasecmp
#define mystrncasecmp strncasecmp
inline
int
_wtoi
(
const
wchar_t
*
s
)
{
wchar_t
*
endptr
;
return
(
int
)
wcstol
(
s
,
&
endptr
,
10
);
...
...
gframe/data_manager.cpp
View file @
8e433afc
...
...
@@ -17,8 +17,7 @@ bool DataManager::LoadDB(const char* file) {
return
Error
(
pDB
);
CardDataC
cd
;
CardString
cs
;
for
(
int
i
=
0
;
i
<
16
;
++
i
)
cs
.
desc
[
i
]
=
0
;
int
step
=
0
,
len
=
0
;
int
step
=
0
;
do
{
step
=
sqlite3_step
(
pStmt
);
if
(
step
==
SQLITE_BUSY
||
step
==
SQLITE_ERROR
||
step
==
SQLITE_MISUSE
)
...
...
@@ -49,27 +48,21 @@ bool DataManager::LoadDB(const char* file) {
cd
.
attribute
=
sqlite3_column_int
(
pStmt
,
9
);
cd
.
category
=
sqlite3_column_int
(
pStmt
,
10
);
_datas
.
insert
(
std
::
make_pair
(
cd
.
code
,
cd
));
len
=
BufferIO
::
DecodeUTF8
((
const
char
*
)
sqlite3_column_text
(
pStmt
,
12
),
strBuffer
);
if
(
len
)
{
cs
.
name
=
new
wchar_t
[
len
+
1
];
memcpy
(
cs
.
name
,
strBuffer
,
(
len
+
1
)
*
sizeof
(
wchar_t
));
}
else
cs
.
name
=
0
;
len
=
BufferIO
::
DecodeUTF8
((
const
char
*
)
sqlite3_column_text
(
pStmt
,
13
),
strBuffer
);
if
(
len
)
{
cs
.
text
=
new
wchar_t
[
len
+
1
];
memcpy
(
cs
.
text
,
strBuffer
,
(
len
+
1
)
*
sizeof
(
wchar_t
));
}
else
{
cs
.
text
=
new
wchar_t
[
1
];
cs
.
text
[
0
]
=
0
;
if
(
const
char
*
text
=
(
const
char
*
)
sqlite3_column_text
(
pStmt
,
12
))
{
BufferIO
::
DecodeUTF8
(
text
,
strBuffer
);
cs
.
name
=
strBuffer
;
}
for
(
int
i
=
14
;
i
<
30
;
++
i
)
{
len
=
BufferIO
::
DecodeUTF8
((
const
char
*
)
sqlite3_column_text
(
pStmt
,
i
),
strBuffer
);
if
(
len
)
{
cs
.
desc
[
i
-
14
]
=
new
wchar_t
[
len
+
1
];
memcpy
(
cs
.
desc
[
i
-
14
],
strBuffer
,
(
len
+
1
)
*
sizeof
(
wchar_t
));
}
else
cs
.
desc
[
i
-
14
]
=
0
;
if
(
const
char
*
text
=
(
const
char
*
)
sqlite3_column_text
(
pStmt
,
13
))
{
BufferIO
::
DecodeUTF8
(
text
,
strBuffer
);
cs
.
text
=
strBuffer
;
}
_strings
.
insert
(
std
::
make_pair
(
cd
.
code
,
cs
));
for
(
int
i
=
0
;
i
<
16
;
++
i
)
{
if
(
const
char
*
text
=
(
const
char
*
)
sqlite3_column_text
(
pStmt
,
i
+
14
))
{
BufferIO
::
DecodeUTF8
(
text
,
strBuffer
);
cs
.
desc
[
i
]
=
strBuffer
;
}
}
_strings
.
emplace
(
cd
.
code
,
cs
);
}
}
while
(
step
!=
SQLITE_DONE
);
sqlite3_finalize
(
pStmt
);
...
...
@@ -131,8 +124,8 @@ code_pointer DataManager::GetCodePointer(int code) {
bool
DataManager
::
GetString
(
int
code
,
CardString
*
pStr
)
{
auto
csit
=
_strings
.
find
(
code
);
if
(
csit
==
_strings
.
end
())
{
pStr
->
name
=
(
wchar_t
*
)
unknown_string
;
pStr
->
text
=
(
wchar_t
*
)
unknown_string
;
pStr
->
name
=
unknown_string
;
pStr
->
text
=
unknown_string
;
return
false
;
}
*
pStr
=
csit
->
second
;
...
...
@@ -142,16 +135,16 @@ const wchar_t* DataManager::GetName(int code) {
auto
csit
=
_strings
.
find
(
code
);
if
(
csit
==
_strings
.
end
())
return
unknown_string
;
if
(
csit
->
second
.
name
)
return
csit
->
second
.
name
;
if
(
!
csit
->
second
.
name
.
empty
()
)
return
csit
->
second
.
name
.
c_str
()
;
return
unknown_string
;
}
const
wchar_t
*
DataManager
::
GetText
(
int
code
)
{
auto
csit
=
_strings
.
find
(
code
);
if
(
csit
==
_strings
.
end
())
return
unknown_string
;
if
(
csit
->
second
.
text
)
return
csit
->
second
.
text
;
if
(
!
csit
->
second
.
text
.
empty
()
)
return
csit
->
second
.
text
.
c_str
()
;
return
unknown_string
;
}
const
wchar_t
*
DataManager
::
GetDesc
(
u64
strCode
)
{
...
...
@@ -162,8 +155,8 @@ const wchar_t* DataManager::GetDesc(u64 strCode) {
auto
csit
=
_strings
.
find
(
code
);
if
(
csit
==
_strings
.
end
())
return
unknown_string
;
if
(
csit
->
second
.
desc
[
offset
]
)
return
csit
->
second
.
desc
[
offset
];
if
(
!
csit
->
second
.
desc
[
offset
].
empty
()
)
return
csit
->
second
.
desc
[
offset
]
.
c_str
()
;
return
unknown_string
;
}
const
wchar_t
*
DataManager
::
GetSysString
(
int
code
)
{
...
...
gframe/duelclient.cpp
View file @
8e433afc
...
...
@@ -801,6 +801,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame
->
dInfo
.
time_player
=
2
;
mainGame
->
dInfo
.
current_player
[
0
]
=
0
;
mainGame
->
dInfo
.
current_player
[
1
]
=
0
;
mainGame
->
dInfo
.
isReplaySwapped
=
false
;
mainGame
->
is_building
=
false
;
mainGame
->
wCardImg
->
setVisible
(
true
);
mainGame
->
wInfos
->
setVisible
(
true
);
...
...
@@ -937,6 +938,7 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
wchar_t
timetext
[
80
];
mbstowcs
(
timetext
,
timebuf
,
size
);
mainGame
->
ebRSName
->
setText
(
timetext
);
mainGame
->
wReplaySave
->
setText
(
dataManager
.
GetSysString
(
1340
));
mainGame
->
PopupElement
(
mainGame
->
wReplaySave
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
replaySignal
.
Reset
();
...
...
@@ -1393,6 +1395,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame
->
dInfo
.
is_shuffling
=
false
;
if
(
!
mainGame
->
dInfo
.
isReplay
||
!
mainGame
->
dInfo
.
isReplaySkiping
)
mainGame
->
gMutex
.
Unlock
();
if
(
mainGame
->
dInfo
.
isReplaySwapped
)
{
std
::
swap
(
mainGame
->
dInfo
.
hostname
,
mainGame
->
dInfo
.
clientname
);
mainGame
->
dInfo
.
isReplaySwapped
=
false
;
mainGame
->
dField
.
ReplaySwap
();
}
mainGame
->
gMutex
.
Unlock
();
return
true
;
}
case
MSG_UPDATE_DATA
:
{
...
...
@@ -1443,7 +1451,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
pcard
->
chain_code
=
code
;
mainGame
->
dField
.
conti_cards
.
push_back
(
pcard
);
mainGame
->
dField
.
conti_act
=
true
;
pcard
->
cmdFlag
|=
COMMAND_OPERATION
;
}
else
{
pcard
->
cmdFlag
|=
COMMAND_ACTIVATE
;
if
(
pcard
->
location
==
LOCATION_GRAVE
)
...
...
@@ -1574,7 +1581,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
pcard
->
chain_code
=
code
;
mainGame
->
dField
.
conti_cards
.
push_back
(
pcard
);
mainGame
->
dField
.
conti_act
=
true
;
pcard
->
cmdFlag
|=
COMMAND_OPERATION
;
}
else
{
pcard
->
cmdFlag
|=
COMMAND_ACTIVATE
;
if
(
pcard
->
location
==
LOCATION_GRAVE
)
...
...
gframe/game.cpp
View file @
8e433afc
...
...
@@ -67,6 +67,8 @@ bool Game::Initialize() {
chain_when_avail
=
false
;
is_building
=
false
;
showingcard
=
0
;
menuHandler
.
prev_operation
=
0
;
menuHandler
.
prev_sel
=
-
1
;
memset
(
&
dInfo
,
0
,
sizeof
(
DuelInfo
));
memset
(
chatTiming
,
0
,
sizeof
(
chatTiming
));
deckManager
.
LoadLFList
();
...
...
@@ -608,8 +610,10 @@ bool Game::Initialize() {
wReplay
->
setVisible
(
false
);
lstReplayList
=
env
->
addListBox
(
rect
<
s32
>
(
10
,
30
,
350
,
400
),
wReplay
,
LISTBOX_REPLAY_LIST
,
true
);
lstReplayList
->
setItemHeight
(
18
);
btnLoadReplay
=
env
->
addButton
(
rect
<
s32
>
(
460
,
355
,
570
,
380
),
wReplay
,
BUTTON_LOAD_REPLAY
,
dataManager
.
GetSysString
(
1348
));
btnReplayCancel
=
env
->
addButton
(
rect
<
s32
>
(
460
,
385
,
570
,
410
),
wReplay
,
BUTTON_CANCEL_REPLAY
,
dataManager
.
GetSysString
(
1347
));
btnLoadReplay
=
env
->
addButton
(
rect
<
s32
>
(
470
,
355
,
570
,
380
),
wReplay
,
BUTTON_LOAD_REPLAY
,
dataManager
.
GetSysString
(
1348
));
btnDeleteReplay
=
env
->
addButton
(
rect
<
s32
>
(
360
,
355
,
460
,
380
),
wReplay
,
BUTTON_DELETE_REPLAY
,
dataManager
.
GetSysString
(
1361
));
btnRenameReplay
=
env
->
addButton
(
rect
<
s32
>
(
360
,
385
,
460
,
410
),
wReplay
,
BUTTON_RENAME_REPLAY
,
dataManager
.
GetSysString
(
1362
));
btnReplayCancel
=
env
->
addButton
(
rect
<
s32
>
(
470
,
385
,
570
,
410
),
wReplay
,
BUTTON_CANCEL_REPLAY
,
dataManager
.
GetSysString
(
1347
));
env
->
addStaticText
(
dataManager
.
GetSysString
(
1349
),
rect
<
s32
>
(
360
,
30
,
570
,
50
),
false
,
true
,
wReplay
);
stReplayInfo
=
env
->
addStaticText
(
L""
,
rect
<
s32
>
(
360
,
60
,
570
,
350
),
false
,
true
,
wReplay
);
chkYrp
=
env
->
addCheckBox
(
false
,
recti
(
360
,
250
,
560
,
270
),
wReplay
,
-
1
,
dataManager
.
GetSysString
(
1356
));
...
...
gframe/game.h
View file @
8e433afc
...
...
@@ -71,6 +71,7 @@ struct DuelInfo {
unsigned
char
time_player
;
unsigned
short
time_limit
;
unsigned
short
time_left
[
2
];
bool
isReplaySwapped
;
};
struct
FadingUnit
{
...
...
@@ -319,6 +320,8 @@ public:
irr
::
gui
::
IGUIStaticText
*
stReplayInfo
;
irr
::
gui
::
IGUICheckBox
*
chkYrp
;
irr
::
gui
::
IGUIButton
*
btnLoadReplay
;
irr
::
gui
::
IGUIButton
*
btnDeleteReplay
;
irr
::
gui
::
IGUIButton
*
btnRenameReplay
;
irr
::
gui
::
IGUIButton
*
btnReplayCancel
;
irr
::
gui
::
IGUIEditBox
*
ebRepStartTurn
;
//single play
...
...
@@ -554,6 +557,8 @@ extern Game* mainGame;
#define LISTBOX_REPLAY_LIST 130
#define BUTTON_LOAD_REPLAY 131
#define BUTTON_CANCEL_REPLAY 132
#define BUTTON_DELETE_REPLAY 133
#define BUTTON_RENAME_REPLAY 134
#define EDITBOX_CHAT 140
#define BUTTON_MSG_OK 200
#define BUTTON_YES 201
...
...
gframe/gframe.cpp
View file @
8e433afc
...
...
@@ -77,6 +77,7 @@ int main(int argc, char* argv[]) {
char
param
[
128
];
GetParameter
(
param
,
&
argv
[
i
][
2
]);
ygo
::
dataManager
.
LoadDB
(
param
);
continue
;
}
if
(
!
strcmp
(
argv
[
i
],
"-e"
))
{
// extra database
++
i
;
...
...
@@ -155,6 +156,23 @@ int main(int argc, char* argv[]) {
if
(
open_file
)
ClickButton
(
ygo
::
mainGame
->
btnLoadSinglePlay
);
break
;
}
else
if
(
argc
==
2
&&
strlen
(
argv
[
1
])
>=
4
)
{
char
*
pstrext
=
argv
[
1
]
+
strlen
(
argv
[
1
])
-
4
;
if
(
!
mystrncasecmp
(
pstrext
,
".ydk"
,
4
))
{
open_file
=
true
;
GetParameterW
(
open_file_name
,
&
argv
[
1
][
0
]);
exit_on_return
=
!
keep_on_return
;
ClickButton
(
ygo
::
mainGame
->
btnDeckEdit
);
break
;
}
if
(
!
mystrncasecmp
(
pstrext
,
".yrp"
,
4
))
{
open_file
=
true
;
GetParameterW
(
open_file_name
,
&
argv
[
1
][
0
]);
exit_on_return
=
!
keep_on_return
;
ClickButton
(
ygo
::
mainGame
->
btnReplayMode
);
ClickButton
(
ygo
::
mainGame
->
btnLoadReplay
);
break
;
}
}
}
ygo
::
mainGame
->
MainLoop
();
...
...
gframe/menu_handler.cpp
View file @
8e433afc
...
...
@@ -36,6 +36,14 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
break
;
if
(
mainGame
->
wCustomRules
->
isVisible
()
&&
id
!=
BUTTON_CUSTOM_RULE_OK
&&
(
id
<
CHECKBOX_OBSOLETE
||
id
>
CHECKBOX_EMZONE
))
break
;
if
(
mainGame
->
wQuery
->
isVisible
()
&&
id
!=
BUTTON_YES
&&
id
!=
BUTTON_NO
)
{
mainGame
->
wQuery
->
getParent
()
->
bringToFront
(
mainGame
->
wQuery
);
break
;
}
if
(
mainGame
->
wReplaySave
->
isVisible
()
&&
id
!=
BUTTON_REPLAY_SAVE
&&
id
!=
BUTTON_REPLAY_CANCEL
)
{
mainGame
->
wReplaySave
->
getParent
()
->
bringToFront
(
mainGame
->
wReplaySave
);
break
;
}
switch
(
event
.
GUIEvent
.
EventType
)
{
case
irr
:
:
gui
::
EGET_ELEMENT_HOVERED
:
{
// Set cursor to an I-Beam if hovering over an edit box
...
...
@@ -261,6 +269,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
HideElement
(
mainGame
->
wMainMenu
);
mainGame
->
ShowElement
(
mainGame
->
wReplay
);
mainGame
->
ebRepStartTurn
->
setText
(
L"1"
);
mainGame
->
stReplayInfo
->
setText
(
L""
);
mainGame
->
RefreshReplay
();
break
;
}
...
...
@@ -308,6 +317,33 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
ReplayMode
::
StartReplay
(
start_turn
);
break
;
}
case
BUTTON_DELETE_REPLAY
:
{
int
sel
=
mainGame
->
lstReplayList
->
getSelected
();
if
(
sel
==
-
1
)
break
;
mainGame
->
gMutex
.
Lock
();
wchar_t
textBuffer
[
256
];
myswprintf
(
textBuffer
,
L"%ls
\n
%ls"
,
mainGame
->
lstReplayList
->
getListItem
(
sel
),
dataManager
.
GetSysString
(
1363
));
mainGame
->
SetStaticText
(
mainGame
->
stQMessage
,
310
,
mainGame
->
textFont
,
(
wchar_t
*
)
textBuffer
);
mainGame
->
PopupElement
(
mainGame
->
wQuery
);
mainGame
->
gMutex
.
Unlock
();
prev_operation
=
id
;
prev_sel
=
sel
;
break
;
}
case
BUTTON_RENAME_REPLAY
:
{
int
sel
=
mainGame
->
lstReplayList
->
getSelected
();
if
(
sel
==
-
1
)
break
;
mainGame
->
gMutex
.
Lock
();
mainGame
->
wReplaySave
->
setText
(
dataManager
.
GetSysString
(
1364
));
mainGame
->
ebRSName
->
setText
(
mainGame
->
lstReplayList
->
getListItem
(
sel
));
mainGame
->
PopupElement
(
mainGame
->
wReplaySave
);
mainGame
->
gMutex
.
Unlock
();
prev_operation
=
id
;
prev_sel
=
sel
;
break
;
}
case
BUTTON_CANCEL_REPLAY
:
{
mainGame
->
HideElement
(
mainGame
->
wReplay
);
mainGame
->
ShowElement
(
mainGame
->
wMainMenu
);
...
...
@@ -357,6 +393,48 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame
->
deckBuilder
.
Initialize
();
break
;
}
case
BUTTON_YES
:
{
mainGame
->
HideElement
(
mainGame
->
wQuery
);
if
(
prev_operation
==
BUTTON_DELETE_REPLAY
)
{
if
(
Replay
::
DeleteReplay
(
mainGame
->
lstReplayList
->
getListItem
(
prev_sel
)))
{
mainGame
->
stReplayInfo
->
setText
(
L""
);
mainGame
->
lstReplayList
->
removeItem
(
prev_sel
);
}
}
prev_operation
=
0
;
prev_sel
=
-
1
;
break
;
}
case
BUTTON_NO
:
{
mainGame
->
HideElement
(
mainGame
->
wQuery
);
prev_operation
=
0
;
prev_sel
=
-
1
;
break
;
}
case
BUTTON_REPLAY_SAVE
:
{
mainGame
->
HideElement
(
mainGame
->
wReplaySave
);
if
(
prev_operation
==
BUTTON_RENAME_REPLAY
)
{
wchar_t
newname
[
256
];
BufferIO
::
CopyWStr
(
mainGame
->
ebRSName
->
getText
(),
newname
,
256
);
if
(
mywcsncasecmp
(
newname
+
wcslen
(
newname
)
-
4
,
L".yrp"
,
4
))
{
myswprintf
(
newname
,
L"%ls.yrp"
,
mainGame
->
ebRSName
->
getText
());
}
if
(
Replay
::
RenameReplay
(
mainGame
->
lstReplayList
->
getListItem
(
prev_sel
),
newname
))
{
mainGame
->
lstReplayList
->
setItem
(
prev_sel
,
newname
,
-
1
);
}
else
{
mainGame
->
env
->
addMessageBox
(
L""
,
dataManager
.
GetSysString
(
1365
));
}
}
prev_operation
=
0
;
prev_sel
=
-
1
;
break
;
}
case
BUTTON_REPLAY_CANCEL
:
{
mainGame
->
HideElement
(
mainGame
->
wReplaySave
);
prev_operation
=
0
;
prev_sel
=
-
1
;
break
;
}
}
break
;
}
...
...
gframe/menu_handler.h
View file @
8e433afc
...
...
@@ -8,7 +8,9 @@ namespace ygo {
class
MenuHandler
:
public
irr
::
IEventReceiver
{
public:
virtual
bool
OnEvent
(
const
irr
::
SEvent
&
event
);
s32
prev_operation
;
int
prev_sel
;
};
}
...
...
gframe/replay.cpp
View file @
8e433afc
...
...
@@ -248,6 +248,36 @@ bool Replay::ReadStream(std::vector<ReplayPacket>* stream) {
}
return
!!
stream
->
size
();
}
bool
Replay
::
DeleteReplay
(
const
wchar_t
*
name
)
{
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./replay/%ls"
,
name
);
#ifdef WIN32
BOOL
result
=
DeleteFileW
(
fname
);
return
!!
result
;
#else
char
filefn
[
256
];
BufferIO
::
EncodeUTF8
(
fname
,
filefn
);
int
result
=
unlink
(
filefn
);
return
result
==
0
;
#endif
}
bool
Replay
::
RenameReplay
(
const
wchar_t
*
oldname
,
const
wchar_t
*
newname
)
{
wchar_t
oldfname
[
256
];
wchar_t
newfname
[
256
];
myswprintf
(
oldfname
,
L"./replay/%ls"
,
oldname
);
myswprintf
(
newfname
,
L"./replay/%ls"
,
newname
);
#ifdef WIN32
BOOL
result
=
MoveFileW
(
oldfname
,
newfname
);
return
!!
result
;
#else
char
oldfilefn
[
256
];
char
newfilefn
[
256
];
BufferIO
::
EncodeUTF8
(
oldfname
,
oldfilefn
);
BufferIO
::
EncodeUTF8
(
newfname
,
newfilefn
);
int
result
=
rename
(
oldfilefn
,
newfilefn
);
return
result
==
0
;
#endif
}
bool
Replay
::
ReadNextResponse
(
unsigned
char
resp
[
64
])
{
if
(
pdata
-
replay_data
>=
(
int
)
replay_size
)
return
false
;
...
...
gframe/replay.h
View file @
8e433afc
...
...
@@ -54,6 +54,8 @@ public:
static
bool
CheckReplay
(
const
wchar_t
*
name
);
bool
ReadNextPacket
(
ReplayPacket
*
packet
);
bool
ReadStream
(
std
::
vector
<
ReplayPacket
>*
stream
);
static
bool
DeleteReplay
(
const
wchar_t
*
name
);
static
bool
RenameReplay
(
const
wchar_t
*
oldname
,
const
wchar_t
*
newname
);
bool
ReadNextResponse
(
unsigned
char
resp
[
64
]);
void
ReadName
(
wchar_t
*
data
);
void
ReadData
(
void
*
data
,
unsigned
int
length
);
...
...
gframe/single_mode.cpp
View file @
8e433afc
...
...
@@ -162,6 +162,7 @@ int SingleMode::SinglePlayThread(void* param) {
wchar_t
timetext
[
80
];
mbstowcs
(
timetext
,
timebuf
,
size
);
mainGame
->
ebRSName
->
setText
(
timetext
);
mainGame
->
wReplaySave
->
setText
(
dataManager
.
GetSysString
(
1340
));
mainGame
->
PopupElement
(
mainGame
->
wReplaySave
);
mainGame
->
gMutex
.
Unlock
();
mainGame
->
replaySignal
.
Reset
();
...
...
lflist.conf
View file @
8e433afc
#[2018.1][201
7.11 TCG][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9
][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
#[2018.1][201
8.2 TCG][2017.10][2017.7][2017.4][2017.1][2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][2017.11 TCG
][2017.9 TCG][2017.6 TCG][2017.3 TCG][2016.8 TCG][2016.4 TCG][2015.11 TCG][2015.7 TCG][2015.4 TCG][2015.1 TCG][2014.10 TCG][2014.7 TCG][2014.4 TCG][2014.1.1 TCG][2013.10.11 TCG][2013.3.1][2012.9.1][2012.3.1][2011.9.1]
!
2018
.
1
#forbidden
20663556
0
--イレカエル
...
...
@@ -160,16 +160,15 @@
84749824
2
--神の警告
40605147
2
--神の通告
!
201
7
.
11
TCG
!
201
8
.
2
TCG
#forbidden
27279764
0
--アポクリフォート・キラー
20663556
0
--イレカエル
44910027
0
--ヴィクトリー・ドラゴン
20366274
0
--エルシャドール・ネフィリム
40044918
0
--
E
·
HERO
エアーマン
53804307
0
--焔征竜-ブラスター
68819554
0
--
Em
ダメージ・ジャグラー
07563579
0
--
Em
ヒグルミ
40318957
0
--
EM
ドクロバット・ジョーカー
17330916
0
--
EM
モンキーボード
82301904
0
--混沌帝龍 -終焉の使者-
79106360
0
--カオスポッド
...
...
@@ -177,6 +176,7 @@
08903700
0
--儀式魔人リリーサー
17412721
0
--旧神ノーデン
65536818
0
--源竜星-ボウテンコウ
49684352
0
--虹彩の魔術師
34124316
0
--サイバーポッド
88071625
0
--
The
tyrant
NEPTUNE
48905153
0
--十二獣ドランシア
...
...
@@ -185,7 +185,9 @@
30539496
0
--真竜皇リトスアジム
D
58984738
0
--真竜拳士ダイナマイト
K
81122844
0
--発条空母ゼンマイティ
23434538
0
--増殖する
G
00581014
0
--ダイガスタ・エメラル
15341821
0
--ダンディライオン
61468779
0
--地霊神グランソイル
56570271
0
--
D
-
HERO
ディスクガイ
69015963
0
--デビル·フランケン
...
...
@@ -196,6 +198,7 @@
26400609
0
--瀑征竜-タイダル
78706415
0
--ファイバーポッド
93369354
0
--フィッシュボーグ-ガンナー
09929398
0
--
BF
-朧影のゴウフウ
31178212
0
--マジェスペクター・ユニコーン
34206604
0
--魔導サイエンティスト
33508719
0
--メタモルポット
...
...
@@ -204,6 +207,7 @@
34086406
0
--ラヴァルバル·チェイン
89399912
0
--嵐征竜-テンペスト
46772449
0
--励輝士 ヴェルズビュート
57421866
0
--レベル・スティーラー
41482598
0
--悪夢の蜃気楼
44763025
0
--いたずら好きな双子悪魔
19613556
0
--大嵐
...
...
@@ -215,7 +219,6 @@
55144522
0
--強欲な壺
04031928
0
--心変わり
23557835
0
--次元融合
83764718
0
--死者蘇生
57953380
0
--生還の宝札
60682203
0
--大寒波
67616300
0
--チキンレース
...
...
@@ -234,7 +237,6 @@
85602018
0
--遺言状
27174286
0
--異次元からの帰還
93016201
0
--王宮の弾圧
41420027
0
--神の宣告
05851097
0
--虚無空間
57585212
0
--自爆スイッチ
03280747
0
--第六感
...
...
@@ -243,7 +245,7 @@
80604091
0
--血の代償
28566710
0
--ラストバトル!
#limit
85103922
1
--アーティファクト-モラルタ
27279764
1
--アポクリフォート・キラー
64034255
1
--
A
·ジェネクス·バードマン
45222299
1
--イビリチュア·ガストクラーケ
11877465
1
--イビリチュア·マインドオーガス
...
...
@@ -251,6 +253,7 @@
68184115
1
--甲虫装機 ダンセル
69207766
1
--甲虫装機 ホーネット
27552504
1
--永遠の淑女 ベアトリーチェ
68819554
1
--
Em
ダメージ・ジャグラー
65518099
1
--クリフォート・ツール
38572779
1
--幻創のミセラサウルス
55885348
1
--
Kozmo
-ダークシミター
...
...
@@ -261,10 +264,9 @@
78080961
1
--
SPYRAL
-ジーニアス
81275020
1
--
SR
ベイゴマックス
48063985
1
--聖霊獣騎 カンナホーク
23434538
1
--増殖する
G
65192027
1
--ダーク·アームド·ドラゴン
15341821
1
--ダンディライオン
96570609
1
--天帝アイテール
75732622
1
--トーチ・ゴーレム
16226786
1
--深淵の暗殺者
80344569
1
--
N
·グラン·モール
18239909
1
--爆竜剣士イグニスター
P
...
...
@@ -272,12 +274,12 @@
20758643
1
--彼岸の悪鬼 グラバースニッチ
70583986
1
--氷結界の虎王ドゥローレン
52687916
1
--氷結界の龍 トリシューラ
05043010
1
--ファイアウォール・ドラゴン
33396948
1
--封印されしエクゾディア
07902349
1
--封印されし者の左腕
70903634
1
--封印されし者の右腕
44519536
1
--封印されし者の左足
08124921
1
--封印されし者の右足
09929398
1
--
BF
-朧影のゴウフウ
26674724
1
--ブリューナクの影霊衣
10802915
1
--魔界発現世行きデスガイド
89463537
1
--ユニコールの影霊衣
...
...
@@ -288,17 +290,17 @@
81439173
1
--おろかな埋葬
67723438
1
--緊急テレポート
45305419
1
--継承の印
17639150
1
--機殻の生贄
99330325
1
--妨げられた壊獣の眠り
12580477
1
--サンダー·ボルト
95308449
1
--終焉のカウントダウン
74845897
1
--真炎の爆発
35125879
1
--真竜皇の復活
37520316
1
--精神操作
54631665
1
--
SPYRAL
RESORT
32807846
1
--増援
54447022
1
--ソウル・チャージ
14087893
1
--月の書
81674782
1
--次元の裂け目
83764718
1
--死者蘇生
79844764
1
--帝王の烈旋
11110587
1
--隣の芝刈り
70368879
1
--成金ゴブリン
...
...
@@ -306,7 +308,6 @@
53129443
1
--ブラック·ホール
73468603
1
--盆回し
15854426
1
--霞の谷の神風
77565204
1
--未来融合-フューチャー·フュージョン
58577036
1
--名推理
43040603
1
--モンスターゲート
23171610
1
--リミッター解除
...
...
@@ -316,34 +317,24 @@
09059700
1
--インフェルニティ・バリア
61740673
1
--王宮の勅命
84749824
1
--神の警告
41420027
1
--神の宣告
94192409
1
--強制脱出装置
53582587
1
--激流葬
82732705
1
--スキルドレイン
73599290
1
--ソウルドレイン
29401950
1
--奈落の落とし穴
83555666
1
--破壊輪
17078030
1
--光の護封壁
30241314
1
--マクロコスモス
32723153
1
--マジカル·エクスプロージョン
54974237
1
--闇のデッキ破壊ウイルス
#semi limit
85087012
2
--カードガンナー
74311226
2
--海皇の竜騎隊
72989439
2
--カオス·ソルジャー -開闢の使者-
59297550
2
--ゼンマイマジシャン
90953320
2
--
TG
ハイパー·ライブラリアン
28297833
2
--ネクロフェイス
50321796
2
--氷結界の龍 ブリューナク
41386308
2
--マスマティシャン
71564252
2
--ライオウ
92746535
2
--竜剣士ラスター
P
48976825
2
--異次元からの埋葬
06417578
2
--神の写し身との接触
96729612
2
--儀式の準備
87910978
2
--洗脳-ブレインコントロール
91623717
2
--連鎖爆撃
29843091
2
--おジャマトリオ
36468556
2
--停戦協定
!
2017
.
10
#forbidden
...
...
@@ -2771,6 +2762,191 @@
53582587
2
--激流葬
29401950
2
--奈落の落とし穴
!
2017
.
11
TCG
#forbidden
27279764
0
--アポクリフォート・キラー
20663556
0
--イレカエル
44910027
0
--ヴィクトリー・ドラゴン
20366274
0
--エルシャドール・ネフィリム
40044918
0
--
E
·
HERO
エアーマン
53804307
0
--焔征竜-ブラスター
68819554
0
--
Em
ダメージ・ジャグラー
07563579
0
--
Em
ヒグルミ
17330916
0
--
EM
モンキーボード
82301904
0
--混沌帝龍 -終焉の使者-
79106360
0
--カオスポッド
90411554
0
--巌征竜-レドックス
08903700
0
--儀式魔人リリーサー
17412721
0
--旧神ノーデン
65536818
0
--源竜星-ボウテンコウ
34124316
0
--サイバーポッド
88071625
0
--
The
tyrant
NEPTUNE
48905153
0
--十二獣ドランシア
85115440
0
--十二獣ブルホーン
21593977
0
--処刑人-マキュラ
30539496
0
--真竜皇リトスアジム
D
58984738
0
--真竜拳士ダイナマイト
K
81122844
0
--発条空母ゼンマイティ
00581014
0
--ダイガスタ・エメラル
61468779
0
--地霊神グランソイル
56570271
0
--
D
-
HERO
ディスクガイ
69015963
0
--デビル·フランケン
18326736
0
--星守の騎士 プトレマイオス
33184167
0
--同族感染ウィルス
90307777
0
--影霊衣の術士 シュリット
54719828
0
--
No
.
16
色の支配者ショック·ルーラー
26400609
0
--瀑征竜-タイダル
78706415
0
--ファイバーポッド
93369354
0
--フィッシュボーグ-ガンナー
31178212
0
--マジェスペクター・ユニコーン
34206604
0
--魔導サイエンティスト
33508719
0
--メタモルポット
96782886
0
--メンタルマスター
03078576
0
--八汰烏
34086406
0
--ラヴァルバル·チェイン
89399912
0
--嵐征竜-テンペスト
46772449
0
--励輝士 ヴェルズビュート
41482598
0
--悪夢の蜃気楼
44763025
0
--いたずら好きな双子悪魔
19613556
0
--大嵐
17375316
0
--押収
35059553
0
--カイザーコロシアム
74191942
0
--苦渋の選択
42829885
0
--強引な番兵
45986603
0
--強奪
55144522
0
--強欲な壺
04031928
0
--心変わり
23557835
0
--次元融合
83764718
0
--死者蘇生
57953380
0
--生還の宝札
60682203
0
--大寒波
67616300
0
--チキンレース
48130397
0
--超融合
67169062
0
--貪欲な壺
27770341
0
--超再生能力
69243953
0
--蝶の短剣-エルマ
72892473
0
--手札抹殺
79571449
0
--天使の施し
42703248
0
--ハリケーン
18144506
0
--ハーピィの羽根帚
70828912
0
--早すぎた埋葬
34906152
0
--マスドライバー
46448938
0
--魔導書の神判
46411259
0
--突然変異
85602018
0
--遺言状
27174286
0
--異次元からの帰還
93016201
0
--王宮の弾圧
41420027
0
--神の宣告
05851097
0
--虚無空間
57585212
0
--自爆スイッチ
03280747
0
--第六感
64697231
0
--ダスト·シュート
35316708
0
--刻の封印
80604091
0
--血の代償
28566710
0
--ラストバトル!
#limit
85103922
1
--アーティファクト-モラルタ
64034255
1
--
A
·ジェネクス·バードマン
45222299
1
--イビリチュア·ガストクラーケ
11877465
1
--イビリチュア·マインドオーガス
99177923
1
--インフェルニティ·デーモン
68184115
1
--甲虫装機 ダンセル
69207766
1
--甲虫装機 ホーネット
27552504
1
--永遠の淑女 ベアトリーチェ
65518099
1
--クリフォート・ツール
38572779
1
--幻創のミセラサウルス
55885348
1
--
Kozmo
-ダークシミター
78872731
1
--十二獣モルモラット
78868119
1
--深海のディーヴァ
22499034
1
--真竜戦士イグニス
H
04474060
1
--
SPYRAL
GEAR
-ドローン
78080961
1
--
SPYRAL
-ジーニアス
81275020
1
--
SR
ベイゴマックス
48063985
1
--聖霊獣騎 カンナホーク
23434538
1
--増殖する
G
65192027
1
--ダーク·アームド·ドラゴン
15341821
1
--ダンディライオン
96570609
1
--天帝アイテール
16226786
1
--深淵の暗殺者
80344569
1
--
N
·グラン·モール
18239909
1
--爆竜剣士イグニスター
P
57143342
1
--彼岸の悪鬼 ガトルホッグ
20758643
1
--彼岸の悪鬼 グラバースニッチ
70583986
1
--氷結界の虎王ドゥローレン
52687916
1
--氷結界の龍 トリシューラ
33396948
1
--封印されしエクゾディア
07902349
1
--封印されし者の左腕
70903634
1
--封印されし者の右腕
44519536
1
--封印されし者の左足
08124921
1
--封印されし者の右足
09929398
1
--
BF
-朧影のゴウフウ
26674724
1
--ブリューナクの影霊衣
10802915
1
--魔界発現世行きデスガイド
89463537
1
--ユニコールの影霊衣
88264978
1
--レッドアイズ·ダークネスメタルドラゴン
33782437
1
--一時休戦
66957584
1
--インフェルニティガン
72405967
1
--王家の生け贄
81439173
1
--おろかな埋葬
67723438
1
--緊急テレポート
45305419
1
--継承の印
17639150
1
--機殻の生贄
99330325
1
--妨げられた壊獣の眠り
12580477
1
--サンダー·ボルト
95308449
1
--終焉のカウントダウン
74845897
1
--真炎の爆発
35125879
1
--真竜皇の復活
37520316
1
--精神操作
32807846
1
--増援
54447022
1
--ソウル・チャージ
14087893
1
--月の書
81674782
1
--次元の裂け目
79844764
1
--帝王の烈旋
11110587
1
--隣の芝刈り
70368879
1
--成金ゴブリン
22842126
1
--汎神の帝王
53129443
1
--ブラック·ホール
73468603
1
--盆回し
15854426
1
--霞の谷の神風
77565204
1
--未来融合-フューチャー·フュージョン
58577036
1
--名推理
43040603
1
--モンスターゲート
23171610
1
--リミッター解除
14733538
1
--竜呼相打つ
27970830
1
--六武の門
02295440
1
--ワン·フォー·ワン
09059700
1
--インフェルニティ・バリア
61740673
1
--王宮の勅命
84749824
1
--神の警告
94192409
1
--強制脱出装置
53582587
1
--激流葬
82732705
1
--スキルドレイン
73599290
1
--ソウルドレイン
29401950
1
--奈落の落とし穴
83555666
1
--破壊輪
17078030
1
--光の護封壁
30241314
1
--マクロコスモス
32723153
1
--マジカル·エクスプロージョン
54974237
1
--闇のデッキ破壊ウイルス
#semi limit
85087012
2
--カードガンナー
74311226
2
--海皇の竜騎隊
72989439
2
--カオス·ソルジャー -開闢の使者-
59297550
2
--ゼンマイマジシャン
90953320
2
--
TG
ハイパー·ライブラリアン
28297833
2
--ネクロフェイス
50321796
2
--氷結界の龍 ブリューナク
41386308
2
--マスマティシャン
71564252
2
--ライオウ
92746535
2
--竜剣士ラスター
P
48976825
2
--異次元からの埋葬
06417578
2
--神の写し身との接触
96729612
2
--儀式の準備
87910978
2
--洗脳-ブレインコントロール
91623717
2
--連鎖爆撃
29843091
2
--おジャマトリオ
36468556
2
--停戦協定
!
2017
.
9
TCG
#forbidden
27279764
0
--アポクリフォート・キラー
...
...
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