Commit 0f53b60a authored by mercury233's avatar mercury233
parents 732c8383 dde1ac7a
#include <stack>
#include "client_field.h"
#include "client_card.h"
#include "duelclient.h"
......@@ -1329,7 +1330,148 @@ static bool is_declarable(T const& cd, int declarable_type) {
return cd.code == CARD_MARINE_DOLPHIN || cd.code == CARD_TWINKLE_MOSS
|| (!cd.alias && (cd.type & (TYPE_MONSTER + TYPE_TOKEN)) != (TYPE_MONSTER + TYPE_TOKEN));
}
void ClientField::UpdateDeclarableCode(bool enter) {
template <class T>
static bool is_declarable(T const& cd, const std::vector<int>& opcode) {
std::stack<int> stack;
for(auto it = opcode.begin(); it != opcode.end(); ++it) {
switch(*it) {
case OPCODE_ADD: {
if (stack.size() >= 2) {
int rhs = stack.top();
stack.pop();
int lhs = stack.top();
stack.pop();
stack.push(lhs + rhs);
}
break;
}
case OPCODE_SUB: {
if (stack.size() >= 2) {
int rhs = stack.top();
stack.pop();
int lhs = stack.top();
stack.pop();
stack.push(lhs - rhs);
}
break;
}
case OPCODE_MUL: {
if (stack.size() >= 2) {
int rhs = stack.top();
stack.pop();
int lhs = stack.top();
stack.pop();
stack.push(lhs * rhs);
}
break;
}
case OPCODE_DIV: {
if (stack.size() >= 2) {
int rhs = stack.top();
stack.pop();
int lhs = stack.top();
stack.pop();
stack.push(lhs / rhs);
}
break;
}
case OPCODE_AND: {
if (stack.size() >= 2) {
int rhs = stack.top();
stack.pop();
int lhs = stack.top();
stack.pop();
stack.push(lhs && rhs);
}
break;
}
case OPCODE_OR: {
if (stack.size() >= 2) {
int rhs = stack.top();
stack.pop();
int lhs = stack.top();
stack.pop();
stack.push(lhs || rhs);
}
break;
}
case OPCODE_NEG: {
if (stack.size() >= 1) {
int val = stack.top();
stack.pop();
stack.push(-val);
}
break;
}
case OPCODE_NOT: {
if (stack.size() >= 1) {
int val = stack.top();
stack.pop();
stack.push(!val);
}
break;
}
case OPCODE_ISCODE: {
if (stack.size() >= 1) {
int code = stack.top();
stack.pop();
stack.push(cd.code == code);
}
break;
}
case OPCODE_ISSETCARD: {
if (stack.size() >= 1) {
int set_code = stack.top();
stack.pop();
unsigned long long sc = cd.setcode;
bool res = false;
int settype = set_code & 0xfff;
int setsubtype = set_code & 0xf000;
while (sc) {
if ((sc & 0xfff) == settype && (sc & 0xf000 & setsubtype) == setsubtype)
res = true;
sc = sc >> 16;
}
stack.push(res);
}
break;
}
case OPCODE_ISTYPE: {
if (stack.size() >= 1) {
int val = stack.top();
stack.pop();
stack.push(cd.type & val);
}
break;
}
case OPCODE_ISRACE: {
if (stack.size() >= 1) {
int race = stack.top();
stack.pop();
stack.push(cd.race & race);
}
break;
}
case OPCODE_ISATTRIBUTE: {
if (stack.size() >= 1) {
int attribute = stack.top();
stack.pop();
stack.push(cd.attribute & attribute);
}
break;
}
default: {
stack.push(*it);
break;
}
}
}
if(stack.size() != 1 || stack.top() == 0)
return false;
return cd.code == CARD_MARINE_DOLPHIN || cd.code == CARD_TWINKLE_MOSS
|| (!cd.alias && (cd.type & (TYPE_MONSTER + TYPE_TOKEN)) != (TYPE_MONSTER + TYPE_TOKEN));
}
void ClientField::UpdateDeclarableCodeType(bool enter) {
const wchar_t* pname = mainGame->ebANCard->getText();
int trycode = BufferIO::GetVal(pname);
CardString cstr;
......@@ -1341,7 +1483,7 @@ void ClientField::UpdateDeclarableCode(bool enter) {
ancard.push_back(trycode);
return;
}
if(pname[0] == 0 || (pname[1] == 0 && !enter))
if((pname[0] == 0 || pname[1] == 0) && !enter)
return;
mainGame->lstANCard->clear();
ancard.clear();
......@@ -1356,4 +1498,37 @@ void ClientField::UpdateDeclarableCode(bool enter) {
}
}
}
void ClientField::UpdateDeclarableCodeOpcode(bool enter) {
const wchar_t* pname = mainGame->ebANCard->getText();
int trycode = BufferIO::GetVal(pname);
CardString cstr;
CardData cd;
if(dataManager.GetString(trycode, &cstr) && dataManager.GetData(trycode, &cd) && is_declarable(cd, opcode)) {
mainGame->lstANCard->clear();
ancard.clear();
mainGame->lstANCard->addItem(cstr.name);
ancard.push_back(trycode);
return;
}
if((pname[0] == 0 || pname[1] == 0) && !enter)
return;
mainGame->lstANCard->clear();
ancard.clear();
for(auto cit = dataManager._strings.begin(); cit != dataManager._strings.end(); ++cit) {
if(wcsstr(cit->second.name, pname) != 0) {
auto cp = dataManager.GetCodePointer(cit->first); //verified by _strings
//datas.alias can be double card names or alias
if(is_declarable(cp->second, opcode)) {
mainGame->lstANCard->addItem(cit->second.name);
ancard.push_back(cit->first);
}
}
}
}
void ClientField::UpdateDeclarableCode(bool enter) {
if(opcode.size() == 0)
UpdateDeclarableCodeType(enter);
else
UpdateDeclarableCodeOpcode(enter);
}
}
......@@ -37,9 +37,7 @@ public:
std::vector<ClientCard*> activatable_cards;
std::vector<ClientCard*> attackable_cards;
std::vector<ClientCard*> conti_cards;
std::vector<int> activatable_descs;
std::set<int> reset_descs;
std::set<int> conti_descs;
std::vector<std::pair<int,int>> activatable_descs;
std::vector<int> select_options;
std::vector<ChainInfo> chains;
int extra_p_count[2];
......@@ -65,6 +63,7 @@ public:
std::vector<ClientCard*> selected_cards;
std::set<ClientCard*> selectsum_cards;
std::vector<ClientCard*> selectsum_all;
std::vector<int> opcode;
std::vector<ClientCard*> display_cards;
std::vector<int> sort_list;
std::map<int, int> player_desc_hints[2];
......@@ -106,7 +105,9 @@ public:
bool check_sel_sum_s(const std::set<ClientCard*>& left, int index, int acc);
void check_sel_sum_t(const std::set<ClientCard*>& left, int acc);
bool check_sum(std::set<ClientCard*>::const_iterator index, std::set<ClientCard*>::const_iterator end, int acc, int count);
void UpdateDeclarableCodeType(bool enter);
void UpdateDeclarableCodeOpcode(bool enter);
void UpdateDeclarableCode(bool enter);
irr::gui::IGUIElement* panel;
......@@ -127,7 +128,7 @@ public:
virtual bool OnEvent(const irr::SEvent& event);
void GetHoverField(int x, int y);
void ShowMenu(int flag, int x, int y);
void UpdateChainButtons();
void UpdateChainButtons();
void ShowCancelOrFinishButton(int buttonOp);
void SetResponseSelectedCards() const;
};
......
......@@ -943,7 +943,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
desc = BufferIO::ReadInt32(pbuf);
pcard = mainGame->dField.GetCard(con, loc, seq);
mainGame->dField.activatable_cards.push_back(pcard);
mainGame->dField.activatable_descs.push_back(desc);
mainGame->dField.activatable_descs.push_back(std::make_pair(desc,0));
pcard->cmdFlag |= COMMAND_ACTIVATE;
if (pcard->location == LOCATION_GRAVE)
mainGame->dField.grave_act = true;
......@@ -1057,7 +1057,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
desc = BufferIO::ReadInt32(pbuf);
pcard = mainGame->dField.GetCard(con, loc, seq);
mainGame->dField.activatable_cards.push_back(pcard);
mainGame->dField.activatable_descs.push_back(desc);
mainGame->dField.activatable_descs.push_back(std::make_pair(desc, 0));
pcard->cmdFlag |= COMMAND_ACTIVATE;
if (pcard->location == LOCATION_GRAVE)
mainGame->dField.grave_act = true;
......@@ -1204,8 +1204,6 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->dField.activatable_cards.clear();
mainGame->dField.activatable_descs.clear();
mainGame->dField.conti_cards.clear();
mainGame->dField.reset_descs.clear();
mainGame->dField.conti_descs.clear();
for (int i = 0; i < count; ++i) {
int flag = BufferIO::ReadInt8(pbuf);
code = BufferIO::ReadInt32(pbuf);
......@@ -1216,22 +1214,19 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
desc = BufferIO::ReadInt32(pbuf);
pcard = mainGame->dField.GetCard(c, l, s, ss);
mainGame->dField.activatable_cards.push_back(pcard);
mainGame->dField.activatable_descs.push_back(desc);
mainGame->dField.activatable_descs.push_back(std::make_pair(desc, flag));
pcard->is_selected = false;
if(flag == 0x1) {
if(flag == EDESC_OPERATION) {
pcard->is_conti = true;
pcard->chain_code = code;
mainGame->dField.conti_cards.push_back(pcard);
mainGame->dField.conti_act = true;
mainGame->dField.conti_descs.insert(desc);
conti_exist = true;
} else {
pcard->chain_code = code;
pcard->is_selectable = true;
if(flag == 0x2) {
if(flag == EDESC_RESET)
pcard->cmdFlag |= COMMAND_RESET;
mainGame->dField.reset_descs.insert(desc);
}
else
pcard->cmdFlag |= COMMAND_ACTIVATE;
if(l == LOCATION_GRAVE)
......@@ -2933,6 +2928,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
case MSG_ANNOUNCE_CARD: {
/*int player = */mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
mainGame->dField.declarable_type = BufferIO::ReadInt32(pbuf);
mainGame->dField.opcode.clear();
if(select_hint)
myswprintf(textBuffer, L"%ls", dataManager.GetDesc(select_hint));
else myswprintf(textBuffer, dataManager.GetSysString(564));
......@@ -2940,6 +2936,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->gMutex.Lock();
mainGame->ebANCard->setText(L"");
mainGame->wANCard->setText(textBuffer);
mainGame->dField.UpdateDeclarableCode(true);
mainGame->PopupElement(mainGame->wANCard);
mainGame->gMutex.Unlock();
return false;
......@@ -2964,6 +2961,25 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->gMutex.Unlock();
return false;
}
case MSG_ANNOUNCE_CARD_FILTER: {
/*int player = */mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
int count = BufferIO::ReadInt8(pbuf);
mainGame->dField.declarable_type = 0;
mainGame->dField.opcode.clear();
for (int i = 0; i < count; ++i)
mainGame->dField.opcode.push_back(BufferIO::ReadInt32(pbuf));
if(select_hint)
myswprintf(textBuffer, L"%ls", dataManager.GetDesc(select_hint));
else myswprintf(textBuffer, dataManager.GetSysString(564));
select_hint = 0;
mainGame->gMutex.Lock();
mainGame->ebANCard->setText(L"");
mainGame->wANCard->setText(textBuffer);
mainGame->dField.UpdateDeclarableCode(true);
mainGame->PopupElement(mainGame->wANCard);
mainGame->gMutex.Unlock();
return false;
}
case MSG_CARD_HINT: {
int c = mainGame->LocalPlayer(BufferIO::ReadInt8(pbuf));
int l = BufferIO::ReadInt8(pbuf);
......@@ -3296,6 +3312,9 @@ void DuelClient::SendResponse() {
break;
}
case MSG_SELECT_SUM: {
for(int i = 0; i < mainGame->dField.must_select_count; ++i) {
mainGame->dField.selected_cards[i]->is_selected = false;
}
for(size_t i = 0; i < mainGame->dField.selectsum_all.size(); ++i) {
mainGame->dField.selectsum_all[i]->is_selectable = false;
mainGame->dField.selectsum_all[i]->is_selected = false;
......
......@@ -388,15 +388,15 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
DuelClient::SetResponseI(selected_option);
} else if (mainGame->dInfo.curMsg == MSG_SELECT_IDLECMD) {
int index = 0;
while(activatable_cards[index] != command_card || activatable_descs[index] != select_options[selected_option]) index++;
while(activatable_cards[index] != command_card || activatable_descs[index].first != select_options[selected_option]) index++;
DuelClient::SetResponseI((index << 16) + 5);
} else if (mainGame->dInfo.curMsg == MSG_SELECT_BATTLECMD) {
int index = 0;
while(activatable_cards[index] != command_card || activatable_descs[index] != select_options[selected_option]) index++;
while(activatable_cards[index] != command_card || activatable_descs[index].first != select_options[selected_option]) index++;
DuelClient::SetResponseI(index << 16);
} else {
int index = 0;
while(activatable_cards[index] != command_card || activatable_descs[index] != select_options[selected_option]) index++;
while(activatable_cards[index] != command_card || activatable_descs[index].first != select_options[selected_option]) index++;
DuelClient::SetResponseI(index);
}
mainGame->HideElement(mainGame->wOptions, true);
......@@ -430,14 +430,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
select_options.clear();
for (size_t i = 0; i < activatable_cards.size(); ++i) {
if (activatable_cards[i] == clicked_card) {
if(conti_descs.find(activatable_descs[i]) != conti_descs.end())
if(activatable_descs[i].second == EDESC_OPERATION)
continue;
if(reset_descs.find(activatable_descs[i]) != reset_descs.end()) {
if(activatable_descs[i].second == EDESC_RESET) {
if(id == BUTTON_CMD_ACTIVATE) continue;
} else {
if(id == BUTTON_CMD_RESET) continue;
}
select_options.push_back(activatable_descs[i]);
select_options.push_back(activatable_descs[i].first);
if (index == -1) index = i;
}
}
......@@ -708,12 +708,12 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
select_options.clear();
for (size_t i = 0; i < activatable_cards.size(); ++i) {
if (activatable_cards[i] == command_card) {
if(conti_descs.find(activatable_descs[i]) != conti_descs.end()) {
if(activatable_descs[i].second == EDESC_OPERATION) {
if(list_command == COMMAND_ACTIVATE) continue;
} else {
if(list_command == COMMAND_OPERATION) continue;
}
select_options.push_back(activatable_descs[i]);
select_options.push_back(activatable_descs[i].first);
if (index == -1) index = i;
}
}
......
......@@ -66,8 +66,21 @@ bool Game::Initialize() {
guiFont = irr::gui::CGUITTFont::createTTFont(env, gameConf.textfont, gameConf.textfontsize);
textFont = guiFont;
smgr = device->getSceneManager();
device->setWindowCaption(L"[---]");
device->setWindowCaption(L"YGOPro");
device->setResizable(false);
#ifdef _WIN32
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
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);
HWND hWnd;
irr::video::SExposedVideoData exposedData = driver->getExposedVideoData();
if(gameConf.use_d3d)
hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd);
else
hWnd = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd);
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (long)hSmallIcon);
SendMessage(hWnd, WM_SETICON, ICON_BIG, (long)hBigIcon);
#endif
//main menu
wchar_t strbuf[256];
myswprintf(strbuf, L"YGOPro Version:%X.0%X.%X", PRO_VERSION >> 12, (PRO_VERSION >> 4) & 0xff, PRO_VERSION & 0xf);
......@@ -632,7 +645,7 @@ void Game::MainLoop() {
usleep(20000);
#endif
if(cur_time >= 1000) {
myswprintf(cap, L"FPS: %d", fps);
myswprintf(cap, L"YGOPro FPS: %d", fps);
device->setWindowCaption(cap);
fps = 0;
cur_time -= 1000;
......
......@@ -474,6 +474,8 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
}
case MSG_REVERSE_DECK: {
DuelClient::ClientAnalyze(offset, pbuf - offset);
ReplayRefreshDeck(0);
ReplayRefreshDeck(1);
break;
}
case MSG_DECK_TOP: {
......@@ -754,7 +756,8 @@ bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) {
pbuf += 4;
return ReadReplayResponse();
}
case MSG_ANNOUNCE_NUMBER: {
case MSG_ANNOUNCE_NUMBER:
case MSG_ANNOUNCE_CARD_FILTER: {
player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
pbuf += 4 * count;
......
......@@ -1273,7 +1273,8 @@ int SingleDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1;
}
case MSG_ANNOUNCE_NUMBER: {
case MSG_ANNOUNCE_NUMBER:
case MSG_ANNOUNCE_CARD_FILTER: {
player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
pbuf += 4 * count;
......
......@@ -317,6 +317,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
}
case MSG_REVERSE_DECK: {
DuelClient::ClientAnalyze(offset, pbuf - offset);
SinglePlayRefreshDeck(0);
SinglePlayRefreshDeck(1);
break;
}
case MSG_DECK_TOP: {
......@@ -586,7 +588,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
}
break;
}
case MSG_ANNOUNCE_NUMBER: {
case MSG_ANNOUNCE_NUMBER:
case MSG_ANNOUNCE_CARD_FILTER: {
player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
pbuf += 4 * count;
......
......@@ -1312,7 +1312,8 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1;
}
case MSG_ANNOUNCE_NUMBER: {
case MSG_ANNOUNCE_NUMBER:
case MSG_ANNOUNCE_CARD_FILTER: {
player = BufferIO::ReadInt8(pbuf);
count = BufferIO::ReadInt8(pbuf);
pbuf += 4 * count;
......
#[2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][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]
#[2016.10][2016.7][2016.4][2016.1][2015.10][2015.4][2015.1][2014.10][2014.7][2014.4][2014.2][2013.9][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]
!2016.10
#forbidden
20663556 0 --イレカエル
44910027 0 --ヴィクトリー・ドラゴン
20366274 0 --エルシャドール・ネフィリム
53804307 0 --焔征竜-ブラスター
68819554 0 --Emダメージ・ジャグラー
07563579 0 --Emヒグルミ
17330916 0 --EMモンキーボード
90411554 0 --巌征竜-レドックス
17412721 0 --旧神ノーデン
78010363 0 --黒き森のウィッチ
07391448 0 --ゴヨウ·ガーディアン
34124316 0 --サイバーポッド
21593977 0 --処刑人-マキュラ
16923472 0 --ゼンマイハンター
56570271 0 --DHERO ディスクガイ
18326736 0 --星守の騎士 プトレマイオス
33184167 0 --同族感染ウィルス
54719828 0 --No.16 色の支配者ショック・ルーラー
26400609 0 --瀑征竜-タイダル
50321796 0 --氷結界の龍 ブリューナク
78706415 0 --ファイバーポッド
93369354 0 --フィッシュボーグ-ガンナー
34206604 0 --魔導サイエンティスト
96782886 0 --メンタルマスター
03078576 0 --八汰烏
34086406 0 --ラヴァルバル・チェイン
89399912 0 --嵐征竜-テンペスト
14878871 0 --レスキューキャット
57421866 0 --レベル・スティーラー
41482598 0 --悪夢の蜃気楼
44763025 0 --いたずら好きな双子悪魔
19613556 0 --大嵐
17375316 0 --押収
74191942 0 --苦渋の選択
42829885 0 --強引な番兵
45986603 0 --強奪
55144522 0 --強欲な壺
04031928 0 --心変わり
12580477 0 --サンダー·ボルト
23557835 0 --次元融合
57953380 0 --生還の宝札
87910978 0 --洗脳-ブレインコントロール
60682203 0 --大寒波
69243953 0 --蝶の短剣-エルマ
79571449 0 --天使の施し
70828912 0 --早すぎた埋葬
42703248 0 --ハリケーン
34906152 0 --マスドライバー
46448938 0 --魔導書の神判
77565204 0 --未来融合-フューチャー·フュージョン
46411259 0 --突然変異
85602018 0 --遺言状
27174286 0 --異次元からの帰還
93016201 0 --王宮の弾圧
61740673 0 --王宮の勅命
03280747 0 --第六感
64697231 0 --ダスト·シュート
80604091 0 --血の代償
35316708 0 --刻の封印
17178486 0 --ライフチェンジャー
28566710 0 --ラストバトル!
#limit
64034255 1 --A·ジェネクス·バードマン
40044918 1 --E·HERO エアーマン
50720316 1 --E·HERO シャドー·ミスト
40318957 1 --EMドクロバット・ジョーカー
47075569 1 --EMペンデュラム・マジシャン
74586817 1 --PSYフレームロード・Ω
06602300 1 --重爆撃禽 ボム・フェネクス
28985331 1 --終末の騎士
00423585 1 --召喚僧サモンプリースト
78868119 1 --深海のディーヴァ
31560081 1 --聖なる魔術師
65192027 1 --ダーク·アームド·ドラゴン
15341821 1 --ダンディライオン
90953320 1 --TG ハイパー·ライブラリアン
69015963 1 --デビル・フランケン
16226786 1 --深淵の暗殺者
90307777 1 --影霊衣の術士 シュリット
28297833 1 --ネクロフェイス
18239909 1 --爆竜剣士イグニスターP
84764038 1 --彼岸の悪鬼 スカラマリオン
83531441 1 --彼岸の旅人 ダンテ
52687916 1 --氷結界の龍 トリシューラ
33396948 1 --封印されしエクゾディア
07902349 1 --封印されし者の左腕
70903634 1 --封印されし者の右腕
44519536 1 --封印されし者の左足
08124921 1 --封印されし者の右足
26674724 1 --ブリューナクの影霊衣
10802915 1 --魔界発現世行きデスガイド
31178212 1 --マジェスペクター・ユニコーン
33508719 1 --メタモルポット
89463537 1 --ユニコールの影霊衣
92746535 1 --竜剣士ラスターP
88264978 1 --レッドアイズ·ダークネスメタルドラゴン
48976825 1 --異次元からの埋葬
33782437 1 --一時休戦
66957584 1 --インフェルニティガン
81439173 1 --おろかな埋葬
23701465 1 --原初の種
96729612 1 --儀式の準備
67723438 1 --緊急テレポート
45305419 1 --継承の印
17639150 1 --機殻の生贄
83764718 1 --死者蘇生
32807846 1 --増援
54447022 1 --ソウル・チャージ
48130397 1 --超融合
72892473 1 --手札抹殺
67169062 1 --貪欲な壺
97211663 1 --影霊衣の反魂術
18144506 1 --ハーピィの羽根帚
22842126 1 --汎神の帝王
53129443 1 --ブラック·ホール
53208660 1 --ペンデュラム・コール
93600443 1 --マスク・チェンジ・セカンド
15854426 1 --霞の谷の神風
58577036 1 --名推理
31222701 1 --揺れる眼差し
23171610 1 --リミッター解除
14733538 1 --竜呼相打つ
62265044 1 --竜の渓谷
02295440 1 --ワン·フォー·ワン
05851097 1 --虚無空間
84749824 1 --神の警告
41420027 1 --神の宣告
36468556 1 --停戦協定
83555666 1 --破壊輪
32723153 1 --マジカル·エクスプロージョン
#semi limit
85103922 2 --アーティファクト-モラルタ
45222299 2 --イビリチュア·ガストクラーケ
68184115 2 --甲虫装機 ダンセル
74311226 2 --海皇の竜騎隊
72989439 2 --カオス·ソルジャー -開闢の使者-
72714461 2 --慧眼の魔術師
45206713 2 --DDスワラル・スライム
19580308 2 --DDラミア
70583986 2 --氷結界の虎王ドゥローレン
91110378 2 --光天使スローネ
41386308 2 --マスマティシャン
92826944 2 --馬頭鬼
10028593 2 --輪廻天狗
06417578 2 --神の写し身との接触
84171830 2 --真帝王領域
91623717 2 --連鎖爆撃
43040603 2 --モンスターゲート
!2016.7
#forbidden
20663556 0 --イレカエル
......
Subproject commit 37aa2592eed548e2b818f3114a3d2b3af24064c8
Subproject commit b2d983470ed5da3989e2b217c3e13b3c4e9352f5
Subproject commit 70765704de64b2b4c81b247f4941e5cc5d8e8a78
Subproject commit 87fa54eec4036f9cdcbfd8af3dda34e49692c03e
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