Example #1
0
static void _marilith_gain_level(int new_level) {
    if (p_ptr->current_r_idx == MON_MANES && new_level >= 10)
    {
        p_ptr->current_r_idx = MON_QUASIT;
        msg_print("You have evolved into a Quasit.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_QUASIT && new_level >= 20)
    {
        p_ptr->current_r_idx = MON_BODAK;
        msg_print("You have evolved into a Bodak.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_BODAK && new_level >= 30)
    {
        p_ptr->current_r_idx = MON_DEATH_QUASIT;
        msg_print("You have evolved into a Death Quasit.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_DEATH_QUASIT && new_level >= 40)
    {
        p_ptr->current_r_idx = MON_MARILITH;
        p_ptr->psex = SEX_FEMALE;
        sp_ptr = &sex_info[p_ptr->psex];
        msg_print("You have evolved into a Marilith.");
        equip_on_change_race();
        p_ptr->redraw |= PR_MAP;
    }
}
Example #2
0
/******************************************************************************
 *                                20            30            40
 * Servant of Khorne: Bloodletter -> Fleshhound -> Juggernaut -> Bloodthirster
 ******************************************************************************/
static void _khorne_birth(void) 
{ 
    object_type    forge;

    p_ptr->current_r_idx = MON_BLOODLETTER_KHORNE;
    equip_on_change_race();

    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 6;
    add_outfit(&forge);
    
    object_prep(&forge, lookup_kind(TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS));
    forge.name2 = EGO_WEAPON_SHARPNESS;
    forge.pval = 1;
    forge.to_h = 0;
    forge.to_d = 0;
    forge.ds = 6;
    forge.weight = 220;
    add_flag(forge.flags, OF_VORPAL);
    add_outfit(&forge);
}
Example #3
0
/**********************************************************************
 *                  7        14      21     28       35
 * Evolution: White -> Green -> Blue -> Red -> Clear -> Multihued
 **********************************************************************/
static void _birth(void)
{
    object_type    forge;

    p_ptr->current_r_idx = MON_CENTIPEDE_WHITE;
    equip_on_change_race();
    skills_innate_init("Bite", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);
    skills_innate_init("Sting", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);
    skills_innate_init("Crawl", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);


    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_h = 3;
    forge.to_d = 2;
    forge.pval = 1;
    add_flag(forge.flags, OF_DEX);
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS));
    add_outfit(&forge);
}
Example #4
0
static void _set_mimic_form(int which)
{
    p_ptr->mimic_form = which;
    equip_on_change_race();

    if (p_ptr->action == ACTION_QUICK_WALK || p_ptr->action == ACTION_STALK) /* Wolf form ... */
        set_action(ACTION_NONE);

    p_ptr->redraw |= PR_BASIC | PR_STATUS | PR_MAP | PR_EQUIPPY;
    p_ptr->update |= PU_BONUS | PU_HP;
    handle_stuff();
}
static void _gain_level(int new_level)
{
    if (p_ptr->current_r_idx == MON_CENTIPEDE_WHITE && new_level >= 7)
    {
        p_ptr->current_r_idx = MON_CENTIPEDE_GREEN;
        equip_on_change_race();
        msg_print("You have evolved into a metallic green centipede.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_CENTIPEDE_GREEN && new_level >= 14)
    {
        p_ptr->current_r_idx = MON_CENTIPEDE_BLUE;
        equip_on_change_race();
        msg_print("You have evolved into a metallic blue centipede.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_CENTIPEDE_BLUE && new_level >= 21)
    {
        p_ptr->current_r_idx = MON_CENTIPEDE_RED;
        equip_on_change_race();
        msg_print("You have evolved into a metallic red centipede.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_CENTIPEDE_RED && new_level >= 28)
    {
        p_ptr->current_r_idx = MON_CENTIPEDE_CLEAR;
        equip_on_change_race();
        msg_print("You have evolved into a giant clear centipede.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_CENTIPEDE_CLEAR && new_level >= 35 && player_is_monster_king())
    {
        p_ptr->current_r_idx = MON_CENTIPEDE_MULTIHUED;
        equip_on_change_race();
        msg_print("You have evolved into The Multi-hued Centipede! There can only be one, you know ...");
        p_ptr->redraw |= PR_MAP;
    }
}
Example #6
0
/**********************************************************************
 * Hound Equipment
 **********************************************************************/
static void _birth(void) 
{ 
    object_type    forge;

    p_ptr->current_r_idx = MON_CLEAR_HOUND;
    equip_on_change_race();
    
    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 3;
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_BOOTS, SV_PAIR_OF_METAL_SHOD_BOOTS));
    add_outfit(&forge);
}
Example #7
0
static void _gain_level(int new_level) {
    if (p_ptr->current_r_idx == MON_UMBER_HULK && new_level >= 20)
    {
        p_ptr->current_r_idx = MON_XORN;
        equip_on_change_race();
        msg_print("You have evolved into a Xorn.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_XORN && new_level >= 35)
    {
        p_ptr->current_r_idx = MON_XAREN;
        msg_print("You have evolved into a Xaren.");
        p_ptr->redraw |= PR_MAP;
    }
}
Example #8
0
/**********************************************************************
 * Birth and Evolution
 **********************************************************************/
static void _birth(void) 
{ 
    object_type forge;
    int i;

    for (i = 0; i < _MAX_ESSENCE; i++)
        _essences[i] = 0;

    p_ptr->current_r_idx = MON_BROKEN_DEATH_SWORD;
    equip_on_change_race();

    object_prep(&forge, lookup_kind(TV_SWORD, SV_BROKEN_SWORD));
    add_flag(forge.art_flags, TR_NO_REMOVE);
    forge.to_h =  1;
    forge.to_d =  3;
    add_outfit(&forge);
}
Example #9
0
/**********************************************************************
 * Hound Equipment
 **********************************************************************/
static void _birth(void) 
{ 
    object_type    forge;

    p_ptr->current_r_idx = MON_CLEAR_HOUND;
    equip_on_change_race();
    skills_innate_init("Claw", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);
    skills_innate_init("Bite", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);

    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 3;
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_BOOTS, SV_PAIR_OF_METAL_SHOD_BOOTS));
    add_outfit(&forge);
}
Example #10
0
static void _birth(void)
{
    object_type    forge;

    p_ptr->current_r_idx = MON_BLACK_OOZE;
    equip_on_change_race();
    skills_innate_init("Pseudopod", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);

    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.pval = 1;
    forge.to_d = 3;
    add_flag(forge.flags, OF_STR);
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL));
    add_outfit(&forge);
}
Example #11
0
static void _marilith_birth(void) {
    object_type    forge;

    p_ptr->current_r_idx = MON_MANES;
    equip_on_change_race();

    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 3;
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_SWORD, SV_BROAD_SWORD));
    forge.to_h = 1;
    forge.to_d = 2;
    add_outfit(&forge);
}
Example #12
0
/******************************************************************************
 *                  25                35              45
 * Vampire: Vampire -> Master Vampire -> Vampire Lord -> Elder Vampire
 ******************************************************************************/
static void _birth(void) 
{ 
    object_type    forge;

    p_ptr->current_r_idx = MON_VAMPIRE;
    equip_on_change_race();
    
    object_prep(&forge, lookup_kind(TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_SWORD, SV_DAGGER));
    forge.name2 = EGO_WEAPON_DEATH;
    add_outfit(&forge);

    /* Encourage shapeshifting! */
    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 4;
    add_outfit(&forge);
}
Example #13
0
/******************************************************************************
 * Troll Evolution
 ******************************************************************************/
static void _birth(void) 
{ 
    object_type    forge;

    p_ptr->current_r_idx = MON_FOREST_TROLL;
    equip_on_change_race();
    
    object_prep(&forge, lookup_kind(TV_HARD_ARMOR, SV_CHAIN_MAIL));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 7;
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_HAFTED, SV_CLUB));
    forge.weight = 100;
    forge.dd = 3;
    forge.ds = 4;
    forge.to_d = 7;
    add_outfit(&forge);
}
Example #14
0
static void _birth(void) 
{ 
    object_type    forge;

    p_ptr->current_r_idx = MON_GAZER;
    equip_on_change_race();
    skills_innate_init("Gaze", WEAPON_EXP_BEGINNER, WEAPON_EXP_MASTER);
    
    object_prep(&forge, lookup_kind(TV_CROWN, SV_IRON_CROWN));
    forge.name2 = EGO_CROWN_SEEING;
    forge.pval = 4;
    forge.to_a = 10;
    add_esp_weak(&forge, FALSE);
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_WAND, SV_ANY));
    if (device_init_fixed(&forge, EFFECT_BOLT_FIRE))
        add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_WAND, SV_ANY));
    if (device_init_fixed(&forge, EFFECT_BOLT_COLD))
        add_outfit(&forge);
}
Example #15
0
static void _birth(void) 
{ 
    object_type forge;
    int i;

    possessor_on_birth(); /* Cleanup history from last character */

    for (i = 0; i < _MAX_FORMS; i++)
        _forms[i] = 0;

    p_ptr->current_r_idx = MON_MIMIC;
    equip_on_change_race();
    
    object_prep(&forge, lookup_kind(TV_SWORD, SV_LONG_SWORD));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL));
    add_outfit(&forge);

    object_prep(&forge, lookup_kind(TV_RING, 0));
    forge.name2 = EGO_RING_COMBAT;
    forge.to_d = 3;
    add_outfit(&forge);
}
Example #16
0
void mimic_race(int new_race, const char *msg)
{
    int  old_race = p_ptr->mimic_form;

    if (p_ptr->prace != RACE_DOPPELGANGER) return;
    if (p_ptr->tim_mimic) return;
    if (new_race == old_race) return;

    if (msg)
        msg_print(msg);
    
    if (old_race == RACE_HUMAN || old_race == RACE_DEMIGOD)
    {
        int i, idx;
        for (i = 0; i < MAX_DEMIGOD_POWERS; i++)
        {
            idx = p_ptr->demigod_power[i];
            if (idx >= 0)
            {
                mut_unlock(idx);
                mut_lose(idx);
            /*    Lose the mutation, but not the choice!
                p_ptr->demigod_power[i] = -1; */
            }
        }
    }

    /* Shifting form causes mutations to vanish! */
    mut_lose_all();

    if (new_race == MIMIC_NONE)
        msg_print("You resume your true form.");
    else
    {
        race_t *race_ptr = get_race_t_aux(new_race, 0);
        if (is_a_vowel(race_ptr->name[0]))
            msg_format("You turn into an %s!", race_ptr->name);
        else
            msg_format("You turn into a %s!", race_ptr->name);
    }

    p_ptr->mimic_form = new_race;
    p_ptr->expfact = calc_exp_factor();
    check_experience();

    if (new_race == RACE_HUMAN || new_race == RACE_DEMIGOD)
    {
        get_race_t()->gain_level(p_ptr->lev);    /* This is OK ... Just make sure we get to choose racial powers on mimicry */
    }

    if (new_race == RACE_BEASTMAN)
    {
        int i;
        mut_gain_random(mut_good_pred);
        for (i = 2; i <= p_ptr->lev; i++)
        {
            if (one_in_(5))
                mut_gain_random(NULL);
        }
    }

    p_ptr->redraw |= (PR_BASIC | PR_STATUS | PR_MAP);
    p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA);

    equip_on_change_race();
    reset_visuals();
    handle_stuff();
}
Example #17
0
static void _gain_level(int new_level) 
{
    if (p_ptr->current_r_idx == MON_FOREST_TROLL && new_level >= 10)
    {
        p_ptr->current_r_idx = MON_STONE_TROLL;
        msg_print("You have evolved into a Stone Troll.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_STONE_TROLL && new_level >= 20)
    {
        int r = randint0(3);
        if (spoiler_hack)
            r = 2;
        switch (r)
        {
        case 0:
            p_ptr->current_r_idx = MON_ICE_TROLL;
            msg_print("You have evolved into an Ice Troll.");
            break;
        case 1:
            p_ptr->current_r_idx = MON_FIRE_TROLL;
            msg_print("You have evolved into a Fire Troll.");
            break;
        case 2:
            p_ptr->current_r_idx = MON_ALGROTH;
            msg_print("You have evolved into an Algroth.");
            break;
        }
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_ALGROTH && new_level >= 25)
    {
        p_ptr->current_r_idx = MON_AKLASH;
        msg_print("You have evolved into an Aklash.");
        p_ptr->redraw |= PR_MAP;
    }
    if ( ( p_ptr->current_r_idx == MON_FIRE_TROLL 
        || p_ptr->current_r_idx == MON_ICE_TROLL 
        || p_ptr->current_r_idx == MON_AKLASH )
      && new_level >= 30 )
    {
        p_ptr->current_r_idx = MON_OLOG;
        msg_print("You have evolved into an Olog.");
        p_ptr->redraw |= PR_MAP;
    }
    if (p_ptr->current_r_idx == MON_OLOG && new_level >= 40)
    {
        switch (p_ptr->psubrace)
        {
        case TROLL_ETTIN:
            p_ptr->current_r_idx = MON_ETTIN;
            msg_print("You have evolved into an Ettin.");
            equip_on_change_race(); /* Two heads */
            break;
        case TROLL_STORM:
            p_ptr->current_r_idx = MON_STORM_TROLL;
            msg_print("You have evolved into a Storm Troll.");
            break;
        case TROLL_SPIRIT:
            p_ptr->current_r_idx = MON_SPIRIT_TROLL;
            msg_print("You have evolved into a Spirit Troll.");
            break;
        case TROLL_KING:
            p_ptr->current_r_idx = MON_TROLL_KING;
            msg_print("You have evolved into a Troll King.");
            break;
        }
        p_ptr->redraw |= PR_MAP;
    }
}
Example #18
0
/****************************************************************
 * Centaur
 ****************************************************************/
static void _centaur_birth(void) 
{ 
    equip_on_change_race();
}