Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
New race: Barachians
Barachians' marquee ability is Hop, which allows them to blink near
a targeted tile - a weaker version of controlled blink, essentially.
In exchange, they're somewhat slow-moving (MUT_SLOW 1, half a naga's),
which of course makes their hop even more useful, and they have poor
attributes - 6/6/6 + sid/5, the same total as ghouls. They're roughly
average in their aptitudes, with +1s and -1s used to weakly bias
them toward certain skills without making any dominant.

Hop is initially range 4, with a fuzz radius of 2 tiles; the player
is equally likely to land anywhere within the radius. The ability is
limited by a -Hop status; inspired by Barbs, -Hop only wears off while
you're not moving. (That is, while you're resting, attacking, or casting
spells.) The goal is to avoid making it too easy to run away from
enemies indefinitely by repeatedly hopping, and to avoid annoying
turncount-optimal behaviour during travel.

At XL 13, the player's Hop range increases to 5; this should help
it stay somewhat more relevant as the player accumulates more (and
more reliable) escape options.

A tongue attack was considered, but the design focus of the race
is the Hop, and having two frequently-relevant active abilities on
a species didn't seem like a good idea.
  • Loading branch information
PleasingFungus committed Jan 5, 2017
1 parent 81164ae commit 1a30b92
Show file tree
Hide file tree
Showing 18 changed files with 279 additions and 67 deletions.
10 changes: 10 additions & 0 deletions crawl-ref/docs/crawl_manual.rst
Expand Up @@ -1624,6 +1624,16 @@ Felids
Felids gain extra lives as they increase in levels. Upon death, they will be
resurrected in a safe place, losing an experience level in the process.

Barachians
Barachians are an amphibious humanoid race, said to be distantly related to
the Elves. Spawned in great numbers beneath the southern ice, their
Mother-Father sends them forth to destroy and pillage the civilized lands.

Barachians' most remarkable trait is their grossly overmuscled legs, which
allow them to leap remarkable distances. When not leaping, they are somewhat
slow-moving and their attributes are poor, but they do have considerable
flexibility in skill choice.

Octopodes
These land-capable relatives of common octopuses can move about as fast as
humans and yet retain the ability to swim underwater, although their dual
Expand Down
13 changes: 13 additions & 0 deletions crawl-ref/source/ability.cc
Expand Up @@ -315,6 +315,8 @@ static const ability_def Ability_List[] =
{ ABIL_DIG, "Dig", 0, 0, 0, 0, {}, abflag::INSTANT },
{ ABIL_SHAFT_SELF, "Shaft Self", 0, 0, 250, 0, {}, abflag::DELAY },

{ ABIL_HOP, "Hop", 0, 0, 0, 0, {}, abflag::NONE },

// EVOKE abilities use Evocations and come from items.
// Teleportation and Blink can also come from mutations
// so we have to distinguish them (see above). The off items
Expand Down Expand Up @@ -1796,6 +1798,14 @@ static spret_type _do_ability(const ability_def& abil, bool fail)
return SPRET_ABORT;
break;

case ABIL_HOP:
if (you.duration[DUR_NO_HOP])
{
mpr("Your legs are too worn out to hop.");
return SPRET_ABORT;
}
return frog_hop(fail);

case ABIL_DELAYED_FIREBALL:
{
fail_check();
Expand Down Expand Up @@ -3312,6 +3322,9 @@ vector<talent> your_talents(bool check_confused, bool include_unusable)
_add_talent(talents, ABIL_SHAFT_SELF, check_confused);
}

if (player_mutation_level(MUT_HOP))
_add_talent(talents, ABIL_HOP, check_confused);

// Spit Poison, possibly upgraded to Breathe Poison.
if (player_mutation_level(MUT_SPIT_POISON) == 2)
_add_talent(talents, ABIL_BREATHE_POISON, check_confused);
Expand Down
39 changes: 39 additions & 0 deletions crawl-ref/source/aptitudes.h
Expand Up @@ -1481,6 +1481,45 @@ static const species_skill_aptitude species_skill_aptitudes[] =
APT(SP_VINE_STALKER, SK_POISON_MAGIC, 0),
APT(SP_VINE_STALKER, SK_INVOCATIONS, 0),
APT(SP_VINE_STALKER, SK_EVOCATIONS, -1),

// SP_BARACHIAN
APT(SP_BARACHIAN, SK_FIGHTING, 1),
APT(SP_BARACHIAN, SK_SHORT_BLADES, 0),
APT(SP_BARACHIAN, SK_LONG_BLADES, 1),
APT(SP_BARACHIAN, SK_AXES, 0),
APT(SP_BARACHIAN, SK_MACES_FLAILS, 0),
APT(SP_BARACHIAN, SK_POLEARMS, -1),
APT(SP_BARACHIAN, SK_STAVES, 0),
APT(SP_BARACHIAN, SK_SLINGS, -1),
APT(SP_BARACHIAN, SK_BOWS, -1),
APT(SP_BARACHIAN, SK_CROSSBOWS, -1),
APT(SP_BARACHIAN, SK_THROWING, -1),
APT(SP_BARACHIAN, SK_ARMOUR, 1),
APT(SP_BARACHIAN, SK_DODGING, 0),
APT(SP_BARACHIAN, SK_STEALTH, 1),
#if TAG_MAJOR_VERSION == 34
APT(SP_BARACHIAN, SK_STABBING, UNUSABLE_SKILL),
#endif
APT(SP_BARACHIAN, SK_SHIELDS, 0),
#if TAG_MAJOR_VERSION == 34
APT(SP_BARACHIAN, SK_TRAPS, UNUSABLE_SKILL),
#endif
APT(SP_BARACHIAN, SK_UNARMED_COMBAT, 0),
APT(SP_BARACHIAN, SK_SPELLCASTING, -1),
APT(SP_BARACHIAN, SK_CONJURATIONS, 0),
APT(SP_BARACHIAN, SK_HEXES, 0),
APT(SP_BARACHIAN, SK_CHARMS, 0),
APT(SP_BARACHIAN, SK_SUMMONINGS, 1),
APT(SP_BARACHIAN, SK_NECROMANCY, -1),
APT(SP_BARACHIAN, SK_TRANSLOCATIONS, 0),
APT(SP_BARACHIAN, SK_TRANSMUTATIONS, 0),
APT(SP_BARACHIAN, SK_FIRE_MAGIC, 0),
APT(SP_BARACHIAN, SK_ICE_MAGIC, 1),
APT(SP_BARACHIAN, SK_AIR_MAGIC, 0),
APT(SP_BARACHIAN, SK_EARTH_MAGIC, -1),
APT(SP_BARACHIAN, SK_POISON_MAGIC, 0),
APT(SP_BARACHIAN, SK_INVOCATIONS, 1),
APT(SP_BARACHIAN, SK_EVOCATIONS, 0),
};
COMPILE_CHECK(ARRAYSZ(species_skill_aptitudes) == NUM_SPECIES * NUM_SKILLS);

Expand Down
4 changes: 3 additions & 1 deletion crawl-ref/source/dat/des/altar/overflow.des
Expand Up @@ -108,7 +108,9 @@ function callback.xom_greatest_gift(data, triggerable, triggerer, marker, ev)
end

function species_mock(e)
if you.race() == "Centaur" then
if you.race() == "Barachian" then
e.kmons("1 = spiny toad")
elseif you.race() == "Centaur" then
e.kmons("1 = dart slug")
elseif you.race() == "Demigod" then
e.kmons("1 = titan simulacrum")
Expand Down
6 changes: 6 additions & 0 deletions crawl-ref/source/dat/descript/ability.txt
Expand Up @@ -869,3 +869,9 @@ Ancestor Identity ability

Recalls who your ancestor preferred to be known as, correcting their name and
gender. This does not take any time.
%%%%
Hop ability

Hops toward a chosen destination, landing somewhere nearby. After using this
ability, you will be unable to hop again until you have spent some time not
moving. (Other actions, such as casting spells and attacking, are fine.)
5 changes: 5 additions & 0 deletions crawl-ref/source/dat/descript/species.txt
@@ -1,4 +1,9 @@
%%%%
Barachian

Barachians are amphibious humanoids with an exceptionally vicious disposition.
They can hop long distances, though their movement is otherwise somewhat slow.
%%%%
Centaur

Swift, strong and bulky, Centaurs are particularly skilled with ranged
Expand Down
6 changes: 6 additions & 0 deletions crawl-ref/source/dat/descript/status.txt
Expand Up @@ -659,3 +659,9 @@ Orb status
You are near (or perhaps holding) the Orb of Zot, whose energies disrupt
translocation magic. Teleportation will take longer, all blinks will become
uncontrolled, and Passage of Golubria will completely fail to work.
%%%%
-Hop status

Your legs are tired, and you are unable to hop. This status will only recover
after you spend several turns not moving. (Other actions, such as attacking or
casting spells, are fine.)
4 changes: 4 additions & 0 deletions crawl-ref/source/duration-data.h
Expand Up @@ -537,6 +537,10 @@ static const duration_def duration_data[] =
{ DUR_SPWPN_PROTECTION, 0, "", "protection aura", "",
"Your weapon is exuding a protective aura.", D_NO_FLAGS,
{{ "", _redraw_armour }}},
{ DUR_NO_HOP, YELLOW, "-Hop",
"can't hop", "",
"", D_NO_FLAGS,
{{ "You are ready to hop once more." }}},

// The following are visible in wizmode only, or are handled
// specially in the status lights and/or the % or @ screens.
Expand Down
7 changes: 6 additions & 1 deletion crawl-ref/source/enum.h
Expand Up @@ -247,7 +247,9 @@ enum ability_type
// Formicids
ABIL_DIG,
ABIL_SHAFT_SELF,
ABIL_MAX_INTRINSIC = ABIL_SHAFT_SELF,
// Barachians
ABIL_HOP,
ABIL_MAX_INTRINSIC = ABIL_HOP,

// Evoking items.
ABIL_EVOKE_BERSERK = 40,
Expand Down Expand Up @@ -1913,6 +1915,7 @@ enum duration_type
DUR_NO_CAST,
DUR_CHANNEL_ENERGY,
DUR_SPWPN_PROTECTION,
DUR_NO_HOP,
NUM_DURATIONS
};

Expand Down Expand Up @@ -3853,6 +3856,7 @@ enum mutation_type
MUT_STURDY_FRAME,
MUT_SANGUINE_ARMOUR,
#endif
MUT_HOP,
NUM_MUTATIONS,

RANDOM_MUTATION,
Expand Down Expand Up @@ -4259,6 +4263,7 @@ enum species_type
SP_GARGOYLE,
SP_FORMICID,
SP_VINE_STALKER,
SP_BARACHIAN,
NUM_SPECIES,

SP_UNKNOWN = 100,
Expand Down
3 changes: 3 additions & 0 deletions crawl-ref/source/main.cc
Expand Up @@ -3477,6 +3477,9 @@ static void _move_player(coord_def move)
div_round_up(100, you.running.travel_speed));
}

if (you.duration[DUR_NO_HOP])
you.duration[DUR_NO_HOP] += you.time_taken;

move.reset();
you.turn_is_over = true;
request_autopickup();
Expand Down
13 changes: 13 additions & 0 deletions crawl-ref/source/mutation-data.h
Expand Up @@ -890,6 +890,19 @@ static const mutation_def mut_data[] =
{"", "", ""},
},

{ MUT_HOP, 0, 2, mutflag::GOOD, true,
"strong legs",

{"You can hop short distances.",
"You can hop longer distances.",
""},

{"", "Your legs feel stronger.", ""},

{"", "", ""},
},


{ MUT_SHAGGY_FUR, 2, 3, mutflag::GOOD, true,
"shaggy fur",

Expand Down
1 change: 1 addition & 0 deletions crawl-ref/source/newgame.cc
Expand Up @@ -172,6 +172,7 @@ static const species_type species_order[] =
SP_MERFOLK, SP_MINOTAUR,
SP_TENGU, SP_BASE_DRACONIAN,
SP_GARGOYLE, SP_FORMICID,
SP_BARACHIAN,
// mostly human shape but made of a strange substance
SP_VINE_STALKER,
// celestial species
Expand Down
1 change: 1 addition & 0 deletions crawl-ref/source/rltiles/dc-abilities.txt
Expand Up @@ -21,6 +21,7 @@ flight ABILITY_EVOKE_FLIGHT
flight_end ABILITY_FLIGHT_END
flight ABILITY_FLIGHT
heal_wounds ABILITY_HEAL_WOUNDS
hop ABILITY_HOP
hurl_damnation ABILITY_HURL_DAMNATION
shaft_self ABILITY_SHAFT_SELF
spit_poison ABILITY_SPIT_POISON
Expand Down
17 changes: 17 additions & 0 deletions crawl-ref/source/species-data.h
Expand Up @@ -349,6 +349,23 @@ static const map<species_type, species_def> species_data =
SK_CROSSBOWS, SK_SLINGS },
} },

{ SP_BARACHIAN, {
"Ba",
"Barachian", nullptr, "Frog",
SPF_NO_HAIR,
0, 0, 0, 3,
MONS_BULLFROG,
HT_WATER, US_ALIVE, SIZE_MEDIUM,
6, 6, 6, // 18
{ STAT_STR, STAT_INT, STAT_DEX }, 5,
{ { MUT_SLOW, 1, 1 }, { MUT_HOP, 1, 1}, {MUT_HOP, 1, 13}, },
{ "You can swim through water.", },
{ "swims", },
{ JOB_FIGHTER, JOB_BERSERKER, JOB_SKALD, JOB_SUMMONER, JOB_ICE_ELEMENTALIST },
{ SK_MACES_FLAILS, SK_AXES, SK_POLEARMS, SK_LONG_BLADES, SK_STAVES,
SK_BOWS, SK_CROSSBOWS, SK_SLINGS },
} },

{ SP_GHOUL, {
"Gh",
"Ghoul", "Ghoulish", nullptr,
Expand Down

0 comments on commit 1a30b92

Please sign in to comment.