diff --git a/ai.c b/ai.c index d4841d6..751ecd1 100644 --- a/ai.c +++ b/ai.c @@ -1573,7 +1573,7 @@ int aimovetolf(lifeform_t *lf, lifeform_t *target, int wantattack) { if ( (spell != OT_NONE) && // found a valid spell/ability to use // AND one of these: ((dist != 1) || // there is distance between us and target - (getspellrange(lf, st->id, 1) == 1) || // OR this works from adjacent + (getspellrange(lf, st->id, 1, NULL) == 1) || // OR this works from adjacent (st->obclass->id == OC_ABILITY) || // OR this is an ability !countinnateattacks(lf) || // OR we have no melee attack (rnd(1,3) == 1)) // OR random chance of using anyway... @@ -2203,11 +2203,12 @@ int aispellok(lifeform_t *lf, enum OBTYPE spellid, lifeform_t *victim, enum FLAG if (f) { if (pctchance(castchance)) { - int range; + int range, minrange,dist; + dist = getcelldist(lf->cell, victim->cell); switch (targettype) { case ST_VICTIM: - range = getspellrange(lf, spellid, getspellpower(lf, spellid)); - if ((range == UNLIMITED) || (getcelldist(lf->cell, victim->cell) <= range)) { + range = getspellrange(lf, spellid, getspellpower(lf, spellid), &minrange); + if (((range == UNLIMITED) || (dist <= range)) && (dist >= minrange)) { if (db) { dblog(".oO { spell possibility: %s }", ot ? ot->name : "?unkownspell?"); } @@ -2222,7 +2223,7 @@ int aispellok(lifeform_t *lf, enum OBTYPE spellid, lifeform_t *victim, enum FLAG ok = B_TRUE; break; case ST_ADJVICTIM: - if (getcelldist(lf->cell,victim->cell) == 1) { + if (dist == 1) { if (ot->id == OT_A_GRAB) { if (lfhasflag(lf, F_GRABBING) || lfhasflag(lf, F_GRABBEDBY) || lfhasflag(victim, F_GRABBING) || lfhasflag(victim, F_GRABBEDBY)) { @@ -2245,7 +2246,7 @@ int aispellok(lifeform_t *lf, enum OBTYPE spellid, lifeform_t *victim, enum FLAG } break; case ST_ADJSELF: - if (getcelldist(lf->cell,victim->cell) == 1) { + if (dist == 1) { ok = B_TRUE; } break; @@ -2499,6 +2500,11 @@ int aispellok(lifeform_t *lf, enum OBTYPE spellid, lifeform_t *victim, enum FLAG if ((ot->id == OT_S_PARALYZE) && lfhasflag(victim, F_PARALYZED)) { specificcheckok = B_FALSE; } + if (ot->id == OT_S_PROPELMISSILE) { + if (!getbestthrowmissile(lf, victim)) { + specificcheckok = B_FALSE; + } + } if (ot->id == OT_A_SHIELDBASH) { if (!getshield(lf, DT_ALL)) { specificcheckok = B_FALSE; diff --git a/attack.c b/attack.c index 24e2a8d..c872e28 100644 --- a/attack.c +++ b/attack.c @@ -1082,7 +1082,7 @@ int attacklf(lifeform_t *lf, lifeform_t *victim, object_t *wep, flag_t *damflag) } if (candodge) { - adj = getrandomadjcell(victim->cell, WE_WALKABLE, B_NOEXPAND); + adj = getdodgecell(victim); if (adj) { flag_t *f; if (isplayer(victim) || cansee(player, victim)) { diff --git a/data.c b/data.c index 07d8965..14ca285 100644 --- a/data.c +++ b/data.c @@ -616,12 +616,10 @@ void initjobs(void) { addflag(lastjob->flags, F_JOBATTRMOD, A_CHA, -5, NA, NULL); addflag(lastjob->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); // initial objects - //addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "balaclava"); - addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "katana"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "wakazashi"); addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "balaclava"); addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather armour"); addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "cloth trousers"); - addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "pair of leather shoes"); addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "5 shurikens"); addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "manriki"); addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "3 smoke grenades"); @@ -655,6 +653,7 @@ void initjobs(void) { addflag(lastjob->flags, F_CANLEARN, SK_TWOWEAPON, NA, NA, NULL); addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, PR_SKILLED, NA, NULL); // abilities + addflag(lastjob->flags, F_MPDICE, 1, NA, NA, NULL); // gained abilities addflag(lastjob->flags, F_LEVABIL, 2, OT_A_DISARMLF, NA, NULL); addflag(lastjob->flags, F_LEVABIL, 4, OT_A_TRIPLF, NA, NULL); @@ -3051,14 +3050,12 @@ void initobjects(void) { addflag(lastot->flags, F_TARGETTEDSPELL, TT_MONSTER, NA, NA, NULL); addflag(lastot->flags, F_MAXPOWER, 5, NA, NA, NULL); addflag(lastot->flags, F_LOSLOF, B_TRUE, LOF_NEED, NA, NULL); - addot(OT_S_JOLT, "jolt", "Jolts an adjacent enemy with a short pulse of electricity, dealing 1-^bpower^n damage.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); + addot(OT_S_PROPELMISSILE, "propel missile", "Calls a short but powerful jet of air to accelerate a thrown missile.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); + addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "Target must be at least two metres away."); addflag(lastot->flags, F_SPELLSCHOOL, SS_AIR, NA, NA, NULL); addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); - addflag(lastot->flags, F_MAXPOWER, 5, NA, NA, NULL); - addflag(lastot->flags, F_RANGE, 1, NA, NA, NULL); - addflag(lastot->flags, F_TARGETTEDSPELL, TT_MONSTER, NA, NA, NULL); + addflag(lastot->flags, F_RANGE, 5, 2, NA, NULL); addflag(lastot->flags, F_LOSLOF, B_FALSE, LOF_NEED, NA, NULL); - addflag(lastot->flags, F_AICASTTOATTACK, ST_ADJVICTIM, NA, NA, NULL); // l2 addot(OT_S_GRAVLOWER, "lessen gravity", "Lessens the weight of the caster's items. Also causes the caster to fall very slowly.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); @@ -3077,6 +3074,23 @@ void initobjects(void) { addflag(lastot->flags, F_AICASTTOATTACK, ST_VICTIM, NA, NA, NULL); addflag(lastot->flags, F_AICASTTOFLEE, ST_VICTIM, NA, NA, NULL); addflag(lastot->flags, F_LOSLOF, B_TRUE, LOF_NEED, NA, NULL); + addot(OT_S_JOLT, "jolt", "Jolts an adjacent enemy with a short pulse of electricity, dealing 5 electrical damage.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); + addflag(lastot->flags, F_SPELLSCHOOL, SS_AIR, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + addflag(lastot->flags, F_MAXPOWER, 1, NA, NA, NULL); + addflag(lastot->flags, F_RANGE, 1, NA, NA, NULL); + addflag(lastot->flags, F_TARGETTEDSPELL, TT_MONSTER, NA, NA, NULL); + addflag(lastot->flags, F_LOSLOF, B_FALSE, LOF_NEED, NA, NULL); + addflag(lastot->flags, F_AICASTTOATTACK, ST_ADJVICTIM, NA, NA, NULL); + addot(OT_S_REFRACTION, "refraction", "Instantly shatters all glass in the target location.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); + addflag(lastot->flags, F_SPELLSCHOOL, SS_AIR, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addflag(lastot->flags, F_MAXPOWER, 4, NA, NA, NULL); + addflag(lastot->flags, F_AICASTTOATTACK, ST_SELF, NA, NA, NULL); + addflag(lastot->flags, F_AICASTTOFLEE, ST_SELF, NA, NA, NULL); + addflag(lastot->flags, F_LOSLOF, B_FALSE, LOF_DONTNEED, NA, NULL); + addflag(lastot->flags, F_VARPOWER, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_ONGOING, B_TRUE, NA, NA, NULL); addot(OT_S_SHATTER, "shatter", "Instantly shatters all glass in the target location.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); addflag(lastot->flags, F_SPELLSCHOOL, SS_AIR, NA, NA, NULL); addflag(lastot->flags, F_SPELLSCHOOL, SS_COLD, NA, NA, NULL); @@ -6863,7 +6877,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 90, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 4, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_CHOP, 6, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, "flat of blade"); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_AXES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 45, 65, "10"); @@ -6874,7 +6888,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 70, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 8, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_CHOP, 11, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 5, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 5, NA, "flat of blade"); addflag(lastot->flags, F_ARMOURPIERCE, 4, NA, NA, ""); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_AXES, NA, NA, NULL); @@ -6885,7 +6899,7 @@ void initobjects(void) { addflag(lastot->flags, F_OBATTACKDELAY, 180, NA, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 10, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_CHOP, 18, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "flat of blade"); addflag(lastot->flags, F_NEEDSSPACE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_LARGE, NA, NA, NULL); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); @@ -6917,7 +6931,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 8, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_CHOP, 12, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 5, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 5, NA, "flat of blade"); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_AXES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 55, 75, "10"); @@ -6942,6 +6956,7 @@ void initobjects(void) { addflag(lastot->flags, F_OBATTACKDELAY, 75, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 9, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 5, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 90, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_AGI, 40, 60, "10"); @@ -7019,22 +7034,12 @@ void initobjects(void) { addflag(lastot->flags, F_PICKLOCKS, 7, B_BLUNTONFAIL, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_AGI, NA, 65, "10"); - addot(OT_QUICKBLADE, "quickblade", "A short blade of exceptional quality and balance, it allows its bearar to attack faster than would seem possible.", MT_METAL, 3.0, OC_WEAPON, SZ_MEDIUM); - addflag(lastot->flags, F_RARITY, H_DUNGEON, 73, NA, NULL); - addflag(lastot->flags, F_RARITY, H_CAVE, 73, NA, NULL); - addflag(lastot->flags, F_OBATTACKDELAY, 50, NA, NA, NULL); - addflag(lastot->flags, F_DAM, DT_PIERCE, 4, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_SLASH, 4, NA, NULL); - addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); - addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); - addflag(lastot->flags, F_CRITCHANCE, 2, NA, NA, NULL); - addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); - addflag(lastot->flags, F_ATTREQ, A_AGI, NA, 75, "10"); addot(OT_SHORTSWORD, "short sword", "A short warrior's blade.", MT_METAL, 4, OC_WEAPON, SZ_MEDIUM); addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 90, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 6, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 90, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_AGI, 30, 50, "5"); @@ -7046,6 +7051,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 90, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 7, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_SLASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 90, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 30, 50, "5"); @@ -7057,6 +7063,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 8, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 2, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_OBATTACKDELAY, 75, NA, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); @@ -7070,6 +7077,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 10, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 8, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_OBATTACKDELAY, 70, NA, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_SHORTBLADES, NA, NA, NULL); @@ -7106,6 +7114,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 7, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_OBATTACKDELAY, 75, NA, NA, NULL); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); @@ -7119,6 +7128,7 @@ void initobjects(void) { addflag(lastot->flags, F_ARMOURPIERCE, 2, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_SLASH, 11, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 11, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_HUMAN, NA, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 160, NA, NA, NULL); @@ -7132,6 +7142,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 70, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 10, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 9, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 55, 75, "3"); @@ -7146,6 +7157,7 @@ void initobjects(void) { addflag(lastot->flags, F_DAM, DT_SLASH, 12, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 12, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_CHOP, 12, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 5, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_HUMAN, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); @@ -7159,18 +7171,20 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 61, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 4, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_CHOP, 11, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_HUMAN, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 65, 85, "10"); addflag(lastot->flags, F_CRITCHANCE, 5, NA, NA, NULL); addot(OT_GREATSWORD, "greatsword", "A massive two-handed sword.", MT_METAL, 12, OC_WEAPON, SZ_MEDIUM); - addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, NA, NULL); - addflag(lastot->flags, F_RARITY, H_CAVE, 55, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, RR_RARE, NULL); + addflag(lastot->flags, F_RARITY, H_CAVE, 55, RR_RARE, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 175, NA, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 2, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_SLASH, 14, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 13, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 5, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_LARGE, NA, NA, NULL); addflag(lastot->flags, F_NEEDSSPACE, B_TRUE, NA, NA, NULL); @@ -7182,6 +7196,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 70, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 8, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 8, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 50, 70, "3"); @@ -7194,6 +7209,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 50, NA, NULL); addflag(lastot->flags, F_SHINY, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 5, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); @@ -7202,6 +7218,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 90, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 9, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 40, 60, "3"); @@ -7216,6 +7233,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_FOREST, NA, RR_VERYRARE, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 120, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 12, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, NULL); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_LONGBLADES, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 80, NA, "3"); @@ -7223,12 +7241,13 @@ void initobjects(void) { addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); addot(OT_ZWEIHANDER, "zweihander", "Even more dangerous than the mighty greatsword, the Zweihander is almost absurdly long, making it very hard to dodge.", MT_METAL, 12, OC_WEAPON, SZ_MEDIUM); - addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, NA, NULL); - addflag(lastot->flags, F_RARITY, H_CAVE, 55, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, RR_VERYRARE, NULL); + addflag(lastot->flags, F_RARITY, H_CAVE, 55, RR_VERYRARE, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 180, NA, NA, NULL); addflag(lastot->flags, F_ARMOURPIERCE, 2, NA, NA, ""); addflag(lastot->flags, F_DAM, DT_SLASH, 16, NA, NULL); addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 15, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 85, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_LARGE, NA, NA, NULL); addflag(lastot->flags, F_NEEDSSPACE, B_TRUE, NA, NA, NULL); @@ -7242,7 +7261,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 73, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 150, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 12, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "butt bash"); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, SZ_LARGE, NA, NA, NULL); addflag(lastot->flags, F_NEEDSSPACE, B_TRUE, NA, NA, NULL); @@ -7257,7 +7276,7 @@ void initobjects(void) { addflag(lastot->flags, F_NEEDSSPACE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 130, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 9, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "butt bash"); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_POLEARMS, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 65, 80, "1"); @@ -7284,7 +7303,7 @@ void initobjects(void) { addflag(lastot->flags, F_TWOHANDED, SZ_LARGE, NA, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 140, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 11, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "butt bash"); addflag(lastot->flags, F_EQUIPCONFER, F_CANWILL, OT_A_THRUST, NA, NULL); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_POLEARMS, NA, NA, NULL); @@ -7294,7 +7313,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 85, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 85, RR_COMMON, NULL); addflag(lastot->flags, F_DAM, DT_SLASH, 3, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "butt bash"); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_POLEARMS, NA, NA, NULL); addflag(lastot->flags, F_ATTACKVERB, NA, 2, NA, "scratch"); @@ -7307,7 +7326,7 @@ void initobjects(void) { addflag(lastot->flags, F_TWOHANDED, SZ_LARGE, NA, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 120, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 11, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "butt bash"); addflag(lastot->flags, F_EQUIPCONFER, F_CANWILL, OT_A_THRUST, NA, NULL); addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_POLEARMS, NA, NA, NULL); @@ -7327,7 +7346,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_OBATTACKDELAY, 140, NA, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 10, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 6, NA, "butt bash"); addflag(lastot->flags, F_EQUIPCONFER, F_CANWILL, OT_A_THRUST, NA, NULL); addflag(lastot->flags, F_ACCURACY, 65, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); @@ -7341,7 +7360,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_DAM, DT_PIERCE, 10, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 4, NA, "butt bash"); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_POLEARMS, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_AGI, 55, 75, "10"); @@ -7577,16 +7596,16 @@ void initobjects(void) { addflag(lastot->flags, F_RODSHAPED, B_TRUE, NA, NA, NULL); // exotic weapons - addot(OT_KATANA, "katana", "A long, finely balanced blade. Less raw power then a standard longsword, but its weight gives it a higher critical chance.", MT_METAL, 4, OC_WEAPON, SZ_MEDIUM); + addot(OT_KATANA, "katana", "A long, finely balanced blade. Ideal for critical hits.", MT_METAL, 4, OC_WEAPON, SZ_MEDIUM); addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 70, NA, NULL); - addflag(lastot->flags, F_DAM, DT_SLASH, 6, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 6, NA, NULL); - addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, NULL); + addflag(lastot->flags, F_DAM, DT_SLASH, 10, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 10, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 3, NA, "hilt bash"); // with the hilt addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_USESSKILL, SK_EXOTICWEPS, NA, NA, NULL); - addflag(lastot->flags, F_ATTREQ, A_AGI, 60, 70, "15"); - addflag(lastot->flags, F_CRITCHANCE, 10, NA, NA, NULL); + addflag(lastot->flags, F_ATTREQ, A_AGI, 70, 80, "15"); + addflag(lastot->flags, F_CRITCHANCE, 15, NA, NA, NULL); addflag(lastot->flags, F_CANBEDIFFMAT, MT_SILVER, 5, NA, NULL); addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_CANBLOCK, DT_PIERCE, NA, NA, NULL); @@ -7609,6 +7628,31 @@ void initobjects(void) { addflag(lastot->flags, F_USESSKILL, SK_EXOTICWEPS, NA, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_AGI, 50, 60, "15"); addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); + addot(OT_UCHIGATANA, "uchigatana", "A blade of exceptional quality and balance, it allows its bearar to attack faster than would seem possible.", MT_METAL, 3.0, OC_WEAPON, SZ_MEDIUM); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 73, RR_VERYRARE, NULL); + addflag(lastot->flags, F_RARITY, H_CAVE, 73, RR_VERYRARE, NULL); + addflag(lastot->flags, F_OBATTACKDELAY, 50, NA, NA, NULL); + addflag(lastot->flags, F_DAM, DT_PIERCE, 7, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_SLASH, 7, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 2, NA, "hilt bash"); // with the hilt + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_USESSKILL, SK_EXOTICWEPS, NA, NA, NULL); + addflag(lastot->flags, F_CRITCHANCE, 2, NA, NA, NULL); + addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); + addflag(lastot->flags, F_ATTREQ, A_AGI, 80, 90, "10"); + addot(OT_WAKAZASHI, "wakazashi", "A short, finely balanced blade. Less raw power then a standard longsword, but its weight gives it a higher critical chance.", MT_METAL, 4, OC_WEAPON, SZ_MEDIUM); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_RARITY, H_CAVE, 70, NA, NULL); + addflag(lastot->flags, F_DAM, DT_SLASH, 7, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_PIERCE, 7, NA, NULL); + addflag(lastot->flags, F_ALTDAM, DT_BASH, 2, NA, "hilt bash"); // with the hilt + addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addflag(lastot->flags, F_USESSKILL, SK_EXOTICWEPS, NA, NA, NULL); + addflag(lastot->flags, F_ATTREQ, A_AGI, 60, 70, "15"); + addflag(lastot->flags, F_CRITCHANCE, 10, NA, NA, NULL); + addflag(lastot->flags, F_CANBEDIFFMAT, MT_SILVER, 5, NA, NULL); + addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); + addflag(lastot->flags, F_CANBLOCK, DT_PIERCE, NA, NA, NULL); // projectile weapons addot(OT_BLOWGUN, "blowgun", "A thin reed tube which employs the user's breath to propel darts at high speed.", MT_PLANT, 0.5, OC_WEAPON, SZ_SMALL); @@ -8369,7 +8413,7 @@ void initrace(void) { 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_AGI, AT_LOW, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LTAVERAGE, 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_CHA, AT_LOW, NA, NULL); @@ -8378,7 +8422,6 @@ void initrace(void) { addflag(lastrace->flags, F_LEVITATING, B_TRUE, 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_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL); addflag(lastrace->flags, F_CANWILL, OT_S_CREATEMONSTER, 15, 15, "pw:3;"); addflag(lastrace->flags, F_CASTCHANCE, 100, NA, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_FLY, 2, NA, "^whirring"); @@ -8510,8 +8553,6 @@ void initrace(void) { addrace(R_PRISONER, "prisoner", 60, '@', C_GREY, MT_FLESH, RC_HUMANOID, "Somebody who has been improsioned."); setbodytype(lastrace, BT_HUMANOID); - addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_VARLEVEL, NA, NA, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL); @@ -9655,7 +9696,7 @@ void initrace(void) { addflag(lastrace->flags, F_STARTJOB, 5, SJ_NECROMANCER, NA, NULL); addflag(lastrace->flags, F_STARTJOB, 5, J_DEMONOLOGIST, NA, NULL); - addrace(R_GOBLINR, "froglin", 25, 'g', C_BLUE, MT_FLESH, RC_HUMANOID, "River goblins (more commonly known as 'froglins') are blueish goblins with sleek, leathery skin. They seems constantly wet, and can leap like a frog."); + addrace(R_GOBLINR, "froglin", 25, 'g', C_GREEN, MT_FLESH, RC_HUMANOID, "River goblins (more commonly known as 'froglins') are blueish goblins with sleek, leathery skin. They seems constantly wet, and can leap like a frog."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -9893,7 +9934,7 @@ void initrace(void) { addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_MORALE, 10, NA, NA, NULL); - addrace(R_GREMLIN, "gremlin", 20, 'g', C_GREEN, MT_FLESH, RC_HUMANOID, "Small mischievous imps known for their love of sabotage."); + addrace(R_GREMLIN, "gremlin", 20, 'g', C_BOLDGREEN, MT_FLESH, RC_HUMANOID, "Small mischievous imps known for their love of sabotage."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -9998,7 +10039,7 @@ void initrace(void) { addflag(lastrace->flags, F_EQUINE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, NA, NA, NULL); - addrace(R_HOBGOBLIN, "hobgoblin", 90, 'g', C_YELLOW, MT_FLESH, RC_HUMANOID, "A larger, stronger, smarter and more menacing form of a goblin."); + addrace(R_HOBGOBLIN, "hobgoblin", 90, 'g', C_CYAN, MT_FLESH, RC_HUMANOID, "A larger, stronger, smarter and more menacing form of a goblin."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -10039,7 +10080,7 @@ void initrace(void) { addflag(lastrace->flags, F_STARTJOB, 33, J_GUARD, NA, NULL); addflag(lastrace->flags, F_STARTJOB, 15, J_BERZERKER, NA, NULL); - addrace(R_HOBGOBLINWAR, "hobgoblin elite", 90, 'g', C_GREEN, MT_FLESH, RC_HUMANOID, "An exceptional hobgoblin commander who has achieved command of its own unit."); + addrace(R_HOBGOBLINWAR, "hobgoblin elite", 90, 'g', C_BOLDCYAN, MT_FLESH, RC_HUMANOID, "An exceptional hobgoblin commander who has achieved command of its own unit."); setbodytype(lastrace, BT_HUMANOID); lastrace->baseid = R_HOBGOBLIN; addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); @@ -11040,7 +11081,7 @@ void initrace(void) { addflag(lastrace->flags, F_ARMOURRATING, 6, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_RANDOM, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_RANDOM, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_RANDOM, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_WIS, AT_RANDOM, NA, NULL); @@ -11065,7 +11106,7 @@ void initrace(void) { addflag(lastrace->flags, F_TR, 6, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_RANDOM, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_WIS, AT_RANDOM, NA, NULL); @@ -11870,7 +11911,6 @@ void initrace(void) { // end plants // animals -oooooooooooooooo up o to here with atts addrace(R_BAT, "giant bat", 3, 'B', C_BROWN, MT_FLESH, RC_ANIMAL, "A larger (and more savage) version of your average household bat."); setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); @@ -11878,7 +11918,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); @@ -11903,7 +11948,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_SEWER, NA, RR_RARE, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); @@ -11928,7 +11978,12 @@ oooooooooooooooo up o to here with atts 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_HOSTILE, B_TRUE, NA, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); @@ -11965,6 +12020,9 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, 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_MOVESPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_MAXATTACKS, 1, 2, NA, NULL); @@ -12003,6 +12061,9 @@ oooooooooooooooo up o to here with atts 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_GTAVERAGE, 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_MOVESPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL); @@ -12036,6 +12097,9 @@ oooooooooooooooo up o to here with atts 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_AGI, AT_GTAVERAGE, 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_MOVESPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_MAXATTACKS, 1, 2, NA, NULL); @@ -12076,6 +12140,9 @@ oooooooooooooooo up o to here with atts 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_GTAVERAGE, 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_MOVESPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_FAST, NA, NA, NULL); addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL); @@ -12106,7 +12173,13 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ENHANCESMELL, 5, 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_EVASION, 40, NA, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_EVASION, 20, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 4, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 4, NA, NULL); @@ -12142,6 +12215,10 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_MAXATTACKS, 3, 3, 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_VEGETARIAN, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, B_COVETS, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 4, NA, "roars^a roar"); @@ -12171,6 +12248,10 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_MAXATTACKS, 3, 3, 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_SEEINDARK, 5, NA, NA, NULL); @@ -12200,6 +12281,10 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_MAXATTACKS, 2, 2, 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_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_NOISETEXT, N_GETANGRY, 4, NA, "roars^a roar"); addflag(lastrace->flags, F_SEEINDARK, 4, NA, NA, NULL); addflag(lastrace->flags, F_CRITKNOCKDOWN, B_TRUE, NA, NA, NULL); @@ -12216,7 +12301,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_NUMAPPEAR, 3, 4, NA, ""); addflag(lastrace->flags, F_ARMOURRATING, 4, NA, 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_HITDICE, 1, NA, NA, NULL); addflag(lastrace->flags, F_TR, 2, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); @@ -12239,7 +12329,12 @@ oooooooooooooooo up o to here with atts 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_ARMOURRATING, 9, NA, 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_HITDICE, 3, NA, NA, NULL); addflag(lastrace->flags, F_TR, 4, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); @@ -12266,8 +12361,12 @@ oooooooooooooooo up o to here with atts 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_ARMOURRATING, 4, NA, 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_AVERAGE, 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_HITDICE, 5, NA, NA, NULL); addflag(lastrace->flags, F_TR, 7, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); @@ -12295,8 +12394,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_VERYRARE, NULL); addflag(lastrace->flags, F_MINIONS, 100, 5, 8, "random ant"); addflag(lastrace->flags, F_ARMOURRATING, 6, NA, 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_AVERAGE, 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_HITDICE, 10, NA, NA, NULL); addflag(lastrace->flags, F_TR, 10, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); @@ -12318,7 +12421,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_VULNTOSALT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_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_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL); @@ -12347,7 +12455,12 @@ oooooooooooooooo up o to here with atts addrace(R_CHICKEN, "chicken", 0.5, 'c', C_BROWN, MT_FLESH, RC_ANIMAL, "A common farm-yard chicken."); setbodytype(lastrace, BT_BIRD); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_RARITY, H_VILLAGE, NA, RR_COMMON, NULL); @@ -12370,7 +12483,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_QUADRAPED); addbodypart(lastrace, BP_TAIL, NULL); addflag(lastrace->flags, F_RNDHOSTILE, 10, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, 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_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_RARITY, H_VILLAGE, NA, RR_COMMON, NULL); @@ -12402,7 +12520,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_CANTALK, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NUMAPPEAR, 2, 4, NA, ""); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, 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_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); @@ -12431,8 +12554,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_NUMAPPEAR, 2, 6, NA, ""); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, 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_MOVESPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); @@ -12462,8 +12589,12 @@ oooooooooooooooo up o to here with atts addbodypart(lastrace, BP_TAIL, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NUMAPPEAR, 1, 4, NA, ""); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, 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_MOVESPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); @@ -12492,9 +12623,12 @@ oooooooooooooooo up o to here with atts 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_FOREST, NA, RR_COMMON, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, 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_AGI, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12514,7 +12648,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_VULNTOSALT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, AT_AVERAGE, 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_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); @@ -12541,8 +12680,12 @@ oooooooooooooooo up o to here with atts lastrace->baseid = R_HAWK; addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, 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_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12573,8 +12716,12 @@ oooooooooooooooo up o to here with atts lastrace->baseid = R_HAWK; addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12603,8 +12750,12 @@ oooooooooooooooo up o to here with atts lastrace->baseid = R_HAWK; addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12629,8 +12780,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12676,6 +12831,10 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_HASATTACK, OT_TRAMPLE, 16, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_VHIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_VEGETARIAN, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, B_COVETS, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 4, NA, "trumpets loudly^a loud trumpeting"); @@ -12689,8 +12848,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, 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_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, 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_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12718,7 +12881,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_VULNTOSALT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, 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_CON, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); @@ -12762,8 +12930,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ARMOURRATING, 10, NA, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_BUTT, 14, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_TRAMPLE, 18, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_STR, AT_VHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXHIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_VEGETARIAN, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, B_COVETS, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 4, NA, "trumpets loudly^a loud trumpeting"); @@ -12779,7 +12951,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, 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_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_HITDICE, 1, NA, 4, NULL); addflag(lastrace->flags, F_TR, 1, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); @@ -12799,7 +12976,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_QUADRAPED); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HATESRACE, R_ANT, NA, 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_AGI, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -12820,6 +13002,10 @@ oooooooooooooooo up o to here with atts 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); @@ -12845,6 +13031,10 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); @@ -12870,6 +13060,10 @@ oooooooooooooooo up o to here with atts 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, 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_MOVESPEED, SP_VERYFAST, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_TINY, NA, NA, NULL); @@ -12895,8 +13089,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_VERYRARE, NULL); addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_VERYRARE, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXHIGH, 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_CON, AT_HIGH, 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_SIZE, SZ_ENORMOUS, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -12928,8 +13126,12 @@ oooooooooooooooo up o to here with atts addbodypart(lastrace, BP_HEAD, NULL); addbodypart(lastrace, BP_EYES, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_AGI, 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_AGI, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_VERYSLOW, NA, NA, ""); addflag(lastrace->flags, F_MOVESPEED, SP_VERYSLOW, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); @@ -12958,8 +13160,12 @@ oooooooooooooooo up o to here with atts addbodypart(lastrace, BP_HEAD, NULL); addbodypart(lastrace, BP_EYES, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_AGI, 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_AGI, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_VERYSLOW, NA, NA, ""); addflag(lastrace->flags, F_MOVESPEED, SP_VERYSLOW, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); @@ -12987,7 +13193,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13014,7 +13225,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_NOSMELL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_COLDBLOOD, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13037,7 +13253,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13062,7 +13283,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13089,7 +13315,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13117,8 +13348,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, 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_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13148,7 +13383,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_BREATHWATER, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_COLDBLOOD, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -13170,7 +13410,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_SPIDER); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, 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_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_NOSMELL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); @@ -13198,7 +13443,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, 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_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, B_TRUE, NA, NA, NULL); @@ -13230,7 +13480,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOSMELL, B_TRUE, NA, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_SPIDERCLIMB, B_TRUE, NA, NA, NULL); @@ -13258,8 +13513,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_SPIDER); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, 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_IQ, AT_GTAVERAGE, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_NOSMELL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); @@ -13288,7 +13547,12 @@ oooooooooooooooo up o to here with atts addrace(R_SWAN, "swan", 1, 'c', C_WHITE, MT_FLESH, RC_ANIMAL, "A graceful waterbird."); setbodytype(lastrace, BT_BIRD); + 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, 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_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); @@ -13312,8 +13576,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_QUADRAPED); addbodypart(lastrace, BP_TAIL, 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_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ENHANCESMELL, 5, NA, NA, NULL); @@ -13342,8 +13610,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_QUADRAPED); addbodypart(lastrace, BP_TAIL, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, 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_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_ENHANCESMELL, 6, NA, NA, NULL); @@ -13372,9 +13644,12 @@ oooooooooooooooo up o to here with atts addrace(R_WOLFDIRE, "dire wolf", 60, 'd', C_BLUE, MT_FLESH, RC_ANIMAL, "Enormous wolves which attack with an intelligence and ferocity far beyond their regular kin."); setbodytype(lastrace, BT_QUADRAPED); addbodypart(lastrace, BP_TAIL, NULL); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, 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_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); @@ -13404,8 +13679,12 @@ oooooooooooooooo up o to here with atts addrace(R_WOLFWINTER, "winter wolf", 25, 'd', C_CYAN, MT_FLESH, RC_ANIMAL, "Wolves which have lived in close proximity to the undead sometimes mutate into these frosty beasts. While their claws have become less sharp, they instead deal unnatural cold damage."); setbodytype(lastrace, BT_QUADRAPED); addbodypart(lastrace, BP_TAIL, NULL); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_ENHANCESMELL, 6, NA, NA, NULL); @@ -13444,8 +13723,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_EXTRACORPSE, 80, NA, NA, "random gem"); addflag(lastrace->flags, F_EXTRACORPSE, 50, NA, NA, "random gem"); addflag(lastrace->flags, F_EXTRACORPSE, 25, NA, NA, "random gem"); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, 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_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_ENHANCESMELL, 6, NA, NA, NULL); @@ -13474,8 +13757,12 @@ oooooooooooooooo up o to here with atts addbodypart(lastrace, BP_TAIL, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); //addflag(lastrace->flags, F_HATESALL, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_CON, AT_VHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_VHIGH, 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_VHIGH, 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_SIZE, SZ_ENORMOUS, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ENHANCESMELL, 2, NA, NA, NULL); @@ -13519,6 +13806,8 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 5, NA, "roars^a roar"); addflag(lastrace->flags, F_STARTSKILL, SK_LORE_DRAGONS, PR_MASTER, NA, NULL); addflag(lastrace->flags, F_STARTSKILL, SK_LISTEN, PR_ADEPT, NA, NULL); @@ -14005,8 +14294,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_TR, 4, 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_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, NA, NA, "100"); // massively strong to hold stones + 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_NOISETEXT, N_GETANGRY, 3, NA, "snorts^a snort"); addflag(lastrace->flags, F_DTIMMUNE, DT_EXPLOSIVE, NA, NA, NULL); addflag(lastrace->flags, F_CORPSEFLAG, F_EXPLODEONDEATH, NA, 2, "32d2"); @@ -14019,7 +14312,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXLOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, 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_HIGH, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_TINY, NA, NA, NULL); @@ -14042,7 +14340,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_POISONCORPSE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXLOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, 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_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -14072,7 +14375,12 @@ oooooooooooooooo up o to here with atts lastrace->baseid = R_GIANTFLY; addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXLOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, 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_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_POISONCORPSE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "giant gnat corpse"); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); @@ -14102,7 +14410,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, 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_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_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); @@ -14137,7 +14450,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, 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_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); @@ -14164,8 +14482,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_DTIMMUNE, DT_FIRE, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, 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_HASATTACK, OT_TOUCHBURN, 3, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "flares its flames^crackling flames"); addflag(lastrace->flags, F_DAMAGEGROUNDOBS, 2, DT_FIRE, NA, NULL); @@ -14175,7 +14497,12 @@ oooooooooooooooo up o to here with atts addrace(R_GLOWBUG, "glowbug", 1, 'i', C_WHITE, MT_FLESH, RC_INSECT, "Glowbugs are tiny flying creatures, magically producing light from their bodies."); setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, 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_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_MOVESPEED, SP_VERYFAST, NA, NA, ""); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); @@ -14205,7 +14532,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_QUADRAPED); addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); @@ -14242,7 +14574,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ARMOURRATING, 18, 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_STARTATT, A_STR, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 7, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 4, NA, NULL); addflag(lastrace->flags, F_SEEINDARK, 10, NA, NA, NULL); @@ -14271,7 +14608,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ARMOURRATING, 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_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 4, NA, NULL); addflag(lastrace->flags, F_SEEINDARK, 10, NA, NA, NULL); addflag(lastrace->flags, F_DTIMMUNE, DT_POISON, NA, NA, NULL); @@ -14293,6 +14635,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, 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_STARTATT, A_STR, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_HITDICE, 6, NA, NA, NULL); addflag(lastrace->flags, F_TR, 6, NA, NA, NULL); addflag(lastrace->flags, F_ARMOURRATING, 12, NA, NA, NULL); @@ -14322,7 +14670,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_TR, 5, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_EXLOW, NA, NULL); addflag(lastrace->flags, F_TREMORSENSE, 10, NA, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 8, NA, NULL); addflag(lastrace->flags, F_INDUCEFEAR, B_TRUE, NA, NA, NULL); @@ -14340,7 +14693,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_TR, 2, 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_STARTATT, A_STR, AT_LOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 2, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "screeches^a screech"); addflag(lastrace->flags, F_MORALE, 5, NA, NA, NULL); @@ -14362,7 +14720,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ARMOURRATING, 4, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_CANWILL, OT_A_HURRICANESTRIKE, NA, NA, NULL); addflag(lastrace->flags, F_CANCAST, OT_S_BLINKASS, 3, 3, "pw:1;"); addflag(lastrace->flags, F_HASATTACK, OT_FISTS, 2, NA, NULL); @@ -14390,7 +14753,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ARMOURRATING, 6, 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_STARTATT, A_STR, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 3, NA, NULL); addflag(lastrace->flags, F_VAMPIRIC, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_SEEINDARK, 10, NA, NA, NULL); @@ -14419,8 +14787,11 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, 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_VLOW, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 2, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 3, NA, NULL); addflag(lastrace->flags, F_HITCONFER, F_POISONED, SC_POISON, 28, "3-5"); @@ -14439,8 +14810,12 @@ oooooooooooooooo up o to here with atts addrace(R_ZOMBIE, "zombie", 50, 'Z', C_BLUE, MT_FLESH, RC_UNDEAD, "The re-animated corpse of a once living entity, zombies seek to consume the brains of living creatures in an attempt to regain their soul."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, NA, NA, "30"); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); @@ -14485,7 +14860,12 @@ oooooooooooooooo up o to here with atts setbodypartname(lastrace, BP_RIGHTFINGER, "right phalange"); setbodypartname(lastrace, BP_LEFTFINGER, "left phalange"); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, NA, NA, "30"); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "5-20 bones"); addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14521,7 +14901,12 @@ oooooooooooooooo up o to here with atts setbodypartname(lastrace, BP_RIGHTFINGER, "right phalange"); setbodypartname(lastrace, BP_LEFTFINGER, "left phalange"); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, 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_CON, NA, NA, "30"); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "5-20 flaming bones"); addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14547,6 +14932,10 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, 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_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); @@ -14575,6 +14964,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_COMMON, NULL); addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_SWAMP, NA, RR_UNCOMMON, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_HITDICE, 4, NA, NA, NULL); addflag(lastrace->flags, F_TR, 4, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); @@ -14598,7 +14993,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_HUMANOID); setbodypartname(lastrace, BP_HANDS, "claws"); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, 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_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14622,7 +15022,12 @@ oooooooooooooooo up o to here with atts addrace(R_GHOST, "ghost", 50, 'p', C_GREY, MT_MAGIC, RC_UNDEAD, "Wispy spirits formed when a soul refuses to depart the earthly realm after death, ghosts exist part way between dimensions. The sight of a ghost can cause fear in all who behold it, and their ethereal nature makes them immune to most attacks."); // p for sPirit setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_LOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_LOW, 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_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14657,7 +15062,12 @@ oooooooooooooooo up o to here with atts setbodytype(lastrace, BT_HUMANOID); setbodypartname(lastrace, BP_HANDS, "claws"); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, 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_CON, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_VLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, 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_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14684,7 +15094,12 @@ oooooooooooooooo up o to here with atts addrace(R_LICH, "lich", 50, 'L', C_MAGENTA, MT_FLESH, RC_UNDEAD, "Immensely powerful wizards can on rare occasions extend their own lives by becoming undead lichs. While their physical body continues to slowly decay, they remain all of their intellect and power."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_EXHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_VERYRARE, NULL); addflag(lastrace->flags, F_INDUCEFEAR, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); @@ -14714,9 +15129,12 @@ oooooooooooooooo up o to here with atts addrace(R_MUMMY, "mummy", 54, 'M', C_GREY, MT_FLESH, RC_UNDEAD, "A rotting humanoid figure clad in bandages."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_VHIGH, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_VLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, 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_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14741,9 +15159,12 @@ oooooooooooooooo up o to here with atts addrace(R_MUMMYG, "greater mummy", 54, 'M', C_MAGENTA, MT_FLESH, RC_UNDEAD, "A hugely muscled rotting figure, wearing priestly garments."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); - addflag(lastrace->flags, F_STARTATT, A_IQ, AT_EXHIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_VHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_VLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, 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_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14778,7 +15199,12 @@ oooooooooooooooo up o to here with atts addrace(R_REVENANT, "revenant", 60, 'Z', C_BOLDBLUE, MT_FLESH, RC_UNDEAD, "A powerful zombie which retains full memory of its former life and abilities."); setbodytype(lastrace, BT_HUMANOID); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_VLOW, NA, NULL); addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL); addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14854,6 +15280,7 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_STARTATT, A_STR, AT_GTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL); @@ -14896,6 +15323,7 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_HIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, 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_CHA, AT_LOW, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); @@ -14934,6 +15362,7 @@ oooooooooooooooo up o to here with atts 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, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_AVERAGE, 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_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); @@ -14969,7 +15398,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_MOVESPEED, SP_ULTRAFAST, NA, NA, ""); addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_VLOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_VHIGH, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_VLOW, 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_SIZE, SZ_LARGE, NA, NA, NULL); addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); addflag(lastrace->flags, F_CANWILL, OT_S_FLIGHT, NA, NA, NULL); @@ -14994,7 +15428,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_AWARENESS, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_MINDLESS, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_VLOW, 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_CORPSETYPE, NA, NA, NA, "5-20 bones"); addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -15017,6 +15456,12 @@ oooooooooooooooo up o to here with atts addrace(R_DANCINGWEAPON, "dancing weapon", 0, ')', C_GREY, MT_METAL, RC_OTHER, "A magically animated weapon."); 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_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); @@ -15036,7 +15481,12 @@ oooooooooooooooo up o to here with atts addrace(R_FLOATINGDISC, "floating disc", 0, '_', C_BOLDGREEN, MT_METAL, RC_OTHER, "A magically created disc of energy which floats in the air."); addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXHIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_VLOW, 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_LEVITATING, B_TRUE, NA, NA, ""); addflag(lastrace->flags, F_HITDICE, 1, NA, NA, NULL); addflag(lastrace->flags, F_TR, 1, NA, NA, NULL); @@ -15059,7 +15509,12 @@ oooooooooooooooo up o to here with atts addflag(lastrace->flags, F_AWARENESS, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_VLOW, 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_BLOODOB, NA, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_ENORMOUS, NA, NA, NULL); @@ -15257,7 +15712,7 @@ void initskills(void) { addskilldesc(SK_EVASION, PR_ADEPT, "^gIncreases your EV by 36%.^n", B_FALSE); addskilldesc(SK_EVASION, PR_ADEPT, "^gYou gain the 'snatch' ability.^n", B_FALSE); addskilldesc(SK_EVASION, PR_SKILLED, "^gIncreases your EV by 48%.^n", B_FALSE); - addskilldesc(SK_EVASION, PR_SKILLED, "^gYou now automatically dodge fatal attacks if you have free stamina.^n", B_FALSE); + addskilldesc(SK_EVASION, PR_SKILLED, "^gYou now automatically dodge fatal attacks if you have free stamina.^n", B_TRUE); addskilldesc(SK_EVASION, PR_EXPERT, "^gIncreases your EV by 60%.^n", B_FALSE); addskilldesc(SK_EVASION, PR_MASTER, "^gIncreases your EV by 72%.^n", B_FALSE); addskill(SK_FIRSTAID, "First Aid", "Increases your healing rate and reduces duration of poison.", 0); // untrainable diff --git a/data/hiscores.db b/data/hiscores.db index 939b143..77ce351 100644 Binary files a/data/hiscores.db and b/data/hiscores.db differ diff --git a/defs.h b/defs.h index 0a1ddbd..df1d9c5 100644 --- a/defs.h +++ b/defs.h @@ -386,7 +386,7 @@ enum SHOPACTION { #define RANDOM (-2610) #define AUTO (-7654) #define HEAVYWEPKG (5) -#define HITDIESIDES (8) +#define HITDIESIDES (6) // how quickly the game clock increments @@ -1521,6 +1521,8 @@ enum OBTYPE { OT_S_GUSTOFWIND, OT_S_HURRICANE, OT_S_MIST, + OT_S_PROPELMISSILE, + OT_S_REFRACTION, OT_S_SHATTER, OT_S_TAILWIND, OT_S_TORNADO, @@ -2057,9 +2059,7 @@ enum OBTYPE { OT_KNIFE, OT_MEATCLEAVER, OT_ORNDAGGER, - OT_QUICKBLADE, OT_RAPIER, - OT_SAI, OT_SABRE, OT_SHORTSWORD, OT_STEAKKNIFE, @@ -2072,11 +2072,16 @@ enum OBTYPE { OT_EPEE, OT_FALCHION, OT_GREATSWORD, - OT_KATANA, OT_LONGSWORD, OT_ORNSWORD, OT_SCIMITAR, OT_ZWEIHANDER, + // exotic + OT_KATANA, + OT_NUNCHAKU, + OT_SAI, + OT_UCHIGATANA, + OT_WAKAZASHI, // polearms OT_GLAIVE, OT_GUISARME, @@ -2105,7 +2110,6 @@ enum OBTYPE { OT_GREATCLUB, OT_MACE, OT_MORNINGSTAR, - OT_NUNCHAKU, OT_SHILLELAGH, OT_SPANNER, OT_STICK, @@ -2664,7 +2668,8 @@ enum FLAG { F_FIRESPEED, // how fast this weapon shoots projectiles F_AMMOOB, // v0 = what object this weapon fires. can have multiple types. F_AMMOCAPACITY, // v0 = max ammo that can be loaded - F_RANGE, // range of projectile firing weapon + F_RANGE, // v0 = range of projectile firing weapon or spell + // optional v1 = minrange (for spells only) F_RELOADTURNS, // # actions it takes to reload this gun // end gun flags F_FLAMESTRIKE, // causes fires where you hit diff --git a/io.c b/io.c index 4e381d5..c7185b8 100644 --- a/io.c +++ b/io.c @@ -542,10 +542,10 @@ char askchar(char *prompt, char *validchars, char *def, int showchars, int mayca } cell_t *askcoords(char *prompt, char *subprompt, int targettype, lifeform_t *srclf, int maxrange, enum LOFTYPE loftype, int wanttrail) { - return real_askcoords(prompt, subprompt, targettype, srclf, maxrange, loftype, wanttrail, NULL, 0); + return real_askcoords(prompt, subprompt, targettype, srclf, 0, maxrange, loftype, wanttrail, NULL, 0); } -cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t *srclf, int maxrange, enum LOFTYPE loftype, int wanttrail, cell_t **spectarg, int nspectargs) { +cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t *srclf, int minrange, int maxrange, enum LOFTYPE loftype, int wanttrail, cell_t **spectarg, int nspectargs) { static int startlf = -1; int finished = B_FALSE; int moved = B_FALSE; @@ -1084,10 +1084,10 @@ cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t tempob = addob(c->obpile, obname); } // show objects - o = doaskobject(c->obpile, "Describe which object", NULL, B_TRUE, B_FALSE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(c->obpile, "Describe which object", NULL, NULL, B_TRUE, B_FALSE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); while (o) { describeob(o); - o = doaskobject(c->obpile, "Describe which object", NULL, B_FALSE, B_FALSE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(c->obpile, "Describe which object",NULL, NULL, B_FALSE, B_FALSE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); } if (tempob) killob(tempob); } @@ -2795,16 +2795,16 @@ lifeform_t *askgod(char *prompttext, int onlyprayed) { return lf; } -object_t *askobject(obpile_t *op, char *prompt, int *count, char action, long opts) { +object_t *askobject(obpile_t *op, char *prompt, char *noobtext, int *count, char action, long opts) { int showlong = B_TRUE; if (op->owner && isplayer(op->owner)) { showlong = B_FALSE; } - return doaskobject(op, prompt, count, showlong, B_TRUE, B_FALSE, action, NULL, MT_NOTHING, opts, F_NONE); + return doaskobject(op, prompt, noobtext, count, showlong, B_TRUE, B_FALSE, action, NULL, MT_NOTHING, opts, F_NONE); } -object_t *askobjectwithflag(obpile_t *op, char *prompt, int *count, char action, long opts, enum FLAG withflag) { - return doaskobject(op, prompt, count, B_TRUE, B_TRUE, B_FALSE, action, NULL, MT_NOTHING, opts, withflag, F_NONE); +object_t *askobjectwithflag(obpile_t *op, char *prompt, char *noobtext, int *count, char action, long opts, enum FLAG withflag) { + return doaskobject(op, prompt, noobtext, count, B_TRUE, B_TRUE, B_FALSE, action, NULL, MT_NOTHING, opts, withflag, F_NONE); } int contains(enum OBCLASS *array, int nargs, enum OBCLASS want) { @@ -2942,7 +2942,7 @@ void listobs(WINDOW *win, object_t **mylist, int *sellist, int *selcount, int fi // F_NONE // // If you pass "sellshop", DONT also pass F_xxx. -object_t *doaskobject(obpile_t *op, char *prompt, int *count, int showlong, int forpickup, int showpoints, char action, object_t *sellshop, int wantmaterial, long opts, ...) { +object_t *doaskobject(obpile_t *op, char *prompt, char *noobtext, int *count, int showlong, int forpickup, int showpoints, char action, object_t *sellshop, int wantmaterial, long opts, ...) { int c,i; char defchar = '\0'; static char defaults[52] = {'\0'}; @@ -3078,6 +3078,12 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int showlong, int } mylist[i] = NULL; + // no objects? + if ((i == 0) && noobtext) { + msg("%s", noobtext); + return NULL; + } + // start displaying from the first one firstob = 0; nextpage = -1; @@ -4175,7 +4181,7 @@ void docomms(lifeform_t *lf) { } else { // ask what to give snprintf(buf, BUFLEN, "What will you give to %s?",lfname); - o = askobject(player->pack, buf, &count, '\0', AO_NONE); + o = askobject(player->pack, buf, NULL, &count, '\0', AO_NONE); } if (o) { if (o->type->id == OT_GOLD) { @@ -4746,7 +4752,7 @@ void dodrop(obpile_t *op, int wantmulti, obpile_t *dst) { if (wantmulti) { askobjectmulti(op, buf, AO_NONE); } else { - o = askobject(op, buf, &count, '\0', AO_NONE); + o = askobject(op, buf, NULL, &count, '\0', AO_NONE); if (o) { retobs[0] = o; retobscount[0] = count; @@ -4881,7 +4887,7 @@ void doeat(obpile_t *op) { return; } - eatob = askobject(op, "Eat what", NULL, 'e', AO_EDIBLE); + eatob = askobject(op, "Eat what", "You have nothing to eat!", NULL, 'e', AO_EDIBLE); } if (eatob) { if (isunknownbadobject(eatob) && skillcheck(player, A_WIS, 30, 0)) { @@ -4897,7 +4903,7 @@ void doeat(obpile_t *op) { int dowear(obpile_t *op) { object_t *o; int rv; - o = askobject(op, "Wear what", NULL, '\0', AO_WEARABLE); + o = askobject(op, "Wear what", "You have nothing to wear!", NULL, '\0', AO_WEARABLE); if (o) { if (isunknownbadobject(o) && skillcheck(player, A_WIS, 30, 0)) { if (!confirm_badfeeling(o)) { @@ -4919,7 +4925,7 @@ int doweild(obpile_t *op) { object_t *o; int count = ALL; int rv; - o = askobject(op, "Weild what", &count, 'w', AO_WEILDABLE | AO_INCLUDENOTHING); + o = askobject(op, "Weild what", "You have nothing to weild.", &count, 'w', AO_WEILDABLE | AO_INCLUDENOTHING); if (o) { if (isunknownbadobject(o) && skillcheck(player, A_WIS, 30, 0)) { if (!confirm_badfeeling(o)) { @@ -7283,7 +7289,7 @@ char *makedesc_skill(enum SKILL skid, char *retbuf, enum SKILLLEVEL levhilite) { char *makedesc_spell(objecttype_t *ot, char *retbuf) { char buf[BUFLEN]; flag_t *retflag[MAXCANDIDATES], *f; - int nretflags,i,power,range,stamcost; + int nretflags,i,power,range,stamcost,minrange; strcpy(retbuf, ""); @@ -7294,7 +7300,7 @@ char *makedesc_spell(objecttype_t *ot, char *retbuf) { } - range = getspellrange(player, ot->id, power); + range = getspellrange(player, ot->id, power, &minrange); snprintf(buf, BUFLEN, "%s\n", ot->desc); strncat(retbuf, buf, BUFLEN); @@ -7408,7 +7414,13 @@ char *makedesc_spell(objecttype_t *ot, char *retbuf) { strncat(retbuf, buf, BUFLEN); if (range != UNLIMITED) { - sprintf(buf, "At this power, it has a range of %d cell%s.\n",range, (range == 1) ? "" : "s"); + sprintf(buf, "At this power, it has a range of %d cell%s",range, (range == 1) ? "" : "s"); + if (minrange != 0) { + char buf2[BUFLEN]; + sprintf(buf2, " (minimum %d)", minrange); + strcat(buf, buf2); + } + strcat(buf, ".\n"); strncat(retbuf, buf, BUFLEN); } } @@ -7802,7 +7814,7 @@ void dooperate(obpile_t *op) { } // ask which object to read - o = askobject(op, "Operate what", NULL, 'o', AO_OPERABLE); + o = askobject(op, "Operate what", "You have nothing to operate.", NULL, 'o', AO_OPERABLE); if (o) { operate(player, o, NULL); } @@ -7995,12 +8007,12 @@ void doexplain(char *question) { void dofinaloblist(obpile_t *op) { object_t *o; - o = doaskobject(op, "Your final possessions were", NULL, B_TRUE, B_FALSE, B_TRUE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(op, "Your final possessions were", NULL, NULL, B_TRUE, B_FALSE, B_TRUE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); while (o) { // describe it describeob(o); // ask for another one - o = doaskobject(op, "Your final possessions were", NULL, B_TRUE, B_FALSE, B_TRUE,'\0', NULL, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(op, "Your final possessions were",NULL, NULL, B_TRUE, B_FALSE, B_TRUE,'\0', NULL, MT_NOTHING, AO_NONE, F_NONE); } real_clearmsg(B_TRUE); } @@ -8154,12 +8166,12 @@ void doinventory(obpile_t *op) { maxweight = getmaxcarryweight(player); pct = (packweight / maxweight) * 100; snprintf(buf, BUFLEN, "Inventory (%0.0f/%0.0f kg, %0.0f%%)", packweight, maxweight, pct); - o = doaskobject(op, buf, NULL, B_TRUE, B_TRUE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(op, buf, NULL, NULL, B_TRUE, B_TRUE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); while (o) { // describe it describeob(o); // ask for another one - o = askobject(op, buf, NULL, '\0', AO_NONE); + o = askobject(op, buf, NULL, NULL, '\0', AO_NONE); } real_clearmsg(B_TRUE); } @@ -8193,7 +8205,7 @@ void doquaff(obpile_t *op) { // ask which object to quaff if (!liquid) { - liquid = askobjectwithflag(op, "Quaff what", NULL, 'q', AO_NONE, F_DRINKABLE); + liquid = askobjectwithflag(op, "Quaff what", "You have nothing drinkable.", NULL, 'q', AO_NONE, F_DRINKABLE); } if (liquid) { if (canquaff(player, liquid)) { @@ -8275,7 +8287,7 @@ void dopour(obpile_t *op) { object_t *o; // ask which object to read - o = askobject(op, "Pour what", NULL, 'P', AO_POURABLE); + o = askobject(op, "Pour what", "You are not holding anything pourable.", NULL, 'P', AO_POURABLE); if (o) { if (ispourable(o)) { pour(player, o); @@ -8304,7 +8316,7 @@ void doread(obpile_t *op) { // ask which object to read - o = askobject(op, "Read what", NULL, 'r', AO_READABLE); + o = askobject(op, "Read what", "You have nothing to read.", NULL, 'r', AO_READABLE); if (o) { if (isreadable(o)) { readsomething(player, o); @@ -8394,7 +8406,7 @@ int dotakeoff(obpile_t *op) { int rv = B_TRUE; // ask which object to read - o = askobject(op, "Take off what", NULL, 'T', AO_EQUIPPEDNONWEAPON ); + o = askobject(op, "Take off what", "You are not wearing anything!", NULL, 'T', AO_EQUIPPEDNONWEAPON ); if (o) { if (isarmour(o)) { f = hasflag(o->flags, F_EQUIPPED); @@ -8425,7 +8437,7 @@ int dothrow(obpile_t *op, object_t *o) { // ask which object to throw if (!o) { - o = askobject(op, "Throw what", NULL, 't', AO_NONE); + o = askobject(op, "Throw what", "You have nothing to throw!", NULL, 't', AO_NONE); } if (o) { int maxdist; diff --git a/io.h b/io.h index 42d2f8d..13b6ab3 100644 --- a/io.h +++ b/io.h @@ -19,13 +19,13 @@ void announceobflagloss(object_t *o, flag_t *f); int confirm_badfeeling(object_t *o); int confirm_injury_action(enum BODYPART bp, enum DAMTYPE dt, char *actionname); lifeform_t *askgod(char *prompt, int onlyprayed); -object_t *askobject(obpile_t *op, char *title, int *count, char action, long opts); -object_t *askobjectwithflag(obpile_t *op, char *title, int *count, char action, long opts, enum FLAG withflag); -object_t *doaskobject(obpile_t *op, char *title, int *count, int showlong, int forpickup, int showpoints, char action, object_t *sellshop, int wantmaterial, long opts, ...); +object_t *askobject(obpile_t *op, char *title, char *noobtext, int *count, char action, long opts); +object_t *askobjectwithflag(obpile_t *op, char *title, char *noobtext,int *count, char action, long opts, enum FLAG withflag); +object_t *doaskobject(obpile_t *op, char *prompt, char *noobtext, int *count, int showlong, int forpickup, int showpoints, char action, object_t *sellshop, int wantmaterial, long opts, ...); int askobjectmulti(obpile_t *op, char *prompt, long opts); char askchar(char *prompt, char *validchars, char *def, int showchars, int maycancel); cell_t *askcoords(char *prompt, char *subprompt, int targettype, lifeform_t *srclf, int maxrange, enum LOFTYPE loftype, int wanttrail); -cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t *srclf, int maxrange, enum LOFTYPE loftype, int wanttrail, cell_t **spectarg, int nspectargs); +cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t *srclf, int minrange, int maxrange, enum LOFTYPE loftype, int wanttrail, cell_t **spectarg, int nspectargs); char *askstring(char *prompt, char punc, char *retbuf, int retbuflen, char *def); vault_t *askvault(char *prompttext); void centre(WINDOW *win, enum COLOUR col, int y, char *format, ... ); diff --git a/lf.c b/lf.c index 9cd8e22..fbdcca4 100644 --- a/lf.c +++ b/lf.c @@ -68,6 +68,7 @@ extern lifeform_t *godlf[]; extern int ngodlfs; extern enum ERROR reason; +extern void *rdata; // for xplist @@ -4180,7 +4181,7 @@ int eat(lifeform_t *lf, object_t *o) { ptid = P_FOOD; } // cannibulism ? - if (corpserace->id == lf->race->baseid) { + if (corpserace && (corpserace->id == lf->race->baseid)) { ppower = 3; } poison(lf, rnd(20,40), ptid, ppower, dambuf, cf ? cf->val[0] : R_NONE); @@ -9951,6 +9952,9 @@ void givesubjob(lifeform_t *lf, enum SUBJOB sj) { switch (sj) { // mage types case SJ_AIRMAGE: + o = addob(lf->pack, "15 blessed darts"); + identify(o); + giveskilllev(lf, SK_THROWING, PR_NOVICE); addflag(lf->flags, F_CANSEETHROUGHMAT, MT_GAS, NA, NA, NULL); sb1 = addob(lf->pack, "spellbook of air magic"); if (!isplayer(lf)) { @@ -11529,7 +11533,7 @@ int lockpick(lifeform_t *lf, cell_t *targcell, object_t *target, object_t *devic } // ask which object to use - device = askobjectwithflag(lf->pack, "Lockpick using what", NULL, 'p', AO_NONE, F_PICKLOCKS); + device = askobjectwithflag(lf->pack, "Lockpick using what", NULL, NULL, 'p', AO_NONE, F_PICKLOCKS); if (!device) { msg("Cancelled."); return B_TRUE; @@ -19093,6 +19097,35 @@ void startlfturn(lifeform_t *lf) { if (isdead(lf)) return; + if (lfhasflag(lf, F_DODGES)) { + enum ERROR e; + if (celldangerous(lf, lf->cell, B_TRUE, &e)) { + cell_t *adj; + // autododge! + adj = getdodgecell(lf); + if (adj) { + char fromx[BUFLEN]; + if ((e == E_AVOIDOB) && rdata) { + object_t *o; + o = (object_t *)rdata; + getobname(o, fromx, o->amt); + } else { + sprintf(fromx, "danger"); + } + if (isplayer(lf)) { + msg("You reflexively dodge away from %s!", fromx); + } else if (cansee(player, lf)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s reflexively dodges away from %s!", lfname, fromx); + } + f = addflag(lf->flags, F_NOTIME, B_TRUE, NA, NA, NULL); + moveto(lf, adj, B_FALSE, B_FALSE); + killflag(f); + } + } + } + ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // IMPORTANT: any potentially damaging effects have to go after here... @@ -21102,6 +21135,7 @@ int validateraces(void) { for (r = firstrace ; r ; r = r->next) { lifeform_t *lf; int thishd; + enum ATTRIB a; // add a fake lf lf = addlf(&fakecell, r->id, 1); @@ -21112,6 +21146,19 @@ int validateraces(void) { if (thishd > maxmonhitdice) { maxmonhitdice = thishd; } + + // all races must have fully defined stats + for (a = 0 ; a < MAXATTS; a++) { + if (!hasflagval(r->flags, F_STARTATT, a, NA, NA, NULL)) { + printf("ERROR in race '%s' - race has no f_startatt %s\n", r->name, getattrname(a)); + goterror = B_TRUE; + } + } + // duplicate startatt flags? + if (countflagsofid(r->flags, F_STARTATT) != MAXATTS) { + printf("ERROR in race '%s' - duplicate f_startatt flags detected.\n", r->name); + goterror = B_TRUE; + } if (!hasflag(r->flags, F_SIZE)) { @@ -21183,15 +21230,6 @@ int validateraces(void) { printf("ERROR in race '%s' - F_HITCONFER, but no HITCONFERVALS defined.\n", r->name); goterror = B_TRUE; } - } else if (f->id == F_PLAYABLE) { - // playable races must have fully defined stats - enum ATTRIB a; - for (a = 0 ; a < MAXATTS; a++) { - if (!hasflagval(r->flags, F_STARTATT, a, NA, NA, NULL)) { - printf("ERROR in race '%s' - race is f_playable but has no f_startatt %s\n", r->name, getattrname(a)); - goterror = B_TRUE; - } - } } else if (f->id == F_STARTATT) { if (strlen(f->text) && (f->val[1] != NA)) { printf("ERROR in race '%s' - F_STARTATT has both text range and val1.\n", r->name); diff --git a/move.c b/move.c index 749b9f1..73f26e4 100644 --- a/move.c +++ b/move.c @@ -165,7 +165,7 @@ int celldangerous(lifeform_t *lf, cell_t *cell, int onlyifknown, enum ERROR *err // never dangerous if there's someone there, since we'll // attack them instead of moving! - if (cell->lf) { + if (cell->lf && (cell->lf != lf)) { return B_FALSE; } @@ -780,6 +780,23 @@ int getdirtowards(cell_t *src, cell_t *dst, lifeform_t *srclf, int wantcheck, in return bestdir; } +cell_t *getdodgecell(lifeform_t *lf) { + int dir; + cell_t *c,*poss[8]; + int nposs = 0; + + for (dir = DC_N; dir <= DC_NW; dir++) { + c = getcellindir(lf->cell, dir); + if (c && cellwalkable(lf, c, NULL) && !celldangerous(lf, c, B_TRUE, NULL)) { + poss[nposs++] = c; + } + } + if (nposs) { + return poss[rnd(0,nposs-1)]; + } + return NULL; +} + int getwalkoffdir(lifeform_t *lf, int dir) { switch (dir) { case DC_NE: diff --git a/move.h b/move.h index 0cd7837..c2f6476 100644 --- a/move.h +++ b/move.h @@ -11,6 +11,7 @@ int diropposite(int dir); int dorandommove(lifeform_t *lf, int badmovesok, int restonfail, int strafe); int getdiraway(cell_t *src, cell_t *dst, lifeform_t *srclf, int wantcheck, int dirtype, int keepinlof); int getdirtowards(cell_t *src, cell_t *dst, lifeform_t *srclf, int wantcheck, int dirtype); +cell_t *getdodgecell(lifeform_t *lf); int getwalkoffdir(lifeform_t *lf, int dir); int knockback(lifeform_t *lf, int dir, int howfar, lifeform_t *pusher, int fallcheckdiff, int wantannounce); int makeorthogonal(int dir); diff --git a/objects.c b/objects.c index 0e11ab8..d476484 100644 --- a/objects.c +++ b/objects.c @@ -3715,7 +3715,7 @@ void fragments(cell_t *centre, char *what, int speed, int howfar) { // add object then fire it o = addob(centre->obpile, what); if (o) { - real_fireat(NULL, o, o->amt, dst, speed, NULL, B_FALSE); + real_fireat(NULL, o, o->amt, dst, speed, NULL, B_FALSE, OT_NONE); } } else { // add object @@ -6906,13 +6906,6 @@ int isheatable(object_t *o) { return 0; } switch (o->material->id) { - case MT_PAPER: - case MT_LEATHER: - case MT_CLOTH: - case MT_SILK: - case MT_PLANT: - return 2; - case MT_BONE: case MT_STONE: case MT_RUBBER: case MT_WAX: @@ -7030,6 +7023,7 @@ int ismagicalobtype(objecttype_t *ot) { case OC_SCROLL: switch (ot->id) { case OT_SCR_NOTHING: + case OT_MAP: // these scrolls are non-magical break; default: @@ -7690,6 +7684,13 @@ lifeform_t *makeanimated(lifeform_t *lf, object_t *o, int level) { 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; @@ -8991,7 +8992,7 @@ int operate(lifeform_t *lf, object_t *o, cell_t *where) { return B_TRUE; } else { snprintf(buf, BUFLEN, "Load %s with what ammo",obname); - oo = askobject(lf->pack, buf, NULL, 'l', AO_SPECIFIED); + oo = askobject(lf->pack, buf, NULL, NULL, 'l', AO_SPECIFIED); if (oo) { if (isammofor(oo->type, o)) { loadfirearm(lf, o, oo); @@ -9847,7 +9848,7 @@ int pour(lifeform_t *lf, object_t *o) { } else { snprintf(buf, BUFLEN, "Pour %s onto what", obname); // tip onto another object - dst = askobject(lf->pack, buf, NULL, '\0', AO_NONE); + dst = askobject(lf->pack, buf, NULL, NULL, '\0', AO_NONE); if (!dst) { msg("Cancelled."); return B_TRUE; @@ -10867,7 +10868,7 @@ int readsomething(lifeform_t *lf, object_t *o) { if (needsob && isplayer(lf) && !isknown(o)) { flag_t *f2; f2 = addflag(o->flags, F_BEINGUSED, B_TRUE, NA, NA, NULL); - targob = askobject(lf->pack, "Target which object", NULL, '\0', AO_NONE); + targob = askobject(lf->pack, "Target which object", NULL, NULL, '\0', AO_NONE); killflag(f2); if (targob) { if (isplayer(lf)) { @@ -11272,7 +11273,10 @@ int readsomething(lifeform_t *lf, object_t *o) { if (ismaxedskill(lf, f->val[0])) { if (isplayer(lf)) msg("This manual is too advanced for you."); } else { - giveskill(lf, f->val[0]); + if (!giveskill(lf, f->val[0])) { + // can't learn this skill. maybe you have f_noskill? + if (isplayer(lf)) msg("You are incapable of using this skill."); + } } } if (isplayer(lf)) { @@ -12156,7 +12160,8 @@ int real_takedamage(object_t *o, int howmuch, int damtype, int wantannounce) { getobconditionname(o, postdamname); // was it enough to change the status - if (!hasflag(o->flags, F_NOOBDAMTEXT) && strcmp(predamname, postdamname)) { + if (!hasflag(o->flags, F_NOOBDAMTEXT) && strcmp(predamname, postdamname) && + !streq(postdamname, "battered")) { // if it was melting, drop some water here if (damtype == DT_MELT) { if (hasflag(o->flags, F_EQUIPPED) ) { @@ -12202,11 +12207,11 @@ int real_takedamage(object_t *o, int howmuch, int damtype, int wantannounce) { } int fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int speed, object_t *firearm) { - return real_fireat(thrower, o, amt, where, speed, firearm, B_TRUE); + return real_fireat(thrower, o, amt, where, speed, firearm, B_TRUE, OT_NONE); } // throw speed/2 is the damage multiplier -int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int speed, object_t *firearm, int announcethrow) { +int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int speed, object_t *firearm, int announcethrow, enum OBTYPE fromspell) { char throwername[BUFLEN]; char throwernamea[BUFLEN]; char realthrowername[BUFLEN]; @@ -12984,7 +12989,7 @@ int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int sp msg("Your %s is now out of ammo.", noprefix(buf)); } */ - if (thrower && isplayer(thrower)) { + if (!fromspell && thrower && isplayer(thrower)) { angergodmaybe(R_GODMAGIC, 10, GA_HERESY); } diff --git a/objects.h b/objects.h index 35a7383..c47ba8c 100644 --- a/objects.h +++ b/objects.h @@ -278,7 +278,7 @@ object_t *splitob(object_t *o); int takedamage(object_t *o, int howmuch, int damtype); int real_takedamage(object_t *o, int howmuch, int damtype, int wantannounce); int fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int speed, object_t *firearm); -int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int speed, object_t *firearm, int announcethrow); +int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int speed, object_t *firearm, int announcethrow, enum OBTYPE fromspell); void timeeffectsob(object_t *o); int touch_battle_spoils(object_t *o); void trapeffects(object_t *trapob, enum OBTYPE oid, cell_t *c); diff --git a/shops.c b/shops.c index 0ca9c81..3a2cae9 100644 --- a/shops.c +++ b/shops.c @@ -427,7 +427,7 @@ enum SHOPRETURN shopdonate(lifeform_t *lf, object_t *vm, int starty, char *topte default: wantflag = F_NONE; wantoc = OC_NONE; break; } */ - o = doaskobject(lf->pack, "What will you donate?", &count, B_TRUE, B_FALSE, B_FALSE, '\0', vm, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(lf->pack, "What will you donate?", NULL, &count, B_TRUE, B_FALSE, B_FALSE, '\0', vm, MT_NOTHING, AO_NONE, F_NONE); // validate it if (o) { @@ -1123,7 +1123,7 @@ enum SHOPRETURN shopsell(lifeform_t *lf, object_t *vm, int starty, char *toptext // ask what to sell sprintf(buf, "What will you sell (you have $%d)?", countmoney(lf->pack)); - o = doaskobject(player->pack, buf, &count, B_TRUE, B_FALSE, B_FALSE, '\0', vm, MT_NOTHING, AO_NONE, F_NONE); + o = doaskobject(player->pack, buf, NULL, &count, B_TRUE, B_FALSE, B_FALSE, '\0', vm, MT_NOTHING, AO_NONE, F_NONE); if (!o) { return SR_BACK; } diff --git a/spell.c b/spell.c index d20d651..63abfb7 100644 --- a/spell.c +++ b/spell.c @@ -1740,7 +1740,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef if (targcell->obpile->first) { // select object from cell... - o = askobject(targcell->obpile, "Snatch which object", NULL, '\0', AO_NONE); + o = askobject(targcell->obpile, "Snatch which object", NULL, NULL, '\0', AO_NONE); } else { if (isplayer(user)) msg("There is nothing there to snatch!"); return B_TRUE; @@ -2708,6 +2708,11 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef for (i = 0; i < nretflags; i++) { f = retflag[i]; sprintf(buf, "%s, DR %d", getdamname(f->val[0]), f->val[1]); + if (strlen(f->text)) { + strcat(buf, "("); + strcat(buf, f->text); + strcat(buf, ")"); + } if (f->val[0] == curdt) { strcat(buf, " (current)"); } @@ -3704,7 +3709,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ // needs: // object = which object to convert if (!targob && isplayer(caster)) { - targob = doaskobject(caster->pack, "Convert which object to gold", NULL, B_FALSE, B_FALSE, B_FALSE, '\0', NULL, MT_METAL, AO_NONE, F_NONE); + targob = doaskobject(caster->pack, "Convert which object to gold", NULL, NULL, B_FALSE, B_FALSE, B_FALSE, '\0', NULL, MT_METAL, AO_NONE, F_NONE); } if (!targob) { fizzle(caster); @@ -3899,7 +3904,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (targcell->obpile->first) { // select object from cell... - targob = askobject(targcell->obpile, "Target which object", NULL, '\0', AO_NONE); + targob = askobject(targcell->obpile, "Target which object", NULL, NULL, '\0', AO_NONE); if (!targob) { failed = B_TRUE; } @@ -4304,7 +4309,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (targcell->obpile->first) { // select object from cell... - targob = askobject(targcell->obpile, "Target which object", NULL, '\0', AO_NONE); + targob = askobject(targcell->obpile, "Target which object", NULL, NULL, '\0', AO_NONE); if (!targob) { failed = B_TRUE; } @@ -4416,7 +4421,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ int range; int nsides = 6; - range = getspellrange(caster, spellid, power); + range = getspellrange(caster, spellid, power, NULL); if (caster) { // create a line of fire towards the target cell @@ -6267,7 +6272,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ o = targob; } else { // ask for an object - o = askobjectwithflag(caster->pack, "Enchant which object", NULL, '\0', AO_NONE, F_ENCHANTABLE); + o = askobjectwithflag(caster->pack, "Enchant which object", NULL, NULL, '\0', AO_NONE, F_ENCHANTABLE); } if (!o) { fizzle(caster); @@ -7065,7 +7070,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ o = targob; } else { // ask for an object - o = askobject(caster->pack, "Identify which object", NULL, '\0', AO_NOTIDENTIFIED); + o = askobject(caster->pack, "Identify which object", "You have nothing which needs identifying.", NULL, '\0', AO_NOTIDENTIFIED); } if (!o) { fizzle(caster); @@ -7567,7 +7572,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ int seen; if (targcell->obpile->first) { - targob = doaskobject(targcell->obpile, "Target which object", NULL, B_TRUE, B_FALSE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); + targob = doaskobject(targcell->obpile, "Target which object", NULL, NULL, B_TRUE, B_FALSE, B_FALSE, '\0', NULL, MT_NOTHING, AO_NONE, F_NONE); } if (!targob) { @@ -7645,21 +7650,46 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ } else { if (seen) msg("%s shudders for a moment.", obname); } - } else if (spellid == OT_S_ACCELMETAL) { + } else if ((spellid == OT_S_ACCELMETAL) || (spellid == OT_S_PROPELMISSILE)) { char oidbuf[BUFLEN]; + char obname[BUFLEN]; flag_t *f; if (!targob) { // ask for an object - targob = askobject(caster->pack, "Accelerate which object", NULL, 't', AO_NONE); + if (spellid == OT_S_ACCELMETAL) { + // TODO: handle ai casting + targob = askobject(caster->pack, "Accelerate which metal object", NULL, NULL, 't', AO_NONE); + } else { // ie. propel + if (isplayer(caster)) { + targob = askobject(caster->pack, "Propel which object", NULL, NULL, 't', AO_NONE); + } else { + lifeform_t *target; + target = gettargetlf(caster); + if (target) { + targob = getbestthrowmissile(caster, target); + } else { + fizzle(caster); + return B_TRUE; + } + } + } } - if (!targob || !ismetal(targob->material->id) ) { + + if (!targob || ((spellid == OT_S_ACCELMETAL) && !ismetal(targob->material->id)) ) { fizzle(caster); return B_TRUE; } + getobname(targob, obname, 1); + + if ((spellid == OT_S_PROPELMISSILE) && (getmaxthrowrange(caster, targob) <= 0)) { + if (isplayer(caster)) { + msg("%s is too heavy for you to throw!"); + } + return B_FALSE; // don't cost mana + } + if (isequipped(targob) && iscursed(targob)) { - char obname[BUFLEN]; - getobname(targob, obname, 1); msg("Your %s appears to be stuck to you!", noprefix(obname)); targob->blessknown = B_TRUE; return B_TRUE; @@ -7671,8 +7701,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ killflagsofid(caster->flags, F_THROWING); // 5 is the same as AT_VHIGH strength - // 10 = gun speed - fireat(caster, targob, 1, targcell, 8 + (power / 2) , NULL); + real_fireat(caster, targob, 1, targcell, 5, NULL, B_TRUE, spellid); } else if (spellid == OT_S_PLANESHIFT) { map_t *m; target = caster; @@ -7770,7 +7799,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ setcellknown(poss[i], PR_EXPERT); } // then ask to select one - targcell = real_askcoords("Travel where?", "Plantwalk->", TT_SPECIFIED, player, UNLIMITED, LOF_DONTNEED, B_FALSE, poss, nposs); + targcell = real_askcoords("Travel where?", "Plantwalk->", TT_SPECIFIED, player, 0, UNLIMITED, LOF_DONTNEED, B_FALSE, poss, nposs); if (!hasobofclass(targcell->obpile, OC_FLORA)) { targcell = NULL; } @@ -7967,7 +7996,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ msg("Robots are immune to charming."); break; case E_ALREADYUSING: - msg("%s is already charmed by another!", targetname); + msg("%s is already charmed by another!", targname); break; default: msg("You cannot possesss %s.", targname); @@ -8132,7 +8161,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ } else if (targcell->obpile->first) { // no lifeform there targob = NULL; // select object from cell... - targob = askobject(targcell->obpile, "Target which object", NULL, '\0', AO_NONE); + targob = askobject(targcell->obpile, "Target which object", NULL, NULL, '\0', AO_NONE); if (targob) { if (ismetal(targob->material->id)) { @@ -8879,7 +8908,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ o = targob; } else { // ask for an object - o = askobject(caster->pack, "Mend which object", NULL, '\0', AO_DAMAGED); + o = askobject(caster->pack, "Mend which object", NULL, NULL, '\0', AO_DAMAGED); } if (!o) { fizzle(caster); @@ -9459,6 +9488,15 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ msg("%s looks very lethargic!", targname); } modstamina(target, -amttolose); + } else if (spellid == OT_S_REFRACTION) { + flag_t *f; + f = addtempflag(caster->flags, F_EVASION, 15+(power*5), NA, NA, NULL, FROMSPELL); + f->obfrom = spellid; + if (isplayer(caster)) { + msg("Your body seems to shimmer and bend!"); + } else if (cansee(player, caster)) { + msg("%s%s body seems to shimmer and bend!", castername, getpossessive(castername)); + } } else if (spellid == OT_S_REPELINSECTS) { // just announce if (isplayer(caster)) { @@ -9472,7 +9510,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (!targob) { if (isplayer(caster)) { // ask for an object - targob = askobjectwithflag(caster->pack, "Replenish which object", NULL, '\0', AO_NONE, F_REPLENISHABLE); + targob = askobjectwithflag(caster->pack, "Replenish which object", NULL, NULL, '\0', AO_NONE, F_REPLENISHABLE); } } if (!targob) { @@ -9530,7 +9568,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ lifeform_t *newlf; if (!targob) { // select object from cell... - targob = askobjectwithflag(targcell->obpile, "Revive which corpse", NULL, '\0', AO_NONE, F_CORPSEOF); + targob = askobjectwithflag(targcell->obpile, "Revive which corpse", NULL, NULL, '\0', AO_NONE, F_CORPSEOF); if (!targob) { fizzle(caster); return B_TRUE; @@ -10398,7 +10436,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ // object = which potion to throw // cell = where to throw the potion if (!targob && isplayer(caster)) { - targob = askobjectwithflag(caster->pack, "Superheat which potion", NULL, 'q', AO_NONE, F_DRINKABLE); + targob = askobjectwithflag(caster->pack, "Superheat which potion", NULL, NULL, 'q', AO_NONE, F_DRINKABLE); } if (!targob) { fizzle(caster); @@ -10671,7 +10709,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (where && haslos(caster, where)) { if (where->obpile->first) { // select object from cell... - targob = askobject(where->obpile, "Target which object", NULL, '\0', AO_NONE); + targob = askobject(where->obpile, "Target which object", NULL, NULL, '\0', AO_NONE); if (!targob) { failed = B_TRUE; } @@ -10747,7 +10785,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ // otherwise throw it there - but speed is based on // caster's INTELLIGENCE, not strength like normal. addflag(caster->flags, F_TKTHROW, A_IQ, SK_SS_MENTAL, NA, NULL); - fireat(caster, targob, targob->amt, targcell, power, NULL); + real_fireat(caster, targob, targob->amt, targcell, power, NULL, B_TRUE, spellid); killflagsofid(caster->flags, F_TKTHROW); // note that we use fireat() rather than throwat() to avoid // calling taketime() twice. @@ -11851,7 +11889,7 @@ void fizzle(lifeform_t *caster) { enum OBTYPE getfirstwizspell(enum SPELLSCHOOL school) { enum OBTYPE firstspell = OT_S_MANASPIKE; switch (school) { - case SS_AIR: firstspell = OT_S_JOLT; break; + case SS_AIR: firstspell = OT_S_PROPELMISSILE; break; case SS_COLD: firstspell = OT_S_CHILL; break; case SS_FIRE: firstspell = OT_S_SPARK; break; case SS_DEATH: firstspell = OT_S_STENCH; break; @@ -12464,10 +12502,15 @@ enum SKILLLEVEL getspellskill(lifeform_t *lf, enum OBTYPE spellid) { return slev; } -int getspellrange(lifeform_t *lf, enum OBTYPE spellid, int power) { +int getspellrange(lifeform_t *lf, enum OBTYPE spellid, int power, int *minrange) { objecttype_t *st; int range = UNLIMITED; + // default + if (minrange) { + *minrange = 0; + } + // If we can _will_ this to occur then we might have a set // range if (lf) { @@ -12488,6 +12531,9 @@ int getspellrange(lifeform_t *lf, enum OBTYPE spellid, int power) { f = hasflag(st->flags, F_RANGE); if (f) { range = f->val[0]; + if (minrange && (f->val[1] != NA)) { + *minrange = f->val[1]; + } } } @@ -13084,6 +13130,8 @@ cell_t *validatespellcell(lifeform_t *caster, cell_t **targcell, int targtype, e objecttype_t *sp; int needlos = B_TRUE; enum LOFTYPE needlof = LOF_NEED; + int minrange = 0; + if (!caster) { return *targcell; @@ -13105,7 +13153,7 @@ cell_t *validatespellcell(lifeform_t *caster, cell_t **targcell, int targtype, e needlos = B_FALSE; } - maxrange = getspellrange(caster, spellid, power); + maxrange = getspellrange(caster, spellid, power, &minrange); if (*targcell) where = *targcell; @@ -13146,6 +13194,13 @@ cell_t *validatespellcell(lifeform_t *caster, cell_t **targcell, int targtype, e } where = NULL; } + if (where && (getcelldist(caster->cell, where) < minrange)) { + // out of range + if (isplayer(caster) && !frompot) { + msg("Too close - min range is %d.",minrange); more(); + } + where = NULL; + } if (!frompot && where && where->lf && haslos(caster, where) && isplayer(caster) && areallies(caster, where->lf)) { // warn before targetting yourself! @@ -13189,7 +13244,7 @@ cell_t *validatespellcell(lifeform_t *caster, cell_t **targcell, int targtype, e snprintf(buf, BUFLEN, "Where will you target your %s [max range %d]?",sp->name, maxrange); } snprintf(buf2, BUFLEN, "%s->",sp->name); - where = askcoords(buf, buf2, targtype, caster, maxrange, needlof, needlof ? B_TRUE : B_FALSE); + where = real_askcoords(buf, buf2, targtype, caster, minrange, maxrange, needlof, needlof ? B_TRUE : B_FALSE, NULL, 0); if (!where) { char ques[BUFLEN]; int ch; diff --git a/spell.h b/spell.h index 8943618..d3d172b 100644 --- a/spell.h +++ b/spell.h @@ -28,7 +28,7 @@ int getspellpowerstatmod(lifeform_t *lf, enum SPELLSCHOOL school, enum ATTRIB *a enum SPELLSCHOOL getspellschool(enum OBTYPE spellid); enum SPELLSCHOOL getspellschoolknown(lifeform_t *lf, enum OBTYPE spellid); enum SKILLLEVEL getspellskill(lifeform_t *lf, enum OBTYPE spellid); -int getspellrange(lifeform_t *lf, enum OBTYPE spellid, int power); +int getspellrange(lifeform_t *lf, enum OBTYPE spellid, int power, int *minrange); int getstamcost(lifeform_t *lf, enum OBTYPE oid); char *getspelldesc(enum OBTYPE spellid, int power, char *buf); int getworkablematerials(lifeform_t *lf, enum SKILL skid , enum MATERIAL *repairablemats, int *cutoffpct, int *nmats);