New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace Gnoll aptitude mechanic with locked stats #532

Closed
wants to merge 4 commits into
base: master
from
Jump to file or symbol
Failed to load files and symbols.
+302 −312
Diff settings

Always

Just for now

Next

Replace Gnoll aptitude mechanic with locked stats

This commit removes the Gnoll aptitude system in order to replace it with
a different main feature: locked, low stats.

This version of Gnoll has +3 in every aptitude at all skill levels, unlike
the previous system which reduced the effective aptitude as more skill
levels were gained.  In order to compensate, Gnolls have a base stat line
of 5 Str/5 Int/5 Dex. Additionally, these stats cannot be changed by any
source, temporary or permanent. For example, Gnolls cannot gain stats
from backgrounds, potions of might/brilliance/agility, Cheibriados, or
changing forms. Likewise, they cannot lose stats from stat drain or have
their stats shifted by Jiyva. This is an alternative approach to
encouraging adaptability and flexibility through being a generalist over a
specialist.

Balancing mechanics from previous iterations of Gnoll (like lower MR
growth) have been temporarily reverted to start balance testing from a
clean slate. They may be re-introduced at a later time if necessary or
interesting.
  • Loading branch information...
Floodkiller committed May 6, 2017
commit 343db37dd99d17e85fc31067a2ae81c6fad56192
@@ -1711,17 +1711,19 @@ Vine Stalkers
spells' fuel with each voracious bite.
Gnolls
Gnolls are a race of caniform humanoids hailing from the arid deserts and
grasslands of the east. With a variety of lurid tales told of them, others
avoid the Gnolls. Despite their isolation, Gnolls are unusually drawn to
the Dungeon.
Gnolls are quick to learn, picking up the basics of any skill within a
short period of time. Their attention wanes quickly, though, and they find it
more and more difficult to train a given skill the more practised they become
at it. Thus, Gnolls often prefer to dabble in a wide variety of fresh
and interesting skills. Their powerful noses indicate to them where treasures
lay hidden in the Dungeon.
Gnolls are a race of caniform humanoids originally hailing from the arid
deserts and grasslands of the east. In recent history they have become
unusually attracted to the Dungeon, establishing tribes around and even inside
of it. With a variety of lurid tales told of them, others avoid the Gnolls.
Gnolls excel at learning quickly, allowing them to master any skill in a short
period of time. Unfortunately, the Dungeon has had an especially adverse
effect on their bodies over the generations compared to other species. Their
physical attributes have become severly impaired and are unable to be altered
in any way, even through magic or the power of the gods.
On the bright side, their powerful noses have adapted to the Dungeon's scents,
allowing them to easily locate where treasures lay hidden.
The Undead
========================================
@@ -1524,42 +1524,42 @@ static const species_skill_aptitude species_skill_aptitudes[] =
APT(SP_BARACHI, SK_EVOCATIONS, 1),
// SP_GNOLL
APT(SP_GNOLL, SK_FIGHTING, 0),
APT(SP_GNOLL, SK_SHORT_BLADES, 0),
APT(SP_GNOLL, SK_LONG_BLADES, 0),
APT(SP_GNOLL, SK_AXES, 0),
APT(SP_GNOLL, SK_MACES_FLAILS, 0),
APT(SP_GNOLL, SK_POLEARMS, 0),
APT(SP_GNOLL, SK_STAVES, 0),
APT(SP_GNOLL, SK_SLINGS, 0),
APT(SP_GNOLL, SK_BOWS, 0),
APT(SP_GNOLL, SK_CROSSBOWS, 0),
APT(SP_GNOLL, SK_THROWING, 0),
APT(SP_GNOLL, SK_ARMOUR, 0),
APT(SP_GNOLL, SK_DODGING, 0),
APT(SP_GNOLL, SK_STEALTH, 0),
APT(SP_GNOLL, SK_FIGHTING, 3),
APT(SP_GNOLL, SK_SHORT_BLADES, 3),
APT(SP_GNOLL, SK_LONG_BLADES, 3),
APT(SP_GNOLL, SK_AXES, 3),
APT(SP_GNOLL, SK_MACES_FLAILS, 3),
APT(SP_GNOLL, SK_POLEARMS, 3),
APT(SP_GNOLL, SK_STAVES, 3),
APT(SP_GNOLL, SK_SLINGS, 3),
APT(SP_GNOLL, SK_BOWS, 3),
APT(SP_GNOLL, SK_CROSSBOWS, 3),
APT(SP_GNOLL, SK_THROWING, 3),
APT(SP_GNOLL, SK_ARMOUR, 3),
APT(SP_GNOLL, SK_DODGING, 3),
APT(SP_GNOLL, SK_STEALTH, 3),
#if TAG_MAJOR_VERSION == 34
APT(SP_GNOLL, SK_STABBING, UNUSABLE_SKILL),
#endif
APT(SP_GNOLL, SK_SHIELDS, 0),
APT(SP_GNOLL, SK_SHIELDS, 3),
#if TAG_MAJOR_VERSION == 34
APT(SP_GNOLL, SK_TRAPS, UNUSABLE_SKILL),
#endif
APT(SP_GNOLL, SK_UNARMED_COMBAT, 0),
APT(SP_GNOLL, SK_SPELLCASTING, 0),
APT(SP_GNOLL, SK_CONJURATIONS, 0),
APT(SP_GNOLL, SK_HEXES, 0),
APT(SP_GNOLL, SK_CHARMS, 0),
APT(SP_GNOLL, SK_SUMMONINGS, 0),
APT(SP_GNOLL, SK_NECROMANCY, 0),
APT(SP_GNOLL, SK_TRANSLOCATIONS, 0),
APT(SP_GNOLL, SK_TRANSMUTATIONS, 0),
APT(SP_GNOLL, SK_FIRE_MAGIC, 0),
APT(SP_GNOLL, SK_ICE_MAGIC, 0),
APT(SP_GNOLL, SK_AIR_MAGIC, 0),
APT(SP_GNOLL, SK_EARTH_MAGIC, 0),
APT(SP_GNOLL, SK_POISON_MAGIC, 0),
APT(SP_GNOLL, SK_INVOCATIONS, 0),
APT(SP_GNOLL, SK_EVOCATIONS, 0),
APT(SP_GNOLL, SK_UNARMED_COMBAT, 3),
APT(SP_GNOLL, SK_SPELLCASTING, 3),
APT(SP_GNOLL, SK_CONJURATIONS, 3),
APT(SP_GNOLL, SK_HEXES, 3),
APT(SP_GNOLL, SK_CHARMS, 3),
APT(SP_GNOLL, SK_SUMMONINGS, 3),
APT(SP_GNOLL, SK_NECROMANCY, 3),
APT(SP_GNOLL, SK_TRANSLOCATIONS, 3),
APT(SP_GNOLL, SK_TRANSMUTATIONS, 3),
APT(SP_GNOLL, SK_FIRE_MAGIC, 3),
APT(SP_GNOLL, SK_ICE_MAGIC, 3),
APT(SP_GNOLL, SK_AIR_MAGIC, 3),
APT(SP_GNOLL, SK_EARTH_MAGIC, 3),
APT(SP_GNOLL, SK_POISON_MAGIC, 3),
APT(SP_GNOLL, SK_INVOCATIONS, 3),
APT(SP_GNOLL, SK_EVOCATIONS, 3),
};
COMPILE_CHECK(ARRAYSZ(species_skill_aptitudes) == NUM_SPECIES * NUM_SKILLS);
@@ -55,9 +55,8 @@ They have low health, but their stone bodies are incredibly tough.
%%%%
Gnoll
Gnolls are canine-like humanoids. They are quick to learn the basics of any
skill, but struggle to master any. Their strong noses can sniff out treasure
from afar.
Gnolls are canine-like humanoids. They are quick to learn any skill, but are
unable to alter their poor physical attributes.
%%%%
Halfling
@@ -5134,6 +5134,11 @@ static mutation_type _random_valid_sacrifice(const vector<mutation_type> &muts)
continue;
}
// Gnolls can't get stat-changing mutations
if ((mut == MUT_DOPEY || mut == MUT_WEAK || mut == MUT_CLUMSY)
&& you.species == SP_GNOLL)
continue;
// The Grunt Algorithm
// (choose a random element from a set of unknown size without building
// an explicit list, by giving each one a chance to be chosen equal to
@@ -3669,6 +3669,12 @@ bool is_useless_item(const item_def &item, bool temp)
case RING_STEALTH:
return you.get_mutation_level(MUT_NO_STEALTH);
// Gnolls can't boost stats
case RING_STRENGTH:
case RING_INTELLIGENCE:
case RING_DEXTERITY:
return you.species == SP_GNOLL;
default:
return false;
}
View
@@ -70,23 +70,27 @@ void job_stat_init(job_type job)
{
you.hp_max_adj_perm = 0;
you.base_stats[STAT_STR] += _job_def(job).s;
you.base_stats[STAT_INT] += _job_def(job).i;
you.base_stats[STAT_DEX] += _job_def(job).d;
if (job == JOB_WANDERER)
// Gnolls don't get stats from background
if(!(you.species == SP_GNOLL))
{
for (int i = 0; i < 12; i++)
you.base_stats[STAT_STR] += _job_def(job).s;
you.base_stats[STAT_INT] += _job_def(job).i;
you.base_stats[STAT_DEX] += _job_def(job).d;
if (job == JOB_WANDERER)
{
const stat_type stat = static_cast<stat_type>(random2(NUM_STATS));
// Stats that are already high will be chosen half as often.
if (you.base_stats[stat] > 17 && coinflip())
for (int i = 0; i < 12; i++)
{
i--;
continue;
const stat_type stat = static_cast<stat_type>(random2(NUM_STATS));
// Stats that are already high will be chosen half as often.
if (you.base_stats[stat] > 17 && coinflip())
{
i--;
continue;
}
you.base_stats[stat]++;
}
you.base_stats[stat]++;
}
}
}
@@ -1246,6 +1246,23 @@ bool physiology_mutation_conflict(mutation_type mutat)
if (you.species == SP_GARGOYLE && mutat == MUT_POISON_RESISTANCE)
return true;
// Gnolls can't get any stat-affecting mutations
if (you.species == SP_GNOLL)
{
if (mutat == MUT_STRONG
|| mutat == MUT_CLEVER
|| mutat == MUT_AGILE
|| mutat == MUT_WEAK
|| mutat == MUT_DOPEY
|| mutat == MUT_CLUMSY
|| mutat == MUT_THIN_SKELETAL_STRUCTURE
|| mutat == MUT_ROUGH_BLACK_SCALES
|| mutat == MUT_DETERIORATION)
{
return true;
}
}
// We can't use is_useless_skill() here, since species that can still wear
// body armour can sacrifice armour skill with Ru.
if (species_apt(SK_ARMOUR) == UNUSABLE_SKILL
@@ -797,6 +797,10 @@ static void _print_stats_hp(int x, int y)
static short _get_stat_colour(stat_type stat)
{
// If player is Gnoll, stats don't change; always return HUD_VALUE_COLOUR
if (you.species == SP_GNOLL)
return HUD_VALUE_COLOUR;
if (you.duration[stat_zero_duration(stat)])
return LIGHTRED;
Oops, something went wrong.
ProTip! Use n and p to navigate between commits in a pull request.