#include "viewchar.h"
#include "view.h"
+static bool _player_sacrificed_arcana();
+
// Load the sacrifice_def definition and the sac_data array.
#include "sacrifice-data.h"
/**
* Has the player sacrificed any arcana?
*/
-bool _player_sacrificed_arcana()
+static bool _player_sacrificed_arcana()
{
for (const vector<mutation_type> arcane_sacrifice_list :
_arcane_sacrifice_lists)
return false;
}
- // XXX: move this into sacrifice-data.h itself
- switch (sacrifice.sacrifice)
- {
- case ABIL_RU_SACRIFICE_DRINK:
- return you.species != SP_MUMMY;
- case ABIL_RU_SACRIFICE_DURABILITY:
- return you_can_wear(EQ_BODY_ARMOUR);
- case ABIL_RU_SACRIFICE_ARCANA:
- return !_player_sacrificed_arcana();
- default:
- return true;
- }
+ if (sacrifice.valid != nullptr && !sacrifice.valid())
+ return false;
+
+ return true;
}
/**
// multiple mutations. It is a key into
// you.props, yielding a list of mutations
// granted by the sacrifice.
+ bool (*valid)(); // Whether the sacrifice is currently an
+ // valid choice for Ru to offer. Only
+ // checks factors specific to this
+ // sacrifice, not general checks.
};
static const sacrifice_def sac_data[] =
0,
SK_NONE,
PURITY_SAC_KEY,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_WORDS, MUT_NO_READ,
28,
SK_NONE,
nullptr,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_DRINK, MUT_NO_DRINK,
28,
SK_NONE,
nullptr,
+ []() { return you.species != SP_MUMMY; },
},
{ ABIL_RU_SACRIFICE_ESSENCE, MUT_NON_MUTATION,
0,
SK_NONE,
ESSENCE_SAC_KEY,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_HEALTH, MUT_NON_MUTATION,
20,
SK_NONE,
HEALTH_SAC_KEY,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_STEALTH, MUT_NO_STEALTH,
15,
SK_STEALTH,
nullptr,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_ARTIFICE, MUT_NO_ARTIFICE,
70,
SK_EVOCATIONS,
nullptr,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_LOVE, MUT_NO_LOVE,
22,
SK_NONE,
nullptr,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_COURAGE, MUT_COWARDICE,
25,
SK_NONE,
nullptr,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_ARCANA, MUT_NON_MUTATION,
25,
SK_NONE,
ARCANA_SAC_KEY,
+ []() { return !_player_sacrificed_arcana(); },
},
{ ABIL_RU_SACRIFICE_NIMBLENESS, MUT_NO_DODGING,
28,
SK_DODGING,
nullptr,
+ nullptr,
},
{ ABIL_RU_SACRIFICE_DURABILITY, MUT_NO_ARMOUR,
28,
SK_ARMOUR,
nullptr,
+ []() { return you_can_wear(EQ_BODY_ARMOUR); },
},
{ ABIL_RU_SACRIFICE_HAND, MUT_MISSING_HAND,
70,
SK_SHIELDS,
nullptr,
+ nullptr,
},
};