This commit is contained in:
parent
4ddc70a314
commit
5f393e02e0
4
attack.c
4
attack.c
|
@ -202,7 +202,9 @@ int attacklf(lifeform_t *lf, lifeform_t *victim) {
|
||||||
|
|
||||||
if (!willheal) {
|
if (!willheal) {
|
||||||
// modify for strength
|
// modify for strength
|
||||||
dam[ndam] = (int)((float)dam[ndam] * getstrdammod(lf));
|
if (!hasflag(wep->flags, F_NOSTRDAMMOD) && !lfhasflag(lf, F_NOSTRDAMMOD)) {
|
||||||
|
dam[ndam] = (int)((float)dam[ndam] * getstrdammod(lf));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// damtype?
|
// damtype?
|
||||||
|
|
27
defs.h
27
defs.h
|
@ -373,6 +373,7 @@ enum OBCLASS {
|
||||||
OC_FOOD,
|
OC_FOOD,
|
||||||
OC_CORPSE,
|
OC_CORPSE,
|
||||||
OC_ROCK,
|
OC_ROCK,
|
||||||
|
OC_TOOLS,
|
||||||
OC_TECH,
|
OC_TECH,
|
||||||
OC_MISC,
|
OC_MISC,
|
||||||
OC_SPELL,
|
OC_SPELL,
|
||||||
|
@ -738,8 +739,14 @@ enum OBTYPE {
|
||||||
OT_WAND_SLOW,
|
OT_WAND_SLOW,
|
||||||
OT_WAND_WEAKNESS,
|
OT_WAND_WEAKNESS,
|
||||||
OT_WAND_WONDER,
|
OT_WAND_WONDER,
|
||||||
// tech/tools
|
// tools
|
||||||
OT_BLINDFOLD,
|
OT_BLINDFOLD,
|
||||||
|
OT_BUGLAMP,
|
||||||
|
OT_GUNPOWDER,
|
||||||
|
OT_LANTERNOIL,
|
||||||
|
OT_LOCKPICK,
|
||||||
|
OT_PICKAXE,
|
||||||
|
// tech
|
||||||
OT_POCKETWATCH,
|
OT_POCKETWATCH,
|
||||||
OT_C4,
|
OT_C4,
|
||||||
OT_CREDITCARD,
|
OT_CREDITCARD,
|
||||||
|
@ -749,15 +756,11 @@ enum OBTYPE {
|
||||||
OT_INFOVISOR,
|
OT_INFOVISOR,
|
||||||
OT_INSECTICIDE,
|
OT_INSECTICIDE,
|
||||||
OT_JETPACK,
|
OT_JETPACK,
|
||||||
OT_BUGLAMP,
|
|
||||||
OT_LANTERNLED,
|
OT_LANTERNLED,
|
||||||
OT_LANTERNOIL,
|
|
||||||
OT_LOCKHACKER,
|
OT_LOCKHACKER,
|
||||||
OT_LOCKPICK,
|
|
||||||
OT_MOTIONSCANNER,
|
OT_MOTIONSCANNER,
|
||||||
OT_NVGOGGLES,
|
OT_NVGOGGLES,
|
||||||
OT_PAPERCLIP,
|
OT_PAPERCLIP,
|
||||||
OT_PICKAXE,
|
|
||||||
OT_TELEPAD,
|
OT_TELEPAD,
|
||||||
OT_XRAYGOGGLES,
|
OT_XRAYGOGGLES,
|
||||||
// misc objects
|
// misc objects
|
||||||
|
@ -1010,7 +1013,9 @@ enum FLAG {
|
||||||
// v0 is target requirements (los/lof)
|
// v0 is target requirements (los/lof)
|
||||||
// text is prompt
|
// text is prompt
|
||||||
F_OPERNEEDDIR, // need to ask a direction when operating this. text is prompt
|
F_OPERNEEDDIR, // need to ask a direction when operating this. text is prompt
|
||||||
// what can ou do with this object?
|
// technology flags
|
||||||
|
F_TECHLEVEL, // v0 is a PR_xxx enum for tech usage skill
|
||||||
|
// what can you do with this object?
|
||||||
F_EDIBLE, // you can eat this. val2 = nutrition. 100 = a meal
|
F_EDIBLE, // you can eat this. val2 = nutrition. 100 = a meal
|
||||||
// -1 means "nutrition is weight x abs(val1)"
|
// -1 means "nutrition is weight x abs(val1)"
|
||||||
F_OPERABLE, // can operate?
|
F_OPERABLE, // can operate?
|
||||||
|
@ -1034,7 +1039,7 @@ enum FLAG {
|
||||||
F_SHARP, // does damage when you step on it. v0/1 are min/max dam
|
F_SHARP, // does damage when you step on it. v0/1 are min/max dam
|
||||||
F_SLIPPERY, // you might slip when stepping on it. v0 is amt
|
F_SLIPPERY, // you might slip when stepping on it. v0 is amt
|
||||||
F_SLIPMOVE, // if someone slips on this, it will move to an adj cell
|
F_SLIPMOVE, // if someone slips on this, it will move to an adj cell
|
||||||
F_FLAMMABLE, // object will catch alight if burnt
|
F_FLAMMABLE, // object will catch alight if burnt (ie fire damage)
|
||||||
// object mods/effects
|
// object mods/effects
|
||||||
F_ONFIRE, // burning, also deals extra fire damage
|
F_ONFIRE, // burning, also deals extra fire damage
|
||||||
F_HEADLESS, // for corpses. can go on LFs too.
|
F_HEADLESS, // for corpses. can go on LFs too.
|
||||||
|
@ -1062,6 +1067,8 @@ enum FLAG {
|
||||||
F_DONTSHOWCHARGES, // don't show 'xx charges left' when id'd
|
F_DONTSHOWCHARGES, // don't show 'xx charges left' when id'd
|
||||||
F_RECHARGEWHENOFF, // get power back when you turn it off
|
F_RECHARGEWHENOFF, // get power back when you turn it off
|
||||||
F_REFILLWITH, // pour obj id val0 onto this to refill its charges
|
F_REFILLWITH, // pour obj id val0 onto this to refill its charges
|
||||||
|
//
|
||||||
|
F_POWDER, // this item is a powder
|
||||||
// ob appearance flags
|
// ob appearance flags
|
||||||
F_SHINY,
|
F_SHINY,
|
||||||
// armour flags
|
// armour flags
|
||||||
|
@ -1093,6 +1100,9 @@ enum FLAG {
|
||||||
F_AIBOOSTITEM, // ai will use this item to boost/buff itself
|
F_AIBOOSTITEM, // ai will use this item to boost/buff itself
|
||||||
F_AIHEALITEM, // ai will use this item when low on hp
|
F_AIHEALITEM, // ai will use this item when low on hp
|
||||||
F_AIFLEEITEM, // ai will use this item when fleeing
|
F_AIFLEEITEM, // ai will use this item when fleeing
|
||||||
|
// object _AND_ lifeform flags
|
||||||
|
F_NOSTRDAMMOD, // this object/lf does not have attacks modified
|
||||||
|
// using their strength
|
||||||
// lifeform flags
|
// lifeform flags
|
||||||
F_DEBUG, // debugging enabled
|
F_DEBUG, // debugging enabled
|
||||||
F_ATTRMOD, // modify attribute val0 by val1. ie. 0=A_STR,1=-3
|
F_ATTRMOD, // modify attribute val0 by val1. ie. 0=A_STR,1=-3
|
||||||
|
@ -1367,6 +1377,7 @@ enum ERROR {
|
||||||
E_BLIND = 32,
|
E_BLIND = 32,
|
||||||
E_GRABBEDBY = 33,
|
E_GRABBEDBY = 33,
|
||||||
E_CANTMOVE = 34,
|
E_CANTMOVE = 34,
|
||||||
|
E_NOTKNOWN = 35,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1565,8 +1576,10 @@ typedef struct material_s {
|
||||||
|
|
||||||
|
|
||||||
enum SKILL {
|
enum SKILL {
|
||||||
|
SK_ATHLETICS,
|
||||||
SK_LOCKPICKING,
|
SK_LOCKPICKING,
|
||||||
SK_RESEARCH,
|
SK_RESEARCH,
|
||||||
|
SK_TECHUSAGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
// proficiency levels
|
// proficiency levels
|
||||||
|
|
|
@ -13,6 +13,9 @@ lf.c:
|
||||||
update skillcheck()
|
update skillcheck()
|
||||||
update gainlevel() question
|
update gainlevel() question
|
||||||
update givejob()
|
update givejob()
|
||||||
|
update modattr()
|
||||||
|
|
||||||
|
io.c:
|
||||||
|
update announceflaggain() and loss() for this stat
|
||||||
|
|
||||||
|
|
||||||
ooooooo replace startxxx with startstat
|
|
||||||
|
|
13
flag.c
13
flag.c
|
@ -29,7 +29,6 @@ flag_t *addflag_real(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3,
|
||||||
known = B_KNOWN;
|
known = B_KNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// certain flags stack...
|
// certain flags stack...
|
||||||
if (flagstacks(id)) {
|
if (flagstacks(id)) {
|
||||||
f = hasflag(fp, id);
|
f = hasflag(fp, id);
|
||||||
|
@ -293,11 +292,19 @@ void killflag(flag_t *f) {
|
||||||
|
|
||||||
if (lf && (f->id == F_SPRINTING)) {
|
if (lf && (f->id == F_SPRINTING)) {
|
||||||
int howlong;
|
int howlong;
|
||||||
// you get tired when you finish sprinting
|
int slev;
|
||||||
|
|
||||||
howlong = 5;
|
// you get tired when you finish sprinting
|
||||||
|
howlong = 15;
|
||||||
|
// adjust for athletics skill. -2 per level.
|
||||||
|
slev = getskill(lf, SK_ATHLETICS);
|
||||||
|
if (slev != PR_INEPT) {
|
||||||
|
howlong -= (2*slev);
|
||||||
|
}
|
||||||
// adjust for constitution
|
// adjust for constitution
|
||||||
howlong = howlong - (int) ((float)howlong * (getstatmod(lf, A_CON) / 100) );
|
howlong = howlong - (int) ((float)howlong * (getstatmod(lf, A_CON) / 100) );
|
||||||
|
// enforce minimum
|
||||||
|
if (howlong < 1) howlong = 1;
|
||||||
addtempflag(f->pile, F_TIRED, B_TRUE, NA, NA, NULL, howlong);
|
addtempflag(f->pile, F_TIRED, B_TRUE, NA, NA, NULL, howlong);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
io.h
2
io.h
|
@ -59,7 +59,7 @@ void dothrow(obpile_t *op);
|
||||||
void dovendingmachine(lifeform_t *lf, object_t *vm);
|
void dovendingmachine(lifeform_t *lf, object_t *vm);
|
||||||
int dowear(obpile_t *op);
|
int dowear(obpile_t *op);
|
||||||
int doweild(obpile_t *op);
|
int doweild(obpile_t *op);
|
||||||
int downline(int *y, int h, char *heading, char *subheading);
|
int downline(int *y, int h, char *heading, char *subheading, char *bottomstring, char *cmdchars, char *retchar);
|
||||||
void drawunviscell(cell_t *cell, int x, int y);
|
void drawunviscell(cell_t *cell, int x, int y);
|
||||||
void drawcellwithcontents(cell_t *cell, int x, int y);
|
void drawcellwithcontents(cell_t *cell, int x, int y);
|
||||||
void drawcursor(void);
|
void drawcursor(void);
|
||||||
|
|
59
lf.c
59
lf.c
|
@ -776,6 +776,11 @@ int canwear(lifeform_t *lf, object_t *o, enum BODYPART where) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gettechlevel(o) > getskill(lf, SK_TECHUSAGE)) {
|
||||||
|
reason = E_NOTKNOWN;
|
||||||
|
return B_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (where == BP_NONE) {
|
if (where == BP_NONE) {
|
||||||
// can we wear it ANYWHERE?
|
// can we wear it ANYWHERE?
|
||||||
enum BODYPART possbp[MAXBODYPARTS];
|
enum BODYPART possbp[MAXBODYPARTS];
|
||||||
|
@ -3273,14 +3278,14 @@ int giveskill(lifeform_t *lf, enum SKILL id) {
|
||||||
if (f) {
|
if (f) {
|
||||||
// already have the skill - make it better
|
// already have the skill - make it better
|
||||||
if (f->val[1] < PR_MASTER) {
|
if (f->val[1] < PR_MASTER) {
|
||||||
f->val[1] ++;
|
f->val[1]++;
|
||||||
}
|
}
|
||||||
if (isplayer(lf) && gamestarted) {
|
if (isplayer(lf) && gamestarted) {
|
||||||
msg("You have learned the %s %s skill!", getskilllevelname(f->val[1]), getskillname(sk->id));
|
msg("You have learned the %s %s skill!", getskilllevelname(f->val[1]), getskillname(sk->id));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// gaining a new skill
|
// gaining a new skill
|
||||||
addflag(lf->flags, F_HASSKILL, id, PR_NOVICE, NA, NULL);
|
f = addflag(lf->flags, F_HASSKILL, id, PR_NOVICE, NA, NULL);
|
||||||
if (isplayer(lf) && gamestarted) {
|
if (isplayer(lf) && gamestarted) {
|
||||||
msg("You have learned the %s %s skill!", getskilllevelname(PR_NOVICE), getskillname(sk->id));
|
msg("You have learned the %s %s skill!", getskilllevelname(PR_NOVICE), getskillname(sk->id));
|
||||||
}
|
}
|
||||||
|
@ -3288,6 +3293,27 @@ int giveskill(lifeform_t *lf, enum SKILL id) {
|
||||||
// special effects...
|
// special effects...
|
||||||
if (id == SK_RESEARCH) {
|
if (id == SK_RESEARCH) {
|
||||||
addflag(lf->flags, F_CANWILL, OT_A_INSPECT, NA, NA, NULL);
|
addflag(lf->flags, F_CANWILL, OT_A_INSPECT, NA, NA, NULL);
|
||||||
|
} else if (id == SK_ATHLETICS) {
|
||||||
|
addflag(lf->flags, F_CANWILL, OT_A_SPRINT, NA, NA, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (id == SK_TECHUSAGE) {
|
||||||
|
objecttype_t *ot;
|
||||||
|
// automatically make known all tech <= our skill level
|
||||||
|
for (ot = objecttype ; ot ; ot = ot->next) {
|
||||||
|
// if objecttype is not known...
|
||||||
|
if (!isknownot(ot)) {
|
||||||
|
flag_t *tf;
|
||||||
|
tf = hasflag(ot->flags, F_TECHLEVEL);
|
||||||
|
// if objecttype has a tech level , and it is
|
||||||
|
// lower (or equal to) our tech knowledge...
|
||||||
|
if (tf && !isknownot(ot) && (tf->val[0] <= f->val[1])) {
|
||||||
|
// then make it known!
|
||||||
|
makeknown(ot->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
|
@ -3359,6 +3385,11 @@ void givestartobs(lifeform_t *lf, flagpile_t *fp) {
|
||||||
killflagsofid(fp, F_STARTOB);
|
killflagsofid(fp, F_STARTOB);
|
||||||
killflagsofid(fp, F_STARTOBDT);
|
killflagsofid(fp, F_STARTOBDT);
|
||||||
killflagsofid(fp, F_STARTOBCLASS);
|
killflagsofid(fp, F_STARTOBCLASS);
|
||||||
|
|
||||||
|
// make sure lf doesn't start off burdened!
|
||||||
|
while (isburdened(lf)) {
|
||||||
|
modattr(lf, A_STR, 1); // get stronger
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void givestartskills(lifeform_t *lf, flagpile_t *fp) {
|
void givestartskills(lifeform_t *lf, flagpile_t *fp) {
|
||||||
|
@ -4076,8 +4107,8 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 gold coins");
|
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 gold coins");
|
||||||
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "3 potions of healing");
|
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "3 potions of healing");
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, NA, NA, NULL);
|
addflag(lastjob->flags, F_MPDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_CANWILL, OT_A_SPRINT, 3, 3, NULL);
|
|
||||||
addflag(lastjob->flags, F_STARTSKILL, SK_LOCKPICKING, PR_NOVICE, NA, NULL);
|
addflag(lastjob->flags, F_STARTSKILL, SK_LOCKPICKING, PR_NOVICE, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_STARTSKILL, SK_ATHLETICS, PR_NOVICE, NA, NULL);
|
||||||
addjob(J_ALLOMANCER, "Allomancer");
|
addjob(J_ALLOMANCER, "Allomancer");
|
||||||
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "1 gold coins");
|
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "1 gold coins");
|
||||||
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "club");
|
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "club");
|
||||||
|
@ -4128,6 +4159,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 bullets");
|
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 bullets");
|
||||||
addflag(lastjob->flags, F_STARTATT, A_STR, ST_STRONG, NA, NULL);
|
addflag(lastjob->flags, F_STARTATT, A_STR, ST_STRONG, NA, NULL);
|
||||||
addflag(lastjob->flags, F_STARTATT, A_IQ, IQ_DOPEY, NA, NULL);
|
addflag(lastjob->flags, F_STARTATT, A_IQ, IQ_DOPEY, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_STARTSKILL, SK_ATHLETICS, PR_ADEPT, NA, NULL);
|
||||||
// TODO skill: athletics 2
|
// TODO skill: athletics 2
|
||||||
addjob(J_WIZARD, "Wizard");
|
addjob(J_WIZARD, "Wizard");
|
||||||
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "knife");
|
addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "knife");
|
||||||
|
@ -4155,6 +4187,7 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_MPREGEN, 1, NA, NA, NULL);
|
addflag(lastjob->flags, F_MPREGEN, 1, NA, NA, NULL);
|
||||||
// can detect magic objects
|
// can detect magic objects
|
||||||
addflag(lastjob->flags, F_DETECTMAGIC, B_TRUE, NA, NA, NULL);
|
addflag(lastjob->flags, F_DETECTMAGIC, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_STARTSKILL, SK_RESEARCH, PR_ADEPT, NA, NULL);
|
||||||
// TODO skill: magic knowledge
|
// TODO skill: magic knowledge
|
||||||
// for monster wizards only:
|
// for monster wizards only:
|
||||||
addflag(lastjob->flags, F_IFMONSTER, NA, NA, NA, NULL);
|
addflag(lastjob->flags, F_IFMONSTER, NA, NA, NA, NULL);
|
||||||
|
@ -4384,6 +4417,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_FLEEONHPPCT, 50, NA, NA, NULL);
|
addflag(lastrace->flags, F_FLEEONHPPCT, 50, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HEAVYBLOW, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HEAVYBLOW, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_CANWILL, OT_S_BURNINGWAVE, 3, 3, NULL);
|
addflag(lastrace->flags, F_CANWILL, OT_S_BURNINGWAVE, 3, 3, NULL);
|
||||||
|
addflag(lastrace->flags, F_DTRESIST, DT_FIRE, NA, NA, NULL);
|
||||||
|
|
||||||
// TODO: storm giant
|
// TODO: storm giant
|
||||||
// TODO: storm titan
|
// TODO: storm titan
|
||||||
|
@ -5718,6 +5752,9 @@ int modattr(lifeform_t *lf, enum ATTRIB attr, int amt) {
|
||||||
case A_STR:
|
case A_STR:
|
||||||
strcpy(adverb, "stronger");
|
strcpy(adverb, "stronger");
|
||||||
break;
|
break;
|
||||||
|
case A_CON:
|
||||||
|
strcpy(adverb, "healthier");
|
||||||
|
break;
|
||||||
case A_DEX:
|
case A_DEX:
|
||||||
strcpy(adverb, "more agile");
|
strcpy(adverb, "more agile");
|
||||||
break;
|
break;
|
||||||
|
@ -5732,8 +5769,11 @@ int modattr(lifeform_t *lf, enum ATTRIB attr, int amt) {
|
||||||
case A_STR:
|
case A_STR:
|
||||||
strcpy(adverb, "weaker");
|
strcpy(adverb, "weaker");
|
||||||
break;
|
break;
|
||||||
|
case A_CON:
|
||||||
|
strcpy(adverb, "less healthy");
|
||||||
|
break;
|
||||||
case A_DEX:
|
case A_DEX:
|
||||||
strcpy(adverb, "less agile");
|
strcpy(adverb, "sluggish");
|
||||||
break;
|
break;
|
||||||
case A_IQ:
|
case A_IQ:
|
||||||
strcpy(adverb, "foolish");
|
strcpy(adverb, "foolish");
|
||||||
|
@ -6553,8 +6593,10 @@ void setlastdam(lifeform_t *lf, char *buf) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void initskills(void) {
|
void initskills(void) {
|
||||||
|
addskill(SK_ATHLETICS, "Athletics", "Your athletics skill determines how far you can run, and how long it takes for you to recover afterwards.");
|
||||||
addskill(SK_LOCKPICKING, "Lockpicking", "Enhances your ability to pick locks.");
|
addskill(SK_LOCKPICKING, "Lockpicking", "Enhances your ability to pick locks.");
|
||||||
addskill(SK_RESEARCH, "Research", "Allows you a chance of recognising unknown objects.");
|
addskill(SK_RESEARCH, "Research", "Allows you a chance of recognising unknown objects.");
|
||||||
|
addskill(SK_TECHUSAGE, "Tech Usage", "Lets you comprehend the usage of use modern technological items.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void interrupt(lifeform_t *lf) {
|
void interrupt(lifeform_t *lf) {
|
||||||
|
@ -7774,7 +7816,7 @@ int wear(lifeform_t *lf, object_t *o) {
|
||||||
if (gamestarted && lf->created) {
|
if (gamestarted && lf->created) {
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case E_ALREADYUSING:
|
case E_ALREADYUSING:
|
||||||
if (lf->controller == C_PLAYER) {
|
if (isplayer(lf)) {
|
||||||
msg("You're already wearing that!");
|
msg("You're already wearing that!");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -7807,11 +7849,14 @@ int wear(lifeform_t *lf, object_t *o) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// should never happen
|
// should never happen
|
||||||
msg("You can't wear that!");
|
if (isplayer(lf)) msg("You can't wear that!");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case E_NOTKNOWN:
|
||||||
|
if (isplayer(lf)) msg("You can't wear that!");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (lf->controller == C_PLAYER) {
|
if (isplayer(lf)) {
|
||||||
msg("You can't wear that!");
|
msg("You can't wear that!");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
12
nexus.c
12
nexus.c
|
@ -68,6 +68,7 @@ int numdraws = 0;
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
int newworld = B_FALSE;
|
int newworld = B_FALSE;
|
||||||
object_t *o;
|
object_t *o;
|
||||||
|
char welcomemsg[BUFLEN];
|
||||||
|
|
||||||
atexit(cleanup);
|
atexit(cleanup);
|
||||||
|
|
||||||
|
@ -133,19 +134,15 @@ int main(int argc, char **argv) {
|
||||||
// player needs hunger
|
// player needs hunger
|
||||||
addflag(player->flags, F_HUNGER, 0, NA, NA, NULL);
|
addflag(player->flags, F_HUNGER, 0, NA, NA, NULL);
|
||||||
|
|
||||||
drawscreen();
|
|
||||||
getplayernamefull(pname);
|
getplayernamefull(pname);
|
||||||
msg("Greetings %s, welcome to %snexus!", pname, newworld ? "the new " : "");
|
sprintf(welcomemsg, "Greetings %s, welcome to %snexus!", pname, newworld ? "the new " : "");
|
||||||
more();
|
|
||||||
// XXX testing
|
// XXX testing
|
||||||
//addlf(getcellindir(player->cell, D_N), R_GOBLIN, 1);
|
//addlf(getcellindir(player->cell, D_N), R_GOBLIN, 1);
|
||||||
|
|
||||||
// 00:00 - 23:59
|
// 00:00 - 23:59
|
||||||
curtime = rnd(0,86399);
|
curtime = rnd(0,86399);
|
||||||
} else {
|
} else {
|
||||||
drawscreen();
|
sprintf(welcomemsg, "Welcome back!");
|
||||||
msg("Welcome back!");
|
|
||||||
more();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// start game - this will cause debug messages to now
|
// start game - this will cause debug messages to now
|
||||||
|
@ -161,6 +158,9 @@ int main(int argc, char **argv) {
|
||||||
// show level
|
// show level
|
||||||
drawscreen();
|
drawscreen();
|
||||||
|
|
||||||
|
msg("%s",welcomemsg);
|
||||||
|
more();
|
||||||
|
|
||||||
// MAIN LOOP
|
// MAIN LOOP
|
||||||
|
|
||||||
// basic flow is:
|
// basic flow is:
|
||||||
|
|
434
objects.c
434
objects.c
|
@ -63,6 +63,7 @@ enum OBCLASS sortorder[] = {
|
||||||
OC_CORPSE,
|
OC_CORPSE,
|
||||||
OC_RING,
|
OC_RING,
|
||||||
OC_TECH,
|
OC_TECH,
|
||||||
|
OC_TOOLS,
|
||||||
OC_BOOK,
|
OC_BOOK,
|
||||||
OC_ROCK,
|
OC_ROCK,
|
||||||
OC_MISC,
|
OC_MISC,
|
||||||
|
@ -70,6 +71,27 @@ enum OBCLASS sortorder[] = {
|
||||||
OC_NULL
|
OC_NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
char *techadjective[] = {
|
||||||
|
"crazy",
|
||||||
|
"odd",
|
||||||
|
"strange",
|
||||||
|
"weird",
|
||||||
|
"",
|
||||||
|
};
|
||||||
|
char *technoun[] = {
|
||||||
|
"contraption",
|
||||||
|
"device",
|
||||||
|
"doodad",
|
||||||
|
"doohickey",
|
||||||
|
"gadget",
|
||||||
|
"thing",
|
||||||
|
"object",
|
||||||
|
"",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
long nextoid = 0;
|
long nextoid = 0;
|
||||||
|
|
||||||
brand_t *addbrand(enum BRAND id, char *suffix, enum BODYPART bp) {
|
brand_t *addbrand(enum BRAND id, char *suffix, enum BODYPART bp) {
|
||||||
|
@ -1104,6 +1126,7 @@ void adjustdamob(object_t *o, unsigned int *dam, enum DAMTYPE damtype) {
|
||||||
*dam = 0;
|
*dam = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// only some objects can be hurt
|
// only some objects can be hurt
|
||||||
if (!hasflag(o->flags, F_DAMAGABLE)) {
|
if (!hasflag(o->flags, F_DAMAGABLE)) {
|
||||||
if (damtype != DT_DIRECT) {
|
if (damtype != DT_DIRECT) {
|
||||||
|
@ -1513,16 +1536,16 @@ void explodeob(object_t *o, flag_t *f, int bigness) {
|
||||||
// announce
|
// announce
|
||||||
if (o->pile->owner) {
|
if (o->pile->owner) {
|
||||||
if (isplayer(o->pile->owner)) {
|
if (isplayer(o->pile->owner)) {
|
||||||
msg("Your %s explodes!", noprefix(obname));
|
msg("Your %s explode%s!", noprefix(obname), (o->amt == 1) ? "s" : "");
|
||||||
} else if (haslos(player, o->pile->owner->cell)) {
|
} else if (haslos(player, o->pile->owner->cell)) {
|
||||||
char lfname[BUFLEN];
|
char lfname[BUFLEN];
|
||||||
getlfname(o->pile->owner, lfname);
|
getlfname(o->pile->owner, lfname);
|
||||||
msg("%s%s %s explodes!", lfname, getpossessive(lfname), noprefix(obname));
|
msg("%s%s %s explode%s!", lfname, getpossessive(lfname), noprefix(obname), (o->amt == 1) ? "s" : "");
|
||||||
}
|
}
|
||||||
} else if (haslos(player, c)) {
|
} else if (haslos(player, c)) {
|
||||||
msg("%s explodes!", obname);
|
msg("%s explode%s!", obname, (o->amt == 1) ? "s" : "");
|
||||||
}
|
}
|
||||||
explodecells(c, dam, bigness ? B_TRUE : B_FALSE, o, bigness ? 1 : 0, B_FALSE);
|
explodecells(c, dam * o->amt, bigness ? B_TRUE : B_FALSE, o, bigness ? 1 : 0, B_FALSE);
|
||||||
|
|
||||||
// hurt everything!
|
// hurt everything!
|
||||||
/*
|
/*
|
||||||
|
@ -1537,6 +1560,8 @@ void explodeob(object_t *o, flag_t *f, int bigness) {
|
||||||
explodecell(c, dam, (bigness) ? B_TRUE : B_FALSE, NULL);
|
explodecell(c, dam, (bigness) ? B_TRUE : B_FALSE, NULL);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
// object dies.
|
||||||
|
removeob(o, o->amt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void extinguish(object_t *o) {
|
void extinguish(object_t *o) {
|
||||||
|
@ -1821,10 +1846,16 @@ void fragments(cell_t *centre, char *what, int speed) {
|
||||||
|
|
||||||
void genhiddennames(void) {
|
void genhiddennames(void) {
|
||||||
objecttype_t *ot;
|
objecttype_t *ot;
|
||||||
|
flag_t *f;
|
||||||
for (ot = objecttype ; ot ; ot = ot->next) {
|
for (ot = objecttype ; ot ; ot = ot->next) {
|
||||||
if (hasflag(ot->flags, F_HASHIDDENNAME)) {
|
f = hasflag(ot->flags, F_HASHIDDENNAME);
|
||||||
|
if (f) {
|
||||||
char *thisname;
|
char *thisname;
|
||||||
thisname = genhiddenname(ot->obclass->id);
|
if (strlen(f->text)) {
|
||||||
|
thisname = strdup(f->text);
|
||||||
|
} else {
|
||||||
|
thisname = genhiddenname(ot->obclass->id);
|
||||||
|
}
|
||||||
addknowledge(ot->id, thisname, B_UNKNOWN);
|
addknowledge(ot->id, thisname, B_UNKNOWN);
|
||||||
// some descriptions confer other effecst too...
|
// some descriptions confer other effecst too...
|
||||||
if (strstr(thisname, "glowing")) {
|
if (strstr(thisname, "glowing")) {
|
||||||
|
@ -3284,6 +3315,16 @@ int getshatterdam(object_t *o) {
|
||||||
return shatterdam;
|
return shatterdam;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum SKILLLEVEL gettechlevel(object_t *o) {
|
||||||
|
flag_t *f;
|
||||||
|
enum SKILLLEVEL tlev = PR_INEPT;
|
||||||
|
f = hasflag(o->flags, F_TECHLEVEL);
|
||||||
|
if (f) {
|
||||||
|
tlev = f->val[0];
|
||||||
|
}
|
||||||
|
return tlev;
|
||||||
|
}
|
||||||
|
|
||||||
int getthrowdam(object_t *o) {
|
int getthrowdam(object_t *o) {
|
||||||
double dam = 0;
|
double dam = 0;
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
|
@ -3436,7 +3477,7 @@ void ignite(object_t *o) {
|
||||||
|
|
||||||
void initobjects(void) {
|
void initobjects(void) {
|
||||||
//int ch;
|
//int ch;
|
||||||
//int i;
|
int i,n;
|
||||||
objecttype_t *ot;
|
objecttype_t *ot;
|
||||||
|
|
||||||
// generate hidden names
|
// generate hidden names
|
||||||
|
@ -3540,13 +3581,26 @@ void initobjects(void) {
|
||||||
addhiddenname(OC_WAND, "sapphire wand");
|
addhiddenname(OC_WAND, "sapphire wand");
|
||||||
addhiddenname(OC_WAND, "wooden wand");
|
addhiddenname(OC_WAND, "wooden wand");
|
||||||
|
|
||||||
// gems
|
|
||||||
addhiddenname(OC_RING, "ruby ring");
|
addhiddenname(OC_RING, "ruby ring");
|
||||||
addhiddenname(OC_RING, "diamond ring");
|
addhiddenname(OC_RING, "diamond ring");
|
||||||
addhiddenname(OC_RING, "emerald ring");
|
addhiddenname(OC_RING, "emerald ring");
|
||||||
addhiddenname(OC_RING, "silver ring");
|
addhiddenname(OC_RING, "silver ring");
|
||||||
addhiddenname(OC_RING, "gold ring");
|
addhiddenname(OC_RING, "gold ring");
|
||||||
|
|
||||||
|
for (n = 0; strlen(technoun[n]); n++) {
|
||||||
|
// add it without an adjective
|
||||||
|
addhiddenname(OC_TECH, technoun[n]);
|
||||||
|
// add it with all known adjectives
|
||||||
|
for (i = 0; strlen(techadjective[i]) ; i++) {
|
||||||
|
char buf[BUFLEN];
|
||||||
|
sprintf(buf, "%s %s",techadjective[i], technoun[n]);
|
||||||
|
addhiddenname(OC_TECH, buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shufflehiddennames();
|
||||||
|
|
||||||
|
|
||||||
// object modifiers - flags can be either known or not, depending on if it's obvious
|
// object modifiers - flags can be either known or not, depending on if it's obvious
|
||||||
addobmod(OM_FLAMING,"flaming");
|
addobmod(OM_FLAMING,"flaming");
|
||||||
addflag_real(lastobmod->flags, F_ONFIRE, B_TRUE, NA, NA, NULL, PERMENANT, B_KNOWN, -1);
|
addflag_real(lastobmod->flags, F_ONFIRE, B_TRUE, NA, NA, NULL, PERMENANT, B_KNOWN, -1);
|
||||||
|
@ -3683,7 +3737,10 @@ void initobjects(void) {
|
||||||
addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastobjectclass->flags, F_OBHP, 50, 50, NA, NULL);
|
addflag(lastobjectclass->flags, F_OBHP, 50, 50, NA, NULL);
|
||||||
addflag(lastobjectclass->flags, F_OBHPDRAIN, 1, DT_DECAY, NA, NULL); // ie. corpses last for 50 turns
|
addflag(lastobjectclass->flags, F_OBHPDRAIN, 1, DT_DECAY, NA, NULL); // ie. corpses last for 50 turns
|
||||||
addoc(OC_TECH, "Tools/Technology", "Useful items, from the common to the obscure.", '~');
|
addoc(OC_TECH, "Technology", "A strange piece of futuristic technology.", '~');
|
||||||
|
addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
|
addoc(OC_TOOLS, "Tools", "Useful items, from the common to the obscure.", '[');
|
||||||
addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addoc(OC_MISC, "Miscellaneous", "This could be anything.", '\\');
|
addoc(OC_MISC, "Miscellaneous", "This could be anything.", '\\');
|
||||||
|
@ -3792,6 +3849,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, "");
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_POWDER, B_TRUE, NA, NA, NULL);
|
||||||
addot(OT_GEMOFSEEING, "gem of seeing", "Magically enhances your eyesight.", MT_STONE, 1, OC_ROCK);
|
addot(OT_GEMOFSEEING, "gem of seeing", "Magically enhances your eyesight.", MT_STONE, 1, OC_ROCK);
|
||||||
addflag(lastot->flags, F_HOLDCONFER, F_XRAYVIS, 2, NA, NULL);
|
addflag(lastot->flags, F_HOLDCONFER, F_XRAYVIS, 2, NA, NULL);
|
||||||
addflag(lastot->flags, F_HOLDCONFER, F_DETECTAURAS, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_HOLDCONFER, F_DETECTAURAS, B_TRUE, NA, NULL);
|
||||||
|
@ -4515,45 +4573,54 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_OPERNEEDTARGET, TT_NONE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERNEEDTARGET, TT_NONE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL);
|
addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL);
|
||||||
|
|
||||||
// tech/tools
|
// tech - l0
|
||||||
addot(OT_POCKETWATCH, "pocket watch", "A portable timekeeping device made to be carried in a pocket.", MT_METAL, 0.1, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
addot(OT_DIGITALWATCH, "digital watch", "An electronic timekeeping device which shows the time as a number.", MT_METAL, 0.1, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_BLINDFOLD, "blindfold", "Short length of wide cloth, used for blocking eyesight.", MT_CLOTH, 0.01, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_EQUIPCONFER, F_BLIND, B_TRUE, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_C4, "block of c4", "A highly explosive plastic which explodes a medium time after activation.", MT_PLASTIC, 1, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_CHARGES, 5, 5, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_DONTSHOWCHARGES, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_EXPLODEONDEATH, 30, B_BIG, B_IFACTIVATED, NULL);
|
|
||||||
addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_BUGLAMP, "glowing flask", "A glass flask with a glowbug corpse inside.", MT_GLASS, 0.3, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_PRODUCESLIGHT, 2, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_HOLDCONFER, F_PRODUCESLIGHT, 2, IFKNOWN, NULL);
|
|
||||||
|
|
||||||
addot(OT_CREDITCARD, "credit card", "A rectangular plastic card.", MT_PLASTIC, 0.01, OC_TECH);
|
addot(OT_CREDITCARD, "credit card", "A rectangular plastic card.", MT_PLASTIC, 0.01, OC_TECH);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL);
|
||||||
addflag(lastot->flags, F_PICKLOCKS, 2, NA, NA, NULL);
|
addflag(lastot->flags, F_PICKLOCKS, 2, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addot(OT_PAPERCLIP, "paperclip", "A thin, looped wire for holding paper together.", MT_METAL, 0.01, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_PICKLOCKS, 4, B_DIEONFAIL, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
// can use as a (very bad) weapon too...
|
||||||
|
addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_DAM, 1, 1, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_ACCURACY, 50, NA, NA, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
// tech - l1
|
||||||
|
addot(OT_POCKETWATCH, "pocket watch", "A portable timekeeping device made to be carried in a pocket.", MT_METAL, 0.1, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_NOVICE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
addot(OT_DIGITALWATCH, "digital watch", "An electronic timekeeping device which shows the time as a number.", MT_METAL, 0.1, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_NOVICE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
addot(OT_INSECTICIDE, "can of insecticide", "A spraycan containing poisonous chemicals.", MT_METAL, 0.5, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERUSECHARGE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERNEEDTARGET, TT_MONSTER, NA, NA, "Where will you spray?");
|
||||||
|
addflag(lastot->flags, F_RNDCHARGES, 5, 10, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_NOVICE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
addot(OT_LANTERNLED, "LED lantern", "A low-powered but efficient lantern which will last almost forever.", MT_METAL, 0.5, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 20, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 2, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_NOVICE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
// tech - l2
|
||||||
addot(OT_FLASHBANG, "flashbang", "A stun grenade which temporarily blinds all within sight.", MT_METAL, 1, OC_TECH);
|
addot(OT_FLASHBANG, "flashbang", "A stun grenade which temporarily blinds all within sight.", MT_METAL, 1, OC_TECH);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL);
|
||||||
|
@ -4568,7 +4635,8 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_FLASHONDEATH, 4, NA, B_IFACTIVATED, NULL);
|
addflag(lastot->flags, F_FLASHONDEATH, 4, NA, B_IFACTIVATED, NULL);
|
||||||
addflag(lastot->flags, F_FLASHONDAM, 4, NA, B_IFACTIVATED, NULL);
|
addflag(lastot->flags, F_FLASHONDAM, 4, NA, B_IFACTIVATED, NULL);
|
||||||
addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_BEGINNER, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
addot(OT_GRENADE, "grenade", "An explosive weapon which explodes a short time after activation.", MT_METAL, 1, OC_TECH);
|
addot(OT_GRENADE, "grenade", "An explosive weapon which explodes a short time after activation.", MT_METAL, 1, OC_TECH);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL);
|
||||||
|
@ -4580,23 +4648,28 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_EXPLODEONDEATH, 10, NA, B_IFACTIVATED, NULL);
|
addflag(lastot->flags, F_EXPLODEONDEATH, 15, NA, B_IFACTIVATED, NULL);
|
||||||
addflag(lastot->flags, F_EXPLODEONDAM, 10, NA, B_IFACTIVATED, NULL);
|
addflag(lastot->flags, F_EXPLODEONDAM, 10, NA, B_IFACTIVATED, NULL);
|
||||||
addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_BEGINNER, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
addot(OT_INFOVISOR, "infovisor", "Sleek looking metal visor which displays info directly into the retina.", MT_METAL, 0.2, OC_TECH);
|
addot(OT_C4, "block of c4", "A highly explosive plastic which explodes a medium time after activation.", MT_PLASTIC, 1, OC_TECH);
|
||||||
addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL);
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_EQUIPCONFER, F_EXTRAINFO, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_INSECTICIDE, "can of insecticide", "A spraycan containing poisonous chemicals.", MT_METAL, 0.5, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERUSECHARGE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERNEEDTARGET, TT_MONSTER, NA, NA, "Where will you spray?");
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RNDCHARGES, 5, 10, NA, NULL);
|
addflag(lastot->flags, F_CHARGES, 5, 5, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_DONTSHOWCHARGES, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_EXPLODEONDEATH, 30, B_BIG, B_IFACTIVATED, NULL);
|
||||||
|
addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_BEGINNER, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
// tech - l3
|
||||||
addot(OT_JETPACK, "jet pack", "A portable ion-thruster which allows the wearer to fly.", MT_METAL, 10, OC_TECH);
|
addot(OT_JETPACK, "jet pack", "A portable ion-thruster which allows the wearer to fly.", MT_METAL, 10, OC_TECH);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -4605,20 +4678,63 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_REFILLWITH, OT_POT_OIL, NA, NA, NULL);
|
addflag(lastot->flags, F_REFILLWITH, OT_POT_OIL, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACTIVATECONFER, F_FLYING, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_ACTIVATECONFER, F_FLYING, B_TRUE, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 1, NA, NULL);
|
addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 1, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_ADEPT, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
// tech - l4
|
||||||
|
addot(OT_INFOVISOR, "infovisor", "Sleek looking metal visor which displays info directly into the retina.", MT_METAL, 0.2, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_EQUIPCONFER, F_EXTRAINFO, B_TRUE, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_SKILLED, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
addot(OT_LOCKHACKER, "lock hacker", "A sophisticated machine to manipulate physical locks.", MT_METAL, 3, OC_TECH);
|
addot(OT_LOCKHACKER, "lock hacker", "A sophisticated machine to manipulate physical locks.", MT_METAL, 3, OC_TECH);
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 20, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 20, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_SKILLED, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
addot(OT_LANTERNLED, "LED lantern", "A low-powered but efficient lantern which will last almost forever.", MT_METAL, 0.5, OC_TECH);
|
// tech - l5
|
||||||
|
addot(OT_TELEPAD, "teleport beacon", "A metal cone which will teleport the user to the nearest similar cone.", MT_METAL, 3, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_EXPERT, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
addot(OT_XRAYGOGGLES, "pair of xray goggles", "Bulky looking goggles which allow you to see through walls.", MT_METAL, 0.3, OC_TECH);
|
||||||
|
addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_EQUIPCONFER, F_XRAYVIS, 2, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_TECHLEVEL, PR_EXPERT, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
// tech - l6 ???
|
||||||
|
|
||||||
|
// tools
|
||||||
|
addot(OT_BLINDFOLD, "blindfold", "Short length of wide cloth, used for blocking eyesight.", MT_CLOTH, 0.01, OC_TOOLS);
|
||||||
|
addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_EQUIPCONFER, F_BLIND, B_TRUE, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL);
|
||||||
|
|
||||||
|
addot(OT_BUGLAMP, "glowing flask", "A glass flask with a glowbug corpse inside.", MT_GLASS, 0.3, OC_TOOLS);
|
||||||
|
addflag(lastot->flags, F_GLYPH, NA, NA, NA, "!");
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 20, NA, NULL);
|
addflag(lastot->flags, F_PRODUCESLIGHT, 2, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_HOLDCONFER, F_PRODUCESLIGHT, 2, IFKNOWN, NULL);
|
||||||
addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 2, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_LANTERNOIL, "oil lantern", "An oil-powered lantern which produces a lot of light.", MT_METAL, 1, OC_TECH);
|
addot(OT_GUNPOWDER, "pile of gunpowder", "A black metallic powder.", MT_METAL, 0.5, OC_TOOLS);
|
||||||
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, "pile of black powder");
|
||||||
|
addflag(lastot->flags, F_GLYPH, NA, NA, NA, ",");
|
||||||
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_EXPLODEONDAM, 15, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, "2d6");
|
||||||
|
addflag(lastot->flags, F_FLAMMABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_POWDER, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
addot(OT_LANTERNOIL, "oil lantern", "An oil-powered lantern which produces a lot of light.", MT_METAL, 1, OC_TOOLS);
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -4628,36 +4744,17 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_RNDCHARGES, 100, 200, NA, NULL);
|
addflag(lastot->flags, F_RNDCHARGES, 100, 200, NA, NULL);
|
||||||
addflag(lastot->flags, F_REFILLWITH, OT_POT_OIL, NA, NA, NULL);
|
addflag(lastot->flags, F_REFILLWITH, OT_POT_OIL, NA, NA, NULL);
|
||||||
|
|
||||||
addot(OT_LOCKPICK, "lockpick", "An angled piece of metal, used to open locks.", MT_METAL, 0.05, OC_TECH);
|
addot(OT_LOCKPICK, "lockpick", "An angled piece of metal, used to open locks.", MT_METAL, 0.05, OC_TOOLS);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL);
|
||||||
addflag(lastot->flags, F_PICKLOCKS, 10, B_DIEONFAIL, NA, NULL);
|
addflag(lastot->flags, F_PICKLOCKS, 10, B_DIEONFAIL, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
addot(OT_PAPERCLIP, "paperclip", "A thin, looped wire for holding paper together.", MT_METAL, 0.01, OC_TECH);
|
addot(OT_PICKAXE, "pickaxe", "A heavy tool for breaking rock.", MT_METAL, 8, OC_TOOLS);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_PICKLOCKS, 4, B_DIEONFAIL, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
// can use as a (very bad) weapon too...
|
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_DAM, 1, 1, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_ACCURACY, 50, NA, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_PICKAXE, "pickaxe", "A heavy tool for breaking rock.", MT_METAL, 8, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL);
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
addot(OT_TELEPAD, "teleport beacon", "A metal cone which will teleport the user to the nearest similar cone.", MT_METAL, 3, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
|
|
||||||
|
|
||||||
addot(OT_XRAYGOGGLES, "pair of xray goggles", "Bulky looking goggles which allow you to see through walls.", MT_METAL, 0.3, OC_TECH);
|
|
||||||
addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_EQUIPCONFER, F_XRAYVIS, 2, NA, NULL);
|
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL);
|
|
||||||
|
|
||||||
// misc
|
// misc
|
||||||
|
|
||||||
|
@ -5167,6 +5264,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_BITE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMTYPE, DT_BITE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAM, 1, 2, NA, NULL);
|
addflag(lastot->flags, F_DAM, 1, 2, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_NOSTRDAMMOD, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
addot(OT_CLAWS, "claws", "claws object", MT_BONE, 0, OC_WEAPON);
|
addot(OT_CLAWS, "claws", "claws object", MT_BONE, 0, OC_WEAPON);
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_CLAW, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMTYPE, DT_CLAW, NA, NA, NULL);
|
||||||
|
@ -5187,22 +5285,26 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_ELECTRIC, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMTYPE, DT_ELECTRIC, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAM, 1, 2, NA, NULL);
|
addflag(lastot->flags, F_DAM, 1, 2, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_NOSTRDAMMOD, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
// monster weapons
|
// monster weapons
|
||||||
addot(OT_ACIDATTACK, "acidattack", "acid attack object", MT_WATER, 0, OC_WEAPON);
|
addot(OT_ACIDATTACK, "acidattack", "acid attack object", MT_WATER, 0, OC_WEAPON);
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_ACID, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMTYPE, DT_ACID, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAM, 1, 2, NA, NULL);
|
addflag(lastot->flags, F_DAM, 1, 2, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACCURACY, 60, NA, NA, NULL);
|
addflag(lastot->flags, F_ACCURACY, 60, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_NOSTRDAMMOD, B_TRUE, NA, NA, NULL);
|
||||||
addot(OT_TOUCHPARALYZE, "paralyzing touch", "paralyzing touch object", MT_BONE, 0, OC_WEAPON);
|
addot(OT_TOUCHPARALYZE, "paralyzing touch", "paralyzing touch object", MT_BONE, 0, OC_WEAPON);
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_TOUCH, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMTYPE, DT_TOUCH, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAM, 0, 1, NA, NULL);
|
addflag(lastot->flags, F_DAM, 0, 1, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_HITCONFER, F_PARALYZED, B_TRUE, NA, "2-4");
|
addflag(lastot->flags, F_HITCONFER, F_PARALYZED, B_TRUE, NA, "2-4");
|
||||||
|
addflag(lastot->flags, F_NOSTRDAMMOD, B_TRUE, NA, NA, NULL);
|
||||||
addot(OT_TOUCHPARALYZE2, "strong paralyzing touch", "strong paralyzing touch object", MT_BONE, 0, OC_WEAPON);
|
addot(OT_TOUCHPARALYZE2, "strong paralyzing touch", "strong paralyzing touch object", MT_BONE, 0, OC_WEAPON);
|
||||||
addflag(lastot->flags, F_DAMTYPE, DT_TOUCH, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMTYPE, DT_TOUCH, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAM, 0, 1, NA, NULL);
|
addflag(lastot->flags, F_DAM, 0, 1, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_HITCONFER, F_PARALYZED, B_TRUE, NA, "5-10");
|
addflag(lastot->flags, F_HITCONFER, F_PARALYZED, B_TRUE, NA, "5-10");
|
||||||
|
addflag(lastot->flags, F_NOSTRDAMMOD, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
// missiles
|
// missiles
|
||||||
addot(OT_DART, "dart", "A small, sharp projectile weapon.", MT_WOOD, 0.5, OC_MISSILE);
|
addot(OT_DART, "dart", "A small, sharp projectile weapon.", MT_WOOD, 0.5, OC_MISSILE);
|
||||||
|
@ -5708,14 +5810,20 @@ int isflammable(object_t *o) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int isknown(object_t *o) {
|
int isknown(object_t *o) {
|
||||||
knowledge_t *k;
|
|
||||||
// if id'd, return the full name
|
// if id'd, return the full name
|
||||||
if (hasflag(o->flags, F_IDENTIFIED)) {
|
if (hasflag(o->flags, F_IDENTIFIED)) {
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return isknownot(o->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
int isknownot(objecttype_t *ot) {
|
||||||
|
knowledge_t *k;
|
||||||
|
// if id'd, return the full name
|
||||||
|
|
||||||
for (k = knowledge; k ; k = k->next) {
|
for (k = knowledge; k ; k = k->next) {
|
||||||
if (k->id == o->type->id) {
|
if (k->id == ot->id) {
|
||||||
// it DOES have a hidden name.
|
// it DOES have a hidden name.
|
||||||
// does the player know about it?
|
// does the player know about it?
|
||||||
if (k->known) {
|
if (k->known) {
|
||||||
|
@ -5732,6 +5840,7 @@ int isknown(object_t *o) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// is the object fully identified?
|
// is the object fully identified?
|
||||||
// ie. its type is known ("potion of healing" rather than "red potion")
|
// ie. its type is known ("potion of healing" rather than "red potion")
|
||||||
// AND
|
// AND
|
||||||
|
@ -6367,6 +6476,7 @@ void obdie(object_t *o) {
|
||||||
} else {
|
} else {
|
||||||
explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0);
|
explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// flashes?
|
// flashes?
|
||||||
|
@ -6520,8 +6630,15 @@ int operate(lifeform_t *lf, object_t *o, cell_t *where) {
|
||||||
|
|
||||||
// if not a wand, must know what a tool is before you can use it
|
// if not a wand, must know what a tool is before you can use it
|
||||||
if (!isknown(o) && (o->type->obclass->id != OC_WAND)) {
|
if (!isknown(o) && (o->type->obclass->id != OC_WAND)) {
|
||||||
if (lf->controller == C_PLAYER) {
|
if (isplayer(lf)) {
|
||||||
msg("You don't know how to use that (yet)!");
|
msg("You don't know how to use %s!", obname);
|
||||||
|
}
|
||||||
|
return B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gettechlevel(o) > getskill(lf, SK_TECHUSAGE)) {
|
||||||
|
if (isplayer(lf)) {
|
||||||
|
msg("This technology is beyond your understanding.");
|
||||||
}
|
}
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -7933,6 +8050,55 @@ void setinscription(object_t *o, char *text) {
|
||||||
o->inscription = strdup(text);
|
o->inscription = strdup(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// randomizes hidden names
|
||||||
|
void shufflehiddennames(void) {
|
||||||
|
int i,n;
|
||||||
|
int total;
|
||||||
|
hiddenname_t *a, *temp;
|
||||||
|
int shuffleamt = 20;
|
||||||
|
|
||||||
|
|
||||||
|
total = 0;
|
||||||
|
for (a = firsthiddenname ; a ; a = a->next) {
|
||||||
|
total++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (total <= 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < shuffleamt; i++) {
|
||||||
|
int which;
|
||||||
|
|
||||||
|
// select random element (but never the first)
|
||||||
|
which = (rand() % (total-1))+1;
|
||||||
|
|
||||||
|
// go there
|
||||||
|
a = firsthiddenname;
|
||||||
|
for (n = 0; n < which; n++) {
|
||||||
|
if (a->next != NULL) a = a->next;
|
||||||
|
}
|
||||||
|
temp = a;
|
||||||
|
|
||||||
|
// remove from list
|
||||||
|
temp->prev->next = temp->next;
|
||||||
|
|
||||||
|
|
||||||
|
if (temp->next) {
|
||||||
|
temp->next->prev = temp->prev;
|
||||||
|
} else {
|
||||||
|
lasthiddenname = temp->prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
// re-add this element to the start
|
||||||
|
temp->next = firsthiddenname;
|
||||||
|
temp->prev = NULL;
|
||||||
|
|
||||||
|
firsthiddenname->prev = temp;
|
||||||
|
firsthiddenname = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
object_t *splitob(object_t *o) {
|
object_t *splitob(object_t *o) {
|
||||||
object_t *newob;
|
object_t *newob;
|
||||||
// decrease count on original stack temporarily, in case we
|
// decrease count on original stack temporarily, in case we
|
||||||
|
@ -7992,6 +8158,51 @@ int takedamage(object_t *o, unsigned int howmuch, int damtype) {
|
||||||
}
|
}
|
||||||
|
|
||||||
adjustdamob(o, &howmuch, damtype);
|
adjustdamob(o, &howmuch, damtype);
|
||||||
|
|
||||||
|
// effects which have to happen before damage is applied...
|
||||||
|
// explodes?
|
||||||
|
f = hasflag(o->flags, F_EXPLODEONDAM);
|
||||||
|
if (f) {
|
||||||
|
if (f->val[2] == B_IFACTIVATED) {
|
||||||
|
if (hasflag(o->flags, F_ACTIVATED)) {
|
||||||
|
if (hasflag(o->flags, F_EXPLODEONDEATH)) {
|
||||||
|
// object dies!
|
||||||
|
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
||||||
|
} else {
|
||||||
|
// explode
|
||||||
|
explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0);
|
||||||
|
return howmuch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (hasflag(o->flags, F_EXPLODEONDEATH)) {
|
||||||
|
// object dies!
|
||||||
|
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
||||||
|
} else {
|
||||||
|
// explode
|
||||||
|
explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0);
|
||||||
|
return howmuch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// flashes?
|
||||||
|
f = hasflag(o->flags, F_FLASHONDAM);
|
||||||
|
if (f) {
|
||||||
|
if (f->val[2] == B_IFACTIVATED) {
|
||||||
|
if (hasflag(o->flags, F_ACTIVATED)) {
|
||||||
|
// flash, then object dies
|
||||||
|
brightflash(getoblocation(o),f->val[0], NULL);
|
||||||
|
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// flash, then object dies
|
||||||
|
brightflash(getoblocation(o),f->val[0], NULL);
|
||||||
|
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
||||||
|
}
|
||||||
|
return howmuch;
|
||||||
|
}
|
||||||
|
|
||||||
if (howmuch <= 0) {
|
if (howmuch <= 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -8046,7 +8257,6 @@ int takedamage(object_t *o, unsigned int howmuch, int damtype) {
|
||||||
// object dies!
|
// object dies!
|
||||||
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
||||||
} else if (hpflag) {
|
} else if (hpflag) {
|
||||||
flag_t *f;
|
|
||||||
// object was just damaged
|
// object was just damaged
|
||||||
getobconditionname(o, postdamname);
|
getobconditionname(o, postdamname);
|
||||||
|
|
||||||
|
@ -8084,46 +8294,6 @@ int takedamage(object_t *o, unsigned int howmuch, int damtype) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// explodes?
|
|
||||||
f = hasflag(o->flags, F_EXPLODEONDAM);
|
|
||||||
if (f) {
|
|
||||||
if (f->val[2] == B_IFACTIVATED) {
|
|
||||||
if (hasflag(o->flags, F_ACTIVATED)) {
|
|
||||||
if (hasflag(o->flags, F_EXPLODEONDEATH)) {
|
|
||||||
// object dies!
|
|
||||||
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
|
||||||
} else {
|
|
||||||
// explode
|
|
||||||
explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (hasflag(o->flags, F_EXPLODEONDEATH)) {
|
|
||||||
// object dies!
|
|
||||||
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
|
||||||
} else {
|
|
||||||
// explode
|
|
||||||
explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// flashes?
|
|
||||||
f = hasflag(o->flags, F_FLASHONDAM);
|
|
||||||
if (f) {
|
|
||||||
if (f->val[2] == B_IFACTIVATED) {
|
|
||||||
if (hasflag(o->flags, F_ACTIVATED)) {
|
|
||||||
// flash, then object dies
|
|
||||||
brightflash(getoblocation(o),f->val[0], NULL);
|
|
||||||
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// flash, then object dies
|
|
||||||
brightflash(getoblocation(o),f->val[0], NULL);
|
|
||||||
addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return damtaken;
|
return damtaken;
|
||||||
}
|
}
|
||||||
|
@ -8292,7 +8462,7 @@ int fireat(lifeform_t *thrower, object_t *o, cell_t *where, int speed, object_t
|
||||||
//taketime(thrower, SPEED_THROW);
|
//taketime(thrower, SPEED_THROW);
|
||||||
|
|
||||||
// some obejcts will die when thrown.
|
// some obejcts will die when thrown.
|
||||||
if (o->type->id == OT_ASH) {
|
if (hasflag(o->flags, F_POWDER)) {
|
||||||
if (haslos(player, srcloc)) {
|
if (haslos(player, srcloc)) {
|
||||||
msg("%s disperses into the air.", obname);
|
msg("%s disperses into the air.", obname);
|
||||||
}
|
}
|
||||||
|
@ -9018,6 +9188,7 @@ int validateobs(void) {
|
||||||
objecttype_t *ot;
|
objecttype_t *ot;
|
||||||
int foundspells = B_FALSE;
|
int foundspells = B_FALSE;
|
||||||
int goterror = B_FALSE;
|
int goterror = B_FALSE;
|
||||||
|
flag_t *f;
|
||||||
for (ot = objecttype ; ot ; ot = ot->next) {
|
for (ot = objecttype ; ot ; ot = ot->next) {
|
||||||
if ((ot->obclass->id == OC_SPELL) || (ot->obclass->id == OC_ABILITY)) {
|
if ((ot->obclass->id == OC_SPELL) || (ot->obclass->id == OC_ABILITY)) {
|
||||||
if (!foundspells) foundspells = B_TRUE;
|
if (!foundspells) foundspells = B_TRUE;
|
||||||
|
@ -9050,6 +9221,13 @@ int validateobs(void) {
|
||||||
printf("ERROR in object '%s' - firearms need to have F_RANGE.", ot->name);
|
printf("ERROR in object '%s' - firearms need to have F_RANGE.", ot->name);
|
||||||
goterror = B_TRUE;
|
goterror = B_TRUE;
|
||||||
}
|
}
|
||||||
|
f = hasflag(ot->flags, F_TECHLEVEL);
|
||||||
|
if (f && (f->val[0] != PR_INEPT)) {
|
||||||
|
if (!hasflag(ot->flags, F_HASHIDDENNAME)) {
|
||||||
|
printf("ERROR in object '%s' - has a techlevel but doesn't have a hidden name.", ot->name);
|
||||||
|
goterror = B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return goterror;
|
return goterror;
|
||||||
|
|
|
@ -87,6 +87,7 @@ char *getrandomobwithclass(map_t *map, enum OBCLASS cid, char *buf);
|
||||||
enum SPELLSCHOOL getschool(enum OBTYPE sid);
|
enum SPELLSCHOOL getschool(enum OBTYPE sid);
|
||||||
char *getschoolname(enum SPELLSCHOOL sch);
|
char *getschoolname(enum SPELLSCHOOL sch);
|
||||||
int getshatterdam(object_t *o);
|
int getshatterdam(object_t *o);
|
||||||
|
enum SKILLLEVEL gettechlevel(object_t *o);
|
||||||
int getthrowdam(object_t *o);
|
int getthrowdam(object_t *o);
|
||||||
int hasedibleob(obpile_t *op);
|
int hasedibleob(obpile_t *op);
|
||||||
object_t *hasknownob(obpile_t *op, enum OBTYPE oid);
|
object_t *hasknownob(obpile_t *op, enum OBTYPE oid);
|
||||||
|
@ -116,6 +117,7 @@ int isequippedon(object_t *o, enum BODYPART bp);
|
||||||
int isfirearm(object_t *o);
|
int isfirearm(object_t *o);
|
||||||
int isflammable(object_t *o);
|
int isflammable(object_t *o);
|
||||||
int isknown(object_t *o);
|
int isknown(object_t *o);
|
||||||
|
int isknownot(objecttype_t *ot);
|
||||||
int isidentified(object_t *o);
|
int isidentified(object_t *o);
|
||||||
int isimpassableob(object_t *o, lifeform_t *lf);
|
int isimpassableob(object_t *o, lifeform_t *lf);
|
||||||
int ismetal(enum MATERIAL mat);
|
int ismetal(enum MATERIAL mat);
|
||||||
|
@ -160,6 +162,7 @@ int removeob(object_t *o, int howmany);
|
||||||
object_t *relinkob(object_t *src, obpile_t *dst);
|
object_t *relinkob(object_t *src, obpile_t *dst);
|
||||||
void setblessed(object_t *o, enum BLESSTYPE wantbless);
|
void setblessed(object_t *o, enum BLESSTYPE wantbless);
|
||||||
void setinscription(object_t *o, char *text);
|
void setinscription(object_t *o, char *text);
|
||||||
|
void shufflehiddennames(void);
|
||||||
object_t *splitob(object_t *o);
|
object_t *splitob(object_t *o);
|
||||||
int takedamage(object_t *o, unsigned int howmuch, int damtype);
|
int takedamage(object_t *o, unsigned int howmuch, int damtype);
|
||||||
int fireat(lifeform_t *thrower, object_t *o, cell_t *where, int speed, object_t *firearm);
|
int fireat(lifeform_t *thrower, object_t *o, cell_t *where, int speed, object_t *firearm);
|
||||||
|
|
10
spell.c
10
spell.c
|
@ -244,6 +244,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef
|
||||||
}
|
}
|
||||||
} else if (abilid == OT_A_SPRINT) {
|
} else if (abilid == OT_A_SPRINT) {
|
||||||
int howlong;
|
int howlong;
|
||||||
|
int slev;
|
||||||
if (lfhasflag(user, F_TIRED)) {
|
if (lfhasflag(user, F_TIRED)) {
|
||||||
if (isplayer(user)) {
|
if (isplayer(user)) {
|
||||||
msg("You are too tired to sprint right now.");
|
msg("You are too tired to sprint right now.");
|
||||||
|
@ -256,6 +257,11 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
howlong = 5;
|
howlong = 5;
|
||||||
|
// +2 for each athletics skill level
|
||||||
|
slev = getskill(user, SK_ATHLETICS);
|
||||||
|
if (slev > PR_INEPT) {
|
||||||
|
howlong += (2*slev);
|
||||||
|
}
|
||||||
// modify for constitution
|
// modify for constitution
|
||||||
howlong = modifybystat(howlong, user, A_CON);
|
howlong = modifybystat(howlong, user, A_CON);
|
||||||
|
|
||||||
|
@ -416,7 +422,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef
|
||||||
getobname(o, obname, o->amt);
|
getobname(o, obname, o->amt);
|
||||||
msgnocap("This seems to be %s!", obname);
|
msgnocap("This seems to be %s!", obname);
|
||||||
} else {
|
} else {
|
||||||
msg("You are not yet sure what this is.");
|
msg("You cannot determine what this is.");
|
||||||
addflag(user->flags, F_FAILEDINSPECT, o->type->id, NA, NA, NULL);
|
addflag(user->flags, F_FAILEDINSPECT, o->type->id, NA, NA, NULL);
|
||||||
}
|
}
|
||||||
taketime(user, getactspeed(user));
|
taketime(user, getactspeed(user));
|
||||||
|
@ -2302,7 +2308,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, lifeform_t *target,
|
||||||
if (!validatespellcell(caster, &targcell,TT_OBJECT | TT_MONSTER, B_FALSE, spellid)) return B_TRUE;
|
if (!validatespellcell(caster, &targcell,TT_OBJECT | TT_MONSTER, B_FALSE, spellid)) return B_TRUE;
|
||||||
|
|
||||||
if (haslos(player, targcell)) {
|
if (haslos(player, targcell)) {
|
||||||
msg("A small spark appears.");
|
msg("A small spark of flame appears.");
|
||||||
if (seenbyplayer) *seenbyplayer = B_TRUE;
|
if (seenbyplayer) *seenbyplayer = B_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue