Commit 65d710e8 authored by VanillaSalt's avatar VanillaSalt

fix

http://yugioh-wiki.net/index.php?%A5%C0%A5%E1%A1%BC%A5%B8%B7%D7%BB%BB%BB%FE
Q:ダメージ計算時に《幻獣機オライオン》をコストに《天罰》を発動した場合、《幻獣機オライオン》の任意効果は発動できますか?
A:はい、ダメージ計算を行う前に効果を発動できます。(14/03/28)

Q:チェーン1で《ガード・ブロック》を発動し、カードを1枚ドローした場合、《強烈なはたき落とし》を発動できますか?
A:はい、《ガード・ブロック》で1枚ドローした後に、《強烈なはたき落とし》を発動する事はできます。(14/03/31)

http://yugioh-wiki.net/index.php?%A5%C0%A5%E1%A1%BC%A5%B8%B7%D7%BB%BB%B8%E5
Q:「ダメージ計算後」のタイミングで複数のチェーンブロックを組むことはできますか?
A:ダメージ計算後のチェーンブロックは、1度しか作られません。(14/03/22)
parent 25bdab4c
...@@ -418,8 +418,8 @@ public: ...@@ -418,8 +418,8 @@ public:
int32 check_event_c(effect* peffect, uint8 playerid, int32 neglect_con, int32 neglect_cost, int32 copy_info, tevent* pe = 0); int32 check_event_c(effect* peffect, uint8 playerid, int32 neglect_con, int32 neglect_cost, int32 copy_info, tevent* pe = 0);
int32 check_hint_timing(effect* peffect); int32 check_hint_timing(effect* peffect);
int32 process_phase_event(int16 step, int32 phase_event); int32 process_phase_event(int16 step, int32 phase_event);
int32 process_point_event(int16 step, int32 special, int32 skip_new); int32 process_point_event(int16 step, int32 skip_trigger, int32 skip_freechain, int32 skip_new);
int32 process_quick_effect(int16 step, int32 special, uint8 priority); int32 process_quick_effect(int16 step, int32 skip_freechain, uint8 priority);
int32 process_instant_event(); int32 process_instant_event();
int32 process_single_event(); int32 process_single_event();
int32 process_idle_command(uint16 step); int32 process_idle_command(uint16 step);
...@@ -431,7 +431,7 @@ public: ...@@ -431,7 +431,7 @@ public:
int32 add_chain(uint16 step); int32 add_chain(uint16 step);
int32 sort_chain(uint16 step, uint8 tp); int32 sort_chain(uint16 step, uint8 tp);
int32 solve_continuous(uint16 step, effect* peffect, uint8 triggering_player); int32 solve_continuous(uint16 step, effect* peffect, uint8 triggering_player);
int32 solve_chain(uint16 step, uint32 skip_new); int32 solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2);
int32 break_effect(); int32 break_effect();
void adjust_instant(); void adjust_instant();
void adjust_all(); void adjust_all();
......
...@@ -1436,7 +1436,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1436,7 +1436,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
core.summoning_card = 0; core.summoning_card = 0;
raise_event(target, EVENT_SUMMON, proc, 0, sumplayer, sumplayer, 0); raise_event(target, EVENT_SUMMON, proc, 0, sumplayer, sumplayer, 0);
process_instant_event(); process_instant_event();
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, TRUE, TRUE); add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0x101, TRUE);
return FALSE; return FALSE;
} }
case 12: { case 12: {
...@@ -1547,7 +1547,7 @@ int32 field::flip_summon(uint16 step, uint8 sumplayer, card * target) { ...@@ -1547,7 +1547,7 @@ int32 field::flip_summon(uint16 step, uint8 sumplayer, card * target) {
target->set_status(STATUS_SUMMON_DISABLED, FALSE); target->set_status(STATUS_SUMMON_DISABLED, FALSE);
raise_event(target, EVENT_FLIP_SUMMON, 0, 0, sumplayer, sumplayer, 0); raise_event(target, EVENT_FLIP_SUMMON, 0, 0, sumplayer, sumplayer, 0);
process_instant_event(); process_instant_event();
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, TRUE, TRUE); add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0x101, TRUE);
} }
return FALSE; return FALSE;
} }
...@@ -2088,7 +2088,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui ...@@ -2088,7 +2088,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
target->set_status(STATUS_SUMMON_DISABLED, FALSE); target->set_status(STATUS_SUMMON_DISABLED, FALSE);
raise_event(target, EVENT_SPSUMMON, core.units.begin()->peffect, 0, sumplayer, sumplayer, 0); raise_event(target, EVENT_SPSUMMON, core.units.begin()->peffect, 0, sumplayer, sumplayer, 0);
process_instant_event(); process_instant_event();
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, TRUE, TRUE); add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0x101, TRUE);
return FALSE; return FALSE;
} }
case 11: { case 11: {
...@@ -2233,7 +2233,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui ...@@ -2233,7 +2233,7 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
raise_event(&cset, EVENT_SPSUMMON, core.units.begin()->peffect, 0, sumplayer, PLAYER_NONE, 0); raise_event(&cset, EVENT_SPSUMMON, core.units.begin()->peffect, 0, sumplayer, PLAYER_NONE, 0);
process_single_event(); process_single_event();
process_instant_event(); process_instant_event();
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, TRUE, TRUE); add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0x101, TRUE);
return FALSE; return FALSE;
} }
case 26: { case 26: {
......
...@@ -198,7 +198,7 @@ int32 field::process() { ...@@ -198,7 +198,7 @@ int32 field::process() {
return pduel->bufferlen; return pduel->bufferlen;
} }
case PROCESSOR_POINT_EVENT: { case PROCESSOR_POINT_EVENT: {
if(process_point_event(it->step, it->arg1, it->arg2)) if(process_point_event(it->step, it->arg1 & 0xff, (it->arg1 >> 8) & 0xff, it->arg2))
core.units.pop_front(); core.units.pop_front();
else else
it->step++; it->step++;
...@@ -247,7 +247,7 @@ int32 field::process() { ...@@ -247,7 +247,7 @@ int32 field::process() {
return pduel->bufferlen; return pduel->bufferlen;
} }
case PROCESSOR_SOLVE_CHAIN: { case PROCESSOR_SOLVE_CHAIN: {
if (solve_chain(it->step, it->arg1)) if (solve_chain(it->step, it->arg1, it->arg2))
core.units.pop_front(); core.units.pop_front();
else else
it->step++; it->step++;
...@@ -1707,12 +1707,12 @@ int32 field::process_phase_event(int16 step, int32 phase) { ...@@ -1707,12 +1707,12 @@ int32 field::process_phase_event(int16 step, int32 phase) {
} }
return TRUE; return TRUE;
} }
int32 field::process_point_event(int16 step, int32 special, int32 skip_new) { int32 field::process_point_event(int16 step, int32 skip_trigger, int32 skip_freechain, int32 skip_new) {
switch(step) { switch(step) {
case 0: { case 0: {
core.select_chains.clear(); core.select_chains.clear();
core.point_event.splice(core.point_event.end(), core.instant_event); core.point_event.splice(core.point_event.end(), core.instant_event);
if(special) { if(skip_trigger) {
core.units.begin()->step = 7; core.units.begin()->step = 7;
return FALSE; return FALSE;
} }
...@@ -2010,9 +2010,9 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) { ...@@ -2010,9 +2010,9 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) {
infos.priorities[0] = 0; infos.priorities[0] = 0;
infos.priorities[1] = 0; infos.priorities[1] = 0;
if(core.current_chain.size() == 0) if(core.current_chain.size() == 0)
add_process(PROCESSOR_QUICK_EFFECT, 0, 0, 0, special, infos.turn_player); add_process(PROCESSOR_QUICK_EFFECT, 0, 0, 0, skip_freechain, infos.turn_player);
else else
add_process(PROCESSOR_QUICK_EFFECT, 0, 0, 0, special, 1 - core.current_chain.back().triggering_player); add_process(PROCESSOR_QUICK_EFFECT, 0, 0, 0, skip_freechain, 1 - core.current_chain.back().triggering_player);
return FALSE; return FALSE;
} }
case 10: { case 10: {
...@@ -2024,7 +2024,7 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) { ...@@ -2024,7 +2024,7 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) {
if(core.current_chain.size()) { if(core.current_chain.size()) {
for(auto cait = core.current_chain.begin(); cait != core.current_chain.end(); ++cait) for(auto cait = core.current_chain.begin(); cait != core.current_chain.end(); ++cait)
cait->triggering_effect->handler->set_status(STATUS_CHAINING, FALSE); cait->triggering_effect->handler->set_status(STATUS_CHAINING, FALSE);
add_process(PROCESSOR_SOLVE_CHAIN, 0, 0, 0, skip_new, 0); add_process(PROCESSOR_SOLVE_CHAIN, 0, 0, 0, skip_trigger | ((skip_freechain | skip_new) << 8), skip_new);
} else { } else {
core.used_event.splice(core.used_event.end(), core.point_event); core.used_event.splice(core.used_event.end(), core.point_event);
if(core.chain_limit_p) { if(core.chain_limit_p) {
...@@ -2057,7 +2057,7 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) { ...@@ -2057,7 +2057,7 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) {
} }
return TRUE; return TRUE;
} }
int32 field::process_quick_effect(int16 step, int32 special, uint8 priority) { int32 field::process_quick_effect(int16 step, int32 skip_freechain, uint8 priority) {
pair<effect_container::iterator, effect_container::iterator> pr; pair<effect_container::iterator, effect_container::iterator> pr;
event_list::iterator evit; event_list::iterator evit;
effect* peffect; effect* peffect;
...@@ -2224,7 +2224,7 @@ int32 field::process_quick_effect(int16 step, int32 special, uint8 priority) { ...@@ -2224,7 +2224,7 @@ int32 field::process_quick_effect(int16 step, int32 special, uint8 priority) {
} }
} }
core.spe_effect[priority] = core.select_chains.size(); core.spe_effect[priority] = core.select_chains.size();
if(!special) { if(!skip_freechain) {
nil_event.event_code = EVENT_FREE_CHAIN; nil_event.event_code = EVENT_FREE_CHAIN;
pr = effects.activate_effect.equal_range(EVENT_FREE_CHAIN); pr = effects.activate_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) { for(; pr.first != pr.second; ++pr.first) {
...@@ -2295,7 +2295,7 @@ int32 field::process_quick_effect(int16 step, int32 special, uint8 priority) { ...@@ -2295,7 +2295,7 @@ int32 field::process_quick_effect(int16 step, int32 special, uint8 priority) {
} else { } else {
infos.priorities[priority] = 1; infos.priorities[priority] = 1;
if(!infos.priorities[0] || !infos.priorities[1]) if(!infos.priorities[0] || !infos.priorities[1])
add_process(PROCESSOR_QUICK_EFFECT, 1, 0, 0, special, 1 - priority); add_process(PROCESSOR_QUICK_EFFECT, 1, 0, 0, skip_freechain, 1 - priority);
else { else {
core.hint_timing[0] = 0; core.hint_timing[0] = 0;
core.hint_timing[1] = 0; core.hint_timing[1] = 0;
...@@ -3677,7 +3677,7 @@ int32 field::process_battle_command(uint16 step) { ...@@ -3677,7 +3677,7 @@ int32 field::process_battle_command(uint16 step) {
process_instant_event(); process_instant_event();
} }
if(!core.effect_damage_step || (core.effect_damage_step != 3)) { if(!core.effect_damage_step || (core.effect_damage_step != 3)) {
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, FALSE, FALSE); add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, FALSE, TRUE);
} else { } else {
break_effect(); break_effect();
} }
...@@ -4609,7 +4609,7 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl ...@@ -4609,7 +4609,7 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
} }
return TRUE; return TRUE;
} }
int32 field::solve_chain(uint16 step, uint32 skip_new) { int32 field::solve_chain(uint16 step, uint32 chainend_arg1, uint32 chainend_arg2) {
if(core.current_chain.size() == 0 && step == 0) if(core.current_chain.size() == 0 && step == 0)
return TRUE; return TRUE;
chain_array::reverse_iterator cait = core.current_chain.rbegin(); chain_array::reverse_iterator cait = core.current_chain.rbegin();
...@@ -4880,11 +4880,9 @@ int32 field::solve_chain(uint16 step, uint32 skip_new) { ...@@ -4880,11 +4880,9 @@ int32 field::solve_chain(uint16 step, uint32 skip_new) {
case 13: { case 13: {
raise_event((card*)0, EVENT_CHAIN_END, 0, 0, 0, 0, 0); raise_event((card*)0, EVENT_CHAIN_END, 0, 0, 0, 0, 0);
process_instant_event(); process_instant_event();
if(!skip_new) { core.hint_timing[0] |= TIMING_CHAIN_END;
core.hint_timing[0] |= TIMING_CHAIN_END; core.hint_timing[1] |= TIMING_CHAIN_END;
core.hint_timing[1] |= TIMING_CHAIN_END; add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, chainend_arg1, chainend_arg2);
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0, 0);
}
returns.ivalue[0] = TRUE; returns.ivalue[0] = TRUE;
return TRUE; return TRUE;
} }
......
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