From: Pasi Kallinen Date: Fri, 13 May 2016 08:41:04 +0000 (+0300) Subject: Fold role ability switches into single function X-Git-Tag: NetHack-3.6.1_RC01~777 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf8520cbb10b17453329729f82e8d4b08a4848c3;p=nethack Fold role ability switches into single function --- diff --git a/src/attrib.c b/src/attrib.c index c4394151f..1eb709d22 100644 --- a/src/attrib.c +++ b/src/attrib.c @@ -101,6 +101,7 @@ static const struct innate { STATIC_DCL void NDECL(exerper); STATIC_DCL void FDECL(postadjabil, (long *)); +STATIC_DCL const struct innate *FDECL(role_abil, (int)); STATIC_DCL const struct innate *FDECL(check_innate_abil, (long *, long)); STATIC_DCL int FDECL(innately, (long *)); @@ -644,6 +645,34 @@ long *ability; see_monsters(); } +STATIC_OVL const struct innate * +role_abil(r) +int r; +{ + const struct { + short role; + const struct innate *abil; + } roleabils[] = { + { PM_ARCHEOLOGIST, arc_abil }, + { PM_BARBARIAN, bar_abil }, + { PM_CAVEMAN, cav_abil }, + { PM_HEALER, hea_abil }, + { PM_KNIGHT, kni_abil }, + { PM_MONK, mon_abil }, + { PM_PRIEST, pri_abil }, + { PM_RANGER, ran_abil }, + { PM_ROGUE, rog_abil }, + { PM_SAMURAI, sam_abil }, + { PM_TOURIST, tou_abil }, + { PM_VALKYRIE, val_abil }, + { PM_WIZARD, wiz_abil }, + { 0, 0 } + }; + int i; + for (i = 0; roleabils[i].abil && roleabils[i].role != r; i++); + return roleabils[i].abil; +} + STATIC_OVL const struct innate * check_innate_abil(ability, frommask) long *ability; @@ -652,49 +681,7 @@ long frommask; const struct innate *abil = 0; if (frommask == FROMEXPER) - switch (Role_switch) { - case PM_ARCHEOLOGIST: - abil = arc_abil; - break; - case PM_BARBARIAN: - abil = bar_abil; - break; - case PM_CAVEMAN: - abil = cav_abil; - break; - case PM_HEALER: - abil = hea_abil; - break; - case PM_KNIGHT: - abil = kni_abil; - break; - case PM_MONK: - abil = mon_abil; - break; - case PM_PRIEST: - abil = pri_abil; - break; - case PM_RANGER: - abil = ran_abil; - break; - case PM_ROGUE: - abil = rog_abil; - break; - case PM_SAMURAI: - abil = sam_abil; - break; - case PM_TOURIST: - abil = tou_abil; - break; - case PM_VALKYRIE: - abil = val_abil; - break; - case PM_WIZARD: - abil = wiz_abil; - break; - default: - break; - } + abil = role_abil(Role_switch); else if (frommask == FROMRACE) switch (Race_switch) { case PM_DWARF: @@ -874,50 +861,7 @@ int oldlevel, newlevel; register const struct innate *abil, *rabil; long prevabil, mask = FROMEXPER; - switch (Role_switch) { - case PM_ARCHEOLOGIST: - abil = arc_abil; - break; - case PM_BARBARIAN: - abil = bar_abil; - break; - case PM_CAVEMAN: - abil = cav_abil; - break; - case PM_HEALER: - abil = hea_abil; - break; - case PM_KNIGHT: - abil = kni_abil; - break; - case PM_MONK: - abil = mon_abil; - break; - case PM_PRIEST: - abil = pri_abil; - break; - case PM_RANGER: - abil = ran_abil; - break; - case PM_ROGUE: - abil = rog_abil; - break; - case PM_SAMURAI: - abil = sam_abil; - break; - case PM_TOURIST: - abil = tou_abil; - break; - case PM_VALKYRIE: - abil = val_abil; - break; - case PM_WIZARD: - abil = wiz_abil; - break; - default: - abil = 0; - break; - } + abil = role_abil(Role_switch); switch (Race_switch) { case PM_ELF: