Ejemplo n.º 1
0
int main(void) {

	printf("%d\n",bitoff(7,0));
	printf("%d\n",bitoff(7,1));
	printf("%d\n",bitoff(7,5));
		
	return 0;
}
Ejemplo n.º 2
0
/*
  COMBO: trying to open safe. (see comments for fee fie foe foo)
*/
void ivcombo()
{
    int k, msg;

    k = VAL(vocab(vtxt[vrbx], MISC)) - 10;
    msg = 42;
    if (g.combo != 1 - k) {
	if (g.combo != 0)
	    msg = 366;
	rspeak(msg);
	return;
    }
    g.combo = k;
    if (k != 3)
	rspeak(371);
    else {
	g.combo = 0;
	bitoff(SAFE, LOCKBT);
	biton(SAFE, OPENBT);
	g.prop[SAFE] = 1;
	if (g.prop[BOOK] < 0) {
	    g.tally--;
	    g.prop[BOOK] = 0;
	    /* If remaining treasures too elusive, zap his lamp. this
	       duplicates some code, must be done here since book is
	       contained ins safe & tally stuff only works for thing
	       deposited at a location. */
	    if ((g.tally == g.tally2) && (g.tally != 0))
		g.limit = (g.limit < 35) ? g.limit : 35;
	}
	rspeak(365);
    }
}
Ejemplo n.º 3
0
/*
  pirate stuff
*/
void dopirate()
{
    int j;
    boolean k;

    if (g.newloc == g.chloc || g.prop[CHEST] >= 0)
        return;
    k = FALSE;
    /* Pirate won't take pyramid from plover room or dark room  (too
       easy! ) */
    for (j = 1; j < MAXOBJ; ++j)
        if (treasr(j) && !(j == CASK && liq(CASK) == WINE)
                && !(j == PYRAMID && (g.newloc == g.place[PYRAMID]
                                      || g.newloc == g.place[EMERALD]))) {
            if (toting(j) && athand(j))
                goto stealit;
            if (here(j))
                k = TRUE;
        }
    if (g.tally == g.tally2 + 1 && k == FALSE && g.place[CHEST] == 0 &&
            athand(LAMP) && g.prop[LAMP] == 1) {
        rspeak(186);
        move(CHEST, g.chloc);
        move(MESSAGE, g.chloc2);
        g.dloc[DWARFMAX] = g.chloc;
        g.odloc[DWARFMAX] = g.chloc;
        g.dseen[DWARFMAX] = 0;
        return;
    }
    if (g.odloc[DWARFMAX] != g.dloc[DWARFMAX] && pct(30))
        rspeak(127);
    return;

stealit:

    rspeak(128);
    /* don't steal chest back from troll! */
    if (g.place[MESSAGE] == 0)
        move(CHEST, g.chloc);
    move(MESSAGE, g.chloc2);
    for (j = 1; j < MAXOBJ; ++j) {
        if (!treasr(j) || !athand(j)
                || (j == PYRAMID &&
                    (g.newloc == plac[PYRAMID] || g.newloc == plac[EMERALD]))
                || (j == CASK && (liq(CASK) != WINE)))
            continue;
        if (enclosed(j))
            extract(j);
        if (wearng(j)) {
            g.prop[j] = 0;
            bitoff(j, WEARBT);
        }
        insert(j, CHEST);
    }
    g.dloc[DWARFMAX] = g.chloc;
    g.odloc[DWARFMAX] = g.chloc;
    g.dseen[DWARFMAX] = FALSE;
    return;
}
Ejemplo n.º 4
0
/*
  Routine to handle the passing on of one
  of the player's incarnations...
*/
void death()
{
    int yea, j;

    if (!g.closing) {
        if (g.limit < 0) {
            rspeak(185);
            normend();
            return;
        }
        yea = yes(81 + g.numdie * 2, 82 + g.numdie * 2, 54);
        if (++g.numdie >= MAXDIE || !yea)
            normend();
        if (g.chase) {
            g.chase = FALSE;
            g.prop[WUMPUS] = 0;
            move(WUMPUS, 174);
        }
        if (toting(LAMP))
            g.prop[LAMP] = 0;
        for (j = 1; j < MAXOBJ; ++j) {
            if (toting(j))
                drop(j, j == LAMP ? 1 : g.oldloc2);
            if (wearng(j)) {
                g.prop[j] = 0;
                bitoff(j, WEARBT);
            }
        }
        g.newloc = 3;
        g.oldloc = g.loc;
        g.health = 100;
        return;
    }
    /* Closing -- no resurrection... */
    rspeak(131);
    ++g.numdie;
    normend();
    return;
}
Ejemplo n.º 5
0
/*
  special time limit stuff...
*/
int stimer()
{
    int i, spk;
    static int clock3;

    g.foobar = g.foobar > 0 ? -g.foobar : 0;
    g.combo = g.combo > 0 ? -g.combo : 0;
    if (g.turns > 310 && g.abbnum != 10000 && !g.terse)
        rspeak(273);

    /* Bump all the right clocks for reconning battery life and closing */
    if (g.closed) {
        clock3--;
        if (clock3 == 0) {
            g.prop[PHONE] = 0;
            g.prop[BOOTH] = 0;
            rspeak(284);
        } else if (clock3 < -7) {
            rspeak(254);
            normend();
            return (TRUE);
        }
    }
    if (g.tally == 0 && inside(g.loc) && g.loc != Y2)
        --g.clock;
    if (g.clock == 0) {
        /* Start closing the cave */
        g.prop[GRATE] = 0;
        biton(GRATE, LOCKBT);
        bitoff(GRATE, OPENBT);
        g.prop[FISSURE] = 0;
        g.prop[TDOOR] = 0;
        biton(TDOOR, LOCKBT);
        bitoff(TDOOR, OPENBT);
        g.prop[TDOOR2] = 0;
        biton(TDOOR2, LOCKBT);
        bitoff(TDOOR2, OPENBT);
        for (i = 1; i <= DWARFMAX; ++i) {
            g.dseen[i] = FALSE;
            g.dloc[i] = 0;
        }
        move(TROLL, 0);
        move((TROLL + MAXOBJ), 0);
        move(TROLL2, plac[TROLL]);
        move((TROLL2 + MAXOBJ), fixd[TROLL]);
        juggle(CHASM);
        if (g.prop[BEAR] != 3)
            destroy(BEAR);
        g.prop[CHAIN] = 0;
        g.fixed[CHAIN] = 0;
        g.prop[AXE] = 0;
        g.fixed[AXE] = 0;
        rspeak(129);
        g.clock = -1;
        g.closing = TRUE;
        return (FALSE);
    }
    if (g.clock < 0)
        --g.clock2;
    if (g.clock2 == 0) {
        /* Set up storage room... and close the cave... */
        g.prop[BOTTLE] = put(BOTTLE, 115, 8);
        g.holder[BOTTLE] = WATER;
        g.place[WATER] = -BOTTLE;
        g.hlink[WATER] = 0;
        bitoff(BOTTLE, OPENBT);
        g.prop[PLANT] = put(PLANT, 115, 0);
        g.prop[OYSTER] = put(OYSTER, 115, 0);
        g.prop[LAMP] = put(LAMP, 115, 0);
        g.prop[ROD] = put(ROD, 115, 0);
        g.prop[DWARF] = put(DWARF, 115, 0);
        g.loc = 115;
        g.oldloc = 115;
        g.newloc = 115;
        /* Leave the grate with normal (non-negative property). */
        put(GRATE, 116, 0);
        biton(GRATE, LOCKBT);
        bitoff(GRATE, OPENBT);
        g.prop[SNAKE] = put(SNAKE, 116, 1);
        g.prop[BIRD] = put(BIRD, 116, 1);
        g.prop[CAGE] = put(CAGE, 116, 0);
        g.prop[ROD2] = put(ROD2, 116, 0);
        g.prop[PILLOW] = put(PILLOW, 116, 0);

        g.prop[BOOTH] = put(BOOTH, 116, -3);
        g.fixed[BOOTH] = 115;
        g.prop[PHONE] = put(PHONE, 212, -4);

        g.prop[MIRROR] = put(MIRROR, 115, 0);
        g.fixed[MIRROR] = 116;
        g.prop[BOOK2] = put(BOOK2, 115, 0);

        for (i = 1; i < MAXOBJ; ++i) {
            if (toting(i) && enclosed(i))
                extract(i);
            if (toting(i))
                destroy(i);
        }
        rspeak(132);
        g.closed = TRUE;
        clock3 = 20 + ranz(20);
        newtravel = TRUE;
        return (TRUE);
    }
    if (g.prop[LAMP] == 1)
        --g.limit;
    if (g.limit == 0) {
        --g.limit;
        g.prop[LAMP] = 0;
        if (here(LAMP))
            rspeak(184);
        return (FALSE);
    }
    if (g.limit < 0 && outside(g.loc)) {
        rspeak(185);
        normend();
        return (TRUE);
    }
    if (g.limit <= 40) {
        if (g.lmwarn || !here(LAMP))
            return (FALSE);
        g.lmwarn = TRUE;
        spk = 187;
        if (g.prop[BATTERIES] == 1)
            spk = 323;
        if (g.place[BATTERIES] == 0)
            spk = 183;
        if (g.prop[VEND] == 1)
            spk = 189;
        rspeak(spk);
        return (FALSE);
    }
    return (FALSE);
}
Ejemplo n.º 6
0
/*
 *
 * the bit offsets for each bit pattern based on the efficiency of
 * the sector.
 *
 * bitmap0:  0-20%
 * bitmap1: 21-40%
 * bitmap2: 41-60%
 * bitmap3: 61-80%
 * bitmap4: 81-100%
 */

#define bitoff(x, y) x, y

static int bitmap0[] = {
    bitoff(-1, -1), bitoff(1, -1),
    bitoff(-2, 0), bitoff(0, 0), bitoff(2, 0),
    bitoff(-1, 1), bitoff(1, 1),
    bitoff(9999, 9999),
};

static int bitmap1[] = {
    bitoff(0, -2),
    bitoff(-3, -1), bitoff(-1, -1), bitoff(1, -1), bitoff(3, -1),
    bitoff(-2, 0), bitoff(0, 0), bitoff(2, 0),
    bitoff(-3, 1), bitoff(-1, 1), bitoff(1, 1), bitoff(3, 1),
    bitoff(0, 2),
    bitoff(9999, 9999),
};

static int bitmap2[] = {