/* * Check bridges at and around @sp after damage to @sp. * If @sp is an inefficent bridge, splash it. * If @sp can't support a bridge, splash unsupported adjacent bridges. * Write back splashed bridges, except for @sp; writing that one is * left to the caller. */ void bridge_damaged(struct sctstr *sp) { int des; if (sp->sct_effic >= SCT_MINEFF) return; des = sp->sct_type; if (des == SCT_BSPAN || des == SCT_BTOWER) knockdown(sp); if ((des == SCT_BHEAD && !opt_EASY_BRIDGES) || des == SCT_BTOWER) bridgefall(sp); }
void bridgefall(struct sctstr *sp) { int i; struct sctstr sect; int nx; int ny; for (i = 1; i <= 6; i++) { nx = sp->sct_x + diroff[i][0]; ny = sp->sct_y + diroff[i][1]; getsect(nx, ny, §); if (sect.sct_type == SCT_BSPAN && !bridge_support_at(§, DIR_BACK(i))) { knockdown(§); putsect(§); } } }
void bridgefall(struct sctstr *sp) { int i; int j; struct sctstr sect; struct sctstr bh_sect; int nx; int ny; int nnx; int nny; if (CANT_HAPPEN(opt_EASY_BRIDGES)) return; for (i = 1; i <= 6; i++) { nx = sp->sct_x + diroff[i][0]; ny = sp->sct_y + diroff[i][1]; getsect(nx, ny, §); if (sect.sct_type != SCT_BSPAN) continue; for (j = 1; j <= 6; j++) { nnx = nx + diroff[j][0]; nny = ny + diroff[j][1]; if (nnx == sp->sct_x && nny == sp->sct_y) continue; getsect(nnx, nny, &bh_sect); if (bh_sect.sct_type == SCT_BHEAD && bh_sect.sct_newtype == SCT_BHEAD) break; if (bh_sect.sct_type == SCT_BTOWER) break; } if (j > 6) { knockdown(§); putsect(§); } } }