Commit ebd4c1ee authored by VanillaSalt's avatar VanillaSalt

update

parent a592b04c
...@@ -1210,14 +1210,16 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1210,14 +1210,16 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
uint32 adv = is_player_can_summon(SUMMON_TYPE_ADVANCE, sumplayer, target); uint32 adv = is_player_can_summon(SUMMON_TYPE_ADVANCE, sumplayer, target);
if(max == 0 || !adv) { if(max == 0 || !adv) {
returns.bvalue[0] = 0; returns.bvalue[0] = 0;
core.units.begin()->step = 3;
} else { } else {
core.release_cards.clear(); core.release_cards.clear();
core.release_cards_ex.clear(); core.release_cards_ex.clear();
core.release_cards_ex_sum.clear(); core.release_cards_ex_sum.clear();
int32 rcount = get_summon_release_list(target, &core.release_cards, &core.release_cards_ex, &core.release_cards_ex_sum); int32 rcount = get_summon_release_list(target, &core.release_cards, &core.release_cards_ex, &core.release_cards_ex_sum);
if(rcount == 0) if(rcount == 0) {
returns.bvalue[0] = 0; returns.bvalue[0] = 0;
else { core.units.begin()->step = 3;
} else {
int32 fcount = get_useable_count(sumplayer, LOCATION_MZONE, sumplayer, LOCATION_REASON_TOFIELD); int32 fcount = get_useable_count(sumplayer, LOCATION_MZONE, sumplayer, LOCATION_REASON_TOFIELD);
if(min == 0 && (fcount > 0)) { if(min == 0 && (fcount > 0)) {
add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, sumplayer, 90); add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, sumplayer, 90);
...@@ -1245,7 +1247,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1245,7 +1247,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
min = -core.temp_var[1] + 1; min = -core.temp_var[1] + 1;
} }
core.temp_var[0] = min + (max << 16); core.temp_var[0] = min + (max << 16);
add_process(PROCESSOR_SELECT_TRIBUTE, 0, 0, 0, sumplayer, core.temp_var[0]); add_process(PROCESSOR_SELECT_TRIBUTE, 0, 0, 0, sumplayer + ((uint32)core.summon_cancelable << 16), core.temp_var[0]);
} }
return FALSE; return FALSE;
} }
...@@ -1340,10 +1342,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1340,10 +1342,7 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
(*cit)->current.reason_card = target; (*cit)->current.reason_card = target;
target->set_material(tributes); target->set_material(tributes);
release(tributes, 0, REASON_SUMMON | REASON_MATERIAL, sumplayer); release(tributes, 0, REASON_SUMMON | REASON_MATERIAL, sumplayer);
if(tributes->size()) target->summon_info = SUMMON_TYPE_NORMAL | SUMMON_TYPE_ADVANCE | (LOCATION_HAND << 16);
target->summon_info = SUMMON_TYPE_NORMAL | SUMMON_TYPE_ADVANCE | (LOCATION_HAND << 16);
else
target->summon_info = SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16);
delete tributes; delete tributes;
core.units.begin()->peffect = 0; core.units.begin()->peffect = 0;
adjust_all(); adjust_all();
...@@ -1679,14 +1678,6 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1679,14 +1678,6 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
int32 res = target->filter_set_procedure(setplayer, &eset, ignore_count, min_tribute); int32 res = target->filter_set_procedure(setplayer, &eset, ignore_count, min_tribute);
if((proc && res < 0) || res == -2) if((proc && res < 0) || res == -2)
return TRUE; return TRUE;
eset.clear();
target->filter_effect(EFFECT_MSET_COST, &eset);
for(int32 i = 0; i < eset.size(); ++i) {
if(eset[i]->operation) {
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_EXECUTE_OPERATION, 0, eset[i], 0, setplayer, 0);
}
}
return FALSE; return FALSE;
} }
case 1: { case 1: {
...@@ -1725,61 +1716,99 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1725,61 +1716,99 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
int32 max = required >> 16; int32 max = required >> 16;
if(min < min_tribute) if(min < min_tribute)
min = min_tribute; min = min_tribute;
required = min + (max << 16);
uint32 adv = is_player_can_mset(SUMMON_TYPE_ADVANCE, setplayer, target); uint32 adv = is_player_can_mset(SUMMON_TYPE_ADVANCE, setplayer, target);
if(max == 0 || !adv) if(max == 0 || !adv) {
returns.bvalue[0] = 0; returns.bvalue[0] = 0;
else { core.units.begin()->step = 3;
} else {
core.release_cards.clear(); core.release_cards.clear();
core.release_cards_ex.clear(); core.release_cards_ex.clear();
core.release_cards_ex_sum.clear(); core.release_cards_ex_sum.clear();
int32 rcount = get_summon_release_list(target, &core.release_cards, &core.release_cards_ex, &core.release_cards_ex_sum); int32 rcount = get_summon_release_list(target, &core.release_cards, &core.release_cards_ex, &core.release_cards_ex_sum);
if(rcount == 0) if(rcount == 0) {
returns.bvalue[0] = 0; returns.bvalue[0] = 0;
else { core.units.begin()->step = 3;
} else {
int32 fcount = get_useable_count(setplayer, LOCATION_MZONE, setplayer, LOCATION_REASON_TOFIELD); int32 fcount = get_useable_count(setplayer, LOCATION_MZONE, setplayer, LOCATION_REASON_TOFIELD);
if(min == 0 && fcount > 0) { if(min == 0 && fcount > 0) {
add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, setplayer, 90); add_process(PROCESSOR_SELECT_YESNO, 0, 0, 0, setplayer, 90);
core.temp_var[0] = required; core.temp_var[0] = required;
core.temp_var[1] = fcount; core.temp_var[1] = fcount;
core.units.begin()->step = 9;
} else { } else {
if(min < -fcount + 1) { if(min < -fcount + 1) {
min = -fcount + 1; min = -fcount + 1;
required = min + (max << 16); required = min + (max << 16);
} }
add_process(PROCESSOR_SELECT_TRIBUTE, 0, 0, 0, setplayer, required); add_process(PROCESSOR_SELECT_TRIBUTE, 0, 0, 0, setplayer + ((uint32)core.summon_cancelable << 16), required);
core.units.begin()->step = 3;
} }
} }
} }
return FALSE; return FALSE;
} }
case 3: { case 3: {
if(returns.ivalue[0])
returns.bvalue[0] = 0;
else {
int32 min = 1;
int32 max = core.temp_var[0] >> 16;
if(min < -core.temp_var[1] + 1) {
min = -core.temp_var[1] + 1;
}
core.temp_var[0] = min + (max << 16);
add_process(PROCESSOR_SELECT_TRIBUTE, 0, 0, 0, setplayer + ((uint32)core.summon_cancelable << 16), core.temp_var[0]);
}
return FALSE;
}
case 4: {
if(proc)
core.units.begin()->step = 5;
else {
if(returns.ivalue[0] == -1) {
return TRUE;
}
if(returns.bvalue[0]) {
card_set* tributes = new card_set;
for(int32 i = 0; i < returns.bvalue[0]; ++i)
tributes->insert(core.select_cards[returns.bvalue[i + 1]]);
core.units.begin()->peffect = (effect*)tributes;
}
}
effect_set eset;
target->filter_effect(EFFECT_MSET_COST, &eset);
for(int32 i = 0; i < eset.size(); ++i) {
if(eset[i]->operation) {
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_EXECUTE_OPERATION, 0, eset[i], 0, setplayer, 0);
}
}
return FALSE;
}
case 5: {
card_set* tributes = (card_set*)proc;
effect* pextra = 0; effect* pextra = 0;
if(!ignore_count && !core.extra_summon[setplayer]) if(!ignore_count && !core.extra_summon[setplayer])
pextra = target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT); pextra = target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT);
if(returns.bvalue[0]) { if(tributes) {
card_set tributes; for(auto cit = tributes->begin(); cit != tributes->end(); ++cit)
for(int32 i = 0; i < returns.bvalue[0]; ++i) { (*cit)->current.reason_card = target;
tributes.insert(core.select_cards[returns.bvalue[i + 1]]); target->set_material(tributes);
core.select_cards[returns.bvalue[i + 1]]->current.reason_card = target; release(tributes, 0, REASON_SUMMON | REASON_MATERIAL, setplayer);
} target->summon_info = SUMMON_TYPE_NORMAL | SUMMON_TYPE_ADVANCE | (LOCATION_HAND << 16);
target->set_material(&tributes); delete tributes;
release(&tributes, 0, REASON_SUMMON | REASON_MATERIAL, setplayer); core.units.begin()->peffect = 0;
if(tributes.size())
target->summon_info = SUMMON_TYPE_NORMAL | SUMMON_TYPE_ADVANCE | (LOCATION_HAND << 16);
else
target->summon_info = SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16);
adjust_all(); adjust_all();
} else } else
target->summon_info = SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16); target->summon_info = SUMMON_TYPE_NORMAL | (LOCATION_HAND << 16);
target->summon_player = setplayer; target->summon_player = setplayer;
target->current.reason_effect = 0; target->current.reason_effect = 0;
target->current.reason_player = setplayer; target->current.reason_player = setplayer;
core.units.begin()->step = 4; core.units.begin()->step = 6;
core.temp_var[0] = (ptr)pextra; core.temp_var[0] = (ptr)pextra;
return FALSE; return FALSE;
} }
case 4: { case 6: {
effect* pextra = 0; effect* pextra = 0;
if(!ignore_count && !core.extra_summon[setplayer]) if(!ignore_count && !core.extra_summon[setplayer])
pextra = target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT); pextra = target->is_affected_by_effect(EFFECT_EXTRA_SET_COUNT);
...@@ -1793,7 +1822,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1793,7 +1822,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
core.temp_var[0] = (ptr)pextra; core.temp_var[0] = (ptr)pextra;
return FALSE; return FALSE;
} }
case 5: { case 7: {
break_effect(); break_effect();
if(!ignore_count) { if(!ignore_count) {
returns.ivalue[0] = FALSE; returns.ivalue[0] = FALSE;
...@@ -1810,7 +1839,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1810,7 +1839,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
returns.ivalue[0] = TRUE; returns.ivalue[0] = TRUE;
return FALSE; return FALSE;
} }
case 6: { case 8: {
if(!returns.ivalue[0]) if(!returns.ivalue[0])
core.summon_count[setplayer]++; core.summon_count[setplayer]++;
else if(core.temp_var[0]) { else if(core.temp_var[0]) {
...@@ -1833,7 +1862,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1833,7 +1862,7 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
move_to_field(target, setplayer, targetplayer, LOCATION_MZONE, positions); move_to_field(target, setplayer, targetplayer, LOCATION_MZONE, positions);
return FALSE; return FALSE;
} }
case 7: { case 9: {
uint8 targetplayer = target->current.controler; uint8 targetplayer = target->current.controler;
if(target->owner != targetplayer) if(target->owner != targetplayer)
set_control(target, targetplayer, 0, 0); set_control(target, targetplayer, 0, 0);
...@@ -1857,21 +1886,6 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui ...@@ -1857,21 +1886,6 @@ int32 field::mset(uint16 step, uint8 setplayer, card * target, effect * proc, ui
} }
return TRUE; return TRUE;
} }
case 10: {
if(returns.ivalue[0])
returns.bvalue[0] = 0;
else {
int32 min = 1;
int32 max = core.temp_var[0] >> 16;
if(min < -core.temp_var[1] + 1) {
min = -core.temp_var[1] + 1;
}
core.temp_var[0] = min + (max << 16);
add_process(PROCESSOR_SELECT_TRIBUTE, 0, 0, 0, setplayer, core.temp_var[0]);
}
core.units.begin()->step = 2;
return false;
}
} }
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