- [+] fix carpetted floor colour
- [+] bug: giant ant zombie not attacking giant ant - [+] change table symol to PI - [+] replace footstool with chair - [+] allow reusable cells in vaults - [+] slippery floors should make pushing easier - [+] when checking stairs i found "Pete footprints" - [+] new monsters: - [+] polar bear - [+] owlbear - [+] bug: sleeping monsters never waking up. - [+] "random good weapon" wish broken. fixed now. - [+] cope with med/small/large dancing weapons - [+] generice code to check baseid instead of raceid - [+] handle automatic generation - need to populate: - [+] select an appropriate object (rarity freq / common, uncommon, rare) - [+] copy from obejct to lf: - [+] OBHP - [+] SIZE - [+] OBATTACKDELAY - [+] bug: always getting 'twisted branch' for small dancing weapon - [+] bug: crash in attackcell. nweps = 0 - [+] replace thin walls with unicode symbols - [+] glass - [+] wood - [+] metal - [+] getcellglyph() looks at surrounding cells if required - [+] too slow? - [+] attacking helpless undead shouldn't count - [+] differentiate EXTRADAM from WOUNDING. - [+] wounding = add damage to ALL attacks - [+] EXTRADAM = add DIFFERENT type of damage - [+] psionics on levelup - [+] make this a "select from iq/10", not a select from any - [+] if poison needle trap misses, place it on the ground. - [+] no nauseated effects while asleep. - [+] if something runs out of view adjacent to you, say "xxx moves behind you" - [+] ashkari bug: - [+] when getting enraged by the sight of something, f_rage runs out a few turns before f_aicontrolled. should be the same!!!
This commit is contained in:
parent
e8cc823d72
commit
c6fed68ba2
9
ai.c
9
ai.c
|
@ -1195,6 +1195,7 @@ int ai_bored(lifeform_t *lf, lifeform_t *master, int icanattack) {
|
||||||
|
|
||||||
// look for any hated lfs or enemies
|
// look for any hated lfs or enemies
|
||||||
newtarget = NULL;
|
newtarget = NULL;
|
||||||
|
lf->loslock = B_TRUE;
|
||||||
for (n = 0; n < lf->nlos; n++) {
|
for (n = 0; n < lf->nlos; n++) {
|
||||||
lifeform_t *who;
|
lifeform_t *who;
|
||||||
if (lf->los[n] != lf->cell) { // not ourself
|
if (lf->los[n] != lf->cell) { // not ourself
|
||||||
|
@ -1287,6 +1288,7 @@ int ai_bored(lifeform_t *lf, lifeform_t *master, int icanattack) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lf->loslock = B_FALSE;
|
||||||
if (nhateposs) {
|
if (nhateposs) {
|
||||||
newtarget = hateposs[rnd(0,nhateposs-1)];
|
newtarget = hateposs[rnd(0,nhateposs-1)];
|
||||||
} else if (nposs) {
|
} else if (nposs) {
|
||||||
|
@ -1835,6 +1837,7 @@ int ai_premovement(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ally needs ammo?
|
// ally needs ammo?
|
||||||
|
lf->loslock = B_TRUE;
|
||||||
for (i = 0; i < lf->nlos; i++) {
|
for (i = 0; i < lf->nlos; i++) {
|
||||||
cell_t *c;
|
cell_t *c;
|
||||||
c = lf->los[i];
|
c = lf->los[i];
|
||||||
|
@ -1857,6 +1860,7 @@ int ai_premovement(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lf->loslock = B_FALSE;
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3375,6 +3379,7 @@ int lookforobs(lifeform_t *lf) {
|
||||||
// look around for objects which we want, if we don't already have a targetcell.
|
// look around for objects which we want, if we don't already have a targetcell.
|
||||||
if (!hasflag(lf->flags, F_TARGETCELL)) {
|
if (!hasflag(lf->flags, F_TARGETCELL)) {
|
||||||
if (db) dblog(".oO { no targetcell, so looking for remote objects }");
|
if (db) dblog(".oO { no targetcell, so looking for remote objects }");
|
||||||
|
lf->loslock = B_TRUE;
|
||||||
for (i = 0 ; i < lf->nlos; i++) {
|
for (i = 0 ; i < lf->nlos; i++) {
|
||||||
int gothere = B_FALSE;
|
int gothere = B_FALSE;
|
||||||
int celldist;
|
int celldist;
|
||||||
|
@ -3386,7 +3391,6 @@ int lookforobs(lifeform_t *lf) {
|
||||||
for (o = c->obpile->first ; o ; o = nexto) {
|
for (o = c->obpile->first ; o ; o = nexto) {
|
||||||
nexto = o->next;
|
nexto = o->next;
|
||||||
if (aiwants_real(lf, o, &covets, &noids, oid, oidcovet, &nwantflags, wantflag, wantflagcovet) &&
|
if (aiwants_real(lf, o, &covets, &noids, oid, oidcovet, &nwantflags, wantflag, wantflagcovet) &&
|
||||||
//canpickup(lf, o, 1)) {
|
|
||||||
aipickupok(lf, o)) {
|
aipickupok(lf, o)) {
|
||||||
gothere = B_TRUE;
|
gothere = B_TRUE;
|
||||||
|
|
||||||
|
@ -3415,7 +3419,6 @@ int lookforobs(lifeform_t *lf) {
|
||||||
((f->val[1] != B_COVETS) && (celldist <= targdist)) ) {
|
((f->val[1] != B_COVETS) && (celldist <= targdist)) ) {
|
||||||
o = hasbetterweapon(lf, c->obpile);
|
o = hasbetterweapon(lf, c->obpile);
|
||||||
if (o && !isdangerousob(o, lf, B_TRUE) && aipickupok(lf, o)) {
|
if (o && !isdangerousob(o, lf, B_TRUE) && aipickupok(lf, o)) {
|
||||||
//&& canpickup(lf, o, 1)) {
|
|
||||||
if (db) dblog(".oO { remote cell has better weapon (%s). setting f_targetcell }",o->type->name);
|
if (db) dblog(".oO { remote cell has better weapon (%s). setting f_targetcell }",o->type->name);
|
||||||
gothere = B_TRUE;
|
gothere = B_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -3433,7 +3436,6 @@ int lookforobs(lifeform_t *lf) {
|
||||||
|
|
||||||
o = hasbetterarmour(lf, c->obpile);
|
o = hasbetterarmour(lf, c->obpile);
|
||||||
if (o && !isdangerousob(o, lf, B_TRUE) && aipickupok(lf, o)) {
|
if (o && !isdangerousob(o, lf, B_TRUE) && aipickupok(lf, o)) {
|
||||||
//canpickup(lf, o, 1)) {
|
|
||||||
if (db) dblog(".oO { remote cell has better armour (%s). setting f_targetcell }",o->type->name);
|
if (db) dblog(".oO { remote cell has better armour (%s). setting f_targetcell }",o->type->name);
|
||||||
gothere = B_TRUE;
|
gothere = B_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -3544,6 +3546,7 @@ int lookforobs(lifeform_t *lf) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lf->loslock = B_FALSE;
|
||||||
}
|
}
|
||||||
if (db) dblog(".oO { didn't find any obs i want }");
|
if (db) dblog(".oO { didn't find any obs i want }");
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
|
|
8
attack.c
8
attack.c
|
@ -554,6 +554,10 @@ int attackcell(lifeform_t *lf, cell_t *c, int force) {
|
||||||
//maxattacks = nweps; // ie. all
|
//maxattacks = nweps; // ie. all
|
||||||
|
|
||||||
maxattacks = getattacks(lf, NULL, NULL);
|
maxattacks = getattacks(lf, NULL, NULL);
|
||||||
|
// cope with special monsters with NO innate attacks, but
|
||||||
|
// which still use weapons (eg. dancing weapon).
|
||||||
|
limit(&maxattacks, 1, NA);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// if we have a weapon, this takes the place of one of our
|
// if we have a weapon, this takes the place of one of our
|
||||||
|
@ -1177,7 +1181,7 @@ int attacklf(lifeform_t *lf, lifeform_t *victim, object_t *wep, flag_t *damflag)
|
||||||
// blessed vs undead
|
// blessed vs undead
|
||||||
adjustdamforblessings(lf, &(dam[0]), victim, wep->blessed);
|
adjustdamforblessings(lf, &(dam[0]), victim, wep->blessed);
|
||||||
|
|
||||||
// modify for weapon skill, strength etc
|
// modify for weapon skill, strength, rings of wounding etc
|
||||||
applylfdammod(&dam[0], lf, wep);
|
applylfdammod(&dam[0], lf, wep);
|
||||||
|
|
||||||
// modify for size
|
// modify for size
|
||||||
|
@ -2648,7 +2652,7 @@ int getextradamlf(lifeform_t *lf, int *dam, enum DAMTYPE *damtype, int *ndam, in
|
||||||
return *dam;
|
return *dam;
|
||||||
}
|
}
|
||||||
|
|
||||||
// special case - EXTRADAM goes onto INITIAL dam[] if the same type, rather than
|
// special case - EXTRADAM of same damtype goes onto INITIAL dam[], rather than
|
||||||
// adding a new one.
|
// adding a new one.
|
||||||
getflags(lf->flags, retflag, &nretflags, F_EXTRADAM, F_NONE);
|
getflags(lf->flags, retflag, &nretflags, F_EXTRADAM, F_NONE);
|
||||||
for (i = 0; i < nretflags; i++) {
|
for (i = 0; i < nretflags; i++) {
|
||||||
|
|
318
data.c
318
data.c
|
@ -2050,7 +2050,7 @@ void initobjects(void) {
|
||||||
addflag(lastmaterial->flags, F_HARDNESS, 20, NA, NA, NULL);
|
addflag(lastmaterial->flags, F_HARDNESS, 20, NA, NA, NULL);
|
||||||
|
|
||||||
// object classes
|
// object classes
|
||||||
addoc(OC_BUILDING, "Buildings", "Shops, etc.", '_', C_GREY, RR_RARE);
|
addoc(OC_BUILDING, "Buildings", "Shops, etc.", UNI_HOUSE, C_GREY, RR_RARE);
|
||||||
addocnoun(lastobjectclass, "building");
|
addocnoun(lastobjectclass, "building");
|
||||||
addocnoun(lastobjectclass, "shop");
|
addocnoun(lastobjectclass, "shop");
|
||||||
addocnoun(lastobjectclass, "store");
|
addocnoun(lastobjectclass, "store");
|
||||||
|
@ -2754,8 +2754,8 @@ void initobjects(void) {
|
||||||
// traps - cell only
|
// traps - cell only
|
||||||
addot(OT_TRAPARROW, "arrow trap", "A pressure plate which causes arrows to shoot at you.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPARROW, "arrow trap", "A pressure plate which causes arrows to shoot at you.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 80, B_TRUE, NA, "ground");
|
addflag(lastot->flags, F_TRAP, 80, B_TRUE, NA, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 76, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 76, RR_COMMON, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 76, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 76, RR_COMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_BROWN, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_BROWN, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, 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);
|
||||||
|
@ -2765,8 +2765,8 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPARROWP, "poison arrow trap", "A pressure plate which causes poisoned arrows to shoot at you.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPARROWP, "poison arrow trap", "A pressure plate which causes poisoned arrows to shoot at you.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 85, B_TRUE, NA, "ground");
|
addflag(lastot->flags, F_TRAP, 85, B_TRUE, NA, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 69, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 69, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 69, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 69, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_BROWN, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_BROWN, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, 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);
|
||||||
|
@ -2776,8 +2776,8 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPPIT, "pit trap", "A pressure plate which causes the floor to drop away.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPPIT, "pit trap", "A pressure plate which causes the floor to drop away.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 85, B_TRUE, 22, "ground");
|
addflag(lastot->flags, F_TRAP, 85, B_TRUE, 22, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 85, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 85, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 85, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 85, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_GREY, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_GREY, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_SECRET, 60, NA, NA, NULL);
|
addflag(lastot->flags, F_SECRET, 60, NA, NA, NULL);
|
||||||
|
@ -2796,8 +2796,8 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPSUMMON, "summoning trap", "A magical trap which causes a monster to appear.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPSUMMON, "summoning trap", "A magical trap which causes a monster to appear.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 90, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_TRAP, 90, B_TRUE, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 60, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 60, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_ICECAVE, NA, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_ICECAVE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_GREEN, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_GREEN, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -2808,8 +2808,8 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPTRIP, "tripwire", "A thin wire at ankle height.", MT_WIRE, 0.1, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPTRIP, "tripwire", "A thin wire at ankle height.", MT_WIRE, 0.1, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 50, B_FALSE, 20, "ground");
|
addflag(lastot->flags, F_TRAP, 50, B_FALSE, 20, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, RR_FREQUENT, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 90, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 90, RR_FREQUENT, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_GREY, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_GREY, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, 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);
|
||||||
|
@ -2845,8 +2845,8 @@ void initobjects(void) {
|
||||||
// traps - either cell on object
|
// traps - either cell on object
|
||||||
addot(OT_TRAPALARM, "alarm trap", "A pressure-triggered trap which sounds a loud siren.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPALARM, "alarm trap", "A pressure-triggered trap which sounds a loud siren.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 65, B_TRUE, NA, "ground");
|
addflag(lastot->flags, F_TRAP, 65, B_TRUE, NA, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_FREQUENT, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_FREQUENT, NULL);
|
||||||
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_YELLOW, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_YELLOW, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -2857,9 +2857,9 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPEBLAST, "energy blast trap", "A magical trap which blasts its victim with energy.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPEBLAST, "energy blast trap", "A magical trap which blasts its victim with energy.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 70, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_TRAP, 70, B_TRUE, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 75, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_ICECAVE, NA, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_ICECAVE, NA, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_MAGENTA, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_MAGENTA, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -2870,8 +2870,8 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPFIRE, "fire trap", "A trap which fires a pillar of flame.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPFIRE, "fire trap", "A trap which fires a pillar of flame.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 70, B_TRUE, 30, NULL);
|
addflag(lastot->flags, F_TRAP, 70, B_TRUE, 30, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 59, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 59, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 59, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 59, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_RED, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_RED, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -2882,7 +2882,7 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPLIGHTNING, "electrical trap", "A metal pressure plate which triggers a bolt of arcing electricity.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPLIGHTNING, "electrical trap", "A metal pressure plate which triggers a bolt of arcing electricity.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 65, B_TRUE, NA, "ground");
|
addflag(lastot->flags, F_TRAP, 65, B_TRUE, NA, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 59, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 59, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_CYAN, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_CYAN, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -2893,8 +2893,8 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPGAS, "gas trap", "A trap which releases poisonous gas.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPGAS, "gas trap", "A trap which releases poisonous gas.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 70, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_TRAP, 70, B_TRUE, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 69, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 69, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 69, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 69, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_LIGHTGREEN, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_LIGHTGREEN, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, 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);
|
||||||
|
@ -2905,9 +2905,9 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPMINE, "landmine trap", "A buried, pressure-sensitive explosive device.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
addot(OT_TRAPMINE, "landmine trap", "A buried, pressure-sensitive explosive device.", MT_NOTHING, 0, OC_TRAP, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_TRAP, 100, B_TRUE, NA, "ground");
|
addflag(lastot->flags, F_TRAP, 100, B_TRUE, NA, "ground");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, RR_VERYRARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 50, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 50, RR_VERYRARE, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_FOREST, 20, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_FOREST, 20, RR_VERYRARE, NULL);
|
||||||
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_OBJECTTRAP, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_GREY, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_GREY, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -2918,9 +2918,9 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_TRAPTELEPORT, "teleportation trap", "A magical dispersal field.", MT_NOTHING, 0, OC_TRAP, SZ_LARGE);
|
addot(OT_TRAPTELEPORT, "teleportation trap", "A magical dispersal field.", MT_NOTHING, 0, OC_TRAP, SZ_LARGE);
|
||||||
addflag(lastot->flags, F_TRAP, NA, B_TRUE, NA, NULL);
|
addflag(lastot->flags, F_TRAP, NA, B_TRUE, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_CAVE, 80, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_ICECAVE, NA, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_ICECAVE, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_MAGENTA, '^', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_MAGENTA, '^', NA, NULL);
|
||||||
addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOPICKUP, 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);
|
||||||
|
@ -5260,7 +5260,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_MAXPOWER, 10, NA, NA, NULL);
|
addflag(lastot->flags, F_MAXPOWER, 10, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_LOSLOF, B_TRUE, LOF_DONTNEED, NA, NULL);
|
addflag(lastot->flags, F_LOSLOF, B_TRUE, LOF_DONTNEED, NA, NULL);
|
||||||
addot(OT_S_FLOATINGDISC, "floating disc", "Creates a disc of energy to carry your equipment.", MT_NOTHING, 0, OC_SPELL, SZ_TINY);
|
addot(OT_S_FLOATINGDISC, "floating disc", "Creates a disc of energy to carry your equipment.", MT_NOTHING, 0, OC_SPELL, SZ_TINY);
|
||||||
addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "The spell's power level determines how much wight the disc can carry.");
|
addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "The spell's power level determines how much weight the disc can carry.");
|
||||||
addflag(lastot->flags, F_SPELLSCHOOL, SS_SUMMONING, NA, NA, NULL);
|
addflag(lastot->flags, F_SPELLSCHOOL, SS_SUMMONING, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL);
|
addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_MAXPOWER, 6, NA, NA, NULL);
|
addflag(lastot->flags, F_MAXPOWER, 6, NA, NA, NULL);
|
||||||
|
@ -7329,7 +7329,7 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_WOODENTABLE, "wooden table", "A waist-height wooden table.", MT_WOOD, 25, OC_FURNITURE, SZ_HUMAN);
|
addot(OT_WOODENTABLE, "wooden table", "A waist-height wooden table.", MT_WOOD, 25, OC_FURNITURE, SZ_HUMAN);
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_WOOD, '\\', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, C_WOOD, UNI_PI, NA, NULL);
|
||||||
addflag(lastot->flags, F_IMPASSABLE, SZ_MIN, SZ_HUMAN, NA, NULL);
|
addflag(lastot->flags, F_IMPASSABLE, SZ_MIN, SZ_HUMAN, NA, NULL);
|
||||||
addflag(lastot->flags, F_CLIMBOBSTACLE, 25, NA, NA, NULL);
|
addflag(lastot->flags, F_CLIMBOBSTACLE, 25, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_CRUSHABLE, SZ_LARGE, NA, NA, NULL);
|
addflag(lastot->flags, F_CRUSHABLE, SZ_LARGE, NA, NA, NULL);
|
||||||
|
@ -7341,11 +7341,14 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_DTVULN, DT_BASH, NA, NA, NULL);
|
addflag(lastot->flags, F_DTVULN, DT_BASH, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DTVULN, DT_CHOP, NA, NA, NULL);
|
addflag(lastot->flags, F_DTVULN, DT_CHOP, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_GROWSTO, OT_DOORWOOD, VT_OB, NA, NULL);
|
addflag(lastot->flags, F_GROWSTO, OT_DOORWOOD, VT_OB, NA, NULL);
|
||||||
addflag(lastot->flags, F_SHRINKSTO, OT_WOODENSTOOL, VT_OB, NA, NULL);
|
addflag(lastot->flags, F_SHRINKSTO, OT_WOODENCHAIR, VT_OB, NA, NULL);
|
||||||
|
|
||||||
addot(OT_WOODENSTOOL, "wooden footstool", "A small, wooden footstool.", MT_WOOD, 20, OC_FURNITURE, SZ_MEDIUM);
|
addot(OT_WOODENCHAIR, "wooden chair", "A small wooden chair.", MT_WOOD, 20, OC_FURNITURE, SZ_MEDIUM);
|
||||||
addflag(lastot->flags, F_RARITY, H_ALL, 83, RR_COMMON, NULL);
|
addflag(lastot->flags, F_RARITY, H_ALL, 83, RR_COMMON, NULL);
|
||||||
addflag(lastot->flags, F_GLYPH, C_WOOD, '\\', NA, NULL);
|
addflag(lastot->flags, F_IMPASSABLE, SZ_MIN, SZ_MEDIUM, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_CRUSHABLE, SZ_LARGE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_PUSHABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastot->flags, F_GLYPH, C_WOOD, UNI_CHAIR, 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_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_OBHP, 4, 4, NA, NULL);
|
addflag(lastot->flags, F_OBHP, 4, 4, NA, NULL);
|
||||||
|
@ -7406,7 +7409,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_INVISOB, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_INVISOB, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOGLYPH, NA, NA, NA, NULL);
|
addflag(lastot->flags, F_NOGLYPH, NA, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOFEEL, NA, NA, NA, NULL);
|
addflag(lastot->flags, F_NOFEEL, NA, NA, NA, NULL);
|
||||||
//addflag(lastot->flags, F_TEMPMOD, -15, NA, NA, NULL); // this flag added by spell
|
addflag(lastot->flags, F_TEMPMOD, -20, NA, NA, NULL); // this flag replaced by spell
|
||||||
addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); // overridden by spell
|
addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); // overridden by spell
|
||||||
addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL);
|
addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -7490,7 +7493,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_INVISOB, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_INVISOB, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOGLYPH, NA, NA, NA, NULL);
|
addflag(lastot->flags, F_NOGLYPH, NA, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOFEEL, NA, NA, NA, NULL);
|
addflag(lastot->flags, F_NOFEEL, NA, NA, NA, NULL);
|
||||||
//addflag(lastot->flags, F_TEMPMOD, -15, NA, NA, NULL); // this flag added by spell
|
addflag(lastot->flags, F_TEMPMOD, 20, NA, NA, NULL); // this flag replaced by spell
|
||||||
addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); // overridden by spell
|
addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); // overridden by spell
|
||||||
addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL);
|
addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -8452,7 +8455,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_VALUE, 300, NA, NA, NULL);
|
addflag(lastot->flags, F_VALUE, 300, NA, NA, NULL);
|
||||||
addot(OT_RING_WOUNDING, "ring of wounding", "Increases the damage output of the wearer.", MT_METAL, 0.1, OC_RING, SZ_MINI);
|
addot(OT_RING_WOUNDING, "ring of wounding", "Increases the damage output of the wearer.", MT_METAL, 0.1, OC_RING, SZ_MINI);
|
||||||
addflag(lastot->flags, F_RARITY, H_ALL, 73, RR_UNCOMMON, "");
|
addflag(lastot->flags, F_RARITY, H_ALL, 73, RR_UNCOMMON, "");
|
||||||
addflag(lastot->flags, F_EQUIPCONFER, F_EXTRADAM, NA, NA, "0d0+4");
|
addflag(lastot->flags, F_EQUIPCONFER, F_WOUNDING, 4, NA, NULL);
|
||||||
addflag(lastot->flags, F_ENCHANTABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_ENCHANTABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_IDWHENUSED, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_IDWHENUSED, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_VALUE, 350, NA, NA, NULL);
|
addflag(lastot->flags, F_VALUE, 350, NA, NA, NULL);
|
||||||
|
@ -8495,6 +8498,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_EQUIPCONFER, F_HPDRAIN, 1, DT_DIRECT, "life force draining");
|
addflag(lastot->flags, F_EQUIPCONFER, F_HPDRAIN, 1, DT_DIRECT, "life force draining");
|
||||||
addflag(lastot->flags, F_VALUE, 400, NA, NA, NULL);
|
addflag(lastot->flags, F_VALUE, 400, NA, NA, NULL);
|
||||||
addot(OT_RING_CONTROL, "ring of control", "Allows the wearer control over teleportation and polymorphic effects.", MT_METAL, 0.1, OC_RING, SZ_MINI);
|
addot(OT_RING_CONTROL, "ring of control", "Allows the wearer control over teleportation and polymorphic effects.", MT_METAL, 0.1, OC_RING, SZ_MINI);
|
||||||
|
addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "This ring also prevents innate rage when seeing certain races.");
|
||||||
addflag(lastot->flags, F_RARITY, H_ALL, 75, RR_RARE, "");
|
addflag(lastot->flags, F_RARITY, H_ALL, 75, RR_RARE, "");
|
||||||
addflag(lastot->flags, F_EQUIPCONFER, F_CONTROL, NA, NA, NULL);
|
addflag(lastot->flags, F_EQUIPCONFER, F_CONTROL, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_VALUE, 350, NA, NA, NULL);
|
addflag(lastot->flags, F_VALUE, 350, NA, NA, NULL);
|
||||||
|
@ -10890,9 +10894,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_VLOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_VLOW, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, NA, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, NA, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, NA, NULL);
|
|
||||||
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, 4, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, 4, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 4, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 4, NA, NA, NULL);
|
||||||
|
@ -10975,8 +10978,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_NONE, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_NONE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_NOSTAIRS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSTAIRS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 0, 1, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 0, 1, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL);
|
||||||
|
@ -11316,8 +11319,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_GODBONUS, PL_PLEASED, GB_FLAG, F_FEARLESS, "-1,NA,NA");
|
addflag(lastrace->flags, F_GODBONUS, PL_PLEASED, GB_FLAG, F_FEARLESS, "-1,NA,NA");
|
||||||
addflag(lastrace->flags, F_GODBONUS, PL_PLEASED, GB_FLAG, F_STAMBOOST, "5,NA,NA");
|
addflag(lastrace->flags, F_GODBONUS, PL_PLEASED, GB_FLAG, F_STAMBOOST, "5,NA,NA");
|
||||||
addflag(lastrace->flags, F_GODBONUS, PL_DELIGHTED, GB_FLAG, F_ACCURACYMOD, "15,NA,NA");
|
addflag(lastrace->flags, F_GODBONUS, PL_DELIGHTED, GB_FLAG, F_ACCURACYMOD, "15,NA,NA");
|
||||||
sprintf(buf, "%d,%d,3", DT_DIRECT, B_FALSE);
|
addflag(lastrace->flags, F_GODBONUS, PL_DELIGHTED, GB_FLAG, F_WOUNDING, "3,NA,NA");
|
||||||
addflag(lastrace->flags, F_GODBONUS, PL_DELIGHTED, GB_FLAG, F_EXTRADAM, buf);
|
|
||||||
addflag(lastrace->flags, F_GODBONUS, PL_ECSTATIC, GB_FLAG, F_MINCRITCHANCE, "25,0,0");
|
addflag(lastrace->flags, F_GODBONUS, PL_ECSTATIC, GB_FLAG, F_MINCRITCHANCE, "25,0,0");
|
||||||
|
|
||||||
addflag(lastrace->flags, F_GODBATTLE, NA, NA, NA, "restoring stamina");
|
addflag(lastrace->flags, F_GODBATTLE, NA, NA, NA, "restoring stamina");
|
||||||
|
@ -12116,7 +12118,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_GOOD, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_GOOD, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_VERYRARE, NA, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
||||||
|
@ -12904,7 +12906,7 @@ void initrace(void) {
|
||||||
setbodytype(lastrace, BT_HUMANOID);
|
setbodytype(lastrace, BT_HUMANOID);
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 3, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
||||||
|
@ -13812,7 +13814,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_HIGH, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_HIGH, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_GTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_GTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
|
@ -13930,7 +13932,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
||||||
|
@ -13964,7 +13966,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 72, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 72, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUGE, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUGE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 6, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 6, NA, NA, NULL);
|
||||||
|
@ -13996,7 +13998,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_EXLOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_EXLOW, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 72, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 72, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
|
@ -14155,8 +14157,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, "small dust cloud");
|
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, "small dust cloud");
|
||||||
addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "large dust cloud");
|
addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "large dust cloud");
|
||||||
addflag(lastrace->flags, F_EXTRACORPSE, 50, NA, NA, "pile of sleeping powder");
|
addflag(lastrace->flags, F_EXTRACORPSE, 50, NA, NA, "pile of sleeping powder");
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL);
|
||||||
|
@ -14259,8 +14261,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 2, NA, NA, NULL);
|
||||||
|
@ -14589,9 +14591,9 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_MASTERVAULTS, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 5, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 5, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 5, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 5, NA, NA, NULL);
|
||||||
|
@ -15033,16 +15035,16 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_DTIMMUNE, DT_BASH, NA, NA, NULL);
|
addflag(lastrace->flags, F_DTRESIST, DT_BASH, NA, NA, NULL);
|
||||||
|
|
||||||
addrace(R_FUNGUSPETRIFY, "petrifungus", 0.5, 'F', C_BLUE, MT_PLANT, RC_PLANT, "This ominous blue fungus has evolved a particularly dangerous protective mechanism, releasing spores which instantly transform living flesh to stone.");
|
addrace(R_FUNGUSPETRIFY, "petrifungus", 0.5, 'F', C_BLUE, MT_PLANT, RC_PLANT, "This ominous blue fungus has evolved a particularly dangerous protective mechanism, releasing spores which instantly transform living flesh to stone.");
|
||||||
//has statues and stones nearby
|
//has statues and stones nearby
|
||||||
addbodypart(lastrace, BP_BODY, NULL);
|
addbodypart(lastrace, BP_BODY, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ANTNEST, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_ANTNEST, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_HARMLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HARMLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_LOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_LOW, NA, NULL);
|
||||||
|
@ -15060,7 +15062,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 4, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 4, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_DTIMMUNE, DT_BASH, NA, NA, NULL);
|
addflag(lastrace->flags, F_DTRESIST, DT_BASH, NA, NA, NULL);
|
||||||
|
|
||||||
addrace(R_FUNGUSRAGE, "ragefungus", 0.5, 'F', C_RED, MT_PLANT, RC_PLANT, "This deep red fungus protects itself by explelling rage-inducing pheremones, causing predators to attack each other instead of it.");
|
addrace(R_FUNGUSRAGE, "ragefungus", 0.5, 'F', C_RED, MT_PLANT, RC_PLANT, "This deep red fungus protects itself by explelling rage-inducing pheremones, causing predators to attack each other instead of it.");
|
||||||
addbodypart(lastrace, BP_BODY, NULL);
|
addbodypart(lastrace, BP_BODY, NULL);
|
||||||
|
@ -15085,7 +15087,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_DTIMMUNE, DT_BASH, NA, NA, NULL);
|
addflag(lastrace->flags, F_DTRESIST, DT_BASH, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_FILLPOT, OT_POT_FURY, BLOODFORPOT, NA, NULL);
|
addflag(lastrace->flags, F_FILLPOT, OT_POT_FURY, BLOODFORPOT, NA, NULL);
|
||||||
|
|
||||||
addrace(R_GLUON, "gluon", 1, 'F', C_YELLOW, MT_PLANT, RC_PLANT, "A walking plant-based monster whose body is covered with a thick glue-like secretion.");
|
addrace(R_GLUON, "gluon", 1, 'F', C_YELLOW, MT_PLANT, RC_PLANT, "A walking plant-based monster whose body is covered with a thick glue-like secretion.");
|
||||||
|
@ -15137,7 +15139,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_MAXATTACKS, 1, 1, NA, NULL);
|
addflag(lastrace->flags, F_MAXATTACKS, 1, 1, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TREMORSENSE, 10, NA, NA, NULL);
|
addflag(lastrace->flags, F_TREMORSENSE, 10, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_DTIMMUNE, DT_BASH, NA, NA, NULL);
|
addflag(lastrace->flags, F_DTRESIST, DT_BASH, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_CANWILL, OT_S_CLONE, 0, 100, "pw:1;");
|
addflag(lastrace->flags, F_CANWILL, OT_S_CLONE, 0, 100, "pw:1;");
|
||||||
addflag(lastrace->flags, F_CANWILL, OT_S_ENTANGLE, 50, 50, "pw:2; range:1;");
|
addflag(lastrace->flags, F_CANWILL, OT_S_ENTANGLE, 50, 50, "pw:2; range:1;");
|
||||||
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_CLONE, NA, NA, "expands");
|
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_CLONE, NA, NA, "expands");
|
||||||
|
@ -15221,7 +15223,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, 4, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, 4, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 2, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_DTIMMUNE, DT_BASH, NA, NA, NULL);
|
addflag(lastrace->flags, F_DTRESIST, DT_BASH, NA, NA, NULL);
|
||||||
// end plants
|
// end plants
|
||||||
|
|
||||||
// animals
|
// animals
|
||||||
|
@ -15255,11 +15257,11 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
|
||||||
addrace(R_BATMUTATED, "mutated bat", 3, 'B', C_MAGENTA, MT_FLESH, RC_ANIMAL, "Bats exposed to toxic radiation become mutated, and their sonic navigation skills turn deadly.");
|
addrace(R_BATMUTATED, "mutated bat", 3, 'B', C_MAGENTA, MT_FLESH, RC_ANIMAL, "Bats exposed to toxic radiation become mutated, and their sonic navigation skills turn deadly.");
|
||||||
setbodytype(lastrace, BT_BIRD);
|
setbodytype(lastrace, BT_BIRD);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SEWER, NA, RR_RARE, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SEWER, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_LOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_LOW, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
|
@ -15318,7 +15320,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_FILLPOT, OT_POT_MAGIC, BLOODFORPOT, NA, NULL);
|
addflag(lastrace->flags, F_FILLPOT, OT_POT_MAGIC, BLOODFORPOT, NA, NULL);
|
||||||
addrace(R_BATVAMPIRE, "vampire bat", 6, 'B', C_BLUE, MT_FLESH, RC_ANIMAL, "Bats which suck the blood of their victims.");
|
addrace(R_BATVAMPIRE, "vampire bat", 6, 'B', C_BLUE, MT_FLESH, RC_ANIMAL, "Bats which suck the blood of their victims.");
|
||||||
setbodytype(lastrace, BT_BIRD);
|
setbodytype(lastrace, BT_BIRD);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -15355,7 +15357,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_TERRITORIAL, 2, NA , NA, NULL);
|
addflag(lastrace->flags, F_TERRITORIAL, 2, NA , NA, NULL);
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_NEUTRAL, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_NEUTRAL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_FREQUENT, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_FREQUENT, NULL);
|
||||||
addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL);
|
addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 3, NA, NA, NULL);
|
||||||
|
@ -15559,7 +15561,6 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_COMMON, NULL);
|
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTASLEEPPCT, 80, NA, NA, NULL); // hibernating
|
addflag(lastrace->flags, F_STARTASLEEPPCT, 80, NA, NA, NULL); // hibernating
|
||||||
addflag(lastrace->flags, F_HITDICE, 6, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 6, NA, NA, NULL);
|
||||||
|
@ -15570,7 +15571,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 3, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 3, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 3, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 3, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 6, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 6, NA, NULL);
|
||||||
addflag(lastrace->flags, F_MAXATTACKS, 3, 3, NA, NULL);
|
addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL);
|
||||||
|
@ -15596,7 +15597,6 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_UNCOMMON, NULL);
|
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTASLEEPPCT, 80, NA, NA, NULL); // hibernating
|
addflag(lastrace->flags, F_STARTASLEEPPCT, 80, NA, NA, NULL); // hibernating
|
||||||
addflag(lastrace->flags, F_HITDICE, 7, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 7, NA, NA, NULL);
|
||||||
|
@ -15607,7 +15607,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 6, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 6, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 6, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 6, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 8, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 8, NA, NULL);
|
||||||
addflag(lastrace->flags, F_MAXATTACKS, 3, 3, NA, NULL);
|
addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL);
|
||||||
|
@ -15625,6 +15625,69 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_MINIONS, 25, 1, 2, "bear cub");
|
addflag(lastrace->flags, F_MINIONS, 25, 1, 2, "bear cub");
|
||||||
addflag(lastrace->flags, F_MORALE, 10, NA, NA, NULL);
|
addflag(lastrace->flags, F_MORALE, 10, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
|
||||||
|
addrace(R_BEAROWL, "owlbear", 750, 'Q', C_DARKYELLOW, MT_FLESH, RC_ANIMAL, "A crazed hybrid between an owl's head and a bear's body, madness shiens in this beast's eyes.");
|
||||||
|
setbodytype(lastrace, BT_QUADRAPED);
|
||||||
|
lastrace->baseid = R_BEAR;
|
||||||
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
||||||
|
addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HITDICE, 7, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_TR, 8, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
|
||||||
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HASATTACK, OT_BEAK, 6, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HATESALL, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 4, NA, "roars^a roar");
|
||||||
|
addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_ADEPT, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTSKILL, SK_LISTEN, PR_ADEPT, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_CANWILL, OT_A_RAGE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_CANWILL, OT_A_GRAB, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MORALE, 20, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOFLEE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
|
||||||
|
addrace(R_BEARPOLAR, "polar bear", 250, 'Q', C_WHITE, MT_FLESH, RC_ANIMAL, "A very large white bear.");
|
||||||
|
setbodytype(lastrace, BT_QUADRAPED);
|
||||||
|
lastrace->baseid = R_BEAR;
|
||||||
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_VERYRARE, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_RARE, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_ICECAVE, NA, RR_UNCOMMON, NULL);
|
||||||
|
addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HITDICE, 8, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_TR, 8, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
|
||||||
|
addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 10, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 4, NA, "roars^a roar");
|
||||||
|
addflag(lastrace->flags, F_STARTSKILL, SK_SWIMMING, PR_ADEPT, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_CANWILL, OT_A_GRAB, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_CANWILL, OT_A_CRUSH, NA, NA, "dam:2d6;");
|
||||||
|
addflag(lastrace->flags, F_CRITKNOCKDOWN, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MORALE, 15, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
|
||||||
addrace(R_BEARCUB, "bear cub", 60, 'q', C_BROWN, MT_FLESH, RC_ANIMAL, "Cute little baby bears. Still dangerous though.");
|
addrace(R_BEARCUB, "bear cub", 60, 'q', C_BROWN, MT_FLESH, RC_ANIMAL, "Cute little baby bears. Still dangerous though.");
|
||||||
setbodytype(lastrace, BT_QUADRAPED);
|
setbodytype(lastrace, BT_QUADRAPED);
|
||||||
lastrace->baseid = R_BEAR;
|
lastrace->baseid = R_BEAR;
|
||||||
|
@ -15894,7 +15957,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, "");
|
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, "");
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_ENHANCESMELL, 6, NA, NA, NULL);
|
addflag(lastrace->flags, F_ENHANCESMELL, 6, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 3, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 4, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 4, NA, NA, NULL);
|
||||||
|
@ -15928,7 +15992,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, "");
|
addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, "");
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 5, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 5, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 5, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 5, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 10, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 10, NA, NULL);
|
||||||
|
@ -15986,8 +16050,8 @@ void initrace(void) {
|
||||||
setbodytype(lastrace, BT_QUADRAPED);
|
setbodytype(lastrace, BT_QUADRAPED);
|
||||||
addbodypart(lastrace, BP_TAIL, NULL);
|
addbodypart(lastrace, BP_TAIL, NULL);
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_NEUTRAL, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_NEUTRAL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, "");
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, "");
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL);
|
||||||
|
@ -16156,7 +16220,7 @@ void initrace(void) {
|
||||||
addrace(R_HAWKBLOOD, "trained hawk", 1, 'A', C_LIGHTRED, MT_FLESH, RC_ANIMAL, "Once ordinary hawk, these creatures have been battle-hardened through regular combat."); // 'A' for Avian
|
addrace(R_HAWKBLOOD, "trained hawk", 1, 'A', C_LIGHTRED, MT_FLESH, RC_ANIMAL, "Once ordinary hawk, these creatures have been battle-hardened through regular combat."); // 'A' for Avian
|
||||||
setbodytype(lastrace, BT_BIRD);
|
setbodytype(lastrace, BT_BIRD);
|
||||||
lastrace->baseid = R_HAWK;
|
lastrace->baseid = R_HAWK;
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_TERRITORIAL, 5, NA , NA, NULL);
|
addflag(lastrace->flags, F_TERRITORIAL, 5, NA , NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL);
|
||||||
|
@ -17997,13 +18061,13 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, "");
|
addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, "");
|
||||||
addflag(lastrace->flags, F_CANWILL, OT_A_FLY, NA, NA, NULL);
|
addflag(lastrace->flags, F_CANWILL, OT_A_FLY, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_A_FLY, NA, NA, NULL);
|
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_A_FLY, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_ADEPT, NA, NULL);
|
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_ADEPT, NA, NULL);
|
||||||
addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL);
|
addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 1, NA, NULL);
|
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 3, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 2, NA, "buzzes angrily^an angry buzzing");
|
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 2, NA, "buzzes angrily^an angry buzzing");
|
||||||
addflag(lastrace->flags, F_NOISETEXT, N_FLY, SV_TALK, NA, "^buzzing wings");
|
addflag(lastrace->flags, F_NOISETEXT, N_FLY, SV_TALK, NA, "^buzzing wings");
|
||||||
|
@ -18107,8 +18171,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_EXTRACORPSE, NA, NA, NA, "small fire");
|
addflag(lastrace->flags, F_EXTRACORPSE, NA, NA, NA, "small fire");
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 2, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
|
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
|
||||||
|
@ -18345,7 +18409,7 @@ void initrace(void) {
|
||||||
addbodypart(lastrace, BP_TAIL, NULL);
|
addbodypart(lastrace, BP_TAIL, NULL);
|
||||||
addbodypart(lastrace, BP_WINGS, NULL);
|
addbodypart(lastrace, BP_WINGS, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_HEAVEN, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_HEAVEN, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
|
@ -18595,7 +18659,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
|
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOSTAIRS, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOSTAIRS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
||||||
|
@ -18690,8 +18755,8 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL);
|
||||||
|
@ -18975,7 +19040,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 8, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 8, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 9, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 10, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL);
|
addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "pw:8;");
|
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "pw:8;");
|
||||||
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "cursed robe");
|
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "cursed robe");
|
||||||
|
@ -19137,7 +19202,7 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL);
|
||||||
addflag(lastrace->flags, F_RARITY, H_SEWER, NA, RR_UNCOMMON, NULL);
|
addflag(lastrace->flags, F_RARITY, H_SEWER, NA, RR_UNCOMMON, NULL);
|
||||||
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -19276,9 +19341,13 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL);
|
addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_XPVAL, 0, NA, NA, NULL);
|
addflag(lastrace->flags, F_XPVAL, 0, NA, NA, NULL);
|
||||||
|
|
||||||
addrace(R_DANCINGWEAPON, "dancing weapon", 0, ')', C_GREY, MT_METAL, RC_OTHER, "A magically animated weapon.");
|
addrace(R_DANCINGWEAPONS, "small dancing weapon", 0, ')', C_GREY, MT_METAL, RC_OTHER, "A magically animated weapon.");
|
||||||
|
lastrace->baseid = R_DANCINGWEAPON;
|
||||||
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_NOKO, B_TRUE, NA, NA, NULL);
|
addflag(lastrace->flags, F_NOKO, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_GETKILLEDVERB, NA, NA, NA, "destroy");
|
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "average weapon");
|
||||||
|
addflag(lastrace->flags, F_GETKILLEDVERB, NA, NA, NA, "defeat");
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_VERYRARE, NULL);
|
||||||
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
|
||||||
|
@ -19290,6 +19359,69 @@ void initrace(void) {
|
||||||
addflag(lastrace->flags, F_CANWILL, OT_S_FLIGHT, NA, NA, NULL);
|
addflag(lastrace->flags, F_CANWILL, OT_S_FLIGHT, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_FLIGHT, NA, NA, NULL);
|
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_FLIGHT, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_TR, 3, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_ADEPT, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOINJURIES, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_TREMORSENSE, 10, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_AWARENESS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_SILENTMOVE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_DEAF, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOSLEEP, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
addrace(R_DANCINGWEAPON, "dancing weapon", 0, ')', C_GREY, MT_METAL, RC_OTHER, "A magically animated weapon.");
|
||||||
|
lastrace->baseid = R_DANCINGWEAPON;
|
||||||
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOKO, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_GETKILLEDVERB, NA, NA, NA, "defeat");
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_VERYRARE, NULL);
|
||||||
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "good weapon");
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, "");
|
||||||
|
addflag(lastrace->flags, F_CANWILL, OT_S_FLIGHT, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_FLIGHT, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_TR, 5, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_ADEPT, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOINJURIES, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_TREMORSENSE, 10, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_SILENTMOVE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_DEAF, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOSLEEP, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
|
addrace(R_DANCINGWEAPONL, "large dancing weapon", 0, ')', C_GREY, MT_METAL, RC_OTHER, "A magically animated weapon.");
|
||||||
|
lastrace->baseid = R_DANCINGWEAPON;
|
||||||
|
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NOKO, B_TRUE, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_GETKILLEDVERB, NA, NA, NA, "defeat");
|
||||||
|
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_VERYRARE, NULL);
|
||||||
|
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "great weapon");
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, "");
|
||||||
|
addflag(lastrace->flags, F_CANWILL, OT_S_FLIGHT, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_FLIGHT, NA, NA, NULL);
|
||||||
|
addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_TR, 8, NA, NA, NULL);
|
addflag(lastrace->flags, F_TR, 8, NA, NA, NULL);
|
||||||
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_ADEPT, NA, NULL);
|
addflag(lastrace->flags, F_STARTSKILL, SK_FLIGHT, PR_ADEPT, NA, NULL);
|
||||||
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
|
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
|
||||||
|
|
BIN
data/hiscores.db
BIN
data/hiscores.db
Binary file not shown.
|
@ -1,12 +1,12 @@
|
||||||
@id:antnest
|
@id:antnest
|
||||||
@map
|
@map
|
||||||
##ddddddd##
|
R#ddddddd#R
|
||||||
#dd.....dd#
|
#dd.....dd#
|
||||||
dd.......dd
|
dd.......dd
|
||||||
O.........d
|
O.........d
|
||||||
dd.......dd
|
dd.......dd
|
||||||
#dd.....dd#
|
#dd.....dd#
|
||||||
##ddddddd##
|
R#ddddddd#R
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
|
@ -14,6 +14,7 @@ dd.......dd
|
||||||
d:cell:dirt wall
|
d:cell:dirt wall
|
||||||
.:cell:dirt
|
.:cell:dirt
|
||||||
O:exit
|
O:exit
|
||||||
|
R:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -2,17 +2,17 @@
|
||||||
@id:babayagahut_2
|
@id:babayagahut_2
|
||||||
|
|
||||||
@map
|
@map
|
||||||
###################
|
rrrrr#########rrrrr
|
||||||
######CcssscC######
|
rr####CcssscC####rr
|
||||||
###ccccccccccccc###
|
r##ccccccccccccc##r
|
||||||
##cccccc...ccccc|##
|
##cccccc...ccccc|##
|
||||||
#cccccc.ScS.cccc|.#
|
#cccccc.ScS.cccc|.#
|
||||||
#Xccccc.cFc.cccc|.#
|
#Xccccc.cFc.cccc|.#
|
||||||
#cccccc.ScS.cccc|.#
|
#cccccc.ScS.cccc|.#
|
||||||
##cccccc...ccccc|##
|
##cccccc...ccccc|##
|
||||||
###ccccccccccccc###
|
r##ccccccccccccc##r
|
||||||
######cccccBg######
|
rr####cccccBg####rr
|
||||||
###################
|
rrrrr#########rrrrr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
|
@ -27,6 +27,7 @@ C:ob:ornate chest
|
||||||
|:ob:iron cage
|
|:ob:iron cage
|
||||||
X:ob:hut's doorway
|
X:ob:hut's doorway
|
||||||
w:ob:great random weapon
|
w:ob:great random weapon
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
@id:bear_cave
|
@id:bear_cave
|
||||||
@map
|
@map
|
||||||
###########
|
rrr######rr
|
||||||
####....###
|
rr##....##r
|
||||||
###......##
|
###......##
|
||||||
.O......B.#
|
.O......B.#
|
||||||
###......##
|
###......##
|
||||||
####....###
|
rr##....##r
|
||||||
###########
|
rrr######rr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
|
@ -14,6 +14,7 @@
|
||||||
O:ob:boulder
|
O:ob:boulder
|
||||||
O:exit
|
O:exit
|
||||||
B:mon:grizzly bear
|
B:mon:grizzly bear
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
@id:troll_cave
|
@id:troll_cave
|
||||||
@map
|
@map
|
||||||
###########
|
rrr######rr
|
||||||
####....###
|
rr##....##r
|
||||||
###......##
|
###......##
|
||||||
.O........#
|
.O........#
|
||||||
###......##
|
###......##
|
||||||
####....###
|
rr##....##r
|
||||||
###########
|
rrr######rr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
O:ob:boulder
|
O:ob:boulder
|
||||||
O:exit
|
O:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -2,18 +2,18 @@
|
||||||
@id:caveboss_1
|
@id:caveboss_1
|
||||||
|
|
||||||
@map
|
@map
|
||||||
##################
|
#################r
|
||||||
#c......a.c.+AA###
|
#c......a.c.+AA###
|
||||||
#.w#.#.#.#..#AA+C#
|
#.w#.#.#.#..#AA+C#
|
||||||
+..........f####_#
|
+..........f####_#
|
||||||
#.w#.#.#.#.W#//+C#
|
#.w#.#.#.#.W#//+C#
|
||||||
#c......a.c.+//###
|
#c......a.c.+//###
|
||||||
##################
|
#################r
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:metal wall
|
#:cell:metal wall
|
||||||
f:ob:wooden footstool
|
f:ob:wooden chair
|
||||||
f:mon:goblin king
|
f:mon:goblin king
|
||||||
W:mon:red wyrmling
|
W:mon:red wyrmling
|
||||||
a:mon:goblin archer
|
a:mon:goblin archer
|
||||||
|
@ -26,12 +26,13 @@ A:ob:great armour
|
||||||
_:ob:pentagram
|
_:ob:pentagram
|
||||||
_:ob:ancient stone key
|
_:ob:ancient stone key
|
||||||
C:ob:ornate chest
|
C:ob:ornate chest
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
goesin:cave
|
goesin:cave
|
||||||
norandom
|
norandom
|
||||||
scatter(1,1,-2,-2) ob:wooden footstool:0-3
|
scatter(1,1,-2,-2) ob:wooden chair:0-3
|
||||||
scatter(1,1,-2,-2) ob:random food:0-2
|
scatter(1,1,-2,-2) ob:random food:0-2
|
||||||
mayflipx
|
mayflipx
|
||||||
tag:caveboss
|
tag:caveboss
|
||||||
|
|
|
@ -2,20 +2,20 @@
|
||||||
@id:caveboss_2
|
@id:caveboss_2
|
||||||
|
|
||||||
@map
|
@map
|
||||||
##################
|
##############rrrr
|
||||||
###.........######
|
###.........####rr
|
||||||
#.......w.c.+AA###
|
#.......w.c.+AA###
|
||||||
#.w.........#AA+C#
|
#.w.........#AA+C#
|
||||||
+..........W####_#
|
+..........W####_#
|
||||||
#.w........f#pp+C#
|
#.w........f#pp+C#
|
||||||
#.......w.c.+pp###
|
#.......w.c.+pp###
|
||||||
###.........######
|
###.........####rr
|
||||||
##################
|
##############rrrr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:metal wall
|
#:cell:metal wall
|
||||||
W:ob:wooden footstool
|
W:ob:wooden chair
|
||||||
W:mon:red wyrmling
|
W:mon:red wyrmling
|
||||||
f:mon:goblin king
|
f:mon:goblin king
|
||||||
w:ob:goblin corpse
|
w:ob:goblin corpse
|
||||||
|
@ -28,12 +28,13 @@ _:ob:pentagram
|
||||||
_:ob:cursed excellent weapon
|
_:ob:cursed excellent weapon
|
||||||
_:ob:ancient stone key
|
_:ob:ancient stone key
|
||||||
C:ob:ornate chest
|
C:ob:ornate chest
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
goesin:cave
|
goesin:cave
|
||||||
norandom
|
norandom
|
||||||
scatter(1,1,-2,-2) ob:wooden footstool:0-3
|
scatter(1,1,-2,-2) ob:wooden chair:0-3
|
||||||
scatter(1,1,-2,-2) ob:random food:0-2
|
scatter(1,1,-2,-2) ob:random food:0-2
|
||||||
mayflipx
|
mayflipx
|
||||||
tag:caveboss
|
tag:caveboss
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
@id:circular_room
|
@id:circular_room
|
||||||
@map
|
@map
|
||||||
#####+#####
|
rr###+###rr
|
||||||
###.....###
|
r##.....##r
|
||||||
##.......##
|
##.......##
|
||||||
#.........#
|
#.........#
|
||||||
+.........+
|
+.........+
|
||||||
#.........#
|
#.........#
|
||||||
##.......##
|
##.......##
|
||||||
###.....###
|
r##.....##r
|
||||||
#####+#####
|
rr###+###rr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
+:ob:wooden door
|
+:ob:wooden door
|
||||||
+:exit
|
+:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,19 +1,21 @@
|
||||||
@id:diagonal_cross
|
@id:diagonal_cross
|
||||||
@map
|
@map
|
||||||
#X.#####.X#
|
#X.##r##.X#
|
||||||
##..###..##
|
##..###..##
|
||||||
###..#..###
|
r##..#..##r
|
||||||
####...####
|
rr##...##rr
|
||||||
####...####
|
rrr#.O.#rrr
|
||||||
####.#.####
|
rr##...##rr
|
||||||
###.###.###
|
r##..#..##r
|
||||||
##..###..##
|
##..###..##
|
||||||
#X.#####.X#
|
#X.##r##.X#
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
|
O:ob:large fire:50
|
||||||
X:exit
|
X:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -15,7 +15,7 @@ autopop
|
||||||
! tables & chairs
|
! tables & chairs
|
||||||
fill(1,1,-2,-2) cell:tiled floor
|
fill(1,1,-2,-2) cell:tiled floor
|
||||||
scatter(1,1,-2,-2) ob:wooden table:20%
|
scatter(1,1,-2,-2) ob:wooden table:20%
|
||||||
scatter(1,1,-2,-2) ob:wooden footstool:20%
|
scatter(1,1,-2,-2) ob:wooden chair:20%
|
||||||
scatter(1,1,-2,-2) ob:random food:1-2
|
scatter(1,1,-2,-2) ob:random food:1-2
|
||||||
scatter(1,1,-2,-2) ob:refrigerator:1
|
scatter(1,1,-2,-2) ob:refrigerator:1
|
||||||
scatter(1,1,-2,-2) ob:steak knife:1-5
|
scatter(1,1,-2,-2) ob:steak knife:1-5
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
@id:firepit
|
@id:firepit
|
||||||
@map
|
@map
|
||||||
####+####
|
rr##+##rr
|
||||||
####.####
|
r###.###r
|
||||||
##ff_ff##
|
r#ff_ff#r
|
||||||
##ff_ff##
|
r#ff_ff#r
|
||||||
##ff.ff##
|
r#ff.ff#r
|
||||||
##ffcff##
|
r#ffcff#r
|
||||||
####d####
|
r###d###r
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
|
@ -18,6 +18,7 @@ _:ob:barricade:30
|
||||||
f:ob:immutable large fire
|
f:ob:immutable large fire
|
||||||
c:ob:untrapped ornate chest
|
c:ob:untrapped ornate chest
|
||||||
d:ob:secret door:15:cell:SOLID
|
d:ob:secret door:15:cell:SOLID
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
! a circular room filled with water
|
! a circular room filled with water
|
||||||
@id:fishbowl
|
@id:fishbowl
|
||||||
@map
|
@map
|
||||||
##ggggg##
|
r#ggggg#r
|
||||||
gggwwwggg
|
gggwwwggg
|
||||||
gwwwwwwwg
|
gwwwwwwwg
|
||||||
gwwwwwwwg
|
gwwwwwwwg
|
||||||
gwwwwwwwg
|
gwwwwwwwg
|
||||||
gggwwwggg
|
gggwwwggg
|
||||||
##ggggg##
|
r#ggggg#r
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
g:cell:glass wall
|
g:cell:glass wall
|
||||||
w:ob:very deep water:100
|
w:ob:very deep water:100
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -21,7 +21,7 @@ X:exit
|
||||||
>:ob:staircase going down
|
>:ob:staircase going down
|
||||||
+:ob:wooden door
|
+:ob:wooden door
|
||||||
/:ob:wooden table
|
/:ob:wooden table
|
||||||
-:ob:wooden footstool
|
-:ob:wooden chair
|
||||||
c:ob:lit candelabrum
|
c:ob:lit candelabrum
|
||||||
@:mon:jailer
|
@:mon:jailer
|
||||||
@end
|
@end
|
||||||
|
@ -30,7 +30,7 @@ c:ob:lit candelabrum
|
||||||
goesin:dungeon
|
goesin:dungeon
|
||||||
norandom
|
norandom
|
||||||
atoneof(10,1)(10,3)(10,5) ob:portal to lv1
|
atoneof(10,1)(10,3)(10,5) ob:portal to lv1
|
||||||
scatter(1,1,-2,-2) ob:wooden footstool:0-3
|
scatter(1,1,-2,-2) ob:wooden chair:0-3
|
||||||
scatter(1,1,-2,-2) ob:random food:0-2
|
scatter(1,1,-2,-2) ob:random food:0-2
|
||||||
mayrotate
|
mayrotate
|
||||||
maintainedge
|
maintainedge
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
@id:oval_room
|
@id:oval_room
|
||||||
@map
|
@map
|
||||||
####+####
|
rr##+##rr
|
||||||
###...###
|
###...###
|
||||||
#.......#
|
#.......#
|
||||||
#.......#
|
#.......#
|
||||||
#.......#
|
#.......#
|
||||||
###...###
|
###...###
|
||||||
####+####
|
rr##+##rr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
+:ob:wooden door
|
+:ob:wooden door
|
||||||
+:exit
|
+:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
@id:guarded_pitbridge
|
@id:guarded_pitbridge
|
||||||
@map
|
@map
|
||||||
##X###
|
##X##r
|
||||||
#^_^##
|
#^_^##
|
||||||
#^_^m#
|
#^_^m#
|
||||||
#^_^##
|
#^_^##
|
||||||
##X###
|
##X##r
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
|
@ -13,6 +13,7 @@ _:ob:barricade
|
||||||
^:ob:hole in the ground
|
^:ob:hole in the ground
|
||||||
m:mon:humanoid with firearm
|
m:mon:humanoid with firearm
|
||||||
X:exit
|
X:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
@id:playerstart_5
|
@id:playerstart_5
|
||||||
@map
|
@map
|
||||||
#######
|
r#####r
|
||||||
##...##
|
##...##
|
||||||
#.....#
|
#.....#
|
||||||
#..p..x
|
#..p..x
|
||||||
#.....#
|
#.....#
|
||||||
##...##
|
##...##
|
||||||
#######
|
r#####r
|
||||||
@end
|
@end
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
p:ob:playerstart
|
p:ob:playerstart
|
||||||
x:exit
|
x:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
@flags
|
@flags
|
||||||
goesin:dungeon
|
goesin:dungeon
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
@id:playerstart_6
|
@id:playerstart_6
|
||||||
@map
|
@map
|
||||||
######
|
rrr###
|
||||||
####.#
|
rr##.#
|
||||||
###..x
|
r##..x
|
||||||
##...#
|
##...#
|
||||||
#..p.#
|
#..p.#
|
||||||
##...#
|
##...#
|
||||||
###..x
|
r##..x
|
||||||
####.#
|
rr##.#
|
||||||
######
|
rrr###
|
||||||
@end
|
@end
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
p:ob:playerstart
|
p:ob:playerstart
|
||||||
x:exit
|
x:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
@flags
|
@flags
|
||||||
goesin:dungeon
|
goesin:dungeon
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
@id:roundabout
|
@id:roundabout
|
||||||
@map
|
@map
|
||||||
###x###
|
r##x##r
|
||||||
##...##
|
##...##
|
||||||
#..#..#
|
#..#..#
|
||||||
x.###.x
|
x.###.x
|
||||||
#..#..#
|
#..#..#
|
||||||
##...##
|
##...##
|
||||||
###x###
|
r##x##r
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
x:exit
|
x:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
@id:uturn
|
@id:uturn
|
||||||
@map
|
@map
|
||||||
###########
|
r#########r
|
||||||
###.....###
|
###.....###
|
||||||
##..###..##
|
##..###..##
|
||||||
#X.#####.X#
|
#X.#####.X#
|
||||||
|
@ -9,6 +9,7 @@
|
||||||
@legend
|
@legend
|
||||||
#:cell:SOLID
|
#:cell:SOLID
|
||||||
X:exit
|
X:exit
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
@id:woodsboss_1
|
@id:woodsboss_1
|
||||||
|
|
||||||
@map
|
@map
|
||||||
..fffffff..
|
rrfffffffrr
|
||||||
.ff.....ff.
|
rff.....ffr
|
||||||
ff..,,,,.ff
|
ff..,,,,.ff
|
||||||
f..,,,,,,.f
|
f..,,,,,,.f
|
||||||
+,,,,,,,_.f
|
+,,,,,,,_.f
|
||||||
f..,,,,,,.f
|
f..,,,,,,.f
|
||||||
ff..,,,,.ff
|
ff..,,,,.ff
|
||||||
.ff.....ff.
|
rff.....ffr
|
||||||
..fffffff..
|
rrfffffffrr
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@legend
|
@legend
|
||||||
|
@ -20,6 +20,7 @@ f:ob:bone fence
|
||||||
,:cell:dirt
|
,:cell:dirt
|
||||||
_:mon:walking hut
|
_:mon:walking hut
|
||||||
_:cell:dirt
|
_:cell:dirt
|
||||||
|
r:reusable
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@flags
|
@flags
|
||||||
|
|
23
defs.h
23
defs.h
|
@ -68,14 +68,18 @@
|
||||||
#define DEF_HITDICE "1d4"
|
#define DEF_HITDICE "1d4"
|
||||||
|
|
||||||
// unicode chars
|
// unicode chars
|
||||||
|
#define UNI_DYNAMIC 0x2500 // use surrounding cells and box chars
|
||||||
#define UNI_SOLID 0x2588
|
#define UNI_SOLID 0x2588
|
||||||
#define UNI_SHADELIGHT 0x2591
|
#define UNI_SHADELIGHT 0x2591
|
||||||
#define UNI_SHADEMED 0x2592
|
#define UNI_SHADEMED 0x2592
|
||||||
#define UNI_SHADEDARK 0x2593
|
#define UNI_SHADEDARK 0x2593
|
||||||
#define UNI_SPIRAL 0x2202
|
#define UNI_SPIRAL 0x2202
|
||||||
#define UNI_SUN 0x203B
|
#define UNI_SUN 0x203B
|
||||||
|
#define UNI_CHAIR 0x2441
|
||||||
#define UNI_CLOUD 0x203B
|
#define UNI_CLOUD 0x203B
|
||||||
//#define UNI_SOLID '#'
|
//#define UNI_SOLID '#'
|
||||||
|
#define UNI_HOUSE 0x2302
|
||||||
|
#define UNI_PI 0x03C0
|
||||||
#define UNI_TUNNEL 0x2126
|
#define UNI_TUNNEL 0x2126
|
||||||
#define UNI_TREELOTS 0x2051
|
#define UNI_TREELOTS 0x2051
|
||||||
#define UNI_TREE 0x2042
|
#define UNI_TREE 0x2042
|
||||||
|
@ -399,6 +403,13 @@
|
||||||
#define MAXDIR_MAP 15
|
#define MAXDIR_MAP 15
|
||||||
|
|
||||||
|
|
||||||
|
enum CELLADJUSTTYPE {
|
||||||
|
CA_NONE = 0,
|
||||||
|
CA_CH,
|
||||||
|
CA_COL,
|
||||||
|
CA_BOTH,
|
||||||
|
};
|
||||||
|
|
||||||
enum TEMPERATURE {
|
enum TEMPERATURE {
|
||||||
T_VCOLD = -3,
|
T_VCOLD = -3,
|
||||||
T_COLD = -2,
|
T_COLD = -2,
|
||||||
|
@ -1349,6 +1360,8 @@ enum RACE {
|
||||||
R_BEAR,
|
R_BEAR,
|
||||||
R_BEARCUB,
|
R_BEARCUB,
|
||||||
R_BEARGRIZZLY,
|
R_BEARGRIZZLY,
|
||||||
|
R_BEAROWL,
|
||||||
|
R_BEARPOLAR,
|
||||||
R_BILCO,
|
R_BILCO,
|
||||||
R_CATCHEETAH,
|
R_CATCHEETAH,
|
||||||
R_CATLION,
|
R_CATLION,
|
||||||
|
@ -1453,7 +1466,9 @@ enum RACE {
|
||||||
R_WRAITHICE,
|
R_WRAITHICE,
|
||||||
R_ZOMBIE,
|
R_ZOMBIE,
|
||||||
// special
|
// special
|
||||||
|
R_DANCINGWEAPONS,
|
||||||
R_DANCINGWEAPON,
|
R_DANCINGWEAPON,
|
||||||
|
R_DANCINGWEAPONL,
|
||||||
R_FLOATINGDISC,
|
R_FLOATINGDISC,
|
||||||
R_GASCLOUD,
|
R_GASCLOUD,
|
||||||
R_HECTASSERVANT,
|
R_HECTASSERVANT,
|
||||||
|
@ -2232,7 +2247,7 @@ enum OBTYPE {
|
||||||
OT_WEAPONRACK,
|
OT_WEAPONRACK,
|
||||||
OT_WOODENTABLE,
|
OT_WOODENTABLE,
|
||||||
OT_WOODENBARREL,
|
OT_WOODENBARREL,
|
||||||
OT_WOODENSTOOL,
|
OT_WOODENCHAIR,
|
||||||
// misc objects
|
// misc objects
|
||||||
OT_BONE,
|
OT_BONE,
|
||||||
OT_CHEST,
|
OT_CHEST,
|
||||||
|
@ -3331,6 +3346,8 @@ enum FLAG {
|
||||||
// f_mutable.
|
// f_mutable.
|
||||||
// player only flags
|
// player only flags
|
||||||
F_AICONTROLLED, // player will be controlled by the computer
|
F_AICONTROLLED, // player will be controlled by the computer
|
||||||
|
// if v2 = F_RAGE, then this is because we are
|
||||||
|
// enraged.
|
||||||
F_DONEBURNMSG, // tells the game not to say 'the {celltype} burns!'
|
F_DONEBURNMSG, // tells the game not to say 'the {celltype} burns!'
|
||||||
F_DONEDARKMSG, // tells the game not to say 'it is very dark here'
|
F_DONEDARKMSG, // tells the game not to say 'it is very dark here'
|
||||||
F_DONELISTEN, // supress further 'you hear xx' messages this turn.
|
F_DONELISTEN, // supress further 'you hear xx' messages this turn.
|
||||||
|
@ -4108,6 +4125,7 @@ enum FLAG {
|
||||||
F_PATHFINDING, // you are following a path via 'G'
|
F_PATHFINDING, // you are following a path via 'G'
|
||||||
// to coords v0,v1 on mapid v2
|
// to coords v0,v1 on mapid v2
|
||||||
F_SPRINTING, // you are sprinting.
|
F_SPRINTING, // you are sprinting.
|
||||||
|
F_WOUNDING, // increase all damage done by this lf by v0
|
||||||
F_WINDSHIELD,// has a windshield protecting against missiles of speed
|
F_WINDSHIELD,// has a windshield protecting against missiles of speed
|
||||||
// v0 or lower.
|
// v0 or lower.
|
||||||
F_DODGES, // you dodge missed attacks
|
F_DODGES, // you dodge missed attacks
|
||||||
|
@ -4775,6 +4793,7 @@ enum VAULTTHING {
|
||||||
VT_OB,
|
VT_OB,
|
||||||
VT_LF,
|
VT_LF,
|
||||||
VT_CELL,
|
VT_CELL,
|
||||||
|
VT_REUSABLE,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct vlegend_s {
|
typedef struct vlegend_s {
|
||||||
|
@ -4876,7 +4895,7 @@ typedef struct cell_s {
|
||||||
} cell_t;
|
} cell_t;
|
||||||
|
|
||||||
typedef struct celltype_s {
|
typedef struct celltype_s {
|
||||||
int id; // eg. dungeonfloor, wall, door
|
enum CELLTYPE id; // eg. dungeonfloor, wall, door
|
||||||
struct glyph_s glyph;
|
struct glyph_s glyph;
|
||||||
/*
|
/*
|
||||||
char glyph; // how to display it
|
char glyph; // how to display it
|
||||||
|
|
1
flag.c
1
flag.c
|
@ -1016,7 +1016,6 @@ flag_t *incflag(flagpile_t *fp, enum FLAG fid, int val1, int val2, int val3) {
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int istransitoryflag(flag_t *f) {
|
int istransitoryflag(flag_t *f) {
|
||||||
if ((f->lifetime >= FROMEXTERNAL_LOW) && (f->lifetime <= FROMEXTERNAL_HIGH)) {
|
if ((f->lifetime >= FROMEXTERNAL_LOW) && (f->lifetime <= FROMEXTERNAL_HIGH)) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
|
|
103
io.c
103
io.c
|
@ -118,6 +118,32 @@ choice_t *addchoice(prompt_t *p, char ch, char *text, char *desc, void *data, ch
|
||||||
return &(p->choice[p->nchoices - 1]);
|
return &(p->choice[p->nchoices - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void killchoice(prompt_t *p, int idx) {
|
||||||
|
int n;
|
||||||
|
for (n = idx; n < p->nchoices-1; n++) {
|
||||||
|
if (p->choice[n].text) free(p->choice[n].text);
|
||||||
|
if (p->choice[n].desc) free(p->choice[n].desc);
|
||||||
|
if (p->choice[n].longdesc) free(p->choice[n].longdesc);
|
||||||
|
|
||||||
|
// shuffle other choices down
|
||||||
|
p->choice[n].ch = p->choice[n+1].ch;
|
||||||
|
if (p->choice[n+1].text) p->choice[n].text = strdup(p->choice[n+1].text);
|
||||||
|
else p->choice[n].text = strdup("");
|
||||||
|
if (p->choice[n+1].desc) p->choice[n].desc = strdup(p->choice[n+1].desc);
|
||||||
|
else p->choice[n].desc = strdup("");
|
||||||
|
if (p->choice[n+1].longdesc) p->choice[n].longdesc = strdup(p->choice[n+1].longdesc);
|
||||||
|
else p->choice[n].longdesc = strdup("");
|
||||||
|
|
||||||
|
p->choice[n].data = p->choice[n+1].data;
|
||||||
|
p->choice[n].heading = p->choice[n+1].heading;
|
||||||
|
p->choice[n].hilite = p->choice[n+1].hilite;
|
||||||
|
p->choice[n].valid = p->choice[n+1].valid;
|
||||||
|
p->choice[n].shortcutslot = p->choice[n+1].shortcutslot;
|
||||||
|
|
||||||
|
}
|
||||||
|
p->nchoices--;
|
||||||
|
}
|
||||||
|
|
||||||
void addheading(prompt_t *p, char *text) {
|
void addheading(prompt_t *p, char *text) {
|
||||||
p->choice[p->nchoices].ch = '\0';
|
p->choice[p->nchoices].ch = '\0';
|
||||||
p->choice[p->nchoices].text = strdup(text);
|
p->choice[p->nchoices].text = strdup(text);
|
||||||
|
@ -939,7 +965,7 @@ cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t
|
||||||
}
|
}
|
||||||
|
|
||||||
wep = getweapon(c->lf);
|
wep = getweapon(c->lf);
|
||||||
if (wep && (c->lf->race->id != R_DANCINGWEAPON)) {
|
if (wep && (c->lf->race->baseid != R_DANCINGWEAPON)) {
|
||||||
object_t *secwep;
|
object_t *secwep;
|
||||||
char obname[BUFLEN];
|
char obname[BUFLEN];
|
||||||
char obname2[BUFLEN];
|
char obname2[BUFLEN];
|
||||||
|
@ -1357,7 +1383,7 @@ int announceflaggain(lifeform_t *lf, flag_t *f) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lf->race->id == R_DANCINGWEAPON) {
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1842,6 +1868,7 @@ int announceflaggain(lifeform_t *lf, flag_t *f) {
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
break;
|
break;
|
||||||
case F_EXTRADAM:
|
case F_EXTRADAM:
|
||||||
|
case F_WOUNDING:
|
||||||
if (isplayer(lf)) { // don't know if monsters get it
|
if (isplayer(lf)) { // don't know if monsters get it
|
||||||
msg("You feel more dangerous!");
|
msg("You feel more dangerous!");
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
|
@ -2236,7 +2263,7 @@ int announceflagloss(lifeform_t *lf, flag_t *f) {
|
||||||
if (!lf->born) {
|
if (!lf->born) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
if (lf->race->id == R_DANCINGWEAPON) {
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2510,6 +2537,7 @@ int announceflagloss(lifeform_t *lf, flag_t *f) {
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
break;
|
break;
|
||||||
case F_EXTRADAM:
|
case F_EXTRADAM:
|
||||||
|
case F_WOUNDING:
|
||||||
if (isplayer(lf)) { // don't know if monsters lose it
|
if (isplayer(lf)) { // don't know if monsters lose it
|
||||||
msg("You no longer feel more dangerous.");
|
msg("You no longer feel more dangerous.");
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
|
@ -5214,7 +5242,7 @@ void docomms_areadangers(char *who, flagpile_t *fp, lifeform_t *lf) {
|
||||||
if (c->lf && !isplayer(c->lf) && (c->lf != lf) && areenemies(c->lf, player)) {
|
if (c->lf && !isplayer(c->lf) && (c->lf != lf) && areenemies(c->lf, player)) {
|
||||||
int showit = B_FALSE;
|
int showit = B_FALSE;
|
||||||
enum RARITY rr;
|
enum RARITY rr;
|
||||||
getracerarity(NULL, c->lf->race->id, &rr);
|
getracerarity(H_ALL, c->lf->race->id, &rr);
|
||||||
if (rr == RR_VERYRARE) {
|
if (rr == RR_VERYRARE) {
|
||||||
showit = B_TRUE;
|
showit = B_TRUE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -7070,7 +7098,12 @@ char *makedesc_ob(object_t *o, char *retbuf) {
|
||||||
strncat(retbuf, buf2, HUGEBUFLEN);
|
strncat(retbuf, buf2, HUGEBUFLEN);
|
||||||
break;
|
break;
|
||||||
case F_EXTRADAM:
|
case F_EXTRADAM:
|
||||||
sprintf(buf2, "%s will cause you to deal more damage.\n", buf);
|
sprintf(buf2, "%s will cause you to deal additional %s damage on each attack.\n", buf,
|
||||||
|
getdamname(f->val[0]));
|
||||||
|
strncat(retbuf, buf2, HUGEBUFLEN);
|
||||||
|
break;
|
||||||
|
case F_WOUNDING:
|
||||||
|
sprintf(buf2, "%s will grant +%d extra damage on all attacks.\n", buf, f->val[0]);
|
||||||
strncat(retbuf, buf2, HUGEBUFLEN);
|
strncat(retbuf, buf2, HUGEBUFLEN);
|
||||||
break;
|
break;
|
||||||
case F_EXTRALUCK:
|
case F_EXTRALUCK:
|
||||||
|
@ -9622,7 +9655,7 @@ void initgfx(void) {
|
||||||
initcol(C_BLUE, 0, 0, 1000);
|
initcol(C_BLUE, 0, 0, 1000);
|
||||||
initcol(C_INDIGO, 300, 0, 520);
|
initcol(C_INDIGO, 300, 0, 520);
|
||||||
initcol(C_MAGENTA, 1000, 0, 1000);
|
initcol(C_MAGENTA, 1000, 0, 1000);
|
||||||
initcol(C_PINK, 820, 368, 368);
|
initcol(C_PINK, 820, 384, 576);
|
||||||
initcol(C_CYAN, 0, 1000, 1000);
|
initcol(C_CYAN, 0, 1000, 1000);
|
||||||
initcol(C_GREY, 800, 800, 800);
|
initcol(C_GREY, 800, 800, 800);
|
||||||
initcol(C_YELLOW, 1000, 1000, 0);
|
initcol(C_YELLOW, 1000, 1000, 0);
|
||||||
|
@ -9632,11 +9665,11 @@ void initgfx(void) {
|
||||||
initcol(C_BONE, 556, 548, 448);
|
initcol(C_BONE, 556, 548, 448);
|
||||||
initcol(C_BRICK, 568, 140, 140);
|
initcol(C_BRICK, 568, 140, 140);
|
||||||
initcol(C_METAL, 500, 500, 500);
|
initcol(C_METAL, 500, 500, 500);
|
||||||
initcol(C_FLESH, 952, 612, 408);
|
initcol(C_FLESH, 952, 812, 608);
|
||||||
initcol(C_FOG, 812, 808, 728);
|
initcol(C_FOG, 812, 808, 728);
|
||||||
initcol(C_MOSS, 0, 748, 428);
|
initcol(C_MOSS, 0, 748, 428);
|
||||||
initcol(C_CARPET1, 560, 480, 336);
|
initcol(C_CARPET1, 360, 280, 136);
|
||||||
initcol(C_CARPET2, 0, 556, 468);
|
initcol(C_CARPET2, 160, 80, 36);
|
||||||
initcol(C_SMOKE, 250, 250, 300);
|
initcol(C_SMOKE, 250, 250, 300);
|
||||||
initcol(C_WOOD, 384, 244, 64);
|
initcol(C_WOOD, 384, 244, 64);
|
||||||
// dark cols
|
// dark cols
|
||||||
|
@ -13246,7 +13279,7 @@ void showlfstats(lifeform_t *lf, int showall) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nfound) y++;
|
//if (nfound) y++;
|
||||||
|
|
||||||
// obvious physical effects first.
|
// obvious physical effects first.
|
||||||
f = lfhasknownflag(lf, F_BEINGSTONED);
|
f = lfhasknownflag(lf, F_BEINGSTONED);
|
||||||
|
@ -13898,7 +13931,7 @@ void showlfstats(lifeform_t *lf, int showall) {
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
getflags(lf->flags, retflag, &nretflags, F_EXTRADAM, F_NONE);
|
getflags(lf->flags, retflag, &nretflags, F_EXTRADAM, F_WOUNDING,F_NONE);
|
||||||
for (i = 0; i < nretflags; i++) {
|
for (i = 0; i < nretflags; i++) {
|
||||||
if (showall || f->known) {
|
if (showall || f->known) {
|
||||||
int ndice,nsides,bonus;
|
int ndice,nsides,bonus;
|
||||||
|
@ -13907,31 +13940,37 @@ void showlfstats(lifeform_t *lf, int showall) {
|
||||||
char damtypebuf[BUFLEN];
|
char damtypebuf[BUFLEN];
|
||||||
int min = 0,max = 0;
|
int min = 0,max = 0;
|
||||||
f = retflag[i];
|
f = retflag[i];
|
||||||
if (f->val[2] == NA) {
|
if (f->id == F_EXTRADAM) {
|
||||||
texttodice(f->text, &ndice,&nsides,&bonus);
|
if (f->val[2] == NA) {
|
||||||
} else {
|
texttodice(f->text, &ndice,&nsides,&bonus);
|
||||||
|
} else {
|
||||||
|
ndice = 0;
|
||||||
|
nsides = 1;
|
||||||
|
bonus = f->val[2];
|
||||||
|
}
|
||||||
|
if ((f->lifetime == FROMOBEQUIP) ||
|
||||||
|
(f->lifetime == FROMOBHOLD) ||
|
||||||
|
(f->lifetime == FROMOBACTIVATE) ) {
|
||||||
|
object_t *obfrom;
|
||||||
|
obfrom = findobbyid(lf->pack, f->obfrom);
|
||||||
|
if (obfrom) {
|
||||||
|
int bonusdam;
|
||||||
|
sumflags(obfrom->flags, F_BONUS, &bonusdam, NULL, NULL);
|
||||||
|
bonus += bonusdam;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (f->val[0] == NA) {
|
||||||
|
strcpy(damtypebuf, "damage");
|
||||||
|
} else {
|
||||||
|
snprintf(damtypebuf, BUFLEN, "%s damage", getdamname(f->val[0]));
|
||||||
|
}
|
||||||
|
} else { // ie. f_wounding
|
||||||
ndice = 0;
|
ndice = 0;
|
||||||
nsides = 1;
|
nsides = 1;
|
||||||
bonus = f->val[2];
|
bonus = f->val[0];
|
||||||
|
strcpy(damtypebuf, "damage");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((f->lifetime == FROMOBEQUIP) ||
|
|
||||||
(f->lifetime == FROMOBHOLD) ||
|
|
||||||
(f->lifetime == FROMOBACTIVATE) ) {
|
|
||||||
object_t *obfrom;
|
|
||||||
obfrom = findobbyid(lf->pack, f->obfrom);
|
|
||||||
if (obfrom) {
|
|
||||||
int bonusdam;
|
|
||||||
sumflags(obfrom->flags, F_BONUS, &bonusdam, NULL, NULL);
|
|
||||||
bonus += bonusdam;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f->val[0] == NA) {
|
|
||||||
strcpy(damtypebuf, "damage");
|
|
||||||
} else {
|
|
||||||
snprintf(damtypebuf, BUFLEN, "%s damage", getdamname(f->val[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
dicetotext(ndice, nsides, bonus, &min, &max, dicebuf, mmbuf);
|
dicetotext(ndice, nsides, bonus, &min, &max, dicebuf, mmbuf);
|
||||||
if (strcmp(dicebuf, mmbuf)) {
|
if (strcmp(dicebuf, mmbuf)) {
|
||||||
|
|
1
io.h
1
io.h
|
@ -1,6 +1,7 @@
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
choice_t *addchoice(prompt_t *p, char ch, char *text, char *desc, void *data, char *longdesc);
|
choice_t *addchoice(prompt_t *p, char ch, char *text, char *desc, void *data, char *longdesc);
|
||||||
|
void killchoice(prompt_t *p, int idx);
|
||||||
void addheading(prompt_t *p, char *text);
|
void addheading(prompt_t *p, char *text);
|
||||||
void addmsghist(char *text);
|
void addmsghist(char *text);
|
||||||
void addpromptq(prompt_t *p, char *q);
|
void addpromptq(prompt_t *p, char *q);
|
||||||
|
|
260
lf.c
260
lf.c
|
@ -1184,6 +1184,7 @@ int canpolymorphto(enum RACE rid) {
|
||||||
|
|
||||||
int canpush(lifeform_t *lf, object_t *o, int dir) {
|
int canpush(lifeform_t *lf, object_t *o, int dir) {
|
||||||
cell_t *obcell, *dstcell;
|
cell_t *obcell, *dstcell;
|
||||||
|
float adjweight;
|
||||||
reason = E_OK;
|
reason = E_OK;
|
||||||
|
|
||||||
if ((getlfmaterial(lf) == MT_GAS) || lfhasflag(lf, F_NONCORPOREAL)) {
|
if ((getlfmaterial(lf) == MT_GAS) || lfhasflag(lf, F_NONCORPOREAL)) {
|
||||||
|
@ -1191,8 +1192,14 @@ int canpush(lifeform_t *lf, object_t *o, int dir) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check lf weight
|
// check object weight vs. lf weight
|
||||||
if (getobweight(o) > getmaxpushweight(lf)) {
|
// adjust object weight for cell sliperriness.
|
||||||
|
adjweight = getobweight(o);
|
||||||
|
if (o->pile->where) {
|
||||||
|
adjweight -= getslipperyness(o->pile->where, NULL);
|
||||||
|
limitf(&adjweight, 0, NA);
|
||||||
|
}
|
||||||
|
if (adjweight > getmaxpushweight(lf)) {
|
||||||
reason = E_TOOHEAVY;
|
reason = E_TOOHEAVY;
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1670,7 +1677,7 @@ int canweild(lifeform_t *lf, object_t *o) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// special case...
|
// special case...
|
||||||
if (lf->race->id == R_DANCINGWEAPON) {
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3490,7 +3497,7 @@ void die(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lf->race->id == R_DANCINGWEAPON) {
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
if (cansee(player, lf)) {
|
if (cansee(player, lf)) {
|
||||||
getlfname(lf, buf);
|
getlfname(lf, buf);
|
||||||
msg("%s drops to the ground.", buf);
|
msg("%s drops to the ground.", buf);
|
||||||
|
@ -4128,11 +4135,30 @@ void dumplf(void) {
|
||||||
dblog("END LIFEFORM DUMP (%d found)",count);
|
dblog("END LIFEFORM DUMP (%d found)",count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dumpmonsters(void) {
|
void dumpmonsters(enum HABITAT hab) {
|
||||||
race_t *r;
|
race_t *r;
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
int wanthd;
|
habitat_t *h;
|
||||||
|
int wanthd,i;
|
||||||
int totcount = 0;
|
int totcount = 0;
|
||||||
|
FILE *out;
|
||||||
|
|
||||||
|
//f = hasflagval(r->flags, F_RARITY, map->habitat->id, NA, NA, NULL);
|
||||||
|
|
||||||
|
out = fopen("monsters.html", "wt");
|
||||||
|
assert(out);
|
||||||
|
|
||||||
|
h = findhabitat(hab);
|
||||||
|
|
||||||
|
fprintf(out, "<html>\n");
|
||||||
|
fprintf(out, "<body>\n");
|
||||||
|
fprintf(out, "<h1>Monsters for habitat '%s'</h1>\n",h ? h->name : "<any>");
|
||||||
|
fprintf(out, "<table border=1>\n");
|
||||||
|
fprintf(out, "<tr><th> </th>");
|
||||||
|
for (i = RR_FREQUENT; i <= RR_UNIQUE; i++) {
|
||||||
|
fprintf(out, "<th>%s</th>",getrarityname(i));
|
||||||
|
}
|
||||||
|
fprintf(out, "</tr>\n");
|
||||||
|
|
||||||
dblog("START MONSTER DUMP:");
|
dblog("START MONSTER DUMP:");
|
||||||
for (wanthd = 0; wanthd <= maxmonhitdice ; wanthd++) {
|
for (wanthd = 0; wanthd <= maxmonhitdice ; wanthd++) {
|
||||||
|
@ -4145,18 +4171,38 @@ void dumpmonsters(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dblog("MONSTERS WITH THREAT RATING %d (%d found):",wanthd, count);
|
dblog("MONSTERS WITH THREAT RATING %d (%d found):",wanthd, count);
|
||||||
for (r = firstrace ; r ; r = r->next) {
|
fprintf(out, "<tr>\n");
|
||||||
int thishd;
|
fprintf(out, "\t<th>Threat Rating %d</th>\n", wanthd);
|
||||||
thishd = gettrrace(r);
|
|
||||||
if (thishd == wanthd) {
|
for (i = RR_FREQUENT; i <= RR_UNIQUE; i++) {
|
||||||
int max;
|
int thiscount = 0;
|
||||||
f = hasflag(r->flags, F_HITDICE);
|
fprintf(out, "\t<td>\n");
|
||||||
max = flagtomaxhp(f);
|
for (r = firstrace ; r ; r = r->next) {
|
||||||
dblog("\t%s (%d hp)",r->name, max);
|
int thishd;
|
||||||
|
enum RARITY rr;
|
||||||
|
thishd = gettrrace(r);
|
||||||
|
getracerarity(hab, r->id, &rr);
|
||||||
|
if ((thishd == wanthd) && (rr == i)) {
|
||||||
|
int max;
|
||||||
|
f = hasflag(r->flags, F_HITDICE);
|
||||||
|
max = flagtomaxhp(f);
|
||||||
|
dblog("\t%s (%d hp)",r->name, max);
|
||||||
|
fprintf(out, "\t\t%s (%d hp)<br>\n",r->name, max);
|
||||||
|
thiscount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (!thiscount) {
|
||||||
|
fprintf(out, " \n");
|
||||||
|
}
|
||||||
|
fprintf(out, "\t</td>\n");
|
||||||
}
|
}
|
||||||
|
fprintf(out, "</tr>\n");
|
||||||
}
|
}
|
||||||
dblog("END MONSTER DUMP (%d found)",totcount);
|
dblog("END MONSTER DUMP (%d found)",totcount);
|
||||||
|
fprintf(out, "</table>\n");
|
||||||
|
fprintf(out, "</body>\n");
|
||||||
|
fprintf(out, "</html>\n");
|
||||||
|
fclose(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void genareaknowledge(flagpile_t *fp, int chancemod) {
|
void genareaknowledge(flagpile_t *fp, int chancemod) {
|
||||||
|
@ -4357,7 +4403,7 @@ void dumpxp(void) {
|
||||||
// dump
|
// dump
|
||||||
dblog("%-10s%-30s%s","XP", "Race", "Rarity");
|
dblog("%-10s%-30s%s","XP", "Race", "Rarity");
|
||||||
for (i = 0; i < xplistlen; i++) {
|
for (i = 0; i < xplistlen; i++) {
|
||||||
dblog("%-10d%-30s%d",xpposs[i], raceposs[i]->name,getracerarity(NULL, raceposs[i]->id, NULL));
|
dblog("%-10d%-30s%d",xpposs[i], raceposs[i]->name,getracerarity(H_ALL, raceposs[i]->id, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
// free mem
|
// free mem
|
||||||
|
@ -5703,6 +5749,11 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
|
|
||||||
wantschool = f->val[1];
|
wantschool = f->val[1];
|
||||||
nleft = f->val[2];
|
nleft = f->val[2];
|
||||||
|
|
||||||
|
// adjust by intelligence
|
||||||
|
nleft += getextraspellchoices(lf);
|
||||||
|
limit(&nleft, 1, NA);
|
||||||
|
|
||||||
// get all possible spells to learn, from the given school
|
// get all possible spells to learn, from the given school
|
||||||
sprintf(qbuf, "Learn which new spell (maxmp=%d):", getmaxmp(player));
|
sprintf(qbuf, "Learn which new spell (maxmp=%d):", getmaxmp(player));
|
||||||
makespellchoicelist(&prompt, player, qbuf, "Describe which spell:", f->val[1], B_TRUE, B_FALSE, B_FALSE, player->maxmp);
|
makespellchoicelist(&prompt, player, qbuf, "Describe which spell:", f->val[1], B_TRUE, B_FALSE, B_FALSE, player->maxmp);
|
||||||
|
@ -5858,19 +5909,32 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
slev = getskill(lf, SK_SS_MENTAL);
|
slev = getskill(lf, SK_SS_MENTAL);
|
||||||
if (pctchance(slev*20)) {
|
if (pctchance(slev*20)) {
|
||||||
char qbuf[BUFLEN];
|
char qbuf[BUFLEN];
|
||||||
|
int pickfrom;
|
||||||
sprintf(qbuf, "Learn which psionic power (maxmp=%d):", getmaxmp(player));
|
sprintf(qbuf, "Learn which psionic power (maxmp=%d):", getmaxmp(player));
|
||||||
// construct list of castable mental spells
|
// construct list of castable mental spells
|
||||||
makespellchoicelist(&prompt, lf, qbuf, "Describe which psionic power:", SS_MENTAL, B_TRUE, B_FALSE, B_FALSE, player->maxmp);
|
makespellchoicelist(&prompt, lf, qbuf, "Describe which psionic power:", SS_MENTAL, B_TRUE, B_FALSE, B_FALSE, player->maxmp);
|
||||||
if (prompt.nchoices > 0) {
|
|
||||||
objecttype_t *ot;
|
// randomly remove choices down to (IQ/10)
|
||||||
msg("Your brain has unlocked a new psionic power!"); more();
|
pickfrom = getattr(lf, A_IQ)/10;
|
||||||
getchoicestr(&prompt, B_TRUE, B_TRUE);
|
|
||||||
ot = prompt.result;
|
if (pickfrom > 0) {
|
||||||
if (ot) {
|
while (prompt.nchoices > pickfrom) {
|
||||||
if (prompt.whichq == 0) { // learn the spell
|
int sel;
|
||||||
addflag(lf->flags, F_CANCAST, ot->id, NA, NA, NULL);
|
sel = rnd(0,prompt.nchoices-1);
|
||||||
} else {
|
killchoice(&prompt, sel);
|
||||||
describespell(ot);
|
}
|
||||||
|
|
||||||
|
if (prompt.nchoices > 0) {
|
||||||
|
objecttype_t *ot;
|
||||||
|
msg("Your brain has unlocked a new psionic power!"); more();
|
||||||
|
getchoicestr(&prompt, B_TRUE, B_TRUE);
|
||||||
|
ot = prompt.result;
|
||||||
|
if (ot) {
|
||||||
|
if (prompt.whichq == 0) { // learn the spell
|
||||||
|
addflag(lf->flags, F_CANCAST, ot->id, NA, NA, NULL);
|
||||||
|
} else {
|
||||||
|
describespell(ot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5888,13 +5952,35 @@ void enhanceskills(lifeform_t *lf) {
|
||||||
} // end if gainedxplev
|
} // end if gainedxplev
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns B_TRUE if we were already enraged.
|
||||||
int enrage(lifeform_t *lf, int howlong) {
|
int enrage(lifeform_t *lf, int howlong) {
|
||||||
if (lfhasflag(lf, F_RAGE)) return B_TRUE;
|
flag_t *retflag[MAXCANDIDATES],*f;
|
||||||
|
int nretflags = 0,i;
|
||||||
|
int alreadyraging = B_FALSE;
|
||||||
|
|
||||||
|
// already enraged?
|
||||||
|
getflags(lf->flags, retflag, &nretflags, F_RAGE, F_AICONTROLLED, F_NONE);
|
||||||
|
for (i = 0; i < nretflags; i++) {
|
||||||
|
f = retflag[i];
|
||||||
|
if (f->lifetime > 0) {
|
||||||
|
if (f->id == F_RAGE) {
|
||||||
|
f->lifetime = howlong;
|
||||||
|
alreadyraging = B_TRUE;
|
||||||
|
} else if ((f->id == F_AICONTROLLED) && (f->val[2] == F_RAGE)) {
|
||||||
|
if (isplayer(lf)) {
|
||||||
|
f->lifetime = howlong;
|
||||||
|
alreadyraging = B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (alreadyraging) return B_TRUE;
|
||||||
|
|
||||||
|
|
||||||
addtempflag(lf->flags, F_RAGE, NA, NA, NA, NULL, howlong);
|
addtempflag(lf->flags, F_RAGE, NA, NA, NA, NULL, howlong);
|
||||||
|
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
addtempflag(lf->flags, F_AICONTROLLED, B_TRUE, NA, NA, NULL, howlong);
|
addtempflag(lf->flags, F_AICONTROLLED, B_TRUE, NA, F_RAGE, NULL, howlong);
|
||||||
} else {
|
} else {
|
||||||
loseaitargets(lf);
|
loseaitargets(lf);
|
||||||
}
|
}
|
||||||
|
@ -8197,6 +8283,26 @@ int getexposedlimbs(lifeform_t *lf) {
|
||||||
return exposedlimbs;
|
return exposedlimbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// how many extra spells does this lf get to choose from?
|
||||||
|
// based on iq.
|
||||||
|
int getextraspellchoices(lifeform_t *lf) {
|
||||||
|
int mod = 0;
|
||||||
|
enum ATTRBRACKET iqb;
|
||||||
|
iqb = getattrbracket(getattr(lf, A_IQ), A_IQ, NULL);
|
||||||
|
switch (iqb) {
|
||||||
|
case AT_EXLOW: mod -= 3; break;
|
||||||
|
case AT_VLOW: mod -= 2; break;
|
||||||
|
case AT_LOW: mod -= 1; break;
|
||||||
|
case AT_LTAVERAGE: mod -= 1; break;
|
||||||
|
case AT_GTAVERAGE: mod += 1; break;
|
||||||
|
case AT_HIGH: mod += 1; break;
|
||||||
|
case AT_VHIGH: mod += 2; break;
|
||||||
|
case AT_EXHIGH: mod += 3; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return mod;
|
||||||
|
}
|
||||||
|
|
||||||
object_t *getfirearm(lifeform_t *lf) {
|
object_t *getfirearm(lifeform_t *lf) {
|
||||||
object_t *o;
|
object_t *o;
|
||||||
o = getequippedob(lf->pack, BP_SECWEAPON);
|
o = getequippedob(lf->pack, BP_SECWEAPON);
|
||||||
|
@ -9346,7 +9452,7 @@ glyph_t *getlfglyph(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
|
|
||||||
enum MATERIAL getlfmaterial(lifeform_t *lf) {
|
enum MATERIAL getlfmaterial(lifeform_t *lf) {
|
||||||
if (lf->race->id == R_DANCINGWEAPON) {
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
object_t *wep;
|
object_t *wep;
|
||||||
wep = getweapon(lf);
|
wep = getweapon(lf);
|
||||||
if (wep) {
|
if (wep) {
|
||||||
|
@ -9953,7 +10059,7 @@ char *real_getlfname(lifeform_t *lf, char *buf, lifeform_t *usevis, int showall,
|
||||||
if (usevis && !cansee(usevis, lf) && !showall) {
|
if (usevis && !cansee(usevis, lf) && !showall) {
|
||||||
snprintf(buf, BUFLEN, "something");
|
snprintf(buf, BUFLEN, "something");
|
||||||
} else {
|
} else {
|
||||||
if (lf->race->id == R_DANCINGWEAPON) {
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
object_t *wep;
|
object_t *wep;
|
||||||
wep = getweapon(lf);
|
wep = getweapon(lf);
|
||||||
if (wep) {
|
if (wep) {
|
||||||
|
@ -10289,18 +10395,23 @@ enum RACECLASS getraceclass(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns rarity number. if optional rr is passed, this is will be returned too.
|
// returns rarity number. if optional rr is passed, this is will be returned too.
|
||||||
int getracerarity(map_t *map, enum RACE rid, enum RARITY *rr) {
|
// if 'hab' isn't H_ALL, get rarity for this habitat.
|
||||||
|
int getracerarity(enum HABITAT hab, enum RACE rid, enum RARITY *rr) {
|
||||||
race_t *r;
|
race_t *r;
|
||||||
int rarity = -1;
|
int rarity = -1;
|
||||||
|
|
||||||
if (rr) *rr = RR_NONE;
|
// default
|
||||||
|
if (rr) *rr = RR_NEVER;
|
||||||
|
|
||||||
r = findrace(rid);
|
r = findrace(rid);
|
||||||
if (r) {
|
if (r) {
|
||||||
flag_t *f = NULL;
|
flag_t *f = NULL;
|
||||||
|
|
||||||
if (map) {
|
if (hasflag(r->flags, F_UNIQUE)) {
|
||||||
f = hasflagval(r->flags, F_RARITY, map->habitat->id, NA, NA, NULL);
|
if (rr) *rr = RR_UNIQUE;
|
||||||
|
}
|
||||||
|
if (hab != H_ALL) {
|
||||||
|
f = hasflagval(r->flags, F_RARITY, hab, NA, NA, NULL);
|
||||||
if (!f) {
|
if (!f) {
|
||||||
f = hasflagval(r->flags, F_RARITY, H_ALL, NA, NA, NULL);
|
f = hasflagval(r->flags, F_RARITY, H_ALL, NA, NA, NULL);
|
||||||
}
|
}
|
||||||
|
@ -12544,6 +12655,15 @@ void givestartobs(lifeform_t *lf, object_t *targob, flagpile_t *fp) {
|
||||||
o = addob(lf->pack, "map to the goblin caves");
|
o = addob(lf->pack, "map to the goblin caves");
|
||||||
assert(o);
|
assert(o);
|
||||||
}
|
}
|
||||||
|
// special case!
|
||||||
|
if (lf->race->baseid == R_DANCINGWEAPON) {
|
||||||
|
// link up the weapon object
|
||||||
|
o = hasobofclass(lf->pack, OC_WEAPON);
|
||||||
|
assert(o);
|
||||||
|
|
||||||
|
obtodancing(lf, o);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// make sure lf doesn't start off burdened!
|
// make sure lf doesn't start off burdened!
|
||||||
while (isburdened(lf)) {
|
while (isburdened(lf)) {
|
||||||
|
@ -14335,13 +14455,16 @@ int isgod(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int ishelplessvictim(lifeform_t *victim, lifeform_t *attacker, enum HELPLESSTYPE *how) {
|
int ishelplessvictim(lifeform_t *victim, lifeform_t *attacker, enum HELPLESSTYPE *how) {
|
||||||
|
if (isundead(victim)) return B_FALSE;
|
||||||
if (!cansee(attacker, victim)) return B_FALSE;
|
if (!cansee(attacker, victim)) return B_FALSE;
|
||||||
if (isfleeing(victim)) {
|
if (isfleeing(victim)) {
|
||||||
if (how) *how = HL_FLEEING;
|
if (how) *how = HL_FLEEING;
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
} else if (!cansee(victim, attacker) && (getraceclass(victim) != RC_PLANT)) {
|
} else if (!cansee(victim, attacker) && (getraceclass(victim) != RC_PLANT)) {
|
||||||
if (how) *how = HL_CANTSEE;
|
if (gettargetlf(victim) != attacker) {
|
||||||
return B_TRUE;
|
if (how) *how = HL_CANTSEE;
|
||||||
|
return B_TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (how) *how = HL_NONE;
|
if (how) *how = HL_NONE;
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
|
@ -14843,7 +14966,7 @@ lifeform_t *real_addlf(cell_t *cell, enum RACE rid, int level, int controller) {
|
||||||
|
|
||||||
// set home room.
|
// set home room.
|
||||||
sethomeroom(a);
|
sethomeroom(a);
|
||||||
|
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15434,6 +15557,12 @@ void applylfdammod(int *dam, lifeform_t *lf, object_t *wep) {
|
||||||
*dam = *dam + getstrdammod(lf);
|
*dam = *dam + getstrdammod(lf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// modify for generic f_extradam
|
||||||
|
getflags(lf->flags, retflag, &nretflags, F_WOUNDING, F_NONE);
|
||||||
|
for (i = 0; i < nretflags; i++) {
|
||||||
|
*dam += retflag[i]->val[0];
|
||||||
|
}
|
||||||
|
|
||||||
// strength scaling on weapon
|
// strength scaling on weapon
|
||||||
getflags(wep->flags, retflag, &nretflags, F_ATTREQ, F_NONE);
|
getflags(wep->flags, retflag, &nretflags, F_ATTREQ, F_NONE);
|
||||||
for (i = 0; i < nretflags; i++) {
|
for (i = 0; i < nretflags; i++) {
|
||||||
|
@ -15520,10 +15649,10 @@ int areallies(lifeform_t *lf1, lifeform_t *lf2) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (lf1->race->baseid == lf2->race->baseid) {
|
if ((lf1->race->baseid == lf2->race->baseid) && // same base race
|
||||||
if (!isplayer(lf1) && !isplayer(lf2)) {
|
!isplayer(lf1) && !isplayer(lf2) && // not the player
|
||||||
return B_TRUE;
|
(master1 == -1) && (master2 == -1)) { // not charmed/zombies/etc
|
||||||
}
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
|
@ -17841,17 +17970,20 @@ int noise(cell_t *c, lifeform_t *noisemaker, enum NOISECLASS nclass, int volume,
|
||||||
difficulty = (int) ( ((float) dist / ((float)gethearingrange(l) + volume)) * 75);
|
difficulty = (int) ( ((float) dist / ((float)gethearingrange(l) + volume)) * 75);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if (sleepflag) {
|
if (sleepflag) {
|
||||||
myvol = volume - 1;
|
myvol = volume - 1;
|
||||||
} else {
|
} else {
|
||||||
myvol = volume;
|
myvol = volume;
|
||||||
}
|
}
|
||||||
limit(&myvol, 0, NA);
|
limit(&myvol, 0, NA);
|
||||||
|
*/
|
||||||
|
myvol = volume;
|
||||||
|
|
||||||
// listen bonus is based on sound volume
|
// listen bonus is based on sound volume
|
||||||
lbonus = myvol;
|
lbonus = (myvol*5);
|
||||||
if (sleepflag) {
|
if (sleepflag) {
|
||||||
lbonus -= 5;
|
lbonus -= 25;
|
||||||
limit(&lbonus, 0, NA);
|
limit(&lbonus, 0, NA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22211,7 +22343,7 @@ void startlfturn(lifeform_t *lf) {
|
||||||
cell_t *c;
|
cell_t *c;
|
||||||
c = getcellindir(lf->cell, diropposite(lf->facing));
|
c = getcellindir(lf->cell, diropposite(lf->facing));
|
||||||
if (c && c->lf) {
|
if (c && c->lf) {
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf) && !lfhasflag(lf, F_RAGE)) {
|
||||||
warn("^WYour tail brushes up against something behind you!");
|
warn("^WYour tail brushes up against something behind you!");
|
||||||
} else {
|
} else {
|
||||||
turntoface(lf, c);
|
turntoface(lf, c);
|
||||||
|
@ -22296,16 +22428,18 @@ void startlfturn(lifeform_t *lf) {
|
||||||
|
|
||||||
|
|
||||||
// special effects
|
// special effects
|
||||||
if (lf->race->id == R_ASHKARI) {
|
if ((lf->race->id == R_ASHKARI) && !lfhasflag(lf, F_CONTROL)) {
|
||||||
lifeform_t *otherlf;
|
lifeform_t *otherlf;
|
||||||
for (i = 1; i < lf->nlos; i++) {
|
for (i = 1; i < lf->nlos; i++) {
|
||||||
otherlf = lf->los[i]->lf;
|
otherlf = lf->los[i]->lf;
|
||||||
if (otherlf) {
|
if (otherlf) {
|
||||||
if (lfhasflag(otherlf, F_CANINE) || lfhasflag(otherlf, F_AVIAN)) {
|
if (lfhasflag(otherlf, F_CANINE) || lfhasflag(otherlf, F_AVIAN)) {
|
||||||
f = lfhasflag(lf, F_RAGE);
|
f = lfhasflag(lf, F_RAGE);
|
||||||
if (f && f->lifetime > 0) {
|
if (f && (f->lifetime > 0)) {
|
||||||
f->lifetime = DEF_RAGETIME/2;
|
// already enraged? just extend time.
|
||||||
|
enrage(lf, DEF_RAGETIME/2);
|
||||||
} else {
|
} else {
|
||||||
|
// announce, them make enraged.
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
char lfname[BUFLEN];
|
char lfname[BUFLEN];
|
||||||
getlfname(otherlf, lfname);
|
getlfname(otherlf, lfname);
|
||||||
|
@ -22872,20 +23006,22 @@ void startlfturn(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f = hasflag(lf->flags, F_NAUSEATED);
|
if (!isunconscious(lf) && !isasleep(lf)) {
|
||||||
if (f) {
|
f = hasflag(lf->flags, F_NAUSEATED);
|
||||||
// chance of being delayed
|
if (f) {
|
||||||
if (onein(4)) {
|
// chance of being delayed
|
||||||
if (isplayer(lf)) {
|
if (onein(4)) {
|
||||||
msg("^bYou %s!", rnd(0,1) ? "retch" : "gag");
|
if (isplayer(lf)) {
|
||||||
} else if (cansee(player, lf)) {
|
msg("^bYou %s!", rnd(0,1) ? "retch" : "gag");
|
||||||
char lfname[BUFLEN];
|
} else if (cansee(player, lf)) {
|
||||||
getlfname(lf, lfname);
|
char lfname[BUFLEN];
|
||||||
msg("^%c%s %s.", getlfcol(lf, CC_BAD), lfname, rnd(0,1) ? "retches" : "gags");
|
getlfname(lf, lfname);
|
||||||
}
|
msg("^%c%s %s.", getlfcol(lf, CC_BAD), lfname, rnd(0,1) ? "retches" : "gags");
|
||||||
taketime(lf,getactspeed(lf));
|
}
|
||||||
|
taketime(lf,getactspeed(lf));
|
||||||
|
|
||||||
loseconcentration(lf);
|
loseconcentration(lf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // end if !statis
|
} // end if !statis
|
||||||
|
@ -26380,7 +26516,7 @@ int weild(lifeform_t *lf, object_t *o) {
|
||||||
// if we asked to just unweild our weapon, exit now
|
// if we asked to just unweild our weapon, exit now
|
||||||
// with no error.
|
// with no error.
|
||||||
if (!o) {
|
if (!o) {
|
||||||
if ((gamemode == GM_GAMESTARTED) && lf->created && (lf->race->id != R_DANCINGWEAPON)) {
|
if ((gamemode == GM_GAMESTARTED) && lf->created && (lf->race->baseid != R_DANCINGWEAPON)) {
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
msg("You are now fighting unarmed.");
|
msg("You are now fighting unarmed.");
|
||||||
} else if (cansee(player, lf)) {
|
} else if (cansee(player, lf)) {
|
||||||
|
@ -26406,7 +26542,7 @@ int weild(lifeform_t *lf, object_t *o) {
|
||||||
|
|
||||||
if (isplayer(lf) && isweapon(o)) maketried(o->type->id, NULL);
|
if (isplayer(lf) && isweapon(o)) maketried(o->type->id, NULL);
|
||||||
|
|
||||||
if ((gamemode == GM_GAMESTARTED) && lf->created && (lf->race->id != R_DANCINGWEAPON)) {
|
if ((gamemode == GM_GAMESTARTED) && lf->created && (lf->race->baseid != R_DANCINGWEAPON)) {
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
char buf2[BUFLEN];
|
char buf2[BUFLEN];
|
||||||
|
|
||||||
|
@ -26446,7 +26582,7 @@ int weild(lifeform_t *lf, object_t *o) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (cansee(player, lf)) {
|
} else if (cansee(player, lf)) {
|
||||||
if (lf->race->id != R_DANCINGWEAPON) {
|
if (lf->race->baseid != R_DANCINGWEAPON) {
|
||||||
char buf2[BUFLEN];
|
char buf2[BUFLEN];
|
||||||
getlfname(lf, buf2);
|
getlfname(lf, buf2);
|
||||||
msg("%s weilds %s.", buf2, buf);
|
msg("%s weilds %s.", buf2, buf);
|
||||||
|
|
5
lf.h
5
lf.h
|
@ -102,7 +102,7 @@ int digup(lifeform_t *lf, object_t *o);
|
||||||
//void do_eyesight_adjust(lifeform_t *lf);
|
//void do_eyesight_adjust(lifeform_t *lf);
|
||||||
void dumplev(void);
|
void dumplev(void);
|
||||||
void dumplf(void);
|
void dumplf(void);
|
||||||
void dumpmonsters(void);
|
void dumpmonsters(enum HABITAT hab);
|
||||||
void dumpxp(void);
|
void dumpxp(void);
|
||||||
int eat(lifeform_t *lf, object_t *o);
|
int eat(lifeform_t *lf, object_t *o);
|
||||||
void endlfturn(lifeform_t *lf);
|
void endlfturn(lifeform_t *lf);
|
||||||
|
@ -183,6 +183,7 @@ char *getbodypartname(lifeform_t *lf, enum BODYPART bp);
|
||||||
char *getbodypartequipname(enum BODYPART bp);
|
char *getbodypartequipname(enum BODYPART bp);
|
||||||
object_t *getequippedob(obpile_t *op, enum BODYPART bp);
|
object_t *getequippedob(obpile_t *op, enum BODYPART bp);
|
||||||
int getexposedlimbs(lifeform_t *lf);
|
int getexposedlimbs(lifeform_t *lf);
|
||||||
|
int getextraspellchoices(lifeform_t *lf);
|
||||||
object_t *getfirearm(lifeform_t *lf);
|
object_t *getfirearm(lifeform_t *lf);
|
||||||
enum LOFTYPE getfirearmloftype(lifeform_t *lf);
|
enum LOFTYPE getfirearmloftype(lifeform_t *lf);
|
||||||
int getfootprinttime(lifeform_t *lf);
|
int getfootprinttime(lifeform_t *lf);
|
||||||
|
@ -272,7 +273,7 @@ char *getpoisonname(enum POISONTYPE ptype);
|
||||||
enum POISONSEVERITY getpoisonseverity(enum POISONTYPE ptype);
|
enum POISONSEVERITY getpoisonseverity(enum POISONTYPE ptype);
|
||||||
*/
|
*/
|
||||||
enum RACECLASS getraceclass(lifeform_t *lf);
|
enum RACECLASS getraceclass(lifeform_t *lf);
|
||||||
int getracerarity(map_t *map, enum RACE rid, enum RARITY *rr);
|
int getracerarity(enum HABITAT hab, enum RACE rid, enum RARITY *rr);
|
||||||
object_t *getrandomarmour(lifeform_t *lf, lifeform_t *attacker);
|
object_t *getrandomarmour(lifeform_t *lf, lifeform_t *attacker);
|
||||||
enum BEHAVIOUR getrandombehaviour(void);
|
enum BEHAVIOUR getrandombehaviour(void);
|
||||||
enum BODYPART getrandomcorebp(lifeform_t *lf, lifeform_t *attacker);
|
enum BODYPART getrandomcorebp(lifeform_t *lf, lifeform_t *attacker);
|
||||||
|
|
123
map.c
123
map.c
|
@ -961,11 +961,74 @@ branch_t *addbranch(enum BRANCH id, char *name, int pluralname, enum HABITAT def
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void adjustcellglyph(cell_t *c, glyph_t *g) {
|
void adjustcellglyph(cell_t *c, glyph_t *g, enum CELLADJUSTTYPE how) {
|
||||||
|
if (how == CA_NONE) return;
|
||||||
if (g->ch == ' ') return;
|
if (g->ch == ' ') return;
|
||||||
|
|
||||||
if (c->type->altcol != C_NONE) {
|
if ((how == CA_COL) || (how == CA_BOTH)) {
|
||||||
if ((c->x + c->y) % 2) g->colour = c->type->altcol;
|
if (c->type->altcol != C_NONE) {
|
||||||
|
if ((c->x + c->y) % 2) g->colour = c->type->altcol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((how == CA_CH) || (how == CA_BOTH)) {
|
||||||
|
// for certain cell types, select glyph based on surrounding cells of same type
|
||||||
|
if (g->ch == UNI_DYNAMIC) {
|
||||||
|
int adj = 0,i;
|
||||||
|
cell_t *c2;
|
||||||
|
for (i = D_N; i <= D_W; i++) {
|
||||||
|
int this;
|
||||||
|
c2 = getcellindir(c,i);
|
||||||
|
//if (c2 && c2->known && ((c2->type->id == c->type->id) || hasdoor(c2)) ) {
|
||||||
|
if (c2 && c2->known && (issolid(c2) || hasdoor(c2)) ) {
|
||||||
|
this = 1;
|
||||||
|
// we want:
|
||||||
|
// N E S W
|
||||||
|
// 8 4 2 1
|
||||||
|
if (i == D_N) this <<= 3;
|
||||||
|
else if (i == D_E) this <<= 2;
|
||||||
|
else if (i == D_S) this <<= 1;
|
||||||
|
} else {
|
||||||
|
this = 0;
|
||||||
|
}
|
||||||
|
adj |= this;
|
||||||
|
}
|
||||||
|
switch (adj) {
|
||||||
|
case 1: // left
|
||||||
|
case 4: // right
|
||||||
|
case 5: // horz
|
||||||
|
g->ch = 0x2500; break;
|
||||||
|
case 2: // down
|
||||||
|
case 10: // vert
|
||||||
|
case 8: // up
|
||||||
|
g->ch = 0x2502; break;
|
||||||
|
case 3: // down left
|
||||||
|
g->ch = 0x2510; break;
|
||||||
|
case 6: // down right
|
||||||
|
g->ch = 0x250c; break;
|
||||||
|
case 7: // T down
|
||||||
|
g->ch = 0x252c; break;
|
||||||
|
case 9: // up left
|
||||||
|
g->ch = 0x2518; break;
|
||||||
|
case 11: // T left
|
||||||
|
g->ch = 0x2524; break;
|
||||||
|
case 12: // up right
|
||||||
|
g->ch = 0x2514; break;
|
||||||
|
case 13: // T up
|
||||||
|
g->ch = 0x2534; break;
|
||||||
|
case 14: // T right
|
||||||
|
g->ch = 0x251c; break;
|
||||||
|
case 15: // cross
|
||||||
|
g->ch = 0x253c; break;
|
||||||
|
default:
|
||||||
|
if (c->known) {
|
||||||
|
g->ch = c->knownglyph.ch;
|
||||||
|
} else {
|
||||||
|
g->ch = 0x2500;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1125,12 +1188,12 @@ void breakwall(cell_t *c, char *why, ...) {
|
||||||
if (why) {
|
if (why) {
|
||||||
setcellreason(c, "%s", buf);
|
setcellreason(c, "%s", buf);
|
||||||
}
|
}
|
||||||
if (origtype->solid && roomwall && onein(2)) {
|
if (origtype->solid && roomwall && onein(10)) {
|
||||||
switch (origtype->material->id) {
|
switch (origtype->material->id) {
|
||||||
case MT_STONE: addob(c->obpile, "1-30 stones"); break;
|
case MT_STONE: addob(c->obpile, "1-10 stones"); break;
|
||||||
case MT_BRICK: addob(c->obpile, "1-30 bricks"); break;
|
case MT_BRICK: addob(c->obpile, "1-5 bricks"); break;
|
||||||
case MT_GLASS: addob(c->obpile, "1-30 pieces of broken glass"); break;
|
case MT_GLASS: addob(c->obpile, "1-10 pieces of broken glass"); break;
|
||||||
case MT_WOOD: addob(c->obpile, "1-30 shards of wood"); break;
|
case MT_WOOD: addob(c->obpile, "1-10 shards of wood"); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2316,9 +2379,9 @@ void doorfill_r(cell_t *startcell, cell_t *c, int *nfilled) {
|
||||||
int fix_reachability(map_t *m) {
|
int fix_reachability(map_t *m) {
|
||||||
int i,nfixed = 0;
|
int i,nfixed = 0;
|
||||||
int db = B_TRUE;
|
int db = B_TRUE;
|
||||||
|
int donesomething;
|
||||||
cell_t *unreachcell[MAX_MAPW*MAX_MAPH];
|
cell_t *unreachcell[MAX_MAPW*MAX_MAPH];
|
||||||
cell_t *reachcell[MAX_MAPW*MAX_MAPH];
|
cell_t *reachcell[MAX_MAPW*MAX_MAPH];
|
||||||
int nunreach = 0,nreach = 0;
|
|
||||||
cell_t *c = NULL;
|
cell_t *c = NULL;
|
||||||
|
|
||||||
if (db) dblog("fix_reachability starting.");
|
if (db) dblog("fix_reachability starting.");
|
||||||
|
@ -2342,8 +2405,11 @@ int fix_reachability(map_t *m) {
|
||||||
}
|
}
|
||||||
// no empty cells in map?
|
// no empty cells in map?
|
||||||
if (!c) return B_FALSE;
|
if (!c) return B_FALSE;
|
||||||
nunreach = 1;
|
|
||||||
while (nunreach) {
|
donesomething = B_TRUE;
|
||||||
|
while (donesomething) {
|
||||||
|
int nunreach = 0,nreach = 0;
|
||||||
|
donesomething = B_FALSE;
|
||||||
// mark all cells as non-filled
|
// mark all cells as non-filled
|
||||||
for (i = 0; i < m->w * m->h; i++) {
|
for (i = 0; i < m->w * m->h; i++) {
|
||||||
m->cell[i]->filled = FALSE;
|
m->cell[i]->filled = FALSE;
|
||||||
|
@ -2384,6 +2450,7 @@ int fix_reachability(map_t *m) {
|
||||||
if (db) dblog(" attempting to fix unreachable area at %d,%d.",
|
if (db) dblog(" attempting to fix unreachable area at %d,%d.",
|
||||||
ucell->x, ucell->y);
|
ucell->x, ucell->y);
|
||||||
|
|
||||||
|
donesomething = B_TRUE;
|
||||||
|
|
||||||
// first: try to link up the two areas.
|
// first: try to link up the two areas.
|
||||||
ndoors = fix_unreach_via_doors(m);
|
ndoors = fix_unreach_via_doors(m);
|
||||||
|
@ -2392,7 +2459,6 @@ int fix_reachability(map_t *m) {
|
||||||
//,maxtries = 5;
|
//,maxtries = 5;
|
||||||
// pick one of the unreachable cells
|
// pick one of the unreachable cells
|
||||||
idx = rnd(0,nunreach-1);
|
idx = rnd(0,nunreach-1);
|
||||||
//while (ntries < maxtries) {
|
|
||||||
while (idx != firstidx) {
|
while (idx != firstidx) {
|
||||||
if (firstidx == -1) firstidx = idx;
|
if (firstidx == -1) firstidx = idx;
|
||||||
ucell = unreachcell[idx];
|
ucell = unreachcell[idx];
|
||||||
|
@ -2445,7 +2511,7 @@ int fix_reachability(map_t *m) {
|
||||||
c = ucell;
|
c = ucell;
|
||||||
nfixed++;
|
nfixed++;
|
||||||
}
|
}
|
||||||
}
|
} // end while donesomething
|
||||||
if (nfixed) {
|
if (nfixed) {
|
||||||
if (db) dblog(" fix_reachability complete. found and fixed %d unreachable areas.", nfixed);
|
if (db) dblog(" fix_reachability complete. found and fixed %d unreachable areas.", nfixed);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2689,7 +2755,7 @@ void getcellglyph(glyph_t *g, cell_t *c, lifeform_t *viewer) {
|
||||||
// scanned lf here?
|
// scanned lf here?
|
||||||
if (isinscanrange(c, &thing, NULL, &tempgl) == TT_MONSTER) {
|
if (isinscanrange(c, &thing, NULL, &tempgl) == TT_MONSTER) {
|
||||||
*g = tempgl;
|
*g = tempgl;
|
||||||
adjustcellglyph(c, g);
|
//adjustcellglyph(c, g); - this is only for when we can see cell floor.
|
||||||
//mvwprintw(gamewin, y-viewy, x-viewx, "%c", glyph);
|
//mvwprintw(gamewin, y-viewy, x-viewx, "%c", glyph);
|
||||||
//drawglyph(&glyph, x, y);
|
//drawglyph(&glyph, x, y);
|
||||||
return;
|
return;
|
||||||
|
@ -2709,13 +2775,13 @@ void getcellglyph(glyph_t *g, cell_t *c, lifeform_t *viewer) {
|
||||||
} else {
|
} else {
|
||||||
// objects here, but we can't see them. draw the cell.
|
// objects here, but we can't see them. draw the cell.
|
||||||
*g = c->type->glyph;
|
*g = c->type->glyph;
|
||||||
adjustcellglyph(c, g);
|
adjustcellglyph(c, g, CA_BOTH);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// draw cell normally
|
// draw cell normally
|
||||||
//drawcell(cell, x, y);
|
//drawcell(cell, x, y);
|
||||||
*g = c->type->glyph;
|
*g = c->type->glyph;
|
||||||
adjustcellglyph(c, g);
|
adjustcellglyph(c, g, CA_BOTH);
|
||||||
}
|
}
|
||||||
} else { // can't see the cell
|
} else { // can't see the cell
|
||||||
void *thing;
|
void *thing;
|
||||||
|
@ -5591,7 +5657,8 @@ int createvault(map_t *map, int roomid, vault_t *v, int *retw, int *reth, int *r
|
||||||
setcelltype(cell, ct ? ct->id : getcellempty(cell));
|
setcelltype(cell, ct ? ct->id : getcellempty(cell));
|
||||||
// set roomid
|
// set roomid
|
||||||
cell->room = thisroom;
|
cell->room = thisroom;
|
||||||
// add objects
|
// add objects. NOTE: this might _unset_ cell->room
|
||||||
|
// if 'reusable' is listed.
|
||||||
addvaultcellcontents(cell, v, x-minx,y-miny, rotation);
|
addvaultcellcontents(cell, v, x-minx,y-miny, rotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5636,7 +5703,10 @@ int createvault(map_t *map, int roomid, vault_t *v, int *retw, int *reth, int *r
|
||||||
for (x = minx; x <= maxx; x++) {
|
for (x = minx; x <= maxx; x++) {
|
||||||
cell_t *c;
|
cell_t *c;
|
||||||
c = getcellat(map, x, y);
|
c = getcellat(map, x, y);
|
||||||
setcelllocked(c, "maintainedge vaultcell");
|
if (getroomid(c) == roomid) {
|
||||||
|
// ie. not marked as reusable
|
||||||
|
setcelllocked(c, "maintainedge vaultcell");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8561,14 +8631,14 @@ void initmap(void) {
|
||||||
addcelltype(CT_WALLBRICK, "brick wall", UNI_SHADEDARK, C_BRICK, NA, B_SOLID, B_OPAQUE, MT_BRICK, 0, 40, 0, B_NOABSORB);
|
addcelltype(CT_WALLBRICK, "brick wall", UNI_SHADEDARK, C_BRICK, NA, B_SOLID, B_OPAQUE, MT_BRICK, 0, 40, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLDIRT, "dirt wall", UNI_SHADEMED, C_BROWN, NA, B_SOLID, B_OPAQUE, MT_STONE, 0, 20, 0, B_NOABSORB);
|
addcelltype(CT_WALLDIRT, "dirt wall", UNI_SHADEMED, C_BROWN, NA, B_SOLID, B_OPAQUE, MT_STONE, 0, 20, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLDURANITE, "duranite wall", UNI_SHADEDARK, C_MAGENTA, NA, B_SOLID, B_OPAQUE, MT_DURANITE, 0, 20000, 0, B_NOABSORB);
|
addcelltype(CT_WALLDURANITE, "duranite wall", UNI_SHADEDARK, C_MAGENTA, NA, B_SOLID, B_OPAQUE, MT_DURANITE, 0, 20000, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLWOOD, "wooden wall", UNI_SOLID, C_DARKBROWN, NA, B_SOLID, B_OPAQUE, MT_WOOD, 0, 30, 0, B_NOABSORB);
|
addcelltype(CT_WALLWOOD, "wooden wall", UNI_DYNAMIC, C_DARKBROWN, NA, B_SOLID, B_OPAQUE, MT_WOOD, 0, 30, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLDWOOD, "wyrmwood wall", UNI_SOLID, C_DARKBROWN, NA, B_SOLID, B_OPAQUE, MT_DRAGONWOOD, 0, 100, 0, B_NOABSORB);
|
addcelltype(CT_WALLDWOOD, "wyrmwood wall", UNI_DYNAMIC, C_DARKBROWN, NA, B_SOLID, B_OPAQUE, MT_DRAGONWOOD, 0, 100, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLFLESH, "flesh wall", UNI_SOLID, C_FLESH, NA, B_SOLID, B_OPAQUE, MT_FLESH, 0, 25, 0, B_NOABSORB);
|
addcelltype(CT_WALLFLESH, "flesh wall", UNI_SOLID, C_FLESH, NA, B_SOLID, B_OPAQUE, MT_FLESH, 0, 25, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLGLASS, "glass wall", UNI_SOLID, C_CYAN, NA, B_SOLID, B_TRANS, MT_GLASS, 0, 20, 0, B_NOABSORB);
|
addcelltype(CT_WALLGLASS, "glass wall", UNI_DYNAMIC, C_CYAN, NA, B_SOLID, B_TRANS, MT_GLASS, 0, 20, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLICE, "ice wall", UNI_SHADEDARK, C_LIGHTCYAN, NA, B_SOLID, B_TRANS, MT_ICE, 0, 30, 0, B_NOABSORB);
|
addcelltype(CT_WALLICE, "ice wall", UNI_SHADEDARK, C_LIGHTCYAN, NA, B_SOLID, B_TRANS, MT_ICE, 0, 30, 0, B_NOABSORB);
|
||||||
//addcelltype(CT_WALLTREE, "dense bushland", UNI_SHADEDARK, C_GREEN, B_SOLID, B_OPAQUE, MT_PLANT, 0, 100);
|
//addcelltype(CT_WALLTREE, "dense bushland", UNI_SHADEDARK, C_GREEN, B_SOLID, B_OPAQUE, MT_PLANT, 0, 100);
|
||||||
addcelltype(CT_WALLTREE, "dense bushland", UNI_TREELOTS, C_LIGHTGREEN, NA, B_SOLID, B_OPAQUE, MT_PLANT, 0, 100, 0, B_NOABSORB);
|
addcelltype(CT_WALLTREE, "dense bushland", UNI_TREELOTS, C_LIGHTGREEN, NA, B_SOLID, B_OPAQUE, MT_PLANT, 0, 100, 0, B_NOABSORB);
|
||||||
addcelltype(CT_WALLMETAL, "metal wall", UNI_SOLID, C_METAL, NA, B_SOLID, B_OPAQUE, MT_METAL, 0, 75, 0, B_NOABSORB);
|
addcelltype(CT_WALLMETAL, "metal wall", UNI_DYNAMIC, C_METAL, NA, B_SOLID, B_OPAQUE, MT_METAL, 0, 75, 0, B_NOABSORB);
|
||||||
// cell types - non-solid
|
// cell types - non-solid
|
||||||
addcelltype(CT_FAKE, "fake cell", '.', C_GREEN, NA, B_EMPTY, B_TRANS, MT_STONE, 0, -1, 0, B_NOABSORB);
|
addcelltype(CT_FAKE, "fake cell", '.', C_GREEN, NA, B_EMPTY, B_TRANS, MT_STONE, 0, -1, 0, B_NOABSORB);
|
||||||
addcelltype(CT_MOSSROCK, "mossy rock floor", '.', C_MOSS, NA, B_EMPTY, B_TRANS, MT_STONE, 0, -1, 0, B_NOABSORB);
|
addcelltype(CT_MOSSROCK, "mossy rock floor", '.', C_MOSS, NA, B_EMPTY, B_TRANS, MT_STONE, 0, -1, 0, B_NOABSORB);
|
||||||
|
@ -9582,7 +9652,7 @@ void markroomwalls(map_t *m, room_t *r) {
|
||||||
for (x = r->x1+1; x <= r->x2-1; x++) {
|
for (x = r->x1+1; x <= r->x2-1; x++) {
|
||||||
for (y = r->y1; y <= r->y2; y++) {
|
for (y = r->y1; y <= r->y2; y++) {
|
||||||
c = getcellat(m, x, y);
|
c = getcellat(m, x, y);
|
||||||
if (c->type->solid) {
|
if (c->type->solid && (getroomid(c) == r->id)) {
|
||||||
c2 = getcellindir(c, DC_S);
|
c2 = getcellindir(c, DC_S);
|
||||||
if (c2 && !c2->type->solid) {
|
if (c2 && !c2->type->solid) {
|
||||||
c->isroomwall = D_N;
|
c->isroomwall = D_N;
|
||||||
|
@ -9594,7 +9664,7 @@ void markroomwalls(map_t *m, room_t *r) {
|
||||||
for (y = r->y1+1; y <= r->y2-1; y++) {
|
for (y = r->y1+1; y <= r->y2-1; y++) {
|
||||||
for (x = r->x2; x >= r->x1; x--) {
|
for (x = r->x2; x >= r->x1; x--) {
|
||||||
c = getcellat(m, x, y);
|
c = getcellat(m, x, y);
|
||||||
if (c->type->solid) {
|
if (c->type->solid && (getroomid(c) == r->id)) {
|
||||||
c2 = getcellindir(c, DC_W);
|
c2 = getcellindir(c, DC_W);
|
||||||
if (c2 && !c2->type->solid) {
|
if (c2 && !c2->type->solid) {
|
||||||
c->isroomwall = D_E;
|
c->isroomwall = D_E;
|
||||||
|
@ -9606,7 +9676,7 @@ void markroomwalls(map_t *m, room_t *r) {
|
||||||
for (x = r->x1+1; x <= r->x2-1; x++) {
|
for (x = r->x1+1; x <= r->x2-1; x++) {
|
||||||
for (y = r->y2; y >= r->y1; y--) {
|
for (y = r->y2; y >= r->y1; y--) {
|
||||||
c = getcellat(m, x, y);
|
c = getcellat(m, x, y);
|
||||||
if (c->type->solid) {
|
if (c->type->solid && (getroomid(c) == r->id)) {
|
||||||
c2 = getcellindir(c, DC_N);
|
c2 = getcellindir(c, DC_N);
|
||||||
if (c2 && !c2->type->solid) {
|
if (c2 && !c2->type->solid) {
|
||||||
c->isroomwall = D_S;
|
c->isroomwall = D_S;
|
||||||
|
@ -9618,7 +9688,7 @@ void markroomwalls(map_t *m, room_t *r) {
|
||||||
for (y = r->y1+1; y <= r->y2-1; y++) {
|
for (y = r->y1+1; y <= r->y2-1; y++) {
|
||||||
for (x = r->x1; x <= r->x2; x++) {
|
for (x = r->x1; x <= r->x2; x++) {
|
||||||
c = getcellat(m, x, y);
|
c = getcellat(m, x, y);
|
||||||
if (c->type->solid) {
|
if (c->type->solid && (getroomid(c) == r->id)) {
|
||||||
c2 = getcellindir(c, DC_E);
|
c2 = getcellindir(c, DC_E);
|
||||||
if (c2 && !c2->type->solid) {
|
if (c2 && !c2->type->solid) {
|
||||||
c->isroomwall = D_W;
|
c->isroomwall = D_W;
|
||||||
|
@ -10133,6 +10203,7 @@ void setcellknown(cell_t *cell, int forcelev) {
|
||||||
} else {
|
} else {
|
||||||
cell->knownglyph = cell->type->glyph;
|
cell->knownglyph = cell->type->glyph;
|
||||||
}
|
}
|
||||||
|
adjustcellglyph(cell, &(cell->knownglyph), CA_CH);
|
||||||
|
|
||||||
// high cartography skill lets us remember certain objects...
|
// high cartography skill lets us remember certain objects...
|
||||||
if (slev >= PR_EXPERT) {
|
if (slev >= PR_EXPERT) {
|
||||||
|
|
2
map.h
2
map.h
|
@ -11,7 +11,7 @@ region_t *addregion(enum BRANCH rtype, region_t *parent, int outlineid, int dept
|
||||||
regionoutline_t *addregionoutline(enum BRANCH rtype);
|
regionoutline_t *addregionoutline(enum BRANCH rtype);
|
||||||
regionthing_t *addregionthing(regionoutline_t *ro, int depth, int x, int y, enum REGIONTHING whatkind, int value, char *what);
|
regionthing_t *addregionthing(regionoutline_t *ro, int depth, int x, int y, enum REGIONTHING whatkind, int value, char *what);
|
||||||
branch_t *addbranch(enum BRANCH id, char *name, int pluralname, enum HABITAT defaulthabitat, int maxdepth, int stairsperlev, int deeperdir, int major, int depthmod, int addparentdepth);
|
branch_t *addbranch(enum BRANCH id, char *name, int pluralname, enum HABITAT defaulthabitat, int maxdepth, int stairsperlev, int deeperdir, int major, int depthmod, int addparentdepth);
|
||||||
void adjustcellglyph(cell_t *c, glyph_t *col);
|
void adjustcellglyph(cell_t *c, glyph_t *g, enum CELLADJUSTTYPE how);
|
||||||
int autodoors(map_t *map, int roomid, int minx, int miny, int maxx, int maxy, int doorpct, int dooropenchance);
|
int autodoors(map_t *map, int roomid, int minx, int miny, int maxx, int maxy, int doorpct, int dooropenchance);
|
||||||
void breakwall(cell_t *c, char *why, ...);
|
void breakwall(cell_t *c, char *why, ...);
|
||||||
int cellhaslos(cell_t *c1, cell_t *dest);
|
int cellhaslos(cell_t *c1, cell_t *dest);
|
||||||
|
|
6
move.c
6
move.c
|
@ -1720,9 +1720,13 @@ int movelf(lifeform_t *lf, cell_t *newcell, int onpurpose) {
|
||||||
if (isadjacent(lf->cell, precell)) { // ie don't say this if we teleported/jumped
|
if (isadjacent(lf->cell, precell)) { // ie don't say this if we teleported/jumped
|
||||||
if (areenemies(player, lf)) {
|
if (areenemies(player, lf)) {
|
||||||
char buf[BUFLEN];
|
char buf[BUFLEN];
|
||||||
|
int behind = B_FALSE;
|
||||||
getmoveverbother(lf, buf);
|
getmoveverbother(lf, buf);
|
||||||
real_getlfnamea(lf, lfname, NULL, B_NOSHOWALL, B_CURRACE);
|
real_getlfnamea(lf, lfname, NULL, B_NOSHOWALL, B_CURRACE);
|
||||||
msg("%s %s out of view.", lfname, buf);
|
if (isbehind(lf, player) && isadjacent(lf->cell, player->cell)) {
|
||||||
|
behind = B_TRUE;
|
||||||
|
}
|
||||||
|
msg("%s %s %s.", lfname, buf, behind ? "behind you" : "out of view");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
139
objects.c
139
objects.c
|
@ -412,7 +412,7 @@ material_t *addmaterial(enum MATERIAL id, char *name, float weightrating) {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, char glyph, int glyphcolour, enum RARITY rarity) {
|
objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, int glyph, int glyphcolour, enum RARITY rarity) {
|
||||||
objectclass_t *a;
|
objectclass_t *a;
|
||||||
|
|
||||||
// add to the end of the list
|
// add to the end of the list
|
||||||
|
@ -505,6 +505,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
enum LFSIZE wantarmsize = SZ_ANY;
|
enum LFSIZE wantarmsize = SZ_ANY;
|
||||||
enum MATERIAL wantdiffmat = MT_NOTHING;
|
enum MATERIAL wantdiffmat = MT_NOTHING;
|
||||||
int minar = 0; // minimum AR for armour
|
int minar = 0; // minimum AR for armour
|
||||||
|
int mindr = NA,maxdr = NA; // minimum DR for weapons
|
||||||
map_t *targetmap = NULL; // for portals
|
map_t *targetmap = NULL; // for portals
|
||||||
cell_t *targetcell = NULL; // for portals
|
cell_t *targetcell = NULL; // for portals
|
||||||
int donesomething;
|
int donesomething;
|
||||||
|
@ -525,10 +526,6 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
nadded = 0;
|
nadded = 0;
|
||||||
nretobs = 0;
|
nretobs = 0;
|
||||||
|
|
||||||
if ((gamemode == GM_GAMESTARTED) && where->where) {
|
|
||||||
assert(!where->where->type->solid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (where->owner && hasflag(where->owner->flags, F_NOPACK)) {
|
if (where->owner && hasflag(where->owner->flags, F_NOPACK)) {
|
||||||
if (db) dblog("error giving ob '%s' - owner isn't allowed to carry objects!", name);
|
if (db) dblog("error giving ob '%s' - owner isn't allowed to carry objects!", name);
|
||||||
nretobs = 0;
|
nretobs = 0;
|
||||||
|
@ -895,12 +892,14 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
wantgoodness = G_AVERAGE;
|
wantgoodness = G_AVERAGE;
|
||||||
p += strlen("average ");
|
p += strlen("average ");
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
|
mindr = 3; maxdr = 5;
|
||||||
} else if (strstarts(p, "good ")) {
|
} else if (strstarts(p, "good ")) {
|
||||||
wantgoodness = G_GOOD;
|
wantgoodness = G_GOOD;
|
||||||
if (onein(4)) wantblessed = B_BLESSED;
|
if (onein(4)) wantblessed = B_BLESSED;
|
||||||
p += strlen("good ");
|
p += strlen("good ");
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
limit(&minar, 1, NA);
|
limit(&minar, 1, NA);
|
||||||
|
mindr = 6; maxdr = 8;
|
||||||
} else if (strstarts(p, "great ")) {
|
} else if (strstarts(p, "great ")) {
|
||||||
wantgoodness = G_GREAT;
|
wantgoodness = G_GREAT;
|
||||||
if (onein(3)) wantblessed = B_BLESSED;
|
if (onein(3)) wantblessed = B_BLESSED;
|
||||||
|
@ -908,6 +907,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
p += strlen("great ");
|
p += strlen("great ");
|
||||||
limit(&minar, 2, NA);
|
limit(&minar, 2, NA);
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
|
mindr = 9; maxdr = 11;
|
||||||
} else if (strstarts(p, "excellent ")) {
|
} else if (strstarts(p, "excellent ")) {
|
||||||
wantgoodness = G_EXCELLENT;
|
wantgoodness = G_EXCELLENT;
|
||||||
if (onein(2)) wantblessed = B_BLESSED;
|
if (onein(2)) wantblessed = B_BLESSED;
|
||||||
|
@ -915,6 +915,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
p += strlen("excellent ");
|
p += strlen("excellent ");
|
||||||
limit(&minar, 3, NA);
|
limit(&minar, 3, NA);
|
||||||
donesomething = B_TRUE;
|
donesomething = B_TRUE;
|
||||||
|
mindr = 12; maxdr = NA;
|
||||||
// object names
|
// object names
|
||||||
// brands
|
// brands
|
||||||
} else if (strstarts(p, "branded ")) {
|
} else if (strstarts(p, "branded ")) {
|
||||||
|
@ -1123,7 +1124,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
limit(&minar, 1, NA);
|
limit(&minar, 1, NA);
|
||||||
}
|
}
|
||||||
|
|
||||||
ot = getrandomobofclass(oc->id, minrarity, maxrarity, matchlfskills, minar, musthaveflag);
|
ot = getrandomobofclass(oc->id, minrarity, maxrarity, matchlfskills, minar, mindr, maxdr, musthaveflag);
|
||||||
if (ot) {
|
if (ot) {
|
||||||
found = B_TRUE;
|
found = B_TRUE;
|
||||||
break;
|
break;
|
||||||
|
@ -1139,7 +1140,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
// want a specific rarity?
|
// want a specific rarity?
|
||||||
rrtorarity(wantrarity, &minrarity, &maxrarity);
|
rrtorarity(wantrarity, &minrarity, &maxrarity);
|
||||||
|
|
||||||
ot = getrandomobofclass(OC_ROCK, minrarity, maxrarity, NULL, B_FALSE, F_GEM);
|
ot = getrandomobofclass(OC_ROCK, minrarity, maxrarity, NULL, B_FALSE, NA, NA, F_GEM);
|
||||||
if (ot) {
|
if (ot) {
|
||||||
found = B_TRUE;
|
found = B_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1153,6 +1154,19 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
found = B_TRUE;
|
found = B_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (strstarts(p, "random impassable")) {
|
||||||
|
char buf[BUFLEN];
|
||||||
|
cell_t *cc;
|
||||||
|
cc = getobpilelocation(where);
|
||||||
|
// really want: impassable and not a dfeature
|
||||||
|
ot = getrandomobwithflag(cc->map, F_IMPASSABLE, buf);
|
||||||
|
while (ot->obclass->id == OC_DFEATURE) {
|
||||||
|
ot = getrandomobwithflag(cc->map, F_IMPASSABLE, buf);
|
||||||
|
}
|
||||||
|
if (ot) {
|
||||||
|
found = B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
|
@ -1170,6 +1184,18 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
}
|
}
|
||||||
if (db) dblog("DB: FOUND: ot->name = '%s'", ot->name );
|
if (db) dblog("DB: FOUND: ot->name = '%s'", ot->name );
|
||||||
|
|
||||||
|
// trying to place object on a solid cell?
|
||||||
|
if ((gamemode == GM_GAMESTARTED) && where->where) {
|
||||||
|
if (where->where->type->solid) {
|
||||||
|
// doors are okay - clear the solid cell first.
|
||||||
|
if (hasflag(ot->flags, F_DOOR)) {
|
||||||
|
setcelltype(where->where, getcellempty(where->where));
|
||||||
|
} else {
|
||||||
|
assert("BUG: trying to put object on solid cell." == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// check for specific brands. eg. "xxx of pyromania"
|
// check for specific brands. eg. "xxx of pyromania"
|
||||||
// NOTE: this will override any random brands from "branded"
|
// NOTE: this will override any random brands from "branded"
|
||||||
for (br = firstbrand ; br ; br = br->next) {
|
for (br = firstbrand ; br ; br = br->next) {
|
||||||
|
@ -1616,7 +1642,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum
|
||||||
|
|
||||||
getrarityrange(where->where->map->depth, &min, &max, RARITYVARIANCEOB, B_FALSE);
|
getrarityrange(where->where->map->depth, &min, &max, RARITYVARIANCEOB, B_FALSE);
|
||||||
// random potion type
|
// random potion type
|
||||||
ot = getrandomobofclass(OC_POTION, min, max, NULL, B_FALSE, F_NONE);
|
ot = getrandomobofclass(OC_POTION, min, max, NULL, B_FALSE, NA, NA, F_NONE);
|
||||||
if (ot) {
|
if (ot) {
|
||||||
f->val[0] = ot->id;
|
f->val[0] = ot->id;
|
||||||
}
|
}
|
||||||
|
@ -4913,7 +4939,7 @@ int getrandomgrimoirelev(void) {
|
||||||
return wantlev;
|
return wantlev;
|
||||||
}
|
}
|
||||||
|
|
||||||
objecttype_t *getrandomobofclass(enum OBCLASS ocid, int minrarity, int maxrarity, lifeform_t *forlf, int minar, enum FLAG musthaveflag) {
|
objecttype_t *getrandomobofclass(enum OBCLASS ocid, int minrarity, int maxrarity, lifeform_t *forlf, int minar, int mindr, int maxdr, enum FLAG musthaveflag) {
|
||||||
objecttype_t *ot;
|
objecttype_t *ot;
|
||||||
int totcount = 0, count = 0;
|
int totcount = 0, count = 0;
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
|
@ -4932,6 +4958,7 @@ objecttype_t *getrandomobofclass(enum OBCLASS ocid, int minrarity, int maxrarity
|
||||||
int rarityok = B_FALSE;
|
int rarityok = B_FALSE;
|
||||||
int skillok = B_FALSE;
|
int skillok = B_FALSE;
|
||||||
int armourok = B_FALSE;
|
int armourok = B_FALSE;
|
||||||
|
int wepok = B_FALSE;
|
||||||
int flagok = B_FALSE;
|
int flagok = B_FALSE;
|
||||||
// does rarity match?
|
// does rarity match?
|
||||||
f = hasflag(ot->flags, F_RARITY);
|
f = hasflag(ot->flags, F_RARITY);
|
||||||
|
@ -4957,18 +4984,37 @@ objecttype_t *getrandomobofclass(enum OBCLASS ocid, int minrarity, int maxrarity
|
||||||
if (minar && (ocid == OC_ARMOUR)) {
|
if (minar && (ocid == OC_ARMOUR)) {
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
f = hasflag(ot->flags, F_ARMOURRATING);
|
f = hasflag(ot->flags, F_ARMOURRATING);
|
||||||
if (f && (f->val[0] > 0)) {
|
if (f && (f->val[0] >= minar )) {
|
||||||
armourok = B_TRUE;
|
armourok = B_TRUE;
|
||||||
}
|
}
|
||||||
} else armourok = B_TRUE;
|
} else armourok = B_TRUE;
|
||||||
|
|
||||||
|
// min/max dr only applies if we're asking for weapons
|
||||||
|
if (((mindr != NA) || (maxdr != NA)) && (ocid == OC_WEAPON)) {
|
||||||
|
flag_t *f;
|
||||||
|
f = hasflag(ot->flags, F_DAM);
|
||||||
|
if (f) {
|
||||||
|
int minok = B_FALSE,maxok = B_FALSE;
|
||||||
|
if ((mindr == NA) || (f->val[1] >= mindr)) {
|
||||||
|
minok = B_TRUE;
|
||||||
|
}
|
||||||
|
if ((maxdr == NA) || (f->val[1] <= maxdr)) {
|
||||||
|
maxok = B_TRUE;
|
||||||
|
}
|
||||||
|
if (minok && maxok) {
|
||||||
|
wepok = B_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else wepok = B_TRUE;
|
||||||
|
|
||||||
if (musthaveflag != F_NONE) {
|
if (musthaveflag != F_NONE) {
|
||||||
if (hasflag(ot->flags, musthaveflag)) {
|
if (hasflag(ot->flags, musthaveflag)) {
|
||||||
flagok = B_TRUE;
|
flagok = B_TRUE;
|
||||||
}
|
}
|
||||||
} else flagok = B_TRUE;
|
} else flagok = B_TRUE;
|
||||||
|
|
||||||
|
|
||||||
if (skillok && rarityok && armourok && flagok) {
|
if (skillok && rarityok && armourok && wepok && flagok) {
|
||||||
poss[nposs++] = ot;
|
poss[nposs++] = ot;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -5748,7 +5794,7 @@ char *real_getobname(object_t *o, char *buf, int count, int wantpremods, int wan
|
||||||
|
|
||||||
// monster lorelevel of beginner or higher - you get "newt footprints"
|
// monster lorelevel of beginner or higher - you get "newt footprints"
|
||||||
lorelev = getlorelevel(player, r->raceclass->id);
|
lorelev = getlorelevel(player, r->raceclass->id);
|
||||||
if ( lorelev >= PR_BEGINNER) {
|
if (( lorelev >= PR_BEGINNER) && !hasflag(r->flags, F_NAME)) {
|
||||||
snprintf(buf, BUFLEN, "%s %s",r->name, o->type->name);
|
snprintf(buf, BUFLEN, "%s %s",r->name, o->type->name);
|
||||||
strcat(basename, buf);
|
strcat(basename, buf);
|
||||||
} else if (lorelev >= PR_NOVICE) {
|
} else if (lorelev >= PR_NOVICE) {
|
||||||
|
@ -8594,10 +8640,41 @@ int knockbackob(object_t *o, int dir, int howfar, int power, lifeform_t *pusher)
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void obtodancing(lifeform_t *newlf, object_t *o) {
|
||||||
|
flag_t *f;
|
||||||
|
if (o->pile != newlf->pack) {
|
||||||
|
o = relinkob(o, newlf->pack);
|
||||||
|
}
|
||||||
|
if (!isequipped(o)) {
|
||||||
|
weild(newlf, o);
|
||||||
|
}
|
||||||
|
|
||||||
|
f = hasflag(o->flags, F_OBHP);
|
||||||
|
if (f) {
|
||||||
|
newlf->maxhp = f->val[1];
|
||||||
|
newlf->hp = newlf->maxhp;
|
||||||
|
}
|
||||||
|
f = hasflag(o->flags, F_SIZE);
|
||||||
|
if (f) {
|
||||||
|
flag_t *f2;
|
||||||
|
f2 = lfhasflag(newlf, F_SIZE);
|
||||||
|
if (f2) f2->val[0] = f->val[0];
|
||||||
|
else addflag(newlf->flags, F_SIZE, f->val[0], NA, NA, NULL);
|
||||||
|
}
|
||||||
|
f = hasflag(o->flags, F_OBATTACKDELAY);
|
||||||
|
if (f) {
|
||||||
|
int origspeed;
|
||||||
|
int newspeed;
|
||||||
|
origspeed = getmovespeed(newlf);
|
||||||
|
killflagsofid(newlf->flags, F_MOVESPEED);
|
||||||
|
newspeed = (int)((float)origspeed * ((float)f->val[0] / 100.0));
|
||||||
|
addflag(newlf->flags, F_MOVESPEED, newspeed, NA, NA, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// animate a weapon
|
// animate a weapon
|
||||||
lifeform_t *makeanimated(lifeform_t *lf, object_t *o, int level) {
|
lifeform_t *makeanimated(lifeform_t *lf, object_t *o, int level) {
|
||||||
cell_t *where;
|
cell_t *where;
|
||||||
flag_t *f;
|
|
||||||
lifeform_t *newlf;
|
lifeform_t *newlf;
|
||||||
|
|
||||||
where = getrandomadjcell(lf->cell, &ccwalkable, B_NOEXPAND);
|
where = getrandomadjcell(lf->cell, &ccwalkable, B_NOEXPAND);
|
||||||
|
@ -8605,38 +8682,16 @@ lifeform_t *makeanimated(lifeform_t *lf, object_t *o, int level) {
|
||||||
|
|
||||||
newlf = addlf(where, R_DANCINGWEAPON, level);
|
newlf = addlf(where, R_DANCINGWEAPON, level);
|
||||||
if (newlf) {
|
if (newlf) {
|
||||||
|
// remove existing weapon.
|
||||||
|
killallobs(newlf->pack);
|
||||||
|
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
addflag(newlf->flags, F_FRIENDLY, B_TRUE, NA, NA, NULL);
|
addflag(newlf->flags, F_FRIENDLY, B_TRUE, NA, NA, NULL);
|
||||||
} else if (hasflag(lf->flags, F_HOSTILE)) {
|
} else if (hasflag(lf->flags, F_HOSTILE)) {
|
||||||
addflag(newlf->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
addflag(newlf->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
addflag(lf->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL);
|
obtodancing(newlf, o);
|
||||||
|
|
||||||
o = relinkob(o, newlf->pack);
|
|
||||||
weild(newlf, o);
|
|
||||||
|
|
||||||
f = hasflag(o->flags, F_OBHP);
|
|
||||||
if (f) {
|
|
||||||
newlf->maxhp = f->val[1];
|
|
||||||
newlf->hp = newlf->maxhp;
|
|
||||||
}
|
|
||||||
f = hasflag(o->flags, F_SIZE);
|
|
||||||
if (f) {
|
|
||||||
flag_t *f2;
|
|
||||||
f2 = lfhasflag(newlf, F_SIZE);
|
|
||||||
if (f2) f2->val[0] = f->val[0];
|
|
||||||
else addflag(lf->flags, F_SIZE, f->val[0], NA, NA, NULL);
|
|
||||||
}
|
|
||||||
f = hasflag(o->flags, F_OBATTACKDELAY);
|
|
||||||
if (f) {
|
|
||||||
int origspeed;
|
|
||||||
int newspeed;
|
|
||||||
origspeed = getmovespeed(newlf);
|
|
||||||
killflagsofid(newlf->flags, F_MOVESPEED);
|
|
||||||
newspeed = (int)((float)origspeed * ((float)f->val[0] / 100.0));
|
|
||||||
addflag(newlf->flags, F_MOVESPEED, newspeed, NA, NA, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (newlf) {
|
if (newlf) {
|
||||||
petify(newlf, lf);
|
petify(newlf, lf);
|
||||||
|
@ -11917,7 +11972,7 @@ void potioneffects(lifeform_t *lf, enum OBTYPE oid, object_t *o, enum BLESSTYPE
|
||||||
addtempflag(lf->flags, F_BLIND, B_TRUE, NA, NA, NULL, i);
|
addtempflag(lf->flags, F_BLIND, B_TRUE, NA, NA, NULL, i);
|
||||||
break;
|
break;
|
||||||
case OT_POT_CANINETRACKING:
|
case OT_POT_CANINETRACKING:
|
||||||
dospelleffects(lf, OT_S_CANINETRACKING, 5, lf, NULL, lf->cell, potblessed, seen, B_TRUE, NULL);
|
dospelleffects(lf, OT_S_CANINETRACKING, 8, lf, NULL, lf->cell, potblessed, seen, B_TRUE, NULL);
|
||||||
break;
|
break;
|
||||||
case OT_POT_COFFEE:
|
case OT_POT_COFFEE:
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
|
@ -15976,7 +16031,9 @@ void trapeffects(object_t *trapob, enum OBTYPE oid, cell_t *c, object_t *trapped
|
||||||
msg("A needle shoots out and hits %s!",lfname);
|
msg("A needle shoots out and hits %s!",lfname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!avoided) {
|
if (avoided) {
|
||||||
|
addob(c->obpile, "poisoned needle");
|
||||||
|
} else {
|
||||||
poison(lf, rnd(10,20), P_VENOM, 1, "a needle trap", R_NONE, B_TRUE);
|
poison(lf, rnd(10,20), P_VENOM, 1, "a needle trap", R_NONE, B_TRUE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -7,7 +7,7 @@ object_t *addemptyob(obpile_t *where, object_t *o);
|
||||||
hiddenname_t *addhiddenname(enum OBCLASS obclass, char *text);
|
hiddenname_t *addhiddenname(enum OBCLASS obclass, char *text);
|
||||||
knowledge_t *addknowledge(enum OBCLASS id, char *hiddenname, int known);
|
knowledge_t *addknowledge(enum OBCLASS id, char *hiddenname, int known);
|
||||||
material_t *addmaterial(enum MATERIAL id, char *name, float weightrating);
|
material_t *addmaterial(enum MATERIAL id, char *name, float weightrating);
|
||||||
objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, char glyph, int glyphcolour, enum RARITY rarity);
|
objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, int glyph, int glyphcolour, enum RARITY rarity);
|
||||||
void addocnoun(objectclass_t *oc, char *text);
|
void addocnoun(objectclass_t *oc, char *text);
|
||||||
object_t *addob(obpile_t *where, char *name);
|
object_t *addob(obpile_t *where, char *name);
|
||||||
object_t *addobfast(obpile_t *where, enum OBTYPE oid);
|
object_t *addobfast(obpile_t *where, enum OBTYPE oid);
|
||||||
|
@ -110,7 +110,7 @@ object_t *getrandomammo(lifeform_t *lf);
|
||||||
objecttype_t *getrandomammofor(object_t *o, int usebasic);
|
objecttype_t *getrandomammofor(object_t *o, int usebasic);
|
||||||
brand_t *getrandombrandfor(objecttype_t *ot);
|
brand_t *getrandombrandfor(objecttype_t *ot);
|
||||||
int getrandomgrimoirelev(void);
|
int getrandomgrimoirelev(void);
|
||||||
objecttype_t *getrandomobofclass(enum OBCLASS ocid, int minrarity, int maxrarity, lifeform_t *forlf, int minar, enum FLAG musthaveflag);
|
objecttype_t *getrandomobofclass(enum OBCLASS ocid, int minrarity, int maxrarity, lifeform_t *forlf, int minar, int mindr, int maxdr, enum FLAG musthaveflag);
|
||||||
enum OBTYPE getrandomtrapforob(object_t *o);
|
enum OBTYPE getrandomtrapforob(object_t *o);
|
||||||
int getrustdampct(object_t *o);
|
int getrustdampct(object_t *o);
|
||||||
int getfirearmrange(object_t *o);
|
int getfirearmrange(object_t *o);
|
||||||
|
@ -272,6 +272,7 @@ int obpropsmatch(object_t *a, object_t *b);
|
||||||
int obotpropsmatch(object_t *a, objecttype_t *b);
|
int obotpropsmatch(object_t *a, objecttype_t *b);
|
||||||
flag_t *obrestrictsmovement(object_t *o, lifeform_t *lf);
|
flag_t *obrestrictsmovement(object_t *o, lifeform_t *lf);
|
||||||
int obsfallthrough(cell_t *c, object_t *pit);
|
int obsfallthrough(cell_t *c, object_t *pit);
|
||||||
|
void obtodancing(lifeform_t *newlf, object_t *o);
|
||||||
int operate(lifeform_t *lf, object_t *o, cell_t *where);
|
int operate(lifeform_t *lf, object_t *o, cell_t *where);
|
||||||
enum RARITY pickrr(int whatfor);
|
enum RARITY pickrr(int whatfor);
|
||||||
int pilehasletter(obpile_t *op, char let);
|
int pilehasletter(obpile_t *op, char let);
|
||||||
|
|
26
spell.c
26
spell.c
|
@ -2367,10 +2367,10 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef
|
||||||
switch (user->race->id) {
|
switch (user->race->id) {
|
||||||
default:
|
default:
|
||||||
case R_STIRGE:
|
case R_STIRGE:
|
||||||
satedat = 8;
|
satedat = 6;
|
||||||
break;
|
break;
|
||||||
case R_LEECH:
|
case R_LEECH:
|
||||||
satedat = 12;
|
satedat = 8;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4999,13 +4999,20 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
donemsg = B_TRUE;
|
donemsg = B_TRUE;
|
||||||
}
|
}
|
||||||
o = retob[i];
|
o = retob[i];
|
||||||
|
|
||||||
|
// undo temperature effects from adding the ob
|
||||||
|
affect_temperature(o, B_REMOVE);
|
||||||
|
// replace the TEMPMOD flag.
|
||||||
|
killflagsofid(o->flags, F_TEMPMOD);
|
||||||
addflag(o->flags, F_TEMPMOD, tempmod, NA, NA, NULL);
|
addflag(o->flags, F_TEMPMOD, tempmod, NA, NA, NULL);
|
||||||
|
// now re-apply temperature effects
|
||||||
|
affect_temperature(o, B_ADD);
|
||||||
|
|
||||||
f = hasflag(o->flags, F_OBHP);
|
f = hasflag(o->flags, F_OBHP);
|
||||||
if (f) {
|
if (f) {
|
||||||
f->val[1] = 40;
|
f->val[1] = 40;
|
||||||
f->val[0] = f->val[1];
|
f->val[0] = f->val[1];
|
||||||
}
|
}
|
||||||
affect_temperature(o, B_ADD);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fizzle(caster);
|
fizzle(caster);
|
||||||
|
@ -5736,7 +5743,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
for (i = 0; i < power; i++) {
|
for (i = 0; i < power; i++) {
|
||||||
ot = getrandomobofclass(OC_FOOD, NA, NA, NULL, B_FALSE, F_NONE);
|
ot = getrandomobofclass(OC_FOOD, NA, NA, NULL, B_FALSE, NA, NA, F_NONE);
|
||||||
o = addobfast(targcell->obpile, ot->id);
|
o = addobfast(targcell->obpile, ot->id);
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
getobname(o, obname, o->amt);
|
getobname(o, obname, o->amt);
|
||||||
|
@ -5817,6 +5824,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
} else {
|
} else {
|
||||||
clearcell(c);
|
clearcell(c);
|
||||||
setcelltype(c, c->map->habitat->solidcelltype);
|
setcelltype(c, c->map->habitat->solidcelltype);
|
||||||
|
c->locked = B_FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5826,18 +5834,20 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
vault_t *v;
|
vault_t *v;
|
||||||
int vx,vy;
|
int vx,vy;
|
||||||
int vw,vh;
|
int vw,vh;
|
||||||
|
int newroomid;
|
||||||
// ask for a vaulttype
|
// ask for a vaulttype
|
||||||
v = askvault("Create which vault?");
|
v = askvault("Create which vault?");
|
||||||
|
|
||||||
if (createvault(caster->cell->map, caster->cell->map->nrooms, v, &vw, &vh, &vx, &vy)) {
|
newroomid = caster->cell->map->nrooms;
|
||||||
|
if (createvault(caster->cell->map, newroomid, v, &vw, &vh, &vx, &vy)) {
|
||||||
msg("Couldn't create a vault.");
|
msg("Couldn't create a vault.");
|
||||||
} else {
|
} else {
|
||||||
char ch;
|
char ch;
|
||||||
cell_t *c;
|
cell_t *c;
|
||||||
|
|
||||||
// link the new vault to the rest of the map
|
// link the new vault to the rest of the map
|
||||||
c = getcellat(caster->cell->map, vx, vy);
|
//c = getcellat(caster->cell->map, vx, vy);
|
||||||
linkexits(caster->cell->map, getroomid(c));
|
linkexits(caster->cell->map, newroomid);
|
||||||
|
|
||||||
msg("BAM! A vault has appeared nearby."); more();
|
msg("BAM! A vault has appeared nearby."); more();
|
||||||
needredraw = B_TRUE;
|
needredraw = B_TRUE;
|
||||||
|
@ -11126,7 +11136,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
} else if (cansee(player, target)) {
|
} else if (cansee(player, target)) {
|
||||||
char targname[BUFLEN];
|
char targname[BUFLEN];
|
||||||
getlfname(target, targname);
|
getlfname(target, targname);
|
||||||
msg("%s looks very lethargic!", getlfcol(target, CC_BAD), targname);
|
msg("^%c%s looks very lethargic!", getlfcol(target, CC_BAD), targname);
|
||||||
}
|
}
|
||||||
modstamina(target, -amttolose);
|
modstamina(target, -amttolose);
|
||||||
} else if (spellid == OT_S_REFRACTION) {
|
} else if (spellid == OT_S_REFRACTION) {
|
||||||
|
|
2
text.c
2
text.c
|
@ -316,7 +316,7 @@ char *construct_hit_string(lifeform_t *lf, lifeform_t *victim, char *attackernam
|
||||||
strcpy(buf, attackername);
|
strcpy(buf, attackername);
|
||||||
capitalise(buf);
|
capitalise(buf);
|
||||||
|
|
||||||
if (wep && !isunarmed && (lf->race->id != R_DANCINGWEAPON) && cansee(player, lf)) {
|
if (wep && !isunarmed && (lf->race->baseid != R_DANCINGWEAPON) && cansee(player, lf)) {
|
||||||
snprintf(withwep, BUFLEN, " with %s", wepname);
|
snprintf(withwep, BUFLEN, " with %s", wepname);
|
||||||
} else {
|
} else {
|
||||||
strcpy(withwep, "");
|
strcpy(withwep, "");
|
||||||
|
|
17
vault.c
17
vault.c
|
@ -360,11 +360,12 @@ void addvaultcontents(map_t *m, vault_t *v, int minx, int miny, int maxx, int ma
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set vault id for each cell
|
// set vault id for each cell (except for ones which were
|
||||||
|
// previously marked as reusable via RT_REUSABLE)
|
||||||
for (y = miny; y <= maxy; y++) {
|
for (y = miny; y <= maxy; y++) {
|
||||||
for (x = minx; x <= maxx; x++) {
|
for (x = minx; x <= maxx; x++) {
|
||||||
c = getcellat(m, x, y);
|
c = getcellat(m, x, y);
|
||||||
if (c) {
|
if (c && c->room) {
|
||||||
c->room->vault = v;
|
c->room->vault = v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -381,6 +382,11 @@ int addvaultthing(cell_t *c, vault_t *v, enum VAULTTHING vt, char *what) {
|
||||||
// mark this position as a room exit
|
// mark this position as a room exit
|
||||||
addflag(c->map->flags, F_ROOMEXIT, getroomid(c), c->x, c->y, "from addvaultthing");
|
addflag(c->map->flags, F_ROOMEXIT, getroomid(c), c->x, c->y, "from addvaultthing");
|
||||||
break;
|
break;
|
||||||
|
case VT_REUSABLE:
|
||||||
|
// this cell doesn't count as part of the room/vault
|
||||||
|
c->room = NULL;
|
||||||
|
c->locked = B_FALSE;
|
||||||
|
break;
|
||||||
case VT_OB:
|
case VT_OB:
|
||||||
if (streq(what, "random")) {
|
if (streq(what, "random")) {
|
||||||
o = addrandomob(c);
|
o = addrandomob(c);
|
||||||
|
@ -972,10 +978,13 @@ int handleline(vault_t *v, char *line) {
|
||||||
ok = B_TRUE;
|
ok = B_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // special legend...
|
} else { // special legend types...
|
||||||
if (streq(arg[0], "exit")) {
|
if (streq(arg[0], "exit")) {
|
||||||
addlegend(v, command[0], VT_EXIT, 100, "", VT_NONE, NULL);
|
addlegend(v, command[0], VT_EXIT, 100, "", VT_NONE, NULL);
|
||||||
ok = B_TRUE;
|
ok = B_TRUE;
|
||||||
|
} else if (streq(arg[0], "reusable")) {
|
||||||
|
addlegend(v, command[0], VT_REUSABLE, 100, "", VT_NONE, NULL);
|
||||||
|
ok = B_TRUE;
|
||||||
} else {
|
} else {
|
||||||
dblog("invalid syntax for legend value");
|
dblog("invalid syntax for legend value");
|
||||||
}
|
}
|
||||||
|
@ -1810,7 +1819,7 @@ int real_vaultthingok(enum VAULTTHING vt, char *what, int *hasfire) {
|
||||||
ct = findcelltypebyname(what);
|
ct = findcelltypebyname(what);
|
||||||
if (ct) return B_TRUE;
|
if (ct) return B_TRUE;
|
||||||
break;
|
break;
|
||||||
default:
|
default: // ie. exit, reusable
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue