Commit 061895d0 authored by mercury233's avatar mercury233
parents e93dd69c 1c456c5c
...@@ -16,7 +16,7 @@ A script engine for "yu-gi-oh!" and sample gui ...@@ -16,7 +16,7 @@ A script engine for "yu-gi-oh!" and sample gui
* White = your card, Grey = your opponent's card * White = your card, Grey = your opponent's card
####Text: ####Text:
Cards in extra deck or removed: Cards in deck, extra deck and banished zone:
* Black = face-up, Blue = face-down * Black = face-up, Blue = face-down
Xyz materials: Xyz materials:
......
...@@ -19,7 +19,6 @@ ClientCard::ClientCard() { ...@@ -19,7 +19,6 @@ ClientCard::ClientCard() {
is_highlighting = false; is_highlighting = false;
is_disabled = false; is_disabled = false;
is_reversed = false; is_reversed = false;
is_conti = false;
cmdFlag = 0; cmdFlag = 0;
code = 0; code = 0;
chain_code = 0; chain_code = 0;
......
...@@ -63,7 +63,6 @@ public: ...@@ -63,7 +63,6 @@ public:
bool is_showtarget; bool is_showtarget;
bool is_highlighting; bool is_highlighting;
bool is_reversed; bool is_reversed;
bool is_conti;
u32 code; u32 code;
u32 chain_code; u32 chain_code;
u32 alias; u32 alias;
......
...@@ -23,6 +23,7 @@ ClientField::ClientField() { ...@@ -23,6 +23,7 @@ ClientField::ClientField() {
pzone_act[1] = false; pzone_act[1] = false;
conti_act = false; conti_act = false;
deck_reversed = false; deck_reversed = false;
conti_selecting = false;
for(int p = 0; p < 2; ++p) { for(int p = 0; p < 2; ++p) {
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
mzone[p].push_back(0); mzone[p].push_back(0);
...@@ -354,7 +355,6 @@ void ClientField::ClearChainSelect() { ...@@ -354,7 +355,6 @@ void ClientField::ClearChainSelect() {
(*cit)->chain_code = 0; (*cit)->chain_code = 0;
(*cit)->is_selectable = false; (*cit)->is_selectable = false;
(*cit)->is_selected = false; (*cit)->is_selected = false;
(*cit)->is_conti = false;
} }
conti_cards.clear(); conti_cards.clear();
grave_act = false; grave_act = false;
...@@ -375,9 +375,10 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -375,9 +375,10 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
} }
for(size_t i = 0; i < ct; ++i) { for(size_t i = 0; i < ct; ++i) {
mainGame->stCardPos[i]->enableOverrideColor(false); mainGame->stCardPos[i]->enableOverrideColor(false);
// image
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 if(chain) 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]);
...@@ -385,8 +386,9 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -385,8 +386,9 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
mainGame->btnCardSelect[i]->setPressed(false); mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true); mainGame->btnCardSelect[i]->setVisible(true);
if(mainGame->dInfo.curMsg != MSG_SORT_CHAIN && mainGame->dInfo.curMsg != MSG_SORT_CARD) { if(mainGame->dInfo.curMsg != MSG_SORT_CHAIN && mainGame->dInfo.curMsg != MSG_SORT_CARD) {
// text
wchar_t formatBuffer[2048]; wchar_t formatBuffer[2048];
if(chain && selectable_cards[i]->is_conti && !selectable_cards[i]->code) if(conti_selecting)
myswprintf(formatBuffer, L"%ls", DataManager::unknown_string); myswprintf(formatBuffer, L"%ls", DataManager::unknown_string);
else if(selectable_cards[i]->location == LOCATION_OVERLAY) else if(selectable_cards[i]->location == LOCATION_OVERLAY)
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
...@@ -396,13 +398,16 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) { ...@@ -396,13 +398,16 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence), myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence),
selectable_cards[i]->sequence + 1); selectable_cards[i]->sequence + 1);
mainGame->stCardPos[i]->setText(formatBuffer); mainGame->stCardPos[i]->setText(formatBuffer);
if(selectable_cards[i]->location == LOCATION_OVERLAY) { // color
if(conti_selecting)
mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
else if(selectable_cards[i]->location == LOCATION_OVERLAY) {
if(selectable_cards[i]->owner != selectable_cards[i]->overlayTarget->controler) if(selectable_cards[i]->owner != selectable_cards[i]->overlayTarget->controler)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff); mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i]->overlayTarget->controler) if(selectable_cards[i]->overlayTarget->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} else if(selectable_cards[i]->location == LOCATION_EXTRA || selectable_cards[i]->location == LOCATION_REMOVED) { } else if(selectable_cards[i]->location == LOCATION_DECK || selectable_cards[i]->location == LOCATION_EXTRA || selectable_cards[i]->location == LOCATION_REMOVED) {
if(selectable_cards[i]->position & POS_FACEDOWN) if(selectable_cards[i]->position & POS_FACEDOWN)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff); mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i]->controler) if(selectable_cards[i]->controler)
......
...@@ -77,6 +77,7 @@ public: ...@@ -77,6 +77,7 @@ public:
ChainInfo current_chain; ChainInfo current_chain;
bool last_chain; bool last_chain;
bool deck_reversed; bool deck_reversed;
bool conti_selecting;
ClientField(); ClientField();
void Clear(); void Clear();
......
...@@ -844,6 +844,7 @@ void Game::HideElement(irr::gui::IGUIElement * win, bool set_action) { ...@@ -844,6 +844,7 @@ void Game::HideElement(irr::gui::IGUIElement * win, bool set_action) {
if(win == wCardSelect) { if(win == wCardSelect) {
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
btnCardSelect[i]->setDrawImage(false); btnCardSelect[i]->setDrawImage(false);
dField.conti_selecting = false;
} }
if(win == wCardDisplay) { if(win == wCardDisplay) {
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
......
...@@ -1217,13 +1217,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1217,13 +1217,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->dField.activatable_descs.push_back(std::make_pair(desc, flag)); mainGame->dField.activatable_descs.push_back(std::make_pair(desc, flag));
pcard->is_selected = false; pcard->is_selected = false;
if(flag == EDESC_OPERATION) { if(flag == EDESC_OPERATION) {
pcard->is_conti = true;
pcard->chain_code = code; pcard->chain_code = code;
mainGame->dField.conti_cards.push_back(pcard); mainGame->dField.conti_cards.push_back(pcard);
mainGame->dField.conti_act = true; mainGame->dField.conti_act = true;
conti_exist = true; conti_exist = true;
} else { } else {
pcard->chain_code = code;
pcard->is_selectable = true; pcard->is_selectable = true;
if(flag == EDESC_RESET) if(flag == EDESC_RESET)
pcard->cmdFlag |= COMMAND_RESET; pcard->cmdFlag |= COMMAND_RESET;
...@@ -1426,7 +1424,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1426,7 +1424,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
case MSG_SELECT_COUNTER: { case MSG_SELECT_COUNTER: {
/*int selecting_player = */BufferIO::ReadInt8(pbuf); /*int selecting_player = */BufferIO::ReadInt8(pbuf);
mainGame->dField.select_counter_type = BufferIO::ReadInt16(pbuf); mainGame->dField.select_counter_type = BufferIO::ReadInt16(pbuf);
mainGame->dField.select_counter_count = BufferIO::ReadInt8(pbuf); mainGame->dField.select_counter_count = BufferIO::ReadInt16(pbuf);
int count = BufferIO::ReadInt8(pbuf); int count = BufferIO::ReadInt8(pbuf);
mainGame->dField.selectable_cards.clear(); mainGame->dField.selectable_cards.clear();
int c, l, s, t/*, code*/; int c, l, s, t/*, code*/;
...@@ -1436,7 +1434,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1436,7 +1434,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
c = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf)); c = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
l = BufferIO::ReadInt8(pbuf); l = BufferIO::ReadInt8(pbuf);
s = BufferIO::ReadInt8(pbuf); s = BufferIO::ReadInt8(pbuf);
t = BufferIO::ReadInt8(pbuf); t = BufferIO::ReadInt16(pbuf);
pcard = mainGame->dField.GetCard(c, l, s); pcard = mainGame->dField.GetCard(c, l, s);
mainGame->dField.selectable_cards.push_back(pcard); mainGame->dField.selectable_cards.push_back(pcard);
pcard->opParam = (t << 16) | t; pcard->opParam = (t << 16) | t;
......
...@@ -460,7 +460,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -460,7 +460,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
} else { } else {
selectable_cards.clear(); selectable_cards.clear();
bool conti_exist = false; conti_selecting = false;
switch(command_location) { switch(command_location) {
case LOCATION_DECK: { case LOCATION_DECK: {
for(size_t i = 0; i < deck[command_controler].size(); ++i) for(size_t i = 0; i < deck[command_controler].size(); ++i)
...@@ -488,11 +488,11 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -488,11 +488,11 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
case POSITION_HINT: { case POSITION_HINT: {
selectable_cards.insert(selectable_cards.end(), conti_cards.begin(), conti_cards.end()); selectable_cards.insert(selectable_cards.end(), conti_cards.begin(), conti_cards.end());
conti_exist = true; conti_selecting = true;
break; break;
} }
} }
if(!conti_exist) { if(!conti_selecting) {
mainGame->wCardSelect->setText(dataManager.GetSysString(566)); mainGame->wCardSelect->setText(dataManager.GetSysString(566));
list_command = COMMAND_ACTIVATE; list_command = COMMAND_ACTIVATE;
} else { } else {
...@@ -910,11 +910,15 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -910,11 +910,15 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
for(int i = 0; i < 5; ++i) { for(int i = 0; i < 5; ++i) {
// draw selectable_cards[i + pos] in btnCardSelect[i] // draw selectable_cards[i + pos] in btnCardSelect[i]
mainGame->stCardPos[i]->enableOverrideColor(false); mainGame->stCardPos[i]->enableOverrideColor(false);
// image
if(selectable_cards[i + pos]->code) if(selectable_cards[i + pos]->code)
mainGame->btnCardSelect[i]->setImage(imageManager.GetTexture(selectable_cards[i + pos]->code)); mainGame->btnCardSelect[i]->setImage(imageManager.GetTexture(selectable_cards[i + pos]->code));
else if(conti_selecting)
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]);
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
wchar_t formatBuffer[2048]; wchar_t formatBuffer[2048];
if(sort_list.size()) { if(sort_list.size()) {
if(sort_list[pos + i] > 0) if(sort_list[pos + i] > 0)
...@@ -922,7 +926,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -922,7 +926,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else else
myswprintf(formatBuffer, L""); myswprintf(formatBuffer, L"");
} else { } else {
if(selectable_cards[i + pos]->is_conti && !selectable_cards[i + pos]->code) if(conti_selecting)
myswprintf(formatBuffer, L"%ls", DataManager::unknown_string); myswprintf(formatBuffer, L"%ls", DataManager::unknown_string);
else if(selectable_cards[i + pos]->location == LOCATION_OVERLAY) else if(selectable_cards[i + pos]->location == LOCATION_OVERLAY)
myswprintf(formatBuffer, L"%ls[%d](%d)", myswprintf(formatBuffer, L"%ls[%d](%d)",
...@@ -933,17 +937,19 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -933,17 +937,19 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
selectable_cards[i + pos]->sequence + 1); selectable_cards[i + pos]->sequence + 1);
} }
mainGame->stCardPos[i]->setText(formatBuffer); mainGame->stCardPos[i]->setText(formatBuffer);
// color
if(conti_selecting)
mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
if(selectable_cards[i + pos]->location == LOCATION_OVERLAY) { if(selectable_cards[i + pos]->location == LOCATION_OVERLAY) {
if(selectable_cards[i + pos]->owner != selectable_cards[i + pos]->overlayTarget->controler) if(selectable_cards[i + pos]->owner != selectable_cards[i + pos]->overlayTarget->controler)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff); mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
// BackgroundColor: controller of the xyz monster
if(selectable_cards[i + pos]->is_selected) if(selectable_cards[i + pos]->is_selected)
mainGame->stCardPos[i]->setBackgroundColor(0xffffff00); mainGame->stCardPos[i]->setBackgroundColor(0xffffff00);
else if(selectable_cards[i + pos]->overlayTarget->controler) else if(selectable_cards[i + pos]->overlayTarget->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0); mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else else
mainGame->stCardPos[i]->setBackgroundColor(0xffffffff); mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
} else if(selectable_cards[i + pos]->location == LOCATION_EXTRA || selectable_cards[i + pos]->location == LOCATION_REMOVED) { } else if(selectable_cards[i + pos]->location == LOCATION_DECK || selectable_cards[i + pos]->location == LOCATION_EXTRA || selectable_cards[i + pos]->location == LOCATION_REMOVED) {
if(selectable_cards[i + pos]->position & POS_FACEDOWN) if(selectable_cards[i + pos]->position & POS_FACEDOWN)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff); mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i + pos]->is_selected) if(selectable_cards[i + pos]->is_selected)
......
...@@ -70,17 +70,17 @@ bool Game::Initialize() { ...@@ -70,17 +70,17 @@ bool Game::Initialize() {
device->setResizable(false); device->setResizable(false);
#ifdef _WIN32 #ifdef _WIN32
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL); HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
HICON hSmallIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); HICON hSmallIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
HICON hBigIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); HICON hBigIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
HWND hWnd; HWND hWnd;
irr::video::SExposedVideoData exposedData = driver->getExposedVideoData(); irr::video::SExposedVideoData exposedData = driver->getExposedVideoData();
if(gameConf.use_d3d) if(gameConf.use_d3d)
hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd); hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd);
else else
hWnd = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd); hWnd = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd);
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (long)hSmallIcon); SendMessage(hWnd, WM_SETICON, ICON_SMALL, (long)hSmallIcon);
SendMessage(hWnd, WM_SETICON, ICON_BIG, (long)hBigIcon); SendMessage(hWnd, WM_SETICON, ICON_BIG, (long)hBigIcon);
#endif #endif
//main menu //main menu
wchar_t strbuf[256]; wchar_t strbuf[256];
myswprintf(strbuf, L"YGOPro Version:%X.0%X.%X", PRO_VERSION >> 12, (PRO_VERSION >> 4) & 0xff, PRO_VERSION & 0xf); myswprintf(strbuf, L"YGOPro Version:%X.0%X.%X", PRO_VERSION >> 12, (PRO_VERSION >> 4) & 0xff, PRO_VERSION & 0xf);
......
...@@ -412,9 +412,9 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { ...@@ -412,9 +412,9 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
} }
case MSG_SELECT_COUNTER: { case MSG_SELECT_COUNTER: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 3; pbuf += 4;
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8; pbuf += count * 9;
return ReadReplayResponse(); return ReadReplayResponse();
} }
case MSG_SELECT_SUM: { case MSG_SELECT_SUM: {
......
...@@ -717,9 +717,9 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -717,9 +717,9 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
} }
case MSG_SELECT_COUNTER: { case MSG_SELECT_COUNTER: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 3; pbuf += 4;
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8; pbuf += count * 9;
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
......
...@@ -243,9 +243,9 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) { ...@@ -243,9 +243,9 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
} }
case MSG_SELECT_COUNTER: { case MSG_SELECT_COUNTER: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 3; pbuf += 4;
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8; pbuf += count * 9;
if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) { if(!DuelClient::ClientAnalyze(offset, pbuf - offset)) {
mainGame->singleSignal.Reset(); mainGame->singleSignal.Reset();
mainGame->singleSignal.Wait(); mainGame->singleSignal.Wait();
......
...@@ -650,9 +650,9 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) { ...@@ -650,9 +650,9 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
} }
case MSG_SELECT_COUNTER: { case MSG_SELECT_COUNTER: {
player = BufferIO::ReadInt8(pbuf); player = BufferIO::ReadInt8(pbuf);
pbuf += 3; pbuf += 4;
count = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf);
pbuf += count * 8; pbuf += count * 9;
WaitforResponse(player); WaitforResponse(player);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset); NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1; return 1;
......
Subproject commit 9cce5ab37da7068372061c1b7a885f961b3860d7 Subproject commit 706f7627e76a5790322099d760d364c56b62bf0e
Subproject commit 8628676ec9e8a89b91178796417690f3df4f89a3 Subproject commit 6747080c00ee6c9d1474a23a0559f939dbe47983
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