Ticket #1693: 0001-Add-Trolls-Orcs-with-light-vulnerability.patch

File 0001-Add-Trolls-Orcs-with-light-vulnerability.patch, 10.0 KB (added by daniel.santos, 7 years ago)
  • lib/edit/p_race.txt

    From 53436e4acca9fe410802852271f25c59c0640718 Mon Sep 17 00:00:00 2001
    From: Daniel Santos <daniel.santos@pobox.com>
    Date: Mon, 15 Oct 2012 01:38:32 -0500
    Subject: [PATCH v2 1/3] Add Trolls & Orcs with light vulnerability
    
    ---
     lib/edit/p_race.txt            |   20 ++++++++++++++++++++
     src/defines.h                  |   15 +++++++++++++++
     src/dungeon.c                  |   32 ++++++++++++++++++++++++++++++++
     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 ++++++++++++++++++++++++++++++++++++++-
     8 files changed, 129 insertions(+), 5 deletions(-)
    
    diff --git a/lib/edit/p_race.txt b/lib/edit/p_race.txt
    index 400c720..d2329bd 100644
    a b H:38:4:36:3 
    164164W:70:5:60:4 
    165165F:RES_POIS 
    166166C:0|2|3|4 
     167 
     168N:11:Orc 
     169S:3:-2:0:0:2:-6 
     170R:-3:-3:-3:-1:0:7:12:-5:-5:0 
     171X:10:120:8 
     172I:25:9:3 
     173H:60:1:58:1 
     174W:125:4:100:4 
     175F:VULN_LIGHT | RES_DARK 
     176C:0|2|3 
     177 
     178N:12:Troll 
     179S:10:-8:-4:-7:7:-9 
     180R:-10:-16:-16:-6:-1:5:40:-20:-20:0 
     181X:14:140:6 
     182I:21:26:14 
     183H:125:16:107:10 
     184W:425:85:375:60 
     185F:SUST_STR | REGEN | VULN_LIGHT | RES_DARK 
     186C:0|2 
  • 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..b387644 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 mindam = p_ptr->mhp * 5 / 100; 
     584                        int maxdam = p_ptr->mhp * 15 / 100; 
     585                        int dam; 
     586 
     587                        if (!mindam) 
     588                                mindam = 1; 
     589 
     590                        if (!maxdam) 
     591                                maxdam = 1; 
     592 
     593                        /* double max damage if midday */ 
     594                        if (time >= TIME_MIDDAY && time < TIME_AFTERNOON) 
     595                                maxdam *= 2; 
     596 
     597                        dam = rand_range(mindam, maxdam); 
     598 
     599                        /* adjust for resistance */ 
     600                        dam = adjust_dam(p_ptr, GF_LIGHT_WEAK, dam, RANDOMISE, 
     601                                check_for_resist(p_ptr, GF_LIGHT_WEAK, p_ptr->state.flags, TRUE)); 
     602 
     603                        msg("The sun is out!"); 
     604                        take_hit(p_ptr, dam, "the sun"); 
     605                        disturb(p_ptr, 1, 0); 
     606                } 
     607        } 
     608 
     609 
    578610 
    579611        /*** Check the Food, and Regenerate ***/ 
    580612 
  • 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/*