Commit 2905dbdd authored by 水濑真白's avatar 水濑真白

Merge branch 'master' of git.moenext.com:nanahira/ygopro into develop

parents 8dfbb1f1 a794cfe2
name: Automated Test Build
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches: [ "master" ]
......@@ -120,7 +124,7 @@ jobs:
- name: Download miniaudio
if: matrix.audiolib == 'miniaudio'
run: |
git clone --depth=1 https://github.com/mercury233/miniaudio
git clone --depth=1 -b 0.11.23 https://github.com/mackron/miniaudio
cd miniaudio
xcopy /Y extras\miniaudio_split\miniaudio.* .
cd ..
......@@ -367,7 +371,7 @@ jobs:
- name: Download miniaudio
run: |
git clone --depth=1 https://github.com/mercury233/miniaudio
git clone --depth=1 -b 0.11.23 https://github.com/mackron/miniaudio
cd miniaudio
cp extras/miniaudio_split/miniaudio.* .
cd ..
......@@ -590,7 +594,7 @@ jobs:
- name: Download miniaudio
run: |
git clone --depth=1 https://github.com/mercury233/miniaudio
git clone --depth=1 -b 0.11.23 https://github.com/mackron/miniaudio
cd miniaudio
cp extras/miniaudio_split/miniaudio.* .
cd ..
......
No preview for this file type
......@@ -73,12 +73,12 @@ extern char** environ;
#include "../ocgcore/ocgapi.h"
template<size_t N, typename... TR>
inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR&&... args) {
return std::swprintf(buf, N, fmt, std::forward<TR>(args)...);
inline int myswprintf(wchar_t(&buf)[N], const wchar_t* fmt, TR... args) {
return std::swprintf(buf, N, fmt, args...);
}
template<size_t N, typename... TR>
inline int mysnprintf(char(&buf)[N], const char* fmt, TR&&... args) {
return std::snprintf(buf, N, fmt, std::forward<TR>(args)...);
inline int mysnprintf(char(&buf)[N], const char* fmt, TR... args) {
return std::snprintf(buf, N, fmt, args...);
}
inline FILE* mywfopen(const wchar_t* filename, const char* mode) {
......
......@@ -6,6 +6,9 @@ namespace ygo {
unsigned char DataManager::scriptBuffer[0x100000] = {};
DataManager dataManager;
static const char SELECT_STMT[] = "SELECT datas.id, datas.ot, datas.alias, datas.setcode, datas.type, datas.atk, datas.def, datas.level, datas.race, datas.attribute, datas.category,"
" texts.name, texts.desc, texts.str1, texts.str2, texts.str3, texts.str4, texts.str5, texts.str6, texts.str7, texts.str8,"
" texts.str9, texts.str10, texts.str11, texts.str12, texts.str13, texts.str14, texts.str15, texts.str16 FROM datas INNER JOIN texts ON datas.id = texts.id";
DataManager::DataManager() : _datas(32768), _strings(32768) {
extra_setcode = {
......@@ -15,8 +18,7 @@ DataManager::DataManager() : _datas(32768), _strings(32768) {
}
bool DataManager::ReadDB(sqlite3* pDB) {
sqlite3_stmt* pStmt = nullptr;
const char* sql = "select * from datas,texts where datas.id=texts.id";
if (sqlite3_prepare_v2(pDB, sql, -1, &pStmt, nullptr) != SQLITE_OK)
if (sqlite3_prepare_v2(pDB, SELECT_STMT, -1, &pStmt, nullptr) != SQLITE_OK)
return Error(pDB, pStmt);
wchar_t strBuffer[4096];
for (int step = sqlite3_step(pStmt); step != SQLITE_DONE; step = sqlite3_step(pStmt)) {
......@@ -46,17 +48,16 @@ bool DataManager::ReadDB(sqlite3* pDB) {
cd.attribute = static_cast<decltype(cd.attribute)>(sqlite3_column_int64(pStmt, 9));
cd.category = static_cast<decltype(cd.category)>(sqlite3_column_int64(pStmt, 10));
auto& cs = _strings[code];
if (const char* text = (const char*)sqlite3_column_text(pStmt, 12)) {
if (const char* text = (const char*)sqlite3_column_text(pStmt, 11)) {
BufferIO::DecodeUTF8(text, strBuffer);
cs.name = strBuffer;
}
if (const char* text = (const char*)sqlite3_column_text(pStmt, 13)) {
if (const char* text = (const char*)sqlite3_column_text(pStmt, 12)) {
BufferIO::DecodeUTF8(text, strBuffer);
cs.text = strBuffer;
}
constexpr int desc_count = sizeof cs.desc / sizeof cs.desc[0];
for (int i = 0; i < desc_count; ++i) {
if (const char* text = (const char*)sqlite3_column_text(pStmt, i + 14)) {
for (int i = 0; i < DESC_COUNT; ++i) {
if (const char* text = (const char*)sqlite3_column_text(pStmt, 13 + i)) {
BufferIO::DecodeUTF8(text, strBuffer);
cs.desc[i] = strBuffer;
}
......
......@@ -19,7 +19,7 @@ namespace ygo {
constexpr int MAX_STRING_ID = 0x7ff;
constexpr uint32_t MIN_CARD_ID = (uint32_t)(MAX_STRING_ID + 1) >> 4;
constexpr uint32_t MAX_CARD_ID = 0x0fffffffU;
using CardData = card_data;
struct CardDataC {
uint32_t code{};
......@@ -49,10 +49,11 @@ struct CardDataC {
return false;
}
};
constexpr int DESC_COUNT = 16;
struct CardString {
std::wstring name;
std::wstring text;
std::wstring desc[16];
std::wstring desc[DESC_COUNT];
};
using code_pointer = std::unordered_map<uint32_t, CardDataC>::const_iterator;
using string_pointer = std::unordered_map<uint32_t, CardString>::const_iterator;
......
......@@ -1954,15 +1954,17 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
}
return valid;
};
auto limitcode_has_credit = filterList->credits.find(limitcode) != filterList->credits.end();
auto handle_card = [&](ygo::code_pointer& card) {
if (card->first == limitcode || card->second.alias == limitcode) {
limit--;
if(limit <= 0)
if(limit < 0)
return false;
}
if(!limitcode_has_credit)
return true;
auto code = card->second.alias ? card->second.alias : card->first;
spend_credit(code);
return true;
return spend_credit(code);
};
for (auto& card : deckManager.current_deck.main) {
if(!handle_card(card))
......@@ -1976,6 +1978,6 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
if(!handle_card(card))
return false;
}
return spend_credit(limitcode);
return handle_card(pointer);
}
}
......@@ -216,7 +216,7 @@ bool Game::Initialize() {
SetWindowsIcon();
//main menu
wchar_t strbuf[256];
myswprintf(strbuf, L"KoishiPro %X.0%X.%X Synthetic", (PRO_VERSION & 0xf000U) >> 12, (PRO_VERSION & 0x0ff0U) >> 4, PRO_VERSION & 0x000fU);
myswprintf(strbuf, L"KoishiPro %X.0%X.%X Loschen", (PRO_VERSION & 0xf000U) >> 12, (PRO_VERSION & 0x0ff0U) >> 4, PRO_VERSION & 0x000fU);
wMainMenu = env->addWindow(irr::core::rect<irr::s32>(370, 200, 650, 415), false, strbuf);
wMainMenu->getCloseButton()->setVisible(false);
btnLanMode = env->addButton(irr::core::rect<irr::s32>(10, 30, 270, 60), wMainMenu, BUTTON_LAN_MODE, dataManager.GetSysString(1200));
......
This diff is collapsed.
......@@ -16,8 +16,8 @@ VALUE "InternalName", "KoishiPro"
VALUE "LegalCopyright", "Copyright (C) 2023 Nanahira"
VALUE "OriginalFilename", "ygopro.exe"
VALUE "ProductName", "KoishiPro"
VALUE "FileVersion", "Synthetic"
VALUE "ProductVersion", "Synthetic"
VALUE "FileVersion", "Loschen"
VALUE "ProductVersion", "Loschen"
END
END
BLOCK "VarFileInfo"
......
......@@ -1286,3 +1286,4 @@
!setname 0x1d7 艾克莉西娅 エクレシア
!setname 0x1d8 耀圣 エルフェンノーツ
!setname 0x1d9 磁力 マグネット
!setname 0x1da 世界末日 エンド・オブ・ザ・ワールド
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