Exemplo n.º 1
0
/*
 * 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);
}
Exemplo n.º 2
0
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, &sect);
	if (sect.sct_type == SCT_BSPAN
	    && !bridge_support_at(&sect, DIR_BACK(i))) {
	    knockdown(&sect);
	    putsect(&sect);
	}
    }
}
Exemplo n.º 3
0
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, &sect);
	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(&sect);
	    putsect(&sect);
	}
    }
}