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
Commits
0af9cbef
Commit
0af9cbef
authored
Sep 10, 2024
by
wind2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into server-develop
parents
8748b322
a8ccdbb1
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
654 additions
and
219 deletions
+654
-219
gframe/bufferio.h
gframe/bufferio.h
+125
-48
gframe/config.h
gframe/config.h
+14
-0
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+3
-9
gframe/duelclient.cpp
gframe/duelclient.cpp
+1
-1
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+3
-8
gframe/netserver.cpp
gframe/netserver.cpp
+1
-1
gframe/replay.cpp
gframe/replay.cpp
+63
-120
gframe/replay.h
gframe/replay.h
+7
-4
lflist.conf
lflist.conf
+432
-26
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+3
-0
No files found.
gframe/bufferio.h
View file @
0af9cbef
...
...
@@ -6,30 +6,30 @@
class
BufferIO
{
public:
inline
static
int
ReadInt32
(
unsigned
char
*&
p
)
{
static
int
ReadInt32
(
unsigned
char
*&
p
)
{
return
buffer_read
<
int32_t
>
(
p
);
}
inline
static
short
ReadInt16
(
unsigned
char
*&
p
)
{
static
short
ReadInt16
(
unsigned
char
*&
p
)
{
return
buffer_read
<
int16_t
>
(
p
);
}
inline
static
char
ReadInt8
(
unsigned
char
*&
p
)
{
static
char
ReadInt8
(
unsigned
char
*&
p
)
{
return
buffer_read
<
char
>
(
p
);
}
inline
static
unsigned
char
ReadUInt8
(
unsigned
char
*&
p
)
{
static
unsigned
char
ReadUInt8
(
unsigned
char
*&
p
)
{
return
buffer_read
<
unsigned
char
>
(
p
);
}
inline
static
void
WriteInt32
(
unsigned
char
*&
p
,
int
val
)
{
static
void
WriteInt32
(
unsigned
char
*&
p
,
int
val
)
{
buffer_write
<
int32_t
>
(
p
,
val
);
}
inline
static
void
WriteInt16
(
unsigned
char
*&
p
,
short
val
)
{
static
void
WriteInt16
(
unsigned
char
*&
p
,
short
val
)
{
buffer_write
<
int16_t
>
(
p
,
val
);
}
inline
static
void
WriteInt8
(
unsigned
char
*&
p
,
char
val
)
{
static
void
WriteInt8
(
unsigned
char
*&
p
,
char
val
)
{
buffer_write
<
char
>
(
p
,
val
);
}
// return: string length
template
<
typename
T1
,
typename
T2
>
inline
static
int
CopyWStr
(
const
T1
*
src
,
T2
*
pstr
,
int
bufsize
)
{
static
int
CopyWStr
(
const
T1
*
src
,
T2
*
pstr
,
int
bufsize
)
{
int
l
=
0
;
while
(
src
[
l
]
&&
l
<
bufsize
-
1
)
{
pstr
[
l
]
=
(
T2
)
src
[
l
];
...
...
@@ -39,7 +39,7 @@ public:
return
l
;
}
template
<
typename
T1
,
typename
T2
>
inline
static
int
CopyWStrRef
(
const
T1
*
src
,
T2
*&
pstr
,
int
bufsize
)
{
static
int
CopyWStrRef
(
const
T1
*
src
,
T2
*&
pstr
,
int
bufsize
)
{
int
l
=
0
;
while
(
src
[
l
]
&&
l
<
bufsize
-
1
)
{
pstr
[
l
]
=
(
T2
)
src
[
l
];
...
...
@@ -49,22 +49,117 @@ public:
*
pstr
=
0
;
return
l
;
}
template
<
typename
T
>
static
bool
CheckUTF8Byte
(
const
T
*
str
,
int
len
)
{
for
(
int
i
=
1
;
i
<
len
;
++
i
)
{
if
((
str
[
i
]
&
0xc0U
)
!=
0x80U
)
return
false
;
}
return
true
;
}
static
unsigned
int
ConvertUTF8
(
const
char
*&
p
)
{
unsigned
int
cur
=
0
;
if
((
p
[
0
]
&
0x80U
)
==
0
)
{
cur
=
p
[
0
]
&
0xffU
;
p
++
;
}
else
if
((
p
[
0
]
&
0xe0U
)
==
0xc0U
)
{
if
(
!
CheckUTF8Byte
(
p
,
2
))
{
p
++
;
return
UINT32_MAX
;
}
cur
=
((
p
[
0
]
&
0x1fU
)
<<
6
)
|
(
p
[
1
]
&
0x3fU
);
p
+=
2
;
if
(
cur
<
0x80U
)
return
UINT32_MAX
;
}
else
if
((
p
[
0
]
&
0xf0U
)
==
0xe0U
)
{
if
(
!
CheckUTF8Byte
(
p
,
3
))
{
p
++
;
return
UINT32_MAX
;
}
cur
=
((
p
[
0
]
&
0xfU
)
<<
12
)
|
((
p
[
1
]
&
0x3fU
)
<<
6
)
|
(
p
[
2
]
&
0x3fU
);
p
+=
3
;
if
(
cur
<
0x800U
)
return
UINT32_MAX
;
}
else
if
((
p
[
0
]
&
0xf8U
)
==
0xf0U
)
{
if
(
!
CheckUTF8Byte
(
p
,
4
))
{
p
++
;
return
UINT32_MAX
;
}
cur
=
((
p
[
0
]
&
0x7U
)
<<
18
)
|
((
p
[
1
]
&
0x3fU
)
<<
12
)
|
((
p
[
2
]
&
0x3fU
)
<<
6
)
|
(
p
[
3
]
&
0x3fU
);
p
+=
4
;
if
(
cur
<
0x10000U
)
return
UINT32_MAX
;
}
else
{
p
++
;
return
UINT32_MAX
;
}
return
cur
;
}
static
bool
IsHighSurrogate
(
unsigned
int
c
)
{
return
(
c
>=
0xd800U
&&
c
<=
0xdbffU
);
}
static
bool
IsLowSurrogate
(
unsigned
int
c
)
{
return
(
c
>=
0xdc00U
&&
c
<=
0xdfffU
);
}
static
bool
IsUnicodeChar
(
unsigned
int
c
)
{
if
(
IsHighSurrogate
(
c
))
return
false
;
if
(
IsLowSurrogate
(
c
))
return
false
;
if
(
c
>
0x10ffffU
)
return
false
;
return
true
;
}
// UTF-16/UTF-32 to UTF-8
// return: string length
static
int
EncodeUTF8String
(
const
wchar_t
*
wsrc
,
char
*
str
,
int
size
)
{
char
*
pstr
=
str
;
while
(
*
wsrc
!=
0
)
{
unsigned
cur
=
*
wsrc
;
auto
pw
=
wsrc
;
auto
pstr
=
str
;
while
(
*
pw
!=
0
)
{
unsigned
cur
=
0
;
int
codepoint_size
=
0
;
if
(
sizeof
(
wchar_t
)
==
2
)
{
if
(
IsHighSurrogate
(
pw
[
0
]))
{
if
(
pw
[
1
]
==
0
)
break
;
if
(
IsLowSurrogate
(
pw
[
1
]))
{
cur
=
((
pw
[
0
]
&
0x3ffU
)
<<
10
)
|
(
pw
[
1
]
&
0x3ffU
);
cur
+=
0x10000
;
pw
+=
2
;
}
else
{
pw
++
;
continue
;
}
}
else
if
(
IsLowSurrogate
(
pw
[
0
]))
{
pw
++
;
continue
;
}
else
{
cur
=
*
pw
;
pw
++
;
}
}
else
{
cur
=
*
pw
;
pw
++
;
}
if
(
!
IsUnicodeChar
(
cur
))
continue
;
if
(
cur
<
0x80U
)
codepoint_size
=
1
;
else
if
(
cur
<
0x800U
)
codepoint_size
=
2
;
else
if
(
cur
<
0x10000U
&&
(
cur
<
0xd800U
||
cur
>
0xdfffU
)
)
else
if
(
cur
<
0x10000U
)
codepoint_size
=
3
;
else
codepoint_size
=
4
;
if
(
pstr
-
str
+
codepoint_size
>
size
-
1
)
if
(
(
int
)(
pstr
-
str
)
+
codepoint_size
>
size
-
1
)
break
;
switch
(
codepoint_size
)
{
case
1
:
...
...
@@ -80,13 +175,6 @@ public:
pstr
[
2
]
=
(
cur
&
0x3f
)
|
0x80
;
break
;
case
4
:
if
(
sizeof
(
wchar_t
)
==
2
)
{
cur
=
0
;
cur
|=
(
*
wsrc
&
0x3ffU
)
<<
10
;
++
wsrc
;
cur
|=
*
wsrc
&
0x3ffU
;
cur
+=
0x10000
;
}
pstr
[
0
]
=
((
cur
>>
18
)
&
0x7
)
|
0xf0
;
pstr
[
1
]
=
((
cur
>>
12
)
&
0x3f
)
|
0x80
;
pstr
[
2
]
=
((
cur
>>
6
)
&
0x3f
)
|
0x80
;
...
...
@@ -96,10 +184,9 @@ public:
break
;
}
pstr
+=
codepoint_size
;
wsrc
++
;
}
*
pstr
=
0
;
return
pstr
-
str
;
return
(
int
)(
pstr
-
str
)
;
}
// UTF-8 to UTF-16/UTF-32
// return: string length
...
...
@@ -107,9 +194,11 @@ public:
const
char
*
p
=
src
;
wchar_t
*
wp
=
wstr
;
while
(
*
p
!=
0
)
{
const
unsigned
cur
=
*
p
&
0xffU
;
unsigned
int
cur
=
ConvertUTF8
(
p
)
;
int
codepoint_size
=
0
;
if
((
cur
&
0xf8
)
==
0xf0
)
{
if
(
!
IsUnicodeChar
(
cur
))
continue
;
if
(
cur
>=
0x10000
)
{
if
(
sizeof
(
wchar_t
)
==
2
)
codepoint_size
=
2
;
else
...
...
@@ -117,30 +206,18 @@ public:
}
else
codepoint_size
=
1
;
if
(
wp
-
wstr
+
codepoint_size
>
size
-
1
)
if
(
(
int
)(
wp
-
wstr
)
+
codepoint_size
>
size
-
1
)
break
;
if
((
cur
&
0x80
)
==
0
)
{
*
wp
=
*
p
;
p
++
;
}
else
if
((
cur
&
0xe0
)
==
0xc0
)
{
*
wp
=
((
p
[
0
]
&
0x1fU
)
<<
6
)
|
(
p
[
1
]
&
0x3fU
);
p
+=
2
;
}
else
if
((
cur
&
0xf0
)
==
0xe0
)
{
*
wp
=
((
p
[
0
]
&
0xfU
)
<<
12
)
|
((
p
[
1
]
&
0x3fU
)
<<
6
)
|
(
p
[
2
]
&
0x3fU
);
p
+=
3
;
}
else
if
((
cur
&
0xf8
)
==
0xf0
)
{
if
(
sizeof
(
wchar_t
)
==
2
)
{
unsigned
unicode
=
((
p
[
0
]
&
0x7U
)
<<
18
)
|
((
p
[
1
]
&
0x3fU
)
<<
12
)
|
((
p
[
2
]
&
0x3fU
)
<<
6
)
|
(
p
[
3
]
&
0x3fU
);
unicode
-=
0x10000
;
*
wp
++
=
(
unicode
>>
10
)
|
0xd800
;
*
wp
=
(
unicode
&
0x3ff
)
|
0xdc00
;
}
else
{
*
wp
=
((
p
[
0
]
&
0x7U
)
<<
18
)
|
((
p
[
1
]
&
0x3fU
)
<<
12
)
|
((
p
[
2
]
&
0x3fU
)
<<
6
)
|
(
p
[
3
]
&
0x3fU
);
}
p
+=
4
;
}
else
p
++
;
wp
++
;
if
(
codepoint_size
==
1
)
{
wp
[
0
]
=
cur
;
wp
++
;
}
else
{
cur
-=
0x10000U
;
wp
[
0
]
=
(
cur
>>
10
)
|
0xd800
;
wp
[
1
]
=
(
cur
&
0x3ff
)
|
0xdc00
;
wp
+=
2
;
}
}
*
wp
=
0
;
return
wp
-
wstr
;
...
...
gframe/config.h
View file @
0af9cbef
...
...
@@ -58,6 +58,20 @@ inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
#include "../ocgcore/ocgapi.h"
#include "../ocgcore/common.h"
inline
FILE
*
myfopen
(
const
char
*
filename
,
const
char
*
mode
)
{
FILE
*
fp
{};
#ifdef _WIN32
wchar_t
wname
[
256
]{};
wchar_t
wmode
[
20
]{};
BufferIO
::
DecodeUTF8
(
filename
,
wname
);
BufferIO
::
CopyWStr
(
mode
,
wmode
,
sizeof
wmode
/
sizeof
wmode
[
0
]);
fp
=
_wfopen
(
wname
,
wmode
);
#else
fp
=
fopen
(
filename
,
mode
);
#endif
return
fp
;
}
#ifndef YGOPRO_SERVER_MODE
#include <irrlicht.h>
using
namespace
irr
;
...
...
gframe/deck_manager.cpp
View file @
0af9cbef
...
...
@@ -273,15 +273,9 @@ void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory,
}
}
FILE
*
DeckManager
::
OpenDeckFile
(
const
wchar_t
*
file
,
const
char
*
mode
)
{
#ifdef WIN32
wchar_t
wmode
[
20
]{};
BufferIO
::
CopyWStr
(
mode
,
wmode
,
sizeof
wmode
/
sizeof
wmode
[
0
]);
FILE
*
fp
=
_wfopen
(
file
,
wmode
);
#else
char
file2
[
256
];
BufferIO
::
EncodeUTF8
(
file
,
file2
);
FILE
*
fp
=
fopen
(
file2
,
mode
);
#endif
char
fullname
[
256
]{};
BufferIO
::
EncodeUTF8
(
file
,
fullname
);
FILE
*
fp
=
myfopen
(
fullname
,
mode
);
return
fp
;
}
IReadFile
*
DeckManager
::
OpenDeckReader
(
const
wchar_t
*
file
)
{
...
...
gframe/duelclient.cpp
View file @
0af9cbef
...
...
@@ -100,7 +100,7 @@ void DuelClient::StopClient(bool is_exiting) {
void
DuelClient
::
ClientRead
(
bufferevent
*
bev
,
void
*
ctx
)
{
evbuffer
*
input
=
bufferevent_get_input
(
bev
);
int
len
=
evbuffer_get_length
(
input
);
unsigned
char
*
duel_client_read
=
new
unsigned
char
[
std
::
min
(
len
,
SIZE_NETWORK_BUFFER
)
];
unsigned
char
*
duel_client_read
=
new
unsigned
char
[
SIZE_NETWORK_BUFFER
];
unsigned
short
packet_len
;
while
(
len
>=
2
)
{
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
...
...
gframe/menu_handler.cpp
View file @
0af9cbef
...
...
@@ -570,14 +570,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
const
wchar_t
*
name
=
mainGame
->
lstSinglePlayList
->
getListItem
(
sel
);
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./single/%ls"
,
name
);
FILE
*
fp
;
#ifdef _WIN32
fp
=
_wfopen
(
fname
,
L"rb"
);
#else
char
filename
[
256
];
BufferIO
::
EncodeUTF8
(
fname
,
filename
);
fp
=
fopen
(
filename
,
"rb"
);
#endif
char
fullname
[
256
]{};
BufferIO
::
EncodeUTF8
(
fname
,
fullname
);
FILE
*
fp
=
myfopen
(
fullname
,
"rb"
);
if
(
!
fp
)
{
mainGame
->
stSinglePlayInfo
->
setText
(
L""
);
break
;
...
...
gframe/netserver.cpp
View file @
0af9cbef
...
...
@@ -206,7 +206,7 @@ void NetServer::ServerAcceptError(evconnlistener* listener, void* ctx) {
void
NetServer
::
ServerEchoRead
(
bufferevent
*
bev
,
void
*
ctx
)
{
evbuffer
*
input
=
bufferevent_get_input
(
bev
);
int
len
=
evbuffer_get_length
(
input
);
unsigned
char
*
net_server_read
=
new
unsigned
char
[
std
::
min
(
len
,
SIZE_NETWORK_BUFFER
)
];
unsigned
char
*
net_server_read
=
new
unsigned
char
[
SIZE_NETWORK_BUFFER
];
unsigned
short
packet_len
;
while
(
len
>=
2
)
{
evbuffer_copyout
(
input
,
&
packet_len
,
sizeof
packet_len
);
...
...
gframe/replay.cpp
View file @
0af9cbef
...
...
@@ -58,7 +58,7 @@ void Replay::BeginRecord() {
#ifdef YGOPRO_SERVER_MODE
}
#endif //YGOPRO_SERVER_MODE
p
data
=
replay_data
;
p
write
=
replay_data
;
replay_size
=
0
;
comp_size
=
0
;
is_replaying
=
false
;
...
...
@@ -80,10 +80,10 @@ void Replay::WriteHeader(ReplayHeader& header) {
void
Replay
::
WriteData
(
const
void
*
data
,
int
length
,
bool
flush
)
{
if
(
!
is_recording
)
return
;
if
(
length
<
0
||
(
pdata
-
replay_data
)
+
length
>
MAX_REPLAY_SIZE
)
if
(
length
<
0
||
(
int
)(
pwrite
-
replay_data
)
+
length
>
MAX_REPLAY_SIZE
)
return
;
std
::
memcpy
(
p
data
,
data
,
length
);
p
data
+=
length
;
std
::
memcpy
(
p
write
,
data
,
length
);
p
write
+=
length
;
#ifdef YGOPRO_SERVER_MODE
if
(
!
(
replay_mode
&
REPLAY_MODE_SAVE_IN_SERVER
))
return
;
#endif
...
...
@@ -97,58 +97,13 @@ void Replay::WriteData(const void* data, int length, bool flush) {
#endif
}
void
Replay
::
WriteInt32
(
int
data
,
bool
flush
)
{
if
(
!
is_recording
)
return
;
if
((
pdata
-
replay_data
)
+
4
>
MAX_REPLAY_SIZE
)
return
;
BufferIO
::
WriteInt32
(
pdata
,
data
);
#ifdef YGOPRO_SERVER_MODE
if
(
!
(
replay_mode
&
REPLAY_MODE_SAVE_IN_SERVER
))
return
;
#endif
#ifdef _WIN32
DWORD
size
;
WriteFile
(
recording_fp
,
&
data
,
sizeof
(
int
),
&
size
,
NULL
);
#else
fwrite
(
&
data
,
sizeof
(
int
),
1
,
fp
);
if
(
flush
)
fflush
(
fp
);
#endif
WriteData
(
&
data
,
sizeof
data
,
flush
);
}
void
Replay
::
WriteInt16
(
short
data
,
bool
flush
)
{
if
(
!
is_recording
)
return
;
if
((
pdata
-
replay_data
)
+
2
>
MAX_REPLAY_SIZE
)
return
;
BufferIO
::
WriteInt16
(
pdata
,
data
);
#ifdef YGOPRO_SERVER_MODE
if
(
!
(
replay_mode
&
REPLAY_MODE_SAVE_IN_SERVER
))
return
;
#endif
#ifdef _WIN32
DWORD
size
;
WriteFile
(
recording_fp
,
&
data
,
sizeof
(
short
),
&
size
,
NULL
);
#else
fwrite
(
&
data
,
sizeof
(
short
),
1
,
fp
);
if
(
flush
)
fflush
(
fp
);
#endif
WriteData
(
&
data
,
sizeof
data
,
flush
);
}
void
Replay
::
WriteInt8
(
char
data
,
bool
flush
)
{
if
(
!
is_recording
)
return
;
if
((
pdata
-
replay_data
)
+
1
>
MAX_REPLAY_SIZE
)
return
;
BufferIO
::
WriteInt8
(
pdata
,
data
);
#ifdef YGOPRO_SERVER_MODE
if
(
!
(
replay_mode
&
REPLAY_MODE_SAVE_IN_SERVER
))
return
;
#endif
#ifdef _WIN32
DWORD
size
;
WriteFile
(
recording_fp
,
&
data
,
sizeof
(
char
),
&
size
,
NULL
);
#else
fwrite
(
&
data
,
sizeof
(
char
),
1
,
fp
);
if
(
flush
)
fflush
(
fp
);
#endif
WriteData
(
&
data
,
sizeof
data
,
flush
);
}
void
Replay
::
Flush
()
{
if
(
!
is_recording
)
...
...
@@ -175,10 +130,7 @@ void Replay::EndRecord() {
#ifdef YGOPRO_SERVER_MODE
}
#endif
if
(
pdata
-
replay_data
>
0
&&
pdata
-
replay_data
<=
MAX_REPLAY_SIZE
)
replay_size
=
pdata
-
replay_data
;
else
replay_size
=
0
;
replay_size
=
pwrite
-
replay_data
;
pheader
.
datasize
=
replay_size
;
pheader
.
flag
|=
REPLAY_COMPRESSED
;
size_t
propsize
=
5
;
...
...
@@ -195,39 +147,26 @@ void Replay::SaveReplay(const wchar_t* name) {
return
;
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./replay/%ls.yrp"
,
name
);
#ifdef WIN32
fp
=
_wfopen
(
fname
,
L"wb"
);
#else
char
fname2
[
256
];
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
fp
=
fopen
(
fname2
,
"wb"
);
#endif
if
(
!
fp
)
char
fullname
[
256
]{};
BufferIO
::
EncodeUTF8
(
fname
,
fullname
);
FILE
*
rfp
=
myfopen
(
fullname
,
"wb"
);
if
(
!
rfp
)
return
;
fwrite
(
&
pheader
,
sizeof
(
pheader
),
1
,
fp
);
fwrite
(
comp_data
,
comp_size
,
1
,
fp
);
fclose
(
fp
);
fwrite
(
&
pheader
,
sizeof
pheader
,
1
,
r
fp
);
fwrite
(
comp_data
,
comp_size
,
1
,
r
fp
);
fclose
(
r
fp
);
}
bool
Replay
::
OpenReplay
(
const
wchar_t
*
name
)
{
#ifdef WIN32
fp
=
_wfopen
(
name
,
L"rb"
);
#else
char
name2
[
256
];
BufferIO
::
EncodeUTF8
(
name
,
name2
);
fp
=
fopen
(
name2
,
"rb"
);
#endif
if
(
!
fp
)
{
char
fullname
[
256
]{};
BufferIO
::
EncodeUTF8
(
name
,
fullname
);
FILE
*
rfp
=
myfopen
(
fullname
,
"rb"
);
if
(
!
rfp
)
{
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./replay/%ls"
,
name
);
#ifdef WIN32
fp
=
_wfopen
(
fname
,
L"rb"
);
#else
char
fname2
[
256
];
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
fp
=
fopen
(
fname2
,
"rb"
);
#endif
BufferIO
::
EncodeUTF8
(
fname
,
fullname
);
rfp
=
myfopen
(
fullname
,
"rb"
);
}
if
(
!
fp
)
if
(
!
r
fp
)
return
false
;
pdata
=
replay_data
;
...
...
@@ -235,13 +174,13 @@ bool Replay::OpenReplay(const wchar_t* name) {
is_replaying
=
false
;
replay_size
=
0
;
comp_size
=
0
;
if
(
fread
(
&
pheader
,
sizeof
(
pheader
),
1
,
fp
)
<
1
)
{
fclose
(
fp
);
if
(
fread
(
&
pheader
,
sizeof
pheader
,
1
,
r
fp
)
<
1
)
{
fclose
(
r
fp
);
return
false
;
}
if
(
pheader
.
flag
&
REPLAY_COMPRESSED
)
{
comp_size
=
fread
(
comp_data
,
1
,
MAX_COMP_SIZE
,
fp
);
fclose
(
fp
);
comp_size
=
fread
(
comp_data
,
1
,
MAX_COMP_SIZE
,
r
fp
);
fclose
(
r
fp
);
if
((
int
)
pheader
.
datasize
<
0
&&
(
int
)
pheader
.
datasize
>
MAX_REPLAY_SIZE
)
return
false
;
replay_size
=
pheader
.
datasize
;
...
...
@@ -252,8 +191,8 @@ bool Replay::OpenReplay(const wchar_t* name) {
return
false
;
}
}
else
{
replay_size
=
fread
(
replay_data
,
1
,
MAX_REPLAY_SIZE
,
fp
);
fclose
(
fp
);
replay_size
=
fread
(
replay_data
,
1
,
MAX_REPLAY_SIZE
,
r
fp
);
fclose
(
r
fp
);
comp_size
=
0
;
}
is_replaying
=
true
;
...
...
@@ -262,24 +201,20 @@ bool Replay::OpenReplay(const wchar_t* name) {
bool
Replay
::
CheckReplay
(
const
wchar_t
*
name
)
{
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./replay/%ls"
,
name
);
#ifdef WIN32
FILE
*
rfp
=
_wfopen
(
fname
,
L"rb"
);
#else
char
fname2
[
256
];
BufferIO
::
EncodeUTF8
(
fname
,
fname2
);
FILE
*
rfp
=
fopen
(
fname2
,
"rb"
);
#endif
char
fullname
[
256
]{};
BufferIO
::
EncodeUTF8
(
fname
,
fullname
);
FILE
*
rfp
=
myfopen
(
fullname
,
"rb"
);
if
(
!
rfp
)
return
false
;
ReplayHeader
rheader
;
size_t
count
=
fread
(
&
rheader
,
sizeof
(
ReplayHeader
)
,
1
,
rfp
);
size_t
count
=
fread
(
&
rheader
,
sizeof
rheader
,
1
,
rfp
);
fclose
(
rfp
);
return
count
==
1
&&
rheader
.
id
==
0x31707279
&&
rheader
.
version
>=
0x12d0u
&&
(
rheader
.
version
<
0x1353u
||
(
rheader
.
flag
&
REPLAY_UNIFORM
));
}
bool
Replay
::
DeleteReplay
(
const
wchar_t
*
name
)
{
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./replay/%ls"
,
name
);
#ifdef WIN32
#ifdef
_
WIN32
BOOL
result
=
DeleteFileW
(
fname
);
return
!!
result
;
#else
...
...
@@ -294,7 +229,7 @@ bool Replay::RenameReplay(const wchar_t* oldname, const wchar_t* newname) {
wchar_t
newfname
[
256
];
myswprintf
(
oldfname
,
L"./replay/%ls"
,
oldname
);
myswprintf
(
newfname
,
L"./replay/%ls"
,
newname
);
#ifdef WIN32
#ifdef
_
WIN32
BOOL
result
=
MoveFileW
(
oldfname
,
newfname
);
return
!!
result
;
#else
...
...
@@ -307,45 +242,53 @@ bool Replay::RenameReplay(const wchar_t* oldname, const wchar_t* newname) {
#endif
}
bool
Replay
::
ReadNextResponse
(
unsigned
char
resp
[])
{
if
(
pdata
-
replay_data
>=
(
int
)
replay_size
)
unsigned
char
len
{};
if
(
!
ReadData
(
&
len
,
sizeof
len
))
return
false
;
if
(
len
>
SIZE_RETURN_VALUE
)
{
is_replaying
=
false
;
return
false
;
int
len
=
*
pdata
++
;
if
(
len
>
SIZE_RETURN_VALUE
)
}
if
(
!
ReadData
(
resp
,
len
)
)
return
false
;
std
::
memcpy
(
resp
,
pdata
,
len
);
pdata
+=
len
;
return
true
;
}
void
Replay
::
ReadName
(
wchar_t
*
data
)
{
if
(
!
is_replaying
)
uint16_t
buffer
[
20
]{};
if
(
!
ReadData
(
buffer
,
sizeof
buffer
))
{
data
[
0
]
=
0
;
return
;
unsigned
short
buffer
[
20
];
ReadData
(
buffer
,
40
);
}
BufferIO
::
CopyWStr
(
buffer
,
data
,
20
);
}
void
Replay
::
ReadData
(
void
*
data
,
int
length
)
{
bool
Replay
::
ReadData
(
void
*
data
,
int
length
)
{
if
(
!
is_replaying
)
return
;
return
false
;
if
(
length
<
0
)
return
false
;
if
((
int
)(
pdata
-
replay_data
)
+
length
>
(
int
)
replay_size
)
{
is_replaying
=
false
;
return
false
;
}
std
::
memcpy
(
data
,
pdata
,
length
);
pdata
+=
length
;
return
true
;
}
int
Replay
::
ReadInt32
()
{
if
(
!
is_replaying
)
template
<
typename
T
>
T
Replay
::
ReadValue
()
{
T
ret
{};
if
(
!
ReadData
(
&
ret
,
sizeof
ret
))
return
-
1
;
int
ret
=
BufferIO
::
ReadInt32
(
pdata
);
return
ret
;
}
int
Replay
::
ReadInt32
()
{
return
ReadValue
<
int32_t
>
();
}
short
Replay
::
ReadInt16
()
{
if
(
!
is_replaying
)
return
-
1
;
short
ret
=
BufferIO
::
ReadInt16
(
pdata
);
return
ret
;
return
ReadValue
<
int16_t
>
();
}
char
Replay
::
ReadInt8
()
{
if
(
!
is_replaying
)
return
-
1
;
char
ret
=
BufferIO
::
ReadInt8
(
pdata
);
return
ret
;
return
ReadValue
<
char
>
();
}
void
Replay
::
Rewind
()
{
pdata
=
replay_data
;
...
...
gframe/replay.h
View file @
0af9cbef
...
...
@@ -56,7 +56,9 @@ public:
bool
ReadNextResponse
(
unsigned
char
resp
[]);
void
ReadName
(
wchar_t
*
data
);
//void ReadHeader(ReplayHeader& header);
void
ReadData
(
void
*
data
,
int
length
);
bool
ReadData
(
void
*
data
,
int
length
);
template
<
typename
T
>
T
ReadValue
();
int
ReadInt32
();
short
ReadInt16
();
char
ReadInt8
();
...
...
@@ -68,13 +70,14 @@ public:
#endif
ReplayHeader
pheader
;
unsigned
char
*
replay_data
;
unsigned
char
*
comp_data
;
size_t
replay_size
{};
size_t
comp_size
{};
private:
unsigned
char
*
pdata
{
nullptr
};
unsigned
char
*
replay_data
;
size_t
replay_size
{};
unsigned
char
*
pwrite
{};
unsigned
char
*
pdata
{};
bool
is_recording
{};
bool
is_replaying
{};
};
...
...
lflist.conf
View file @
0af9cbef
#[2024.7][2024.4 TCG][2024.4][2024.1][2023.10][2023.7][2023.4][2023.1][2022.10][2022.7][2022.4][2022.1][2021.10][2021.7][2021.4][2021.1][2020.10][2020.7][2020.4][2020.1][2019.10][2019.7][2019.4][2019.1][2018.10][2018.7][2018.4][2018.1][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][2024.1 TCG][2023.9 TCG][2023.6 TCG][2023.2 TCG][2022.12 TCG][2022.10 TCG][2022.5 TCG][2022.2 TCG][2021.10 TCG][2021.7 TCG][2021.3 TCG][2020.12 TCG][2020.9 TCG][2020.6 TCG][2020.4 TCG][2020.1 TCG][2019.10 TCG][2019.7 TCG][2019.4 TCG][2019.1 TCG][2018.12 TCG][2018.9 TCG][2018.5 TCG][2018.2 TCG][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]
#[2024.7][2024.9 TCG][2024.4][2024.1][2023.10][2023.7][2023.4][2023.1][2022.10][2022.7][2022.4][2022.1][2021.10][2021.7][2021.4][2021.1][2020.10][2020.7][2020.4][2020.1][2019.10][2019.7][2019.4][2019.1][2018.10][2018.7][2018.4][2018.1][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][2024.4 TCG][2024.1 TCG][2023.9 TCG][2023.6 TCG][2023.2 TCG][2022.12 TCG][2022.10 TCG][2022.5 TCG][2022.2 TCG][2021.10 TCG][2021.7 TCG][2021.3 TCG][2020.12 TCG][2020.9 TCG][2020.6 TCG][2020.4 TCG][2020.1 TCG][2019.10 TCG][2019.7 TCG][2019.4 TCG][2019.1 TCG][2018.12 TCG][2018.9 TCG][2018.5 TCG][2018.2 TCG][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]
!
2024
.
7
#forbidden
91869203
0
--アマゾネスの射手
...
...
@@ -195,10 +196,9 @@
14532163
2
--ライトニング・ストーム
92714517
2
--ビッグウェルカム・ラビュリンス
!
2024
.
1
TCG
!
2024
.
9
TCG
#forbidden
62320425
0
--
Agido
the
Ancient
Sentinel
06728559
0
--
Archnemeses
Protos
20292186
0
--
Artifact
Scythe
73356503
0
--
Barrier
Statue
of
the
Stormwinds
09929398
0
--
Blackwing
-
Gofu
the
Vague
Shadow
...
...
@@ -207,7 +207,6 @@
15341821
0
--
Dandylion
08903700
0
--
Djinn
Releaser
of
Rituals
51858306
0
--
Eclipse
Wyvern
40177746
0
--
Eva
55623480
0
--
Fairy
Tail
-
Snow
78706415
0
--
Fiber
Jar
93369354
0
--
Fishborg
Blaster
...
...
@@ -216,22 +215,20 @@
25926710
0
--
Kelbek
the
Ancient
Vanguard
57421866
0
--
Level
Eater
34206604
0
--
Magical
Scientist
31178212
0
--
Majespecter
Unicorn
-
Kirin
21377582
0
--
Master
Peace
,
the
True
Dracoslaying
King
36521307
0
--
Mathmech
Circular
23434538
0
--
Maxx
"C"
96782886
0
--
Mind
Master
07563579
0
--
Performage
Plushfire
23558733
0
--
Phoenixian
Cluster
Amaryllis
01357146
0
--
Ronintoadin
91258852
0
--
SPYRAL
Master
Plan
88071625
0
--
The
Tyrant
Neptune
26400609
0
--
Tidal
,
Dragon
Ruler
of
Waterfalls
44910027
0
--
Victory
Dragon
17412721
0
--
Elder
Entity
Norden
46640168
0
--
Fiendsmith
'
s
Lacrima
43387895
0
--
Supreme
King
Dragon
Starving
Venom
92731385
0
--
Tearlaments
Kitkallos
15291624
0
--
Thunder
Dragon
Colossu
s
04280258
0
--
Apollousa
,
Bow
of
the
Goddes
s
50588353
0
--
Crystron
Halqifibrax
98095162
0
--
Curious
,
the
Lightsworn
Dominion
59537380
0
--
Guardragon
Agarpain
...
...
@@ -241,6 +238,7 @@
39064822
0
--
Knightmare
Goblin
03679218
0
--
Knightmare
Mermaid
85243784
0
--
Linkross
41999284
0
--
Linkuriboh
44097050
0
--
Mecha
Phantom
Beast
Auroradon
25725326
0
--
Prank
-
Kids
Meow
-
Meow
-
Mu
70369116
0
--
Predaplant
Verte
Anaconda
...
...
@@ -250,8 +248,12 @@
33918636
0
--
Superheavy
Samurai
Scarecrow
22593417
0
--
Topologic
Gumblar
Dragon
83152482
0
--
Union
Carrier
84815190
0
--
Baronne
de
Fleur
27548199
0
--
Borreload
Savage
Dragon
03040496
0
--
Chaos
Ruler
,
the
Chaotic
Magical
Dragon
62242678
0
--
Hot
Red
Dragon
Archfiend
King
Calamity
63101919
0
--
Tempest
Magician
27552504
0
--
Beatrice
,
Lady
of
the
Eternal
48626373
0
--
Kashtira
Arise
-
Heart
34086406
0
--
Lavalval
Chain
04423206
0
--
M
-
X
-
Saber
Invoker
...
...
@@ -269,7 +271,6 @@
07394770
0
--
Brilliant
Fusion
69243953
0
--
Butterfly
Dagger
-
Elma
57953380
0
--
Card
of
Safe
Return
67616300
0
--
Chicken
Game
60682203
0
--
Cold
Wave
17375316
0
--
Confiscation
44763025
0
--
Delinquent
Duo
...
...
@@ -288,7 +289,6 @@
70828912
0
--
Premature
Burial
63789924
0
--
Smoke
Grenade
of
the
Thief
54447022
0
--
Soul
Charge
11110587
0
--
That
Grass
Looks
Greener
42829885
0
--
The
Forceful
Sentry
46060017
0
--
Zoodiac
Barrage
43262273
0
--
Appointer
of
the
Red
Lotus
...
...
@@ -300,6 +300,7 @@
93016201
0
--
Royal
Oppression
57585212
0
--
Self
-
Destruct
Button
03280747
0
--
Sixth
Sense
23516703
0
--
Summon
Limit
64697231
0
--
Trap
Dustshoot
80604091
0
--
Ultimate
Offering
05851097
0
--
Vanity
'
s
Emptiness
...
...
@@ -308,33 +309,30 @@
44519536
1
--
Left
Leg
of
the
Forbidden
One
70903634
1
--
Right
Arm
of
the
Forbidden
One
08124921
1
--
Right
Leg
of
the
Forbidden
One
28985331
1
--
Armageddon
Knight
06728559
1
--
Archnemeses
Protos
76794549
1
--
Astrograph
Sorcerer
61901281
1
--
Black
Dragon
Collapserpent
53804307
1
--
Blaster
,
Dragon
Ruler
of
Infernos
33854624
1
--
Bystial
Magnamhut
34124316
1
--
Cyber
Jar
43694650
1
--
Danger
!?
Jackalope
?
99745551
1
--
Danger
!?
Tsuchinoko
?
14536035
1
--
Dark
Grepher
40177746
1
--
Eva
33396948
1
--
Exodia
the
Forbidden
One
63542003
1
--
Keldo
the
Sacred
Protector
83190280
1
--
Lunalight
Tiger
38572779
1
--
Miscellaneousaurus
33508719
1
--
Morphing
Jar
99937011
1
--
Mudora
the
Sword
Oracle
57835716
1
--
Orcust
Harp
Horror
17330916
1
--
Performapal
Monkeyboard
12958919
1
--
Phantom
Skyblaster
38814750
1
--
PSY
-
Framegear
Gamma
26118970
1
--
Red
Rose
Dragon
90411554
1
--
Redox
,
Dragon
Ruler
of
Boulders
65734501
1
--
Rescue
-
ACE
Air
Lifter
09674034
1
--
Snake
-
Eye
Ash
90241276
1
--
Snake
-
Eyes
Poplar
20663556
1
--
Substitoad
37961969
1
--
Tearlaments
Havnis
74078255
1
--
Tearlaments
Merrli
00572850
1
--
Tearlaments
Scheiren
89399912
1
--
Tempest
,
Dragon
Ruler
of
Storms
41165831
1
--
Unchained
Soul
of
Sharvara
99234526
1
--
White
Dragon
Wyverburster
78872731
1
--
Zoodiac
Ratpier
...
...
@@ -342,19 +340,19 @@
73539069
1
--
Striker
Dragon
93896655
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
25862681
1
--
Ancient
Fairy
Dragon
65536818
1
--
Denglong
,
First
of
the
Yang
Zing
94677445
1
--
Ib
the
World
Chalice
Justiciar
74586817
1
--
PSY
-
Framelord
Omega
90953320
1
--
T
.
G
.
Hyper
Librarian
27552504
1
--
Beatrice
,
Lady
of
the
Eternal
00581014
1
--
Daigusto
Emeral
75433814
1
--
Number
40
:
Gimmick
Puppet
of
Strings
69170557
1
--
Number
C40
:
Gimmick
Puppet
of
Dark
Strings
44362883
1
--
Branded
Fusion
24224830
1
--
Called
by
the
Grave
72892473
1
--
Card
Destruction
59750328
1
--
Card
of
Demise
91623717
1
--
Chain
Strike
04031928
1
--
Change
of
Heart
99266988
1
--
Chaos
Space
67616300
1
--
Chicken
Game
15854426
1
--
Divine
Wind
of
Mist
Valley
13035077
1
--
Dragonic
Diagram
95308449
1
--
Final
Countdown
...
...
@@ -370,29 +368,38 @@
83764718
1
--
Monster
Reborn
33782437
1
--
One
Day
of
Peace
02295440
1
--
One
for
One
55584558
1
--
Purrely
Delicious
Memory
80312545
1
--
Opening
of
the
Spirit
Gates
84211599
1
--
Pot
of
Prosperity
58577036
1
--
Reasoning
32807846
1
--
Reinforcement
of
the
Army
30336082
1
--
Sangen
Summoning
24940422
1
--
Sekka
'
s
Light
73468603
1
--
Set
Rotation
52340444
1
--
Sky
Striker
Mecha
-
Hornet
Drones
71344451
1
--
Slash
Draw
45986603
1
--
Snatch
Steal
73628505
1
--
Terraforming
11110587
1
--
That
Grass
Looks
Greener
58921041
1
--
Anti
-
Spell
Fragrance
53334471
1
--
Gozen
Match
32723153
1
--
Magical
Explosion
03734202
1
--
Naturia
Sacred
Tree
90846359
1
--
Rivalry
of
Warlords
82732705
1
--
Skill
Drain
24207889
1
--
There
Can
Be
Only
One
35316708
1
--
Time
Seal
#semi limit
09411399
2
--
Destiny
HERO
-
Maliciou
s
53804307
2
--
Blaster
,
Dragon
Ruler
of
Inferno
s
82385847
2
--
Dinowrestler
Pankratops
81275020
2
--
Speedroid
Terrortop
83190280
2
--
Lunalight
Tiger
90411554
2
--
Redox
,
Dragon
Ruler
of
Boulders
89399912
2
--
Tempest
,
Dragon
Ruler
of
Storms
26400609
2
--
Tidal
,
Dragon
Ruler
of
Waterfalls
15291624
2
--
Thunder
Dragon
Colossus
94677445
2
--
Ib
the
World
Chalice
Justiciar
14532163
2
--
Lightning
Storm
55584558
2
--
Purrely
Delicious
Memory
21347668
2
--
Purrely
Sleepy
Memory
92107604
2
--
Runick
Fountain
63166095
2
--
Sky
Striker
Mobilize
-
Engage
!
!
2024
.
4
#forbidden
...
...
@@ -7557,6 +7564,405 @@
53582587
2
--激流葬
29401950
2
--奈落の落とし穴
!
2024
.
4
TCG
#forbidden
62320425
0
--
Agido
the
Ancient
Sentinel
20292186
0
--
Artifact
Scythe
73356503
0
--
Barrier
Statue
of
the
Stormwinds
09929398
0
--
Blackwing
-
Gofu
the
Vague
Shadow
94689206
0
--
Block
Dragon
69015963
0
--
Cyber
-
Stein
15341821
0
--
Dandylion
08903700
0
--
Djinn
Releaser
of
Rituals
51858306
0
--
Eclipse
Wyvern
40177746
0
--
Eva
55623480
0
--
Fairy
Tail
-
Snow
78706415
0
--
Fiber
Jar
93369354
0
--
Fishborg
Blaster
67441435
0
--
Glow
-
Up
Bulb
75732622
0
--
Grinder
Golem
25926710
0
--
Kelbek
the
Ancient
Vanguard
57421866
0
--
Level
Eater
34206604
0
--
Magical
Scientist
21377582
0
--
Master
Peace
,
the
True
Dracoslaying
King
36521307
0
--
Mathmech
Circular
23434538
0
--
Maxx
"C"
96782886
0
--
Mind
Master
07563579
0
--
Performage
Plushfire
23558733
0
--
Phoenixian
Cluster
Amaryllis
01357146
0
--
Ronintoadin
91258852
0
--
SPYRAL
Master
Plan
88071625
0
--
The
Tyrant
Neptune
44910027
0
--
Victory
Dragon
17412721
0
--
Elder
Entity
Norden
43387895
0
--
Supreme
King
Dragon
Starving
Venom
92731385
0
--
Tearlaments
Kitkallos
50588353
0
--
Crystron
Halqifibrax
98095162
0
--
Curious
,
the
Lightsworn
Dominion
59537380
0
--
Guardragon
Agarpain
86148577
0
--
Guardragon
Elpy
24094258
0
--
Heavymetalfoes
Electrumite
59934749
0
--
Isolde
,
Two
Tales
of
the
Noble
Knights
39064822
0
--
Knightmare
Goblin
03679218
0
--
Knightmare
Mermaid
85243784
0
--
Linkross
41999284
0
--
Linkuriboh
44097050
0
--
Mecha
Phantom
Beast
Auroradon
25725326
0
--
Prank
-
Kids
Meow
-
Meow
-
Mu
70369116
0
--
Predaplant
Verte
Anaconda
72330894
0
--
Simorgh
,
Bird
of
Sovereignty
27381364
0
--
Spright
Elf
61665245
0
--
Summon
Sorceress
33918636
0
--
Superheavy
Samurai
Scarecrow
22593417
0
--
Topologic
Gumblar
Dragon
83152482
0
--
Union
Carrier
84815190
0
--
Baronne
de
Fleur
27548199
0
--
Borreload
Savage
Dragon
03040496
0
--
Chaos
Ruler
,
the
Chaotic
Magical
Dragon
63101919
0
--
Tempest
Magician
48626373
0
--
Kashtira
Arise
-
Heart
34086406
0
--
Lavalval
Chain
04423206
0
--
M
-
X
-
Saber
Invoker
54719828
0
--
Number
16
:
Shock
Master
10389142
0
--
Number
42
:
Galaxy
Tomahawk
63504681
0
--
Number
86
:
Heroic
Champion
-
Rhongomyniad
95474755
0
--
Number
89
:
Diablosis
the
Mind
Hacker
58820923
0
--
Number
95
:
Galaxy
-
Eyes
Dark
Matter
Dragon
52653092
0
--
Number
S0
:
Utopic
ZEXAL
34945480
0
--
Outer
Entity
Azathot
88581108
0
--
True
King
of
All
Calamities
81122844
0
--
Wind
-
Up
Carrier
Zenmaity
85115440
0
--
Zoodiac
Broadbull
48905153
0
--
Zoodiac
Drident
07394770
0
--
Brilliant
Fusion
69243953
0
--
Butterfly
Dagger
-
Elma
57953380
0
--
Card
of
Safe
Return
60682203
0
--
Cold
Wave
17375316
0
--
Confiscation
44763025
0
--
Delinquent
Duo
23557835
0
--
Dimension
Fusion
42703248
0
--
Giant
Trunade
79571449
0
--
Graceful
Charity
19613556
0
--
Heavy
Storm
35059553
0
--
Kaiser
Colosseum
85602018
0
--
Last
Will
34906152
0
--
Mass
Driver
46411259
0
--
Metamorphosis
41482598
0
--
Mirage
of
Nightmare
76375976
0
--
Mystic
Mine
74191942
0
--
Painful
Choice
55144522
0
--
Pot
of
Greed
70828912
0
--
Premature
Burial
63789924
0
--
Smoke
Grenade
of
the
Thief
54447022
0
--
Soul
Charge
11110587
0
--
That
Grass
Looks
Greener
42829885
0
--
The
Forceful
Sentry
46060017
0
--
Zoodiac
Barrage
43262273
0
--
Appointer
of
the
Red
Lotus
01041278
0
--
Branded
Expulsion
61740673
0
--
Imperial
Order
28566710
0
--
Last
Turn
23002292
0
--
Red
Reboot
27174286
0
--
Return
from
the
Different
Dimension
93016201
0
--
Royal
Oppression
57585212
0
--
Self
-
Destruct
Button
03280747
0
--
Sixth
Sense
23516703
0
--
Summon
Limit
64697231
0
--
Trap
Dustshoot
80604091
0
--
Ultimate
Offering
05851097
0
--
Vanity
'
s
Emptiness
#limit
07902349
1
--
Left
Arm
of
the
Forbidden
One
44519536
1
--
Left
Leg
of
the
Forbidden
One
70903634
1
--
Right
Arm
of
the
Forbidden
One
08124921
1
--
Right
Leg
of
the
Forbidden
One
06728559
1
--
Archnemeses
Protos
76794549
1
--
Astrograph
Sorcerer
61901281
1
--
Black
Dragon
Collapserpent
53804307
1
--
Blaster
,
Dragon
Ruler
of
Infernos
33854624
1
--
Bystial
Magnamhut
34124316
1
--
Cyber
Jar
43694650
1
--
Danger
!?
Jackalope
?
99745551
1
--
Danger
!?
Tsuchinoko
?
14536035
1
--
Dark
Grepher
33396948
1
--
Exodia
the
Forbidden
One
63542003
1
--
Keldo
the
Sacred
Protector
83190280
1
--
Lunalight
Tiger
31178212
1
--
Majespecter
Unicorn
-
Kirin
38572779
1
--
Miscellaneousaurus
33508719
1
--
Morphing
Jar
99937011
1
--
Mudora
the
Sword
Oracle
17330916
1
--
Performapal
Monkeyboard
12958919
1
--
Phantom
Skyblaster
38814750
1
--
PSY
-
Framegear
Gamma
26118970
1
--
Red
Rose
Dragon
90411554
1
--
Redox
,
Dragon
Ruler
of
Boulders
65734501
1
--
Rescue
-
ACE
Air
Lifter
20663556
1
--
Substitoad
37961969
1
--
Tearlaments
Havnis
74078255
1
--
Tearlaments
Merrli
00572850
1
--
Tearlaments
Scheiren
89399912
1
--
Tempest
,
Dragon
Ruler
of
Storms
26400609
1
--
Tidal
,
Dragon
Ruler
of
Waterfalls
41165831
1
--
Unchained
Soul
of
Sharvara
99234526
1
--
White
Dragon
Wyverburster
78872731
1
--
Zoodiac
Ratpier
39512984
1
--
Gem
-
Knight
Master
Diamond
15291624
1
--
Thunder
Dragon
Colossus
73539069
1
--
Striker
Dragon
93896655
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
25862681
1
--
Ancient
Fairy
Dragon
65536818
1
--
Denglong
,
First
of
the
Yang
Zing
94677445
1
--
Ib
the
World
Chalice
Justiciar
74586817
1
--
PSY
-
Framelord
Omega
90953320
1
--
T
.
G
.
Hyper
Librarian
27552504
1
--
Beatrice
,
Lady
of
the
Eternal
00581014
1
--
Daigusto
Emeral
24224830
1
--
Called
by
the
Grave
72892473
1
--
Card
Destruction
59750328
1
--
Card
of
Demise
91623717
1
--
Chain
Strike
04031928
1
--
Change
of
Heart
99266988
1
--
Chaos
Space
67616300
1
--
Chicken
Game
15854426
1
--
Divine
Wind
of
Mist
Valley
13035077
1
--
Dragonic
Diagram
95308449
1
--
Final
Countdown
81439173
1
--
Foolish
Burial
27970830
1
--
Gateway
of
the
Six
75500286
1
--
Gold
Sarcophagus
18144506
1
--
Harpie
'
s
Feather
Duster
66957584
1
--
Infernity
Launcher
01845204
1
--
Instant
Fusion
93946239
1
--
Into
the
Void
71650854
1
--
Magical
Mid
-
Breaker
Field
43040603
1
--
Monster
Gate
83764718
1
--
Monster
Reborn
33782437
1
--
One
Day
of
Peace
02295440
1
--
One
for
One
58577036
1
--
Reasoning
32807846
1
--
Reinforcement
of
the
Army
24940422
1
--
Sekka
'
s
Light
73468603
1
--
Set
Rotation
52340444
1
--
Sky
Striker
Mecha
-
Hornet
Drones
71344451
1
--
Slash
Draw
45986603
1
--
Snatch
Steal
73628505
1
--
Terraforming
58921041
1
--
Anti
-
Spell
Fragrance
53334471
1
--
Gozen
Match
32723153
1
--
Magical
Explosion
03734202
1
--
Naturia
Sacred
Tree
90846359
1
--
Rivalry
of
Warlords
24207889
1
--
There
Can
Be
Only
One
35316708
1
--
Time
Seal
#semi limit
28985331
2
--
Armageddon
Knight
82385847
2
--
Dinowrestler
Pankratops
14532163
2
--
Lightning
Storm
55584558
2
--
Purrely
Delicious
Memory
21347668
2
--
Purrely
Sleepy
Memory
92107604
2
--
Runick
Fountain
!
2024
.
1
TCG
#forbidden
62320425
0
--
Agido
the
Ancient
Sentinel
06728559
0
--
Archnemeses
Protos
20292186
0
--
Artifact
Scythe
73356503
0
--
Barrier
Statue
of
the
Stormwinds
09929398
0
--
Blackwing
-
Gofu
the
Vague
Shadow
94689206
0
--
Block
Dragon
69015963
0
--
Cyber
-
Stein
15341821
0
--
Dandylion
08903700
0
--
Djinn
Releaser
of
Rituals
51858306
0
--
Eclipse
Wyvern
40177746
0
--
Eva
55623480
0
--
Fairy
Tail
-
Snow
78706415
0
--
Fiber
Jar
93369354
0
--
Fishborg
Blaster
67441435
0
--
Glow
-
Up
Bulb
75732622
0
--
Grinder
Golem
25926710
0
--
Kelbek
the
Ancient
Vanguard
57421866
0
--
Level
Eater
34206604
0
--
Magical
Scientist
31178212
0
--
Majespecter
Unicorn
-
Kirin
21377582
0
--
Master
Peace
,
the
True
Dracoslaying
King
36521307
0
--
Mathmech
Circular
23434538
0
--
Maxx
"C"
96782886
0
--
Mind
Master
07563579
0
--
Performage
Plushfire
23558733
0
--
Phoenixian
Cluster
Amaryllis
01357146
0
--
Ronintoadin
91258852
0
--
SPYRAL
Master
Plan
88071625
0
--
The
Tyrant
Neptune
26400609
0
--
Tidal
,
Dragon
Ruler
of
Waterfalls
44910027
0
--
Victory
Dragon
17412721
0
--
Elder
Entity
Norden
43387895
0
--
Supreme
King
Dragon
Starving
Venom
92731385
0
--
Tearlaments
Kitkallos
15291624
0
--
Thunder
Dragon
Colossus
50588353
0
--
Crystron
Halqifibrax
98095162
0
--
Curious
,
the
Lightsworn
Dominion
59537380
0
--
Guardragon
Agarpain
86148577
0
--
Guardragon
Elpy
24094258
0
--
Heavymetalfoes
Electrumite
59934749
0
--
Isolde
,
Two
Tales
of
the
Noble
Knights
39064822
0
--
Knightmare
Goblin
03679218
0
--
Knightmare
Mermaid
85243784
0
--
Linkross
44097050
0
--
Mecha
Phantom
Beast
Auroradon
25725326
0
--
Prank
-
Kids
Meow
-
Meow
-
Mu
70369116
0
--
Predaplant
Verte
Anaconda
72330894
0
--
Simorgh
,
Bird
of
Sovereignty
27381364
0
--
Spright
Elf
61665245
0
--
Summon
Sorceress
33918636
0
--
Superheavy
Samurai
Scarecrow
22593417
0
--
Topologic
Gumblar
Dragon
83152482
0
--
Union
Carrier
03040496
0
--
Chaos
Ruler
,
the
Chaotic
Magical
Dragon
63101919
0
--
Tempest
Magician
48626373
0
--
Kashtira
Arise
-
Heart
34086406
0
--
Lavalval
Chain
04423206
0
--
M
-
X
-
Saber
Invoker
54719828
0
--
Number
16
:
Shock
Master
10389142
0
--
Number
42
:
Galaxy
Tomahawk
63504681
0
--
Number
86
:
Heroic
Champion
-
Rhongomyniad
95474755
0
--
Number
89
:
Diablosis
the
Mind
Hacker
58820923
0
--
Number
95
:
Galaxy
-
Eyes
Dark
Matter
Dragon
52653092
0
--
Number
S0
:
Utopic
ZEXAL
34945480
0
--
Outer
Entity
Azathot
88581108
0
--
True
King
of
All
Calamities
81122844
0
--
Wind
-
Up
Carrier
Zenmaity
85115440
0
--
Zoodiac
Broadbull
48905153
0
--
Zoodiac
Drident
07394770
0
--
Brilliant
Fusion
69243953
0
--
Butterfly
Dagger
-
Elma
57953380
0
--
Card
of
Safe
Return
67616300
0
--
Chicken
Game
60682203
0
--
Cold
Wave
17375316
0
--
Confiscation
44763025
0
--
Delinquent
Duo
23557835
0
--
Dimension
Fusion
42703248
0
--
Giant
Trunade
79571449
0
--
Graceful
Charity
19613556
0
--
Heavy
Storm
35059553
0
--
Kaiser
Colosseum
85602018
0
--
Last
Will
34906152
0
--
Mass
Driver
46411259
0
--
Metamorphosis
41482598
0
--
Mirage
of
Nightmare
76375976
0
--
Mystic
Mine
74191942
0
--
Painful
Choice
55144522
0
--
Pot
of
Greed
70828912
0
--
Premature
Burial
63789924
0
--
Smoke
Grenade
of
the
Thief
54447022
0
--
Soul
Charge
11110587
0
--
That
Grass
Looks
Greener
42829885
0
--
The
Forceful
Sentry
46060017
0
--
Zoodiac
Barrage
43262273
0
--
Appointer
of
the
Red
Lotus
01041278
0
--
Branded
Expulsion
61740673
0
--
Imperial
Order
28566710
0
--
Last
Turn
23002292
0
--
Red
Reboot
27174286
0
--
Return
from
the
Different
Dimension
93016201
0
--
Royal
Oppression
57585212
0
--
Self
-
Destruct
Button
03280747
0
--
Sixth
Sense
64697231
0
--
Trap
Dustshoot
80604091
0
--
Ultimate
Offering
05851097
0
--
Vanity
'
s
Emptiness
#limit
07902349
1
--
Left
Arm
of
the
Forbidden
One
44519536
1
--
Left
Leg
of
the
Forbidden
One
70903634
1
--
Right
Arm
of
the
Forbidden
One
08124921
1
--
Right
Leg
of
the
Forbidden
One
28985331
1
--
Armageddon
Knight
76794549
1
--
Astrograph
Sorcerer
61901281
1
--
Black
Dragon
Collapserpent
53804307
1
--
Blaster
,
Dragon
Ruler
of
Infernos
33854624
1
--
Bystial
Magnamhut
34124316
1
--
Cyber
Jar
43694650
1
--
Danger
!?
Jackalope
?
99745551
1
--
Danger
!?
Tsuchinoko
?
14536035
1
--
Dark
Grepher
33396948
1
--
Exodia
the
Forbidden
One
63542003
1
--
Keldo
the
Sacred
Protector
83190280
1
--
Lunalight
Tiger
38572779
1
--
Miscellaneousaurus
33508719
1
--
Morphing
Jar
99937011
1
--
Mudora
the
Sword
Oracle
57835716
1
--
Orcust
Harp
Horror
17330916
1
--
Performapal
Monkeyboard
12958919
1
--
Phantom
Skyblaster
38814750
1
--
PSY
-
Framegear
Gamma
26118970
1
--
Red
Rose
Dragon
90411554
1
--
Redox
,
Dragon
Ruler
of
Boulders
65734501
1
--
Rescue
-
ACE
Air
Lifter
20663556
1
--
Substitoad
37961969
1
--
Tearlaments
Havnis
74078255
1
--
Tearlaments
Merrli
00572850
1
--
Tearlaments
Scheiren
89399912
1
--
Tempest
,
Dragon
Ruler
of
Storms
41165831
1
--
Unchained
Soul
of
Sharvara
99234526
1
--
White
Dragon
Wyverburster
78872731
1
--
Zoodiac
Ratpier
39512984
1
--
Gem
-
Knight
Master
Diamond
73539069
1
--
Striker
Dragon
93896655
1
--
Sunavalon
Dryas
65563871
1
--
Sunvine
Healer
25862681
1
--
Ancient
Fairy
Dragon
65536818
1
--
Denglong
,
First
of
the
Yang
Zing
94677445
1
--
Ib
the
World
Chalice
Justiciar
74586817
1
--
PSY
-
Framelord
Omega
90953320
1
--
T
.
G
.
Hyper
Librarian
27552504
1
--
Beatrice
,
Lady
of
the
Eternal
00581014
1
--
Daigusto
Emeral
24224830
1
--
Called
by
the
Grave
72892473
1
--
Card
Destruction
59750328
1
--
Card
of
Demise
91623717
1
--
Chain
Strike
04031928
1
--
Change
of
Heart
99266988
1
--
Chaos
Space
15854426
1
--
Divine
Wind
of
Mist
Valley
13035077
1
--
Dragonic
Diagram
95308449
1
--
Final
Countdown
81439173
1
--
Foolish
Burial
27970830
1
--
Gateway
of
the
Six
75500286
1
--
Gold
Sarcophagus
18144506
1
--
Harpie
'
s
Feather
Duster
66957584
1
--
Infernity
Launcher
01845204
1
--
Instant
Fusion
93946239
1
--
Into
the
Void
71650854
1
--
Magical
Mid
-
Breaker
Field
43040603
1
--
Monster
Gate
83764718
1
--
Monster
Reborn
33782437
1
--
One
Day
of
Peace
02295440
1
--
One
for
One
55584558
1
--
Purrely
Delicious
Memory
58577036
1
--
Reasoning
32807846
1
--
Reinforcement
of
the
Army
24940422
1
--
Sekka
'
s
Light
73468603
1
--
Set
Rotation
52340444
1
--
Sky
Striker
Mecha
-
Hornet
Drones
71344451
1
--
Slash
Draw
45986603
1
--
Snatch
Steal
73628505
1
--
Terraforming
53334471
1
--
Gozen
Match
32723153
1
--
Magical
Explosion
03734202
1
--
Naturia
Sacred
Tree
90846359
1
--
Rivalry
of
Warlords
24207889
1
--
There
Can
Be
Only
One
35316708
1
--
Time
Seal
#semi limit
09411399
2
--
Destiny
HERO
-
Malicious
82385847
2
--
Dinowrestler
Pankratops
81275020
2
--
Speedroid
Terrortop
14532163
2
--
Lightning
Storm
21347668
2
--
Purrely
Sleepy
Memory
92107604
2
--
Runick
Fountain
63166095
2
--
Sky
Striker
Mobilize
-
Engage
!
!
2023
.
9
TCG
#forbidden
06728559
0
--
Archnemeses
Protos
...
...
ocgcore
@
7c2de13c
Subproject commit
83d47d022b53b227455cf22638bea4e0be18c488
Subproject commit
7c2de13c71531d921a2d15ebb92eb20f995769d3
script
@
625da06a
Subproject commit
1c81fae96af10e8e084b2a895f9a53f78b468bbe
Subproject commit
625da06a404246d7a29e0f0095d9dc8c6aea094d
strings.conf
View file @
0af9cbef
...
...
@@ -1238,3 +1238,6 @@
!
setname
0
x1bb
魔瞳 モルガナイト
!
setname
0
x1bc
蓟花 アザミナ
!
setname
0
x1bd
祝台
!
setname
0
x1be
雷火沸动 ライゼオル
!
setname
0
x1bf
码丽丝
M
∀
LICE
!
setname
0
x1c0
龙华 竜華
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