- Allow mages to select spells from their primary school through training, by spending points.
- Rename 'weapon attraction' spell to 'guided weapon' - When showing spells in a book, include their school - $ key to show current money
This commit is contained in:
parent
267f046986
commit
fd450ba0c3
9
ai.c
9
ai.c
|
@ -1043,7 +1043,7 @@ int aigetspelltarget(lifeform_t *lf, objecttype_t *spelltype, lifeform_t *victim
|
||||||
}
|
}
|
||||||
|
|
||||||
cell_t *aigettargetcell(lifeform_t *lf, flag_t **targflag) {
|
cell_t *aigettargetcell(lifeform_t *lf, flag_t **targflag) {
|
||||||
flag_t *f;
|
flag_t *f = NULL;
|
||||||
|
|
||||||
if (targflag) {
|
if (targflag) {
|
||||||
*targflag = NULL;
|
*targflag = NULL;
|
||||||
|
@ -1856,7 +1856,7 @@ int ai_movement(lifeform_t *lf) {
|
||||||
|
|
||||||
// do we have a target cell?
|
// do we have a target cell?
|
||||||
c = aigettargetcell(lf, &f);
|
c = aigettargetcell(lf, &f);
|
||||||
if (!f) return B_FALSE;
|
if (!f) return B_FALSE; // ooo is f bad here?
|
||||||
|
|
||||||
// is it still valid?
|
// is it still valid?
|
||||||
if (!c) {
|
if (!c) {
|
||||||
|
@ -1887,6 +1887,8 @@ int ai_movement(lifeform_t *lf) {
|
||||||
// always ok.
|
// always ok.
|
||||||
} else if (f->val[2] == MR_BACKTOLAIR) {
|
} else if (f->val[2] == MR_BACKTOLAIR) {
|
||||||
// always ok.
|
// always ok.
|
||||||
|
} else if (f->val[2] == MR_OTHER) {
|
||||||
|
// always ok.
|
||||||
} else {
|
} else {
|
||||||
// weird ?
|
// weird ?
|
||||||
raise (SIGINT);
|
raise (SIGINT);
|
||||||
|
@ -2362,6 +2364,9 @@ int aimovetotargetcell(lifeform_t *lf, flag_t *f) {
|
||||||
cell_t *c = NULL,*origc,*targetc;
|
cell_t *c = NULL,*origc,*targetc;
|
||||||
int db = B_FALSE;
|
int db = B_FALSE;
|
||||||
enum ATTRBRACKET iqb;
|
enum ATTRBRACKET iqb;
|
||||||
|
|
||||||
|
assert(f->id <= F_LAST);
|
||||||
|
|
||||||
iqb = getattrbracket(getattr(lf, A_IQ), A_IQ, NULL);
|
iqb = getattrbracket(getattr(lf, A_IQ), A_IQ, NULL);
|
||||||
|
|
||||||
checkflagpile_maplfs(lf->cell->map);
|
checkflagpile_maplfs(lf->cell->map);
|
||||||
|
|
32
data.c
32
data.c
|
@ -206,6 +206,7 @@ void initcommands(void) {
|
||||||
addcommand(CMD_NEXTTARGET, '\'', "Cycle to next firearm target.");
|
addcommand(CMD_NEXTTARGET, '\'', "Cycle to next firearm target.");
|
||||||
// Information
|
// Information
|
||||||
addcommand(CMD_HELP, '?', "Display this text.");
|
addcommand(CMD_HELP, '?', "Display this text.");
|
||||||
|
addcommand(CMD_COUNTMONEY, '$', "Count your funds.");
|
||||||
addcommand(CMD_INFOPLAYER, '@', "Display player stats.");
|
addcommand(CMD_INFOPLAYER, '@', "Display player stats.");
|
||||||
addcommand(CMD_INFOARMOUR, ']', "Display player armour.");
|
addcommand(CMD_INFOARMOUR, ']', "Display player armour.");
|
||||||
addcommand(CMD_FORCEATTACK, 'A', "Force an attack in a given direction.");
|
addcommand(CMD_FORCEATTACK, 'A', "Force an attack in a given direction.");
|
||||||
|
@ -1391,6 +1392,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
||||||
// abilities
|
// abilities
|
||||||
|
addflag(lastjob->flags, F_CANSTUDY, SS_AIR, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANSEETHROUGHMAT, MT_GAS, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANSEETHROUGHMAT, MT_GAS, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
||||||
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
||||||
|
@ -1451,6 +1453,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
||||||
// abilities
|
// abilities
|
||||||
|
addflag(lastjob->flags, F_CANSTUDY, SS_FIRE, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
||||||
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
||||||
|
@ -1511,6 +1514,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
||||||
// abilities
|
// abilities
|
||||||
|
addflag(lastjob->flags, F_CANSTUDY, SS_COLD, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
||||||
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
||||||
|
@ -1571,6 +1575,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
||||||
// abilities
|
// abilities
|
||||||
|
addflag(lastjob->flags, F_CANSTUDY, SS_DEATH, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
||||||
addflag(lastjob->flags, F_RESTHEALTIME, 6, NA, NA, NULL); // wizard heals slowly, but regenerates mp
|
addflag(lastjob->flags, F_RESTHEALTIME, 6, NA, NA, NULL); // wizard heals slowly, but regenerates mp
|
||||||
|
@ -1628,6 +1633,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_LORE_UNDEAD, NA, NA, NULL);
|
||||||
// abilities
|
// abilities
|
||||||
|
addflag(lastjob->flags, F_CANSTUDY, SS_WILD, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
addflag(lastjob->flags, F_NEEDOBFORSPELLS, NA, F_WIZSTAFF, NA, "wizard staff");
|
||||||
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
addflag(lastjob->flags, F_MAXHPMOD, 80, NA, NA, NULL); // low hp
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL);
|
||||||
|
@ -4323,7 +4329,7 @@ void initobjects(void) {
|
||||||
// elemental - air
|
// elemental - air
|
||||||
///////////////////
|
///////////////////
|
||||||
// l1
|
// l1
|
||||||
addot(OT_S_TRUESTRIKE, "weapon attraction", "Wind currents gives the target unerring accuracy, making their attacks always hit and negating strength penalties.", MT_NOTHING, 0, OC_SPELL, SZ_TINY);
|
addot(OT_S_TRUESTRIKE, "guided weapon", "Wind currents give the target unerring accuracy, making their attacks always hit and negating strength penalties.", MT_NOTHING, 0, OC_SPELL, SZ_TINY);
|
||||||
addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "The spell's power determines the amount of strikes before it expires.");
|
addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "The spell's power determines the amount of strikes before it expires.");
|
||||||
addflag(lastot->flags, F_SPELLSCHOOL, SS_AIR, NA, NA, NULL);
|
addflag(lastot->flags, F_SPELLSCHOOL, SS_AIR, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL);
|
addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL);
|
||||||
|
@ -21014,7 +21020,7 @@ void initskills(void) {
|
||||||
|
|
||||||
// spell schools
|
// spell schools
|
||||||
addskill(SK_SS_ALLOMANCY, "Allomancy", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_ALLOMANCY, "Allomancy", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_ALLOMANCY, PR_INEPT, "- Spell power power depends on your Level and Strength.", B_FALSE);
|
addskilldesc(SK_SS_ALLOMANCY, PR_INEPT, "- Spell power depends on your Level and Strength.", B_FALSE);
|
||||||
addskilldesc(SK_SS_ALLOMANCY, PR_INEPT, "- Each rank gives you a 20% chance to learn a new allomantic ability when levelling up.", B_FALSE);
|
addskilldesc(SK_SS_ALLOMANCY, PR_INEPT, "- Each rank gives you a 20% chance to learn a new allomantic ability when levelling up.", B_FALSE);
|
||||||
addskilldesc(SK_SS_ALLOMANCY, PR_NOVICE, "Allows you to cast Allomancy spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_ALLOMANCY, PR_NOVICE, "Allows you to cast Allomancy spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_ALLOMANCY, PR_BEGINNER, "Allows you to cast Allomancy spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_ALLOMANCY, PR_BEGINNER, "Allows you to cast Allomancy spells up to level 2.", B_FALSE);
|
||||||
|
@ -21023,7 +21029,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_ALLOMANCY, PR_EXPERT, "Allows you to cast Allomancy spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_ALLOMANCY, PR_EXPERT, "Allows you to cast Allomancy spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_ALLOMANCY, PR_MASTER, "Allows you to cast Allomancy spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_ALLOMANCY, PR_MASTER, "Allows you to cast Allomancy spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_MENTAL, "Psionics", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_MENTAL, "Psionics", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_MENTAL, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_MENTAL, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_MENTAL, PR_INEPT, "- Each rank gives you a 20% chance to learn a new psionic ability when levelling up.", B_FALSE);
|
addskilldesc(SK_SS_MENTAL, PR_INEPT, "- Each rank gives you a 20% chance to learn a new psionic ability when levelling up.", B_FALSE);
|
||||||
addskilldesc(SK_SS_MENTAL, PR_NOVICE, "Allows you to cast Psionic spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_MENTAL, PR_NOVICE, "Allows you to cast Psionic spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_MENTAL, PR_BEGINNER, "Allows you to cast Psionic spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_MENTAL, PR_BEGINNER, "Allows you to cast Psionic spells up to level 2.", B_FALSE);
|
||||||
|
@ -21032,7 +21038,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_MENTAL, PR_EXPERT, "Allows you to cast Psionic spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_MENTAL, PR_EXPERT, "Allows you to cast Psionic spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_MENTAL, PR_MASTER, "Allows you to cast Psionic spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_MENTAL, PR_MASTER, "Allows you to cast Psionic spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_NATURE, "Enviromancy", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_NATURE, "Enviromancy", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_NATURE, PR_INEPT, "- Spell power power depends on your Level and Wisdom.", B_FALSE);
|
addskilldesc(SK_SS_NATURE, PR_INEPT, "- Spell power depends on your Level and Wisdom.", B_FALSE);
|
||||||
addskilldesc(SK_SS_NATURE, PR_NOVICE, "Allows you to cast Nature spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_NATURE, PR_NOVICE, "Allows you to cast Nature spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_NATURE, PR_BEGINNER, "Allows you to cast Nature spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_NATURE, PR_BEGINNER, "Allows you to cast Nature spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_NATURE, PR_ADEPT, "Allows you to cast Nature spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_NATURE, PR_ADEPT, "Allows you to cast Nature spells up to level 3.", B_FALSE);
|
||||||
|
@ -21040,7 +21046,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_NATURE, PR_EXPERT, "Allows you to cast Nature spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_NATURE, PR_EXPERT, "Allows you to cast Nature spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_NATURE, PR_MASTER, "Allows you to cast Nature spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_NATURE, PR_MASTER, "Allows you to cast Nature spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_AIR, "Sorcery:Air Magic", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_AIR, "Sorcery:Air Magic", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_AIR, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_AIR, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_AIR, PR_NOVICE, "Allows you to cast Air Magic spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_AIR, PR_NOVICE, "Allows you to cast Air Magic spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_AIR, PR_BEGINNER, "Allows you to cast Air Magic spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_AIR, PR_BEGINNER, "Allows you to cast Air Magic spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_AIR, PR_ADEPT, "Allows you to cast Air Magic spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_AIR, PR_ADEPT, "Allows you to cast Air Magic spells up to level 3.", B_FALSE);
|
||||||
|
@ -21048,7 +21054,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_AIR, PR_EXPERT, "Allows you to cast Air Magic spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_AIR, PR_EXPERT, "Allows you to cast Air Magic spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_AIR, PR_MASTER, "Allows you to cast Air Magic spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_AIR, PR_MASTER, "Allows you to cast Air Magic spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_DEATH, "Sorcery:Necromancy", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_DEATH, "Sorcery:Necromancy", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_DEATH, PR_INEPT, "- Spell power power depends on your Level, your Intelligence, and Hecta's pleasure.", B_FALSE);
|
addskilldesc(SK_SS_DEATH, PR_INEPT, "- Spell power depends on your Level, your Intelligence, and Hecta's pleasure.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DEATH, PR_NOVICE, "Allows you to cast Necromancy spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_DEATH, PR_NOVICE, "Allows you to cast Necromancy spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DEATH, PR_BEGINNER, "Allows you to cast Necromancy spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_DEATH, PR_BEGINNER, "Allows you to cast Necromancy spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DEATH, PR_ADEPT, "Allows you to cast Necromancy spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_DEATH, PR_ADEPT, "Allows you to cast Necromancy spells up to level 3.", B_FALSE);
|
||||||
|
@ -21056,7 +21062,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_DEATH, PR_EXPERT, "Allows you to cast Necromancy spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_DEATH, PR_EXPERT, "Allows you to cast Necromancy spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DEATH, PR_MASTER, "Allows you to cast Necromancy spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_DEATH, PR_MASTER, "Allows you to cast Necromancy spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_DIVINATION, "Sorcery:Divination", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_DIVINATION, "Sorcery:Divination", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_DIVINATION, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_DIVINATION, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DIVINATION, PR_NOVICE, "Allows you to cast Divination spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_DIVINATION, PR_NOVICE, "Allows you to cast Divination spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DIVINATION, PR_BEGINNER, "Allows you to cast Divination spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_DIVINATION, PR_BEGINNER, "Allows you to cast Divination spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DIVINATION, PR_ADEPT, "Allows you to cast Divination spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_DIVINATION, PR_ADEPT, "Allows you to cast Divination spells up to level 3.", B_FALSE);
|
||||||
|
@ -21064,7 +21070,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_DIVINATION, PR_EXPERT, "Allows you to cast Divination spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_DIVINATION, PR_EXPERT, "Allows you to cast Divination spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_DIVINATION, PR_MASTER, "Allows you to cast Divination spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_DIVINATION, PR_MASTER, "Allows you to cast Divination spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_FIRE, "Sorcery:Fire Magic", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_FIRE, "Sorcery:Fire Magic", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_FIRE, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_FIRE, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_FIRE, PR_NOVICE, "Allows you to cast Fire Magic spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_FIRE, PR_NOVICE, "Allows you to cast Fire Magic spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_FIRE, PR_BEGINNER, "Allows you to cast Fire Magic spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_FIRE, PR_BEGINNER, "Allows you to cast Fire Magic spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_FIRE, PR_ADEPT, "Allows you to cast Fire Magic spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_FIRE, PR_ADEPT, "Allows you to cast Fire Magic spells up to level 3.", B_FALSE);
|
||||||
|
@ -21072,7 +21078,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_FIRE, PR_EXPERT, "Allows you to cast Fire Magic spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_FIRE, PR_EXPERT, "Allows you to cast Fire Magic spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_FIRE, PR_MASTER, "Allows you to cast Fire Magic spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_FIRE, PR_MASTER, "Allows you to cast Fire Magic spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_COLD, "Sorcery:Cold Magic", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_COLD, "Sorcery:Cold Magic", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_COLD, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_COLD, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_COLD, PR_NOVICE, "Allows you to cast Cold Magic spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_COLD, PR_NOVICE, "Allows you to cast Cold Magic spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_COLD, PR_BEGINNER, "Allows you to cast Cold Magic spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_COLD, PR_BEGINNER, "Allows you to cast Cold Magic spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_COLD, PR_ADEPT, "Allows you to cast Cold Magic spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_COLD, PR_ADEPT, "Allows you to cast Cold Magic spells up to level 3.", B_FALSE);
|
||||||
|
@ -21080,7 +21086,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_COLD, PR_EXPERT, "Allows you to cast Cold Magic spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_COLD, PR_EXPERT, "Allows you to cast Cold Magic spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_COLD, PR_MASTER, "Allows you to cast Cold Magic spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_COLD, PR_MASTER, "Allows you to cast Cold Magic spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_LIFE, "Sorcery:Life Magic", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_LIFE, "Sorcery:Life Magic", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_LIFE, PR_INEPT, "- Spell power power depends on your Level, your Intelligence, and Glorana's pleasure.", B_FALSE);
|
addskilldesc(SK_SS_LIFE, PR_INEPT, "- Spell power depends on your Level, your Intelligence, and Glorana's pleasure.", B_FALSE);
|
||||||
addskilldesc(SK_SS_LIFE, PR_NOVICE, "Allows you to cast Life Magic spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_LIFE, PR_NOVICE, "Allows you to cast Life Magic spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_LIFE, PR_BEGINNER, "Allows you to cast Life Magic spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_LIFE, PR_BEGINNER, "Allows you to cast Life Magic spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_LIFE, PR_ADEPT, "Allows you to cast Life Magic spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_LIFE, PR_ADEPT, "Allows you to cast Life Magic spells up to level 3.", B_FALSE);
|
||||||
|
@ -21088,7 +21094,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_LIFE, PR_EXPERT, "Allows you to cast Life Magic spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_LIFE, PR_EXPERT, "Allows you to cast Life Magic spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_LIFE, PR_MASTER, "Allows you to cast Life Magic spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_LIFE, PR_MASTER, "Allows you to cast Life Magic spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_SUMMONING, "Sorcery:Summoning", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_SUMMONING, "Sorcery:Summoning", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_SUMMONING, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_SUMMONING, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_SUMMONING, PR_NOVICE, "Allows you to cast Summoning spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_SUMMONING, PR_NOVICE, "Allows you to cast Summoning spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_SUMMONING, PR_BEGINNER, "Allows you to cast Summoning spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_SUMMONING, PR_BEGINNER, "Allows you to cast Summoning spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_SUMMONING, PR_ADEPT, "Allows you to cast Summoning spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_SUMMONING, PR_ADEPT, "Allows you to cast Summoning spells up to level 3.", B_FALSE);
|
||||||
|
@ -21096,7 +21102,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_SUMMONING, PR_EXPERT, "Allows you to cast Summoning spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_SUMMONING, PR_EXPERT, "Allows you to cast Summoning spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_SUMMONING, PR_MASTER, "Allows you to cast Summoning spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_SUMMONING, PR_MASTER, "Allows you to cast Summoning spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_TRANSLOCATION, "Sorcery:Translocation", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_TRANSLOCATION, "Sorcery:Translocation", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_TRANSLOCATION, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_TRANSLOCATION, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_TRANSLOCATION, PR_NOVICE, "Allows you to cast Translocation spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_TRANSLOCATION, PR_NOVICE, "Allows you to cast Translocation spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_TRANSLOCATION, PR_BEGINNER, "Allows you to cast Translocation spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_TRANSLOCATION, PR_BEGINNER, "Allows you to cast Translocation spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_TRANSLOCATION, PR_ADEPT, "Allows you to cast Translocation spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_TRANSLOCATION, PR_ADEPT, "Allows you to cast Translocation spells up to level 3.", B_FALSE);
|
||||||
|
@ -21104,7 +21110,7 @@ void initskills(void) {
|
||||||
addskilldesc(SK_SS_TRANSLOCATION, PR_EXPERT, "Allows you to cast Translocation spells up to level 5.", B_FALSE);
|
addskilldesc(SK_SS_TRANSLOCATION, PR_EXPERT, "Allows you to cast Translocation spells up to level 5.", B_FALSE);
|
||||||
addskilldesc(SK_SS_TRANSLOCATION, PR_MASTER, "Allows you to cast Translocation spells up to level 6.", B_FALSE);
|
addskilldesc(SK_SS_TRANSLOCATION, PR_MASTER, "Allows you to cast Translocation spells up to level 6.", B_FALSE);
|
||||||
addskill(SK_SS_WILD, "Sorcery:Wild Magic", "Boosts casting of spells from this school.", 50);
|
addskill(SK_SS_WILD, "Sorcery:Wild Magic", "Boosts casting of spells from this school.", 50);
|
||||||
addskilldesc(SK_SS_WILD, PR_INEPT, "- Spell power power depends on your Level and Intelligence.", B_FALSE);
|
addskilldesc(SK_SS_WILD, PR_INEPT, "- Spell power depends on your Level and Intelligence.", B_FALSE);
|
||||||
addskilldesc(SK_SS_WILD, PR_NOVICE, "Allows you to cast Wild Magic spells up to level 1.", B_FALSE);
|
addskilldesc(SK_SS_WILD, PR_NOVICE, "Allows you to cast Wild Magic spells up to level 1.", B_FALSE);
|
||||||
addskilldesc(SK_SS_WILD, PR_BEGINNER, "Allows you to cast Wild Magic spells up to level 2.", B_FALSE);
|
addskilldesc(SK_SS_WILD, PR_BEGINNER, "Allows you to cast Wild Magic spells up to level 2.", B_FALSE);
|
||||||
addskilldesc(SK_SS_WILD, PR_ADEPT, "Allows you to cast Wild Magic spells up to level 3.", B_FALSE);
|
addskilldesc(SK_SS_WILD, PR_ADEPT, "Allows you to cast Wild Magic spells up to level 3.", B_FALSE);
|
||||||
|
|
3
defs.h
3
defs.h
|
@ -38,6 +38,7 @@
|
||||||
#define TEXT_WARN_FLY "Warning: while airborne you will not map your surroundings."
|
#define TEXT_WARN_FLY "Warning: while airborne you will not map your surroundings."
|
||||||
#define TEXT_WARN_MUTABLE "(you can now gain attributes by eating corpses)"
|
#define TEXT_WARN_MUTABLE "(you can now gain attributes by eating corpses)"
|
||||||
#define TEXT_WARN_NOXP_GOODVSPEACEFUL "Warning: Only Evil players gain XP for peaceful kills."
|
#define TEXT_WARN_NOXP_GOODVSPEACEFUL "Warning: Only Evil players gain XP for peaceful kills."
|
||||||
|
#define TEXT_WARN_TRAIN_NOBOOK "You will not be able to study spells without a spellbook. Really train?"
|
||||||
|
|
||||||
// F_SCOREBONUS text args
|
// F_SCOREBONUS text args
|
||||||
#define SCB_DONATIONS "charitable donations"
|
#define SCB_DONATIONS "charitable donations"
|
||||||
|
@ -3722,6 +3723,7 @@ enum FLAG {
|
||||||
F_AUTOCMD, // val0 = how many times to repeat this
|
F_AUTOCMD, // val0 = how many times to repeat this
|
||||||
F_LASTCMD, // text[0] = last command performed, v0/1 = x/y of cell, v2=various
|
F_LASTCMD, // text[0] = last command performed, v0/1 = x/y of cell, v2=various
|
||||||
F_WILLTHROW, // this lf will treat obid v0 as a thrown missile.
|
F_WILLTHROW, // this lf will treat obid v0 as a thrown missile.
|
||||||
|
F_CANSTUDY, // lf can study spells from school v0
|
||||||
F_CANLEARN, // lf is able to learn skill val0
|
F_CANLEARN, // lf is able to learn skill val0
|
||||||
// v1 = max lev
|
// v1 = max lev
|
||||||
F_STAMBOOST, // lf gets v0 extra stamina
|
F_STAMBOOST, // lf gets v0 extra stamina
|
||||||
|
@ -4758,6 +4760,7 @@ enum COMMAND {
|
||||||
CMD_WEAR,
|
CMD_WEAR,
|
||||||
CMD_WEILD,
|
CMD_WEILD,
|
||||||
CMD_EXCHANGE,
|
CMD_EXCHANGE,
|
||||||
|
CMD_COUNTMONEY,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct condset_s {
|
typedef struct condset_s {
|
||||||
|
|
52
io.c
52
io.c
|
@ -5420,6 +5420,53 @@ void docomms_areadangers(char *who, flagpile_t *fp, lifeform_t *lf) {
|
||||||
msg("\"I know of no %sdangers in this area.\"", (totdone) ? "other " : "");
|
msg("\"I know of no %sdangers in this area.\"", (totdone) ? "other " : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void docountmoney(lifeform_t *lf) {
|
||||||
|
int goldamt = 0,gemamt = 0,credit = 0;
|
||||||
|
int unknowncredit = 0;
|
||||||
|
char goldbuf[BUFLEN], gembuf[BUFLEN],creditbuf[BUFLEN];
|
||||||
|
object_t *o;
|
||||||
|
goldamt = countmoney(lf->pack);
|
||||||
|
|
||||||
|
for (o = lf->pack->first ; o ; o = o->next) {
|
||||||
|
if (hasflag(o->flags, F_GEM)) {
|
||||||
|
gemamt += getobvalue(o);
|
||||||
|
} else if (o->type->id == OT_CREDITCARD) {
|
||||||
|
if (isidentified(o)) {
|
||||||
|
credit += getcharges(o);
|
||||||
|
} else {
|
||||||
|
unknowncredit++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gemamt) {
|
||||||
|
snprintf(gembuf, BUFLEN, ", $%d worth of gemstones", gemamt);
|
||||||
|
} else {
|
||||||
|
strcpy(gembuf, "");
|
||||||
|
}
|
||||||
|
if (credit) {
|
||||||
|
if (unknowncredit) {
|
||||||
|
snprintf(creditbuf, BUFLEN, " and at least $%d credit", credit);
|
||||||
|
} else {
|
||||||
|
snprintf(creditbuf, BUFLEN, " and $%d credit", credit);
|
||||||
|
}
|
||||||
|
} else if (unknowncredit) {
|
||||||
|
if (unknowncredit == 1) {
|
||||||
|
snprintf(creditbuf, BUFLEN, " and a stolen credit card");
|
||||||
|
} else {
|
||||||
|
snprintf(creditbuf, BUFLEN, " and %d stolen credit cards", unknowncredit);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
strcpy(creditbuf, "");
|
||||||
|
}
|
||||||
|
if (goldamt == 0) {
|
||||||
|
sprintf(goldbuf, "no money");
|
||||||
|
} else {
|
||||||
|
sprintf(goldbuf, "$%d", goldamt);
|
||||||
|
}
|
||||||
|
msg("You have %s%s%s.", goldbuf, gembuf, creditbuf);
|
||||||
|
}
|
||||||
|
|
||||||
void dodrop(obpile_t *op, int wantmulti, obpile_t *dst) {
|
void dodrop(obpile_t *op, int wantmulti, obpile_t *dst) {
|
||||||
object_t *o;
|
object_t *o;
|
||||||
char buf[BUFLEN];
|
char buf[BUFLEN];
|
||||||
|
@ -7722,7 +7769,7 @@ char *makedesc_ob(object_t *o, char *retbuf) {
|
||||||
sprintf(buf, " - %s", contentname);
|
sprintf(buf, " - %s", contentname);
|
||||||
if ((o->type->id == OT_SPELLBOOK) || (o->type->id == OT_GRIMOIRE)) {
|
if ((o->type->id == OT_SPELLBOOK) || (o->type->id == OT_GRIMOIRE)) {
|
||||||
char lbuf[BUFLEN];
|
char lbuf[BUFLEN];
|
||||||
sprintf(lbuf, " (Lv %d)%s", getspelllevel(oo->type->id),
|
sprintf(lbuf, " (Lv %d %s)%s", getspelllevel(oo->type->id), getschoolname(getspellschool(oo->type->id)),
|
||||||
lfhasflagval(player, F_CANCAST, oo->type->id, NA, NA, NULL) ?
|
lfhasflagval(player, F_CANCAST, oo->type->id, NA, NA, NULL) ?
|
||||||
" [known]" : "");
|
" [known]" : "");
|
||||||
strcat(buf, lbuf);
|
strcat(buf, lbuf);
|
||||||
|
@ -11170,6 +11217,9 @@ void handleinput(void) {
|
||||||
case CMD_INV: // inventory
|
case CMD_INV: // inventory
|
||||||
doinventory(player->pack);
|
doinventory(player->pack);
|
||||||
break;
|
break;
|
||||||
|
case CMD_COUNTMONEY: // count money
|
||||||
|
docountmoney(player);
|
||||||
|
break;
|
||||||
case CMD_INFOPLAYER: // display player stats
|
case CMD_INFOPLAYER: // display player stats
|
||||||
showlfstats(player, B_FALSE);
|
showlfstats(player, B_FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
1
io.h
1
io.h
|
@ -57,6 +57,7 @@ void docomms(lifeform_t *target);
|
||||||
void docommslf(lifeform_t *lf, char ch, lifeform_t *lf2, cell_t *targc);
|
void docommslf(lifeform_t *lf, char ch, lifeform_t *lf2, cell_t *targc);
|
||||||
void docomms_areainfo(char *who, flagpile_t *fp, lifeform_t *lf);
|
void docomms_areainfo(char *who, flagpile_t *fp, lifeform_t *lf);
|
||||||
void docomms_areadangers(char *who, flagpile_t *fp, lifeform_t *lf);
|
void docomms_areadangers(char *who, flagpile_t *fp, lifeform_t *lf);
|
||||||
|
void docountmoney(lifeform_t *lf);
|
||||||
void dodrop(obpile_t *op, int wantmulti, obpile_t *dst);
|
void dodrop(obpile_t *op, int wantmulti, obpile_t *dst);
|
||||||
void doeat(obpile_t *op);
|
void doeat(obpile_t *op);
|
||||||
void doenter(lifeform_t *lf);
|
void doenter(lifeform_t *lf);
|
||||||
|
|
264
lf.c
264
lf.c
|
@ -719,6 +719,12 @@ int cancast(lifeform_t *lf, enum OBTYPE oid, int *mpcost) {
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
objecttype_t *ot;
|
objecttype_t *ot;
|
||||||
int stamcost = 0;
|
int stamcost = 0;
|
||||||
|
|
||||||
|
if (mpcost) {
|
||||||
|
// default to base cost
|
||||||
|
*mpcost = getmpcost(lf, oid);
|
||||||
|
}
|
||||||
|
|
||||||
if (lfhasflag(lf, F_SILENCED)) {
|
if (lfhasflag(lf, F_SILENCED)) {
|
||||||
reason = E_SILENCED;
|
reason = E_SILENCED;
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
|
@ -1565,6 +1571,48 @@ int cansleep(lifeform_t *lf) {
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int canstudyspell(lifeform_t *lf, enum OBTYPE spellid) {
|
||||||
|
//object_t *o;
|
||||||
|
//int hasbook = B_FALSE;
|
||||||
|
enum SPELLSCHOOL school;
|
||||||
|
school = getspellschool(spellid);
|
||||||
|
|
||||||
|
switch (school) {
|
||||||
|
case SS_NATURE:
|
||||||
|
case SS_ALLOMANCY:
|
||||||
|
case SS_LIFE:
|
||||||
|
case SS_MENTAL:
|
||||||
|
return B_FALSE;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lfhasflagval(lf, F_CANSTUDY, school, NA, NA, NULL)) return B_FALSE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
// must have a spellbook to record the spell in.
|
||||||
|
for (o = lf->pack->first ; o ; o = o->next) {
|
||||||
|
if (o->type->id == OT_SPELLBOOK) {
|
||||||
|
if (hasflagval(o->flags, F_LINKSCHOOL, school, NA, NA, NULL)) {
|
||||||
|
hasbook = B_TRUE;
|
||||||
|
}
|
||||||
|
} else if (o->type->id == OT_GRIMOIRE) {
|
||||||
|
hasbook = B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasbook) return B_FALSE;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
if (lf->skillpoints < getspelllevel(spellid)) return B_FALSE; // too high a level
|
||||||
|
|
||||||
|
if (!spelllearnable(lf, spellid)) return B_FALSE; // too high powered ?
|
||||||
|
|
||||||
|
|
||||||
|
return B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
int canthrow(lifeform_t *lf, object_t *o, enum ERROR *why) {
|
int canthrow(lifeform_t *lf, object_t *o, enum ERROR *why) {
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
if (why) *why = E_OK;
|
if (why) *why = E_OK;
|
||||||
|
@ -5766,7 +5814,10 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
char eorl = 'e';
|
char eorl = 'e';
|
||||||
int skillstoenhance = 0;
|
int skillstoenhance = 0;
|
||||||
int skillstolearn = 0;
|
int skillstolearn = 0;
|
||||||
|
int magictolearn = 0;
|
||||||
int done = B_FALSE;
|
int done = B_FALSE;
|
||||||
|
obpile_t *spells;
|
||||||
|
objecttype_t *ot;
|
||||||
|
|
||||||
skillstoenhance = 0;
|
skillstoenhance = 0;
|
||||||
for (f = lf->flags->first ; f ; f = f->next) {
|
for (f = lf->flags->first ; f ; f = f->next) {
|
||||||
|
@ -5786,28 +5837,57 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// construct list of spells you can study
|
||||||
|
//
|
||||||
|
// can study a spell if:
|
||||||
|
// - it's not a nature spell.
|
||||||
|
// - player can't already cast it
|
||||||
|
// - player is skilled in at least one of the spell's schools.
|
||||||
|
// - player is a high enough level to cast the spell.
|
||||||
|
// - player has sufficient training points
|
||||||
|
magictolearn = 0;
|
||||||
|
spells = addobpile(NOOWNER, NOLOC, NULL);
|
||||||
|
|
||||||
while (!done && lf->skillpoints && (skillstolearn || skillstoenhance)) {
|
for (ot = objecttype ; ot ; ot = ot->next) {
|
||||||
|
if (ot->obclass->id != OC_SPELL) continue;
|
||||||
|
if (!canstudyspell(lf, ot->id)) continue;
|
||||||
|
|
||||||
|
// spell is learnable - add to the list
|
||||||
|
addobfast(spells, ot->id);
|
||||||
|
magictolearn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!done && lf->skillpoints && (skillstolearn || skillstoenhance || magictolearn)) {
|
||||||
|
char q[BUFLEN],buf2[BUFLEN],validchars[BUFLEN];
|
||||||
|
char defchar[BUFLEN];
|
||||||
|
|
||||||
|
strcpy(q, "");
|
||||||
|
strcpy(validchars, "n");
|
||||||
|
strcpy(defchar, "n");
|
||||||
if (skillstolearn) {
|
if (skillstolearn) {
|
||||||
char buf[BUFLEN];
|
strcat(q, "(E)nhance");
|
||||||
|
strcat(validchars, "e");
|
||||||
|
strcpy(defchar, "e");
|
||||||
|
}
|
||||||
if (skillstoenhance) {
|
if (skillstoenhance) {
|
||||||
snprintf(buf, BUFLEN, "(E)nhance skills, (L)earn skills, or (N)one (%d points left)?",lf->skillpoints);
|
if (strlen(q)) {
|
||||||
eorl = askchar(buf,"eln","e", B_TRUE, B_FALSE);
|
strcat(q, "/");
|
||||||
} else {
|
|
||||||
snprintf(buf, BUFLEN,"Learn a new skill (%d points left)?",lf->skillpoints);
|
|
||||||
ch = askchar(buf,"yn","y", B_TRUE, B_FALSE);
|
|
||||||
if (ch == 'y') eorl = 'l';
|
|
||||||
else eorl = 'n';
|
|
||||||
}
|
}
|
||||||
} else if (skillstoenhance) {
|
strcat(q, "(L)earn");
|
||||||
char buf[BUFLEN];
|
strcat(validchars, "l");
|
||||||
snprintf(buf, BUFLEN,"Enhance your current skills (%d points left)?",lf->skillpoints);
|
|
||||||
ch = askchar(buf,"yn","y", B_TRUE, B_FALSE);
|
|
||||||
if (ch == 'y') eorl = 'e';
|
|
||||||
else eorl = 'n';
|
|
||||||
} else {
|
|
||||||
eorl = 'n';
|
|
||||||
}
|
}
|
||||||
|
strcat(q, " skills");
|
||||||
|
|
||||||
|
if (magictolearn && !lfhasflag(lf, F_NOSPELLS)) {
|
||||||
|
strcat(q, ", study (M)agic");
|
||||||
|
strcat(validchars, "m");
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(q, " or (N)one");
|
||||||
|
snprintf(buf2, BUFLEN, " [%d trn left]",lf->skillpoints); // ooo add color?
|
||||||
|
strcat(q, buf2);
|
||||||
|
|
||||||
|
eorl = askchar(q,validchars,defchar, B_TRUE, B_FALSE);
|
||||||
|
|
||||||
if (eorl == 'e') {
|
if (eorl == 'e') {
|
||||||
// enhance an existing skill
|
// enhance an existing skill
|
||||||
|
@ -5905,10 +5985,113 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
msg("There is nothing more that you can learn.");
|
msg("There is nothing more that you can learn.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (eorl == 'm') {
|
||||||
|
object_t *o = NULL;
|
||||||
|
int schoolok[SS_LAST],i;
|
||||||
|
// select a magic spell
|
||||||
|
|
||||||
|
// get a list of possible schools
|
||||||
|
for (i = 0; i < SS_LAST; i++) {
|
||||||
|
schoolok[i] = B_FALSE;
|
||||||
|
}
|
||||||
|
for (o = spells->first ; o ; o = o->next) {
|
||||||
|
enum SPELLSCHOOL school;
|
||||||
|
school = getspellschoolknown(lf, o->type->id);
|
||||||
|
schoolok[school] = B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ask which school
|
||||||
|
initprompt(&prompt, "Learn a spell from which school?");
|
||||||
|
ch = 'a';
|
||||||
|
for (i = 0; i < SS_LAST; i++) {
|
||||||
|
if (schoolok[i]) {
|
||||||
|
addchoice(&prompt, i, getschoolname(i), NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addchoice(&prompt, '\0', "(none)", NULL, NULL, NULL);
|
||||||
|
ch = getchoicestr(&prompt, B_FALSE, B_TRUE);
|
||||||
|
|
||||||
|
if (ch != '\0') {
|
||||||
|
char ques[BUFLEN];
|
||||||
|
snprintf(ques, BUFLEN, "Learn which spell (%d point%s left)?", lf->skillpoints,
|
||||||
|
(lf->skillpoints == 1) ? "" : "s");
|
||||||
|
|
||||||
|
initprompt(&prompt, ques);
|
||||||
|
|
||||||
|
// ask which spell from that school
|
||||||
|
for (o = spells->first ; o ; o = o->next) {
|
||||||
|
enum SPELLSCHOOL school;
|
||||||
|
school = getspellschoolknown(lf, o->type->id);
|
||||||
|
if (school == ch) {
|
||||||
|
char buf[BUFLEN];
|
||||||
|
snprintf(buf, BUFLEN, "%s (%s) [%d points]", o->type->name,
|
||||||
|
getschoolname(school),
|
||||||
|
getspelllevel(o->type->id) );
|
||||||
|
|
||||||
|
addchoice(&prompt, o->type->id, o->type->name, buf, o, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addchoice(&prompt, '-', "(none)", NULL, NULL, NULL);
|
||||||
|
|
||||||
|
getchoicestr(&prompt, B_FALSE, B_TRUE);
|
||||||
|
o = prompt.result;
|
||||||
|
if (o) {
|
||||||
|
if (prompt.whichq == 0) {
|
||||||
|
|
||||||
|
learnspell(lf, o->type->id, B_TRUE);
|
||||||
|
player->skillpoints -= getspelllevel(o->type->id);
|
||||||
|
done = B_TRUE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
char bookname[BUFLEN];
|
||||||
|
enum SPELLSCHOOL school;
|
||||||
|
school = getspellschoolknown(lf, o->type->id);
|
||||||
|
object_t *book;
|
||||||
|
|
||||||
|
// add it to a spellbook.
|
||||||
|
snprintf(ques, BUFLEN, "Which spellbook will you record '%s' in?", o->type->name);
|
||||||
|
initprompt(&prompt, ques);
|
||||||
|
for (book = lf->pack->first ; book ; book = book->next) {
|
||||||
|
int ok = B_FALSE;
|
||||||
|
if (book->type->id == OT_SPELLBOOK) {
|
||||||
|
if (hasflagval(book->flags, F_LINKSCHOOL, school, NA, NA, NULL)) {
|
||||||
|
ok = B_TRUE;
|
||||||
|
}
|
||||||
|
} else if (book->type->id == OT_GRIMOIRE) {
|
||||||
|
ok = B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ok) {
|
||||||
|
addchoice(&prompt, book->letter, book->type->name, NULL, book, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// prompt for which spellbook.
|
||||||
|
if (prompt.nchoices == 1) {
|
||||||
|
book = prompt.choice[0].data;
|
||||||
|
} else {
|
||||||
|
getchoice(&prompt);
|
||||||
|
book = (object_t *)prompt.result;
|
||||||
|
}
|
||||||
|
assert(book != NULL);
|
||||||
|
addobfast(book->contents, o->type->id);
|
||||||
|
|
||||||
|
getobname(book, bookname, 1);
|
||||||
|
msg("'%s' added to %s.", o->type->name, bookname);
|
||||||
|
*/
|
||||||
|
} else {
|
||||||
|
describespell(o->type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (eorl == 'n') {
|
} else if (eorl == 'n') {
|
||||||
done = B_TRUE;
|
done = B_TRUE;
|
||||||
} // end enhance/learnnew
|
} // end enhance/learnnew
|
||||||
} // whiel skillstolearn || skillstoenhance
|
} // whiel skillstolearn || skillstoenhance
|
||||||
|
|
||||||
|
// free list of possible spells
|
||||||
|
killobpile(spells);
|
||||||
|
|
||||||
statdirty = B_TRUE;
|
statdirty = B_TRUE;
|
||||||
} else if (lf->skillpoints) {
|
} else if (lf->skillpoints) {
|
||||||
// monsters will just enhance a random skill, they never learn new ones.
|
// monsters will just enhance a random skill, they never learn new ones.
|
||||||
|
@ -5946,8 +6129,7 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
ff = giveskill(lf, f->val[1]);
|
ff = giveskill(lf, f->val[1]);
|
||||||
ff->fromlev = lf->level;
|
ff->fromlev = lf->level;
|
||||||
} else if ((f->id == F_LEVSPELL) && !lfhasflag(lf, F_NOSPELLS)) {
|
} else if ((f->id == F_LEVSPELL) && !lfhasflag(lf, F_NOSPELLS)) {
|
||||||
ff = addtempflag(lf->flags, F_CANCAST, f->val[1], NA, NA, NULL, FROMJOB);
|
learnspell(lf, f->val[1], B_TRUE);
|
||||||
ff->fromlev = lf->level;
|
|
||||||
} else if ((f->id == F_LEVSPELLSCHOOL) && !lfhasflag(lf, F_NOSPELLS)) { // select a spell from school
|
} else if ((f->id == F_LEVSPELLSCHOOL) && !lfhasflag(lf, F_NOSPELLS)) { // select a spell from school
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
select_new_spell(f->val[1], lf->level);
|
select_new_spell(f->val[1], lf->level);
|
||||||
|
@ -5959,8 +6141,7 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
// pick one randomly
|
// pick one randomly
|
||||||
ot = (objecttype_t *)prompt.choice[rnd(0,prompt.nchoices-1)].data;
|
ot = (objecttype_t *)prompt.choice[rnd(0,prompt.nchoices-1)].data;
|
||||||
if (ot) {
|
if (ot) {
|
||||||
ff = addtempflag(lf->flags, F_CANCAST, ot->id, NA, NA, NULL, FROMJOB);
|
learnspell(lf, ot->id, B_TRUE);
|
||||||
ff->fromlev = lf->level;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6031,8 +6212,7 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
ot = prompt.result;
|
ot = prompt.result;
|
||||||
if (ot) {
|
if (ot) {
|
||||||
if (prompt.whichq == 0) { // learn the spell
|
if (prompt.whichq == 0) { // learn the spell
|
||||||
ff = addtempflag(lf->flags, F_CANCAST, ot->id, NA, NA, NULL, FROMJOB);
|
learnspell(lf, ot->id, B_TRUE);
|
||||||
ff->fromlev = lf->level;
|
|
||||||
done = B_TRUE;
|
done = B_TRUE;
|
||||||
} else {
|
} else {
|
||||||
describespell(ot);
|
describespell(ot);
|
||||||
|
@ -6048,8 +6228,7 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
// pick randomly
|
// pick randomly
|
||||||
ot = (objecttype_t *)prompt.choice[rnd(0,prompt.nchoices-1)].data;
|
ot = (objecttype_t *)prompt.choice[rnd(0,prompt.nchoices-1)].data;
|
||||||
if (ot) {
|
if (ot) {
|
||||||
ff = addtempflag(lf->flags, F_CANCAST, ot->id, NA, NA, NULL, FROMJOB);
|
learnspell(lf, ot->id, B_TRUE);
|
||||||
ff->fromlev = lf->level;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7154,10 +7333,6 @@ void gainxp(lifeform_t *lf, long amt) {
|
||||||
amtneeded = getspforpoint(lf);
|
amtneeded = getspforpoint(lf);
|
||||||
if (isplayer(lf)) statdirty = B_TRUE;
|
if (isplayer(lf)) statdirty = B_TRUE;
|
||||||
}
|
}
|
||||||
// debug!
|
|
||||||
if (newskillpoints >= 5) {
|
|
||||||
raise(SIGINT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ready for next level? can only go up ONE level.
|
// ready for next level? can only go up ONE level.
|
||||||
|
@ -11607,24 +11782,13 @@ int getteachableskills(lifeform_t *teacher, lifeform_t *student, int *info, enum
|
||||||
for (i = 0; i < nretflags; i++) {
|
for (i = 0; i < nretflags; i++) {
|
||||||
objecttype_t *spell;
|
objecttype_t *spell;
|
||||||
enum OBTYPE spellid;
|
enum OBTYPE spellid;
|
||||||
enum SPELLSCHOOL knownschool;
|
|
||||||
int teachable = B_FALSE;
|
int teachable = B_FALSE;
|
||||||
f = retflag[i];
|
f = retflag[i];
|
||||||
spellid = f->val[0];
|
spellid = f->val[0];
|
||||||
spell = findot(spellid);
|
spell = findot(spellid);
|
||||||
if (spell->obclass->id != OC_SPELL) continue;
|
if (spell->obclass->id != OC_SPELL) continue;
|
||||||
|
|
||||||
// student skilled in one of the spell's schools?
|
teachable = spelllearnable(student, spellid);
|
||||||
knownschool = getspellschoolknown(student, spellid);
|
|
||||||
if (getskill(student, getschoolskill(knownschool))) {
|
|
||||||
int mpneeded;
|
|
||||||
if (!cancast(student, spellid, &mpneeded) && (getspellpower(student, spellid) > 0)) {
|
|
||||||
if (getmaxmp(student) >= mpneeded) {
|
|
||||||
teachable = B_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (teachable) {
|
if (teachable) {
|
||||||
info[*ninfo] = spellid;
|
info[*ninfo] = spellid;
|
||||||
tradetype[*ninfo] = TI_SPELL;
|
tradetype[*ninfo] = TI_SPELL;
|
||||||
|
@ -12107,7 +12271,7 @@ void givejob(lifeform_t *lf, enum JOB jobid) {
|
||||||
spell = getrandomspellfromschool(SS_NATURE, 1);
|
spell = getrandomspellfromschool(SS_NATURE, 1);
|
||||||
}
|
}
|
||||||
// you can now cast it.
|
// you can now cast it.
|
||||||
addtempflag(lf->flags, F_CANCAST, spell, NA, NA, NULL, FROMJOB);
|
learnspell(lf, spell, B_FALSE);
|
||||||
}
|
}
|
||||||
// druids always worship ekrub
|
// druids always worship ekrub
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
|
@ -16774,7 +16938,10 @@ void autolearnspellsfrombook(lifeform_t *lf, object_t *book) {
|
||||||
if ((getspellschoolknown(lf, o->type->id) != SS_NONE) &&
|
if ((getspellschoolknown(lf, o->type->id) != SS_NONE) &&
|
||||||
!hasflagval(lf->flags, F_CANCAST, o->type->id, NA, NA, NULL) &&
|
!hasflagval(lf->flags, F_CANCAST, o->type->id, NA, NA, NULL) &&
|
||||||
(getspellpower(lf, o->type->id) > 0)) {
|
(getspellpower(lf, o->type->id) > 0)) {
|
||||||
addtempflag(lf->flags, F_CANCAST, o->type->id, NA, NA, NULL, FROMJOB);
|
|
||||||
|
//addtempflag(lf->flags, F_CANCAST, o->type->id, NA, NA, NULL, FROMJOB);
|
||||||
|
learnspell(lf, o->type->id, B_FALSE);
|
||||||
|
|
||||||
//if (isplayer(lf)) {
|
//if (isplayer(lf)) {
|
||||||
// autoshortcut(lf, o->type->id);
|
// autoshortcut(lf, o->type->id);
|
||||||
//}
|
//}
|
||||||
|
@ -17321,6 +17488,17 @@ void killsubjob(subjob_t *sj) {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void learnspell(lifeform_t *lf, enum OBTYPE sid, int fromlevelup) {
|
||||||
|
flag_t *ff;
|
||||||
|
|
||||||
|
// learn the spell
|
||||||
|
ff = addtempflag(lf->flags, F_CANCAST, sid, NA, NA, NULL, FROMJOB);
|
||||||
|
assert(ff);
|
||||||
|
if (fromlevelup) {
|
||||||
|
ff->fromlev = lf->level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
flag_t *levelabilityready(lifeform_t *lf) {
|
flag_t *levelabilityready(lifeform_t *lf) {
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
int i;
|
int i;
|
||||||
|
|
2
lf.h
2
lf.h
|
@ -71,6 +71,7 @@ int cansee(lifeform_t *viewer, lifeform_t *viewee);
|
||||||
int cansee_real(lifeform_t *viewer, lifeform_t *viewee, int uselos);
|
int cansee_real(lifeform_t *viewer, lifeform_t *viewee, int uselos);
|
||||||
int canshoot(lifeform_t *lf, enum ERROR *why);
|
int canshoot(lifeform_t *lf, enum ERROR *why);
|
||||||
int cansleep(lifeform_t *lf);
|
int cansleep(lifeform_t *lf);
|
||||||
|
int canstudyspell(lifeform_t *lf, enum OBTYPE spellid);
|
||||||
int canthrow(lifeform_t *lf, object_t *o, enum ERROR *why);
|
int canthrow(lifeform_t *lf, object_t *o, enum ERROR *why);
|
||||||
int canuseweapons(lifeform_t *lf);
|
int canuseweapons(lifeform_t *lf);
|
||||||
int canwear(lifeform_t *lf, object_t *o, enum BODYPART where);
|
int canwear(lifeform_t *lf, object_t *o, enum BODYPART where);
|
||||||
|
@ -426,6 +427,7 @@ void killlf(lifeform_t *lf);
|
||||||
void killpoisontype(poisontype_t *pt);
|
void killpoisontype(poisontype_t *pt);
|
||||||
void killrace(race_t *race);
|
void killrace(race_t *race);
|
||||||
//void killsubjob(subjob_t *sj);
|
//void killsubjob(subjob_t *sj);
|
||||||
|
void learnspell(lifeform_t *lf, enum OBTYPE sid, int fromlevelup);
|
||||||
flag_t *levelabilityready(lifeform_t *lf);
|
flag_t *levelabilityready(lifeform_t *lf);
|
||||||
int loadfirearm(lifeform_t *lf, object_t *gun, object_t *ammo);
|
int loadfirearm(lifeform_t *lf, object_t *gun, object_t *ammo);
|
||||||
int loadfirearmfast(lifeform_t *lf, int onpurpose);
|
int loadfirearmfast(lifeform_t *lf, int onpurpose);
|
||||||
|
|
|
@ -6023,7 +6023,7 @@ char *getobextrainfo(object_t *o, char *buf) {
|
||||||
}
|
}
|
||||||
} else if (o->type->id == OT_CREDITCARD) {
|
} else if (o->type->id == OT_CREDITCARD) {
|
||||||
if (f->val[0] > 0) {
|
if (f->val[0] > 0) {
|
||||||
snprintf(chargestr, BUFLEN, " ($%d balance)",f->val[0]);
|
snprintf(chargestr, BUFLEN, " ($%d credit)",f->val[0]);
|
||||||
} else {
|
} else {
|
||||||
snprintf(chargestr, BUFLEN, " (maxed out)");
|
snprintf(chargestr, BUFLEN, " (maxed out)");
|
||||||
}
|
}
|
||||||
|
|
36
spell.c
36
spell.c
|
@ -2866,6 +2866,23 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef
|
||||||
// safe to train?
|
// safe to train?
|
||||||
if (check_rest_ok(user)) return B_TRUE;
|
if (check_rest_ok(user)) return B_TRUE;
|
||||||
|
|
||||||
|
// warn if we're a mage training without a spellbook
|
||||||
|
/*
|
||||||
|
f = lfhasflag(user, F_CANSTUDY);
|
||||||
|
if (f) {
|
||||||
|
if (!hasobwithflagval(user->pack, F_LINKSCHOOL, f->val[0], NA, NA, NULL) &&
|
||||||
|
!hasob(user->pack, OT_GRIMOIRE)) {
|
||||||
|
char buf[BUFLEN];
|
||||||
|
snprintf(buf, BUFLEN, "You cannot study %s without a spellbook. Continue", getschoolname(f->val[0]));
|
||||||
|
// warn
|
||||||
|
if (!real_warnabout(buf, DEF_WARNINGTIME, B_TRUE)) {
|
||||||
|
return B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
// start training!
|
// start training!
|
||||||
if (!startresting(user, B_TRUE)) {
|
if (!startresting(user, B_TRUE)) {
|
||||||
// do the first one right away
|
// do the first one right away
|
||||||
|
@ -15608,6 +15625,25 @@ int spellisfromschool(int spellid, enum SPELLSCHOOL school) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int spelllearnable(lifeform_t *lf, enum OBTYPE spellid) {
|
||||||
|
enum SPELLSCHOOL knownschool;
|
||||||
|
int ok = B_FALSE;
|
||||||
|
|
||||||
|
// skilled in one of the spell's schools?
|
||||||
|
knownschool = getspellschoolknown(lf, spellid);
|
||||||
|
if (getskill(lf, getschoolskill(knownschool))) {
|
||||||
|
int mpneeded;
|
||||||
|
if (!cancast(lf, spellid, &mpneeded)) {
|
||||||
|
if (getspellpower(lf, spellid) > 0) {
|
||||||
|
if (getmaxmp(lf) >= mpneeded) {
|
||||||
|
ok = B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
int spellokformonsters(int spellid) {
|
int spellokformonsters(int spellid) {
|
||||||
objecttype_t *sp;
|
objecttype_t *sp;
|
||||||
sp = findot(spellid);
|
sp = findot(spellid);
|
||||||
|
|
1
spell.h
1
spell.h
|
@ -40,6 +40,7 @@ void pullobto(object_t *o, lifeform_t *lf);
|
||||||
int schoolappearsinbooks(enum SPELLSCHOOL ss);
|
int schoolappearsinbooks(enum SPELLSCHOOL ss);
|
||||||
void spellcloud(cell_t *srcloc, int radius, int dirtype, int ch, enum COLOUR col, enum OBTYPE sid, int power, int frompot, char *seetext, char *noseetext, int aimedateyes, object_t *fromob, int includecentre);
|
void spellcloud(cell_t *srcloc, int radius, int dirtype, int ch, enum COLOUR col, enum OBTYPE sid, int power, int frompot, char *seetext, char *noseetext, int aimedateyes, object_t *fromob, int includecentre);
|
||||||
int spellisfromschool(int spellid, enum SPELLSCHOOL school);
|
int spellisfromschool(int spellid, enum SPELLSCHOOL school);
|
||||||
|
int spelllearnable(lifeform_t *lf, enum OBTYPE spellid);
|
||||||
int spellokformonsters(int spellid);
|
int spellokformonsters(int spellid);
|
||||||
int spellresisted(lifeform_t *target, lifeform_t *caster, int spellid, int power, int *seenbyplayer, int announce);
|
int spellresisted(lifeform_t *target, lifeform_t *caster, int spellid, int power, int *seenbyplayer, int announce);
|
||||||
int stopspell(lifeform_t *caster, enum OBTYPE spellid);
|
int stopspell(lifeform_t *caster, enum OBTYPE spellid);
|
||||||
|
|
Loading…
Reference in New Issue