Commit 13b065c9 authored by nanahira's avatar nanahira

Merge branch 'master' into another

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