Commit 0d2d78fc authored by salix5's avatar salix5

edit

parent 9516857b
......@@ -999,7 +999,7 @@ void card::cancel_field_effect() {
if(unique_code && (current.location & unique_location))
pduel->game_field->remove_unique_card(this);
}
void card::enable_field_effect(int32 enabled) {
void card::enable_field_effect(bool enabled) {
if (current.location == 0)
return;
if ((enabled && get_status(STATUS_EFFECT_ENABLED)) || (!enabled && !get_status(STATUS_EFFECT_ENABLED)))
......@@ -1390,6 +1390,7 @@ void card::reset_effect_count() {
peffect->recharge();
}
}
// refresh STATUS_DISABLED based on EFFECT_DISABLE and EFFECT_CANNOT_DISABLE
int32 card::refresh_disable_status() {
int32 pre_dis = is_status(STATUS_DISABLED);
filter_immune_effect();
......@@ -1687,6 +1688,7 @@ void card::filter_single_continuous_effect(int32 code, effect_set* eset, uint8 s
if(sort)
eset->sort();
}
// refresh this->immune_effect
void card::filter_immune_effect() {
effect* peffect;
immune_effect.clear();
......@@ -1712,6 +1714,9 @@ void card::filter_immune_effect() {
}
immune_effect.sort();
}
// for all disable-related peffect of this,
// 1. put all cards in the target of peffect into effects.disable_check_set, effects.disable_check_list
// 2. add equiping_target of peffect into effects.disable_check_set, effects.disable_check_list
void card::filter_disable_related_cards() {
for (auto it = indexer.begin(); it != indexer.end(); ++it) {
effect* peffect = it->first;
......@@ -1858,6 +1863,7 @@ void card::filter_spsummon_procedure_g(uint8 playerid, effect_set* peset) {
pduel->game_field->core.reason_player = op;
}
}
// return: an effect with code which affects this or 0
effect* card::is_affected_by_effect(int32 code) {
effect* peffect;
auto rg = single_effect.equal_range(code);
......@@ -2319,6 +2325,7 @@ int32 card::is_setable_szone(uint8 playerid, uint8 ignore_fd) {
pduel->game_field->restore_lp_cost();
return TRUE;
}
// return: this is affected by peffect or not
int32 card::is_affect_by_effect(effect* peffect) {
if(is_status(STATUS_SUMMONING))
return FALSE;
......
......@@ -187,7 +187,7 @@ public:
void xyz_remove(card* mat);
void apply_field_effect();
void cancel_field_effect();
void enable_field_effect(int32 enabled);
void enable_field_effect(bool enabled);
int32 add_effect(effect* peffect);
void remove_effect(effect* peffect);
void remove_effect(effect* peffect, effect_container::iterator it);
......
......@@ -376,7 +376,7 @@ int32 effect::is_activate_check(uint8 playerid, const tevent& e, int32 neglect_c
pduel->game_field->restore_lp_cost();
return result;
}
// check if pcard is the target of a field effect
// check if pcard is the target of the field effect this
int32 effect::is_target(card* pcard) {
if(type & EFFECT_TYPE_ACTIONS)
return FALSE;
......
......@@ -897,6 +897,7 @@ void field::filter_field_effect(uint32 code, effect_set* eset, uint8 sort) {
if(sort)
eset->sort();
}
// put all cards in the target of peffect into cset
void field::filter_affected_cards(effect* peffect, card_set* cset) {
if ((peffect->type & EFFECT_TYPE_ACTIONS) || !(peffect->type & EFFECT_TYPE_FIELD) || peffect->is_flag(EFFECT_FLAG_PLAYER_TARGET))
return;
......@@ -1389,6 +1390,7 @@ int32 field::get_overlay_count(uint8 self, uint8 s, uint8 o) {
}
return count;
}
// put all cards in the target of peffect into effects.disable_check_set, effects.disable_check_list
void field::update_disable_check_list(effect* peffect) {
card_set cset;
filter_affected_cards(peffect, &cset);
......
......@@ -43,7 +43,7 @@ int32 scriptlib::debug_add_card(lua_State *L) {
pduel->game_field->add_card(playerid, pcard, location, sequence);
pcard->current.position = position;
if(!(location & LOCATION_ONFIELD) || (position & POS_FACEUP)) {
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
pduel->game_field->adjust_instant();
}
if(proc)
......
......@@ -599,7 +599,7 @@ int32 scriptlib::duel_move_to_field(lua_State *L) {
uint32 positions = lua_tointeger(L, 5);
uint32 enable = lua_toboolean(L, 6);
duel* pduel = pcard->pduel;
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
pduel->game_field->adjust_instant();
pduel->game_field->move_to_field(pcard, move_player, playerid, destination, positions, enable);
pduel->game_field->core.subunits.begin()->type = PROCESSOR_MOVETOFIELD_S;
......@@ -616,7 +616,7 @@ int32 scriptlib::duel_return_to_field(lua_State *L) {
if(lua_gettop(L) > 1)
pos = lua_tointeger(L, 2);
duel* pduel = pcard->pduel;
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
pduel->game_field->adjust_instant();
pduel->game_field->refresh_location_info_instant();
pduel->game_field->move_to_field(pcard, pcard->previous.controler, pcard->previous.controler, pcard->previous.location, pos, TRUE, 1);
......@@ -974,7 +974,7 @@ int32 scriptlib::duel_equip_complete(lua_State *L) {
for(auto cit = pduel->game_field->core.equiping_cards.begin(); cit != pduel->game_field->core.equiping_cards.end(); ++cit) {
card* equip_card = *cit;
if(equip_card->is_position(POS_FACEUP))
equip_card->enable_field_effect(TRUE);
equip_card->enable_field_effect(true);
etargets.insert(equip_card->equiping_target);
}
pduel->game_field->adjust_instant();
......
......@@ -140,7 +140,7 @@ extern "C" DECL_DLLEXPORT void new_card(ptr pduel, uint32 code, uint8 owner, uin
ptduel->game_field->add_card(playerid, pcard, location, sequence);
pcard->current.position = position;
if(!(location & LOCATION_ONFIELD) || (position & POS_FACEUP)) {
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
ptduel->game_field->adjust_instant();
}
if(location & LOCATION_ONFIELD) {
......
......@@ -320,7 +320,7 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
}
drawed++;
pcard = player[playerid].list_main.back();
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
pcard->cancel_field_effect();
player[playerid].list_main.pop_back();
pcard->previous.controler = pcard->current.controler;
......@@ -333,7 +333,7 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
pcard->current.reason = reason | REASON_DRAW;
pcard->current.location = 0;
add_card(playerid, pcard, LOCATION_HAND, 0);
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
effect* pub = pcard->is_affected_by_effect(EFFECT_PUBLIC);
if(pub)
public_count++;
......@@ -1093,7 +1093,7 @@ int32 field::equip(uint16 step, uint8 equip_player, card * equip_card, card * ta
return TRUE;
if(equip_card->equiping_target) {
equip_card->unequip();
equip_card->enable_field_effect(FALSE);
equip_card->enable_field_effect(false);
return FALSE;
}
if(equip_card->current.location == LOCATION_SZONE) {
......@@ -1103,7 +1103,7 @@ int32 field::equip(uint16 step, uint8 equip_player, card * equip_card, card * ta
}
if(get_useable_count(equip_player, LOCATION_SZONE, equip_player, LOCATION_REASON_TOFIELD) <= 0)
return TRUE;
equip_card->enable_field_effect(FALSE);
equip_card->enable_field_effect(false);
move_to_field(equip_card, equip_player, equip_player, LOCATION_SZONE, (up || equip_card->is_position(POS_FACEUP)) ? POS_FACEUP : POS_FACEDOWN, FALSE, FALSE, TRUE);
return FALSE;
}
......@@ -1129,7 +1129,7 @@ int32 field::equip(uint16 step, uint8 equip_player, card * equip_card, card * ta
target->effect_target_owner.insert(equip_card);
if(!is_step) {
if(equip_card->is_position(POS_FACEUP))
equip_card->enable_field_effect(TRUE);
equip_card->enable_field_effect(true);
adjust_disable_check_list();
card_set cset;
cset.insert(equip_card);
......@@ -1433,7 +1433,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
if(proc->o_range)
targetplayer = 1 - sumplayer;
}
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
move_to_field(target, sumplayer, targetplayer, LOCATION_MZONE, positions);
core.summoning_card = target;
core.units.begin()->step = 10;
......@@ -1443,7 +1443,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
core.summon_depth--;
if(core.summon_depth)
return TRUE;
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
target->current.reason_effect = 0;
target->current.reason_player = sumplayer;
effect* deffect = pduel->new_effect();
......@@ -1553,7 +1553,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
}
target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_SUMMON_TURN, TRUE);
target->enable_field_effect(TRUE);
target->enable_field_effect(true);
if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT);
core.summoning_card = 0;
......@@ -1636,7 +1636,7 @@ int32 field::flip_summon(uint16 step, uint8 sumplayer, card * target) {
}
case 3: {
target->set_status(STATUS_SUMMONING, FALSE);
target->enable_field_effect(TRUE);
target->enable_field_effect(true);
if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_FLIP_SUMMON_TURN, TRUE);
......@@ -1867,7 +1867,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
if(proc->o_range)
targetplayer = 1 - setplayer;
}
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
move_to_field(target, setplayer, targetplayer, LOCATION_MZONE, positions);
return FALSE;
}
......@@ -1919,7 +1919,7 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target) {
return FALSE;
}
case 1: {
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
move_to_field(target, setplayer, toplayer, LOCATION_SZONE, POS_FACEDOWN);
return FALSE;
}
......@@ -1980,7 +1980,7 @@ int32 field::sset_g(uint16 step, uint8 setplayer, uint8 toplayer, group* ptarget
case 1: {
card_set* set_cards = (card_set*)ptarget;
card* target = *set_cards->begin();
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
move_to_field(target, setplayer, toplayer, LOCATION_SZONE, POS_FACEDOWN, FALSE);
return FALSE;
}
......@@ -2134,7 +2134,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
}
if(positions == 0)
positions = POS_FACEUP_ATTACK;
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
move_to_field(target, sumplayer, targetplayer, LOCATION_MZONE, positions);
target->current.reason = REASON_SPSUMMON;
target->current.reason_effect = peffect;
......@@ -2217,7 +2217,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
oeit->second = 0;
target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_PROC_COMPLETE | STATUS_SPSUMMON_TURN, TRUE);
target->enable_field_effect(TRUE);
target->enable_field_effect(true);
if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT);
core.summoning_card = 0;
......@@ -2294,7 +2294,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
case 23: {
effect* peffect = core.units.begin()->peffect;
card* pcard = *core.units.begin()->ptarget->it;
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
pcard->current.reason = REASON_SPSUMMON;
pcard->current.reason_effect = peffect;
pcard->current.reason_player = sumplayer;
......@@ -2371,7 +2371,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
(*cit)->set_status(STATUS_SUMMONING, FALSE);
(*cit)->set_status(STATUS_SPSUMMON_TURN, TRUE);
(*cit)->enable_field_effect(TRUE);
(*cit)->enable_field_effect(true);
if((*cit)->is_status(STATUS_DISABLED))
(*cit)->reset(RESET_DISABLE, RESET_EVENT);
}
......@@ -2450,7 +2450,7 @@ int32 field::special_summon_step(uint16 step, group * targets, card * target) {
case 1: {
if(!targets)
core.special_summoning.insert(target);
target->enable_field_effect(FALSE);
target->enable_field_effect(false);
check_card_counter(target, 3, target->summon_player);
move_to_field(target, target->summon_player, playerid, LOCATION_MZONE, positions);
return FALSE;
......@@ -2527,7 +2527,7 @@ int32 field::special_summon(uint16 step, effect * reason_effect, uint8 reason_pl
(*cit)->set_status(STATUS_SPSUMMON_STEP, FALSE);
(*cit)->set_status(STATUS_SPSUMMON_TURN, TRUE);
if((*cit)->is_position(POS_FACEUP))
(*cit)->enable_field_effect(TRUE);
(*cit)->enable_field_effect(true);
}
adjust_instant();
return FALSE;
......@@ -3136,7 +3136,7 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
case 3: {
uint32 dest, redirect, redirect_seq, check_cb;
for(auto cit = targets->container.begin(); cit != targets->container.end(); ++cit)
(*cit)->enable_field_effect(FALSE);
(*cit)->enable_field_effect(false);
adjust_disable_check_list();
for(auto cit = targets->container.begin(); cit != targets->container.end(); ++cit) {
card* pcard = *cit;
......@@ -3231,7 +3231,7 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
uint32 check_cb = (pcard->operation_param >> 20) & 0xf;
if(check_cb)
param->predirect = pcard->is_affected_by_effect(EFFECT_TO_GRAVE_REDIRECT_CB);
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
if(pcard->data.type & TYPE_TOKEN) {
pduel->write_buffer8(MSG_MOVE);
pduel->write_buffer32(pcard->data.code);
......@@ -3431,7 +3431,7 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
}
}
if(!(pcard->data.type & TYPE_TOKEN)) {
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
if(nloc == LOCATION_HAND) {
tohand.insert(pcard);
pcard->reset(RESET_TOHAND, RESET_EVENT);
......@@ -3575,7 +3575,7 @@ int32 field::discard_deck(uint16 step, uint8 playerid, uint8 count, uint32 reaso
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->current.sequence);
pduel->write_buffer8(pcard->current.position);
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
pcard->cancel_field_effect();
player[playerid].list_main.pop_back();
pcard->previous.controler = pcard->current.controler;
......@@ -3585,7 +3585,7 @@ int32 field::discard_deck(uint16 step, uint8 playerid, uint8 count, uint32 reaso
pcard->current.controler = PLAYER_NONE;
pcard->current.location = 0;
add_card(pcard->owner, pcard, dest, 0);
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
pcard->current.position = POS_FACEUP;
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
......@@ -3773,7 +3773,7 @@ int32 field::move_to_field(uint16 step, card * target, uint32 enable, uint32 ret
if((target->previous.location == LOCATION_SZONE) && target->equiping_target)
target->unequip();
if(enable || ((ret == 1) && target->is_position(POS_FACEUP)))
target->enable_field_effect(TRUE);
target->enable_field_effect(true);
if(ret == 1 && target->current.location == LOCATION_MZONE && !(target->data.type & TYPE_MONSTER))
send_to(target, 0, REASON_RULE, PLAYER_NONE, PLAYER_NONE, LOCATION_GRAVE, 0, 0);
adjust_disable_check_list();
......@@ -3834,7 +3834,7 @@ int32 field::change_position(uint16 step, group * targets, effect * reason_effec
}
if(enable) {
if(!reason_effect || !(reason_effect->type & 0x7f0) || pcard->current.location != LOCATION_MZONE)
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
else
core.delayed_enable_set.insert(pcard);
} else
......@@ -3850,7 +3850,7 @@ int32 field::change_position(uint16 step, group * targets, effect * reason_effec
trapmonster = true;
pcard->reset(RESET_TURN_SET, RESET_EVENT);
pcard->set_status(STATUS_SET_TURN, TRUE);
pcard->enable_field_effect(FALSE);
pcard->enable_field_effect(false);
pcard->summon_info &= 0xdf00ffff;
if((pcard->summon_info & SUMMON_TYPE_PENDULUM) == SUMMON_TYPE_PENDULUM)
pcard->summon_info &= 0xf000ffff;
......
......@@ -4243,7 +4243,7 @@ int32 field::add_chain(uint16 step) {
}
}
if(peffect->handler->current.location == LOCATION_HAND) {
peffect->handler->enable_field_effect(FALSE);
peffect->handler->enable_field_effect(false);
peffect->handler->set_status(STATUS_ACT_FROM_HAND, TRUE);
move_to_field(peffect->handler, peffect->handler->current.controler, peffect->handler->current.controler, LOCATION_SZONE, POS_FACEUP);
} else {
......@@ -4567,12 +4567,12 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2
card* pcard = peffect->handler;
if((peffect->type & EFFECT_TYPE_ACTIVATE) && pcard->is_has_relation(*cait)) {
pcard->set_status(STATUS_ACTIVATED, TRUE);
pcard->enable_field_effect(TRUE);
pcard->enable_field_effect(true);
if(core.duel_options & DUEL_OBSOLETE_RULING) {
if(pcard->data.type & TYPE_FIELD) {
card* fscard = player[1 - pcard->current.controler].list_szone[5];
if(fscard && fscard->is_position(POS_FACEUP))
fscard->enable_field_effect(FALSE);
fscard->enable_field_effect(false);
}
}
adjust_instant();
......@@ -4717,7 +4717,7 @@ int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2
}
for(auto cit = core.delayed_enable_set.begin(); cit != core.delayed_enable_set.end(); ++cit) {
if((*cit)->current.location == LOCATION_MZONE)
(*cit)->enable_field_effect(TRUE);
(*cit)->enable_field_effect(true);
}
core.delayed_enable_set.clear();
adjust_all();
......
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