Commit 13b065c9 authored by nanahira's avatar nanahira

Merge branch 'master' into another

parents bedbbd0c 6980d7aa
......@@ -59,9 +59,10 @@ script:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./premake5 gmake --cc=clang; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./premake5 gmake; fi
- cd build
- make config=release ygopro -j4
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make config=release ygopro -j4; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make config=debug ygopro -j4; fi
- cd ..
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then mv -f bin/release/ygopro ./; strip ygopro;
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then mv -f bin/debug/ygopro ./; strip ygopro;
fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
mkdir -p ygopro.app/Contents/MacOS;
......
No preview for this file type
......@@ -383,6 +383,7 @@ void ClientField::ClearChainSelect() {
(*cit)->is_selected = false;
}
conti_cards.clear();
deck_act = false;
grave_act = false;
remove_act = false;
extra_act = false;
......@@ -407,7 +408,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
else if(conti_selecting)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardSelect[i], selectable_cards[i]->chain_code));
else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0], rect<s32>(0, 0, CARD_IMG_WIDTH, CARD_IMG_HEIGHT));
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true);
......@@ -493,7 +494,7 @@ void ClientField::ShowChainCard() {
if(selectable_cards[i]->code)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardSelect[i], selectable_cards[i]->code));
else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0], rect<s32>(0, 0, CARD_IMG_WIDTH, CARD_IMG_HEIGHT));
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true);
......@@ -548,7 +549,7 @@ void ClientField::ShowLocationCard() {
if(display_cards[i]->code)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardDisplay[i], display_cards[i]->code));
else
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0], rect<s32>(0, 0, CARD_IMG_WIDTH, CARD_IMG_HEIGHT));
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardDisplay[i]->setPressed(false);
mainGame->btnCardDisplay[i]->setVisible(true);
......
......@@ -819,15 +819,6 @@ void DeckBuilder::StartFilter() {
void DeckBuilder::FilterCards() {
results.clear();
const wchar_t* pstr = mainGame->ebCardName->getText();
int trycode = BufferIO::GetVal(pstr);
if(dataManager.GetData(trycode, 0)) {
auto ptr = dataManager.GetCodePointer(trycode); // verified by GetData()
results.push_back(ptr);
mainGame->scrFilter->setVisible(false);
mainGame->scrFilter->setPos(0);
myswprintf(result_string, L"%d", results.size());
return;
}
std::wstring str = std::wstring(pstr);
std::vector<std::wstring> query_elements;
std::vector<std::vector<std::wstring>::iterator> query_elements_track;
......@@ -856,6 +847,13 @@ void DeckBuilder::FilterCards() {
}
for(auto elements_track_iterator = query_elements_track.begin(); elements_track_iterator != query_elements_track.end(); elements_track_iterator++)
query_elements.erase(*elements_track_iterator);
unsigned int set_code = 0;
if(pstr[0] == L'@')
set_code = dataManager.GetSetCode(&pstr[1]);
else
set_code = dataManager.GetSetCode(&pstr[0]);
if(pstr[0] == 0 || (pstr[0] == L'$' && pstr[1] == 0) || (pstr[0] == L'@' && pstr[1] == 0))
pstr = 0;
auto strpointer = dataManager._strings.begin();
for(code_pointer ptr = dataManager._datas.begin(); ptr != dataManager._datas.end(); ++ptr, ++strpointer) {
const CardDataC& data = ptr->second;
......@@ -944,11 +942,18 @@ void DeckBuilder::FilterCards() {
break;
}
} else {
if(!CardNameContains(text.name.c_str(), elements_iterator->c_str()) && text.text.find(elements_iterator->c_str()) == std::wstring::npos
int trycode = BufferIO::GetVal(elements_iterator->c_str());
bool tryresult = dataManager.GetData(trycode, 0);
if(!tryresult && !CardNameContains(text.name.c_str(), elements_iterator->c_str()) && text.text.find(elements_iterator->c_str()) == std::wstring::npos
&& (!set_code_map[*elements_iterator] || !check_set_code(data, set_code_map[*elements_iterator]))) {
is_target = false;
break;
}
if(tryresult && data.code != trycode
&& !(data.alias == trycode && (data.alias - data.code < CARD_ARTWORK_VERSIONS_OFFSET || data.code - data.alias < CARD_ARTWORK_VERSIONS_OFFSET))) {
is_target = false;
break;
}
}
}
if(is_target)
......
......@@ -929,7 +929,6 @@ void Game::DrawSpec() {
break;
}
auto pos = lpcFont->getDimension(lstr);
//int offset = pos.Width / 2;
if(showcardp < 10) {
int alpha = (showcardp * 25) << 24;
DrawShadowText(lpcFont, lstr, ResizeElem(650 - pos.Width / 2 - (9 - showcardp) * 40, 290, 950, 370), Resize(-1, -1, 0, 0), alpha | 0xffffff, alpha);
......
......@@ -1056,7 +1056,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
break;
}
//playing custom bgm
case HINT_MUSIC: {
case 11: { //HINT_MUSIC
char BGMName[1024];
if (data) {
myswprintf(textBuffer, L"./sound/BGM/custom/%ls.mp3", dataManager.GetDesc(data));
......@@ -1068,7 +1068,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
break;
}
//playing custom sound effect
case HINT_SOUND: {
case 12: { //HINT_SOUND
char SoundName[1024];
if (data) {
myswprintf(textBuffer, L"./sound/custom/%ls.wav", dataManager.GetDesc(data));
......@@ -1080,7 +1080,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
break;
}
//playing custom bgm in ogg format
case HINT_MUSIC_OGG: {
case 13: { //HINT_MUSIC_OGG
char BGMName[1024];
if (data) {
myswprintf(textBuffer, L"./sound/BGM/custom/%ls.ogg", dataManager.GetDesc(data));
......@@ -1640,7 +1640,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
pcard->cmdFlag |= COMMAND_RESET;
else
pcard->cmdFlag |= COMMAND_ACTIVATE;
if(l == LOCATION_GRAVE)
if(pcard->location == LOCATION_DECK) {
pcard->SetCode(code);
mainGame->dField.deck_act = true;
} else if(l == LOCATION_GRAVE)
mainGame->dField.grave_act = true;
else if(l == LOCATION_REMOVED)
mainGame->dField.remove_act = true;
......
......@@ -143,6 +143,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->ShowElement(mainGame->wSinglePlay);
else
mainGame->ShowElement(mainGame->wLanWindow);
if(exit_on_return)
mainGame->device->closeDevice();
} else {
DuelClient::SendPacketToServer(CTOS_SURRENDER);
}
......@@ -843,7 +845,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else if(conti_selecting)
mainGame->btnCardSelect[i]->setImage(imageManager.GetTexture(selectable_cards[i + pos]->chain_code));
else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[0], rect<s32>(0, 0, CARD_IMG_WIDTH, CARD_IMG_HEIGHT));
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
// text
wchar_t formatBuffer[2048];
......@@ -906,7 +908,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if(display_cards[i + pos]->code)
mainGame->btnCardDisplay[i]->setImage(imageManager.GetTexture(display_cards[i + pos]->code));
else
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0]);
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[0], rect<s32>(0, 0, CARD_IMG_WIDTH, CARD_IMG_HEIGHT));
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
wchar_t formatBuffer[2048];
if(display_cards[i + pos]->location == LOCATION_OVERLAY) {
......@@ -1787,6 +1789,26 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return true;
break;
}
case BUTTON_WINDOW_RESIZE_S: {
mainGame->SetWindowsScale(0.8);
return true;
break;
}
case BUTTON_WINDOW_RESIZE_M: {
mainGame->SetWindowsScale(1);
return true;
break;
}
case BUTTON_WINDOW_RESIZE_L: {
mainGame->SetWindowsScale(1.25);
return true;
break;
}
case BUTTON_WINDOW_RESIZE_XL: {
mainGame->SetWindowsScale(1.5);
return true;
break;
}
}
break;
}
......
This diff is collapsed.
......@@ -177,6 +177,7 @@ public:
recti ResizeFit(s32 x, s32 y, s32 x2, s32 y2);
void SetWindowsIcon();
void SetWindowsScale(float scale);
void FlashWindow();
void takeScreenshot();
void SetCursor(ECURSOR_ICON icon);
......@@ -291,6 +292,10 @@ public:
irr::gui::IGUIScrollBar* scrSoundVolume;
irr::gui::IGUIScrollBar* scrMusicVolume;
irr::gui::IGUICheckBox* chkMusicMode;
irr::gui::IGUIButton* btnWinResizeS;
irr::gui::IGUIButton* btnWinResizeM;
irr::gui::IGUIButton* btnWinResizeL;
irr::gui::IGUIButton* btnWinResizeXL;
irr::gui::IGUICheckBox* chkEnablePScale;
//main menu
irr::gui::IGUIWindow* wMainMenu;
......@@ -678,6 +683,10 @@ extern Game* mainGame;
#define CHECKBOX_ENABLE_MUSIC 362
#define SCROLL_VOLUME 363
#define CHECKBOX_DISABLE_CHAT 364
#define BUTTON_WINDOW_RESIZE_S 365
#define BUTTON_WINDOW_RESIZE_M 366
#define BUTTON_WINDOW_RESIZE_L 367
#define BUTTON_WINDOW_RESIZE_XL 368
#define COMBOBOX_SORTTYPE 370
#define COMBOBOX_LIMIT 371
......@@ -698,4 +707,6 @@ extern Game* mainGame;
#define TEXTURE_ACTIVATE 6
#define DEFAULT_DUEL_RULE 4
#define CARD_ARTWORK_VERSIONS_OFFSET 10
#endif // GAME_H
......@@ -134,7 +134,7 @@ int main(int argc, char* argv[]) {
break;
} else if(!strcmp(argv[i], "-j")) { // Join host
exit_on_return = !keep_on_return;
ClickButton(ygo::mainGame->btnLanMode);
ygo::mainGame->HideElement(ygo::mainGame->wMainMenu);
ClickButton(ygo::mainGame->btnJoinHost);
break;
} else if(!strcmp(argv[i], "-r")) { // Replay
......
......@@ -11,17 +11,9 @@ ImageManager imageManager;
bool ImageManager::Initial() {
RefreshRandomImageList();
tCover[0] = GetRandomImage(TEXTURE_COVER_S);
if(!tCover[0])
tCover[0] = driver->getTexture("textures/cover.jpg");
tCover[1] = GetRandomImage(TEXTURE_COVER_O);
if(!tCover[1])
tCover[1] = driver->getTexture("textures/cover2.jpg");
if(!tCover[1])
tCover[1] = GetRandomImage(TEXTURE_COVER_S);
if(!tCover[1])
tCover[1] = tCover[0];
//tUnknown = driver->getTexture("textures/unknown.jpg");
tCover[0] = NULL;
tCover[1] = NULL;
//tUnknown = NULL;
tUnknown[0] = NULL;
tUnknown[1] = NULL;
tUnknown[2] = NULL;
......@@ -45,25 +37,9 @@ bool ImageManager::Initial() {
tHand[0] = driver->getTexture("textures/f1.jpg");
tHand[1] = driver->getTexture("textures/f2.jpg");
tHand[2] = driver->getTexture("textures/f3.jpg");
tBackGround = GetRandomImage(TEXTURE_DUEL);
if(!tBackGround)
tBackGround = driver->getTexture("textures/bg.jpg");
if(!tBackGround)
tBackGround = driver->getTexture("textures/bg_duel.jpg");
tBackGround_menu = GetRandomImage(TEXTURE_MENU);
if(!tBackGround_menu)
tBackGround_menu = driver->getTexture("textures/bg_menu.jpg");
if(!tBackGround_menu)
tBackGround_menu = GetRandomImage(TEXTURE_DUEL);
if(!tBackGround_menu)
tBackGround_menu = tBackGround;
tBackGround_deck = GetRandomImage(TEXTURE_DECK);
if(!tBackGround_deck)
tBackGround_deck = driver->getTexture("textures/bg_deck.jpg");
if(!tBackGround_deck)
tBackGround_deck = GetRandomImage(TEXTURE_DUEL);
if(!tBackGround_deck)
tBackGround_deck = tBackGround;
tBackGround = NULL;
tBackGround_menu = NULL;
tBackGround_deck = NULL;
tField[0] = driver->getTexture("textures/field2.png");
tFieldTransparent[0] = driver->getTexture("textures/field-transparent2.png");
tField[1] = driver->getTexture("textures/field3.png");
......@@ -78,20 +54,37 @@ bool ImageManager::Initial() {
tLScale[i] = driver->getTexture(buff);
}
tClock = driver->getTexture("textures/clock.png");
ResizeTexture();
return true;
}
irr::video::ITexture* ImageManager::GetRandomImage(int image_type) {
int count = ImageList[image_type].size();
if(count <= 0)
return 0;
return NULL;
char ImageName[1024];
wchar_t fname[1024];
int image_id = rand() % count;
if(saved_image_id[image_type] == -1)
saved_image_id[image_type] = rand() % count;
int image_id = saved_image_id[image_type];
auto name = ImageList[image_type][image_id].c_str();
myswprintf(fname, L"./textures/%ls", name);
BufferIO::EncodeUTF8(fname, ImageName);
return driver->getTexture(ImageName);
}
irr::video::ITexture* ImageManager::GetRandomImage(int image_type, s32 width, s32 height) {
int count = ImageList[image_type].size();
if(count <= 0)
return NULL;
char ImageName[1024];
wchar_t fname[1024];
if(saved_image_id[image_type] == -1)
saved_image_id[image_type] = rand() % count;
int image_id = saved_image_id[image_type];
auto name = ImageList[image_type][image_id].c_str();
myswprintf(fname, L"./textures/%ls", name);
BufferIO::EncodeUTF8(fname, ImageName);
return GetTextureFromFile(ImageName, width, height);
}
void ImageManager::RefreshRandomImageList() {
RefreshImageDir(L"bg/", TEXTURE_DUEL);
RefreshImageDir(L"bg_duel/", TEXTURE_DUEL);
......@@ -101,6 +94,10 @@ void ImageManager::RefreshRandomImageList() {
RefreshImageDir(L"cover2/", TEXTURE_COVER_O);
RefreshImageDir(L"attack/", TEXTURE_ATTACK);
RefreshImageDir(L"act/", TEXTURE_ACTIVATE);
for(int i = 0; i < 7; ++ i) {
saved_image_id[i] = -1;
}
}
void ImageManager::RefreshImageDir(std::wstring path, int image_type) {
#ifdef _WIN32
......@@ -158,7 +155,7 @@ void ImageManager::ClearTexture() {
tMap[0].clear();
tMap[1].clear();
tThumb.clear();
tThumb.clear();
tFields.clear();
for(int i = 0; i < 3; ++i)
if(tUnknown[i] != NULL) {
driver->removeTexture(tUnknown[i]);
......@@ -179,6 +176,48 @@ void ImageManager::RemoveTexture(int code) {
tMap[1].erase(tit);
}
}
void ImageManager::ResizeTexture() {
irr::s32 imgWidth = CARD_IMG_WIDTH * mainGame->xScale;
irr::s32 imgHeight = CARD_IMG_HEIGHT * mainGame->yScale;
irr::s32 bgWidth = 1024 * mainGame->xScale;
irr::s32 bgHeight = 640 * mainGame->yScale;
driver->removeTexture(tCover[0]);
driver->removeTexture(tCover[1]);
tCover[0] = GetRandomImage(TEXTURE_COVER_S, imgWidth, imgHeight);
if(!tCover[0])
tCover[0] = GetTextureFromFile("textures/cover.jpg", imgWidth, imgHeight);
tCover[1] = GetRandomImage(TEXTURE_COVER_O, imgWidth, imgHeight);
if(!tCover[1])
tCover[1] = GetTextureFromFile("textures/cover2.jpg", imgWidth, imgHeight);
if(!tCover[1])
tCover[1] = GetRandomImage(TEXTURE_COVER_S, imgWidth, imgHeight);
if(!tCover[1])
tCover[1] = tCover[0];
//driver->removeTexture(tUnknown);
//tUnknown = GetTextureFromFile("textures/unknown.jpg", imgWidth, imgHeight);
driver->removeTexture(tBackGround);
tBackGround = GetRandomImage(TEXTURE_DUEL, bgWidth, bgHeight);
if(!tBackGround)
tBackGround = GetTextureFromFile("textures/bg.jpg", bgWidth, bgHeight);
if(!tBackGround)
tBackGround = GetTextureFromFile("textures/bg_duel.jpg", bgWidth, bgHeight);
driver->removeTexture(tBackGround_menu);
tBackGround_menu = GetRandomImage(TEXTURE_MENU, bgWidth, bgHeight);
if(!tBackGround_menu)
tBackGround_menu = GetTextureFromFile("textures/bg_menu.jpg", bgWidth, bgHeight);
if(!tBackGround_menu)
tBackGround_menu = GetRandomImage(TEXTURE_DUEL, bgWidth, bgHeight);
if(!tBackGround_menu)
tBackGround_menu = tBackGround;
driver->removeTexture(tBackGround_deck);
tBackGround_deck = GetRandomImage(TEXTURE_DECK, bgWidth, bgHeight);
if(!tBackGround_deck)
tBackGround_deck = GetTextureFromFile("textures/bg_deck.jpg", bgWidth, bgHeight);
if(!tBackGround_deck)
tBackGround_deck = GetRandomImage(TEXTURE_DUEL, bgWidth, bgHeight);
if(!tBackGround_deck)
tBackGround_deck = tBackGround;
}
// function by Warr1024, from https://github.com/minetest/minetest/issues/2419 , modified
void imageScaleNNAA(irr::video::IImage *src, irr::video::IImage *dest) {
double sx, sy, minsx, maxsx, minsy, maxsy, area, ra, ga, ba, aa, pw, ph, pa;
......
......@@ -10,14 +10,17 @@ namespace ygo {
class ImageManager {
public:
std::vector<std::wstring> ImageList[7];
int saved_image_id[7];
bool Initial();
//random image
irr::video::ITexture* GetRandomImage(int image_type);
irr::video::ITexture* GetRandomImage(int image_type, s32 width, s32 height);
void RefreshRandomImageList();
void RefreshImageDir(std::wstring path, int image_type);
void SetDevice(irr::IrrlichtDevice* dev);
void ClearTexture();
void RemoveTexture(int code);
void ResizeTexture();
irr::video::ITexture* GetTextureFromFile(char* file, s32 width, s32 height);
irr::video::ITexture* GetTextureUnknown(s32 width, s32 height, int index);
irr::video::ITexture* GetTexture(int code, bool fit = false);
......
......@@ -106,6 +106,7 @@ int ReplayMode::ReplayThread(void* param) {
get_message(pduel, (byte*)engineBuffer);
is_continuing = ReplayAnalyze(engineBuffer, len);
if(is_restarting) {
mainGame->gMutex.Lock();
is_restarting = false;
int step = current_step - 1;
if(step < 0)
......@@ -282,7 +283,6 @@ void ReplayMode::Undo() {
return;
mainGame->dInfo.isReplaySkiping = true;
Restart(false);
mainGame->gMutex.Lock();
Pause(false, false);
}
bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
......
......@@ -748,6 +748,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
xcard->overlayTarget = ccard;
xcard->location = 0x80;
xcard->sequence = ccard->overlayed.size() - 1;
xcard->owner = p;
xcard->controler = p;
}
}
}
......
Subproject commit 620e9df54f9bcb8e18cec09229254f08460a530f
Subproject commit 18d7c0ab0c17afc0967993c1eabdbc9dcb3688db
Subproject commit 9ce2bf8aacb08ec26b01c4fba65feaec48743dce
Subproject commit a5facedc2c207e9cfaeacef6cb30a37c96d097f3
......@@ -308,7 +308,12 @@
!system 1279 开启音效
!system 1280 开启音乐
!system 1281 按场景切换音乐
!system 1282 数字灵摆图片
!system 1282 窗口大小
!system 1283
!system 1284
!system 1285
!system 1286 特大
!system 1287 数字灵摆图片
!system 1290 忽略对方发言
!system 1291 忽略观战者发言
!system 1292 忽略时点
......@@ -542,6 +547,7 @@
!counter 0x46 指示物(刚鬼死斗)
!counter 0x47 指示物(限制代码)
!counter 0x48 指示物(连接死亡炮塔)
!counter 0x1049 警逻指示物
#setnames, using tab for comment
!setname 0x1 正义盟军 AOJ
!setname 0x2 次世代 ジェネクス
......@@ -904,3 +910,10 @@
!setname 0x1115 闪刀姬 閃刀姫
!setname 0x116 圣像骑士 パラディオン
!setname 0x117 魔神仪 魔神儀
!setname 0x118 电脑网 サイバネット
!setname 0x119 转生炎兽 サラマングレイト
!setname 0x11a 恐龙摔跤手 ダイナレスラー
!setname 0x11b 自奏圣乐 オルフェゴール
!setname 0x11c 雷龙 サンダー·ドラゴン
!setname 0x11d 禁忌的 禁じられた
!setname 0x11e 危险!
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