From a27236516b0aa8761f70f009c78f4272dc0b735d Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Tue, 6 Mar 2012 21:49:18 +0100 Subject: Refactor: Remove duplicate code for extracting 'xtra' flags --- src/object1.c | 334 ++++++++++++++++++++-------------------------------------- 1 file changed, 115 insertions(+), 219 deletions(-) (limited to 'src') diff --git a/src/object1.c b/src/object1.c index ee22d7e7..084f225b 100644 --- a/src/object1.c +++ b/src/object1.c @@ -819,11 +819,120 @@ void reset_visuals(void) } +/* + * Extract "xtra" flags from object. + */ +void object_flags_xtra(object_type *o_ptr, u32b *f2, u32b *f3, u32b *esp) +{ + switch (o_ptr->xtra1) + { + case EGO_XTRA_SUSTAIN: + { + /* Choose a sustain */ + switch (o_ptr->xtra2 % 6) + { + case 0: + (*f2) |= (TR2_SUST_STR); + break; + case 1: + (*f2) |= (TR2_SUST_INT); + break; + case 2: + (*f2) |= (TR2_SUST_WIS); + break; + case 3: + (*f2) |= (TR2_SUST_DEX); + break; + case 4: + (*f2) |= (TR2_SUST_CON); + break; + case 5: + (*f2) |= (TR2_SUST_CHR); + break; + } + + break; + } + + case EGO_XTRA_POWER: + { + /* Choose a power */ + switch (o_ptr->xtra2 % 11) + { + case 0: + (*f2) |= (TR2_RES_BLIND); + break; + case 1: + (*f2) |= (TR2_RES_CONF); + break; + case 2: + (*f2) |= (TR2_RES_SOUND); + break; + case 3: + (*f2) |= (TR2_RES_SHARDS); + break; + case 4: + (*f2) |= (TR2_RES_NETHER); + break; + case 5: + (*f2) |= (TR2_RES_NEXUS); + break; + case 6: + (*f2) |= (TR2_RES_CHAOS); + break; + case 7: + (*f2) |= (TR2_RES_DISEN); + break; + case 8: + (*f2) |= (TR2_RES_POIS); + break; + case 9: + (*f2) |= (TR2_RES_DARK); + break; + case 10: + (*f2) |= (TR2_RES_LITE); + break; + } + + break; + } + + case EGO_XTRA_ABILITY: + { + /* Choose an ability */ + switch (o_ptr->xtra2 % 8) + { + case 0: + (*f3) |= (TR3_FEATHER); + break; + case 1: + (*f3) |= (TR3_LITE1); + break; + case 2: + (*f3) |= (TR3_SEE_INVIS); + break; + case 3: + (*esp) |= (ESP_ALL); + break; + case 4: + (*f3) |= (TR3_SLOW_DIGEST); + break; + case 5: + (*f3) |= (TR3_REGEN); + break; + case 6: + (*f2) |= (TR2_FREE_ACT); + break; + case 7: + (*f2) |= (TR2_HOLD_LIFE); + break; + } + + break; + } - - - - + } +} /* @@ -872,113 +981,7 @@ void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3, u32b *f4, u3 /* Extra powers */ if (!(o_ptr->art_name)) { - switch (o_ptr->xtra1) - { - case EGO_XTRA_SUSTAIN: - { - /* Choose a sustain */ - switch (o_ptr->xtra2 % 6) - { - case 0: - (*f2) |= (TR2_SUST_STR); - break; - case 1: - (*f2) |= (TR2_SUST_INT); - break; - case 2: - (*f2) |= (TR2_SUST_WIS); - break; - case 3: - (*f2) |= (TR2_SUST_DEX); - break; - case 4: - (*f2) |= (TR2_SUST_CON); - break; - case 5: - (*f2) |= (TR2_SUST_CHR); - break; - } - - break; - } - - case EGO_XTRA_POWER: - { - /* Choose a power */ - switch (o_ptr->xtra2 % 11) - { - case 0: - (*f2) |= (TR2_RES_BLIND); - break; - case 1: - (*f2) |= (TR2_RES_CONF); - break; - case 2: - (*f2) |= (TR2_RES_SOUND); - break; - case 3: - (*f2) |= (TR2_RES_SHARDS); - break; - case 4: - (*f2) |= (TR2_RES_NETHER); - break; - case 5: - (*f2) |= (TR2_RES_NEXUS); - break; - case 6: - (*f2) |= (TR2_RES_CHAOS); - break; - case 7: - (*f2) |= (TR2_RES_DISEN); - break; - case 8: - (*f2) |= (TR2_RES_POIS); - break; - case 9: - (*f2) |= (TR2_RES_DARK); - break; - case 10: - (*f2) |= (TR2_RES_LITE); - break; - } - - break; - } - - case EGO_XTRA_ABILITY: - { - /* Choose an ability */ - switch (o_ptr->xtra2 % 8) - { - case 0: - (*f3) |= (TR3_FEATHER); - break; - case 1: - (*f3) |= (TR3_LITE1); - break; - case 2: - (*f3) |= (TR3_SEE_INVIS); - break; - case 3: - (*esp) |= (ESP_ALL); - break; - case 4: - (*f3) |= (TR3_SLOW_DIGEST); - break; - case 5: - (*f3) |= (TR3_REGEN); - break; - case 6: - (*f2) |= (TR2_FREE_ACT); - break; - case 7: - (*f2) |= (TR2_HOLD_LIFE); - break; - } - - break; - } - } + object_flags_xtra(o_ptr, f2, f3, esp); } } @@ -1117,114 +1120,7 @@ void object_flags_known(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3, u32b * if (!(o_ptr->art_name)) { - /* Extra powers */ - switch (o_ptr->xtra1) - { - case EGO_XTRA_SUSTAIN: - { - /* Choose a sustain */ - switch (o_ptr->xtra2 % 6) - { - case 0: - (*f2) |= (TR2_SUST_STR); - break; - case 1: - (*f2) |= (TR2_SUST_INT); - break; - case 2: - (*f2) |= (TR2_SUST_WIS); - break; - case 3: - (*f2) |= (TR2_SUST_DEX); - break; - case 4: - (*f2) |= (TR2_SUST_CON); - break; - case 5: - (*f2) |= (TR2_SUST_CHR); - break; - } - - break; - } - - case EGO_XTRA_POWER: - { - /* Choose a power */ - switch (o_ptr->xtra2 % 11) - { - case 0: - (*f2) |= (TR2_RES_BLIND); - break; - case 1: - (*f2) |= (TR2_RES_CONF); - break; - case 2: - (*f2) |= (TR2_RES_SOUND); - break; - case 3: - (*f2) |= (TR2_RES_SHARDS); - break; - case 4: - (*f2) |= (TR2_RES_NETHER); - break; - case 5: - (*f2) |= (TR2_RES_NEXUS); - break; - case 6: - (*f2) |= (TR2_RES_CHAOS); - break; - case 7: - (*f2) |= (TR2_RES_DISEN); - break; - case 8: - (*f2) |= (TR2_RES_POIS); - break; - case 9: - (*f2) |= (TR2_RES_DARK); - break; - case 10: - (*f2) |= (TR2_RES_LITE); - break; - } - - break; - } - - case EGO_XTRA_ABILITY: - { - /* Choose an ability */ - switch (o_ptr->xtra2 % 8) - { - case 0: - (*f3) |= (TR3_FEATHER); - break; - case 1: - (*f3) |= (TR3_LITE1); - break; - case 2: - (*f3) |= (TR3_SEE_INVIS); - break; - case 3: - (*esp) |= (ESP_ALL); - break; - case 4: - (*f3) |= (TR3_SLOW_DIGEST); - break; - case 5: - (*f3) |= (TR3_REGEN); - break; - case 6: - (*f2) |= (TR2_FREE_ACT); - break; - case 7: - (*f2) |= (TR2_HOLD_LIFE); - break; - } - - break; - } - } + object_flags_xtra(o_ptr, f2, f3, esp); } /* Hack - Res Chaos -> Res Confusion */ -- cgit v1.2.3