Ticket #1693: 0001-Add-troll-player-race.patch

File 0001-Add-troll-player-race.patch, 12.1 KB (added by daniel.santos, 7 years ago)

initial implementation

  • lib/edit/p_race.txt

    From 0af7d6a350cc7670e97ecf13effc738a40b219b7 Mon Sep 17 00:00:00 2001
    From: Daniel Santos <daniel.santos@pobox.com>
    Date: Fri, 12 Oct 2012 19:00:36 -0500
    Subject: Add troll player race
    
    
    Signed-off-by: Daniel Santos <daniel.santos@pobox.com>
    ---
     lib/edit/p_race.txt            |   16 +++++++++++++---
     src/borg/borg1.c               |    1 +
     src/borg/borg1.h               |    1 +
     src/borg/borg4.c               |    3 +++
     src/defines.h                  |   15 +++++++++++++++
     src/dungeon.c                  |   23 +++++++++++++++++++++++
     src/list-gf-types.h            |    4 ++--
     src/object/list-object-flags.h |    3 ++-
     src/spells2.c                  |   20 +++++++++++++++++++-
     src/ui-birth.c                 |    1 +
     src/xtra3.c                    |   39 ++++++++++++++++++++++++++++++++++++++-
     11 files changed, 118 insertions(+), 8 deletions(-)
    
    diff --git a/lib/edit/p_race.txt b/lib/edit/p_race.txt
    index 400c720..10ea6df 100644
    a b W:250:50:225:40 
    135135F:SUST_STR | REGEN 
    136136C:0|2 
    137137 
    138 N:8:Dunadan 
     138N:8:Troll 
     139S:10:-8:-6:-5:5:-11 
     140R:-5:-12:-16:-6:-1:5:45:-20:-20:0 
     141X:16:140:8 
     142I:21:26:14 
     143H:120:14:102:12 
     144W:350:70:312:55 
     145F:SUST_STR | REGEN | VULN_LIGHT | RES_DARK 
     146C:0|2 
     147 
     148N:9:Dunadan 
    139149S:1:2:2:2:3:2 
    140150R:4:5:5:1:3:13:15:10:10:0 
    141151X:10:180:0 
    W:190:20:180:15 
    145155F:SUST_CON 
    146156C:0|1|2|4|5 
    147157 
    148 N:9:High-Elf 
     158N:10:High-Elf 
    149159S:1:3:-1:3:1:5 
    150160R:4:20:20:2:3:14:10:25:25:0 
    151161X:10:200:4 
    W:190:20:180:15 
    155165F:RES_LIGHT | SEE_INVIS 
    156166C:0|1|2|4 
    157167 
    158 N:10:Kobold 
     168N:11:Kobold 
    159169S:-1:-1:0:2:2:-2 
    160170R:10:5:0:3:15:15:-5:10:10:0 
    161171X:8:115:5 
  • src/borg/borg1.c

    diff --git a/src/borg/borg1.c b/src/borg/borg1.c
    index 1ffa25f..938c658 100644
    a b char *prefix_pref[] = 
    236236        "_CRSEVULN",    /* Vulnerable to elec */ 
    237237        "_CRSCVULN",    /* Vulnerable to Cold */ 
    238238        "_CRSAVULN",    /* Vulnerable to Acid */ 
     239        "_CRSLVULN",    /* Vulnerable to Light */ 
    239240 
    240241/* weapon attributes */ 
    241242    "_WSANIMAL",  /* WS = weapon slays */ 
  • src/borg/borg1.h

    diff --git a/src/borg/borg1.h b/src/borg/borg1.h
    index fb6bfaa..78efad8 100644
    a b enum 
    10221022        BI_CRSEVULN, 
    10231023        BI_CRSCVULN, 
    10241024        BI_CRSAVULN, 
     1025        BI_CRSLVULN, 
    10251026    BI_WS_ANIMAL, 
    10261027    BI_WS_EVIL, 
    10271028    BI_WS_UNDEAD, 
  • src/borg/borg4.c

    diff --git a/src/borg/borg4.c b/src/borg/borg4.c
    index 12f8515..0b1074b 100644
    a b static void borg_notice_aux1(void) 
    157157        if (rf_has(f, OF_VULN_ACID)) borg_skill[BI_CRSAVULN] = TRUE; 
    158158        if (rf_has(f, OF_VULN_COLD)) borg_skill[BI_CRSCVULN] = TRUE; 
    159159        if (rf_has(f, OF_VULN_ELEC)) borg_skill[BI_CRSEVULN] = TRUE; 
     160        if (rf_has(f, OF_VULN_LIGHT)) borg_skill[BI_CRSLVULN] = TRUE; 
    160161 
    161162    /* Immunity flags */ 
    162163    if (rf_has(f, OF_IM_FIRE)) borg_skill[BI_IFIRE] = TRUE; 
    static void borg_notice_aux1(void) 
    285286                if (of_has(item->flags, OF_VULN_ACID)) borg_skill[BI_CRSAVULN] = TRUE; 
    286287                if (of_has(item->flags, OF_VULN_COLD)) borg_skill[BI_CRSCVULN] = TRUE; 
    287288                if (of_has(item->flags, OF_VULN_ELEC)) borg_skill[BI_CRSEVULN] = TRUE; 
     289                if (of_has(item->flags, OF_VULN_LIGHT)) borg_skill[BI_CRSLVULN] = TRUE; 
    288290 
    289291 
    290292        if (of_has(item->flags, OF_REGEN)) borg_skill[BI_REG] = TRUE; 
    static s32b borg_power_aux1(void) 
    45424544        if (borg_skill[BI_CRSEVULN]) value -=30000; 
    45434545        if (borg_skill[BI_CRSCVULN]) value -=30000; 
    45444546        if (borg_skill[BI_CRSAVULN]) value -=30000; 
     4547        if (borg_skill[BI_CRSLVULN]) value -=30000; 
    45454548 
    45464549 
    45474550    /*** Penalize armor weight ***/ 
  • src/defines.h

    diff --git a/src/defines.h b/src/defines.h
    index eef6989..4ecd99d 100644
    a b  
    170170#define MON_MULT_ADJ            8       /* High value slows multiplication */ 
    171171#define MON_DRAIN_LIFE          2       /* Percent of player exp drained per hit */ 
    172172 
     173/* Total turns in a day */ 
     174#define DAY (10L * TOWN_DAWN) 
     175 
     176/* 
     177 * Start of each portion of a day. (mid- day/night is aproximate, each covering 
     178 * a four hour period) 
     179 */ 
     180static const long TIME_MORNING           = 0L;                          /*  6:00 AM */ 
     181static const long TIME_MIDDAY            = DAY *  8L / 48L;     /* 10:00 AM */ 
     182static const long TIME_AFTERNOON         = DAY * 12L / 48L;     /*  2:00 PM */ 
     183static const long TIME_SUNSET            = DAY * 24L / 48L;     /*  6:00 PM */ 
     184static const long TIME_EVENING           = DAY * 25L / 48L;     /*  6:30 PM */ 
     185static const long TIME_MIDNIGHT          = DAY * 32L / 48L;     /* 10:00 PM */ 
     186static const long TIME_EARLY_MORNING = DAY * 40L / 48L; /*  2:00 AM */ 
     187static const long TIME_PREDAWN           = DAY * 47L / 48L;     /*  5:30 AM */ 
    173188 
    174189/* 
    175190 * There is a 1/50 (2%) chance of inflating the requested monster level 
  • src/dungeon.c

    diff --git a/src/dungeon.c b/src/dungeon.c
    index 6ee6954..00fc65a 100644
    a b static void process_world(struct cave *c) 
    575575                take_hit(p_ptr, i, "a fatal wound"); 
    576576        } 
    577577 
     578        /* Take damage from sun */ 
     579        if(!p_ptr->depth && check_state(p_ptr, OF_VULN_LIGHT, p_ptr->state.flags)) { 
     580                long time = turn % DAY; 
     581 
     582                if (time < TIME_SUNSET) { 
     583                        int dam; 
     584 
     585                        /* double damage if midday */ 
     586                        if (time >= TIME_MIDDAY && time < TIME_AFTERNOON) 
     587                                dam = damroll(4, 4); 
     588                        else 
     589                                dam = damroll(2, 4); 
     590 
     591                        /* adjust for resistance */ 
     592                        dam = adjust_dam(p_ptr, GF_LIGHT_WEAK, dam, RANDOMISE, 
     593                                check_for_resist(p_ptr, GF_LIGHT_WEAK, p_ptr->state.flags, TRUE)); 
     594 
     595                        take_hit(p_ptr, dam, "the sun"); 
     596                        disturb(p_ptr, 1, 0); 
     597                } 
     598        } 
     599 
     600 
    578601 
    579602        /*** Check the Food, and Regenerate ***/ 
    580603 
  • src/list-gf-types.h

    diff --git a/src/list-gf-types.h b/src/list-gf-types.h
    index c991e12..2c7e414 100644
    a b GF(ARROW, "something sharp", 0, 0, RV(0,0,0,0), 0, 0, TRUE, 0, 0, 
    2323GF(MISSILE,             "something",            0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              0,                      0,                              0,                              0) 
    2424GF(MANA,                "something",            0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              0,                      0,                              0,                              0) 
    2525GF(HOLY_ORB,    "something",            0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              0,                      0,                              0,                              0) 
    26 GF(LIGHT_WEAK,  NULL,                           0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              0,                      RF_HURT_LIGHT,  0,                              0) 
     26GF(LIGHT_WEAK,  NULL,                           0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   OF_VULN_LIGHT,  0,                      RF_HURT_LIGHT,  0,                              0) 
    2727GF(DARK_WEAK,   NULL,                           0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              0,                      0,                              0,                              0) 
    2828GF(WATER,               "water",                        0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              RF_IM_WATER,0,                          0,                              0) 
    2929GF(PLASMA,              "something",            0,                              0,      RV(0,0,0,0),    0,                              0,                      TRUE,   0,                              RF_RES_PLAS,0,                          0,                              0) 
    GF(ELEC, "lightning", OF_RES_ELEC, 1, RV(3,0,0,0), TMD_OPP_ELEC, OF_I 
    3838GF(FIRE,                "fire",                         OF_RES_FIRE,    1,  RV(3,0,0,0),    TMD_OPP_FIRE,   OF_IM_FIRE, TRUE,   OF_VULN_FIRE,   RF_IM_FIRE, RF_HURT_FIRE,       OF_HATES_FIRE,  OF_IGNORE_FIRE) 
    3939GF(COLD,                "cold",                         OF_RES_COLD,    1,  RV(3,0,0,0),    TMD_OPP_COLD,   OF_IM_COLD, TRUE,   OF_VULN_COLD,   RF_IM_COLD, RF_HURT_COLD,       OF_HATES_COLD,  OF_IGNORE_COLD) 
    4040GF(POIS,                "poison",                       OF_RES_POIS,    1,  RV(3,0,0,0),    TMD_OPP_POIS,   0,          TRUE,   0,              RF_IM_POIS, 0,                          0,                              0) 
    41 GF(LIGHT,               "something",            OF_RES_LIGHT,   4,  RV(6,1,6,0),    0,              0,          TRUE,   0,              0,          RF_HURT_LIGHT,      0,                              0) 
     41GF(LIGHT,               "something",            OF_RES_LIGHT,   4,  RV(6,1,6,0),    0,              0,          TRUE,   OF_VULN_LIGHT,  0,          RF_HURT_LIGHT,      0,                              0) 
    4242GF(DARK,                "something",            OF_RES_DARK,    4,  RV(6,1,6,0),    0,              0,          TRUE,   0,              0,          0,                          0,                              0) 
    4343GF(CONFU,               "something",            OF_RES_CONFU,   6,      RV(6,1,6,0),    TMD_OPP_CONF,   0,                      TRUE,   0,                              0,                      0,                              0,                              0) 
    4444GF(SOUND,               "noise",                        OF_RES_SOUND,   5,  RV(6,1,6,0),    0,              0,          TRUE,   0,              0,          0,                          0,                              0) 
  • src/object/list-object-flags.h

    diff --git a/src/object/list-object-flags.h b/src/object/list-object-flags.h
    index cfc74dc..702f0fd 100644
    a b OF(VULN_ACID, FALSE, 0, OFID_NORMAL,OFT_VULN, -6, 0, 1, 1, 1, 1, 1, 1, 
    6161OF(VULN_ELEC,   FALSE,  0,                              OFID_NORMAL,OFT_VULN,   -6,             0,      1,      1,      1,              1,      1,              1,              1,              1,              1,      1,              1,              "Your %s glows.") 
    6262OF(VULN_FIRE,   FALSE,  0,                              OFID_NORMAL,OFT_VULN,   -6,             0,      1,      1,      1,              1,      1,              1,              1,              1,              1,      1,              1,              "Your %s glows.") 
    6363OF(VULN_COLD,   FALSE,  0,                              OFID_NORMAL,OFT_VULN,   -6,             0,      1,      1,      1,              1,      1,              1,              1,              1,              1,      1,              1,              "Your %s glows.") 
    64 OF(XXX3,        FALSE,  0,                              0,                      0,                      0,              0,      0,      0,      0,              0,      0,              0,              0,              0,              0,      0,              0,              "Your %s glows.") 
     64OF(VULN_LIGHT,  FALSE,  0,                              OFID_NORMAL,OFT_VULN,   -6,             0,      1,      1,      1,              1,      1,              1,              1,              1,              1,      1,              1,              "Your %s glows.") 
     65/* OF(XXX3,        FALSE,       0,                              0,                      0,                      0,              0,      0,      0,      0,              0,      0,              0,              0,              0,              0,      0,              0,              "Your %s glows.") */ 
    6566OF(XXX4,        FALSE,  0,                              0,                      0,                      0,              0,      0,      0,      0,              0,      0,              0,              0,              0,              0,      0,              0,              "Your %s glows.") 
    6667OF(IM_ACID,     FALSE,  0,                              OFID_NORMAL,OFT_IMM,    38,             0,      1,      1,      1,              1,      1,              1,              1,              1,              1,      1,              1,              "Your %s glows.") 
    6768OF(IM_ELEC,     FALSE,  0,                              OFID_NORMAL,OFT_IMM,    35,             0,      1,      1,      1,              1,      1,              1,              1,              1,              1,      1,              1,              "Your %s glows.") 
  • src/spells2.c

    diff --git a/src/spells2.c b/src/spells2.c
    index 38a73d6..0c1836b 100644
    a b void destroy_area(int y1, int x1, int r, bool full) 
    20592059                        /* Become blind */ 
    20602060                        (void)player_inc_timed(p_ptr, TMD_BLIND, 10 + randint1(10), TRUE, TRUE); 
    20612061                } 
     2062 
     2063                if(check_state(p_ptr, OF_VULN_LIGHT, p_ptr->state.flags)) { 
     2064                        int dam = rand_range(50, 100); 
     2065 
     2066                        dam = adjust_dam(p_ptr, GF_LIGHT, dam, RANDOMISE, 
     2067                                check_for_resist(p_ptr, GF_LIGHT, p_ptr->state.flags, TRUE)); 
     2068 
     2069                        take_hit(p_ptr, dam, "light"); 
     2070                } 
    20622071        } 
    20632072 
    20642073 
    bool light_area(int dam, int rad) 
    26182627        int px = p_ptr->px; 
    26192628 
    26202629        int flg = PROJECT_GRID | PROJECT_KILL; 
     2630        int vuln = check_state(p_ptr, OF_VULN_LIGHT, p_ptr->state.flags); 
    26212631 
    26222632        /* Hack -- Message */ 
    26232633        if (!p_ptr->timed[TMD_BLIND]) 
    2624                 msg("You are surrounded by a white light."); 
     2634                msg("You are surrounded by a white light%s", vuln ? ", it hurts!" : "."); 
    26252635 
    26262636        /* Hook into the "project()" function */ 
    26272637        (void)project(-1, rad, py, px, dam, GF_LIGHT_WEAK, flg); 
    bool light_area(int dam, int rad) 
    26292639        /* Light up the room */ 
    26302640        light_room(py, px, LIGHT); 
    26312641 
     2642        if(vuln) { 
     2643                /* punishment for a troll players */ 
     2644                dam = adjust_dam(p_ptr, GF_LIGHT_WEAK, dam, RANDOMISE, 
     2645                        check_for_resist(p_ptr, GF_LIGHT_WEAK, p_ptr->state.flags, TRUE)); 
     2646 
     2647                take_hit(p_ptr, dam, "light"); 
     2648        } 
     2649 
    26322650        /* Assume seen */ 
    26332651        return (TRUE); 
    26342652} 
  • src/ui-birth.c

    diff --git a/src/ui-birth.c b/src/ui-birth.c
    index 4df2852..a2ce57e 100644
    a b static const char *get_flag_desc(bitflag flag) 
    233233                case OF_FREE_ACT: return "Resists paralysis"; 
    234234                case OF_REGEN: return "Regenerates quickly"; 
    235235                case OF_SEE_INVIS: return "Sees invisible creatures"; 
     236                case OF_VULN_LIGHT: return "Vulnerable to bright light"; 
    236237 
    237238                default: return "Undocumented flag"; 
    238239        } 
  • src/xtra3.c

    diff --git a/src/xtra3.c b/src/xtra3.c
    index 874f401..9ae72bb 100644
    a b static size_t prt_buttons(int row, int col) 
    949949        return 0; 
    950950} 
    951951 
     952/* 
     953 * Prints time of day indicator outside for trolls 
     954 */ 
     955static size_t prt_time_of_day(int row, int col) 
     956{ 
     957        long time; 
     958        byte color; 
     959        const char *str; 
     960 
     961        /* Only show if player is vulnerable to light and outside. */ 
     962        if (p_ptr->depth || !check_state(p_ptr, OF_VULN_LIGHT, p_ptr->state.flags)) 
     963                return 0; 
     964 
     965        time = turn % DAY; 
     966 
     967        if ((time >= TIME_EVENING && time < TIME_PREDAWN) 
     968                        || check_state(p_ptr, OF_RES_LIGHT, p_ptr->state.flags)) 
     969                color = TERM_GREEN; 
     970        else if (time < TIME_SUNSET) 
     971                color = TERM_RED; 
     972        else 
     973                color = TERM_YELLOW; 
     974 
     975        if (time < TIME_MIDDAY)                         str = "Morning"; 
     976        else if (time < TIME_AFTERNOON)         str = "Midday"; 
     977        else if (time < TIME_SUNSET)            str = "Afternoon"; 
     978        else if (time < TIME_EVENING)           str = "Sunset"; 
     979        else if (time < TIME_MIDNIGHT)          str = "Evening"; 
     980        else if (time < TIME_EARLY_MORNING)     str = "Midnight"; 
     981        else if (time < TIME_PREDAWN)           str = "Early Morning"; 
     982        else                                                            str = "Predawn"; 
     983 
     984        c_put_str(color, str, row, col); 
     985 
     986        return strlen(str) + 1; 
     987} 
     988 
    952989 
    953990/* Useful typedef */ 
    954991typedef size_t status_f(int row, int col); 
    955992 
    956993status_f *status_handlers[] = 
    957994{ prt_buttons, prt_unignore, prt_recall, prt_state, prt_cut, prt_stun, 
    958   prt_hunger, prt_study, prt_tmd, prt_dtrap }; 
     995  prt_hunger, prt_study, prt_tmd, prt_dtrap, prt_time_of_day }; 
    959996 
    960997 
    961998/*