Commit 18e35de0 authored by Momobako's avatar Momobako
parents 0df217c8 8a97fed9
......@@ -366,7 +366,7 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_FIRST_ATTACK 192
#define EFFECT_ATTACK_ALL 193
#define EFFECT_EXTRA_ATTACK 194
#define EFFECT_MUST_BE_ATTACKED 195
//#define EFFECT_MUST_BE_ATTACKED 195
#define EFFECT_ONLY_BE_ATTACKED 196
#define EFFECT_ATTACK_DISABLED 197
#define EFFECT_NO_BATTLE_DAMAGE 200
......@@ -433,12 +433,10 @@ inline effect_flag operator|(effect_flag flag1, effect_flag flag2)
#define EFFECT_ADD_SETCODE 334
#define EFFECT_NO_EFFECT_DAMAGE 335
#define EFFECT_UNSUMMONABLE_CARD 336
//#define EFFECT_DISABLE_CHAIN_FIELD 337
#define EFFECT_DISCARD_COST_CHANGE 338
#define EFFECT_HAND_SYNCHRO 339
#define EFFECT_ADD_FUSION_CODE 340
#define EFFECT_ADD_FUSION_SETCODE 341
#define EFFECT_RISE_TO_FULL_HEIGHT 342
#define EFFECT_ONLY_ATTACK_MONSTER 343
#define EFFECT_MUST_ATTACK_MONSTER 344
#define EFFECT_PATRICIAN_OF_DARKNESS 345
......
......@@ -2256,40 +2256,38 @@ int32 field::get_attack_target(card* pcard, card_vector* v, uint8 chain_attack)
effect* peffect;
card_vector* pv = NULL;
int32 atype = 0;
card_vector must_be_attack;
card_vector must_attack;
card_vector only_be_attack;
effect_set eset;
card_vector only_attack;
// find the universal set pv
pcard->direct_attackable = 0;
for(auto cit = player[1 - p].list_mzone.begin(); cit != player[1 - p].list_mzone.end(); ++cit) {
card* atarget = *cit;
if(atarget) {
if(atarget->is_affected_by_effect(EFFECT_MUST_BE_ATTACKED, pcard))
must_be_attack.push_back(atarget);
if(atarget->is_affected_by_effect(EFFECT_ONLY_BE_ATTACKED))
only_be_attack.push_back(atarget);
if(pcard->is_affected_by_effect(EFFECT_MUST_ATTACK_MONSTER, atarget))
must_attack.push_back(atarget);
if(pcard->is_affected_by_effect(EFFECT_ONLY_ATTACK_MONSTER, atarget))
only_attack.push_back(atarget);
}
}
pcard->filter_effect(EFFECT_RISE_TO_FULL_HEIGHT, &eset);
if(eset.size()) {
if(only_be_attack.size()) {
atype = 1;
std::set<uint32> idset;
for(int32 i = 0; i < eset.size(); ++i)
idset.insert(eset[i]->label);
if(idset.size() == 1 && only_be_attack.size() == 1 && only_be_attack.front()->fieldid_r == *idset.begin())
if(only_be_attack.size() == 1)
pv = &only_be_attack;
else
return atype;
} else if(pcard->is_affected_by_effect(EFFECT_ONLY_ATTACK_MONSTER)) {
atype = 2;
if(only_be_attack.size() == 1)
pv = &only_be_attack;
if(only_attack.size() == 1)
pv = &only_attack;
else
return atype;
} else if(pcard->is_affected_by_effect(EFFECT_MUST_ATTACK_MONSTER)) {
atype = 3;
if(must_be_attack.size())
pv = &must_be_attack;
if(must_attack.size())
pv = &must_attack;
else
return atype;
} else {
......@@ -2429,40 +2427,39 @@ bool field::confirm_attack_target() {
effect* peffect;
card_vector* pv = NULL;
int32 atype = 0;
card_vector must_be_attack;
card_vector must_attack;
card_vector only_be_attack;
card_vector only_attack;
effect_set eset;
// find the universal set
for(auto cit = player[1 - p].list_mzone.begin(); cit != player[1 - p].list_mzone.end(); ++cit) {
card* atarget = *cit;
if(atarget) {
if(atarget->is_affected_by_effect(EFFECT_MUST_BE_ATTACKED, pcard))
must_be_attack.push_back(atarget);
if(atarget->is_affected_by_effect(EFFECT_ONLY_BE_ATTACKED))
only_be_attack.push_back(atarget);
if(pcard->is_affected_by_effect(EFFECT_MUST_ATTACK_MONSTER, atarget))
must_attack.push_back(atarget);
if(pcard->is_affected_by_effect(EFFECT_ONLY_ATTACK_MONSTER, atarget))
only_attack.push_back(atarget);
}
}
pcard->filter_effect(EFFECT_RISE_TO_FULL_HEIGHT, &eset);
if(eset.size()) {
if(only_be_attack.size()) {
atype = 1;
std::set<uint32> idset;
for(int32 i = 0; i < eset.size(); ++i)
idset.insert(eset[i]->label);
if(idset.size()==1 && only_be_attack.size() == 1 && only_be_attack.front()->fieldid_r == *idset.begin())
if(only_be_attack.size() == 1)
pv = &only_be_attack;
else
return false;
} else if(pcard->is_affected_by_effect(EFFECT_ONLY_ATTACK_MONSTER)) {
atype = 2;
if(only_be_attack.size() == 1)
pv = &only_be_attack;
if(only_attack.size() == 1)
pv = &only_attack;
else
return false;
} else if(pcard->is_affected_by_effect(EFFECT_MUST_ATTACK_MONSTER)) {
atype = 3;
if(must_be_attack.size())
pv = &must_be_attack;
if(must_attack.size())
pv = &must_attack;
else
return false;
} else {
......
......@@ -2807,6 +2807,8 @@ int32 field::process_battle_command(uint16 step) {
core.units.begin()->arg2 = 1;
else core.units.begin()->arg2 = 0;
if(!peffect->value) {
reset_phase(PHASE_BATTLE_STEP);
adjust_all();
infos.phase = PHASE_BATTLE;
add_process(PROCESSOR_PHASE_EVENT, 0, 0, 0, PHASE_BATTLE, 0);
} else {
......@@ -3157,6 +3159,8 @@ int32 field::process_battle_command(uint16 step) {
core.attacker->attacked_cards.addcard(core.attack_target);
}
if(!peffect->value) {
reset_phase(PHASE_BATTLE_STEP);
adjust_all();
infos.phase = PHASE_BATTLE;
add_process(PROCESSOR_PHASE_EVENT, 0, 0, 0, PHASE_BATTLE, 0);
} else {
......@@ -3342,6 +3346,7 @@ int32 field::process_battle_command(uint16 step) {
|| core.attack_target->current.controler != core.attack_target->attack_controler
|| core.attack_target->fieldid_r != core.pre_field[1]))) {
reset_phase(PHASE_DAMAGE_CAL);
adjust_all();
infos.phase = PHASE_DAMAGE;
core.units.begin()->step = 32;
return FALSE;
......
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