static void HandleAddedPiece(square s, void *param) { piece_addition_settings * const settings = param; if (!is_square_empty(s)) { if (settings->type==piece_addition_initial) { WriteSquare(&output_plaintext_engine,stdout,s); output_plaintext_message(OverwritePiece); underworld_make_space(nr_ghosts); underworld[nr_ghosts-1].walk = get_walk_of_piece_on_square(s); underworld[nr_ghosts-1].flags = being_solved.spec[s]; underworld[nr_ghosts-1].on = s; } else { move_effect_journal_do_circe_volcanic_remember(move_effect_reason_diagram_setup, s); move_effect_journal_do_piece_removal(move_effect_reason_diagram_setup, s); } } if (settings->type==piece_addition_twinning) move_effect_journal_do_piece_creation(move_effect_reason_diagram_setup, s,settings->walk, settings->spec, no_side); else occupy_square(s,settings->walk,settings->spec); }
void move_effect_journal_undo_forget_ghost(move_effect_journal_entry_type const *entry) { underworld_index_type const ghost_pos = entry->u.handle_ghost.pos; TraceFunctionEntry(__func__); TraceFunctionParamListEnd(); underworld_make_space(ghost_pos); underworld[ghost_pos] = entry->u.handle_ghost.ghost; TraceFunctionExit(__func__); TraceFunctionResultEnd(); }