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