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
d3f66f6f
Commit
d3f66f6f
authored
Sep 29, 2024
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into server
parents
61896bf8
f7608e9b
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
213 additions
and
151 deletions
+213
-151
cards.cdb
cards.cdb
+0
-0
gframe/bufferio.h
gframe/bufferio.h
+129
-56
gframe/config.h
gframe/config.h
+14
-0
gframe/deck_con.cpp
gframe/deck_con.cpp
+7
-10
gframe/deck_manager.cpp
gframe/deck_manager.cpp
+3
-9
gframe/game.cpp
gframe/game.cpp
+1
-1
gframe/menu_handler.cpp
gframe/menu_handler.cpp
+3
-8
gframe/replay.cpp
gframe/replay.cpp
+26
-43
lflist.conf
lflist.conf
+22
-22
ocgcore
ocgcore
+1
-1
premake/lua/premake5.lua
premake/lua/premake5.lua
+3
-0
script
script
+1
-1
strings.conf
strings.conf
+3
-0
No files found.
cards.cdb
View file @
d3f66f6f
No preview for this file type
gframe/bufferio.h
View file @
d3f66f6f
...
...
@@ -6,40 +6,36 @@
class
BufferIO
{
public:
inline
static
int
ReadInt32
(
unsigned
char
*&
p
)
{
static
int
ReadInt32
(
unsigned
char
*&
p
)
{
return
buffer_read
<
int32_t
>
(
p
);
}
inline
static
unsigned
int
ReadUInt32
(
unsigned
char
*&
p
)
{
unsigned
int
ret
=
*
(
unsigned
int
*
)
p
;
p
+=
4
;
return
ret
;
static
unsigned
int
ReadUInt32
(
unsigned
char
*&
p
)
{
return
buffer_read
<
uint32_t
>
(
p
);
}
inline
static
short
ReadInt16
(
unsigned
char
*&
p
)
{
static
short
ReadInt16
(
unsigned
char
*&
p
)
{
return
buffer_read
<
int16_t
>
(
p
);
}
inline
static
unsigned
short
ReadUInt16
(
unsigned
char
*&
p
)
{
unsigned
short
ret
=
*
(
unsigned
short
*
)
p
;
p
+=
2
;
return
ret
;
static
unsigned
short
ReadUInt16
(
unsigned
char
*&
p
)
{
return
buffer_read
<
uint16_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
];
...
...
@@ -49,7 +45,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
];
...
...
@@ -59,22 +55,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
:
...
...
@@ -90,13 +181,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
;
...
...
@@ -106,10 +190,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
...
...
@@ -117,9 +200,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
...
...
@@ -127,30 +212,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 @
d3f66f6f
...
...
@@ -63,6 +63,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_con.cpp
View file @
d3f66f6f
...
...
@@ -1391,6 +1391,7 @@ void DeckBuilder::FilterCards() {
element_t
()
:
type
(
type_t
::
all
),
exclude
(
false
)
{}
};
const
wchar_t
*
pstr
=
mainGame
->
ebCardName
->
getText
();
int
trycode
=
BufferIO
::
GetVal
(
pstr
);
std
::
wstring
str
=
std
::
wstring
(
pstr
);
std
::
vector
<
element_t
>
query_elements
;
if
(
mainGame
->
gameConf
.
search_multiple_keywords
)
{
...
...
@@ -1535,17 +1536,13 @@ void DeckBuilder::FilterCards() {
match
=
CardNameContains
(
text
.
name
.
c_str
(),
elements_iterator
->
keyword
.
c_str
());
}
else
if
(
elements_iterator
->
type
==
element_t
::
type_t
::
setcode
)
{
match
=
data
.
is_setcodes
(
elements_iterator
->
setcodes
);
}
else
if
(
trycode
&&
(
data
.
code
==
trycode
||
data
.
alias
==
trycode
&&
data
.
is_alternative
())){
match
=
true
;
}
else
{
int
trycode
=
BufferIO
::
GetVal
(
elements_iterator
->
keyword
.
c_str
());
bool
tryresult
=
dataManager
.
GetData
(
trycode
,
0
);
if
(
!
tryresult
)
{
match
=
CardNameContains
(
text
.
name
.
c_str
(),
elements_iterator
->
keyword
.
c_str
())
||
text
.
text
.
find
(
elements_iterator
->
keyword
)
!=
std
::
wstring
::
npos
||
mainGame
->
CheckRegEx
(
text
.
text
,
elements_iterator
->
keyword
)
||
data
.
is_setcodes
(
elements_iterator
->
setcodes
);
}
else
{
match
=
data
.
code
==
trycode
||
data
.
alias
==
trycode
;
}
match
=
CardNameContains
(
text
.
name
.
c_str
(),
elements_iterator
->
keyword
.
c_str
())
||
text
.
text
.
find
(
elements_iterator
->
keyword
)
!=
std
::
wstring
::
npos
||
mainGame
->
CheckRegEx
(
text
.
text
,
elements_iterator
->
keyword
)
||
data
.
is_setcodes
(
elements_iterator
->
setcodes
);
}
if
(
elements_iterator
->
exclude
)
match
=
!
match
;
...
...
gframe/deck_manager.cpp
View file @
d3f66f6f
...
...
@@ -278,15 +278,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/game.cpp
View file @
d3f66f6f
...
...
@@ -279,7 +279,7 @@ bool Game::Initialize() {
SetWindowsIcon
();
//main menu
wchar_t
strbuf
[
256
];
myswprintf
(
strbuf
,
L"KoishiPro %X.0%X.%X
Euphoria
"
,
(
PRO_VERSION
&
0xf000U
)
>>
12
,
(
PRO_VERSION
&
0x0ff0U
)
>>
4
,
PRO_VERSION
&
0x000fU
);
myswprintf
(
strbuf
,
L"KoishiPro %X.0%X.%X
Do-Dai
"
,
(
PRO_VERSION
&
0xf000U
)
>>
12
,
(
PRO_VERSION
&
0x0ff0U
)
>>
4
,
PRO_VERSION
&
0x000fU
);
wMainMenu
=
env
->
addWindow
(
rect
<
s32
>
(
370
,
200
,
650
,
415
),
false
,
strbuf
);
wMainMenu
->
getCloseButton
()
->
setVisible
(
false
);
btnLanMode
=
env
->
addButton
(
rect
<
s32
>
(
10
,
30
,
270
,
60
),
wMainMenu
,
BUTTON_LAN_MODE
,
dataManager
.
GetSysString
(
1200
));
...
...
gframe/menu_handler.cpp
View file @
d3f66f6f
...
...
@@ -558,14 +558,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/replay.cpp
View file @
d3f66f6f
...
...
@@ -147,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
;
...
...
@@ -187,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
;
...
...
@@ -204,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
;
...
...
@@ -214,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
...
...
@@ -246,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
...
...
lflist.conf
View file @
d3f66f6f
#[2024.10][2024.9 TCG][2024.7][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
.
10
#forbidden
27552504
0
--永遠の淑女 ベアトリーチェ
91869203
0
--アマゾネスの射手
20663556
0
--イレカエル
44910027
0
--ヴィクトリー・ドラゴン
27552504
0
--永遠の淑女 ベアトリーチェ
51858306
0
--エクリプス・ワイバーン
62242678
0
--琰魔竜王 レッド・デーモン・カラミティ
34945480
0
--外神アザトート
...
...
@@ -86,45 +86,41 @@
17178486
0
--ライフチェンジャー
28566710
0
--ラストバトル!
#limit
48905153
1
--十二獣ドランシア
21377582
1
--真竜剣皇マスター
P
37818794
1
--超魔導竜騎士-ドラグーン・オブ・レッドアイズ
45986603
1
--強奪
72270339
1
--黒魔女ディアベルスター
90241276
1
--蛇眼の炎燐
91810826
1
--天盃龍チュンドラ
80453041
1
--ファントム・オブ・ユベル
60764609
1
--魔を刻むデモンスミス
98567237
1
--刻まれし魔の詠聖
85106525
1
--篝火
76794549
1
--アストログラフ・マジシャン
29301450
1
--
S
:
P
リトルナイト
17330916
1
--
EM
モンキーボード
68304193
1
--クシャトリラ・ユニコーン
12289247
1
--クロノグラフ・マジシャン
72270339
1
--黒魔女ディアベルスター
99937011
1
--剣神官ムドラ
38814750
1
--
PSY
フレームギア・γ
74586817
1
--
PSY
フレームロード・Ω
32731036
1
--深淵の獣ルベリオン
36521307
1
--斬機サーキュラー
48905153
1
--十二獣ドランシア
78872731
1
--十二獣モルモラット
06602300
1
--重爆撃禽 ボム・フェネクス
63542003
1
--宿神像ケルドウ
21377582
1
--真竜剣皇マスター
P
09674034
1
--スネークアイ・エクセル
90241276
1
--蛇眼の炎燐
13533678
1
--スプライト・ジェット
76145933
1
--スプライト・ブルー
90361010
1
--超重武者装留イワトオシ
37818794
1
--超魔導竜騎士-ドラグーン・オブ・レッドアイズ
04928565
1
--ティアラメンツ・クシャトリラ
00572850
1
--ティアラメンツ・シェイレーン
37961969
1
--ティアラメンツ・ハゥフニス
74078255
1
--ティアラメンツ・メイルゥ
73956664
1
--ティアラメンツ・レイノハート
90953320
1
--
TG
ハイパー・ライブラリアン
91810826
1
--天盃龍チュンドラ
75433814
1
--
No
.
40
ギミック・パペット-ヘブンズ・ストリングス
17266660
1
--朱光の宣告者
06637331
1
--深淵の獣ドルイドヴルム
72656408
1
--深淵の獣バルドレイク
33854624
1
--深淵の獣マグナムート
80453041
1
--ファントム・オブ・ユベル
33396948
1
--封印されしエクゾディア
44519536
1
--封印されし者の左足
07902349
1
--封印されし者の左腕
...
...
@@ -132,6 +128,7 @@
70903634
1
--封印されし者の右腕
94689206
1
--ブロックドラゴン
24094258
1
--ヘビーメタルフォーゼ・エレクトラム
60764609
1
--魔を刻むデモンスミス
33508719
1
--メタモルポット
77103950
1
--壱世壊=ペルレイノ
33782437
1
--一時休戦
...
...
@@ -139,8 +136,10 @@
61292243
1
--
EMERGENCY
!
19613556
1
--大嵐
81439173
1
--おろかな埋葬
85106525
1
--篝火
84211599
1
--金満で謙虚な壺
23701465
1
--原初の種
45986603
1
--強奪
80845034
1
--“罪宝狩りの悪魔”
30336082
1
--盃満ちる燦幻荘
83764718
1
--死者蘇生
...
...
@@ -149,6 +148,7 @@
52340444
1
--閃刀機-ホーネットビット
32807846
1
--増援
72892473
1
--手札抹殺
98567237
1
--刻まれし魔の詠聖
73628505
1
--テラ・フォーミング
18144506
1
--ハーピィの羽根帚
21347668
1
--ピュアリィ・スリーピィメモリー
...
...
@@ -169,19 +169,14 @@
23002292
1
--レッド・リブート
#semi limit
40177746
2
--イーバ
02526224
2
--炎王神獣 キリン
81275020
2
--
SR
ベイゴマックス
82385847
2
--ダイナレスラー・パンクラトプス
04423206
2
--
M
.
X
-セイバー インヴォーカー
92746535
2
--竜剣士ラスター
P
75500286
2
--封印の黄金櫃
52947044
2
--フュージョン・デステニー
36637374
2
--烙印開幕
23434538
2
--増殖する
G
93729896
2
--ナイトメア・スローン
53334471
2
--御前試合
02526224
2
--炎王神獣 キリン
82385847
2
--ダイナレスラー・パンクラトプス
91800273
2
--ディメンション・アトラクター
09411399
2
--
D
-
HERO
ディアボリックガイ
04423206
2
--
M
.
X
-セイバー インヴォーカー
92746535
2
--竜剣士ラスター
P
65734501
2
--
R
-
ACE
エアホイスター
35726888
2
--おろかな副葬
67723438
2
--緊急テレポート
...
...
@@ -189,8 +184,13 @@
35261759
2
--強欲で貪欲な壺
48130397
2
--超融合
11110587
2
--隣の芝刈り
93729896
2
--ナイトメア・スローン
24224830
2
--墓穴の指名者
55584558
2
--ピュアリィ・デリシャスメモリー
75500286
2
--封印の黄金櫃
52947044
2
--フュージョン・デステニー
36637374
2
--烙印開幕
53334471
2
--御前試合
92714517
2
--ビッグウェルカム・ラビュリンス
!
2024
.
9
TCG
...
...
@@ -15644,4 +15644,4 @@
29401950
2
--奈落の落とし穴
15800838
2
--マインドクラッシュ
62279055
2
--魔法の筒
97077563
2
--リビングデッドの呼び声
\ No newline at end of file
97077563
2
--リビングデッドの呼び声
ocgcore
@
204eb0d8
Subproject commit
0cf488769f8da7385bf1abd1ed12aa0cf8c59266
Subproject commit
204eb0d8bdedd2ca0c0e473798a63735c8c8528d
premake/lua/premake5.lua
View file @
d3f66f6f
...
...
@@ -10,6 +10,9 @@ project "lua"
filter
"not action:vs*"
buildoptions
{
"-x c++"
}
filter
"configurations:Debug"
defines
{
"LUA_USE_APICHECK"
}
filter
"system:bsd"
defines
{
"LUA_USE_POSIX"
}
...
...
script
@
02cf8119
Subproject commit
489b2ba9f4cf78ffabadea0068667f14b2147488
Subproject commit
02cf811961c11c61f448e105c732a5369025f076
strings.conf
View file @
d3f66f6f
...
...
@@ -1246,3 +1246,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