mirror of
https://github.com/tbamud/tbamud.git
synced 2026-03-20 19:26:33 +01:00
Rename classes
This commit is contained in:
parent
cb59bf0315
commit
05a2dfce9f
14 changed files with 146 additions and 126 deletions
|
|
@ -3156,10 +3156,10 @@ ACMD(do_show)
|
|||
|
||||
for (i = 1; i < LVL_IMMORT; i++) {
|
||||
nlen = snprintf(buf + len, sizeof(buf) - len, "%-3d - %-6d %-6d %-6d %-6d %-6d %-6d %-6d %-6d\r\n", i,
|
||||
level_exp(CLASS_MAGIC_USER, i) - level_exp(CLASS_MAGIC_USER, i - 1),
|
||||
level_exp(CLASS_SORCEROR, i) - level_exp(CLASS_SORCEROR, i - 1),
|
||||
level_exp(CLASS_CLERIC, i) - level_exp(CLASS_CLERIC, i - 1),
|
||||
level_exp(CLASS_THIEF, i) - level_exp(CLASS_THIEF, i - 1),
|
||||
level_exp(CLASS_WARRIOR, i) - level_exp(CLASS_WARRIOR, i - 1),
|
||||
level_exp(CLASS_FIGHTER, i) - level_exp(CLASS_FIGHTER, i - 1),
|
||||
level_exp(CLASS_BARBARIAN, i) - level_exp(CLASS_BARBARIAN, i - 1),
|
||||
level_exp(CLASS_RANGER, i) - level_exp(CLASS_RANGER, i - 1),
|
||||
level_exp(CLASS_BARD, i) - level_exp(CLASS_BARD, i - 1),
|
||||
|
|
|
|||
144
src/class.c
144
src/class.c
|
|
@ -38,10 +38,10 @@ const char *class_abbrevs[] = {
|
|||
};
|
||||
|
||||
const char *pc_class_types[] = {
|
||||
"Magic User",
|
||||
"Sorceror",
|
||||
"Cleric",
|
||||
"Thief",
|
||||
"Warrior",
|
||||
"Fighter",
|
||||
"Barbarian",
|
||||
"Ranger",
|
||||
"Bard",
|
||||
|
|
@ -55,8 +55,8 @@ const char *class_menu =
|
|||
"Select a class:\r\n"
|
||||
" [\t(C\t)]leric\r\n"
|
||||
" [\t(T\t)]hief\r\n"
|
||||
" [\t(W\t)]arrior\r\n"
|
||||
" [\t(M\t)]agic-user\r\n"
|
||||
" [\t(F\t)]ighter\r\n"
|
||||
" [\t(S\t)]orceror\r\n"
|
||||
" [\t(B\t)]arbarian\r\n"
|
||||
" [\t(R\t)]anger\r\n"
|
||||
" B[\t(A\t)]rd\r\n"
|
||||
|
|
@ -69,9 +69,9 @@ int parse_class(char arg)
|
|||
arg = LOWER(arg);
|
||||
|
||||
switch (arg) {
|
||||
case 'm': return CLASS_MAGIC_USER;
|
||||
case 's': return CLASS_SORCEROR;
|
||||
case 'c': return CLASS_CLERIC;
|
||||
case 'w': return CLASS_WARRIOR;
|
||||
case 'f': return CLASS_FIGHTER;
|
||||
case 't': return CLASS_THIEF;
|
||||
case 'b': return CLASS_BARBARIAN;
|
||||
case 'r': return CLASS_RANGER;
|
||||
|
|
@ -122,7 +122,7 @@ bitvector_t find_class_bitvector(const char *arg)
|
|||
/* #define PRAC_TYPE 3 should it say 'spell' or 'skill'? */
|
||||
|
||||
int prac_params[4][NUM_CLASSES] = {
|
||||
/* MAG CLE THE WAR BAR RAN BARD DRU */
|
||||
/* SOR CLE THE FIG BAR RAN BARD DRU */
|
||||
{ 95, 95, 85, 80, 75, 85, 85, 95 }, /* learned level */
|
||||
{ 100, 100, 12, 12, 11, 12, 13, 90 }, /* max per practice */
|
||||
{ 25, 25, 0, 0, 0, 0, 25, 25 }, /* min per practice */
|
||||
|
|
@ -131,7 +131,7 @@ int prac_params[4][NUM_CLASSES] = {
|
|||
|
||||
/* The appropriate rooms for each guildmaster/guildguard; controls which types
|
||||
* of people the various guildguards let through. i.e., the first line shows
|
||||
* that from room 3017, only MAGIC_USERS are allowed to go south. Don't forget
|
||||
* that from room 3017, only SORCERORS are allowed to go south. Don't forget
|
||||
* to visit spec_assign.c if you create any new mobiles that should be a guild
|
||||
* master or guard so they can act appropriately. If you "recycle" the
|
||||
* existing mobs that are used in other guilds for your new guild, then you
|
||||
|
|
@ -141,10 +141,10 @@ int prac_params[4][NUM_CLASSES] = {
|
|||
struct guild_info_type guild_info[] = {
|
||||
|
||||
/* Midgaard */
|
||||
{ CLASS_MAGIC_USER, 3017, SOUTH },
|
||||
{ CLASS_SORCEROR, 3017, SOUTH },
|
||||
{ CLASS_CLERIC, 3004, NORTH },
|
||||
{ CLASS_THIEF, 3027, EAST },
|
||||
{ CLASS_WARRIOR, 3021, EAST },
|
||||
{ CLASS_FIGHTER, 3021, EAST },
|
||||
{ CLASS_BARBARIAN, 3021, EAST },
|
||||
{ CLASS_RANGER, 3021, EAST },
|
||||
{ CLASS_BARD, 3021, EAST },
|
||||
|
|
@ -162,7 +162,7 @@ struct guild_info_type guild_info[] = {
|
|||
byte saving_throws(int class_num, int type, int level)
|
||||
{
|
||||
switch (class_num) {
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
switch (type) {
|
||||
case SAVING_PARA: /* Paralyzation */
|
||||
switch (level) {
|
||||
|
|
@ -363,7 +363,7 @@ byte saving_throws(int class_num, int type, int level)
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
switch (type) {
|
||||
case SAVING_PARA: /* Paralyzation */
|
||||
switch (level) {
|
||||
|
|
@ -374,7 +374,7 @@ byte saving_throws(int class_num, int type, int level)
|
|||
case 4: return 0;
|
||||
case 5: return 0;
|
||||
default:
|
||||
log("SYSERR: Missing level for warrior paralyzation saving throw.");
|
||||
log("SYSERR: Missing level for fighter paralyzation saving throw.");
|
||||
break;
|
||||
}
|
||||
case SAVING_ROD: /* Rods */
|
||||
|
|
@ -386,7 +386,7 @@ byte saving_throws(int class_num, int type, int level)
|
|||
case 4: return 0;
|
||||
case 5: return 0;
|
||||
default:
|
||||
log("SYSERR: Missing level for warrior rod saving throw.");
|
||||
log("SYSERR: Missing level for fighter rod saving throw.");
|
||||
break;
|
||||
}
|
||||
case SAVING_PETRI: /* Petrification */
|
||||
|
|
@ -398,7 +398,7 @@ byte saving_throws(int class_num, int type, int level)
|
|||
case 4: return 0;
|
||||
case 5: return 0;
|
||||
default:
|
||||
log("SYSERR: Missing level for warrior petrification saving throw.");
|
||||
log("SYSERR: Missing level for fighter petrification saving throw.");
|
||||
break;
|
||||
}
|
||||
case SAVING_BREATH: /* Breath weapons */
|
||||
|
|
@ -410,7 +410,7 @@ byte saving_throws(int class_num, int type, int level)
|
|||
case 4: return 0;
|
||||
case 5: return 0;
|
||||
default:
|
||||
log("SYSERR: Missing level for warrior breath saving throw.");
|
||||
log("SYSERR: Missing level for fighter breath saving throw.");
|
||||
break;
|
||||
}
|
||||
case SAVING_SPELL: /* Generic spells */
|
||||
|
|
@ -422,7 +422,7 @@ byte saving_throws(int class_num, int type, int level)
|
|||
case 4: return 0;
|
||||
case 5: return 0;
|
||||
default:
|
||||
log("SYSERR: Missing level for warrior spell saving throw.");
|
||||
log("SYSERR: Missing level for fighter spell saving throw.");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
@ -734,7 +734,7 @@ void roll_real_abils(struct char_data *ch)
|
|||
ch->real_abils.str_add = 0;
|
||||
|
||||
switch (GET_CLASS(ch)) {
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
ch->real_abils.intel = table[0];
|
||||
ch->real_abils.wis = table[1];
|
||||
ch->real_abils.dex = table[2];
|
||||
|
|
@ -758,7 +758,7 @@ void roll_real_abils(struct char_data *ch)
|
|||
ch->real_abils.wis = table[4];
|
||||
ch->real_abils.cha = table[5];
|
||||
break;
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
ch->real_abils.str = table[0];
|
||||
ch->real_abils.dex = table[1];
|
||||
ch->real_abils.con = table[2];
|
||||
|
|
@ -819,7 +819,7 @@ void do_start(struct char_data *ch)
|
|||
|
||||
switch (GET_CLASS(ch)) {
|
||||
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
SET_SKILL(ch, SPELL_MAGIC_MISSILE, 5);
|
||||
SET_SKILL(ch, SPELL_DETECT_INVIS, 5);
|
||||
SET_SKILL(ch, SPELL_DETECT_MAGIC, 5);
|
||||
|
|
@ -896,7 +896,7 @@ void do_start(struct char_data *ch)
|
|||
SET_SKILL(ch, SKILL_PERCEPTION, 5);
|
||||
break;
|
||||
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
SET_SKILL(ch, SKILL_KICK, 5);
|
||||
SET_SKILL(ch, SKILL_RESCUE, 5);
|
||||
SET_SKILL(ch, SKILL_BANDAGE, 5);
|
||||
|
|
@ -982,7 +982,7 @@ void advance_level(struct char_data *ch)
|
|||
|
||||
switch (GET_CLASS(ch)) {
|
||||
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
add_hp += rand_number(3, 8);
|
||||
add_mana = rand_number(GET_LEVEL(ch), (int)(1.5 * GET_LEVEL(ch)));
|
||||
add_mana = MIN(add_mana, 10);
|
||||
|
|
@ -1002,7 +1002,7 @@ void advance_level(struct char_data *ch)
|
|||
add_move = rand_number(1, 3);
|
||||
break;
|
||||
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
add_hp += rand_number(10, 15);
|
||||
add_mana = 0;
|
||||
add_move = rand_number(1, 3);
|
||||
|
|
@ -1067,13 +1067,13 @@ int backstab_mult(int level)
|
|||
* usable by a particular class, based on the ITEM_ANTI_{class} bitvectors. */
|
||||
int invalid_class(struct char_data *ch, struct obj_data *obj)
|
||||
{
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_MAGIC_USER) && IS_MAGIC_USER(ch))
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_SORCEROR) && IS_SORCEROR(ch))
|
||||
return TRUE;
|
||||
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_CLERIC) && IS_CLERIC(ch))
|
||||
return TRUE;
|
||||
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_WARRIOR) && IS_WARRIOR(ch))
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_FIGHTER) && IS_FIGHTER(ch))
|
||||
return TRUE;
|
||||
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_THIEF) && IS_THIEF(ch))
|
||||
|
|
@ -1099,33 +1099,33 @@ int invalid_class(struct char_data *ch, struct obj_data *obj)
|
|||
* skill. */
|
||||
void init_spell_levels(void)
|
||||
{
|
||||
/* MAGES */
|
||||
spell_level(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_DETECT_INVIS, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_DETECT_MAGIC, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_CHILL_TOUCH, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_INFRAVISION, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_INVISIBLE, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_ARMOR, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_BURNING_HANDS, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_LOCATE_OBJECT, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_STRENGTH, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_SHOCKING_GRASP, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_SLEEP, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_LIGHTNING_BOLT, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_BLINDNESS, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_DETECT_POISON, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_COLOR_SPRAY, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_ENERGY_DRAIN, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_CURSE, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_POISON, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_FIREBALL, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_CHARM, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_IDENTIFY, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_FLY, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_ENCHANT_WEAPON, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SPELL_CLONE, CLASS_MAGIC_USER, 1);
|
||||
spell_level(SKILL_UNARMED, CLASS_MAGIC_USER, 1);
|
||||
/* SORCERORS */
|
||||
spell_level(SPELL_MAGIC_MISSILE, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_DETECT_INVIS, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_DETECT_MAGIC, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_CHILL_TOUCH, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_INFRAVISION, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_INVISIBLE, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_ARMOR, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_BURNING_HANDS, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_LOCATE_OBJECT, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_STRENGTH, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_SHOCKING_GRASP, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_SLEEP, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_LIGHTNING_BOLT, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_BLINDNESS, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_DETECT_POISON, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_COLOR_SPRAY, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_ENERGY_DRAIN, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_CURSE, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_POISON, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_FIREBALL, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_CHARM, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_IDENTIFY, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_FLY, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_ENCHANT_WEAPON, CLASS_SORCEROR, 1);
|
||||
spell_level(SPELL_CLONE, CLASS_SORCEROR, 1);
|
||||
spell_level(SKILL_UNARMED, CLASS_SORCEROR, 1);
|
||||
|
||||
/* CLERICS */
|
||||
spell_level(SPELL_CURE_LIGHT, CLASS_CLERIC, 1);
|
||||
|
|
@ -1173,17 +1173,17 @@ void init_spell_levels(void)
|
|||
spell_level(SKILL_SHIELD_USE, CLASS_THIEF, 1);
|
||||
spell_level(SKILL_PERCEPTION, CLASS_THIEF, 1);
|
||||
|
||||
/* WARRIORS */
|
||||
spell_level(SKILL_KICK, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_RESCUE, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_BANDAGE, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_BASH, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_UNARMED, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_SLASHING_WEAPONS, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_PIERCING_WEAPONS, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_BLUDGEONING_WEAPONS, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_SHIELD_USE, CLASS_WARRIOR, 1);
|
||||
spell_level(SKILL_PERCEPTION, CLASS_WARRIOR, 1);
|
||||
/* FIGHTERS */
|
||||
spell_level(SKILL_KICK, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_RESCUE, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_BANDAGE, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_BASH, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_UNARMED, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_SLASHING_WEAPONS, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_PIERCING_WEAPONS, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_BLUDGEONING_WEAPONS, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_SHIELD_USE, CLASS_FIGHTER, 1);
|
||||
spell_level(SKILL_PERCEPTION, CLASS_FIGHTER, 1);
|
||||
|
||||
/* BARBARIANS */
|
||||
spell_level(SKILL_KICK, CLASS_BARBARIAN, 1);
|
||||
|
|
@ -1251,7 +1251,7 @@ int level_exp(int chclass, int level)
|
|||
/* Exp required for normal mortals is below */
|
||||
switch (chclass) {
|
||||
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
switch (level) {
|
||||
case 0: return 0;
|
||||
case 1: return 1;
|
||||
|
|
@ -1275,7 +1275,7 @@ int level_exp(int chclass, int level)
|
|||
}
|
||||
break;
|
||||
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
switch (level) {
|
||||
case 0: return 0;
|
||||
case 1: return 1;
|
||||
|
|
@ -1333,13 +1333,13 @@ const char *title_male(int chclass, int level)
|
|||
|
||||
switch (chclass) {
|
||||
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
switch (level) {
|
||||
case 1: return "the Apprentice of Magic";
|
||||
case LVL_IMMORT: return "the Immortal Warlock";
|
||||
case LVL_GOD: return "the Avatar of Magic";
|
||||
case LVL_GRGOD: return "the God of Magic";
|
||||
default: return "the Mage";
|
||||
default: return "the Sorceror";
|
||||
}
|
||||
|
||||
case CLASS_CLERIC:
|
||||
|
|
@ -1360,13 +1360,13 @@ const char *title_male(int chclass, int level)
|
|||
default: return "the Thief";
|
||||
}
|
||||
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
switch(level) {
|
||||
case 1: return "the Swordpupil";
|
||||
case LVL_IMMORT: return "the Immortal Warlord";
|
||||
case LVL_GOD: return "the Extirpator";
|
||||
case LVL_GRGOD: return "the God of War";
|
||||
default: return "the Warrior";
|
||||
default: return "the Fighter";
|
||||
}
|
||||
|
||||
case CLASS_BARBARIAN:
|
||||
|
|
@ -1420,7 +1420,7 @@ const char *title_female(int chclass, int level)
|
|||
|
||||
switch (chclass) {
|
||||
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
switch (level) {
|
||||
case 1: return "the Apprentice of Magic";
|
||||
case LVL_IMMORT: return "the Immortal Enchantress";
|
||||
|
|
@ -1447,13 +1447,13 @@ const char *title_female(int chclass, int level)
|
|||
default: return "the Thief";
|
||||
}
|
||||
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_FIGHTER:
|
||||
switch(level) {
|
||||
case 1: return "the Swordpupil";
|
||||
case LVL_IMMORT: return "the Immortal Lady of War";
|
||||
case LVL_GOD: return "the Queen of Destruction";
|
||||
case LVL_GRGOD: return "the Goddess of War";
|
||||
default: return "the Warrior";
|
||||
default: return "the Fighter";
|
||||
}
|
||||
|
||||
case CLASS_BARBARIAN:
|
||||
|
|
|
|||
|
|
@ -475,10 +475,14 @@ const char *extra_bits[] = {
|
|||
"ANTI_GOOD",
|
||||
"ANTI_EVIL",
|
||||
"ANTI_NEUTRAL",
|
||||
"ANTI_MAGE",
|
||||
"ANTI_SORCEROR",
|
||||
"ANTI_CLERIC",
|
||||
"ANTI_THIEF",
|
||||
"ANTI_WARRIOR",
|
||||
"ANTI_FIGHTER",
|
||||
"ANTI_BARBARIAN",
|
||||
"ANTI_RANGER",
|
||||
"ANTI_BARD",
|
||||
"ANTI_DRUID",
|
||||
"NO_SELL",
|
||||
"QUEST_ITEM",
|
||||
"\n"
|
||||
|
|
|
|||
2
src/db.c
2
src/db.c
|
|
@ -1594,7 +1594,7 @@ static void parse_simple_mob(FILE *mob_f, int i, int nr)
|
|||
GET_HEIGHT(mob_proto + i) = 198;
|
||||
|
||||
/* These are now save applies; base save numbers for MOBs are now from the
|
||||
* warrior save table. */
|
||||
* fighter save table. */
|
||||
for (j = 0; j < NUM_OF_SAVING_THROWS; j++)
|
||||
GET_SAVE(mob_proto + i, j) = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ int mana_gain(struct char_data *ch)
|
|||
break;
|
||||
}
|
||||
|
||||
if (IS_MAGIC_USER(ch) || IS_CLERIC(ch))
|
||||
if (IS_SORCEROR(ch) || IS_CLERIC(ch))
|
||||
gain *= 2;
|
||||
|
||||
if ((GET_COND(ch, HUNGER) == 0) || (GET_COND(ch, THIRST) == 0))
|
||||
|
|
@ -129,7 +129,7 @@ int hit_gain(struct char_data *ch)
|
|||
break;
|
||||
}
|
||||
|
||||
if (IS_MAGIC_USER(ch) || IS_CLERIC(ch))
|
||||
if (IS_SORCEROR(ch) || IS_CLERIC(ch))
|
||||
gain /= 2; /* Ouch. */
|
||||
|
||||
if ((GET_COND(ch, HUNGER) == 0) || (GET_COND(ch, THIRST) == 0))
|
||||
|
|
|
|||
16
src/magic.c
16
src/magic.c
|
|
@ -35,8 +35,8 @@ static void perform_mag_groups(int level, struct char_data *ch, struct char_data
|
|||
* random number of the character as in some other systems. */
|
||||
int mag_savingthrow(struct char_data *ch, int type, int modifier)
|
||||
{
|
||||
/* NPCs use warrior tables according to some book */
|
||||
int class_sav = CLASS_WARRIOR;
|
||||
/* NPCs use fighter tables according to some book */
|
||||
int class_sav = CLASS_FIGHTER;
|
||||
int save;
|
||||
|
||||
if (!IS_NPC(ch))
|
||||
|
|
@ -204,37 +204,37 @@ int mag_damage(int level, struct char_data *ch, struct char_data *victim,
|
|||
/* Mostly mages */
|
||||
case SPELL_MAGIC_MISSILE:
|
||||
case SPELL_CHILL_TOUCH: /* chill touch also has an affect */
|
||||
if (IS_MAGIC_USER(ch))
|
||||
if (IS_SORCEROR(ch))
|
||||
dam = dice(1, 8) + 1;
|
||||
else
|
||||
dam = dice(1, 6) + 1;
|
||||
break;
|
||||
case SPELL_BURNING_HANDS:
|
||||
if (IS_MAGIC_USER(ch))
|
||||
if (IS_SORCEROR(ch))
|
||||
dam = dice(3, 8) + 3;
|
||||
else
|
||||
dam = dice(3, 6) + 3;
|
||||
break;
|
||||
case SPELL_SHOCKING_GRASP:
|
||||
if (IS_MAGIC_USER(ch))
|
||||
if (IS_SORCEROR(ch))
|
||||
dam = dice(5, 8) + 5;
|
||||
else
|
||||
dam = dice(5, 6) + 5;
|
||||
break;
|
||||
case SPELL_LIGHTNING_BOLT:
|
||||
if (IS_MAGIC_USER(ch))
|
||||
if (IS_SORCEROR(ch))
|
||||
dam = dice(7, 8) + 7;
|
||||
else
|
||||
dam = dice(7, 6) + 7;
|
||||
break;
|
||||
case SPELL_COLOR_SPRAY:
|
||||
if (IS_MAGIC_USER(ch))
|
||||
if (IS_SORCEROR(ch))
|
||||
dam = dice(9, 8) + 9;
|
||||
else
|
||||
dam = dice(9, 6) + 9;
|
||||
break;
|
||||
case SPELL_FIREBALL:
|
||||
if (IS_MAGIC_USER(ch))
|
||||
if (IS_SORCEROR(ch))
|
||||
dam = dice(11, 8) + 11;
|
||||
else
|
||||
dam = dice(11, 6) + 11;
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ static void auto_equip(struct char_data *ch, struct obj_data *obj, int location)
|
|||
case WEAR_HOLD:
|
||||
if (CAN_WEAR(obj, ITEM_WEAR_HOLD))
|
||||
break;
|
||||
if (IS_WARRIOR(ch) && CAN_WEAR(obj, ITEM_WEAR_WIELD) && GET_OBJ_TYPE(obj) == ITEM_WEAPON)
|
||||
if (IS_FIGHTER(ch) && CAN_WEAR(obj, ITEM_WEAR_WIELD) && GET_OBJ_TYPE(obj) == ITEM_WEAPON)
|
||||
break;
|
||||
location = LOC_INVENTORY;
|
||||
break;
|
||||
|
|
|
|||
16
src/shop.c
16
src/shop.c
|
|
@ -32,10 +32,14 @@ const char *trade_letters[] = {
|
|||
"Good", /* First, the alignment based ones */
|
||||
"Evil",
|
||||
"Neutral",
|
||||
"Magic User", /* Then the class based ones */
|
||||
"Sorceror", /* Then the class based ones */
|
||||
"Cleric",
|
||||
"Thief",
|
||||
"Warrior",
|
||||
"Fighter",
|
||||
"Barbarian",
|
||||
"Ranger",
|
||||
"Bard",
|
||||
"Druid",
|
||||
"\n"
|
||||
};
|
||||
|
||||
|
|
@ -126,10 +130,14 @@ static int is_ok_char(struct char_data *keeper, struct char_data *ch, int shop_n
|
|||
if (IS_NPC(ch))
|
||||
return (TRUE);
|
||||
|
||||
if ((IS_MAGIC_USER(ch) && NOTRADE_MAGIC_USER(shop_nr)) ||
|
||||
if ((IS_SORCEROR(ch) && NOTRADE_SORCEROR(shop_nr)) ||
|
||||
(IS_CLERIC(ch) && NOTRADE_CLERIC(shop_nr)) ||
|
||||
(IS_THIEF(ch) && NOTRADE_THIEF(shop_nr)) ||
|
||||
(IS_WARRIOR(ch) && NOTRADE_WARRIOR(shop_nr))) {
|
||||
(IS_FIGHTER(ch) && NOTRADE_FIGHTER(shop_nr)) ||
|
||||
(IS_BARBARIAN(ch) && NOTRADE_BARBARIAN(shop_nr)) ||
|
||||
(IS_RANGER(ch) && NOTRADE_RANGER(shop_nr)) ||
|
||||
(IS_BARD(ch) && NOTRADE_BARD(shop_nr)) ||
|
||||
(IS_DRUID(ch) && NOTRADE_DRUID(shop_nr))) {
|
||||
snprintf(buf, sizeof(buf), "%s %s", GET_NAME(ch), MSG_NO_SELL_CLASS);
|
||||
do_tell(keeper, buf, cmd_tell, 0);
|
||||
return (FALSE);
|
||||
|
|
|
|||
38
src/shop.h
38
src/shop.h
|
|
@ -74,15 +74,19 @@ struct shop_data {
|
|||
#define LIST_ROOM 2
|
||||
|
||||
/* Whom will we not trade with (bitvector for SHOP_TRADE_WITH()) */
|
||||
#define TRADE_NOGOOD (1 << 0)
|
||||
#define TRADE_NOEVIL (1 << 1)
|
||||
#define TRADE_NONEUTRAL (1 << 2)
|
||||
#define TRADE_NOMAGIC_USER (1 << 3)
|
||||
#define TRADE_NOCLERIC (1 << 4)
|
||||
#define TRADE_NOTHIEF (1 << 5)
|
||||
#define TRADE_NOWARRIOR (1 << 6)
|
||||
#define TRADE_NOGOOD (1 << 0)
|
||||
#define TRADE_NOEVIL (1 << 1)
|
||||
#define TRADE_NONEUTRAL (1 << 2)
|
||||
#define TRADE_NOSORCEROR (1 << 3)
|
||||
#define TRADE_NOCLERIC (1 << 4)
|
||||
#define TRADE_NOTHIEF (1 << 5)
|
||||
#define TRADE_NOFIGHTER (1 << 6)
|
||||
#define TRADE_NOBARBARIAN (1 << 7)
|
||||
#define TRADE_NORANGER (1 << 8)
|
||||
#define TRADE_NOBARD (1 << 9)
|
||||
#define TRADE_NODRUID (1 << 10)
|
||||
/** Total number of trade types */
|
||||
#define NUM_TRADERS 7
|
||||
#define NUM_TRADERS 11
|
||||
|
||||
struct stack_data {
|
||||
int data[100];
|
||||
|
|
@ -119,13 +123,17 @@ struct stack_data {
|
|||
#define SHOP_SELLPROFIT(i) (shop_index[(i)].profit_sell)
|
||||
#define SHOP_FUNC(i) (shop_index[(i)].func)
|
||||
|
||||
#define NOTRADE_GOOD(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOGOOD))
|
||||
#define NOTRADE_EVIL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOEVIL))
|
||||
#define NOTRADE_NEUTRAL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NONEUTRAL))
|
||||
#define NOTRADE_MAGIC_USER(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOMAGIC_USER))
|
||||
#define NOTRADE_CLERIC(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOCLERIC))
|
||||
#define NOTRADE_THIEF(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOTHIEF))
|
||||
#define NOTRADE_WARRIOR(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOWARRIOR))
|
||||
#define NOTRADE_GOOD(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOGOOD))
|
||||
#define NOTRADE_EVIL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOEVIL))
|
||||
#define NOTRADE_NEUTRAL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NONEUTRAL))
|
||||
#define NOTRADE_SORCEROR(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOSORCEROR))
|
||||
#define NOTRADE_CLERIC(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOCLERIC))
|
||||
#define NOTRADE_THIEF(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOTHIEF))
|
||||
#define NOTRADE_FIGHTER(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOFIGHTER))
|
||||
#define NOTRADE_BARBARIAN(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOBARBARIAN))
|
||||
#define NOTRADE_RANGER(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NORANGER))
|
||||
#define NOTRADE_BARD(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOBARD))
|
||||
#define NOTRADE_DRUID(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NODRUID))
|
||||
|
||||
/* Shop flags */
|
||||
#define WILL_START_FIGHT (1 << 0)
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ static void ASSIGNROOM(room_vnum room, SPECIAL(fname))
|
|||
}
|
||||
|
||||
/* Assignments */
|
||||
/* assign special procedures to mobiles. Guildguards, snake, thief, magic user,
|
||||
/* assign special procedures to mobiles. Guildguards, snake, thief, sorceror,
|
||||
* puff, fido, janitor, and cityguards are now implemented via triggers. */
|
||||
void assign_mobiles(void)
|
||||
{
|
||||
|
|
@ -100,7 +100,7 @@ static struct spec_func_data spec_func_list[] = {
|
|||
{"Mayor", mayor },
|
||||
{"Snake", snake },
|
||||
{"Thief", thief },
|
||||
{"Magic User", magic_user },
|
||||
{"Sorceror", sorceror },
|
||||
{"Puff", puff },
|
||||
{"Fido", fido },
|
||||
{"Janitor", janitor },
|
||||
|
|
|
|||
|
|
@ -293,7 +293,7 @@ SPECIAL(thief)
|
|||
return (FALSE);
|
||||
}
|
||||
|
||||
SPECIAL(magic_user)
|
||||
SPECIAL(sorceror)
|
||||
{
|
||||
struct char_data *vict;
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ SPECIAL(dump);
|
|||
SPECIAL(mayor);
|
||||
SPECIAL(snake);
|
||||
SPECIAL(thief);
|
||||
SPECIAL(magic_user);
|
||||
SPECIAL(sorceror);
|
||||
SPECIAL(guild_guard);
|
||||
SPECIAL(puff);
|
||||
SPECIAL(fido);
|
||||
|
|
|
|||
|
|
@ -153,10 +153,10 @@
|
|||
|
||||
/* PC classes */
|
||||
#define CLASS_UNDEFINED (-1) /**< PC Class undefined */
|
||||
#define CLASS_MAGIC_USER 0 /**< PC Class Magic User */
|
||||
#define CLASS_SORCEROR 0 /**< PC Class Sorceror */
|
||||
#define CLASS_CLERIC 1 /**< PC Class Cleric */
|
||||
#define CLASS_THIEF 2 /**< PC Class Thief */
|
||||
#define CLASS_WARRIOR 3 /**< PC Class Warrior */
|
||||
#define CLASS_FIGHTER 3 /**< PC Class Fighter */
|
||||
#define CLASS_BARBARIAN 4 /**< PC Class Barbarian */
|
||||
#define CLASS_RANGER 5 /**< PC Class Ranger */
|
||||
#define CLASS_BARD 6 /**< PC Class Bard */
|
||||
|
|
@ -431,10 +431,10 @@
|
|||
#define ITEM_ANTI_GOOD 9 /**< Not usable by good people */
|
||||
#define ITEM_ANTI_EVIL 10 /**< Not usable by evil people */
|
||||
#define ITEM_ANTI_NEUTRAL 11 /**< Not usable by neutral people */
|
||||
#define ITEM_ANTI_MAGIC_USER 12 /**< Not usable by mages */
|
||||
#define ITEM_ANTI_SORCEROR 12 /**< Not usable by sorcerors */
|
||||
#define ITEM_ANTI_CLERIC 13 /**< Not usable by clerics */
|
||||
#define ITEM_ANTI_THIEF 14 /**< Not usable by thieves */
|
||||
#define ITEM_ANTI_WARRIOR 15 /**< Not usable by warriors */
|
||||
#define ITEM_ANTI_FIGHTER 15 /**< Not usable by fighters */
|
||||
#define ITEM_ANTI_BARBARIAN 16 /**< Not usable by barbarians */
|
||||
#define ITEM_ANTI_RANGER 17 /**< Not usable by rangers */
|
||||
#define ITEM_ANTI_BARD 18 /**< Not usable by bards */
|
||||
|
|
|
|||
22
src/utils.h
22
src/utils.h
|
|
@ -890,28 +890,28 @@ do \
|
|||
/** Return the class abbreviation for ch. */
|
||||
#define CLASS_ABBR(ch) (IS_NPC(ch) ? "--" : class_abbrevs[(int)GET_CLASS(ch)])
|
||||
|
||||
/** 1 if ch is magic user class, 0 if not. */
|
||||
#define IS_MAGIC_USER(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_MAGIC_USER))
|
||||
/** 1 if ch is sorceror class, 0 if not. */
|
||||
#define IS_SORCEROR(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_SORCEROR))
|
||||
/** 1 if ch is cleric class, 0 if not. */
|
||||
#define IS_CLERIC(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_CLERIC))
|
||||
/** 1 if ch is thief class, 0 if not. */
|
||||
#define IS_THIEF(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_THIEF))
|
||||
/** 1 if ch is warrior class, 0 if not. */
|
||||
#define IS_WARRIOR(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_WARRIOR))
|
||||
/** 1 if ch is warrior class, 0 if not. */
|
||||
/** 1 if ch is fighter class, 0 if not. */
|
||||
#define IS_FIGHTER(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_FIGHTER))
|
||||
/** 1 if ch is barbarian class, 0 if not. */
|
||||
#define IS_BARBARIAN(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_BARBARIAN))
|
||||
/** 1 if ch is warrior class, 0 if not. */
|
||||
/** 1 if ch is ranger class, 0 if not. */
|
||||
#define IS_RANGER(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_RANGER))
|
||||
/** 1 if ch is warrior class, 0 if not. */
|
||||
/** 1 if ch is bard class, 0 if not. */
|
||||
#define IS_BARD(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_BARD))
|
||||
/** 1 if ch is warrior class, 0 if not. */
|
||||
/** 1 if ch is druid class, 0 if not. */
|
||||
#define IS_DRUID(ch) (!IS_NPC(ch) && \
|
||||
(GET_CLASS(ch) == CLASS_DRUID))
|
||||
|
||||
|
|
@ -1120,7 +1120,7 @@ static inline int GET_CASTER_PROF_FOR_SPELL(struct char_data *ch, int spellnum)
|
|||
/* Similar to 5e mods */
|
||||
static inline int GET_SPELL_ABILITY_MOD(struct char_data *ch) {
|
||||
switch (GET_CLASS(ch)) {
|
||||
case CLASS_MAGIC_USER:
|
||||
case CLASS_SORCEROR:
|
||||
return GET_ABILITY_MOD(GET_INT(ch));
|
||||
case CLASS_CLERIC:
|
||||
return GET_ABILITY_MOD(GET_WIS(ch));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue