Exemplo n.º 1
0
/* Has all kinds of effects in different circumstances.
   Eventually will be more interesting */
void s_ritual(void)
{
    pob symbol;
    int i,roomno;
    int x,y;

    mprint("You begin your ritual....");
    mprint("You enter a deep trance. Time Passes...");
    setgamestatus(SKIP_PLAYER);
    time_clock(FALSE);
    setgamestatus(SKIP_PLAYER);
    time_clock(FALSE);
    setgamestatus(SKIP_PLAYER);
    time_clock(FALSE);
    setgamestatus(SKIP_PLAYER);
    time_clock(FALSE);
    setgamestatus(SKIP_PLAYER);
    time_clock(FALSE);
    if (RitualHour == hour())
        mprint("Your mental fatigue prevents from completing the ritual!");
    else if (random_range(100) > Player.iq+Player.pow+Player.level)
        mprint("Your concentration was broken -- the ritual fails!");
    else {
        mprint("You charge the ritual with magical energy and focus your will.");
        mprint("Time Passes...");
        setgamestatus(SKIP_PLAYER);
        time_clock(FALSE);
        setgamestatus(SKIP_PLAYER);
        time_clock(FALSE);
        setgamestatus(SKIP_PLAYER);
        time_clock(FALSE);
        setgamestatus(SKIP_PLAYER);
        time_clock(FALSE);
        setgamestatus(SKIP_PLAYER);
        time_clock(FALSE);
        RitualHour = hour();
        /* set of random conditions for different ritual effects */
        if (Current_Environment == E_CITY) {
            mprint("Flowing waves of mystical light congeal all around you.");
            mprint("'Like wow, man! Colors!'");
            mprint("Appreciative citizens throw you spare change.");
            Player.cash +=random_range(50);
        }
        else if ( (roomno=Level->site[Player.x][Player.y].roomnumber) >= ROOMBASE )
        {
            if (RitualRoom == roomno)
                mprint("For some reason the ritual doesn't work this time...");
            else {
                RitualRoom = roomno;
                switch (RitualRoom) {
                case RS_TREASURE: /* ransacked treasure chamber */
                    mprint("Your spell sets off frenetic growth all around you!");
                    for(i=0; i<8; i++) {
                        Level->site[Player.x+Dirs[0][i]][Player.y+Dirs[1][i]].locchar =
                            HEDGE;
                        Level->site[Player.x+Dirs[0][i]][Player.y+Dirs[1][i]].p_locf =
                            L_TRIFID;
                        lset(Player.x+Dirs[0][i], Player.y+Dirs[1][i], CHANGED);
                    }
                    break;
                case RS_HAREM: /* harem */
                case RS_BOUDOIR: /* boudoir */
                    mprint("A secret panel opens next to the bed....");
                    if (random_range(2))
                        summon(0,INCUBUS); /* succubus/incubus */
                    else summon(0,SATYR); /* satyr/nymph */
                    break;
                case RS_SHRINE: /*shrine to high magic */
                    mprint("A storm of mana coaelesces around you.");
                    mprint("You are buffeted by bursts of random magic.");
                    p_damage(random_range(Player.pow),UNSTOPPABLE,"high magic");
                    mprint("Continue ritual? Could be dangerous.... [yn] ");
                    if (ynq()=='y') s_wish();
                    else mprint("The mana fades away to nothingness.");
                    x = Player.x;
                    y = Player.y;
                    while (x >= 0 && Level->site[x - 1][y].roomnumber == RS_SHRINE)
                        x--;
                    while (y >= 0 && Level->site[x][y - 1].roomnumber == RS_SHRINE)
                        y--;
                    for (i = 0; Level->site[x][y].roomnumber == RS_SHRINE;) {
                        Level->site[x][y].roomnumber = RS_ZORCH;
                        lset(x, y, CHANGED);
                        x++;
                        i++;
                        if (Level->site[x][y].roomnumber != RS_SHRINE) {
                            x -= i;
                            i = 0;
                            y++;
                        }
                    }
                    break;
                case RS_MAGIC_LAB: /* magician's lab */
                    mprint("Your magical activity sets off a latent spell in the lab!");
                    cast_spell(random_range(NUMSPELLS));
                    break;
                case RS_PENTAGRAM: /* pentagram room */
                    mprint("A smoky form begins to coalesce....");
                    summon(-1,-1);
                    mprint("Fortunately, it seems confined to the pentagram.");
                    m_status_reset(Level->mlist->m,MOBILE);
                    break;
                case RS_OMEGA_DAIS: /* blue omega room */
                    mprint("The Lords of Destiny look upon you....");
                    if (Player.level > 10) {
                        mprint("A curtain of blue flames leaps up from the omega.");
                        morewait();
                        l_adept();
                    }
                    else {
                        if (Player.patron == DESTINY) {
                            mprint("Your patrons take pity on you.");
                            if ((Player.rank[PRIESTHOOD]<SPRIEST) &&
                                    (! find_item(&symbol,OB_SYMBOL_DESTINY,-1))) {
                                symbol = ((pob) checkmalloc(sizeof(objtype)));
                                *symbol = Objects[OB_SYMBOL_DESTINY];
                                symbol->known = 2;
                                symbol->charge = 17;
                                gain_item(symbol);
                                mprint("You feel uplifted.");
                            }
                            else gain_experience(min(1000,Player.xp));
                        }
                        else if (random_range(3)==1) {
                            mprint("You feel Fated.");
                            gain_experience(Player.level*Player.level*10);
                            Player.hp = max(Player.hp, Player.maxhp);
                        }
                        else if (random_range(2)) {
                            mprint("You feel Doomed.");
                            Player.hp = 1;
                            Player.mana = 0;
                            Player.xp = 0;
                        }
                        else mprint("The Lords of Destiny laugh at you!");
                    }
                    break;
                default:
                    mprint("Well, not much effect. Chalk it up to experience.");
                    gain_experience(Player.level*5);
                    break;
                }
            }
        }
        else {
            if (RitualRoom == Level->site[Player.x][Player.y].roomnumber)
                mprint("The ritual fails for some unexplainable reason.");
            else {
                mprint("The ritual seems to be generating some spell effect.");
                RitualRoom = Level->site[Player.x][Player.y].roomnumber;
                switch (RitualRoom) {
                case RS_WALLSPACE:
                    shadowform();
                    break;
                case RS_CORRIDOR:
                    haste(0);
                    break;
                case RS_PONDS:
                    breathe(0);
                    break;
                case RS_ADEPT:
                    hero(1);
                    break;
                default:
                    mprint("The ritual doesn't seem to produce any tangible results...");
                    gain_experience(Player.level*6);
                }
            }
        }
    }
}
Exemplo n.º 2
0
void p_movefunction(int movef)
{
    /* loc functs above traps should be activated whether levitating or not */
    drawvision(Player.x,Player.y);
    sign_print(Player.x,Player.y,false);
    if (Player.status[SHADOWFORM])
        switch(movef) {	/* player in shadow form is unable to do most things */
        case L_CHAOS:
            l_chaos();
            break;
        case L_ABYSS:
            l_abyss();
            break;
        case L_ARENA_EXIT:
            l_arena_exit();
            break;
        case L_ENTER_COURT:
            l_enter_court();
            break;
        case L_ESCALATOR:
            l_escalator();
            break;
        case L_COLLEGE:
            l_college();
            break;
        case L_SORCERORS:
            l_sorcerors();
            break;
        case L_ALTAR:
            l_altar();
            break;
        case L_TACTICAL_EXIT:
            l_tactical_exit();
            break;
        case L_HOUSE_EXIT:
            l_house_exit();
            break;
        case L_HOUSE:
            l_house();
            break;
        case L_HOVEL:
            l_hovel();
            break;
        case L_MANSION:
            l_mansion();
            break;
        case L_COUNTRYSIDE:
            l_countryside();
            break;
        case L_ORACLE:
            l_oracle();
            break;
        case L_TEMPLE_WARNING:
            l_temple_warning();
            break;
        case L_ENTER_CIRCLE:
            l_enter_circle();
            break;
        case L_CIRCLE_LIBRARY:
            l_circle_library();
            break;
        case L_TOME1:
            l_tome1();
            break;
        case L_TOME2:
            l_tome2();
            break;
        case L_ADEPT:
            l_adept();
            break;
        case L_VOICE1:
            l_voice1();
            break;
        case L_VOICE2:
            l_voice2();
            break;
        case L_VOICE3:
            l_voice3();
            break;
        case L_VOID:
            l_void();
            break;
        case L_FIRE_STATION:
            l_fire_station();
            break;
        case L_EARTH_STATION:
            l_earth_station();
            break;
        case L_WATER_STATION:
            l_water_station();
            break;
        case L_AIR_STATION:
            l_air_station();
            break;
        case L_VOID_STATION:
            l_void_station();
            break;
        }
    else if ((! Player.status[LEVITATING]) ||
             State.getMounted() ||
             (Cmd == '@') || /* @ command activates all effects under player */
             (movef < LEVITATION_AVOIDANCE)) {
        if (movef != L_NO_OP) {
            State.setFastMove(false);
            dataprint();
        }
        switch(movef) {
            /* miscellaneous */
        case L_NO_OP:
            l_no_op();
            break;
        case L_HEDGE:
            l_hedge();
            break;
        case L_WATER:
            l_water();
            break;
        case L_LIFT:
            l_lift();
            break;
        case L_LAVA:
            l_lava();
            break;
        case L_FIRE:
            l_fire();
            break;
        case L_WHIRLWIND:
            l_whirlwind();
            break;
        case L_RUBBLE:
            l_rubble();
            break;
        case L_MAGIC_POOL:
            l_magic_pool();
            break;
        case L_CHAOS:
            l_chaos();
            break;
        case L_ABYSS:
            l_abyss();
            break;

        case L_PORTCULLIS_TRAP:
            l_portcullis_trap();
            break;
        case L_RAISE_PORTCULLIS:
            l_raise_portcullis();
            break;
        case L_DROP_EVERY_PORTCULLIS:
            l_drop_every_portcullis();
            break;
        case L_ARENA_EXIT:
            l_arena_exit();
            break;
        case L_TRIFID:
            l_trifid();
            break;
        case L_ENTER_COURT:
            l_enter_court();
            break;
        case L_ESCALATOR:
            l_escalator();
            break;
        case L_THRONE:
            l_throne();
            break;

        case L_TRAP_DART:
            l_trap_dart();
            break;
        case L_TRAP_SIREN:
            l_trap_siren();
            break;
        case L_TRAP_PIT:
            l_trap_pit();
            break;
        case L_TRAP_DOOR:
            l_trap_door();
            break;
        case L_TRAP_SNARE:
            l_trap_snare();
            break;
        case L_TRAP_BLADE:
            l_trap_blade();
            break;
        case L_TRAP_FIRE:
            l_trap_fire();
            break;
        case L_TRAP_TELEPORT:
            l_trap_teleport();
            break;
        case L_TRAP_DISINTEGRATE:
            l_trap_disintegrate();
            break;
        case L_TRAP_SLEEP_GAS:
            l_trap_sleepgas();
            break;
        case L_TRAP_MANADRAIN:
            l_trap_manadrain();
            break;
        case L_TRAP_ACID:
            l_trap_acid();
            break;
        case L_TRAP_ABYSS:
            l_trap_abyss();
            break;

            /*door functions */
        case L_BANK:
            l_bank();
            break;
        case L_ARMORER:
            l_armorer();
            break;
        case L_CLUB:
            l_club();
            break;
        case L_GYM:
            l_gym();
            break;
        case L_BROTHEL:
            l_brothel();
            break;
        case L_THIEVES_GUILD:
            l_thieves_guild();
            break;
        case L_COLLEGE:
            l_college();
            break;
        case L_HEALER:
            l_healer();
            break;
        case L_STATUE_WAKE:
            l_statue_wake();
            break;
        case L_CASINO:
            l_casino();
            break;
        case L_COMMANDANT:
            l_commandant();
            break;
        case L_DINER:
            l_diner();
            break;
        case L_CRAP:
            l_crap();
            break;
        case L_TAVERN:
            l_tavern();
            break;
        case L_MERC_GUILD:
            l_merc_guild();
            break;
        case L_MONASTERY:
            l_monastery();
            break;
        case L_ALCHEMIST:
            l_alchemist();
            break;
        case L_SORCERORS:
            l_sorcerors();
            break;
        case L_CASTLE:
            l_castle();
            break;
        case L_ARENA:
            l_arena();
            break;
        case L_VAULT:
            l_vault();
            break;
        case L_DPW:
            l_dpw();
            break;
        case L_LIBRARY:
            l_library();
            break;
        case L_PAWN_SHOP:
            l_pawn_shop();
            break;
        case L_CONDO:
            l_condo();
            break;
        case L_TOURIST:
            l_tourist();
            break;
        case L_ALTAR:
            l_altar();
            break;
        case L_TACTICAL_EXIT:
            l_tactical_exit();
            break;
        case L_HOUSE_EXIT:
            l_house_exit();
            break;
        case L_SAFE:
            l_safe();
            break;
        case L_HOUSE:
            l_house();
            break;
        case L_HOVEL:
            l_hovel();
            break;
        case L_MANSION:
            l_mansion();
            break;
        case L_COUNTRYSIDE:
            l_countryside();
            break;
        case L_ORACLE:
            l_oracle();
            break;
        case L_ORDER:
            l_order();
            break;
        case L_CARTOGRAPHER:
            l_cartographer();
            break;

        case L_TEMPLE_WARNING:
            l_temple_warning();
            break;
        case L_ENTER_CIRCLE:
            l_enter_circle();
            break;
        case L_CIRCLE_LIBRARY:
            l_circle_library();
            break;
        case L_TOME1:
            l_tome1();
            break;
        case L_TOME2:
            l_tome2();
            break;

        case L_CHARITY:
            l_charity();
            break;

        case L_CHAOSTONE:
            l_chaostone();
            break;
        case L_VOIDSTONE:
            l_voidstone();
            break;
        case L_BALANCESTONE:
            l_balancestone();
            break;
        case L_LAWSTONE:
            l_lawstone();
            break;
        case L_SACRIFICESTONE:
            l_sacrificestone();
            break;
        case L_MINDSTONE:
            l_mindstone();
            break;

            /* challenge functions */
        case L_ADEPT:
            l_adept();
            break;
        case L_VOICE1:
            l_voice1();
            break;
        case L_VOICE2:
            l_voice2();
            break;
        case L_VOICE3:
            l_voice3();
            break;
        case L_VOID:
            l_void();
            break;
        case L_FIRE_STATION:
            l_fire_station();
            break;
        case L_EARTH_STATION:
            l_earth_station();
            break;
        case L_WATER_STATION:
            l_water_station();
            break;
        case L_AIR_STATION:
            l_air_station();
            break;
        case L_VOID_STATION:
            l_void_station();
            break;
        }
    }
}