Commit a65f8a04 authored by wind2009's avatar wind2009

Merge remote-tracking branch 'upstream/master' into develop

parents 2b445afc fe48b4fb
...@@ -2608,11 +2608,11 @@ void card::filter_effect_container(const effect_container& container, uint32_t c ...@@ -2608,11 +2608,11 @@ void card::filter_effect_container(const effect_container& container, uint32_t c
} }
void card::filter_effect(uint32_t code, effect_set* eset, uint8_t sort) { void card::filter_effect(uint32_t code, effect_set* eset, uint8_t sort) {
filter_effect_container(single_effect, code, default_single_filter, *eset); filter_effect_container(single_effect, code, default_single_filter, *eset);
for (const auto& pcard : equiping_cards) for (auto& pcard : equiping_cards)
filter_effect_container(pcard->equip_effect, code, default_equip_filter, *eset); filter_effect_container(pcard->equip_effect, code, default_equip_filter, *eset);
for (const auto& pcard : effect_target_owner) for (auto& pcard : effect_target_owner)
filter_effect_container(pcard->target_effect, code, default_target_filter, *eset); filter_effect_container(pcard->target_effect, code, default_target_filter, *eset);
for (const auto& pcard : xyz_materials) for (auto& pcard : xyz_materials)
filter_effect_container(pcard->xmaterial_effect, code, default_xmaterial_filter, *eset); filter_effect_container(pcard->xmaterial_effect, code, default_xmaterial_filter, *eset);
filter_effect_container(pduel->game_field->effects.aura_effect, code, default_aura_filter, *eset); filter_effect_container(pduel->game_field->effects.aura_effect, code, default_aura_filter, *eset);
if(sort) if(sort)
...@@ -2620,17 +2620,17 @@ void card::filter_effect(uint32_t code, effect_set* eset, uint8_t sort) { ...@@ -2620,17 +2620,17 @@ void card::filter_effect(uint32_t code, effect_set* eset, uint8_t sort) {
} }
void card::filter_single_continuous_effect(uint32_t code, effect_set* eset, uint8_t sort) { void card::filter_single_continuous_effect(uint32_t code, effect_set* eset, uint8_t sort) {
filter_effect_container(single_effect, code, accept_filter, *eset); filter_effect_container(single_effect, code, accept_filter, *eset);
for (const auto& pcard : equiping_cards) for (auto& pcard : equiping_cards)
filter_effect_container(pcard->equip_effect, code, accept_filter, *eset); filter_effect_container(pcard->equip_effect, code, accept_filter, *eset);
auto target_filter = [](card* c, effect* peffect) -> bool { auto target_filter = [](card* c, effect* peffect) -> bool {
return peffect->is_target(c); return peffect->is_target(c);
}; };
for (const auto& pcard : effect_target_owner) for (auto& pcard : effect_target_owner)
filter_effect_container(pcard->target_effect, code, target_filter, *eset); filter_effect_container(pcard->target_effect, code, target_filter, *eset);
auto xmaterial_filter = [](card* c, effect* peffect) -> bool { auto xmaterial_filter = [](card* c, effect* peffect) -> bool {
return !(peffect->type & EFFECT_TYPE_FIELD); return !(peffect->type & EFFECT_TYPE_FIELD);
}; };
for (const auto& pcard : xyz_materials) for (auto& pcard : xyz_materials)
filter_effect_container(pcard->xmaterial_effect, code, xmaterial_filter, *eset); filter_effect_container(pcard->xmaterial_effect, code, xmaterial_filter, *eset);
if(sort) if(sort)
eset->sort(); eset->sort();
...@@ -2643,7 +2643,7 @@ void card::filter_self_effect(uint32_t code, effect_set* eset, uint8_t sort) { ...@@ -2643,7 +2643,7 @@ void card::filter_self_effect(uint32_t code, effect_set* eset, uint8_t sort) {
auto xmaterial_filter = [](card* c, effect* peffect) -> bool { auto xmaterial_filter = [](card* c, effect* peffect) -> bool {
return !(peffect->type & EFFECT_TYPE_FIELD); return !(peffect->type & EFFECT_TYPE_FIELD);
}; };
for (const auto& pcard : xyz_materials) for (auto& pcard : xyz_materials)
filter_effect_container(pcard->xmaterial_effect, code, xmaterial_filter, *eset); filter_effect_container(pcard->xmaterial_effect, code, xmaterial_filter, *eset);
if (sort) if (sort)
eset->sort(); eset->sort();
...@@ -2652,17 +2652,17 @@ void card::filter_self_effect(uint32_t code, effect_set* eset, uint8_t sort) { ...@@ -2652,17 +2652,17 @@ void card::filter_self_effect(uint32_t code, effect_set* eset, uint8_t sort) {
void card::filter_immune_effect() { void card::filter_immune_effect() {
immune_effect.clear(); immune_effect.clear();
filter_effect_container(single_effect, EFFECT_IMMUNE_EFFECT, accept_filter, immune_effect); filter_effect_container(single_effect, EFFECT_IMMUNE_EFFECT, accept_filter, immune_effect);
for (const auto& pcard : equiping_cards) for (auto& pcard : equiping_cards)
filter_effect_container(pcard->equip_effect, EFFECT_IMMUNE_EFFECT, accept_filter, immune_effect); filter_effect_container(pcard->equip_effect, EFFECT_IMMUNE_EFFECT, accept_filter, immune_effect);
auto target_filter = [](card* c, effect* peffect) -> bool { auto target_filter = [](card* c, effect* peffect) -> bool {
return peffect->is_target(c); return peffect->is_target(c);
}; };
for (const auto& pcard : effect_target_owner) for (auto& pcard : effect_target_owner)
filter_effect_container(pcard->target_effect, EFFECT_IMMUNE_EFFECT, target_filter, immune_effect); filter_effect_container(pcard->target_effect, EFFECT_IMMUNE_EFFECT, target_filter, immune_effect);
auto xmaterial_filter = [](card* c, effect* peffect) -> bool { auto xmaterial_filter = [](card* c, effect* peffect) -> bool {
return !(peffect->type & EFFECT_TYPE_FIELD); return !(peffect->type & EFFECT_TYPE_FIELD);
}; };
for (const auto& pcard : xyz_materials) for (auto& pcard : xyz_materials)
filter_effect_container(pcard->xmaterial_effect, EFFECT_IMMUNE_EFFECT, xmaterial_filter, immune_effect); filter_effect_container(pcard->xmaterial_effect, EFFECT_IMMUNE_EFFECT, xmaterial_filter, immune_effect);
filter_effect_container(pduel->game_field->effects.aura_effect, EFFECT_IMMUNE_EFFECT, target_filter, immune_effect); filter_effect_container(pduel->game_field->effects.aura_effect, EFFECT_IMMUNE_EFFECT, target_filter, immune_effect);
immune_effect.sort(); immune_effect.sort();
...@@ -2930,17 +2930,17 @@ effect* card::is_affected_by_effect(uint32_t code) { ...@@ -2930,17 +2930,17 @@ effect* card::is_affected_by_effect(uint32_t code) {
effect* peffect = find_effect(single_effect, code, default_single_filter); effect* peffect = find_effect(single_effect, code, default_single_filter);
if (peffect) if (peffect)
return peffect; return peffect;
for (const auto& pcard : equiping_cards) { for (auto& pcard : equiping_cards) {
peffect = find_effect(pcard->equip_effect, code, default_equip_filter); peffect = find_effect(pcard->equip_effect, code, default_equip_filter);
if (peffect) if (peffect)
return peffect; return peffect;
} }
for (const auto& pcard : effect_target_owner) { for (auto& pcard : effect_target_owner) {
peffect = find_effect(pcard->target_effect, code, default_target_filter); peffect = find_effect(pcard->target_effect, code, default_target_filter);
if (peffect) if (peffect)
return peffect; return peffect;
} }
for (const auto& pcard : xyz_materials) { for (auto& pcard : xyz_materials) {
peffect = find_effect(pcard->xmaterial_effect, code, default_xmaterial_filter); peffect = find_effect(pcard->xmaterial_effect, code, default_xmaterial_filter);
if (peffect) if (peffect)
return peffect; return peffect;
...@@ -2960,7 +2960,7 @@ effect* card::is_affected_by_effect(int32_t code, card* target) { ...@@ -2960,7 +2960,7 @@ effect* card::is_affected_by_effect(int32_t code, card* target) {
auto equip_filter = [](card* c, effect* peffect, card* target) -> bool { auto equip_filter = [](card* c, effect* peffect, card* target) -> bool {
return default_equip_filter(c, peffect) && peffect->get_value(target); return default_equip_filter(c, peffect) && peffect->get_value(target);
}; };
for (const auto& pcard : equiping_cards) { for (auto& pcard : equiping_cards) {
peffect = find_effect_with_target(pcard->equip_effect, code, equip_filter, target); peffect = find_effect_with_target(pcard->equip_effect, code, equip_filter, target);
if (peffect) if (peffect)
return peffect; return peffect;
...@@ -2968,7 +2968,7 @@ effect* card::is_affected_by_effect(int32_t code, card* target) { ...@@ -2968,7 +2968,7 @@ effect* card::is_affected_by_effect(int32_t code, card* target) {
auto target_filter = [](card* c, effect* peffect, card* target) -> bool { auto target_filter = [](card* c, effect* peffect, card* target) -> bool {
return default_target_filter(c, peffect) && peffect->get_value(target); return default_target_filter(c, peffect) && peffect->get_value(target);
}; };
for (const auto& pcard : effect_target_owner) { for (auto& pcard : effect_target_owner) {
peffect = find_effect_with_target(pcard->target_effect, code, target_filter, target); peffect = find_effect_with_target(pcard->target_effect, code, target_filter, target);
if (peffect) if (peffect)
return peffect; return peffect;
...@@ -2976,7 +2976,7 @@ effect* card::is_affected_by_effect(int32_t code, card* target) { ...@@ -2976,7 +2976,7 @@ effect* card::is_affected_by_effect(int32_t code, card* target) {
auto xmaterial_filter = [](card* c, effect* peffect, card* target) -> bool { auto xmaterial_filter = [](card* c, effect* peffect, card* target) -> bool {
return default_xmaterial_filter(c, peffect) && peffect->get_value(target); return default_xmaterial_filter(c, peffect) && peffect->get_value(target);
}; };
for (const auto& pcard : xyz_materials) { for (auto& pcard : xyz_materials) {
peffect = find_effect_with_target(pcard->xmaterial_effect, code, xmaterial_filter, target); peffect = find_effect_with_target(pcard->xmaterial_effect, code, xmaterial_filter, target);
if (peffect) if (peffect)
return peffect; return peffect;
...@@ -4151,7 +4151,7 @@ int32_t card::is_can_be_link_material(card* scard) { ...@@ -4151,7 +4151,7 @@ int32_t card::is_can_be_link_material(card* scard) {
* @param filter Lua function filter(e) * @param filter Lua function filter(e)
*/ */
int32_t card::is_original_effect_property(int32_t filter) { int32_t card::is_original_effect_property(int32_t filter) {
for (const auto& peffect : initial_effect) { for (auto& peffect : initial_effect) {
pduel->lua->add_param(peffect, PARAM_TYPE_EFFECT); pduel->lua->add_param(peffect, PARAM_TYPE_EFFECT);
if (pduel->lua->check_condition(filter, 1)) if (pduel->lua->check_condition(filter, 1))
return TRUE; return TRUE;
...@@ -4162,7 +4162,7 @@ int32_t card::is_original_effect_property(int32_t filter) { ...@@ -4162,7 +4162,7 @@ int32_t card::is_original_effect_property(int32_t filter) {
* @param filter Lua function filter(e) * @param filter Lua function filter(e)
*/ */
int32_t card::is_effect_property(int32_t filter) { int32_t card::is_effect_property(int32_t filter) {
for (const auto& peffect : initial_effect) { for (auto& peffect : initial_effect) {
if (current.is_location(LOCATION_MZONE) && !peffect->is_monster_effect()) if (current.is_location(LOCATION_MZONE) && !peffect->is_monster_effect())
continue; continue;
if (current.is_location(LOCATION_SZONE) && !peffect->in_range(this)) if (current.is_location(LOCATION_SZONE) && !peffect->in_range(this))
...@@ -4171,7 +4171,7 @@ int32_t card::is_effect_property(int32_t filter) { ...@@ -4171,7 +4171,7 @@ int32_t card::is_effect_property(int32_t filter) {
if(pduel->lua->check_condition(filter, 1)) if(pduel->lua->check_condition(filter, 1))
return TRUE; return TRUE;
} }
for (const auto& peffect : owning_effect) { for (auto& peffect : owning_effect) {
if (current.is_location(LOCATION_MZONE) && !peffect->is_monster_effect()) if (current.is_location(LOCATION_MZONE) && !peffect->is_monster_effect())
continue; continue;
if (current.is_location(LOCATION_SZONE) && !peffect->in_range(this)) if (current.is_location(LOCATION_SZONE) && !peffect->in_range(this))
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
duel::duel() { duel::duel() {
lua = new interpreter(this); lua = new interpreter(this);
game_field = new field(this); game_field = new field(this);
game_field->temp_card = new_card(0); game_field->temp_card = new_card(TEMP_CARD_ID);
message_buffer.reserve(SIZE_MESSAGE_BUFFER); message_buffer.reserve(SIZE_MESSAGE_BUFFER);
#ifdef _WIN32 #ifdef _WIN32
_set_error_mode(_OUT_TO_MSGBOX); _set_error_mode(_OUT_TO_MSGBOX);
...@@ -45,8 +45,11 @@ void duel::clear() { ...@@ -45,8 +45,11 @@ void duel::clear() {
cards.clear(); cards.clear();
groups.clear(); groups.clear();
effects.clear(); effects.clear();
assumes.clear();
sgroups.clear();
uncopy.clear();
game_field = new field(this); game_field = new field(this);
game_field->temp_card = new_card(0); game_field->temp_card = new_card(TEMP_CARD_ID);
} }
card* duel::new_card(uint32_t code) { card* duel::new_card(uint32_t code) {
card* pcard = new card(this); card* pcard = new card(this);
......
...@@ -801,11 +801,11 @@ int32_t field::get_szone_limit(uint8_t playerid, uint8_t uplayer, uint32_t reaso ...@@ -801,11 +801,11 @@ int32_t field::get_szone_limit(uint8_t playerid, uint8_t uplayer, uint32_t reaso
} }
uint32_t field::get_linked_zone(int32_t playerid) { uint32_t field::get_linked_zone(int32_t playerid) {
uint32_t zones = 0; uint32_t zones = 0;
for(const auto& pcard : player[playerid].list_mzone) { for(auto& pcard : player[playerid].list_mzone) {
if(pcard) if(pcard)
zones |= pcard->get_linked_zone() & 0xffff; zones |= pcard->get_linked_zone() & 0xffff;
} }
for(const auto& pcard : player[1 - playerid].list_mzone) { for(auto& pcard : player[1 - playerid].list_mzone) {
if(pcard) if(pcard)
zones |= pcard->get_linked_zone() >> 16; zones |= pcard->get_linked_zone() >> 16;
} }
...@@ -1932,7 +1932,7 @@ void field::ritual_release(const card_set& material) { ...@@ -1932,7 +1932,7 @@ void field::ritual_release(const card_set& material) {
card_set rel; card_set rel;
card_set rem; card_set rem;
card_set tgy; card_set tgy;
for(const auto& pcard : material) { for(auto& pcard : material) {
if(pcard->current.location == LOCATION_GRAVE) if(pcard->current.location == LOCATION_GRAVE)
rem.insert(pcard); rem.insert(pcard);
else if(pcard->current.location == LOCATION_OVERLAY || pcard->current.location == LOCATION_EXTRA) else if(pcard->current.location == LOCATION_OVERLAY || pcard->current.location == LOCATION_EXTRA)
......
...@@ -148,10 +148,6 @@ int32_t scriptlib::debug_reload_field_begin(lua_State *L) { ...@@ -148,10 +148,6 @@ int32_t scriptlib::debug_reload_field_begin(lua_State *L) {
pduel->game_field->core.duel_rule = 1; pduel->game_field->core.duel_rule = 1;
else else
pduel->game_field->core.duel_rule = CURRENT_RULE; pduel->game_field->core.duel_rule = CURRENT_RULE;
if (pduel->game_field->core.duel_rule == MASTER_RULE3) {
pduel->game_field->player[0].szone_size = 8;
pduel->game_field->player[1].szone_size = 8;
}
return 0; return 0;
} }
int32_t scriptlib::debug_reload_field_end(lua_State *L) { int32_t scriptlib::debug_reload_field_end(lua_State *L) {
......
...@@ -70,13 +70,14 @@ extern "C" DECL_DLLEXPORT intptr_t create_duel(uint_fast32_t seed) { ...@@ -70,13 +70,14 @@ extern "C" DECL_DLLEXPORT intptr_t create_duel(uint_fast32_t seed) {
} }
extern "C" DECL_DLLEXPORT void start_duel(intptr_t pduel, uint32_t options) { extern "C" DECL_DLLEXPORT void start_duel(intptr_t pduel, uint32_t options) {
duel* pd = (duel*)pduel; duel* pd = (duel*)pduel;
pd->game_field->core.duel_options |= options & 0xffff; uint16_t duel_rule = options >> 16;
int32_t duel_rule = options >> 16; uint16_t duel_options = options & 0xffff;
pd->game_field->core.duel_options |= duel_options;
if (duel_rule >= 1 && duel_rule <= CURRENT_RULE) if (duel_rule >= 1 && duel_rule <= CURRENT_RULE)
pd->game_field->core.duel_rule = duel_rule; pd->game_field->core.duel_rule = duel_rule;
else if(options & DUEL_OBSOLETE_RULING) //provide backward compatibility with replay else if(options & DUEL_OBSOLETE_RULING) //provide backward compatibility with replay
pd->game_field->core.duel_rule = 1; pd->game_field->core.duel_rule = 1;
else if (pd->game_field->core.duel_rule < 1 || pd->game_field->core.duel_rule > CURRENT_RULE)
pd->game_field->core.duel_rule = CURRENT_RULE; pd->game_field->core.duel_rule = CURRENT_RULE;
if (pd->game_field->core.duel_rule == MASTER_RULE3) { if (pd->game_field->core.duel_rule == MASTER_RULE3) {
pd->game_field->player[0].szone_size = 8; pd->game_field->player[0].szone_size = 8;
......
...@@ -397,13 +397,13 @@ int32_t field::draw(uint16_t step, effect* reason_effect, uint32_t reason, uint8 ...@@ -397,13 +397,13 @@ int32_t field::draw(uint16_t step, effect* reason_effect, uint32_t reason, uint8
pduel->write_buffer8(MSG_DRAW); pduel->write_buffer8(MSG_DRAW);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
pduel->write_buffer8((uint8_t)cv.size()); pduel->write_buffer8((uint8_t)cv.size());
for (const auto& pcard : cv) for (auto& pcard : cv)
pduel->write_buffer32(pcard->data.code | (pcard->is_position(POS_FACEUP) ? 0x80000000 : 0)); pduel->write_buffer32(pcard->data.code | (pcard->is_position(POS_FACEUP) ? 0x80000000 : 0));
if(core.deck_reversed && (public_count < cv.size())) { if(core.deck_reversed && (public_count < cv.size())) {
pduel->write_buffer8(MSG_CONFIRM_CARDS); pduel->write_buffer8(MSG_CONFIRM_CARDS);
pduel->write_buffer8(1 - playerid); pduel->write_buffer8(1 - playerid);
pduel->write_buffer8((uint8_t)drawed_set->size()); pduel->write_buffer8((uint8_t)drawed_set->size());
for(const auto& pcard : *drawed_set) { for(auto& pcard : *drawed_set) {
pduel->write_buffer32(pcard->data.code); pduel->write_buffer32(pcard->data.code);
pduel->write_buffer8(pcard->current.controler); pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location); pduel->write_buffer8(pcard->current.location);
......
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