Commit d3f66f6f authored by nanahira's avatar nanahira

Merge branch 'master' into server

parents 61896bf8 f7608e9b
Pipeline #30080 passed with stages
in 4 minutes and 22 seconds
No preview for this file type
...@@ -6,40 +6,36 @@ ...@@ -6,40 +6,36 @@
class BufferIO { class BufferIO {
public: public:
inline static int ReadInt32(unsigned char*& p) { static int ReadInt32(unsigned char*& p) {
return buffer_read<int32_t>(p); return buffer_read<int32_t>(p);
} }
inline static unsigned int ReadUInt32(unsigned char*& p) { static unsigned int ReadUInt32(unsigned char*& p) {
unsigned int ret = *(unsigned int*)p; return buffer_read<uint32_t>(p);
p += 4;
return ret;
} }
inline static short ReadInt16(unsigned char*& p) { static short ReadInt16(unsigned char*& p) {
return buffer_read<int16_t>(p); return buffer_read<int16_t>(p);
} }
inline static unsigned short ReadUInt16(unsigned char*& p) { static unsigned short ReadUInt16(unsigned char*& p) {
unsigned short ret = *(unsigned short*)p; return buffer_read<uint16_t>(p);
p += 2;
return ret;
} }
inline static char ReadInt8(unsigned char*& p) { static char ReadInt8(unsigned char*& p) {
return buffer_read<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); 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); 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); 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); buffer_write<char>(p, val);
} }
// return: string length // return: string length
template<typename T1, typename T2> 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; int l = 0;
while(src[l] && l < bufsize - 1) { while(src[l] && l < bufsize - 1) {
pstr[l] = (T2)src[l]; pstr[l] = (T2)src[l];
...@@ -49,7 +45,7 @@ public: ...@@ -49,7 +45,7 @@ public:
return l; return l;
} }
template<typename T1, typename T2> 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; int l = 0;
while(src[l] && l < bufsize - 1) { while(src[l] && l < bufsize - 1) {
pstr[l] = (T2)src[l]; pstr[l] = (T2)src[l];
...@@ -59,22 +55,117 @@ public: ...@@ -59,22 +55,117 @@ public:
*pstr = 0; *pstr = 0;
return l; 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 // UTF-16/UTF-32 to UTF-8
// return: string length // return: string length
static int EncodeUTF8String(const wchar_t* wsrc, char* str, int size) { static int EncodeUTF8String(const wchar_t* wsrc, char* str, int size) {
char* pstr = str; auto pw = wsrc;
while (*wsrc != 0) { auto pstr = str;
unsigned cur = *wsrc; while (*pw != 0) {
unsigned cur = 0;
int codepoint_size = 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) if (cur < 0x80U)
codepoint_size = 1; codepoint_size = 1;
else if (cur < 0x800U) else if (cur < 0x800U)
codepoint_size = 2; codepoint_size = 2;
else if (cur < 0x10000U && (cur < 0xd800U || cur > 0xdfffU)) else if (cur < 0x10000U)
codepoint_size = 3; codepoint_size = 3;
else else
codepoint_size = 4; codepoint_size = 4;
if (pstr - str + codepoint_size > size - 1) if ((int)(pstr - str) + codepoint_size > size - 1)
break; break;
switch (codepoint_size) { switch (codepoint_size) {
case 1: case 1:
...@@ -90,13 +181,6 @@ public: ...@@ -90,13 +181,6 @@ public:
pstr[2] = (cur & 0x3f) | 0x80; pstr[2] = (cur & 0x3f) | 0x80;
break; break;
case 4: 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[0] = ((cur >> 18) & 0x7) | 0xf0;
pstr[1] = ((cur >> 12) & 0x3f) | 0x80; pstr[1] = ((cur >> 12) & 0x3f) | 0x80;
pstr[2] = ((cur >> 6) & 0x3f) | 0x80; pstr[2] = ((cur >> 6) & 0x3f) | 0x80;
...@@ -106,10 +190,9 @@ public: ...@@ -106,10 +190,9 @@ public:
break; break;
} }
pstr += codepoint_size; pstr += codepoint_size;
wsrc++;
} }
*pstr = 0; *pstr = 0;
return pstr - str; return (int)(pstr - str);
} }
// UTF-8 to UTF-16/UTF-32 // UTF-8 to UTF-16/UTF-32
// return: string length // return: string length
...@@ -117,9 +200,11 @@ public: ...@@ -117,9 +200,11 @@ public:
const char* p = src; const char* p = src;
wchar_t* wp = wstr; wchar_t* wp = wstr;
while(*p != 0) { while(*p != 0) {
const unsigned cur = *p & 0xffU; unsigned int cur = ConvertUTF8(p);
int codepoint_size = 0; int codepoint_size = 0;
if ((cur & 0xf8) == 0xf0) { if (!IsUnicodeChar(cur))
continue;
if (cur >= 0x10000) {
if (sizeof(wchar_t) == 2) if (sizeof(wchar_t) == 2)
codepoint_size = 2; codepoint_size = 2;
else else
...@@ -127,31 +212,19 @@ public: ...@@ -127,31 +212,19 @@ public:
} }
else else
codepoint_size = 1; codepoint_size = 1;
if (wp - wstr + codepoint_size > size - 1) if ((int)(wp - wstr) + codepoint_size > size - 1)
break; break;
if((cur & 0x80) == 0) { if (codepoint_size == 1) {
*wp = *p; wp[0] = cur;
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++; wp++;
} }
else {
cur -= 0x10000U;
wp[0] = (cur >> 10) | 0xd800;
wp[1] = (cur & 0x3ff) | 0xdc00;
wp += 2;
}
}
*wp = 0; *wp = 0;
return wp - wstr; return wp - wstr;
} }
......
...@@ -63,6 +63,20 @@ inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) { ...@@ -63,6 +63,20 @@ inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
#include "../ocgcore/ocgapi.h" #include "../ocgcore/ocgapi.h"
#include "../ocgcore/common.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 #ifndef YGOPRO_SERVER_MODE
#include <irrlicht.h> #include <irrlicht.h>
using namespace irr; using namespace irr;
......
...@@ -1391,6 +1391,7 @@ void DeckBuilder::FilterCards() { ...@@ -1391,6 +1391,7 @@ void DeckBuilder::FilterCards() {
element_t(): type(type_t::all), exclude(false) {} element_t(): type(type_t::all), exclude(false) {}
}; };
const wchar_t* pstr = mainGame->ebCardName->getText(); const wchar_t* pstr = mainGame->ebCardName->getText();
int trycode = BufferIO::GetVal(pstr);
std::wstring str = std::wstring(pstr); std::wstring str = std::wstring(pstr);
std::vector<element_t> query_elements; std::vector<element_t> query_elements;
if(mainGame->gameConf.search_multiple_keywords) { if(mainGame->gameConf.search_multiple_keywords) {
...@@ -1535,17 +1536,13 @@ void DeckBuilder::FilterCards() { ...@@ -1535,17 +1536,13 @@ void DeckBuilder::FilterCards() {
match = CardNameContains(text.name.c_str(), elements_iterator->keyword.c_str()); match = CardNameContains(text.name.c_str(), elements_iterator->keyword.c_str());
} else if (elements_iterator->type == element_t::type_t::setcode) { } else if (elements_iterator->type == element_t::type_t::setcode) {
match = data.is_setcodes(elements_iterator->setcodes); match = data.is_setcodes(elements_iterator->setcodes);
} else if (trycode && (data.code == trycode || data.alias == trycode && data.is_alternative())){
match = true;
} else { } 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()) match = CardNameContains(text.name.c_str(), elements_iterator->keyword.c_str())
|| text.text.find(elements_iterator->keyword) != std::wstring::npos || text.text.find(elements_iterator->keyword) != std::wstring::npos
|| mainGame->CheckRegEx(text.text, elements_iterator->keyword) || mainGame->CheckRegEx(text.text, elements_iterator->keyword)
|| data.is_setcodes(elements_iterator->setcodes); || data.is_setcodes(elements_iterator->setcodes);
} else {
match = data.code == trycode || data.alias == trycode;
}
} }
if(elements_iterator->exclude) if(elements_iterator->exclude)
match = !match; match = !match;
......
...@@ -278,15 +278,9 @@ void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, ...@@ -278,15 +278,9 @@ void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory,
} }
} }
FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) { FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) {
#ifdef WIN32 char fullname[256]{};
wchar_t wmode[20]{}; BufferIO::EncodeUTF8(file, fullname);
BufferIO::CopyWStr(mode, wmode, sizeof wmode / sizeof wmode[0]); FILE* fp = myfopen(fullname, mode);
FILE* fp = _wfopen(file, wmode);
#else
char file2[256];
BufferIO::EncodeUTF8(file, file2);
FILE* fp = fopen(file2, mode);
#endif
return fp; return fp;
} }
IReadFile* DeckManager::OpenDeckReader(const wchar_t* file) { IReadFile* DeckManager::OpenDeckReader(const wchar_t* file) {
......
...@@ -279,7 +279,7 @@ bool Game::Initialize() { ...@@ -279,7 +279,7 @@ bool Game::Initialize() {
SetWindowsIcon(); SetWindowsIcon();
//main menu //main menu
wchar_t strbuf[256]; 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 = env->addWindow(rect<s32>(370, 200, 650, 415), false, strbuf);
wMainMenu->getCloseButton()->setVisible(false); wMainMenu->getCloseButton()->setVisible(false);
btnLanMode = env->addButton(rect<s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200)); btnLanMode = env->addButton(rect<s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200));
......
...@@ -558,14 +558,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -558,14 +558,9 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
const wchar_t* name = mainGame->lstSinglePlayList->getListItem(sel); const wchar_t* name = mainGame->lstSinglePlayList->getListItem(sel);
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./single/%ls", name); myswprintf(fname, L"./single/%ls", name);
FILE *fp; char fullname[256]{};
#ifdef _WIN32 BufferIO::EncodeUTF8(fname, fullname);
fp = _wfopen(fname, L"rb"); FILE* fp = myfopen(fullname, "rb");
#else
char filename[256];
BufferIO::EncodeUTF8(fname, filename);
fp = fopen(filename, "rb");
#endif
if(!fp) { if(!fp) {
mainGame->stSinglePlayInfo->setText(L""); mainGame->stSinglePlayInfo->setText(L"");
break; break;
......
...@@ -147,39 +147,26 @@ void Replay::SaveReplay(const wchar_t* name) { ...@@ -147,39 +147,26 @@ void Replay::SaveReplay(const wchar_t* name) {
return; return;
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./replay/%ls.yrp", name); myswprintf(fname, L"./replay/%ls.yrp", name);
#ifdef WIN32 char fullname[256]{};
fp = _wfopen(fname, L"wb"); BufferIO::EncodeUTF8(fname, fullname);
#else FILE* rfp = myfopen(fullname, "wb");
char fname2[256]; if(!rfp)
BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "wb");
#endif
if(!fp)
return; return;
fwrite(&pheader, sizeof(pheader), 1, fp); fwrite(&pheader, sizeof pheader, 1, rfp);
fwrite(comp_data, comp_size, 1, fp); fwrite(comp_data, comp_size, 1, rfp);
fclose(fp); fclose(rfp);
} }
bool Replay::OpenReplay(const wchar_t* name) { bool Replay::OpenReplay(const wchar_t* name) {
#ifdef WIN32 char fullname[256]{};
fp = _wfopen(name, L"rb"); BufferIO::EncodeUTF8(name, fullname);
#else FILE* rfp = myfopen(fullname, "rb");
char name2[256]; if(!rfp) {
BufferIO::EncodeUTF8(name, name2);
fp = fopen(name2, "rb");
#endif
if(!fp) {
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./replay/%ls", name); myswprintf(fname, L"./replay/%ls", name);
#ifdef WIN32 BufferIO::EncodeUTF8(fname, fullname);
fp = _wfopen(fname, L"rb"); rfp = myfopen(fullname, "rb");
#else
char fname2[256];
BufferIO::EncodeUTF8(fname, fname2);
fp = fopen(fname2, "rb");
#endif
} }
if(!fp) if(!rfp)
return false; return false;
pdata = replay_data; pdata = replay_data;
...@@ -187,13 +174,13 @@ bool Replay::OpenReplay(const wchar_t* name) { ...@@ -187,13 +174,13 @@ bool Replay::OpenReplay(const wchar_t* name) {
is_replaying = false; is_replaying = false;
replay_size = 0; replay_size = 0;
comp_size = 0; comp_size = 0;
if(fread(&pheader, sizeof(pheader), 1, fp) < 1) { if(fread(&pheader, sizeof pheader, 1, rfp) < 1) {
fclose(fp); fclose(rfp);
return false; return false;
} }
if(pheader.flag & REPLAY_COMPRESSED) { if(pheader.flag & REPLAY_COMPRESSED) {
comp_size = fread(comp_data, 1, MAX_COMP_SIZE, fp); comp_size = fread(comp_data, 1, MAX_COMP_SIZE, rfp);
fclose(fp); fclose(rfp);
if ((int)pheader.datasize < 0 && (int)pheader.datasize > MAX_REPLAY_SIZE) if ((int)pheader.datasize < 0 && (int)pheader.datasize > MAX_REPLAY_SIZE)
return false; return false;
replay_size = pheader.datasize; replay_size = pheader.datasize;
...@@ -204,8 +191,8 @@ bool Replay::OpenReplay(const wchar_t* name) { ...@@ -204,8 +191,8 @@ bool Replay::OpenReplay(const wchar_t* name) {
return false; return false;
} }
} else { } else {
replay_size = fread(replay_data, 1, MAX_REPLAY_SIZE, fp); replay_size = fread(replay_data, 1, MAX_REPLAY_SIZE, rfp);
fclose(fp); fclose(rfp);
comp_size = 0; comp_size = 0;
} }
is_replaying = true; is_replaying = true;
...@@ -214,24 +201,20 @@ bool Replay::OpenReplay(const wchar_t* name) { ...@@ -214,24 +201,20 @@ bool Replay::OpenReplay(const wchar_t* name) {
bool Replay::CheckReplay(const wchar_t* name) { bool Replay::CheckReplay(const wchar_t* name) {
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./replay/%ls", name); myswprintf(fname, L"./replay/%ls", name);
#ifdef WIN32 char fullname[256]{};
FILE* rfp = _wfopen(fname, L"rb"); BufferIO::EncodeUTF8(fname, fullname);
#else FILE* rfp = myfopen(fullname, "rb");
char fname2[256];
BufferIO::EncodeUTF8(fname, fname2);
FILE* rfp = fopen(fname2, "rb");
#endif
if(!rfp) if(!rfp)
return false; return false;
ReplayHeader rheader; ReplayHeader rheader;
size_t count = fread(&rheader, sizeof(ReplayHeader), 1, rfp); size_t count = fread(&rheader, sizeof rheader, 1, rfp);
fclose(rfp); fclose(rfp);
return count == 1 && rheader.id == 0x31707279 && rheader.version >= 0x12d0u && (rheader.version < 0x1353u || (rheader.flag & REPLAY_UNIFORM)); return count == 1 && rheader.id == 0x31707279 && rheader.version >= 0x12d0u && (rheader.version < 0x1353u || (rheader.flag & REPLAY_UNIFORM));
} }
bool Replay::DeleteReplay(const wchar_t* name) { bool Replay::DeleteReplay(const wchar_t* name) {
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./replay/%ls", name); myswprintf(fname, L"./replay/%ls", name);
#ifdef WIN32 #ifdef _WIN32
BOOL result = DeleteFileW(fname); BOOL result = DeleteFileW(fname);
return !!result; return !!result;
#else #else
...@@ -246,7 +229,7 @@ bool Replay::RenameReplay(const wchar_t* oldname, const wchar_t* newname) { ...@@ -246,7 +229,7 @@ bool Replay::RenameReplay(const wchar_t* oldname, const wchar_t* newname) {
wchar_t newfname[256]; wchar_t newfname[256];
myswprintf(oldfname, L"./replay/%ls", oldname); myswprintf(oldfname, L"./replay/%ls", oldname);
myswprintf(newfname, L"./replay/%ls", newname); myswprintf(newfname, L"./replay/%ls", newname);
#ifdef WIN32 #ifdef _WIN32
BOOL result = MoveFileW(oldfname, newfname); BOOL result = MoveFileW(oldfname, newfname);
return !!result; return !!result;
#else #else
......
#[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][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 !2024.10
#forbidden #forbidden
27552504 0 --永遠の淑女 ベアトリーチェ
91869203 0 --アマゾネスの射手 91869203 0 --アマゾネスの射手
20663556 0 --イレカエル 20663556 0 --イレカエル
44910027 0 --ヴィクトリー・ドラゴン 44910027 0 --ヴィクトリー・ドラゴン
27552504 0 --永遠の淑女 ベアトリーチェ
51858306 0 --エクリプス・ワイバーン 51858306 0 --エクリプス・ワイバーン
62242678 0 --琰魔竜王 レッド・デーモン・カラミティ 62242678 0 --琰魔竜王 レッド・デーモン・カラミティ
34945480 0 --外神アザトート 34945480 0 --外神アザトート
...@@ -86,45 +86,41 @@ ...@@ -86,45 +86,41 @@
17178486 0 --ライフチェンジャー 17178486 0 --ライフチェンジャー
28566710 0 --ラストバトル! 28566710 0 --ラストバトル!
#limit #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 --アストログラフ・マジシャン 76794549 1 --アストログラフ・マジシャン
29301450 1 --SPリトルナイト 29301450 1 --SPリトルナイト
17330916 1 --EMモンキーボード 17330916 1 --EMモンキーボード
68304193 1 --クシャトリラ・ユニコーン 68304193 1 --クシャトリラ・ユニコーン
12289247 1 --クロノグラフ・マジシャン 12289247 1 --クロノグラフ・マジシャン
72270339 1 --黒魔女ディアベルスター
99937011 1 --剣神官ムドラ 99937011 1 --剣神官ムドラ
38814750 1 --PSYフレームギア・γ 38814750 1 --PSYフレームギア・γ
74586817 1 --PSYフレームロード・Ω 74586817 1 --PSYフレームロード・Ω
32731036 1 --深淵の獣ルベリオン 32731036 1 --深淵の獣ルベリオン
36521307 1 --斬機サーキュラー 36521307 1 --斬機サーキュラー
48905153 1 --十二獣ドランシア
78872731 1 --十二獣モルモラット 78872731 1 --十二獣モルモラット
06602300 1 --重爆撃禽 ボム・フェネクス 06602300 1 --重爆撃禽 ボム・フェネクス
63542003 1 --宿神像ケルドウ 63542003 1 --宿神像ケルドウ
21377582 1 --真竜剣皇マスターP
09674034 1 --スネークアイ・エクセル 09674034 1 --スネークアイ・エクセル
90241276 1 --蛇眼の炎燐
13533678 1 --スプライト・ジェット 13533678 1 --スプライト・ジェット
76145933 1 --スプライト・ブルー 76145933 1 --スプライト・ブルー
90361010 1 --超重武者装留イワトオシ 90361010 1 --超重武者装留イワトオシ
37818794 1 --超魔導竜騎士-ドラグーン・オブ・レッドアイズ
04928565 1 --ティアラメンツ・クシャトリラ 04928565 1 --ティアラメンツ・クシャトリラ
00572850 1 --ティアラメンツ・シェイレーン 00572850 1 --ティアラメンツ・シェイレーン
37961969 1 --ティアラメンツ・ハゥフニス 37961969 1 --ティアラメンツ・ハゥフニス
74078255 1 --ティアラメンツ・メイルゥ 74078255 1 --ティアラメンツ・メイルゥ
73956664 1 --ティアラメンツ・レイノハート 73956664 1 --ティアラメンツ・レイノハート
90953320 1 --TG ハイパー・ライブラリアン 90953320 1 --TG ハイパー・ライブラリアン
91810826 1 --天盃龍チュンドラ
75433814 1 --No.40 ギミック・パペット-ヘブンズ・ストリングス 75433814 1 --No.40 ギミック・パペット-ヘブンズ・ストリングス
17266660 1 --朱光の宣告者 17266660 1 --朱光の宣告者
06637331 1 --深淵の獣ドルイドヴルム 06637331 1 --深淵の獣ドルイドヴルム
72656408 1 --深淵の獣バルドレイク 72656408 1 --深淵の獣バルドレイク
33854624 1 --深淵の獣マグナムート 33854624 1 --深淵の獣マグナムート
80453041 1 --ファントム・オブ・ユベル
33396948 1 --封印されしエクゾディア 33396948 1 --封印されしエクゾディア
44519536 1 --封印されし者の左足 44519536 1 --封印されし者の左足
07902349 1 --封印されし者の左腕 07902349 1 --封印されし者の左腕
...@@ -132,6 +128,7 @@ ...@@ -132,6 +128,7 @@
70903634 1 --封印されし者の右腕 70903634 1 --封印されし者の右腕
94689206 1 --ブロックドラゴン 94689206 1 --ブロックドラゴン
24094258 1 --ヘビーメタルフォーゼ・エレクトラム 24094258 1 --ヘビーメタルフォーゼ・エレクトラム
60764609 1 --魔を刻むデモンスミス
33508719 1 --メタモルポット 33508719 1 --メタモルポット
77103950 1 --壱世壊=ペルレイノ 77103950 1 --壱世壊=ペルレイノ
33782437 1 --一時休戦 33782437 1 --一時休戦
...@@ -139,8 +136,10 @@ ...@@ -139,8 +136,10 @@
61292243 1 --EMERGENCY 61292243 1 --EMERGENCY
19613556 1 --大嵐 19613556 1 --大嵐
81439173 1 --おろかな埋葬 81439173 1 --おろかな埋葬
85106525 1 --篝火
84211599 1 --金満で謙虚な壺 84211599 1 --金満で謙虚な壺
23701465 1 --原初の種 23701465 1 --原初の種
45986603 1 --強奪
80845034 1 --“罪宝狩りの悪魔” 80845034 1 --“罪宝狩りの悪魔”
30336082 1 --盃満ちる燦幻荘 30336082 1 --盃満ちる燦幻荘
83764718 1 --死者蘇生 83764718 1 --死者蘇生
...@@ -149,6 +148,7 @@ ...@@ -149,6 +148,7 @@
52340444 1 --閃刀機-ホーネットビット 52340444 1 --閃刀機-ホーネットビット
32807846 1 --増援 32807846 1 --増援
72892473 1 --手札抹殺 72892473 1 --手札抹殺
98567237 1 --刻まれし魔の詠聖
73628505 1 --テラ・フォーミング 73628505 1 --テラ・フォーミング
18144506 1 --ハーピィの羽根帚 18144506 1 --ハーピィの羽根帚
21347668 1 --ピュアリィ・スリーピィメモリー 21347668 1 --ピュアリィ・スリーピィメモリー
...@@ -169,19 +169,14 @@ ...@@ -169,19 +169,14 @@
23002292 1 --レッド・リブート 23002292 1 --レッド・リブート
#semi limit #semi limit
40177746 2 --イーバ 40177746 2 --イーバ
02526224 2 --炎王神獣 キリン
81275020 2 --SRベイゴマックス 81275020 2 --SRベイゴマックス
82385847 2 --ダイナレスラー・パンクラトプス
04423206 2 --M.X-セイバー インヴォーカー
92746535 2 --竜剣士ラスターP
75500286 2 --封印の黄金櫃
52947044 2 --フュージョン・デステニー
36637374 2 --烙印開幕
23434538 2 --増殖するG 23434538 2 --増殖するG
93729896 2 --ナイトメア・スローン 82385847 2 --ダイナレスラー・パンクラトプス
53334471 2 --御前試合
02526224 2 --炎王神獣 キリン
91800273 2 --ディメンション・アトラクター 91800273 2 --ディメンション・アトラクター
09411399 2 --D-HERO ディアボリックガイ 09411399 2 --D-HERO ディアボリックガイ
04423206 2 --M.X-セイバー インヴォーカー
92746535 2 --竜剣士ラスターP
65734501 2 --RACEエアホイスター 65734501 2 --RACEエアホイスター
35726888 2 --おろかな副葬 35726888 2 --おろかな副葬
67723438 2 --緊急テレポート 67723438 2 --緊急テレポート
...@@ -189,8 +184,13 @@ ...@@ -189,8 +184,13 @@
35261759 2 --強欲で貪欲な壺 35261759 2 --強欲で貪欲な壺
48130397 2 --超融合 48130397 2 --超融合
11110587 2 --隣の芝刈り 11110587 2 --隣の芝刈り
93729896 2 --ナイトメア・スローン
24224830 2 --墓穴の指名者 24224830 2 --墓穴の指名者
55584558 2 --ピュアリィ・デリシャスメモリー 55584558 2 --ピュアリィ・デリシャスメモリー
75500286 2 --封印の黄金櫃
52947044 2 --フュージョン・デステニー
36637374 2 --烙印開幕
53334471 2 --御前試合
92714517 2 --ビッグウェルカム・ラビュリンス 92714517 2 --ビッグウェルカム・ラビュリンス
!2024.9 TCG !2024.9 TCG
......
Subproject commit 0cf488769f8da7385bf1abd1ed12aa0cf8c59266 Subproject commit 204eb0d8bdedd2ca0c0e473798a63735c8c8528d
...@@ -10,6 +10,9 @@ project "lua" ...@@ -10,6 +10,9 @@ project "lua"
filter "not action:vs*" filter "not action:vs*"
buildoptions { "-x c++" } buildoptions { "-x c++" }
filter "configurations:Debug"
defines { "LUA_USE_APICHECK" }
filter "system:bsd" filter "system:bsd"
defines { "LUA_USE_POSIX" } defines { "LUA_USE_POSIX" }
......
Subproject commit 489b2ba9f4cf78ffabadea0068667f14b2147488 Subproject commit 02cf811961c11c61f448e105c732a5369025f076
...@@ -1246,3 +1246,6 @@ ...@@ -1246,3 +1246,6 @@
!setname 0x1bb 魔瞳 モルガナイト !setname 0x1bb 魔瞳 モルガナイト
!setname 0x1bc 蓟花 アザミナ !setname 0x1bc 蓟花 アザミナ
!setname 0x1bd 祝台 !setname 0x1bd 祝台
!setname 0x1be 雷火沸动 ライゼオル
!setname 0x1bf 码丽丝 MLICE
!setname 0x1c0 龙华 竜華
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment