Skip to content

Commit

Permalink
cancel spell set from hand (#466)
Browse files Browse the repository at this point in the history
  • Loading branch information
mercury233 authored Sep 24, 2022
1 parent b501c1e commit 4369eee
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
26 changes: 23 additions & 3 deletions operations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2376,6 +2376,26 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target, e
return TRUE;
if(target->is_affected_by_effect(EFFECT_CANNOT_SSET))
return TRUE;
uint32 flag = 0;
if(target->data.type & TYPE_FIELD) {
flag = ~(0x1 << 13);
} else {
get_useable_count(target, setplayer, LOCATION_SZONE, toplayer, LOCATION_REASON_TOFIELD, 0xff, &flag);
flag = ((flag & 0xff) << 8) | 0xffff00ff;
flag |= 0xe080e080;
}
pduel->write_buffer8(MSG_HINT);
pduel->write_buffer8(HINT_SELECTMSG);
pduel->write_buffer8(setplayer);
pduel->write_buffer32(target->data.code);
add_process(PROCESSOR_SELECT_PLACE, 0, 0, 0, setplayer, flag, 0);
return FALSE;
}
case 1: {
if(returns.bvalue[1] == 0) {
return TRUE;
}
target->to_field_param = returns.bvalue[2];
effect_set eset;
target->filter_effect(EFFECT_SSET_COST, &eset);
for(int32 i = 0; i < eset.size(); ++i) {
Expand All @@ -2386,12 +2406,12 @@ int32 field::sset(uint16 step, uint8 setplayer, uint8 toplayer, card * target, e
}
return FALSE;
}
case 1: {
case 2: {
target->enable_field_effect(false);
move_to_field(target, setplayer, toplayer, LOCATION_SZONE, POS_FACEDOWN, FALSE, 0, FALSE, (target->data.type & TYPE_FIELD) ? 0x1 << 5 : 0xff);
move_to_field(target, setplayer, toplayer, LOCATION_SZONE, POS_FACEDOWN, FALSE, 0, FALSE, 0x1 << target->to_field_param);
return FALSE;
}
case 2: {
case 3: {
core.phase_action = TRUE;
target->set_status(STATUS_SET_TURN, TRUE);
if(target->data.type & TYPE_MONSTER) {
Expand Down
9 changes: 4 additions & 5 deletions playerop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,8 +374,6 @@ int32 field::select_chain(uint16 step, uint8 playerid, uint8 spe_count, uint8 fo
}
int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count) {
if(step == 0) {
if(count == 0)
return TRUE;
if((playerid == 1) && (core.duel_options & DUEL_SIMPLE_AI)) {
flag = ~flag;
int32 filter;
Expand Down Expand Up @@ -433,14 +431,15 @@ int32 field::select_place(uint16 step, uint8 playerid, uint32 flag, uint8 count)
} else {
uint8 pt = 0;
uint32 selected = 0;
for(int8 i = 0; i < count; ++i) {
for(int8 i = 0; i < 1 || i < count; ++i) {
uint8 p = returns.bvalue[pt];
uint8 l = returns.bvalue[pt + 1];
uint8 s = returns.bvalue[pt + 2];
uint32 sel = 0x1u << (s + (p == playerid ? 0 : 16) + (l == LOCATION_MZONE ? 0 : 8));
if((p != 0 && p != 1)
if(!(count == 0 && i == 0 && l == 0)
&& ((p != 0 && p != 1)
|| ((l != LOCATION_MZONE) && (l != LOCATION_SZONE))
|| (sel & flag) || (sel & selected)) {
|| (sel & flag) || (sel & selected))) {
pduel->write_buffer8(MSG_RETRY);
return FALSE;
}
Expand Down

0 comments on commit 4369eee

Please sign in to comment.