Skip to content

Commit

Permalink
Simplify a bit the logic in tosscoin/tossdice
Browse files Browse the repository at this point in the history
  • Loading branch information
edo9300 committed Jul 21, 2023
1 parent 01bcef3 commit 7ca72eb
Showing 1 changed file with 52 additions and 70 deletions.
122 changes: 52 additions & 70 deletions operations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5940,8 +5940,6 @@ int32_t field::select_tribute_cards(int16_t step, card* target, uint8_t playerid
int32_t field::toss_coin(uint16_t step, effect* reason_effect, uint8_t reason_player, uint8_t playerid, uint8_t count) {
switch(step) {
case 0: {
effect_set eset;
effect* peffect = 0;
tevent e;
e.event_cards = 0;
e.event_player = playerid;
Expand All @@ -5952,44 +5950,37 @@ int32_t field::toss_coin(uint16_t step, effect* reason_effect, uint8_t reason_pl
core.coin_results.clear();
auto pr = effects.continuous_effect.equal_range(EFFECT_TOSS_COIN_REPLACE);
for(auto eit = pr.first; eit != pr.second;) {
effect* pe = eit->second;
auto* peffect = eit->second;
++eit;
if(pe->is_activateable(pe->get_handler_player(), e)) {
peffect = pe;
break;
auto handler_player = peffect->get_handler_player();
if(peffect->is_activateable(handler_player, e)) {
solve_continuous(handler_player, peffect, e);
return TRUE;
}
}
if(!peffect) {
pr = effects.continuous_effect.equal_range(EFFECT_TOSS_COIN_CHOOSE);
for(auto eit = pr.first; eit != pr.second;) {
effect* pe = eit->second;
++eit;
if(pe->is_activateable(pe->get_handler_player(), e)) {
peffect = pe;
break;
}
}
if(peffect) {
pr = effects.continuous_effect.equal_range(EFFECT_TOSS_COIN_CHOOSE);
for(auto eit = pr.first; eit != pr.second;) {
auto* peffect = eit->second;
++eit;
auto handler_player = peffect->get_handler_player();
if(peffect->is_activateable(handler_player, e)) {
core.coin_results.resize(count);
solve_continuous(peffect->get_handler_player(), peffect, e);
solve_continuous(handler_player, peffect, e);
core.units.begin()->step = 2;
return FALSE;
}
auto message = pduel->new_message(MSG_TOSS_COIN);
message->write<uint8_t>(playerid);
message->write<uint8_t>(count);
core.coin_results.reserve(count);
for(int32_t i = 0; i < count; ++i) {
auto coin = pduel->get_next_integer(0, 1);
core.coin_results.push_back(static_cast<bool>(coin));
message->write<uint8_t>(coin);
}
raise_event((card*)0, EVENT_TOSS_COIN_NEGATE, reason_effect, 0, reason_player, playerid, count);
process_instant_event();
} else {
solve_continuous(peffect->get_handler_player(), peffect, e);
return TRUE;
}
auto message = pduel->new_message(MSG_TOSS_COIN);
message->write<uint8_t>(playerid);
message->write<uint8_t>(count);
core.coin_results.reserve(count);
for(int32_t i = 0; i < count; ++i) {
auto coin = pduel->get_next_integer(0, 1);
core.coin_results.push_back(static_cast<bool>(coin));
message->write<uint8_t>(coin);
}
raise_event((card*)0, EVENT_TOSS_COIN_NEGATE, reason_effect, 0, reason_player, playerid, count);
process_instant_event();
return FALSE;
}
case 1: {
Expand All @@ -6015,8 +6006,6 @@ int32_t field::toss_coin(uint16_t step, effect* reason_effect, uint8_t reason_pl
int32_t field::toss_dice(uint16_t step, effect* reason_effect, uint8_t reason_player, uint8_t playerid, uint8_t count1, uint8_t count2) {
switch(step) {
case 0: {
effect_set eset;
effect* peffect = 0;
tevent e;
e.event_cards = 0;
e.event_player = playerid;
Expand All @@ -6027,54 +6016,47 @@ int32_t field::toss_dice(uint16_t step, effect* reason_effect, uint8_t reason_pl
core.dice_results.clear();
auto pr = effects.continuous_effect.equal_range(EFFECT_TOSS_DICE_REPLACE);
for(auto eit = pr.first; eit != pr.second;) {
effect* pe = eit->second;
auto* peffect = eit->second;
++eit;
if(pe->is_activateable(pe->get_handler_player(), e)) {
peffect = pe;
break;
auto handler_player = peffect->get_handler_player();
if(peffect->is_activateable(handler_player, e)) {
solve_continuous(handler_player, peffect, e);
return TRUE;
}
}
if(!peffect) {
pr = effects.continuous_effect.equal_range(EFFECT_TOSS_DICE_CHOOSE);
for(auto eit = pr.first; eit != pr.second;) {
effect* pe = eit->second;
++eit;
if(pe->is_activateable(pe->get_handler_player(), e)) {
peffect = pe;
break;
}
}
if(peffect) {
pr = effects.continuous_effect.equal_range(EFFECT_TOSS_DICE_CHOOSE);
for(auto eit = pr.first; eit != pr.second;) {
auto* peffect = eit->second;
++eit;
auto handler_player = peffect->get_handler_player();
if(peffect->is_activateable(handler_player, e)) {
core.dice_results.resize(count1 + count2);
solve_continuous(peffect->get_handler_player(), peffect, e);
solve_continuous(handler_player, peffect, e);
core.units.begin()->step = 2;
return FALSE;
}
core.dice_results.reserve(count1 + count2);
auto message = pduel->new_message(MSG_TOSS_DICE);
message->write<uint8_t>(playerid);
message->write<uint8_t>(count1);
for(int32_t i = 0; i < count1; ++i) {
}
core.dice_results.reserve(count1 + count2);
auto message = pduel->new_message(MSG_TOSS_DICE);
message->write<uint8_t>(playerid);
message->write<uint8_t>(count1);
for(int32_t i = 0; i < count1; ++i) {
const auto dice = pduel->get_next_integer(1, 6);
core.dice_results.push_back(dice);
message->write<uint8_t>(dice);
}
if(count2 > 0) {
message = pduel->new_message(MSG_TOSS_DICE);
message->write<uint8_t>(1 - playerid);
message->write<uint8_t>(count2);
for(int32_t i = 0; i < count2; ++i) {
const auto dice = pduel->get_next_integer(1, 6);
core.dice_results.push_back(dice);
message->write<uint8_t>(dice);
}
if(count2 > 0) {
message = pduel->new_message(MSG_TOSS_DICE);
message->write<uint8_t>(1 - playerid);
message->write<uint8_t>(count2);
for(int32_t i = 0; i < count2; ++i) {
const auto dice = pduel->get_next_integer(1, 6);
core.dice_results.push_back(dice);
message->write<uint8_t>(dice);
}
}
raise_event((card*)0, EVENT_TOSS_DICE_NEGATE, reason_effect, 0, reason_player, playerid, count1 + (count2 << 16));
process_instant_event();
} else {
solve_continuous(peffect->get_handler_player(), peffect, e);
return TRUE;
}
raise_event((card*)0, EVENT_TOSS_DICE_NEGATE, reason_effect, 0, reason_player, playerid, count1 + (count2 << 16));
process_instant_event();
return FALSE;
}
case 1: {
Expand Down

0 comments on commit 7ca72eb

Please sign in to comment.