static boolean is_kingsquare_observed(void) { Side const side = trait[nbply]; boolean result; TraceFunctionEntry(__func__); TraceFunctionParamListEnd(); if (transmuting_kings_testing_transmutation[side]) result = false; else { transmuting_kings_testing_transmutation[side] = true; siblingply(advers(side)); push_observation_target(being_solved.king_square[side]); result = fork_is_square_observed_nested_delegate(temporary_hack_is_square_observed[side], EVALUATE(observation)); finply(); transmuting_kings_testing_transmutation[side] = false; } TraceFunctionExit(__func__); TraceFunctionResult("%u",result); TraceFunctionResultEnd(); return result; }
/* Determine whether the moving side's king is transmuting as a specific walk * @param p the piece */ boolean transmuting_kings_is_king_transmuting_as(piece_walk_type walk) { boolean result; Side const side_attacking = trait[nbply]; TraceFunctionEntry(__func__); TraceWalk(walk); TraceFunctionParamListEnd(); if (transmuting_kings_testing_transmutation[side_attacking]) result = false; else { transmuting_kings_testing_transmutation[side_attacking] = true; siblingply(advers(side_attacking)); push_observation_target(being_solved.king_square[side_attacking]); observing_walk[nbply] = walk; result = fork_is_square_observed_nested_delegate(temporary_hack_is_square_observed_specific[trait[nbply]], EVALUATE(observation)); finply(); transmuting_kings_testing_transmutation[side_attacking] = false; } TraceFunctionExit(__func__); TraceFunctionResult("%u",result); TraceFunctionResultEnd(); return result; }
static void PushMagicViewsByOnePiece(piece_walk_type pi_magic) { square const *pos_viewed; TraceFunctionEntry(__func__); TraceWalk(pi_magic); TraceFunctionParamListEnd(); for (pos_viewed = boardnum; *pos_viewed; pos_viewed++) if (get_walk_of_piece_on_square(*pos_viewed)>Invalid && !TSTFLAGMASK(being_solved.spec[*pos_viewed],BIT(Magic)|BIT(Royal)) && !is_piece_neutral(being_solved.spec[*pos_viewed])) { replace_observation_target(*pos_viewed); observing_walk[nbply] = pi_magic; /* ignore return value - it's ==false */ fork_is_square_observed_nested_delegate(temporary_hack_is_square_observed_specific[trait[nbply]], EVALUATE(observation)); } TraceFunctionExit(__func__); TraceFunctionResultEnd(); }