Skip to content

Commit

Permalink
Maybe fixed a bug where pets sometimes attacked their masters.
Browse files Browse the repository at this point in the history
New characters who've unlocked vampire or lich can now start as a vampire or lich without issue now.
Added the ghost wolf spell.
Added the new fast healing apply type
Deity info is being updated.  For the deities that have been updated, there is a new HELP format. Thank you to Sune for this!
Added these new spells: corrosive touch, planar healing, cushioning bands.
  • Loading branch information
GickerLDS committed Dec 1, 2022
1 parent 208d764 commit 4f0d4e2
Show file tree
Hide file tree
Showing 22 changed files with 271 additions and 52 deletions.
2 changes: 2 additions & 0 deletions act.h
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,8 @@ ACMDCHECK(can_pixiedust);
ACMDCHECK(can_pixieinvis);
ACMD_DECL(do_dragonfear);
ACMDCHECK(can_dragonfear);
ACMD_DECL(do_fear_aura);
ACMDCHECK(can_fear_aura);
ACMDCHECK(can_efreetimagic);
ACMD_DECL(do_efreetimagic);
ACMDCHECK(can_dragonmagic);
Expand Down
71 changes: 71 additions & 0 deletions act.offensive.c
Original file line number Diff line number Diff line change
Expand Up @@ -3693,6 +3693,77 @@ ACMD(do_dragonfear)
USE_SWIFT_ACTION(ch);
}


ACMDCHECK(can_fear_aura)
{
ACMDCHECK_PERMFAIL_IF(!AFF_FLAGGED(ch, AFF_FEAR_AURA), "You have no idea how.\r\n");
return CAN_CMD;
}

/* the engine for dragon fear mechanic */
int perform_fear_aura(struct char_data *ch)
{

if (!ch)
return 0;

struct affected_type af;
bool got_em = FALSE;
struct char_data *vict = NULL, *next_vict = NULL;

act("You raise your head and let out a bone chilling roar.", FALSE, ch, 0, 0, TO_CHAR);
act("$n raises $s head and lets out a bone chilling roar", FALSE, ch, 0, 0, TO_ROOM);

for (vict = world[IN_ROOM(ch)].people; vict; vict = next_vict)
{
next_vict = vict->next_in_room;

if (aoeOK(ch, vict, SPELL_FEAR))
{
if (is_immune_fear(ch, vict, TRUE))
continue;
if (is_immune_mind_affecting(ch, vict, TRUE))
continue;
if (mag_resistance(ch, vict, 0))
continue;
if (mag_savingthrow(ch, vict, SAVING_WILL, affected_by_aura_of_cowardice(vict) ? -4 : 0, CAST_INNATE, CLASS_LEVEL(ch, CLASS_DRUID) + GET_SHIFTER_ABILITY_CAST_LEVEL(ch), ENCHANTMENT))
continue;

/* success */
act("You have been shaken by $n's might.", FALSE, ch, 0, vict, TO_VICT);
act("$N has been shaken by $n's might.", FALSE, ch, 0, vict, TO_ROOM);
new_affect(&af);
af.spell = SPELL_FEAR;
af.duration = dice(1, 4);
SET_BIT_AR(af.bitvector, AFF_SHAKEN);
affect_join(vict, &af, FALSE, FALSE, FALSE, FALSE);

got_em = TRUE;
}
}

return got_em;
}

/* this is another version of dragon fear (frightful above is another version) */
ACMD(do_fear_aura)
{
PREREQ_CAN_FIGHT();
PREREQ_CHECK(can_fear_aura);
PREREQ_NOT_PEACEFUL_ROOM();

if (!is_action_available(ch, atSWIFT, FALSE))
{
send_to_char(ch, "You have already used your swift action this round.\r\n");
return;
}

/* engine */
perform_fear_aura(ch);

USE_SWIFT_ACTION(ch);
}

ACMDCHECK(can_breathe)
{
ACMDCHECK_PERMFAIL_IF(!IS_DRAGON(ch), "You have no idea how.\r\n");
Expand Down
30 changes: 23 additions & 7 deletions act.other.c
Original file line number Diff line number Diff line change
Expand Up @@ -8350,13 +8350,29 @@ ACMDU(do_devote)
send_to_char(ch, "There is no deity by that name.\r\n");
return;
}
snprintf(dname, sizeof(dname), "%s", deity_list[i].name);
send_to_char(ch, "\tA%s\r\n\tn", CAP(dname));
send_to_char(ch, "\r\n");
send_to_char(ch, "\tAPantheon:\tn %s\r\n", pantheons[deity_list[i].pantheon]);
send_to_char(ch, "\tAAlignment:\tn %s\r\n", GET_ALIGN_STRING(deity_list[i].ethos, deity_list[i].alignment));
send_to_char(ch, "\tAPortfolio:\tn %s\r\n", deity_list[i].portfolio);
send_to_char(ch, "\tADescription:\tn\r\n%s\r\n", deity_list[i].description);
if (deity_list[i].new_deity_system)
{
snprintf(dname, sizeof(dname), "%s", deity_list[i].name);
send_to_char(ch, "\tADeity: \tn%s\r\n\tn", CAP(dname));
send_to_char(ch, "\r\n");
send_to_char(ch, "\tAPantheon:\tn %s\r\n", pantheons[deity_list[i].pantheon]);
send_to_char(ch, "\tAAlias:\tn %s\r\n", deity_list[i].alias);
send_to_char(ch, "\tASymbol:\tn %s\r\n", deity_list[i].symbol);
send_to_char(ch, "\r\n");
send_to_char(ch, "\tAAlignment:\tn %-20s \tAWorshipper Alignments:\tn %s\r\n", GET_ALIGN_STRING(deity_list[i].ethos, deity_list[i].alignment), deity_list[i].worshipper_alignments);
send_to_char(ch, "\tAFollowers:\tn %s\r\n", deity_list[i].follower_names);
send_to_char(ch, "\tADescription:\tn\r\n%s\r\n", deity_list[i].description);
}
else
{
snprintf(dname, sizeof(dname), "%s", deity_list[i].name);
send_to_char(ch, "\tA%s\r\n\tn", CAP(dname));
send_to_char(ch, "\r\n");
send_to_char(ch, "\tAPantheon:\tn %s\r\n", pantheons[deity_list[i].pantheon]);
send_to_char(ch, "\tAAlignment:\tn %s\r\n", GET_ALIGN_STRING(deity_list[i].ethos, deity_list[i].alignment));
send_to_char(ch, "\tAPortfolio:\tn %s\r\n", deity_list[i].portfolio);
send_to_char(ch, "\tADescription:\tn\r\n%s\r\n", deity_list[i].description);
}
return;
}
else if (is_abbrev(arg1, "choose"))
Expand Down
19 changes: 14 additions & 5 deletions class.c
Original file line number Diff line number Diff line change
Expand Up @@ -3700,6 +3700,8 @@ void load_class_list(void)
spell_assignment(CLASS_WIZARD, SPELL_STUNNING_BARRIER, 1);
spell_assignment(CLASS_WIZARD, SPELL_RESISTANCE, 1);
spell_assignment(CLASS_WIZARD, SPELL_ANT_HAUL, 1);
spell_assignment(CLASS_WIZARD, SPELL_CORROSIVE_TOUCH, 1);
spell_assignment(CLASS_WIZARD, SPELL_PLANAR_HEALING, 1);
/* class num spell level acquired */
/* 2nd circle */
spell_assignment(CLASS_WIZARD, SPELL_SHOCKING_GRASP, 3);
Expand Down Expand Up @@ -3730,6 +3732,7 @@ void load_class_list(void)
spell_assignment(CLASS_WIZARD, SPELL_TACTICAL_ACUMEN, 3);
spell_assignment(CLASS_WIZARD, SPELL_BESTOW_WEAPON_PROFICIENCY, 3);
spell_assignment(CLASS_WIZARD, SPELL_MASS_ANT_HAUL, 3);
spell_assignment(CLASS_WIZARD, SPELL_CUSHIONING_BANDS, 3);
/* class num spell level acquired */
/* 3rd circle */
spell_assignment(CLASS_WIZARD, SPELL_LIGHTNING_BOLT, 5);
Expand Down Expand Up @@ -3788,6 +3791,7 @@ void load_class_list(void)
spell_assignment(CLASS_WIZARD, SPELL_FEAR, 7);
spell_assignment(CLASS_WIZARD, SPELL_SHADOW_JUMP, 7);
spell_assignment(CLASS_WIZARD, SPELL_COMMUNAL_PROTECTION_FROM_ENERGY, 7);
spell_assignment(CLASS_WIZARD, SPELL_GHOST_WOLF, 7);
/* class num spell level acquired */
/* 5th circle */
spell_assignment(CLASS_WIZARD, SPELL_INTERPOSING_HAND, 9);
Expand Down Expand Up @@ -3988,6 +3992,7 @@ void load_class_list(void)
spell_assignment(CLASS_CLERIC, SPELL_HEDGING_WEAPONS, 1);
spell_assignment(CLASS_CLERIC, SPELL_EFFORTLESS_ARMOR, 1);
spell_assignment(CLASS_CLERIC, SPELL_ANT_HAUL, 1);
spell_assignment(CLASS_CLERIC, SPELL_PLANAR_HEALING, 1);
/* class num spell level acquired */
/* 2nd circle */
spell_assignment(CLASS_CLERIC, SPELL_AUGURY, 3);
Expand Down Expand Up @@ -4934,6 +4939,8 @@ void load_class_list(void)
spell_assignment(CLASS_SORCERER, SPELL_STUNNING_BARRIER, 1);
spell_assignment(CLASS_SORCERER, SPELL_RESISTANCE, 1);
spell_assignment(CLASS_SORCERER, SPELL_ANT_HAUL, 1);
spell_assignment(CLASS_SORCERER, SPELL_CORROSIVE_TOUCH, 1);
spell_assignment(CLASS_SORCERER, SPELL_PLANAR_HEALING, 1);
/* class num spell level acquired */
/* 2nd circle */
spell_assignment(CLASS_SORCERER, SPELL_SHOCKING_GRASP, 4);
Expand Down Expand Up @@ -4964,6 +4971,7 @@ void load_class_list(void)
spell_assignment(CLASS_SORCERER, SPELL_TACTICAL_ACUMEN, 4);
spell_assignment(CLASS_SORCERER, SPELL_BESTOW_WEAPON_PROFICIENCY, 4);
spell_assignment(CLASS_SORCERER, SPELL_MASS_ANT_HAUL, 4);
spell_assignment(CLASS_SORCERER, SPELL_CUSHIONING_BANDS, 4);
/* class num spell level acquired */
/* 3rd circle */
spell_assignment(CLASS_SORCERER, SPELL_LIGHTNING_BOLT, 6);
Expand Down Expand Up @@ -5022,6 +5030,7 @@ void load_class_list(void)
spell_assignment(CLASS_SORCERER, SPELL_FEAR, 8);
spell_assignment(CLASS_SORCERER, SPELL_SHADOW_JUMP, 8);
spell_assignment(CLASS_SORCERER, SPELL_COMMUNAL_PROTECTION_FROM_ENERGY, 8);
spell_assignment(CLASS_SORCERER, SPELL_GHOST_WOLF, 8);
/* class num spell level acquired */
/* 5th circle */
spell_assignment(CLASS_SORCERER, SPELL_INTERPOSING_HAND, 10);
Expand Down Expand Up @@ -7295,7 +7304,7 @@ void load_class_list(void)

/* spell circle 1 */
spell_assignment(CLASS_SUMMONER, SPELL_ANT_HAUL, 1);
// spell_assignment(CLASS_SUMMONER, SPELL_CORROSIVE_TOUCH, 1);
spell_assignment(CLASS_SUMMONER, SPELL_CORROSIVE_TOUCH, 1);
spell_assignment(CLASS_SUMMONER, SPELL_ENLARGE_PERSON, 1);
spell_assignment(CLASS_SUMMONER, SPELL_EXPEDITIOUS_RETREAT, 1);
spell_assignment(CLASS_SUMMONER, SPELL_GREASE, 1);
Expand All @@ -7305,12 +7314,12 @@ void load_class_list(void)
// spell_assignment(CLASS_SUMMONER, SPELL_MOUNT, 1);
spell_assignment(CLASS_SUMMONER, SPELL_PROT_FROM_EVIL, 1);
spell_assignment(CLASS_SUMMONER, SPELL_PROT_FROM_GOOD, 1);
// spell_assignment(CLASS_SUMMONER, SPELL_REDUCE_PERSON, 1);
spell_assignment(CLASS_SUMMONER, SPELL_SHRINK_PERSON, 1);
// spell_assignment(CLASS_SUMMONER, SPELL_LESSER_EIDOLON_REJUVENATE, 1);
spell_assignment(CLASS_SUMMONER, SPELL_MAGE_SHIELD, 1);
spell_assignment(CLASS_SUMMONER, SPELL_SUMMON_CREATURE_1, 1);
// spell_assignment(CLASS_SUMMONER, SPELL_DAZE_MONSTER, 1);
// spell_assignment(CLASS_SUMMONER, SPELL_PLANAR_HEALING, 1);
spell_assignment(CLASS_SUMMONER, SPELL_PLANAR_HEALING, 1);

// spell circle 2
spell_assignment(CLASS_SUMMONER, SPELL_MASS_ANT_HAUL, 4);
Expand All @@ -7319,11 +7328,11 @@ void load_class_list(void)
spell_assignment(CLASS_SUMMONER, SPELL_BLUR, 4);
spell_assignment(CLASS_SUMMONER, SPELL_STRENGTH, 4);
spell_assignment(CLASS_SUMMONER, SPELL_GRACE, 4);
// spell_assignment(CLASS_SUMMONER, SPELL_CUSHIONED_BANDS, 4);
spell_assignment(CLASS_SUMMONER, SPELL_CUSHIONING_BANDS, 4);
spell_assignment(CLASS_SUMMONER, SPELL_CHARISMA, 4);
// spell_assignment(CLASS_SUMMONER, SPELL_LESSER_EVOLUTION_SURGE, 4);
spell_assignment(CLASS_SUMMONER, SPELL_CUNNING, 4);
// spell_assignment(CLASS_SUMMONER, SPELL_GHOST_WOLF, 4);
spell_assignment(CLASS_SUMMONER, SPELL_GHOST_WOLF, 4);
// spell_assignment(CLASS_SUMMONER, SPELL_GIRD_ALLY, 4);
// spell_assignment(CLASS_SUMMONER, SPELL_GLITTERDUST, 4);
spell_assignment(CLASS_SUMMONER, SPELL_HASTE, 4);
Expand Down
3 changes: 3 additions & 0 deletions constants.c
Original file line number Diff line number Diff line change
Expand Up @@ -1706,6 +1706,7 @@ const char *affected_bits[] = {
"Silenced",
"Hidden-Alignment",
"Wind-Wall",
"Fear-Aura",
"\n"};

CHECK_TABLE_SIZE(affected_bits, NUM_AFF_FLAGS + 1);
Expand Down Expand Up @@ -1830,6 +1831,7 @@ const char *affected_bit_descs[] = {
"You are unable to make a sound.",
"Your alignment is hidden from others.",
"You are surrounded by a wall of wind",
"You radiate fear to your opponents.",
"\n"};
CHECK_TABLE_SIZE(affected_bit_descs, NUM_AFF_FLAGS + 1);

Expand Down Expand Up @@ -2402,6 +2404,7 @@ const char *apply_types[] = {
"MV-Regen",
"PSP-Regen",
"Encumbrance",
"Fast-Healing",
"\n" /*51*/
};
CHECK_TABLE_SIZE(apply_types, NUM_APPLIES + 1);
Expand Down
4 changes: 4 additions & 0 deletions db.c
Original file line number Diff line number Diff line change
Expand Up @@ -5255,7 +5255,11 @@ void init_char(struct char_data *ch)

GET_REAL_SIZE(ch) = SIZE_MEDIUM;

#ifdef CAMPAIGN_FR
if (GET_RACE(ch) < -1 || GET_RACE(ch) >= NUM_EXTENDED_PC_RACES)
#else
if (GET_RACE(ch) < -1 || GET_RACE(ch) >= NUM_RACES)
#endif
GET_REAL_RACE(ch) = RACE_UNDEFINED;

if ((i = get_ptable_by_name(GET_NAME(ch))) != -1)
Expand Down
13 changes: 7 additions & 6 deletions deities.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ void init_deities(void)
deity_list[i].worshipper_alignments = "None";
deity_list[i].follower_names = "None";
deity_list[i].description = "You do not worship a deity at all for reasons of your own.";
deity_list[i].new_deity_system = false;
}

}
Expand Down Expand Up @@ -71,7 +72,7 @@ void add_deity_new(int deity, const char *name, int ethos, int alignment, int pa
deity_list[deity].worshipper_alignments = worshipper_alignments;
deity_list[deity].follower_names = follower_names;
deity_list[deity].description = description;

deity_list[deity].new_deity_system = true;
}

void assign_deities(void) {
Expand Down Expand Up @@ -127,16 +128,16 @@ void assign_deities(void) {
"\r\n"
"The church of Tempus welcomes worshippers of all alignments (though its clerics\r\n"
"abide by the normal rules), and its temples are more like walled military \r\n"
"compounds. Tempus`s clerics are charged to keep warfare a thing of rules and \r\n"
"compounds. Tempus's clerics are charged to keep warfare a thing of rules and \r\n"
"respected reputation, minimizing uncontrolled bloodshed and working to end \r\n"
"pointless extended fueding. They train themselves and others in battle \r\n"
"readiness in order to protect civilization from monsters, and they punish those\r\n"
"who fight dishonorably or with cowardice. Collecting and venerating the weapons\r\n"
"of famous and respected warriors is a common practice in Tempus`s church. \r\n"
"of famous and respected warriors is a common practice in Tempus's church. \r\n"
"Clerics are expected to spill a few drops of blood (preferably their own a of a\r\n"
"worthy foe`s) every tenday.\r\n"
"worthy foe's) every tenday.\r\n"
"\r\n"
"Tempus`s clerics pray for spells just before highsun. Most of his clerics tend\r\n"
"Tempus's clerics pray for spells just before highsun. Most of his clerics tend\r\n"
"to be battle-minded male humans, although others are welco. Eves and \r\n"
"anniversaries of great battles important to a local temple are holidays. The \r\n"
"Feast of the Moon is the annual day to honor the dead. Each temple holds a \r\n"
Expand Down Expand Up @@ -683,7 +684,7 @@ void assign_deities(void) {

add_deity_new(DEITY_AKADI, "Akadi", ETHOS_NEUTRAL, ALIGNMENT_NEUTRAL, DEITY_PANTHEON_FAERUNIAN,
"Lady of the Winds, The Lady of Air, Queen of Air", "Elemental Air, Movement, Speed, Flying Creatures",
"a white cloud on a blue background", "True Neutral, Lawful Neutral, Chaonic Neutral, Neutral Evil", "Akadian(s)",
"a white cloud on a blue background", "True Neutral, Lawful Neutral, Chaotic Neutral, Neutral Evil", "Akadian(s)",
"Akadi is the goddess of air, wind, and creatures of elemental air. The Queen of\r\n"
"Air is powerful and capricious, changeable and unpredictable, the embodiment of\r\n"
"whim and freedom.\r\n"
Expand Down
1 change: 1 addition & 0 deletions deities.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ struct deity_info
const char *symbol;
const char *worshipper_alignments;
const char *follower_names;
bool new_deity_system;
};

extern struct deity_info deity_list[NUM_DEITIES];
2 changes: 2 additions & 0 deletions fight.c
Original file line number Diff line number Diff line change
Expand Up @@ -7380,6 +7380,8 @@ int compute_attack_bonus(struct char_data *ch, /* Attacker */

if (AFF_FLAGGED(ch, AFF_FATIGUED))
bonuses[BONUS_TYPE_CIRCUMSTANCE] -= 2;
if (AFF_FLAGGED(ch, AFF_SHAKEN))
bonuses[BONUS_TYPE_CIRCUMSTANCE] -= 2;
if (AFF_FLAGGED(ch, AFF_DAZZLED))
bonuses[BONUS_TYPE_CIRCUMSTANCE] -= 1;
if (IS_FRIGHTENED(ch))
Expand Down
3 changes: 3 additions & 0 deletions handler.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@ void aff_apply_modify(struct char_data *ch, byte loc, sh_int mod, const char *ms
case APPLY_ENCUMBRANCE:
GET_ENCUMBRANCE_MOD(ch) += mod;
break;
case APPLY_FAST_HEALING:
GET_FAST_HEALING_MOD(ch) += mod;
break;

/* end Do Not Use */

Expand Down
9 changes: 7 additions & 2 deletions interpreter.c
Original file line number Diff line number Diff line change
Expand Up @@ -2804,8 +2804,13 @@ void nanny(struct descriptor_data *d, char *arg)
}
else
{
#ifdef CAMPAIGN_FR
write_to_output(d, "Races of Faerun\r\n\r\n");
for (i = 0; i < NUM_EXTENDED_PC_RACES; i++)
#else
write_to_output(d, "Races of Luminari\r\n\r\n");
for (i = 0; i < NUM_RACES; i++)
#endif
{
if (!is_locked_race(i) || has_unlocked_race(d->character, i))
write_to_output(d, "%s\r\n", race_list[i].type);
Expand All @@ -2817,9 +2822,9 @@ void nanny(struct descriptor_data *d, char *arg)
}

/* display class menu */
#ifdef CAMPAIGN_FR
#ifdef CAMPAIGN_FR
write_to_output(d, "Classes of Faerun\r\n\r\n");
#else
#else
write_to_output(d, "Classes of Luminari\r\n\r\n");
#endif

Expand Down
2 changes: 2 additions & 0 deletions limits.c
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,8 @@ int regen_hps(struct char_data *ch)
if (!FIGHTING(ch))
hp += GET_HP_REGEN(ch);

hp += GET_FAST_HEALING_MOD(ch);

/* these are last bonuses (outside of exceptions) because of multiplier */
if (ROOM_FLAGGED(ch->in_room, ROOM_REGEN))
{
Expand Down
Loading

0 comments on commit 4f0d4e2

Please sign in to comment.