void WeightedDiscretePDF<T>::lengthen(WDPDF_Node<T> *n) { if (n->isRed()) { n->markBlack(); } else if (n->parent) { WDPDF_Node<T> *sibling = n->sibling(); if (sibling && sibling->isRed()) { n->parent->markRed(); sibling->markBlack(); rotate(sibling); // node sibling is now old sibling child, must be black sibling = n->sibling(); } // sibling is black if (!sibling) { lengthen(n->parent); } else if (sibling->leftIsBlack() && sibling->rightIsBlack()) { if (n->parent->isBlack()) { sibling->markRed(); lengthen(n->parent); } else { sibling->markRed(); n->parent->markBlack(); } } else { if (n==n->parent->left && sibling->rightIsBlack()) { rotate(sibling->left); // sibling->left must be red sibling->markRed(); sibling->parent->markBlack(); sibling = sibling->parent; } else if (n==n->parent->right && sibling->leftIsBlack()) { rotate(sibling->right); // sibling->right must be red sibling->markRed(); sibling->parent->markBlack(); sibling = sibling->parent; } // sibling is black, and sibling's far child is red rotate(sibling); if (n->parent->isRed()) sibling->markRed(); sibling->left->markBlack(); sibling->right->markBlack(); } } }
void do_pot(int type, bool knowit) { PACT *pp; int t; pp = &p_actions[type]; if (!pot_info[type].oi_know) pot_info[type].oi_know = knowit; t = spread(pp->pa_time); if (!on(player, pp->pa_flags)) { player.t_flags |= pp->pa_flags; fuse(pp->pa_daemon, 0, t, AFTER); look(FALSE); } else lengthen(pp->pa_daemon, t); msg(choose_str(pp->pa_high, pp->pa_straight)); }
void WeightedDiscretePDF<T>::remove(T item) { WDPDF_Node<T> **np = lookup(item, 0); WDPDF_Node<T> *child, *n = *np; if (!n) { throw std::domain_error("remove: argument(item) not in tree"); } else { if (n->left) { WDPDF_Node<T> **leftMaxp = &n->left; while ((*leftMaxp)->right) leftMaxp = &(*leftMaxp)->right; n->key = (*leftMaxp)->key; n->weight = (*leftMaxp)->weight; np = leftMaxp; n = *np; } // node now has at most one child child = n->left?n->left:n->right; *np = child; if (child) { child->parent = n->parent; if (n->isBlack()) { lengthen(child); } } propogateSumsUp(n->parent); n->left = n->right = 0; delete n; } }
void FlexibleDataBuilder::set(const char* text) { lengthen(strlen(text) + 1); DataBuilder::set(text); }
void FlexibleDataBuilder::set(uint64_t value) { lengthen(8); DataBuilder::set(value); }
void FlexibleDataBuilder::set(unsigned int value) { lengthen(4); DataBuilder::set(value); }
void FlexibleDataBuilder::set(bool value) { lengthen(1); DataBuilder::set(value); }
void FlexibleDataBuilder::set(unsigned short value) { lengthen(2); DataBuilder::set(value); }
void FlexibleDataBuilder::set(unsigned char value) { lengthen(1); DataBuilder::set(value); }
/* * wake_monster: * What to do when the hero steps next to a monster */ const THING * wake_monster(int y, int x) { THING *tp; struct room *rp; int ch; const char *mname; if ((tp = moat(y, x)) == NULL) { #ifdef MASTER msg("can't find monster in wake_monster"); #endif return NULL; } ch = tp->t_type; /* * Every time he sees mean monster, it might start chasing him */ if (!on(*tp, ISRUN) && rnd(3) != 0 && on(*tp, ISMEAN) && !on(*tp, ISHELD) && !ISWEARING(R_STEALTH) && !on(player, ISLEVIT)) { tp->t_dest = &hero; tp->t_flags |= ISRUN; } if (ch == 'M' && !on(player, ISBLIND) && !on(player, ISHALU) && !on(*tp, ISFOUND) && !on(*tp, ISCANC) && on(*tp, ISRUN)) { rp = proom; if ((rp != NULL && !(rp->r_flags & ISDARK)) || dist(y, x, hero.y, hero.x) < LAMPDIST) { tp->t_flags |= ISFOUND; if (!save(VS_MAGIC)) { if (on(player, ISHUH)) lengthen(unconfuse, spread(HUHDURATION)); else fuse(unconfuse, 0, spread(HUHDURATION), AFTER); player.t_flags |= ISHUH; mname = set_mname(tp); addmsg("%s", mname); if (strcmp(mname, "it") != 0) addmsg("'"); msg("s gaze has confused you"); } } } /* * Let greedy ones guard gold */ if (on(*tp, ISGREED) && !on(*tp, ISRUN)) { tp->t_flags |= ISRUN; if (proom->r_goldval) tp->t_dest = &proom->r_gold; else tp->t_dest = &hero; } return tp; }
/* * quaff: * Let the hero drink a potion */ int quaff() { struct object *obj; struct linked_list *item, *titem; struct thing *th; int wh; char buf[LINLEN]; bool bless, curse; /* * Make certain that it is somethings that we want to drink */ if ((item = get_item("quaff", POTION)) == NULL) return 0; obj = OBJPTR(item); if (obj->o_type != POTION) { msg("That's undrinkable!"); after = FALSE; return 0; } wh = obj->o_which; bless = o_on(obj, ISBLESS); curse = o_on(obj, ISCURSED); del_pack(item); /* get rid of it */ /* * Calculate the effect it has on the poor guy. */ switch(wh) { case P_CONFUSE: if (!bless) { if (pl_on(ISINVINC)) msg("You remain level-headed."); else { chg_abil(WIS,-1,TRUE); /* confuse his mind */ if (pl_off(ISHUH)) { msg("Wait, what's going on here. Huh? What? Who?"); if (pl_on(ISHUH)) lengthen(unconfuse,rnd(8)+HUHDURATION); else fuse(unconfuse,TRUE,rnd(8)+HUHDURATION); player.t_flags |= ISHUH; } } p_know[P_CONFUSE] = TRUE; } when P_POISON: if (!bless) { if (pl_off(ISINVINC) && !iswearing(R_SUSTSTR) && !iswearing(R_SUSAB)) { chg_abil(CON,-1,TRUE); chg_abil(STR,-(rnd(3)+1),TRUE); msg("You feel very sick now."); } else msg("You feel momentarily sick."); p_know[P_POISON] = TRUE; } when P_HEALING: if (!curse) { heal_self(4, TRUE); msg("You begin to feel better."); if (!iswearing(R_SLOW)) notslow(FALSE); sight(FALSE); p_know[P_HEALING] = TRUE; } when P_STRENGTH: if (!curse) { msg("You feel stronger, now. What bulging muscles!"); chg_abil(STR,1,TRUE); p_know[P_STRENGTH] = TRUE; } when P_MFIND: /* * Potion of monster detection - find all monsters */ if (mlist != NULL && !curse) { dispmons(); mpos = 0; msg("You begin to sense the presence of monsters--More--"); p_know[P_MFIND] = TRUE; wait_for(cw,' '); msg(""); /* clear line */ } else msg("You have a strange feeling for a moment, then it passes."); when P_TFIND: /* * Potion of magic detection. Show the potions and scrolls */ if (lvl_obj != NULL && !curse) { struct linked_list *mobj; struct object *tp; bool show; show = FALSE; wclear(hw); for (mobj = lvl_obj; mobj != NULL; mobj = next(mobj)) { tp = OBJPTR(mobj); if (is_magic(tp)) { show = TRUE; mvwaddch(hw, tp->o_pos.y, tp->o_pos.x, MAGIC); } } for(titem = mlist; titem != NULL; titem = next(titem)) { struct linked_list *pitem; th = THINGPTR(titem); for(pitem=th->t_pack;pitem!=NULL;pitem=next(pitem)) { if (is_magic(ldata(pitem))) { show = TRUE; mvwaddch(hw,th->t_pos.y, th->t_pos.x, MAGIC); } } } if (show) { msg("You begin to sense the presence of magic."); overlay(hw,cw); p_know[P_TFIND] = TRUE; break; } } msg("You have a strange feeling for a moment, then it passes."); when P_PARALYZE: if (!bless) { if (pl_on(ISINVINC)) msg("You feel numb for a moment."); else { msg("You can't move."); player.t_nocmd = HOLDTIME; } p_know[P_PARALYZE] = TRUE; } when P_SEEINVIS: if (!curse) { int invlen = roll(40,20); msg("This potion tastes like %s juice.", fruit); if (pl_off(CANSEE)) { player.t_flags |= CANSEE; fuse(unsee, TRUE, invlen); light(&hero); } else lengthen(unsee, invlen); sight(FALSE); } when P_RAISE: if (!curse) { msg("You suddenly feel much more skillful."); p_know[P_RAISE] = TRUE; chg_abil(DEX,1,TRUE); chg_abil(WIS,1,TRUE); chg_abil(CON,1,TRUE); raise_level(); } when P_XHEAL: if (!curse) { heal_self(8, TRUE); if (rnd(100) < 50) chg_abil(CON,1,TRUE); msg("You begin to feel much better."); p_know[P_XHEAL] = TRUE; if (!iswearing(R_SLOW)) notslow(FALSE); unconfuse(); extinguish(unconfuse); sight(FALSE); } when P_HASTE: if (!curse) { add_haste(TRUE); msg("You feel yourself moving much faster."); p_know[P_HASTE] = TRUE; } when P_INVINC: if (!curse) { int time = rnd(400) + 350; msg("You feel invincible."); if (player.t_flags & ISINVINC) lengthen(notinvinc,time); else fuse(notinvinc,TRUE,time); player.t_flags |= ISINVINC; p_know[P_INVINC] = TRUE; } when P_SMART: if (!curse) { msg("You feel more perceptive."); p_know[P_SMART] = TRUE; chg_abil(WIS,1,TRUE); } when P_RESTORE: if (!curse) { msg("Hey, this tastes great. You feel warm all over."); him->s_re = max_stats.s_re; him->s_ef = max_stats.s_re; ringabil(); /* add in rings */ updpack(); /* update weight */ p_know[P_RESTORE] = TRUE; extinguish(rchg_str); /* kill restore in from ulodyte */ } when P_BLIND: if (!bless) { if (pl_on(ISINVINC)) msg("The light dims for a moment."); else { chg_abil(WIS,-1,TRUE); msg("A cloak of darkness falls around you."); if (pl_off(ISBLIND)) { player.t_flags |= ISBLIND; fuse(sight, TRUE, rnd(400) + 450); light(&hero); } } p_know[P_BLIND] = TRUE; } when P_ETH: if (!curse) { int ethlen = roll(40,20); msg("You feel more vaporous."); if (pl_on(ISETHER)) lengthen(noteth,ethlen); else fuse(noteth,TRUE,ethlen); player.t_flags |= ISETHER; p_know[P_ETH] = TRUE; } when P_NOP: msg("This potion tastes extremely dull."); when P_DEX: if (!curse) { chg_abil(DEX,1,TRUE); /* increase dexterity */ p_know[P_DEX] = TRUE; msg("You feel much more agile."); } when P_REGEN: if (!curse) { int reglen = rnd(450) + 450; if (pl_on(ISREGEN)) lengthen(notregen, reglen); else fuse(notregen, TRUE, reglen); player.t_flags |= ISREGEN; msg("You feel yourself improved."); p_know[P_REGEN] = TRUE; } when P_DECREP: case P_SUPHERO: { int howmuch = rnd(3) + 1; if (wh == P_DECREP) { if (!bless) { if (iswearing(R_SUSAB) || pl_on(ISINVINC)) { msg("You feel momentarily woozy."); howmuch = 0; } else { msg("You feel crippled."); howmuch = -howmuch; if (!iswearing(R_SUSTSTR)) chg_abil(STR,howmuch,TRUE); } } else howmuch = 0; } else { /* potion of superhero */ if (curse) howmuch = 0; msg("You feel invigorated."); chg_abil(STR,howmuch,TRUE); } chg_abil(CON,howmuch,TRUE); chg_abil(DEX,howmuch,TRUE); chg_abil(WIS,howmuch,TRUE); /* change abilities */ p_know[wh] = TRUE; } otherwise: msg("What an odd tasting potion!"); return 0; } nochange = FALSE; if (p_know[wh] && p_guess[wh]) { free(p_guess[wh]); p_guess[wh] = NULL; } else if(!p_know[wh] && p_guess[wh] == NULL) { strcpy(buf, p_colors[wh]); msg(callit); if (get_str(buf, cw) == NORM) { p_guess[wh] = new(strlen(buf) + 1); strcpy(p_guess[wh], buf); }
void LevelEditor::itemClicked(QMouseEvent *event, QList<GLuint> listNames) { if (isMoving) return; Vector3f *pos = NULL; if (!listNames.isEmpty()) { switch (listNames.at(0)) { case BUTTON_VOLUME: if ((GLint(angleRotVolumeCube) % 90) == 0) { audioEnabled = !audioEnabled; emit enableAudio(audioEnabled); currentActions->appendSecondaryAction(ROTATE_VOLUMECUBE); } break; case BUTTON_SHORTEN: shorten(); break; case BUTTON_LENGTHEN: lengthen(); break; case BUTTON_REDUCE: reduce(); break; case BUTTON_ENLARGE: enlarge(); break; case BUTTON_GRAVITY_MINUS: gravityMinus(); break; case BUTTON_GRAVITY_PLUS: gravityPlus(); break; case BUTTON_BACK: buttonBackTriggered(); break; case BUTTON_NEXT: buttonNextTriggered(); break; case OBSTACLE_0: lastCentre = toolbarObstacleCentres.at(0); pos = getModelViewPos(new Vector3f(event->x(), event->y(), 0.0f), true); currentDelta = Vector3f(); deltaFromCentre = *pos - lastCentre; movingObject = 0; break; case OBSTACLE_1: lastCentre = toolbarObstacleCentres.at(1); pos = getModelViewPos(new Vector3f(event->x(), event->y(), 0.0f), true); currentDelta = Vector3f(); deltaFromCentre = *pos - lastCentre; movingObject = 1; break; case OBSTACLE_2: lastCentre = toolbarObstacleCentres.at(2); pos = getModelViewPos(new Vector3f(event->x(), event->y(), 0.0f), true); currentDelta = Vector3f(); deltaFromCentre = *pos - lastCentre; movingObject = 2; break; case OBSTACLE_3: lastCentre = toolbarObstacleCentres.at(3); pos = getModelViewPos(new Vector3f(event->x(), event->y(), 0.0f), true); currentDelta = Vector3f(); deltaFromCentre = *pos - lastCentre; movingObject = 3; break; case BUTTON_SAVE: saveLevel(); break; case BUTTON_CANCEL: level->clearTempObstaclesList(); emit playEffect(EFFECT_JUMP); break; case BUTTON_CLEAR: level->clearObstaclesList(); emit playEffect(EFFECT_JUMP); break; case BUTTON_EXIT: quitEditor(); break; case OBSTACLES: level->deleteObstacle(listNames.at(1)); break; } } }
void LevelEditor::keyPressed(QKeyEvent *event) { if (isMoving) return; currentError.clear(); int key = event->key(); switch (key) { case Qt::Key_Escape: buttonBackTriggered(); break; case Qt::Key_Backspace: if (currentView == SET_NAME_VIEW) { emit playEffect(EFFECT_JUMP); currentName = currentName.left(currentName.length() - 1); formSetLevelName->~CubeStringList(); formSetLevelName = new CubeStringList(currentName, 14.0f, 6.0f, alphabet, 2.0f, FORM_SET_LEVEL_NAME); } else { buttonBackTriggered(); } break; case Qt::Key_Enter: case Qt::Key_Return: buttonNextTriggered(); break; case Qt::Key_Up: if (currentView == SET_PARAM_VIEW) { lengthen(); } else if (currentView == EDITING_LEVEL_VIEW) { moveIn(); checkMousePosition(lastMouseX, lastMouseY); } break; case Qt::Key_Down: if (currentView == SET_PARAM_VIEW) { shorten(); } else if (currentView == EDITING_LEVEL_VIEW) { moveOut(); checkMousePosition(lastMouseX, lastMouseY); } break; case Qt::Key_Left: if (currentView == SET_PARAM_VIEW) reduce(); else if (currentView == SET_GRAVITY_VIEW) gravityMinus(); break; case Qt::Key_Right: if (currentView == SET_PARAM_VIEW) enlarge(); else if (currentView == SET_GRAVITY_VIEW) gravityPlus(); break; default: if ((key >= Qt::Key_A && key <= Qt::Key_Z) || (key >= Qt::Key_0 && key <= Qt::Key_9) || key == Qt::Key_Space) letterTyped(key); break; } }
void FlexibleDataBuilder::set(unsigned char* bytes, unsigned short length) { lengthen(length); DataBuilder::set(bytes, length); }
void FlexibleDataBuilder::set(std::string* value) { lengthen(value->size()); DataBuilder::set(value); }
void FlexibleDataBuilder::set(std::vector<unsigned char>* value) { lengthen(value->size()); DataBuilder::set(value); }
/* * quaff: * Quaff a potion from the pack */ quaff() { register THING *obj, *th; register bool discardit = FALSE; obj = get_item("quaff", POTION); /* * Make certain that it is somethings that we want to drink */ if (obj == NULL) return; if (obj->o_type != POTION) { if (!terse) msg("yuk! Why would you want to drink that?"); else msg("that's undrinkable"); return; } if (obj == cur_weapon) cur_weapon = NULL; /* * Calculate the effect it has on the poor guy. */ switch (obj->o_which) { case P_CONFUSE: p_know[P_CONFUSE] = TRUE; if (!on(player, ISHUH)) { if (on(player, ISHUH)) lengthen(unconfuse, rnd(8)+HUHDURATION); else fuse(unconfuse, 0, rnd(8)+HUHDURATION, AFTER); player.t_flags |= ISHUH; msg("wait, what's going on here. Huh? What? Who?"); } when P_POISON: p_know[P_POISON] = TRUE; if (!ISWEARING(R_SUSTSTR)) { chg_str(-(rnd(3)+1)); msg("you feel very sick now"); } else msg("you feel momentarily sick"); when P_HEALING: p_know[P_HEALING] = TRUE; if ((pstats.s_hpt += roll(pstats.s_lvl, 4)) > max_hp) pstats.s_hpt = ++max_hp; sight(); msg("you begin to feel better"); when P_STRENGTH: p_know[P_STRENGTH] = TRUE; chg_str(1); msg("you feel stronger, now. What bulging muscles!"); when P_MFIND: player.t_flags |= SEEMONST; fuse(turn_see, TRUE, HUHDURATION, AFTER); if (mlist == NULL) msg("you have a strange feeling for a moment"); else p_know[P_MFIND] |= turn_see(FALSE); when P_TFIND: /* * Potion of magic detection. Show the potions and scrolls */ if (lvl_obj != NULL) { register THING *tp; register bool show; show = FALSE; wclear(hw); for (tp = lvl_obj; tp != NULL; tp = next(tp)) { if (is_magic(tp)) { show = TRUE; mvwaddch(hw, tp->o_pos.y, tp->o_pos.x, MAGIC); p_know[P_TFIND] = TRUE; } } for (th = mlist; th != NULL; th = next(th)) { for (tp = th->t_pack; tp != NULL; tp = next(tp)) { if (is_magic(tp)) { show = TRUE; mvwaddch(hw, th->t_pos.y, th->t_pos.x, MAGIC); p_know[P_TFIND] = TRUE; } } } if (show) { show_win(hw, "You sense the presence of magic on this level.--More--"); break; } } msg("you have a strange feeling for a moment, then it passes"); when P_PARALYZE: p_know[P_PARALYZE] = TRUE; no_command = HOLDTIME; player.t_flags &= ~ISRUN; msg("you can't move"); when P_SEEINVIS: if (!on(player, CANSEE)) { fuse(unsee, 0, SEEDURATION, AFTER); look(FALSE); invis_on(); } sight(); msg("this potion tastes like %s juice", fruit); when P_RAISE: p_know[P_RAISE] = TRUE; msg("you suddenly feel much more skillful"); raise_level(); when P_XHEAL: p_know[P_XHEAL] = TRUE; if ((pstats.s_hpt += roll(pstats.s_lvl, 8)) > max_hp) { if (pstats.s_hpt > max_hp + pstats.s_lvl + 1) ++max_hp; pstats.s_hpt = ++max_hp; } sight(); msg("you begin to feel much better"); when P_HASTE: p_know[P_HASTE] = TRUE; if (add_haste(TRUE)) msg("you feel yourself moving much faster"); when P_RESTORE: if (ISRING(LEFT, R_ADDSTR)) add_str(&pstats.s_str, -cur_ring[LEFT]->o_ac); if (ISRING(RIGHT, R_ADDSTR)) add_str(&pstats.s_str, -cur_ring[RIGHT]->o_ac); if (pstats.s_str < max_stats.s_str) pstats.s_str = max_stats.s_str; if (ISRING(LEFT, R_ADDSTR)) add_str(&pstats.s_str, cur_ring[LEFT]->o_ac); if (ISRING(RIGHT, R_ADDSTR)) add_str(&pstats.s_str, cur_ring[RIGHT]->o_ac); msg("hey, this tastes great. It make you feel warm all over"); when P_BLIND: p_know[P_BLIND] = TRUE; if (!on(player, ISBLIND)) { player.t_flags |= ISBLIND; fuse(sight, 0, SEEDURATION, AFTER); look(FALSE); } msg("a cloak of darkness falls around you"); when P_NOP: msg("this potion tastes extremely dull"); otherwise: msg("what an odd tasting potion!"); return; } status(); /* * Throw the item away */ inpack--; if (obj->o_count > 1) obj->o_count--; else { detach(pack, obj); discardit = TRUE; } call_it(p_know[obj->o_which], &p_guess[obj->o_which]); if (discardit) discard(obj); }