Commit 946819c2 authored by mercury233's avatar mercury233
parents bd5ad066 b2021a34
...@@ -46,9 +46,9 @@ public: ...@@ -46,9 +46,9 @@ public:
size_t selected_option; size_t selected_option;
ClientCard* attacker; ClientCard* attacker;
ClientCard* attack_target; ClientCard* attack_target;
int disabled_field; unsigned int disabled_field;
int selectable_field; unsigned int selectable_field;
int selected_field; unsigned int selected_field;
int select_min; int select_min;
int select_max; int select_max;
int must_select_count; int must_select_count;
......
...@@ -105,54 +105,54 @@ void Game::DrawBackGround() { ...@@ -105,54 +105,54 @@ void Game::DrawBackGround() {
//select field //select field
if(dInfo.curMsg == MSG_SELECT_PLACE || dInfo.curMsg == MSG_SELECT_DISFIELD) { if(dInfo.curMsg == MSG_SELECT_PLACE || dInfo.curMsg == MSG_SELECT_DISFIELD) {
float cv[4] = {0.0f, 0.0f, 1.0f, 1.0f}; float cv[4] = {0.0f, 0.0f, 1.0f, 1.0f};
int filter = 0x1; unsigned int filter = 0x1;
for (int i = 0; i < 5; ++i, filter <<= 1) { for (int i = 0; i < 5; ++i, filter <<= 1) {
if ((dField.selectable_field & filter) > 0) if (dField.selectable_field & filter)
DrawSelectionLine(&matManager.vFields[16 + i * 4], !(dField.selected_field & filter), 2, cv); DrawSelectionLine(&matManager.vFields[16 + i * 4], !(dField.selected_field & filter), 2, cv);
} }
filter = 0x100; filter = 0x100;
for (int i = 0; i < 8; ++i, filter <<= 1) { for (int i = 0; i < 8; ++i, filter <<= 1) {
if ((dField.selectable_field & filter) > 0) if (dField.selectable_field & filter)
DrawSelectionLine(&matManager.vFields[36 + i * 4], !(dField.selected_field & filter), 2, cv); DrawSelectionLine(&matManager.vFields[36 + i * 4], !(dField.selected_field & filter), 2, cv);
} }
filter = 0x10000; filter = 0x10000;
for (int i = 0; i < 5; ++i, filter <<= 1) { for (int i = 0; i < 5; ++i, filter <<= 1) {
if ((dField.selectable_field & filter) > 0) if (dField.selectable_field & filter)
DrawSelectionLine(&matManager.vFields[84 + i * 4], !(dField.selected_field & filter), 2, cv); DrawSelectionLine(&matManager.vFields[84 + i * 4], !(dField.selected_field & filter), 2, cv);
} }
filter = 0x1000000; filter = 0x1000000;
for (int i = 0; i < 8; ++i, filter <<= 1) { for (int i = 0; i < 8; ++i, filter <<= 1) {
if ((dField.selectable_field & filter) > 0) if (dField.selectable_field & filter)
DrawSelectionLine(&matManager.vFields[104 + i * 4], !(dField.selected_field & filter), 2, cv); DrawSelectionLine(&matManager.vFields[104 + i * 4], !(dField.selected_field & filter), 2, cv);
} }
} }
//disabled field //disabled field
{ {
/*float cv[4] = {0.0f, 0.0f, 1.0f, 1.0f};*/ /*float cv[4] = {0.0f, 0.0f, 1.0f, 1.0f};*/
int filter = 0x1; unsigned int filter = 0x1;
for (int i = 0; i < 5; ++i, filter <<= 1) { for (int i = 0; i < 5; ++i, filter <<= 1) {
if ((dField.disabled_field & filter) > 0) { if (dField.disabled_field & filter) {
driver->draw3DLine(matManager.vFields[16 + i * 4].Pos, matManager.vFields[16 + i * 4 + 3].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[16 + i * 4].Pos, matManager.vFields[16 + i * 4 + 3].Pos, 0xffffffff);
driver->draw3DLine(matManager.vFields[16 + i * 4 + 1].Pos, matManager.vFields[16 + i * 4 + 2].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[16 + i * 4 + 1].Pos, matManager.vFields[16 + i * 4 + 2].Pos, 0xffffffff);
} }
} }
filter = 0x100; filter = 0x100;
for (int i = 0; i < 8; ++i, filter <<= 1) { for (int i = 0; i < 8; ++i, filter <<= 1) {
if ((dField.disabled_field & filter) > 0) { if (dField.disabled_field & filter) {
driver->draw3DLine(matManager.vFields[36 + i * 4].Pos, matManager.vFields[36 + i * 4 + 3].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[36 + i * 4].Pos, matManager.vFields[36 + i * 4 + 3].Pos, 0xffffffff);
driver->draw3DLine(matManager.vFields[36 + i * 4 + 1].Pos, matManager.vFields[36 + i * 4 + 2].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[36 + i * 4 + 1].Pos, matManager.vFields[36 + i * 4 + 2].Pos, 0xffffffff);
} }
} }
filter = 0x10000; filter = 0x10000;
for (int i = 0; i < 5; ++i, filter <<= 1) { for (int i = 0; i < 5; ++i, filter <<= 1) {
if ((dField.disabled_field & filter) > 0) { if (dField.disabled_field & filter) {
driver->draw3DLine(matManager.vFields[84 + i * 4].Pos, matManager.vFields[84 + i * 4 + 3].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[84 + i * 4].Pos, matManager.vFields[84 + i * 4 + 3].Pos, 0xffffffff);
driver->draw3DLine(matManager.vFields[84 + i * 4 + 1].Pos, matManager.vFields[84 + i * 4 + 2].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[84 + i * 4 + 1].Pos, matManager.vFields[84 + i * 4 + 2].Pos, 0xffffffff);
} }
} }
filter = 0x1000000; filter = 0x1000000;
for (int i = 0; i < 8; ++i, filter <<= 1) { for (int i = 0; i < 8; ++i, filter <<= 1) {
if ((dField.disabled_field & filter) > 0) { if (dField.disabled_field & filter) {
driver->draw3DLine(matManager.vFields[104 + i * 4].Pos, matManager.vFields[104 + i * 4 + 3].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[104 + i * 4].Pos, matManager.vFields[104 + i * 4 + 3].Pos, 0xffffffff);
driver->draw3DLine(matManager.vFields[104 + i * 4 + 1].Pos, matManager.vFields[104 + i * 4 + 2].Pos, 0xffffffff); driver->draw3DLine(matManager.vFields[104 + i * 4 + 1].Pos, matManager.vFields[104 + i * 4 + 2].Pos, 0xffffffff);
} }
......
...@@ -1273,7 +1273,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1273,7 +1273,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
unsigned char respbuf[64]; unsigned char respbuf[64];
int pzone = 0; int pzone = 0;
if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE && mainGame->chkAutoPos->isChecked()) { if (mainGame->dInfo.curMsg == MSG_SELECT_PLACE && mainGame->chkAutoPos->isChecked()) {
int filter; unsigned int filter;
if (mainGame->dField.selectable_field & 0x1f) { if (mainGame->dField.selectable_field & 0x1f) {
respbuf[0] = mainGame->dInfo.isFirst ? 0 : 1; respbuf[0] = mainGame->dInfo.isFirst ? 0 : 1;
respbuf[1] = 0x4; respbuf[1] = 0x4;
......
...@@ -1107,9 +1107,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1107,9 +1107,9 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case MSG_SELECT_DISFIELD: { case MSG_SELECT_DISFIELD: {
if (!(hovered_location & LOCATION_ONFIELD) || hovered_sequence == 5) if (!(hovered_location & LOCATION_ONFIELD) || hovered_sequence == 5)
break; break;
int flag = 1 << (hovered_sequence + (hovered_controler << 4) + ((hovered_location == LOCATION_MZONE) ? 0 : 8)); unsigned int flag = 1 << (hovered_sequence + (hovered_controler << 4) + ((hovered_location == LOCATION_MZONE) ? 0 : 8));
if ((flag & selectable_field) > 0) { if (flag & selectable_field) {
if ((flag & selected_field) > 0) { if (flag & selected_field) {
selected_field &= ~flag; selected_field &= ~flag;
select_min++; select_min++;
} else { } else {
......
...@@ -90,6 +90,7 @@ bool Game::Initialize() { ...@@ -90,6 +90,7 @@ bool Game::Initialize() {
lpcstring = 0; lpcstring = 0;
always_chain = false; always_chain = false;
ignore_chain = false; ignore_chain = false;
chain_when_avail = false;
is_building = false; is_building = false;
memset(&dInfo, 0, sizeof(DuelInfo)); memset(&dInfo, 0, sizeof(DuelInfo));
memset(chatTiming, 0, sizeof(chatTiming)); memset(chatTiming, 0, sizeof(chatTiming));
......
...@@ -159,7 +159,7 @@ void Replay::EndRecord() { ...@@ -159,7 +159,7 @@ void Replay::EndRecord() {
is_recording = false; is_recording = false;
} }
void Replay::SaveReplay(const wchar_t* name) { void Replay::SaveReplay(const wchar_t* name) {
wchar_t fname[64]; wchar_t fname[256];
myswprintf(fname, L"./replay/%ls.yrp", name); myswprintf(fname, L"./replay/%ls.yrp", name);
#ifdef WIN32 #ifdef WIN32
fp = _wfopen(fname, L"wb"); fp = _wfopen(fname, L"wb");
......
...@@ -72,6 +72,7 @@ int ReplayMode::ReplayThread(void* param) { ...@@ -72,6 +72,7 @@ int ReplayMode::ReplayThread(void* param) {
cur_replay.ReadData(mainGame->dInfo.hostname, 40); cur_replay.ReadData(mainGame->dInfo.hostname, 40);
cur_replay.ReadData(mainGame->dInfo.clientname, 40); cur_replay.ReadData(mainGame->dInfo.clientname, 40);
} }
set_script_reader(default_script_reader);
set_card_reader((card_reader)DataManager::CardReader); set_card_reader((card_reader)DataManager::CardReader);
set_message_handler((message_handler)MessageHandler); set_message_handler((message_handler)MessageHandler);
pduel = create_duel(rnd.rand()); pduel = create_duel(rnd.rand());
......
...@@ -456,6 +456,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -456,6 +456,7 @@ void SingleDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
} }
time_limit[0] = host_info.time_limit; time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit; time_limit[1] = host_info.time_limit;
set_script_reader(default_script_reader);
set_card_reader((card_reader)DataManager::CardReader); set_card_reader((card_reader)DataManager::CardReader);
set_message_handler((message_handler)SingleDuel::MessageHandler); set_message_handler((message_handler)SingleDuel::MessageHandler);
rnd.reset(seed); rnd.reset(seed);
......
...@@ -11,6 +11,8 @@ long SingleMode::pduel = 0; ...@@ -11,6 +11,8 @@ long SingleMode::pduel = 0;
bool SingleMode::is_closing = false; bool SingleMode::is_closing = false;
bool SingleMode::is_continuing = false; bool SingleMode::is_continuing = false;
byte buffer[0x10000];
bool SingleMode::StartPlay() { bool SingleMode::StartPlay() {
Thread::NewThread(SinglePlayThread, 0); Thread::NewThread(SinglePlayThread, 0);
return true; return true;
...@@ -31,14 +33,11 @@ int SingleMode::SinglePlayThread(void* param) { ...@@ -31,14 +33,11 @@ int SingleMode::SinglePlayThread(void* param) {
wchar_t fname[256]; wchar_t fname[256];
myswprintf(fname, L"./single/%ls", name); myswprintf(fname, L"./single/%ls", name);
char fname2[256]; char fname2[256];
#ifdef _WIN32
size_t slen = WideCharToMultiByte(CP_ACP, 0, fname, -1, fname2, 256, NULL, NULL);
#else
size_t slen = BufferIO::EncodeUTF8(fname, fname2); size_t slen = BufferIO::EncodeUTF8(fname, fname2);
#endif
mtrandom rnd; mtrandom rnd;
time_t seed = time(0); time_t seed = time(0);
rnd.reset(seed); rnd.reset(seed);
set_script_reader((script_reader)ScriptReader);
set_card_reader((card_reader)DataManager::CardReader); set_card_reader((card_reader)DataManager::CardReader);
set_message_handler((message_handler)MessageHandler); set_message_handler((message_handler)MessageHandler);
pduel = create_duel(rnd.rand()); pduel = create_duel(rnd.rand());
...@@ -785,6 +784,29 @@ void SingleMode::SinglePlayReload() { ...@@ -785,6 +784,29 @@ void SingleMode::SinglePlayReload() {
/*len = */query_field_card(pduel, 1, LOCATION_REMOVED, flag, queryBuffer, 0); /*len = */query_field_card(pduel, 1, LOCATION_REMOVED, flag, queryBuffer, 0);
mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(1), LOCATION_REMOVED, (char*)queryBuffer); mainGame->dField.UpdateFieldCard(mainGame->LocalPlayer(1), LOCATION_REMOVED, (char*)queryBuffer);
} }
byte* SingleMode::ScriptReader(const char* script_name, int* slen) {
FILE *fp;
#ifdef _WIN32
wchar_t fname[256];
BufferIO::DecodeUTF8(script_name, fname);
fp = _wfopen(fname, L"rb");
#else
fp = fopen(script_name, "rb");
#endif
if(!fp)
return 0;
fseek(fp, 0, SEEK_END);
unsigned int len = ftell(fp);
if(len > 0x10000) {
fclose(fp);
return 0;
}
fseek(fp, 0, SEEK_SET);
fread(buffer, len, 1, fp);
fclose(fp);
*slen = len;
return buffer;
}
int SingleMode::MessageHandler(long fduel, int type) { int SingleMode::MessageHandler(long fduel, int type) {
if(!enable_log) if(!enable_log)
return 0; return 0;
......
...@@ -29,6 +29,7 @@ public: ...@@ -29,6 +29,7 @@ public:
static void SinglePlayRefreshSingle(int player, int location, int sequence, int flag = 0x781fff); static void SinglePlayRefreshSingle(int player, int location, int sequence, int flag = 0x781fff);
static void SinglePlayReload(); static void SinglePlayReload();
static byte* ScriptReader(const char* script_name, int* slen);
static int MessageHandler(long fduel, int type); static int MessageHandler(long fduel, int type);
}; };
......
...@@ -430,6 +430,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) { ...@@ -430,6 +430,7 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
} }
time_limit[0] = host_info.time_limit; time_limit[0] = host_info.time_limit;
time_limit[1] = host_info.time_limit; time_limit[1] = host_info.time_limit;
set_script_reader(default_script_reader);
set_card_reader((card_reader)DataManager::CardReader); set_card_reader((card_reader)DataManager::CardReader);
set_message_handler((message_handler)TagDuel::MessageHandler); set_message_handler((message_handler)TagDuel::MessageHandler);
rnd.reset(seed); rnd.reset(seed);
......
Subproject commit 83d1ccf90632020146a2d4fb85ff4e65fc0a779a Subproject commit 0b4345e70fa2fe3e2bf4518076df907acd4c00d8
Subproject commit 45cfc6b3d5aadec94d0e415f5e42bb2a51f96b5f Subproject commit 223f7b7ae6247430699d4b643a2eeac7cf0681d1
...@@ -464,6 +464,7 @@ ...@@ -464,6 +464,7 @@
!counter 0x1038 方界指示物 !counter 0x1038 方界指示物
!counter 0x1039 咕咚指示物 !counter 0x1039 咕咚指示物
!counter 0x40 指示物(No.51 怪腕之必杀摔角手) !counter 0x40 指示物(No.51 怪腕之必杀摔角手)
!counter 0x1041 捕食指示物
#setnames, using tab for comment #setnames, using tab for comment
!setname 0x1 正义盟军 AOJ !setname 0x1 正义盟军 AOJ
!setname 0x2 次世代 ジェネクス !setname 0x2 次世代 ジェネクス
...@@ -687,6 +688,7 @@ ...@@ -687,6 +688,7 @@
!setname 0xa8 兰斯洛特 ランスロット !setname 0xa8 兰斯洛特 ランスロット
!setname 0xa9 毛绒动物 ファーニマル !setname 0xa9 毛绒动物 ファーニマル
!setname 0xaa 机壳 クリフォート !setname 0xaa 机壳 クリフォート
!setname 0x10aa 隐藏的机壳 アポクリフォート
!setname 0xab 文具电子人 ブンボーグ !setname 0xab 文具电子人 ブンボーグ
!setname 0xac 哥布林 ゴブリン !setname 0xac 哥布林 ゴブリン
!setname 0xad 魔玩具 デストーイ !setname 0xad 魔玩具 デストーイ
...@@ -758,3 +760,5 @@ ...@@ -758,3 +760,5 @@
!setname 0xe7 沉默剑士 サイレント・ソードマン !setname 0xe7 沉默剑士 サイレント・ソードマン
!setname 0xe8 沉默魔术师 サイレント・マジシャン !setname 0xe8 沉默魔术师 サイレント・マジシャン
!setname 0xe9 磁石战士 磁石の戦士(じしゃくのせんし) !setname 0xe9 磁石战士 磁石の戦士(じしゃくのせんし)
!setname 0xea 水晶机巧 クリストロン
!setname 0xeb 化合兽 化合獣
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